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


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



Circuit Breaker Pattern
(فیوز یا قطع‌کننده مدار)


🔹 ایده اصلی

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

Circuit Breaker مثل فیوز عمل می‌کنه:

⬅️ اگر تعداد زیادی خطا رخ بده → مدار قطع میشه → درخواست‌های بعدی سریعاً Fail میشن (به جای صبر کردن بی‌پایان).
⬅️ بعد از یه مدت → فیوز "نیمه‌باز" میشه و اجازه تست مجدد میده.
⬅️ اگر دوباره درست بود → مدار می‌بنده و همه‌چیز عادی میشه.



🔹 سه حالت اصلی

1. Closed (بسته): همه درخواست‌ها ارسال میشن.
2. Open (باز): خطا زیاد شده → درخواست‌ها بلاک میشن.
3. Half-Open (نیمه‌باز): بعضی درخواست‌های تستی فرستاده میشن تا ببینیم سرویس برگشته یا نه.



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

import random
import time

class CircuitBreaker:
def __init__(self, failure_threshold=3, recovery_time=5):
self.failure_threshold = failure_threshold
self.recovery_time = recovery_time
self.failures = 0
self.state = "CLOSED"
self.last_failure_time = None

def call(self, func, *args):
if self.state == "OPEN":
if time.time() - self.last_failure_time > self.recovery_time:
self.state = "HALF-OPEN"
else:
return "Circuit Open: Request Blocked "

try:
result = func(*args)
self.failures = 0
self.state = "CLOSED"
return result
except Exception as e:
self.failures += 1
self.last_failure_time = time.time()
if self.failures >= self.failure_threshold:
self.state = "OPEN"
return f"Error: {e}"

# تابعی که بعضی وقتا Fail میشه
def unreliable_service(x):
if random.random() < 0.5:
raise Exception("Service Down")
return f"Success with {x}"

breaker = CircuitBreaker()

for i in range(10):
print(breaker.call(unreliable_service, i))
time.sleep(1)


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

➡️ Microservices Communication (مثلاً Netflix OSS Hystrix معروفه)
➡️ API Gateway برای جلوگیری از Down شدن کل سیستم
⬅️ سیستم‌های Cloud برای مدیریت سرویس‌های ناپایدار



🛠️ مزایا

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



🎯 تشبیه ساده

Circuit Breaker مثل فیوز برق خونهه:

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


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

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

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

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

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

🟢 سوال :

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

گزینه ۱:
‏طراحی رابط کاربری

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

گزینه ۳:
‏مدیریت پایگاه داده

گزینه ۴:
‏طراحی سخت‌افزار



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

🟢 توضیح :

‏الگوریتم‌ها برای فشرده‌سازی داده‌ها در برنامه‌نویسی استفاده می‌شوند.

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

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

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

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

حالا بریم سراغ یه فرق اساسی که اغلب تازه‌کارها رو گیج می‌کنه: تفاوت پارامترها با هایپرپارامترها! 🧐

پارامترها در مقابل هایپرپارامترها 🍰

تصور کن می‌خوای یک کیک بپزی. 🎂

مواد لازم (آرد، شکر، تخم مرغ) رو با هم ترکیب می‌کنی. مقدار هر ماده بر اساس تجربه و دستور پخت تنظیم می‌شه.

تنظیمات فر (دمای فر، زمان پخت) رو قبل از اینکه کیک رو داخلش بذاری، مشخص می‌کنی.

در یادگیری ماشین هم همینطوره. مدل دو نوع متغیر داره:

۱. پارامترها (Parameters) 🧠

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

نقش: دانش واقعی مدل رو تشکیل می‌دن.

مثال:

وزن‌ها (Weights) و بایاس‌ها (Biases) در یک شبکه عصبی.

ضرایب (Coefficients) در یک مدل رگرسیون خطی.

این‌ها همون چیزهایی هستن که مدل در حین آموزش تنظیمشون می‌کنه تا تابع هزینه به حداقل برسه.

۲. هایپرپارامترها (Hyperparameters) 🛠

این‌ها متغیرهای بیرونی مدل هستن که ما، به عنوان یک دانشمند داده، قبل از شروع فرآیند آموزش، اون‌ها رو به صورت دستی تنظیم می‌کنیم.

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

مثال:

نرخ یادگیری (Learning Rate) در الگوریتم نزول گرادیان.

تعداد درختان در یک مدل جنگل تصادفی.

تعداد لایه‌های پنهان در یک شبکه عصبی.

خلاصه:

پارامترها مثل مواد کیک هستن که با ترکیبشون، کیک درست می‌شه.

هایپرپارامترها مثل تنظیمات فر هستن که تعیین می‌کنن کیک چطور پخته بشه.

مدل پارامترها رو یاد می‌گیره، ولی تو باید هایپرپارامترها رو بهش بگی تا یاد بگیره! 😉

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


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

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

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


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




  Circuit Breaker
