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

یک تکنیک جالب "Rubber Duck Debugging" است. 🦆

در این روش، وقتی در کد به مشکلی می‌خوری، بدون این‌که فوراً از کسی کمک بخواهی، مشکل و منطق کدت را مرحله‌به‌مرحله برای یک شیء بی‌جان (مثلاً یک اردک پلاستیکی روی میزت) توضیح می‌دهی.

چرا جواب می‌دهد؟
وقتی مجبور می‌شوی مرحله به مرحله برای "یک شنونده" توضیح دهی، ذهنت شفاف‌تر فکر می‌کند و خیلی وقت‌ها خودت وسط توضیح، ایراد را پیدا می‌کنی.

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

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

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

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


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



🧩 Dependency Injection (DI)

(تزریق وابستگی‌ها)



🔹 ایده اصلی

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

📌 یعنی:

⬅️ به جای اینکه کلاس A خودش کلاس B را بسازد، B از بیرون به A داده می‌شود.



🔹 چرا مهمه؟

⬅️ افزایش قابلیت تست (Unit Test راحت‌تر)
⬅️ کاهش Coupling بین کلاس‌ها
⬅️ افزایش انعطاف‌پذیری و نگهداری کد



مثال ساده (Python)

# بدون Dependency Injection
class EmailService:
def send_email(self, msg):
print(f"ارسال ایمیل: {msg}")

class UserController:
def __init__(self):
self.email_service = EmailService() # وابستگی مستقیم

def notify_user(self, msg):
self.email_service.send_email(msg)

# با Dependency Injection
class UserControllerDI:
def __init__(self, email_service):
self.email_service = email_service # وابستگی از بیرون وارد میشه

def notify_user(self, msg):
self.email_service.send_email(msg)


# استفاده
email_service = EmailService()
controller = UserControllerDI(email_service)
controller.notify_user("سلام! DI فعال شد ")


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

➡️ Frameworkهای مدرن مثل Spring (Java)، Angular (TypeScript)
⬅️ سیستم‌هایی که نیاز به Unit Test و Mock کردن وابستگی‌ها دارن
⬅️ پروژه‌های بزرگ با چندین ماژول وابسته به هم



🛠️ مزایا

⬅️ تست‌پذیری بالا
⬅️ انعطاف‌پذیری بیشتر
کاهش Coupling و وابستگی‌های داخلی



🎯 تشبیه ساده

Dependency Injection مثل دادن ابزار به کارگر به جای خرید ابزار خودش 🛠️:

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




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

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

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

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

حالا بریم سراغ یه قدم مهم دیگه در آماده‌سازی داده‌ها: تبدیل کلمات به اعداد! 🔢

مدیریت داده‌های دسته‌ای (Categorical Data) 📊

تصور کن یه جدول داده داری که توی اون یک ستون برای "نوع میوه" وجود داره. 🍎🍊🍌 مقادیر توی این ستون کلمات هستن: "سیب"، "پرتقال"، "موز".

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

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

۱. برچسب‌گذاری عددی (Label Encoding) 🏷

ساده‌ترین راه اینه که به هر دسته یک عدد اختصاص بدیم.

سیب = ۱

پرتقال = ۲

موز = ۳

مشکل این روش: مدل ممکنه فکر کنه که "موز" (۳) از "سیب" (۱) "بزرگ‌تر" یا "مهم‌تر" است، که اینطور نیست. این روش فقط زمانی مناسبه که بین دسته‌ها یک ترتیب طبیعی وجود داشته باشه (مثلاً "کوچک"، "متوسط"، "بزرگ").

۲. رمزگذاری یک-داغ (One-Hot Encoding) 🔥

این روش مطمئن‌تر و رایج‌تره. برای هر دسته، یک ستون جدید درست می‌کنی و اون رو با مقادیر ۰ و ۱ پر می‌کنی. اگر اون سطر به اون دسته تعلق داشته باشه، مقدار ۱ می‌گیره و در غیر این صورت ۰.
نوع میوه سیب پرتقال موز
سیب ۱ ۰ ۰
پرتقال ۰ ۱ ۰
موز ۰ ۰ ۱

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

