DotNet | دات نت
1.11K subscribers
663 photos
229 videos
484 files
703 links
تو این روزا بهتره که همیشه علم خودمون رو بالا ببریم و بتونیم با سریع ترین راه ممکن خودمونو بروز نگه داریم.
- سعی کنیم از کمترین امکانات بیشترین بهره رو ببریم
منتظرت هستیم😉
دنیا رو جای بهتری برای یادگیری کنیم 🌹
#course #book


🆔 @dotnetcode
Download Telegram
در ادامه یک راهنمای کامل و بهبود یافته برای استفاده رایگان از Cursor ارائه شده است. لطفاً مراحل زیر را به ترتیب با دقت دنبال کنید:


---

گام ۱: خروج از حساب کاربری Cursor

1. خروج از حساب (Logout):
ابتدا از حساب کاربری Cursor خود خارج شوید. این کار تضمین می‌کند که تنظیمات قبلی یا اطلاعات ورود مانع روند ثبت‌نام جدید نشوند.


2. راه‌اندازی مجدد برنامه:
پس از خروج، برنامه Cursor را دوباره اجرا کنید تا مطمئن شوید در وضعیت خارج از حساب هستید.




---

گام ۲: اجرای PowerShell

1. باز کردن PowerShell:
برنامه Windows PowerShell را اجرا کنید. این محیط به شما امکان می‌دهد تا دستورات خط فرمان را وارد کرده و اسکریپت‌های لازم را اجرا کنید.


2. اجرای اسکریپت نصب:
در پنجره PowerShell، دستور زیر را وارد کنید:

irm https://raw.githubusercontent.com/yeongpin/cursor-free-vip/main/scripts/install.ps1 | iex


توضیح:

دستور irm مخفف Invoke-RestMethod است که فایل اسکریپت نصب را از گیت‌هاب دانلود می‌کند.

عملگر | خروجی دستور اول را به دستور دوم (که در اینجا liex است) می‌دهد.

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





---

گام ۳: ثبت‌نام جدید در Cursor

1. انتخاب گزینه ثبت‌نام:
پس از اجرای موفق اسکریپت، در منوی ارائه شده گزینه "Cursor New Register" را انتخاب کنید.


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


3. نکات مهم در این مرحله:

فعال بودن فیلترشکن:
مطمئن شوید فیلترشکن (VPN) شما فعال است. این امر به دلیل محدودیت‌های جغرافیایی و دسترسی به سرورهای مورد نیاز ضروری است.

تأیید عدم ربات بودن:
قبل از کلیک روی دکمه مربوط به ربات، گزینه "من ربات نیستم" را فعال کنید. این اقدام از بروز خطاهای احتمالی در فرآیند ثبت‌نام جلوگیری می‌کند.





---

گام ۴: تکمیل ثبت‌نام و استفاده از Cursor

1. تغییر شناسه دستگاه:
پس از تکمیل فرآیند ثبت‌نام، شناسه (Machine ID) دستگاه شما تغییر می‌کند. این تغییر به معنای موفقیت‌آمیز بودن ثبت‌نام و فعال شدن خدمات رایگان Cursor است.


2. استفاده از نسخه جدید Cursor:
حالا می‌توانید از امکانات و ویژگی‌های جدید Cursor بهره ببرید.


3. پیشنهاد مهم:
توصیه می‌شود پس از تکمیل ثبت‌نام، از به‌روزرسانی (Update) خودداری کنید تا تنظیمات و دسترسی رایگان شما حفظ شود.




---

با دنبال کردن دقیق مراحل فوق، می‌توانید به راحتی از نسخه رایگان Cursor استفاده کرده و از امکانات آن لذت ببرید.
2👍1
Forwarded from thisisnabi.dev [Farsi]
لابلای تموم خستگیاتون، این ویدیو رو هم ببینید.

https://www.youtube.com/watch?v=xtxfrxf0mfE

جذاب بود :)

کلا من مفاهیم فرایند توسعه نرم افزار و معماری نرم افزار رو خیلی دوست دارم از تجربیات دیگران استفاده کنم تا کتاب بخونم. (می دونمم کتاب از آسمون نیومده و بخشیش تجربه هست)
هر چند کتاب های پایه رو هم 4، پنج جلدی مطالعه کردم ولی خب این مدل کنفرانس ها بیشتر بهم حال میده.
👍5
در طراحی API، صفحه‌بندی (Pagination) برای مدیریت داده‌های بزرگ و بهبود عملکرد بسیار مهم است. در اینجا شش تکنیک رایج برای صفحه‌بندی در API ها آورده شده است:


---

1. صفحه‌بندی بر اساس آفسِت (Offset-based Pagination)

در این روش از پارامترهای آفست (offset) و حد (limit) برای تعیین نقطه شروع و تعداد رکوردهایی که باید بازگردانده شوند، استفاده می‌شود.

مثال:

GET /orders?offset=0&limit=3

مزایا:

ساده برای پیاده‌سازی و فهم.


معایب:

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



---

2. صفحه‌بندی بر اساس کَرسور (Cursor-based Pagination)

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

مثال:

GET /orders?cursor=xxx

مزایا:

برای دیتاست‌های بزرگ کارآمدتر است، زیرا نیازی به جستجو و عبور از رکوردها نیست.


معایب:

پیچیده‌تر در پیاده‌سازی و درک.



---

3. صفحه‌بندی بر اساس صفحه (Page-based Pagination)

در این روش، شماره صفحه و اندازه هر صفحه مشخص می‌شود.

مثال:

GET /items?page=2&size=3

مزایا:

پیاده‌سازی و استفاده آسان است.


معایب:

مشابه صفحه‌بندی آفسِت، برای شماره صفحه‌های بزرگ ممکن است مشکلات عملکردی داشته باشد.



---

4. صفحه‌بندی بر اساس کلید (Keyset-based Pagination)

در این روش از یک کلید (معمولاً کلید اصلی یا یک ستون ایندکس‌شده دیگر) برای فیلتر کردن دیتاست استفاده می‌شود.

مثال:

GET /items?after_id=102&limit=3

مزایا:

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


معایب:

نیاز به یک کلید منحصر به فرد و ایندکس‌شده دارد و پیاده‌سازی پیچیده‌تر است.



---

5. صفحه‌بندی بر اساس زمان (Time-based Pagination)

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

مثال:

GET /items?start_time=xxx&end_time=yyy

مزایا:

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


معایب:

نیاز به یک تاریخ‌/زمان قابل اعتماد و ثابت دارد.



---

6. صفحه‌بندی ترکیبی (Hybrid Pagination)

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

مثال:

GET /items?cursor=abc&start_time=xxx&end_time=yyy

مزایا:

می‌تواند بهترین عملکرد و انعطاف‌پذیری را برای دیتاست‌های پیچیده ارائه دهد.


معایب:

پیاده‌سازی پیچیده‌تر است و نیاز به طراحی دقیق دارد.



---

این روش‌ها به شما کمک می‌کنند تا با توجه به نیازهای مختلف پروژه‌تان، صفحه‌بندی بهینه و کارآمدی در API ها پیاده‌سازی کنید.

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
Forwarded from thisisnabi.dev [Farsi]
سلام دوستان

ما برای یک استارت آپ در حوزه فین تک در حال جذب نیروی Backend در 2 سطح Senior و Mid هستیم.
اگر دوست داشتید می تونید برام رزومه بفرستید که من معرفیتون کنم.

دارن کارشون رو from scratch بالا میارن.

1. Senior .NET Developer
2. .NET Developer

🪖 امکان ریموت ندارند

@thisisnabi
Forwarded from TondTech (مسعود بیگی)
برای یکی از چند تا شرکت بزرگ اکوسیستم، دوستانم در حال تیم سازی هستند. اگر در حوزه دات نت مید (d3 به بالا) تا تک لید هستید و دوست دارید این فرصت رو بررسی کنید، رزومه تون رو برام بفرستین

برای سنجش خودتون نگاهی به این فریم ورک بندازید:
https://github.com/jorgef/engineeringladders
@Merkousha
Forwarded from Code With HSN
یکی از بهترین معماری های CA که DDD هم پیاده کرده درون خودش میتونید سورسش رو بخونید و ایده بگیرین ازش:
https://github.com/jasontaylordev/CleanArchitecture/

ضمنا برای عزیزان فریلنسر هم مناسبه چون فرانت هم داره با React
👍71
سیستم Logging در NET.: از اشتباهات رایج تا بهترین روش‌ها

مقدمه
سلام دوستان! اینجا می‌خوایم در مورد Logging داخل برنامه‌های NET. صحبت کنیم. نکاتی که نیک چاپساس میگه رو به زبون ساده مرور می‌کنیم تا بتونید به راحتی سیستم‌های خودتون رو بهبود بدید.

اهمیت Logging
سیستم Logging به شما کمک می‌کنه تا:
- خطاها رو راحت‌تر پیدا کنید.
- رفتار برنامه رو زیر نظر داشته باشید.
- اطلاعات لازم برای رفع مشکلات رو جمع‌آوری کنید.

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

۸ قانون ساده Logging

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

قانون ۲: از درون‌یابی یا الحاق رشته دوری کن
این روش‌ها می‌تونن باعث کاهش سرعت برنامه بشن و اطلاعات مفید رو از بین ببرن.

قانون ۳: Logging ساختاریافته رو انتخاب کن
با استفاده از الگوهای پیام با پارامترهای مشخص:
- سرعت و کارایی بهتر می‌گیری.
- داده‌ها به صورت ساختاریافته ثبت می‌شن.
- خوانایی گزارش‌ها افزایش پیدا می‌کنه.

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

قانون ۵: از Source Generator استفاده کن
این ابزار توی NET. بهت کمک می‌کنه تا:
- کد بهینه تولید بشه.
- از نوشتن کد اضافی جلوگیری بشه.
- گزارش‌های یکنواخت و ساختاریافته داشته باشی.

قانون ۶: پیچیدگی‌های غیرضروری رو کنار بگذار
همیشه سعی کن راه‌حل‌های ساده و قابل فهم انتخاب کنی تا همه راحت کار کنن.

قانون ۷: هشدار رو به عنوان سطح پیش‌فرض انتخاب کن
این کار باعث می‌شه:
- حجم گزارش‌ها کمتر بشه.
- تمرکز روی موارد مهم حفظ بشه.
(البته برای موارد خاص می‌تونی گزارش‌های اطلاعاتی هم فعال کنی.)

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

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


منابع
- ویدیوی اصلی
- مستندات NET. برای Logging

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
آکادمی OpenAI (academy.openai.com) پلتفرم آموزشی جدید OpenAI برای یادگیری هوش مصنوعی، از مبتدی تا پیشرفته است.
مزایا:
* آموزش توسط متخصصان OpenAI
* محتوای متنوع و کاربردی
* ایجاد ارتباط با جامعه متخصصان
* دسترسی به آخرین دستاوردها
به طور خلاصه: آکادمی OpenAI، فرصتی عالی برای ارتقای دانش و مهارت‌های هوش مصنوعی است.

https://academy.openai.com

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
ترند های گیت هاب اینجاست
https://github.com/trending

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
مطمئناً! در دنیای پرشتاب امروز، یادگیری یک مهارت ارزشمند که می‌تواند درآمد شما را به طور چشمگیری افزایش دهد، یک مزیت بزرگ محسوب می‌شود. مقاله جدیدی در فوربس با عنوان "چگونه یک مهارت 100 هزار دلاری را در 90 روز در سال 2025 یاد بگیریم" منتشر شده است که دقیقاً به همین موضوع می‌پردازد. این مقاله راهنمایی است برای کسانی که به دنبال تغییر مسیر شغلی یا ارتقای مهارت‌های خود در مدت زمان کوتاه هستند و وعده می‌دهد که می‌توان در عرض تنها سه ماه، مهارتی را کسب کرد که ارزش سالانه 100 هزار دلار یا بیشتر را داشته باشد. اگر به دنبال یک تحول سریع و پربازده در زندگی حرفه‌ای خود هستید، این مقاله می‌تواند نقطه شروع بسیار خوبی برای شما باشد.

Https://www.forbes.com/sites/rachelwells/2025/03/31/how-to-learn-a-100000-skill-within-90-days-in-2025/

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Reload responses with other Copilot models on github.com - GitHub Changelog
https://github.blog/changelog/2025-04-08-reload-responses-with-other-copilot-models-on-github-com/

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
جادوی Dictionary در سی‌شارپ: چرا اینقدر سریع‌اند؟

1. نوع Dictionary چیست؟
دیکشنری در سی‌شارپ ساختاری است که داده‌ها را به‌صورت جفت‌کلید-مقدار ذخیره می‌کند. برای دسترسی سریع به داده‌ها، تنها نیاز به کلید داریم که باید منحصربه‌فرد باشد.

2. راز سرعت: جدول هش
دیکشنری از جدول هش (Hash Table) برای جستجوهای سریع استفاده می‌کند. در این روش، تابع هش برای تبدیل کلید به کد هش استفاده می‌شود که مستقیماً به آدرس ذخیره‌سازی در حافظه اشاره می‌کند.

3. فرآیند هش کردن (Hashing)
کلیدها با استفاده از تابع هش به عددی ثابت (کد هش) تبدیل می‌شوند که به دیکشنری کمک می‌کند داده‌ها را سریع پیدا کند. این فرآیند زمان جستجو را به O(1) کاهش می‌دهد.

4. برخورد هش (Hash Collision)
اگر دو کلید کد هش یکسان تولید کنند، به آن برخورد هش می‌گویند. برای مدیریت این مشکل، دیکشنری از زنجیره‌سازی (Chaining) استفاده می‌کند تا لیستی از جفت‌های برخوردی ایجاد کند.

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

6. مثال ساده
var employees = new Dictionary<int, string>();
employees.Add(101, "علی");
employees[102] = "محمد";
if (employees.TryGetValue(103, out var name))
Console.WriteLine(name);
else
Console.WriteLine("کارمند یافت نشد");


7. اهمیت GetHashCode()
برای استفاده از Dictionary با انواع سفارشی، باید متد GetHashCode() و Equals() را به درستی پیاده‌سازی کنید تا عملکرد بهینه باشد.

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

#سی_شارپ #دات‌نت #Dictionary #برنامه‌نویسی

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
۱۰ تا کتاب خیلی خوب برای مهندس‌های نرم‌افزار که تو سال ۲۰۲۵ میتونه براشون جذاب باشه. بیا یه نگاه خودمونی و مختصر بهشون بندازیم:

۱. کتاب Clean Code (کد تمیز) - رابرت مارتین (عمو باب)

چی میگه؟ این کتاب حکم راهنمای اصول نوشتن کدی رو داره که خوانا، قابل نگهداری و فهمیدنی باشه. اگه می‌خوای کدهات رو بقیه هم بفهمن و راحت بشه تغییرش داد، این کتاب واجبه.

۲. کتاب The Pragmatic Programmer (برنامه‌نویس عمل‌گرا) - دیوید توماس و اندرو هانت

چی میگه؟ پر از نکته‌های کاربردی و تجربه‌های ارزشمنده که کمکت می‌کنه یه برنامه‌نویس بهتر، کارآمدتر و حرفه‌ای‌تر بشی. از مدیریت شغلی گرفته تا ابزارها و تکنیک‌های کدنویسی رو پوشش می‌ده.

۳. کتاب Design Patterns: Elements of Reusable Object-Oriented Software (الگوهای طراحی) - گنگ چهار نفره (GoF)

چی میگه؟ این کتاب کلاسیک، الگوهای طراحی رایج و تست‌شده رو معرفی می‌کنه که برای حل مشکلات پرتکرار تو طراحی نرم‌افزارهای شیءگرا استفاده میشن. خوندنش دیدت رو نسبت به معماری نرم‌افزار باز می‌کنه.

۴. کتاب Refactoring: Improving the Design of Existing Code (بازآرایی کد) - مارتین فاولر

چی میگه؟ یاد می‌ده چطور کد موجود رو بدون تغییر کارکردش، بهبود بدی. تکنیک‌های عملی برای تمیز کردن کد، کاهش پیچیدگی و بهتر کردن طراحی رو توضیح می‌ده.

۵. کتاب Code Complete (کد کامل) - استیو مک‌کانل

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

۶. کتاب The Mythical Man-Month (نفر-ماه افسانه‌ای) - فردریک بروکس

چی میگه؟ با اینکه قدیمیه، ولی درس‌هاش در مورد مدیریت پروژه‌های نرم‌افزاری، مشکلات تخمین زمان و اضافه کردن نیرو به پروژه‌های دیرشده، هنوزم کاملاً به‌روز و کاربردیه.

۷. کتاب Working Effectively with Legacy Code (کار موثر با کدهای قدیمی) - مایکل فیدرز

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

۸. کتاب Cracking the Coding Interview (شکستن مصاحبه کدنویسی) - گیل لاکمن مک‌داول

چی میگه؟ اگه دنبال کار تو شرکت‌های بزرگ تکنولوژی هستی، این کتاب برای آماده شدن برای مصاحبه‌های فنی (سوالات الگوریتم و ساختمان داده) عالیه. پر از مثال و راه حله.

۹. کتاب Structure and Interpretation of Computer Programs (SICP) (ساختار و تفسیر برنامه‌های کامپیوتری)

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

۱۰. کتاب Designing Data-Intensive Applications (طراحی برنامه‌های داده‌محور) - مارتین کلپمن

چی میگه؟ اگه با سیستم‌های بزرگ، پایگاه‌داده‌ها، و چالش‌های مقیاس‌پذیری و پایداری سر و کار داری، این کتاب رو باید بخونی. خیلی عمیق و کاربردی به معماری سیستم‌های داده مدرن می‌پردازه.

تمام این کتاب ها رو میتونید از سایت رفهاب رایگان دانلود کنید و یا به صورت چاپی خریداری کنین.

https://refhub.ir/fa/expert_pick/15/

میتونید از کد تخفیف ۲۵ درصدی زیر هم برای خریدتون از رفهاب استفاده کنین (برای ۱۰ نفر اول) :
Software-Engineer

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥2👍1🎉1
یه نگاهی به این عکس باحال بندازیم که پر از نکته‌های کاربردی برای طراحی APIهای خوب و امنه. انگار یه چک‌لیست جمع‌وجور و مفیده که بهمون میگه چی خوبه و چی نه . از اسم‌گذاری منابع و استفاده از حالت جمع گرفته تا امنیت و فیلتر کردن، کلی چیز میز داره.

اما امروز می‌خوام روی یه قسمت خاصش زوم کنیم که خیلی هم مهمه: نسخه‌بندی یا Versioning API.

چرا اصلاً نسخه‌بندی مهمه؟

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

اینجاست که نسخه‌بندی (Versioning) مثل یه فرشته نجات ظاهر میشه! بهت اجازه میده تغییرات جدید رو توی یه "نسخه" جدید از API اعمال کنی، در حالی که نسخه قبلی همچنان برای کاربرای قدیمی کار می‌کنه. اینطوری هم می‌تونی API رو به‌روز نگه داری و هم کاربرای فعلی رو راضی نگه داری. مثل این می‌مونه که همزمان دو تا جاده داشته باشی؛ یکی جاده قدیم برای ماشین‌های قدیمی، یکی هم اتوبان جدید برای اونایی که می‌خوان سریع‌تر برن!

عکس چی میگه؟

توی عکس، ردیف چهارم دقیقاً به همین موضوع اشاره کرده:

* GET /carts/v1/123 (روش نامناسب)
* GET /v1/carts/123 (روش مناسب)

این یعنی چی؟ یعنی پیشنهاد می‌کنه که شماره نسخه (مثل v1 برای نسخه اول) رو اول آدرس URL بیاریم. این کار چند تا مزیت داره:

1. واضحه: همون اول کار مشخصه که داریم با کدوم نسخه از API کار می‌کنیم.
2. مسیریابی (Routing) راحت‌تره: برای سرور راحت‌تره که درخواست‌ها رو بر اساس نسخه به کد مربوطه هدایت کنه.

راه‌های دیگه برای نسخه‌بندی هم هست؟

آره! روشی که توی عکس اومده (گذاشتن نسخه توی URL Path) خیلی رایجه، اما تنها راه نیست. چند تا روش متداول دیگه هم داریم:

1. Query Parameter: نسخه رو مثل یه پارامتر عادی توی URL می‌فرستیم:
GET /carts/123?version=1
این روش URL رو شلوغ نمی‌کنه ولی شاید یه کم کمتر به چشم بیاد.
2. Custom Request Header: نسخه رو توی هِدِر (Header) درخواست می‌فرستیم:
Accept: application/vnd.yourapi.v1+json
این روش URL رو کاملاً تمیز نگه می‌داره و از نظر معنایی هم شاید درست‌تر باشه، ولی کار کردن و تست کردنش با مرورگر یه کم سخت‌تره.

کدوم روش بهتره؟

هیچکدوم ذاتاً "بهترین" نیستن. انتخابش بستگی به نیاز پروژه، راحتی تیم و استانداردهایی داره که استفاده می‌کنید. روش URL Path (همونی که تو عکسه) خیلی محبوبه چون ساده و شفافه.

جمع‌بندی

نسخه‌بندی API یه موضوع حیاتی برای مدیریت تغییرات و تکامل APIهاست، بدون اینکه کاربرای فعلی رو اذیت کنیم. این عکس باحال یه روش خوب و رایج (گذاشتن نسخه اول URL) رو پیشنهاد میده. یادت باشه که روش‌های دیگه‌ای هم هست و مهمه که از همون اول طراحی API به فکر نسخه‌بندی باشی.

در کل، این عکس یه منبع عالی پر از نکات کاربردی برای طراحی API هست. حتماً بقیه مواردش رو هم یه نگاه بنداز!

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Forwarded from Software Philosophy
پشتیبانی از عملگر LeftJoin در NET 10.

در نسخه جدید NET 10.، پشتیبانی بومی از عملگر LeftJoin در LINQ به این فریم‌ورک اضافه شده است. این تغییر مهم در زمان نوشتن کوئری‌ها در Entity Framework Core (EF Core) به شما کمک می‌کند تا کد ساده‌تری بنویسید و از پیچیدگی‌های قبلی که نیازمند استفاده از ترکیب چندین متد مانند SelectMany و GroupJoin بود، رهایی یابید.

قبل از NET 10.:

در نسخه‌های قبلی EF Core، برای استفاده از عملیات LeftJoin نیاز به ترکیب چندین متد پیچیده بود. در این روش، ابتدا با استفاده از GroupJoin داده‌ها را به هم پیوند می‌دادیم، سپس از SelectMany و DefaultIfEmpty برای شبیه‌سازی رفتار LeftJoin استفاده می‌کردیم.

مثال کد قبل از NET 10.:

var query = students
.GroupJoin(
departments,
student => student.DepartmentID,
department => department.ID,
(student, departmentList) => new { student, subgroup = departmentList })
.SelectMany(
joinedSet => joinedSet.subgroup.DefaultIfEmpty(),
(student, department) => new
{
student.student.FirstName,
student.student.LastName,
Department = department.Name ?? "[NONE]"
});


پس از اضافه شدن LeftJoin در NET 10.:

با معرفی متد LeftJoin در NET 10.، نوشتن کوئری‌ها بسیار ساده‌تر و خواناتر شده است. دیگر نیازی به استفاده از ترکیب چندین متد نخواهید داشت، بلکه می‌توانید به راحتی از این متد جدید استفاده کنید.

مثال کد پس از NET 10.:

var query = context.Students
.LeftJoin(
context.Departments,
student => student.DepartmentID,
department => department.ID,
(student, department) => new
{
student.FirstName,
student.LastName,
Department = department.Name ?? "[NONE]"
});


مزایای استفاده از LeftJoin در NET 10.:

- سادگی و خوانایی بیشتر: به جای استفاده از ترکیب پیچیده‌ی متدها، می‌توانید با یک متد ساده به راحتی LeftJoin را انجام دهید.
- عملکرد بهتر: به دلیل بهینه‌سازی‌های داخلی در EF Core، عملیات LeftJoin به شکل بهینه‌تری در پایگاه داده اجرا می‌شود.
- کاهش پیچیدگی کد: به جای کدهای طولانی و پیچیده، می‌توانید کدهای ساده‌تری بنویسید که فهم آن‌ها برای سایر برنامه‌نویسان راحت‌تر است.

🔗 برای مطالعه بیشتر می‌توانید به این لینک مراجعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

________
👍8🔥1
قضیه هوش مصنوعی پاچه‌خوار! (بله، درست شنیدی!)

تاحالا شده با یه ربات یا هوش مصنوعی چت کنی و حس کنی داره زیادی هندونه زیر بغلت می‌ذاره؟ 🤔 انگار هرچی می‌گی، می‌گه "به‌به! چه عالی!" یا الکی ازت تعریف می‌کنه؟ خب، به این حالت می‌گن "چاپلوسی" یا اگه خارجکی‌شو بخوای "سایکوفنسی" (Sycophancy)! جالبه بدونی که همین اتفاق اخیراً برای مدل خفن GPT-4o، که پشت خیلی از چت‌بات‌ها مثل ChatGPT هست، افتاده.

چی شده مگه؟
قضیه از این قراره که شرکت OpenAI (سازنده ChatGPT) یه آپدیت جدید برای GPT-4o داده بود بیرون، ولی زود مجبور شدن برش گردونن! چرا؟ چون مثل اینکه زیادی "پاچه‌خوار" شده بود! 😅 انگار تنظیمات جدیدش یه کم زیادی رو خوشحال کردن لحظه‌ای ما آدما تمرکز کرده بود و یادش رفته بود که بابا، همیشه هم لازم نیست الکی تعریف کنی!
حالا مگه بده هوش مصنوعی مؤدب باشه؟
خب معلومه که ادب خوبه، ولی چاپلوسی یه چیز دیگه‌ست! وقتی یه هوش مصنوعی زیادی چاپلوسی می‌کنه:
۱. حس بدی می‌ده: یه جورایی غیرطبیعیه، نه؟ انگار طرف داره فیلم بازی می‌کنه و این حس خوبی به آدم نمی‌ده.
۲. اعتماد رو می‌کُشه: مهم‌تر اینکه، وقتی می‌بینی هوش مصنوعی فقط می‌خواد تو رو راضی نگه داره، دیگه چطوری به حرفاش اعتماد کنی؟ نکنه جواب الکی بده فقط چون فکر می‌کنه تو خوشت میاد؟

خب، OpenAI چیکار می‌کنه حالا؟
خوشبختانه بچه‌های OpenAI حواسشون جمع بوده و فهمیدن قضیه چیه. الان دارن روش کار می‌کنن که درستش کنن:
۱. آموزش رو بهتر می‌کنن: دارن روش‌های آموزش مدل رو عوض می‌کنن که دیگه اینقدر چاپلوس نباشه.
۲. صادق‌ترش می‌کنن: یه سری قوانین و محافظ براش می‌ذارن که راستشو بگه، حتی اگه یه کم تلخ باشه!
۳. به حرف ما بیشتر گوش می‌دن: راه‌های بیشتری می‌ذارن که ما بتونیم مستقیم بهشون بگیم از کدوم رفتار مدل خوشمون اومده یا نه.
۴. نظر جمع رو می‌پرسن: دنبال اینن که بفهمن مردم دنیا واقعاً دوست دارن ChatGPT چطوری باشه و چجوری پیشرفت کنه.

آخرش چی؟
این ماجرای GPT-4o نشون می‌ده که ساختن هوش مصنوعی فقط کد زدن و کامپیوتر قوی داشتن نیست. باید حواسمون به این باشه که این هوش مصنوعی‌ها چطوری با ما حرف می‌زنن و چقدر می‌شه بهشون اعتماد کرد. اینکه OpenAI داره سعی می‌کنه این مشکل رو حل کنه، جای امیدواری داره. باید ببینیم تهش چی می‌شه!

خلاصه که دنیای هوش مصنوعی هنوز کلی بالا پایین داره و ساختن یه رفیق دیجیتال که هم باهوش باشه و هم صادق، کار حضرت فیله! 😉

لینک خبر :
https://openai.com/index/sycophancy-in-gpt-4o/

#AI #Chatgpt #OpenAI #هوش_مصنوعی


🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Forwarded from Software Philosophy
قابلیت‌های جدید Data Annotations در دات نت ۸

در نسخه جدید NET 8.، ویژگی‌های Data Annotations پیشرفت‌های قابل توجهی داشته‌اند. این ویژگی‌ها، کدنویسی معتبرسازی داده‌ها را بسیار ساده‌تر و تمیزتر کرده است. در ادامه به صورت گام به گام این ویژگی‌های جدید را بررسی می‌کنیم:

۱. ویژگی Length
این Annotation برای مشخص کردن حداقل و حداکثر طول رشته استفاده می‌شود.

[Length(2, 30)]
public string Name { get; set; }

[Length(2, 255)]
public string Description { get; set; }


در مثال بالا:
- مقدار Name باید حداقل ۲ و حداکثر ۳۰ کاراکتر داشته باشد.
- مقدار Description باید حداقل ۲ و حداکثر ۲۵۵ کاراکتر داشته باشد.

---

۲. ویژگی Range با پارامترهای Exclusive
ویژگی Range حالا قابلیت مشخص کردن مقادیر انحصاری را نیز دارد.

[Range(1, 1000, MinimumIsExclusive = true, MaximumIsExclusive = false)]
public decimal Price { get; set; }

در این مثال:
- مقدار Price باید بزرگتر از ۱ (به دلیل MinimumIsExclusive = true) و کوچکتر یا مساوی ۱۰۰۰ (به دلیل MaximumIsExclusive = false) باشد.

---

۳. ویژگی AllowedValues
این Annotation مقادیر مجاز برای یک خصوصیت را مشخص می‌کند.

[AllowedValues("S", "M", "L", "XL", "XXL")]
public string Size { get; set; }

در اینجا، تنها مقادیر S, M, L, XL, XXL برای Size قابل قبول هستند.

---

۴. ویژگی DeniedValues
برای مشخص کردن مقادیری که غیرمجاز هستند استفاده می‌شود.

[DeniedValues("Electronics", "Computers")]
public string Category { get; set; }

در این مثال، مقادیر Electronics و Computers برای Category ممنوع هستند.

---

۵. ویژگی Base64String
برای معتبرسازی اینکه مقدار یک رشته به صورت Base64 باشد استفاده می‌شود.

[Base64String]
public string Image { get; set; }

این اطمینان را ایجاد می‌کند که Image حاوی یک رشته معتبر Base64 است.

🔗 برای مطالعه بیشتر می‌توانید به این لینک مراجعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

__________
👍6🔥41
بیا با هم دنیای باحال داکر رو کشف کنیم! 🐳

اوکی، این عکس رو دیدی؟ انگار یه نقشه گنجه، نه؟ ولی گنجش برنامه‌های خفن و بدون دردسریه که با "داکر" می‌سازیم و اجرا می‌کنیم. داکر مثل یه جعبه‌ابزار جادوییه که به برنامه‌نویس‌ها کمک می‌کنه برنامه‌هاشون رو راحت‌تر بسازن، هرجا دلشون خواست ببرن و بدون مشکل اجرا کنن. بیا ببینیم این جعبه‌ابزار هر کدوم کارش چیه:

۱. تو و داکر (Client): فرمانده کیه؟ خودتی!
کارش چیه؟ این همون ابزاریه که تو باهاش به داکر دستور میدی. مثلاً وقتی تو ترمینال می‌نویسی docker run یا docker build، یا از اون برنامه‌های خوشگل گرافیکی استفاده می‌کنی، داری از "کلاینت داکر" استفاده می‌کنی تا با مغز متفکر داکر حرف بزنی.

۲. مغز متفکر داکر (Daemon): اون غول چراغ جادو!
کارش چیه؟ این یه برنامه خستگی‌ناپذیره که پشت صحنه همیشه حواسش به همه چی هست. تو بهش دستور میدی (از طریق کلاینت)، اونم کارای سخت رو انجام میده؛ مثل ساختن "ایمیج"، راه انداختن "کانتینر"، مدیریت شبکه‌ها و حافظه‌ها. خلاصه، کار اصلی رو این انجام میده.

۳. خونه داکر (Host): مهمونی همینجاست!
کارش چیه؟ این همون کامپیوتر یا سروریه که "دیمن داکر" روش نصب شده و داره کار می‌کنه. منابع سیستم (مثل CPU، رم، حافظه) رو در اختیار داکر قرار میده تا بتونه کانتینرها رو اجرا کنه. می‌تونه لپ‌تاپ خودت باشه یا یه سرور گنده تو شرکت.

۴. انبار بزرگ ایمیج‌ها (Registry): مثل یه کتابخونه پر از دستور پخت!
کارش چیه؟ یه مخزن آنلاین یا محلیه که "ایمیج‌"های داکر توش نگهداری میشن. معروف‌ترینش "داکر هاب" (Docker Hub) هست. کارش اینه که ایمیج‌ها رو ذخیره کنه تا تو یا بقیه بتونین اون‌ها رو دانلود کنین (pull) و استفاده کنین، یا ایمیج‌هایی که خودتون ساختین رو توش آپلود کنین (push) تا بقیه هم استفاده کنن.

۵. دستور پخت برنامه (Image): نقشه راه!
کارش چیه؟ یه قالب آماده و فقط خوندنیه که تمام دستورالعمل‌ها، کدها، کتابخونه‌ها و تنظیمات لازم برای اجرای یه برنامه رو تو خودش داره. کارش اینه که به عنوان یه الگو برای ساخت "کانتینر" استفاده بشه. هر وقت بخوای یه برنامه رو تو داکر اجرا کنی، از روی ایمیجش یه کانتینر می‌سازی.

۶. برنامه آماده به کار (Container): خودِ خودِ برنامه در حال اجرا!
کارش چیه؟ این یه نمونه در حال اجرای یه "ایمیج" هست. کارش اینه که برنامه تو رو توی یه محیط ایزوله و جدا از بقیه سیستم اجرا کنه. انگار برنامه رو گذاشتی تو یه جعبه مخصوص خودش که نه اون روی بقیه تأثیر میذاره، نه بقیه روی اون. اینطوری برنامه‌ات همه جا یکسان اجرا میشه.

۷. دفترچه دستور پخت (Dockerfile): خودت آشپز شو!
کارش چیه؟ یه فایل متنیه که توش قدم به قدم می‌نویسی چطوری یه "ایمیج" داکر باید ساخته بشه. کارش اینه که فرآیند ساخت ایمیج رو اتوماتیک کنه. تو بهش میگی از چه ایمیج پایه‌ای استفاده کن، چه فایل‌هایی رو کپی کن، چه دستوراتی رو اجرا کن و... داکر هم طبق همین دستورالعمل، ایمیجت رو می‌سازه.
یه کوچولو کد (مفهومی):

        # پایه کارمون چیه؟ مثلا یه نسخه سبک از لینوکس با نود جی‌اس
FROM node:18-alpine
# فایلای برنامه‌ام رو بریز توش
COPY . .
# برنامه‌ام با این دستور شروع به کار می‌کنه
CMD ["node", "app.js"]

۸. سیم‌های ارتباطی (Network): چطوری با هم حرف بزنن؟
کارش چیه؟ داکر برای کانتینرهات شبکه‌های مجازی درست می‌کنه. کار این شبکه‌ها اینه که به کانتینرها اجازه بدن با همدیگه ارتباط برقرار کنن، یا به شبکه میزبان (و از طریق اون به اینترنت) وصل بشن. بدون اینا، کانتینرهات مثل جزیره‌های دورافتاده میشن!

۹. گاوصندوق اطلاعات (Volume): اطلاعاتت رو اینجا امن نگه دار!
کارش چیه؟ وقتی یه کانتینر پاک میشه، اطلاعات توش هم معمولاً از بین میره. "والیوم" یه راه حله که اطلاعات مهم برنامه (مثل دیتابیس یا فایل‌های کاربرا) رو به صورت پایدار و جدا از خود کانتینر ذخیره کنی. کارش اینه که حتی اگه کانتینر رو پاک کردی و دوباره ساختی، اطلاعاتت سر جاش بمونه.

۱۰. ابزارهای کمکی (Plugins): داکرت رو خفن‌تر کن!
کارش چیه؟ اینا یه سری افزونه هستن که می‌تونی به داکر اضافه کنی تا قابلیت‌ها و امکاناتش بیشتر بشه. مثلاً پلاگین‌هایی برای مدیریت بهتر شبکه، ذخیره‌سازی پیشرفته‌تر، یا امنیت بیشتر. کارشون اینه که داکر رو برای نیازهای خاص تو، توسعه بدن.

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Forwarded from تهلاگ / Tehlug
ثبت‌نام رویداد ۲۷۹ تهلاگ آغاز شد! 🎊

رویداد شماره ۲۷۹ تهلاگ با حمایت نوبیتکس و افراشاپ، روز پنجشنبه ۲۵ اردیبهشت‌ماه از ساعت ۱۲ تا ۱۸ در دانشگاه صنعتی امیرکبیر برگزار می‌شود.

اطلاعات بیشتر و ثبت‌نام:

🔗 evand.com/events/tehlug279

@TehranLUG
🔥2