کدهک
1.94K subscribers
1.29K photos
7 videos
1 file
674 links
آموزشگاه تخصصی دات نت

https://codehaks.com

لینکدین :
https://www.linkedin.com/in/codehaks

یوتیوب:
https://www.youtube.com/@codehaksfa

ارتباط با مدیر :
Admin: @codehak
Email: ghods.hakim@hotmail.com
call: 09380146555
Download Telegram
آشنایی با LLVM
در واقع LLVM مجموعه ای از ماژولها و ابزار است که عملیات کامپایل کردن سورس کد به زبان ماشین را آسان میکند.

این پروژه در سال 2000 به عنوان یک تحقیق دانشجویی شروع شد و اکنون به عنوان ابزار اصلی بسیاری از زبانهای برنامه نویسی مورد استفاده قرار میگیرد. سازنده ی اصلی آن آقای کریس لتنر حالا در استخدام اپل است و روی زبانهای برنامه نویسی این شرکت کار میکند.

در گذشته وقتی میخواستید یک زبان برنامه نویسی جدید بسازید باید همه ی فرآیند خوانش کد و تبدیل آن به زبان ماشین را خودتان پیاده میکردید. مشکل این است که پردازنده های سخت افزاری متعددی در بازار وجود دارد و ساز و کار x86 با ARM و PowerPC و ... متفاوت است.

شما باید کامپایلری بسازید که قادر باشد از روی سورس برنامه نوشته شده توسط برنامه نویس کد ماشین برای انواع پردازنده تولید کند. در غیر این صورت عملا محدودیت های زیادی در استفاده از زبان برنامه نویسی بوجود می آید.

این مشکلی است که LLVM به خوبی حل می کند. LLVM مجموعه ای از ابزار با API های ماژولار در اختیار شما قرار میدهد تا بتوانید سورس کد را به زبانی میانی یا Intermediate Representation تبدیل کنید. فقط کافی است کدهای مربوط به Front-End را بنویسید و به LLVM ارسال کنید.

این Front-End ارتباطی با جاوا اسکریپت ندارد! بلکه بخشی از کامپایلر است که وظیفه ی Parse کردن و تشخیص خطاهای Syntax را به عهده دارد. بعد از اینکه کد شما به IR تبدیل شد LLVM می تواند آن را برای انواع مختلف سخت افزار آماده کند و کد ماشین مورد نیاز را تولید کند.

ابزار LLVM کمک کرده فرآیند طراحی زبان های برنامه نویسی جدید آسانتر شود و در نتیجه زبانهایی مثل Kotlin و Rust و Swift در کوتاهترین زمان جای خود را بین برنامه نویسان باز کرده اند.
در زبان سی شارپ کامپایلر Roslyn وظیفه ی Parse کردن و اعلام خطاهای Syntax را به عده دارد. در ادامه بهینه سازی انجام میدهد و کد میانی یا Intermediate Language را تولید می کند. این همان فایل dll یا exe برنامه ی شماست.

سپس در هنگام اجرا بسته به اینکه از چه پردازنده ای استفاده می کنید Just In Time Compiler دات نت که به RyuJIT معروف است شروع به کار میکند و در لحظه اجرای برنامه کد ماشین را تولید می کند.

استفاده از JIT کمک می کند برنامه به سخت افزار وابستگی مستقیم نداشته باشد و مجبور نباشیم برای هر سیستم عامل و سخت افزار جدا فایل جداگانه ای تولید کنیم.

در بعضی برنامه ها برای بالا بردن پرفورمنس از دستورات برداری استفاده میشود. چنانچه پردازنده از این دستورات پشتیبانی نکند برنامه خیلی کندتر از حالت بدون بردار اجرا میشود.

یکی از مشکلاتی که RyuJIT حل میکند بهینه سازی SIMD است. این ابزار می تواند بر اساس قابلیت های پردازنده کدهای برداری را به کدهای معمولی تبدیل کند تا حداکثر پرفورمنس بدست آید.
Forwarded from کدهک
کلاس تخصصی ASP NET Core برگزار میشود

