Python BackendHub – Telegram
Python BackendHub
7.5K 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
من حدود ۳ هفته پیش اشتراک real python رو گرفتم. اوایلش از رو سرچش مثلا طبق سطحی و ‍learning path ای که گذاشته بود جلو میرفتم که خب مطالبشو خیلی خوشم نیومد پولیاشو. ولی اخیرا شروع کردم سرچ کردن چیزایی که ضعیفم توش و تو گوگل تهش هم real python میذارم و تهش میرسم دقیقا به همون توضیحاتی که میخوام.

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


مثلا چیزایی که من از دیروز شروع کردم به دیدن و تموم کردم :
0. چطور تو مصاحبه لایو کدینگ شبیه پایتون اکسپرت بنظر بیایم
1. دیباگینگ با pdb
2. کار با vscode و شخصی سازیش با پایتون

چیزایی که خواهم دید:
3. Python Concurrency & Parallel Programming roadmap
4. Python's assert: Debug and Test Your Code Like a Pro
5. Advanced Visual Studio Code for Python Developers
6. Decorator quiz
7. Build Robust Continuous Integration With Docker and Friends
8. Python 3.12 Preview: Support For the Linux perf Profiler
9. Automating Django Deployments with Fabric and Ansible
10. Start Managing Multiple Python Versions With pyenv (Overview)


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

@ManiFoldsPython
👍14
بنیامین عزیز هم لینک زیرو به اشتراک گذاشته
که ویدیو های realpython رو رایگان گذاشته و میتونید دانلود کنید

لینک

خیلی از ویدیو هارو نداره ولی باز نسبتا بهتره هیچیه.
@ManiFoldsPython
14👍1
Python BackendHub
دیباگ با Pdb حتما بخونید https://realpython.com/python-debugging-pdb/#using-breakpoints چیت شیت آخرش خیلی به درد بخوره. 👍 @ManiFoldsPython
بعد خوندن و تمرین با pdb خیلی باهاش حال کردم
انگار اون محدودیت هایی که دیباگر پایتون داره رو نداره
ولی سوالم اینجاست که چطور میشه دیباگر پایتون رو به pdb لینک کرد؟ یعنی مثلا یک breakpoint میزنیم بعد تو دیباگر پایتون رانش میکنیم دستورات pdb هم بتونیم ران کنیم.

آیا همچین چیزی وجود داره به صورت اکستنشن تو vscode؟ سرچ کردم ولی به جوابی نرسیدم.

@ManiFoldsPython
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
وضعیت این روز شرکت ها 😂😂😂
حواستون باشه ابهتتون از بین نره پیش جونیورا🤣
@ManifoldsPython
😁29🍌3🥴2👀1🙈1
تو نسخه 0.93 فست یک چیزی اضافه شده که خیلی قشنگه بهش میگن lifespan

ایدش از این ایشو اومده:
https://github.com/tiangolo/fastapi/issues/617

به قشنگی ایده ای که داده شده پیاده سازی نشده
ولی خیلی وقتا ایده ها خیلی قشنگن اما تو حقیقت پیاده سازیشون دشوار یا غیرممکنه.

اما فست به این شکل پیاده سازی کرده:
https://fastapi.tiangolo.com/advanced/events/

البته سباستین قول داده این lifespan رو در آینده خیلی بهتر میکنه و فعلا این نسخه رو اینطوری داده تا به نحوی backward compability رو تو ساده ترین حالت ممکن داشته باشه که یوزر ها مجبور نشن خیلی تغییر بدن کدشون رو.

@ManifoldsPython
👍6
Python BackendHub
تو نسخه 0.93 فست یک چیزی اضافه شده که خیلی قشنگه بهش میگن lifespan ایدش از این ایشو اومده: https://github.com/tiangolo/fastapi/issues/617 به قشنگی ایده ای که داده شده پیاده سازی نشده ولی خیلی وقتا ایده ها خیلی قشنگن اما تو حقیقت پیاده سازیشون دشوار یا غیرممکنه.…
من یک سوالی تو behavioural interview شده بودا ازم جالب بود گفتم به اشتراک بگذارم.
چه اشتباهی اکثر سافتور انجینر ها انجام میدن که بنظرتون نباید بکنند؟

