Software Philosophy – Telegram
Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Software Philosophy
امشب ساعت t=2^3 یه اکانت تلگرام پرمیوم به صورت رندوم به یکی از اعضای کانال اهدا می‌شه. 🕺
اگه براتون سوال پیش اومده که برنده اکانت #تلگرام_پرمیوم کدوم برناما‌نویس بوده؟ ایشون بودن:
@meisamdev

مبارکت باشه آقا میثم خوش‌شانس... 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👏146🎉3👍1😢1
نگاهی عمیق‌تر به جادوی async و پشت صحنه‌ی آن در سی‌شارپ

کلمات کلیدی async و  await از نسخه C# 5.0 اضافه شدند.
شما می‌توانید با اضافه کردن کلمه کلیدی async، یک متد را Asynchronous کنید و در آن از await استفاده کنید.
این عبارت به کامپایلر می‌گوید صبر کند تا عملیات ناهمگام به پایان برسد ولی در این حین اگر به thread نیازی نبود آزاد شود و به کارهای دیگر بپردازد. اضافه کردن چنین فیچری به یک زبان در پشت صحنه اصلا کار ساده‌ای نیست.

در این ورک‌شاپ کمی بیشتر به اعماق دات‌نت می‌رویم و می‌بینیم که با async کردن یک متد چه اتفاقاتی در پشت صحنه می‌افتد و چطور عملا آن متد جراحی می‌شود!

"Deep Dive into async/await: How to Unlock the Full Potential of C# Concurrency"

اسم کارگاهی است که «مهران داودی» با هدف آموزش مفاهیم همزمانی به صورت عمیق برگذار می‌کند.

تا کنون سه جلسه از این کارگاه برگزار شده است:
🔗 لینک ویدیوی جلسه اول
🔗 لینک ویدیوی جلسه دوم
🔗 لینک ویدیوی جلسه سوم

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#نگار_قاسمی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
👍286🔥3
کاوش در مزایای Azure Key Vault

سرویس Azure Key Vault سرویسی ابری است که ذخیره و مدیریت امن secrets، keys و certificates ها را فراهم می‌کند. این به شما امکان می‌دهد با استفاده از کلیدها و الگوریتم‌های رمزنگاری، داده‌ها را رمزگذاری، رمزگشایی، امضا و تأیید کنید. Azure Key Vault همچنین به شما امکان می‌دهد تا گواهی‌ها را برای برنامه‌ها و خدمات خود ایجاد، وارد، rotate و لغو کنید.

- یکی از مزایای استفاده از Azure Key Vault این است که خطر افشای داده‌های حساس در کد یا فایل‌های پیکربندی شما را کاهش می‌دهد.

- یکی دیگر از مزایای استفاده از Azure Key Vault این است که مدیریت گواهی‌ها و کلیدهای شما را ساده می‌کند. می‌توانید تمدید و ابطال گواهینامه‌های خود را به طور خودکار انجام دهید و همچنین بر انقضا و استفاده از آن‌ها را نظارت کنید.


برای ایجاد key vault با استفاده از Azure CLI، ابتدا باید Azure CLI را نصب کرده و به حساب Azure خود وارد شوید. سپس، می‌توانید از دستور az keyvault create برای ایجاد یک صندوق کلید با نام و یک گروه منبع استفاده کنید.
مثال:

az group create --name MyResourceGroup --location uksouth
az keyvault create --name MyKeyVault --resource-group MyResourceGroup


و برای ذخیره برخی از secrets و keys در صندوق کلید، می‌توانید از دستورات az keyvault secret set و az keyvault key create استفاده کنید.
مثال:

az keyvault secret set --name MySecret --value "Hello World" --vault-name MyKeyVault
az keyvault key create --name MyKey --vault-name MyKeyVault


🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
👍5
مقایسه 🚀Azure Functions vs. Azure Durable Functions🔄

سرویس Azure Function یک سرویس محاسباتی بدون سرور است که به شما امکان می دهد بدون مدیریت زیرساخت سرور یا سیستم عامل کد را اجرا کنید.

از طرف دیگر، Azure Durable Function یک برنامه افزودنی از Azure Function است که به شما امکان می‌دهد توابع stateful را در محیط بدون سرور بنویسید.
توابع Stateful می‌توانند حالت را در چندین اجرا حفظ کنند و با استفاده از durable tasks، گردش‌های کاری پیچیده را هماهنگ کنند. durable tasks، عملکردهایی هستند که می توانند توسط عملکرد orchestrator function، منتظر و دوباره اجرا شوند.


زمان استفاده از Azure Function:
- سناریوهای Event-Driven
- زمانی که بخواهیم بخش کوچکی از Units of Code را اجرا کنیم.
- زمانی که Cost-Efficient Scaling مد نظر باشد.