این دوره با آموزش مباحث پیشرفته در سی شارپ شروع میشود. سپس به آموزش کامل Clean Architecture و نحوه ی پیاده سازی Design Patterns می پردازیم.

می خواهیم با تکنیک های پیشرفته ی Caching و استفاده از Redis آشنا شویم همچنین نحوه ی پیاده سازی میکرو سرویس ها را فرا بگیریم.

همچنین برنامه نویسی Real-time با SignalR و نحوه ی استفاده از Docker در این دوره آموزش داده میشود.

اگر قصد دارید دانش خود را در زمینه ی ASP NET Core ارتقا دهید این دوره مخصوص شماست.

این دوره به مدت 30 ساعت و به صورت اینترنتی برگزار میشود و می توانید از هرجایی که هستید در آن شرکت کنید.

ساعت کلاس مطابق با زمان دانشجویان تنظیم میشود.

جهت کسب اطلاعات بیشتر با آی دی @codehak یا شماره 09380146555 تماس بگیرید

شروع کلاس ها از 22 تیرماه
کاربران اشتراک وِیژه و دانشجویان 25 درصد تخفیف
فیلم دوره در پایان قابل دانلود است

مشاهده سرفصلها :

https://tinyurl.com/cdhks-expert
چگونه یک سرور دانلود بسازیم؟

آموزش مفهوم Range در HTTP
کار با FileResult
بدست آوردن حجم دانلود با Head
دانلود فایل با HttpClient

تماشا در یوتویب :

https://tinyurl.com/cdhks-dwnld-server
شروع کار با SignalR Core

در این مجموعه 8 قسمتی و در 30 دقیقه به آموزش برنامه نویسی Real-time در ASP NET Core می پردازیم.



تماشا در یوتیوب :

https://tinyurl.com/cdhks-signalr-core
Forwarded from کدهک
به نظر شما در #C کدام روش سریعتر است؟
Final Results
47%
حلقه با for
38%
حلقه با foreach
15%
فرقی ندارند
چرا 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 جایگزین کنید.
آشنایی با Casting

در سی شارپ وقتی نوع یک متغیر را به نوع دیگری تبدیل می کنید عملیات Casting روی میدهد.

بعض از Casting ها به صورت Implicit انجام میشود و نیاز به نوشتن کد ندارد. مثلا تبدیل int به long نیاز به Convert ندارد.

نوع دیگر Casting که باید به صورت Explicit انجام شود تبدیل یک Object به Object دیگر است. برای اینکار از پرانتز یا کلمه ی کلیدی As استفاده می شود.

نکته ی دیگه اینکه تبدیل یک شی به شی فرزند زحمت زیادی برای کامپایلر و Runtime ندارد اما تبدیل به شی والد پردازش بسیار بیشتری نیاز دارد. (به دلیل جستجوی درختی)

هر چند استفاده از Interface باعث میشود معماری بهتری داشته باشیم اما سخت ترین نوع Casting هنگام تبدیل به اینترفیس اتفاق می افتد. به همین دلیل بهتر است Property درون کلاس یا پارامترهای ورودی متد اینترفیس نباشد.
Forwarded from کدهک
اسکریپت نویسی با سی شارپ

https://goo.gl/ZqC2yT
امروز مایکروسافت اعلام کرد که شاخه ی اصلی سورس دات نت به 5.0 تغییر نام داده شده و توسعه ی نسخه ی بعدی دات نت شروع شده است.

چند ماه پیش در کنفرانس بیلد اعلام شد که NET Core با نسخه ی 4.0 نخواهیم داشت تا با نسخه های قدیمی تداخل پیش نیاد. همچنین در نسخه ی 5.0 دات نت Core و نسخه های قبلی دات نت ادغام میشوند.
Forwarded from کدهک
آنچه باید درباره NET 5. بدانید

https://tinyurl.com/cdhks-net5
مقایسه const و static readonly

در سی شارپ برای نگه داری مقادیر ثابت از const استفاده میشود. همچنین می توان با استفاده از static readonly متغیرهای فقط خواندنی تعریف کرد.