خلاصه که، تبدیل داده‌های متنی به اعداد، مثل اینه که به مدل‌ت یاد بدی چطور الفبا رو به زبانی که می‌فهمه ترجمه کنه! ✍️

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


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

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

آدرس وبسایت:
https://Tutorial24.ir
This media is not supported in your browser
VIEW IN TELEGRAM
🔵 Eclipse - Explore Menus

🟢 کیفیت : متوسط

🔴 توجه کنید این ویدیو با کیفیت متوسط می باشد. طی روزهای آینده نسخه های متفاوت با کیفیت بالاتر یا کم حجم تر از این نسخه در کانال قرار داده خواهد شد.

🟣 Eclipse

🟢 زبان آموزش: انگلیسی

🟣 دوره آموزش Eclipse


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

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

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

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

از Time Series Forecasting برای پیش‌بینی داده‌های زمانی استفاده می‌شه.

🔹 ویژگی اصلی داده‌های زمانی: ترتیب و وابستگی بین مشاهدات اهمیت داره.
🔹 مثال‌ها: پیش‌بینی فروش، دما، ترافیک، قیمت سهام.

🔹 روش‌ها:

روش ARIMA / SARIMA: مدل‌های کلاسیک برای داده‌های ایستا (stationary).

روش Exponential Smoothing: پیش‌بینی با وزن دادن بیشتر به داده‌های اخیر.

روش LSTM / GRU: شبکه‌های عصبی برای داده‌های غیرخطی و بلندمدت.

روش Prophet (فیسبوک): ابزار ساده برای داده‌های روزانه و فصلی با روندهای مختلف.

نکته مهم: قبل از آموزش، بررسی Trend، Seasonality و Noise داده‌ها خیلی مهمه.

به زبان ساده: Time Series Forecasting یعنی “با نگاه به گذشته، آینده رو پیش‌بینی کنیم 📈.”

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


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

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

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

نکته: LSTM (Long Short-Term Memory) شبکه‌ای عصبی برای سری‌های زمانی غیرخطی و طولانیه.

🔹 ویژگی‌ها:

می‌تونه وابستگی بلندمدت بین مشاهدات رو یاد بگیره

مناسب برای داده‌های غیرخطی و پیچیده (مثل قیمت سهام یا متن)

از مشکل Vanishing Gradient در RNNهای ساده جلوگیری می‌کنه

🔹 مزایا:

پیش‌بینی دقیق‌تر سری‌های زمانی طولانی

توانایی یادگیری الگوهای پیچیده و دوره‌ای

کاربرد در Forecasting، NLP و تشخیص ناهنجاری

به زبان ساده: LSTM مثل یک “حافظه بلندمدت” برای مدل هست که اتفاقات گذشته‌ی مهم رو فراموش نمی‌کنه 🧠

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


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

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

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


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



🚦 Rate Limiting
(محدودسازی نرخ درخواست‌ها)


Rate limiting یعنی محدود کردن تعداد درخواست‌هایی که یک کاربر یا سرویس می‌تونه توی یک بازه زمانی مشخص ارسال کنه.



📌 چرا مهمه؟

* محافظت از سرور → جلوگیری از overload یا سقوط سرور.
* جلوگیری از سوءاستفاده → مثل brute force یا spam.
* مدیریت منابع → تضمین اینکه همه کاربران عادلانه سرویس بگیرن.
* امنیت → کاهش احتمال حملات DDoS.



مثال ساده

فرض کن می‌خوای یک API فقط اجازه بده هر کاربر ۵ بار در دقیقه درخواست بفرسته:

import time

requests = {}

def rate_limited(user_id):
now = time.time()
window = 60 # 60 ثانیه
limit = 5 # حداکثر 5 درخواست

if user_id not in requests:
requests[user_id] = []

# حذف درخواست‌های قدیمی‌تر از یک دقیقه
requests[user_id] = [t for t in requests[user_id] if now - t < window]

