es
Feedback

¡No caigas en manos de tramposos! Telemetrio encuentra y marca estos canales 👉 Si quieres ver la etiqueta, suscríbete

آموزش برنامه نویسی سی شارپ

آموزش برنامه نویسی سی شارپ

Ir al canal en Telegram

به روز ترین مطالب برای برنامه نویسان لینک گروه برنامه‌ نویسی سی شارپ : @GroupCsharps

Mostrar más
2 292
Suscriptores
+124 horas
-27 días
-1930 días
Archivo de publicaciones
به جرعت لذت بخش ترین مدلی که تا الان ازش استفاده کردم و میکنم Fable و میتوز(س) آنتروپیک بوده ولی خب نگرانی دوستان اینه که در آینده قراره چی بشه جواب : دانش فنی همچنان مهمه که بدونید دارید چیکار میکنید همینطوری صرفا دستور دادن به AI و منتظر موندن نتیجه خارق العاده برای شما خلق نمیکنه @csharps @imshadows

در مورد این پست یه بنده خدایی سوال پرسید میگفت که میشه راحت تر نوشتش نیاز نشه هی کپی پیستش کنیم تو html جواب : آره میشه راحتر نوشتش میتونید از این دو تگ هلپر سمپل که من برای پروژه خودم نوشتم همین منطق رو استفاده کنید تغییرش بدید به نسبت پروژتون LoadingSubmitTagHelper :
[HtmlTargetElement("loading-submit")]
public sealed class LoadingSubmitTagHelper : TagHelper
{
    [HtmlAttributeName("loading-text")]
    public string LoadingText { get; set; } = "Submitting...";

    public override async Task ProcessAsync(
        TagHelperContext context,
        TagHelperOutput output)
    {
        var childContent = await output.GetChildContentAsync();

        var existingClass = output.Attributes
            .FirstOrDefault(attribute =>
                string.Equals(
                    attribute.Name,
                    "class",
                    StringComparison.OrdinalIgnoreCase))
            ?.Value?.ToString();

        output.TagName = "button";
        output.TagMode = TagMode.StartTagAndEndTag;

        output.Attributes.RemoveAll("loading-text");

        output.Attributes.SetAttribute("type", "submit");

        output.Attributes.SetAttribute(
            "x-bind:disabled",
            "submitting");

        output.Attributes.SetAttribute(
            "x-bind:aria-busy",
            "submitting");

        output.Attributes.SetAttribute(
            "class",
            string.IsNullOrWhiteSpace(existingClass)
                ? "disabled:cursor-not-allowed disabled:opacity-60"
                : $"{existingClass} disabled:cursor-not-allowed disabled:opacity-60");

        var content = new HtmlContentBuilder();

        content.AppendHtml(
            "<span x-show=\"!submitting\">");

        content.AppendHtml(childContent);

        content.AppendHtml("</span>");

        content.AppendHtml("""
            <span x-cloak
                  x-show="submitting"
                  class="inline-flex items-center gap-2">

                <svg xmlns="http://www.w3.org/2000/svg"
                     viewBox="0 0 24 24"
                     fill="none"
                     class="size-4 animate-spin">

                    <circle cx="12"
                            cy="12"
                            r="9"
                            stroke="currentColor"
                            stroke-width="3"
                            class="opacity-25" />

                    <path fill="currentColor"
                          class="opacity-75"
                          d="M21 12a9 9 0 0 0-9-9v3a6 6 0 0 1 6 6h3Z" />

                </svg>
            """);

        content.Append(LoadingText);

        content.AppendHtml("</span>");

        output.Content.SetHtmlContent(content);
    }
}
LoadingFormTagHelper :
[HtmlTargetElement("form", Attributes = "loading-form")]
public sealed class LoadingFormTagHelper : TagHelper
{
    public override void Process(
        TagHelperContext context,
        TagHelperOutput output)
    {
        output.Attributes.RemoveAll("loading-form");

        output.Attributes.SetAttribute(
            "x-data",
            "{ submitting: false }");

        output.Attributes.SetAttribute(
            "x-on:submit",
            "submitting = $el.checkValidity() && window.jQuery($el).valid()");

        output.Attributes.SetAttribute(
            "x-on:pageshow.window",
            "submitting = false");
    }
}
روش استفاده توی View ها : اول اینکه توی viewImport بیاین و addTagHelper بزنید و تگ هلپر های پروژه رو اضافه کنید حالا هرجا که فرم دارین روی تگ Form تگ هلپر loading-form رو قرار بدید <form loading-form ... و بجای دکمه سابمیت داخل داخل فرم از <loading-submit loading-text="Editng ..." class="—-"> Edit </loading-submit> و تمام روی _Layout حتما Alpine js و JQuery رو داشته باشید @csharps @imshadows