مقدار const باید در زمان تعریف مشخص شود و بعد از آن قابل تغییر نیست. همچنین const فقط مقادیر built-in مثل int و string به خود میگیرد.سی شارپ در پس زمینه هر جایی که const بکار رفته با مقدارش جایگزین میکند و در کد کامپایل شده hard-code میکند. این مقدار دیگر قابل تغییر نیست مگر اینکه پروژه مجدد build شود. به همین دلیل اگر از چند dll استفاده میکنید بهتر است از const استفاده نکنید.

مقادیر که به صورت Static readonly تعریف میشوند در زمان اجرا قابل تغییر نیستند. در اینجا می توان هر نوع داده ای از جمله مقادیر reference type هم ذخیره کرد. همچنین می توان مقدار اولیه را درون سازنده ی کلاس مشخص کرد. از آنجا که hard-code انجام نمیشود برای بدست آوردن مقدار باید به حافظه رجوع شود و ممکن است کندتر از const عمل کند.

نکته ی آخر اینکه مقادیر const خود به خود static هم هستند. مقادیر static پاکسازی نمیشوند و تا پایان اجرای برنامه درون حافظه باقی می مانند.
چرا از ArrayList استفاده نکنیم؟

بعضی از Collection ها در سی شارپ فقط جهت Backward-compatibility حفظ شده اند و در نباید در پروژه های جدید استفاده کنید.

مشکل ArrayList این است که آیتمها درون آرایه را Box میکند و درون Object میریزد. در ادامه برای خواندن آیتمهای درون آرایه از حافظه ی پیوسته استفاده نمی کند که باعث میشود CPU نتواند از از کش های L1 و L2 برای بالا بردن سرعت پردازش استفاده کند.

قضیه وقتی جدی تر میشود که بدانید ArrayList حتی مقادیر Value Type مانند int را هم به Object تبدیل میکند و هر بار خواند باید Unboxing انجام دهد.

کالکشن های دیگری که همین مشکل را دارند به شرح زیر است :


Queue
SortedList
ListDictionary
HybridDictionary
Hashtable
Stack

در نسخه های جدیدتر دات نت بهتر است از Generics یا خود Array‌ استفاده کنید.
چهارگانه ی ACID

هر ترانکش دیتابیس باید از 4 اصل ACID پیروی کند تا داده های آن قابل اعتماد باشد. بیشتر دیتابیس های رابطه ای بر مبنای ACID کار میکنند.

در Atomicity داده ها باید از قانون همه یا هیچ پیروی کنند. یعنی یا تمام فیلدها درون جدول ذخیره میشود یا هیچکدام ذخیره نمیشود.

در Consistency دیتابیس بعد از هر تراکنش از یک حالت معتبر به یک حالت معتبر جدید میرود. مواردی مانند نوع فیلدها ، محدودیت های اعمال شده بر آن و رابطه ی بین جداول همیشه باید رعایت شود.

در Isolation هر تراکنش برای خود یکتا هست و به ذخیره شدن و یا نشدن سایر تراکنش ها مربوط نیست. اگر چندین تراکنش همزمان اعمال شود هیچکدام نباید روی دیگری اثر گذار باشد.

در Durability اطلاعات هر تراکنش بعد از آنکه در دیتابیس اعمال شد باید ذخیره شود. در واقع هروقت دیتابیس نتیجه ی تراکنش را بر میگرداند برنامه نویس میداند اطلاعات جایی در دیسک ذخیره شده است و در آینده ی دور هم قابل دسترسی است.

دیتابیس هایی که از این قوانین پیروی نمیکنند سرعت بیشتری دارند اما اعتماد پذیری کمتری دارند. مثلا دیتابیس Redis از Durability پیروی نمیکند و ACID نیست.
Forwarded from برنامه نویس
This media is not supported in your browser
VIEW IN TELEGRAM
ویژوال استودیو 2019 ورژن 16.2 منتشر شد.

