✅ حرفه ای ترین سلوشن Logging در NETCore. با استفاده از Serilog و ElasticSearch و Kibana
#PerformanceTuning
کتابخانه های مختلفی برای لاگ کردن خطا ها در دات نت وجود داره، از جمله Elmah، NLog, Log4net و ...
کتابخانه Elmah بهترین انتخاب برای پروژه های کوچک و متوسطه، کار باهاش راحته و پنل ساده ای هم داره، ولی توی پروژه های بزرگ که تعداد لاگ ها خیلی زیاد میشه، دیگه Elmah جوابگو نیست، هم به خاطر سرعت کمش نسبت به بقیه کتابخانه ها و هم به خاطر پنل ضعیف اش که حتی یه سرچ هم نداره
در این شرایط راه های مختلفی هست مثل استفاده از سرویس های نگهداری لاگ Cloud-based مثل setry.io , elmah.io و ...
راه حل بعدی استفاده از برنامه های مدیریت لاگ مثل Seq هستند که بر خلاف مورد قبلی، یک سرویس خارجی نیست و روی سرور خودتون لاگ ها رو نگهداری میکنه و داشبورد قدرتمندی برای سرچ و کوئری گرفتن در اختیارتون میذاره (ولی پولیه)
🔰 راه حل حرفه ای تر و البته رایگان، استفاده از Serilog و ElasticSearch و Kibana هست
🔸دیتابیس ElasticSearch در واقع یک دیتابیس NoSql و یک Search Engine (موتور جستجو) سورس باز و فوق سریع (بر پایه Lucene) هست که قابلیت جستجو و کوئری زدن زدن (به صورت full text search) با سرعت و قدرت بالا رو داره از اون برای نگهداری لاگ ها استفاده خواهیم کرد
🔹پنل Kibana هم یه پلاگین داشبور سورس باز و قدرتمند با امکانات زیاد برای نمایش اطلاعات دیتابیس Elastic هست و از اون برای نمایش خطا ها و جستجو کردن و نمودار گرفتن استفاده می کنیم
🔸 کتابخانه Serilog هم میشه گفت بهترین کتابخانه Logging هست. نسبت به NLog جدید تره و طراحی مدرن تری داره و میزان رشد محبوبیتش هم بیشتره؛ پس میشه گفت از NLog هم بهتره (البته خیلی اختلاف ندارند)
این کتابخونه قابلیت های زیادی داره که به لطف پلاگین های زیادی که برای Serilog وجود داره (اصطلاحا بهش میگن Sinks) براش فراهم شده و از لحاظ پرفرمنسی هم از NLog سریع تره.
🔹 تنها نکته مهم، استفاده از روش Structred Logging نسبت به حالت معمولی است. شاید فکر کنید دو دستور زیر هیچ تفاوتی نمیکنه!
ولی عملکرد این دو یکسان نبوده و خط دوم که به صورت Structred هست اطلاعات را به صورت جداگانه ضبط و ثبت میکنه درنتیجه در کنار متن خطا، یک فیلد به نام username با مقدار Ali نیز ذخیره میکنه که کار جستجو و کوئری زدن رو راحت تر میکنه
مقالات آموزش این سلوشن :
https://bit.ly/2EAjpTh
https://bit.ly/2EBUYFc
https://bit.ly/2X7g1Xn
https://bit.ly/2Exvs3C
مخزن نمونه کد :
https://github.com/thecarlo/elastic-kibana-netcore-serilog
___________
@IranAspMvc
#PerformanceTuning
کتابخانه های مختلفی برای لاگ کردن خطا ها در دات نت وجود داره، از جمله Elmah، NLog, Log4net و ...
کتابخانه Elmah بهترین انتخاب برای پروژه های کوچک و متوسطه، کار باهاش راحته و پنل ساده ای هم داره، ولی توی پروژه های بزرگ که تعداد لاگ ها خیلی زیاد میشه، دیگه Elmah جوابگو نیست، هم به خاطر سرعت کمش نسبت به بقیه کتابخانه ها و هم به خاطر پنل ضعیف اش که حتی یه سرچ هم نداره
در این شرایط راه های مختلفی هست مثل استفاده از سرویس های نگهداری لاگ Cloud-based مثل setry.io , elmah.io و ...
راه حل بعدی استفاده از برنامه های مدیریت لاگ مثل Seq هستند که بر خلاف مورد قبلی، یک سرویس خارجی نیست و روی سرور خودتون لاگ ها رو نگهداری میکنه و داشبورد قدرتمندی برای سرچ و کوئری گرفتن در اختیارتون میذاره (ولی پولیه)
🔰 راه حل حرفه ای تر و البته رایگان، استفاده از Serilog و ElasticSearch و Kibana هست
🔸دیتابیس ElasticSearch در واقع یک دیتابیس NoSql و یک Search Engine (موتور جستجو) سورس باز و فوق سریع (بر پایه Lucene) هست که قابلیت جستجو و کوئری زدن زدن (به صورت full text search) با سرعت و قدرت بالا رو داره از اون برای نگهداری لاگ ها استفاده خواهیم کرد
🔹پنل Kibana هم یه پلاگین داشبور سورس باز و قدرتمند با امکانات زیاد برای نمایش اطلاعات دیتابیس Elastic هست و از اون برای نمایش خطا ها و جستجو کردن و نمودار گرفتن استفاده می کنیم
🔸 کتابخانه Serilog هم میشه گفت بهترین کتابخانه Logging هست. نسبت به NLog جدید تره و طراحی مدرن تری داره و میزان رشد محبوبیتش هم بیشتره؛ پس میشه گفت از NLog هم بهتره (البته خیلی اختلاف ندارند)
این کتابخونه قابلیت های زیادی داره که به لطف پلاگین های زیادی که برای Serilog وجود داره (اصطلاحا بهش میگن Sinks) براش فراهم شده و از لحاظ پرفرمنسی هم از NLog سریع تره.
🔹 تنها نکته مهم، استفاده از روش Structred Logging نسبت به حالت معمولی است. شاید فکر کنید دو دستور زیر هیچ تفاوتی نمیکنه!
logger.Debug("UserName is : Ali");
logger.Debug("UserName is : {username}", "Ali");
ولی عملکرد این دو یکسان نبوده و خط دوم که به صورت Structred هست اطلاعات را به صورت جداگانه ضبط و ثبت میکنه درنتیجه در کنار متن خطا، یک فیلد به نام username با مقدار Ali نیز ذخیره میکنه که کار جستجو و کوئری زدن رو راحت تر میکنه
مقالات آموزش این سلوشن :
https://bit.ly/2EAjpTh
https://bit.ly/2EBUYFc
https://bit.ly/2X7g1Xn
https://bit.ly/2Exvs3C
مخزن نمونه کد :
https://github.com/thecarlo/elastic-kibana-netcore-serilog
___________
@IranAspMvc
✅ این Mock یا Mocking چیه؟!!
#سوال_درخواستی
🔸 در واقع Mock کردن (Mocking) یک تکنیک تست نویسی است که در آن قسمتی از کد را با یک پیاده سازی دلخواه جایگزین میکنیم و از آن برای شبیه سازی یک عملیات واقعی استفاده میشه.
🔹 معمولا ماک کردن زمانی استفاده میشه که یک متد یا کلاس، وابستگی یا وابستگی هایی داره که توی تستمون تداخل ایجاد میکنه.
🔸 مثلا فرض کنید یک سرویسی رو میخواین تست کنین که داخلش از سرویس SmsSender استفاده شده (یعنی به سرویس SmsSender وابستگی داره)، درنتیجه هربار که اون تست رو انجام میدید یه SMS هم ارسال میکنه که خب لازم نیست
در این صورت میایم و سرویس SmsSender رو ماک میکنیم که دیگه Sms ارسال نکنه ولی true رو برگردونه (به این معنی که درست کار کرده)
🔹 این باعث میشه ما بتونیم عملکرد (functionality) همون متد رو تست کنیم به جای اینکه تست مون را درگیر و وابسته به عوامل ثالث (مثل ارسال SMS) کنیم
🔰حالا چه وقتایی معمولا ماک استفاده میشه؟
1️⃣ وابستگی ما در دسترس نباشه
مثلا سرویس شما قراره یه اطلاعاتی رو از وب سرویس بخونه، خب اگه اینترنت قط باشه، تا بالاترن سطح سرویس هامون که به این وابسته بوده fail میشه، پس میایم ماک اش میکنیم و میگیم با فرض اینکه وب سرویس در دسترسه و داره درست اطلاعات رو بر میگردونه، حالا برو ببینم خودت چند مرده حلاجی؟!
2️⃣ وابستگی ما کند باشه
مثلا یه تست برای انجام شدنش نیاز به یه کوئری به دیتابیس داره که 60 ثانیه زمان میبره، پس میایم و ادامه ماجرا ...
3️⃣ وابستگی ما باید توی تست رفتارش عوض بشه
مثل همین مثال سرویس SmsSender
4️⃣ و چندین سناریو دیگه ...
🔰 بهترین کتابخانه های Mocking در دات نت این ها هستند
1️⃣ Moq
2️⃣ NSubstitute
3️⃣ FakeItEasy
🔰حالا یه سوالی که پیش میاد اینه که این کتابخانه های Mocking چطوری کار میکنن؟!
اساس کار این ابزار ها به 2 صورت هست
1️⃣ بر اساس interface :
که عملا توی runtime، یک کلاس الکی درست میکنن که از interface شما ارث بری کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
2️⃣ بر اساس virtual :
در این روش متد هایی که میخواین قابل mock شدن باشن باید virtual تعریف بشن، در این صورت میاد و توی runtime یک کلاس ایجاد میکنه که از کلاس مورد نظر شما ارث بری کرده ولی متد های virtual اش رو override (بازنویسی) کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
___________
@IranAspMvc
#سوال_درخواستی
🔸 در واقع Mock کردن (Mocking) یک تکنیک تست نویسی است که در آن قسمتی از کد را با یک پیاده سازی دلخواه جایگزین میکنیم و از آن برای شبیه سازی یک عملیات واقعی استفاده میشه.
🔹 معمولا ماک کردن زمانی استفاده میشه که یک متد یا کلاس، وابستگی یا وابستگی هایی داره که توی تستمون تداخل ایجاد میکنه.
🔸 مثلا فرض کنید یک سرویسی رو میخواین تست کنین که داخلش از سرویس SmsSender استفاده شده (یعنی به سرویس SmsSender وابستگی داره)، درنتیجه هربار که اون تست رو انجام میدید یه SMS هم ارسال میکنه که خب لازم نیست
در این صورت میایم و سرویس SmsSender رو ماک میکنیم که دیگه Sms ارسال نکنه ولی true رو برگردونه (به این معنی که درست کار کرده)
🔹 این باعث میشه ما بتونیم عملکرد (functionality) همون متد رو تست کنیم به جای اینکه تست مون را درگیر و وابسته به عوامل ثالث (مثل ارسال SMS) کنیم
🔰حالا چه وقتایی معمولا ماک استفاده میشه؟
1️⃣ وابستگی ما در دسترس نباشه
مثلا سرویس شما قراره یه اطلاعاتی رو از وب سرویس بخونه، خب اگه اینترنت قط باشه، تا بالاترن سطح سرویس هامون که به این وابسته بوده fail میشه، پس میایم ماک اش میکنیم و میگیم با فرض اینکه وب سرویس در دسترسه و داره درست اطلاعات رو بر میگردونه، حالا برو ببینم خودت چند مرده حلاجی؟!
2️⃣ وابستگی ما کند باشه
مثلا یه تست برای انجام شدنش نیاز به یه کوئری به دیتابیس داره که 60 ثانیه زمان میبره، پس میایم و ادامه ماجرا ...
3️⃣ وابستگی ما باید توی تست رفتارش عوض بشه
مثل همین مثال سرویس SmsSender
4️⃣ و چندین سناریو دیگه ...
🔰 بهترین کتابخانه های Mocking در دات نت این ها هستند
1️⃣ Moq
2️⃣ NSubstitute
3️⃣ FakeItEasy
🔰حالا یه سوالی که پیش میاد اینه که این کتابخانه های Mocking چطوری کار میکنن؟!
اساس کار این ابزار ها به 2 صورت هست
1️⃣ بر اساس interface :
که عملا توی runtime، یک کلاس الکی درست میکنن که از interface شما ارث بری کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
2️⃣ بر اساس virtual :
در این روش متد هایی که میخواین قابل mock شدن باشن باید virtual تعریف بشن، در این صورت میاد و توی runtime یک کلاس ایجاد میکنه که از کلاس مورد نظر شما ارث بری کرده ولی متد های virtual اش رو override (بازنویسی) کرده و بهتون اجازه میده که پیاده سازی متد هاش رو تغییر بدین
___________
@IranAspMvc
❇️ معرفی برترین کتابخانه های Task Scheduling (انجام کار های پس زمینه) در دات نت
برای این کار راه های مختلفی هست
1️⃣ کلاس Generic Host و BackgrounService :
در ساده ترین حالت توسط قابلیت های تو کار خود ASP Core میتونین اینکارو انجام بدین
https://www.dotnettips.info/post/2997
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.2
2️⃣ کتابخانه Coravel :
مزیت این کتابخانه اینه که DI رو به صورت داخلی ساپورت میکنه (بر خلاف FluentScheduler) [گزینه مورد علاقه خودم - ساده و سبک ولی مدرن]
https://github.com/jamesmh/coravel
https://docs.coravel.net
3️⃣ کتابخانه FluentScheduler
https://github.com/fluentscheduler/FluentScheduler
4️⃣ کتابخانه Hangfire :
بهترین گزینه برای پروژه های بزرگ (خیلی حرفه ای و full-feature هست)
یک پنل داشبوری برای نمایش لیست کار های زمان بندی شده به همراه وضعیتشون بهتون میده که میتونین تسک ها رو غیر فعال کنین یا گزارش ازشون بگیرین و...
https://www.hangfire.io/
https://github.com/HangfireIO/Hangfire
5️⃣ کتابخانه DNTScheduler.Core :
نویسنده این کتابخانه وحید نصیری عزیز هستش
https://github.com/VahidN/DNTScheduler.Core
https://www.dotnettips.info/post/1736
6️⃣کتابخانه Quartz.Net :
این کتابخانه port شده از معادل جاواییش هست و code quality خوبی نداره و طراحیش هم مدرن نیست (کلا پیشنهاد نمیکنم تا گزینه های بهتری هست)
http://www.quartz-scheduler.net/
https://github.com/quartznet/quartznet
✅ همه این کتابخانه ها از Cron پشتیبانی میکنن
در واقع Cron یه سینتکس دستوری واسه زمان بندی کار ها هست که قوائد خاص خودش رو داره (اسامی CronTab و CronJob هم از همین خانوادس)
مثلا برای اینکه یه تسک هر ۱۵ دقیقه یک بار انجام بشه، دستور Cron اش میشه
توی سایت زیر که یک محیط تعاملی برای نوشتن دستور Cron هست میتونین با قوائد و مثال هاش بیشتر آشنا بشین
https://crontab.guru/#*/15_*_*_*_*
____________
@IranAspMvc
برای این کار راه های مختلفی هست
1️⃣ کلاس Generic Host و BackgrounService :
در ساده ترین حالت توسط قابلیت های تو کار خود ASP Core میتونین اینکارو انجام بدین
https://www.dotnettips.info/post/2997
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.2
2️⃣ کتابخانه Coravel :
مزیت این کتابخانه اینه که DI رو به صورت داخلی ساپورت میکنه (بر خلاف FluentScheduler) [گزینه مورد علاقه خودم - ساده و سبک ولی مدرن]
https://github.com/jamesmh/coravel
https://docs.coravel.net
3️⃣ کتابخانه FluentScheduler
https://github.com/fluentscheduler/FluentScheduler
4️⃣ کتابخانه Hangfire :
بهترین گزینه برای پروژه های بزرگ (خیلی حرفه ای و full-feature هست)
یک پنل داشبوری برای نمایش لیست کار های زمان بندی شده به همراه وضعیتشون بهتون میده که میتونین تسک ها رو غیر فعال کنین یا گزارش ازشون بگیرین و...
https://www.hangfire.io/
https://github.com/HangfireIO/Hangfire
5️⃣ کتابخانه DNTScheduler.Core :
نویسنده این کتابخانه وحید نصیری عزیز هستش
https://github.com/VahidN/DNTScheduler.Core
https://www.dotnettips.info/post/1736
6️⃣کتابخانه Quartz.Net :
این کتابخانه port شده از معادل جاواییش هست و code quality خوبی نداره و طراحیش هم مدرن نیست (کلا پیشنهاد نمیکنم تا گزینه های بهتری هست)
http://www.quartz-scheduler.net/
https://github.com/quartznet/quartznet
✅ همه این کتابخانه ها از Cron پشتیبانی میکنن
در واقع Cron یه سینتکس دستوری واسه زمان بندی کار ها هست که قوائد خاص خودش رو داره (اسامی CronTab و CronJob هم از همین خانوادس)
مثلا برای اینکه یه تسک هر ۱۵ دقیقه یک بار انجام بشه، دستور Cron اش میشه
*/15 * * * *
توی سایت زیر که یک محیط تعاملی برای نوشتن دستور Cron هست میتونین با قوائد و مثال هاش بیشتر آشنا بشین
https://crontab.guru/#*/15_*_*_*_*
____________
@IranAspMvc
❇️ آموزش استفاده از Container در NET Core. (زبان اصلی زیر نویس دار)
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[00:44] - What are some of advantages of containers?
[01:14] - How do containers compare to other hosting options?
[04:14] - Demo of Visual Studio tooling for containers
[07:06] - Deploying your container to Azure
Useful Links
Azure Container Service (AKS)
Azure Container Registry
.NET Core Docker container images
ASP.NET Core Docker container images
Create a Free Account (Azure)
_____________
@IranAspMvc
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[00:44] - What are some of advantages of containers?
[01:14] - How do containers compare to other hosting options?
[04:14] - Demo of Visual Studio tooling for containers
[07:06] - Deploying your container to Azure
Useful Links
Azure Container Service (AKS)
Azure Container Registry
.NET Core Docker container images
ASP.NET Core Docker container images
Create a Free Account (Azure)
_____________
@IranAspMvc
Docs
.NET Core and Containers
On this episode of On.NET, Microsoft Cloud Developer Advocate, Jeremy Likness, is joined by Microsoft Most Valuable Professional (MVP), Josh Lane, to discuss .NET Core and Containers. Josh and Jeremy discuss what containers are and how they fit into modern…
Forwarded from Software Philosophy
زمانبندی کردن یک background task در Andriod با Xamarin
ساخت یک schedule که defferable باشد و به صورت aynchronous اجرا شود و از همه مهمتر روی تمامی نسخههای اندروید مخصوصا نسخههای قدیمی قابل اجرا باشد چالش برانگیز است. در API 23+ میتوان از Job Scheduler استفاده کرد، در صورتی که برای API های قدیمیتر تا API 14 باید از Alarm Manager + Broadcast Recievers استفاده کرد.
کتابخانه WorkManager که در مقاله زیر معرفی شدهاست، تمامی این پیچیدگیها را درون خود هندل کرده و به برنامهنویس اجازه میدهد به سادگی کارهای Scheduled و Periodic را روی پلتفرم اندروید پیاده سازی کند.
https://devblogs.microsoft.com/xamarin/getting-started-workmanager/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:
http://bit.ly/2IdtcQ7
#مهران_داودی (http://ow.ly/GwIl309lFEm)
کانال تلگرام:
@SoftwarePhilosophy
___
ساخت یک schedule که defferable باشد و به صورت aynchronous اجرا شود و از همه مهمتر روی تمامی نسخههای اندروید مخصوصا نسخههای قدیمی قابل اجرا باشد چالش برانگیز است. در API 23+ میتوان از Job Scheduler استفاده کرد، در صورتی که برای API های قدیمیتر تا API 14 باید از Alarm Manager + Broadcast Recievers استفاده کرد.
کتابخانه WorkManager که در مقاله زیر معرفی شدهاست، تمامی این پیچیدگیها را درون خود هندل کرده و به برنامهنویس اجازه میدهد به سادگی کارهای Scheduled و Periodic را روی پلتفرم اندروید پیاده سازی کند.
https://devblogs.microsoft.com/xamarin/getting-started-workmanager/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:
http://bit.ly/2IdtcQ7
#مهران_داودی (http://ow.ly/GwIl309lFEm)
کانال تلگرام:
@SoftwarePhilosophy
___
Microsoft News
Getting Started With WorkManager
WorkManager is a library that makes it easy to schedule deferrable, asynchronous tasks even if the app exits or the device restarts.
❇️ آموزش عیب یابی و رفع مشکلات Performance ایی برنامه های ASP.NET Core (زبان اصلی زیر نویس دار)
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[04:10] - Introducing the demo
[06:03] - Performance Diagnostic tools
[08:37] - Collecting performance data with PerfCollect
[16:24] - Inspecting performance data with PerfView
[25:30] - Common ASP.NET Core Performance Issue
[28:49] - ASP.NET Core Performance Best Practices
Useful Links
PerfView
PerfCollect
ASP.NET Core performance best practices
________________
@IranAspMvc
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[04:10] - Introducing the demo
[06:03] - Performance Diagnostic tools
[08:37] - Collecting performance data with PerfCollect
[16:24] - Inspecting performance data with PerfView
[25:30] - Common ASP.NET Core Performance Issue
[28:49] - ASP.NET Core Performance Best Practices
Useful Links
PerfView
PerfCollect
ASP.NET Core performance best practices
________________
@IranAspMvc
Docs
Diagnosing ASP.NET Core performance issues
In the episode, Mike Rousos shows us how we can use tools like PerfView and PerfCollect to diagnose performance problems in ASP.NET Core applications. He discusses how we can use the tools for performance analysis on both Linux and Windows servers. Also,…
Forwarded from Software Philosophy
چگونه فکر کنیم؟ چگونه دور از هم با هم فکر کنیم!!
فکر کردن، و مخصوصا با هم فکر کردن یکی از کارهای سختی است که معمولا ترجیح میدهیم آن را انجام ندهیم.
معمولا خیلی سخت است که در یک جمع فکر کنیم و به نظرمان همه چیز درست پیش برود! این کار خیلی خیلی سختتر میشود اگر کل تیم شما «ریموت» است و باید «دور از هم با هم فکر کنید»!!!
امروز در INOTEX 2019 مهران داودی توضیح میدهد که چگونه یکی از مفاهیم جذاب Design Thinking میتواند کمک کند بسیار کارآمدتر با هم فکر کنیم.
زمان و مکان:
امروز ساعت ۱۶:۴۰ نمایشگاه بینالمللی، سالن ۴۰
www.inotex.com
فکر کردن، و مخصوصا با هم فکر کردن یکی از کارهای سختی است که معمولا ترجیح میدهیم آن را انجام ندهیم.
معمولا خیلی سخت است که در یک جمع فکر کنیم و به نظرمان همه چیز درست پیش برود! این کار خیلی خیلی سختتر میشود اگر کل تیم شما «ریموت» است و باید «دور از هم با هم فکر کنید»!!!
امروز در INOTEX 2019 مهران داودی توضیح میدهد که چگونه یکی از مفاهیم جذاب Design Thinking میتواند کمک کند بسیار کارآمدتر با هم فکر کنیم.
زمان و مکان:
امروز ساعت ۱۶:۴۰ نمایشگاه بینالمللی، سالن ۴۰
www.inotex.com
❇️ #ویدئو آموزش معماری Microservice در ASP.NET Core (زبان اصلی زیر نویس دار)
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[01:06] - Introducing the .NET application architecture website
[05:23] - Running the reference application
[06:33] - Understanding the target audience
[07:35] - Testing strategy
[09:11] - Exploring the technology stack
[13:25] - Managing the weight of the API gateway
[16:35] - Adopting the guidance
[21:33] - Communication patterns between microservices
[22:36] - Modeling challenges with microservices
[26:14] - Getting help with the reference application
Useful Links
GitHub repository for eShopOnContainers
.NET Microservices - Architecture e-book
.NET Application Architecture Guidance
____________
@IranAspMvc
======================
Implement microservices patterns with .NET Core and Docker containers
https://channel9.msdn.com/events/Ignite/Microsoft-Ignite-Orlando-2017/BRK3317
از پایین ویدئو گزینه [Subnoscript/captions] میتوانید زیرنویس آن را فعال کنید
[01:06] - Introducing the .NET application architecture website
[05:23] - Running the reference application
[06:33] - Understanding the target audience
[07:35] - Testing strategy
[09:11] - Exploring the technology stack
[13:25] - Managing the weight of the API gateway
[16:35] - Adopting the guidance
[21:33] - Communication patterns between microservices
[22:36] - Modeling challenges with microservices
[26:14] - Getting help with the reference application
Useful Links
GitHub repository for eShopOnContainers
.NET Microservices - Architecture e-book
.NET Application Architecture Guidance
____________
@IranAspMvc
======================
Implement microservices patterns with .NET Core and Docker containers
https://channel9.msdn.com/events/Ignite/Microsoft-Ignite-Orlando-2017/BRK3317
Docs
Microservice Architecture with ASP.NET Core
Having a solid architecture is an essential piece for ensuring the longevity of your software.In this episode Cesar De la Torre Llorente (@cesardelatorre) comes on the show to talk about ASP.NET Core application architecture for microservices and containers.[01:06]…
✅ مقایسه پرفرمنس gRPC و REST
طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن
ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :
🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه
🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه
🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره
🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین
🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه
لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@IranAspMvc
طبق این بنچمارک میتونین ببینین که توی درخواست های سبک ( مثل یه GET ساده با دیتای کم حجم) gRPC و REST تفاوتی خاصی با هم ندارن
ولی توی درخواست های سنگین (که حجم دیتای انتقالی زیاد باشه) :
🔸توی حالت GET (دریافت اطلاعات) gRPC بیش از 7 برابر سریع تر از REST عمل میکنه
🔹وتوی حالت POST (ارسال اطلاعات) gRPC بیش از 11 برابر سریع تر از REST عمل میکنه
🔸دلیل اصلی این سرعت بسیار بالا اینه که gRPC از Protocol Buffers برای سریالایز و فشرده سازی اطلاعات استفاده میکنه و نیز به صورت پیشفرض از HTTP/2 و استفاده میکنه که اون هم یه مکانیزم فشرده سازی داره
🔹برای کار با gRPC در حالت عادی باید از CLI مخصوص اون "protoc" برای کامپایل و تولید کلاس های سرویس از روی فایل های "proto." استفاده کنید. ولی با Visual Studio میتونین همین کار رو کامپایلر built-in اش راحت تر انجام بدین
🔸جمع بندی اینکه gRPC میتونه گزینه بسیار خوبی برای ارتباطات بیین Micro-service ها باشه
لینک مقاله و ریپازیتوری گیتهاب این بنچمارک
Evaluating Performance of REST vs. gRPC
Github Repository
________________
@IranAspMvc
✅ نسخه Preview 6 فریمورک های NET Core 3.0. و EF Core و ASP.NET Core منتشر شدند
به زودی تغییرات شون رو بررسی خواهیم کرد✌️
🔰 این نسخه از ASP Core بهبود های زیادی در مورد Blazor و Razor و gRPC و SignalR داشته و قابلیت های جدیدی رو اضافه کرده که بعدا مفصل بررسیشون میکنیم
https://devblogs.microsoft.com/aspnet/asp-net-core-and-blazor-updates-in-net-core-3-0-preview-6/
🔰 این نسخه از EF Core تغییرات پایه ای بسیاری داشته چون ظاهرا تیم EF دارن پیاده سازی جدیدی از LINQ رو برای EF 6 و EF Core تهیه میکنن تا هم یکپارچه بشن این 2تا و هم کارایشون بهبود پیدا کنه ولی الان هنوز کامل نشده و محدودیت ها و نواقض زیادی داره و اصلا پایدار نیست
https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-3-0-preview-6-and-entity-framework-6-3-preview-6/
🔰 این نسخه از NET Core.بیشتر شامل بهبود های پرفرمنسی بوده بعلاوه کمی فیچر؛ در حال حاضر تیم NET Core. تقریبا تمام فیچر هایی که برای نسخه 3.0 پلن کرده بودند تکمیل شده و اعلام کردند که از این به بعد تمرکزشون رو روی افزایش کیفیت ریلیز ها و رفع باگ های گزارش شده خواهند گذاشت
در ضمن پیشنمایش بعدی یعنی 7 قراره که ماه آینده میلادی (جولای) منتشر بشه
https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-6/
لینک دانلود SKD و Runtime نسخه Preview 6
https://aka.ms/netcore3download
___________
@IranAspMvc
به زودی تغییرات شون رو بررسی خواهیم کرد✌️
🔰 این نسخه از ASP Core بهبود های زیادی در مورد Blazor و Razor و gRPC و SignalR داشته و قابلیت های جدیدی رو اضافه کرده که بعدا مفصل بررسیشون میکنیم
https://devblogs.microsoft.com/aspnet/asp-net-core-and-blazor-updates-in-net-core-3-0-preview-6/
🔰 این نسخه از EF Core تغییرات پایه ای بسیاری داشته چون ظاهرا تیم EF دارن پیاده سازی جدیدی از LINQ رو برای EF 6 و EF Core تهیه میکنن تا هم یکپارچه بشن این 2تا و هم کارایشون بهبود پیدا کنه ولی الان هنوز کامل نشده و محدودیت ها و نواقض زیادی داره و اصلا پایدار نیست
https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-3-0-preview-6-and-entity-framework-6-3-preview-6/
🔰 این نسخه از NET Core.بیشتر شامل بهبود های پرفرمنسی بوده بعلاوه کمی فیچر؛ در حال حاضر تیم NET Core. تقریبا تمام فیچر هایی که برای نسخه 3.0 پلن کرده بودند تکمیل شده و اعلام کردند که از این به بعد تمرکزشون رو روی افزایش کیفیت ریلیز ها و رفع باگ های گزارش شده خواهند گذاشت
در ضمن پیشنمایش بعدی یعنی 7 قراره که ماه آینده میلادی (جولای) منتشر بشه
https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-6/
لینک دانلود SKD و Runtime نسخه Preview 6
https://aka.ms/netcore3download
___________
@IranAspMvc
.NET Blog
ASP.NET Core and Blazor updates in .NET Core 3.0 Preview 6
.NET Core 3.0 Preview 6 is now available and includes a bunch of new updates to ASP.NET Core and Blazor. Find out what's new in this latest preview release.
Forwarded from کدهک
در آخرین نسخه از پیش نمایش NET Core 3.0 وابستگی به کتابخانه ی JSON.NET حذف شده است و بجای آن از کتابخانه ی جدید System.Text.Json استفاده میشود.
کتابخانه ی Newton.Json سالهاست که برای پردازش اطلاعات JSON در دات نت مورد استفاده قرار میگیرد اما توسط تیمی خارج از مایکروسافت و به صورت متن باز توسعه داده میشود. چند ماه قبل این محصول زیر پرچم NET Foundation آمد و توسط مایکروسافت حمایت و پشتیبانی میشد اما در نسخه ی جدید قرار است به طور کلی از فریم ورک ASP NET Core حذف شود. این تصمیم در راستای یکپارچه کردن محیط ASP NET گرفته شده است. و قرار است تمام کتابخانه های Third-party این فریم ورک جایگزین یا حذف شوند.
کتابخانه ی جدید JSON در حدود 1.3 تا 5 برابر سریعتر عمل میکند.
در این مرحله هدف مایکروسافت این است که یک کتابخانه ی سبک و سریع برای کار با JSON در اختیار توسعه دهندگان قرار دهد و هنوز همه ی امکانات کتابخانه ی قدیمی در نسخه ی جدید پیاده نشده است. به همین دلیل امکان بازگشت به JSON NET از طریق اضافه کردن رفرنس و تزریق سرویس وجود دارد.
کتابخانه ی Newton.Json سالهاست که برای پردازش اطلاعات JSON در دات نت مورد استفاده قرار میگیرد اما توسط تیمی خارج از مایکروسافت و به صورت متن باز توسعه داده میشود. چند ماه قبل این محصول زیر پرچم NET Foundation آمد و توسط مایکروسافت حمایت و پشتیبانی میشد اما در نسخه ی جدید قرار است به طور کلی از فریم ورک ASP NET Core حذف شود. این تصمیم در راستای یکپارچه کردن محیط ASP NET گرفته شده است. و قرار است تمام کتابخانه های Third-party این فریم ورک جایگزین یا حذف شوند.
کتابخانه ی جدید JSON در حدود 1.3 تا 5 برابر سریعتر عمل میکند.
در این مرحله هدف مایکروسافت این است که یک کتابخانه ی سبک و سریع برای کار با JSON در اختیار توسعه دهندگان قرار دهد و هنوز همه ی امکانات کتابخانه ی قدیمی در نسخه ی جدید پیاده نشده است. به همین دلیل امکان بازگشت به JSON NET از طریق اضافه کردن رفرنس و تزریق سرویس وجود دارد.
❇️ چند مقاله خوب در مورد gRPC
🔰قبلا در مورد gRPC پست مفصلی گذاشتم. این روزا هم بحث gRPC خیلی ترند شده مخصوصا حالا که NET Core 3.0. هم داره حسابی ازش پشتیبانی میکنه و فیچر براش میده
پس اگه به این مبحث علاقه مندین، منابع زیر میتونه شروع خوبی باشه براتون
🔸 آشنایی اولیه با gRPC
------------------
🔹 Creating your first gRPC .NET Core Client and Server App using Visual Studio or Visual Studio Code
👆 Github Repository
------------------
🔹 ASP.NET Core and gRPC
🔸 Working with gRPC in ASP.NET Core
🔹 Dissecting a Client-Server Application built with .NET Core 3 Preview 1 and gRPC
🔸 C# and gRPC Part One
------------------
🔹 Security Experiments with gRPC and ASP.NET Core 3.0
🔸 Running Razor Pages and A gRPC Service in a Single ASP.NET Core Application
🔹 gRPC Bi-Directional Streaming With Razor Pages And A Hosted Service gRPC Client
👆 Github Repository
------------------
🔹 An Early Look at gRPC and ASP.NET Core 3.0 (Creating an ASP.NET Core 3.0 gRPC Client and Server)
👆 Github Repository
________________
@IranAspMvc
🔰قبلا در مورد gRPC پست مفصلی گذاشتم. این روزا هم بحث gRPC خیلی ترند شده مخصوصا حالا که NET Core 3.0. هم داره حسابی ازش پشتیبانی میکنه و فیچر براش میده
پس اگه به این مبحث علاقه مندین، منابع زیر میتونه شروع خوبی باشه براتون
🔸 آشنایی اولیه با gRPC
------------------
🔹 Creating your first gRPC .NET Core Client and Server App using Visual Studio or Visual Studio Code
👆 Github Repository
------------------
🔹 ASP.NET Core and gRPC
🔸 Working with gRPC in ASP.NET Core
🔹 Dissecting a Client-Server Application built with .NET Core 3 Preview 1 and gRPC
🔸 C# and gRPC Part One
------------------
🔹 Security Experiments with gRPC and ASP.NET Core 3.0
🔸 Running Razor Pages and A gRPC Service in a Single ASP.NET Core Application
🔹 gRPC Bi-Directional Streaming With Razor Pages And A Hosted Service gRPC Client
👆 Github Repository
------------------
🔹 An Early Look at gRPC and ASP.NET Core 3.0 (Creating an ASP.NET Core 3.0 gRPC Client and Server)
👆 Github Repository
________________
@IranAspMvc
Medium
Creating your first gRPC .NET Core Client and Server App using Visual Studio or Visual Studio Code
This is a quick setup guide for creating and running .NET core apps that use the gRPC framework for communication. This guide includes the…
❇️ اگه میخواین مفهوم Hash و Salt رو درک کنین
فیلم زیر از جادی خیلی باحال توضیحش میده
🔰 نقل قول از جادی :
"به نظر من، هشها از قشنگیهای دنیای کامپیوتر و برنامه نویسی. فانکشنهایی که میتونن اطلاعات رو به ترکیبی از بیت های دیگه با طول ثابت تبدیل کنن و نتیجه شون هم همیشه برای ورودی ثابت، ثابته. این ایده درخشان منتیج به نتایج خیلی جالبی هم شده. مثلا فرض کنین می خواین بدونین آیا فایلی که دانلود کردین سالمه یا نه. یا می خواین کلی دیتا رو جایی بریزین و سریع پیداشون کنین. یا از اون جالبتر، می خواین به یکی پشت تلفن بگین «یه عدد در نظر بگیر» و بعد عدد رو حدس بزنین و مطمئن باشین که تقلبی نمی تونه اتفاق بیافته یا حتی رمزارز بسازین. همه اینجاها، هش کار گشا است فهمیدنش برای یک برنامه نویس خوب واجبه. "
1️⃣ https://www.aparat.com/v/1YjmV/
2️⃣ https://www.aparat.com/v/PmYpu/
3️⃣ https://www.aparat.com/v/Yg02q/
________________
@IranAspMvc
فیلم زیر از جادی خیلی باحال توضیحش میده
🔰 نقل قول از جادی :
"به نظر من، هشها از قشنگیهای دنیای کامپیوتر و برنامه نویسی. فانکشنهایی که میتونن اطلاعات رو به ترکیبی از بیت های دیگه با طول ثابت تبدیل کنن و نتیجه شون هم همیشه برای ورودی ثابت، ثابته. این ایده درخشان منتیج به نتایج خیلی جالبی هم شده. مثلا فرض کنین می خواین بدونین آیا فایلی که دانلود کردین سالمه یا نه. یا می خواین کلی دیتا رو جایی بریزین و سریع پیداشون کنین. یا از اون جالبتر، می خواین به یکی پشت تلفن بگین «یه عدد در نظر بگیر» و بعد عدد رو حدس بزنین و مطمئن باشین که تقلبی نمی تونه اتفاق بیافته یا حتی رمزارز بسازین. همه اینجاها، هش کار گشا است فهمیدنش برای یک برنامه نویس خوب واجبه. "
1️⃣ https://www.aparat.com/v/1YjmV/
2️⃣ https://www.aparat.com/v/PmYpu/
3️⃣ https://www.aparat.com/v/Yg02q/
________________
@IranAspMvc
آپارات - سرویس اشتراک ویدیو
هش (یک از سه) - درک مفهوم
هش ها مفهوم مهمی در برنامه نویسی هستن و منم دوستشون دارم. پس بیاین معرفی شون کنیم، بگیم چی هستن و به چه دردی می خورن.
✅ افزایش امنیت JWT توسط Refresh Token در ASP NET Core
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
_____________
@IranAspMvc
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
_____________
@IranAspMvc
Forwarded from کدهک
در واقع LLVM مجموعه ای از ماژولها و ابزار است که عملیات کامپایل کردن سورس کد به زبان ماشین را آسان میکند.
این پروژه در سال 2000 به عنوان یک تحقیق دانشجویی شروع شد و اکنون به عنوان ابزار اصلی بسیاری از زبانهای برنامه نویسی مورد استفاده قرار میگیرد. سازنده ی اصلی آن آقای کریس لتنر حالا در استخدام اپل است و روی زبانهای برنامه نویسی این شرکت کار میکند.
در گذشته وقتی میخواستید یک زبان برنامه نویسی جدید بسازید باید همه ی فرآیند خوانش کد و تبدیل آن به زبان ماشین را خودتان پیاده میکردید. مشکل این است که پردازنده های سخت افزاری متعددی در بازار وجود دارد و ساز و کار x86 با ARM و PowerPC و ... متفاوت است.
شما باید کامپایلری بسازید که قادر باشد از روی سورس برنامه نوشته شده توسط برنامه نویس کد ماشین برای انواع پردازنده تولید کند. در غیر این صورت عملا محدودیت های زیادی در استفاده از زبان برنامه نویسی بوجود می آید.
این مشکلی است که LLVM به خوبی حل می کند. LLVM مجموعه ای از ابزار با API های ماژولار در اختیار شما قرار میدهد تا بتوانید سورس کد را به زبانی میانی یا Intermediate Representation تبدیل کنید. فقط کافی است کدهای مربوط به Front-End را بنویسید و به LLVM ارسال کنید.
این Front-End ارتباطی با جاوا اسکریپت ندارد! بلکه بخشی از کامپایلر است که وظیفه ی Parse کردن و تشخیص خطاهای Syntax را به عهده دارد. بعد از اینکه کد شما به IR تبدیل شد LLVM می تواند آن را برای انواع مختلف سخت افزار آماده کند و کد ماشین مورد نیاز را تولید کند.
ابزار LLVM کمک کرده فرآیند طراحی زبان های برنامه نویسی جدید آسانتر شود و در نتیجه زبانهایی مثل Kotlin و Rust و Swift در کوتاهترین زمان جای خود را بین برنامه نویسان باز کرده اند.
این پروژه در سال 2000 به عنوان یک تحقیق دانشجویی شروع شد و اکنون به عنوان ابزار اصلی بسیاری از زبانهای برنامه نویسی مورد استفاده قرار میگیرد. سازنده ی اصلی آن آقای کریس لتنر حالا در استخدام اپل است و روی زبانهای برنامه نویسی این شرکت کار میکند.
در گذشته وقتی میخواستید یک زبان برنامه نویسی جدید بسازید باید همه ی فرآیند خوانش کد و تبدیل آن به زبان ماشین را خودتان پیاده میکردید. مشکل این است که پردازنده های سخت افزاری متعددی در بازار وجود دارد و ساز و کار x86 با ARM و PowerPC و ... متفاوت است.
شما باید کامپایلری بسازید که قادر باشد از روی سورس برنامه نوشته شده توسط برنامه نویس کد ماشین برای انواع پردازنده تولید کند. در غیر این صورت عملا محدودیت های زیادی در استفاده از زبان برنامه نویسی بوجود می آید.
این مشکلی است که LLVM به خوبی حل می کند. LLVM مجموعه ای از ابزار با API های ماژولار در اختیار شما قرار میدهد تا بتوانید سورس کد را به زبانی میانی یا Intermediate Representation تبدیل کنید. فقط کافی است کدهای مربوط به Front-End را بنویسید و به LLVM ارسال کنید.
این Front-End ارتباطی با جاوا اسکریپت ندارد! بلکه بخشی از کامپایلر است که وظیفه ی Parse کردن و تشخیص خطاهای Syntax را به عهده دارد. بعد از اینکه کد شما به IR تبدیل شد LLVM می تواند آن را برای انواع مختلف سخت افزار آماده کند و کد ماشین مورد نیاز را تولید کند.
ابزار LLVM کمک کرده فرآیند طراحی زبان های برنامه نویسی جدید آسانتر شود و در نتیجه زبانهایی مثل Kotlin و Rust و Swift در کوتاهترین زمان جای خود را بین برنامه نویسان باز کرده اند.
ازین پس فقط از طریق خود کانال میتونین عضو گروه بشین (به جهت جلوگیری از ربات های اسپمر)
کافیه وارد کانال بشین و پایین صفحه روی دکمه Discuss بزنید
لینک کانال :
@IranAspMvc
اگه این گزینه رو مشاهده نمیکنین با اپدیت کردن تلگرامتون مشکل برطرف میشه
کافیه وارد کانال بشین و پایین صفحه روی دکمه Discuss بزنید
لینک کانال :
@IranAspMvc
اگه این گزینه رو مشاهده نمیکنین با اپدیت کردن تلگرامتون مشکل برطرف میشه
محصولی مانند BMW واقعا چگونه در ذهن ما به عنوان یک محصول با کیفیت شکل گرفته است؟ آیا ما تخصص بررسی عملکرد موتور و گیربکس آن را داریم؟ آیا مقایسهای فنی روی آن انجام دادهایم تا بفهمیم ماشین BMW یک محصول با کیفیت است؟
در حقیقت یک محصول را مفهومی به نام «نقاط تماس» یا Touch Points تعریف میکند. نقاط تماس مجموعه لحظاتی است که مشتری محصول را تجربه میکند. یک نقطه تماس میتواند لحظاتی باشد که مشتری با آن کار میکند، یا لحظاتی که مشتری پوستر محصول را میبیند و یا زمانی که صدای تیم پشتیبانی شما را از پشت تلفن میشوند.
ما برنامه نویسها عادت کردیم برنامه بنویسیم! و البته دوست داریم مشتریان برای این عادت ما ارزش قائل شوند و برای آن پول پرداخت کنند. اما حقیقت این است که مشتریان چیزی از زیبایی معماری نرمافزار ما نمیبینند همانطور که چیزی از جزئیات گیربکس یک BMW نمیدانند.
در حقیقت بهترین معماری و برنامهنویسی زمانی اتفاق میافتد که آنقدر همه چیز درست کار کند که مشتری اصلا نفهمد برنامه نویسی انجام شده، همانطور که یک گیربکس عالی گیربکسی است که مشتری هیچوقت متوجه وجودش نشود و فقط مطمئن باشد که دنده به درستی عمل میکند.
بنابر این در اکثر مواقع توضیح اینکه برنامه چقدر خوب نوشته شده ارزشی برای مشتریان ندارد.
مقاله زیر به طور خلاصه مفهوم Touch Point و نقش آن در تعریف محصولات نرمافزاری را شرح دادهاست.
http://mehrandvd.me/2016/10/02/touch-point-real-percepction-product/
#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd
کانال تلگرام:
@SoftwarePhilosophy
___
در حقیقت یک محصول را مفهومی به نام «نقاط تماس» یا Touch Points تعریف میکند. نقاط تماس مجموعه لحظاتی است که مشتری محصول را تجربه میکند. یک نقطه تماس میتواند لحظاتی باشد که مشتری با آن کار میکند، یا لحظاتی که مشتری پوستر محصول را میبیند و یا زمانی که صدای تیم پشتیبانی شما را از پشت تلفن میشوند.
ما برنامه نویسها عادت کردیم برنامه بنویسیم! و البته دوست داریم مشتریان برای این عادت ما ارزش قائل شوند و برای آن پول پرداخت کنند. اما حقیقت این است که مشتریان چیزی از زیبایی معماری نرمافزار ما نمیبینند همانطور که چیزی از جزئیات گیربکس یک BMW نمیدانند.
در حقیقت بهترین معماری و برنامهنویسی زمانی اتفاق میافتد که آنقدر همه چیز درست کار کند که مشتری اصلا نفهمد برنامه نویسی انجام شده، همانطور که یک گیربکس عالی گیربکسی است که مشتری هیچوقت متوجه وجودش نشود و فقط مطمئن باشد که دنده به درستی عمل میکند.
بنابر این در اکثر مواقع توضیح اینکه برنامه چقدر خوب نوشته شده ارزشی برای مشتریان ندارد.
مقاله زیر به طور خلاصه مفهوم Touch Point و نقش آن در تعریف محصولات نرمافزاری را شرح دادهاست.
http://mehrandvd.me/2016/10/02/touch-point-real-percepction-product/
#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd
کانال تلگرام:
@SoftwarePhilosophy
___
Dot Philosophy
Touch Point: The Real Percepction of a Product - Dot Philosophy
Recently I've participated in a great workshop about Service Design. It was a totally new concept to me. The course was designed surprisingly great by Joannes Vandermeulen from Namahn. If you ask me about the most important keyword I've learned in the course…
Forwarded from Software Philosophy
کانالهای فارسی خود را دوطرفه کنید!
مدتی قبل به عنوان یک پروژه دستگرمی! یک کار جالب کردیم.
چند تا از برنامهنویسان حرفهای کانال «فلسفه نرمافزار» و طراحان حرفهای کانال «فلسفه دیزاین» طی یک هفته دست به کار شدیم و یک بات تلگرام درست کردیم که امکان «کامنتگذاری فارسی» زیر پستها را به کانال تلگرام اضافه کنیم.
پروژه بسیار جذابی بود و تصمیم گرفتیم که با شما هم به اشتراک بگذاریم.
از جذابیتهای فنی این بات:
۱. کل تیمی که یک هفته روی این بات کار کردند کاملا ریموت بوده و همدیگر را ندیدهاند!
۲. همه این سیستم روی Azure ریلیز شده و به شدت آماده گسترش (Scale شدن) است. اگر کانالهای زیادی شروع به استفاده از این بات کنند، گزارشهایی را از روش گسترش این سرویس روی Azure، همینجا با شما به اشتراک میگذاریم.
۳. این بات از ویژگی جدید LoginURL که جدیدا به تلگرام اضافه شده استفاده میکند. این ویژگی به کاربران این امکان را میدهد که وقتی از طریق تلگرام یک لینک را باز میکنند، بصورت اتوماتیک Login شوند.
ناگفته نماند خود تلگرام هم یک بات برای کامنتگذاری اضافه کرده که برای زبان فارسی اصلا خوب کار نمیکند. همین موضوع انگیزهای برای ما شد که این بات را ساخته و تجربه خوشآیندی را از کامنت گذاشتن به زبان فارسی به کانالهای تلگرام بیاوریم.
برای اضافه شدن این امکان، کافیست بات @CommentFarsiBot را به کانال خود اضافه کنید (به عنوان ادمین).
حالا دیگه ما هم صدای شما را میشنویم!
کانال فلسفه نرمافزار: @SoftwarePhilosophy
کانال فلسفه دیزاین: @Dexign
ــــــــ
مدتی قبل به عنوان یک پروژه دستگرمی! یک کار جالب کردیم.
چند تا از برنامهنویسان حرفهای کانال «فلسفه نرمافزار» و طراحان حرفهای کانال «فلسفه دیزاین» طی یک هفته دست به کار شدیم و یک بات تلگرام درست کردیم که امکان «کامنتگذاری فارسی» زیر پستها را به کانال تلگرام اضافه کنیم.
پروژه بسیار جذابی بود و تصمیم گرفتیم که با شما هم به اشتراک بگذاریم.
از جذابیتهای فنی این بات:
۱. کل تیمی که یک هفته روی این بات کار کردند کاملا ریموت بوده و همدیگر را ندیدهاند!
۲. همه این سیستم روی Azure ریلیز شده و به شدت آماده گسترش (Scale شدن) است. اگر کانالهای زیادی شروع به استفاده از این بات کنند، گزارشهایی را از روش گسترش این سرویس روی Azure، همینجا با شما به اشتراک میگذاریم.
۳. این بات از ویژگی جدید LoginURL که جدیدا به تلگرام اضافه شده استفاده میکند. این ویژگی به کاربران این امکان را میدهد که وقتی از طریق تلگرام یک لینک را باز میکنند، بصورت اتوماتیک Login شوند.
ناگفته نماند خود تلگرام هم یک بات برای کامنتگذاری اضافه کرده که برای زبان فارسی اصلا خوب کار نمیکند. همین موضوع انگیزهای برای ما شد که این بات را ساخته و تجربه خوشآیندی را از کامنت گذاشتن به زبان فارسی به کانالهای تلگرام بیاوریم.
برای اضافه شدن این امکان، کافیست بات @CommentFarsiBot را به کانال خود اضافه کنید (به عنوان ادمین).
حالا دیگه ما هم صدای شما را میشنویم!
کانال فلسفه نرمافزار: @SoftwarePhilosophy
کانال فلسفه دیزاین: @Dexign
ــــــــ
🔴 سایت محبوب گیتهاب در حال محدود کردن دسترسی ایرانیان میباشد
سریعا از مخزن خود نسخه پشتیبان تهیه کنید و بدنبال سرویس جایگزین باشید
#خبر #نرم_افزار
@DonyaeTablighat
سریعا از مخزن خود نسخه پشتیبان تهیه کنید و بدنبال سرویس جایگزین باشید
#خبر #نرم_افزار
@DonyaeTablighat
امروز مایکروسافت اعلام کرد که شاخه ی اصلی سورس دات نت به 5.0 تغییر نام داده شده و توسعه ی نسخه ی بعدی دات نت شروع شده است.
چند ماه پیش در کنفرانس بیلد اعلام شد که NET Core با نسخه ی 4.0 نخواهیم داشت تا با نسخه های قدیمی تداخل پیش نیاد. همچنین در نسخه ی 5.0 دات نت Core و نسخه های قبلی دات نت ادغام میشوند.
چند ماه پیش در کنفرانس بیلد اعلام شد که NET Core با نسخه ی 4.0 نخواهیم داشت تا با نسخه های قدیمی تداخل پیش نیاد. همچنین در نسخه ی 5.0 دات نت Core و نسخه های قبلی دات نت ادغام میشوند.