زمان استفاده از Azure Durable Function:
- زمانی که پردازهای Long-Running داریم.
- زمانی که به Stateful Orchestration نیازمندیم.
- زمانی که Monitoring and Debugging مدنظر باشد.

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
👍81
از Angular به Blazor: آزاد کردن جادوی C#!

در سفری از Angular به کامپوننت Blazor، یک ماجراجویی هیجان‌انگیز، جادوی C# را آزاد کنید! این سفر نه تنها یک تغییر در نحوه نوشتاری را به همراه دارد بلکه یک شیفت تحولی در رویکرد شما نسبت به توسعه وب را به ارمغان می‌آورد. وقتی که به دنیای Blazor وارد می‌شوید، قدرتمندی C# و اکوسیستم گسترده .NET نه تنها کد را انتقال می‌دهید بلکه به دنیای امکاناتی وارد می‌شوید که به طور سحرآمیز منطبق بر منطق کاربری است و سمت سرور به یکدیگر می‌پیوندد.

هیجان ترجمه شاهکار Angular خود را به یک جواهر Blazor تصور کنید، جایی که آشنایی با نوآوری همراه می‌شود و دقت C# سمفونی وب‌اپلیکیشن شما را ارجاع می‌دهد. این مهاجرت تنها یک گذار فنی نیست؛ بلکه فرصتی است برای بهره‌مندی از طیف کامل قابلیت‌های .NET، از دیتابایندینگ دقیق تا زیبایی پردازش رویدادها با C#.

پس کمربند خود را ببندید و آماده شوید تا ادغام پویایی Angular با استعداد C# Blazor را شاهد شوید. در این راهنمای هیجان‌انگیز، از هر مرحله‌ای از فرآیند مهاجرت عبور خواهیم کرد و جادویی را که هنگام ادغام بهترین‌های دو دنیا اتفاق می‌افتد، برملا خواهیم کرد. برای یک ماجرای کدزنی آماده شوید که نه تنها مهارت‌های شما را ارتقا می‌دهد، بلکه شور و هیجان به سفر توسعه شما تزریق می‌کند. اجازه دهید مهاجرت آغاز شود!

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

___________

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

_____
🔥11👍104
حفاظت در برابر مقادیر null!

در حوزه برنامه نویسی، مقادیر null مانند مین‌های پنهانی هستند که منتظر انفجار می‌باشند و باعث خطاهای غیرمنتظره در زمان اجرا می‌شوند، منجر به منطق نادرست می‌شوند و اشکال زدایی را سخت‌تر می‌کنند. این یکی از رایج‌ترین مشکلاتی است که توسعه‌دهندگان با آن مواجه هستند، NullReferenceException مخوف است. به همین دلیل مهم است که قبل از استفاده از یک object reference در کد، مقادیر null را بررسی کنید.


بررسی null بطور سنتی با == اپراتور


یک راه برای انجام این کار استفاده از عملگر == است که دو operands را برای برابری مقایسه می‌کند.
برای مثال می‌توانید بنویسید:

var product = GetProduct();
if (product == null) {
// Do something if the object is null.
}


این رویکرد دارای معایبی است. عملگر == می‌تواند توسط یک کلاس overload شود، به این معنی که ممکن است هنگام مقایسه یک شی با null، آنطور که انتظار دارید رفتار نکند. برای مثال، اگر کلاس یک عملگر برابری سفارشی را تعریف کند که همیشه true را برمی‌گرداند، آنگاه بررسی null همیشه ناموفق خواهد بود.

استفاده از عملگر is

برای جلوگیری از این مشکلات، سی شارپ راه بهتری برای بررسی مقادیر null ارائه می دهد: عملگر is.
عملگر is یک عملیات pattern-matching را روی یک عبارت انجام می‌دهد و اگر با یک الگوی مشخص مطابقت داشته باشد، مقدار true را برمی‌گرداند.

var product = GetProduct();
if (product is null) {
// Do something if the object is null.
}

این روش چند مزیت دارد:
- اولاً، عملگر is نمی‌تواند توسط یک کلاس overload شود، بنابراین هنگام بررسی مقادیر تهی، همیشه به طور مداوم رفتار می‌کند.
- دوم، عملگر is خواناتر و رساتر از عملگر == است، زیرا به وضوح بیان می‌کند که چه چیزی را بررسی می‌کنید.
- سوم، عملگر is از negation patterns پشتیبانی می‌کند که به شما امکان می‌دهد مقادیر غیر تهی را نیز بررسی کنید.

🔗 نسخه کامل مقاله به همراه نمونه کد را می‌توانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
👍35👏2
🚀 جلسه بعدی مایکروسافت فارسی یکشنبه ۲۶ آذر رو از دست ندید - در مورد Azure DevOps ، Azure Pipeline و Sonar Cloud صحبت خواهد شد و اینکه چگونه می‌توانیم با استفاده از این موارد کدهای با کیفیت‌تری داشته باشم!