امروز ویژوال استودیو 2019 ورژن 16.2 و همچنین Preview 1 از ورژن 16.3 منتشر شد. هم اکنون می توانید از طریق مکانیسم آپدیت ویژوال استودیو (انتخاب گزینه Check for updates از منوی Help ویژوال استودیو) نسبت به بروزرسانی ویژوال استودیو به این ورژن اقدام نمائید.

جزئیات کامل تغییرات ورژن کنونی نسبت به نسخه های پیشین را می توانید در این آدرس مشاهده کنید.

توقع مشاهده چه بهبودهایی را می توان در این ورژن داشت؟

Test Explorer
در این ورژن، ابزار Test Explorer مجموعه های بزرگ تست ها را بهتر مدیریت می کند، امکان فیلتر کردن (جستجو) آسان فراهم شده است، دستورات را راحت تر می توان یافت، ویوهای Playlist به صورت Tabbed در دسترس هستند، و هم اکنون ستون های نمایش اطلاعات را می توان سفارشی سازی کرد.

بهبود بهره وری در برنامه نویسی دات نت
در ورژن 16.2 دیباگ کردن جاوا اسکریپت با استفاده از ورژن جدید Microsoft Edge (که موتور داخلی آن با Chrome جایگزین شده است) در پروژه های ASP.NET MVC و ASP.NET Core میسر شده است.

اطلاعات بیشتر...

@barnamenevis_org
@barnamenevis_net
#مهدی_کرامتی
گیتهاب در حال مسدود کردن حساب کاربران ایرانی است.

گیتهاب حساب کاربران ایرانی که از سرویس پولی استفاده میکردند مسدود کرده است. همچنین محدودیت هایی برای سرویس های رایگان اعمال کرده است.

در تازه ترین تغییرات دسترسی کاربران ایرانی به بخش ایجاد پروژه های خصوصی همچنین GitHub Pages قطع شده است.

مدتی پیش ایجاد پروژه های خصوصی با تعداد سه نفر در گیتهاب برای همه رایگان شد که ظاهرا با شروع اجرای تحریم های آمریکا از دسترس ایرانیان خارج شده است.

البته این تغییرات هنوز روی همه ی حسابهای کاربری اعمال نشده اما پیش بینی میشود در روزهای آینده این اتفاق روی دهد.

به نظر میرسد به زودی فقط ایجاد پروژه های عمومی برای ایرانیان ممکن باشد.

توضیحات بیشتر در بلاگ حامد سعیدی:

https://tinyurl.com/codehaks-github
Forwarded from کدهک
دو دستور Action و Func در سی شارپ نسخه ی ساده تر شده ی Delegate هستند. کامپایلر سی شارپ در لایه ی درونی آنها را به Delegate تبدیل میکند.
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
🔶 دنیای «بازی» که به روی ما ایرانیا «بسته» شد !

خب همونطور که قبلا هشدار داده بودیم. بلاخره گیتهاب حرفشو عملی کرد و تحریم اکانت هایی ایرانی رو عملی کرد.
اگه فقط ریپو های عمومی (public) داشتید که جای نگرانی نیست و بعید هم میدونم در آینده حتی مشکلی براشون پیش بیاد. اما اگه ریپو های خصوصی (private) داشتین متاسفانه دیگه بسته شده و در دسترس نیست.
همچنین صفحات github Pages هم بسته شده بود حتی برای پروژه های عمومی که این تصمیم گیتهاب واقعا غیر منطقی بود
خوشبختانه امروز گیتهاب دسترسی صفحات github Pages رو باز کرد و امکان تبدیل ریپو های خصوصی به عمومی رو فراهم کرد و در نتیجه میتونین سورس کد هاتون رو نجات بدین.

🔷 و اما حالا باید چیکار کنیم؟
در کل اینکه نگران نباشید به لطف ورژن کنترل Git تمام تاریخچه Commit ها و Branch ها و ... رو میشه زنده کرد (به غیر از Issue ها و تاریخچه Pull Request ها و Watch ها و... یه سری چیزا که اختصاصا مال گیتهابه ، نه گیت)

