🧑‍💻PythonDev🧑‍💻
363 subscribers
86 photos
3 videos
15 files
78 links
Python tips and tricks
The Good, Bad and the Ugly

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

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


@Mtio975
Download Telegram
با چند تا مثال regex رو یاد بگیر‌(قسمت اول)

1. پترن ما این هستش که توی متن hello داشته باشه:
Pattern := "hello"


2. به بزرگ و کوچیک بودن حروف حساس نباشه:
برای این موارد یه سری flag هایی رو regex در اختیار ما قرار داده. برای اینکه به بزرگ و کوچک بودن حروف حساس نباشه از فلگ i استفاده می کنیم:
Pattern := "(?i)Hello"


3. اول متن با hello شروع بشه و به بزرگ و کوچیک بودن حروف حساس نباشه:
Pattern := "(?i)^hello"

برای اینکار اول الگو از ^ استفاده میکنیم.

4. اول هر خط با hello شروع بشه:
تو مثال قبلی گفتیم اول متن hello باشه اما اینبار اول هر خط رو میخوایم حساب کنیم. برای اینکار از فلگ m استفاده می کنیم که به معنی این است روی چند تا خط ^ و $ رو اعمال کن. همچنین از فلگ g که مخفف global هست، استفاده میکنیم‌ که بعد از پیدا کردن اولین نتیجه return نکنه و بره بقیه متن رو هم بگرده(توی هر زبان به یه شکلی فلگ هارو میدیم)

نکته:
اگه بخوایم بجای اینکه اول رشته با الگو ما تطابق داشته باشه، آخر خط و یا رشته رو چک کنیم، بجای ^ آخر الگو میایم $ قرار میدیم:
pattern := "hello$"


5. کاراکتر اول h باشد، کاراکتر دوم هرچیزی باشه فرقی نمیکنه و کاراکتر های بعدی llo باشد:
Pattern := "h.llo"

با استفاده نقطه مشخص میکنیم هر کاراکتری باشه فرقی نمیکنه.

6. فقط حروف کوچک انگلیسی:
Pattern:= [a-z]

داخل براکت میتونیم مشخص کنیم که چه کاراکتر هایی توی الگو ما هستش. ما اینجا میتونستیم تمامی حروف کوچک انگلیسی را بنویسیم(abcdefghi...) اما بجایش به این صورت نوشتیم که از a تا z باشد.

7. حروف انگیسی باشد و به بزرگ و کوچک بودن حساس نباشد. همچنین اعداد 0 تا 9 را هم داشته باشد:
Pattern := "(?i)[a-z0-9]"

همچنین میتوانیم از فلگ استفاده نکنیم و داخل براکت مشخص کنیم حروف بزرگ هم هستش:
Pattern := [a-zA-Z0-9]


#Regex
چرا conda استفاده کنیم؟؟؟


اول اینکه نوع پایتون رو هم خودش براتون بالا میاره حین ساخت محیط و شما دیگه درگیر پیچیدگی و هندل کردن نصب و مدیریت چند نسخه مختلف پایتون نمیشید و حتی کار کردنش باهاش از pyenv راحت تره و عوض کردن نسخه پایتونش هم راحت تره

conda create -n MyENV python=3.8
دوم اینکه محیطی که براتون میسازه رو داخل home شما و در دایرکتوری مخصوص خودش میسازه و نه در مسیر جاری شما خب این مزیتش این هست که شما راحت هرجا باشید میتونید ۱-سریع فعال و ۲-غیرفعال و یا محیط خودتون رو تغییر بدید و یا بدون دغدغه نسبت به محل قرارگیریش محیط جدید بسازید و ۳-حذف هم کنید و بین محیط‌های مختلف راحت سویچ کنید

1- conda activate my_env

2- conda deactivate

3- conda env remove -n MyENV
مورد بعدی هم اینکه:
۱-نصب پکیج هم داخلش راحته
۲-و علاوه بر خودش میتونید از pip هم استفاده کنید
۳- همچنین بروز رسانی پکیج
1- conda install PackName

2- pip install PackName

