Software Philosophy – Telegram
Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
اجرای سبک‌تر یک وب اپلیکیشن ساده!

معمولا زمانی که یک وب اپلیکیشن 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
پروژه ای به اسم GitHub Arctic Code Vault برای نسل آینده

پلتفرم GitHub پلتفرمی بزرگ برای برنامه‌های منبع باز است که میلیون‌ها توسعه‌دهنده و پروژه را در بر می‌گیرد. اما این برنامه‌ها چقدر ماندگار هستند؟ آیا می‌توانیم از آن‌ها در آینده دور استفاده کنیم؟ برای پاسخ به این سوال، GitHub یک برنامه بایگانی‌سازی را راه‌اندازی کرده است که نام آن GitHub Archive Program است. این برنامه هدف دارد که تمام برنامه‌های منبع باز فعال را در GitHub در یک محل امن و ماندگار ذخیره کند.

یکی از بخش‌های این برنامه، GitHub Arctic Code Vault نام دارد. این بخش مسئول ذخیره‌سازی برنامه‌های منبع باز در یک انبار داده در Arctic World Archive (AWA) است. AWA تسهیلات بایگانی‌سازی بسیار بلندمدت است که ۲۵۰ متر عمیق در سرمای ماندگار یک کوه قطبی قرار دارد. این انبار داده در یک معدن زغال‌سنگ تعطیل شده در آرشیپل سوالبارد واقع است، که نزدیک‌تر به قطب شمال از دایره قطبی است.

پلتفرم GitHub در تاریخ ۲/۲/۲۰۲۰ یک عکس فوری از هر برنامه منبع باز فعال در GitHub گرفت و آن را بر روی ۱۸۶ رول فیلم سخت شده ذخیره کرد. این فیلم‌ها می‌توانند تا ۱۰۰۰ سال در شرایط سرد و خشک نگه داشته شوند. هر رول فیلم شامل یک راهنمایی برای خواندن داده‌ها، یک فهرست از برنامه‌ها و یک کد QR برای دسترسی به آن‌ها در وب است. همچنین GitHub یک نسخه دیجیتال از این برنامه‌ها را در یک سرور در نروژ نگه داشته است.

پروژه GitHub Arctic Code Vault یک تلاش بی‌سابقه برای حفظ میراث برنامه‌نویسی است. این پروژه نشان می‌دهد که چگونه می‌توانیم از تکنولوژی برای محافظت از دانش و فرهنگ استفاده کنیم. این پروژه همچنین یک پیام امیدوارکننده به نسل‌های آینده می‌فرستد که ما به آن‌ها اهمیت می‌دهیم و می‌خواهیم آن‌ها از برنامه‌های ما بهره‌مند شوند.

_______

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

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

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

_______
👍103🔥1
شروع work-item ها از یک شماره خاص

فرض کنید به هر دلیلی نیاز دارید تا شماره work-item های روی Azure DevOps Board تان از یک عدد خاص (مثلا ۱۰۰۰) شروع کنید.
قبل از ادامه مطالعه این پست فکر کنید برای انجام این کار چه ایده‌هایی به ذهن می‌رسد!

یکی از ایده‌ها این است که به صورت دستی هزار تا work-item ایجاد و حذف کنیم! خب طبیعتا زمان زیادی طول صرف می‌شود.

راه بهتر این است که همین کار ایجاد و حذف را انجام دهیم ولی نه به صورت دستی، بلکه با یه اسکریپت.

مراحل کار:
- نصب Azure Cli: لینک نصب
- اضافه کردن امکانات Azure DevOps به Azure Cli:

az extension add --name azure-devops


- داخل اکانت خود در قسمت Azure Devops چرخ دنده بالا سمت راست که مربوط به تنظیمات اکانت می‌شود را بزنید و از آنجا Personal account tokens را انتخاب و یک Token ایجاد کنید (دسترسی‌های لازم رو به Token مورد نظر بدهید).

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

- لاگین:

az devops login


- یک فایل با اسم s.ps1 ایجاد کنید و محتوای زیر را در آن قرار دهید:

$i = 1
while ($i -lt 1000)
{
az boards work-item create --noscript dummy$i --type "Bug" --org [ORGANIZATIONURL] --project [PROJECTNAME]
az boards work-item delete --id $i --org [ORGANIZATIONURL] --project [PROJECTNAME] --yes
$i++
}


- مقادیر [ORGANIZATIONURL] و [PROJECTNAME] را تغییر دهید.
- وارد مسیر فایلی که ایجاد کرده‌اید شده و آن را ران کنید:

./s.ps1


منتظر بمانید تا کار اسکریپت تمام شود. بعد از این مرحله work-item هایی که ایجاد می‌کنید از همان عدد خاصی که می‌خواهید شروع خواهد شد.

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

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

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

