DotNet | دات نت
1.2K subscribers
671 photos
231 videos
486 files
730 links
تو این روزا بهتره که همیشه علم خودمون رو بالا ببریم و بتونیم با سریع ترین راه ممکن خودمونو بروز نگه داریم.
- سعی کنیم از کمترین امکانات بیشترین بهره رو ببریم
منتظرت هستیم😉
دنیا رو جای بهتری برای یادگیری کنیم 🌹
#course #book


🆔 @dotnetcode
Download Telegram
🛠 نجات توسعه‌دهنده‌ها در شرایط «نت ملی»؛ تجربیات عملی ما برای زنده نگه داشتن چرخه تولید

توی این چند وقت که دسترسی‌ها محدود شد و اینترنت به حالت داخلی (Intranet) رفت، ما هم مثل خیلی از تیم‌های دیگه با چالش‌های جدی روبرو شدیم. اما به جای متوقف شدن، سعی کردیم با ابزارهای جایگزین و تغییر استراتژی، جریان کار رو حفظ کنیم.

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

1️⃣ عبور از تحریم و محدودیت پکیج‌ها (Frontend & Backend)
برای پروژه‌هایی مثل Next.js که وابستگی زیادی به پکیج‌ها دارن، اولین حرکت ما استفاده از Mirror Serverهای داخلی بود.

🔹 پیشنهاد: سرویس Runflare تقریباً اکثر ابزارها رو Mirror کرده، سرورهاش داخلیه و سرعتش عالیه.
🔗 https://runflare.com/mirrors/

🔥 خبر ویژه: همون روز اول با تیم فنی ران‌فلر صحبت کردم و دمشون گرم، خیلی سریع درخواست رو پیگیری کردن و Nuget رو هم به لیست سرویس‌هاشون اضافه کردن. الان دیگه دات‌نتی‌ها هم می‌تونن راحت پکیج‌ها رو دریافت کنن.

2️⃣ مدیریت داکر ایمیج‌ها (Docker Images)

برای پول (Pull) کردن ایمیج‌ها، پلتفرم docker.ir گزینه کارراه‌اندازی هست.

⚠️ نکته حیاتی برای دات‌نتی‌ها:
از اونجایی که ایمیج‌های دات‌نت روی Docker Hub نیستن و روی رجیستری مایکروسافت (MCR) قرار دارن، حتماً ایمیج‌های SDK و ASP Core رو:
۱. یا روی سیستم لوکال داشته باشید.
۲. یا (روش اصولی‌تر) روی رجیستری داخلی خودتون Push کنید تا در صورت قطعی، بیلدها فیل نشن.

3️⃣ خداحافظی با وابستگی به کش لوکال (The Nexus Solution)
اوایل کار متکی به کشِ لوکال سیستم‌ها (فولدر .nuget) بودیم، اما این روش ریسک بالایی داشت.

راهکار پایدار: ما Nexus رو بالا آوردیم. با این کار تمام پکیج‌های فرانت و بک‌‌اند یک‌بار در نکسوس کش میشن و اگه اینترنت کلاً قطع بشه، تیم فنی بدون هیچ توقفی به کارش ادامه میده.

4️⃣ ابزارهای مدیریت سورس، CI/CD و ارتباطات
برای اینکه تیم ریموت و پایپ‌لاین‌ها از کار نیفتن، از سرویس‌های داخلی و Self-Hosted استفاده کردیم:
* گیت و رانر: سرویس Hamgit (محصول هم‌روش) هم مخازن رو میزبانی می‌کنه و هم Runner برای پایپ‌لاین‌ها میده.
* جلسات آنلاین: جایگزین Google Meet، از Jitsi استفاده کردیم (هم توی بازارچه هم‌روش هست، هم می‌تونید روی سرور خودتون بالا بیارید).
* چت سازمانی: ما خودمون Mattermost رو روی سرور شخصی بالا آوردیم که عالیه. اگر دنبال سرویس آماده‌اید، Rocket.Chat در بازارچه ابری هم‌روش موجوده.

🔗 یک گزینه کمکی دیگر:
سرویس چابکان هم Mirrorهای خوبی ارائه میده که داشتن لینککش به عنوان پلن B ضرری نداره:
🔗 https://iran.chabokan.net/#services

