ch
Feedback
Python Hints

Python Hints

前往频道在 Telegram

Python tips and tricks The Good, Bad and the Ugly توی این کانال فقط قرار هست در مورد core python صحبت کنیم. این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار) Admin: @Abbasi_ai

显示更多
9 600
订阅者
+424 小时
+727
+21230
帖子存档
این از بحث گروه هست : خلاصه سوال این بود که؛ چطور ورژن پایتون رو انتخاب کنیم (ی صحبت هم این بود که ۴ تا ورژن قبل از آخرین نسخه برای اینکه پایدارتر هست) : ۱- اولین مورد End of Life هست؛ ۴ نسخه قبل از آخرین Stable Release اطلا و ابدا منطقی نیست و کاملا هم اشتباه هست:
Branch  Schedule  End of life
3.13  PEP 719  2029-10
3.12  PEP 693  2028-10
3.11  PEP 664  2027-10
3.10  PEP 619  2026-10
حتی در حال حاضر 3.9 حدود ۸ ماه دیگه و 3.8 حدود ۴ ماه دیگه پشتیبانی ازشون تموم میشه یعنی اگر باگ - مورد امنیتی یا چیزی بخوره خودتونید و خودتون. اگر زمان توسعه یک پروژه رو ۶ ماه درنظر بگیریم حتی 3.10 هم دیگه ریسک هست (درحال حاضر پروژه‌هام از ۳ ماه قبل روی 3.12 استارت خوردن) ۲- توی مورد قبلی هم گفتم حواستون به Stable Release باشه؛ اگر یک نسخه‌ای روی بخش Stable منتشر شده باید آماده باشید بهش مهاجرت کنید؛ البته چون پشتیبانی توی پایتون ۴-۵ ساله هست؛ می‌تونید کمی صبر کنید ۱ سال و بعد مهاجرت کنید روی نسخه جدید (اینم بخاطر پکیج‌ها می‌گم) ۳- مهمترین نکته؛ پکیج‌هایی هستند که استفاده می‌کنید؛ هرکدوم یک compatibility list دارند مثلا برای Django 4.2.19 محدودیت روی ورژن بالاتر نذاشته :
Requires: Python >=3.8
ولی بعضی پکیج‌ها هستند که دارند برای مثال اگر اینطور باشه یعنی پایتون 3.13 پشتیبانی نمی‌شه هنوز.
Requires: Python 3.8, 3.9, 3.10, 3.11, 3.12
یا خود Django 5.1.6:
Requires: Python >=3.10
۴- به تیم هم بستگی داره؛ اینکه بتونه از تغییراتی که توی ورژن‌های جدیدتر اومده استفاده کنه و باهاشون آشنا باشه. این موارد حداقل چیزهایی هست که قبل از انتخاب ورژن پایتون پروژه باید درنظر بگیرید.

#موقت بیمه سلامت هم هک شده که اگر این باشه، دیگه اطلاعاتی نمونده راجبمون که هکرها نداشته باشند. خودمون انقدر راجب خودمون اطلاعات نداریم.

یک توضیح بدم چون خیلی صحبت می‌شه : درخواست دوره آموزش مخصوصاً برای Django زیاد هست، چه جاهایی که code review انجام دادم چه خصوصی یا گروهی، گفتم چندتا نکته رو بگم : ۱- آموزش خصوصی بصرفه نیست نه برای من نه برای کسی دیگه، برای من دستمزدش کم هست اگر هم پرداخت خوب باشه برای اشخاص بصرفه نیست. ۲- گروهی اوضاع بهتر هست، ولی معمولاً مشکل هماهنگی بین افراد و زمان و مکان پیش میاد. ۳- بهترین گزینه، آموزش آنلاین هست، ولی مشکل اساسی خودم میشم؛ هم مکانی هم تجهیزات و هم ادیتور و ... آخرین باری که با ادیتور کار کردم (دورکاری) کل ویدئوها رو برداشت و پیچید به بازی (یادتون باشه دوره Data structure, Algorithm بود) ۴- آنلاین و مثل جلسات کتابخونی هم نمی‌شه گذاشت، چون اگر به من باشه می‌خوام تمام ابزارهای مهم و لازمه رو بگم که متفاوت باشه از چیزایی که الان موجود هستند. و این یعنی دیزاین درست، کد تمیز و رعایت استانداردها مثل پروژه‌های پروداکشن خودم و این موضوع هم وقت گیر هست و هم باید یک مدت ساعت کاری و درآمد رو کنار بذارم. و کلی موارد مهم دیگه ... برای همین درحال حاضر راهکاری برای برگذاری دوره ندارم واقعاً. البته یکی از دوستان پیشنهاد داد، دوره رو گروهی آنلاین برگذار کنیم ولی اول کدها و ... زده بشه پروژه آماده باشه و کسایی که ثبت‌نام کردند بهشون توی هر جلسه آموزش داده بشه و دقیقتر بررسی بشه. این پیشنهاد مورد خوبی هست، میشه مثل کانال‌های یوتیوب که گزینه Join دارند هم عمل کرد، اونهایی که هزینه رو پرداخت می‌کنند ۶ ماه یا ۱ ورژن زودتر دسترسی داشته باشند و اون‌هایی که امکان خرید ندارند هم نهایتاً بعد از چندماه دسترسی رایگان می‌گیرند 🤔 ولی وضعیت اینطوری بود، چون توی خصوصی زیاد داشتم توضیح می‌دادم که امکانش نیست برای همین گفتم یکبار اینجا بگم. البته راهکار مناسب و معقول هم اگر کسی داشت گوش میدم حتماً

