آموزش ویدیویی جاوا اسکریپت، Node.js ، React ، jQuery ، Vue و ...
1.61K subscribers
155 photos
71 videos
121 files
1.85K links
Download Telegram
🔵 نکته یادگیری ماشین

حالا بریم سراغ یه مدل یادگیری ماشین که درست مثل خودمون، با پرسیدن سؤال‌های ساده تصمیم‌گیری می‌کنه! 🌳

درخت تصمیم (Decision Tree) 🤔

تصور کن می‌خوای تصمیم بگیری که امروز عصر چه کاری انجام بدی. ذهنت به صورت خودکار یک فرآیند منطقی رو طی می‌کنه:

آیا هوا آفتابیه؟ ☀️

بله: آیا وقت آزاد داری؟

بله: پس بریم بیرون قدم بزنیم!

خیر: پس تو خونه کتاب بخون.

خیر: آیا یه فیلم خوب توی تلویزیون پخش می‌شه؟

بله: پس فیلم ببین.

خیر: پس یه کتاب بخون.

یک درخت تصمیم (Decision Tree) دقیقاً همین‌طور کار می‌کنه. این مدل یک سری سؤال ساده رو در یک ساختار درختی می‌پرسه تا به یک نتیجه نهایی برسه.

اجزای یک درخت تصمیم:

ریشه (Root): اولین سؤالی که پرسیده می‌شه. (مثلاً: آیا هوا آفتابیه؟)

گره‌ها (Nodes): سؤال‌های میانی که مدل در طول مسیر می‌پرسه. (مثلاً: آیا وقت آزاد داری؟)

برگ‌ها (Leaves): پاسخ‌های نهایی یا پیش‌بینی‌های مدل. (مثلاً: برو قدم بزن، فیلم ببین).

چرا از درخت تصمیم استفاده می‌کنیم؟

ساده و قابل فهم: بر خلاف مدل‌های پیچیده‌ای مثل شبکه‌های عصبی، فرآیند تصمیم‌گیری یک درخت تصمیم کاملاً شفاف و قابل توضیحه. به همین دلیل به این مدل‌ها مدل جعبه سفید (White Box Model) می‌گن.

بدون نیاز به آماده‌سازی پیچیده: درخت‌های تصمیم به مقیاس داده‌ها یا وجود داده‌های پرت حساس نیستن و نیازی به مقیاس‌گذاری ویژگی‌ها ندارن.

البته این مدل‌ها ممکنه به بیش‌برازش (Overfitting) حساس باشن، اما با روش‌هایی مثل هرس کردن (Pruning) یا ترکیب اون‌ها (مثل جنگل تصادفی)، می‌شه این مشکل رو حل کرد.

خلاصه که، درخت تصمیم به جای اینکه از یک فرمول پیچیده استفاده کنه، از یک فرآیند ساده و منطقی برای رسیدن به جواب استفاده می‌کنه! 🍃

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir


🔵 نکته برنامه نویسی



📨 Dead Letter Queue
(صف نامه‌های مُرده)

DLQ یک صف ویژه هست که پیام‌هایی رو نگه می‌داره که سیستم نتونسته اون‌ها رو به‌درستی پردازش کنه.



📌 چرا مهمه؟

* توی سیستم‌های صف پیام (Message Queue) همیشه احتمال هست بعضی پیام‌ها مشکل داشته باشن (خراب، ناقص یا پردازش‌نشونده).
* اگه این پیام‌ها همین‌جوری توی صف بمونن، می‌تونن کل سیستم رو قفل کنن.
* DLQ مثل یک زباله‌دان هوشمند عمل می‌کنه: پیام خراب رو جدا می‌کنه تا بقیه سیستم درست کار کنن.



مثال ساده

فرض کن با RabbitMQ یا Kafka داری سفارش‌های خرید رو پردازش می‌کنی:

* پیام: { "order_id": 123, "amount": 50 } → اوکی
* پیام: { "order_id": null, "amount": -10 } → مشکل

اینجا پیام خراب به جای اینکه دوباره و دوباره تلاش بشه، به DLQ فرستاده میشه:

def process_message(msg):
try:
if not msg.get("order_id") or msg["amount"] <= 0:
raise ValueError("Invalid order")
print(" Order processed:", msg)
except Exception as e:
print(" Moved to DLQ:", msg)
dlq.append(msg)