📢 MSFarsi Talk- Flawless code with Azure Pipeline and Sonar Cloud 📢

📢This session will be in Farsi

📢 ثبت نام رایگان:

🔗 https://events.teams.microsoft.com/event/399a7ee0-7ebd-41c0-b7e6-9051e4e6c8f3@b4c9f32e-da17-4ded-9c95-ce9da38f25d9

#محمدرضا_پازوکی
👍162🔥2
اوج پویایی صفحات وب در Blazor با NET 8.

سیر تکامل نحوه نمایش صفحات وب به این شکل بود که در ابتدا صفحاتی که کاربر درخواست میداد توسط سرور رندر می‌شد و به سمت کلاینت برمی‌گشت. این صفحات کاملا غیرتعاملی (non-intractive) بودند و اگر قصد داشتید محتوای صفحات را با مثلا کلیک کردن یا ثبت فرم و ... تغییر دهید، مجبور بودید کل صفحه html جدید را مجدد از سرور بگیرید.

کم کم JavaScript به واسطه ویژگی‌هایی که به صفحه اضافه می‌کرد باعث شد intractive بودن صفحات ایجاد شود و دیگر نیازی به جنریت کل صفحه از ابتدا نباشد. در ابتدا با امکاناتی مثل Ajax و ... این پویایی برای صفحات وب فراهم شد و در ادامه فریموورک و کتابخانه‌هایی مثل React, Angular, Blazor و... اضافه شدند که پویایی صفحات را با ارائه مفهومی تحت عنوان SPA به اوج خود رساندند.

اخیرا دات نت در آخرین آپدیت خود (NET 8.) در بیلیزور این امکان را فراهم کرده تا شما بتوانید هر قسمت از صفحه را که می‌خواهید متناسب با نیاز خود از سرور صفحه بخواهید تا جنریت کند یا در خود مرورگر کاربر این کار انجام شود.

مثلا برای این که امتیاز SEO خوبی داشته باشید می‌تونید چند صفحه اول سایت را به شکلی تنظیم کنید که از سمت سرور رندر شوند و بقیه به حالت web assembly باشند. یا حتی کامپوننت خاص در صفحه را هم می‌توانید به این صورت تنظیم کنید.

در ادامه انواع حالت‌ها برای رندر کردن صفحه را با هم می‌بینیم:
Server:
@rendermode InteractiveServer

WebAssembly:
@rendermode InteractiveWebAssembly

Auto:
@rendermode InteractiveAuto

Streaming:
@attribute [StreamRendering(prerender: true)]


هر کدام از این حالت‌ها مزایای خود را دارند و شما می‌توانید بسته به نیاز خود از آن‌ها استفاده کنید. برای فهمیدن این موضوع که کدام حالت مناسب شماست و همچنین برای مطالعه دقیق و عمیق‌تر این مباحث می‌توانید از این لینک‌ها ( 1 , 2 ) استفاده کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#حامد_حاجیلو (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

__________
👍15🔥42👏1
استراتژی Deployment مناسب را انتخاب کنید!

استراتژی‌های Deployment مانند دستور العمل‌هایی هستند که برای به‌روزرسانی برنامه‌ها و سرویس‌های خود بدون ایجاد اختلال در سیستم دنبال می‌کنید. آنها به شما اجازه می‌دهند به‌روزرسانی‌های خود را به روشی هوشمند و ایمن امتحان، بررسی و لغو کنید. بسته به آنچه دوست دارید و نیاز دارید، می‌توانید استراتژی‌های Deployment مختلفی را انتخاب کنید که Azure می‌تواند برای شما انجام دهد، مانند:

روش Blue-green deployment:
این استراتژی مانند این است که دو نسخه از برنامه یا سرویس خود داشته باشید، یکی برای نسخه قدیمی (آبی) و دیگری برای نسخه جدید (سبز). می‌توانید نسخه جدید را قبل از اینکه کاربران خود را به آن تغییر دهید، در نسخه سبز تست کنید. به این ترتیب می‌توانید از اشتباهات جلوگیری کنید و اگر مشکلی پیش آمد سریعا به عقب برگردید.

روش Rolling deployment:
این استراتژی مانند این است که اپلیکیشن یا سرویس خود را ذره ذره، با تغییر چند قسمت در یک زمان با نسخه جدید، به روز کنید. می‌توانید تصمیم بگیرید که چقدر سریع و چقدر می‌خواهید به‌روزرسانی کنید، و تماشا کنید که چگونه پیش می‌رود و چگونه روی سیستم شما تأثیر می‌گذارد. به این ترتیب، می‌توانید زمان خرابی را کاهش دهید و مطمئن شوید که همه چیز برای کاربرانتان به خوبی پیش می‌رود.