if len(requests[user_id]) >= limit:
return " Too many requests, please wait!"

requests[user_id].append(now)
return " Request allowed"

print(rate_limited("user1"))
اینجا هر کاربر فقط ۵ بار توی یک دقیقه می‌تونه درخواست بده.



الگوریتم‌های رایج Rate Limiting

* Fixed Window → یک بازه زمانی مشخص (مثلاً ۵ دقیقه).
* Sliding Window → بازه متحرک دقیق‌تر (درجه انعطاف بیشتر).
* Token Bucket → کاربر تعداد محدودی "توکن" داره، با هر درخواست یکی مصرف میشه.
* Leaky Bucket → درخواست‌ها مثل آب از سطل با سرعت ثابت خارج میشن.



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

* APIها → جلوگیری از overload و abuse.
* Login System → جلوگیری از brute force.
* وب‌سایت‌ها → جلوگیری از ربات‌ها.
* شبکه‌های اجتماعی → محدودیت در ارسال پیام/پست.



⚠️ چالش‌ها:

* شناسایی کاربر (بر اساس IP یا Token؟).
* کاربران پشت NAT یا Proxy → چند نفر ممکنه یک IP مشترک داشته باشن.
* تعادل بین کارایی و امنیت → نباید خیلی سخت‌گیرانه باشه.



👉 تشبیه ساده:
Rate limiting مثل چراغ قرمز سر چهارراه 🚦
اگه همه ماشین‌ها هم‌زمان راه بیفتن → ترافیک قفل میشه.
ولی با محدودیت عبور، جریان روان و کنترل‌شده پیش میره.



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

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

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

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

🟣 موضوع : ‏الگوهای طراحی (Design Patterns) و برنامه‌نویسی تابعی (Functional Programming) در جاوا اسکریپت - مزایای Composition: خوانایی، قابلیت استفاده مجدد و تست‌پذیری

نکته :

‏یادت باشه، هدف از Composition اینه که کدت تمیز، قابل استفاده مجدد و قابل تست باشه. مثل خونه‌ت که مرتب و منظمه! 🏠


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

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

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

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

کاهش ابعاد (Dimensionality Reduction) می‌تونه هم سرعت مدل رو بیشتر کنه و هم دقت رو.

🔹 وقتی تعداد ویژگی‌ها (Features) خیلی زیاد باشه، مدل‌ها دچار نفرین ابعاد (Curse of Dimensionality) می‌شن:

سرعت آموزش پایین میاد

احتمال Overfitting زیاد میشه

پیدا کردن الگوهای واقعی سخت‌تر میشه

🔹 راهکارها:

راهکار PCA (Principal Component Analysis): ترکیب خطی ویژگی‌ها برای ایجاد ویژگی‌های جدید و کم‌تعداد.

راهکار t-SNE و UMAP: بیشتر برای Visualization و نمایش داده‌های پیچیده در 2D یا 3D استفاده می‌شن.

راهکار Autoencoders: کاهش بعد غیرخطی با استفاده از شبکه‌های عصبی.

به زبان ساده: وقتی ویژگی‌ها خیلی زیادن، همه رو نگه ندار! بعضی‌هاشون رو ترکیب کن یا حذف کن تا مدل سبک‌تر و باهوش‌تر بشه.

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


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

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

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


تاریخچه رگرسیون خطی یه داستان باحاله که نشون می‌ده چطور یه ایده از زیست‌شناسی 🧬 به یکی از ابزارهای اصلی آمار و داده‌کاوی تبدیل شد.

ماجرا از اونجایی شروع شد که یه دانشمند انگلیسی به اسم فرانسیس گالتون داشت روی قد پدر و پسرها مطالعه می‌کرد. 🧑‍🦳➡️👦 اون متوجه شد که قد فرزندانِ پدرانِ خیلی قدبلند، معمولاً به سمت میانگین قد جامعه "بازگشت" می‌کنه. 🤔 یعنی شاید از پدرشون کوتاه‌تر باشن. گالتون این پدیده رو "رگرسیون" (به معنی بازگشت) نامید و همین واژه روی این مدل موندگار شد.

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

