TECH STASH – Telegram
TECH STASH
212 subscribers
114 photos
5 videos
15 files
253 links
اینجا هر چی رو که یاد میگیرم، به اشتراک میزارم...
هوش مصنوعی، لینوکس، اوپن سورس، برنامه نویسی و...

Admin: @D3F4U1T_ARS
Download Telegram
این playlist از object detection خیلی خوبه... کلش رو دیدم.

تو ویدیو اول از Intersection Over Union (IoU) شروع میکنه که متریکی برای دقت bounding box هست و ازش داخل loss function امون استفاده میکنیم.

ویدیو دوم میرسه به Non-Max Suppression که برای حذف bounding box های تکراری یا بیخود استفاده میشه.

ویدیو سوم به Mean Average Precision (mAP) میپردازه که به عنوان متریک برای ارزیابی دقتمون استفاده میکنیم.

و در نهایت تو دو ویدیو آخر Yolov1 و Yolov3 پیاده سازی میشه.

کلا پروژه خیلی پیچیده ای بود (برای اولین بار بود که با پیاده سازی loss function و dataset پیچیده مواجه شدم). ولی خب خیلی لذت بخش بود.

Object Detection Series (Deep Learning) - Aladdin Persson
ipympl: Interactive visualization for matplotlib

اگر با MatLab کار کرده باشید میدونید که نمایش نمودارش به صورت تعاملی هست.
داخل matplotlib هم چنین قابلیتی هست و میتونه واستون مفید باشه. مخصوصا وقتی که نمودارتون سه بعدی باشه.

یکی از مثال های نمودار سه بعدی میتونه PCA یا T-SNE باشه که داخلش کاهش بعد به ۳ بعد یا ۲ بعد انجام میدید.

داکیومنتش و صفحه پکیجش اینجاست.
https://matplotlib.org/ipympl/index.html
https://pypi.org/project/ipympl/

خلاصه وار بخوام بگم. اول notebook اتون باید magic function
%matplotlib widget
یا
%matplotlib ipympl
رو ران کنید.

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

بعد از مدت ها که دوباره امتحان کردم مشخص شد مشکل از کجاست.
واسه هر cell شما باید حتما حتما یه figure جدید درست کنید.

plt.figure(figsize=(10, 7))

تو مثال چند نمودار subplots خودش یه figure درست میکنه سر همین قبلش نیاز نیست انجام بدید.

اگر اینکارو انجام ندید میبینید که figure قبلی که استفاده میکردید تو cell جدیدتون استفاده میشه و خلاصه نمودار های قبلی قاطی نموداری که رسم میکنید میشن.
Jupyter (Lab) Extensions:

محیط jupyter یا jupyterlab یه محیط خیلی خوبی هست برای کار با notebook ها.
ولی به صورت پیشفرض یکسری مشکلات داره.
مثل autocomplete خیلی ابتدایی، نبود code formatter، نبود یک ابزار برای بررسی تغییراتی که روی نوت بوک ها انجام میدیم (diff) و نداشتن یه تم دارک خوب.

ولی خوشبختانه یکسری extension هایی برای محیط jupyter هستن که خیلی میتونن کارو راه بندازن.
موارد زیر افزونه هایی هستن که در حال حاضر استفاده میکنم.

1. jupyterlab-lsp

تو لیستم این یکی از مهم تریناست. از اونجایی که من از autocomplete و قابلیت های lsp خیلی استفاده میکنم (مثل docstring خوندن) باید حتما lsp داشته باشم.
قابلیت خوبی که داره اینه که با lsp های مختلف سازگار هست و میتونید نصب کنید و استفاده کنید. (فکر کنم برای بقیه زبان ها هم پشتیبانی داره)

pip install jupyterlab-lsp

2. jupyterlab-code-formatter

من کد هامو با black فرمت میکنم. و همین خوانایی کدم رو بالا میبره.
همینطور از isort هم پشتیبانی میکنه و کل هر cell رو با هر دو فرمت میکنه.
پیشنهاد میکنم همیشه ازش استفاده کنید.

pip install jupyterlab-code-formatter

یادتون نره که black و isort رو نصب داشته باشید وگرنه کار نمیکنه و ارور میده.

3. jupyterlab-git

افزونه git برای jupyter. در کنارش nbdime هم نصب میشه که ابزار diff (یافتن تغییرات) برای notebook ها هست.

pip install jupyterlab-git

4. jupyterlab-night