روش Canary deployment:
این استراتژی مانند این است که نسخه جدید برنامه یا سرویس خود را ابتدا به چند کاربر یا مکان خوش شانس، قبل از دادن آن به دیگران، بدهید. می‌توانید از این استراتژی برای مشاهده نحوه عملکرد نسخه جدید و نظر کاربران در مورد آن استفاده کنید و هر مشکل یا باگ را زودتر تشخیص دهید. به این ترتیب می‌توانید به روز رسانی خود را بهتر و قابل اطمینان‌تر کنید و همه کاربران را به یکباره ناراحت نکنید.


برای انتخاب استراتژی استقرار مناسب برای سیستم خود، باید به مواردی فکر کنید، مانند:

- برنامه یا سرویس شما چقدر بزرگ و پیچیده است.
- هر چند وقت یکبار و چقدر می‌خواهید آن را به روز کنید.
- به روز رسانی‌های شما چقدر خطرناک و مهم هستند.
- کاربران شما چه احساسی دارند و چه انتظاراتی از شما دارند.
- چه ابزارهایی برای استقرار خود دارید.

🔗 نسخه کامل مقاله را می‌توانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
👍11
بروزرسانی ReSharper 2023.3: انقلابی در کدنویسی دات‌نت

ابزار ReSharper، ابزاری قدرتمند برای توسعه‌دهندگان دات‌نت است که با ارائه طیف گسترده‌ای از ویژگی‌ها و قابلیت‌ها، به توسعه‌دهندگان کمک می‌کند تا کد خود را با کیفیت بالاتر و سرعت بیشتری تولید کنند. نسخه 2023.3 ReSharper، با ویژگی‌های جدید و بهبودیافته خود، تجربه کدنویسی دات‌نت را به طور اساسی تغییر می‌دهد.

ویژگی‌های جدید و بهبودیافته:

🟣قابلیت Code Analysis:
🟣شناسایی مشکلات جدیدی مانند استفاده از کدهای ناکارآمد، احتمال حملات امنیتی، و مشکلات عملکردی

🟣بهبود دقت شناسایی مشکلات

🟣ارائه پیشنهادات عملی برای رفع مشکلات

مثال عملی: فرض کنید کد زیر را می‌نویسیم:

public class MyClass
{
public void MyMethod()
{
// این کد ناکارآمد است
for (int i = 0; i < 1000000; i++)
{
Console.WriteLine("i = " + i);
}
}
}


با استفاده از Code Analysis ReSharper 2023.3، می‌توان این خطا را شناسایی کرد:

[ReSharper] 'MyClass.MyMethod()' is inefficient: it uses a for loop with a large number of iterations.


🟢قابلیت Code Completion:

🟢ارائه پیشنهادات دقیق‌تر و مرتبط‌تر با context کد

🟢جلوگیری از تکمیل کدهای ناامن

🟢پشتیبانی از کدنویسی با استفاده از زبان‌های طبیعی

مثال عملی: فرض کنید کد زیر را می‌نویسیم:

public class MyClass
{
public void MyMethod()
{
// این کد ناامن است
var password = "my-password";
// ...
}
}


با استفاده از Code Completion ReSharper 2023.3، می‌توان این خطا را شناسایی کرد:

[ReSharper] 'password' is a hard-coded password. This can lead to security vulnerabilities.


🟣قابلیت Refactoring:

🔵پشتیبانی از تغییرات پیچیده‌تر مانند تغییر ساختار کد

🔵جلوگیری از بروز خطاهای احتمالی در هنگام انجام تغییرات

🔵ارائه گزارش‌های دقیق‌تر از تغییرات انجام‌شده

مثال عملی: فرض کنید کد زیر را می‌نویسیم:

public class MyClass
{
public void MyMethod()
{
// این کد می‌تواند با استفاده از refactoring بهینه شود
var list = new List<int>();
for (int i = 0; i < 100; i++)
{
list.Add(i);
}
// ...
}
}


با استفاده از Refactoring ReSharper 2023.3، می‌توان این کد را بهینه کرد:
public class MyClass
{
public void MyMethod()
{
var list = new List<int>(Enumerable.Range(0, 100));
// ...
}
}


🟢قابلیت جدید در Entity Framework:

در ReSharper 2023.3، به‌روزرسانی‌هایی در Entity Framework ارائه شده است که به توسعه‌دهندگان کمک می‌کند تا کد Entity Framework خود را با کیفیت بالاتر و سرعت بیشتری تولید کنند.

ویژگی‌های جدید و بهبودیافته:

🟢مشاهده روابط Entity Framework (ERD): ReSharper 2023.3، ابزار جدیدی برای ویرایش و مشاهده Entity Relationship Diagrams (ERDs) ارائه می‌دهد. این ابزار به توسعه‌دهندگان کمک می‌کند تا روابط بین جدول‌های Entity Framework را به‌طور واضح‌تری درک کنند.

