🚨 تغییر مهم در MassTransit: لایسنس تجاری از نسخه ۹.۰.۰
اگر در پروژههای داتنتی از کتابخانه MassTransit استفاده میکنید، مراقب آپدیتهای جدید باشید. از نسخه 9.0.0 به بعد، این کتابخانه مدل لایسنس خود را به Commercial تغییر داده است.
خلاصه وضعیت جدید:
🔹 نسخههای ۸ و قدیمیتر: همچنان رایگان و Open Source (Apache 2.0) باقی میمانند.
🔹 نسخه ۹ و بالاتر: برای شرکتهایی با درآمد بالای ۱ میلیون دلار در سال پولی است.
🔹 استارتاپها و توسعهدهندگان مستقل: اگر درآمد سالانه زیر ۱ میلیون دلار باشد، همچنان میتوانید با تخفیف ۱۰۰ درصدی (رایگان) استفاده کنید.
---
🛠 راهکار فنی: جلوگیری از آپدیت خودکار به نسخه پولی
برای اینکه ابزارهایی مثل NuGet یا Dependabot به صورت خودکار پروژه شما را به نسخه ۹ (پولی) ارتقا ندهند، باید ورژن را در فایل
چرا این کار مهم است؟
* نوشتن
* اما
اگر پروژهی بزرگی دارید که فعلاً بودجه خرید لایسنس ندارد، حتماً این تغییر را در پکیجهای خود اعمال کنید.
🎺 برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامهنویسی، به کانال ما بپیوندید!
📚💻 @dotnetcode🖥 👨💻
#DotNet #MassTransit #CSharp #Programming_Tips #Microservices
اگر در پروژههای داتنتی از کتابخانه 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]" یعنی فقط و فقط همین نسخه نصب شود و جلوی ارتقای ناخواسته به نسخه پولی را میگیرد.اگر پروژهی بزرگی دارید که فعلاً بودجه خرید لایسنس ندارد، حتماً این تغییر را در پکیجهای خود اعمال کنید.
📚💻 @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 رو حل کنید و هم کدی بنویسید که روی ویندوز، لینوکس و مک بدون تغییر کار کنه:
💡 با این روش، دیگه نگران جلو/عقب کشیدن ساعتها یا تفاوت محیط لوکال و سرور نباشید.
🔗 بحث مرتبط در کامیونیتی هنگفایر:
https://discuss.hangfire.io/t/need-local-time-instead-of-utc/279/7
🎺 برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامهنویسی، به کانال ما بپیوندید!
📚💻 @dotnetcode🖥
#CSharp #DotNet #Hangfire #Docker #Backend #TimeZone #Tips
اگر تا حالا براتون پیش اومده که جابی رو برای ساعت ۸ صبح تنظیم کردید ولی ساعت ۱۱:۳۰ اجرا شده، این پست برای شماست!
⚠️ ماجرا چیه؟
هنگفایر (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
📚💻 @dotnetcode
#CSharp #DotNet #Hangfire #Docker #Backend #TimeZone #Tips
Please open Telegram to view this post
VIEW IN TELEGRAM
Hangfire Discussion
Need local time instead of UTC
I need to schedule recurring jobs based on local time, for example 02:00 CET (which is UTC+1 normally and UTC+2 during daylight savings time aka “summer time”). I know this introduces some problems when switching to/from summer to winter time (there is an…
❤11👍7🔥3
گیتهاب (GitHub) در یک حرکت بزرگ برای رقابت با ابزارهایی مثل Cursor، رسماً اعلام کرد که ایجنتهای هوش مصنوعی Claude (از شرکت Anthropic) و Codex را مستقیماً به پلتفرم خود اضافه کرده است.
تا پیش از این، کوپایلت (Copilot) بیشتر متکی به مدلهای GPT بود، اما حالا توسعهدهندگان میتوانند از قدرت مدلهای Claude 3.7 Sonnet و OpenAI Codex به عنوان «ایجنت» استفاده کنند.
این یعنی هوش مصنوعی دیگر فقط "پیشنهاد" نمیدهد، بلکه میتواند:
🔹 فایلها را ویرایش کند
🔹 دستورات ترمینال را اجرا کند
🔹 باگها را به صورت خودکار رفع نماید
این تغییر نشان میدهد که گیتهاب نمیخواهد میدان را به IDEهای مبتنی بر هوش مصنوعی (مثل Cursor یا Windsurf) ببازد و قصد دارد همه چیز را در خانه خود نگه دارد.
https://youtu.be/GuTQDXKwdJQ?si=znwN0dljFmrEF615
#GitHub #AI #Claude #Copilot #Programming #TechNews
#گیت_هاب #هوش_مصنوعی #برنامه_نویسی #تکنولوژی #خبر
📚💻 @dotnetcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👏2❤1🔥1
گیتهاب با معرفی GitHub Copilot SDK، بازی رو کلاً عوض کرد. حالا دیگه کوپایلت فقط یک افزونه تکمیل کد نیست؛ بلکه میتونید مغز متفکر اون رو بردارید و مستقیم توی اپلیکیشنهای خودتون بذارید!
این یعنی چی؟ یعنی شما میتونید ابزارها و Agentهایی بسازید که دقیقاً با نیازهای شما و تیمتون هماهنگ باشن.
چرا این SDK یه انقلابه؟ 👇
✅ هوش مصنوعی اختصاصی: اپلیکیشنهایی بسازید که به دیتای شما (مثل ریپوزیتوریها یا لاگها) دسترسی دارن و بر اساس اونها تصمیم میگیرن.
✅ جریانهای کاری ایجنتیک (Agentic Workflows): امکان ساخت ایجنتهایی که میتونن چندین مرحله رو طی کنن، ابزارهای مختلف رو صدا بزنن (Tool Calling) و کار رو تموم کنن.
✅ یک مثال واقعی: توی دمو، اپلیکیشنی به اسم "Flight School" ساخته شده که پروفایل گیتهاب شما رو تحلیل میکنه و دقیقاً بر اساس مهارتها و پروژههاتون، بهتون تمرین کدنویسی میده و حتی جوابهاتون رو صحیح میکنه!
✅ فراتر از چت: دیگه فقط با متن سر و کار ندارید؛ میتونید با دسکتاپ تعامل کنید، فایل بسازید یا کارهای پیچیده رو خودکار انجام بدید.
همین الان ویدیو رو ببین و اولین ایده ساخت ایجنتت رو استارت بزن! 👨💻👩💻
https://youtu.be/ct_Ymw9RexM?si=SQgan8rBElWHns-g
#GitHubCopilot #AI #DevTools #Programming #ArtificialIntelligence
📚💻 @dotnetcode
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
GitHub Copilot SDK demo: Creating "Flight School"
Chris Reddington demonstrates "Flight School," a custom Next.js application built to personalize his learning journey using the GitHub Copilot SDK. See how he leverages agentic workflows to generate daily coding challenges based on his GitHub profile, evaluate…
❤7🔥3👍1👏1
وقتی صحبت از پرفورمنس در PostgreSQL میشه، خیلیها سریع میرن سراغ ایندکسگذاری. اما گاهی مشکل ایندکس نیست؛ مشکل اینه که داری یه محاسبات سنگین رو بارها و بارها تکرار میکنی!
اینجاست که Materialized View (MatView) وارد بازی میشه. برخلاف View معمولی که فقط یه "پنجره" به دیتاست، MatView نتیجه رو واقعاً روی دیسک ذخیره (Cache) میکنه.
اما سوال اصلی اینه: کی باید ازش استفاده کنیم و کی فرار کنیم؟
* داشبوردهای مدیریتی: مدیرها معمولاً آمار لحظهای نمیخوان؛ آمار ۵ دقیقه پیش هم راضیشون میکنه.
* کوئریهای تحلیلی سنگین: وقتی چند تا Join و Aggregation وحشتناک داری که هر بار اجراش چند ثانیه طول میکشه.
* آرشیو دیتا: وقتی دیتای قدیمی تغییر نمیکنه و فقط برای گزارشگیری لازمش داری.
* دیتای ۱۰۰٪ ریلتایم: اگه کاربر باید تغییر رو در میلیثانیه ببینه، MatView گزینه غلطیه (چون تا Refresh نشه، دیتا قدیمیه).
* نرخ تغییرات بالا: اگه دیتای اصلی مدام در حال آپدیته، هزینه Refresh کردن MatView ممکنه بیشتر از سودش بشه.
موقع آپدیت کردن ویو، دیتابیس ممکنه قفل بشه! برای اینکه سرویس نخوابه، حتماً از دستور زیر استفاده کن تا همزمان با خوندن، بتونی آپدیتش کنی:
REFRESH MATERIALIZED VIEW CONCURRENTLY
👇 همین الان چک کن:
یه نگاه به لیست Slow Queryهای پروژهت بنداز. اگه کوئری تکراری و سنگین داری، شاید وقتشه "متریالایزش" کنی!
#PostgreSQL #Database #Performance #Backend #SQL
📚💻 @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 #برنامه_نویسی
📚💻 @dotnetcode
Please open Telegram to view this post
VIEW IN TELEGRAM
Multigres
A 2.5x faster Postgres parser with Claude Code | Multigres
Same engineer. Same complexity. A year last time, eight weeks this time. This isn't a story about AI writing code. It's a story about the system, expertise, and discipline that made AI actually useful.
❤3👍3