Software Philosophy – Telegram
Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
کش در دستور 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
Forwarded from Software Philosophy
EXACT INSTRUCTIONS

پیشنهاد می‌کنم اول فیلم رو ببنید بعد بقیه مطلب رو بخونید.

https://www.youtube.com/watch?reload=9&v=Ct-lOOUqmyY

خیلی جالب بود و در نگاه اول هیچ ربطی به نرم‌افزار و دنیای نرم‌افزار نداره. ولی وقتی یه خورده عمیق بشیم خیلی جالب میشه.

یکی از مهم‌ترین کارهایی که باید توی شرکت‌های نرم‌افزاری به درستی انجام بشه، داکیومنت کردن است. (داکیومنت به معنی کامنت گذاشتن داخل کد اصلا منظورم نیست، کد باید خودش به قدری خوانا باشه که نیاز به کامنت نداشته باشه یا به اصطلاح Self-Document باشه.)
داکیومنت کردن رو نباید به عنوان یه کار اضافه دید و سرسری انجامش داد.
تمام مراحل انتقال دانش باید به وسیله داکیومنت انجام بشه. نه به صورت نقل قول و سینه به سینه.

اتفاقی که برای خودم افتاد رو براتون تعریف می‌کنم:
در شرکت کرانه ادمین TFS بودم، و یکی از کارهایی که باید انجام می‌دادم و داکیومنت می‌کردم Disaster Recovery خود TFSبود. ۱ روز کامل وقت گذاشتم و Recovery رو انجام دادم و داکیومنتش رو نوشتم، کاری که مدیرمون کرد خیلی خوب بود. داکیومنت رو داد به یکی دیگه گفت TFS رو بیار بالا. حدس می‌زنید چی شد؟ نتونست، چون داکیومنتی که نوشته بودم به درد خودم می‌خورد.
و حرفی که به من زد این بود «داکیومنت باید طوری باشه که اگه دست یه نفر رو از توی خیابون گرفتم و این داکیومنت رو بهش دادم بتونه TFS رو بیاره بالا». بعد از ۳ بار داکیومنت نوشتن بالاخره موفق شدم داکیومنتی بنویستم که به هر کی بدمش فقط با Back up دیتا بیس بتونه TFS رو بالا بیاره.

به نظر من داکیومنت باید طوری باشه تا تمام کسانی که می‌خوننش، همشون یک برداشت رو داشته باشن، داکیومنت نباید وابسته به Context ذهن ما باشه.

خوشحال می‌شم نظر شما رو هم بدونم.

#افشین_علیزاده (http://ow.ly/l7cA30m3OQ9)

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

___
👍219👎1🔥1
دات نت و معماری Runtime دات نت

از کد تا Intermediate Language (IL) 📝➡️🔄
وقتی کد C# را می‌نویسید، کامپایلر Roslyn وارد عمل می‌شود تا آن را به (IL) تبدیل کند. این مرحله که به عنوان compile time شناخته می‌شود، زمانی است که کد شما از فرم قابل خواندن توسط انسان به IL تبدیل می‌شود. اما چرا IL؟ چرا مستقیماً در کد اسمبلی کامپایل نمی‌شود؟ 🤔

جادو در انعطاف پذیری DotNet Framework نهفته است. DotNet به گونه‌ای طراحی شده است که پلتفرم آگنوستیک باشد، می‌تواند در محیط‌های مختلفی مانند ویندوز، مک و اندروید اجرا شود. هر محیط دارای Common Language Runtime (CLR) خود است که برای آن پلتفرم خاص بهینه شده است. این بدان معنی است که کد IL شما می‌تواند در سیستم‌های مختلف اجرا شود و یک معماری زمان اجرا همه کاره و قدرتمند ارائه دهد. 🌍


نقش (CLR)
در زمان اجرا، CLR کار را به دست می‌گیرد. این بخش اجرای کد IL است. در CLR، یک جزء حیاتی به نام کامپایلر Just-In-Time (JIT) وجود دارد که IL را درست قبل از اجرا، به کد ماشین اصلی کامپایل می‌کند و کارایی و سرعت را تضمین می‌کند. 🚀

مشخصات Common Language Specification (CLS) 🔄
بخش CLS قوانینی را برای نحوه تعامل زبان‌های مختلف تعیین می‌کند. به عنوان مثال، در VB.NET، نیازی به پایان دادن دستورات با ; ندارید، در حالی که در C# اجباری است.

نقش Common Type Specification (CTS) 📋
بخش CTS نحوه اعلان و استفاده از انواع داده را تعریف می‌کند. به عنوان مثال، C# از int استفاده می‌کند در حالی که VB.NET از Integer استفاده می‌کند، اما در انتها، هر دو به عنوان Int32 نشان داده می‌شوند که این بخش توسط CTS تعیین می‌شود.

نقش The Base Class Library (BCL) 📚
در کنار CLR، کتابخانه کلاس پایه (BCL) قرار دارد که کتابخانه‌های ضروری مانند List و Dictionary را در خود جای داده است. BCL مؤلفه‌های اساسی را ارائه می‌دهد که توسعه‌دهندگان هر روز از آن ها استفاده می‌کنند و ثبات و قابلیت اطمینان را در پلتفرم‌های مختلف تضمین می‌کند. 🏛


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

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

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

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

