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


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




📜 Event Sourcing

(منبع‌یابی رویدادها)



🔹 ایده اصلی

ذخیره تمام تغییرات (رویدادها) به جای فقط ذخیره وضعیت فعلی.

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



🔹 چرا مهمه؟

⬅️ قابلیت بازگردانی به گذشته (Undo / Audit)
⬅️ ردیابی کامل تاریخچه تغییرات
⬅️ امکان بازسازی وضعیت سیستم در صورت خرابی



مثال ساده (Python)

class EventStore:
def __init__(self):
self.events = []

def add_event(self, event):
self.events.append(event)

def get_balance(self):
balance = 0
for e in self.events:
if e['type'] == 'deposit':
balance += e['amount']
elif e['type'] == 'withdraw':
balance -= e['amount']
return balance


# استفاده
store = EventStore()
store.add_event({'type': 'deposit', 'amount': 100})
store.add_event({'type': 'withdraw', 'amount': 30})
store.add_event({'type': 'deposit', 'amount': 50})

print("💰 موجودی فعلی:", store.get_balance()) # خروجی: 120


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

⬅️ سیستم‌های مالی و بانکی → ذخیره تراکنش‌ها
⬅️ سیستم‌های سفارش آنلاین → نگه داشتن تاریخچه تغییر وضعیت سفارش
⬅️ سیستم‌های بازی → ذخیره اعمال بازیکن به صورت رویداد برای بازسازی و تحلیل



🛠️ مزایا

⬅️ تاریخچه کامل تغییرات
⬅️ قابلیت Undo / Replay
⬅️ تحلیل دقیق رفتار سیستم و کاربران



🎯 تشبیه ساده

Event Sourcing مثل فیلمبرداری از تمام مراحل آشپزی 🎥:

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



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

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

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

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

تقسیم‌بندی درست داده‌ها به صورت تصادفی (Shuffling) قبل از آموزش خیلی مهمه.

چرا؟

اگه داده‌ها مرتب باشن (مثلاً همه نمونه‌های کلاس A اول و بعد کلاس B بیان)، مدل به‌درستی الگوها رو یاد نمی‌گیره.

شافل کردن داده‌ها باعث میشه آموزش منصفانه‌تری انجام بشه و مدل دچار bias نشه.

مثال ساده:
در کتابخانه‌ی scikit-learn، توابعی مثل train_test_split به صورت پیش‌فرض داده‌ها رو shuffle می‌کنن تا این مشکل پیش نیاد.

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


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

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

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

یک تکنیک جالب "Code Smells" (بوی بد کد) است.

این اصطلاح به معنی خطای مستقیم نیست، بلکه نشانه‌هایی است که می‌گویند کد ممکن است در آینده دردسرساز شود یا نیاز به بازطراحی دارد.
مثلاً:

یک تابع خیلی بزرگ که همه‌چیز را با هم انجام می‌دهد (God Function)

تکرار زیاد یک منطق در جاهای مختلف (Duplicated Code)

وابستگی بیش‌ازحد یک کلاس به کلاس‌های دیگر (Tight Coupling)

برنامه‌نویس‌های با تجربه وقتی “بوی بد” را حس کنند، کد را Refactor می‌کنند تا ساختار تمیزتر شود و نگهداری آسان‌تر گردد.

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

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

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

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

قابلیت تفسیر مدل (Model Interpretability) 🧠

در مورد ساختن مدل‌های قدرتمند زیاد شنیدین. اما یه مشکلی وجود داره: خیلی از این مدل‌های پیشرفته (مثل شبکه‌های عصبی پیچیده)، مثل یه جعبه سیاه (Black Box) عمل می‌کنن. 📦

یعنی چی؟
یعنی شما داده رو به مدل می‌دی و یه خروجی می‌گیری، اما نمی‌دونی مدل چرا به اون خروجی رسیده.