#آموزش 🏷🏷 نمایش وضعیت ارسال (سابمیت) فرم در ASP.NET Core MVC بدون درگیری با AJAX و هر چیز دیگه ای از اونجایی که از نظر خودم آدم تنبلیم دیروز داشتم سر پروژه به این فکر میکردم که چیکار کنم که فرمی که کاربر سابمیت میکنه (فرض کنیم یه فرمیه که توش آپلودر عکس گزاشتیم و کاربر عکسشو انتخاب کرده و فرم رو به سمت شما سابمیت میکنه و اینجاست که داستان اصلیه شروع میشه که رابط کاربری وبسایت شما به حالت فریز طور درمیاد در حالی که مرورگر اون پشت داره یچیزی آپلود میکنه و تنبلی باعث میشد که اصلا به Ajax فکر نکنم و با خودم میگفتم خب میشه کاری کرد که فلوی asp مثل asp-for برای مپ کردن مدل ها و غیره رو حفظ کنم و فقط اون بخش رو حل کنم که موقع آپلود دکمه غیر فعال شه و فقط یه Uploading .. نشون بدیم که کاربر بدونه داریم یه کاری میکنیم و گیر نکرده چیزی و جلوشم بگیریم که هی کلیک نکنه رو دکمه سابمیت ) در فرم‌های ثبت و ویرایش، ممکنه پردازش درخواست چند لحظه طول بکشه. برای جلوگیری از کلیک‌های تکراری و نمایش وضعیت درخواست به کاربر، می‌تونیم دکمه رو ارسال رو غیرفعال کنیم و به‌جای متن قبلی، یک نشانگر بارگذاری نمایش بدیم. برای این کار نیازی به AJAX نداریم؛ با Alpine.js (یا حتی جاوا اسکریپت خام اگه حوصلشو دارین ) می‌تونیم رفتار دکمه رو مدیریت کنیم و ارسال فرم همچنان به روش معمول MVC انجام بشه وبسایت رسمی Alpine JS https://alpinejs.dev/ مراحل به چه شکل هست ؟ بعد از ستاپ آلپاین js اول میایم و یه همچین چیزی روی تگ Form قرار میدیم.
x-data="{ submitting: false }"
x-on:submit="submitting = $el.checkValidity() && window.jQuery($el).valid()"
x-on:pageshow.window="submitting = false"
متغیر submitting وضعیت ارسال رو نگه می‌داره. قبل از فعال کردن حالت بارگذاری، اعتبار فرم بررسی می‌شه. همچنین رویداد pageshow هنگام نمایش مجدد صفحه، وضعیت رو به حالت اولیه برمی‌گردونه؛ مثلاً وقتی مرورگر صفحه رو از حافظه بازیابی می‌کنه. و بعد روی دکمه submit یه همچین کاری رو انجام میدیم ۲. غیرفعال کردن دکمه Submit و نمایش Loading
<button type="submit"
        x-bind:disabled="submitting"
        x-bind:aria-busy="submitting"
        class="disabled:cursor-not-allowed disabled:opacity-60">

    <span x-show="!submitting">Edit</span>

    <span x-cloak
          x-show="submitting"
          class="inline-flex items-center gap-2">

        <svg class="size-4 animate-spin" viewBox="0 0 24 24">
            <!-- Loading icon -->
        </svg>

        Editing...
    </span>