______
👍156👏2🔥1
Forwarded from Software Philosophy
و بالاخره... اینم از سخنرانی تدکس من: «پروژه یک من جدید!».
تو تدکس در مورد نرون‌های آینه‌ای صحبت کردم و اینکه چطور این قسمت عجیب از مغز می‌تونه کمک کنه کارهای عجیبی رو انجام بدیم. کارهایی که به نظر خیلی نشدنی میان!

یکی از چیزهایی که انتقالش خیلی سخته، انتقال درده! خیلی سخته یه یکی توضیح بدی چطور درد می‌کنه! یه مفهوم بی‌ربط دیگه هم هست که به نظر همینقدر سخته: انتقال مهارت‌های کار تیمی! تو این TEDx Talk توضیح دادم که چطور یه قسمت از مغزمون به نام Mirror Neurons (که خیلی هم غافلیم ازش) می‌تونه کمک کنه این کارهای خیلی سخت رو، به حتی بدون صحبت کردن انجام بدیم!

یه قسمت از کلیپ هست که پام با محکککم می‌خوره به یه صندلی که تو صحنه هست که تو فیلم خیلی واضح نیفتاده. این رو گفتم که اون وسط نگین چی شد یه هو!

لینک ویدئوی کامل در صفحه رسمی تدکس در یوتیوب: https://www.youtube.com/watch?v=DfTuWdPV6JU

در صورت باز نشدن، این ویدئو در آپارات هم آپلود شده.
3👍116🔥5🥰1👏1
انتقال Git Stashes بین دستگاه‌ها

ابزار Git stashes ابزاری قدرتمند برای ذخیره موقت تغییرات است. اما اگر نیاز دارید این stashes را به دستگاه دیگری منتقل کنید، چطور؟ در این پست، نحوه انتقال Git stashes را باهم برسی می‌کنیم تا هیچ کدام از تغییرات در حال انجام را از دست ندهید.

پیش‌نیازها :
ابتدا Git را طوری تنظیم کنیم که شامل فایل‌های غیر ردیابی (Untracked) شده را هم در stash‌هایمان نیز باشد:

git config stash.showIncludeUntracked true


این تنظیمات تضمین می‌کند که وقتی یک stash می‌سازیم، تمام تغییرات از جمله فایل‌های غیر ردیابی شده شامل شوند.

گام 1: ایجاد یک Stash
روی دستگاه فعلی خود، تغییرات را stash کنید:

git stash push -u


پارامتر -u فایل‌های غیر ردیابی شده را هم در stash شامل می‌شود.

گام 2: ایجاد یک فایل Patch
حالا یک فایل patch از stash ایجاد کنید:

git stash show "stash@{0}" -p > changes.patch


این فرمان یک فایل با نام changes.patch ایجاد می‌کند که شامل تمام تغییرات در آخرین stash شماست.

گام 3: انتقال فایل Patch
فایل changes.patch را به دستگاه دیگر خود منتقل کنید.

گام 4: اعمال Patch در دستگاه جدید
روی دستگاه جدید، به مخزن Git خود بروید و patch را اعمال کنید:

git apply changes.patch


این فرمان تغییرات را از فایل patch به پوشه کاری شما اعمال می‌کند.

نکته : می‌توانید برای stash‌های مختلف، فایل‌های patch مجزا ایجاد کنید (مثلاً stash@{1}, stash@{2}).

با دنبال کردن این مراحل، می‌توانید بدون توجه به جایی که در حال کار هستید به راحتی Git stashes خود را بین دستگاه‌ها منتقل کنید و پیوستگی جریان کاری خود را حفظ کنید.

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

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

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

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

______
👍19👏32🎉1
Forwarded from Dubai .NET Developers
.NET Conf Watch Party!
Put a comment if you want to watch the conference online, but together!
It will be on Teams :)
1🔥93
استفاده از Span در سی‌شارپ

فرض کنید که یک رشته متن دارید و می‌خواهید تاریخ را از آن جدا کنید. اگر از متدهای Split یا Substring استفاده می کنید، برای رشته‌های جدید ایجاد شده، هربار حافظه اختصاص می‌یابد. این فرآیند می‌تواند کند باشد و میزان زیادی از حافظه را به خود اختصاص دهد، به خصوص زمانی که با مجموعه داده‌های بزرگ سروکار داریم.  

از طرف دیگر، Span مستقیماً روی حافظه اصلی بدون ایجاد و تخصیص حافظه جدید عمل می کند. این کار باعث می‌شود تا به طور قابل توجهی انجام کار سریعتر و کارآمدتر شود.
 
در نظر داشته باشید که Span از نظر نوع و حافظه ایمن است. بدون ایجاد نسخه‌های اضافی، مستقیماً روی حافظه کار می‌کند و می‌تواند با آرایه‌ها، رشته‌ها، حافظه، پشته و غیره کار کند.

در مواقع Span ها مانند یک view بروی حافظه یا مکان مورد نظر شما می‌باشند و در نتیجه بسیار سریع هستند.

🔗 برای مشاهده فیلم کوتاه در یک دقیقه ، اینجا کلیک کنید.

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

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

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

______
👍18