مثلاً یه مدل بانکی رو برای تأیید وام در نظر بگیر. 🏦 مدل می‌گه "وام این شخص تأیید نمی‌شه." اما نمی‌تونه به شما بگه چرا. آیا به خاطر درآمدشه؟ سابقه شغلیشه؟ یا چیز دیگه؟

قابلیت تفسیر مدل یا هوش مصنوعی قابل توضیح (XAI) دقیقاً برای حل این مشکل به وجود اومده. هدفش اینه که به ما کمک کنه بفهمیم:

کدوم ویژگی‌ها (مثلاً سن، درآمد، محل زندگی) در تصمیم‌گیری مدل بیشترین تأثیر رو داشتن؟

چطور این ویژگی‌ها روی نتیجه نهایی تأثیر گذاشتن؟

چرا این نکته انقدر مهمه؟

اعتماد: مردم به سیستمی که دلیل تصمیماتش رو می‌فهمن، بیشتر اعتماد می‌کنن.

اشکال‌زدایی (Debugging): اگر مدل‌ت اشتباه عمل کنه، با فهمیدن دلیلش می‌تونی راحت‌تر اون رو رفع کنی. 🔨

عدالت: با بررسی دلایل تصمیمات مدل، می‌تونی مطمئن بشی که بر اساس معیارهای منصفانه تصمیم‌گیری می‌کنه و سوگیری‌های پنهان (مثل نژادی یا جنسیتی) رو نداره. ⚖️

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

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


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

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

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


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



🐦 Canary Release


🔹 ایده اصلی

به‌جای اینکه یک نسخه جدید نرم‌افزار رو یک‌باره برای همه کاربران منتشر کنیم،
اول اون رو به یک بخش کوچک از کاربران (Canary group) می‌دیم.

⬅️ اگر مشکلی نبود → به تدریج برای همه منتشر می‌کنیم.
⬅️ اگر باگ یا خطایی رخ داد → سریع برمی‌گردونیم (rollback) بدون اینکه همه آسیب ببینن.

این روش اسمش از «قناری در معدن زغال‌سنگ» گرفته شده، چون قبلاً قناری‌ها رو برای تشخیص گازهای سمی استفاده می‌کردن.


🔹 چرا مهمه؟

⬅️ ریسک انتشار نسخه جدید کم میشه
⬅️ امکان آزمایش در دنیای واقعی با کاربرهای واقعی وجود داره
⬅️ مشکلات قبل از اینکه کل سیستم تحت تأثیر قرار بگیره کشف میشن




مثال ساده (Python – شبیه‌سازی Canary Release)

import random

def old_version(user_id):
return f"User {user_id}: Old version "

def new_version(user_id):
# احتمال خطا در نسخه جدید
if random.random() < 0.2:
return f"User {user_id}: New version ERROR"
return f"User {user_id}: New version "

def canary_release(users):
results = []
for user_id in users:
# 20% از کاربران به نسخه جدید میرن
if user_id % 5 == 0:
results.append(new_version(user_id))
else:
results.append(old_version(user_id))
return results

# تست
users = range(1, 21)
for r in canary_release(users):
print(r)

🔹 توضیح کد

⬅️ ۲۰٪ کاربران به نسخه جدید میرن.
⬅️ اگر خطایی در نسخه جدید رخ بده → سریع قابل مشاهده است بدون اینکه همه آسیب ببینن.



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

➡️ Google, Facebook, Netflix همه از این روش برای انتشار نسخه‌های جدید استفاده می‌کنن.
⬅️ تست UI جدید روی ۵٪ کاربران.
⬅️ تغییر الگوریتم ریکامندیشن فقط برای بخشی از کاربران.
⬅️ انتشار API جدید برای بعضی کلاینت‌ها.


🛠️ مزایا

⬅️ کاهش ریسک انتشار
⬅️ امکان rollback سریع
⬅️ افزایش اعتماد تیم و کاربران



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

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

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

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