dlq = []
process_message({"order_id": 123, "amount": 50})
process_message({"order_id": None, "amount": -10})


📖 جاهای کاربردی:

* پرداخت آنلاین → تراکنش خراب نباید سیستم رو متوقف کنه.
* IoT و داده‌های سنسور → داده ناقص به DLQ میره.
* سیستم‌های بزرگ Microservices → پیام‌های ناسازگار در صف اصلی نمی‌مونن.



🛠️ مزایا

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



⚠️ چالش‌ها

* پیام‌های DLQ نباید همین‌جوری رها بشن → باید مکانیزم بررسی و اصلاح وجود داشته باشه.
* حجم زیاد DLQ می‌تونه نشونه یک بگ بزرگ توی سیستم باشه.
* بعضی وقت‌ها لازمه پیام‌ها رو بعد از اصلاح دوباره به صف اصلی برگردونیم.



👉 تشبیه ساده:
DLQ مثل بخش مرجوعی یک فروشگاهه 🛒
کالاهایی که مشکل دارن برن اونجا، تا هم مشتری‌های دیگه راحت خرید کنن، هم مسئول بررسی فرصت داشته باشه مشکل رو بررسی کنه.



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

سوگیری و واریانس (به زبان تصویر) 🎯

تصور کن یه تیرانداز هستی و می‌خوای به هدف (داده‌های واقعی) بزنی.

سوگیری (Bias) یعنی تیرانداز چقدر از مرکز هدف دور می‌زنه.

واریانس (Variance) یعنی چقدر تیرهای تیرانداز به هم نزدیک و متمرکزن.

حالا چهار حالت مختلف رو ببین:

سوگیری کم، واریانس کم (هدف ایده‌آل):
این همون مدل رویایی ماست. 🤩 تیرانداز ما هر بار به مرکز هدف می‌زنه و تیرهاش هم خیلی به هم نزدیک و متمرکزن. این مدل هم دقیق و هم قابل اعتماده.

سوگیری بالا، واریانس کم (کم‌برازش یا Underfitting):
این مدل ساده‌لوح ماست. 🤷‍♂️ تیرانداز هر بار به یک نقطه مشخص می‌زنه، اما اون نقطه از مرکز هدف خیلی دوره. مدل ما همیشه در یک جهت اشتباه می‌کنه، ولی حداقل قابل پیش‌بینیه!

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

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

خلاصه:
هدف اصلی در یادگیری ماشین اینه که با تکنیک‌هایی مثل رگولاریزیشن، اعتبارسنجی متقابل و مهندسی ویژگی، از اون سه حالت بد دور بشیم و به حالت ایده‌آل نزدیک‌تر بشیم!

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir


🔵 نکات برنامه‌نویسی



## 🌀 Idempotency


(ایدمپوتنسی یا بی‌اثر بودن چندباره)** 🌀


به زبان ساده یعنی:
👉 اگر یک عملیات رو چند بار پشت سر هم انجام بدی، نتیجه همیشه یکی باشه.



📌 چرا مهمه؟

تصور کن یک کاربر روی دکمه پرداخت کلیک می‌کنه و اینترنتش قطع میشه. دوباره کلیک می‌کنه.

⬅️ اگر سیستم Idempotent باشه → فقط یک بار پول برداشت میشه.
⬅️ اگر نباشه → کاربر دوبار پول از دست میده 😬



مثال ساده (Python)

# درخواست برداشت پول
def withdraw(balance, amount, already_processed):
if already_processed: # اگر قبلاً انجام شده
return balance
return balance - amount

print(withdraw(100, 20, False)) # 80
print(withdraw(80, 20, True)) # 80 (هیچ تغییری نکرد)


📖 جاهای کاربردی

* پرداخت‌های آنلاین 💳 (Stripe, PayPal, بانک‌ها)
* APIهای REST (مثلاً PUT و DELETE معمولاً باید Idempotent باشن)
* سیستم‌های لاگ‌گذاری (اگر یک لاگ دوباره ارسال شد، تکراری ذخیره نشه)



🛠️ مزایا

⬅️ افزایش اعتماد کاربر (چند بار کلیک کنه هم امنه)
⬅️ جلوگیری از پردازش تکراری و هزینه اضافی
⬅️ راحتی در Retry (در صورت خطای شبکه)



