🧑‍💻PythonDev🧑‍💻
365 subscribers
86 photos
3 videos
15 files
78 links
Python tips and tricks
The Good, Bad and the Ugly

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

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


@Mtio975
Download Telegram
Channel photo updated
بنظرتون باگ این سورس کد کجاست ؟
🧑‍💻PythonDev🧑‍💻
بنظرتون باگ این سورس کد کجاست ؟
این یک باگ کاملا شناخته شده و کاملا تکراری هست؛ ممکنه توی مصاحبه‌های مختلف هم تجربه‌اش کرده باشید یا دیده باشید.
یک نمونه مصاحبه Amazon بوده برای پایتون (طرف از یک زبان برنامه نویسی دیگه اومده بود سمت پایتون و دنبال کار بود)

اول برای دوستان تازه کار:
setitem
وقتی
اجرا میشه که میخواهید یک key - value رو داخل dictionary بریزید
و
getitem
وقتی
اجرا میشه که میخواهید یک مقدار رو از دیکشری بخونید.
البته اینجا نه بخاطر باگی که وجود داره

اگر بخوام خیلی ساده توضیح بدم :
مسئله اصلی اینجاس که نسخه پایتونی که بصورت دیفالت از سایت پایتون دانلود میشه روی C کد زده شده و مواردی مثل str, dict, list از کدهای C برای اجرا استفاده می‌کنند.
به همین دلیل وقتی از dict ارث‌ بری بکنید احترامی برای متدهای builtin قائل نمیشه (چون توی C پیاده سازی شده و کد پایتون شما قابلیت overwrite شدن روی کد C رو نداره) پس درنهایت چیزی رو میگیرید که توی C و برای خود پایتون دیکشنری پیاده سازی شده

راه حل :
توی پایتون ماژولی هست به اسم
collections
کاربردهای بسیاری داره که درآینده ممکنه بررسی کنیم اما چیزی که ما الان نیاز داریم

from collections import UserDict

همیشه یادتون باشه وقتی قراره یک کلاس کاستوم برای نوع داده dict بنویسید؛ حق استفاده از
dict
رو ندارید باید از
UserDict
استفاده کنید.
__mro__
یکی ازون موارد جذاب هست؛ پیاده‌سازی و الگوریتم جالبی هم داره
برای دیباگ هم خیلی خیلی کمک کننده هست (مخصوصا وقتی دیباگر در درسترس نیست) که مخفف :
Method Resolution Order

معمولا توی ۹۰٪ پروژه‌ها نیازی بهش ندارید اما توی مصاحبه‌های فنی ممکن هست بهش برخورد کنید مخصوصا اگر شرکت تولید کننده ابزار برای برنامه‌نویس‌ها هست (مثلا تیم Microsoft Vscode )

همونجوری که توی خروجی یا حتی از اسم متد پیداس اولویت اجرای متد رو بهتون نشون میده؛ و یک اثبات دیگه ازین موضوع هست که همه چیز توی پایتون Object هست.
🧑‍💻PythonDev🧑‍💻
__mro__ یکی ازون موارد جذاب هست؛ پیاده‌سازی و الگوریتم جالبی هم داره برای دیباگ هم خیلی خیلی کمک کننده هست (مخصوصا وقتی دیباگر در درسترس نیست) که مخفف : Method Resolution Order معمولا توی ۹۰٪ پروژه‌ها نیازی بهش ندارید اما توی مصاحبه‌های فنی ممکن هست بهش…
یک نکته که شاید لازم باشه بهش اشاره کنم در این تصویر (مخصوصا برای دوستان تازه‌کار)
استفاده از
...
هست (اصطلاحا بهش Ellipsis گفته میشه توی پایتون اگر خواستید بیشتر بخونید)
یکی از کاربردهاش زمانی هست که ی بخش از کد رو هنوز پیاده سازی نکردید.
توی این کاربرد مثل pass می‌مونه
#موقت

