Python BackendHub – Telegram
Python BackendHub
7.51K subscribers
314 photos
46 videos
11 files
432 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
به نظرتون یک فانکشن در چه صورتی خوبه؟ چه فاکتوری وجود داره که میگین عجب فانکشن خوبی؟ مثلا به قول مارتین بیشتر از ۱۴ خط باشه bad smell عه؟ 😁
@ManiFoldsPython
👍3
Python BackendHub
به نظرتون یک فانکشن در چه صورتی خوبه؟ چه فاکتوری وجود داره که میگین عجب فانکشن خوبی؟ مثلا به قول مارتین بیشتر از ۱۴ خط باشه bad smell عه؟ 😁 @ManiFoldsPython
تو کامنتا تا حدی اشاره کردن, نظره خودم:

اینکه بخواین با خط کش کدتونو اندازه بگیرین بنظره من ملاک کلین کدی نیست. مثلا میگن اگه اول فانکشن if بیاد پس function بدیه. اوکی متوجهم چرا اینو میگن چون میتونست شرطه به نحوی تو خود arg ها بیاد ولی یک وقتا پیش میاد. یا مثلا میگن اگه ۳ تا nested بخوره پس فانکشن بدیه. اینا هیچکدوم objective نیستن و ممکنه پیش بیان و کاملا هم منطقی باشن و ملاک تمیز بودن کدمون نیست.

ملاک تمیزی یک فانکشن بنظره من, چهار چیزه:

۱. Composable بودن اون تابع
اگه متوجه نشدین لینک زیر رو بخونید
https://en.wikipedia.org/wiki/Function_composition_(computer_science)

۲. فقط یک کار انجام بده.

۳. وقتی signature و اسم فانکشن رو برای اولین بار میخونیم و مقایسش میکنیم با کد فانکشن, سورپرایز نشیم!

۴. ساید افکتی نداشته باشه که از رو اسم و signature فانکشن مشخص نباشه.

@ManiFoldsPython
👍17
یکی از جاهایی که خیلی میتونید یاد بگیرین github هست
برین یک لایبری خوب
یک pr که داره مرج میشه
دیسکاسشنش رو بخونید
یک لایبری رو برین که متوجه discussion اش بشید. مثلا ML نباشه
مثلا اگه بک اند کارین میتونید برین PR های جنگو و فست و فلسک و سلری و غیره رو بخونید.

اینطوری باعث میشه هم
۱. کالچر review کردن رو یاد بگیرین
۲. کلی چیز یاد میگیرین از maintainer های اون لایبری
۳. خوده اون لایبری هم دیپ تر میشین. مثلا اگه سلریه بروکر هارو دیپ تر میشین.

سعی کنید PR های بزرگو بخونید نه اونی که یک خط مشکل داکو رو درست کرده 😁 از تایتل ‍PR و تعداد دیسکاسشن هاش مشخصه.

@ManiFoldsPython
👍18
Channel name was changed to «Python BackendHub»
Channel photo updated
در قسمت هشتم پلی لیست دیزاین پترن
تو این قسمت State Pattern رو بررسی کردیم, توضیح دادم که چرا این پترن خیلی خوبه و میتونه encapsulation تمیزی بهتون بده برای هر state از context و سیستمتون و البته گفتم چرا design pattern ناقصی هست و ضعفش چیه که مقدمه ای شد برای ویدیو بعدی, پترن Type State که بنظرم بهترین ویدیو این پلی لیسته خواهد شد.

لینک ویدیو:
https://youtu.be/wGAzhp8ljAk

لینک گیتهاب دوره دیزاین پترن; جزوه و مثال های دوره همه اینجا ذخیره خواهند شد:
https://github.com/ManiMozaffar/design-101


@PyBackEndHub
👍6
کاربرد گروهو میخوام تغییر بدم
به گروهی برای رفع مشکل و بحث در خصوص Backend Engineering و پایتون

مرجعی هم بشه که بتونید کلا سوالات flask یا kafka یا rabbitmq یا FastAPI یا ORM هرچیز دیگه ای که ممکنه براش community پیدا نکنید. لینک:

https://news.1rj.ru/str/PythonFellow

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

@PyBackEndHub
👍133
Rebrand کردیم
اشتباهی لیو ندین 😅
ManiFoldsPython سابقیم :))
بهتر شد؟ بنظره خودم اره.

@PyBackEndHub
👍25👎25😱2😁1
https://github.com/airtai/faststream

این لایبری رو برای کار کردن با بروکر ها چند وقت پیش معرفی کردم و الان داره به جاهای خیلی خوبی میبرسه جوری که وسوسه شدم ازش استفاده کنم 👌

@PyBackEndHub
🔥4👍1
ایراد دیزاین این کد چیست؟