(شکستن مدار)


🔹 ایده اصلی

محافظت از سیستم در برابر شکست‌های پی‌درپی و جلوگیری از اثر دومینو.

⬅️ وقتی یک سرویس یا API خراب میشه و درخواست‌ها پشت سر هم Fail میشن، Circuit Breaker جلوی ارسال درخواست‌های بیشتر رو می‌گیره تا سرویس فرصت بازیابی پیدا کنه.

📌 مثل فیوز برق خونه:

⬅️ اگر جریان زیادی بره → فیوز قطع میشه تا آسیب بیشتری نرسه.



🔹 چرا مهمه؟

⬅️ جلوگیری از فاجعه در سیستم‌های توزیع‌شده
⬅️ کاهش فشار روی سرویس خراب
⬅️ بهبود پایداری و تجربه کاربری



مثال ساده (Python)

import time
import random

class CircuitBreaker:
def __init__(self, failure_threshold, recovery_time):
self.failure_threshold = failure_threshold
self.recovery_time = recovery_time
self.failures = 0
self.last_failure_time = None
self.state = "CLOSED" # CLOSED, OPEN, HALF-OPEN

def call(self, func):
now = time.time()
if self.state == "OPEN":
if now - self.last_failure_time > self.recovery_time:
self.state = "HALF-OPEN"
else:
return " Service unavailable"

try:
result = func()
self.failures = 0
if self.state == "HALF-OPEN":
self.state = "CLOSED"
return result
except Exception as e:
self.failures += 1
self.last_failure_time = now
if self.failures >= self.failure_threshold:
self.state = "OPEN"
return f"⚠️ Failure: {e}"


# مثال: سرویس با احتمال شکست
def unreliable_service():
if random.random() < 0.6:
raise Exception("Service failed!")
return " Service success"

breaker = CircuitBreaker(failure_threshold=3, recovery_time=5)

for i in range(10):
print(breaker.call(unreliable_service))
time.sleep(1)


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

➡️ Microservices → جلوگیری از اثر دومینو وقتی یک سرویس Down میشه
➡️ API Gateway → محدود کردن فشار روی سرویس‌های خارجی
⬅️ سیستم‌های مالی و پرداخت آنلاین → جلوگیری از تراکنش‌های خراب پی‌درپی



🛠️ مزایا

⬅️ افزایش پایداری سیستم
⬅️ کاهش فشار روی سرویس خراب
⬅️ تجربه کاربری بهتر در زمان خرابی



🎯 تشبیه ساده

Circuit Breaker مثل فیوز خانه :

⬅️ اگر جریان برق بیش از حد باشه → فیوز قطع میشه تا همه چیز نسوزه.
⬅️ بعد از مدتی می‌تونه دوباره وصل بشه و سیستم آزمایش کنه که سالمه یا نه.




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

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

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

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


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



تو این پست چند تکنیک کمتر شنیده‌شده ولی خیلی کاربردی در برنامه‌نویسی رو معرفی می‌کنم که می‌تونن هم سرعتت رو بالا ببرن هم کیفیت کدنویسی رو!

Code Smell Detection
این یعنی قبل از این‌که کد خراب بشه، بوی خراب شدنش رو حس کنی!
علائمش:

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



Boy Scout Rule 🏕
قانونش ساده‌ست: *"کدی رو که لمس کردی، بهتر از قبل بذار."*
حتی اگه یه خط کوچیک رو تغییر بدی، فرصت رو غنیمت بدون و کد رو مرتب‌تر، تمیزتر یا خواناتر کن.



Timeboxing
یه تکنیک مدیریت زمان برای برنامه‌نویسی.
یک باگ رو فقط برای مدت مشخصی (مثلاً ۳۰ دقیقه) بررسی کن.
اگه در اون زمان حل نشد، یادداشتش کن و برو سراغ یه کار دیگه. اینطوری توی یک باگ گیر نمی‌کنی و کار پیش میره.



Premature Optimization is the Root of All Evil 🚫
خیلی از تازه‌کارها می‌خوان از همون اول کد رو فوق‌بهینه بنویسن.
این باعث می‌شه پروژه دیرتر جلو بره و کد پیچیده بشه.
اول کاری کن که «کار کنه»، بعد کاری کن که «سریع کار کنه».



Grep-driven Development 🔍
وقتی با کدی بزرگ و غریبه طرفی، مستقیم برو سراغ جستجو (grep یا search).
اسم فانکشن، ارور یا حتی بخشی از متن رو بزن و ردش رو توی کل پروژه دنبال کن.
این روش باعث می‌شه سریع بفهمی چی به چیه، بدون این‌که ساعت‌ها سورس رو بخونی.



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

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

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

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



📖 Tolerant Reader Pattern