⚠️ نکته مهم

Idempotency با عدم تغییر (Immutability) فرق داره.

* Immutability = داده هیچ‌وقت تغییر نمی‌کنه.
* Idempotency = ممکنه تغییر کنه، ولی چند بار پشت سر هم زدن نتیجه یکسان میده.



👉 تشبیه ساده

مثل کلید چراغ برق 💡

⬅️ هرچقدر دکمه "خاموش" رو بزنی → چراغ خاموش می‌مونه.
⬅️ هرچقدر دکمه "روشن" رو بزنی → چراغ روشن می‌مونه.



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

از یادگیری تدریجی (Online / Incremental Learning) وقتی داده‌ها خیلی بزرگ یا در حال جریان (streaming) هستن استفاده کن.

🔹 در روش‌های کلاسیک، کل داده باید از قبل آماده باشه و مدل یک‌بار آموزش ببینه.
🔹 اما در دنیای واقعی داده‌ها ممکنه خیلی بزرگ باشن (Big Data) یا به صورت لحظه‌ای تولید بشن (مثل داده‌های سنسورها، تراکنش‌ها یا شبکه‌های اجتماعی).
🔹 الگوریتم‌های یادگیری تدریجی (مثل SGDClassifier در scikit-learn یا مدل‌های مبتنی بر Mini-Batch) می‌تونن داده رو به‌صورت بخش‌بخش پردازش کنن.

مزیت:

مدیریت داده‌های خیلی بزرگ بدون نیاز به RAM زیاد

امکان به‌روزرسانی مدل به‌صورت زنده بدون آموزش از صفر

به زبان ساده: این روش مثل اینه که به جای خوندن کل یک کتاب یک‌جا، فصل به فصل بخونی و یاد بگیری.

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

مقیاس‌گذاری ویژگی‌ها (Feature Scaling) 📏

تصور کن یه مدل برای پیش‌بینی قیمت خونه داری. دو تا ویژگی (ستون) داری:

مساحت خونه: از ۵۰ تا ۵۰۰ متر مربع.

تعداد اتاق‌ها: از ۱ تا ۵ اتاق.

همونطور که می‌بینی، عدد مربوط به مساحت خیلی بزرگ‌تر از عدد مربوط به تعداد اتاق‌ها است. 🤯 حالا یه مدل ساده مثل SVM (ماشین بردار پشتیبان) می‌خواد این دو تا رو با هم مقایسه کنه. به خاطر اختلاف بزرگ در مقیاس، مدل ممکنه به اشتباه فکر کنه که "مساحت" خیلی مهم‌تر از "تعداد اتاق‌ها" است.

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

چطور کار می‌کنه؟

دو روش اصلی و پرکاربرد وجود داره:

استانداردسازی (Standardization):
این روش داده‌ها رو طوری تغییر می‌ده که میانگینشون صفر و انحراف معیار (Standard Deviation)شون یک بشه. این شبیه اینه که تمام داده‌ها رو به یک واحد استاندارد تبدیل کنی. 🧪

نرمال‌سازی (Normalization):
این روش داده‌ها رو در یک بازه مشخص، معمولاً بین ۰ و ۱، قرار می‌ده. مثل این می‌مونه که همه رو روی یه خط‌کش یکسان قرار بدی. 📏

چرا این کار مهمه؟

عملکرد بهتر: خیلی از الگوریتم‌ها، به خصوص اون‌هایی که با فاصله‌ها سروکار دارن (مثل KNN یا SVM) یا اون‌هایی که از نزول گرادیان (Gradient Descent) استفاده می‌کنن (مثل شبکه‌های عصبی)، با داده‌های مقیاس‌گذاری‌شده خیلی بهتر و سریع‌تر کار می‌کنن. ⚡️

عدالت: این کار تضمین می‌کنه که هیچ ویژگی، به خاطر اینکه اعداد بزرگ‌تری داره، بر مدل مسلط نمی‌شه.

خلاصه که، با مقیاس‌گذاری ویژگی‌ها، مطمئن می‌شی که همه ویژگی‌ها به اندازه خودشون مهم تلقی می‌شن و مدل به همه به طور عادلانه نگاه می‌کنه. 😉

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

بریم سراغ یه نکته کاربردی برای اینکه چطور با دوتا از بزرگ‌ترین مشکلات یادگیری ماشین، یعنی کم‌برازش و بیش‌برازش، مبارزه کنیم! 🥊