در واقع، گالتون مفهوم رو معرفی کرد و گاوس و پیرسون ابزارهای ریاضی 🧮 لازم برای عملی کردنش رو فراهم کردند. از اون موقع تا حالا، این مدل کلی پیشرفت کرده و امروزه با کامپیوترها 💻 به راحتی می‌تونیم پیچیده‌ترین مدل‌های رگرسیون رو تحلیل کنیم و ازش در زمینه‌های مختلف، از اقتصاد و پزشکی 📈🏥 گرفته تا هوش مصنوعی، استفاده کنیم.

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


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

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

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


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



Rate Limiting



🎯 تعریف

Rate Limiting یعنی محدود کردن تعداد درخواست‌هایی که یک کاربر یا سرویس می‌تونه در بازه‌ی زمانی مشخص به سیستم بفرسته.

مثلاً:

⬅️ یک کاربر فقط می‌تونه ۱۰۰ درخواست در دقیقه بفرسته.
⬅️ اگر بیشتر بشه → یا خطا می‌گیره (429 Too Many Requests) یا درخواست‌ها رد می‌شن.



چرا خوبه؟

⬅️ جلوگیری از سوءاستفاده (abuse) یا اسپم.
⬅️ محافظت در برابر حملات DDoS.
⬅️ مدیریت منصفانه منابع (fair usage).
⬅️ کنترل هزینه در سرویس‌های ابری (که هزینه بر اساس درخواست محاسبه میشه).




🐍 مثال ساده با Python (Token Bucket Algorithm)

بسیار عالی 🚦
بریم سراغ Rate Limiting



🎯 تعریف

Rate Limiting یعنی محدود کردن تعداد درخواست‌هایی که یک کاربر یا سرویس می‌تونه در بازه‌ی زمانی مشخص به سیستم بفرسته.

مثلاً:

⬅️ یک کاربر فقط می‌تونه ۱۰۰ درخواست در دقیقه بفرسته.
⬅️ اگر بیشتر بشه → یا خطا می‌گیره (429 Too Many Requests) یا درخواست‌ها رد می‌شن.



چرا خوبه؟

⬅️ جلوگیری از سوءاستفاده (abuse) یا اسپم.
⬅️ محافظت در برابر حملات DDoS.
⬅️ مدیریت منصفانه منابع (fair usage).
⬅️ کنترل هزینه در سرویس‌های ابری (که هزینه بر اساس درخواست محاسبه میشه).




🐍 مثال ساده با Python (Token Bucket Algorithm)

import time

class RateLimiter:
def __init__(self, rate, per_seconds):
self.rate = rate # حداکثر تعداد درخواست
self.per_seconds = per_seconds # در این بازه زمانی
self.allowance = rate
self.last_check = time.time()

def allow_request(self):
current = time.time()
elapsed = current - self.last_check
self.last_check = current

# پر کردن مجدد توکن‌ها با گذر زمان
self.allowance += elapsed * (self.rate / self.per_seconds)
if self.allowance > self.rate:
self.allowance = self.rate

if self.allowance < 1:
return False # رد کردن درخواست
else:
self.allowance -= 1
return True


# تست
limiter = RateLimiter(rate=5, per_seconds=10) # حداکثر ۵ درخواست در ۱۰ ثانیه

for i in range(10):
if limiter.allow_request():
print(f"Request {i} allowed")
else:
print(f"Request {i} blocked")
time.sleep(1)

💡 مزایا:

⬅️ کنترل مصرف منابع (CPU, Memory, Network).
⬅️ امنیت بیشتر در برابر حملات.
⬅️ ایجاد تجربه کاربری بهتر (سیستم پایدارتر باقی می‌مونه).
⬅️ یکی از پایه‌های اصلی در طراحی API Gateway ها.



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

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

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

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


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



CQRS (Command Query Responsibility Segregation) 📑


