Python Hints
9.95K subscribers
197 photos
11 videos
11 files
172 links
Python tips and tricks
The Good, Bad and the Ugly

توی این کانال فقط قرار هست در مورد core python صحبت کنیم.

این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)

Admin: @Abbasi_ai
Download Telegram
Python Hints
#Backend_RoadMap_2025 قبل از اینکه بخواید این roadmap رو دنبال کنید باید پست قبلی رو بخونید. یک نکته‌ای که اضافه کنم؛ توی جلسات و ... که بحث شد من اصلا قرار نیست هیچ چیزی رو آموزش بدم (اشتباهات رو کمک می‌کنم حل بشه و ...) اما اینکه آموزش بدم FastAPI چیست و…
16-week-fastapi.md
33.6 KB
#Backend_RoadMap
#Sample_Project

زحمت این فایل رو شایان عزیز کشیده (با استفاده درست از AI) و توی گروه گذاشت من چندتا نکته رو اضافه کردم و با اجازه‌اش گفتم بعنوان نمونه اینجا منتشر کنم

پست بعدی نکاتی هست که من اضافه کردم.
👍18
Python Hints
16-week-fastapi.md
Background jobs
رو توی دو مرحله پیاده‌سازی کن
مرحله اول رو با خود
Fastapi
پیاده سازی کن ببرش زیر لود تست بعد ببین چه اتفاقی میوفته
ADR-0015
رو نمیدونم چی هست ولی اینکه بدونی تا چه زمانی از خود
Fastapi
میتونی استفاده کنی خیلی مهمه بعدش برو روی Dramatiq
——————
Auth
رو با
Argon2
هم چک کن (خیلی واجب نیست فقط برای اینکه بهش آشنا باشی)‌
————————
برای متریک
prometheus_client
استاندارد اصلی هست
————————

چندتا چیز دیگه که بهتره اضافه کنی :
۱- لاگ رو وقتی با structlog زدی بعدش باید قابل خوندن و تحلیل هم باشه اما لزوما این کار رو روی سروری که اپ لانچ هست ممکنه انجام ندی :
پس یک چیزی برای جمع کردن لاگ همه اپ‌ها لازم میشه (توی پروداکشن معمولا)‌ یک نسخه خیلی خوب و سبک و عالی :
https://vector.dev/
هست
۲- نمایش همه این‌ها؛ خیلی وقتا لاگ - تریس - متریک جمع می‌کنیم ولی تا وقتی آنالیزش نکنیم نمی‌دونیم درست هست یا نه
https://grafana.com/

گرافانا برای این وقتا خیلی خوبه (البته نیازی نیست ساخت داشبورد و ... توش رو یاد بگیری اون کار تیم‌های دیگه‌اس)
ولی همین که ببینی دیتات توی این داشبورد چطوری نشون داده میشه نکته خوبی هست


پینوشت:
اگر از نظرت مشکلی نداره plan رو بذارم تو کانال به اسم خودت.
بعنوان نمونه اگر کسی خواست انجام بده
👍14
اینو یادداشت کرده بودم که بذارم:

تقریبا ۱.۵ سال پیش روی یک پروژه‌ای کار می‌کردم (فکر کنم گفتم جزو معدود پروژه‌هایی بود که از اول توی پروژه بودم)

امشب با مدیرعامل شرکت و صاحب پروژه صحبت می‌کردم (شاید پروژه دوم) می‌گفت علاوه بر دولوپر‌های بعدی ادمین دیتابیس هر چندوقت یکبار که روی دیتابیس کار می‌کنه ی دمش گرم هم به ما می‌گه.

من استاندارد‌های زیادی رو رعایت کردم روی اون پروژه ولی این ۵ خط بنظر میاد خیلی بچه‌هایی که روی دیتابیس کار می‌کنند رو راضی نگه‌داشته