درحال بررسی یک منبع فوق‌العاده هستم.
۳-۴ ساعت طول می‌کشه ولی اگر به همون خوبی باشه که از یکی از کانتریبیوترهای جنگو شنیدم (دارم همین موضوع رو بررسی میکنم؛ چون تازه با این شخص آشنا شدم.)

واقعا نمی‌دونم چرا توی کانال‌های توسعه وب با پایتون این رو پیدا نکردم :/

اگر ندیدید که خب چرا ؟
اگر دیدید و نذاشتید؛ اینارو واسه خودتون نگه میدارید ؟
بذارید خدایی این مباحث رو.

متأسفانه فرصت نکردم تکمیل کنم (چندتا تسک بهم خورد این وسط)
به محض خلوت شدن، ادامه میدم و تکمیل می‌کنم
🧑‍💻PythonDev🧑‍💻
#موقت درحال بررسی یک منبع فوق‌العاده هستم. ۳-۴ ساعت طول می‌کشه ولی اگر به همون خوبی باشه که از یکی از کانتریبیوترهای جنگو شنیدم (دارم همین موضوع رو بررسی میکنم؛ چون تازه با این شخص آشنا شدم.) واقعا نمی‌دونم چرا توی کانال‌های توسعه وب با پایتون این رو پیدا…
این ویدئو در راستای همون صحبتی هست که داشتم :

وب رو فارغ از فریمورک یاد بگیرید

متأسفانه خیلی از بچه‌هایی که با پایتون وب رو یاد گرفتند بخصوص جنگو، اگر فریمورک عوض بشه باید از صفر شروع کنند برای همین جابجایی بین فریمورک‌های مختلف بسیار براشون سخت هست

YouTube Video

توی این ویدئو که از PyCon سال 2017 هست
Jacob Kaplan
از توسعه دهنده‌های اصلی django بهتون وب رو فارغ از فریمورک آموزش میده و شاید مقدماتی رو میگه از اینکه چطور وب فریمورک بعدی رو خودتون بنویسید.

شخصاً با خیلی از مباحث آشنا بودم ولی بازم خیلی چیز جدید داشت برام؛ اگر بخوام بگم چطوری بخونید پیشنهادم این هست :

۱- ویدئو رو ببینید و تمریناتش رو انجام بدید
۲- تمرینات رو برای کار خودتون بسط بدید (برای من RestApi)
۳- تمرینات بالا و منابع معرفی شده رو برای ASGI هم دنبال کنید.
۴- تمرینات رو خودتون انجام بدید، حتی اگر هر تمرین بیش از زمان پیشنهادی توی ویدیو وقت بگیره (اگر با مباحث هیچ آشنایی دقیقی ندارید ممکنه هر تمرین بیش از چندین ساعت وقت بگیره ولی شک نکنید هزاران بار ارزشش رو داره)


بازم میگم؛ برای منی که با تمامی این مباحث آشنایی داشتم نکات ریز و roadmap خوبی بود برای پیشرفت؛ قطعاً برای عزیزانی که تازه آموزش مقدماتی جنگو یا ... رو تموم کردند فوق‌العاده خواهد بود.
و حتماً به کار دوستان سطح بالاتر هم خواهد اومد.
🧑‍💻PythonDev🧑‍💻
این ویدئو در راستای همون صحبتی هست که داشتم : وب رو فارغ از فریمورک یاد بگیرید متأسفانه خیلی از بچه‌هایی که با پایتون وب رو یاد گرفتند بخصوص جنگو، اگر فریمورک عوض بشه باید از صفر شروع کنند برای همین جابجایی بین فریمورک‌های مختلف بسیار براشون سخت هست YouTube…
#موقت

آماری ترکوند این پست :
روی ۴۰۰ تا بازدید
۱۰۰ تا share خورد، که خب دفعه اول بود توی کانال

ولی خدایی نفرستید توی save message که هیچوقت نبینید‌، حتماً برای این یکی وقت بذارید

پ.ن : چیکار کنم، ی بخشی از شغلم، دیتاساینس هست دیگه 🥲
#django_roadmap #roadmap

امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند :
۱- پایتون رو تا سطح خوبی بلد هست
۲- ساختمان داده و الگوریتم رو می‌شناسه
۳- لینوکس، گیت و داکر رو هم بلده

یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین موضوع هست که خیلی از بچه‌ها بهم گفتند چطوری تونستی بعد از ۲ هفته یادگیری جنگو شروع به کار کنی ؟

اول باید بگم که من ۲ هفته‌ای فهمیدن جنگو رو مدیون زحماتی هستم که روی پایتون کشیدم، بر عکس خیلی‌ها که شروع می‌کنند فریمورک یادگرفتن من فارغ از فریمورک توسعه وب رو یاد گرفتم و بعد اومدم سراغ جنگو (هرچند توی جنگو خیلی جا برای پیشرفت دارم و باید زحمتش رو بکشم هنوز)
برای همین هست که وقتی کسی بهم میگه roadmap بده میگم ۳-۶ ماه اول فقط پایتون، من به خیلی‌ها گفتم کتاب
Fluent Python
رو جلوت بذار و سرفصل‌هاش رو بخون، اگر مفهومی رو بلد نیستی یعنی هنوز آماده نیستی که بری سراغ فریمورک (حالا اینکه این موضوع برای نسل آینده برنامه‌نویسی توسعه میشه، خودش یک داستان هست. یعنی این نسخه رو نمیشه برای همه پیچید ولی قطعاً این بهترین راه هست)

تکنیکی که شخصاً باهاش فریمورک و ... رو یاد میگیرم، مختص خودم هست و اسمش رو منبع سوزی میذارم، چطوری هست ؟

۱- اول مطمئن میشم با اون فریمورک ارتباط برقرار می‌کنم و جوگیر شدن و ... درکار نیست

برای مثال روی همین جنگو :

اول رفتم سراغ این پلی لیست :
Youtube Playlist

دفعه‌ی اول با سرعت 3x نگاهش کردم کامل که تقریباً ۱ روز جمعه‌ام رو گرفت، بعد یک سری تحقیق کردم و مطمئن شدم ازین فریمورک خوشم اومده

دفعه‌‌ی دوم همین پلی لیست رو با دقت بیشتر و روی سرعت 1.5x نگاه کردم.

توی این تکنیک برای قدم اول هیچ نیازی به کد زدن نیست، شما تکیه میدی و از دیدن فیلم لذت میبری، توی دفعه‌ی دوم دیدن ویدئو منابع مهم رو روی یک مرورگر دیگه باز می‌کنید مثلاً: من متوجه شدم چیزهایی به اسم :
Redis, Celery, Flower, django rest framework, ...
وجود داره و همینجا متوجه شدم نیاز من یادگیری با جزئیات
DRF
هست و نه Django forms یا template نویسی پس این دو مورد رو خیلی کم روش وقت گذاشتم.

2- یادگیری از یک منبع مناسب، من کتاب‌های زیادی رو خوندم چون منبع جامع و مناسبی پیدا نکردم برای
DRF
ولی دیروز شروع کردم به خوندن یک کتابی که سرفصل‌های جالبی داشت و ۳ فصل اول رو خوندم و تموم شد که بنظرم منبع خیلی خوبی اومد نسبت به کتاب‌های دیگری که خوندم :

Becoming an Enterprise Django Developer
By Michael Dinder  (Packt pub)

دقت کنید من هنوز کل این کتاب رو نخوندم ولی تا اینجا خیلی خوب توضیح داده برای شروع.
توی این قدم معمولاً اینطوری عمل می‌کنم که وقتی ۱ فصل رو خوندم و تموم شد، چند ساعتی به کارهام میرسم و بعد بر میگردم سراغ کتاب اما قبل از شروع فصل جدید بدون اینکه به کتاب رجوع کنم سعی می‌کنم کل نیازمندی و چیزی که توی اون فصل یادگرفتم و نیاز هست برای فصل بعدی رو بر اساس یادگیریم پیاده‌سازی کنم.
وقفه بین کتاب و کد برای این هست که مطمئن‌ بشم چیزی رو از حفظ نمیزنم و موضوع رو درک کردم تنها منبعی که میشه توی این بخش ازش استفاده کرد : گوگل + داکیومنت رسمی جنگو هست

