en
Feedback
Python Hints

Python Hints

Open in Telegram

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

Show more
9 613
Subscribers
+924 hours
+647 days
+22130 days
Posts Archive
#خبر #فوری گروه هکری به اسم #عدالت_علی ادعا کرده که به سرورهای قضایی کشور نفوذ کرده و اطلاعات میلیون‌ها سند و پرونده قضایی رو بدست آورده هنوز هیچ مدرکی دال بر اثبات این موضوع منتشر نشده اما گفتند که بعد از بررسی (احتمالاً تمیزکاری) مدارک رو روی سایتی منتشر خواهند کرد. بعد ما دنبال امنیت اسنپ بودیم ؟! ای بابا

فکر کنم اینکار می‌کنند که مطمئن بشن رأی نمی‌دیم دستشون درد نکنه، شنیدم روز رأی گیری هوای کشور سمی هست

#موقت شورای عالی فضای مجازی استفاده از فیلترشکن را ممنوع اعلام کرد ‏شورای عالی فضای مجازی مصوبه جدیدی را در شش ماده، برای اجرا ابلاغ کرده است. مهم‌ترین موضوع این مصوبه، ممنوعیت استفاده از ابزارهای فیلترشکن مگر با مجوز قانونی است. ‏تا پیش از این، بر اساس قانون صرفا خرید و فروش فیلترشکن ممنوع بود نه استفاده از آن. خوب جا داره یه سلامی هم عرض کنم خدمت ممبرای مجرم کانال 😂

Restriction هم داره اینجا چیزی که خوندم بخاطر Reaction, Follower کم هست. (دارم یاد میگیرم تازه 😂)

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

#موقت یکی رفته ایمیل تهدید الکی ب م ب‌ گذاری فرستاده به چندتا مدرسه توی هند بعد به نظرتون راهکار مسئولای هند چی بوده ؟ Proton Mail رو فیلتر کنند، چرا ؟ چون End2End Encrypted هست و هیچ اطلاعاتی از ارسال کننده یا ایمیل‌ها و ... نمی‌شه بدست آورد. اگر تا حالا ازش استفاده نکردید، حتماً تست کنید.

قبلاً راجب اینکه چرا نباید Default value ورودی یک تابع٫متد رو mutable بذارید صحبت کردیم یعنی
def scripts_counter(directories : list = []):
   pass
یک باگ بسیار بسیار جدی هست توی پایتون.

varargs نیروی جدید گرفتیم؛ حدود ۲۰ ساله چون تازه هم اومده پروژه‌ای نداشتم بهش بدم. اما یک کد از تیم دیگه بهمون رسیده که هیچکس
varargs
نیروی جدید گرفتیم؛ حدود ۲۰ ساله چون تازه هم اومده پروژه‌ای نداشتم بهش بدم. اما یک کد از تیم دیگه بهمون رسیده که هیچکس سراغ تمیز کردنش نمیره؛ بهش دسترسی دادم گفتم این کد رو بخون یک کد هم از تیم خودمون بهش دادم گفتم اینم بخون هرکاری اولی کرده تو نکن؛ هرکاری دومی کرده سعی کن درک کنی چرا. امروز دیدم رفته کلی تغییرات داده اولش ترسیدم گفتم ی تازه کار این حجم تغییر برای pull request مشکوک هست ولی بعد از ی جلسه کوتاه حل شد و بیشترین تغییرش همین
varargs 
بوده؛ برنامه نویس قبلی
packing, unpacking
رو یادش نبوده هرجا توابع کمکی داشته گفته باید لیست بهم بده و توی جاهای دیگه هم مجبور شده توی مواقعی چندین بار for loop بزنه بخشی از پردازش رو انجام بده لیست بسازه بده به تابع کمکی بعد دوباره خروجی رو بگیره و روی اون لیست پردازش رو ادامه بده.
varargs
و کار این نیرو هم سرعت پروژه رو بیشتر کرده هم پروژه رو تمیزتر؛ قرار شد ۲ هفته این کدهارو کار کنه و تمیز که نسخه ایشون بره برای جایگزینی روی پروداکشن. تصویر بالا یک مثال کوچیک هست (شاید خیلی هم کاربردی نباشه) که خودم الان نوشتم فقط برای اینکه تفاوت رو نشون بدم.

varargs یک نیروی جدید به شرکت اضافه شده؛ حدودا ۲۰ ساله چون تازه هم اومده پروژه‌ای نداشتم بهش بدم. اما یک کد از تیم دیگه بهمون
varargs یک نیروی جدید به شرکت اضافه شده؛ حدودا ۲۰ ساله چون تازه هم اومده پروژه‌ای نداشتم بهش بدم. اما یک کد از تیم دیگه بهمون رسیده که هیچکس سراغ تمیز کردنش نمیره؛ بهش دسترسی دادم گفتم این کد رو بخون یک کد هم از تیم خودمون بهش دادم گفتم اینم بخون یاد ب

