Python Hints
8.62K subscribers
170 photos
11 videos
9 files
141 links
Python tips and tricks
The Good, Bad and the Ugly

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

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

Admin: @Abbasi_ai
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
۲ دقیقه به من وقت بدید.

هم مجاب کنم بجای کمک خیریه، غذا و دارو ؛ کاندوم اهدا کنید.

هم به شما نشون بدم حرومزاده چه شکلی هست.
👍115👎10🤯84😁4🐳4
بگذارید هرکس به آیین خودش باشد.
زنان را گرامی بدارید.
فرودستان را دریابید.
اجازه دهید هرکسی به تکلم قبیله‌ی خویش سخن بگوید.

آدمی تنها در مقام خویش به منزلت خواهد رسید.

۷ آبان روز بزرگداشت کوروش کبیر، همایون باد.
129❤‍🔥28👎19👍7💘3😁1💯1
گروه‌ مربوط به کانال حذف شد.

خیلی‌ها هنوز شعور عضویت در گروه رو ندارند.

#قوانین و بنر گروه رو خوندن وظیفه اعضا هست.

اینحه صحبتی غیر از Core Python توی گروه نباشه
به خواسته خودتون بوده و رأی گیری شد تا گروه جدابی داشته باشیم.

هیچکدوم از کانال‌های
@pyhints
@pytens
@pyrust

هیچوقت هیچ آورده‌ای برای من نداشتند، هیچ سودی هم نداشته.
قرار باشه تمرکزم رو هم ازم بگیره ترجیح میدم نباشه.
61💔16👀15👍14👎9😁8😨3🎃2👾2🙏1🆒1
#Quick

مثالی برای یک بحث:

یک سری سوالات هست توی مصاحبه که واقعاً نیاز به درک درست از چندین جنبه داره.
یک مثال میزنم و بعدش دیگه این سوال رو از مصاحبه‌هام حذف می‌کنم :

مثلاً توی بکند؛
چرا به سریالایزر نیاز داریم ؟ من مدل دیتابیس رو دارم پکیج‌های مورد نیاز برای کار با json, dict هم که وجود داره چرا مستقیم خودم اینکار رو نکنم و حتماً باید از serializer‌ استفاده کنم ؟

این مثلاً ازون سوالاتی هست که اگر پوزیشن کاری جنگو باشه، توی سطح mid می‌پرسم.
اما اگر غیر از اون باشه حتماً توی سطح junior می‌پرسم، یک نمونه از چیزهایی که میگم بکند رو فارغ از فریمورک یادبگیرید هم هست.

به جوابش فکر کنید، اگر نمی‌دونید هم تحقیق کنید.
👍34🤔92
Python Hints
#Quick مثالی برای یک بحث: یک سری سوالات هست توی مصاحبه که واقعاً نیاز به درک درست از چندین جنبه داره. یک مثال میزنم و بعدش دیگه این سوال رو از مصاحبه‌هام حذف می‌کنم : مثلاً توی بکند؛ چرا به سریالایزر نیاز داریم ؟ من مدل دیتابیس رو دارم پکیج‌های مورد نیاز…
جواب این سوال ساده هست ولی من با یک مثال مهمترین دلایلش رو می‌گم :

توی فریمورکی مثل جنگو که اگر کار کرده باشید؛ حتما سریالایزر رو دارید؛ توی پایتون جا افتاده که برای باقی فریمورک‌ها هم از همین اسم استفاده می‌کنند.
فرض کنیم من از کاربر ۵ تا اطلاعات میگیریم تا رجیسترش کنم
{
"first_name": "Mo",
"last_name": "abbasi",
"channel": "pyhints",
"email": "[email protected]",
"phone": "09122020200"
}

این برای ثبت‌نام هست؛ برای لاگین :
{
"phone": "09122020200"
}

مشاهده پروفایل توسط دیگران:

{
"first_name": "Mo",
"last_name": "abbasi",
"channel": "pyhints",
}


ادیت پروفایل:

{
"first_name": "Mo",
"last_name": "abbasi",
"channel": "pyhints",
"phone": "09122020200"
}


همه‌ی این موارد با یک فیلد کم و زیاد کاملا مشابه هم هستند؛ اگر سریالایزر نبود برای ولیدکردن شماره تماس چون دیتا از نوع str هست هربار باید یادم بمونه که کدهای مربوط به ولید کردنش رو اجرا بذارم اگر یادم بره چی میشه ؟
شخص با شماره‌ای که ولید نیست توی سیستم ثبت‌نام میشه و دیگه هیچ‌وقت نمی‌تونه وارد سیستم بشه.
اما با وجود سریالایزر اگر جایی از کد ببینم دولوپری دیتای request رو داره می‌خونه فارغ از اینکه چیکار داره می‌کنه کد رو ناامن و همراه باگ می‌دونم.