3- conda update PackName
۱-لیست پکیج‌های نصب شده رو هم میتونید ببینید
۲-و یا یک فایل حاوی ادرس‌های آن جهت نصب بسازید
۳-و یا بصورت yaml براتون قرار میده که از دو بخش تشکیل شده پکیج‌هایی که خودش نصب کرده و پکیج‌هایی که با pip نصب شده

1- conda list

2- conda list --explicit

3- conda env --export > requirements.yml
که بالطبع میتونید اون رو هم در یک محیط دیگه نصب کنید
conda create -f requirements.yml

conda create -n MyENV -f requirements.yml
گفتیم همه محیط‌ها رو در یک مسیر قرار میده که با دستور زیر هم میتونید لیست همه محیط هاتون رو ببینید

conda env list
۱- اگه بخواید یک‌محیط رو‌حذف کنید ۲-یا یک پکیج رو حذف کنید
1- conda env remove -n MyENV --all

2- conda remove PackName
برای دیدن اطلاعات مربوط به محیط تون
conda info
جهت تست و بررسی سلامت محیط
conda doctor
جهت تغییر نام محیط با شرط فعال نبودن محیط تون
conda rename 
۱-جستجوی پکیج با نمایش تاریخچه تگ آن
۲-مشاهده وابستگی های آن
۳-مشاهده پکیج‌ها استفاده کننده آن
1- conda search PackName

2- conda repoquery depends PackName

3- conda repoquery whoneeds PackName
ادغام محیط شل با conda
conda init bash
پاک کردن پکیج‌های نا استفاده
conda clean
برای کانفیگ از قبیل محیط نصب، پکیج‌ها محدودیت دانلود و ...
conda config

conda config --help

موضوع جالب اینکه هنگام نصب پکیج تمام وابستگی‌ها رو اجرایی میکنه و نصب و حتی اگه نیاز به نسخه دیگری از پایتون باشه اون رو downgraid میکنه که منجر میشه تا حد ممکن براتون خطایی رخ نده و دردسر نکشید
📌 چند سخن در حوزه برنامه نویسی


#تلنگر
شاید من بی عیب نباشم
    قطعا تو هم نیستی ...
پس برو و به جای شماردن و مسخره  کردن
    عیب های من ...
به عیب های خودت رسیدگی کن ...
( مخصوص کسایی که فقط بلدن از بقیه سوتی بگیرن و هر هر بهش بخندن )

#تلنگر
صحبت کردن ساده است.
          اما ....
                   کدت رو نشون بده!

#تلنگر
هر کسی می‌تواند کدی بنویسد که یک کامپیوتر آن‌را درک کند. یک برنامه نویس خوب کدی را می‌نویسد که برای سایر همکارانش قابل درک باش

#فان
شازده کوچولو: چکار کنم که هیچ وقت کدم باگ نده ؟!
روباه: برو زبان HTML کار کن.

#فان
اگر درست کار نکرد نگران نباشید. اگر همه چیز درست بود، بیکار بودید.

#فان
تفوات جاوا و جاوا اسکریپت همان چیزی است که ماشین برای فرش است.

#فان
سنجش ​​پیشرفت برنامه نویسی با خطوط کد مانند اندازه گیری پیشرفت ساخت هواپیما بر اساس وزن آن است.

#تجربه
ناراضی ترین مشتریان شما بزرگترین منبع یادگیری شما هستند.

#تجربه
یک راه آسان و یک راه سخت وجود دارد. بخش سخت، یافتن راه آسان است.

#تجربه
برنامه نویسی مانند هرکار دیگری در ظاهر آسان، در باطن سخت است.

#آزار_دهنده
کم ارزش و بی ارزش نشان دادن کار شما با جملاتی مانند: این کار سختی نیست! کار خاصی انجام ندادید! یک پروژه ساده و آسان میخواهم(با سه صفحه توضیحات کارفرما)

#آزار_دهنده
یک پروژه ای دارم با این مشخصات( دو صفحه شرح پروژه ) با این مقدار بودجه ( 1/10 قیمت واقعی )