مراقب Overfitting باش!

تعریف Overfitting یعنی مدل روی داده‌های آموزشی خیلی خوب عمل کنه ولی روی داده‌های جدید (واقعی) ضعیف باشه.

🔹 روش‌های جلوگیری از Overfitting:

استفاده از بیشتر داده آموزشی

استفاده از Regularization مثل L1 یا L2

کاهش پیچیدگی مدل (مثلاً تعداد لایه‌های کمتر در شبکه عصبی یا عمق کمتر در درخت تصمیم)

روش Dropout در شبکه‌های عصبی

روش Early Stopping: متوقف کردن آموزش وقتی خطای validation شروع به زیاد شدن کرد

به زبان ساده: مدلی که فقط “حافظه‌” داره، یاد نگرفته! باید تعادل بین یادگیری و تعمیم‌پذیری پیدا کنی.

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


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

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

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

بریم سراغ یه تکنیک خیلی خفن که یادگیری ماشین رو شبیه به یادگیری انسان‌ها می‌کنه! 🧠

یادگیری انتقالی (Transfer Learning) 🔄

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

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

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

به زبان ساده‌تر:

فرض کن می‌خوای یک مدل برای تشخیص "چهره گربه‌ها" بسازی. 🐈‍⬛ به جای اینکه هزاران عکس گربه جمع کنی و از صفر شروع کنی، می‌تونی از یه مدل آماده استفاده کنی که قبلاً روی میلیون‌ها عکس از همه چیز (آدم، ماشین، حیوان، اشیا و...) آموزش دیده. 🚗👨‍👩‍👦

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

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

صرفه‌جویی در زمان: به جای ساعت‌ها یا روزها آموزش، فقط به چند دقیقه یا ساعت نیاز داری. ⏱️

صرفه‌جویی در داده: می‌تونی با تعداد داده‌های خیلی کمتری به نتایج عالی برسی.

خلاصه که، به جای اینکه چرخ رو از اول اختراع کنی، از چرخی که قبلاً اختراع شده استفاده می‌کنی و فقط اون رو برای کار خودت تنظیم می‌کنی! 🛠

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


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

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

آدرس وبسایت:
https://Tutorial24.ir
🔵 کوییز #React_js

🟣 موضوع : ‏تفاوت React.js و React Native

🟢 سوال :

‏کدام یک از این کتابخانه‌ها بیشتر با React.js استفاده می‌شود تا React Native؟

گزینه 1:
React Navigation
گزینه 2:
Redux
گزینه 3:
NativeBase
گزینه 4:
React Native Elements

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

🟢 توضیح :

‏Redux یک کتابخانه مدیریت state است که به‌طور گسترده با React.js برای مدیریت state در برنامه‌های وب استفاده می‌شود.


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

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

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

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


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



CQRS Pattern

(Command Query Responsibility Segregation)



🔹 ایده اصلی

در سیستم‌های معمولی (CRUD)، هم برای خواندن (Query) و هم برای نوشتن (Command) از یک مدل داده استفاده می‌کنیم.
ولی در CQRS این دو جدا میشن:

➡️ Command: تغییر وضعیت (Insert, Update, Delete)
➡️ Query: فقط خواندن داده‌ها (Read)

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



🔹 چرا مهمه؟

⬅️ برای نوشتن می‌تونی قوانین پیچیده دامنه (Domain Rules) رو اعمال کنی.
⬅️ برای خواندن می‌تونی مدل‌های سبک و سریع بسازی (مثل View یا Projection).
⬅️ مقیاس‌پذیری سیستم راحت‌تر میشه (مثلاً دیتابیس Read-Only جدا داشته باشی).



مثال ساده (Python)

فرض کن سیستم سفارش داریم:

# Command: ثبت سفارش
class OrderService:
def __init__(self):
self.orders = []

def place_order(self, user, product):
order = {"user": user, "product": product}
self.orders.append(order)
return f"Order placed: {order}"