راه‌حل‌های کم‌برازش و بیش‌برازش 💊

کم‌برازش (Underfitting) وقتی اتفاق می‌افته که مدل‌ت زیادی ساده‌ است و نمی‌تونه از داده‌ها یاد بگیره. 📉 برعکس، بیش‌برازش (Overfitting) وقتی اتفاق می‌افته که مدل‌ت زیادی پیچیده است و نویز و جزئیات بی‌ربط رو حفظ می‌کنه. 📈

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

راه‌حل‌های کم‌برازش (Underfitting)

ویژگی‌های بیشتر اضافه کن: 💡 مدل‌ت رو با اطلاعات بیشتر تغذیه کن. شاید با مهندسی ویژگی بتونی ویژگی‌های جدید و معناداری بسازی.

از یک مدل پیچیده‌تر استفاده کن: اگر مدل‌ت خطیه، شاید یک مدل غیرخطی (مثل شبکه عصبی) برای داده‌هات مناسب‌تر باشه.

برای مدت طولانی‌تر آموزش بده: ⏱️ شاید مدل‌ت فقط به زمان بیشتری برای یادگیری الگوهای داده‌ها نیاز داره.

راه‌حل‌های بیش‌برازش (Overfitting)

داده‌های بیشتری جمع‌آوری کن: 📈 هرچه داده‌ها متنوع‌تر باشن، مدل بهتر می‌تونه به یک نتیجه کلی و قابل تعمیم برسه. اگر نمی‌تونی داده‌ی واقعی جمع کنی، از افزایش داده (Data Augmentation) استفاده کن.

مدل‌ت رو ساده‌تر کن: ✂️ اگر از یک مدل پیچیده استفاده می‌کنی، می‌تونی تعداد لایه‌ها یا پیچیدگیش رو کم کنی.

از رگولاریزیشن استفاده کن: 🔒 این تکنیک به مدل به خاطر پیچیده بودنش "جریمه" می‌ده و اون رو مجبور می‌کنه ساده‌تر بمونه.

از یادگیری گروهی (Ensemble Learning) استفاده کن: 🤝 ترکیب چندین مدل ساده، اغلب بهتر از یک مدل پیچیده عمل می‌کنه و پایداری بیشتری داره.

اعتبارسنجی متقابل (Cross-Validation) انجام بده: این تکنیک بهت کمک می‌کنه تا بیش‌برازش رو شناسایی کنی و جلوی اون رو بگیری.

خلاصه که، شناختن این دو مشکل و دونستن راه‌های حلشون، کلید ساختن مدل‌های هوشمنده! 🗝

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 کوییز #مفاهیم_کلی_برنامه_نویسی

🟣 موضوع : ‏کاربرد الگوریتم‌های ساده در حل مسائل روزمره: مثال‌های عملی

🟢 سوال :

‏فرض کنید می‌خواهید لیستی از دانش‌آموزان را بر اساس نمرات امتحان از بالاترین به پایین‌ترین مرتب کنید. کدام روش شبیه به یک الگوریتم مرتب‌سازی است؟

گزینه ۱:
‏پرسیدن از هر دانش‌آموز نمره‌اش و نوشتن آن‌ها به هر ترتیبی که گفته می‌شود

گزینه ۲:
‏انتخاب تصادفی چند دانش‌آموز و مرتب کردن آن‌ها

گزینه ۳:
‏مقایسه نمره هر دانش‌آموز با دیگران و قرار دادن آن‌ها در لیست نهایی بر اساس نمره به صورت منظم

گزینه ۴:
‏نوشتن نمرات به ترتیب ورود دانش‌آموزان به کلاس



🔵 گزینه صحیح: 3

🟢 توضیح :

‏مقایسه و مرتب‌سازی نمرات به صورت منظم یک الگوریتم مرتب‌سازی است که خروجی آن یک لیست مرتب شده بر اساس نمرات خواهد بود.

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir


🔵 نکته برنامه نویسی



Retry with Exponential Backoff



🎯 تعریف

وقتی برنامه شما به یک سرویس خارجی (مثلاً API پرداخت یا دیتابیس ابری) درخواست می‌فرسته، ممکنه به‌طور موقت خطا بده (به‌خاطر قطعی شبکه یا شلوغی سرور).