logging نوشتن برای ی سیستم ماژولار و بزرگ؛ بعد ی اتفاقی افتاده توی سیستم مجبور شدن لاگ‌هارو چک کنند ولی هیچی به دست نیاوردن. کاربرا ادعای خسارت کردن و اینها هم مطمئن هستن حداقل ۳۰٪ کاربرا دروغ میگن (منم همین رو دیدم توی دیتاها) اما کدوم کاربرا مشخص نیست. گفتیم شاید داریم لاگ اشتباهی رو می‌بینیم؛ ممکنه چند بخشی باشه یا ... ولی وقتی رفتیم پای کدها؛ دیدیم دولوپر نوشته:
BUG: TODO:
I am forced to move to another micro-service, and this will not work on scale.
و حالا به اون مرحله رسیدند؛ ادعاهای خسارت قابل بررسی نیست و مدیرعامل شرکت به غلط کردن افتاده. طبق گفته خودشون؛ سود چندین سال شرکت پرید - کارد میزدی خون مدیرعامل در نمیومد چون خودش نیروها رو فورس کرده بود. شرکت دیگری که مقصر این وضعیت هم بوده گفته بدون لاگ هیچ خسارتی پرداخت نمی‌کنیم حتی ۱ نفر و اون ۷۰٪ باقی‌مانده رو که فکر می‌کردن ازین شرکت بگیرند رو هم باید از جیب بدند. اینجا دیگه موضوع برنامه‌نویس بد نبود؛ موضوع فشار آوردن بیش از اندازه به تیم برنامه‌نویسی بود.

Repost from RandRng
با صحبت امروز پزشکیان من روی دلار ۱۱۰,۰۰۰ تومان دارم می‌بندم. آخر سال تمام قراردادهای همکاری داخلیم تموم می‌شه و دستمزد جدید رو بر این اساس می‌گیرم، البته که دارم فرض می‌کنم دلار تا چندروز آینده به ۱۰۰,۰۰۰ تومان برسه و مدتی همین حوالی باشه‌. اگر دلار واقعاً به ۱۱۰,۰۰۰ تومان برسه (که اصلاً بعید نیست) قراردادهای سال بعدی رو روی دلار ۱۳۰,۰۰۰ تومان می‌بندم. به ۲ دلیل این رو میگم: ۱- بچه‌های سنیور گفتند چطوری دستمزد بدیم برای سال بعد. ۲- چند نفر دعوت به همکاری کردن، گفتم حدود دستمزد رو بدوند که وقت هم رو نگیریم. دستمزد فعلی رو بر اساس دلار ۶۰,۰۰۰ تومان بسته بودم سال قبل که خدا بیامرزش.

ویدئو توییت همکاری استارلینک و تی‌موبایل برای دسترسی به اینترنت ماهواره‌ای (که البته رایگان هم هست طبق ویدیو) ایلان ماسک این ویدئو رو گذاشت.

هر 1 دلار 90000 تومان هر 1 گرم طلای ۱۸ عیار 6525000 تومان مهمتر از همه؛ این افزایش قیمت‌هایی که الان روی تجهیزات و مواد غذایی
هر 1 دلار 90000 تومان هر 1 گرم طلای ۱۸ عیار 6525000 تومان مهمتر از همه؛ این افزایش قیمت‌هایی که الان روی تجهیزات و مواد غذایی و ... هست رو دقت کنید بهش؛ اینا برای دلار 65000 تومان بوده و نه دلار 90000 تومانی

Repost from RandRng
حدود ۲ سال پیش این موقع یک پروژه بکند رو کار کردیم که همون زمان ۲ قسمت داشت (من مدیر تیم توسعه دهنده این پروژه بودم). بخشی از پروژه که با Fastapi زده شده بود و بخش دیگری که قرار بود با Django شروع بشه. توی شروع خیلی استاندارد سازی و داینامیک بودن پروژه مدنظرم بود، برای همین دوتا از تصمیماتی که گرفتم این‌ها بود : ۱- تمامی تست‌ها؛ با پکیج requests باشه. ۲- همه‌ی endpointهای مربوط به create, update بجای بررسی مستقیم با دیتابیس از طریق درخواست دیتا با Get detail بررسی بشه که درست توی دیتابیس هست یا نه. اون زمان سر این ۲تا خیلی جنگیدم، که تغییر نکنه و حتماً رعایت بشه. امروز مدیرعامل شرکت برای یک پروژه دیگر باهام تماس گرفت؛ توی meet ایی که داشتیم، مدیر فنی وقتی متوجه شد اون پروژه کار من بوده شاید بیش از ۱۰۰ بار تشکر کرد. چرا ؟ چون پروژه از FastApi, Django رفته بود روی Golang و بجای Postgres‌ایی که سمت خودشون باشه از Self-Hosted database های شرکت کارفرما استفاده شده بود. تصمیم اولم کمک کرده بود با وجود زمان کوتاه برای جابجایی به Golang و فشار شرکت کارفرما مبنی بر سرعت بخشیدن به قضیه. نیازی به تغییر تست‌ها نداشته باشند (۹۰٪ هیچی رو تغییر ندادند ولی دقیقش رو نپرسیدم). و تصمیم دوم؛ باعث شده بود بتونند به راحتی دیتابیس عوض کنند، یا حتی کدهای دپلوی شده رو تست بیگرند. توی @pyhints قبلاً اشاره کردم به این موضوع؛ خواستم دوباره بگم که اگر درآینده تغییر فریمورک یا ابزار می‌بینید توی Integration Test ها تا جایی که می‌شه تست‌هارو از ابزارها و فریمورک جدا کنید.

Repost from RandRng
حدود ۲ سال پیش این موقع یک پروژه بکند رو کار کردیم که همون زمان ۲ قسمت داشت (من مدیر تیم توسعه دهنده این پروژه بودم). بخشی از پروژه که با Fastapi زده شده بود و بخش دیگری که قرار بود با Django شروع بشه. توی شروع خیلی استاندارد سازی و داینامیک بودن پروژه مدنظرم بود، برای همین یکی از دوتا از تصمیماتی که گرفتم این‌ها بود : ۱- تمامی تست‌ها؛ با پکیج requests باشه. ۲- همه‌ی endpointهای مربوط به create, update بجای بررسی مستقیم با دیتابیس از طریق درخواست دیتا با Get detail بررسی بشه که درست توی دیتابیس هست یا نه. اون زمان سر این ۲تا خیلی جنگیدم، که تغییر نکنه و حتماً رعایت بشه. امروز مدیرعامل شرکت برای یک پروژه دیگر باهام تماس گرفت؛ توی meet ایی که داشتیم، مدیر فنی وقتی متوجه شد اون پروژه کار من بوده شاید بیش از ۱۰۰ بار تشکر کرد. چرا ؟ چون پروژه از FastApi, Django رفته بود روی Golang و بجای Postgres‌ایی که سمت خودشون باشه از Self-Hosted database های شرکت کارفرما استفاده شده بود. تصمیم اولم کمک کرده بود با وجود زمان کوتاه برای جابجایی به Golang و فشار شرکت کارفرما مبنی بر سرعت بخشیدن به قضیه. نیازی به تغییر تست‌ها نداشته باشند (۹۰٪ هیچی رو تغییر ندادند ولی دقیقش رو نپرسیدم). و تصمیم دوم؛ باعث شده بود بتونند به راحتی دیتابیس عوض کنند، یا حتی کدهای دپلوی شده رو تست بیگرند. توی @pyhints قبلاً اشاره کردم به این موضوع؛ خواستم دوباره بگم که اگر درآینده تغییر فریمورک یا ابزار می‌بینید توی Integration Test ها تا جایی که می‌شه تست‌هارو از ابزارها و فریمورک جدا کنید.

۹ تا ازون اسکلا رو اینجا هم داریم 🤣😂🤣 تعداد اسکلا داره میره بالا ۴۴ تا شد 🤣😂🤣

عمرا بذارم این یادتون بره ... حالا این هیچی، اون اسکلا که نشستن این براشون حرف بزنه 🤣

چون توی گروه گفتم :
تمام پست‌های قبلی که زدم استاندارد پایتون توش بحث شده اگر به هر دلیلی این استانداردا رو دیدید توی django رعایت نشده ۹۰٪ استاندارد جاوا هست غیر از اون از .NetCore اومده
برای جزئیات بیشتر باید کمی با استانداردهای اون زبان‌ها آشنا باشید (شاید یک روز وقت شد صحبت کردیم) ولی بطور کلی : کدها با پایتون زده شده؛ ولی پایتونی نیست.