همین ۱ مورد دوتا ویژگی خوب به من میده :
۱- ولیدیشن اصولی و یکپارچه برای کل سیستم
۲- عدم تکرار کد

اما کارهای دیگه‌ای هم هست که میشه کرد؛ فرض کنید یک دیتاتایپ خاص خودتون رو دارید و سمت دیتابیس با extension های مربوطه اضافه شده؛ به کمک سریالایزر می‌تونید مطمئن بشید اگر یک tuple براتون ارسال شده حتما از اون دیتاتایپ مدنظر هست (مثال vector2d جلسات کتابخونی رو یادتون هست ؟)

دیگه چکاری میشه کرد ؟
فرض کنید یک باگ توی دیتابیس پیدا شد یا یک نوع حمله مثل SQL Injection اونوقت فقط کافیه یکبار روی Base Serializer این مورد رو بررسی کنید و جلوگیری کنید (مثلا برای فیلد ایمیل / اسم‌ها) بعد هرجا برای فیلد ایمیل یا اسم‌ها ازین inherit می‌کنید بصورت خودکار SQL Injection prevention رو هم خواهید داشت.

به لطف جنگو شماه هیچکدوم ازین موارد رو نمی‌بینید اما توی فریمورک‌های دیگه باید با این مفاهیم آشنا باشید تا به درستی پیاده‌سازی کنید.
👍48126
ی آمار ببینم حال کنیم

مرسی از همگی 🌹
🍾8238👍14😁7🗿51🦄1
Media is too big
VIEW IN TELEGRAM
مصاحبه
Joe Rogan
با
Elon musk
خیلی سیاسی بود ولی بخش آخرش ایلان میگه فقط چندماه فاصله داریم تا سرویس دهی به گوشی‌های معمولی.

ولی با اینم کاری ندارم؛ سرعت دانلود درحال حاضر روی 150MB هم گزارش شده؛ و توی صحبت ایلان میگه فقط اینکه 100x اینترنت ضعیفتری خواهد بود که بدرد پیام دادن، تصویر دیدن، یا ویدیو کیفیت پایین میخوره

حساب کردم؛ ۱۰۰ برابر ضعیفتر اینترنت ۱۵۰ مگ (هنوز تمام ماهواره‌ها ارسال نشده) میشه ۱.۵ مگ و این سرعت اینترنت خیلی بیشتر از پرسرعت ترین اینترنتی هست که خیلی بچه‌های ایرانی دارند.

پوف ......
👍107👎63👏3😭3😁211😈1
Python Hints
#Quick مثالی برای یک بحث: یک سری سوالات هست توی مصاحبه که واقعاً نیاز به درک درست از چندین جنبه داره. یک مثال میزنم و بعدش دیگه این سوال رو از مصاحبه‌هام حذف می‌کنم : مثلاً توی بکند؛ چرا به سریالایزر نیاز داریم ؟ من مدل دیتابیس رو دارم پکیج‌های مورد نیاز…
#Quick

یک سری پروژه داشتم نگاه میکردم، پروژه‌هایی که یا توی دوره‌های مختلف گذاشته شده (برای آموزش) یا بچه‌ها برای تمرین زدند.
(جلوتر میگم چرا اینکارو داشتم می‌کردم)

بعد می‌دیدم که خب هیچکدوم ازین پروژه‌ها مثلاً از ابزاری مثل Celery استفاده نکردن یا Celery داره ولی Flower نداره.

اول اینکه مگه توی دنیای فعلی میشه شما پروژه‌ای داشته باشی ولی celery توش نباشه؟ یا اینکه celery رو ببری روی پروداکشن ولی مانیتور نکنی (اینو توی خیلی پروژه‌ها هم دیدم).

یا یک مثال دیگه، هیچکدوم از پروژه‌ها رو نمی‌شد با تک کامند deploy کرد.
local, stage, production

بحث ci/cd نیست الان، ولی docker compose و ... باید به درستی نوشته بشه

و البته کلی نکات دیگه مثل این موضوع.

اینکه چرا دارم این موارد رو دنبال می‌کنم :

ضبط یک دوره کامل، اگر به نتیجه برسیم با یک تیم حرفه‌ای.
👍7721👎5❤‍🔥3🔥2
#خارج_از_بحث

شخص لینوس توروالدز یک تصمیمی گرفت و اونم اخراج تمام maintainer های روس بود. من خیلی صبر کردم ببینم کسی ازین موضوع حمایت می‌کنه یا نه که دیدم خیر همه مخالفان این موضوع هم شدند.

البته اونهایی که داستان ssh backdoor سال قبل رو یادشون هست، حمایت کردند.