🟢تجزیه و تحلیل و بازرسی کوئری‌های Entity Framework: ReSharper 2023.3، قابلیت‌های جدیدی برای تجزیه و تحلیل و بازرسی کوئری‌های Entity Framework ارائه می‌دهد. این قابلیت‌ها می‌توانند به توسعه‌دهندگان در شناسایی و رفع مشکلات احتمالی در کوئری‌های خود کمک کنند.

مثال‌هایی از نحوه استفاده از ویژگی‌های جدید:

🟢مشاهده روابط Entity Framework (ERD): فرض کنید یک پروژه Entity Framework داریم که شامل دو جدول به نام‌های Customer و Order است. با استفاده از ابزار Visualize Entity Framework Relationships ReSharper 2023.3، می‌توانیم ERD زیر را ایجاد کنیم:

    Customer
|
|_ Order


🟢تجزیه و تحلیل و بازرسی کوئری‌های Entity Framework: فرض کنید یک کوئری Entity Framework داریم که به صورت زیر است:
var customers = context.Customers.Where(c => c.Name.Contains("John"));


با استفاده از قابلیت‌های جدید ReSharper 2023.3، می‌توانیم مشکلات احتمالی در این کوئری را شناسایی کنیم. به عنوان مثال، ReSharper می‌تواند به ما هشدار دهد که این کوئری ممکن است کند باشد.

🔗 نسخه کامل مقاله به همراه نمونه کد را می‌توانید در اینجا مطالعه نمایید.

___________

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

_____
🔥24👍115👏4
اجرای سبک‌تر یک وب اپلیکیشن ساده!

معمولا زمانی که یک وب اپلیکیشن ASP.NET ای ایجاد می‌کنیم، به صورت پیش فرض از روش‌های زیر برای ساخت اپ استفاده می‌شود:

Host.CreateDefaultBuilder()

WebApplication.CreateBuilder()



این دو روش متدوال‌ترین روش‌ها هستند و تفاوت آن‌ها را می‌توانید اینجا ببینید.

اما این دو روش امکانات خیلی زیادی را به سیستم اضافه می‌کنند که ممکن است حتی تا پایان عمر سیستم هم از بیشتر آن‌ها استفاده نکنید!

اگر اپی ساده دارید بد نیست نگاهی به دو روش زیر هم بیندازید:

WebApplication.CreateSlimBuilder()

و
WebApplication.CreateEmptyBuilder()


حالت CreateEmptyBuilder عملا چیزی ندارد و اگر ران شود همان ابتدا خطا می‌دهد و باید چیزهایی به صورت اولیه به آن اضافه کنید. اما حالت CreateSlimBuilder یک وب اپ ساده برای شما بالا می‌آورد با این تفاوت نسبت به CreateBuilder که یک سری موارد از جمله موارد زیر را ندارد:

- عدم ساپورت startup assemblies
- عدم ساپورت EventSource,Debug provider, EventLog provider
- عدم ساپورت از UseStaticWebAssets
- با IIS اینتگریت نمی‌شود
- در Kestrel هم با HTTPS و Quic که قبلا اینجا معرفی شده است.


🔗 برای مشاهده توضیحات کامل می‌توانید از این لینک استفاده کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#حامد_حاجیلو (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

__________
👍215🔥5👏4🥰1
کلاس Random در سی شارپ thread-safe نیست!

شیوه متداولی که برنامه‌نویسان دات نت از کلاس Random استفاده می‌کنند thread-safe نیست!
منظور این کد است:

var random = new Random();
random.Next(1,100);


کد بالا thread-safe نیست ولی دات نت از ورژن NET6. به بعد، به روش زیر امکان thread-safe بودن را ایجاد کرد:

Random.Shared.Next(1, 100);


🔗 برای مشاهده توضیحات کامل می‌توانید از این لینک استفاده کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#حامد_حاجیلو (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

__________
👍26🔥72
استفاده از سرویس مایکروسافت hosted agent یا self hosted agent ؟

سرویس Microsoft Hosted Agent ماشین‌های مجازی هستند که توسط مایکروسافت مدیریت و در Cloud اجرا می‌شوند. این سرویس‌ها مجموعه‌ای از ابزارها و نرم افزارهای از پیش تعریف شده و نصب شده دارند و به طور منظم به روز می‌شوند. شما می‌توانید از image های مختلف مانند ویندوز، لینوکس یا macOS بسته به نیازهای خود انتخاب کنید. همچنین هر بار که یک pipeline را اجرا می‌کنید، برای هر کار یک VM تازه دریافت می‌کنید که VM پس از اتمام کار دور ریخته می‌شود.

یک Self-Hosted Agent ماشین‌های مجازی یا ماشین‌های فیزیکی هستند که شما به تنهایی تنظیم و مدیریت می‌کنید. شما می‌توانید هر نرم افزار یا ابزاری را که برای ساخت و استقرار خود نیاز دارید نصب کنید و کنترل کامل بر سخت افزار، سیستم عامل و پیکربندی داشته باشید. شما همچنین می‌توانید از حافظه‌های پنهان در سطح ماشین و پیکربندی برای سرعت بخشیدن به pipeline خود استفاده کنید.

