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


🆔 @dotnetcode
Download Telegram
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
امروز می‌خوام یه خبر باحال براتون بذارم: داکر یه فیچر تازه به اسم Docker Model Runner درآورده! 
کوین ویتک (یه از بزرگان مهندسی داکر) توی یه ویدیو خفن معرفیش کرد. 
اگه هم با داکر کار می‌کنید هم عاشق مدل‌های هوشمند (مثل ChatGPT) هستید، این داستان مخصوص شماس!

---

خب این Model Runner چیه؟ قصه‌ش چیه؟ 
ساده بگم: می‌تونی روی لپتاپ خودت، مدل‌های هوشمند رو اجرا کنی... درست مثل وقتی که یه کانتینر معمولی رو راه می‌ندازی! 
حالا چرا محلی؟ دلایل خفنی داره: 
- حریم خصوصیت محفوظ میمونه (دیتات پیش خودته!) 
- تو توسعه سریع‌تر پیش می‌ری 
- دیگه نیازی نیست مدام آنلاین باشی 

---

چطوری ازش استفاده کنم؟ قدم‌به‌قدم بریم جلو: 
۱. یه نکتهٔ مهم: فعلا فقط روی سیستم‌های اپل با تراشه M1/M2/M3 کار می‌کنه (نسخهٔ بتاست). 
داکر داره زور می‌زنه به‌زودی لینوکس و ویندوز رو هم بیاره! 

۲. اجراش خیلی باحاله: تو ترمینال فقط بزن: 
docker model run aism/360m-4bit-kmeans  # (اسم یه مدل نمونه)


بعد دکمه انتر رو بزن... کار تمومه!

۳. مدل رو از کجا میاره؟ خودکار از Docker Hub دانلودش می‌کنه... درست مثل عکس‌های داکر! 

۴. حالا وقت چته! بعد از اجرا، یه پنجره چت باز میشه... می‌تونی مستقیم بپرسیش: "هی هوش مصنوعی! فلان چیز چطوری کار می‌کنه؟"  

۵. اگه مدل اضافه کردی: برای لیست کردنشون بزن: 
docker model list


تا ببینی کدوم‌ها رو داری! 

۶. نکتهٔ جالب‌تر: می‌تونی این مدل‌های محلی رو توی برنامه‌هات هم استفاده کنی! 
مثلاً توی یه برنامه Next.js، به جای وصل شدن به OpenAI، به همون مدلی که روی سیستم خودت راه انداختی وصل میشی! 
رازش چیه؟ تو کدت فقط یه خط مثل این اضافه می‌کنی: 
baseURL: 'https://model-runner.docker.internal:engines/v1'


(این آدرس، همون سرور استنتاج داکر روی سیستم خودتِ!) 

منبع:
https://youtu.be/rGGZJT3ZCvo?si=699qJrXheVTvA13U

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

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95🔥1
باهم یک تکنولوژی انقلابی به نام Model Context Protocol یا MCP را برسی کنیم. 
این استاندارد همانند یک "مترجم جهانی" برای مدل‌های زبانی عمل می‌کند!

---

درک مفهوم MCP: 
ایده اصلی این است: MCP دستیاران هوشمند (LLMها) را به دنیای واقعی متصل می‌کند! 
کاربردش این است: دسترسی به داده‌های زنده، ابزارها و سرویس‌ها بدون محدودیت! 
مثلاً: 
• مدل می‌تواند مستقیماً با GitHub صحبت کند 
• به داده‌های زندهٔ کسب‌وکار دسترسی دارد 
• حتی با Figma برای طراحی تعامل می‌کند!

---

اجزای کلیدی سیستم MCP: 
۱. هاست‌ها: نرم‌افزارهایی مثل VS Code یا Copilot که از MCP استفاده می‌کنند. 
۲. سرورها: سرویس‌های سبکی که قابلیت‌های خاص ارائه می‌دهند (مثل اتصال به دیتابیس). 
۳. کلاینت‌ها: معمولاً همان هاست‌ها که با سرورها ارتباط برقرار می‌کنند.

---

شگفتی‌های MCP: 
انعطاف فوق‌العاده دارد: 
• اجرا روی محیط‌های مختلف (محلی، کانتینری، ابری) 
• پشتیبانی از Azure Functions و سرویس‌های مایکروسافت 
مزیت بزرگ: استاندارد اوپن‌سورس است که توسط Anthropic آغاز شد! 
نیاز نیست نگران امنیت باشید: از OAuth 2.1 پشتیبانی می‌کند.

---

نمونه‌های عملی: 
در ویدیو نشان داده شد: 
• ارتباط VS Code با issuesهای GitHub 
• کار با داده‌های سفارشی (مثلاً یک دیتاست میمون‌ها!) 
• ادغام با Figma برای طراحی رابط کاربری 
جالب‌تر: خودتان می‌توانید سرور MCP بسازید با SDKهای #C!

---

روش‌های ارتباطی: 
سرورها از طریق این روش‌ها صحبت می‌کنند: 
Standard IO برای اجرای محلی 
SSE/HTTP برای ارتباطات ابری 
ابزارهایی مثل Azure API Center هم تبدیل APIهای قدیمی را آسان می‌کنند.

---

🔍 نکته کلیدی: 
این پروتکل مکمل RAG است نه جایگزین آن! 
در واقع قدرت افزوده‌ای به مدل‌های زبانی می‌دهد.

---

منبع:
https://youtu.be/cfwooBzzHBs?si=ro_mYcINJEi4I5ZB


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

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
چقدر این نگرش درستی که #جادی به زندگی داره. اگر ما هر روز به این دید برسیم اگر شده فقط کمی به اندازه یک کم بیشتر از هیچ تلاش کنیم و استمرار داشته باشیم در طول زمان چقدر میتونه تاثیرات موثر و عمیقی در زندگی و رشد خودمون داشته باشه.

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

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍2🔥1👏1