# Query: گرفتن سفارش‌ها
class OrderQuery:
def __init__(self, orders):
self.orders = orders

def get_orders_by_user(self, user):
return [o for o in self.orders if o["user"] == user]

# استفاده
service = OrderService()
service.place_order("Ali", "Laptop")
service.place_order("Ali", "Mouse")
service.place_order("Sara", "Keyboard")

query = OrderQuery(service.orders)
print(query.get_orders_by_user("Ali"))
# [{'user': 'Ali', 'product': 'Laptop'}, {'user': 'Ali', 'product': 'Mouse'}]


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

⬅️ سیستم‌های بزرگ با داده زیاد (مثلاً فروشگاه‌های اینترنتی مثل Amazon)
⬅️ سیستم‌های مالی که Queryهای سریع می‌خوان و Commandها پر از قوانین پیچیده‌ان
⬅️ معماری Microservices → میشه سرویس‌های Query و Command رو جداگانه Deploy کرد



🛠️ مزایا

⬅️ بهینه‌سازی جداگانه برای Read و Write
⬅️ افزایش کارایی و مقیاس‌پذیری
⬅️ کدنویسی تمیزتر (Separation of Concerns)



⚠️ چالش‌ها

⬅️ طراحی و نگهداری پیچیده‌تر از CRUD ساده
⬅️ نیاز به Sync بین مدل Command و Query (ممکنه Eventual Consistency پیش بیاد)



🎯 تشبیه ساده

CQRS مثل رستورانه 🍽️:

⬅️ یه بخش برای گرفتن سفارش (Command)
⬅️ یه بخش برای سرو غذا (Query)
اینطوری کار سریع‌تر و مرتب‌تر پیش میره.



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

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

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

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

مدل ARIMA یک مدل کلاسیک برای پیش‌بینی سری‌های زمانی است و شامل سه بخش اصلیه:

🔹 بخش AR (Auto-Regressive): وابستگی به مشاهدات گذشته
🔹 بخش I (Integrated): اعمال Differencing برای ایستا کردن سری
🔹 بخش MA (Moving Average): وابستگی به خطاهای گذشته

🔹 نکته: انتخاب تعداد پارامترهای AR و MA و تعداد Differencing درست، برای عملکرد مدل خیلی مهمه.

به زبان ساده: ARIMA مثل یه “فرمول پیش‌بینی ترکیبی” است که گذشته و خطاهای گذشته رو می‌بینه تا آینده رو حدس بزنه 🔮

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


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

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

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

هایپرپارامترها (Hyperparameters) رو به صورت دستی انتخاب نکن، از جستجو استفاده کن.

🔹 هایپرپارامترها مثل:

تعداد درخت‌ها در RandomForest

نرخ یادگیری (learning rate) در شبکه‌های عصبی

مثل k در KNN

انتخاب درستشون می‌تونه تفاوت زیادی در دقت ایجاد کنه.

راهکارها:

Grid Search: امتحان کردن همه ترکیب‌ها (کند ولی دقیق)

Random Search: انتخاب تصادفی ترکیب‌ها (سریع‌تر و اغلب کافی)

Bayesian Optimization / Optuna: هوشمندانه‌تر و بهینه‌تر

به زبان ساده: به جای حدس زدن، بذار الگوریتم برات بهترین تنظیمات رو پیدا کنه.

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


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

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

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


بریم سراغ یه مشکل رایج که توی دنیای واقعی خیلی باهاش روبرو می‌شی: داده‌های گم‌شده! 🤔

مدیریت داده‌های گم‌شده (Handling Missing Data) 🕵️‍♀️

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

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

چطور این مشکل رو حل کنیم؟

مثل یک کارآگاه، باید برای پیدا کردن بهترین راه‌حل، استراتژی داشته باشی. دو روش اصلی وجود داره:

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