#آزار_دهنده
کسانی که پروژه ها را با 1/3 قیمت واقعی انجام می‌دهند.
🔰 12 نکته برای تبدیل شدن به یک برنامه‌نویس حرفه‌ای پایتون

💠 نکته 1: مخزن گیت‌هاب خودتان را بسازید

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

💠 نکته 2: کد‌های با خوانایی بالا بنویسید

اگرچه این امر بدیهی به نظر می‌رسد، اما به هر حال ذکر این نکته مهم است. هنگام نوشتن کدها، اطمینان حاصل کنید که دیگران می‌توانند آن‌را بخوانند و درک کنند. از این گذشته، اگر استخدام‌کنندگان کدهای شما در گیت‌هاب را مشاهده کنند و توانایی درک آن‌ها را داشته باشند، شانس استخدام‌تان دوچندان می‌شود. خوشبختانه، دستورالعمل‌هایی برای نوشتن کدهای خوانا وجود دارد که از مهم‌ترین آن‌ها به موارد زیر باید اشاره کرد:

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

💠 نکته 3: مستندات مناسب ایجاد کنید

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

💠 نکته 4: کدهای دیگران را با مهارتی که دارید مطالعه کنید 

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

💠 نکته 5: کتاب‌های منتشر شده در مورد پایتون را مطالعه کنید

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

💠 نکته 6: سطح مهارت‌های خود در مورد پایتون را ارتقا دهید

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

اگرچه یادگیری همه کتابخانه‌ها ایده‌آل است، اما با تسلط بر حداقل یک چند کتابخانه مهم پیشرفت قابل توجهی را تجربه می‌کنید. براساس آن‌چه در این کتابخانه‌ها یاد می‌گیرید، قادر به کدنویسی پروژه‌هایی هستید که امکان بارگذاری آن‌ها در مخازن گیت‌هاب برای استفاده عموم توسعه‌دهندگان فراهم می‌شود. رویکرد فوق ضمن آن‌که اجازه می‌دهد مخزن گیت‌هاب خود را بهبود بخشید به شما کمک می‌کند دانش جدید خود را حفظ کنید، زیرا بهترین راه برای به خاطر سپردن اطلاعات بیشتر، استفاده مستمر از آن‌ها در قالب پروژه است. 

💠 نکته 7: سعی کنید در زمینه هوش مصنوعی و یادگیری ماشین با پایتون به سطح بالایی از دانش برسید

یادگیری زبان به تنهایی کافی نیست. برای آن‌که ترکیب نحوی و دستورات آن‌را به خوبی کار ببرید به تمرین زیاد نیاز دارید. علاوه بر این باید به شکل کاربردی از آن استفاده کنید. برخی از مهم‌ترین کاربردهای پایتون در زمینه‌های هوش مصنوعی (AI) و یادگیری ماشین است. الگوریتم‌های مختلف مورد استفاده در این زمینه‌ها را بیاموزید و پروژه‌ها را با استفاده از آن‌ها پیاده‌سازی کنید. هر مهارتی که کسب می‌کنید را درون مخزن گیت‌هاب قرار دهید تا ارزش کاری خود به عنوان یک برنامه‌نویس پایتون را افزایش دهید.

ادامه مطلب ... 👇👇👇
💠 نکته 8: پروژه‌های مستقل را بپذیرید

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

💠 نکته 9: در پروژه‌های متن‌باز مشارکت کنید 

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

🔸ا Pipenv: گردش کار توسعه پایتون 
🔸ا Chatistics: اسکریپت‌های پایتون برای تجزیه و تحلیل ورود به Messenger، Hangouts و چت تلگرام در DataFrames
🔸ا Som-tcp: حل مسئله فروشنده دوره‌گرد با استفاده از نقشه‌های خودتنظیم
🔸ا Py2bpf: مبدل پایتون به bpf (بایت کد فیلتر بسته برکلی)

💠 نکته 10: یک بلاگ راه‌اندازی کنید و در مورد آن‌چه آموخته‌اید، بنویسید

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

💠 نکته 11: یک روزانه‌ای برای تمرین آماده کنید

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

💠 نکته 12: رزومه و مشخصات خود را در پورتال‌های شغلی به‌روز کنید

