آموزش C# و .Net
1.56K subscribers
442 photos
329 videos
19 files
2.83K links
تعرفه تبلیغات :
https://t.me/+w-o6dHW5O31jMWNk

آیدی ادمین:
@ma_limbs
Download Telegram
💠 عضو جامع ترین کانال های توسعه فردی، روانشناسی و موفقیت شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

شامل موضوعات آموزشی زیر:

توسعه و رشد فردی
افزایش ثروت
هدف گذاری و مدیریت زمان
مهارت های اجتماعی، ارتباطی و فن بیان
روانشناسی و خودیاری
موفقیت
عادات موثر
سلامت و تغذیه سالم
موفقیت شغلی
عبارات تاکیدی
مدیریت اضطراب و خشم
روان درمانی CBT و ACT
شخصیت شناسی و تحلیل روانشناسی
انگیزشی
کودک درون
تکنیک های NLP
یوگا
افزایش حافظه
مدیتیشن
موفقیت تحصیلی
مطالعه موثر
افزایش اعتماد به نفس
افزایش تمرکز
تفکر مثبت
افزایش خلاقیت
نقل قول های انگیزشی

با کلیک بر روی لینک زیر عضو تمامی این کانال ها شوید:

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0

➡️ https://t.me/addlist/AX8uaLK6gE1jNzg0
🔵 نکته یادگیری ماشین

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

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

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

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

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


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

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


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

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



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

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

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

آدرس وبسایت:
https://Tutorial24.ir
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین‌ و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:

🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0


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





📜 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


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



🧩 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
🔵 کوییز #HTML

🟣 موضوع : ‏طراحی صفحات فرود (Landing Pages)

🟢 سوال :

‏برای ایجاد فرم‌های جمع‌آوری اطلاعات کاربران (مانند فرم ثبت‌نام یا درخواست دمو) در صفحه فرود، از کدام تگ HTML اصلی استفاده می‌شود؟

گزینه ۱:
`<button>`

گزینه ۲:
`<input type="submit">`

گزینه ۳:
`<form>`

گزینه ۴:
`<a>`



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

🟢 توضیح :

‏تگ `<form>` برای ایجاد فرم HTML استفاده می‌شود که شامل عناصر مختلف ورودی برای جمع‌آوری اطلاعات کاربران است.

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

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

آدرس کانال اصلی :
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
🔵 دوست داری برنامه نویس حرفه ای بشی یا مهارت های کامپیوتری خودت رو افزایش بدی؟ با عضویت در لیست تلگرامی زیر در بی نظیر ترین کانال های برنامه نویسی ما عضو شوید:

🟢 پایتون، هوش مصنوعی، یادگیری ماشین، سی ++، سی شارپ، دات نت، نود جی اس، جاوا اسکریپت، شبکه، علم داده، پایگاه داده، sql، nosql ، مهارت های ICDL، سیستم عامل، لینوکس، فتوشاپ، گرافیک، اندروید، جاوا، ساخت اپلیکیشن موبایل، ری اکت، جی کوئری، php و laravel، دروس رشته کامپیوتر، کنکور کامپیوتر و ...

عضو لیست جامع شوید:

https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
https://t.me/addlist/_UjG99eD_E4zYzhk
🔵 نکته یادگیری ماشین

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

رگرسیون خطی در مقابل رگرسیون لجستیک

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

اما رگرسیون لجستیک برای پیش‌بینی یک دسته یا طبقه‌بندی استفاده می‌شه. 🎯 مثلاً اینکه آیا یک مشتری محصولی رو می‌خره یا نه (بله/خیر)، یا اینکه یک ایمیل اسپم هست یا نه. 🗑 به جای یک خط مستقیم، از یک منحنی S-شکل استفاده می‌کنه تا احتمال یک اتفاق رو پیش‌بینی کنه.

رگرسیون خطی در مقابل رگرسیون پلی‌نومیال

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

اما اگه رابطه بین داده‌ها صاف و خطی نباشه، باید از رگرسیون پلی‌نومیال (چند جمله‌ای) استفاده کنیم. این مدل از یک منحنی خمیده 🎢 برای مدل‌سازی داده‌ها استفاده می‌کنه و می‌تونه الگوهای پیچیده‌تر رو تشخیص بده. مثلاً رابطه‌ی بین سن و توانایی ورزشی در انسان، اول افزایش پیدا می‌کنه و بعد کاهش پیدا می‌کنه. 🏃‍♂️🚶‍♀️

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


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

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

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

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

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

🟣 Eclipse

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

🟣 دوره آموزش Eclipse


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

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

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

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

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏ذخیره‌سازی فایل (File-Based Databases)

نکته 1:
‏پایگاه داده‌های فایل-محور (File-Based Databases) در SQLite تمامی ساختار شمای داده، اندیس‌ها و محتوای جدول‌ها را در یک فایل دیسکی منفرد ذخیره می‌کنند.