تم GitHub هم خیلی خوبه. البته که من همیشه تم tokyo-night رو بیشتر ترجیح میدم ولی خب پیداش نکردم و دیگه سراغش رو نگرفتم.
ولی خب این تم دارک خوبی هست که از تم GitHub dark الهام گرفتن.

pip install jupyterlab-night

یه دونه جا مونده که با پست بعدی در ارتباط هست. منتظر باشید. ;)
Forwarded from DeepMind AI Expert (Farzad 🦅)
دوتا کورس عالی از دانشگاه برکلی راجع به ایجنت ها ارائه شده. دوره اول فاندیمنتال و مباحث اصلی را توضیح میده و دوره دوم دوره پیشرفته راجع به ایجنت ها هست. تمام اسلایدها و ویدیوها و مقالات هم موجوده. و موضوعات مهم و اساسی را پوشش میده.

▪️ CS294/194-196 Large Language Model Agents
▪️ CS294/194-280
Advanced Large Language Model Agents


#منابع #کلاس_آموزشی #پردازش_زبان_طبیعی

🔸 مطالب بیشتر 👇👇

@AI_DeepMind
🔸 @AI_Person
Forwarded from Pytopia News (Ali Hejazi)
🔈 بچه‌ها به خاطر شرایط جنگی حال حاضر کورس‌های پایتوپیا روی سایت رایگان شد.
Please open Telegram to view this post
VIEW IN TELEGRAM
Pytopia News
🔈 بچه‌ها به خاطر شرایط جنگی حال حاضر کورس‌های پایتوپیا روی سایت رایگان شد.
علی حجازی مدرس pytopia.ai کورس هاشو به خاطر شرایط جنگی رایگان کرده.
بعد از مدتی که بررسی کردم فهمیدم که کورس هاش خیلی با کیفیت هستن و واقعا ارزشش رو دارن.

همه کورس ها داخل وبسایت رایگان هست ولی همشون کامل نیستن. مثل کورس Design Pattern ولی اونایی که کامل هستن خیلی خوب و کامل ان.

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

Machine Learning (2024)
Data Processing (Numpy / Pandas)
Data Visualization
Python Programming (2023)

پس نوشت: دو هفته پیش رایگان کرده و فعلا رایگان هست...
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
ipywidgets

این ابزار خیلی بازی رو عوض کرد برای من.
قبلا تو پستی راجب ipympl صحبت کردم که میاد و نمودار هارو تعاملی یا interactive میکنه.
حالا ipywidgets میاد و یه سطح هم فراتر میبره.

چطور؟ با اضافه کردن ویجت هایی داخل Jupyter مثل Button یا Slider ها که قابلیت تغییر رو دارن.
و اینا رو میشه واسه تنظیم یه سری پارامتر ها و plot لحظه ای (زنده) از نتایج استفاده کرد.

میتونم تصور کنم که بشه تو Machine Learning هم استفاده کرد. مثلا تغییر دادن k تو KNN با یه IntSlider و مشاهده plot در همون لحظه.
(قطعا یه cell گنده میشه ولی خب خیلی interactive تر.)

تو یکی از پست هام هم راجب extension های JupyterLab صحبت کردم و یکی رو جا انداختم که همین هست.

و حال چند نکته:

اینو بهتره که در کنار ipympl استفاده کنید. در غیراینصورت وقتی آپدیت رخ میده انگار تصویر حذف و دوباره plot میشه که خیلی روون از آب در نمیاد.

و تو تابع update اتون که میاد و دوباره plot میکنه قبل از هر چیزی ()fig.clf بزنید تا figure اتون رو پاک کنید تا ترسیم جدید با ترسیم های قبلی قاطی نشه.
🔥1
چطور SQLite ده برابر سریع تر شد.

داشتم این query ای داخل SQLite از لحاظ بهینگی بررسی میکردم.

EXPLAIN QUERY PLAN
SELECT "noscript" FROM "movies" WHERE "id" IN (
SELECT "movie_id" FROM "stars" WHERE "person_id" = (
SELECT "id" FROM "people" WHERE "name" = 'Tom Hanks'
)
);