class Base(AsyncAttrs, DeclarativeBase):
metadata = sa.MetaData(
naming_convention={
"ix": "ix_%(column_0_label)s",
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(column_0_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s",
}
)


من همیشه اینکار رو برای خودم می‌کنم که توی همه پروژه‌هام یک استاندارد رعایت شده باشه و راحت بتونم دیباگ کنم و بخونم؛ خلاصه برای راحتی خودم هست.

این حرفا رو که امشب شنیدم گفتم بذارم شما هم توی پروژه‌هاتون رعایت کنید.

امیدوارم مفید باشه
👍70
این ترکیب به راحتی می‌تونه خیلی از پروژه‌ها رو از Postgres به Sqlite منتقل کنه؛

Sqlite + Litestream

توی خیلی پروژه‌ها برای خودم پیش اومده که یک دیتابیس نیاز داشتم؛ شاید ۵-۱۰ تا جدول ولی اینکه فقط روی یک سرور نباشه هم برام مهم بوده که خب سرویس‌های کلاد رو استفاده می‌کردم.

همزمان هم Latency میرفت بالا هم کلی هزینه پرفورمنس واسه سربارهایی کار کردن با Postgres میدادم درحالی که به ۹۰٪ اون ویژگی‌ها نیازی نداشتم.

الان داشتم دنبال یک راهکار برای یک پروژه دیگه میگشتم و واقعا دلم نمی‌خواد Latency و Throughput ام بخاطر استفاده از Postgres کم بشه و بعد بشینم اپتیمایز کنم. بخصوص اینکه این دیتابیس هیچ دیتای حساسی نداره و فقط همین که دیتاها از بین نره برام مهم هست.

به چندتا راهکار رسیدم که بنظرم این ترکیب برای کار من برنده هست بخصوص اینکه RustFS رو همین الان داریم :

Turso + Litestream + Rustfs

بعد از پروژه یادم باشه نتایجش رو هم میذارم.

پینوشت: اگر خواستید بیشتر بررسی کنید
Turso
Litestream
Rustfs
👍21
یک آپشن روی sqlalchemy برای relationship هست که شخصا خیلی دوسش دارم؛ باعث میشه به کوئری که سمت دیتابیس میفرستم فکر کنم بجای اینکه ساده‌ترین راه رو انتخاب کنم.
هرجا هم که نیاز دارم دولوپر‌ها به کوئری‌هاشون دقت کنند حتما ازش استفاده می‌کنم.

lazy = "raise"

الان داشتم خروجی پروفایلینگ یک پروژه رو نگاه میکردم؛‌ توی RandRng گفتم راجبش.
دیدم خیلی کوئری‌های دیتابیس زمان بر هست؛ ی سرچ توی مدل‌های دیتابیس زدم و همه‌ی relationship هارو بهش؛
lazy = "raise"
اضافه کردم؛‌ تا دلتون بخواد ارور میگیریم حالا ولی باعث میشه همه به کوئری‌هاشون فکر کنند.

گفتم اینجا هم بذارم شاید بدرد کسی خورد.
👍39
Forwarded from RandRng
داشتم داستان ۲ هفته troubleshoot کردنم برای یک شرکت رو می‌نوشتم و اینکه ۷ نفر قبل من رفته بودند و راهکاری پیدا نشده بود.
حتی بهشون جابجایی استک پایتون رو هم پیشنهاد داده بودند.
و حتی اینکه خرید سرور تا ۳ برابر قویتر هم کمکی نکرده بود.

که سیستمم خاموش شد (نوسان برق)

خلاصه‌اش رو بگم،
تیبل refresh token رو براش بکگراند جاب بنویسید تمیز کنه.
که اگر یکی refresh token رو اشتباهی گذاشت روی 1 ساعت و ۵ میلیون یوزر داشتید

توی چندین ساعت تیبل بزرگ نشه، شما اون باگ رو توی ۳ ساعت بعدش حل می‌کنید
ولی ماها بعد حجم اون تیبل چندین برابر میشه و سرچ کردن توش تمام کوئری‌ها رو کند می‌کنه و می‌شه چیزی که نباید بشه و خفت می‌شید.

تقریباً داشتم از پیدا کردن راهکار ناامید می‌شدم که مشکل رو پیدا کردم.

پینوشت:
۱- دسترسی گرفتن به سرور پروداکشن سخت بود، شاید تنبلی شایدم هرچیز دیگری نفرات قبلی اینکار رو نکرده بودند.

۲- من بعد از اطمینان از کد و البته تست لود و پروفایل روی سرور dev مطمئن شدم باید روی پروداکشن دنبالش بگردم

۳- حتی فکرشم نمی‌کردم مشکل از refresh باشه چون کد تغییری نکرده بود (۱ سال این بخش کدها دست نخورده بود، گیت‌لاگ) و البته آخرین تغییر فایل .env روی سرور هم برای ۷ ماه قبل بود ولی مشکل ۲ ماه پیش شروع شده بود.

۴- اگر سوال پیش اومد چرا refresh رو توی دیتابیس داریم در مورد jti, family id توی jwt بخونید.
👍31
Forwarded from RandRng
اینم برای دوستان دانشجو یا علاقمندای به
Data Structure & Algorithm

این سایت با انیمیشن بهتون نحوه کار هر اگوریتم رو نشون میده (برای دانشگاه سنگاپور هست) و برای هر کدوم :‌
۱- کوئیز داره (نمره نداره یک سری سوال رندم برای درک میزان یادگیری هست)
۲- یک بخش پرینت داره که خلاصه‌ی کامل رو بهتون میده مثل یک cheat sheet که توی چند مورد که من خوندم خیلی خوب و درست نوشته شده.

خلاصه این رو روزی ۱ بار بهش سر بزنید.
👍41
من همیشه دیتابیس تست و ... رو براش اسکریپت می‌نویسم (دستی) بعد توی کدهام از اون موارد استفاده می‌کنم کار تمیزی هست ولی زمانبر

الان همینطوری یک سرچ زدم آنلاین ببینم روش دیگری هست ؟
پروژه‌ای که دستم هست خیلی ساده‌اس و فقط می‌خواستم چندتا فیچر جدید رو هم تست کنم اینکه یک سری اسکریپت دقیق بنویسم و کانفیگ کنم بنظرم زیاد بود

testcontainer

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

پینوشت:
هنوز استفاده نکردم؛ دارم داکیومنتش رو میخونم و بنظرم جذاب و عالی اومد.
👍19
Python Hints
من همیشه دیتابیس تست و ... رو براش اسکریپت می‌نویسم (دستی) بعد توی کدهام از اون موارد استفاده می‌کنم کار تمیزی هست ولی زمانبر الان همینطوری یک سرچ زدم آنلاین ببینم روش دیگری هست ؟ پروژه‌ای که دستم هست خیلی ساده‌اس و فقط می‌خواستم چندتا فیچر جدید رو هم تست…
این دقیقا یکی از اون جاهایی هست که گفتم نیروی جونیور توی تیم لازم هست.

مسئله این هست که من اسکریپت‌هام و راه‌اندازی کانتینر dev برای ابزارها و کانفیگشون با اسکریپت و ... رو شاید ۱-۲ ماه بعد از یادگیری داکر (اوایل معروف شدن) شروع کردم همین امروز هم اگر تنبلی باعثش نبود عمرا همچین چیزی رو سرچ نمیکردم.
حتی اگر احمق بودن بیش از حد LLM ها نبود هم اینکار رو نمی‌کردم؛‌فیچر‌هایی که خواستم تست کنم جدید بود و البته چون نمی‌دونستم رفتار درست ابزارها روی فیچرهای جدید چی‌ هست و چطوری عمل می‌کنه اعتمادی به LLM برای نوشتن این اسکریپت نداشتم دلیلش هم واضح هست :
از کجا بفهمم خطا توی کدم هست؛ یا توی اسکریپت LLM یا حتی اون فیچر رو اشتباه درک کردم یا اشتباه استفاده کردم و ...

این باعث شد سرچ کنم و testcontainers رو پیدا کنم؛ من همیشه محیط تست و توسعه‌ام یکی هست همه چیزش.
روی پروداکشن هم سرور dev, stage و prod همیشه یکسان کانفیگ میشه حتی تا سطح دسترسی و جزئیاتی مثل firewall , ...
فقط تفاوت این میشه که مثلا prod با ۱۰ تا سرور میاد بالا dev با ۱ سرور و stage با ۳ تا سرور اگر جنبه distribute بودن چیزی باشه که برامون مهم هست تست شدنش.

خلاصه اینا معمولا دانشی هست که یک جونیور خوب به تیم اضافه می‌کنه؛ توی جلسات هفتگی یا حتی ماهانه راهکارهای جدید و به روز شده رو جونیورها معمولا به تیم اضافه می‌کردند وگرنه من و مثل من که ۱۰ سال هست یک راهکار رو دنبال می‌کنیم و همیشه جواب داده چرا باید دنبال راه دیگه‌ای بگردیم ؟ (غیر از بروزرسانی و تمیزکردن و بهتر کردنش)
جونیورهای تیم رو نگه دارید؛ چونیور درست و خوب تیم رو آپدیت نگه میداره.
👍27
Python Hints
این دقیقا یکی از اون جاهایی هست که گفتم نیروی جونیور توی تیم لازم هست. مسئله این هست که من اسکریپت‌هام و راه‌اندازی کانتینر dev برای ابزارها و کانفیگشون با اسکریپت و ... رو شاید ۱-۲ ماه بعد از یادگیری داکر (اوایل معروف شدن) شروع کردم همین امروز هم اگر تنبلی…
داشتم دنبال یک ویدئو می‌گشتم که ببینم کسی ماژول‌های مهم رو برای پایتون توضیح داده ؟
یک بخشی از داکیومنت رو خوندم و فهمیدم ماژول چیزی هست که دنبالشم و توی این سرچ متوجه شدم ۳ سال قبل با این ابزار آشنا شدم؛ یا اون موقع بدردم نمیخورده یا پروژه‌هام همه رو اسکریپت بوده و کار میکرده یا ایراداتی داشته که نتونستم استفاده کنم.

خواستم این نکته رو هم اضافه کنم که :
هرچیزی به زمانش و به وقت نیاز بهش خوبه؛ چیزی که امروز خیلی راجبش هیجان دادم و خوشم اومد از پیدا کردنش
۳ سال قبل (کل ویدئو رو دیده بودم) هیجان زدم نکرده شاید به این فکر کردم که خودم با اسکریپت دارم همینکارو می‌کنم دیگه باقیشم که .env و پایتون انجام میده
امروز نیاز و نگاهم عوض شده

اگر جونیور هستید و توی تیم می‌خواید ابزار جدیدی رو پیشنهاد بدید یادتون باشه باید نشون بدید :‌
۱- این ابزار جایگزین روش قبلی هست
۲- جایگزین کردن ابزار قدیم چقدر هزینه داره (یادگیری نیروهای دیگه هم در نظر بگیرید)‌
۳- مزیت‌هاش چیه

که بازم بر میگرده به یکی از مهمترین چیزایی که قبلا گفتم حتما یاد بگیرید یعنی نوشتن ADR اونم صادقانه هم مزایا و هم معایب
👍20