۳- هرکتابی که انتخاب کنید، وقتی یک مفهوم رو توضیح میده برای موارد بیشتر و دقیق‌تر به منبع اصلی reference میده، مثلاً کتاب بالا
وقتی یک فصل رو تموم می‌کنید، بعد از اینکه اون فصل رو کدهاش رو زدید و تموم شد
باید برگردید روی کتاب و همون فصل و منابعی که برای خوندن بیشتر بهتون معرفی کرده رو بخونید.
این قدم بسیار بسیار مهم هست، چون هم با اصطلاحات آشنا می‌شید، هم با اکو سیستم اون فریمورک و هم یاد میگیرید چطور باید از داکیومنت فریمورک استفاده کنید بدون اینکه وقت تلف کنید.

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

پس اگر از نحوه خوندن من و البته بخش اول که پیش‌نیاز هست بگذریم ۴ تا منبع معرفی می‌شه کرد :

1- YouTube PlayList
نسخه DRF هم هست (اگر دوست داشتید توی همون کانال ببینید)
2- Becoming an Enterprise Django Developer By Michael Dinder (Packt pub)

3- Django documentation
4- Django Rest Framework

و در نهایتاً نمیشه توسعه دهنده جنگو باشید و عضو بزرگترین کامیونیتی جنگو فارسی نباشید :
@DjangoEx

صاحب کانال رو میشناسم و به هدفش ایمان دارم، از روز اول هم دنبال کننده‌اش هستم و خواهم بود.
🧑‍💻PythonDev🧑‍💻 pinned «#django_roadmap #roadmap امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند : ۱- پایتون رو تا سطح خوبی بلد هست ۲- ساختمان داده و الگوریتم رو می‌شناسه ۳- لینوکس، گیت و داکر رو هم بلده یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین…»
توی دوره‌های آموزشی و دانشگاه چیکار می‌کنند ؟!

چرا همه جوری صحبت می‌کنند که انگار همین یک دوره، همین یک کتاب یا ... برای کار و کل عمر کفایت می‌کنه ؟!

نکنید اینکارو، Junior های عزیز بعضی ازین برگذار کننده‌های دوره که فقط به فکر سود شخصی هستند شما مراقب باشید سمت این افراد نرید.

نه بخاطر پول، حتی نه بخاطر وقت که دقیقاً تو دنیای الان برنامه‌نویسی مثل طلا می‌مونه

بلکه بخاطر اینکه خیلی از شما دوستان اشاره کردید به گرد ناامیدی شدن پست‌های کانال براتون

پست‌های کانال سطح بالاتری از تازه‌کار داره، حتی ممکنه یک سنیور رو ببینید که این مطالب رو بلد نیست (اشکالی هم نداره تا حدودی، چون بهش نیازی نداشته شاید)

اولین کاری که می‌کنید وقتی دوره تموم شد، اینه که برید مصاحبه
مصاحبه‌ها حتی اگر فقط رد بشید، بهتون کلی اطلاعات مهم میده اینکه بازار کار چی میخواد و چه مواردی رو باید بلد باشید
اگر رد نشدید، که بسیار هم عالی شغل پیدا کردید و این شغل یعنی کلی چیز جدید یاد گرفتن (مخصوصاً برای تازه‌کار)

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

مصاحبه دادن و نترسیدن از رد شدن توی مصاحبه، اولین و مهمترین قدم برای پیشرفت و senior شدن هست

مهمتر اینکه :
همیشه بپرسید به چه دلیل رد شدید.
تغییرات جالبی توی این ۲ روز داره اتفاق میوفته :

حدودا از ۱-۲ ماه قبل حالت
safe search
برای همه ایرانی ها فعال شد؛ google, duckduckgo , ... و خب تنظیماتش هم قابل غیرفعال سازی نبود