💡 هدفم از این پست فقط انتقال تجربه و کمک به کامیونیتی بود. امیدوارم به کارتون بیاد. هر جا سوالی بود یا کمکی از دستم برمیومد، حتماً بگید.

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

📚💻 @dotnetcode 🖥👨‍💻

#DevOps #DotNet #Network #Programming #Intranet #ExperienceSharing #SoftwareEngineering
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍4👏4
🚨 تغییر مهم در MassTransit: لایسنس تجاری از نسخه ۹.۰.۰

اگر در پروژه‌های دات‌نتی از کتابخانه MassTransit استفاده می‌کنید، مراقب آپدیت‌های جدید باشید. از نسخه 9.0.0 به بعد، این کتابخانه مدل لایسنس خود را به Commercial تغییر داده است.

خلاصه وضعیت جدید:
🔹 نسخه‌های ۸ و قدیمی‌تر: همچنان رایگان و Open Source (Apache 2.0) باقی می‌مانند.
🔹 نسخه ۹ و بالاتر: برای شرکت‌هایی با درآمد بالای ۱ میلیون دلار در سال پولی است.
🔹 استارتاپ‌ها و توسعه‌دهندگان مستقل: اگر درآمد سالانه زیر ۱ میلیون دلار باشد، همچنان می‌توانید با تخفیف ۱۰۰ درصدی (رایگان) استفاده کنید.

---

🛠 راهکار فنی: جلوگیری از آپدیت خودکار به نسخه پولی

برای اینکه ابزارهایی مثل NuGet یا Dependabot به صورت خودکار پروژه شما را به نسخه ۹ (پولی) ارتقا ندهند، باید ورژن را در فایل .csproj قفل کنید. استفاده از براکت `[]` به معنای اجبار روی یک نسخه دقیق است:

<PackageReference Include="MassTransit" Version="[8.5.7]" />


چرا این کار مهم است؟

* نوشتن Version="8.5.7" به NuGet اجازه می‌دهد نسخه‌های بالاتر (مثل 9.0.1) را هم نصب کند.
* اما Version="[8.5.7]" یعنی فقط و فقط همین نسخه نصب شود و جلوی ارتقای ناخواسته به نسخه پولی را می‌گیرد.

اگر پروژه‌ی بزرگی دارید که فعلاً بودجه خرید لایسنس ندارد، حتماً این تغییر را در پکیج‌های خود اعمال کنید.

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

📚💻 @dotnetcode 🖥👨‍💻

#DotNet #MassTransit #CSharp #Programming_Tips #Microservices
Please open Telegram to view this post
VIEW IN TELEGRAM
4👏3👍2🔥1
🔥 نکته حیاتی در Hangfire: جنگ با ساعت و تایم‌زون‌ها! 🌍

اگر تا حالا براتون پیش اومده که جابی رو برای ساعت ۸ صبح تنظیم کردید ولی ساعت ۱۱:۳۰ اجرا شده، این پست برای شماست!

⚠️ ماجرا چیه؟
هنگ‌فایر (Hangfire) به صورت پیش‌فرض (Default) همه جاب‌های تکرارشونده (Recurring Jobs) رو بر مبنای ساعت UTC اجرا می‌کنه. یعنی اگر تنظیمات تایم‌زون رو بهش ندید، باید اختلاف ساعت ایران با گرینویچ رو دستی حساب کنید که اصلا جالب نیست.

حالا اگر بخوایم بگیم "به وقت ایران اجرا شو"، با یه چالش جدید روبرو می‌شیم:

🔸 ویندوز می‌گه: "Iran Standard Time"

🔸 لینوکس/داکر می‌گه: "Asia/Tehran"
اگر این تفاوت هندل نشه، روی سرور لینوکسی یا کانتینر داکر به خطای TimeZoneNotFoundException می‌خورید! 🤯

راه حل نهایی (Cross-Platform):
با این تیکه کد، هم مشکل UTC رو حل کنید و هم کدی بنویسید که روی ویندوز، لینوکس و مک بدون تغییر کار کنه:
using System.Runtime.InteropServices;

// 1. تشخیص خودکار شناسه تایم‌زون بر اساس سیستم‌عامل
// Windows -> "Iran Standard Time"
// Linux/Docker -> "Asia/Tehran"
var tehranId = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? "Iran Standard Time"
: "Asia/Tehran";