</button>
با x-bind:disabled دکمه هنگام ارسال غیرفعال می‌شه و x-show متن مناسب رو نمایش می‌ده. ویژگی aria-busy هم وضعیت مشغول بودن رو به فناوری‌های کمکی اعلام می‌کنه. نکته دوم : استایل disabled:cursor-not-allowed disabled:opacity-60 برای تیل ویند هست چون من روی پروژه از Tailwind css استفاده میکنم معادل این رو برای css میتونید یه کلاس کنید توی فایل css اتون و اونو قرار بدید برای کلاس دکمه ۳. چند نکته‌ی فنی فراخوانی jQuery($el).valid() به کتابخانه‌ی jQuery Validation نیاز داره. اگر از این کتابخانه استفاده نمی‌کنید، باید این بخش رو متناسب با روش اعتبارسنجی پروژه تغییر بدید. فانکشن checkValidity() اعتبارسنجی استاندارد HTML رو بررسی می‌کنه؛ این متد جایگزین کامل قوانین سفارشی نیست. اعتبارسنجی سمت سرور هم همچنان ضروریه. کلاس‌های animate-spin، size-4 و gap-2 مربوط به Tailwind CSS هستن و صرفاً ظاهر رو کنترل می‌کنن. منطق اصلی بدون Tailwind هم قابل پیاده‌سازیه. برای جلوگیری از نمایش اولیه‌ی محتوای x-cloak، این استایل رو اضافه کنید که طبق مستندات Alpine js باید اینکارو انجام بدین :
[x-cloak] {
    display: none !important;
}
چرا AJAX نه؟ وقتی فقط می‌خوایم وضعیت ارسال فرم رو نمایش بدیم، بازنویسی فرایند ارسال با AJAX ضرورتی نداره. فرم مثل قبل به اکشن کنترلر ارسال می‌شه و پاسخ سرور رو دریافت می‌کنه؛ با این تفاوت که کاربر بازخورد بهتری می‌گیره و احتمال ارسال چندباره با کلیک روی دکمه کاهش پیدا می‌کنه. اگر قرار باشه بخشی از صفحه بدون بارگذاری مجدد تغییر کنه، AJAX می‌تونه انتخاب مناسب‌تری باشه. شاد و خرم باشید @csharps @imshadows سوال داشتید این پایین تو کامنتا 👇

#Fun میگن قراره Ai جای برنامه نویسارو بگیره خب الان اون وایب کدری که کلاس برنامه نویسی شرکت کرده که بدونه کدایی که کپی پیست کرده ینی چی، چیه؟ @csharps @imshadows

#Fun برنامه نویس بودن برای من اونجاش عجیبه که بی کار میشم برنامه نویسی میکنم، کار دارم برنامه نویسی میکنم، میخوام بخوابم کدا میان تو خوابم 🍂😂 کار و زندگی و تفریح همش شده برنامه نویسی.. حس اینایی که عشق ماشین دارن واقعا اینجا قابل درک تره برام ☹️😂 @csharps @imshadows

آسیب‌پذیری خطرناک در تلگرام دسکتاپ؛ فقط با یک کلیک امکان سرقت حساب وجود دارد! یک پژوهشگر امنیتی در گزارشی فنی، زنجیره‌ای از آ
آسیب‌پذیری خطرناک در تلگرام دسکتاپ؛ فقط با یک کلیک امکان سرقت حساب وجود دارد! یک پژوهشگر امنیتی در گزارشی فنی، زنجیره‌ای از آسیب‌پذیری‌ها در Telegram Desktop را تشریح کرده که به مهاجم اجازه می‌داد تنها با کلیک قربانی روی یک لینک، فایل‌های محلی او را بخواند و اطلاعات نشست ورود تلگرام را به سرقت ببرد. ریشه مشکل، نقصی در ارتباط بین پردازش‌های تلگرام بود که امکان تزریق دستور از طریق لینک‌های دست‌کاری‌شده را فراهم می‌کرد. این نقص در کنار یک قابلیت داخلی برای خواندن و ارسال فایل‌ها، می‌توانست به مهاجم اجازه دهد فایل‌های نشست کاربر را استخراج کرده و کنترل حساب او را به دست بگیرد. طبق گزارش منتشرشده، این حمله در نسخه‌های تلگرام دسکتاپ تا ۷.۲.۸ امکان‌پذیر بود و با کلیک روی لینکی که به یک آدرس دست‌کاری‌شده هدایت می‌شد، قابل اجرا بود. خبر خوب اینکه این آسیب‌پذیری در نسخه ۷.۲.۹ برطرف شده است. اگر از نسخه دسکتاپ تلگرام استفاده می‌کنید، هرچه سریع‌تر آن را به نسخه ۷.۲.۹ یا جدیدتر به‌روزرسانی کنید. تا پیش از به‌روزرسانی، دریافت خودکار فایل‌ها را محدود کنید و از کلیک روی لینک‌های مشکوک بپرهیزید. منبع و جزئیات فنی @csharps