__________
👍7🔥32👏1
ابزار Dev Tunnel: دنیای توسعه نرم‌افزار را با Visual Studio 2022 دگرگون کنید

در دنیای توسعه نرم‌افزار که هر روز با نوآوری‌های جدید روبه‌رو هستیم، Visual Studio 2022 با معرفی ویژگی Dev Tunnel تجربه‌ای نوین را برای توسعه‌دهندگان .NET به ارمغان آورده است. این قابلیت، امکان دسترسی به برنامه‌های در حال توسعه از هر نقطه‌ای از اینترنت را ممکن می‌سازد و مرزهای میان توسعه local و آزمایش‌های واقعی را محو می‌کند.

ابزار Dev Tunnel چیست؟

ابزار Dev Tunnel، یک پل امن میان محیط توسعه local شما و دنیای بیرون است. با این قابلیت، می‌توانید برنامه‌های .NET خود را که بر روی دستگاه خودتان در حال اجرا هستند، بدون نیاز به استقرار روی سرورهای عمومی، در دسترس قرار دهید.

چرا Dev Tunnel مهم است؟

- تسریع در فرآیند تست: دسترسی فوری به برنامه‌ها از هر دستگاهی، فرآیند تست و دریافت بازخورد را سریع‌تر می‌کند.
- تست سازگاری دستگاه‌ها: امکان تست برنامه روی دستگاه‌های مختلف بدون پیچیدگی‌های استقرار.
- همکاری بهبود یافته: تیم‌ها می‌توانند به صورت زنده روی پروژه‌ها کار کرده و مشکلات را به صورت مشترک حل کنند.
- امنیت: ارتباطات از طریق Dev Tunnel رمزنگاری شده و امن است.

شروع کار با Dev Tunnel

۱. نصب و به‌روزرسانی Visual Studio 2022

برای استفاده بهینه از قابلیت Dev Tunnel در توسعه برنامه‌های .NET، نیاز است که Visual Studio 2022 نسخه 17.6 یا بالاتر را بر روی سیستم خود نصب کنید.

۲. ایجاد یا باز کردن پروژه وب با .NET

پروژه .NET خود را در Visual Studio ایجاد کنید یا اگر پروژه‌ای قبلاً دارید، آن را باز کنید.

۳. راه‌اندازی Dev Tunnel

در نوار بالا Visual Studio، قابلیت دیباگ برنامه وجود دارد و در کنار این گزینه یک فلش رو به پایین قرار دارد، زمانی که بر روی آن کلیک کنیم گزینه‌های بیشتری را برای دیباگ برنامه خود مشاهده می‌کنیم، یکی از این گزینه‌ها Dev Tunnels است. روی این گزینه کلیک کرده و یک Dev Tunnel جدید ایجاد می‌کنیم. این گزینه، Dev Tunnel را فعال می‌سازد و به شما امکان می‌دهد تا برنامه خود را در محیطی local اجرا کرده و آن را از طریق اینترنت قابل دسترس نمایید.

۴. به‌دست آوردن URL دسترسی

پس از فعال‌سازی Dev Tunnel و اجرا گرفتن برنامه، یک URL منحصربه‌فرد برای پروژه شما تولید می‌شود. این URL را می‌توانید با دیگران به اشتراک بگذارید یا برای تست برنامه خود روی دستگاه‌های مختلف استفاده کنید.

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

______

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

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

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

______
👍243🔥2👏1
استفاده از Rate Limiting که «یک باید» برای API می‌باشد!

تعریف Rate Limiting:
یک Rate Limiting تکنیکی است که کنترل می‌کند کاربر یا مشتری می‌تواند در یک دوره معین چند درخواست به یک API ارسال کند. برای مثال، ممکن است کاربر را به 100 درخواست در ساعت یا 10 درخواست در دقیقه محدود کنید. هدف ازRate Limiting جلوگیری از سوء استفاده، اضافه بار یا سوء استفاده از API شما است.

چرا باید از Rate Limiting در API خود استفاده کنید؟
-
بار روی سرور خود را کاهش دهید.
- صرفه جویی در پهنای باند و منابع.
- جلوگیری از استفاده ناعادلانه.

اصول پیاده سازی Rate Limiting

