چرا Discord از Go به Rust مهاجرت کرد؟
دیسکورد (Discord) یک سرویس چت است که در بازی های آنلاین مورد استفاده قرار میگیرد.
تیم فنی Discord در یک مقاله مفصل شرح داده است که چرا از Go به Rust مهاجرت کرده است.
تیم Discord با بررسی لوگها متوجه شد در ترافیک بالا هنگام خواندن کش جهش های ناگهانی در CPU و Latency وجود دارد که در فواصل 2 دقیقه ای روی میدهند.
بررسی های بیشتر نشان داد مشکل از مکانیزم Garbage Collection در زبان Go است که باعث میشود برای لحظاتی سیستم هنگ کند تا پاکسازی حافظه انجام شود.
در زبان Rust پاکسازی حافظه بدون Garbage Collection صورت میگیرد در عین حال این زبان به صورت بهینه از حافظه استفاده میکند.
جایگزین کردن Rust کمک کرده است که نوسانات CPU و Latency حذف شود و سیستم روند یکدست و خطی را دنبال کند.
طراحی الگوریتم مناسب برای Garbage Collection از چالش های اصلی زبانهایی است که از این سیستم برای پاکسازی حافظه استفاده میکنند. یکی از دلایل محبوبیت Rust عدم استفاده از این روشهاست.
دیسکورد (Discord) یک سرویس چت است که در بازی های آنلاین مورد استفاده قرار میگیرد.
تیم فنی Discord در یک مقاله مفصل شرح داده است که چرا از Go به Rust مهاجرت کرده است.
تیم Discord با بررسی لوگها متوجه شد در ترافیک بالا هنگام خواندن کش جهش های ناگهانی در CPU و Latency وجود دارد که در فواصل 2 دقیقه ای روی میدهند.
بررسی های بیشتر نشان داد مشکل از مکانیزم Garbage Collection در زبان Go است که باعث میشود برای لحظاتی سیستم هنگ کند تا پاکسازی حافظه انجام شود.
در زبان Rust پاکسازی حافظه بدون Garbage Collection صورت میگیرد در عین حال این زبان به صورت بهینه از حافظه استفاده میکند.
جایگزین کردن Rust کمک کرده است که نوسانات CPU و Latency حذف شود و سیستم روند یکدست و خطی را دنبال کند.
طراحی الگوریتم مناسب برای Garbage Collection از چالش های اصلی زبانهایی است که از این سیستم برای پاکسازی حافظه استفاده میکنند. یکی از دلایل محبوبیت Rust عدم استفاده از این روشهاست.
Forwarded from برنامه نویس
🔈🤑 تخفیف 90% پکیج های آموزش ASP.NET Core تا مدتی محدود
چند وقت پیش بود که پکیج های آموزش ASP.NET Core 2.2 رو ارائه دادم. پس از انتشار ASP.NET Core 3.1 می خواستم شروع به ضبط آموزش های جدید خاص این ورژن کنم، اما با مرور مستندات ASP.NET Core 3.1 متوجه شدم خوشبختانه در ASP.NET Core 3.1 مطالبی که در پکیج های قبلی ما آموزش داده شده هیچ تغییری نکرده اند و اون مطالب عینا در ورژن های جدید قابل استفاده است.
ویژگی خاص پکیج های آموزش ASP.NET Core ما این است که تمام موارد با شرح کامل و همراه با مثال های عملی و قابل اجرا ارائه شده و تقریبا هیچ نکته ای درباره ASP.NET Core وجود ندارد که در این پکیج ها از قلم افتاده باشد.
در این آموزش ها، علاوه بر مطالب ارائه شده توسط مایکروسافت و دیگر بزرگان عرصه آموزش، از تجربیات شخصی مدرس در برنامه نویسی پروژه های مختلف نیز استفاده شده و بعضی مثال ها و تکنیک های ارائه شده، در هیچ منبع و مرجع دیگری یافت نمی شود.
جهت رفاه مالی مخاطبین گرامی، پکیج های فوق تا مدتی محدود با 90% تخفیف از سایت ما قابل خرید هست. لازم به ذکر است تخفیف فوق روی قیمت دوره از قبل اعمال شده و نیاز به کد تخفیف نیست.
جهت مشاهده جزئیات پکیج های فوق می توانید به صفحه ویژه آموزش های ASP.NET Core در سایت آموزش برنامه نویس مراجعه فرمائید.
با تقدیم احترام
#مهدی_کرامتی
@barnamenevis_net
@barnamenevis_org
چند وقت پیش بود که پکیج های آموزش ASP.NET Core 2.2 رو ارائه دادم. پس از انتشار ASP.NET Core 3.1 می خواستم شروع به ضبط آموزش های جدید خاص این ورژن کنم، اما با مرور مستندات ASP.NET Core 3.1 متوجه شدم خوشبختانه در ASP.NET Core 3.1 مطالبی که در پکیج های قبلی ما آموزش داده شده هیچ تغییری نکرده اند و اون مطالب عینا در ورژن های جدید قابل استفاده است.
ویژگی خاص پکیج های آموزش ASP.NET Core ما این است که تمام موارد با شرح کامل و همراه با مثال های عملی و قابل اجرا ارائه شده و تقریبا هیچ نکته ای درباره ASP.NET Core وجود ندارد که در این پکیج ها از قلم افتاده باشد.
در این آموزش ها، علاوه بر مطالب ارائه شده توسط مایکروسافت و دیگر بزرگان عرصه آموزش، از تجربیات شخصی مدرس در برنامه نویسی پروژه های مختلف نیز استفاده شده و بعضی مثال ها و تکنیک های ارائه شده، در هیچ منبع و مرجع دیگری یافت نمی شود.
جهت رفاه مالی مخاطبین گرامی، پکیج های فوق تا مدتی محدود با 90% تخفیف از سایت ما قابل خرید هست. لازم به ذکر است تخفیف فوق روی قیمت دوره از قبل اعمال شده و نیاز به کد تخفیف نیست.
جهت مشاهده جزئیات پکیج های فوق می توانید به صفحه ویژه آموزش های ASP.NET Core در سایت آموزش برنامه نویس مراجعه فرمائید.
با تقدیم احترام
#مهدی_کرامتی
@barnamenevis_net
@barnamenevis_org
Forwarded from کدهک
در این ویدیو با کارکرد IAsyncEnumerable آشنا می شویم. این ابزار در NET Core 3.0 و #C 8.0 اضافه شده است و به شما امکان میدهد داده های Enumerable را به صورت async پردازش کنید. با استفاده از این تکنیک یک فایل متنی را پردازش می کنیم سپس اطلاعات بینکوین را به صورت زنده از سرور به کلاینت استریم می کنیم.
https://tinyurl.com/cdhk-asyncenum
https://tinyurl.com/cdhk-asyncenum
Forwarded from کدهک
چرا foreach کندتر است؟
در نظر سنجی کدهک بیش از 50 درصد کاربرها اعتقاد داشتند که for-each سریعتر از for-loop است یا فرقی با آن ندارد. در اینجا این موضوع را بررسی می کنیم.
اگر با آرایه هایی کار می کنید که ابعاد مشخصی دارند فرقی بین for-loop و for-each وجود ندارد. از آنجا که در پس زمینه کامپایلر سی شارپ بجای حلقه ی for-each حلقه ی for-loop جایگزین می کند.
اما این تنها در صورتی است که آرایه را به IEnumerable تبدیل نکنید. کلاس IEnumerable برای پردازش آرایه از توابع Current و MoveNext استفاده می کند که در هر بار اجرای حلقه موقعیت جاری را چک می کند و شامل بک فرآیند try-catch هم میشود. این مسئله یک سربار روی حافظه و پردازش ایجاد می کند و منجر به کندتر شدن پردازش می شود. حتی اگر آرایه ابعاد ثابتی داشته باشد از آنجا که به IEnumerable تبدیل شده در پس زمینه قابل تبدیل به for-loop نیست.
پس به طور کلی for-each کندتر از for-loop است. در مواردی که پرفورمنس حلقه اهمیت زیادی پیدا می کند بهتر است آن را با for-loop جایگزین کنید.
در نظر سنجی کدهک بیش از 50 درصد کاربرها اعتقاد داشتند که for-each سریعتر از for-loop است یا فرقی با آن ندارد. در اینجا این موضوع را بررسی می کنیم.
اگر با آرایه هایی کار می کنید که ابعاد مشخصی دارند فرقی بین for-loop و for-each وجود ندارد. از آنجا که در پس زمینه کامپایلر سی شارپ بجای حلقه ی for-each حلقه ی for-loop جایگزین می کند.
اما این تنها در صورتی است که آرایه را به IEnumerable تبدیل نکنید. کلاس IEnumerable برای پردازش آرایه از توابع Current و MoveNext استفاده می کند که در هر بار اجرای حلقه موقعیت جاری را چک می کند و شامل بک فرآیند try-catch هم میشود. این مسئله یک سربار روی حافظه و پردازش ایجاد می کند و منجر به کندتر شدن پردازش می شود. حتی اگر آرایه ابعاد ثابتی داشته باشد از آنجا که به IEnumerable تبدیل شده در پس زمینه قابل تبدیل به for-loop نیست.
پس به طور کلی for-each کندتر از for-loop است. در مواردی که پرفورمنس حلقه اهمیت زیادی پیدا می کند بهتر است آن را با for-loop جایگزین کنید.
آمار جالب NET Core در Docker Hub
تعداد دانلود فریم ورک NET Core در داکر هاب بیش از یک میلیارد دانلود رسیده است. همینطور NET Core SDK هم بیش از 500 میلیون را ثبت کرده است.
به نظر میرسد تغییر ساختار دات نت به خوبی آن را با Docker سازگار کرده است و توسعه دهندگان این فریم ورک در حال استفاده گسترده از آن در فضای Container ها و سرویس های ابری هستند.
تعداد دانلود فریم ورک NET Core در داکر هاب بیش از یک میلیارد دانلود رسیده است. همینطور NET Core SDK هم بیش از 500 میلیون را ثبت کرده است.
به نظر میرسد تغییر ساختار دات نت به خوبی آن را با Docker سازگار کرده است و توسعه دهندگان این فریم ورک در حال استفاده گسترده از آن در فضای Container ها و سرویس های ابری هستند.
Forwarded from کدهک
استفاده از View Compilation در ASP NET Core 3.0
به صورت پیشفرض در ASP NET Core 3.0 ویوها تنها در زمان بیلد و پابلیش کامپایل میشوند و نمی توانید تغییرات ایجاد شده در HTML را با رفرش کردن صفحه مشاهده کنید.
برای حل این مشکل باید View Compilation را در حالت Runtime فعال کنید.
https://youtu.be/W2l2I17wVDs
به صورت پیشفرض در ASP NET Core 3.0 ویوها تنها در زمان بیلد و پابلیش کامپایل میشوند و نمی توانید تغییرات ایجاد شده در HTML را با رفرش کردن صفحه مشاهده کنید.
برای حل این مشکل باید View Compilation را در حالت Runtime فعال کنید.
https://youtu.be/W2l2I17wVDs
استریم کردن در SignalR
گاهی حجم اطلاعاتی که قرار است بین کلاینت و سرور جابجا شود زیاد است و نمی توان آن را به صورت یکپارچه ارسال کرد. در سیگنال آر امکان استریم کردن اطلاعات به صورت تکه شده وجود دارد این روش همچنین در اینترنت اشیا برای دریافت مداوم اطلاعات از کلاینت و سرور هم کاربرد دارد.
https://tinyurl.com/cdhk-signalr-stream
گاهی حجم اطلاعاتی که قرار است بین کلاینت و سرور جابجا شود زیاد است و نمی توان آن را به صورت یکپارچه ارسال کرد. در سیگنال آر امکان استریم کردن اطلاعات به صورت تکه شده وجود دارد این روش همچنین در اینترنت اشیا برای دریافت مداوم اطلاعات از کلاینت و سرور هم کاربرد دارد.
https://tinyurl.com/cdhk-signalr-stream
اگر در ایران زندگی می کنید و کارمند هستید میزان حقوق دریافتی شما چقدر است؟
Anonymous Poll
43%
کمتر از 5 میلیون تومان
19%
بین 5 تا 10 میلیون تومان
7%
بیشتر از 10 میلیون تومان
30%
دیدن نتایج
آشنایی با gRPC
در چند سال گذشته استفاده از gRPC در رشد قابل توجهی داشته که نشان میدهد این تکنولوژی توانسته بسیاری از چالش های برقراری ارتباط بین شبکه ای حل کند.
در این ویدیو به معرفی این ابزار می پردازیم و آن را در محیط ASP NET Core پیاده می کنیم.
https://tinyurl.com/cdhk-grpc-intro
در چند سال گذشته استفاده از gRPC در رشد قابل توجهی داشته که نشان میدهد این تکنولوژی توانسته بسیاری از چالش های برقراری ارتباط بین شبکه ای حل کند.
در این ویدیو به معرفی این ابزار می پردازیم و آن را در محیط ASP NET Core پیاده می کنیم.
https://tinyurl.com/cdhk-grpc-intro
Forwarded from کدهک
دیزاین پترنها روشهایی از قبل طراحی شده برای حل مسائل عمومی نرم افزار هستند. در حالی که اهمیت و کاربرد این مفاهیم در برنامه نویسی انکار ناپذیر است اما به نظر میرسد تاکید بیش از حدی روی آن وجود دارد. بر خلاف باور عمومی استفاده از آنها همیشه به سود شما نیست.
https://tinyurl.com/y5xrwer8
https://tinyurl.com/y5xrwer8
آشنایی با LSP
پروتکل Language Server روشی است برای ارتباط بین IDE و زبان برنامه نویسی که توسط مایکروسافت ابداع شده و به صورت متن باز توسعه داده میشود.
هنگام برنامه نویسی درون IDE یا ادیتور مانند VSCode یا Atom لازم است اطلاعاتی درباره کدی که وارد می کنید داشته باشید. مثلا تکمیل شدن دستور یا توضیحات درباره دستور و اینکه چه متدهایی در محدوده ی جاری کد در دسترس است کمک زیادی به تجربه ی بهتر برنامه نویسی می کند.
ابزار LSP یک دستورالعمل برای برقرار کردن گفتگو بین زبان برنامه نویسی و محیط Editor معرفی کرده است که دو طرف می توانند از طریق JSON با هم صحبت کنند.
هر کاراکتری که وارد می کنید از طریق JSON به سرور زبان برنامه نویسی ارسال میشود و اطلاعات آن برگشت داده میشود و در ادیتور نمایش داده میشود.
این سرور توسط افزونه روی IDE نصب میشود و به صورت محلی به درخواستها پاسخ میدهد. به این ترتیب می توان به راحتی یک زبان را در انواع ادیتور و IDE قابل پیاده سازی کرد.
پروژه OmniSharp برای سی شارپ LSP توسعه داده است که در VSCode و VIM و ... استفاده میشود. همچنین سایت Try.dot.net هم از این تکنیک استفاده میکند.
پروتکل Language Server روشی است برای ارتباط بین IDE و زبان برنامه نویسی که توسط مایکروسافت ابداع شده و به صورت متن باز توسعه داده میشود.
هنگام برنامه نویسی درون IDE یا ادیتور مانند VSCode یا Atom لازم است اطلاعاتی درباره کدی که وارد می کنید داشته باشید. مثلا تکمیل شدن دستور یا توضیحات درباره دستور و اینکه چه متدهایی در محدوده ی جاری کد در دسترس است کمک زیادی به تجربه ی بهتر برنامه نویسی می کند.
ابزار LSP یک دستورالعمل برای برقرار کردن گفتگو بین زبان برنامه نویسی و محیط Editor معرفی کرده است که دو طرف می توانند از طریق JSON با هم صحبت کنند.
هر کاراکتری که وارد می کنید از طریق JSON به سرور زبان برنامه نویسی ارسال میشود و اطلاعات آن برگشت داده میشود و در ادیتور نمایش داده میشود.
این سرور توسط افزونه روی IDE نصب میشود و به صورت محلی به درخواستها پاسخ میدهد. به این ترتیب می توان به راحتی یک زبان را در انواع ادیتور و IDE قابل پیاده سازی کرد.
پروژه OmniSharp برای سی شارپ LSP توسعه داده است که در VSCode و VIM و ... استفاده میشود. همچنین سایت Try.dot.net هم از این تکنیک استفاده میکند.
Forwarded from کدهک
اگر در ایران زندگی می کنید و کارمند هستید میزان حقوق دریافتی شما چقدر است؟
Anonymous Poll
43%
کمتر از 5 میلیون تومان
19%
بین 5 تا 10 میلیون تومان
7%
بیشتر از 10 میلیون تومان
30%
دیدن نتایج
استریم کردن دیتابیس از سرور به کلاینت
در این ویدیو با نحوه ی استریم کردن داده از سرور به کلاینت در SignalR آشنا می شویم. قرار است ردیف های یک جدول دیتابیس SQL Server را از استریم کنیم و یک به یک به کلاینت کنسول دات نت منتقل کنیم.
https://codehaks.com/go/sgh
در این ویدیو با نحوه ی استریم کردن داده از سرور به کلاینت در SignalR آشنا می شویم. قرار است ردیف های یک جدول دیتابیس SQL Server را از استریم کنیم و یک به یک به کلاینت کنسول دات نت منتقل کنیم.
https://codehaks.com/go/sgh
Forwarded from کدهک
در این ویدیو با کارکرد IAsyncEnumerable آشنا می شویم. این ابزار در NET Core 3.0 و #C 8.0 اضافه شده است و به شما امکان میدهد داده های Enumerable را به صورت async پردازش کنید. با استفاده از این تکنیک یک فایل متنی را پردازش می کنیم سپس اطلاعات بینکوین را به صورت زنده از سرور به کلاینت استریم می کنیم.
https://tinyurl.com/cdhk-asyncenum
https://tinyurl.com/cdhk-asyncenum
استریم کردن دو طرفه در gRPC
استریم دو طرفه به ما امکان میده داده هایی رو از کلاینت به سرور و از سرور به کلایت به صورت موازی ارسال کنیم.
در این ویدیو قابلیت Bidirectional Streaming رو در gRPC بررسی می کنیم سپس به مقایسه SignalR و gRPC می پردازیم.
https://codehaks.com/go/kjf
استریم دو طرفه به ما امکان میده داده هایی رو از کلاینت به سرور و از سرور به کلایت به صورت موازی ارسال کنیم.
در این ویدیو قابلیت Bidirectional Streaming رو در gRPC بررسی می کنیم سپس به مقایسه SignalR و gRPC می پردازیم.
https://codehaks.com/go/kjf
کتابخانه Rx حدود 10 سال پیش در آزمایشگاه مایکروسافت تهیه شده و حالا به صورت یک کتابخانه متن باز در بسیاری از زبانهای برنامه نویسی برای پیاده سازی الگوی Observer استفاده میشود.
در این ویدیو به معرفی این کتابخانه می پردازیم و یک نمونه ی از کاربردهای آن را مشاهده می کنیم.
https://codehaks.com/go/rxr
در این ویدیو به معرفی این کتابخانه می پردازیم و یک نمونه ی از کاربردهای آن را مشاهده می کنیم.
https://codehaks.com/go/rxr
Forwarded from کدهک
در این ویدیو با استفاده از SignalR قابلیت بروز رسانی Real-time را به یک برنامه ی Blazor اضافه می کنیم.
https://youtu.be/oX-ksIDtqhM
https://youtu.be/oX-ksIDtqhM
الگوی Property Injection در ASP NET Core با AutoFac
استفاده از الگوی Property Injection چندان توصیه نمیشود اما گاهی لازم است از آن استفاده کنید. در IoC Container پیش فرض ASP NET Core امکان Property Injection وجود ندارد. در این ویدیو سیستم تزریق وابستگی پیش فرض ASP NET Core را با AutoFac جایگزین می کنیم سپس الگوی Property Injection راپیاده میکنیم.
https://codehaks.com/go/LRK
استفاده از الگوی Property Injection چندان توصیه نمیشود اما گاهی لازم است از آن استفاده کنید. در IoC Container پیش فرض ASP NET Core امکان Property Injection وجود ندارد. در این ویدیو سیستم تزریق وابستگی پیش فرض ASP NET Core را با AutoFac جایگزین می کنیم سپس الگوی Property Injection راپیاده میکنیم.
https://codehaks.com/go/LRK