⭕️ قابلیت‌های جدید دات‌نت ۱۱ معرفی شدند مایکروسافت در نسخه جدید دات‌نت، بهبودهای متعددی در عملکرد، ابزارهای توسعه و زبان سی‌ش
⭕️ قابلیت‌های جدید دات‌نت ۱۱ معرفی شدند مایکروسافت در نسخه جدید دات‌نت، بهبودهای متعددی در عملکرد، ابزارهای توسعه و زبان سی‌شارپ ارائه کرده است. این نسخه در حال حاضر در مرحله انتشار آزمایشی RC قرار دارد و انتشار نهایی آن برای نوامبر ۲۰۲۶ برنامه‌ریزی شده است. مهم‌ترین تغییرات: بهبود عملکرد: بهینه‌سازی کامپایلر JIT و اجرای عملیات غیرهم‌زمان برای کاهش سربار و افزایش سرعت. قابلیت‌های جدید سی‌شارپ ۱۵: اضافه شدن امکاناتی مانند Union Types و Extension Indexers. بهبود LINQ: معرفی FullJoin و سربارهای جدید برای عملیات اتصال داده‌ها. پشتیبانی بهتر از JSON: امکانات جدید برای پردازش JSON و پشتیبانی از JSON Lines. بهبود ابزارهای توسعه: ارتقای دستورات dotnet test و پشتیبانی بهتر از برنامه‌های چندفایلی. توسعه Native AOT: بهینه‌سازی اجرای برنامه‌ها و کاهش سربار فراخوانی رابط‌ها. بهبود شبکه و امنیت: امکانات جدید برای DNS، ارتباطات HTTP و مدیریت اتصال‌های امن. 🔗 مشاهده فهرست کامل تغییرات: https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-11/overview @csharps @imshadows

آرامش بخش تر از صدای بارون واقعا سراغ ندارم شهرو آب برد 🤣 @csharps

2 ساعت آموزش ساخت نیو فولدر تو ویندوز 10 ؟؟؟؟؟؟؟؟ 😬 واو 🤲 لینکش @csharps @imshadows
2 ساعت آموزش ساخت نیو فولدر تو ویندوز 10 ؟؟؟؟؟؟؟؟ 😬 واو 🤲 لینکش @csharps @imshadows

زندگی یک برنامه نویس 🫴 #طنز @csharps

#direct یکی از دوستان پرسیده بود تو دایرکت کانال که چرا جدیدا کمتر پست میزاری راجع به برنامه نویسی و بیشتر به مسائل خودمانی و متفرقه میپردازی ببینید دلیلش دوتا سه تا چیزه
اول اینکه همتون عزیز منید قدم رو چشم ما میزارید و این کامیونیتی تو این 6 الی 7 سالی که باهم بودیم و فراز و نشیب ها اتفاقات واقعا برای من دوست داشتنی و لذت بخش بوده (ولی دیگه واقعا بقول گفتنی پیر شدم)
از سال 2020 دارم تو این چنل فعالیت میکنم و هنوزم پیامام اون بالای کانال با اسم Sir Oliver هست و تو این سالها خیلی از دوستای دیگه ام و تیمی هام هم بودن که الان دیگه کنارمون نیستن و جاشون واقعا خالیه ایشالا که دوباره یه روزی بهمون بپیوندن
ولی خب هر کسی که تو جامعه ما بیرون داره زندگی میکنه میدونه که برای زنده موندن و ادامه دادن مجبور میشی از یه سری چیزا بزنی تا بتونی برای یه سری چیزای دیگه وقت بزاری و بیای بالا اونم تازه در خوشبینانه ترین حالت 📍 نکته دوم اینه که الان کلا همه بیشتر رفتن سمت وایب کدینگ و عشق و حال با LLM ها که خب با پیشرفت تکنولوژی کاملا طبیعیه منم اگه بخوام راجع به این چیزا صحبت کنم نهایتا مثلا میتونیم بریم سمت ساخت Agent با سی شارپ و این چیزا ولی خب بقیشو اساتید خودشون استادن و دارن خیلی خوب پیش میبرن خداروشکر و واقعا چیز زیادی نیست که من بخوام بیام وسطش تکرار کنم 📍 مورد سوم هم اینه که خودم دیگه اون حوصله و شوق سابق رو ندارم که مثل قبل بشینم همه چیز مربوط به برنامه نویسی رو دنبال کنم الان نهایتا شدم مثل این بابابزرگا که بجز اخبار چیز دیگه ای حالشونو خوب نمیکنه :)))) اخبار تکنولوژی رو دنبال میکنم کتاب میخونم چیزای باحال و جالبی که میبینم رو میزارم تو کانال و تو طول روز همینجوری ادامه میدیم فعلا ببینیم به کجا میرسه :))) 🤚🏻 @csharps @imshadows