راه‌حل: Retry (تلاش دوباره).
ولی اگه بدون برنامه پشت سر هم Retry کنی:

⬅️ هم سرویس خراب رو بیشتر تحت فشار می‌ذاری
⬅️ هم ممکنه خودت قفل کنی

اینجاست که Exponential Backoff میاد:

⬅️ بار اول بعد از ۱ ثانیه دوباره امتحان می‌کنی
⬅️ بار دوم بعد از ۲ ثانیه
⬅️ بار سوم بعد از ۴ ثانیه
⬅️ … (هر بار فاصله دو برابر میشه)



چرا خوبه؟

⬅️ به سرویس فرصت می‌دی خودش رو ریکاوری کنه.
⬅️ فشار کمتری به سیستم وارد میشه.
⬅️ احتمال موفقیت بیشتر میشه.



🐍 مثال ساده در Python

import time
import random

def unstable_service():
"""شبیه‌سازی یک سرویس که 50% مواقع خطا میده"""
if random.random() < 0.5:
raise Exception("Service failed ")
return "Success "

def call_with_retry(max_retries=5):
delay = 1 # شروع از 1 ثانیه
for attempt in range(1, max_retries + 1):
try:
result = unstable_service()
print(f"Attempt {attempt}: {result}")
return result
except Exception as e:
print(f"Attempt {attempt}: {e}, retrying in {delay}s...")
time.sleep(delay)
delay *= 2 # افزایش نمایی
print("All retries failed 🚨")
return None

call_with_retry()


💡 مزایا:

⬅️ جلوگیری از overload شدن سرویس خراب.
⬅️ افزایش شانس موفقیت در شرایط موقتاً بد.
⬅️ خیلی پرکاربرد در microservices، شبکه و APIهای حساس.



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 کوییز #مفاهیم_کلی_برنامه_نویسی

🟣 موضوع : ‏آشنایی با اصول برنامه‌نویسی تابعی: مفاهیم پایه و کاربردها

🟢 سوال :

‏کدام یک از الگوهای برنامه‌نویسی زیر معمولاً در برنامه‌نویسی تابعی برای پردازش مجموعه‌ای از داده‌ها استفاده می‌شود؟

گزینه ۱:
‏حلقه `for` با تغییر حالت متغیرها

گزینه ۲:
‏استفاده از توابع مرتبه بالاتر مانند `map`, `filter`, و `reduce`

گزینه ۳:
‏استفاده از دستور `goto` برای پرش بین بخش‌های مختلف کد

گزینه ۴:
‏ایجاد کلاس‌ها و اشیاء برای نگهداری حالت



🔵 گزینه صحیح: 2

🟢 توضیح :

‏توابع `map`, `filter`, و `reduce` الگوهای رایج در برنامه‌نویسی تابعی برای اعمال یک عمل بر روی تمام عناصر یک مجموعه، انتخاب زیرمجموعه‌ای از عناصر، و ترکیب عناصر به یک مقدار واحد هستند.

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir


🔵 نکته برنامه نویسی




🌳 Strangler Fig Pattern
(الگوی درخت خفه‌کننده)


یک تکنیک معماری نرم‌افزار برای بازنویسی یا مهاجرت سیستم‌های قدیمی (Legacy Systems) به سیستم‌های جدید بدون ایجاد اختلال.



📌 ایده اصلی

* مثل یک درخت انجیر خفه‌کننده (Strangler Fig) که دور یک درخت قدیمی رشد می‌کنه و کم‌کم جای اون رو می‌گیره.
* به‌جای اینکه یک سیستم قدیمی رو یک‌باره کنار بذاری (که ریسکش خیلی بالاست)، بخش‌بخش اون رو با سرویس‌های جدید جایگزین می‌کنی.
* در نهایت، کل سیستم قدیمی از بین میره و سیستم جدید کامل سرجاش میاد.



روند کار

1. سیستم قدیمی هنوز در حال اجراست.
2. یک Facade / Proxy جلوی سیستم قرار می‌دی که درخواست‌های کاربر رو مدیریت کنه.
3. هر وقت یک قابلیت جدید ساختی، به‌جای سیستم قدیمی، به سرویس جدید روت میشه.
4. به مرور، ترافیک سیستم قدیمی کمتر و کمتر میشه، تا جایی که میشه حذفش کرد.