اطمینان حاصل کنید که اطلاعات شما در مورد پورتال‌های شغلی نظیر لینکدین، سایت‌های کاریابی ایرانی و خارجی نظیر Glassdoor و CareerBuilder به‌روز هستند. بنابراین بهتر است هر زمان اطلاعات کاربردی مرتبط با پایتون کسب کردید، این اطلاعات را درون رزومه خود قرار دهید تا استخدام‌کنندگان با جدیت بیشتری به رزومه شما توجه کنند. 
اقا اومدیم تست نویسیو تو جنگو شروع کنیم رسیدیم به داکیومنت خوندن و اینا
و خب یجایی ب این برخوردیم که خب الان من یه تست برای مدلم میخوام بنویسم با TestCase
و خب یه آبجکت به مدل بخوام اضافه کنم‌ تو تستم به کار ببرم یکم مشکله ! حالا مشکلش کجاست؟
شما فکر کن مدل من ۵۰ تا فیلد داره من باید بیام این ۵۰ تارو خودم مقدار دهی کنم 😐 خب چیکار کنم؟

یه کتابخونه هست‌ به اسم " model bakery" که براتون اینکارو انجام میده!


دستور نصب 👇

pip install model-bakery
____

from model_bakery import bakery
from .models import Todo

todo = bakery.make(Todo)
خب الان بهش گفتیم مدلمون  Todo هست و میاد خودش مقدار دهیش میکنه و یک‌ ابجکت  برامون میسازه !

میتونیم به مقادیر هم دسترسی پیدا کنیم مثال اگر فیلد name داخل مدل ما باشه
todo.name
میتونیم‌ اینطوری بهش دسترسی پیدا کنیم!


خب این گذشت حالا بعضی وقتا هست ما میخوایم یک فیلدی رو خودمون مقدار دهی کنیم و بقیه فیلد هارو رو بزاریم خودش مقدار دهی کنه ! چطوریه؟


from model_bakery import bakery
from .models import Todo

todo = bakery.make(Todo, name="Benyamin")

اینطوری فیلد دلخواه رو خودمون مقدار دهی کردیم و مابقیش رو خودش مقدار میده! #تمام


اینم بگم من‌وقتی با این‌ کتابخونه اشنا شدم و خب یکمی داخل تست نویسی داخل جنگو‌ جلو که رفتم  یه سری هم به مونگارد زدم‌ و‌ دوره اون رو شروع کردم‌  و داخل دوره تست نویسی مونگارد هم‌ دیدم‌  این رو توضیح داده :)

#تست_نویسی
#تست_نویسی_در_جنگو
#جنگو
یک موضوع کوچیک رو باهم بررسی کنیم

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

سوا ازینکه داکر مارو تحریم کرده بحث فیلترینگ هم گاها اذیت کننده میشه و موارد مربوط اذیت کننده میشه

راهکار بچه‌ها چیه راه اندازی فیلترشکن یا استفاده از سرویس شکن و 403 و docker.ir هستش که بازم دردسرهای خاص خود مثه پایین بودن سرعت این وسط رخ میده یا سردرگم کننده بودن اذیت شدن واسه کانفیگ‌ کردنشون

راهکار بهتر که همه موارد بالا رو هندل میکنه این هست که ایمیج‌ها رو از یک منبع داخلی بگیریم که اینجا ابرآروان گزینه بهتری به نظر میاد چرا؟؟؟

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

فقط کافیه به قبل از اسم ایمیجتون عبارت زیر رو اضافه کنید

docker.arvancloud.ir/
چندتا نمونه بهتون بگم

docker pull docker.arvancloud.ir/python:3.10

docker pull docker.arvancloud.ir/postgres:latest
حالا اگه ایمیج‌هاتون رو نگاه کنید اون هارو میبینید اگه بخوایم اسمشون تغییر بدیم هم دستور زیر رو بزنید

docker tag docker.arvancloud.ir/python:3.10 python:3.10
حالا اگه ایمیج‌هاتون رو نگاه کنید یک نسخه python:3.10 هم دارید
docker images
🖥 اعلان های لپ تاپ با پایتون