یه تجربه بگم شاید به درد بعضیا خورد اگه موس بیسیم دارین و مث من باتریش خیلی زود تموم میشه و هی باید باتری بخرین واقعا یه باتری شارژی بگیرین من یه مدت انقدر باتری مصرف میکردم که تقریبا هفته ای یه بار باید میخریدم و آخرش حساب کردم دیدم تو یه سال هزینه ای که برای باتری دادم خیلی بیشتر از قیمت یه جفت باتری شارژی شده بود و آخرش هم یه جعبه باتری جمع کرده بودم :)) اگه استفاده تون زیاده یه جفت باتری شارژی نیم قلمی از یه برند درست و درمون بگیرین خیلی راحت کارتون راه میفته یه مدل دیگه هم هست که لیتیومیه و فست شارژه و با تایپ C شارژ میشه و بعضیاشون تو نیم ساعت شارژ میشن فقط موقع خرید به ولتاژ دقت کنین مثلا باتری های معمولی نیم قلمی 1.5 ولتن ولی بعضی باتری های شارژی 1.2 یا 1.3 ولتن برای موس من که مشکلی ایجاد نکرد و کاملا جواب داد (اگه نیم قلمیه بالاتر از 1.5 ولت استفاده نکنید آسیب میزنه ولی پایین تر معمولا تا 1.2 1.4 مشکل ایجاد نمیکنه ) من خودم حدود 3 ساله دیگه باتری معمولی نخریدم یه جفت باتری نیم قلمی پاناسونیک گرفتم از همینا که برای تلفن بی سیم استفاده میشن شارژرش هم قیمت خاصی نداشت آخر هفته یه دور میزنم شارژ یه هفته استفاده میکنم دوباره آخر هفته میزنم شارژ و همین :))) واقعا برای من جواب داد و از اون موقع دیگه درگیر خرید باتری نشدم @csharps @imshadows

امروز روز جهانی آلزایمره اینو به کارفرمایی که مدام یادش میره شما هم انسانید و ربات نیستین و نیاز به استراحت دارین تا جمعه هام پیام نده میتونید تبریک بگید @csharps

احتمالا با Lite DB برای دات نت آشنا هستید یه دیتابیس No SQL فایل بیس که خیلی سریع میتونید توش دیتا بریزید که چندین ساله میشناختمش ولی یه سری مشکلات از جمله سرعت داشت که گشتم دنبال جایگزینش و رسیدم به ایشون https://www.blitedb.com/ طبق ادعای دولوپر Zero allocation هست کراس پلتفرم و مشکل سرعت رو حل کرده @csharps @imshadows