// 2. تنظیم ساعت به وقت ایران
RecurringJob.AddOrUpdate(
type.FullName,
() => job.ExecuteAsync(),
attribute.CronExpression,
new RecurringJobOptions
{
// خداحافظ UTC، سلام تهران! 👋
TimeZone = TimeZoneInfo.FindSystemTimeZoneById(tehranId)
}
);

💡 با این روش، دیگه نگران جلو/عقب کشیدن ساعت‌ها یا تفاوت محیط لوکال و سرور نباشید.

🔗 بحث مرتبط در کامیونیتی هنگ‌فایر:
https://discuss.hangfire.io/t/need-local-time-instead-of-utc/279/7


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

📚💻 @dotnetcode 🖥

#CSharp #DotNet #Hangfire #Docker #Backend #TimeZone #Tips
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍7🔥3
🔴 انقلاب جدید در گیت‌هاب: ادغام مستقیم Claude و Codex برای کدنویسی خودکار!

گیت‌هاب (GitHub) در یک حرکت بزرگ برای رقابت با ابزارهایی مثل Cursor، رسماً اعلام کرد که ایجنت‌های هوش مصنوعی Claude (از شرکت Anthropic) و Codex را مستقیماً به پلتفرم خود اضافه کرده است.

💡 چه اتفاقی افتاده؟

تا پیش از این، کوپایلت (Copilot) بیشتر متکی به مدل‌های GPT بود، اما حالا توسعه‌دهندگان می‌توانند از قدرت مدل‌های Claude 3.7 Sonnet و OpenAI Codex به عنوان «ایجنت» استفاده کنند.

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

🔹 فایل‌ها را ویرایش کند

🔹 دستورات ترمینال را اجرا کند

🔹 باگ‌ها را به صورت خودکار رفع نماید

🔥 ویژگی‌های کلیدی این آپدیت:

⭐️ آزادی در انتخاب مدل: اگر طرفدار منطقِ Claude هستید یا سرعتِ Codex، حالا حق انتخاب دارید.

⭐️ درک عمیق‌تر از پروژه: این ایجنت‌ها می‌توانند کانتکست (Context) کامل پروژه شما را بفهمند و تغییرات پیچیده را اعمال کنند.

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

🤔 چرا این مهم است؟

این تغییر نشان می‌دهد که گیت‌هاب نمی‌خواهد میدان را به IDEهای مبتنی بر هوش مصنوعی (مثل Cursor یا Windsurf) ببازد و قصد دارد همه چیز را در خانه خود نگه دارد.

📱لینک ویدیو :

https://youtu.be/GuTQDXKwdJQ?si=znwN0dljFmrEF615

#GitHub #AI #Claude #Copilot #Programming #TechNews

#گیت_هاب #هوش_مصنوعی #برنامه_نویسی #تکنولوژی #خبر


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

📚💻 @dotnetcode 🖥
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👏21🔥1
🎆 کوپایلت رو دیگه فقط تو VS Code حبس نکنید!

گیت‌هاب با معرفی GitHub Copilot SDK، بازی رو کلاً عوض کرد. حالا دیگه کوپایلت فقط یک افزونه تکمیل کد نیست؛ بلکه می‌تونید مغز متفکر اون رو بردارید و مستقیم توی اپلیکیشن‌های خودتون بذارید!

این یعنی چی؟ یعنی شما می‌تونید ابزارها و Agentهایی بسازید که دقیقاً با نیازهای شما و تیمتون هماهنگ باشن.
چرا این SDK یه انقلابه؟ 👇

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

جریان‌های کاری ایجنتیک (Agentic Workflows): امکان ساخت ایجنت‌هایی که می‌تونن چندین مرحله رو طی کنن، ابزارهای مختلف رو صدا بزنن (Tool Calling) و کار رو تموم کنن.

یک مثال واقعی: توی دمو، اپلیکیشنی به اسم "Flight School" ساخته شده که پروفایل گیت‌هاب شما رو تحلیل می‌کنه و دقیقاً بر اساس مهارت‌ها و پروژه‌هاتون، بهتون تمرین کدنویسی میده و حتی جواب‌هاتون رو صحیح می‌کنه!

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