‼️این کد از ماژول‌های time و plyer.notification استفاده می‌کند. ماژول time برای کنترل زمان استفاده می‌شود و plyer.notification برای نمایش هشدارها استفاده می‌شود.

‼️در اینجا یک حلقه بی‌نهایت (while True) استفاده شده است تا به طور مداوم هشدارها را نمایش دهد. داخل حلقه، تابع notification.notify() فراخوانی شده است تا هشدار را نمایش دهد. سپس با استفاده از تابع time.sleep(3600)، برنامه به مدت یک ساعت (3600 ثانیه) منتظر می‌ماند و سپس دوباره هشدار را نمایش می‌دهد.

برای اجرای این کد، اطمینان حاصل کنید که پکیج plyer را نصب کرده‌اید. می‌توانید از مدیر بسته pip برای نصب آن استفاده کنید با اجرای دستور زیر:


pip install plyer
سپس کد را در یک فایل Python با پسوند .py ذخیره کنید و برنامه را اجرا کنید. برنامه شروع به نمایش هشدارها پس از گذشت یک ساعت می‌کند.

لطفاً توجه داشته باشید که برای استفاده از ماژول plyer، سیستم عامل شما باید از آن پشتیبانی کند و تنظیمات مربوط به نمایش هشدارها باید مجاز باشد.


#code
#python
🖥 کد ساخت دوربین امنیتی OpenCV Python :

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

🔹 ویدیوهای ضبط شده با فرمت mp4 و با نام‌های مختلف برای هر زمان ضبط شده‌اند.

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

#code
#python
🧑‍💻PythonDev🧑‍💻
🖥 کد ساخت دوربین امنیتی OpenCV Python : 🔹این کد یک برنامه است که دوربین را فعال می‌کند و تشخیص چهره و بدن انسان را در ویدیویی که توسط دوربین ضبط می‌شود، انجام می‌دهد. اگر تشخیص داده شود که چهره یا بدنی در ویدیو وجود دارد، برنامه شروع به ضبط ویدیو می‌کند.…
import cv2
import time
import datetime

cap = cv2.VideoCapture(0)

face_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
body_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + "haarcascade_fullbody.xml")

detection = False
detection_stopped_time = None
timer_started = False
SECONDS_TO_RECORD_AFTER_DETECTION = 5

frame_size = (int(cap.get(3)), int(cap.get(4)))
fourcc = cv2.VideoWriter_fourcc(*"mp4v")

while True:
    _, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    bodies = face_cascade.detectMultiScale(gray, 1.3, 5)

    if len(faces) + len(bodies) > 0:
        if detection:
            timer_started = False
        else:
            detection = True
            current_time = datetime.datetime.now().strftime("%d-%m-%Y-%H-%M-%S")
            out = cv2.VideoWriter(
                f"{current_time}.mp4", fourcc, 20, frame_size)
            print("Started Recording!")
    elif detection:
        if timer_started:
            if time.time() - detection_stopped_time >= SECONDS_TO_RECORD_AFTER_DETECTION:
                detection = False
                timer_started = False
                out.release()
                print('Stop Recording!')
        else:
            timer_started = True
            detection_stopped_time = time.time()

    if detection:
        out.write(frame)

    # for (x, y, width, height) in faces:
    #    cv2.rectangle(frame, (x, y), (x + width, y + height), (255, 0, 0), 3)

    cv2.imshow("Camera", frame)

    if cv2.waitKey(1) == ord('q'):
        out.release()
        cap.release()
        break

cv2.destroyAllWindows()

#@Syntax_fa
Numpy Cheat Sheet0.pdf
3.2 MB
برگه تقلب شماره ۱ پایتون ، کتابخانه Numpy

Cheat Sheet 1 : Numpy


#کتابخانه #cheat_sheet #pdf


#python
♦️ لیست توابع و نوع های داخلی پایتون.

🔻A
abs() - aiter() - all() - any() - anext() - ascii()

🔹B
bin() - bool() - breakpoint() - bytearray() - bytes()

