🧑‍💻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
دوره های برنامه نویسی منابع زیادی هستن بنده به شخصه به استاد خاصی اشاره نمیکنم و تعدادی دوره میگم چون یادگیری هر فردی متفاوت هستش و ممکن هست هر کس با استادی یاد بگیره دوره های که میگم به شرح زیر هستن دوره پایتون مقدماتی و پیشرفته جادی دوره پایتون رضا دولتی دوره پایتون کدیاد امیر حسین امیری دوره پایتون نابغه ها امیر حسین معلمی دوره پایتون توسعه وب حسین رمضان پور سون لرن ممکنه باز هم دوره های باشه که من اشنایی با اساتیدشون ندارم و دوستانی که زبان انگلیسی خوبی دارن میتونن دوره پایتون یدومی و دوره پایتون لینکدین رو بهشون معرفی میکنم
🧑‍💻PythonDev🧑‍💻 pinned «دوره های برنامه نویسی منابع زیادی هستن بنده به شخصه به استاد خاصی اشاره نمیکنم و تعدادی دوره میگم چون یادگیری هر فردی متفاوت هستش و ممکن هست هر کس با استادی یاد بگیره دوره های که میگم به شرح زیر هستن دوره پایتون مقدماتی و پیشرفته جادی دوره پایتون رضا…»
Please open Telegram to view this post
VIEW IN TELEGRAM
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم.

همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار :
۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون بمونه + تاریخ)
۲- بعد از اینکه تغییرات رو اعمال کردید (اسم تغییرات + تاریخ یا git commit)

شاید شما ندونید برای چی ذخیره می‌کنیم ولی ی روزی نجاتتون میده.

برای گرفتن خروجی بالا توی ترمینال این دستور رو اجرا می‌کنیم با توجه به این نکته که اسکریپت مثال (توی عکس قبلی رو به اسم example.py ذخیره کردیم)
python -m cProfile -s cumulative example.py
و درصورتی که بخوایم خروجی رو ذخیره کنیم که برای آنالیزش از
snakeviz, pstats
استفاده بشه و مهمتر از همه داکیومنتش کرده باشیم می‌تونیم از دستور
python -m cProfile -s cumulative -o compare_bubble_vs_builtin_sort_$(date +'%Y_%m_%dT%H_%M_%S').prof example.py

استفاده کنیم؛ حتما پسوند رو .prof بذارید که راحت شناسایی بشه.
🧑‍💻PythonDev🧑‍💻
قبل از اینکه خروجی cProfile رو تفسیر کنم می‌خوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم. همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار : ۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون…
توی دستور بالا :
-m:
برای استفاده از یک ماژول خاص استفاده می‌شه
-s:
ترتیب نمایش هست که گفتیم بر اساس cumulative time باشه  همیشه هم همین رو استفاده خواهید کرد
-o:
برای اینکه خروجی رو توی یک فایل بریزه و توی ترمینال نمایش نده (اول در تاریخ ثبت می‌کنیم بعد ی بار هم بدون این option برای راحتی خودمون اجرا می‌کنیم)

تفسیر خروجیش هم خیلی ساده‌تر از اون چیزی هست که فکر می‌کنید فقط چندتا نکته داره :
ncalls:
تعداد فراخوانی اون خط از کد (ستون آخر کمی جلوتر توضیح میدم دقیق)
وقتی دوتا عدد هست مثل خط اول خروجی توی عکس قبلی
3/1:
عدد کوچیکتر تعداد فراخوانی غیر بازگشتی یا primitive هست و عدد بزرگتر تعداد کل فراخوانی به هر شکلی که بوده (بازگشتی و غیر بازگشتی و ...) یعنی بصورت کلی اون builtin method توی مثال قبل ۳ بار فراخوانی شده.

tottime:
مجموع زمان مورد نیاز جهت اجرای اون تایع؛ به غیر از زمان اجرای توابعی که داخل این تابع فراخوانی شده‌اند.

percall:
زمان اجرای مورد نیاز برای هربار اجرای اون خط یا اون تابع معمولا حدودی برابر هست با :
tottime / ncalls

cumtime:
مهمترین ستون همینه و اون مرتب سازی که توی دستور انجام دادیم (منظورم s cumulative- هست) بر اساس همین ستون بود.
مجموع زمان مورد نیاز از لحظه فراخونی اون خط یا تابع تا خروج از اون خط یا تابع + زمان مورد نیاز برای اجرای توایعی که داخل این تابع یا خط فراخوانی شدند + زمان اجرا بصورت recursive , ... خلاصه همه چیز اینجاس و از همه ستون‌ها هم دقیق‌تر هست