خواندن (Query) و نوشتن (Command) داده‌ها رو جدا می‌کنه.
اینطوری می‌تونی خوندن داده‌ها رو سریع و سبک کنی، و نوشتن داده‌ها رو دقیق و امن.
خیلی برای سیستم‌های بزرگ مقیاس (enterprise) استفاده میشه.


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

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

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

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

🟣 موضوع : ‏مدیریت استایل‌ها در پروژه‌های بزرگ

نکته :

‏از یه سیستم توکن (Design Tokens) برای رنگ‌ها، فونت‌ها و فاصله‌ها استفاده کن. اینطوری کل پروژه یکدست می‌مونه. 🎨


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

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

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

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

از SARIMA برای مدل‌سازی سری‌های زمانی فصلی استفاده می‌شه.

🔹 SARIMA = ARIMA + Seasonal Components

AR, I, MA مثل ARIMA کلاسیک

Seasonal AR, Seasonal I, Seasonal MA برای الگوهای تکراری فصلی

🔹 مثال: پیش‌بینی فروش ماهانه محصول که هر سال در تابستان افزایش داره ☀️📈

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

به زبان ساده: SARIMA مثل ARIMA با “چشمی که الگوهای فصلی رو هم می‌بینه” 👀

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


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

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

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


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




🌱 Strangler Fig Pattern



🔹 ایده اصلی

وقتی می‌خوای یک سیستم قدیمی (Legacy System) رو بازنویسی کنی، خیلی پرریسکه که همه چیز رو یک‌باره تغییر بدی (Big Bang Rewrite).

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



مراحل کار

1. درخواست‌های کاربر اول به یک Facade (دروازه) می‌رن.
2. این Facade تصمیم می‌گیره هر درخواست به سیستم قدیمی بره یا به ماژول جدید.
3. به مرور ماژول‌های جدید اضافه می‌شن و جایگزین بخش‌های قدیمی می‌شن.
4. در نهایت سیستم قدیمی کامل حذف می‌شه.



مثال ساده (Python)

class LegacySystem:
def process(self, request):
return f"📟 Legacy response for {request}"


class NewSystem:
def process(self, request):
return f"🚀 New response for {request}"


class StranglerFacade:
def __init__(self):
self.legacy = LegacySystem()
self.new = NewSystem()

def handle_request(self, request):
# به مرور شرط‌ها تغییر می‌کنن
if request.startswith("new_"):
return self.new.process(request)
else:
return self.legacy.process(request)


# تست
facade = StranglerFacade()
print(facade.handle_request("old_feature")) # 📟 Legacy response for old_feature
print(facade.handle_request("new_feature")) # 🚀 New response for new_feature


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

⬅️ مهاجرت سیستم بانکی قدیمی به معماری مایکروسرویس
⬅️ انتقال اپلیکیشن‌های قدیمی به Cloud بدون خاموش کردن سیستم
➡️ Refactoring تدریجی سیستم‌های بزرگ



🛠️ مزایا

⬅️ مهاجرت بدون ریسک بالا
⬅️ سیستم همیشه قابل استفاده می‌مونه (Downtime نزدیک به صفر)
⬅️ امکان تست بخش‌های جدید در کنار بخش‌های قدیمی



🎯 تشبیه ساده

مثل بازسازی یک خونه قدیمی 🏚️ → دیوارها رو یکی‌یکی تعمیر می‌کنی و خونه جدید رو می‌سازی، در حالی که هنوز می‌تونی توی خونه زندگی کنی.



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

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

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

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

🟣 موضوع : ‏مقدمه‌ای بر ساختار پروژه در React

نکته :

‏فایل index.js نقطه شروع گشت و گذارته؛ از همینجا همه چیز شروع میشه! 🚀


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

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

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

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


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




🚦 Rate Limiting

(محدودسازی نرخ درخواست‌ها)


🔹 ایده اصلی

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

⬅️ یک کاربر فقط می‌تونه ۱۰ درخواست در دقیقه بفرسته.
⬅️ یا هر IP نهایتاً ۱۰۰۰ درخواست در روز داشته باشه.



🔹 چرا مهمه؟