🔻C
callable() - chr() - classmethod() - compile() - complex()

🔹D
delattr() - dict() - dir() - divmod()

🔻E
enumerate()- eval() - exec()

🔹F
filter() - float() - format() - frozenset()

🔻G
getattr() - globals()

🔹H
hasattr() - hash() - help() - hex()

🔻I
id() - input() - int() - isinstance() - issubclass() - iter()

🔹L
len() - list() - locals()

🔻M
map()- max()- memoryview() - min()

🔹N
next()

🔻O
object() - oct() - open() - ord()

🔹P
pow() - print() - property()

🔻R
range() - repr() - reversed() - round()

🔹S
set() - setattr() - slice() - sorted() - staticmethod() - str() - sum() - super()

🔻T
tuple() - type()

🔹V
vars()

🔻Z
zip()

🔹_
import()
توی گیت، objectها یک سری موجودیت‌های پایه‌ای هستن که میتونن دیتاهای مختلف رو توی repository ذخیره کنن. مثلا:
blob object, tree object, commit object . . .

برای اینکه بهتر بدونیم گیت چطوری داره اون پشت کار میکنه، توی این مقاله درباره‌ی git objects صحبت میکنیم.

https://medium.com/@AG1380/mastering-git-git-objects-cc4fbf0a9bcd
کتاب هایی برای پایتون:

1. "Python Crash Course" نوشته Eric Matthes: این کتاب برای مبتدیان بسیار مناسب است و به شما اصول پایه و مفاهیم اساسی پایتون را آموزش می‌دهد. همچنین، با استفاده از پروژه‌های عملی، شما را با کاربردهای واقعی زبان آشنا می‌کند.

2. "Python for Data Analysis" نوشته Wes McKinney: اگر به تجزیه و تحلیل داده‌ها علاقه‌مند هستید، این کتاب برای شما مناسب است. در این کتاب، شما را با استفاده از کتابخانه‌های محبوب مانند NumPy و Pandas در پایتون آشنا می‌کند.

3. "Automate the Boring Stuff with Python" نوشته Al Sweigart: این کتاب به شما نشان می‌دهد که چگونه با استفاده از پایتون کارهای روزمره و خسته کننده را به صورت خودکار انجام دهید. این کتاب مفید برای افرادی است که می‌خواهند پایتون را برای اتوماسیون و خودکارسازی استفاده کنند.

4. "Fluent Python" نوشته Luciano Ramalho: این کتاب برای افرادی که قصد تسلط بیشتر بر روی زبان پایتون را دارند مناسب است. در این کتاب، مفاهیم پیشرفته‌تری مانند توابع فراخوانی، توابع مولد، مدیریت استثناها و غیره را مورد بررسی قرار می‌دهد.

5. "Python Cookbook" نوشته David Beazley و Brian K. Jones: این کتاب به شما تکنیک‌ها و الگوهای مختلف برنامه‌نویسی در پایتون را آموزش می‌دهد. با استفاده از مثال‌های عملی، شما را با روش‌های بهینه‌تر برنامه‌نویسی در پایتون آشنا می‌کند.
کتابخانه اوپن‌سورس پایتون برای تولید طرح‌واره‌هایی با هوش مصنوعی و در عین حال نزدیک به  واقعیت که در پروژه های مختلف می‌تونه به کارتون بیاد.

https://github.com/nicolas-hbt/pygraft
#تجربه

فریمورک برای یادگیری core python نیست،
سورس کد خوندن برای بهتر شدن هست نه یادگیری.


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

نشسته بودم سفارشم آماده بشه (قهوه نخوردم، چون dark roast داشت فقط) دیدم توی فضایی جداگانه کنار من (مثل بخش vip) یکنفر درحال آموزش دادن
generator, yield, yield from
هست، البته برای دیپ‌ لرنینگ و از روی فریمورک، متوجه شدم خیلی داشت اشتباه توضیح می‌داد.