موضوع ویدیو بعدی 🔥🔥
@PyBackEndHub
💩7🤔3
Python BackendHub
ایراد دیزاین این کد چیست؟ موضوع ویدیو بعدی 🔥🔥 @PyBackEndHub
تو کامنتا اشاره کردن جوابش خیلی راحته اینه که یک کلس بنویسیم و تو کاسنتراکتورش init کنیم اپ رو. و این یک کاسنپت خیلی مهم پشتشه. که دقیقا چه اتفاقی میفته باعث بهتر شدن کیفیت کد میشه.
خیلی وقتا غریزی اینکار رو انجام میدیم
خیلی وقتا هم انجام نمیدیم!‌مثل کسایی که لایبری firebase رو نوشتن تو پایتون!

موضوع ویدیو بعدی TypeState هست که عمیق تر به این ۵ خط کد میپردازم و یوزکیس های خیلی بیشتری رو میگم که خیلی کم میبینم تو یک سری کد ها رعایت شده این کانسپت به خوبی.
@ManiFoldsPython
🤓6👍1
اینم یک مثال دیگه که تو ویدیو بهش میپردازم.

ایراد این کد چیست؟

@ManiFoldsPython
💩5🤔4
Python BackendHub
اینم یک مثال دیگه که تو ویدیو بهش میپردازم. ایراد این کد چیست؟ @ManiFoldsPython
ایراداتی گرفتن از کد ولی هیچکس اشاره نکرد این کد امن نیست!

این کد میتونه به دلایل خیلی زیادی fail شه
اگه ایمیل واقعا ایمیل نباشه
اگه mime multipart خوب ساخته نشه
اگه noscript و content خالی باشن
اگه email client لاگین نشه

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


حالا سوال اینجاست که چیکار میتونیم کنیم؟
این موضوع ویدیو بعدیه. حتما توصیه میکنم ببینید این ویدیو رو. این دیزاین پترنی که بهتون معرفی میکنم سبک کد زنی منو تغییر داده و چند باریم پست گذاشتم راجبش ولی شاید خیلی خوب بهش نپرداختم.

@ManiFoldsPython
👍7
Python BackendHub
در قسمت هشتم پلی لیست دیزاین پترن تو این قسمت State Pattern رو بررسی کردیم, توضیح دادم که چرا این پترن خیلی خوبه و میتونه encapsulation تمیزی بهتون بده برای هر state از context و سیستمتون و البته گفتم چرا design pattern ناقصی هست و ضعفش چیه که مقدمه ای شد…
در قسمت نهم پلی لیست دیزاین پترن و مهم ترین قسمت این پلی لیست, پرداختم به دیزاین پترن Type State. پترنی که سبک کد نویسی من رو به شدت تغییر داد و هر روز ازش استفاده میکنم

مفاهیم زیر رو ابتدا توضیح دادم:
- Don't validate, parse!
- Type safe operations

و توضیح دادم چطور به صورت غریزی و ابتدایی از type state استفاده میکنیم. همینطور یوزکیس های خیلی بهتر و advance تر هم توضیح دادم و دلیل محبوبیت Pydantic هم توضیح دادم.
با Type state pattern کد هاتون به شدت باگ کمتری خواهند داشت پس اگه دوست دارین کمتر با باگ سروکله بزنید این ویدیو رو از دست ندید. حتما توصیه میشه قبل از دیدن این ویدیو, ویدیو قبلی راجب state pattern هم ببینید که ۱۰ دقیقه هست.


لینک ویدیو:
https://youtu.be/DwAQ6dm-Vn8

لینک گیتهاب دوره دیزاین پترن; جزوه و مثال های دوره همه اینجا ذخیره خواهند شد:
https://github.com/ManiMozaffar/design-101

@PyBackEndHub
7
Python BackendHub
در قسمت نهم پلی لیست دیزاین پترن و مهم ترین قسمت این پلی لیست, پرداختم به دیزاین پترن Type State. پترنی که سبک کد نویسی من رو به شدت تغییر داد و هر روز ازش استفاده میکنم مفاهیم زیر رو ابتدا توضیح دادم: - Don't validate, parse! - Type safe operations و توضیح…
دوستانی که ویدیو های اخیر رو دیدن خیلی ممنون میشم اگه نظرشون و فیدبکشون رو داشته باشم. وب کم گرفتم که تصویرم مستقیم باشه, صدا رو هم خیلی زیاد و باکیفیت تر کردم.

خیلیام نمیدونن من تاحالا چه محتواهایی تولید کردم.
دوره دیزاین پترن - ۹ قسمت منتشر شده. تقریبا ۱۵ قسمت دیگه ازش مونده. تصمیم گرفتم functional pattern و بقیه پترن هارو تو یک پلی لیست دیگه قرار بدم.

دوره تست نویسی - ۸ قسمت منتشر شده. ۱۰ قسمت دیگه باقی مونده

