Python BackendHub
7.36K subscribers
305 photos
46 videos
11 files
427 links
Learning python & Backend Engineering, with Mani!

Youtube: https://www.youtube.com/@GitOverHere
Github: https://github.com/ManiMozaffar
Linkedin: https://www.linkedin.com/in/manimozaffar

تبلیغات نداریم

Admin: @Mani_nikou
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
یکم حق بشنوید از پرایم
@PyBackendHub
👍286
علیرضا یه ابزار درست کرده برای نوشتن ماژول های پایتون با زبان Go.
یعنی چیزی شبیه به pyo3 اما خب برای گو.

https://github.com/alireza-hariri/go4py

@PyBackendHub
👏21👍7👎2🙏1
ری اکت که خب واسه وب هست
و react native برای گوشی هست. که تقریبا ری اکته ولی برای native application ها. که خب طبیعتا نمیتونید اینو بذارین رو مرورگر چون دپندنسی هایی داره که رو دیوایس گوشیه.

حالا react native web میاد که میذاره شما اونی که تو component های native ای که نوشتی رو دوباره تو وب ازش استفاده کنی 😂

احساس میکنم باید یک فریم ورک بدم به اسم react native web native :))

@PyBackendHub
😁53🤪4👍2
دو تایپ چکر جدید اومدن که جفتشون با راست نوشته شدن 😍

یکی از astral
https://github.com/astral-sh/ty

یکی هم از meta
https://github.com/facebook/pyrefly

بالاخره دارن مارو از دست pyright و mypy خلاص میکنن‌ : )

@PyBackendHub
20👍6🔥6🕊2
یک پروداکت MVP خیلی قشنگ دیدم که ۲ تا سافتور انجینر نوشتنش
https://www.hypertune.com/

فیچر فلگی هست که تایپ سیفه!‌ اگه نمیدونید فیچر فلگ چیه توصیه میکنم گوگل کنید. ولی تایپ سیف بودنش یعنی چی؟ یعنی شما یک سری فلگ میسازین, بعد از روش تایپ میسازه براتون. مثلا میدونه فلگ x ورودی تایپ y و z میگیره و خروجی مثلا بولین میده.

قبلا تو کورس پرسونال برندینگ گفته بودم سعی کنید بلاگ و اینا نسازین چون چالش و ارزشی نداره :) خیلیا پرسیده بودن چی بسازیم. کافیه به اطرفاتون نگاه کنید و سعی کنید یک مشکلی که دولوپر ها دارن رو حل کنید.
@PyBackendHub
👍15
من هرچی تو حوزه گیم بیشتر تحقیق میکنم بیشتر جذبش میشم اینقدر که جزئیات داره. اخیرا ویدیو و کنفرانس های زیادی رو دیدم راجب اینکه بازیای آنلاین (مثلا شوتینگ) چطوری تجربه زنده رو میدن. مثلا شما میبینی یک آبجکت (یا پلیر مثلا) داره حرکت میکنه این تو بک گراند چطوری کار میکنه.اصلا چیت چیه و چطور چیت پیاده سازی میشه. چطوری مثلا اشیای رندوم جلوتون تو مپ ظاهر میشه که تقریبا consistent هست. مثلا شما رد میشین از یک جایی پر از چمن و رندوم گل هست. ترتیب کنار گرفتن اینا چطوریه. آیا همه اینا واقعا هاردکد میشن پیکسل به پیکسل؟ یا on-fly جنریت میشن؟ خیلی تاپیک های جالبیه در کل.

برای اینکه با کرنل آشنا بشین توصیه میکنم یک چیت بنویسید برای یک بازی رو لینوکس. خیلی کمکتون میکنه که عمق دانشتون بیشتر شه.

@PyBackendHub
👍69❤‍🔥7🔥43
#آف_تاپیک‌

خیلی برام عجیبه که تو ایران خیلی ها مشتاق جنگ کردن هستن و نمیخوان آتش بس یا صلح باشه. و فکر میکنن ایران باید جنگ رو ببره انگار یک مسابقه ورزشیه.

یک نقل قول خیلی خفن ببینید از برتراند راسل :)

@PyBackendHub
👎57👍47🤔4🤮3
تو نسخه های ۳ اتفاقات جالبی نیافتاده ظاهرا :))
@PyBackendHub
😁23🤣131
یه نگاهی کلی به سورس کد نوبیتکس انداختم و واقعاً اسپاگتی بود. تو این یک سال فهمیدم که خروجی یک تیم به تعداد نفراتش ربطی نداره؛ ممکنه ۵ نفر آنقدر بهینه‌کار باشن که ۵۰۰ نفر هم نتونن بهشون برسن. نکته کلیدی چیه؟ بهینه‌سازی پروسه‌ها و حذف کارهای وقت‌گیره.