جایگزینی کردن (Imputation):
به جای حذف داده‌ها، اون‌ها رو با یه مقدار جایگزین پر می‌کنی. این کار به چند روش انجام می‌شه:

جایگزینی ساده: 🤓 می‌تونی از میانگین (Average)، میانه (Median) یا پرتکرارترین مقدار (Mode) اون ستون برای پر کردن جاهای خالی استفاده کنی.

جایگزینی هوشمند: 🧠 می‌تونی از یه مدل یادگیری ماشین دیگه استفاده کنی تا بر اساس بقیه داده‌ها، مقدار گم‌شده رو پیش‌بینی کنه.

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

عملکرد بهتر: داده‌های کامل و تمیز، باعث می‌شن مدل‌ت بهتر کار کنه و نتایج قابل اعتمادتری به دست بیاره.

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

خلاصه که، داده‌های گم‌شده مثل پازل‌های ناقص هستن و قبل از هر کاری، باید با یه استراتژی درست، اون‌ها رو کامل کنیم تا مدل‌مون بتونه تصویر کامل رو ببینه! 😉

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


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

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

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


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

یک تکنیک کمتر شنیده‌شده و کاربردی در برنامه‌نویسی، "Temporal Coupling Reduction" هست.

ماجراش اینه که بعضی وقت‌ها توی کد، چند متد یا تابع باید به ترتیب خاصی اجرا بشن وگرنه کل سیستم به هم می‌ریزه. این حالت بهش می‌گن temporal coupling (وابستگی زمانی).

مثلاً:

conn.open()
conn.send_data(data)
conn.close()
اگر برنامه‌نویس جدیدی بیاد و وسط کار ترتیب رو به هم بزنه یا یک مرحله رو فراموش کنه، باگ پیش میاد.

راه‌حل تکنیک اینه که این توالی رو توی یک API یا abstraction بسته‌بندی کنی تا ترتیب درست رو اجباراً اجرا کنه و توسعه‌دهنده نتونه اشتباه کنه:

conn.send(data)
و داخلش خودش باز کردن و بستن اتصال رو مدیریت کنه.

این کار باعث میشه کد مقاوم‌تر و کمتر مستعد باگ‌های ناشی از ترتیب اجرا بشه.




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

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

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

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

قبل از استفاده از الگوریتم‌های یادگیری ماشین، همیشه داده‌ها را نرمال‌سازی یا استاندارد کنید.
یعنی ویژگی‌ها (features) را طوری تغییر دهید که روی یک مقیاس مشابه باشند، مثلا بین 0 تا 1 یا با میانگین صفر و واریانس یک.

چرا؟ چون بسیاری از الگوریتم‌ها مثل KNN، SVM، و شبکه‌های عصبی نسبت به مقیاس ویژگی‌ها حساس هستند و اگر این کار را نکنید، مدل ممکن است روی ویژگی‌های با مقدار بزرگتر تمرکز کند و عملکردش بد شود.

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


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

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

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

🟣 موضوع : ‏تنظیم مسیر پیش‌فرض (404 و مسیرهای ناشناس)

نکته :

‏برای اینکه کاربر بتونه راحت تر تو سایتت بچرخه، یه مسیر پیش فرض بذار که اگه یهو وسط ناکجاآباد اینترنتی ول شد، سریع برگرده خونه! 🏡


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

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

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

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

🟣 موضوع : ‏الگوریتم: مفهوم، اهمیت و مثال‌های کاربردی

🟢 سوال :

‏کدام یک از موارد زیر یک تکنیک برای طراحی الگوریتم است؟

گزینه ۱:
‏استفاده از توابع بازگشتی

گزینه ۲:
‏نادیده گرفتن بهینه‌سازی

گزینه ۳:
‏افزایش پیچیدگی کد

گزینه ۴:
‏حذف تمام نظرات (Comments)



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

🟢 توضیح :

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

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

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

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

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

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

درخت تصمیم (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