صحبتم این نیست ولی راهکارش :
sudo nmtui
Edit a connection
<select your network interface>
IPv4 Configuration section —> select show
DNS Server —-> select Add:
4.2.2.4
8.8.4.4
8.8.8.8
یکی ازینا یا هر ۳ رو انتخاب کنید
Select:
Ignore automatically obtained DNS parameters

بعد OK, میزنید و Back
Activate a connection
رو وارد میشید اون interface ایی که تنظیم کرده بودید رو یکبار غیر فعال و مجدد فعال می‌کنید
دیگه این اتفاق براتون نمیوفته توی آندروید و iOS و ... هم این تنظیمات هست.

حالا صحبتم این نیست؛ من تنظیمات بالا رو روی یکی از سیستم‌ها و چندتا از سرورها انجام نداده بودم؛ ۲ روز قبل به یکباره اتصالم به خیلی از سایت‌هایی که روزانه چک میکردم قطع شد.
بررسی کردم دیدم مشکل از DNS هست که خالی شده cache و بعدم دیگه این سایت‌هارو نمیگیره فکر کردم بخاطر تجهیزات و ابزارهایی هست که استفاده می‌کنم و تست میگیرم

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

روی سرویس‌ دهنده‌های دیگه اینکار رو کردم (سرورهای خودم) دیدم اون‌ها هم همینطور شده

بنظرتون اوضاع داره بدتر هم می‌شه ؟

با این وضعیت باید با رفقا هماهنگ کنم از starlink ایی که دارند استفاده کنیم پروژه‌هامون رو تحویل بدیم.
چون روی یکی از سرورها گیت‌هاب رو هم ندارم.


پ.ن :
فکر کن یکی بیاد بگه push میزنم پروژه‌ات رو
هر push میشه ۲۰۰۰ تومن ؛ هر pull پروژه خودت باشه ۱۰۰۰ تومن پروژه سنگین باشه ۵۰۰۰ تومن
هر pull request بین ۲۰۰۰ تا ۱۰.۰۰۰ تومن میوفته
و برای fetch and merge هم ۵۰۰۰ تا ۲۰.۰۰۰ تومن
اگر merge با conflict باشه ۵۰.۰۰۰ تومن میشه


لطفاً اگر این اتفاق برای شما هم افتاده اطلاع بدید.
اگر monitoring هم اضافه کنید
می‌بینید خیلی از سرویس دهنده‌های داخلی برای IP غیر ایران از ساعت ۱ شب به بعد از کار میوفته، اگر اطلاع بدید به پشتیبانی راه می‌اندازند مجدداً (و دوباره چند شب بعد, این اتفاق دائم در حال تکرار هست)
اگر نه حداقل چند روزی قطع خواهید بود.

توی عکس Downtime سرور ما برای کاربرهای خارجی از ۳ دقیقه شروع شد
تا رسید به ۳۰ دقیقه (ما هرشب اطلاع میدادیم)

ولی توی چندروز اخیر بالای چند ساعت هست که رکوردش توی عکس بالاس، برای از دست ندادن مشتری (استارتاپ همه‌ی درآمدش از ارائه سرویس خوب به مشتری هست) مجبوریم بریم روی سرورهای خارجی و سرویس دهنده‌های cloud داخلی رو بیخیال بشیم؛

مخصوصاً اینکه همشون میگن مشکل از درخواست‌های وزارت ارتباطات هست.
برای همین هم هرکاری کنیم هیچ خسارتی نمی‌تونیم بگیریم.

یک‌ موضوع دیگه این هست که حالا که از مشتری‌های خارجی به درآمدزایی رسیدیم (دلار خیلی باصرفه تر از ریال هست با اینکه مشتری داخلی بسیار داریم) اعضای اصلی تیم و شرکت و ... رو منتقل کنیم از ایران
طبق صحبت‌های وکیل شرکت، متوجه شدم چندین کشور هم هستند که تسهیلات خوبی بهمون ارائه می‌کنند برای این انتقال
این سوالات احمقانه‌اس
که خب متأسفانه توی لینکدین و توییتر و اینستاگرام پر شده
و فقط وقتتون رو داره میگیره