#خبر #عمومی ⭕️ هک حساب‌های کارکنان OpenAI؛ مهاجمان به ChatGPT و مخازن خصوصی GitHub دسترسی پیدا کردند سه پژوهشگر امنیتی با زنج
#خبر #عمومی ⭕️ هک حساب‌های کارکنان OpenAI؛ مهاجمان به ChatGPT و مخازن خصوصی GitHub دسترسی پیدا کردند
سه پژوهشگر امنیتی با زنجیره‌کردن یک آسیب‌پذیری در نرم‌افزار انجمن Discourse و سوءاستفاده از امکان استفاده مجدد از توکن‌های SSO، موفق شدند توکن‌های احراز هویت کارکنان OpenAI را سرقت و برخی حساب‌های ChatGPT و Codex را تصاحب کنند. این حمله همچنین دسترسی به مخازن خصوصی GitHub متعلق به OpenAI را ممکن کرد. پژوهشگران برای کمک به اجرای حمله از Claude Opus 5 شرکت Anthropic نیز استفاده کردند. طبق بررسی OpenAI، دسترسی مهاجمان به مخازن خصوصی محدود به مشاهده بخشی از متادیتا و کدها بوده و هیچ مدل یا وزن مدلی در معرض دسترسی قرار نگرفته است. نکته قابل‌توجه این است که پژوهشگران همان روز جزئیات حمله را به‌صورت عمومی منتشر کردند و اعلام کردند که توانسته‌اند حساب‌های ChatGPT و Codex متعلق به برخی کارکنان OpenAI و تعدادی از کاربران عادی را نیز در اختیار بگیرند. این حادثه بار دیگر نشان می‌دهد که سرقت یا استفاده مجدد از توکن‌های احراز هویت می‌تواند حتی با وجود سازوکارهای SSO، به تصاحب کامل حساب‌ها منجر شود.
@csharps @imshadows

#بروزرسانی #dotnet #jetbrains ⭕️ نسخه ۲۰۲۶.۲.۲ ابزارهای JetBrains منتشر شد؛ تمرکز ویژه روی AI Agentها
شرکت JetBrains نسخه ۲۰۲۶.۲.۲ از ابزارهای Rider، ReSharper و مجموعه ابزارهای .NET را منتشر کرد. در این نسخه، Rider یک بخش جدید به نام AI Agent Setup دریافت کرده که ابزارهای مرتبط با ایجنت‌های هوش مصنوعی، از جمله MCP Tools، Skills و Hooks را در یک مکان متمرکز می‌کند. همچنین سیستم Hooks بهبود پیدا کرده تا ایجنت‌های هوش مصنوعی پس از ایجاد تغییر در کد، بازخورد دقیق‌تر و هدفمندتری دریافت کنند؛ قابلیتی که می‌تواند تعامل ایجنت‌ها با پروژه‌های .NET را روان‌تر کند. در بخش تست نیز قابلیت Code Coverage در dotCover حالا از تست‌های TUnit پشتیبانی می‌کند. برای استفاده از این قابلیت، نسخه ۲.۳.۰ یا جدیدتر Microsoft.Testing.Platform مورد نیاز است. در کنار این قابلیت‌ها، چندین مشکل مهم نیز برطرف شده‌اند؛ از جمله فریز شدن Rider هنگام بارگذاری Solutionهای بزرگ در macOS 26.2.2، مشکلات اتصال به Unity Editor در لینوکس و خطاهای دسترسی سرور MCP به فایل‌های پوشه‌های متصل. در مجموع، این آپدیت علاوه بر رفع باگ‌ها، Rider را یک قدم دیگر به سمت توسعه نرم‌افزار با کمک AI Agentها می‌برد.
@csharps @imshadows

#خبر #عمومی ⭕️ هشدار CISA؛ گروه‌های باج‌افزاری از آسیب‌پذیری حیاتی VMware vCenter سوءاستفاده می‌کنند
آژانس امنیت سایبری آمریکا (CISA) هشدار داده است که گروه‌های باج‌افزاری در حال سوءاستفاده فعال از آسیب‌پذیری حیاتی CVE-2026-59310 در VMware vCenter هستند. این آسیب‌پذیری که در سرور Syslog vCenter قرار دارد، یک نقص Directory Traversal است و به مهاجمان بدون نیاز به احراز هویت اجازه می‌دهد کد دلخواه خود را روی سیستم اجرا کنند. شرکت Broadcom این مشکل را در ۲۹ ژوئیه برطرف کرد، اما یک شرکت فعال در حوزه تحقیقات جرایم سایبری بعداً بیش از ۳۶۱ IP آلوده در ۴۷ کشور شناسایی کرد که ظاهراً به یک گروه APT و استفاده از ابزارهای Reverse SSH مرتبط بودند. در ادامه، CISA این آسیب‌پذیری را در ماه اوت به فهرست Known Exploited Vulnerabilities اضافه کرد و به سازمان‌های فدرال سه روز فرصت داد تا آن را وصله کنند. با این حال، هشدار جدید نشان می‌دهد این آسیب‌پذیری همچنان به‌طور فعال توسط گروه‌های باج‌افزاری مورد سوءاستفاده قرار می‌گیرد. در حال حاضر بیش از ۴۵۰ سرور VMware vCenter همچنان به‌صورت عمومی روی اینترنت قابل دسترسی هستند و وضعیت وصله‌شدن آن‌ها مشخص نیست. اگر از VMware vCenter استفاده می‌کنید، بررسی وضعیت وصله CVE-2026-59310 باید در اولویت قرار بگیرد.
@csharps @imshadows