نکته 2:
‏نحوه ایجاد این پایگاه داده‌ها از طریق ارائه مسیر فیزیکی فایل در سیستم فایل محلی به API اتصال SQLite در زمان اجرای برنامه تعیین می‌شود.

نکته 3:
‏ویژگی اصلی این روش ذخیره‌سازی، تضمین دوام داده‌ها (Data Durability) است؛ به این معنا که داده‌ها حتی پس از قطع برق یا خاموشی سیستم، بر روی دیسک باقی می‌مانند.

نکته 4:
‏مکانیزم تراکنش‌های ACID در این نوع پایگاه داده‌ها از طریق استفاده از فایل ژورنال (Journal File) مجزا برای ثبت تغییرات و امکان بازیابی پس از خطا، پیاده‌سازی می‌شود.

نکته 5:
‏قابلیت حمل بالا (High Portability) فایل پایگاه داده، امکان انتقال آسان پایگاه داده بین پلتفرم‌ها و سیستم‌عامل‌های مختلف را با سادگی کپی کردن فایل فراهم می‌آورد.

نکته 6:
‏عملکرد این پایگاه داده‌ها به طور مستقیم به کارایی سیستم فایل و سرعت عملیات ورودی/خروجی دیسک (Disk I/O) سیستم میزبان بستگی دارد.

نکته 7:
‏برای مدیریت دسترسی همزمان (Concurrency)، SQLite از مکانیزم‌های قفل‌گذاری سطح فایل یا WAL (Write-Ahead Logging) برای کنترل دسترسی فرآیندهای مختلف به فایل استفاده می‌کند.

نکته 8:
‏ساختار فایل پایگاه داده به صورت صفحات با اندازه ثابت سازماندهی شده است که توسط ماژول Pager مدیریت می‌شود و این صفحات بین حافظه کش و دیسک جابه‌جا می‌گردند.

نکته 9:
‏اندازه فیزیکی فایل پایگاه داده فایل-محور توسط حجم داده‌های ذخیره‌شده و نیز مقدار فضای خالی (Free Space) که به دلیل حذف‌ها در فایل باقی می‌ماند، تعیین می‌شود.

نکته 10:
‏استفاده از این روش در برنامه‌های کاربردی دسکتاپ و موبایل برای ذخیره‌سازی داده‌های حیاتی و بلندمدت که نیاز به پایداری فراتر از چرخه حیات برنامه دارند، مناسب است.


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

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

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

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

بریم سراغ یه فرق اساسی که توی کار مدل‌ها وجود داره. 🤔

دسته‌بندی (Classification) در مقابل رگرسیون (Regression) 🎯

خیلی از مدل‌های یادگیری ماشین، زیرمجموعه "یادگیری نظارت‌شده" (Supervised Learning) هستن. اما این مدل‌ها خودشون به دو گروه اصلی تقسیم می‌شن، بسته به اینکه چه نوع جوابی به ما می‌دن.

دسته‌بندی (Classification)

اینجا مدل به سؤالاتی جواب می‌ده که خروجی‌شون یک دسته‌بندی یا برچسب مشخصه. مثل یک آزمون چهارگزینه‌ای عمل می‌کنه که باید یکی از گزینه‌های موجود رو انتخاب کنه. 📝

آیا این ایمیل اسپم است یا نه؟ (دو دسته‌بندی)

این عکس گربه است، سگ است یا پرنده؟ (سه دسته‌بندی)

آیا تراکنش قانونی است یا تقلبی؟ (دو دسته‌بندی)

خروجی مدل یک دسته‌بندی مشخص و گسسته (Discrete) است.

رگرسیون (Regression)

اینجا مدل به سؤالاتی جواب می‌ده که خروجی‌شون یک مقدار عددی پیوسته است. مثل یک پاسخ تشریحی عمل می‌کنه که جواب می‌تونه هر عددی باشه. 📈

قیمت این خانه چند خواهد بود؟ (می‌تواند هر عددی باشد، مثلاً $250,500)

دمای هوا فردا چند درجه است؟ (می‌تواند 15.3 درجه باشد)

تعداد فروش در ماه آینده چقدر است؟ (می‌تواند 1024.5 عدد باشد)

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

خلاصه:

دسته‌بندی یعنی پیش‌بینی یک نوع یا دسته.

رگرسیون یعنی پیش‌بینی یک مقدار یا عدد.

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

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


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

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

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


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



🔄 Idempotency در برنامه‌نویسی


🔹 ایده اصلی

یک عملیات Idempotent یعنی انجام چندباره‌ی اون، نتیجه‌ای بیشتر از یک بار انجام دادن نداره.

📌 مثال روزمره:

⬅️ زدن کلید روشن کردن چراغ → اگر چراغ خاموش باشه روشن میشه.
⬅️ اگر دوباره بزنی، همچنان روشن می‌مونه. (تأثیر اضافه نداره)



🔹 چرا مهمه؟