چه زمانی از Self-Hosted Agent یا Microsoft Hosted استفاده کنیم؟


پیچیدگی: اگر pipeline شما نیاز به نرم افزار پیچیده یا سفارشی یا ابزارهایی دارند که در مایکروسافت Hosted Agent در دسترس نیستند، باید از Self-Hosted استفاده کنید.

عملکرد: اگر pipeline شما به عملکرد یا مسائل مربوط به شبکه حساس هستند، باید از Self-Hosted استفاده کنید.

هزینه: اگر pipeline شما اغلب یا برای مدت طولانی اجرا می‌شوند، باید از Self-Hosted استفاده کنید

امنیت: اگر pipeline شما اطلاعات یا کد حساس یا محرمانه را اداره می‌کنند، باید از Self-Hosted استفاده کنید.

🔗 نسخه کامل مقاله را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
👍5
ابزار GitHub Copilot: هوش مصنوعی که کدنویسی شما را متحول می‌کند

امروز می‌خواiم در مورد ابزاری کاربردی برای توسعه‌دهندگان صحبت کنم که می‌تواند سرعت و کیفیت کار شما را به‌طور چشمگیری افزایش دهد. این ابزار، GitHub Copilot است.

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

ابزار GitHub Copilot در سه حالت عرضه شده است که در ویدیو بررسی می‌شه:

۱.ابزار GitHub Copilot: این حالت برای توسعه‌دهندگانی است که از GitHub Copilot در کد نویسی استفاده می‌کنند.

۲.ابزار GitHub Copilot Chat: این حالت برای توسعه‌دهندگانی است که از ابزارهای چت‌بات استفاده می‌کنند.

۳.ابزار GitHub Copilot CLI: این حالت برای توسعه‌دهندگانی است که از خط فرمان استفاده می‌کنند.

من خودم از GitHub Copilot استفاده می‌کنم و بسیار از نتیجه راضی هستم. این ابزار واقعاً کارم را راحت‌تر کرده و باعث شده که سریع‌تر و با کیفیت‌تر کد بنویسم.

اگر شما هم یک توسعه‌دهنده هستید، حتماً GitHub Copilot را امتحان کنید.

در اینجا یک ویدیو هم برای شما آماده کرده‌ام که در مورد GitHub Copilot توضیح می‌دهم. این ویدیو را ببینید تا اطلاعات بیشتری در مورد این ابزار کسب کنید.

🔗 لینک ویدیو

🔗 لینک معرفی GitHub Copilot

___________

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

_____
👍164🔥2👏1
ساخت فولدرهای متوالی با پاورشل

پاورشل یک زبان اسکریپت نویسی قدرتمند برای مدیریت سیستم‌های مبتنی بر ویندوز است. با استفاده از پاورشل می‌توان کارهای مختلفی انجام داد، از جمله ساخت فولدر.

برای ساخت فولدرهای متوالی با پاورشل می‌توان از دستور New-Item استفاده کرد. این دستور برای ایجاد یک شیء جدید در سیستم فایل استفاده می شود.

برای مثال، برای ساخت فولدرهایی با نام "Session 1", "Session 2", "Session 3", ... تا "Session 21" می توان از کد زیر استفاده کرد:

1..21 | ForEach-Object { New-Item -ItemType Directory -Name ("Session {0:D2}" -f $_) } 


این کد از حلقه ForEach-Object برای تکرار مقادیر 1 تا 21 استفاده می‌کند. در هر تکرار، دستور New-Item یک فولدر جدید با نام "Session {0:D2}" ایجاد می‌کند.

در این کد، {0:D2} یک رشته قالب است که عدد فعلی حلقه را به صورت دو رقمی (با صفرهای سمت چپ) نمایش می‌دهد.

به عنوان مثال، اگر این کد را در ترمینال اجرا کنیم، خروجی زیر را مشاهده خواهیم کرد:

Session 1 Session 2 Session 3 ... Session 20 Session 21


این روش بسیار ساده و کارآمد برای ساخت فولدرهای متوالی با پاورشل است.

___________

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

_____
👍123🔥2
ابزار Copilot در دل Microsoft Edge

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

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

مثال:

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

Uncaught TypeError: Cannot read property 'name' of undefined 

با استفاده از Copilot، می‌توانید به‌سادگی روی خطا در کنسول DevTools ماوس را حرکت دهید تا توضیحی در مورد علت خطا ارائه شود. Copilot به شما می‌گوید که خطا به این دلیل رخ داده است که متغیر name تعریف نشده است. Copilot همچنین پیشنهاد می‌دهد که متغیر name را در کنسول به این شکل تعریف کنید.

const name = "John Doe";

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