ورکشاپ / سخنرانی جالبی بود راجب git دوست داشتید ببینید : So You Think You Know Git

قدیما یک سری مسابقات بود، خیلی دوست داشتنی بود : اینجوری بود که به کثیف‌ترین کد جایزه داده می‌شد، نرید قیمه و قرمه بریزید منظور خوانایی بود 😁 بعدها شرکتی رو وارد شدم که بازی ماهانه‌‌اش برای تیم برنامه‌نویسی هم همین شد (به پیشنهاد تیم خودمون، بله ما اسم فامیل و کارت بازی و ... دوس نداشتیم) امروز یکی از اون کدها رو دیدم، گفتم راجبش یک پست هم بزنم، خوبی این بازی هم این بود که توی ۲-۳ ساعتی که بازی میکردیم هزاران چیز جدید یاد می‌گرفتیم و توی این سال‌های کاریم این زمان تنها زمانی بود که با عشق می‌شستم و بازی میکردم با کدها. برای نمونه کلاس رو اینطوری تعریف میکردیم :

m = "3627"

def __str__(sth):
  return f"sth.__class__(members={sth._mem})"

PYHINTS = type("pyhints", (), {
  "_mem" : int(m),
  "__str__": __str__
})


I = PYHINTS()
print(I)

توی کد بالا هیچ چیزی اشتباه نیست و همه چیز عمدی هست، کد بالا یک مثال خیلی کوچیک بود معمولاً یک تسک بهمون داده میشد برنده همیشه اونی میشد که : ۱- PEP رو رعایت نمی‌کرد ۲- کاری‌ رو می‌کرد که پایتون باید بکنه، توی مثال بالا من بجای استفاده از
class PYHINTS:
  _mem = int(m)
  def __str__(cls):
    pass 
اومدم مستقیم از type استفاده کردم. فقط اضافه کنم، علاوه بر اینکه بد کد میزنید باید بتونید آخر روز کد خودتون رو روی ۱-۲ تا داده تست بصورت دیباگ خط به خط توضیح بدید. جدا میگم خیلی چیزا این ساعات بازی یاد گرفتم و به همکاران یاد دادم. از اسم فامیل و فوتبال دستی و .... هم بهتره 😑

نتونستم سکوت کنم 😢😡🤬😡🤬

#خارج_از_بحث اصلاً قدرت توضیح دادن و حرف زدن ندارم واقعاً .... ایران نباید برای افغان‌های غیر قانونی اینقدر امنیت داشته باشه.
#خارج_از_بحث اصلاً قدرت توضیح دادن و حرف زدن ندارم واقعاً .... ایران نباید برای افغان‌های غیر قانونی اینقدر امنیت داشته باشه. #اخراج_افغانی_مطالبه_ملی پ.ن : جنایت مهاجمین غیرقانونی افغان به ایران فقط همین مورد نیست. اما فکر می‌کنم این مورد خط قرمز هر ایرانی باشه.

توی شرکت روی پروژه شرکت مثال زدم؛ عذر میخوام اگر توی تصویر بالا مثال خیلی کاربردی نیست جایی رو ندیدم مثال خوب / واقعی بزنه یا زده باشه سعی کردم ی مورد مشابه رو مثال بزنم فرض کنید ما ۳ نوع فایل داریم که خیلی برامون مهم هست : 1- لاگ‌ها ؛ خطاهای سرویس‌ها - دیتابیس و ... توی این فایل‌ها نوشته میشه و وجودش برای پروژه بسیار بسیار مهم هست پس اگر فایل لاگ وجود نداشت پروژه به هیچ وجه نباید روی پروداکشن بره 2- فایل‌های کمکی؛ وجودشون مهم هست اما نه اونقدری که نذاریم پروژه بره روی پروداکشن بعنوان مثال تصویر لوگوی شرکت 3- یک سری گذارشات روزانه مثلا و.ضعیت پرداخت‌ها و ... که بصورت اتوماتیک انتهای ساعت کاری هر روز درست میشه؛ اما اگر یکی از ادمین‌ها یا مشتری‌ها وسط روز بخواد خروجی بگیره ممکنه نداشته باشم. توی مثال بالا بصورت دیفالت هر ۳ فایل یک ارور رو بر میگردونه : FileNotFoundError که اگر بخوایم exception handler بنویسیم باید حتما توی داخلی ترین تابع پردازش نوشته بشه و حتما باید بررسی کنیم که توی یک تابع یا متد بصورت همزمان وجود بیش از ۱ مورد از فایل‌های بالا بررسی نشه چون در اون صورت نمی‌دونیم ارور مربوط به عدم وجود کدوم فایل بوده و نمی‌تونیم تصمیم بگیریم آیا ابزار باید روی پروداکشن بره یا خیر یا ... اهمیت custom exception نوشتن همینجا مشخص می‌شه؛ شما می‌تونید هرجایی که دلتون خواست و هر نوع فایلی که دلتون خواست رو بررسی کنید. برنامه‌نویس‌های تیم شما آزادی عمل بیشتری دارند و این یعنی تصمیمات بهتری می‌تونند بگیرند دیباگ کردن بسیار راحت تر خواهد بود؛ چرا که به لطف خطاهای مشخص می‌تونید درجا سروقت تابع یا متدی برید که وظیفه بررسی اون خطا رو داره جداسازی مفاهیم مختلف؛ مثل بررسی لاگ و اعمالش یا بررسی و برخورد با گزارشات روزانه و ... باعث میشه شما بتونید کد رو به راحتی به افراد مختلف بسپارید و این یعنی کار کردن به صورت پارالل به راحتی قابل انجام هست پس سرعت توسعه کد قطعا بیشتر خواهد بود. و ... اتفاقی که امروز افتاد: برای ما روی یک پکیج حیاتی و بسیار بزرگ بود که پیدا کردن باگ داخلش می‌تونه حتی هفته‌ها طول بکشه اما اگر پروژه شما انقدر گسترده نیست می‌تونید این مورد رو چشم پوشی کنید. ولی در نظر بگیرید: هیچ کس از رعایت best practice ها متضرر نشده و نمی‌شه.