منظورم چیه؟ وقتی تصمیم می‌گیرید یک فیچر بنویسید، باید ببینید چقدر از وقتی که صرف کدنویسی می‌کنید به کسب‌وکار سود می‌رسونه، نه صرفاً پیچیدگی تکنولوژیک.

مثلاً به جای اینکه تیم فرانت و بک‌اند دائم با فایل پست‌من ور برن، بک‌اند می‌تونه OpenAPI رو خودکار تولید کنه و موقع دیپلوی سرور تایپ‌سیف بگیره. بعد تیم فرانت اون رو Pull می‌کنه و یک کلاینت HTTP اتوماتیک می‌سازه. این ساده‌ترین و بی‌دردسرترین راهه. قبل از هر ریلیز، یک بار تایپ‌ها رو Pull می‌کنیم و اگه TypeScript ارور نده یعنی Breaking Change نداریم. این تسک شاید ۲ ثانیه طول بکشه، اما اگه دستی چک بشه می‌تونه ساعت‌ها وقت و هزینه کسب‌وکار رو هدر بده. سوال مصاحبه‌ای که ۹۰٪ کاندیدای فرانت اشتباه جواب میدن هم دقیقاً اینجاست!

حالا فرض کن تیم فرانت می‌خواد پاسخ‌های خطایی که Status ۲۰۰ نیست رو ترجمه کنه. تیم بک‌اند می‌تونه هر دفعه که یک کد خطای جدید اضافه می‌کنه، اینو به فرانت اطلاع بده یا اصلاً کل ترجمه رو بسپره به بک‌اند (که اشتباهه؛ ترجمه برای End Userه نه برای کلاینت). راه بهتر اینه که OpenAPI رو Extend کنیم و Errorها رو اونجا تعریف کنیم، یه discriminator بذاریم مثلاً error_type. حالا تیم فرانت خیلی راحت می‌تونه همه حالت‌های خطا رو هندل کنه و error_type رو مستقیم به یک کلید ترجمه تبدیل کنه. این پروسه که قبلاً ساعت‌ها طول می‌کشید، با همین روش می‌تونه خیلی سریع بشه.

ممکنه اون کلید ترجمه تو یه سری زبان‌ها تعریف شده باشه و تو یه سری، نه. یا از اول تو فایل پیش‌فرض (مثلاً انگلیسی) یادت رفته باشه تعریفش کنی. اینجا می‌تونیم با استفاده از کتابخونه‌ی intl-t یک تایپینگ خیلی قوی‌تر کنار i18n داشته باشیم و جلوی این مشکلات رو بگیریم!

کلا هروقت دارین زیاد با یک مشکل دست و پنجه نرم میکنید دنبال راه حلی باشید که با اون مشکل دیگه دست و پنجه نرم نکنید. و اینطوری شما تبدیل به اون تیم خیلی بهینه میشید.
@PyBackendHub
27👍6👌2👎1
یک نکته دیگه هم که من همیشه خیلی بهش اعتقاد دارم اینه که شما باید از تایپ سیستم یک زبون استفاده کنی که invariant های برنامه ات رو داخلش جا بدی. صرفا اگه قراره تایپینگ داشته باشی دلیل به maintainable بودن کدت نیست!
مثلا از من خواسته شده که یک دیتاکلس بسازم که state یک درخواست و دیتاش رو بذارم اونجا.
خب یک درخواست یا میتونه تو استیت اولیه باشه که هنوز اتفاقی نیفتاده. یا در حال لود شدن هست. یا دیتا رو میگیره. یا ارور میگیره.

اینجا invariant برنامه من چیه؟
اگه چیزی در حال لود شدن باشه میتونه دیتا داشته باشه؟ نه.
اگه ارور بیاد ایا دیتا اصلی رو دارم که انتظارشو داشتم؟ نه.
و ...

شما یا میتونید به سبک بالا بیاین همرو تو یک دیتاکلس بذارین و همه جا if elif elif استفاده کنید.
یا به سبک پایین کد بزنید و به جای اینکه ۲۴ حالت داشته باشین درواقع فقط ۴ حالت دارین.