filename:lineno(function)
اینم که بسیار واضح هست از سمت چپ به راست :
اسم اسکریپت : شماره خطی که اون کد اجرا شده (اسم تابع)
اسم تابع برای شرایطی مهم هست که داخل تابع اصلی توابع دیگری هم فراخوانی بشه

توی خروجی بالا مواردی مثل builtin.exec (از توابع مورد علاقه من هست اصن ی وضعی) و برخی موارد دیگر برای
import random
هست


همینجا بگم که تصویر قبلی خروجی کامل cProfile نیست و بنده این خروجی رو بریدم تا خواناتر باشه
توی دوره‌های آموزشی و دانشگاه چیکار می‌کنند ؟!

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

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

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

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

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

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

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

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

مهمتر اینکه :
همیشه بپرسید به چه دلیل رد شدید.
چون خیلی پرسیده شده :

اگر تازه کار هستید

Head First Python (3rd edition)

نسخه اولیه رو O'Reilly منتشر کرده (رایگان تو سایتش می‌تونید بخونید یا از منابع موجود استفاده کنید و دانلود بزنید)

برای کسی که تازه میخواد پایتون و برنامه‌نویسی رو شروع کنه کتاب بسیار خوبی هست (من نسخه‌‌های قبلی رو به شاگرد هام معرفی می‌کردم؛ این نسخه هم قطعاً بهتر هست که بدتر نه پس نخونده معرفی می‌کنم کتاب رو)
🧑‍💻PythonDev🧑‍💻
#django_roadmap #roadmap امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند : ۱- پایتون رو تا سطح خوبی بلد هست ۲- ساختمان داده و الگوریتم رو می‌شناسه ۳- لینوکس، گیت و داکر رو هم بلده یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین…
یکسری از دوستان اشاره کردند که کتاب جزئیات کمی داره و برای کسی که قبل از این وب کار نکرده خیلی راحت و سر راست نیست :

اگر این شرایط برای شما هم صدق می‌کند، به این لیست میشه یک کتاب دیگر هم اضافه کرد.

کتاب :

Web Development with Django 2nd edition By Ben Shaw, .... (Packt pub)

خوبی دیگری که این کتاب برای دوستان تازه‌کار داره این هست که توی هر فصل و بعد از هر مبحث یک تمرین جزئی درمورد آنچه صحبت شد هم ارائه میده

فصل‌های دیگری هم که بنظرم بهتر توضیح داده برای شروع :
Media serving and file uploads,
Session and authentication
Testing your django application
و بخش‌هایی (شامل مثال) از فصل های :
Generating CSV, PDF, and other Binary File
Django Third-Party Libraries
هست.

بازم میگم اگر کتاب دیگری خوندید، درگیر کتاب‌های مختلف نشید، تمرین کردن و با جستجو رسیدن به آنچه که نیاز دارید اولویت باشه براتون

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

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

حالا اینجا مثال
Django
بود شما به موضوعات دیگر و ... هم تعمیم بدید این موضوع رو.

اولویت اول شما باید کد زدن و تمرین باشه، شخصاً کل هفته رو کد میزنم
آخر هفته که روز استراحتم هست، ترجیح میدم کتاب بخونم تا مطالب و تکنیک‌های جدید رو توی کارهام پیاده سازی کنم (و همین ۱ روز برای خیلی از مباحث و کتاب‌ها بیشتر از کافی هست).
اگه تو صفحه‌های وب نیاز داشتید یک قسمت کد برنامه‌نویسی نمایش بدید (مثل مطلب آموزشی در وبلاگ، مستندات فنی مرتبط با برنامه‌نویسی و...)، با استفاده از Prism می‌تونید نمایش بلاک کد رو زیباتر و کاربردی‌تر کنید.

https://prismjs.com
از سینتکس زبان‌های مختلفی هم پشتیبانی می‌کنه و چندتا تم و کلی پلاگین داره که براساس انتخاب اون‌ها css و js نهایی رو برای استفاده در اختیار شما قرار می‌ده.
https://prismjs.com/#plugins
ازین مدل کد توی سورس کد پکیج‌ها زیاد دیدید همون استاندارد
EAFP
امروز یکی از نیروهای junior که باهاشون کار می‌کنم روی یکی از کدها به اروری میخورد و کار پیش نمی‌رفت.
ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمی‌گرفت (زمانی که tensorflow 0.7 اومده بود قشنگ یادم هست ازین چالش‌ها زیاد داشتیم)

توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
raise CustomException('Finally we raise our custom error in framework.') from None

همین from None باعث میشه  exception های قبلی چاپ نشه.

پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه‌.

دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
برگه تقلب (خلاصه دستورات) پایتون.pdf
17.3 MB
• کتاب برگه تقلب پایتون (خلاصه دستورات)
فارسی

#Book #Python
تو این دو روز زیاد پست اموزشی نگذاشتم و برنامه دارم که برای دوستان عزیز که با زبان برنامه نویسی پایتون کار می کنند و میخوان یه درجه ای از مهارت های بالا در برنامه نویسی برسن سعی بر این دارم که یه منبع کامل از کتاب خانه ها و رفرنس های زبان پایتون به طور کامل و جامع ارائه بدم که سطح عملی خودتون رو بالا ببرید .💻
دستاورد جدید آنلاک کردم
پروژه دارم
اوبنتو آپدیت شده (میزان لگ سیستم به خدا رسیده)
ممکنه مشکل از انویدیا هم باشه (ولی درست کار میکنه)
دمو هم دارم
گوگل هم 403 بهم میده (بدون وی‌پی‌ان)

مشکل ۴۰۳ پا برجا نیست (۲۰۰-۳۰۰ تا وی‌پی‌ان داره برنامه‌نویس ایرانی) بطور کلی گفتم
🧑‍💻PythonDev🧑‍💻
دستاورد جدید آنلاک کردم پروژه دارم اوبنتو آپدیت شده (میزان لگ سیستم به خدا رسیده) ممکنه مشکل از انویدیا هم باشه (ولی درست کار میکنه) دمو هم دارم گوگل هم 403 بهم میده (بدون وی‌پی‌ان) مشکل ۴۰۳ پا برجا نیست (۲۰۰-۳۰۰ تا وی‌پی‌ان داره برنامه‌نویس ایرانی) بطور…
قبل اینکه
Kernel
تغییر بدید، یا درایور‌ها رو دستکاری کنید و ...
Bios Update
بزنید، مخصوصاً اگر سخت‌افزار جدید اضافه کردید.

۹۰٪ مشکل حل شد، هنوز بعضی مشکلات وجود داره
و روی نرم‌افزارها هم فعلاً جدی‌ترین مشکل خودم
smplayer
هست که lag بسیار داره.


پ.ن : توی بررسی لاگ‌های nvidia متوجه شدم بخشی از مشکلات از نصب cuda میاد. بعضی تنظیمات رو خودش کنترل می‌کنه که نمیشه سخت‌افزار رو مناسب کارهای روزانه optimize کرد (ولی این مورد هم اون ۱۰٪ مشکل من رو حل نمی‌کنه چون ازینجا نیست)

احتمال ۹۹٪ دوستانی که هوش مصنوعی کار نمی‌کنند، به این مشکلات نخواهند خورد
🧑‍💻PythonDev🧑‍💻
قبل اینکه Kernel تغییر بدید، یا درایور‌ها رو دستکاری کنید و ... Bios Update بزنید، مخصوصاً اگر سخت‌افزار جدید اضافه کردید. ۹۰٪ مشکل حل شد، هنوز بعضی مشکلات وجود داره و روی نرم‌افزارها هم فعلاً جدی‌ترین مشکل خودم smplayer هست که lag بسیار داره. پ.ن…
۱۰٪ آخر هم یافت شد؛ nvidia یک موردی رو معرفی کرد به اسم
Nvidia GPU stats tool
توی status bar وضعیت دما و ... GPU هارو بهتون میگه، روی سیستم با ۱ کارت گرافیک احتمالاً مشکلات کمتری داره.

اما وقتی داشتم آنالیز میکردم، دیدم GPU اصلی سیستم، سریعا پاسخ میده و GPU دوم که تقریباً ideal و ضعیف‌تر هست latency بالاتری داره و همین باعث lag روی سیستم می‌شده
بخصوص موقع پخش video با smplayer چون من hardware decode رو فعال داشتم.

اوضاع بدتر هم میشد، چون من فاصله بین گرفتن وضعیت gpu هارو هم خیلی کم گذاشته بودم.

خلاصه، اینکه حال نداشتم بزنم
watch -n 1 nvidia-smi

باعث بدتر شدن اوضاع شده بود؛ اینکه Bios کمک کرد هم احتمال میدم بخاطر این بود که progress bar و کم کردن بافر و ... بود (ولی چون قبل از آپدیت بایوس این اطلاعات رو نگرفته بودم نمی‌تونم مطمئن بگم)

پ.ن : قبلاً این مشکل رو با
System Monitor
داشتم که یک gnome extension بود (متأسفانه خیلی دیر یادم افتاد که می‌تونه ازین موضوع باشه)