جواب خودم فکر کردن به backward compatibility تو نسخه های breaking version بود.
نظره شما چیه؟ کامنت کنید 😅

@ManifoldsPython
👍7
Python BackendHub
من یک سوالی تو behavioural interview شده بودا ازم جالب بود گفتم به اشتراک بگذارم. چه اشتباهی اکثر سافتور انجینر ها انجام میدن که بنظرتون نباید بکنند؟ جواب خودم فکر کردن به backward compatibility تو نسخه های breaking version بود. نظره شما چیه؟ کامنت کنید…
بنظره خودم جلوی اشتباهو هروقت بگیری منفعته.
خیلی وقتا خیلی لایبریا مجبور شدن بخاطر backward compatibility یک مسیر اشتباهیو ادامه بدن چون همه داشتن همون اشتباهو تکرار میکردن.
حقیقتا خیلی خوشم اومد وقتی pydantic v2 رو دیدم و حجم تغییراتی که داشت. خیلی جاها شاید خیلی راحت میتونست backward compability به نسخه قبلی رو بده ولی اینکارو نکرد چون نخواست اشتباهاتی که تو نسخه یک داشته رو بیاره نسخه دو.

@ManifoldsPython
👍9🤮1
Python BackendHub
دیباگ با Pdb حتما بخونید https://realpython.com/python-debugging-pdb/#using-breakpoints چیت شیت آخرش خیلی به درد بخوره. 👍 @ManiFoldsPython
یک نکته جالب فهمیدم که احتمالا خیلی به درد بخور میتونه باشه براتون
موقع ران کردن پای تست میتونید از pdb استفاده کنید


pytest --pdb

هرجایی که fail بخوره خودش چک پوینت میزنه.
و همچنین خودتون هم میتونید چک پوینت بزنید رو IDE تون که تو اون نقاط وایسته.

در کل جالبه و بسیار به درد بخور برای بحث دیباگینگ👍

@ManifoldsPython
👍14
اگه پروژه fastapi ای دارین که میخواین به پایندانتیک ورژن ۲ مهاجرت کنید سریعترین مسیر استفاده از پکیج bump-pydantic هست که خودشون توسعه دادند.

bump-pydantic my_package
و به همین راحتی پروژتون کامپتیبل میشه با نسخه ۲!‌
خیلی خفنه نه؟‌:))

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

رفرنس:
https://docs.pydantic.dev/latest/migration/
@ManifoldsPython
🔥6👍3
Python BackendHub
دارم رو یک boilerplate کار میکنم که همه اینا رو رعایت کرده باشه. https://github.com/ManiMozaffar/fast-auth امکاناتی که داره: Secure JWT implementation Redis black list access token Refresh/login endpoint Register endpoint امکاناتی که مونده و باید ادد…
این بویلرپلیتو یادتونه؟ هنوز دارم روش کار میکنم.
نسخه آخر کاملا استاندارده. 👀


۳ تا مشکل امنیتی داشت. برطرفش کردم. که تو ۹۹درصد JWT authenication سیستم ها هست.
تو ۲ کامیت اخرم هست مشکلات امنیتی که برطرف کردم.

https://github.com/ManiMozaffar/fast-auth

اگه تونستید بفهمید چیا بودن کامنت کنید 😁
اسم یکیش مستقیم تو داک فست آورده شده و کلیم بهش پرداخته سباستین.

@ManiFoldsPython
🔥6
Python BackendHub
این بویلرپلیتو یادتونه؟ هنوز دارم روش کار میکنم. نسخه آخر کاملا استاندارده. 👀 ۳ تا مشکل امنیتی داشت. برطرفش کردم. که تو ۹۹درصد JWT authenication سیستم ها هست. تو ۲ کامیت اخرم هست مشکلات امنیتی که برطرف کردم. https://github.com/ManiMozaffar/fast-auth اگه…
اولین نکته امنیتی که تو کد من برطرف شده بود:

استفاده از sleep تو event loop ام که response ام رو همیشه تو یک ثانیه نگه میداره و باعث میشه اتکر نتونه timing attack بزنه. البته با نت ایران کلا نمیشه timing attack زد :))))

راجب تایمینگ اتک به نقل قول از فست:
فکر کنید اتکر داره چک میکنه که ایا یوزرنیم و پسوورد رو درست حدس زده یا نه. چطور بررسی میکنه؟ با استفاده از ریسپانس تایمی که بهش میدین.

if "johndoe" == "stanleyjobson" and "love123" == "swordfish"
اگه شرط اول اجرا نشه دیگه پایتون دومی رو چک نمیکنه. همین باعث میشه اجرای کد شما کمی زودتر تموم شه. و همینطور اگه شرط اول درست اجرا شه باعث میشه کد شما کمی دیرتر اجراش تموم شه. از رو همین تایمینگ اتکر میتونه بفهمه یوزر و پسوورد شما چیه.

البته به این سادگی نیست. اتکر حرفه ای ابزار داره و فقط یک شرط رو چک نمیکنه چون شما تو فرایند لاگینتون ممکنه خیلی کارای دیگه کرده باشین کانکشن به دیتابیس های مختلف زده باشین و ... . ولی اتکر با استفاده از تایمینگ یک flow ای به دست میاره و وقتی خارج از این flow تایمینگ میگیره با یک input خاصی متوجه میشه یک چیزی تو اون input درسته.


همینطور الگوریتم های سنگینی هستند مثل bcrypt که به شدت کند میکنه فرایند تایید پسوورد رو. همینطور حتی اگه دیتابیستون بیفته دسته هکر به این راحتی نمیتونه پسوورد هارو برگردونه. استفاده از bcryp کلا توصیه میشه ولی کنار bcryp بهتره شما ریسپانس تایم لاگینتون همیشه یک عدد واحد باشه.

رفرنس تو کد من:
tokens, _ = await asyncio.gather(
AuthController(db_session=db_session, redis_session=redis_db).login(**data.dict()),
asyncio.sleep(1),
)


دو مشکل امنیتی دیگه مونده که هنوز بهشون نپرداختم 😅
@ManiFoldsPython
👍20👎1🤔1
داشتم ویدیو مصاحبه عثمان رو میدیدم با امیربهادر که شاخکام تکون خورد بیشتر راجب yield تحقیق کنم.

سوال) کاربرد yield چیه تو پایتون؟
جواب: یک جنریتور فانکشن که memory efficient هست و مثلا از دیسک میخواین ۱۰۰ گیگ فایل بخونید نیاز نیست کلشو یک دفعه لود کنید تو مموری و میتونید ۱۰۰ مگ ۱۰۰ مگ لود کنید تو مموری

مقاله اول) yield چطور تو سطح پایتون کار میکنه؟ (نسبتا ساده, اسکیپ کنید اگه بلدین)
همونطور که گفتم yield یک جنریتور فانکشن هست. ولی یعنی چی؟
یعنی وقتی کلمه yield رو میذارین و اون تابع رو ران میکنید به جای اینکه یک آبجکت بهتون ریترن کنه بهتون یک جنریتور ریترن میکنه.

هردفعه که next() رو بزنید یک بار اجرا میشه و تا yield بعدی میره.اگه yield دیگه ای نباشه دیگه چیزی ران نمیکنه و ارور StopIteration میده.
یک نکته کلیدی. پس وقتی میخوایم کلین آپ کنیم همینطوری next(my_generator) رو صدا میزنیم تا به اخرین خط کد برسه و ارور بده. درواقع تو asyncio pytest همین اتفاق میفته. ما یک آبجکت رو yield میکنیم. خود asyncio-pytest پلاگین میاد next() میزنه روش و آبجکتو میگیره. بعد به کل تستا پاس میده همون آبجکتو. بعدش هم یک دور دیگه next() رو میزنه و میدونه ما بعد yield اول کلین آپ کردیم. اون موقع کلین آپ تست ما هم ران میشه که خیلی قشنگ تر unittest پایتون هست.