- استراتژی محدود کردن نرخ را انتخاب کنید: استراتژی Rate Limiting مناسب را بر اساس الزامات و محدودیت های API خود تعیین کنید.
- پیاده سازی Middleware: ایجاد میان افزار برای رهگیری درخواست‌های دریافتی و بررسی محدودیت‌های نرخ تعریف شده.
- ردیابی میزان مصرف: برای اعمال محدودیت‌های نرخ به طور موثر، سابقه استفاده را برای هر مشتری، چه در حافظه و چه با استفاده از یک ذخیره‌سازی دائمی داده، حفظ کنید.
- کنترل خطا: زمانی که مشتری از حد مجاز فراتر رفت، با یک کد وضعیت HTTP مناسب پاسخ دهید (مثلاً 429 درخواست خیلی زیاد) و اطلاعاتی را در مورد زمانی که مشتری می‌تواند درخواست‌های اضافی ارسال کند، درج کنید.

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

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

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

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

______
👍295
آشنایی با VNET و NIC

معرفی VNET 🤔
یک VNET یا Virtual Network در اصل نمایشی از شبکه شما در فضای ابری است. این یک جداسازی منطقی از ابر است که می‌توانید آن را در یک محیط ابر عمومی ارائه دهید. آن را به عنوان فضای شخصی خود در دنیای ابری در نظر بگیرید که در آن می‌توانید بلوک‌های آدرس IP، تنظیمات DNS، سیاست‌های امنیتی و جداول مسیریابی را کنترل کنید.

معرفی NIC 🤔
یک NIC یا Network Interface Controller جزئی سخت افزاری یا نرم افزاری است که کامپیوتر یا ماشین مجازی را به شبکه متصل می‌کند. در زمینه VNET ها، یک NIC نقطه تماس بین VM شما و VNET است که در آن قرار دارد.

موارد استفاده از VNET و NIC 🛠
- در واقع VNET برای ایجاد یک محیط امن و scalable پذیر برای اجرای برنامه‌ها و سرویس‌های شما استفاده می‌شود. این موارد به منابعی مانند VM اجازه می‌دهند که به طور ایمن با یکدیگر، اینترنت یا شبکه‌های داخلی ارتباط برقرار کنند.
- یک NIC در VNET ها استفاده می‌شوند تا VM ها را قادر به اتصال به شبکه‌های مختلف و ارتباط با منابع خارجی کنند.

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

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

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

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

______
👍4
💥 استفاده از Azure Locks: ایمن کردن منابع ابری شما

- آشنایی با قفل های Azure و نحوه ایمن سازی Azure Storage Account 🔒

سرویس Azure Locks یک ویژگی ارزشمند ارائه شده توسط Azure است که برای حفظ یکپارچگی منابع و جلوگیری از تغییر یا حذف ناخواسته استفاده می‌شود. این ویژگی را می‌توان برای منابعی از جمله Azure Storage Accounts اعمال کرد که شامل دو نوع قفل اصلی می‌شود:

- نوع CanNotDelete: این قفل به کاربران مجاز اجازه می‌دهد تا یک منبع را بخوانند و تغییر دهند اما از حذف منبع جلوگیری می‌کند.

- نوع ReadOnly: این قفل به کاربران مجاز اجازه می‌دهد تا یک منبع را بدون امکان حذف یا به‌روزرسانی آن بخوانند.
🛡 این قفل ها ابزارهای ضروری مدیران برای محافظت از منابع Azure خود هستند.

📊 ملاحظات قبل از اعمال قفل

قبل از تنظیم قفل‌ها، مهم است که دامنه و مفاهیم آنها را درک کنید:
- قفل‌ها برای عملیات control plane اعمال می‌شوند، نه عملیات data plane.
- وراثت قفل به این معنی است که هر قفلی که در سطح والدین اعمال شود به همه منابع فرزند انتقال می‌یابد.
- قفل با بیشترین محدوده در زنجیره وراثت اولویت بیشتری دارد.

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

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

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

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

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

______
👍4
This media is not supported in the widget
VIEW IN TELEGRAM
54🎉5
Software Philosophy
This media is not supported in the widget
VIEW IN TELEGRAM
👏186👍5😢2🎉1
Forwarded from Software Philosophy
اثری که Body language بر خود فرد می‌گذارد، اگر بیشتر از اثری که بر مخاطب می‌گذارد نباشد، کمتر هم نیست.

استاد دانشگاه هاروارد Amy Cuddy تحقیقی انجام داده است و در آن به این نتیجه رسیده است که فرم و حالت بدن می‌تواند بر «ذهن» و «فیزیولوژی» اثر گذارد،‌ بدین صورت که اگر شما ۲ دقیقه ژست یک فرد پیروز را به خود بگیرید میزان تستوسترون افزایش و کورتیزول کاهش میابد. میزان این هورمون‌ها اثر مستقیمی بر مغر گذاشته و میتواند باعث افزایش قدرت ریسک‌پذیری و موفقیت شود.

https://www.ted.com/talks/amy_cuddy_your_body_language_shapes_who_you_are

#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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

___
👍11🔥85