مثال ساده (مفهومی)

User ---> [ Proxy ] ---> [ Old System ]
بعد از جایگزینی بخشی:

User ---> [ Proxy ]
↳ [ New Service: Payments ]
↳ [ Old System: Orders ]
و در نهایت:

User ---> [ Proxy ]
↳ [ New Service: Payments ]
↳ [ New Service: Orders ]


📖 جاهای کاربردی

* مهاجرت از Monolith به Microservices.
* بازنویسی نرم‌افزارهای قدیمی بانک‌ها، بیمه‌ها یا سیستم‌های ERP.
* سیستم‌های حیاتی که نمی‌تونن حتی یک روز Down بشن.



🛠️ مزایا

* کاهش ریسک → مهاجرت تدریجی، نه یک‌باره.
* انعطاف‌پذیری → میشه تست و اصلاح کرد بدون آسیب به کل سیستم.
* تداوم سرویس‌دهی → کاربران هیچ قطعی حس نمی‌کنن.



⚠️ معایب / چالش‌ها

* مدیریت Proxy و Routing پیچیده میشه.
* نیاز به هماهنگی دیتابیس بین بخش‌های قدیم و جدید.
* ممکنه فرآیند مهاجرت خیلی طولانی بشه.



👉 تشبیه ساده

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



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

یک نکته رندوم دیگه در یادگیری ماشین:

همیشه داده‌ها را به دو یا سه مجموعه تقسیم کنید: آموزش (Training)، اعتبارسنجی (Validation) و تست (Test).

* آموزش یا Training: برای یادگیری مدل استفاده می‌شود.
* اعتبارسنجی یا Validation: برای تنظیم هایپرپارامترها و جلوگیری از overfitting استفاده می‌شود.
* تست یا Test: برای ارزیابی نهایی عملکرد مدل روی داده‌های دیده‌نشده استفاده می‌شود.

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




ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #جاوا_اسکریپت

🟣 موضوع : ‏کار با APIها و درخواست‌های شبکه - اعتبار سنجی داده‌های JSON با استفاده از کتابخانه‌ها و ابزارها

نکته :

‏برای شروع کار با APIها، اول با fetch یا axios یه درخواست ساده بفرست. مثلاً یه لیست محصولات بگیر! 🛒 خیلی هیجان‌انگیزه!


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

تا الان شاید در مورد مدل‌هایی فکر کردین که بهشون جواب درست رو نشون می‌دادیم. 🤓 (مثلاً می‌گفتیم "این عکسه گربه‌ست.") حالا بریم سراغ یه مدل دیگه که خودش باید جواب رو کشف کنه! 🕵️‍♀️

یادگیری بدون نظارت (Unsupervised Learning) 🧩

در دنیای یادگیری ماشین، دو نوع اصلی یادگیری داریم:

یادگیری نظارت‌شده (Supervised Learning): مثل یه دانش‌آموز که معلم (داده‌های برچسب‌دار) بهش می‌گه "این سیب قرمزه، اون موز زرده". 🍎🍌

یادگیری بدون نظارت (Unsupervised Learning): مثل یه دانش‌آموز که بدون معلم، فقط یه عالمه میوه جلوی روشه و باید خودش کشف کنه که چه میوه‌هایی شبیه هم هستن و دسته‌بندیشون کنه. 🍇🍊

خوشه‌بندی (Clustering) محبوب‌ترین نوع یادگیری بدون نظارت هست.

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

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

کجا کاربرد داره؟

بخش‌بندی مشتریان: 🛍 شرکت‌ها می‌تونن مشتری‌هاشون رو بر اساس عادت‌های خریدشون به گروه‌های مختلف تقسیم کنن تا کمپین‌های تبلیغاتی بهتری بسازن.

تشخیص ناهنجاری: 🚨 در یک سری داده مالی، خوشه‌بندی می‌تونه تراکنش‌هایی رو که با هیچ گروهی جور درنمی‌آن (که ممکنه تقلبی باشن) شناسایی کنه.

دسته‌بندی خودکار اسناد: 📂 می‌تونه اسناد رو بر اساس محتواشون به صورت خودکار به گروه‌های مختلف تقسیم کنه.

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

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir


🔵 نکات برنامه‌نویسی



CQRS Pattern

🔹 ایده اصلی

