Python Hints
الذهاب إلى القناة على Telegram
Python tips and tricks The Good, Bad and the Ugly توی این کانال فقط قرار هست در مورد core python صحبت کنیم. این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار) Admin: @Abbasi_ai
إظهار المزيد9 600
المشتركون
+424 ساعات
+727 أيام
+21230 أيام
أرشيف المشاركات
9 599
مصاحبه داشتم، کامل فراموش کرده بودم!
رفتم تو مصاحبه، مدیرفنی اومد گفت آقای فلانی یک مشکلی پیش اومده کمی دیرتر میاد ( مصاحبه من با ایشون ست شده بود )
بعد بحث به
async رسید، دقیقاً سوالای خودم رو ازم پرسید.
جواب دادم و گفت؛ درک خیلی خوبی داری ولی نظری که داری میدی اشتباه هست.
دوتا چیز رو یادش نبود:
۱- شماتیک هر core مربوط به cpu
۲- مصاحبه من پایتون هست
وسط همین حرفا بود و گردن نگرفتن، که مصاحبه کننده اصلی وارد شد؛ بعد گوش دادن به حرفا.
یک سلام علیک گرم کرد، بعد به مدیرفنی گفت؛ البته سوالاتی که راجبش بحث میکنید رو من از کانال خودشون برداشتم.
خلاصه مصاحبه تموم شد؛ به ۱۰ دقیقه نکشید دوستی که من رو معرفی کرده بود زنگ زد گفت overqualified شدی.
میگم، مگه خودتون نگفتید Senior لازم دارید ؟
میزنه زیر خنده.
کاری به جریان مصاحبه ندارم، ولی به معنای واقعی لذت بردم ازینکه دیدم سوالای خودم داره پرسیده میشه.
واقعاً ذوق کردم، فکر نمیکردم کانال انقدر بازخورد داشته باشه.
پینوشت:
بله پیش اومده جایی دستمزدش خوب بوده خودم رو زدم به اون راه که overqualified نشم و اینکار بدی نیست.
معمولاً بعضی مدیرای فنی براشون نگرانی هست که شخص باسوادتر نکنه تو کارشون دخالت کنه یا حرف نخونه، ولی برای من که دنبال داستان نیستم دستمزد که خوب باش مشکلی پیش نمیاد مگر اینکه کار برای دوست نزدیکم باشه و نتونم درمورد راهکار اشتباه سکوت کنم.9 599
یک گروه هکری گفته کل اطلاعات همراه اول رو با نفوذ بدست آورده
بعد رفتن اعتبار سنجی کردن، دیدن دادهها درسته؛ تو گزارش چی زده باشند خوبه ؟
اطلاعات موردی تأیید میشود، اما با توجه به نفوذهای مکرر ممکنه این اطلاعات از دیتاهای مربوط به نفوذهای قدیمیتر باشه.
یعنی مملکت اینطوریه که، خب دیتای ملت رو که همه دارند، اگر راست میگید نفوذ کردید، سیستم خانم فلانی رو بکگراندش رو عوض کنید 😂🤣
9 599
اینو حتماً شنیدید:
توی پایتون
GIL باعث میشه multi-thread واقعی نداشته باشیم.
حالا من چندتا سوال سطح بالاتر میپرسم، میخوام این سوالا رو توی مصاحبههای سطح سنیور و مید استفاده کنم :
۱- مگر نه اینکه GIL باعث میشه در لحظه فقط یک thread توی پایتون اجرا بشه؟ پس چرا کتابخونه threading داریم ؟
۲- توی یک برنامه کاملاً پایتونی ( fortran, C, ... درگیر نباشه) بنظر شما کدوم مورد سریعتر هست و چرا ؟
threading یا asynchronous
۳- حالتی به ذهنت میرسه که توی یک کد کاملا پایتونی استفاده از threading بهتر از asynchronous باشه ؟
چرا این سوالات ؟ چون خسته شدم انقدر که سختترین سوال مصاحبه این بود که؛
کی از threading استفاده کنیم کی از multi-process ؟
گفتم چندتا سوال خوب برای مصاحبه طرح کنم، البته دارم روش کار میکنم.
۴-۵ تا دیگه اضافه میشه9 599
#موقت
تسک Build your own HTTP Server این ماه رایگان شده.
اگر دوست داشتید اینجا :
https://t.me/codecrafter_fa
راه حلهای خودتون رو بذارید و البته راجب کدهای دیگران هم نظر بدید و ... که حکم review داشته باشه
توی گروه فقط و فقط راجب تسکهای مربوط به این سایت صحبت کنید. سپاس
9 599
اینو باید میگفتم؛
یکی از شما دوستان (حتما به گیتهابش سر بزنید و Star بدید؛ 0xAFz Github) زخمت کشیده و
code completion این تنظیمات رو برده روی blink.nvim که خب به مراتب بهتر شده.
با اینکه شخصا از code completion خیلی استفاده نمیکنم؛ کلید
<leader>gdp, <leader>gdv
رو همیشه استفاده میکنم که نگاهی هم به سورس کد بندازم ولی برای اولین بار بنظرم یک code completion خیلی خوب هست (به ریپو blink.nvim هم Star دادم) هیچ کند شدن و ... رو حس نکردم و از صبح که دارم باهاش کار میکنم بنظرم خیلی جذاب هست.
یک آپدیت روی Readme.md و یک جابجایی محل تعریف keymap شاید لازم بشه که توی اولین فرصت انجام میدم.
ولی باید یک تشکر ازین دوستمون میکردم و برای اونهایی هم که گفته بودند code complete خوبی نداره این پست رو به اشتراک میذاشتم تا یکبار دیگه تست کنند.9 599
#موقت
نوشتن این پست ۴۵ دقیقه زمان برد؛ چون عادت دارم مثالها رو هی تغییر میدم تا مطمئن بشم اون چیزی که فکر میکنم رو منتقل میکنه.
برای همین آموزش دادن برام خیلی سخت هست همیشه.
توی @pyrust شروع کردم آموزش های کوچیک رو ولی بعضی از پستها بیش از ۱ ساعت هم زمان میبره تایپ کردنش مثلا فرق Stack, Heap رو توضیح دادن فکر میکنم ۲ ساعت شد.
درنهایت:
بله من تایم میگیرم هرکاری که انجام میدم رو.
9 599
وقتی صحبت از امنیت میشه خیلی از توسعه دهندههای اینکار رو وظیفه تیم امنیت میدونند؛ که خب درست هم هست ولی تا یک جایی. شما هم بعنوان توسعه دهنده باید یک سری موارد رو بدونید.
مثلا خیلی دیدم؛ تیمهای تست نفوذ فراموش میکنند (دسترسی ندارند) الگوریتم
hash کردن پسورد داخل دیتابیس رو چک کنند؛ اینجا دانش شما بعنوان برنامهنویس پروژه خودش رو نشون میده و یک لایه اطمینان بیشتر برای پروژه خواهد بود.
دمشون گرم؛ تیم توسعه Django رو میگم چرا که اکثر اتکهای مهم رو تا جایی که امکانش هست جلوگیری میکنند و برای همین هم همیشه میگم بکند رو فارغ از فریمورک یاد بگیرید. با این حال بسیاری دولوپر Django هست که حتی زحمت بررسی و آپدیت به آخرین پچهای امنیتی رو به خودش نمیده مثلا pip freeze و version locking استفاده کرده.
توی بعضی مواقع هم دانستن بعضی نکات امنیتی برای optimization بهتون کمک میکنه؛ مثلا توی password hash ممکن هست تحت یک شرایط خاصی اصلا الگوریتمی مثل Argon2 به کار شما نیاد و به دلایلی بهش نیاز نداشته باشید تحت این شرایط میتونید برگردید روی sha256 و از اون استفاده کنید (این یک مثال بود اگر argon2 رو نمیشناسید درموردش بخونید؛ توی لیست PASSWORD_HASHERS های Django هم هست ولی خود Django از PBKDF2 استفاده میکنه پیشفرض)
خیلی از برنامهنویسها سرویس login امنی دارند که از موارد امنیتی خوبی هم استفاده میکنه throttling, brute-force blocker, hashing و ... اما بعضی موارد باید فراتر ازین بره؛ چیزی که خیلی ندیدم حتی روی بعضی سرویسهای لاگین شرکتهای بزرگ و موارد حساس.
فرض کنید شما login با ایمیل اعضای شرکت بزنید (ایمیلهای شرکتی اصول خاصی داره و راحت بدست میاد) اگر ایمیل اشتباه باشه response time شاید زیر 20ms باشه ولی وقتی ایمیل درست هست بالای 100ms میشه این یکی از تکنیکهای قدیمی مورد استفاده برای نفوذ به صفحات ادمین بوده و هست. شما وقتی username. email رو پیدا کنی یک نگرانی کمتر خواهی داشت.
برای همین کسی که با این موارد آشنا هست؛ برای اینکه response time لاگین درست و غلط رو یکسان کنه وقتی میبینه یوزر وجود نداره بجای اینکه درجا پاسخ رو برای کاربر بفرسته یکبار پسورد رو با یک چیز رندم (طبق validation نمیتونه توی دیتابیس باشه) حساب میکنه و بعد response اطلاعات غلط روی لاگین رو بر میگردونه.
البته که من برای این مثال دست روی یک موردی گذاشتم که خیلیها رعایت نمیکنند (شاید نیازی هم ندارند) و خیلیها بلد نیستند (باید دنبال یک جیزی هم میگشتم که خود django امن نکرده باشه)
یا مثلا توی کار با دیتا قبول نکردن دیتای pickle؛ اینو برگردید بالا من همون اوایل شروع کار کانال گفتم با مثال و حدود ۶ ماه قبل یکی از خوبای دنیای تکنولوژی با همین روش بهش نفوذ شد (hugging face رو منظورم هست)
یا توی شرکتهایی که یوزر فایل آپلود میکنه و نیروی انسانی باید فایل رو بررسی کنه؛ خیلی وقتا دیدم فقط پسوند فایل بررسی میشه و ...
حالا چه چیزهایی رو باید بعنوان دولوپر بدونید ؟ OWASP TOP 10 حداقلی ترین مواردی هست که شما بعنوان یک دولوپر باید بشناسید و راهای مقابله باهاش رو هم بلد باشید.
ولی بطور خاص برای Django Rest Framework حداقل این cheathseet رو باید داشته باشد
OWASP cheatsheet for DRF
من یک cheatsheet شخصی خودم دارم (شامل مواردی از بخشهای مختلف همین cheatsheet هم هست) ولی متاسفانه نمیتونم به اشتراک بذارم چون آخرین ورژن رو با داکیومنت شرکت ادغام کردم. اما پیشنهاد میدم لینک بالا رو بخونید و حتما حتما حتما نگاهی هم به رفرنسهاشون بندازید این خیلی مهمه.9 599
از اون موقع خیلی تغییرات داشته (اکثرا برای اینکه توی سرعت توسعه کمک بیشتری بده) :
https://github.com/pykeras/neovim
بنظرم اگر از این تنظیمات
neovim استفاده میکنید حتما این تغییرات آخر رو داشته باشید.
شخصا عادت دارم مشکلات کد رو بیشتر توی terminal ببینم؛ مثل اینکه خیلی از دوستان اینکار رو نمیکنند. برای همین updatetime روی تغییرات و پیامهای مربوط به diagnostic رو از 5sec آوردم روی 150ms.
نکته دوم اینکه ارورهای بلند رو هم بجای اینکه مجبور بشید توی ترمینال ببینید؛ حالا با بردن cursor روی اون خط بصورت کامل توی diagnostic float میتونید ببینید که راحت تر شده (راجب این هنوز خودم شک دارم که بهتر هست یا نه ولی چون درخواست براش زیاد بود انجامش دادم)
یک سری تغییرات دیگه هم این مدت داشت (بیشتر fix بود)
برای مثال
<leader>gdp : goto definition peek
درست کار نمیکرد؛ بک پنجره floating از اون تابع یا کلاس باز میکنه و علاوه بر اینکه میتونید جزئیات کد رو ببینید؛ حتی میتونید توی همون پنجره ادیتهای سریع رو توی همون فایل انجام بدید و ...
در نهایت اگر بهبود دیگری وجود داشت ممنون میشم بهم بگید؛ منم لذت میبرم سرعت توسعه کدهام بیشتر بشه.9 599
https://t.me/pytens/1598
خواستم یادی کنم از #توله_مجاهد این روزا خیلی خودشو داره پاره میکنه 😂
9 599
یکی از خوبای یوتیوب ویدئو گذاشته؛ ولی اینبار
Django نیست بلکه زده توی آموزش FastAPI برای من که دیر شده شاید ولی چند نفری پرسیدید FastAPI منبع شروع معرفی کنم؛
این برای شما :
Youtube link
فقط دقت کنید؛ این برای شروع هست با ۴ ساعت آموزش فکر نکنید متخصص بکند شدیدا. 😁
باقیش رو خودتون دنبال کنید و بخونید.9 599
تا اینجا اومدید کانال رو با دوستانتون share کنید.
منم مطلب رو دوباره عصر مینویسم. ۷ نفر تا 8k شدنمون لازمه 🎉🎊🎉🎊
9 599
#موقت
دوتا پست قبلتر؛ حدود 250 بار share داشته.
خواهش میکنم از این بخش به بعد پست اصلی رو بخونید.
فقط برای یادآوری میگم 🌹
9 599
به این موارد
چندتا مورد امنیتی هم اضافه کنید.
دانستن بعضی چیزها وقتی خودتون رو web developer معرفی میکنید اجباری هست؛ اونقدر واضح و اجباری که هیچکس از شما راجبش شاید سوال هم نکنه؛ ولی توی کار وقتی ببینند رعایت نمیکنید و خرابکاری جدی به بار میارید، از کار کنار گذاشته میشید.
چندتا مورد خیلی سادهاش :
۱- قبل از هر release باید پکیجهای اصلی رو بررسی کنید، حتماً باید چک کنید که مشکل امنیتی نداشته باشه، خیلیها توی دنیای python از مکانیزمهای version lock, pip freeze, ... استفاده میکنند.
این کار درست نیست (قبلاً هم صحبت کردم راجبش بجای
= از ~= استفاده کنید) شما حداقل باید patch هارو بصورت خودکار بگیرید.
اگر ورژن کتابخانهها رو روی یک ورژن خاص میگذارید؛ حداقل باید ابزاری برای بررسی باگهای مهم و ورژن کتابخانهها داشته باشید؛ که حتماً توی پایپ لاین این موضوع رو بررسی کنه.
۲- حداقل هر چند وقت یکبار یک نگاهی به داکیومنت اون کتابخانه بندازید، ببینید هنوز maintain میشه یا deprecate شده ؟
۳- صرف اینکه؛ JWT و SHA-256 استفاده میکنید اپلیکیشن شما امن نیست.
من خیلی دیدم، که توی jwt متأسفانه بعضیها اطلاعات کاربر رو میگذارند که خب خیلی اشتباه هست.
یا مثلاً فارغ از اینکه پروژه برای چه کاری هست و چقدر باید امن باشه یا ... همیشه برای password hash از الگوریتم خاصی استفاده میکنند مثلا sha2-256
۴- حداقل آشنایی با SQL-Injection, XSS, ... رو باید داشته باشید
و موارد دیگر، البته که خیلی از این موارد رو Django برای شما انجام داده و مطمئن میشه وجود نداشته باشه و خیلی های دیگه هم باید توسط برنامه نویس رعایت بشه.
بعضیها حتی باید توی Test نویسی چک بشه وگرنه پروژه که بزرگ بشه احتمالش زیاد هست باعث نفوذ به سیستم و ... بشه.
یادم باشه بعداً یک checklist مخصوص DRF برای این موضوع آپلود کنم؛ تمام موارد رو حداقل در حد آشنایی بدونید و مطمئن بشید پروژه امن هست.
مشکل امنیتی بسیار زیاد توی پروژههای دوستان میبینم و بهتون اطمینان خاطر میدم که به هیچوجه من ادعایی روی سواد امنیتی و ... ندارم و این موارد بایدهای Software Engineering هست.9 599
گفتم سال جدیدی یک لیستی از چیزهایی که یک
Django Developer باید بلد باشه رو بهتون بدم؛ این موارد حداقل چیزهایی هست که به محض ورود به هر پروژه استاندارد Django باید بلد باشید.
نکته مهم : من ۹۹.۹٪ وقتا فقط Django Rest Framework استفاده میکنم پس توی متن هرجا گفتم Django منظورم همون DRF هست.
۱- یک سری چیزها هست که شما باید بلد باشی ربطی به جنگو هم نداره؛ اگر میخوای پیشرفت کنی باید بتونی با اینا کار کنی:
Linux, PostgreSQL, Docker & Docker Compose, Redis, Nginx, Celery & Celery beat
بعضی وقتا RabbitMQ, Kafka هم نیازمندی هست؛ بسته به سطح شما به مرور زمان توی موارد بالا حرفهای تر میشید. لینوکس رو خیلیها کنار میذارند که خیلی اشتباه هست؛ ببین کل استک شما قراره بره روی docker, k8s, podman یا ... وقتی یک اتفاقی توی سیستم میوفته و لاگ سرور بهت داده میشه هم container شما لینوکس هست هم ۹۹.۹٪ سرور شما؛ اگر نتونی اون مشکل رو بازسازی کنی چطوری میخوای تست بگیری و متوجهاش بشی ؟
درحد LPIC1 هم کفایت میکنه (اگر خواستید مدرک بگیرید؛ پیشنهاد میکنم حتما برای آزمونهای redhat بخونید)
اگر تاحالا با Linux کار نکردید؛ پیشنهاد نصب و ... بهتون نمیدم؛ از wsl برای تمرین کردن آنچه که لازم هست استفاده کنید و محیط گرافیکی رو بندازید دور؛ شما روی سرور محیط گرافیکی ندارد (درست تمرین کنید).
باقی موارد رو ولی کم کم یادبگیرید؛ کمی یادگیری - بعد تمرین یا استفاده توی پروژه - به چالش و مشکل خوردن - دوباره یادگیری (ادامه یادگیری) و اینکار رو تکرار کنید.
یادبگیرید هر کدوم از موارد بالا چه زمانی استفاده میشه و برای چه کاری این موضوع خیلی مهم هست؛ کی باید استفاده کنید و کی نباید استفاده کنید.
اما برای خود Django حداقل چیزهایی که باید همزمان با Django بلد باشید؛ نشده جونیور (حتی بدون سابقه کاری) بیاد پیشم و این موارد رو بلد باشه (به فرض اینکه پایتون رو اصولی یاد گرفته) و توی مصاحبه رد بشه؛ اصلا تا حالا نداشتم واقعا میگم :
pytest (basics), djagno-silk, drf-spectacular, faker, factory-boy, djangorestframework-simplejwt, django-axes, django-storage
استاندارد لاگ نویسی هم که درموردش قبلا یک صحبتی داشتیم اون حداقلش هست و بهترش اینه که به ابزارهای موجود وصل بشه.
یک سری چیزا هم توی خود Django هست؛ مثل throttling, middleware, ... که مفاهیمی هست که روی بکند داریم و فارغ از فریمورک باید بلد باشید برای همین صحبتی راجب این موارد ندارم.
واسه همه اینها توی سطوح مختلف کلی ویدئو یوتیوب هست و برای مواردی هم که نیست مطمئنم به زودی درست خواهند کرد دوستان؛ ولی نکته مهمتر اینه که یادبگیرید داکیومنت هم بخونید و خودتون رو آپدیت نگه دارید.
پینوشت:
شخصا برنامهای برای ساخت آموزش روی این مباحث یا پروژهها ندارم.
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