⬅️ جلوگیری از سوءاستفاده (DoS, Brute Force, Spam)
⬅️ کنترل هزینه‌های سرور و API
⬅️ ایجاد عدالت بین کاربران (یکی همه منابع رو نبلعه 😅)



مثال ساده (Python)

import time

class RateLimiter:
def __init__(self, max_calls, period):
self.max_calls = max_calls
self.period = period
self.calls = []

def allow(self):
now = time.time()
# پاک کردن درخواست‌های قدیمی‌تر از period
self.calls = [t for t in self.calls if t > now - self.period]

if len(self.calls) < self.max_calls:
self.calls.append(now)
return True
return False


# مثال: حداکثر 3 درخواست در 10 ثانیه
limiter = RateLimiter(3, 10)

for i in range(5):
if limiter.allow():
print(f" درخواست {i+1} پذیرفته شد")
else:
print(f" درخواست {i+1} رد شد")
time.sleep(2)


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

➡️ APIهای عمومی (مثل GitHub API → محدودیت درخواست‌ها در ساعت)
⬅️ سیستم لاگین → جلوگیری از Brute Force (مثلاً نهایتاً ۵ بار تلاش در ۱ دقیقه)
⬅️ وب‌سایت‌ها برای جلوگیری از اسپم در فرم‌ها یا چت‌ها
⬅️ پرداخت آنلاین → محدود کردن تعداد تراکنش‌های یک کارت در روز



🛠️ مزایا

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



⚠️ چالش‌ها

⬅️ پیاده‌سازی توزیع‌شده (در چند سرور مختلف) سخت‌تره
⬅️ ممکنه باعث نارضایتی کاربران واقعی بشه (اگه بیش از حد سخت‌گیرانه باشه)



🎯 تشبیه ساده

Rate Limiting مثل چراغ قرمز سر چهارراه 🚦 هست:

⬅️ حتی اگه همه بخوان رد شن، چراغ فقط به تعداد مشخصی اجازه میده.
⬅️ بقیه باید صبر کنن تا دوباره نوبتشون بشه.



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

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

آدرس کانال اصلی :
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


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


بریم سراغ Circuit Breaker Pattern 🔌



🎯 تعریف Circuit Breaker

وقتی برنامه شما به یک سرویس خارجی (مثل API، دیتابیس یا سرویس پرداخت) وابسته است، اگر اون سرویس خراب بشه یا کند بشه، ممکنه کل سیستم شما هم قفل کنه.
Circuit Breaker مثل یک فیوز برق عمل می‌کنه:

* اگر درخواست‌ها پشت سر هم fail بشن، ارتباط رو موقتاً قطع می‌کنه.
* بعد از مدتی دوباره تست می‌کنه که سرویس درست شده یا نه.
* اگر درست بود، دوباره اتصال برقرار میشه.



حالت‌های Circuit Breaker

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



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

import time
import random

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

def call(self, func, *args, **kwargs):
# اگر فیوز قطع شده باشه
if self.state == "OPEN":
if time.time() - self.last_failure_time > self.recovery_time:
self.state = "HALF_OPEN"
else:
raise Exception("Circuit is OPEN! Requests are blocked.")

try:
result = func(*args, **kwargs)
self.failure_count = 0
self.state = "CLOSED"
return result
except Exception as e:
self.failure_count += 1
self.last_failure_time = time.time()
if self.failure_count >= self.failure_threshold:
self.state = "OPEN"
raise e

# شبیه‌سازی یک سرویس خارجی که گاهی خراب میشه
def unstable_service():
if random.random() < 0.5: # 50 درصد احتمال خطا
raise Exception("Service failed!")
return "Success!"

cb = CircuitBreaker(failure_threshold=2, recovery_time=3)

for i in range(10):
try:
print(cb.call(unstable_service))
except Exception as e:
print(f"Request {i}: {e}")
time.sleep(1)


💡 مزایا:

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



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

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

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

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


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





📜 Event Sourcing

(ذخیره‌سازی رویدادها)**