در معماری‌های سنتی، برای هر Entity معمولاً یک مدل داریم که هم برای نوشتن (ثبت، ویرایش، حذف) و هم برای خواندن (گزارش، جستجو) استفاده می‌شه.

اما در CQRS:

➡️ Command (دستور → نوشتن)
➡️ Query (پرس‌وجو → خواندن)

کاملاً از هم جدا می‌شن.



چرا؟

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



مثال ساده (Python – بدون دیتابیس واقعی)

# مدل نوشتن (Command Model)
class OrderCommandModel:
def __init__(self):
self.orders = {}

def create_order(self, order_id, customer, amount):
self.orders[order_id] = {"customer": customer, "amount": amount}
print(f" سفارش ثبت شد: {order_id}")


# مدل خواندن (Query Model)
class OrderQueryModel:
def __init__(self, command_model):
self.command_model = command_model

def get_order(self, order_id):
return self.command_model.orders.get(order_id, None)


# تست
command_model = OrderCommandModel()
query_model = OrderQueryModel(command_model)

command_model.create_order("ORD101", "Ali", 250000)
print("🔍 جستجو:", query_model.get_order("ORD101"))


📖 کاربردهای واقعی

⬅️ سیستم‌های بزرگ مقیاس (Enterprise Systems)

⬅️ نوشتن داده توی دیتابیس Transactional (مثلاً SQL)
⬅️ خواندن داده از دیتابیس بهینه برای Query (مثلاً ElasticSearch)
⬅️ گزارش‌گیری سنگین: بدون اینکه کاربر عادی کند بشه
➡️ Event Sourcing: ترکیب می‌شه تا تغییرات فقط به‌عنوان Event ذخیره بشن



🛠️ مزایا

⬅️ بهینه‌سازی جداگانه برای خواندن و نوشتن
⬅️ مقیاس‌پذیری بهتر (می‌تونی هرکدوم رو روی سرور جدا بذاری)
⬅️ طراحی تمیزتر و قابل‌فهم‌تر



🎯 تشبیه ساده

مثل رستوران:

⬅️ ثبت سفارش (نوشتن): فقط اسم غذا و تعداد ثبت می‌شه.
⬅️ نمایش سفارش‌ها (خواندن): شاید نیاز باشه جدول زمانی، وضعیت، قیمت کل و… نمایش داده بشه.

هر کدوم نیازهای متفاوت دارن، پس جدا کردنشون منطقیه.



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #React

🟣 موضوع : ‏نکات بهینه‌سازی و عملکرد فرم‌ها

نکته :

‏کامپوننت‌های دکمه یا لیبل فرمت که قرار نیست زیاد تغییر کنن رو با React.memo بهینه کن تا فقط وقتی پراپ‌هاشون عوض شد، رندر بشن. 🖼️👌


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

رگرسیون خطی هم مثل یه خانواده‌س که اعضای مختلفی داره و هر کدوم برای یه کار خاص مناسب‌ترن. 👨‍👩‍👧‍👦

رگرسیون خطی ساده 👶

این مدل، ساده‌ترین عضو خانواده‌س و فقط روی رابطه بین دو متغیر تمرکز می‌کنه. 🤔 مثلاً می‌خواد ببینه که آیا افزایش ساعت مطالعه 📚 تأثیری روی افزایش نمره امتحان 💯 داره یا نه. یک متغیر رو برای پیش‌بینی استفاده می‌کنه و یک متغیر رو هم پیش‌بینی می‌کنه.

رگرسیون خطی چندگانه 🧑‍🤝‍🧑

این مدل یه ذره پیچیده‌تره و برای بررسی تأثیر چندین متغیر روی یک متغیر دیگه استفاده می‌شه. 🧠 مثلاً اگه بخوایم قیمت یه خونه رو پیش‌بینی کنیم، علاوه بر متراژ، می‌تونیم تعداد اتاق‌ها 🛏، محل قرارگیری 📍 و حتی سال ساخت 🗓 رو هم در نظر بگیریم. این مدل به ما کمک می‌کنه تأثیر هر کدوم از این عوامل رو به صورت جداگانه بسنجیم.

رگرسیون خطی تعمیم‌یافته (Generalized Linear Models) 👵

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

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

کاهش ابعاد (Dimensionality Reduction) 📉

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