سال قبل روی پروژه xz (برای فایل compression) یک گروهی حدوداً ۲ سال وقت گذاشتن و کد سالم ارائه کردند، از یک طرف دیگر هم یک کاراکتر با هویت خانوم (میگم کاراکتر چون جعلی هست) روی یک سری پروژه‌های دیگه شروع کرده بود کد سالم فرستادن، اما اینها پروژه‌هایی بود که نزدیک به mainrainer اصلی xz بود و مطمئن بود ایشون کدها و تلاشش رو می‌بینه (بدون اینکه روی کرنل یا لینوکس کاری بکنه)

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


باقی داستان رو هم که می‌دونید، دنیا شانس آورد که یک نفر به میزان load cpu اش بسیار اهمیت میداد (پایچارم رو پاک کنید، شاید روی لود رم شما باگ بعدی رو پیدا کردید 🤣😂)

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

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

خلاصه که شخصاً ازین کار لینوس توروالدز شدیداً حمایت می‌کنم.
امنیت دنیا مهمتر از چندتا maintainer هست و اگر این افراد هم واقعاً هدفشون پیشرفت جامعه لینوکس بوده بنظرم براشون قابل درک خواهد بود (توجیه شدند)
👍93👎8826👏4🆒2😁1
#تجربه

از طرف یک شرکت اومدن، کار استارتاپی داشتند حالا مشتری بین‌المللی پیدا شده براشون می‌خوان uptime, high availability, ... رو بالا ببرند.
چرا ؟
چون توی قرارداد، باید بگن که چه مقدار uptime دارند (معروف‌ترین میزان 99.99% هست که یعنی سالانه ۱ ساعت می‌تونند سرور رو down داشته باشند)
این شامل همه‌ی موارد میشه، آپگرید، جابجایی سرور و ...

این بین که داشتم با نیروها صحبت می‌کردم و مشاوره و همفکری داشتیم، متوجه شدم migration ها یکی از معضلات خواهد بود.

فرض کنید، شما سیستم رو به بهترین شکل چیدید. Load balancer, k8s , ... و برای دپلوی هم rolling update رو گذاشتید.
حالا فرض کنید، قراره برای یک فیچر جدید، یک ستون به جدول user اضافه کنید که به محض لاگین یا اولین استفاده کاربر باید پر بشه ؟

توی rolling update، شما وضعیتی خواهید داشت که هم نسخه قدیمی و هم نسخه جدید همزمان بالا هستند و دارن به کاربر پاسخ می‌دهند :
اگر نسخه قدیمی اجرا باشه models, database با هم نمی‌خونه تازه اگر این ستون not null هم باشه که باید پر بشه ولی منطق این کد توی ورژن قبلی کدها نیست و خطا .‌‌...

اگر نسخه جدید هم اجرا بشه که نیاز به تغییرات دیتابیس داره.

یک راهکار اینه که کلاً نسخه قدیمی رو خاموش کنید (همزمان همش رو) و نسخه جدید رو جایگزین کنید که خب ازون ۱ ساعت downtime با ارزش میزان زیادی رو از دست می‌دید.

یک راهکار multistep migration هست، که مثلاً توی مثال بالا یک ستون nullable تعریف کنید، ولی توی منطق کد مطمئن بشید که هیچوقت null نمونه بعد که ورژن قدیمی کامل از بین رفت، یک migration دیگه بنویسید که دیگه ستون nullable نباشه و مجدد دپلوی کنید.

دیدم بچه‌های این شرکت با این موضوع آشنایی نداشتند گفتم بگم، صرف اینکه HA, K8s, Replica, ... تعریف می‌کنید مشکل downtime شما حل نمی‌شه، فقط بهتر می‌شه.

اضافه کنم، مشکل شما وقتی حادتر می‌شه که ci/cd هم دارید و پروژه توی قدم‌های اولش هست، کلی فیچر و تغییرات هم قراره اضافه بشه


