@one_programmer
Automatically find latent bugs in your code with .NET 5
https://devblogs.microsoft.com/dotnet/automatically-find-latent-bugs-in-your-code-with-net-5/
@one_programmer
Automatically find latent bugs in your code with .NET 5
https://devblogs.microsoft.com/dotnet/automatically-find-latent-bugs-in-your-code-with-net-5/
@one_programmer
Microsoft News
Automatically find latent bugs in your code with .NET 5
Introducing AnalysisLevel in the C# compiler to introduce warnings to patterns like common codingmistakes or common API misuse.
@one_programmer
توی net core. 3 ماکروسافت از قابلیتی پرده برداشت که Trimming یا assembly linker نام داشت. این قابلیت می اومد خروجی نهایی پروژتون رو با حذف کتابخانه هایی که استفاده نمیکردید به صورت خوبی کاهش میداد. حالا ماکروسافت پاش رو فراتر گذاشته و توی core 5 اومده این قابلیت رو خیلی بهبود داده. طبق مقاله ایی که توی بلاگ ماکروسافت هست و تست گرفتن،برنامه به حدود ۱۰ مگابایت رسیده !
https://devblogs.microsoft.com/dotnet/app-trimming-in-net-5/
@one_programmer
توی net core. 3 ماکروسافت از قابلیتی پرده برداشت که Trimming یا assembly linker نام داشت. این قابلیت می اومد خروجی نهایی پروژتون رو با حذف کتابخانه هایی که استفاده نمیکردید به صورت خوبی کاهش میداد. حالا ماکروسافت پاش رو فراتر گذاشته و توی core 5 اومده این قابلیت رو خیلی بهبود داده. طبق مقاله ایی که توی بلاگ ماکروسافت هست و تست گرفتن،برنامه به حدود ۱۰ مگابایت رسیده !
https://devblogs.microsoft.com/dotnet/app-trimming-in-net-5/
@one_programmer
Microsoft News
App Trimming in .NET 5
Trimming is an option as part of publishing self contained apps in .NET Core. This post goes into more detail about the trimming options in .NET 5 including type and member level trimming.
@one_programmer
Secrets of a .NET Professional
https://khalidabuhakmeh.com/secrets-of-a-dotnet-professional
@one_programmer
Secrets of a .NET Professional
https://khalidabuhakmeh.com/secrets-of-a-dotnet-professional
@one_programmer
Khalid Abuhakmeh’s Blog
Secrets of a .NET Professional
Find out what over a decade of being a .NET professional has taught me and learn from my journey. The advice in this post might help you avoid some pitfalls.
@one_programmer
خواندن کد های دیگران باعث میشه ما برنامه نویس بهتری بشیم. این موضوع فارغ از زبان برنامه نویسی یک اصل هست. در پست قبلی هم یکی از نکته ها این موضوع بود. وقتی شما کد های پروژه ها رو میخوانید که هزاران نفر روی آن در Github کار کردن کار بسیار خوبی هست. میتوانید ایده های خوبی بگیرید و دست خط دیگران رو یاد بگیرید. این باعث میشه شما debugger عالی هم بشید و دلیل رفتار های lib که استفاده میکنید را بررسی کنید. برای خواندن کد های دیگران و پروژه هایی که در قابل nuget دارید استفاده میکنید راه های زیادی وجود دارد.
۱. استفاده از ابزاری مثل resharper یا rider ide
۲. استفاده از ابزار های decompiler کنار کارتان مثل reflector
۳. استفاده از visual studio
ما در این پست از visual studio استفاده میکنیم که یک ابزار داخلی هست و نیاز به نصب ابزاری نداره. شما باید نسخه ۱۶.۵ به بعد را نصب کنید. در این نسخه ماکروسافت از iLSpy استفاده کرده است که یک ابزار کاملا open source هست و در داخل Github قرار دارد. برای فعال سازی این قابلیت که فعلا به صورت پیشفرض غیر فعال هست باید در منو Tools در بخش Options کلمه decompile را سرچ کنید. در بخش Advance گزینه Enable navigation to decompiled sources (experimental) را تیک بزنید. هر جای پروژه میتوانید دکمه f12 رو بزنید و کد decompile شده رو بررسی کنید.
استفاده از این قابلیت بهترین گزینه نیست اما برای برنامه نویس هایی که نمیخان ابزار جدیدی نصب کنن بسیار عالی هست.
مقاله زیر هم به این موضوع میپردازه
https://devblogs.microsoft.com/visualstudio/decompilation-of-c-code-made-easy-with-visual-studio/
لینک مخزن iLSpy
https://github.com/icsharpcode/ILSpy
@one_programmer
خواندن کد های دیگران باعث میشه ما برنامه نویس بهتری بشیم. این موضوع فارغ از زبان برنامه نویسی یک اصل هست. در پست قبلی هم یکی از نکته ها این موضوع بود. وقتی شما کد های پروژه ها رو میخوانید که هزاران نفر روی آن در Github کار کردن کار بسیار خوبی هست. میتوانید ایده های خوبی بگیرید و دست خط دیگران رو یاد بگیرید. این باعث میشه شما debugger عالی هم بشید و دلیل رفتار های lib که استفاده میکنید را بررسی کنید. برای خواندن کد های دیگران و پروژه هایی که در قابل nuget دارید استفاده میکنید راه های زیادی وجود دارد.
۱. استفاده از ابزاری مثل resharper یا rider ide
۲. استفاده از ابزار های decompiler کنار کارتان مثل reflector
۳. استفاده از visual studio
ما در این پست از visual studio استفاده میکنیم که یک ابزار داخلی هست و نیاز به نصب ابزاری نداره. شما باید نسخه ۱۶.۵ به بعد را نصب کنید. در این نسخه ماکروسافت از iLSpy استفاده کرده است که یک ابزار کاملا open source هست و در داخل Github قرار دارد. برای فعال سازی این قابلیت که فعلا به صورت پیشفرض غیر فعال هست باید در منو Tools در بخش Options کلمه decompile را سرچ کنید. در بخش Advance گزینه Enable navigation to decompiled sources (experimental) را تیک بزنید. هر جای پروژه میتوانید دکمه f12 رو بزنید و کد decompile شده رو بررسی کنید.
استفاده از این قابلیت بهترین گزینه نیست اما برای برنامه نویس هایی که نمیخان ابزار جدیدی نصب کنن بسیار عالی هست.
مقاله زیر هم به این موضوع میپردازه
https://devblogs.microsoft.com/visualstudio/decompilation-of-c-code-made-easy-with-visual-studio/
لینک مخزن iLSpy
https://github.com/icsharpcode/ILSpy
@one_programmer
Microsoft News
Decompilation of C# code made easy with Visual Studio
Have you ever experienced an exception occurring in a 3rd party .NET assembly but had no source code to figure out why? You can now use Visual Studio to decompile managed code even if you don't have the symbols, allowing you to look at code, inspect variables…
@one_programmer
در مقاله زیر در مورد استفاده از ActionBlock در کلاس Tpl Dataflow صبحت میکنیم.
کلاس Tpl شامل تعداد زیادی زیر کلاس مفید برای کار های همزمانی هست، در زیر کلاس DataFlow ما میتونیم یک Flow یا Pipline درست بکنیم و آیتم ها رو پردازش بکنیم. یک کارخانه رو در نظر بگیرید که یک خط مستقیم داره که محصولات از روی اون رد میشن و کارگر ها به ترتیب دونه دونه محصولات رو برمیدارن و کار خاصی روش انجام میدن. این ساده شده Tpl DataFlow هست. یا فرض کنید یکسری ویدیو دارید که باید اون ها رو دونه دونه پردازش کنید. اول عملیات فشرده سازی رو انجام بدید و بعد با چند تا کیفیت ذخیره کنید. برای این موارد میشه از DataFlow استفاده کرد. در Dataflow میشه تنظیمات خاصی رو گذاشت که برای مثال درجه همزمانی تعداد کار رو تنظیم کرد، یا Buffer گذاشت برای ورودی Flow و..... زیاد وارد جزئیات Dataflow نمیشم اما کلاس های زیادی داره برای اینکار.
در Dataflow مامیتونیم یک flow درست کنیم و برای این flow تعدادی block درست کنیم و به ترتیب اون ها رو به هم وصل کنیم. هر block خودش ۲ تا buffer داره. یکی برای ورودی و یکی برای خروجی.یعنی مامیتونیم آیتم به block ها بفرستیم و منتظر جواب نمونیم.میشه foreach گذاشت و همزمان داده ها رو بهش پاس داد و همزمان هم داده ها به صورت concurrent و async پردازش بشن.
یکی از کلاس های Dataflow که برای انتها flow هست ActionBlock هست.
ما در این مقاله از ActionBlock برای انجام کار به صورت پیش زمینه استفاده میکنیم.
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-actionblock-dataflow-in-c-f5da63ff3692
@one_programmer
در مقاله زیر در مورد استفاده از ActionBlock در کلاس Tpl Dataflow صبحت میکنیم.
کلاس Tpl شامل تعداد زیادی زیر کلاس مفید برای کار های همزمانی هست، در زیر کلاس DataFlow ما میتونیم یک Flow یا Pipline درست بکنیم و آیتم ها رو پردازش بکنیم. یک کارخانه رو در نظر بگیرید که یک خط مستقیم داره که محصولات از روی اون رد میشن و کارگر ها به ترتیب دونه دونه محصولات رو برمیدارن و کار خاصی روش انجام میدن. این ساده شده Tpl DataFlow هست. یا فرض کنید یکسری ویدیو دارید که باید اون ها رو دونه دونه پردازش کنید. اول عملیات فشرده سازی رو انجام بدید و بعد با چند تا کیفیت ذخیره کنید. برای این موارد میشه از DataFlow استفاده کرد. در Dataflow میشه تنظیمات خاصی رو گذاشت که برای مثال درجه همزمانی تعداد کار رو تنظیم کرد، یا Buffer گذاشت برای ورودی Flow و..... زیاد وارد جزئیات Dataflow نمیشم اما کلاس های زیادی داره برای اینکار.
در Dataflow مامیتونیم یک flow درست کنیم و برای این flow تعدادی block درست کنیم و به ترتیب اون ها رو به هم وصل کنیم. هر block خودش ۲ تا buffer داره. یکی برای ورودی و یکی برای خروجی.یعنی مامیتونیم آیتم به block ها بفرستیم و منتظر جواب نمونیم.میشه foreach گذاشت و همزمان داده ها رو بهش پاس داد و همزمان هم داده ها به صورت concurrent و async پردازش بشن.
یکی از کلاس های Dataflow که برای انتها flow هست ActionBlock هست.
ما در این مقاله از ActionBlock برای انجام کار به صورت پیش زمینه استفاده میکنیم.
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-actionblock-dataflow-in-c-f5da63ff3692
@one_programmer
Medium
Do async and concurrent work with ActionBlock DataFlow in c#
In many scenarios in different projects, there are usually a number of things that we want to do in addition to the main work, but the…
@one_programmer
ASP.NET Core Apps Observability
https://devblogs.microsoft.com/aspnet/observability-asp-net-core-apps/
@one_programmer
ASP.NET Core Apps Observability
https://devblogs.microsoft.com/aspnet/observability-asp-net-core-apps/
@one_programmer
ASP.NET Blog
ASP.NET Core Apps Observability
Based on customers using .NET Core in different environments, this article explores options for adding observability to .NET Core apps.
@one_programmer
نکات جالب از stackoverflow با 1.3 بیلیون لود صفحه در ماه !!!
این لینک از چگونگی اینکار داده و ابزار ها رو کامل مشخص کرده. مثل سرور و تعداد سرور دیتابیس. همچنین نشون میده از Redis استفاده میشه که 2 تا نود دارن و با کلاینت که خودشون نوشتن به اسم StackExchange باهاش کار میکنن. همچنین استفاده از Jil برای json کردن. و همچنین Dapper به عنوان ORM خودشون. سرور های Elastic رو دارن برای بحث index کردن.2 تا سرور HAPAroxy دارن که فوق العاده هست. پیشنهاد میدم بخونید لینک زیر رو
https://stackexchange.com/performance
شرکت Stackoverflow اومده بیشتر ابزار های خودش رو opensource کرده که داخل github هست. https://github.com/StackExchange
@one_programmer
نکات جالب از stackoverflow با 1.3 بیلیون لود صفحه در ماه !!!
این لینک از چگونگی اینکار داده و ابزار ها رو کامل مشخص کرده. مثل سرور و تعداد سرور دیتابیس. همچنین نشون میده از Redis استفاده میشه که 2 تا نود دارن و با کلاینت که خودشون نوشتن به اسم StackExchange باهاش کار میکنن. همچنین استفاده از Jil برای json کردن. و همچنین Dapper به عنوان ORM خودشون. سرور های Elastic رو دارن برای بحث index کردن.2 تا سرور HAPAroxy دارن که فوق العاده هست. پیشنهاد میدم بخونید لینک زیر رو
https://stackexchange.com/performance
شرکت Stackoverflow اومده بیشتر ابزار های خودش رو opensource کرده که داخل github هست. https://github.com/StackExchange
@one_programmer
Stackexchange
Performance - Stack Exchange
We make Stack Overflow and 170+ other community-powered Q&A sites.
@one_programmer
چرا پرتاب Exception اینقدر کند هست . مقاله زیر در مورد این موضوع صحبت میکنه و شدیدا توصیه میکنه که در فلو های نرمال برنامه Exception پرتاب نکنیم.
https://mattwarren.org/2016/12/20/Why-Exceptions-should-be-Exceptional/
@one_programmer
چرا پرتاب Exception اینقدر کند هست . مقاله زیر در مورد این موضوع صحبت میکنه و شدیدا توصیه میکنه که در فلو های نرمال برنامه Exception پرتاب نکنیم.
https://mattwarren.org/2016/12/20/Why-Exceptions-should-be-Exceptional/
@one_programmer
Performance is a Feature!
Why Exceptions should be Exceptional
@one_programmer
وقتی از میکرو سرویس استفاده میکنیم. تجزیه و تحلیل میکرو سرویس و مانیتور اون ها یکی از بزرگ ترین چالش های اصلی شرکت ها هست. فرض کنید ۲۰ تا میکرو سرویس دارید و برای یکی از api ها مشکلی پیش میاد و کند میشه. فلو اون api هم به این شکل هست که از gateway عبور میکنه و به idnetity میرسه و بعد اون به میکرو سرویس a و بعد اون به b و به c میرسه !!!
حالا از کجا متوجه کندی بشیم که کدوم سرویس کند هست؟؟؟
اصلا سرویس کند هست یا دیتابیس کند هست ؟؟؟
شبکه مشکل داره یا خطا داریم و.....
برای این منظور ۲ ابزار خیلی خوب هست، هر دو open source هستن. یکی از اون ها برای uber هست و اون یکی برای elastic هست.
این دو تفاوت زیادی با هم ندارن.
ابزار jaeger برای uber هست و کلاینت اکثر زبان ها رو داره. Ui هم برای تجزیه تحلیل داره.
ابزار apm هم برای elastic هست.
ابزار apm غیر از trace کردن میتونه اطلاعات بیشتری برای تجزیه تحلیل بهتون بده.
برای راه اندازی jaeger نیازه سرور اون رو با داکر all in one خودش بالا بیارید و بعد کلاینت اون رو روی پروژه خودتون ادد کنید.
برای apm هم باید elastic و kibana رو نصب کنید.
Jaeger
https://github.com/jaegertracing/jaeger-client-csharp
Apm
https://github.com/elastic/apm-agent-dotnet
@one_programmer
وقتی از میکرو سرویس استفاده میکنیم. تجزیه و تحلیل میکرو سرویس و مانیتور اون ها یکی از بزرگ ترین چالش های اصلی شرکت ها هست. فرض کنید ۲۰ تا میکرو سرویس دارید و برای یکی از api ها مشکلی پیش میاد و کند میشه. فلو اون api هم به این شکل هست که از gateway عبور میکنه و به idnetity میرسه و بعد اون به میکرو سرویس a و بعد اون به b و به c میرسه !!!
حالا از کجا متوجه کندی بشیم که کدوم سرویس کند هست؟؟؟
اصلا سرویس کند هست یا دیتابیس کند هست ؟؟؟
شبکه مشکل داره یا خطا داریم و.....
برای این منظور ۲ ابزار خیلی خوب هست، هر دو open source هستن. یکی از اون ها برای uber هست و اون یکی برای elastic هست.
این دو تفاوت زیادی با هم ندارن.
ابزار jaeger برای uber هست و کلاینت اکثر زبان ها رو داره. Ui هم برای تجزیه تحلیل داره.
ابزار apm هم برای elastic هست.
ابزار apm غیر از trace کردن میتونه اطلاعات بیشتری برای تجزیه تحلیل بهتون بده.
برای راه اندازی jaeger نیازه سرور اون رو با داکر all in one خودش بالا بیارید و بعد کلاینت اون رو روی پروژه خودتون ادد کنید.
برای apm هم باید elastic و kibana رو نصب کنید.
Jaeger
https://github.com/jaegertracing/jaeger-client-csharp
Apm
https://github.com/elastic/apm-agent-dotnet
@one_programmer
GitHub
GitHub - jaegertracing/jaeger-client-csharp: 🛑 This library is DEPRECATED!
🛑 This library is DEPRECATED! Contribute to jaegertracing/jaeger-client-csharp development by creating an account on GitHub.
@one_programmer
پیاده سازی یک راه حل لاگ حرفه ایی. Sentry
ذخیره سازی و Visualization لاگ ها همیشه جزو اولویت های همه پروژه های بزرگ بوده، مخصوصا وقتی بحث میکروسرویس وسط باشه و نیاز باشه لاگ ها رو به هم وصل کنید بین میکروسرویس های مختلف.
حتما راه حل ELK رو شنیدید، این راه حل خیلی خوب هست اما تنها انتخاب شما نیست، انتخاب دیگه sentry هست. خیلی از شرکت های بزرگ از sentry استفاده میکنن، این شرکت ها مثل CloudFlare, Disney , atlassian , bitnami, reddit , datadog هستن که شرکت های بزرگی هستن.
این Sentry میاد لاگ ها جمع آوری، دست بندی و... میکنه و داخل پنل خودش بهتون نشون میده. این پنل قابلیت های فوق العاده ایی داره، خیلی راحت بین میلیون ها لاگ میتونید کوئری بزنید و انواع فیلتر ها رو اعمال کنید، به سرویس هایی مثل gitlab و jira وصل بشید و لاگ رو فیکس کنید. برای لاگی alert ست کنید و... . یه قابلیت خیلی خوبش دسته بندی لاگ ها هست. حتما براتون پیش اومده که لاگ هایی که کم هست بین لاگ های زیاد گم میشن،اما در sentry لاگ ها دسته بندی میشن و مثل group by کردن تعداد لاگ رو نشون میده. براتون فیلتر میذاره که مثلا لاگ ها هر چند روز رخ میده یه لاگ خاص.
برای استفاده از sentry چند راه حل دارید، sdk زبان خودتون رو نصب کنید و به سایت sentry برید و از اکانت free اون که محدودیت داره استفاده کنید. راه حل دیگه اینه که سرور sentry رو به صورت docker داخل سیستم خودتون بیارید بالا.
برای تمام زبان های برنامه نویسی sdk داره میتونید اضافه کنید.
برای نصب سرور sentry میتونید داخل لینک زیر برید و نصب کنید. اگه لینوکس هستید که راحت هست اما اگر ویندوز هستید با wsl2 راحت میتونید نصب کنید.
https://github.com/getsentry/onpremise
سایت خود sentry
https://sentry.io/welcome/
@one_programmer
پیاده سازی یک راه حل لاگ حرفه ایی. Sentry
ذخیره سازی و Visualization لاگ ها همیشه جزو اولویت های همه پروژه های بزرگ بوده، مخصوصا وقتی بحث میکروسرویس وسط باشه و نیاز باشه لاگ ها رو به هم وصل کنید بین میکروسرویس های مختلف.
حتما راه حل ELK رو شنیدید، این راه حل خیلی خوب هست اما تنها انتخاب شما نیست، انتخاب دیگه sentry هست. خیلی از شرکت های بزرگ از sentry استفاده میکنن، این شرکت ها مثل CloudFlare, Disney , atlassian , bitnami, reddit , datadog هستن که شرکت های بزرگی هستن.
این Sentry میاد لاگ ها جمع آوری، دست بندی و... میکنه و داخل پنل خودش بهتون نشون میده. این پنل قابلیت های فوق العاده ایی داره، خیلی راحت بین میلیون ها لاگ میتونید کوئری بزنید و انواع فیلتر ها رو اعمال کنید، به سرویس هایی مثل gitlab و jira وصل بشید و لاگ رو فیکس کنید. برای لاگی alert ست کنید و... . یه قابلیت خیلی خوبش دسته بندی لاگ ها هست. حتما براتون پیش اومده که لاگ هایی که کم هست بین لاگ های زیاد گم میشن،اما در sentry لاگ ها دسته بندی میشن و مثل group by کردن تعداد لاگ رو نشون میده. براتون فیلتر میذاره که مثلا لاگ ها هر چند روز رخ میده یه لاگ خاص.
برای استفاده از sentry چند راه حل دارید، sdk زبان خودتون رو نصب کنید و به سایت sentry برید و از اکانت free اون که محدودیت داره استفاده کنید. راه حل دیگه اینه که سرور sentry رو به صورت docker داخل سیستم خودتون بیارید بالا.
برای تمام زبان های برنامه نویسی sdk داره میتونید اضافه کنید.
برای نصب سرور sentry میتونید داخل لینک زیر برید و نصب کنید. اگه لینوکس هستید که راحت هست اما اگر ویندوز هستید با wsl2 راحت میتونید نصب کنید.
https://github.com/getsentry/onpremise
سایت خود sentry
https://sentry.io/welcome/
@one_programmer
GitHub
GitHub - getsentry/self-hosted: Sentry, feature-complete and packaged up for low-volume deployments and proofs-of-concept
Sentry, feature-complete and packaged up for low-volume deployments and proofs-of-concept - getsentry/self-hosted
@one_programmer
چطور کار هامون رو به صورت Async و concurrent انجام بدیم ؟؟ قسمت دوم
Do async and concurrent work with Channel in c# Part II
این عنوان دومین مقاله بنده در مورد این هست که چطور کارهامون رو به صورت بازدهی بالا به صورت Async و concurrent انجام بدیم . در اینجا منظور از کارهای هست که همیشه دغدغه خیلی از برنامه نویس ها هست.
مثل مواردی:
1- برای ورود کاربر otp کد ارسال میکنیم و میخواهیم درگیر کندی پروایدر sms نشویم.
2- میخواهیم به ازای درخواست های کاربر اطلاعات اون رو به صورت async جایی ذخیره کنیم.
3-میخواهیم با پروایدر کار کنیم که کند هست
همه این موارد ما میخواهیم اون کار ها رو به شکلی انجام دهیم که باعث کندی برنامه نشیم و Request ارسالی کاربر رو نگه نداریم و در اسرع وقت بتوانیم به درخواست ها پاسخ دهیم. اینکار باعث این میشود که Api ما بتواند سریع به درخواست ها پاسخ دهد و بازدهی بالا برود
در این مقاله قسمت دوم ما با استفاده از Channel میاییم اینکار رو انجام می دهیم.
در قسمت یک ما با استفاده از Tpl DataFlow اینکار رو انجام می دهیم.
قسمت دوم
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-channel-in-c-part-ii-2373d9d94390
قسمت اول
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-actionblock-dataflow-in-c-f5da63ff3692
@one_programmer
چطور کار هامون رو به صورت Async و concurrent انجام بدیم ؟؟ قسمت دوم
Do async and concurrent work with Channel in c# Part II
این عنوان دومین مقاله بنده در مورد این هست که چطور کارهامون رو به صورت بازدهی بالا به صورت Async و concurrent انجام بدیم . در اینجا منظور از کارهای هست که همیشه دغدغه خیلی از برنامه نویس ها هست.
مثل مواردی:
1- برای ورود کاربر otp کد ارسال میکنیم و میخواهیم درگیر کندی پروایدر sms نشویم.
2- میخواهیم به ازای درخواست های کاربر اطلاعات اون رو به صورت async جایی ذخیره کنیم.
3-میخواهیم با پروایدر کار کنیم که کند هست
همه این موارد ما میخواهیم اون کار ها رو به شکلی انجام دهیم که باعث کندی برنامه نشیم و Request ارسالی کاربر رو نگه نداریم و در اسرع وقت بتوانیم به درخواست ها پاسخ دهیم. اینکار باعث این میشود که Api ما بتواند سریع به درخواست ها پاسخ دهد و بازدهی بالا برود
در این مقاله قسمت دوم ما با استفاده از Channel میاییم اینکار رو انجام می دهیم.
در قسمت یک ما با استفاده از Tpl DataFlow اینکار رو انجام می دهیم.
قسمت دوم
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-channel-in-c-part-ii-2373d9d94390
قسمت اول
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-actionblock-dataflow-in-c-f5da63ff3692
@one_programmer
Medium
Do async and concurrent work with Channel in c# Part II
In the previous section, using DataFlow and ActionBlock, we learned how to do some work in Async and not wait for the request. In this…
@one_programmer
یک سری از مفاهیم به ظاهر ساده هستند که هر روز با اونها سروکار داریم، اما بهتره که درک دقیق تری نسبت بهشون داشته باشیم و هر چند وقت مروری روی اونها داشته باشیم. یک از این مفاهیم انواع داده ای هستند. انواع داده ای با توجه به نحوه ذخیره سازی در حافظه، در #C به دو نوع ReferenceTypes و ValueTypes تقسیم میشن. انواع مقداری از Stack تخصیص داده میشن و مستقیما حاوی دیتا هستند، بعد از تمام شدن scope که توی اون قرار دارند، از stack حذف میشن.اما انواع ارجاعی از Heap تخصیص داده میشن و آدرس مربوط به دیتا رو نگه می دارن. بعد از اتمام scope ای که توی اون قرار دارند، همچنان در حافظه باقی میمونن تا اینکه garbage collecto حذفشون کنه. توی این مقاله مفاهیم، نحوه ذخیره سازی و ارسال اونها به عنوان پارامتر بررسی شده.
https://vrgl.ir/G1nFf
@one_programmer
#vahid_tajari
یک سری از مفاهیم به ظاهر ساده هستند که هر روز با اونها سروکار داریم، اما بهتره که درک دقیق تری نسبت بهشون داشته باشیم و هر چند وقت مروری روی اونها داشته باشیم. یک از این مفاهیم انواع داده ای هستند. انواع داده ای با توجه به نحوه ذخیره سازی در حافظه، در #C به دو نوع ReferenceTypes و ValueTypes تقسیم میشن. انواع مقداری از Stack تخصیص داده میشن و مستقیما حاوی دیتا هستند، بعد از تمام شدن scope که توی اون قرار دارند، از stack حذف میشن.اما انواع ارجاعی از Heap تخصیص داده میشن و آدرس مربوط به دیتا رو نگه می دارن. بعد از اتمام scope ای که توی اون قرار دارند، همچنان در حافظه باقی میمونن تا اینکه garbage collecto حذفشون کنه. توی این مقاله مفاهیم، نحوه ذخیره سازی و ارسال اونها به عنوان پارامتر بررسی شده.
https://vrgl.ir/G1nFf
@one_programmer
#vahid_tajari
ویرگول
بررسی انواع مقداری Value Types و انواع ارجاعی Reference Types در #C
در سی شارپ انواع دادهای با توجه به نحوه ذخیرهسازی در حافظه به دو دستهی انواع مقداری و انواع ارجاعی تقسیم میشوند در این پست مفاهیم و ا…
@one_programmer
کش کردن اتوماتیک خروجی متد ها
حتما براتون پیش اومده که نیاز بوده خروجی متدی رو کش بکنید، وقتی اینکار رو کردید. داخل بیزینس متد تون کد کش کردن رو نوشتید. اینکار خیلی شاید درست نباشه که کش کردن کنار بیزینس متد نوشته باشه. و اینکه برای برای بقیه متد ها هم باید این کد رو کپی کنید.
راه حل اینکار استفاده از attribute ها هست. شما میتونید به روش aop خروجی هر متدی که نیاز دارید رو کش کنید. لینک repository که برای اینکار توسعه دادم رو میزارم. در این repo یک interceport تعریف شده که قبل از اجرا متد اجرا می شود. فقط متد هایی که به CacheMethod مزین شده باشند. کلید کش را با استفاده از اسم متد و ورودی ها ساخته و اتوماتیک کش میکند. مقادیر کش شده با استفاده از MessagePack ساخته شده و با lz4 فشرده شده است که حجم کش را بسیار کم میکند و خیلی سریع عمل میکند.
کد:
https://github.com/EngRajabi/Cache.Aspect
مقاله:
https://medium.com/@mohsen_rajabi/asp-core-automating-cache-with-aspect-programing-autofac-dynamic-proxy-8e6b84df44e4
@one_programmer
کش کردن اتوماتیک خروجی متد ها
حتما براتون پیش اومده که نیاز بوده خروجی متدی رو کش بکنید، وقتی اینکار رو کردید. داخل بیزینس متد تون کد کش کردن رو نوشتید. اینکار خیلی شاید درست نباشه که کش کردن کنار بیزینس متد نوشته باشه. و اینکه برای برای بقیه متد ها هم باید این کد رو کپی کنید.
راه حل اینکار استفاده از attribute ها هست. شما میتونید به روش aop خروجی هر متدی که نیاز دارید رو کش کنید. لینک repository که برای اینکار توسعه دادم رو میزارم. در این repo یک interceport تعریف شده که قبل از اجرا متد اجرا می شود. فقط متد هایی که به CacheMethod مزین شده باشند. کلید کش را با استفاده از اسم متد و ورودی ها ساخته و اتوماتیک کش میکند. مقادیر کش شده با استفاده از MessagePack ساخته شده و با lz4 فشرده شده است که حجم کش را بسیار کم میکند و خیلی سریع عمل میکند.
کد:
https://github.com/EngRajabi/Cache.Aspect
مقاله:
https://medium.com/@mohsen_rajabi/asp-core-automating-cache-with-aspect-programing-autofac-dynamic-proxy-8e6b84df44e4
@one_programmer
GitHub
GitHub - EngRajabi/Cache.Aspect: Asp Core Cache Aspect Programing (Autofac + Dynamic Proxy)
Asp Core Cache Aspect Programing (Autofac + Dynamic Proxy) - GitHub - EngRajabi/Cache.Aspect: Asp Core Cache Aspect Programing (Autofac + Dynamic Proxy)
@one_programmer
How in MediatR we can have events (Notifications) Async and completely real Parallel
https://medium.com/@mohsen_rajabi/how-in-mediatr-we-can-have-events-notifications-async-and-completely-real-parallel-2068f24912e6
@one_programmer
How in MediatR we can have events (Notifications) Async and completely real Parallel
https://medium.com/@mohsen_rajabi/how-in-mediatr-we-can-have-events-notifications-async-and-completely-real-parallel-2068f24912e6
@one_programmer
Medium
How in MediatR we can have events (Notifications) async and completely real Parallel
Update: 2024/08/30
@one_programmer
چکونه در سی شارپ Regex خیلی سریع بنویسیم
How to write a very fast regex in C #. Best Practice
https://medium.com/@mohsen_rajabi/how-to-write-a-regex-very-fast-in-c-best-practice-875d386c0485
@one_programmer
چکونه در سی شارپ Regex خیلی سریع بنویسیم
How to write a very fast regex in C #. Best Practice
https://medium.com/@mohsen_rajabi/how-to-write-a-regex-very-fast-in-c-best-practice-875d386c0485
@one_programmer
Medium
How to write a very fast regex in C#. Best Practice
C# Regex Best Practice
@one_programmer
سلام به دنیا Source Generator ها در Net. !!! 😊😊
قابلیت Source Generation تازه به .net اضافه شده. این قابلیت کمک میکنه توسعه دهنده ها در زمان Compile یکسری کد تولید کنن و در dll پروژه قرار بدن.
این مزیت اینکار چی هست
- میشه یه سری کد که در زمان اجرا تولید میشن رو به این شکل به زمان Compile آورد و پرفورمنس وحشتناکی رو تجربه کرد
- حذف refelection ها. میشه یه سری کار reflection که در زمان اجرا انجام میشن و کند هم هستند رو به زمان Compile اورد
ماکروسافت یکسری از فیچر های جدیدش رو با Source Generator نوشته. مثل system.text.json (التبه باید سنتکس خاصی ازش استفاده کنید)
حالا من یه پکیچ نوشتم با Source Generator برای کار با enum ها. حتما براتون پیش اومده که attribute داشته باشید بالا enum یا بخواهید tostring انجام بدید. این پکیچ همه اینکار ها رو زمان Compile براتون انجام میده و بازدهی بالا 20 برابر داره. اگر بخواهید attribute بالا enum ها رو واکشی کنید، این بازدهی به 480/000 هزار برابر میرسه. باور نکنید !!!
لینک پروژه و بنچمارک:
https://github.com/EngRajabi/Enum.Source.Generator
@one_programmer
سلام به دنیا Source Generator ها در Net. !!! 😊😊
قابلیت Source Generation تازه به .net اضافه شده. این قابلیت کمک میکنه توسعه دهنده ها در زمان Compile یکسری کد تولید کنن و در dll پروژه قرار بدن.
این مزیت اینکار چی هست
- میشه یه سری کد که در زمان اجرا تولید میشن رو به این شکل به زمان Compile آورد و پرفورمنس وحشتناکی رو تجربه کرد
- حذف refelection ها. میشه یه سری کار reflection که در زمان اجرا انجام میشن و کند هم هستند رو به زمان Compile اورد
ماکروسافت یکسری از فیچر های جدیدش رو با Source Generator نوشته. مثل system.text.json (التبه باید سنتکس خاصی ازش استفاده کنید)
حالا من یه پکیچ نوشتم با Source Generator برای کار با enum ها. حتما براتون پیش اومده که attribute داشته باشید بالا enum یا بخواهید tostring انجام بدید. این پکیچ همه اینکار ها رو زمان Compile براتون انجام میده و بازدهی بالا 20 برابر داره. اگر بخواهید attribute بالا enum ها رو واکشی کنید، این بازدهی به 480/000 هزار برابر میرسه. باور نکنید !!!
لینک پروژه و بنچمارک:
https://github.com/EngRajabi/Enum.Source.Generator
@one_programmer
@one_programmer
چگونه یک پروژه Net. با ساختار حرفه ایی را در سال 2023 شروع کنیم
در این مقاله در مورد این صحبت میکنیم که چطوری در سال 2023 میتونیم یک پروژه ی حرفه ایی و ساختار یافته رو شروع کنیم.
چگونه میتونیم اصول Clean Code رو در پروژه مون Automate کنیم ؟
چگونه میتونیم با ابزار ها کد های پیچیده رو تشخیص بدیم ؟
چگونه میتونیم در پروژه های بزرگ دست خط یکسان داشته باشیم ؟
ساختار استاندارد چیست ؟
ماکروسافت توی این زمینه چی میگه ؟
توسعه دهندگان ماکروسافت چی پیشنهاد میدن ؟
چه ابزار هایی برای Automate کردن ریویو کد و کمتر کردن باگ وجود داره ؟ آیا متریکی برای کد پیچیده وجود داره ؟
جواب همه سوال ها رو در مقاله زیر خلاصه کردم. امیدوارم مفید باشه.
مقاله: https://medium.com/@mohsen_rajabi/how-to-start-a-net-project-in-2023-96bdb615a98d
@one_programmer
چگونه یک پروژه Net. با ساختار حرفه ایی را در سال 2023 شروع کنیم
در این مقاله در مورد این صحبت میکنیم که چطوری در سال 2023 میتونیم یک پروژه ی حرفه ایی و ساختار یافته رو شروع کنیم.
چگونه میتونیم اصول Clean Code رو در پروژه مون Automate کنیم ؟
چگونه میتونیم با ابزار ها کد های پیچیده رو تشخیص بدیم ؟
چگونه میتونیم در پروژه های بزرگ دست خط یکسان داشته باشیم ؟
ساختار استاندارد چیست ؟
ماکروسافت توی این زمینه چی میگه ؟
توسعه دهندگان ماکروسافت چی پیشنهاد میدن ؟
چه ابزار هایی برای Automate کردن ریویو کد و کمتر کردن باگ وجود داره ؟ آیا متریکی برای کد پیچیده وجود داره ؟
جواب همه سوال ها رو در مقاله زیر خلاصه کردم. امیدوارم مفید باشه.
مقاله: https://medium.com/@mohsen_rajabi/how-to-start-a-net-project-in-2023-96bdb615a98d
@one_programmer
Medium
How to Start an Advanced .NET Project in 2024 Part I