def my_gen():
yield 1
print("Clean up here")

generator = my_gen()
next(generator) -> 1
next(generator) -> prints clean up here -> raise StopIteration


خب تا اینجا فهمیدیم تو سطح پایتون چطوری کار میکنه generator و yield.
حالا میریم یک لایه پایین تر تو سطح interpreter 😈

@ManiFoldsPython
👍19
مقاله دوم)‌ yield تو سطح interpreter چطور کار میکنه؟

اول باید به رفتار توابع بپردازیم!
وقتی شما تابعی رو صدا میزنید پایتون براش یک فریم تعریف میکنه. فریم رو مثل یک کانتینر در نظر بگیرید. و تمام اطلاعات مربوطه فانکشن هم تو همون فریم ذخیره میکنه مثل local variable ها. وقتی فانکشن تموم میشه frame درواقع پاک میشه. برای همین شما خارج از یک تابع نمیتونید به لوکال اون تابع دسترسی داشته باشید.

ولی generator function ها رفتار متفاوتی دارن. پایتون مثل همه توابع معمولی یک فریم براش میسازه وقتی اجراش میکنید اجرا میشه.
ولی اگه yield ببینه توش اون موقع میاد و جنریتور میکنه اون تابع رو .

وقتی پایتون به yield برخورد میکنه به جای اینکه اون فریم رو پاک کنه همون فریم رو تو همون حالت ذخیره میکنه. اون فریم شامل همه اطلاعاتی هست که پایتون دوباره بعدا بخواد رانش کنه‌(با متود next). این اطلاعات اضافه هست و تو Frame معمولی توابع این اطلاعات ذخیره نمیشن چون پایتون نیاز نداره که دوباره pickup کنه وقتی با اون frame کار میکنه.

این فریم ها همیشه با اخرین state ذخیره میشن هرباری که به yield میخورین. پس همین موضوع باعث میشه مثلا اون فایل ۱۰۰ گیگی که تو مقاله قبلی مثال زدم یک دفعه لود نشه تو مموری.



اما جنریتور وقتی کاربرد داره که دیتا شما تو مموری نیست. دیتا شما IO BOUND به دست میاد و هرجایی ذخیره شده جز مموری. وقتی شما درخواست میزنی و کراول میکنی و از جنریتور استفاده میکنی درواقع دارین ‍sync پردازش میکنید. پس تو کراولینگ به شما هیچ پرفومنس بوستی نمیده.
اما چرا scrapy اینطوری کرده؟‌چون میخواست ورودی تابعی بگیره که کاملا داینامیکه و بهترین گزینه هم تابع جنریتور بود. یک نکته دیگه که اسکرپی چند نسخه از این تابع جنریتور میسازه و همزمان با ‍url های مختلف رانش میکنه با twisted که یک لایبری ‍قدیمی async هست.

پس شما اگه sync پردازش کنی ریسورس کمتری مصرف کردین (به شرطی که دیتا رو تو لیست نریزین و هردور که پردازش میکنید ‍garbage collect انجام شه) یعنی رفرس به اون دیتا و درخواستی که فرستادین ۰ شه که گاربیج کالکت شه. اگه بندازین تو لیست response هارو به شدت مموری مصرف میکنید چون رفرنس هیچوقت بهشون صفر نمیشه تا لیست تخلیه نشه.

دلیل مصرف کمتر sync با ریست رفرس نسبت به yield هم اینه که frame معمولی پایتون بهینه تره از frame توابع جنریتوره.


حالا یک سوال, اگه فریم ما sync پردازش میشن پس ‍async generator ها برای چین؟‌anext برای چیه؟ تو کامنت بگین 😁

@ManiFoldsPython
👍11
خلاصه اینطوریاست 🤣
@ManiFoldsPython
😁17👍11
ریپو رزومم:
https://news.1rj.ru/str/manifoldspython/137