🔹 ایده اصلی

وقتی داده (مثلاً JSON یا XML) از یک سرویس خارجی میاد، ممکنه در طول زمان تغییر کنه.

⬅️ اگر مصرف‌کننده (Consumer) ما خیلی سخت‌گیر باشه، با کوچکترین تغییر، سیستم کرش می‌کنه.
⬅️ ولی با Tolerant Reader ما فقط بخش‌های موردنیاز رو می‌خونیم و بقیه رو نادیده می‌گیریم.

به این ترتیب سیستم ما در برابر تغییرات کوچک مقاوم میشه.



مثال ساده (Python)

فرض کن یک سرویس API این داده رو می‌ده:

{
  "id": 101,
  "name": "Alice",
  "email": "alice@example.com",
  "extra_field": "something new"
}
نسخه قدیمی کد ما:

import json

def parse_user(data):
    user = json.loads(data)
    return {
        "id": user["id"],
        "name": user["name"],
        "email": user["email"]
    }

data = '{"id": 101, "name": "Alice", "email": "alice@example.com", "extra_field": "something new"}'
print(parse_user(data))
🔹 اینجا اگر فیلد جدیدی مثل extra_field بیاد → کد ما اصلاً حساسیتی نشون نمی‌ده.
ولی اگر ما همه فیلدها رو به شکل سخت‌گیرانه چک می‌کردیم → کرش می‌کرد.



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

➡️ APIهای نسخه‌دار (Versioned APIs): وقتی یک API فیلدهای جدید اضافه می‌کنه، کلاینت‌های قدیمی همچنان کار کنن.
⬅️ سیستم‌های توزیع‌شده: جایی که Producer و Consumer همیشه Sync نیستن.
➡️ Backward Compatibility: پشتیبانی از نسخه‌های قدیمی داده.



🛠️ مزایا

⬅️ مقاوم در برابر تغییرات کوچک
⬅️ جلوگیری از Down شدن سرویس در تولید (Production)
⬅️ امکان توسعه سریع‌تر API بدون نگرانی از شکستن Clientها



🎯 تشبیه ساده

مثل وقتی که تو یک فرم پر می‌کنی:

⬅️ برایت فقط "نام" و "ایمیل" مهمه.
⬅️ اگر طرف مقابل یک "شماره موبایل" یا "عکس پروفایل" هم فرستاد، تو نادیده می‌گیری و کارت رو انجام می‌دی.



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

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

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

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

نکته : Trend در سری‌های زمانی یعنی گرایش کلی داده‌ها در طول زمان.

🔹 مثال‌ها:

افزایش متوسط دما در طول سال‌ها 🌡

رشد فروش یک محصول جدید 📈

🔹 اهمیت:

ترند (Trend) می‌تونه پیش‌بینی کوتاه‌مدت و بلندمدت رو تحت تاثیر قرار بده.

قبل از آموزش مدل‌های کلاسیک، اغلب باید Trend رو تشخیص بدیم و در صورت لزوم آن را حذف یا مدل‌سازی کنیم.

🔹 روش‌ها:

روش Detrending: حذف خط روند از داده‌ها

روش Modeling Trend: استفاده از مدل‌هایی که خودشان Trend را یاد می‌گیرند (مثل Prophet یا شبکه‌های عصبی)

به زبان ساده: Trend یعنی “داده‌ها کجا دارن حرکت می‌کنن و به سمت چه جهتی هستن” 🧭

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


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

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

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

نکته: Seasonality در سری‌های زمانی یعنی الگوهای تکراری در بازه‌های زمانی مشخص.

🔹 مثال‌ها:

فروش بستنی در تابستان بیشتره و در زمستان کمتر 🍦

مصرف برق در ساعات مشخص شبانه‌روز ⚡️

🔹 اهمیت:

مدل‌ها باید این الگوهای فصلی رو در نظر بگیرن تا پیش‌بینی دقیق باشه.

ابزارهایی مثل SARIMA یا Prophet امکان مدل‌سازی Seasonality رو دارن.

🔹 نکته مهم: اگر Seasonality رو نادیده بگیری، پیش‌بینی‌ها ممکنه به شدت اشتباه باشن.

به زبان ساده: Seasonality یعنی “داده‌ها یه ریتم و آهنگ دارن که باید بهش گوش کنیم” 🎵

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


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

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

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


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

Strangler Fig Pattern 🌱
برای بازنویسی سیستم‌های قدیمی به جای بازنویسی یک‌باره، یک لایه جدید کنارش اضافه می‌کنی و کم‌کم بخش‌های قدیمی رو با جدید جایگزین می‌کنی.
این اسمش از گیاه "انجیرفیگ خفه‌کننده" اومده که دور درخت رشد می‌کنه و به‌تدریج جاش رو می‌گیره.



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

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

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

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


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




📜 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