اینکه ۹۰٪ دولوپر‌های Django توی ایران توی Django با استانداردهای Java کد می‌زنند خستم کرده. اینکه بیش از 50% هم ادعای Mid, Senior دارند عصبیم.

نکته جدید: پایتون خودش پاورشل داره احتمالا تو لینوکس خودش ترمینال داره رو مک هم خودش ویندوز داره جمله بالا از اساتید (مدرس) پایتون

باگ فیکس یوتیوب رو دیدید ؟ ویدئو رو از دقیقه ۱ شروع می‌کنه 😂😂😂

تصویری از #من_سیاسی_نیستم گویان در طبیعت. - دلار: ۸۴۰۰۰ تومان + من سیاسی نیستم - طلا: گرم ۵.۶۰۰.۰۰۰ تومان + من سیاسی نیستم -
تصویری از #من_سیاسی_نیستم گویان در طبیعت. - دلار: ۸۴۰۰۰ تومان + من سیاسی نیستم - طلا: گرم ۵.۶۰۰.۰۰۰ تومان + من سیاسی نیستم - زلزله سرپل ذهاب و عدم کمک دولت + من سیاسی نیستم. - پرداخت چک‌های ۱۴۰۰۰ دلاری خسارت به طرفداران حزب‌الله. + من سیاسی نیستم. خب اگر توی همه‌ی این شرایط سیاسی نیستی؛ فرق تو با گاو چیه دوست عزیز ؟!

تغییرات هفته قبل رو که زدم؛ خیلی‌ها پیام دادن آقا ما mypy استفاده می‌کنیم این pyright خیلی اذیت می‌کنه و ... Github (neovim config) هیجی دیگه منم ی برنچ اضافه کردم؛ که بجای pyright از mypy برای typecheck استفاده کنه. آپدیت ruff رو هم دیدم؛ که باعث می‌شد بعضی تنظیمات قبلی ruff کار نکنه فیکس اون رو هم اضافه کردم روی این برنچ. دیگه امیدوارم واقعا استفاده کنید. 😂😂

یکسری فیچر دوستان درخواست داده بودند که گفتم اضافه می‌کنم ولی فرصت نمی‌شد؛ الان که منتظر کامپایل شدن کد بودم گفتم اینارو هم اضافه کنم. من این موارد رو روی branch دیگری گذاشتم؛ چندروزی تست بشه بعد بیارم روی master تمام موارد رو هم بصورت keybinding اضافه کردم چون بنظرم همون فیچرهای موجود خیلی خوب و کافی هست (اینطوری load-time هم همون زیر ۱۰۰ میلی‌ثانیه می‌مونه) داکیومنت روی برنچ :
feature/mist-requested-bindings
اضافه شده ولی خب تغییرات این موارد هست:
Easier switching between splits:
  Move to the left split: <C-h>
  Move to the right split: <C-l>
  Move to the upper split: <C-k>
  Move to the lower split: <C-j>
Toggle relative line numbers: <leader>rl
-----------------------------------------
Go to definition (vertical split): <leader>gdv
Go to definition (horizontal split): <leader>gds
Peek definition: <leader>gdp
Close all splits except current: <leader>qo
-----------------------------------------
در نهایت مرسی از همه اونایی که تست کردند و نظر دادند.

Self adapting LLM (Inference time)

#Quick داشتم پروژه django شرکت رو می‌خوندم یک مشکل داریم سر بعضی endpointها و برخی تسک‌ها. اولین کاری کردم این بوده که یک سری دیتا تست با faker بهش دادم مثه loadtest ولی بدون ابزار و بعد هم profiling گرفتم و ذخیره کردم. چیز جالبی که دیدم؛ پروژه موقع کار کردن با redis به مشکل میخورد. ولی redis منابعش بیشتر از حد مورد نیازش بود. حجم دیتاهای تست رو کم کردم و مشکل حل شد؛ توی چندتا تست مختلف که زدم دیدم مسئله و مشگل از سمت پیکج redis هست توی پایتون و راهکار ساده رو هم خود redis داده (هرچند من برعکس بهش رسیدم)
$ pip install "redis[hiredis]"
بجای اینکه برای parse کردن دیتا از python استفاده کنه وقتی hiredis رو نصب کنید از C استفاده می‌کنه (بنچمارکاش هم توی گیت‌هاب hiredis هست ببینید) مشکل خیلی ساده حل شد؛ ولی برای این حل ساده خیلی زمان و درک profiling لازم بود. اهمیت profiling