توضیح کورس why, how and where in FastAPI:
https://news.1rj.ru/str/manifoldspython/240

@ManiFoldsPython
زبان رویایی dream berd همین الان ریلیز داد. ‌:)))
https://github.com/TodePond/DreamBerd/releases/tag/v.release.notes

اتک خوردیم :))
@ManiFoldsPython
😁10
Forwarded from Python BackendHub
مواردی که به نظر من یک بک اند کار برای کار تو شرکت های مدرن خارجی و گرفتن جاب آفر داخلشون باید بلد باشه, طبق تجربه این چند وقتم داخل مصاحبه ها و جاب هایی که دیدم:

1. آشنایی با گیت
2. تست نویسی
3. آشنایی با github action برای نوشتن فایل work flow yaml
4. درک عمیق تر از پایتون (خوندن کتابی مثل fluent python یا python cook book)
تسلط به پترن دیزاین ها
5. آشنایی با paradigms های مختلف برنامه نویسی
6. الگوریتم
7. تسلط روی SQL
8. آشنایی با MySQL یا PostgreSQL.
9. آشنایی با داکر و داکر کامپوز
10. آشنایی با مفاهیم Event driven architecture, SOA, microservice و Monolithic
11. تسلط رو یک فریم ورک microservice friendly مثل FastAPI یا Flask
12. آشنایی با یک فریم ورک Monolithic مثل جنگو میتونه مزیت خوبی باشه.
13. آشنایی با یک سرویس کلاد (AWS/Azure/GCP) در حد نیاز بک اند. معمولا certificate های مشخصی دارن که میتونید راجبشون تحقیق کنید و تو اون مسیری که مربوط به بک اند دولوپر میشه برین.
14. آشنایی با دیتابیس های کلاد مثل amazon rds
15. آشنایی با serverless و نمونش داخل کلاد مثل AWS Lambda
16. آشنایی با k8s در حد نوشتن فایل yaml سرویستون
17. آشنایی با یک ابزار IAC مثل terraform
(از بین ترافورم یا k8s و داکر, معمولا رو یکیش تمرکز میکنن شرکتا. و تو اغلب آگهی ها هم دیدم وزن بیشتر سمت داکر و k8s بوده تا ترافورم)


@ManiFoldsPython
👍183
Python BackendHub
مواردی که به نظر من یک بک اند کار برای کار تو شرکت های مدرن خارجی و گرفتن جاب آفر داخلشون باید بلد باشه, طبق تجربه این چند وقتم داخل مصاحبه ها و جاب هایی که دیدم: 1. آشنایی با گیت 2. تست نویسی 3. آشنایی با github action برای نوشتن فایل work flow yaml 4.…
یک رفرنسی میدم از دوره های مختلف. میتونه کتاب یا ویدیو باشه. دقت کنید لطفا که دیدن و خوندن اینا کافی نیست و باید تمرین کنید.

ریسورس هایی که بولد شده یعنی خودم خوندم یا دارم میخونم و پیشنهاد میدم شخصا. اونایی که بولد نشده رو صرفا گوگل کردم.


1. The Git & Github Bootcamp

2. UI Testing with playwright
2. Pytest

3. Github action

4. fluent python / realpython / python tricks / DeepDive Into Python

5. سورسی ندارم

6. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People

6. leetcode

7 & 8. SQL and PostgreSQL: The Complete Developer's Guide

9. Docker & Kubernetes: The Practical Guide [2023 Edition]

10. "SOA Design Patterns" by Thomas Erl
10. "Building Microservices" by Sam Newman
10. Building Event-Driven Microservices: Leveraging Organizational Data at Scale
10. Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems 1st Edition

11. doc fastapi

12. Two scopes of django
12. doc django
12. Django for APIs: Build web APIs with Python & Django


13. cloudguru SAA
13. AWS developer - associate
13-14-15-16. AWS developer roadmap

17. Terraform - Getting Started


@ManiFoldsPython
12👍5👎1🥰1