دوره رشد مسیر شغلی و اموزش رزومه نویسی - ۴ قسمت منتشر شده. ۲ قسمت دیگه باقی مونده

تلاشمو میکنم هفته ای ۱-۲ ویدیو بدم (جمعه تا یک شنبه).
هفته گذشته چون ویروس عجیبی گرفتم نبودم کلا :))

@PyBackEndHub
👍13👏53🔥1
Python BackendHub
اینم یک مثال دیگه که تو ویدیو بهش میپردازم. ایراد این کد چیست؟ @ManiFoldsPython
کد به همچین شکلی تغییر کرد در نهایت که تو ویدیو توضیح دادم چه قدر فواید خوبی داره این سبک کد زدن:



def send_email(client: MailClient, rec_addr: EmailString, noscript: str, content: str):
email = client.build_email_body(noscript, content, rec_addr)
client.send_emails([email])


این کد به شدت امنه و فقط به شرطی fail میشه که یا خط دوم (ساخت ایمیل) اتفاق نیفته و یا تو خط سوم یک دفعه مشکل کانکشن پیش بیاد (کلاینت لاگین شده تو constructorاش و کاملا type safe هست)

@PyBackEndHub
👍5👎2🤔2
اینم اضافه کنم Typestate به شدت بین rust developer ها محبوبه و توصیه میکنم بعد ویدیو مقاله زیر رو هم بخونید

https://cliffle.com/blog/rust-typestate/#what-are-typestates

@PyBackEndHub
👍6
از شکوه sqlalchemy اینه که شما میتونید compiler ORM رو extend کنید و خودتون compiler کاملا کاستوم بنویسید که اصلا تو لایبری وجود نداشته. نکته خفن ترش اینه که میتونید تعیین کنید این کامپایلر کاستوم شما تو هر دیتابیس (مثلا pg یا ‍sqllite) چطوری ران شه پس تستون رو همچنان بدون دوپلیکت کردن query ها رو sqllite ران کنید و به شدت سریعتر شه در عینه حال رو pg با استفاده از فانکشن های pg ران شه که پرفومنس بهتری داره.

واقعا این قابلیت عجیب ترین و خفن ترین چیزی بود که دیدم!

https://docs.sqlalchemy.org/en/20/core/compiler.html#synopsis

@PyBackEndHub
🔥8🤔2👍1
قول هفته ای دو ویدیو رو دادم. یک ویدیو اش میپردازم به دیزاین پترن. ویدیو دومو پیشنهاد بدین چه چیزی کار کنم تو کامنتا 👇👇 بعدش رای گیری میذارم بین گزینه ها.

تو ذهن خودم این پیشنهادا هست:
۱. انجام coding assigment های مصاحبه ها
۲. دوره faststream لایبری event streams با بروکر های مختلف
۳. دوره cloud instrumentation با opentelemetr
‍۴. دوره تایپ هینت و تایپینگ در پایتون

@PyBackEndHub
👍3🔥21
یک نظر سنجی میذارم. فقط یک جمع بندی میکنم قبلش:

۱. دوره اول احتمالا چند اپلیکیشن پایتونی (fastapi یا اپ های مختلف پایتونی لزوما میتونه استریم نباشه)‌مینویسم. که هر کدوم خودشون coding assigment یک شرکت برای backend engineer هست. سطح دوره نسبتا بالا خواهد بود. (حدودا ۵-۱۰ قسمت)
۲. یک لایبری هست که کارش اینه که کارتونو با بروکر راحت تر کنه. تو دوره سعی میکنم این لایبری رو استفاده کنم و باهاش اپ استریم پایتونی بنویسیم. (شبیه سلری ولی یوزکیسش فرق میکنه کمی. سلری تسک منیجره ولی این streamer هست). سطح دوره متوسط خواهد بود. (حدودا ۱۰-۱۵ قسمت)
۳. دوره ای که opentelemtry رو باهم دوره میکنیم. بست پرکتیس های instrumentation یک اپ wsgi یا asgi یا استریمینگ پایتونی رو بررسی میکنیم. و یک نمونه پیاده میکنیم مثلا یک فروشگاه اینترنتی که فعالیت کاربر داخلش کاملا instrument شده باشه.سطح دوره نسبتا بالا خواهد بود. (حدودا ۱۰-۱۵ قسمت)
۴. اگه پایتون کد میزنید و از تایپینگش خوب استفاده نمیکنید این دوره برای شماست. دوره ای که سری میزنیم به ماژول typing پایتون. با کل ماژول آشنا میشیم. با چند لایبری stdlib مثل دیتا کلس و چند لایبری external مثل pydantic آشنا میشیم و تخصصی بهشون میپردازیم. سطح دوره متوسط خواهد بود. (حدودا ۱۰-۱۵ قسمت)

@PyBackEndHub
❤‍🔥6👍2