در سیستم‌های توزیع‌شده و APIها، ممکنه یک درخواست به دلیل مشکل شبکه چند بار تکرار بشه.
اگر عملیات Idempotent نباشه، نتایج خراب میشن.

مثلاً:

⬅️ درخواست "پرداخت" دوبار انجام بشه → 😱 دو بار پول کم میشه!
⬅️ ولی درخواست "لغو سفارش" اگر Idempotent باشه، حتی با چند بار تکرار هم فقط یک بار لغو میشه.



مثال ساده (Python)

# عملیات غیر Idempotent (هر بار تغییر می‌کنه)
count = 0

def increment():
global count
count += 1
return count

print(increment()) # 1
print(increment()) # 2 (نتیجه فرق کرد!)


# عملیات Idempotent
users = set()

def add_user(user):
users.add(user) # اگر کاربر وجود داشته باشه دوباره اضافه نمیشه
return users

print(add_user("Ali")) # {"Ali"}
print(add_user("Ali")) # {"Ali"} (همون نتیجه قبلی)

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

➡️ APIهای بانکی و پرداخت 💳 → جلوگیری از دوبار برداشت پول
➡️ REST API (PUT vs POST)

* POST معمولاً Idempotent نیست (هر بار یک رکورد جدید می‌سازه)
* PUT معمولاً Idempotent هست (یک منبع خاص رو جایگزین می‌کنه)
➡️ Microservices Retry Logic → وقتی درخواست‌ها دوباره فرستاده میشن، جلوی خرابی گرفته میشه



🛠️ مزایا

⬅️ افزایش اطمینان در سیستم‌های توزیع‌شده
⬅️ راحت‌تر شدن Retry و Recovery
⬅️ جلوگیری از Duplicate شدن داده یا عملیات



🎯 تشبیه ساده

Idempotency مثل کلید آسانسوره 🛗:

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



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

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

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

آدرس وبسایت:
https://Tutorial24.ir
🔵 با عضویت در لیست تلگرامی جامع آموزش زبان زیر عضو بی نظیرترین‌ و کامل ترین مجموعه آموزش زبان انگلیسی تلگرامی شوید:

🟢 پادکست، کوییز، گرامر، آیلتس، تافل، ویدیو، آموزش زبان به کودکان، اصطلاحات انگلیسی، زبان کنکور و ... :

https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
https://t.me/addlist/hK74E7joz0ZiOGY0
🔵 نکته یادگیری ماشین

قبل از Clustering، کاهش بعد داده‌ها می‌تونه کیفیت خوشه‌بندی رو بهتر کنه.

🔹 وقتی داده‌ها خیلی زیاد باشن، خوشه‌بندی مستقیم سخت و نویزی می‌شه.
🔹 با روش‌هایی مثل PCA، t-SNE یا UMAP می‌تونی داده‌ها رو به ابعاد کمتر منتقل کنی و ساختار اصلی رو حفظ کنی.

مزایا:

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

نویز و داده‌های کم‌اهمیت کاهش پیدا می‌کنن.

خوشه‌ها واضح‌تر و قابل تفسیرتر می‌شن.

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

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


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

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


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




🌳 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
🔵 کوییز #سی_شارپ

🟣 موضوع : ‏استفاده از Switch Expression در نسخه‌های جدید

🟢 سوال :

‏کدام یک از موارد زیر یک عیب استفاده از Switch Expression است؟

گزینه ۱:
‏کاهش کارایی

گزینه ۲:
‏افزایش حجم کد

گزینه ۳:
‏نیاز به نسخه‌های جدید C#

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

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

🟢 توضیح :

‏Switch Expression فقط در نسخه‌های جدید C# قابل استفاده است.

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

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

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

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

یادگیری نیمه‌نظارتی (Semi-Supervised Learning) زمانی به درد می‌خوره که داده‌ی برچسب‌دار کم ولی داده‌ی بدون برچسب زیاد باشه.

🔹 در دنیای واقعی، برچسب‌زدن داده (Labeling) گرون و زمان‌بره (مثلاً برچسب‌زدن تصاویر پزشکی).
🔹 در این حالت می‌تونی از مقدار کم داده‌ی برچسب‌دار + مقدار زیاد داده‌ی بدون برچسب برای بهبود مدل استفاده کنی.

روش‌ها:

روش Self-training: مدل اولیه روی داده‌های برچسب‌دار آموزش می‌بینه، بعد خودش داده‌های بدون برچسب رو برچسب‌گذاری می‌کنه و دوباره آموزش می‌بینه.

روش Consistency Regularization: مدل رو مجبور می‌کنن روی داده‌های مشابه (با نویز یا تغییرات کوچک) خروجی مشابه بده.

روش Graph-based methods: استفاده از گراف برای پخش کردن برچسب‌ها بین داده‌های مشابه.

به زبان ساده: Semi-Supervised یعنی “از داده‌های بی‌صاحب هم یاد بگیر!” 😅

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


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

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

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