توی شرکت روی پروژه شرکت مثال زدم؛ عذر میخوام اگر توی تصویر بالا مثال خیلی کاربردی نیست جایی رو ندیدم مثال خوب / واقعی بزنه یا زده باشه سعی کردم ی مورد مشابه رو مثال بزنم فرض کنید ما ۳ نوع فایل داریم که خیلی برامون مهم هست : 1- لاگ‌ها ؛ خطاهای سرویس‌ها - دیتابیس و ... توی این فایل‌ها نوشته میشه و وجودش برای پروژه بسیار بسیار مهم هست پس اگر فایل لاگ وجود نداشت پروژه به هیچ وجه نباید روی پروداکشن بره 2- فایل‌های کمکی

چندروز قبل بعنوان Team Lead یک پروژه دیگه‌ای توی شرکت انتخاب شدم (با تمام مخالفتی که کردم؛ حتی با وجود افزایش دستمزد) ولی قرا
چندروز قبل بعنوان Team Lead یک پروژه دیگه‌ای توی شرکت انتخاب شدم (با تمام مخالفتی که کردم؛ حتی با وجود افزایش دستمزد) ولی قرار بر این شد امروز لیستی از تمام تغییرات مورد نیاز قبل از اضافه کردن فیچر جدید رو بدم
code review 
اولیه رو انجام دادم و لیست رو نوشتم. یکی از سطر کدهای اصلی که بیشترین زمان ۲ ماه رو براش اختصاص داده بودم و گفتم که همزمان با توسعه فیچر می‌تونه پیش بره بخش
Exception Customization 
بود. حالا چرا به این بخش رسیدم ؟ موقع کد ریوو چون تیم زیردست خودم کار نمیکرد برای درک بهتر اینکه اکثر مشکلات تیم کجا بوده نشستم git log ( commit messages) رو خوندم و تغییرات رو نگاه کردم. همونطور که شاید خیلی از شما هم همین بالاتر تو ذهنتون مرور کردید ۹۰٪ مخالفت روی موضوع custom exception بود و منم از این موضوع کوتاه نمیام قطعا. توی جلسه به اثبات رسید که حل این مشکل حداقل ۳۰٪ باگ‌ها رو حل می‌کنه و حداقل ۱/۳ سرعت دیباگ و توسعه رو بالا میبره بخصوص وقتی تست نویسی ها هم درست بشه.

پیام دادند چه ربطی به رأی دادند داره، چرا همه چیز رو به همه چیز ربط می‌دی و کلی حرف مفت دیگه .... شخصاً نه تاحالا رأی دادم نه رأی میدم.

#خارج_از_بحث اینم جالب بود : قیمت دلار توی سایت‌های دولتی و نیمه خصوصی، به ۵۵.۰۰۰ تومان هم رسیده (مثلاً کنترل کردن و اومد پایین) ولی برید صرافی واسه حواله زدن. هیچ چیزی پایین نیومده، قشنگ انگار دولت دستور داده سایتا قیمتشون رو ساعتی x تومن بیارن پایین 🤣😂 وضع مزخرفی داریم خدایی ...

توی code review هایی که این هفته انجام میدادم به موارد مشابه چیزی که توی تصویر هست زیاد برخوردم؛ هرکدوم از توسعه دهنده‌های پر
توی code review هایی که این هفته انجام میدادم به موارد مشابه چیزی که توی تصویر هست زیاد برخوردم؛ هرکدوم از توسعه دهنده‌های پروژه (۳ نفر) روش متفاوتی رو انتخاب کرده بودند. اولین کار توافق سر یک دست کردن بود بعد هم گفتم با مثال اینجا بذارم ببینم شما کدوم مورد رو استفاده می‌کنید ؟ شخصا همیشه روش آخر رو پیاده می‌کنم؛ اینجا هم راهکار خودم رو پیاده‌سازی کردم و گذاشتم : setdefault