#خبر #SQLServer ⭕️ محدودیت ۲۱۰۰ پارامتری SQL Server؛ EF Core 10 این مشکل را چطور مدیریت می‌کند؟
اگر در EF Core یک کوئری را با لیست بزرگی از IDها فیلتر کنید، بالاخره به سقف معروف ۲۱۰۰ پارامتر SQL Server می‌رسید. اما در EF Core 10 ماجرا کمی متفاوت است. در حالت عادی، عبارت Contains لیست را به چندین پارامتر جداگانه تبدیل می‌کند. سقف عملی در این حالت ۲۰۹۸ پارامتر است، چون SqlClient دو پارامتر را برای اجرای sp_executesql مصرف می‌کند. نکته مهم اینجاست که عبور از این عدد در EF Core 10 لزوماً باعث خطا نمی‌شود. EF Core به‌صورت خودکار روش ترجمه کوئری را تغییر می‌دهد و لیست را داخل یک پارامتر JSON قرار می‌دهد تا با استفاده از OPENJSON در SQL Server پردازش شود. نتیجه بنچمارک جالب است: کوئری با ۲۰۹۸ شناسه حدود ۳۴.۶ میلی‌ثانیه زمان برد، اما همان کوئری با ۲۰۹۹ شناسه فقط ۴ میلی‌ثانیه طول کشید؛ یعنی اضافه شدن تنها یک ID باعث شد کوئری تقریباً ۸ برابر سریع‌تر اجرا شود. بر اساس این آزمایش، برای لیست‌های کمتر از حدود ۱۰۰۰ ID بهتر است همان رفتار پیش‌فرض EF Core را نگه دارید. بین ۱۰۰۰ تا ۲۰۹۸ ID، استفاده از EF.Parameter(ids) می‌تواند حدود ۸ برابر سریع‌تر باشد. برای لیست‌های بیشتر از ۲۰۹۸ ID، EF Core عملاً به همان روش EF.Parameter و OPENJSON روی می‌آورد. در آزمایش با ۱۰۰ هزار ID نیز یک Temporary Table بهترین عملکرد را داشت، در حالی که EF.Constant برای مجموعه‌های کوچک مناسب بود اما در مقیاس ۱۰۰ هزار ID عملکرد بسیار ضعیفی داشت. خلاصه: در EF Core 10 عبور از سقف ۲۱۰۰ پارامتر الزاماً خطا ایجاد نمی‌کند؛ اما انتخاب روش انتقال لیست می‌تواند تأثیر چشمگیری روی عملکرد کوئری داشته باشد.
@csharps @imshadows