-کدهای موجود را تجزیه‌وتحلیل کند و توضیحاتی در مورد عملکرد و پتانسیل آنها ارائه دهد.
-کدهای جدیدی را بر اساس کدهای موجود بنویسد.
-مشکلات احتمالی در کد را شناسایی کند.

🔗 نسخه کامل مقاله را می‌توانید در اینجا مطالعه نمایید.

__________

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

__________
👍113🔥2👏1
🌟 استفاده از Expression Tree در C# 🌟

🧩 مفهوم Expression Tree
یک Expression Tree در واقع ساختار داده درخت مانند است که یک عبارت را نشان می‌دهد. هر گره در درخت خود یک عبارت است، مانند یک ثابت، یک متغیر، یک فراخوانی متد یا یک عملگر. گره اصلی درخت بیانگر عملکرد اصلی درخت می‌باشد و گره‌های برگ عملوند هستند. به عنوان مثال، عبارت x + (y * z) را می‌توان به عنوان درخت عبارت مانند زیر نشان داد:

  +
/ \
x *
/ \
y z


نمونه کد C# مثال بالا به این صورت است:

x = Expression.Parameter(typeof(int), "x");
var y = Expression.Parameter(typeof(int), "y");
var z = Expression.Parameter(typeof(int), "z");
var multiply = Expression.Multiply(y, z);
var add = Expression.Add(x, multiply);
var expression = Expression.Lambda<Func<int, int, int, int>>(add, x, y, z);



متد Expression.Lambda یک عبارت lambda را از Expression Tree و لیستی از پارامترها ایجاد می‌کند. عبارت lambda نوع خاصی از عبارت است که می‌تواند به عنوان یک delegate کامپایل و اجرا شود. delegate نوعی است که نشان دهنده امضای متد است و می‌تواند ارجاع به یک متد را نگه دارد.

🔗 نسخه کامل مقاله را می‌توانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
👍12
کش در دستور docker build

دستور docker build برای ساخت ایمیج‌های داکر استفاده می‌شود. این دستور به صورت لایه‌ای عمل می‌کند و هر لایه یک تغییر در ایمیج را ایجاد می‌کند. این لایه‌ها به صورت مجزا ذخیره می‌شوند و در صورت نیاز می‌توان از آن‌ها مجدد استفاده کرد.

برای اینکه دستور docker build سریع‌تر عمل کند، از قابلیت کش استفاده می‌شود. این قابلیت باعث می‌شود که لایه‌هایی که قبلاً ساخته شده‌اند، مجدداً ایجاد نشوند و تنها لایه‌هایی که تغییر کرده‌اند، مجدداً ساخته شوند.

نحوه کار کش در دستور docker build
دستور docker build ابتدا فایل Dockerfile را بررسی می‌کند و لایه‌های مورد نیاز برای ساخت ایمیج را تعیین می‌کند. سپس برای هر لایه، یک کانتینر موقت ایجاد می‌کند و تغییرات مورد نظر را در آن اعمال می‌کند. در نهایت، محتویات کانتینر موقت را به عنوان یک لایه جدید در ایمیج ذخیره می‌کند.

اگر لایه‌ای قبلاً ساخته شده باشد، دستور docker build آن لایه را از کش می‌خواند و مجدداً آن را نمی‌سازد. تنها در صورتی که تغییراتی در فایل‌های لایه ایجاد شده باشد، دستور docker build آن لایه را مجدداً می‌سازد.

نحوه فعال کردن کش در دستور docker build
کش به صورت پیش‌فرض در دستور docker build فعال است. اما می‌توانید با استفاده از گزینه --no-cache آن را غیرفعال کنید.
برای فعال کردن کش در دستور docker build می‌توانید از گزینه --cache-from استفاده کنید. این گزینه به شما اجازه می‌دهد که مشخص کنید که از کدام ایمیج‌ها برای کش استفاده شود.

نحوه پاک کردن کش در دستور docker build
برای پاک کردن کش در دستور docker build می‌توانید از گزینه --cache-clean استفاده کنید. این گزینه باعث می‌شود که تمام لایه‌های کش شده پاک شوند.

مثال
فرض کنید که فایل Dockerfile زیر را دارید:

FROM ubuntu:latest 
RUN apt-get update && apt-get install -y nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

این فایل Dockerfile یک ایمیج داکر از nginx ایجاد می‌کند.
برای ساخت این ایمیج، دستور زیر را اجرا کنید:

docker build -t my-nginx .

این دستور ابتدا فایل Dockerfile را بررسی می‌کند و متوجه می‌شود که این ایمیج از دو لایه تشکیل شده است:
لایه اول ایمیج ubuntu:latest را به عنوان پایه استفاده می‌کند.
لایه دوم بسته nginx را نصب می‌کند و پورت 80 را برای استفاده باز می‌کند.

دستور docker build ابتدا لایه اول را می‌سازد. این لایه از قبل ساخته شده است، بنابراین دستور docker build آن را از کش می‌خواند.