💡 خلاصه: قدرت مدل‌های زبانی گیت‌هاب + دیتای اختصاصی شما = بی‌نهایت امکان جدید.
همین الان ویدیو رو ببین و اولین ایده ساخت ایجنتت رو استارت بزن! 👨‍💻👩‍💻

📱 مشاهده دمو:

https://youtu.be/ct_Ymw9RexM?si=SQgan8rBElWHns-g

#GitHubCopilot #AI #DevTools #Programming #ArtificialIntelligence


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

📚💻 @dotnetcode 🖥
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥3👍1👏1
👩‍💻 هنوز داری با کوئری‌های سنگین دیتابیس رو زیر بار میبری؟

وقتی صحبت از پرفورمنس در PostgreSQL میشه، خیلی‌ها سریع میرن سراغ ایندکس‌گذاری. اما گاهی مشکل ایندکس نیست؛ مشکل اینه که داری یه محاسبات سنگین رو بارها و بارها تکرار می‌کنی!

اینجاست که Materialized View (MatView) وارد بازی میشه. برخلاف View معمولی که فقط یه "پنجره" به دیتاست، MatView نتیجه رو واقعاً روی دیسک ذخیره (Cache) می‌کنه.
اما سوال اصلی اینه: کی باید ازش استفاده کنیم و کی فرار کنیم؟ 🤔

کجا معجزه می‌کنه؟ (Use Cases)
* داشبورد‌های مدیریتی: مدیرها معمولاً آمار لحظه‌ای نمی‌خوان؛ آمار ۵ دقیقه پیش هم راضی‌شون می‌کنه.

* کوئری‌های تحلیلی سنگین: وقتی چند تا Join و Aggregation وحشتناک داری که هر بار اجراش چند ثانیه طول میکشه.

* آرشیو دیتا: وقتی دیتای قدیمی تغییر نمی‌کنه و فقط برای گزارش‌گیری لازمش داری.

کجا نباید سمتش بری؟ (Red Flags)
* دیتای ۱۰۰٪ ریل‌تایم: اگه کاربر باید تغییر رو در میلی‌ثانیه ببینه، MatView گزینه غلطیه (چون تا Refresh نشه، دیتا قدیمیه).

* نرخ تغییرات بالا: اگه دیتای اصلی مدام در حال آپدیته، هزینه Refresh کردن MatView ممکنه بیشتر از سودش بشه.

💡 نکته حرفه‌ای (Pro Tip):

موقع آپدیت کردن ویو، دیتابیس ممکنه قفل بشه! برای اینکه سرویس نخوابه، حتماً از دستور زیر استفاده کن تا همزمان با خوندن، بتونی آپدیتش کنی:
REFRESH MATERIALIZED VIEW CONCURRENTLY

👇 همین الان چک کن:

یه نگاه به لیست Slow Queryهای پروژه‌ت بنداز. اگه کوئری تکراری و سنگین داری، شاید وقتشه "متریالایزش" کنی!

🔗 https://stormatics.tech/blogs/postgresql-materialized-views-when-caching-your-query-results-makes-sense

#PostgreSQL #Database #Performance #Backend #SQL

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

📚💻 @dotnetcode 🖥
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🔥1👏1
👩‍💻 پستگرس رو ۲.۵ برابر سریع‌تر کن!

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

تیم Multigres با یک حرکت مهندسی جذاب و کمک گرفتن از Claude Code، تونستن پارسر PostgreSQL رو بازنویسی کنن و به نتایج شگفت‌انگیزی برسن. این فقط یک آپدیت ساده نیست؛ قدرت‌نمایی ترکیب مهندسی نرم‌افزار با AI در لایه‌های عمیق زیرساختیه.

نکات کلیدی این شاهکار فنی: 👇

افزایش سرعت چشمگیر: دستیابی به سرعت ۲.۵ برابری در پردازش کوئری‌ها نسبت به پارسر استاندارد.

مهندسی با طعم AI: استفاده از هوش مصنوعی برای درک و بهینه‌سازی پیچیدگی‌های سطح پایین (Low-level).

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

این یعنی هوش مصنوعی دیگه فقط برای تولید متن و عکس نیست؛ داره وارد قلب تپنده سیستم‌ها میشه!


🔗
https://multigres.com/blog/ai-parser-engineering

#PostgreSQL #Database #AI #TechNews #برنامه_نویسی

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

📚💻 @dotnetcode 🖥
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3