بعد از چند دقیقه که حواسم به کلاس اونها بود و مدرس حواسش به من، کلاس‌ ۵ دقیقه استراحت داد و متوجه شدم از اون ۱۲-۱۵ نفر ۳-۴ نفر عضو همین کانال هستند و مدرس و باقی اعضا همه رفیق هستند که دارند تلاش می‌کنند باهم یاد بگیرند.

خداییش خیلی خیلی لذت بردم (کامیونیتی اینجوری لذت بخش هست) و توی این بحث و اینکه چطوری data loading, batching, ... توی فریمورک‌های هوش مصنوعی کار‌ می‌کنه مونده بودند و اشتباه این بود که بجای درک مطالب اصلی و عملکردشون سعی داشتند از framework این موضوع رو یاد بگیرند.

چندتاشون سوال پرسیدند و براشون توضیح دادم، بعد دعوت کردن این مبحث رو توی کلاس آموزش بدم.
منم که منتظر تماس بودم، شروع کردم با پایتون کد زدن و آموزش دادن و تأکید کردم این چیزا رو نباید با فریمورک یادگرفت هدف هرچی که باشه

ولی واقعاً دیدن همچین کامیونیتی‌هایی لذت بسیار زیادی داره، یادگیری رایگان و دردسترس برای همه.
@MachineLearning_ir - ML in Production.pdf
6.8 MB
📕 جزوه آموزشی MLOps
🏛 دانشگاه صنعتی شریف
📑 در 122 صفحه!

👨🏻‍💻 سید عباس حسینی استادیار پژوهشکده AICT دانشگاه شریف، جزوه آموزش MLOps رو در 122 صفحه منتشر کرد.

هدف اصلی MLOps، ایجاد یه جریان کاری یکپارچه و مدیریت مداوم برای مدل‌های یادگیری ماشین در محیط‌های تولیدی است تا عملکرد بهینه و پایداری را به همراه داشته باشیم.💯
با سلام و وقت بخیر با توجه به اینکه بنده برای یک ارائه و سمینار در حوزه تکنولوژی دارم در صورتی که علاقه مند به یادگیری برنامه نویسی هستید یا در حوزه های برنامه نویسی فعالیت دارید در این پرسشنامه برای ارزیابی شرکت کنید موفق باشید https://survey.porsline.ir/s/KW3s395M
نشستم با Rust یک تابع محاسباتی رو که جزو فرمول‌های شرکت بود پیاده‌سازی کردم، و آوردمش توی پایتون؛

زمان بندی‌هاش بسیار جالب شد،
توی پایتون هموار ه حدود ۷ دقیقه زمان می‌بره
از numpy که استفاده می‌کنم، به ۱ دقیقه هم می‌رسید
و پیاده‌سازی توی Rust؛ کمتر از ۵ ثانیه شد.


حتی اگر تفاوت محاسبات بین Rust, Python رو درک کنم موضوع و اختلاف سرعت بالای بین Numpy, Rust هنوز برای خودم عجیب هست.

دلیلش رو نمی‌دونم ولی حتماً دنبالش می‌گردم.
به بهانه معرفی فریمورک <جای‌خالی> با ۳ برابر سرعت در پاسخگویی نسبت به FastAPI و البته باهدف battery included بودن مثل django

وقتی صحبت از بکند توی پایتون میشه تا همین چندسال قبل تنها گزینه خوب فقط و فقط django بود و مرسی دولوپرهاش؛ تو زمانی که همه غر میزدند پایتون کند هست و نباید و ... (تو ایرانم ازین حرفا زیاد بود) قشنگ یادمه ی بنده خدایی اسم نمیبرم ولی معروفم هست توی یکی از دانشگاها پنل سخنرانی داشت.
گفت که پایتون فقط یک جو هست و خیلی زود هم تموم می‌شه؛ بعد هم ادعا کرد به همین دلیل مطالبش رو نیاورده و ترجیح میده راجب مطالب مهمتر صحبت کنه (سخنرانی به شوخی گذشت و تنها کسی که اعتراض کرد توی سالن ۳۰۰-۴۰۰ نفری من بودم) الان شنیدم همون بنده خدا داره از پایتون نون میخوره و دوره هم میذاره.