#بروزرسانی #دات_نت ⭕️ نسخه آزمایشی نهایی .NET 11 منتشر شد؛ EF Core و JIT هم بهبودهای مهمی گرفتند.
مایکروسافت .NET 11 RC1 را منتشر کرد؛ نسخه‌ای که مجوز Go-Live دارد و می‌توان از آن در محیط‌های تولیدی استفاده کرد. در این نسخه، C# 15 و F# 11 نیز به نسخه‌های پیش‌فرض زبان تبدیل شده‌اند. یکی از مهم‌ترین تغییرات این نسخه، بازطراحی اجرای async/await است. در قابلیت جدید Runtime Async، تولید ماشین حالت از کامپایلر C# به JIT و Runtime منتقل می‌شود که می‌تواند تعداد تخصیص‌های حافظه را کاهش داده و عملکرد برنامه‌های مبتنی بر عملیات Async را بهبود دهد. این قابلیت فعلاً اختیاری است و قرار است در .NET 12 به‌صورت پیش‌فرض فعال شود. در بخش JIT نیز بهینه‌سازی‌هایی مانند Devirtualization، Escape Analysis و Guarded Devirtualization اضافه شده‌اند تا کامپایلر بتواند کد را تهاجمی‌تر بهینه کند. اما برای توسعه‌دهندگان EF Core، تغییرات بخش Migration اهمیت ویژه‌ای دارد. متد ExcludeForeignKeyFromMigrations() امکان حذف Foreign Key از Migrationها را فراهم می‌کند، بدون اینکه ایندکس مربوطه حذف شود. همچنین گزینه --add برای dotnet ef database update اضافه شده تا ساخت، کامپایل و اجرای Migration را در یک مرحله انجام دهد. گزینه‌های --connection و --offline نیز کنترل بیشتری روی دستورات Migration و Database Drop در اختیار توسعه‌دهندگان قرار می‌دهند. در بخش ابزارها نیز dotnet test حالا از تارگت‌های Android، iOS، macOS و Mac Catalyst پشتیبانی می‌کند و قابلیت‌های جدیدی برای انتشار کانتینری و مدیریت پکیج‌های آسیب‌پذیر در NuGet اضافه شده است. در ASP.NET Core هم APIهای به‌روزشده برای احراز هویت SignalR نهایی شده‌اند و پشتیبانی از OpenAPI بهبود پیدا کرده است. خلاصه: .NET 11 RC1 فقط یک نسخه نزدیک به انتشار نهایی نیست؛ از بهبودهای Runtime و JIT گرفته تا تغییرات EF Core، SDK و ASP.NET Core، این نسخه مجموعه‌ای از تغییرات مهم برای توسعه‌دهندگان اکوسیستم دات‌نت دارد.
@csharps @imshadows

#خبر #عمومی اخراج‌های گسترده در Oracle؛ کارکنان همان روز متوجه پایان کارشان شدند.
شرکت Oracle روز دوشنبه دور جدیدی از تعدیل نیرو را آغاز کرد و به برخی کارکنان اعلام کرد که همان روز، آخرین روز کاری‌شان است؛ اتفاقی که تنها دو روز کاری پس از اعلام افزایش ۷۰۰ میلیون دلاری ذخیره هزینه‌های بازسازی این شرکت رخ داد و مجموع این ذخیره را به حدود ۲.۸ میلیارد دلار رساند. نیروی انسانی Oracle پیش‌تر هم در سال مالی منتهی به ۳۱ مه، حدود ۱۳ درصد کاهش یافته بود و از ۱۶۲ هزار نفر به ۱۴۱ هزار نفر رسید؛ کاهشی یک‌ساله که از کاهش ۵۷ هزار موقعیت شغلی شرکتی در آمازون طی چهار سال شدیدتر بوده است. برآورد شرکت TD Cowen نشان می‌دهد این کاهش هزینه‌ها می‌تواند سالانه بین ۸ تا ۱۰ میلیارد دلار صرفه‌جویی برای Oracle ایجاد کند؛ رقمی که بخشی از هزینه‌های سنگین این شرکت برای توسعه مراکز داده هوش مصنوعی را جبران می‌کند. Oracle در سه‌ماهه نخست ۲۸.۵ میلیارد دلار برای سرمایه‌گذاری در مراکز داده هزینه کرده و پیش‌بینی می‌کند این رقم در سال مالی ۲۰۲۷ به ۹۰ تا ۹۵ میلیارد دلار برسد. نکته قابل‌توجه این است که حدود دو سوم کارکنان Oracle خارج از آمریکا مشغول به کار هستند. همین موضوع پرسش‌هایی درباره رعایت قوانین کار اتحادیه اروپا ایجاد کرده است؛ طبق دستورالعمل اتحادیه اروپا درباره تعدیل‌های جمعی، شرکت‌ها باید پیش از اخراج کارکنان وارد فرایند مشاوره شوند و حداقل ۳۰ روز وقفه پیش از اجرای اخراج‌ها وجود داشته باشد. در چنین شرایطی، اطلاع‌رسانی و پایان همکاری در همان روز می‌تواند با این الزامات در تضاد باشد. رومانی یکی از کشورهایی است که وضعیت آن زیر ذره‌بین قرار گرفته؛ Oracle در ماه ژوئن حدود ۵۰۰ نفر از کارکنان خود در این کشور را تعدیل کرده بود.
@csharps @imshadows