تو این ویدیو از دوره ام بیشتر راجبش حرف زده بودم یک سال پیش.
@PyBackendHub
21👍8🤔1👌1
Forwarded from ‌BenDev
رفقا من نمی‌خواستم اینقدر صریح اینو بگم چون استثنا زیاد وجود داره، منتهی من چند تا کد از شرکت های به اصطلاح پولدار تک ایرانی دیدم و مجبورم بگم.

به صورت یه قاعده کلی جدا سعی کنید از فلسک و جنگو دوری کنید، با همون fast api نود درصد بیزینس های پایتونی باید اوکی باشه، modern python استفاده می‌کنه انعطاف پذیر هم هست دیگ، بی خیال لطفا

@BenDevelop
👍40👎29🤔4💩21🤣1
‌BenDev
رفقا من نمی‌خواستم اینقدر صریح اینو بگم چون استثنا زیاد وجود داره، منتهی من چند تا کد از شرکت های به اصطلاح پولدار تک ایرانی دیدم و مجبورم بگم. به صورت یه قاعده کلی جدا سعی کنید از فلسک و جنگو دوری کنید، با همون fast api نود درصد بیزینس های پایتونی باید…
در خصوص پست قبلی کاملا باهاش موافقم. در جهت پست دو روز پیشمه. شما وقتی با fastapi کد میزنید خیلی بهینه تر و سریع تر جلو میرید (به جز چند هفته اول که درگیر زیرساخت و boilerplate پروژه هستین)
چرا؟ چون یک سری مسائل که همیشه باهاش سرو کله میزدیم تو جنگو دیگه تو فست وجود نداره.

۱. نیاز نیست خط به خط پروژه رو بخونید و ران کنید و تست کنید. تایپینگ قوی وجود داره و کدتون اگه ارور تایپ نده و با یک دور چشمی نگاه کردن مشکلی نداشته باشه احتمالا اوکیه و با ران اول اجرا میشه.

۲. جیسون اسکیما و openapi بهتری داره. تو جنگو یک لایبری داریم که خیلی خوب پیاده سازی نشده. و خیلی فیچر های بیسیک رو نداره از جیسون اسکیما. مثلا union یا tagged union یا .... همین که شما out of box یک openapi بسیار دقیق و تایپ سیف دارید, به توسعه کلاینتتون خیلی کمک میکنه.

۳. او ار ام خیلی مجیکی داره و وقتی بخواین کوئری بنویسید اذیتتون میکنه همیشه و وقتتونو الکی میگیره. ولی sqlalchemy بسیار نزدیک به sql هست.

خیلی موارد بیشتری هست...

ولی ابزار مهم نیست. یک برنامه نویس نباید بایاس باشه

خب شما با پایتون ۱ کد بزن. بحث بایاس نیست ولی وقتی دو ابزار تو یک اکوسیستم وجود دارن که یکیش بهینه تر و جدید تره منطقی نیست از اون قدیمی تره استفاده بشه (مگه سرویس های لگاسی که از ۱۰ ها سال پیش در توسعه بودن).
و ابزار خیلی مهمه تو بهینه بودن. تو ۲ پست قبلش بهش اشاره کرده بودم! اگه اینو هنوز میگید یعنی ۲ پست قبلیو متوجه نشدید.

@PyBackendHub
👍185👎5🤔1
لایبری که چند وقت پیش نوشته بودم ۱۸۹ استار گرفته و یک عالمه دانلود روزانه داره. خیلی ممنون بابت استقبالتون.

https://github.com/ManiMozaffar/aioclock

A modern python scheduling framework with dependency injection and modular integration support. Alternative for Rocketry or apscheduler


دویست استارمون نشه؟

@PyBackendHub
27👍8👏3
واقعا این روزا hiring خیلی سخت شده.
تعداد زیادی از candidate ها فقط یک اسکرین chatgpt کنارشون هست و تمام assignment و live coding هارو میدن بهش‌ :))

تشخیصش که به شدت آسونه. یک کاندید سنیور فرانت اند داشتیم با ۷ سال سابقه, تو لایو کد ازش خواستیم یک کمپوننت ری اکت بنویسه. یعنی یک همچین چیزی


export const FooComponent = () => {
return <div>Hello</div>;
};


بزرگوار اینم نمیتونست بنویسه :))