پ.ن:
این موضوع توی مصاحبه‌ها جزو سوالات مهم هست.
👍68108🤷‍♀1👏1
Python Hints
اومدم یک تولز معرفی کنم و برم : من حدودا ۲ سالی میشه که Postman ندارم؛ از وقتی که لاگین و Sync و ... کم کم اجباری شد (احمقانه) ی مدت طولانی رفتم روی کد پایتون؛ یک بخشی داشتم به اسم api client توی اکثر کدهام که خودش ی پروژه کنار پروژه اصلی میشه ( کارفرما و…
#Quick

و در نهایت :

استفاده از Insomnia, Postman توی شرکت برای پروژه‌های اصلی ممنوع شد.

بخاطر اینکه برای استفاده ازین ۲ ابزار حتماً باید اکانت داشته باشید و حتماً هم این ابزارها تمام اطلاعات رو با سرور‌هاشون Sync می‌کنند.

پیشنهاد خودشون Bruno بوده (پیشنهاد من بود) ولی هر ابزاری که بدون نیاز به اینترنت و sync بشه استفاده کرد مشکلی نداره.


پ.ن : اگر کسی گزینه بهتری می‌شناسه قطعاً منتظر شنیدنش هستم.
Thunder Client
هم درحال حاضر استفاده می‌کنم البته، ولی خب چندتا از دولوپر‌ها vscode ندارند که دردسر شده.
👍296👎3👏2🤔2
Forwarded from RandRng
این روزا خیلی سرم شلوغه و تمام تمرکزم روی کدها هست.
اینکه وسط اینکارا باید دیتکتیو بازی هم در بیارم یا option های یک ابزاری رو بخاطر بیارم خیلی سخته حتی بعضی کامندها انقدر سخت و ترکیبی می‌شه که خود chatGpt هم نمی‌تونه درست توضیحش بده :

من سلسله‌ای ازین کامندها دارم که ذخیره کردم (از خیلی قدیم) مشکل اینه که یک دفعه وسط پروژه لازمه یکیش رو تغییر بدم (بعضی کامندها انقدر pipe, ... داره خودش یک پروژه هست)

داشتم روی یکی از همین موارد کار می‌کردم یک منبع پیدا کردم خدایان خودشون اینو سر راهم گذاشتند.

اینو برید ببینید متوجه ‌می‌شید چی میگم.

چه ایده خفنی و چه اجرای بی‌نظیری؛ اینو حتما ذخیره‌اش کنید (جدی می‌گم)
3414👍10👌2
شب و روزگار
خوش
👌6919😎7👍4😁2🔥1💋1
Forwarded from RandRng
کلید RSA هم برای اولین بار شکسته شد.
نیاز فوری به الگوریتم Encryption جدید و قویتر

Blog Post
👍22👎18🤯7
Forwarded from RandRng
توضیحات پست توی گروه مربوط به کانال Rust
👍18🤯32😨2
جوابی به بیشترین سوال، اینو باید توی @pyhints می‌زدم ولی حالا که اینجا هستم بذارید بنویسم و اونجا فروارد کنم.

وقتی وارد یک کانال یوتیوب می‌شید (ویدئو مفید با محتوای مناسب)
لایک - کامنت - سابسکرایب رو فراموش نکنید.

دانلود کردن ویدیو و بستن ویدئو توی دقیقه ۵ (حتی اگر لایک کنید) باعث میشه یوتیوب فکر کنه اون ویدیو جذاب یا مفید نبوده و کمتر ریکامند بده اون رو.
طبیعی هست که بخواید دانلود کنید ویدئو‌هارو هزینه و سرعت اینترنت و ...
ولی حداقل یکبار با کیفیت پایین هم که شده ویدئو رو ببینید.

حالا چرا این رو می‌گم :
۱- انگیزه دادن
۲- حمایت کردن

توی این مدتی که لایوهای fluent python کتابی راجب مباحث advance تر در پایتون رو آپلود می‌کردم راجب قوانین یوتیوب بسیار یاد گرفتم.

از بسیاری از دوستان Senior هم خواستم که مباحث دیگری مثل
Linux, Ansible, Docker, K8s, Nginx, Backend, Rust, Security, ...

رو باهم کار کنیم (مباحثی که خودم راجبشون به اندازه کار production سواد دارم) اما تقریباً خروجی همه صحبت‌ها یک چیز بود.

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


برای همین بچه‌هایی که تدریس شغل آخرشون هست رو نمی‌شه مجاب کرد به آموزش دادن و خدا می‌دونه که بهترین آموزش‌ها دست این افراد هست (بخاطر تجربه بالایی که در زمینه پروداکشن دارند)

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

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



شخصاً بسیار درگیر مشکلات هستم، توی اولین فرصت لایو‌های Fluent Python رو ادامه خواهم داد (شاید ۳ بار در هفته)
113👍36👌7👎3🤔2❤‍🔥1🔥1
اون هیزم‌ها بود برای زمستان سرد اروپا جمع کردن

نمیشه یکی رو بفرستیم پس بگیره ؟
😁157👎12👍11😭7🗿5😢3💔2🆒1
گیت‌هاب دسترسی رایگان به copilot داره می‌ده؛ نمی‌دونم برای همه هست یا نه.

ولی دقیقاً وسط کانفیگ NeoVim و بعد از push اولین تنظیمات این ایمیل برام اومده.

جالب بود 😂

پ.ن :
دوستان اشاره کردند یک پلن رایگان بهش اضافه شده که همگی می‌توانند استفاده کنند.
ولی دقیقاً وسط سوییچ کردن من به NeoVim بود.
👍38🤩6😁4🤔32💯2🐳1
هلوکاست ایرانی

یک زمانی شهردار تهران رو بخاطر ترافیک تهران اعدام کردند.

آخوند جز ویرانی، برای ایران دستاورد نداشت.
👍186👎66😁4😱3💔3