Python BackendHub
یکم امروز با FastUI کار کردم و واقعا شگفت انگیز بود😁 ایده پشتش خیلی جالبه. یک لایبری ری اکت تایپ اسکریپت دارن که سمت کلاینت لود میشه. بعد سمت FastUI شما با استفاده از pydantic و لایبری fastui میای جیسونی میسازی که اون لایبری react میفهمه چطور رندرش کنه!…
روز دوم, و واقعا تحت تاثیر قرار گرفتم. توصیه میکنم حتما یک سری بهش بزنید. لایبری FastUI صرفا یک مشت pydantic model عه فقط. نکته جالب تر اینه که FastUI در واقع پروتکلی پیاده سازی کرده که لایبری ری اکت طبق اون رندرینگ رو انجام میده. یعنی مثلا شما فکر کن میخوای بگی برو صفحه /foo. یعنی درواقع شما با جیسونی که از بک اندت میاد (لزوما میتونه پایتون نباشه) به صورت declarative میتونی فرانت بسازی. مثال زیر رو ببینید:
و خوده react کلاینتو میبره اینجا. حالا مشابه همین میتونی بگی فرمی بساز که فیلداش اینن. تو یک div باشه با کلس x. و خلاصه به صورت جیسون میتونید تعریف کنید که چطور فرم ساخته شه. و بعد SubmitUrl هم بهش میدین که url رو میفرسته اونجا. به همین راحتی 😅و وقتی کلاینت درخواست میده به یک صفحه درواقع بک اند بهش جیسونی میده که توضیح میده اون صفحه چطور باید رندر شه و کلاینت طبق اون توضیح (که جیسونه) صفحه رو رندر میکنه. و دیتا هم داخلش باید بذاری که رندر کنه. مثلا کلاینت درخواست میده صفحه ۵ فلان تیبل رو بگیره, شما دیتا رو بهش میدی و میگی چند صفحه وجود داره آبجکت. یعنی یک جورایی هم کلاینت ساید رندرنیگه هم سرور ساید رندرینگ.
مشکلی که داره اینه که state نداره. که این هم خوبه هم بد. خوب از این نظر که باگ خیلی کمتره. بد از این نظر که دیتایی که به فرانت میدی تو هر صفحه ممکنه زیاد شه و سرعت لود صفحه رو کند کنه. مثلا استیتی نداری که فرانت یک بار استفاده کنه و بفهمه چقدر تیبل user چقدر user داره. و دیگه تو هر ریسپانس user list نیاز نباشه تعداد یوزر رو بدی. سرعت توسعه فوق العاده زیادی داره. واقعا عالیه از این نظر. component های خیلی خوبی داره و خیلی سریع میتونید یک داشبورد بسازید که خیلی کارای خفنی بکنه. اگه جایی نیاز داشتین با react همونطور که توضیح دادم میتونه extendable شه یعنی هم پایتون میتونید کد بزنید هم ری اکت.
ایده پشتش:
Think of your frontend as a puppet, and the backend as the hand within it — the puppet doesn't need to know what to say, that's kind of the point.
@PyBackEndHub
[{"event":{"url":"/foo","type":"go-to"},"type":"FireEvent"}]
و خوده react کلاینتو میبره اینجا. حالا مشابه همین میتونی بگی فرمی بساز که فیلداش اینن. تو یک div باشه با کلس x. و خلاصه به صورت جیسون میتونید تعریف کنید که چطور فرم ساخته شه. و بعد SubmitUrl هم بهش میدین که url رو میفرسته اونجا. به همین راحتی 😅و وقتی کلاینت درخواست میده به یک صفحه درواقع بک اند بهش جیسونی میده که توضیح میده اون صفحه چطور باید رندر شه و کلاینت طبق اون توضیح (که جیسونه) صفحه رو رندر میکنه. و دیتا هم داخلش باید بذاری که رندر کنه. مثلا کلاینت درخواست میده صفحه ۵ فلان تیبل رو بگیره, شما دیتا رو بهش میدی و میگی چند صفحه وجود داره آبجکت. یعنی یک جورایی هم کلاینت ساید رندرنیگه هم سرور ساید رندرینگ.
مشکلی که داره اینه که state نداره. که این هم خوبه هم بد. خوب از این نظر که باگ خیلی کمتره. بد از این نظر که دیتایی که به فرانت میدی تو هر صفحه ممکنه زیاد شه و سرعت لود صفحه رو کند کنه. مثلا استیتی نداری که فرانت یک بار استفاده کنه و بفهمه چقدر تیبل user چقدر user داره. و دیگه تو هر ریسپانس user list نیاز نباشه تعداد یوزر رو بدی. سرعت توسعه فوق العاده زیادی داره. واقعا عالیه از این نظر. component های خیلی خوبی داره و خیلی سریع میتونید یک داشبورد بسازید که خیلی کارای خفنی بکنه. اگه جایی نیاز داشتین با react همونطور که توضیح دادم میتونه extendable شه یعنی هم پایتون میتونید کد بزنید هم ری اکت.
ایده پشتش:
Think of your frontend as a puppet, and the backend as the hand within it — the puppet doesn't need to know what to say, that's kind of the point.
@PyBackEndHub
👍12👎1
یکم با Rust کار کردم این چند وقت و ایده ای که نسبت بهش دارم اینه که Rust شما رو مجبور میکنه به همه edge case ها فکر کنید و شما رو خیلی به فکر وا میداره. خیلی باید explicit باشین راجب همه چیز که بنظره خودم تجربه توسعه رو هم خوب میکنه هم بد. بد از این نظر که طول میکشه یک برنامه رو بنویسید و خوب از این نظر که dx خوبی داره و وقتی برنامتون کامپایل شد خیلی smoothعه.
به درد توسعه وب اپلیکیشن بنظرم نمیخوره چون خیلی effort زیادی میخواد کد نوشتن باهاش و اپلیکیشن ها بیشتر data intensive هستن (مگه اپلیکیشنی cpu intensive). هیچ ادج کیسی نمیتونید داشته باشین. تایپ Any نمیتونید داشته باشید (تکنیکالی میتونید ولی برای اینکه بهش دسترسی داشته باشید و باهاش کار کنید تهش باید یک جایی cast اش کنید و همه کیس هارو هندل کنید)
اما چیزی که بنظرم توصیه میکنم حتما برین سمتش طرز و خط فکریه که شما رو به اون سمت میبره. و میتونید از همون ایده هایی که تو راست بود هم تو پایتون استفاده کنید.
@PyBackEndHub
به درد توسعه وب اپلیکیشن بنظرم نمیخوره چون خیلی effort زیادی میخواد کد نوشتن باهاش و اپلیکیشن ها بیشتر data intensive هستن (مگه اپلیکیشنی cpu intensive). هیچ ادج کیسی نمیتونید داشته باشین. تایپ Any نمیتونید داشته باشید (تکنیکالی میتونید ولی برای اینکه بهش دسترسی داشته باشید و باهاش کار کنید تهش باید یک جایی cast اش کنید و همه کیس هارو هندل کنید)
اما چیزی که بنظرم توصیه میکنم حتما برین سمتش طرز و خط فکریه که شما رو به اون سمت میبره. و میتونید از همون ایده هایی که تو راست بود هم تو پایتون استفاده کنید.
@PyBackEndHub
👏15👍9👎1
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
آموزش برنامهنویسی از صفر تا بینهایت به صورت کاملا رایگان، در این دوره قصد داریم هر آنچه که در بازار کار نیاز است را به شما آموزش دهیم. هدف این دوره، تبدیل شدن به یک برنامهنویس فول استک است.
مرحله ۱: مبانی و زبانهای برنامهنویسی
1. مقدمه به برنامهنویسی
2. زبان برنامهنویسی پایتون
3. زبان برنامهنویسی جاوا اسکریپت
4. مفاهیم برنامهنویسی شیگرا
مرحله ۲: توسعه وب و فریمورکها
5. فریمورک Django
6. فریمورک FastAPI
7. فریمورک VueJS
8. فریمورک gRPC
9. استفاده از بوتاسترپ، HTML، CSS و فریمورکهای CSS معتبر
مرحله ۳: دیتابیس
10. دیتابیس SQL
11. دیتابیس MongoDB
12. آشنایی با دیتابیس Neo4J
13. استفاده از ردیس، ربیت ام کیو، سلری
مرحله ۴: تکنولوژیهای متنوع
14. مفاهیم داکر
15. آشنایی با لینوکس
16. اجرای دیپلویمنت خودکار و CI/CD
مرحله ۵: امنیت و تستها
17. تکنیکهای تست نویسی
18. استفاده از گیت
19. مفاهیم امنیت در وب
مرحله ۶: مفاهیم پیشرفته
20. مفاهیم مالتیتردینگ و مالتیپروسسینگ و Async
21. آشنایی با معماری میکروسرویس
مرحله ۷: مهارتهای مساعدتی
22. آموزش ساخت رزومه
23. راهنمایی در مسیر کاریابی
24. فرایندهای توسعه نرمافزار Agile/Scrum
روش ارائه:
- کلاسها به صورت لایو در دیسکورد برگزار خواهند شد.
- کلاسها به صورت شبانه ارائه خواهند شد.
زمان شروع و مدت دوره:
- شروع دوره از پس از تعطیلات نوروز و تا حدود ۶ ماه به طول خواهد انجامید.
مدرس دوره:
- سید و همکاران ایشان افتخار دارند این دوره را برگزار نمایند.
کانال تلگرام سید و رفقا:
زمان دقیق شروع دوره و لینک دیسکورد در کانال سید و رفقا اطلاع رسانی داده خواهد شد
https://news.1rj.ru/str/seyed_bax
مرحله ۱: مبانی و زبانهای برنامهنویسی
1. مقدمه به برنامهنویسی
2. زبان برنامهنویسی پایتون
3. زبان برنامهنویسی جاوا اسکریپت
4. مفاهیم برنامهنویسی شیگرا
مرحله ۲: توسعه وب و فریمورکها
5. فریمورک Django
6. فریمورک FastAPI
7. فریمورک VueJS
8. فریمورک gRPC
9. استفاده از بوتاسترپ، HTML، CSS و فریمورکهای CSS معتبر
مرحله ۳: دیتابیس
10. دیتابیس SQL
11. دیتابیس MongoDB
12. آشنایی با دیتابیس Neo4J
13. استفاده از ردیس، ربیت ام کیو، سلری
مرحله ۴: تکنولوژیهای متنوع
14. مفاهیم داکر
15. آشنایی با لینوکس
16. اجرای دیپلویمنت خودکار و CI/CD
مرحله ۵: امنیت و تستها
17. تکنیکهای تست نویسی
18. استفاده از گیت
19. مفاهیم امنیت در وب
مرحله ۶: مفاهیم پیشرفته
20. مفاهیم مالتیتردینگ و مالتیپروسسینگ و Async
21. آشنایی با معماری میکروسرویس
مرحله ۷: مهارتهای مساعدتی
22. آموزش ساخت رزومه
23. راهنمایی در مسیر کاریابی
24. فرایندهای توسعه نرمافزار Agile/Scrum
روش ارائه:
- کلاسها به صورت لایو در دیسکورد برگزار خواهند شد.
- کلاسها به صورت شبانه ارائه خواهند شد.
زمان شروع و مدت دوره:
- شروع دوره از پس از تعطیلات نوروز و تا حدود ۶ ماه به طول خواهد انجامید.
مدرس دوره:
- سید و همکاران ایشان افتخار دارند این دوره را برگزار نمایند.
کانال تلگرام سید و رفقا:
زمان دقیق شروع دوره و لینک دیسکورد در کانال سید و رفقا اطلاع رسانی داده خواهد شد
https://news.1rj.ru/str/seyed_bax
❤🔥30👎8👍6🤔2🔥1🙏1
لاگرتونو خوب کانفیگ کنید✅
https://www.youtube.com/watch?v=9L77QExPmI0
بحث کانفیگ درسته لاگر چیزیه که خیلی کم تو پایتون دیدم درست پیادش کنند
این چنل و کلا این یوتیوبر عالیه، مباحث عمیق پایتونی رو بهش میپردازه
@PyBackEndHub
https://www.youtube.com/watch?v=9L77QExPmI0
بحث کانفیگ درسته لاگر چیزیه که خیلی کم تو پایتون دیدم درست پیادش کنند
این چنل و کلا این یوتیوبر عالیه، مباحث عمیق پایتونی رو بهش میپردازه
@PyBackEndHub
YouTube
Modern Python logging
A logging tutorial.
At some point, print statements aren't enough. When that time comes in Python, you should reach for the builtin logging package. It may be old (committed in 2002!), but it is the standard in Python. Unfortunately though, it being so old…
At some point, print statements aren't enough. When that time comes in Python, you should reach for the builtin logging package. It may be old (committed in 2002!), but it is the standard in Python. Unfortunately though, it being so old…
👍11🔥3
یک چیزه خیلی مهم تو دنیای برنامه نویسی:
https://www.youtube.com/watch?v=U7A12dQgFqI
به شدت Idempotency تو کد مهمه. صرفا به API ختم نمیشه و تو سطح کد هم میتونه رعایت شه. توابعی بنویسید که در برابر arguement ای که بهش میدین همیشه Idempotent هستن! یکی از مزایا بزرگ type state بودن هم Idempotency عه.
ویدیو تایپ استیت که قبلا تو کانال فرستاده بودم:
https://youtu.be/DwAQ6dm-Vn8
@PyBackEndHub
https://www.youtube.com/watch?v=U7A12dQgFqI
به شدت Idempotency تو کد مهمه. صرفا به API ختم نمیشه و تو سطح کد هم میتونه رعایت شه. توابعی بنویسید که در برابر arguement ای که بهش میدین همیشه Idempotent هستن! یکی از مزایا بزرگ type state بودن هم Idempotency عه.
ویدیو تایپ استیت که قبلا تو کانال فرستاده بودم:
https://youtu.be/DwAQ6dm-Vn8
@PyBackEndHub
YouTube
از Spotify یاد بگیریم 🔥 Idempotency در سیستم پرداخت
یه وقتهایی بخاطر مشکل شبکه یا درخواست ها به مقصد نمیرسن یا جوابش رو ما نمیگیریم. حالا وقتی درخواست خرید ارسال شده ولی مشکل شبکه خوردیم باید retry کنیم و دوباره درخواست بفرستیم یا تصور کنیم انجام شده؟ این مسئله توی Spotify باعث شده بود یا دوبار از حساب کاربر…
👍12🔥1
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣21😁1
سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی
یک نکته امروز یاد گرفتم که کاش زودتر یاد میگرفتم
تو پایتون هیچوقت از Any استفاده نکنید. اگه تایپ یک آبجکتی رو نمیدونید اونوقت از object استفاده کنید.
چرا؟
چون مجبور میشین حالا تایپ رو چک کنید و شرط بنویسید.
یعنی اگه بنویسی:
سیستم استتیک تایپ بهتون ایراد نمیگیره. ولی اگه بنویسید
استتیک تایپ چکر بهتون ایراد میگیره. پس مجبور میشین به صورت explicit تایپشو چک کنید. جاهایی که نمیدونید چه تایپی به این تابع پاس داده میشه عالیه.
@PyBackEndHub
تو پایتون هیچوقت از Any استفاده نکنید. اگه تایپ یک آبجکتی رو نمیدونید اونوقت از object استفاده کنید.
چرا؟
چون مجبور میشین حالا تایپ رو چک کنید و شرط بنویسید.
یعنی اگه بنویسی:
def foo(bar: Any):
bar.not_valid
سیستم استتیک تایپ بهتون ایراد نمیگیره. ولی اگه بنویسید
def foo(bar: object):
bar.not_valid
استتیک تایپ چکر بهتون ایراد میگیره. پس مجبور میشین به صورت explicit تایپشو چک کنید. جاهایی که نمیدونید چه تایپی به این تابع پاس داده میشه عالیه.
@PyBackEndHub
👍13👌3
Forwarded from Python BackendHub
کاربرد گروهو میخوام تغییر بدم
به گروهی برای رفع مشکل و بحث در خصوص Backend Engineering و پایتون
مرجعی هم بشه که بتونید کلا سوالات flask یا kafka یا rabbitmq یا FastAPI یا ORM هرچیز دیگه ای که ممکنه براش community پیدا نکنید. لینک:
https://news.1rj.ru/str/PythonFellow
خوشحال میشم جوین شید. قانون خاصی نداره به جز حفظ احترام اعضای گروه.
@PyBackEndHub
به گروهی برای رفع مشکل و بحث در خصوص Backend Engineering و پایتون
مرجعی هم بشه که بتونید کلا سوالات flask یا kafka یا rabbitmq یا FastAPI یا ORM هرچیز دیگه ای که ممکنه براش community پیدا نکنید. لینک:
https://news.1rj.ru/str/PythonFellow
خوشحال میشم جوین شید. قانون خاصی نداره به جز حفظ احترام اعضای گروه.
@PyBackEndHub
Telegram
Python Backend Fellow
گروه رفع اشکال و بحث در مورد Backend Engineering و پایتون
Channel: @PyBackEndHub
Channel: @PyBackEndHub
👍18
کار کردن با کسی که هیچ سواد برنامه نویسی نداره راحت تره نسبت با کار کردن کسی که خیلی با سواده ولی چیزی که نمیدونه رو ادعا میکنه بلده! چون اولی پیشرفت میکنه و از یکجایی عصا دست میشه ولی دومی جز سردرد باری نداره.
@PyBackEndHub
@PyBackEndHub
👍50🫡3👎1
توصیه میکنم حتما یک سری به warp بزنید.
هم برای مک هست. هم برای لینوکس منتشر شده. (ویندوزیا یک چرخ بزنن بعدا بیان :)) ) قابلیتاش که زیاده چیزایی که ترمینال های دیگه هم دارن. ولی چیزایی که ترمینال های دیگه ندارن:
۱. مثل ide هست. یعنی میتونید با کلیک برید وسط تکست. یا خیلی کار هایی که تو IDE میتونید انجام بدید اینجام میتونید.
۲. با راست نوشته شده و چیزی که با rust نوشته شده اکثر مواقع هم سریعه هم امن 😂 سرعت و پرفومنس رو قشنگ حس میکنید. هیچوقت قفل نمیکنه یا کند نمیشه.
۳. یک AI داره که من استفاده نکردم نمیدونم چیکار میکنه
۴. میتونید کامند هایی که در دسترسه رو ببینید. تو این کیس دیدین آپشن های Poetry lock رو قشنگ توضیح داده یک به یک. یا مثلا موقع checkout کردن بهتون inline support میده که دارین رو کدوم گیت برنچ checkout میکنید.
warp.dev
چند ماهه میخواستم تستش کنم. یک waiting list مسخره داشت که برداشته شد.
@PyBackendHub
هم برای مک هست. هم برای لینوکس منتشر شده. (ویندوزیا یک چرخ بزنن بعدا بیان :)) ) قابلیتاش که زیاده چیزایی که ترمینال های دیگه هم دارن. ولی چیزایی که ترمینال های دیگه ندارن:
۱. مثل ide هست. یعنی میتونید با کلیک برید وسط تکست. یا خیلی کار هایی که تو IDE میتونید انجام بدید اینجام میتونید.
۲. با راست نوشته شده و چیزی که با rust نوشته شده اکثر مواقع هم سریعه هم امن 😂 سرعت و پرفومنس رو قشنگ حس میکنید. هیچوقت قفل نمیکنه یا کند نمیشه.
۳. یک AI داره که من استفاده نکردم نمیدونم چیکار میکنه
۴. میتونید کامند هایی که در دسترسه رو ببینید. تو این کیس دیدین آپشن های Poetry lock رو قشنگ توضیح داده یک به یک. یا مثلا موقع checkout کردن بهتون inline support میده که دارین رو کدوم گیت برنچ checkout میکنید.
warp.dev
چند ماهه میخواستم تستش کنم. یک waiting list مسخره داشت که برداشته شد.
@PyBackendHub
👌10👍3👎1
Python BackendHub
توصیه میکنم حتما یک سری به warp بزنید. هم برای مک هست. هم برای لینوکس منتشر شده. (ویندوزیا یک چرخ بزنن بعدا بیان :)) ) قابلیتاش که زیاده چیزایی که ترمینال های دیگه هم دارن. ولی چیزایی که ترمینال های دیگه ندارن: ۱. مثل ide هست. یعنی میتونید با کلیک برید وسط…
کلی فیچر دیگم داره که خیلی برای من مهم نبود. برید تو سایتش میبینید. مثل داشتن یک درایور مشکل تو کل تیم.
هر روز دری جدید از sqlalchemy برام باز میشه :))
میدونستین sqlalchemy میتونه با یک کلس سشن همزمان به چند دیتابیس وصل شه؟ یعنی خودش هندل میکنه. و خودش میفهمه که الان کانکشن رو باید کجا بزنه و رو کدوم دیتابیس اجرا کنه. ولی چیزی که نظرمو جلب کرد این نیست. چیزی که نظرمو جلب کرد اینه که وقتی transaction بزنید و از دو دیتابیس استفاده کنید، خودش خودکار two phase commit میزنه به صورت implicit. البته به صورت explicit هم ممکنه این. ولی برام خیلی جالب بود یک فریم ورک چقدر میتونه اون پشت مجیک و باهوش باشه که همچین کاریو بتونه انجام بده 😅. ساپورتش برای two phase commit خیلی زیاده ولی تاحالا تو هیچ orm ای همچین چیزی ندیده بودم که به صورت smart بیاد two phase بزنه خودش!
و نکته عجیب تر اینه که این لایبری یک جورایی یک maintainer فقط داره که از ۲۰۰۶ داره رو این پروژه کامیت میزنه!😁
@PyBackendHub
میدونستین sqlalchemy میتونه با یک کلس سشن همزمان به چند دیتابیس وصل شه؟ یعنی خودش هندل میکنه. و خودش میفهمه که الان کانکشن رو باید کجا بزنه و رو کدوم دیتابیس اجرا کنه. ولی چیزی که نظرمو جلب کرد این نیست. چیزی که نظرمو جلب کرد اینه که وقتی transaction بزنید و از دو دیتابیس استفاده کنید، خودش خودکار two phase commit میزنه به صورت implicit. البته به صورت explicit هم ممکنه این. ولی برام خیلی جالب بود یک فریم ورک چقدر میتونه اون پشت مجیک و باهوش باشه که همچین کاریو بتونه انجام بده 😅. ساپورتش برای two phase commit خیلی زیاده ولی تاحالا تو هیچ orm ای همچین چیزی ندیده بودم که به صورت smart بیاد two phase بزنه خودش!
و نکته عجیب تر اینه که این لایبری یک جورایی یک maintainer فقط داره که از ۲۰۰۶ داره رو این پروژه کامیت میزنه!😁
@PyBackendHub
🔥19❤5👍2
Python BackendHub
هر روز دری جدید از sqlalchemy برام باز میشه :)) میدونستین sqlalchemy میتونه با یک کلس سشن همزمان به چند دیتابیس وصل شه؟ یعنی خودش هندل میکنه. و خودش میفهمه که الان کانکشن رو باید کجا بزنه و رو کدوم دیتابیس اجرا کنه. ولی چیزی که نظرمو جلب کرد این نیست. چیزی…
🫡 Commitment
به این میگن… خیلیم معروف نیست نسبت به بزرگی کاری که کرده که خدایی در حقش خیلی کم لطفی شده😅 پکیجش یکی از پردانلود ترین پکیج های پایتونه، با اختلاف خیلی بیشتری نسبت به بقیه ORM های پایتونی.
اینجام hachyderm عشه. سوال های جالبی میکنه. جالبه با community اش در حال ارتباطه دائم و ازشون سوال میپرسه😁 پیرو پست قبلیم، ایشون با این حجم سواد میاد تو پابلیک سوالشو میپرسه که نشون میده سنیور بودن به نپرسیدن و جواب اشتباه دادن نیست، بلکه به پرسیدن و جواب غلط ندادنه!
https://hachyderm.io/@zzzeek
به این میگن… خیلیم معروف نیست نسبت به بزرگی کاری که کرده که خدایی در حقش خیلی کم لطفی شده😅 پکیجش یکی از پردانلود ترین پکیج های پایتونه، با اختلاف خیلی بیشتری نسبت به بقیه ORM های پایتونی.
اینجام hachyderm عشه. سوال های جالبی میکنه. جالبه با community اش در حال ارتباطه دائم و ازشون سوال میپرسه😁 پیرو پست قبلیم، ایشون با این حجم سواد میاد تو پابلیک سوالشو میپرسه که نشون میده سنیور بودن به نپرسیدن و جواب اشتباه دادن نیست، بلکه به پرسیدن و جواب غلط ندادنه!
https://hachyderm.io/@zzzeek
👍23🔥3
امروز یکی جذاب ترین اتفاقات عمرم برام رخ داد، که دوست دارم اینجام به اشتراک بذارم.
تیم ایونت دعوت شدم به یک ویلایی خارج از برلین. جای خیلی خوبیه و خلاصه جاتون خالی 😁 اب و هوا ام عوض شد.
یک ایونت داشتیم، که هرکسی باید ۲۰ عکس به صورت اسلاید از یک تیکه با ارزش زندگیش درست میکرد و تو هر اسلاید ۲۰ ثانیه حرف میزد. میتونست خاطره باشه، یک عادت (hobby) باشه، یا هرچیزی. خلاصه کل افراد تیم پرزنت کردن تا اخر سر نوبت رسید به CEO. وقتی پرزنتش شروع شد عکسای ایرانو دیدم! خاطره سفرش از سال ۲۰۱۷ داخل ایرانو گفت و اینکه چقدر مردم باهاش مهربون بودن، مهمون نواز بودن، غذا مهمونش میکردن و چقدر جو صمیمی بود. از تهران و اصفهان و شیراز و چند شهر ایران دیدن کرده بود، و اخرش گفت با وجود اینکه خیلی کشور ها رفته و مسافرت کرده ولی بهترین تجربه زندگیش تو ایران بوده.
همینطور که اسلایدا رو داشت میبرد به اسلاید بعدی، خیلی حس غرور منو گرفت :)) ۷ ساله ایران نیومدم و کاش میتونستم بیام یک سر مسافرت.😁
خلاصه اینکه اگه یک سری اتفاقا نمیفتاد و یک سریا وجود نداشتن ایران واقعا توریستی ترین و قشنگ ترین کشور جهان برای همه مردم میشد 🥲
@PyBackendHub
تیم ایونت دعوت شدم به یک ویلایی خارج از برلین. جای خیلی خوبیه و خلاصه جاتون خالی 😁 اب و هوا ام عوض شد.
یک ایونت داشتیم، که هرکسی باید ۲۰ عکس به صورت اسلاید از یک تیکه با ارزش زندگیش درست میکرد و تو هر اسلاید ۲۰ ثانیه حرف میزد. میتونست خاطره باشه، یک عادت (hobby) باشه، یا هرچیزی. خلاصه کل افراد تیم پرزنت کردن تا اخر سر نوبت رسید به CEO. وقتی پرزنتش شروع شد عکسای ایرانو دیدم! خاطره سفرش از سال ۲۰۱۷ داخل ایرانو گفت و اینکه چقدر مردم باهاش مهربون بودن، مهمون نواز بودن، غذا مهمونش میکردن و چقدر جو صمیمی بود. از تهران و اصفهان و شیراز و چند شهر ایران دیدن کرده بود، و اخرش گفت با وجود اینکه خیلی کشور ها رفته و مسافرت کرده ولی بهترین تجربه زندگیش تو ایران بوده.
همینطور که اسلایدا رو داشت میبرد به اسلاید بعدی، خیلی حس غرور منو گرفت :)) ۷ ساله ایران نیومدم و کاش میتونستم بیام یک سر مسافرت.😁
خلاصه اینکه اگه یک سری اتفاقا نمیفتاد و یک سریا وجود نداشتن ایران واقعا توریستی ترین و قشنگ ترین کشور جهان برای همه مردم میشد 🥲
@PyBackendHub
❤91👍13👎4😭4💔3🤣1👻1🫡1💅1💊1
یکی از بهترین روش های پیاده سازی retry mechanism استفاده از کانتکس منیجر و generator هست. علتش؟ چون شما میتونید یک try except ای داشته باشین که کاملا reusable هست و base اش درواقع اکسپشن هایی هست که catch میکنید.
مثالش, به جای اینکار:
میتونید اینکارو انجام بدید
خوبیش چیه؟ هیچی try except بلاکتون کاملا reusable میشه. خیلیا برای اینکه همچین چیزی داشته باشن ۲ لایه کلس مینویسن که نیازی نیست واقعا. اینطوری خیلی ساده تره و راحت تره. بخش زیادی از سورس کد httpx اینطوریه.
چیزی نیاز داشته باشین تو try except میتونید به کانتکس منیجر بدید. تو این مثال ساده بود من چیزی نذاشتم. ولی این شیوه کاملا داینامیکه و خیلی میتونه خوب باشه برای retry mechanism مخصوصا برای لایبریا چون نیازی نیست دیگه ارث بری انجام شه فلان متود رو اورراید کنی فلان کارو کنی فلان اتفاق میفته. نه flow کاملا دسته خودتونه.
همیشه توصیه کردم سورس کد لایبری هارو بخونید خیلی چیزا برای الهام داره. مثلا تو httpx مثالی که زدم خیلی استفاده شده و باعث شده کد یک دست و خیلی خوبی داشته باشه.
@PyBackendHub
مثالش, به جای اینکار:
def fn():
try:
foo(bar)
except FooBarException:
... # handler 1
except BazException:
... # handler 2
میتونید اینکارو انجام بدید
@contextmanager
def flow_manager():
try:
yield
except FooBarException:
... # handler 1
except BazException:
... # handler 2
with flow_manager():
foo(bar)
خوبیش چیه؟ هیچی try except بلاکتون کاملا reusable میشه. خیلیا برای اینکه همچین چیزی داشته باشن ۲ لایه کلس مینویسن که نیازی نیست واقعا. اینطوری خیلی ساده تره و راحت تره. بخش زیادی از سورس کد httpx اینطوریه.
چیزی نیاز داشته باشین تو try except میتونید به کانتکس منیجر بدید. تو این مثال ساده بود من چیزی نذاشتم. ولی این شیوه کاملا داینامیکه و خیلی میتونه خوب باشه برای retry mechanism مخصوصا برای لایبریا چون نیازی نیست دیگه ارث بری انجام شه فلان متود رو اورراید کنی فلان کارو کنی فلان اتفاق میفته. نه flow کاملا دسته خودتونه.
همیشه توصیه کردم سورس کد لایبری هارو بخونید خیلی چیزا برای الهام داره. مثلا تو httpx مثالی که زدم خیلی استفاده شده و باعث شده کد یک دست و خیلی خوبی داشته باشه.
@PyBackendHub
👍25🆒11
تو جنگو هیچوقت از .save() خالی استفاده نکنید موقعه آپدیت کردن. چون هرچی تو مموری باشه فلاش میکنه به دیتابیس. پس بهتره explicit باشین و بگین چی میخواین فرستاده شه سمت دیتابیس. یک مثال عینی میزنم که متوجه شین یعنی چی این جمله.
ببین فکر کن یک مدل داری با ۳ تا فیلد
MyModel
- id
- first_name
- last_name
که دو تای پایینی nullable هستن. رکورد ایدی اول تو دیتابیس هم first name اش null هست هم last name اش. من ۲ درخواست همزمان میدم. درخواست اول first name رو مانی میکنم. درخواست دوم last name رو مظفر.
اتفاقی که میفته اینه که اول از دیتابیس MyModel رو میخونه جفت درخواستا. برای جفتشون first_name=None و last_name=None هست. بعد هرکدومشون همچین query ای میزنن:
درخواست اول:
درخواست دوم:
دیدی چی شد؟ جفتشون یک NULL هم فرستادن سمت دیتابیس. چرا؟ چون تو مموری یکی از نام و نام خانوادگی null بود و وقتی .save رو میزنی همونو میفرسته به دیتابیس.
بنابراین یا first name نال میمونه یا last name. در صورتی که درستش اینه:
معادل orm اش چی میشه؟
@PyBackendHub
ببین فکر کن یک مدل داری با ۳ تا فیلد
MyModel
- id
- first_name
- last_name
که دو تای پایینی nullable هستن. رکورد ایدی اول تو دیتابیس هم first name اش null هست هم last name اش. من ۲ درخواست همزمان میدم. درخواست اول first name رو مانی میکنم. درخواست دوم last name رو مظفر.
اتفاقی که میفته اینه که اول از دیتابیس MyModel رو میخونه جفت درخواستا. برای جفتشون first_name=None و last_name=None هست. بعد هرکدومشون همچین query ای میزنن:
درخواست اول:
// model.first_name = "Mani"
// model.save()
UPDATE MyModel
SET first_name = 'Mani', last_name = NULL
WHERE MyModel.id = 1
درخواست دوم:
// model.last_name = "Mozaffar"
// model.save()
UPDATE MyModel
SET first_name = NULL, last_name = 'Mozaffar'
WHERE MyModel.id = 1
دیدی چی شد؟ جفتشون یک NULL هم فرستادن سمت دیتابیس. چرا؟ چون تو مموری یکی از نام و نام خانوادگی null بود و وقتی .save رو میزنی همونو میفرسته به دیتابیس.
بنابراین یا first name نال میمونه یا last name. در صورتی که درستش اینه:
// req 2
UPDATE MyModel
SET last_name = 'Mozaffar'
WHERE MyModel.id = 1
// req 1
UPDATE MyModel
SET first_name = 'Mani'
WHERE MyModel.id = 1
معادل orm اش چی میشه؟
# req 1
MyModel.object.filter(id=instance.id).update(last_name="Mani")
# req 2
MyModel.object.filter(id=instance.id).update(last_name="Mozaffar")
# OR...
mymodel.save(update_fields=['first_name'])
@PyBackendHub
👍36❤5🆒2
Python BackendHub
تو جنگو هیچوقت از .save() خالی استفاده نکنید موقعه آپدیت کردن. چون هرچی تو مموری باشه فلاش میکنه به دیتابیس. پس بهتره explicit باشین و بگین چی میخواین فرستاده شه سمت دیتابیس. یک مثال عینی میزنم که متوجه شین یعنی چی این جمله. ببین فکر کن یک مدل داری با ۳ تا…
اما sqlalchemy یک فیچر داره که بهش میگن dirty tracking
Dirty means that field in-memory and database values are different.
یعنی دقیقا استیت دیتابیس و مموری رو track کنه. پس متوجه میشین چه فیلد هایی override شدن.
یعنی تو sqlalchemy میتونید بنویسید
و موقعه flush فقط first name رو فلاش میکنه.
تو جنگو هم یک پکیج هست برای اینکار که میتونید استفاده کنید:
https://github.com/romgar/django-dirtyfields
ولی من به سلیقم نمیخوره و ترجیح میدم بنویسم که چه فیلدی رو میخوام اپدیت کنم.
@PyBackendHub
Dirty means that field in-memory and database values are different.
یعنی دقیقا استیت دیتابیس و مموری رو track کنه. پس متوجه میشین چه فیلد هایی override شدن.
یعنی تو sqlalchemy میتونید بنویسید
mymodel.first_name = "Mani"
و موقعه flush فقط first name رو فلاش میکنه.
تو جنگو هم یک پکیج هست برای اینکار که میتونید استفاده کنید:
https://github.com/romgar/django-dirtyfields
ولی من به سلیقم نمیخوره و ترجیح میدم بنویسم که چه فیلدی رو میخوام اپدیت کنم.
@PyBackendHub
GitHub
GitHub - romgar/django-dirtyfields: Tracking dirty fields on a Django model
Tracking dirty fields on a Django model. Contribute to romgar/django-dirtyfields development by creating an account on GitHub.
👍11
چطور issue رو به صورت حرفه ای تو یک community مطرح کنیم و به جواب برسیم؟
اولین مشکلی که من خیلی میبینم مشکل xy هست.
https://en.wikipedia.org/wiki/XY_problem
مشکل xy چیه؟ به جای اینکه راجب صورت سوال, سوال بپرسن راجب مشکلی میپرسن که در طی پاسخ به اون سوال از اون روش بهش برخوردن. مثلا یک مثال ساده: من چطور تو پایتون میتونم سه کاراکتر اخر از یک string که میاد رو بگیرم؟
حالا سوال و چالش واقعی:من چطور میتونم ببینم فایلی که کلاینت برام فرستاده همون فایلیه که ادعا میکنه؟ جوابش: مقایسه مجیک بایت و تطابقش با file extension که بعد آخرین نقطه میاد.
پس همیشه سوالتون رو بپرسید. میتونید راهکاری هم که داشتین در کنارش معرفی کنید.
دومین مشکل همون مشکل dont ask to ask هست که احتمال پاسخ گرفتنتون رو به شدت کاهش میدین.
https://dontasktoask.com
و آخرین مشکل نحوه و کالچر مطرح کردن مشکلتون هست. لایبری های اوپن سورس اگه ایشو زده باشین حتما با کالچر مطرح issue آشنا هستین, این موارد شامل:
۱. جدایی لاجیک از کدتون. هرچقدر لاجیک لای کدتون بیشتر باشه خواناییش کمتر میشه برای کسی که مسلط نیست به اون لاجیک.
۲. نوشتن یک failing test. خیلی وقتا همه مشکلشونو میگن ولی واقعا نمیفهمم کجاش مشکل بوده 😁
۳. اگه مورد دو رو انجام ندادین, میتونید یک قطعه کد کوتاهی بذارین که مشکلتون رو reproduce کنه! expected result مشخص باشه.
۴. محیطتون رو کامل شرح بدید. سیستم عاملتون, چه نسخه ای از لایبری و پایتون رو دارین استفاده میکنید.
۵. اسکرین شات با سایت هایی مشابه ray.so بنویسید یا از قابلیت جدید تلگرام استفاده کنید برای ارسال کد.
@PyBackendHub
اولین مشکلی که من خیلی میبینم مشکل xy هست.
https://en.wikipedia.org/wiki/XY_problem
مشکل xy چیه؟ به جای اینکه راجب صورت سوال, سوال بپرسن راجب مشکلی میپرسن که در طی پاسخ به اون سوال از اون روش بهش برخوردن. مثلا یک مثال ساده: من چطور تو پایتون میتونم سه کاراکتر اخر از یک string که میاد رو بگیرم؟
حالا سوال و چالش واقعی:من چطور میتونم ببینم فایلی که کلاینت برام فرستاده همون فایلیه که ادعا میکنه؟ جوابش: مقایسه مجیک بایت و تطابقش با file extension که بعد آخرین نقطه میاد.
پس همیشه سوالتون رو بپرسید. میتونید راهکاری هم که داشتین در کنارش معرفی کنید.
دومین مشکل همون مشکل dont ask to ask هست که احتمال پاسخ گرفتنتون رو به شدت کاهش میدین.
https://dontasktoask.com
و آخرین مشکل نحوه و کالچر مطرح کردن مشکلتون هست. لایبری های اوپن سورس اگه ایشو زده باشین حتما با کالچر مطرح issue آشنا هستین, این موارد شامل:
۱. جدایی لاجیک از کدتون. هرچقدر لاجیک لای کدتون بیشتر باشه خواناییش کمتر میشه برای کسی که مسلط نیست به اون لاجیک.
۲. نوشتن یک failing test. خیلی وقتا همه مشکلشونو میگن ولی واقعا نمیفهمم کجاش مشکل بوده 😁
۳. اگه مورد دو رو انجام ندادین, میتونید یک قطعه کد کوتاهی بذارین که مشکلتون رو reproduce کنه! expected result مشخص باشه.
۴. محیطتون رو کامل شرح بدید. سیستم عاملتون, چه نسخه ای از لایبری و پایتون رو دارین استفاده میکنید.
۵. اسکرین شات با سایت هایی مشابه ray.so بنویسید یا از قابلیت جدید تلگرام استفاده کنید برای ارسال کد.
@PyBackendHub
👍21
برای یک پروژه یک سری چیزا ضروریه. تو اولین پست میرم سمت IDE یعنی vscode. یک پروژه به چیا نیاز داره تو vscode ؟
۱. مهم ترینش که قطعا دارین pylance هست. pylance یک language server هست برای پایتون که static type check هم انجام میده (برخلاف pycharm که نداره). استتیک تایپ چکش بر اساسه pyright هست, درواقع superset ای هست از pyright یعنی کمی فرق میکنه ولی احتمالا متوجه نخواهید شد. نکته خیلی مهم اینه که حتما static type check پایتونتون رو فعال کنید و رو حالت basic بذارین حداقل. به طور دیفالت خاموشه. چطوری؟وارد user setting داخل vscode تون بشین و سرچ کنید type checking mode و اونو بذارین رو حالت basic.
۲. لینتر ruff. داشتن یک لینتر خیلی مهمه. ruff هم خیلی سریعه و هم خیلی سبک و هم خیلی عالی. با rust نوشته شده و هم کاره black و isort رو انجام میده. یعنی ایمپورت هایی که استفاده نکردین هم پاک میکنه.توصیه میشه حتی تنظیمات راف رو داخل pyproject بذارین که بین همه یوزرا یکسان باشه. تو پست بعدی که راجب استراکچر خوده پروژه هست بیشتر صحبت میکنم.
۳. اکستنشن دیباگر تست. خیلی وقتا باگایی که داریم رو با یک تست reproduce میکنیم (یا بهتره بگم همیشه باید اینکارو کنیم). اون موقع ران کردن یک تست خاص با دیباگر خیلی میتونه مفید باشه. میتونید اینکارو بدون extension هم انجام بدید ولی مدام باید یک کانفیگی رو عوض کنید که یکم اذیت کننده میتونه باشه. این extension خودش تستا رو پیدا میکنه و میتونید ران کنید با دیباگر یا به صورت معمولی:
https://marketplace.visualstudio.com/items?itemName=LittleFoxTeam.vscode-python-test-adapter
۴. داشتن یک .vsocde/settings.json که کمک میکنه یک ستینگ واحد داشته باشین بین همه کسایی که تو پروداکت دارن با vscode کار میکنن. خیلیا اینو میذارن تو gitignore ولی من دلیلی نمیبینم. میتونه خیلی مفید باشه.
۵. استفاده از built in extension خوده git وی اس کد. اینطوری سریع تر میتونید کامیت بزنید و بهتر میتونید متوجه شین چیو دارین کامیت میکنید.
۶. استفاده از vscode/launhc.json که اپ هاتون رو با دیباگر بتونید ران کنید. مثلا جنگو یا فست دارین بتونید با لانچر تو حالت دیباگ رانش کنید. داکیومنت کاملش این زیر هست.
https://code.visualstudio.com/docs/editor/debugging
حالا تو پست های بعدی میپردازم به بخش پایتونی و غیر از IDE
@PyBackendHub
۱. مهم ترینش که قطعا دارین pylance هست. pylance یک language server هست برای پایتون که static type check هم انجام میده (برخلاف pycharm که نداره). استتیک تایپ چکش بر اساسه pyright هست, درواقع superset ای هست از pyright یعنی کمی فرق میکنه ولی احتمالا متوجه نخواهید شد. نکته خیلی مهم اینه که حتما static type check پایتونتون رو فعال کنید و رو حالت basic بذارین حداقل. به طور دیفالت خاموشه. چطوری؟وارد user setting داخل vscode تون بشین و سرچ کنید type checking mode و اونو بذارین رو حالت basic.
۲. لینتر ruff. داشتن یک لینتر خیلی مهمه. ruff هم خیلی سریعه و هم خیلی سبک و هم خیلی عالی. با rust نوشته شده و هم کاره black و isort رو انجام میده. یعنی ایمپورت هایی که استفاده نکردین هم پاک میکنه.توصیه میشه حتی تنظیمات راف رو داخل pyproject بذارین که بین همه یوزرا یکسان باشه. تو پست بعدی که راجب استراکچر خوده پروژه هست بیشتر صحبت میکنم.
۳. اکستنشن دیباگر تست. خیلی وقتا باگایی که داریم رو با یک تست reproduce میکنیم (یا بهتره بگم همیشه باید اینکارو کنیم). اون موقع ران کردن یک تست خاص با دیباگر خیلی میتونه مفید باشه. میتونید اینکارو بدون extension هم انجام بدید ولی مدام باید یک کانفیگی رو عوض کنید که یکم اذیت کننده میتونه باشه. این extension خودش تستا رو پیدا میکنه و میتونید ران کنید با دیباگر یا به صورت معمولی:
https://marketplace.visualstudio.com/items?itemName=LittleFoxTeam.vscode-python-test-adapter
۴. داشتن یک .vsocde/settings.json که کمک میکنه یک ستینگ واحد داشته باشین بین همه کسایی که تو پروداکت دارن با vscode کار میکنن. خیلیا اینو میذارن تو gitignore ولی من دلیلی نمیبینم. میتونه خیلی مفید باشه.
۵. استفاده از built in extension خوده git وی اس کد. اینطوری سریع تر میتونید کامیت بزنید و بهتر میتونید متوجه شین چیو دارین کامیت میکنید.
۶. استفاده از vscode/launhc.json که اپ هاتون رو با دیباگر بتونید ران کنید. مثلا جنگو یا فست دارین بتونید با لانچر تو حالت دیباگ رانش کنید. داکیومنت کاملش این زیر هست.
https://code.visualstudio.com/docs/editor/debugging
حالا تو پست های بعدی میپردازم به بخش پایتونی و غیر از IDE
@PyBackendHub
Visualstudio
Python Test Explorer for Visual Studio Code - Visual Studio Marketplace
Extension for Visual Studio Code - Run your Python tests in the Sidebar of Visual Studio Code
👍35👎1
اقا abstract نکنید الکی 😁 خیلی وقتا میبینم بعضیا چیزای عجیبی رو abstract میکنن. نمونش بروکره. یا دیتابیس. که اگه خواستی بتونی با تغییر ۲۰ خط کد بروکرت رو تغییر بدی. یا دیتابیستو تغییر بدی.
سوالی که من برام پیش میاد همیشه اینه:
اگه شما با ۲۰ خط کد داری بروکر یا دیتابیستو تغییر میدی, ایا واقعا داری از اون بروکر یا دیتابیس به نحو احسن استفاده میکنی؟ چون قطعا فیچر هایی داشته که مخصوص خودش بوده .
البته اضافه کنم abstraction میتونه خیلی پرفکتم انجام شه. مثل orm django یا sqlalchemy که بستگی به دیتابیس رفتارش میتونه متفاوت باشه. ولی اونا لایبرین. ایا زحمت همچین abstraction پرفکتی بیشتر نیست از اینکه بشینی ۳ تا خط کدو عوض کنی؟
@PyBackendHub
سوالی که من برام پیش میاد همیشه اینه:
اگه شما با ۲۰ خط کد داری بروکر یا دیتابیستو تغییر میدی, ایا واقعا داری از اون بروکر یا دیتابیس به نحو احسن استفاده میکنی؟ چون قطعا فیچر هایی داشته که مخصوص خودش بوده .
البته اضافه کنم abstraction میتونه خیلی پرفکتم انجام شه. مثل orm django یا sqlalchemy که بستگی به دیتابیس رفتارش میتونه متفاوت باشه. ولی اونا لایبرین. ایا زحمت همچین abstraction پرفکتی بیشتر نیست از اینکه بشینی ۳ تا خط کدو عوض کنی؟
@PyBackendHub
👍33