این سوالات احمقانهاس
که خب متأسفانه توی لینکدین و توییتر و اینستاگرام پر شده
و فقط وقتتون رو داره میگیره
بنظرم این موارد توهم زا هم هست، تازهکار فکر میکنه اینکه میتونه این سوالات رو جواب بده یعنی خیلی بلد هست.
ولی آیا واقعاً اهمیتی داره دونستن این موارد ! حتی اگر اینجوری کد بزنید.
تهش اینه ی print توی سورس کد میذارید و خروجیش رو میبینید.
عمرتون رو صرف سوالات احمقانه نکنید، این اکانتها رو هم معروف نکنید
شخصاً
Connection
رو روی لینکدین حذف میکنم وقتی میبینم کسی با این پستها یا لایک کردن این پستها باعث حواس پرتیم میشه.
دقیقاً این موارد حواشی برنامهنویسی هست
خیلی خیلی مراقب باشید.
که خب متأسفانه توی لینکدین و توییتر و اینستاگرام پر شده
و فقط وقتتون رو داره میگیره
بنظرم این موارد توهم زا هم هست، تازهکار فکر میکنه اینکه میتونه این سوالات رو جواب بده یعنی خیلی بلد هست.
ولی آیا واقعاً اهمیتی داره دونستن این موارد ! حتی اگر اینجوری کد بزنید.
تهش اینه ی print توی سورس کد میذارید و خروجیش رو میبینید.
عمرتون رو صرف سوالات احمقانه نکنید، این اکانتها رو هم معروف نکنید
شخصاً
Connection
رو روی لینکدین حذف میکنم وقتی میبینم کسی با این پستها یا لایک کردن این پستها باعث حواس پرتیم میشه.
دقیقاً این موارد حواشی برنامهنویسی هست
خیلی خیلی مراقب باشید.
👍98🙏6👌2👎1😁1🌚1
همونجوری که توی کامنت و گروه صحبت شد؛ و قبلا هم بسیار اشاره کردم توی موارد مختلف
EAFP (Easier to Ask Forgiveness than Permission)
مدل کد زدنی هست که توی core python هم دیده میشه حتی توی سورس کد اصلی که با
داستان ازین قرار هست؛ توی پایتون 3.11 برای مثلا عملگر
EAFP
استفاده میکنه ینی فرض میکنه type ها int هست و سعی میکنه هر ۲ مورد رو باهم جمع بزنه ولی اگر
برای همین داشتن یک لیست از نوع دادهای
[int, float, str, int, float, str, ....]
توی پایتون ۳.۱۱ خیلی چیز بدی هست و باعث کند شدن اجرا میشه (بدتر از پایتون ۳.۸ چون چندین سربار به سیستم میدید؛ یک تلاش برای انجام و
شنگتر اینه که ۳ تا لیست یا آرایه (پایتون لیست و آرایه باهم فرق داره پست بعدی) از ۳ نوع مختلف بسازید و بعد
اگر فکر میکنید چقدر بد هست این ویژگی: مجدد فکر کنید (داری اشتباه میزنی)
ثابت شده بیش از ۹۶٪ موارد و مخصوصا توی کدهای اصولی این حالت درست هست و نوع دادهای ثابت میمونه زبانهای برنامهنویسی دیگری هم هستند که ازین ویژگی استفاده میکنند. (روی static type ها فکر نکنید)
خلاصه که پایتون 3.11 هم EAFP استفاده میکنه و اینکه آپدیت شدن روی نسخههای پایتون فقط به نصب کردن نسخه جدیدتر نیست.
@PyHints
EAFP (Easier to Ask Forgiveness than Permission)
مدل کد زدنی هست که توی core python هم دیده میشه حتی توی سورس کد اصلی که با
C
نوشته شده؛ این تغییر رو من توی یکی از سخنرانی های Guido van Rossum خالق پایتون شنیدم و توی لایو یکی از افراد مشهور ایرانی (اسم نمیبرم دیگه) که داشت میگفت سرعت پایتون 3.11 از 3.8 - 60% بیشتر نیست و دروغ هست هم بهش اشاره کردم.داستان ازین قرار هست؛ توی پایتون 3.11 برای مثلا عملگر
+
اگر شما تا اینجای اجرای کد ۴-۵ بار فقط اعداد int رو باهم جمع زدید از این به بعد پایتون دیگه نوع داده رو چک نمیکنه بلکه از EAFP
استفاده میکنه ینی فرض میکنه type ها int هست و سعی میکنه هر ۲ مورد رو باهم جمع بزنه ولی اگر
exception
بخوره در اون حالت تازه میره نوع داده هر دو argument رو چک میکنه و add
رو مناسب اون type اجرا میکنه.برای همین داشتن یک لیست از نوع دادهای
[int, float, str, int, float, str, ....]
توی پایتون ۳.۱۱ خیلی چیز بدی هست و باعث کند شدن اجرا میشه (بدتر از پایتون ۳.۸ چون چندین سربار به سیستم میدید؛ یک تلاش برای انجام و
exception
و بعد تازه type check
درحالی که پایتونهای قبل از ۳.۱۱ همون اول type check
میکردند)شنگتر اینه که ۳ تا لیست یا آرایه (پایتون لیست و آرایه باهم فرق داره پست بعدی) از ۳ نوع مختلف بسازید و بعد
add
رو اجرا کنید.اگر فکر میکنید چقدر بد هست این ویژگی: مجدد فکر کنید (داری اشتباه میزنی)
ثابت شده بیش از ۹۶٪ موارد و مخصوصا توی کدهای اصولی این حالت درست هست و نوع دادهای ثابت میمونه زبانهای برنامهنویسی دیگری هم هستند که ازین ویژگی استفاده میکنند. (روی static type ها فکر نکنید)
خلاصه که پایتون 3.11 هم EAFP استفاده میکنه و اینکه آپدیت شدن روی نسخههای پایتون فقط به نصب کردن نسخه جدیدتر نیست.
@PyHints
👌25👍7❤1🍾1
همونطوری که گفتم توی پایتون
کار با لیست بخاطر خاصیت داینامیک بودن (هم از نظر سایز و حافظه و هم نوع دادهای) راحت تر هست اما همین دو ویژگی توی لیست باعث سرباز زیادی میشه
تصویر بالا مربوط به میزان مصرف حافظه
اولین قدم توی optimization استفاده از نوع داده درست هست :
@PyHints
list, array۲ تا موضوع متفاوت از هم هست.
کار با لیست بخاطر خاصیت داینامیک بودن (هم از نظر سایز و حافظه و هم نوع دادهای) راحت تر هست اما همین دو ویژگی توی لیست باعث سرباز زیادی میشه
تصویر بالا مربوط به میزان مصرف حافظه
Array - List - Numpy
هست (داده مربوط به کار هوش مصنوعی)اولین قدم توی optimization استفاده از نوع داده درست هست :
list —-> numpy arrayحساب کنید میزان بهبود در مصرف رم را
3.8GB —-> 125MB
@PyHints
✍26👍19❤🔥5❤1🎉1🍾1
حتما شما هم با
همین که دیگه لازم نیست یادتون بمونه فایل رو ببیند یا اینکه کد درست رو بزنید
بستن فایل باید توی بخش finally باشه و ...
یک کلاس داخل تعریف پروتوکل
پس توی این بین میشه کارهای زیادی انجام داد
کد بالا مربوط به یکی از پروژههای بزرگ هست که توضیح میدم بدها
ی hot-fix که زدم و از
توجه کنید خارج از with خروجی print مثل قبل چاپ میشه و دیگه توی فایلی نوشته نمیشه چون توی
@PyHints
with open
توی پایتون کار کردید فوقالعاده کمک کننده و مفید هست همین که دیگه لازم نیست یادتون بمونه فایل رو ببیند یا اینکه کد درست رو بزنید
بستن فایل باید توی بخش finally باشه و ...
try:همین شرایط برای connection به دیتابیس هم هست.
excpet:
finally:
with openاز یک راه حل تمیز و زیبا استفاده میکنه که بهش
Context Manager Protocol
گفته میشه یک کلاس داخل تعریف پروتوکل
context managerقرار میگیره اگر ۲ تا متد رو داشته باشه
__enter__, __exit__دقیقا وقتی وارد بلوک
__enter__
with .... :میشیه اجرا میشه و
pass
__exit__
وقتی از with
خارج میشه پس توی این بین میشه کارهای زیادی انجام داد
کد بالا مربوط به یکی از پروژههای بزرگ هست که توضیح میدم بدها
ی hot-fix که زدم و از
print
رو بجای logger
استفاده کردم توجه کنید خارج از with خروجی print مثل قبل چاپ میشه و دیگه توی فایلی نوشته نمیشه چون توی
__exit__
sys.stdout
به مقدار قبلی برمیگرده.@PyHints
👍21🔥7✍1
Evenin
Jimmy Witherspoon
Evenin'
Artist: Jimmy Witherspoon
Album : Evenin' Blues
Released: 1964
Produce: 1963
Genres: Blues / Jazz
@PytensMusic
Artist: Jimmy Witherspoon
Album : Evenin' Blues
Released: 1964
Produce: 1963
Genres: Blues / Jazz
@PytensMusic
👍12❤2👎1
Python Hints
Jimmy Witherspoon – Evenin
موسیقی تقدیم شما بابت 1k شدن کانال توی کمتر از ۱ ماه
مرسی از همگی، امیدوارم لذت ببرید.🌹
بازم تاکید میکنم
share , reference
دادن به کانال رو هستم، ولی اگر میخواید مطالب رو کپی هم کنید
کپی کاملاً آزاد.
مطالب رو ویدئو youtube کردن، کاملاً آزاد.
کلا هر روشی که باعث بشه استفاده از مطالب کمک به پیشرفت جامعه پایتون کنه آزاد هست.
اینارو گفتم چون به دفعات سوال شده (البته قبلاً هم گفته بودم)
مرسی از همگی، امیدوارم لذت ببرید.🌹
بازم تاکید میکنم
share , reference
دادن به کانال رو هستم، ولی اگر میخواید مطالب رو کپی هم کنید
کپی کاملاً آزاد.
مطالب رو ویدئو youtube کردن، کاملاً آزاد.
کلا هر روشی که باعث بشه استفاده از مطالب کمک به پیشرفت جامعه پایتون کنه آزاد هست.
اینارو گفتم چون به دفعات سوال شده (البته قبلاً هم گفته بودم)
❤43👍18❤🔥6
فونت
این جنگ تیمی هست 😂😂😂
شماهم ازین جنگها دارید ؟
پ.ن :
اومدم ی مثال واقعی از پست قبلی بزنم font اینطوری بود گفتم از شما هم بپرسم. (البته اینجا زوم هم زیاد شده راحتتره خوندنش)
vscode
من وقتی کسی نباید بفهمه چی کد میزنم (چون افرادی که بخشی از کار بهشون سپرده شده توی تیم رقیب رفقای صمیمی دارند)این جنگ تیمی هست 😂😂😂
شماهم ازین جنگها دارید ؟
پ.ن :
اومدم ی مثال واقعی از پست قبلی بزنم font اینطوری بود گفتم از شما هم بپرسم. (البته اینجا زوم هم زیاد شده راحتتره خوندنش)
🤪12😐7😁5👍2😈1
Python Hints
حتما شما هم با with open توی پایتون کار کردید فوقالعاده کمک کننده و مفید هست همین که دیگه لازم نیست یادتون بمونه فایل رو ببیند یا اینکه کد درست رو بزنید بستن فایل باید توی بخش finally باشه و ... try: excpet: finally: همین شرایط برای connection به دیتابیس…
image_2023-04-16_17-55-10.png
389.6 KB
خلاصه بگم شرایط اینطوری هست که ۱۰۰ تا اسکریپت
حالا بیزینس میخواد همه اینا باهم ادغام بشه و ازش پول در بیاره (چون فهمیده بدرد خیلیهای دیگه میخوره؛ مخصوصا تیمهای بخشهای دیگه)
نیروهای فنی تیم ما زیر بار نمیرن؛ بیزینس هم مدیریتی هستند و پول براشون مهم هست مدیر بنده هم از گردنش خودش باز کرده و من باید هر ۲ طرف رو آشتی بدم.
تنها چیزی که به ذهنم رسید این بود که
Exception
هارو لاگ بندازیم پروژه دپلوی بشه تیمهای خودمون باهاش کارکنند (چون با اون اسکریپت یبار مصرفها داشتن کار میکردن)
ماهم ارورها رو لاگ داشته باشیم؛ که توی ۲ ماه وقتی که داریم بتونیم کدهارو مناسب سازی کنیم.
اینجا بود که
shit code
داشتیم توی شرکت که هرکدوم رو ی نفر زده موقتی هم بودهحالا بیزینس میخواد همه اینا باهم ادغام بشه و ازش پول در بیاره (چون فهمیده بدرد خیلیهای دیگه میخوره؛ مخصوصا تیمهای بخشهای دیگه)
نیروهای فنی تیم ما زیر بار نمیرن؛ بیزینس هم مدیریتی هستند و پول براشون مهم هست مدیر بنده هم از گردنش خودش باز کرده و من باید هر ۲ طرف رو آشتی بدم.
تنها چیزی که به ذهنم رسید این بود که
Exception
هارو لاگ بندازیم پروژه دپلوی بشه تیمهای خودمون باهاش کارکنند (چون با اون اسکریپت یبار مصرفها داشتن کار میکردن)
ماهم ارورها رو لاگ داشته باشیم؛ که توی ۲ ماه وقتی که داریم بتونیم کدهارو مناسب سازی کنیم.
اینجا بود که
context manager protocolبه کمک ما اومد و بدون
Exception handler
پروژه اسکریپتهای یکبار مصرف (این کد دسکریپشن پروژه هست بین اعضای تیم) رفت برای دپلوی👍14❤1
توی لینکدین یک پستی دیدم راجب همین مشکل
و عدم دانلود و ...
اول اینکه تنها راهکار مطمئن همون استفاده از
هست
بعد دیدم کلی آدم زدن که از رپوهای چین استفاده کن
یکی دیگه زده، از این url استفاده کن و ....
نکنید اینکارارو
سایتهای معروف زیادی هستند که سر اشتباه یک دولوپر به فنا رفتند
خود
دقیقاً توضیح داده که security check نداره، ینی شما الان یک ویروسی چیزی بنویسی بدی بره pypi تأیید میکنه اگر استانداردهاش رو رعایت کرده باشید.
بعد طرف میگه بریم از رپوهای دیگه استفاده کنیم ؟!
آقا/خانم چندسال پیش ی مورد بود یک هکر اومده بود کمک کرده بود روی یک سورس کد برای پرداخت بانکی (مستر، پیپال و ...)
بعدها فهمیدن کدهاش رو توش باگ گذاشته و خودش به سرورهای شرکتهایی که
pip install
زدند حمله میکنه.
خلاصه :
۱- هر پکیجی رو نصب نکنید (اگر سورس مطمئنی نداره برید بخونید سورس کد رو و کدهاش رو که براتون مهم هست کپی کنید توی پروژه خودتون).
۲- از هر mirror یا سرویس دهندهای پکیج نگیرید.
@PyHints
pip
و عدم دانلود و ...
اول اینکه تنها راهکار مطمئن همون استفاده از
--proxy
هست
pip install --proxy <proxy-url> packagename
بعد دیدم کلی آدم زدن که از رپوهای چین استفاده کن
یکی دیگه زده، از این url استفاده کن و ....
نکنید اینکارارو
سایتهای معروف زیادی هستند که سر اشتباه یک دولوپر به فنا رفتند
خود
pypi
دقیقاً توضیح داده که security check نداره، ینی شما الان یک ویروسی چیزی بنویسی بدی بره pypi تأیید میکنه اگر استانداردهاش رو رعایت کرده باشید.
بعد طرف میگه بریم از رپوهای دیگه استفاده کنیم ؟!
آقا/خانم چندسال پیش ی مورد بود یک هکر اومده بود کمک کرده بود روی یک سورس کد برای پرداخت بانکی (مستر، پیپال و ...)
بعدها فهمیدن کدهاش رو توش باگ گذاشته و خودش به سرورهای شرکتهایی که
pip install
زدند حمله میکنه.
خلاصه :
۱- هر پکیجی رو نصب نکنید (اگر سورس مطمئنی نداره برید بخونید سورس کد رو و کدهاش رو که براتون مهم هست کپی کنید توی پروژه خودتون).
۲- از هر mirror یا سرویس دهندهای پکیج نگیرید.
@PyHints
👍53❤3🌚2
Python Hints
توی لینکدین یک پستی دیدم راجب همین مشکل pip و عدم دانلود و ... اول اینکه تنها راهکار مطمئن همون استفاده از --proxy هست pip install --proxy <proxy-url> packagename بعد دیدم کلی آدم زدن که از رپوهای چین استفاده کن یکی دیگه زده، از این url استفاده…
https://github.com/freedomofdevelopers/fod
درباب صحبتهایی که داخل گروه و کامنت شد،
این مورد رو جایگزین شِکن کنید.
قطعاً رستگار میشید
متأسفانه بعد از اتفاقات اخیری که توی کشور افتاد، وضعیت برنامهنویسها و بطور کلی حوزه IT به شدت خراب شد.
بسیاری مهاجرت کردند توی همین مدت و شرکتهای نوپای زیادی هم یا سرمایه رو از ایران خارج کردند یا ورشکسته شدند.
اینکه بعضی دوستان میپرسند بمونیم یا بریم :
قطعاً به رفتن فکر کنید، موندن جز پشیمانی دستاوردی نداره (ماها موندیم)
پروژه شکن هم همونطور که قبلاً دربارهاش صحبت کردم ،
DNS leakage
های بسیاری این اواخر داره و چون از شما میخواد روی کل ترافیک سیستم تنظیم کنید
امنیت کمتری داره نسبت به FOD.
بهشت اونجایی هست که آدما حق انتخاب داشته باشند حتی به غلط 👌
خدا خودش قدرت انتخاب به آدم داده (حتی برای گناه) جمهوری اسلامی شده کاسه داغتر از آش، میگه ما مواظب هستیم به زور کسی گناه نکنه، اینا خدارو هم به سخره گرفتن.
درباب صحبتهایی که داخل گروه و کامنت شد،
این مورد رو جایگزین شِکن کنید.
قطعاً رستگار میشید
متأسفانه بعد از اتفاقات اخیری که توی کشور افتاد، وضعیت برنامهنویسها و بطور کلی حوزه IT به شدت خراب شد.
بسیاری مهاجرت کردند توی همین مدت و شرکتهای نوپای زیادی هم یا سرمایه رو از ایران خارج کردند یا ورشکسته شدند.
اینکه بعضی دوستان میپرسند بمونیم یا بریم :
قطعاً به رفتن فکر کنید، موندن جز پشیمانی دستاوردی نداره (ماها موندیم)
پروژه شکن هم همونطور که قبلاً دربارهاش صحبت کردم ،
DNS leakage
های بسیاری این اواخر داره و چون از شما میخواد روی کل ترافیک سیستم تنظیم کنید
امنیت کمتری داره نسبت به FOD.
بهشت اونجایی هست که آدما حق انتخاب داشته باشند حتی به غلط 👌
خدا خودش قدرت انتخاب به آدم داده (حتی برای گناه) جمهوری اسلامی شده کاسه داغتر از آش، میگه ما مواظب هستیم به زور کسی گناه نکنه، اینا خدارو هم به سخره گرفتن.
GitHub
GitHub - freedomofdevelopers/fod: Freedom of Developers
Freedom of Developers. Contribute to freedomofdevelopers/fod development by creating an account on GitHub.
👍46❤4👎4😭3😢1💔1
#Quick
PyScript
هم به نقطهای رسیده که شرکتها حداقل برای prototype دارند ازش استفاده میکنند؛ شاید عالی نباشه ولی برای تست ایدهها ؛ دموها ؛ حتی ارائه به استاد توی دانشگاه و ...
واقعا جالب هست و ارزش بررسی داره
PyScript GitHub
اینو میگم چون خودم برای تست ایده مجبور به یادگیری
PyScript
هم به نقطهای رسیده که شرکتها حداقل برای prototype دارند ازش استفاده میکنند؛ شاید عالی نباشه ولی برای تست ایدهها ؛ دموها ؛ حتی ارائه به استاد توی دانشگاه و ...
واقعا جالب هست و ارزش بررسی داره
PyScript GitHub
اینو میگم چون خودم برای تست ایده مجبور به یادگیری
React
شدم.GitHub
GitHub - pyscript/pyscript: PyScript is an open source platform for Python in the browser. Try PyScript: https://pyscript.com …
PyScript is an open source platform for Python in the browser. Try PyScript: https://pyscript.com Examples: https://tinyurl.com/pyscript-examples Community: https://discord.gg/HxvBtukrg2 - pyscri...
👍20
ازین مدل کد توی سورس کد پکیجها زیاد دیدید همون استاندارد
ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که
توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه.
دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
EAFP
امروز یکی از نیروهای junior که باهاشون کار میکنم روی یکی از کدها به اروری میخورد و کار پیش نمیرفت.ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که
tensorflow 0.7
اومده بود قشنگ یادم هست ازین چالشها زیاد داشتیم)توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
raise CustomException('Finally we raise our custom error in framework.')
from None
همین from None
باعث میشه exception
های قبلی چاپ نشه.پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه.
دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
👍21❤4
Python Hints
ازین مدل کد توی سورس کد پکیجها زیاد دیدید همون استاندارد EAFP امروز یکی از نیروهای junior که باهاشون کار میکنم روی یکی از کدها به اروری میخورد و کار پیش نمیرفت. ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که tensorflow 0.7 اومده…
مثال بالا در صورت وجود
from None
👍19❤3
Python Hints
نحوه تعریف decorator میتونه نشون بده دولوپر پروژه junior هست یا نه اگر توی یک پروژه حرفهای مثل کد بالا decorator تعریف میکنید و بیش از ۳-۴ بار ازش استفاده میشه شما سیگنال junior developer بودن میدی به کسی که کد رو میخونه. همیشه گفتم بازم میگم : اگر…
از Bard گوگل خواستم برام کد review انجام بده روی این کد decorator بالا
نه تنها جزئیاتش درست و خوبه
مزیتش اینه که دسترسی بهش رایگان هست، مسخره بازی chatGpt رو نداره
و فقط کافیه ip ایران نداشته باشید
کاملاً هم رایگان هست
نه تنها جزئیاتش درست و خوبه
مزیتش اینه که دسترسی بهش رایگان هست، مسخره بازی chatGpt رو نداره
و فقط کافیه ip ایران نداشته باشید
کاملاً هم رایگان هست
👍24⚡2👎1
کانفیگ
بخش عمدهای از تسکهای من مربوط میشه به
Deep learning, ML engineering
اما وجه دیگه کارم
از طرفی هم ۹۰٪ کدهایی که از بچههای بکند تحویل میگیرم ی
این کد رو قبلا برای
هر لاگ فایل تا ۱۰ مگ حجم میتونه اشغال کنه و بعد از اون فایل ذخیره میشه به اسم backup تا ۱۰ تا ورژن ازین بکاپها نگه میدارم فقط و روی نسخه ۱۱
البته این خیلی سادهاس ولی خب از اون کیلویی اضافه کردن
پیشنهاد میدم شما هم ازین کد بعنوان
@PyHints
logging
برای من همیشه اذیت کننده هست.بخش عمدهای از تسکهای من مربوط میشه به
Deep learning, ML engineering
اما وجه دیگه کارم
backend
هست و software engineer
برای همین خیلی کم پیش میاد نیاز داشته باشم ی لاگر با جزئیات بنویسم از طرفی هم ۹۰٪ کدهایی که از بچههای بکند تحویل میگیرم ی
logging
نوشته شده که حافظه زیادی قرار هست بگیره (بخصوص روی سرور تست دارم صحبت میکنم که حجم لاگ بالا میره)این کد رو قبلا برای
Django
نوشتم ؛ توضیح دادم تقریبا چند هفته بعد از شروع یادگیری یکی از بدترین پروژههای شرکت رو دست گذاشتم روش و شروع کردم به بازنویسی این لاگر رو برای اون نوشتم هر لاگ فایل تا ۱۰ مگ حجم میتونه اشغال کنه و بعد از اون فایل ذخیره میشه به اسم backup تا ۱۰ تا ورژن ازین بکاپها نگه میدارم فقط و روی نسخه ۱۱
log rotateمیخوره و قدیمیترین فایل حذف میشه
البته این خیلی سادهاس ولی خب از اون کیلویی اضافه کردن
logging
فایل قطعا بهترهپیشنهاد میدم شما هم ازین کد بعنوان
base
استفاده کنید و لاگ فایلهای تمیز داشته باشید چون دیر یا زود خودتون مجبور به خوندنشون هستید.@PyHints
👍19❤4👎1
Python Hints
کانفیگ logging برای من همیشه اذیت کننده هست. بخش عمدهای از تسکهای من مربوط میشه به Deep learning, ML engineering اما وجه دیگه کارم backend هست و software engineer برای همین خیلی کم پیش میاد نیاز داشته باشم ی لاگر با جزئیات بنویسم از طرفی هم ۹۰٪ کدهایی…
logger.py
657 B
اینم فایل سورس (حتما بخونید و درک کنید اول)
❤18👍3👏1
چندتا توضیح بدم راجب کد بالا و مسائل دیگه :
۱- کد بالا ربطی به django نداره، هرچند توی یک خط من برای مسیر فایل از django استفاده کردم. Logging مربوط به core python هست.
۲- بیش از ۳۰ نفر سوالاتشون راجب همین موضوع بود، تماماً هم مشترک (دوستان گروه برای همین منظور ساخته شده و بخش کامنت) ازین به بعد این سوالات رو فقط توی گروه بپرسید.
۳- توی پیامها ویس ندید، مخصوصاً قبل از هماهنگ کردن ۹۹.۹٪ اصلا پیام رو باز نمیکنم اگر اینطور باش
۴- احوال پرسی و خبر پرسیدن رو نمیفهمم، بعد حالا اگر پرسیدید چرا منتظر جواب نمیمونید ؟
بجای خوب هستی و چه خبر، همون سلام کفایت میکنه و یا اگر عادت کردید برای غریبه از
امیدوارم سلامت باشید استفاده کنید بخدا قشنگتر هم هست
۵- قبل از سوال پرسیدن نیازی به تاریخچه نویسی نداره، کی بودید و چیکار کردید و چرا به من ربطی نداره واقعاً و اگر برای راهنمایی لازم باشه قطعاً خودم میپرسم از شما (بعضیها ۲۰ تا پیام میذارند آخر سوال از یکی از پستهای کانال میپرسند)
۶- نهایتاً، خواهش میکنم
خواهش میکنم
اصلی ترین رفتار برنامهنویسی رو رعایت کنید
پیامها رو مختصر بنویسید همهی موارد رو داخل یک پیام ارسال کنید بریده بریده پیام دادن اسپم حساب میشه
بدتر از بریده بریده پیام دادن ۷-۸ تا پیام فرستادن و در نهایت گفتن این هست که بگید، میتونم سوال بپرسم ؟!
بجای اسپم کردن، اصل سوال رو بپرسید لطفاً این خیلی خیلی مهم هست.
دوستانی که این موارد رو رعایت نمیکنند، حداقلش اینه که اجازه نمیدهند من وقت داشته باشم به باقی دوستان هم کمک کنم.
مرسی از همگی دوستانی که رعایت میکنند یا خواهند کرد 🌹
۱- کد بالا ربطی به django نداره، هرچند توی یک خط من برای مسیر فایل از django استفاده کردم. Logging مربوط به core python هست.
۲- بیش از ۳۰ نفر سوالاتشون راجب همین موضوع بود، تماماً هم مشترک (دوستان گروه برای همین منظور ساخته شده و بخش کامنت) ازین به بعد این سوالات رو فقط توی گروه بپرسید.
۳- توی پیامها ویس ندید، مخصوصاً قبل از هماهنگ کردن ۹۹.۹٪ اصلا پیام رو باز نمیکنم اگر اینطور باش
۴- احوال پرسی و خبر پرسیدن رو نمیفهمم، بعد حالا اگر پرسیدید چرا منتظر جواب نمیمونید ؟
بجای خوب هستی و چه خبر، همون سلام کفایت میکنه و یا اگر عادت کردید برای غریبه از
امیدوارم سلامت باشید استفاده کنید بخدا قشنگتر هم هست
۵- قبل از سوال پرسیدن نیازی به تاریخچه نویسی نداره، کی بودید و چیکار کردید و چرا به من ربطی نداره واقعاً و اگر برای راهنمایی لازم باشه قطعاً خودم میپرسم از شما (بعضیها ۲۰ تا پیام میذارند آخر سوال از یکی از پستهای کانال میپرسند)
۶- نهایتاً، خواهش میکنم
خواهش میکنم
اصلی ترین رفتار برنامهنویسی رو رعایت کنید
پیامها رو مختصر بنویسید همهی موارد رو داخل یک پیام ارسال کنید بریده بریده پیام دادن اسپم حساب میشه
بدتر از بریده بریده پیام دادن ۷-۸ تا پیام فرستادن و در نهایت گفتن این هست که بگید، میتونم سوال بپرسم ؟!
بجای اسپم کردن، اصل سوال رو بپرسید لطفاً این خیلی خیلی مهم هست.
دوستانی که این موارد رو رعایت نمیکنند، حداقلش اینه که اجازه نمیدهند من وقت داشته باشم به باقی دوستان هم کمک کنم.
مرسی از همگی دوستانی که رعایت میکنند یا خواهند کرد 🌹
👍42❤14👎1👌1
This media is not supported in your browser
VIEW IN TELEGRAM
ازینجا تا همهجا حق 😂😂😂
😁31👎4☃1🤷♀1😢1👌1
بنظر من توانایی درک و خوندن کدهای باقی افراد و کار کردن با اون فرمت کد خودش یک تخصص و مزیت هست توی کار برنامه نویسی تخصصی که متاسفانه خیلی از برنامهنویسهای ایرانی ندارند حتی در سطوح بالاتر.
برای همین توی ایران تا دلتون بخواد ریفکتور میبینیم (خیلی موارد البته بخاطر شیت کد بودن هست) ؛ ریفکتورهایی که فقط استانداردها رو تغییر دادند و وقتی کد رو مقایسه میکنید لزومی نمیبینید برای وقتی که گذاشته شده
برای این موضوع ما ۳ هفته وقت رو از دست دادیم روی یک پروژه (مربوط به ۳ ماه قبل هست) و خیلی دوست داشتم راجبش بنویسم چون دقیقا بعد از این موضوع توی تیم خودم روشی که خودم برای ریفکتور کردن دنبال میکنم رو ارائه دادم
نکته : اگر دارید
اما اگر بعنوان مثال کدی رو روی پروداکشن دارید که داره کار میکنه و
شخصا از تکنیکی استفاده میکنم که توی تیم بهش میگیم
برای همین خیلی از فیچرها و ایدههای اولیه در ۵-۳۰ دقیقه پیادهسازی میشه
نکته این کلیدهارو به ابزارهای highlight توی IDE اضافه میکنید که سریعتر و راحت تر دیده بشه
اگر خود شما یا دولوپر دیگری توی تیم مجددا این کد رو ببینه اولین کاری که میکنه تبدیل تگ هست
البته شرایط خاص و ۱٪ هم داریم که در اون مواقع فقط tag میزنیم بدون ریفکتور
بعد میتونه به کار خودش ادامه بده.
توی پروژه خیلی از توابع و کلاسها هستند که ممکنه سالی ۱ بار استفاده بشه یا اصلا استفاده نشه و انقدر پروژه بزرگ هست که کسی متوجه این موضوع نمیشه
ریفکتور کردن کل پروژه با تعریفی که از ریفکتور گفتم توی اکثر مواقع احمقانه بنظر میرسه باقی موارد هم نشون میده شما تخصص کار و درک کدهای دیگران رو ندارید متاسفانه.
@PyHints
پ.ن : وقتی یک نیرو تسک برای انجام دادن نداشته باشه بجای منتظر موندن تگها رو توی کد بر اساس اهمیت
برای همین توی ایران تا دلتون بخواد ریفکتور میبینیم (خیلی موارد البته بخاطر شیت کد بودن هست) ؛ ریفکتورهایی که فقط استانداردها رو تغییر دادند و وقتی کد رو مقایسه میکنید لزومی نمیبینید برای وقتی که گذاشته شده
برای این موضوع ما ۳ هفته وقت رو از دست دادیم روی یک پروژه (مربوط به ۳ ماه قبل هست) و خیلی دوست داشتم راجبش بنویسم چون دقیقا بعد از این موضوع توی تیم خودم روشی که خودم برای ریفکتور کردن دنبال میکنم رو ارائه دادم
نکته : اگر دارید
system design
رو تغییر میدید دیگه اسمش refactor
نمیشه و این تکنیک جواب نمیده اما اگر بعنوان مثال کدی رو روی پروداکشن دارید که داره کار میکنه و
system design
مناسبی داره و فقط کدها بد پیاده سازی شده و پرفورمنس خوبی نداره اونوقت به ریفکتور نیاز دارید و تکنیکی که میگم :شخصا از تکنیکی استفاده میکنم که توی تیم بهش میگیم
3 step refactor
وقتی بیزینس درخواست فیچر جدیدی میده که اصن معلوم نیست موندگار هست یا رفتنی یا ... و فعلا فقط روی سرور تست قرار هست بالا بیاد step 1:
do it as fast as possible (even shit code is ok)
توی سریعترین زمان ممکن اون رو توسعه میدیم حتی اگر shit code باشه (شیت کد رو هم توی تیم براش سقف گذاشتیم)برای همین خیلی از فیچرها و ایدههای اولیه در ۵-۳۰ دقیقه پیادهسازی میشه
Fail fast
اما اگر کدی که قبلا زده شده رو داریم میبینم چون بیزینس توی یک بخشی تغییر خواسته یا سرعت بالاتر خواسته و ما توی بررسی به یک کد dependent هم برخورد کردیم step 1 (not new feature):
Tag it as first seen ( CHECKED: )
با یک کلید مشترک (کل تیم سرش اجماع کردند) بصورت کامنت تگ میزنید مثلا توی تیم من کلید CHECKED: هست.نکته این کلیدهارو به ابزارهای highlight توی IDE اضافه میکنید که سریعتر و راحت تر دیده بشه
اگر خود شما یا دولوپر دیگری توی تیم مجددا این کد رو ببینه اولین کاری که میکنه تبدیل تگ هست
step 2 (see it again) :
Tag it with ( Attention: )
اگر مجدد برای بار سوم اون تابع یا کلاس یا ... رو دیدید باید refactor بزنید رو سرش step 3 ( 3rd time) :
PROBLEM:
first priority is to refactor the code
توی این لحظه اولویت اصلی شما ریفکتور کردن تایع هست (هیچ چیزی مهمتر از این نیست)البته شرایط خاص و ۱٪ هم داریم که در اون مواقع فقط tag میزنیم بدون ریفکتور
PROBLEM:
هر کدوم از اعضای تیم وقتی کدی رو pull - fetch میکنه اولین کاری که میکنه اینه که دنبال PROBLEM:
باید بگرده و مشکلش رو برطرف کنه.بعد میتونه به کار خودش ادامه بده.
توی پروژه خیلی از توابع و کلاسها هستند که ممکنه سالی ۱ بار استفاده بشه یا اصلا استفاده نشه و انقدر پروژه بزرگ هست که کسی متوجه این موضوع نمیشه
ریفکتور کردن کل پروژه با تعریفی که از ریفکتور گفتم توی اکثر مواقع احمقانه بنظر میرسه باقی موارد هم نشون میده شما تخصص کار و درک کدهای دیگران رو ندارید متاسفانه.
@PyHints
پ.ن : وقتی یک نیرو تسک برای انجام دادن نداشته باشه بجای منتظر موندن تگها رو توی کد بر اساس اهمیت
refactor
سرچ میکنه و شروع به refactor
کردن👍33❤2👎1