به جای ذخیره وضعیت نهایی، کل رویدادهایی که منجر به اون وضعیت شدن ذخیره می‌شن.
بعدش هر وقت بخوای وضعیت فعلی رو به‌دست بیاری، فقط کافیه رویدادها رو دوباره "پخش" (Replay) کنی.



📌 چرا مهمه؟

⬅️ همه تغییرات سیستم ثبت میشن → می‌تونی گذشته رو بازسازی کنی.
⬅️ برای سیستم‌های حساس (مثل مالی) فوق‌العاده کاربردیه.
⬅️ امکان Debug، Auditing و حتی Machine Learning روی تاریخچه واقعی وجود داره.



مثال ساده (Python)

# لیست رویدادها
events = [
("deposit", 100),
("withdraw", 20),
("deposit", 50)
]

# وضعیت رو از روی رویدادها محاسبه می‌کنیم
balance = 0
for action, amount in events:
if action == "deposit":
balance += amount
elif action == "withdraw":
balance -= amount

print("Balance:", balance) # نتیجه: 130
اینجا ما وضعیت نهایی (130) رو ذخیره نکردیم، بلکه رویدادهای مسیر رو نگه داشتیم.



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

⬅️ سیستم‌های مالی و بانکی 💰 (هیچ تغییر نباید گم بشه)
⬅️ سیستم‌های حسابداری و ERP
⬅️ پلتفرم‌های Collaborative (مثل Google Docs) که تغییرات مرحله‌ای ذخیره میشن
⬅️ DDD (Domain-Driven Design) برای مدل‌سازی درست دامنه



🛠️ مزایا

⬅️ تاریخچه کامل و دقیق داری (Auditing)
⬅️ امکان Undo/Redo ساده
⬅️ مقیاس‌پذیری بهتر برای Queryها (می‌تونی Projection درست کنی)



⚠️ چالش‌ها

⬅️ ذخیره همه رویدادها می‌تونه حجم داده رو زیاد کنه
⬅️ بازسازی وضعیت ممکنه زمان‌بر باشه (برای همین معمولاً Snapshot هم ذخیره میشه)
⬅️ طراحی و پیاده‌سازی پیچیده‌تر از CRUD ساده است



👉 تشبیه ساده

Event Sourcing مثل جعبه سیاه هواپیما ✈️ هست:

⬅️ فقط نمیگه "الان هواپیما سقوط کرد"
⬅️ بلکه تک‌تک لحظه‌ها رو ذخیره می‌کنه تا بفهمی چی شد که به این نقطه رسید.



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

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

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

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


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



Feature Toggle (Feature Flags) 🎚️



🎯 تعریف

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

راه‌حل:
Feature Toggle → یعنی قابلیت‌ها رو پشت یک "پرچم" (flag) می‌ذاری و با تنظیمات ساده، روشن یا خاموشش می‌کنی.



چرا خوبه؟

* می‌تونی قابلیت جدید رو اول روی گروه کوچکی از کاربرا تست کنی (A/B Testing).
* در صورت وجود باگ، سریع بدون انتشار نسخه جدید غیرفعالش می‌کنی.
* کمک می‌کنه توسعه به صورت Continuous Delivery باشه.




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

# سیستم مدیریت Feature Flags
FEATURE_FLAGS = {
"new_checkout": True,
"dark_mode": False
}

def checkout(user):
if FEATURE_FLAGS["new_checkout"]:
return f"{user} is using the NEW checkout "
else:
return f"{user} is using the OLD checkout 🛒"

def ui_theme(user):
if FEATURE_FLAGS["dark_mode"]:
return f"{user} sees DARK MODE 🌙"
else:
return f"{user} sees LIGHT MODE ☀️"


# استفاده
print(checkout("Ali"))
print(ui_theme("Sara"))


💡 مزایا:

* انعطاف بالا → بدون انتشار دوباره می‌تونی فیچر رو کنترل کنی.
* کاهش ریسک → در صورت بروز مشکل، سریع خاموشش می‌کنی.
* مناسب برای A/B Testing، قابلیت‌های آزمایشی (Beta) و انتشار تدریجی.



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

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

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

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