خروجیش این بود.
QUERY PLAN
|--SEARCH movies USING INTEGER PRIMARY KEY (rowid=?)
`--LIST SUBQUERY 2
|--SCAN stars
|--SCALAR SUBQUERY 1
| `--SCAN people
`--CREATE BLOOM FILTER


ولی خط آخرش CREATE BLOOM FILTER به چشمم خورد.
اینکه SQLite داره همون لحظه یه Bloom Filter میسازه که Query رو سریع کنه نشون میده که چقدر میتونه این data structure بدرد جستجو های سریع بخوره.

حالا bloom filter چی هست.

یه نوع data structure که با استفاده از تابع hash و یه آرایه از جنس boolean و از سایزی که ما تعیین میکنیم کار میکنه. فضای آرایه باید به اندازه کافی بزرگ باشه که بتونه تعداد خوبی دیتا رو به خونه های منحصر به فرد map کنه ولی به اندازه کافی هم کوچیک باشه که از لحاظ فضا بهینه باشه.

حال همه دیتا های اون مجموعه ای که میخوایم واسش bloom filter رو درست کنیم رو hash میکنیم و روی خونه map شده به اون hash اگر 0 بود 1 میکنیم و اگر 1 بود دست نمیزنیم.

این data structure در واقع false negative نداره. هر وقت میگه این دیتا تو این مجموعه نیست. یعنی هیچ احتمالی وجود نداره تو این مجموعه باشه. بنابراین زمانی که صرف جستجو میشد رو به کلی حذف میکنه.

بسته به استفاده و مسئله میتونه مفید باشه. ولی خب جالب بود که داخل دیتابیس هم همچنین چیزی بود.

این blog post توضیح میده که چطور bloom filter میتونه SQLite رو تا x10 برابر سریع تر کنه.
Mastering Python Design Patterns - 3rd Edition

این یکی از بهترین کتاب های Design Pattern برای پایتون هست.

اول از اصول پایه ای شروع میکنه. چهار تا قانون معروف:
1. انکپسوله کن چیزایی که متفاوت هستن.
2. ترکیب رو بر ارث بری ترجیح بده.
3. روی interface ها برنامه نویسی کن نه پیاده سازی ها. (معادل abstract base classes)
4. وابستگی کم (Loose Coupling)


بعد میرسه به SOLID که احتمالا خیلی هاتون شنیده باشید.
بعدش میره سراغ Gang of Four که دیزاین پترن های مرسومی هستن که استفاده میشن.

و در نهایت فراتر از Gang of Four که دیگه خیلی جالبه.

من یکسری از دیزاین پترن های Gang of four رو تو آموزش neetcode دیدم ولی آموزش کاملی نبود اگر بخوام رو راست باشم. به نظرم میتونست بیشتر میتونست کاور کنه.

خود کانال ArjanCodes هم خیلی آموزش راجب دیزاین پترن داره که اگر علاقه به دنبال کردن مبحث design pattern دارید خیلی بهتون پیشنهاد میدم سرچ کنید و ببینید.
Mastering Python Design Patterns - Third Edition.pdf
15.2 MB
Mastering Python Design Patterns - 3rd Edition
SQLite quirks (WTF Sqlite)

تو این پست راجب یکسری رفتار های عجیب و بعضا پرسش انگیز SQLite توضیح میدم.
از قبیل این رفتار ها میشه به چند مورد اشاره کرد.

1. No ALTER TABLE MODIFY COLUMN support

تغییر تایپ یک ستون داخل SQLite میسر نیست برعکس PostgreSQL و MySQL. چرا اینطوریه؟ چون SQLite میاد schema اش رو داخل یه فایل متنی ذخیره میکنه و نه یه جدول یا ساختمان داده ساختار یافته. سر همین پیاده سازی این قابلیت رو دشوار میکنه.

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

2. PRAGMA foreign_keys = ON;

قید کلید خارجی تو SQLite به صورت پیش فرض چک نمیشه. دلیلش هم به خاطر اینه که SQLite قبل از نسخه 3.6.19 قابلیت چک کردن قید کلید خارجی رو نداشت. و نسخه های بعد اضافه شد.

با این وجود با میتونید با دستور بالا فعالش کنید.
ولی حواستون باشه که باید دستور بالا رو به ازای هر نشست session ای به دیتابیس بزنید.
این قید ها شامل ON DELETE و ON UPDATE هم میشه.
نکات بیشتر راجب رفتار کلید های خارجی تو این لینک هست.

3. .mode box

خروجی SQLite وقتی از ابزار خط فرمانیش استفاده میکنید خیلی شلخته هست. انگار دارید فایل csv میخونید. با این تفاوت که جاش | وجود داره. ولی وقتی mode رو به box تغییر بدید میاد و به صورت جدولی و منظم مینویسه.

و تعداد خیلی بیشتری که میتونید اینجا ببینید.
خلاصه اگر با SQLite کار میکنید. حتما راجب تفاوت هاش اطلاعات کسب کنید وگرنه دردسر سازه.
ORM or Raw SQL (part 1)


یکی از سوالاتی که پیش میاد اینه که آیا بهتره اول SQL یاد بگیریم یا ORM.
جواب من به این پرسش اینه که باید حتما حتما SQL یاد بگیرید.

چرا؟

1. وقتی که از ORM استفاده میکنید. پشت صحنه هم داره SQL query ساخته میشه و اگر توانایی آنالیز و بررسی کوئری رو نداشته باشید قطعا با مشکل برمیخورید. بهینه سازی کوئری ها حتما نیازمند دانش SQL هست.

2. کار کردن با ORM بدون دانش SQL مثل کار کردن با جعبه سیاه هست. شما نمیدونید که چطور کار میکنه سر همین استفاده شما محدود به ابزار ORM هست. جدا از اینکه هر دیتابیسی یه سری قابلیت های منحصر به فردی داره که دسترسیش تنها با یادگیری SQL میسر هست.


معمولا دوستانی که فقط با ORM کار کردن کمتر راجب قابلیت های پیشرفته دیتابیس ها، مثل
Trigger, View, Stored Procedure, User-Defined Function, Common Table Expression
و ... میدونن.


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


پس لطفا اول SQL یاد بگیرید و بعدش از ORM استفاده کنید.
بک اند رو با فیل حمل کن:

چرا PostgreSQL فقط دیتابیس نیست

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

همش هم برمیگرده به امکاناتی که در طول سال ها اضافه کرده. که میشه به موارد زیر اشاره کرد:


1. شی گرایی رابطه ای (Object Relational) بودنش امکاناتی مثل ارث بری از جداول، دیتا تایپ های تعریف شده و کلی قابلیت های توسعه پذیری رو اضافه کرده.

2. ساپورت native از JSON و list ها درون ستون.
ستون ها نه تنها میتونن لیستی از آبجکت ذخیره کنن. بلکه میتونن JSON هم ذخیره کنن و قابلیت query برای چنین اطلاعاتی وجود داره. از اونجایی که از JSONB استفاده میشه query ها JSON خیلی سریع هستن.

3. میتونید توابعی بسازید که از پردازش اطلاعات جداول رو با زبان های مختلف انجام بدن که واقعا معرکه هست. این قابلیت همه چیزو عوض میکنه. مثلا میتونید از pandas داخل دیتابیس استفاده کنید.
پشتیبانی از زبان های مختلفی وجود داره که اینجا میتونید ببینید.

4. با extension حتی فراتر از یه دیتابیس پیشرفته میره و تبدیل به کل استک backend اتون میشه.

pgmq (Message queue)
pg_cron + hstore (redis)
postgREST (REST API)
pg_graphql (GraphQL API)
NOTIFY + LISTEN = (Pub/Sub architecture)
Apache AGE (Graph Database)
TimescaleDB (Time Series Database)
Full-Text Search (Elastic Search)
pgml (LLM and Chatbots)
omnigres (Everything else)
pgvector (Vector similarity search)

این دیتابیس اصلا کم نمیاره.
این همه قابلیت داخل یه ORM جا نمیشه.
1
سلام دوستان.
بعد از مدت ها درگیری و کار امروز برگشتم و قراره فعالیت رو ادامه بدیم.
ممنون که صبور بودید و همراهم بودید.
محتوا های جالبی در راه هست.

و خب حالا خلاصه بگم که چه چیزایی تغییر کرده.
در حال حاضر روی توزیع Arch Linux هستم و ویندوز 11 هم dualboot کردم برای کار های ویندوزی.
گرچه ترجیح میدم تو آینده یه ماشین مجازی ویندوز 11 روی لینوکس بسازم و workflow ام رو روش پیاده کنم.

یه سری محتوا هایی راجب اینکه چطوری روی ویندوز 11 workflow ام رو تنظیم کردم واستون میفرستم.
میتونه حاوی نکات جدیدی باشه که خبر نداشته باشید.

خودم نه طرفدار ویندوز هستم و نه تعصب روی لینوکس دارم.
فکر میکنم اگر محتوا هام مقداری زندگی روی ویندوز رو قابل تحمل کنه به هدفم رسیدم.
1🔥1
یه سری نکات راجب نصب ویندوز:

1. بهترین منبع واسه دانلود ویندوز یا آفیس از سایت خودشون هست یا از massgrave که کرک open-source رو برای ویندوز و آفیس عرضه میکنه. برای تاییدش هم میتونید از روش هایی که داخل سایتش ذکر شده استفاده کنید. این وبسایت ها هیچ ارتباطی با massgrave ندارن سر همین میتونید مطمئن باشید.

2. یکی از دنگ و فنگ های نصب نیاز به لاگین کردن به اکانت مایکروسافت هست که میتونید به روشی دورش بزنید. نمیدونم تا کی این روش های دور زدن میمونه یا سخت تر میشه. ولی این سیاست مایکروسافت به شدت افتضاح هست.
3🔥1
یه سری نکات بعد از نصب ویندوز:

1. ویندوز رو کامل آپدیت کنید. درایور هارو اجازه بدید خودش نصب کنه تا خودتون دانلود کنید. در صورتی که درایور ویندوز مشکل داره یا وجود نداره خودتون دانلود و نصب کنید. دیگه 10 سال پیش نیست که بخواید درایور دانلود کنید.

تو لینوکس همه چیز از قبل آمادست. اگر هم نبود میتونید با مدیریت بسته نصبش کنید.

2. نرم افزار های خودتون رو از MS Store, winget یا scoop نصب کنید. هر نرم افزار رایگان و اوپن سورسی که بخوام تو اینجا هست. بعضی وقتا نسخه MS Store مشکلاتی ممکنه داشته باشه که اون موقع نسخه winget اش رو میتونید نصب کنید.

خود MS Store اپ استور مایکروسافت هست. winget و scoop برنامه های مدیریت بسته تحت خط فرمان ان که خیلی خوبن و ازشون استفاده میکنم. choco هم خوبه ولی دو تای اولی رو بیشتر ترجیح میدم.

روش مدیریت نرم افزار من داخل ویندوز مثل لینوکس هست. چون لینوکس خوب کارو انجام داده. آپدیت میشه و سهولت زیادی داره و میشه اتوماسیونش کرد.

3. ویندوز اجازه نمیده آپدیت اتوماتیک رو غیر فعال کنید. کلی هم امکانات جاسوسی هست که مایکروسافت به صورت پیش فرض فعال کرده که میتونید غیر فعال کنید. برای همه اینا میتونید از winutil استفاده کنید.

جدا از اون خود winutil دسترسی به تنظیمات و فیچر های خوبی میده که میتونید فعال یا غیر فعال کنید. مثل تنظیم کردن تایم سیستم به UTC که وقتی ویندوز رو با لینوکس dualboot میکنید تایم سیستمتون به هم نخوره.

4. یکی از نرم افزار های خوبی که من واقعا عاشقش شدم UniGetUI هست که یه interface برای پکیج منیجر های زیادی هست. تو همه سیستم ها اینو نصب خواهم داشت و تو آپدیت نگه داشتن برنامه ها خیلی کمک میکنه.

5. میدونستید که KDE داخل ویندوز هم برنامه هاشو عرضه کرده. یه سری برنامه هاش تو MS Store هست.
من خودم به شخصه از KDE Connect, Okular, Filelight و Kate استفاده میکنم.

- از KDE Connect برای اشتراک clipboard. البته که مقداری داخل ویندوز محدود تره نسبت به لینوکس.
- از Okular به عنوان PDF Reader که خیلی خوبه.
- از Filelight به عنوان برنامه مدیریت فضا دیسک. جایگزین خوبی برای WinDirStat هست.
- از Kate هم برای قابلیت RTL فارسیش برای آماده کردن همین متن استفاده میکنم.

خلاصه KDE و اکوسیستمش برنامه های فوق العاده ای روی لینوکس داره. این تازه بخش کوچکی از برنامه هاش هست.
3🔥1
TECH STASH
یه سری نکات راجب نصب ویندوز: 1. بهترین منبع واسه دانلود ویندوز یا آفیس از سایت خودشون هست یا از massgrave که کرک open-source رو برای ویندوز و آفیس عرضه میکنه. برای تاییدش هم میتونید از روش هایی که داخل سایتش ذکر شده استفاده کنید. این وبسایت ها هیچ ارتباطی…
نسخه های Enterprise یا یه سری نسخه هایی عجیبی که مایکروسافت واسه مشتری های خاصی قرار داده تو وبسایتش رایگان و برای عموم قابل دسترس نیست.

ولی massgrave آپدیت شدش رو در دسترس عموم گذاشته که میتونید صحت سنجی کنید.
1🔥1