@PyBackendHub
🤣35🤷‍♂6💩5👎21🤔1🌚1
خلاصه پروداکتا یک وقتا به یک جایی میرسن که هر تغییری بدی یکی یک شکایتی میکنه :))
وقتی باگ ها تبدیل به فیچر میشن
@PyBackendHub
🤣35😁51
میخوام یک تولید محتوا کنم، پنج قسمت مصاحبه به زبون انگلیسی برای پوزیشن بک اند پایتون (میدلول و سنیور) که تمرین و ریسورس خوبی باشه برای کسایی که میخوان مهاجرت کنند
چنانچه تمایل به شرکت دارید، به ایدی زیر پیام بدید

@Mani_nikou

داخل پیامتون، سطح زبان انگلیسی (بین A1 تا C2)، رزومه و ادرس لینکدینتون رو بفرستید.


@PyBackendHub
40🔥10
از کانال های مختلف دیدم پست میذارن که بله تایپینگ کد شما رو بیشتر میکنه کثیف تر میکنه اگه میخواستیم تایپ بزنیم که میرفتیم سمت C و این حرفا. اولا که C تایپ سیستم قوی نداره. تایپ سیستم بسیار ساده ای داره. پس statically typed بودن یا نبودن یک زبون رو خوب/بد بودن تایپ سیستمش تاثیری نمیذاره. پس اگه انتخابتون C هست برای اینکه تایپ سیستم قوی داشته باشین انتخاب درستی نیست!‌

ثانیا تایپینگ خودش یک داکیومنته. مثلا شما فکر کنید من یک سیستم نوشتم که ۱۰ تاسیستم مختلف رو integrate میکنه و یک API واحد میده برای هر ۱۰ تاشون. من یا میتونم ۱۰ صفحه داکیومنت بنویسم که اگه خواستیم یک سیستم جدید اضافه کنیم چه دپندسی هایی وجود داره یا اینکه میتونم یک Enum داشته باشم به اسم Service و همه جا با اون Enum بیام exhaustive check انجام بدم.

مثالش, من اینجا فقط یک سرویس Digikala دارم. و برای دیجی کالا یک رفتاری رو تعریف کردم و چک کردم سرویسی نباشه که این رفتار براش تعریف نشده باشه (`assert_never`)


def do_foo(service: Service):
match service:
case Service.DIGI_KALA: ...
case _: assert_never(service)


وقتی من یک سرویس جدید اضافه کنم به Enum ام اگه من کد رو کمپایل کنم یا تایپ چکر رو کد ران کنم و کدم کمپایل شه, کلی ارور تایپینگ میبینم که میگه شما این دپندنسی رو تعریف نکردی. مثل همین فانکشن. اون موقع به محض اینکه من تمام ایرادات تایپینگ رو برطرف کنم PRام تموم شده.

کد خواناییشو از دست میده؟ نه واقعا!‌شما اگه خوانایی کد رو به تعداد خط ملاک قرار میدین, پس کد ننویسید که خیلی خوانا و تمیز باشه. کد خوانا یعنی من کدی رو بخونم و بفهمم چیکار میکنه و constraint های اون کد چیه و تو موقع استفاده ازش اشتباه نکنم.

یک مثال دیگه بازم تو پست بعدی میزنم
@PyBackendHub
👍31👎43
یک مثال دیگه میزنم براتون. بین Better way و shitty way کدوم خوانا تره؟ کدوم تعداد خطوط کمتری داری؟ حالا تو پست بعدی طرز استفادشونو ببینید!

@PyBackendHub
👍151👎1
Python BackendHub
یک مثال دیگه میزنم براتون. بین Better way و shitty way کدوم خوانا تره؟ کدوم تعداد خطوط کمتری داری؟ حالا تو پست بعدی طرز استفادشونو ببینید! @PyBackendHub
حالا طرز استفاده رو ببینید... بله تعداد خطوط‍ FooComponent خیلی کمتره. ولی در عوض هم شکننده تره هم ناخوانا تر. چرا شکننده تره؟‌چون اگه هم loading=true باشه هم data داشته باشه تو فرانت Loading Data... رو نشون میده دیتا هم میاد زیرش 😁 حالا باید بیای این کیس رو هندل بکنی!

بعضی کد ها اینقدر بد از تایپینگ استفاده کردن که شما وقتی کد رو میخونی باید رمزگشایی کنی ببینی هدف طرف چی بوده. اینکه صرفا شما میگی این variable تایپش string عه دلیل نمیشه کدتون تایپینگ خوبی داره!

@PyBackendHub
👍152👎1
یک منبع خیلی خوب برای اینکه واقعا TLS 1.2 رو درک کنید
بایت به بایت بهتون توضیح میده چه اتفاقی میفته :)

@PyBackendHub
👍102