0️⃣ راه حل های بی فایده :
بدیهیه که استفاده از قند شکن و اینا تاثیری نداره پس اینقدر نپرسین. ضمنا برای اینکه اکانتتون رفع تحریم بشه، به پاسپورت غیر ایرانی نیاز دارین و راه تقلبی هم وجود نداره، پس هیچی.

1️⃣ مهاجرت نکنیم :
گیتهاب غیر از اینکه بزرگترین جامعه برنامه نویسای دنیاست، نشون دهنده هویت و سابقه یه برنامه نویس هم هست پس قاعدتا نمیشه و نباید دروشو خط کشید
بنابراین اگه صرفا از ریپو های پابلیک استفاده میکنین مشکلی نیست و نیاز به مهاجرت ندارین.
فقط کافیه ضربدر اون پیغام زرد رنگ رو مخی رو بزنین تا بره 😕

2️⃣ مهاجرت به GitLab :
گیت لب که خیلی وقت پیش ایرانی ها رو تحریم کرد ولی بازم بازم صد رحمت بهش که به Block کردن IP ها بسنده کرد 😒
با فرض داشتن قند شکن یکی از گزینه ها انتقال به گیت لب هست ولی احتمالش هست که در آینده ای نه چندان دور این مشکلات رو پیدا کنه.
اطلاعات بیشتر :
http://bit.ly/2K8CdLn

3️⃣ مهاجرت به Azure DevOps :
سرویس Azure DevOps ماکروسافت استثناعا تا الان هیچ تحریمی نگذاشته و محدودیت ریپو های خصوصیش تا 5 نفره که به نسبت بقیه گزینه بهتریه
ولی بازم احتمالش هست که در آینده ای نه چندان دور این مشکلات رو پیدا کنه

4️⃣ گیت سرویس شخصی :
سایت گیت لب یه نسخه Community Edition (یا همون CE) داره که رایگان و قابل دانلوده و این امکان رو به شما میده که سایت گیت لب رو (با یه سری امکانات محدود) روی سرور خودتون نصب کنین.
خیلی هم سادس فقط به یه سرور لینوکسی نیاز داره (البته با داکر روی ویندوز هم میاد)
به غیر از گیت لب CE، پروژه های دیگه ای مانند Gitea و Gogs هم هستند
درکل این روش، کم ریسک ترین گزینه برای ریپو های خصوصی هست
________________
@IranAspMvc
آشنایی با Data Race

حالت Data Race زمانی روی میدهد که در یک Proccess دو یا چند Thread به محل مشترکی از حافظه همزمان دسترسی داشته باشند. مشکل زمانی پیش می آید که حداقل یکی از Thread مقدار ذخیره شده در حافظه را تغییر دهد در حالی که Thread دیگر در حال خواندن آن است.

در سی شارپ یکی از ساده ترین روش ها برای حل مشکل Data Race استفاده از lock است.کلمه ی کلیدی lock باعث میشود در یک لحظه ی واحد فقط یک Thread قادر به تغییر حافظه باشد.البته این روش بهینه نیست چون برنامه دیگر به صورت موازی اجرا نمیشود و Thread ها به نوبت می توانند با حافظه کار کنند. همچنین مشکلات دیگری از جمله dead-lock را به همراه دارد.

مشکل Race Condtion در نتیجه ی Data Race بوجود می آید و عامل تخریب داده های درون حافظه و عمکرد عجیب برنامه میشود. تا جایی که برنامه از کار می افتد.

خطای Race Conditon در سیستم آلارم باعث خاموشی سراسری آمریکای شمالی در سال 2003 شده است.
دوره 18م از بنچمارک Techempower اعلام شده است.

در این دور ASP NET Core با سه پله سقوط در ردیف 10م حالت Plaintext قرار گرفت. هر چند از نظر RPS تغییر محسوسی نداشته است اما وضعیت آماری چند فریم ورک دیگر کمی بهتر شده است.

این دور روی نسخه ی 2.2 از ASP NET Core انجام شده است و انتظار میرود با آمدن نسخه ی 3.0 نتایج بهتری بدست آید.

فریم ورک ASP NET Core همچنان 99 درصد سریعترین فریم ورک است و اختلاف ناچیزی با صدر جدول دارد.