بنظرم این موارد توهم زا هم هست، تازه‌کار فکر می‌کنه اینکه می‌تونه این سوالات رو جواب بده یعنی خیلی بلد هست.

ولی آیا واقعاً اهمیتی داره دونستن این موارد ! حتی اگر اینجوری کد بزنید.

تهش اینه ی print توی سورس کد می‌ذارید و خروجیش رو می‌بینید.

عمرتون رو صرف سوالات احمقانه نکنید، این اکانت‌ها رو هم معروف نکنید

شخصاً
Connection
رو روی لینکدین حذف می‌کنم وقتی می‌بینم کسی با این پست‌ها یا لایک کردن این پست‌ها باعث حواس پرتیم می‌شه.
دقیقاً این موارد حواشی برنامه‌نویسی هست
خیلی خیلی مراقب باشید.
photo_2023-09-23_23-01-54.jpg
41.3 KB
این کد ی مشکل اساسی داره (بزرگ و اساسی) مخصوصا توی پروژه‌های حرفه‌ای
موضوع پیچیده‌ای نیست ولی چون زیاد دیدم ترجیح دادم بهش اشاره کنم تا کم کم دیگه نبینیم.

می‌تونید حدس بزنید چی هست ؟

توضیحات پست بعدی

پ.ن : typing توی پروژه‌ها موضوع مهمی هست اما توی پایتون الزامی نیست
هیچوقت باگ محسوب نمی‌شه و فقط جزو شرایط
clean code
هست (به این مورد اشاره نکنید)
🧑‍💻PythonDev🧑‍💻
photo_2023-09-23_23-01-54.jpg
مشکل اصلی استفاده از
except Exception as ex:
که دوستان توی کامنت اشاره کردند.

اصطلاحا به این روش میگن
Broader Approach

مسئله اینه که توی کد بالا من با ارور هیچ‌کاری نمیکنم (اما توی این شرایط هم broader approach اشتباه هست) ولی فرض کنید شما باید این موارد رو لاگ بندازید. در این شرایط exception handle شما به درد نمیخوره احتمالا لاگ هم همینطور چون کسی اروری نمی‌بینه که بخواد لاگ فایل رو بخونه (حتی اگر توی لاگ جزئیات بیشتری هم نوشته شده باشه)
منبع بسیاری از BUG های مخفی همین مورد هست.

قبل از اینکه راه حل رو بگم ی موضوع دیگه برای تازه‌کارها اشاره کنم (شوخی و روشی برای ایستگاه کردن junior developer ها بوده البته کمتر دیده می‌شه دیگه ولی ی زمان تو دانشگاها خیلی زیاد بود بخصوص خارج از ایران) شاید بخاطر اینکه دیگه این مدل کد استفاده نمی‌شه

ی مدل دیگه exception داریم که اصطلاحا بهش میگن :
naked exception
از همینجا شاید متوجه شدید دیگه؛ 😂😂

نوع تعریفش اینطوری هست :
except:

قبلا که خیلی مد بود استفاده ازین مورد و هنوز کلمه nude انقدر جاافتاده نبود برای ایستگاه کردن دانشجوهای سال پایینی استفاده میشد (بین‌المللی)
طرف به ارور میخورد بهش میگفتن ؛ naked ات رو بده تا بگم (خیلی وقتا کار به جاهای باریک میرسید مراقب باشید خلاصه 😅😅😅)

ازین ۲ مدل هیچوقت استفاده نکنید که یا BUG مخفی میخورید یا خدایی نکرده ایستگاه می‌شید.

راه حل کد بالا :
۲ تا Exception جدا بنویسید :
except IndexError as ex:
و اگر قرار هست TypeError هم silent کنید در ادامه‌اش
except TypeError as ex:

یا حتی ادغام هر ۲ :
except (IndexError, TypeError) as ex:
اینو همه‌ی سرمایه‌گذارهای پروژه و کد توی ایران حتما باید ببینند :
برای دولوپر‌های عزیز هم قبل از اینکه جوگیر بشید و بگید میخوام شرکت بزنم این رو ببینید (این بررسی فقط از جنبه‌های توسعه نرم‌افزار هست باقیش هیج)

https://www.youtube.com/watch?v=Dl-BdxNRUqs
کانفیگ logging برای من همیشه اذیت کننده هست.
بخش عمده‌ای از تسک‌های من مربوط میشه به
Deep learning, ML engineering

اما وجه دیگه کارم backend هست و software engineer برای همین خیلی کم پیش میاد نیاز داشته باشم ی لاگر با جزئیات بنویسم

از طرفی هم ۹۰٪ کدهایی که از بچه‌های بکند تحویل میگیرم ی logging نوشته شده که حافظه زیادی قرار هست بگیره (بخصوص روی سرور تست دارم صحبت میکنم که حجم لاگ بالا میره)

این کد رو قبلا برای Django نوشتم ؛ توضیح دادم تقریبا چند هفته بعد از شروع یادگیری یکی از بدترین پروژه‌های شرکت رو دست گذاشتم روش و شروع کردم به بازنویسی این لاگر رو برای اون نوشتم

هر لاگ فایل تا ۱۰ مگ حجم می‌تونه اشغال کنه و بعد از اون فایل ذخیره میشه به اسم backup تا ۱۰ تا ورژن ازین بکاپ‌ها نگه میدارم فقط و روی نسخه ۱۱
log rotate 
میخوره و قدیمی‌ترین فایل حذف میشه

البته این خیلی ساده‌اس ولی خب از اون کیلویی اضافه کردن logging فایل قطعا بهتره

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

۱- کد بالا ربطی به django نداره، هرچند توی یک خط من برای مسیر فایل از django استفاده کردم. Logging مربوط به core python هست.

۲- بیش از ۳۰ نفر سوالاتشون راجب همین موضوع بود، تماماً هم مشترک (دوستان گروه برای همین منظور ساخته شده و بخش کامنت) ازین به بعد این سوالات رو فقط توی گروه بپرسید.

۳- توی پیام‌ها ویس ندید، مخصوصاً قبل از هماهنگ کردن ۹۹.۹٪ اصلا پیام رو باز نمی‌کنم اگر اینطور باش

۴- احوال پرسی و خبر پرسیدن رو نمی‌فهمم، بعد حالا اگر پرسیدید چرا منتظر جواب نمی‌مونید ؟
بجای خوب هستی و چه خبر، همون سلام کفایت می‌کنه و یا اگر عادت کردید برای غریبه از
امیدوارم سلامت باشید استفاده کنید بخدا قشنگتر هم هست

۵- قبل از سوال پرسیدن نیازی به تاریخچه نویسی نداره، کی بودید و چیکار کردید و چرا به من ربطی نداره واقعاً و اگر برای راهنمایی لازم باشه قطعاً خودم می‌پرسم از شما (بعضی‌ها ۲۰ تا پیام میذارند آخر سوال از یکی از پست‌های کانال می‌پرسند)

۶- نهایتاً، خواهش می‌کنم
خواهش می‌کنم
اصلی ترین رفتار برنامه‌نویسی رو رعایت کنید

پیام‌ها رو مختصر بنویسید همه‌ی موارد رو داخل یک پیام ارسال کنید بریده بریده پیام دادن اسپم حساب می‌شه

بدتر از بریده بریده پیام دادن ۷-۸ تا پیام فرستادن و در نهایت گفتن این هست که بگید، می‌تونم سوال بپرسم ؟!

بجای اسپم کردن، اصل سوال رو بپرسید لطفاً این خیلی خیلی مهم هست.


دوستانی که این موارد رو رعایت نمی‌کنند، حداقلش اینه که اجازه نمی‌دهند من وقت داشته باشم به باقی دوستان هم کمک کنم.

مرسی از همگی دوستانی که رعایت می‌کنند یا خواهند کرد 🌹