سپس دستور docker build لایه دوم را می‌سازد. این لایه قبلاً ساخته نشده است، بنابراین دستور docker build آن را مجدداً می‌سازد.

در نهایت، دستور docker build ایمیج my-nginx را با استفاده از دو لایه ساخته شده ایجاد می‌کند.

اگر تغییراتی در فایل Dockerfile ایجاد کنید و دوباره دستور docker build را اجرا کنید، دستور docker build تنها لایه‌هایی را که تغییر کرده‌اند مجدداً می‌سازد. به عنوان مثال، اگر بسته nginx را به نسخه جدیدی به‌روزرسانی کنید، دستور docker build تنها لایه دوم را مجدداً می‌سازد.

_______

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

_______
👍131🔥1👏1
وضعیت WebAssembly در سال 2023 و 2024

ابزار WebAssembly (Wasm) یک فرمت اجرایی مستقل از پلتفرم است که می‌تواند در مرورگرها و سایر محیط‌های ادغام شده اجرا شود. Wasm با هدف ایجاد یک استاندارد برای اجرای کد بومی در مرورگرها ایجاد شد و در سال 2017 به‌عنوان یک استاندارد W3C پذیرفته شد.

در سال 2023، Wasm شاهد پیشرفت‌های قابل‌توجهی بود. چندین پیشنهاد استاندارد، مانند Tail Calls، Garbage Collection، Multiple Memories، و Relaxed SIMD، تصویب شد. چندین مورد از این ویژگی‌ها در برخی از مرورگرها و runtime‌ها پیاده‌سازی شده‌اند و کار در سایر مرورگرها نیز در حال انجام است.

همچنین شاهد افزایش پشتیبانی از زبان‌های برنامه‌نویسی برای Wasm بودیم. زبان‌هایی مانند Kotlin، Dart، Flutter، و OCaml به دلیل پشتیبانی از Garbage Collection، به Wasm اضافه شدند.

پشتیبانی از ابزارها نیز همچنان بهبود می‌یابد. به عنوان مثال، .NET Jinterpereter، به‌طور پویا ماژول‌های Wasm را در حین اجرا ایجاد می‌کند که باعث می‌شود دانلودها با استفاده از رویکرد تفسیری سریع‌تر و اجرای با سرعت بالا با استفاده از رویکرد AOT انجام شود. به لطف WASI، تیم .NET همچنین در حال آزمایش اجرای Wasm در سرور است.

سال 2024 نیز سال هیجان‌انگیز دیگری برای Wasm در حال شکل‌گیری است. احساس می‌شود که استفاده از Wasm در حال افزایش است، هم به عنوان ماژول‌های Wasm معمولی و هم به عنوان اجزای WASI، به ویژه با توجه به اینکه WASI Preview 2 به زودی منتشر خواهد شد.

در ادامه، برخی از پیشرفت‌های کلیدی Wasm در سال 2023 را بررسی می‌کنیم:

ویژگی Tail Calls: Tail Calls یک ویژگی مهم برای بهبود کارایی برنامه‌های Wasm است. Tail Calls به برنامه‌ها اجازه می‌دهد تا فراخوانی‌های بازگشتی را بدون ایجاد پشته جدید انجام دهند. این می‌تواند به کاهش مصرف حافظه و افزایش عملکرد منجر شود.
ویژگی Garbage Collection: Garbage Collection یک ویژگی مهم برای بهبود توسعه‌پذیری برنامه‌های Wasm است. Garbage Collection به توسعه‌دهندگان اجازه می‌دهد تا بدون نیاز به مدیریت دستی حافظه، برنامه‌های خود را بنویسند. این می‌تواند به کاهش پیچیدگی کد و افزایش سرعت توسعه منجر شود.

ویژگی Multiple Memories: Multiple Memories یک ویژگی مهم برای بهبود انعطاف‌پذیری برنامه‌های Wasm است. Multiple Memories به برنامه‌ها اجازه می‌دهد تا چندین فضای حافظه را با ویژگی‌های مختلف مدیریت کنند. این می‌تواند به برنامه‌ها اجازه دهد تا از منابع به‌طور کارآمدتری استفاده کنند.

ویژگی Relaxed SIMD: Relaxed SIMD یک ویژگی مهم برای بهبود عملکرد برنامه‌های Wasm است. Relaxed SIMD به برنامه‌ها اجازه می‌دهد تا از دستورالعمل‌های SIMD با کارایی بیشتری استفاده کنند. این می‌تواند به افزایش عملکرد برنامه‌های محاسباتی منجر شود.

این پیشرفت‌ها نشان می‌دهند که Wasm یک فناوری در حال رشد است که پتانسیل تغییر نحوه توسعه و اجرای برنامه‌های وب را دارد.

🔗 نسخه کامل مقاله را می‌توانید در اینجا مطالعه نمایید.

_______

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

_______
👍166🔥2