بگذریم اومد جلوتر و async معرفی شد؛ هوش مصنوعی از فقط ریسرچ بودن داشت خارج میشد و تجریه دپلوی مهم شد.
دپلوی رو django انقدر سخت و غیر بهینه بود که عملا خیلی از تیم‌هایی که پروژه‌هاشون مشتری کافی رو داشت مجبور به توسعه بکند توی زبان‌های برنامه نویسی دیگه بودند؛ خیلی از بچه ها رفتند سراغ C, C++ , Go-lang و ...
حتی جوگیری زیاد شد مدل هارو سمت وب و موبایل و ... هم بردند که صحبتی نیست.

یادی کنم از شب زنده داری‌ها و دپلوی کدها و مدل‌ها با Majid A.M (آیدی نمیزارم ولی احتمالا هرکی django کار می‌کنه میشناسه) عزیز و حجم اپتیمایز‌های بالا جزو اولین نفرات و تیم‌هایی بودیم که کل مدل هوش مصنوعی و اپتیمایز و وب و ... همه روی پایتون بود و البته دسترسی و درخواست رایگان (این برای زمانی بود که همه میرفتن سراغ C, ... برای دپلوی و کسی باورش نمیشد بشه مدل‌های سنگین رو روی سرور بیاری و اون تعداد ریکوست رو با پایتون جواب بده) اون زمان همه فکر میکردند روی سرورهای خفن و ...هستیم ولی این موضوع رو اولین بار هست دارم اعلام می‌کنم؛
۲ نسخه اول مدل‌های پردازش تصویرمون روی کلاستر رزپبری پای و نسخه آخر روی لپ‌تاپ شخصی بنده بود.

ازین دوران گذشتیم flask با ایده‌های جدید اومد و خوبیش این بود که دیگه به اندازه django سنگین نبود (برای تست‌های کوچیک خیلی جواب بود ولی بازم همون مشکلات رو داشت)
البته اضافه کنم سرویس‌هایی مثل Celery, ... خیلی از مشکلات رو توی django حل می‌کردند

بعد از این زمان FastAPI معرفی شد؛ روی همون کامیت‌های اولیه که عمومی شد چون از بچه‌ها و همکارای بکندم توی شرکت‌های سیلیکون‌ولی و ... بسیار راجبش شنیدم به خیلی از دوستان بکند دولوپرم پیشنهاد کردم که وقتش هست یاد بگیرند و بهش کد donate کنند (کاش خودم اینکارو میکردم) خیلی هم مسخره میکردند. همون Majid A.M جزوشون بود.

به لطف همه‌ی دولوپرهای پروژه‌های قبلی django - flask - fastapi حالا خیلی‌ها باور دارند پایتون می‌تونه توی پروداکشن و برای پروژه‌های بزرگ استفاده بشه؛ خیلی‌ها قبول دارند که میشه با پایتون کد زد و از پکیج‌هایی استفاده کرد که سرعت پردازش بسیار بیشتر بشه .
دولوپرهای پروژه‌های قبلی نشون دادند که توسعه پکیج‌هایی با ایده‌هایی حتی کمی بهتر بسیار ارزش داره و جامعه پایتون همیشه قدردان این زحمات خواهد بود.

تا اینجا که حالا community زبانی مثل Rust برای توسعه یک web framework با سرعت بیشتر و البته به راحتی موارد قبلی برای Python وارد شده و پروژه Robyn رو به حد خوبی رسونده بطوری که امروز توی چندین جلسه مختلف با دوستان و همکاران بسیار درمورد این پروژه شنیدم.
توی مطالبی که داشتم میخوندم و بنچمارک‌هایی که از باقی شنیدم اکثرا اشاره می‌کنند که به راحتی سرعتی ۳ برابر fastapi رو ارائه میده.
از نظر کدهم شخصا یک نگاهی انداختم به همون سادگی هست؛ خلاصه که شمارو نمی‌دونم اما شخصا فکر کردم باید قدردان زحمات تیم‌های توسعه django, flask, fastapi و برو بچه هایی که توی دوران سخنرانی ضد سرعت و ... پایتون با این زبان برنامه نویسی ادامه دادند باشم.