وقتی تعداد این ویژگی‌ها خیلی زیاد می‌شه، مدل ما با یه مشکل به نام "نفرین ابعاد" (Curse of Dimensionality) روبرو می‌شه. 😵 این وضعیت باعث می‌شه:

مدل گیج بشه: مدل روی جزئیات بی‌اهمیت تمرکز می‌کنه و از الگوی اصلی غافل می‌شه.

سرعتش کم بشه: هرچی داده‌ها سنگین‌تر باشن، آموزش مدل زمان بیشتری می‌بره.

بیش‌برازش اتفاق بیفته: مدل به راحتی نویز داده‌ها رو حفظ می‌کنه.

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

این کار به دو روش اصلی انجام می‌شه:

انتخاب ویژگی (Feature Selection):

ساده‌ترین راه اینه که فقط مهم‌ترین ویژگی‌ها رو انتخاب کنیم و بقیه رو حذف کنیم. مثلاً شاید "رنگ دیوار" تأثیر زیادی روی قیمت خونه نداشته باشه و بشه حذفش کرد.

استخراج ویژگی (Feature Extraction):

در این روش، ویژگی‌های جدیدی می‌سازیم که ترکیبی از ویژگی‌های قبلی هستن. مثلاً به جای ۲۰ ویژگی برای توصیف یک چهره، یک الگوریتم مثل تحلیل مؤلفه‌های اصلی (PCA) می‌تونه اون‌ها رو در ۳ یا ۴ ویژگی جدید و مفید خلاصه کنه.

خلاصه که، کمتر بیشتره! با کاهش ابعاد داده، می‌تونی مدل‌ت رو سریع‌تر، دقیق‌تر و هوشمندتر کنی. 😉

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #جاوا_اسکریپت

🟣 موضوع : ‏جاوا اسکریپت در مرورگر - اعتبارسنجی خالی نبودن فیلدهای فرم (required fields)

نکته :

‏ساده‌ترین راه چک کردن پراپرتی .value هست. اگه یه رشته خالی "" بود، یعنی فیلد پر نشده! 💡


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir


🔵 نکته برنامه نویسی

یک نکته مهم در مورد اصل DRY (Don’t Repeat Yourself) اینه که:
DRY به معنای حذف تکرار بی‌دلیل منطق یا داده است، نه اینکه همه‌چیز رو به زور یکی کنی.

خیلی‌ها اشتباه می‌کنن و فکر می‌کنن DRY یعنی هر جا دو خط شبیه هم دیدی، باید اونو تو یه تابع یا کلاس بذاری.
ولی اگر اون دو خط فقط تصادفاً شبیه هم هستن ولی منطق و هدف متفاوتی دارن، ترکیب کردنشون باعث پیچیدگی و کاهش خوانایی میشه.
استفاده درست از DRY یعنی:
منطق یکسان رو یک‌بار بنویسی و در جاهای مختلف استفاده کنی.
داده‌های ثابت (مثل متن خطاها یا مقادیر پیش‌فرض) رو متمرکز در یک محل تعریف کنی تا اگر تغییر کرد، فقط همون‌جا تغییر بدی.
مثلاً به جای اینکه در چند جای کد رشته "User not found" رو بنویسی، اون رو در یک متغیر یا فایل کانفیگ بذاری و همه‌جا ازش استفاده کنی. اینطوری اگر پیام تغییر کنه، فقط یک‌جا تغییر می‌دی.



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

برای بررسی Stationarity در سری‌های زمانی از تست‌های آماری مثل ADF و KPSS استفاده می‌کنیم.

🔹 ADF Test (Augmented Dickey-Fuller):

فرض صفر: سری غیرایستا (Non-Stationary) است.

اگر p-value کوچک باشه، فرض صفر رد می‌شه → سری ایستا است.

🔹 KPSS Test (Kwiatkowski-Phillips-Schmidt-Shin):

فرض صفر: سری ایستا است.

اگر p-value کوچک باشه، فرض صفر رد می‌شه → سری غیرایستا است.

🔹 نکته مهم: معمولاً از هر دو تست استفاده می‌کنن تا مطمئن بشن سری واقعاً ایستا یا غیرایستا است.

به زبان ساده: این تست‌ها مثل “ترمومتر” هستن تا بفهمیم داده‌ها آرام و ثابت هستن یا نوسان زیادی دارن 🌡📊

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir