tech-afternoon
1.25K subscribers
174 photos
6 videos
6 files
169 links
تِک‌افترنون، رویدادی گاه‌به‌گاه است با موضوعات حول معماری و توسعه نرم‌افزار، این کانال هم برای اشتراک اخبار، آموزش، نکاتی حول مهندسی نرم‌افزار، دیتابیس‌، تکنولوژی و مدیریت تولید محصولات نر‌م‌افزاری خواهد بود.
youtube.com/@AminTechTalks/videos
امین مصباحی
Download Telegram
🚀 دورهمی آنلاین با موضوع NET Aspire.

یکی از دوستان که توی پروژه جدیدشون از Aspire استفاده کردن، دوست داشتن تا هم یه مروری روی پیاده‌سازی‌شون بشه، هم نکات پرداکشن رو بررسی کنیم. از اونجایی که مثال‌های ویدیو دوم و سوم Aspire مدت‌هاست آماده است ولی به دلیل مشغله‌های پایان سال، و زمانبر بودن ضبط و ادیت به تاخیر افتاده بود؛ تصمیم گرفتم با یه دورهمی این کار رو بکنیم. و بخشی از مطالب هم حول پروژه‌ی ایشون خواهد بود که نمونه واقعی‌تر از مثال‌هاست.

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

🗓 هفته آینده یکشنبه (۵ ژانویه، ۱۶ دی‌ماه)؛ ساعت ۱۶:۳۰ (به وقت تهران؛ مدت ۱ ساعت)
✍️ ثبت‌نام (ایونت‌های تک‌افترنون هزینه‌ای ندارند)
Please open Telegram to view this post
VIEW IN TELEGRAM
9
tech-afternoon pinned «🚀 دورهمی آنلاین با موضوع NET Aspire. یکی از دوستان که توی پروژه جدیدشون از Aspire استفاده کردن، دوست داشتن تا هم یه مروری روی پیاده‌سازی‌شون بشه، هم نکات پرداکشن رو بررسی کنیم. از اونجایی که مثال‌های ویدیو دوم و سوم Aspire مدت‌هاست آماده است ولی به دلیل…»
🎄 چند پیشنهاد برای ۲۰۲۵ - پایانی

این پنجمین و آخرین سری پیشنهاداته، چند ساعت دیگه ۲۰۲۴ تموم می‌شه و امیدوارم این سری یادداشت‌ها ولو اندک، مفید یا الهام‌بخش بوده باشه.

1️⃣ روز (چند ساعت) تا ۲۰۲۵؛ پیشنهاداتی در مورد خودمون!:

🗣️ در مورد «شغل»، «رفتار»، «یادگیری» و «مسئولیت اجتماعی» پیشنهاداتی نوشتم؛ ولی همه اینا توسط «خود» ما باید محقق بشه؛ وگرنه از پست تلگرامی فراتر نخواهد رفت؛ هزار برابر عمیق‌تر از این پیشنهادات توی فضای مجازی وجود داره، ولی اینکه وضع نرم‌افزار، کار تیمی، تاب‌آوری و تعامل با نظرات متفاوت، جامعه، محیط زیست، توسعه و سیاست و... ما اینه؛ ناشی از خودمونه. پیشنهادات این بخش رو تیتروار می‌نویسم تا در مورد جزئیاتش اگر اشتیاقی بود صحبت کنیم.

تغییر از خودمون شروع می‌شه؛ «پرنسیپ» رکن اصلی پیشرفته.

عمل به جای انتظار.

تحمل و صبر نظرات متفاوت.

هیچ چیز ایده‌آل نیست، ایده‌آل هم نخواهد شد. «حرکت مداوم در مسیر بهبود» مهمه!

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

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

🌱 امیدوارم این ۵ روز و پیشنهادها، حمل بر نصیحت یا توهم و تکبر صلاحیت نصیحت، نشده باشه، و فقط پیشنهادات و یادآوری‌هایی که به خودم داشتم رو با شما هم اشتراک گذاشتم تا اگر نظر و اصلاحی دارید به خودم برای بهبود خودم کمک کنید.

ببخشید اگر از موضوعات مورد انتظار از این کانال دور بود.
سال ۲۰۲۵ رو برای همه سالی پر از پیشرفت و سلامتی و شادی آرزو می‌کنم...

🔔 در ضمن دورهمی یکشنبه رو هم اگر دوست داشتید شرکت کنید خوشحال می‌شم ببینمتون 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
9
🧨 بمب‌های خفته در پکیج‌ها!

این چند روز، ۷ تا پروژه پر کاربرد رو کاویدم و گاهن تا لایه‌ی چهارم تودرتو ی وابستگی‌هاشون آسیب‌پذیری امنیتی پیدا کردم. و این در مورد فلان پروژه‌ی گمنام نیست. ویژوال استدیو آسیب‌پذیری‌ها رو نشون می‌ده ولی وقتی تودرتو می‌شن از یه لایه‌ای به پایین کمی کار دشوار می‌شه.

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

مثال دنیای واقعی:

سال ۲۰۲۴؛ XZ Utils Backdoor

نسخه‌های ۵.۶.۰ و ۵.۶.۱ کتابخونه فشرده‌سازی XZ Utils بالاترین درجه آسیب‌پذیری CVSS، یعنی ۱۰ رو به خاطر بکدور تعمدی دریافت کرد که به هکر اجازه می‌داد بدون مجوز به ماشین لینوکسی دسترسی پیدا کنن. با احراز هویت SSH تداخل داشت که باعث می‌شد هکر بتونه به سیستم‌ها نفوذ کنن. ☠️
توزیع‌های مهم لینوکس مثل فدورا، دبیان، اوپن‌سوزه و کالی لینوکس رو درگیر کرد.

فجایع Solarwinds و Log4Shell و MavenGate و... کلی اتفاق دیگه، نمونه‌های خوبی از آسیب خوردن یا آسیب زدن به پروژه‌ها بود.

طبق آمار، بیش از ۵۰ درصد پروژه‌های ما با کتابخونه‌ها و ابزارهای کدباز تولید می‌شه. لطفا بیشتر به این موضوع توجه کنید و اگر بسته‌ای نیاز به به‌روز رسانی داره، زحمتش رو بکشید 😊 اکثر این نمونه‌ها ساده است، سورس رو باز کنید، وابستگی‌ها رو لایه به لایه به‌روزرسانی کنید (شاید تغییرات کوچکی از جنس breaking change نیاز داشته باشه) بعد pull request.
چرا می‌گم آسونه؟ چون در مورد آسیب‌پذیری‌های شناخته شده صحبت می‌کنم. نه اینکه بگردید آسیب‌پذیری پیدا کنید، خود ویژوال استدیو یا SonarQube دقیقا می‌گن کدوم بسته آسیب‌پذیره.

تمرین خوبیه! اعتماد کنید... نمونه خواستید برای تمرین، بهم بگید 😉

#security
Please open Telegram to view this post
VIEW IN TELEGRAM
5
🚀 مقایسه انواع کانتینر ایمیج‌ها برای دات‌نت ۹.
یه مقایسه سریع! 🐳

⚡️ بر اساس سایز، امنیت، سرعت آماده‌به‌کار شدن، و... هر کدوم قوت‌هایی دارن.

💬 شما کدوم رو ترجیح می‌دین؟


#DotNet #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
در رابطه با دورهمی یکشنبه و نزدیک بودن مثال‌ها به فضای کاری شرکت‌کننده‌ها؛ دوستانی که شرکت خواهید کرد عموما از کدوم مورد استفاده می‌کنید؟

* مانیتورینگ، OTel، Metrics, Traces 📌 اگر هنوز ثبت‌نام نکردید بشتابید و اگر صلاح دیدید به دوستانتون هم اطلاع بدید
Final Results
19%
Cloud: DataDog, Sentry, Azure Application Insights, AWS CloudWatch
6%
On-Premise Sentry
19%
On-Premise Grafana (Prometheus)
19%
On-Premise ELK Stack
19%
یک مرد از این قرطی‌بازی‌ها استفاده نمی‌کنه 😕
0%
بیا توی کامنت بگم
16%
یاد بده شاید طالب شدیم
tech-afternoon
در رابطه با دورهمی یکشنبه و نزدیک بودن مثال‌ها به فضای کاری شرکت‌کننده‌ها؛ دوستانی که شرکت خواهید کرد عموما از کدوم مورد استفاده می‌کنید؟

* مانیتورینگ، OTel، Metrics, Traces 📌 اگر هنوز ثبت‌نام نکردید بشتابید و اگر صلاح دیدید به دوستانتون هم اطلاع بدید
- ☁️ نزدیک ۲۰ درصد از شرکت‌کننده‌ها در نظرسنجی احتمالا خارج از ایران هستن که دسترسی به سرویس‌ها کلاد دارن

- 🤓 کمتر از یک‌پنجم دوست دارن بیشتر بدونن

- 😁 نزدیک یک‌پنجم، مثل یک سامورایی زندگی می‌کنن و ترجیح می‌دن حادثه غافلگیرشون کنه

- حدود ۶۴ درصد (چون هنوز از عدد ۶۳درصد بیزارم 😅) سروریس‌هاشون رو به نحوی (سرویس ابری یا غیرابری) مانیتور می‌کنن.

- من یه سرچ سریع کردم هیچ سرویس مدیریت شده‌ای بین سرویس‌دهنده‌های ایرانی پیدا نکردم. فقط آپداموس (از هم‌روش) بود که اونم Status Page بود عملا و خب قابل مقایسه نیست.

- پروژه کدبار Sentry، و نسخه Basic Self- managed از Elastic محدودیت‌هایی دارن که استفاده توی مقیاس بزرگ رو محدودی می‌کنن. از طرفی هم نگهداری Grafana در کنار Prometheus توی مقیاس بزرگ هزینه opex بالایی داره. ولی این محدودیت‌ها و هزینه‌ها هرچقدر باشه، ارزشش رو داره تا سرویس بهتری ارائه بدیم (با عرض احترام و شرمندگی خدمت سامورایی‌های عزیز جمع 😅)

- با اینکه مشارکت در نظرسنجی کمتر از ۱۰ درصد اعضاء کانال بود، ولی جالب بود. ممنون 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
سلام!
لینک گوگل میت جلسه امروز تغییر کرد، لینک جدید کیفیت HD و امکان ضبط خودکار جلسه رو داره.

🔗 گوگل میت: یکشنبه،۱۶ دی‌ماه و ۵ ژانویه؛ ساعت ۱۶:۳۰ به وقت تهران

من ۱۰ دقیقه قبل از شروع جلسه، برای سلام و احوال‌پرسی و شنیدن سوالات و... آنلاین خواهم بود.

امیدوارم جلسه خوبی داشته باشیم 😊🌱
Please open Telegram to view this post
VIEW IN TELEGRAM
9
⚡️📎 کاربرد و فرصت‌های Recognizers Text چیه و چرا باید بهش اهمیت بدیم؟

یه چالش جالب که پرداختن بهش می‌تونه تجربه کاربری بهتری برای مصرف‌کننده نهایی و تجربه بهتری سمت توسعه‌دهنده‌ها ایجاده کنه:
✍️ فهمیدن و پردازش متن‌هایی که آدم‌ها می‌نویسن.

حالا می‌تونه یه تاریخ باشه که تو یه فرم پر می‌کنن، یه عدد باشه که تو چت وارد می‌کنن یا یه عبارت مثل "یه هفته بعد" که قراره تبدیل به یه تاریخ واقعی بشه. اینجاست که ابزاری مثل Microsoft Recognizers Text میاد وسط و همه این کارا رو برامون ساده‌تر می‌کنه.

کتابخونه Microsoft Recognizers Text ابزاری قدرتمنده که وظیفه اصلیش اینه که متن ورودی رو بخونه و بفهمه. این یعنی چی؟ یعنی اگه کاربر شما بنویسه:
- "سه‌شنبه آینده"
- "۱۰۰ دلار"
- "۴۵ درصد"
- یا حتی یه شماره تلفن یا آدرس ایمیل

این ابزار می‌فهمه که با چه نوع داده‌ای سروکار داره و اون رو به یه فرمت ساخت‌یافته (Structured Format) تبدیل می‌کنه.

به چه دردی می‌خوره؟
فرض کن داری یه بات چت می‌سازی یا یه اپلیکیشن هوشمند که باید ورودی‌های کاربر رو تجزیه و تحلیل کنه. این ابزار می‌تونه بهت کمک کنه تا:
۱. زمان و تاریخ: هر نوع تاریخ یا زمانی که به زبان طبیعی نوشته شده (مثل "فردا ساعت ۳").
۲. اعداد و واحدها: درصدها، مقادیر پولی (مثل "۲۰۰ یورو") یا اندازه‌ها (مثل "۵ کیلو").
۳. ساختارهای متنی خاص: مثل ایمیل، شماره تلفن، آدرس IP، URL و غیره.

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

پلتفرم‌ها و زبان‌های پشتیبانی‌شده
کتابخونه Recognizers Text یه ابزار کراس‌پلتفرمه که فعلاً برای NET ،Python و JavaScript آماده استفاده‌ست. برای جاوا هم به زودی ریلیز خواهد شد. پس هرجایی که این زبان‌ها رو داریم، می‌تونیم راحت ازش استفاده کنیم.

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

چرا باید ازش استفاده کنیم؟
۱. سرعت توسعه بالا: به جای اینکه خودمون یه الگوریتم برای تشخیص این چیزا بنویسیم، یا توی regexهای ساده دست و پا بزنیم تا ایمیل و شماره تلفن بفهمیم، از یه ابزار آماده و غنی استفاده کنیم که کلی بهبود زمان و کیفیت رو تجربه کنیم.

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

۳. انعطاف‌پذیری: می‌تونیم به راحتی یه مدل جدید بسازیم یا یه زبانی که ساپورت نمی‌کنه رو بهش اضافه کنیم.

👀 چطوری استفاده کنیم؟
برای استفاده، باید یکی از پکیج‌های آماده‌شده رو نصب کنی:
- برای NET.: بسته Microsoft.Recognizers.Text

- برای پایتون:
pip install recognizers-text


- برای JavaScript:
npm install @microsoft/recognizers-text



🎮 مثال ساده:
فرض کن می‌خوایم یه تاریخ رو از متن کاربر استخراج کنی. کد زیر رو تو Python اجرا کن:

from recognizers_date_time import DateTimeRecognizer

recognizer = DateTimeRecognizer("en-us")
model = recognizer.get_date_time_model()
result = model.parse("I have a meeting tomorrow at 3 PM.")

print(result)


string inputText = "I have a meeting tomorrow at 3 PM.";

string culture = CultureInfo.GetCultureInfo("en-US").Name;

var model = DateTimeRecognizer.RecognizeDateTime(inputText, culture);

foreach(var result in model) {
Console.WriteLine($ "Text: {result.Text}");
Console.WriteLine($ "Type: {result.TypeName}");

foreach(var resolution in result.Resolution["values"]) {

Console.WriteLine($ "Resolution: {resolution}");

}
}


خروجی این می‌شه یه آبجکت که اطلاعات دقیق تاریخ و زمان رو در خودش داره. راحت‌تر از این هم داریم؟

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

💡 خود مایکروسافت هم ازش استفاده می‌کنه، مثلا توی ToDo یا ...
📱 گیت‌هاب Recognizers-Text
💬 نظرتون چیه؟ به درد می‌خوره؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3😍2
✍️💫 نمونه دنیای واقعی: کلودفلر چجوری به مستندات فنی نگاه می‌کنه؟

سلام! مستندنویسی فنی یکی از مغفول‌ترین بخش‌های توسعه نرم‌افزار، خصوصا در ایرانه! همه می‌گن خیلی واجبه و ما خیلی ارج می‌نهیم به مستندات، ولی آخرش همون همه، مشمول ترک واجبات و ارج ننهادن می‌شن! حتی technical write پوزیشن گمنامیه توی لیست مشاغل. حالا اینکه چطور کلودفلر، به عنوان شرکتی که توی ۱۹٪ اینترنت رد پاش دیده می‌شه و درآمد حدود ۱.۳ میلیارد دلاری داره (۲۰۲۳) چجوری به مستندات فنی‌اش نگاه می‌کنه و رویکردش چیه؛ می‌تونه خیلی آموزنده باشه.

🗣️ یه نگاه متفاوت به مستندات
یه روزی حدود ۷ سال پیش توی یکی از استارتاپ‌های اثرگذار ایران، با کلی بحث و استدلال، پوزیشن تکنیکال رایتر رو باز کردم و به سختی تلاش کردم مستندات رو یک محصول از تیم معرفی کنم. ولی ۲-۳ سال پیش خوندم که کلودفلر، خیلی ساختارمند و اصولی، مستندات فنی رو محصول می‌دونن، و حتی ترم PCX یا Product Content Experience خلق کردند. یعنی دقیقاً همونطور که روی محصولاتشون وقت میذارن، برنامه‌ریزی میکنن و بهبودش میدن، با مستنداتشون هم همینطور رفتار میکنن.

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

چطور این کار رو میکنن؟
۱. تیم مخصوص دارن: یه تیم مخصوص به اسم PCX یا Product Content Experience دارن که کارشون اینه که مطمئن بشن مستندات در بهترین کیفیت ممکن هستن.

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

۳. اپن سورس هستن: جالبه بدونید که مستندات کلودفلر اپن سورسه! یعنی هر کسی میتونه توش مشارکت کنه و بهترش کنه.

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

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

شاید بد نباشه یه نگاهی به این رویکرد داشته باشید. شاید بشه ازش ایده گرفت و توی پروژه‌هاتون اینجوری نگاه کنید! برخی هزینه‌ها، سرمایه‌گذاری و برخی پیشگیری از شکسته.

📱 ریپازیتوری مستندات کلودفلر
بخش توسعه‌دهنده‌های کلودفلر
ابزار Astro که جدیدا بهش مهاجرت کردن (قبلا روی Hugo بودن)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2🤔1
🎮 معرفی DevToys: جعبه‌ابزار همه‌کاره

یه ابزار باحال که طی چند سال گذشته بهتر و کامل‌تر شده، و البته به جای سرچ کردن «فلان چیز online» کار رو راحت کرده. DevToys یه اپلیکیشن اوپن‌سورسه که روی ویندوز و مک و لینوکس نصب می‌شه و مجموعه‌ای از ابزارهای کاربردی رو یکجا جمع کرده. خودش می‌گه یه چاقوی سوئیسی که همه چی توش پیدا میشه!

⚙️ لیست ابزارهای موجود توی این جعبه ابزار

ابزارهای کدنویسی، تست و فرمت‌دهی (XML, JSON,SQL, Regex Yaml, JSON Path)

ابزارهای تبدیل و رمزنگاری (Base64، JWT، Hash/Checksum، Number Base)

ابزارهای متنی و فرمت (Text Comparer، List Comparer، Markdown Preview، Lorem Ipsum Generator، URL/HTML Text Encoder)

ابزارهای تصویری و گرافیکی (Image Converter، Color Blindness Simulator، QR Code Generator)

ابزارهای مدیریت و امنیت (Password Generator، UUID Generator، Certificate Decoder، Cron Expression Parser)

🔌 نوشتن افزونه برای DevToys

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

📱 ریپو گیت‌هاب
🔗 سایت DevToys
🔌 راهنمای ساده نوشتن افزونه جدید

💬 ایده میده دارین برای افزونه نوشتن؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🚀 📱 نقشه‌ راه Rider برای ۲۰۲۵.۱

۱. تسهیل پروفایلینگ
با اینکه ابزارهای فعلی مثل Dynamic Program Analysis و dotTrace خوبن، ولی تیم Rider می‌خواد اون‌ها رو ساده‌تر و عمیق‌تر توی فرآیند توسعه ادغام کنه. عملا با توسعه نرم‌افزار یکپارچه‌‌ترشون کنه و دیگه ابزار جداگانه به نظر نیان.

۲. دیباگینگ
دیباگ کردن همزمان کدهای NET. و ++C، مخصوصاً برای Unity، Unreal، و اپ‌های Desktop با Mixed Mode Debugging.

۳. توسعه از راه دور (Remote Development)
پشتیبانی کامل از Windows برای توسعه از راه دور. دیگه چه ویندوز باشه، چه مک یا لینوکس، حس یه IDE لوکال رو خواهی داشت. (مثل SSH/WSL Remote development در VS Code)

۴. پشتیبانی از پروژه‌های SQL
ارتقا ابزارهای SQL با استفاده از SQL Tools API (مثل VS Code). مدیریت مستقیم پروژه‌های SQL Server. مقایسه دقیق Schema‌ها. کراس‌پلتفرم شدن برای کار با دیتابیس‌ها. (عملا بخشی از DataGrip رو میاره توی Rider)

۵. پشتیبانی پیشرفته‌تر Roslyn

📅 برنامه‌های آینده
ویژگی‌های مهم مثل Mixed Mode Debugging هنوز اول راه هستن، ولی قابلیت‌هایی مثل Visualizerها و Remote Development در حال آماده شدن هستن.
برنامه Early Access Program (EAP) به زودی شروع میشه و می‌تونید نسخه‌های غیرنهایی رو تست کنید.

منبع ۱
منبع ۲
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚙️ مقدمه‌ای بر Refit و مقایسه با گزینه‌های دیگه برای توسعه REST API

تعامل با APIها اینقدر رایجه که می‌شه بخش جدایی‌ناپذیری از توسعه دونست. هرچند، این تعامل با HttpClient بومی دات‌نت می‌تونه گاهی پیچیده و زمان‌بر بشه. توی این پست یه توضیح ابتدایی در مورد Refit می‌دم تا اگر 🤓 شدیم، توضیح کامل‌تری بدم. Refit کتابخونه‌ایه که می‌تونه تجربه‌ی کار با APIها رو ساده‌تر، خواناتر و کارآمدتر کنه. البته، Refit رو با سایر کتابخونه‌های مشابه مثل RestSharp، EasyHttp، و RestEase مقایسه می‌کنم.

چرا از HttpClient مستقیماً استفاده نکنیم؟
بومی‌ترین ابزار HttpClient است، ولی مشکلاتی هم داره:

*️⃣ کدهای تکراری و غیر قابل نگهداری: برای هر درخواست، باید پارامترها، هدرها، و سریالایز/دسریالایز کردن داده‌ها رو مدیریت کنیم.

*️⃣ مدیریت سخت و خطاپذیر: با اینکه کنترل کامل روی درخواست‌ها و پاسخ‌ها می‌ده، ولی اگر جزئیاتی مثل هدر یا پارامترها فراموش بشه، خطاها معمولاً در زمان اجرا شناسایی می‌شن.

*️⃣ مشکلات مدیریت منابع: اگر درست استفاده کنیم عملکرد بهینه و سربار کمتری داره؛ ولی استفاده نادرست از HttpClient ممکنه به مشکلاتی مثل نشت (هدررفت) منابع منجر بشه.

👀 معرفی Refit
حالا Refit یک کتابخونه REST برای دات‌نت است که امکان تعریف APIها به صورت اینترفیس رو فراهم می‌کنه. این کتبخونه به طور خودکار اینترفیس رو پیاده‌سازی و تمام عملیات HTTP را مدیریت می‌کنه.

ویژگی‌های برجسته Refit:

سریالایز/دسریالایز خودکار: نیازی نیست داده‌ها را به صورت دستی به JSON تبدیل کنیم.

کاملا Type-safety رو در زمان کامپایل رعایت می‌کنه: خطاها در زمان کامپایل شناسایی می‌شون، نه در زمان اجرا.

پشتیبانی از تمام متدهای HTTP: مثل GET، POST، PUT، DELETE و...

مدیریت ساده‌ی هدرها و پارامترها: می‌تونید به سادگی هدرها و پارامترهای مورد نیاز هر درخواست را اضافه کنین.

کد تمیز و خوانای داره
یکپارچگی عالی با Dependency Injection
پشتیبانی از Polly برای Circuit Breaker و Retry
توسعه مستمر توسط تیم .NET Foundation

📱 نمونه کد:

public interface IApiService
{
[Get("/users/{id}")]
Task<User> GetUserAsync(int id);

[Post("/users")]
Task<User> CreateUserAsync([Body] User user);
}

// استفاده از Refit
var api = RestService.For<IApiService>("https://api.example.com");
var user = await api.GetUserAsync(1);


مقایسه اولیه با Refit با RestSharp, EasyHttp, و RestEase

مقایسه با RestSharp
قدمت و کاربرد: RestSharp یکی از قدیمی‌ترین لایبرری‌های دات‌نت برای کار با REST APIها است.
مزایا:
پشتیبانی قوی از پارامترها و هدرهای پیچیده.
انعطاف‌پذیری بالا در مدیریت درخواست‌ها و پاسخ‌ها.
معایب:
کدها نسبت به Refit کم‌تر خوانا هستند.
نیاز به سریالایز/دسریالایز دستی در مواردی خاص.

مقایسه با EasyHttp
سادگی: EasyHttp برای توسعه‌دهنده‌هایی طراحی شده که به دنبال ساده‌ترین روش ارسال درخواست‌های HTTP هستن.
مزایا:
سریع و آسان برای شروع.
معایب:
عدم پشتیبانی پیشرفته از تایپ-سیف و ساختار اینترفیس.
انعطاف‌پذیری کم‌تر نسبت به RestSharp و Refit.

مقایسه با RestEase
مشابهت با Refit از این نظر که از اینترفیس‌ها برای تعریف API استفاده می‌کنه.
مزایا:
قابلیت تعریف و تغییر هدرها و پارامترها در سطح متد.
معایب:
پیچیدگی بیش‌تر در پیکربندی.
جامعه‌ی کاربری و مستندات کم‌تر نسبت به Refit.

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

در مقایسه با سایر لایبرری‌ها:

در مقابل HttpClient: کدهای ساده‌تر و خواناتر.
در مقابل RestSharp: رویکرد مدرن‌تر و استفاده از اینترفیس‌ها.
در مقابل EasyHttp: قابلیت‌های پیشرفته‌تر.
در مقابل RestEase: مستندات بهتر و پشتیبانی گسترده‌تر.

📚 مستندات
📱 ریپو گیت‌هاب
💬 نظر؟ بیشتر بدونیم: 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓14👍21
🧠🧠 عامل‌های هوش مصنوعی یا AI Agents

عامل‌های هوش مصنوعی یا AI Agentها که این روزها خیلی تب داغی دارن، در واقع برنامه‌هایی هستن که می‌تونن به طور خودکار و مستقل تصمیم بگیرن و عمل کنن. این عامل‌ها از محیط اطرافشون اطلاعات می‌گیرن، اون‌ها رو پردازش می‌کنن و بر اساس هدفی که براشون تعریف شده، بهترین اقدام رو انجام میدن.

🎮 انواع عامل‌های هوش مصنوعی

1️⃣ عامل‌های بازتابی ساده (Simple Reflex Agents):
فقط بر اساس قوانین از پیش تعریف‌شده و داده‌های لحظه‌ای عمل می‌کنه. این نوع ایجنت‌ها نمی‌تونن به شرایطی که خارج از "شرط-عمل" مشخص‌شده هستن، واکنش بدن. برای همین، بیشتر برای کارهای ساده‌ای مناسبن که نیاز به آموزش پیچیده ندارن.
- مثل: یه ترموستات که فقط دمای فعلی رو می‌بینه و تصمیم می‌گیره که سیستم گرمایش رو روشن یا خاموش کنه.
- مثل: ریست کردن رمز عبور استفاده کنید، به‌شرطی که کلمات کلیدی خاصی رو در مکالمه‌ی کاربر شناسایی کنه.


2️⃣ عامل‌های بازتابی مبتنی بر مدل (Model-based Reflex Agents):
این ایجنت‌ها خیلی شبیه ایجنت‌های بازتابی ساده‌ اند، اما تصمیم‌گیری‌شون پیشرفته‌تره. به‌جای اینکه فقط یه قانون خاص رو دنبال کنن، نتایج و پیامدهای احتمالی رو قبل از تصمیم‌گیری بررسی می‌کنن. با استفاده از داده‌های موجود، یه مدل داخلی از دنیای اطراف خودشون می‌سازن و از اون برای تصمیم‌گیری کمک می‌گیرن.
- مثل یه ربات مسیریاب که نقشه محیط رو داره و می‌تونه بهترین مسیر رو پیدا کنه.
- مثل ماشین‌های خودران


3️⃣عامل‌های مبتنی بر هدف (Goal-based Agents):
اسم دیگه‌شون ایجنت‌های قاعده‌منده (rule-based agent) و توانایی استدلال قوی‌تری دارن. علاوه بر تحلیل داده‌های محیط، روش‌های مختلف رو مقایسه می‌کنن تا به بهترین شکل به هدفشون برسن. این ایجنت‌ها همیشه بهینه‌ترین مسیر رو انتخاب می‌کنن و برای انجام کارهای پیچیده مثل پردازش زبان طبیعی (NLP) یا اپلیکیشن‌های رباتیک خیلی مناسبن.
- مثال: سیستم‌های توصیه‌گر مثل اونایی که تو خرید آنلاین می‌بینیم.
- مثال: جاروبرقی‌های روبوتیک که یک هدف دارن، تمیز کردن تمام سطوح قابل دسترسی و مسیر و عملکردشون رو منطبق با رسیدن به این هدف تنظیم می‌کنن.

4️⃣ عامل‌های مبتنی بر مطلوبیت (Utility-based Agents):
اینا از الگوریتم‌های پیچیده‌ای برای کمک به کاربر استفاده می‌کنن تا بهترین نتیجه ممکن رو بگیرن. عملا سناریوهای مختلف رو با توجه به مقدار مطلوبیت یا مزایای هرکدوم مقایسه می‌کنن و گزینه‌ای رو انتخاب می‌کنن که بیشترین منفعت رو داشته باشه.
- مثل: مشتری‌ها می‌تونن از یه ایجنت مبتنی بر مطلوبیت برای پیدا کردن بلیط پرواز با کمترین زمان سفر استفاده کنن، حتی اگه قیمت بالاتر باشه.
- مثل: عامل‌های مورد کاربرد برای معامله سهام یا رمزارز که سعی می‌کنن بیشترین منفعت رو به کاربر برسونن.

5️⃣ عامل‌های یادگیرنده (Learning Agents):
دائماً از تجربه‌های گذشته خودشون یاد می‌گیرن و نتایجش رو بهبود می‌دن (مثل reinforcement learning توی ml). با استفاده از ورودی‌های حس‌گرها و مکانیزم‌های بازخورد، این ایجنت‌ها در طول زمان خودشون رو تطبیق می‌دن و یادگیریشون رو ارتقا می‌دن. علاوه بر این، از یه مولد مسئله استفاده می‌کنن تا وظایف جدیدی طراحی کنن و با استفاده از داده‌های جمع‌آوری‌شده و نتایج گذشته خودشون رو آموزش بدن.
- مثل: عامل‌های شناسایی کلاه‌برداری که مرتبا روش‌های جدید و راه دررو های قبلی رو بررسی می‌کنه و خودش رو تطبیق می‌ده
- مثل: عامل‌های پیشنهاد دهنده محتوا که بر اساس رفتار و بازخورد کاربر خودشون رو مرتبا بهبود می‌دن.

6️⃣عامل‌های سلسله‌مراتبی (Hierarchical Agents)
اینا یه گروه منظم از ایجنت‌های هوشمندن که در چندین سطح سازماندهی می‌شن. ایجنت‌های سطح بالاتر وظایف پیچیده رو به کارهای کوچکتر تقسیم می‌کنن و اون‌ها رو به ایجنت‌های سطح پایین‌تر محول می‌کنن. هر ایجنت به‌طور مستقل کار خودش رو انجام می‌ده و گزارش پیشرفت رو به ایجنت ناظر خودش ارسال می‌کنه. ایجنت سطح بالاتر نتایج رو جمع‌آوری می‌کنه و ایجنت‌های زیرمجموعه رو هماهنگ می‌کنه تا به‌طور جمعی به اهدافشون برسن.
- مثل: ایجنت کنترل ترافیک هوایی یا مدیریت انبار، اینا اینقدر پیچیده هستن و کارهای متعدد دارن که به صورت سلسله‌مراتبی مدیریت می‌شن.

7️⃣ سیستم‌های چند عاملی (Multi-Agent Systems)
سیستم‌های چندعاملی جذابیتشون توی تنوع و تعاملات غنی‌شونه. ایجنت‌های مختلف در تعامل با هم کار می‌کنن. هر ایجنت به‌صورت نیمه‌مستقل عمل می‌کنه ولی طوری طراحی شده که با بقیه ایجنت‌ها تعامل داشته باشه و یه اکوسیستم پویا بسازه که رفتار جمعی از اقدامات فردی به وجود بیاره.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
🔤 طبقه‌بندی‌های دیگه‌ای هم هستن و نمیشه گفت دقیقا فقط همین تعداد ایجنت وجود دارن، بعضی طبقه‌بندی‌ها، Robotic Agents یا Virtual Assistants رو هم مطرح می‌کنن یا همین ۷ تا رو هم گاها با اسامی مشابه معرفی می‌کنن.


به نظرم خوبه تا برنامه‌نویس‌ها ایجنت‌نویسی رو تمرین کنن، مدیرمحصول‌ها بهش فکر کنن و نادیده نگیرنشون. چون مثلا یه ایجنت ساده و جمع‌وجور می‌تونه کارتابل، یا لیست سفارشات یا... رو بررسی کنه و نتیجه رو یا توی رابط کاربری منعکس کنه یا بفرسته برای یه ایجنت دیگه برای یه کار دیگه.

و اینکه APIهامون رو سعی کنیم تا حد امکان Agent Friendly طراحی کنیم تا بعدن بتونیم agent ها رو توی چرخه اضافه کنیم. ایجنت‌ها دقیقا همون بخش‌هایی هستن که بهره‌وری و دقت کاربر رو بالا می‌برن و درست یا غلط، شاعبه‌ی حذف فرصت‌های شغلی زیادی رو در آینده به وجود آوردن. فرض کنید ایجنتی که اسناد مالی رو بررسی و موارد مشکوک رو جدا می‌کنه، چقدر وقت حسابرسی و ممیزی رو صرفه‌جویی می‌کنه؟ یا انواع مثال‌های دیگه حتمن در حوزه کاریتون به ذهنتون می‌ٰرسه.

💬 بهش فکر می‌کنین؟ براتون مفیده؟ نظرتون رو بگید...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
⚙️ استفاده از سی‌شارپ بدون ساخت سولوشن و پروژه و...
«عینهو bash یا python»


پیش اومده براتون که نیاز داشته باشید از قابلیت‌های سی‌شارپ برای خودکار کردن کاری استفاده کنید ولی یا یه پوشه داشته باشید توش فقط و فقط فایل csx. بگذارید و صداشون کنید برای اجرا؟

مثلا: یه فایل داشته باشید به اسم backup_copy_notify.csx که از یه سری چیز بکاپ بگیره، یه جا کپی کنه و نتیجه رو ایمیل کنه. یا مثلا یه API صدا کنه یه چیزی از دلش بیرون بکشه و بنویسه توی یه فایل. یا...

یه ابزار ساده به نام dotnet-script هست که شاید توی vs code هم ازش استفاده کرده باشید (البته ذاتا جزو dotnet tool است و کامندلاینی است، ولی می‌شه همراه با script runner توی vs code هم به کار برد)

نصب: (مک، ویندوز، لینوکس)
dotnet tool install -g dotnet-script

برای یادگیری کافیه ۱۰ دقیقه وقت بگذارید و از مستندات خودش ببینید چیه و چجوری کاربرد داره

📱 ریپو گیت‌هابش
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153
📱 ویدیو وبینار NET Aspire. روی یوتیوب قرار گرفت

ویدیو کامل دورهمی هفته گذشته با موضوع دات‌نت اسپایر شامل از معرفی تا پیاده‌سازی و دپلوی

مدت: ۱ ساعت و ۱۳ دقیقه

🔗 لینک یوتیوب
#dotnet #aspire #video
Please open Telegram to view this post
VIEW IN TELEGRAM
12
دورهمی آنلاین برای مرور اخبار نرم‌افزاری ماه، بررسی پروژه‌های محبوب ماه، و گپ و گفت فنی آزاد، یکشنبه ۳۰ دی (۱۹ ژانویه) ساعت ۱۸:۰۰ به وقت تهران:
Final Results
53%
حتمن میام.
17%
نمیام.
30%
اسم می‌نویسم ولی می‌دونم که نمیام.
7
سلام
دوستانی که جلسه یکشنبه میان، لطفا ایمیلشون رو اینجا بگن که براشون لینک گوگل میت رو بفرستم. اگر موضوع خاصی هم دوست دارید بگید یا بشنوید (خودتون در ارائه مشارکت کنید، یا من به موضوعات اضافه کنم (اگر بلد باشم البته)) توب فرم ذکر کنید لطفا 😊🌱

https://forms.gle/DwXev6SPuSftJsKv6
👍3
tech-afternoon pinned «سلام دوستانی که جلسه یکشنبه میان، لطفا ایمیلشون رو اینجا بگن که براشون لینک گوگل میت رو بفرستم. اگر موضوع خاصی هم دوست دارید بگید یا بشنوید (خودتون در ارائه مشارکت کنید، یا من به موضوعات اضافه کنم (اگر بلد باشم البته)) توب فرم ذکر کنید لطفا 😊🌱 https://fo…»