DotNetZoom
2.97K subscribers
342 photos
18 videos
36 files
606 links
DotNetZoom
💎 Everything about .NET

ارتباط با مدیر و تبلیغات آگهی استخدام:
@mjebrahimi

لینک گروه ASPNET Core:
https://t.iss.one/+ufG25x7lVFgyYTNk
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
#زنگ_تفریح
دوس دارم وقتی یه باگ الکی میده یه همچین بلایی سرش بیارم 😐😅
@IranAspMvc
Forwarded from Software Philosophy
پلتفرم Twitch یکی از استارتاپ‌های معروف و جذاب با داستانی عجیب برای برنامه‌نویسان است. هدف اولیه این استارتاپ Game Streaming است، یعنی gamer ها هنگام بازی کردن دسکتاپ خود را share می‌کنند تا follower هایشان بتوانند نحوه بازی کردن آنها را ببینند.
یکی از اتفاقات جالبی که در این پلتفرم افتاده، استفاده خاص برنامه‌نویسان است. اخیرا برنامه‌نویسانی شروع به استفاده از از این پلتفرم کرده‌اند و هنگامی که برنامه‌نویسی می‌کنند دسکتاپ خود را شیر می‌کنند و مفاهیمی را از این طریق آموزش می‌دهند.

در همین راستا ما نیز در Software Philosophy تصمیم گرفتیم رویدادهایی را در Twitch برگزار کنیم.
اولین رویداد در تاریخ ۱۳۹۷/۰۷/۱۰ (سه‌شنبه) ساعت ۷:۰۰ تا ۸:۰۰ با موضوع زیر برگزار می‌شود:
Concurrency: Parallel vs. Asynchronous


برای مشاهده این رویداد روی لینک زیر کلیک کنید و کانال ما را در twitch فالو کنید.

https://www.twitch.tv/softwarephilosophy/

#مهران_داودی (https://ow.ly/GwIl309lFEm)

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


___
Forwarded from Software Philosophy
اولین ورک‌شاپ کانال Software Philosophy روی پلتفرم Twitch سه‌شنبه ۱۳۹۷/۰۷/۱۰ ساعت ۷ تا ۸. روی این لینک کلیک کنید: https://www.twitch.tv/softwarephilosophy/

@SoftwarePhilosophy
DotNetZoom pinned a photo
Forwarded from Software Philosophy
اولین ورک‌شاپ کانال Software Philosophy روی پلتفرم Twitch سه‌شنبه ۱۳۹۷/۰۷/۱۰ ساعت ۷ تا ۸. روی این لینک کلیک کنید: https://www.twitch.tv/softwarephilosophy/

@SoftwarePhilosophy
Software Philosophy - Concurrency - 2018-10-02.mkv
203.5 MB
فیلم آموزش انلاین در سایت تویچ
موضوع : Parallel and Asynchronous Programming
ارائه : مهران داودی @mehrandvd
فلسفه نرم افزار https://t.iss.one/SoftwarePhilosophy
#آیا_میدانستید

آیا میدانستید حلقه for سریع تر از list.ForEach یا اصلاحا ForEach Lambda است؟

آیا میدانستید حلقه list.ForEach سریع تر از foreach است؟ زیرا list.ForEach داخل خود از for استفاده میکند ولی foreach داخل خود از مکانسیم Enumerator Iteration که به مراتب سنگین تر است، استفاده میکند.

آیا میدانستید حلقه for که مقدار count آن توسط یک متغیر خوانده شود سریع تر از حلقه for ایی است که مقدار count خود را از list.Count میخواند؟ زیرا سرعت خواندن متد get یک property زمانبر تر از خواندن مقدار یک متغیر است.
مثال :
var count = list.Count;
for (int i = 0; i < count ; i++) { }
از روش زیر سریع تر است
for (int i = 0; i < list.Count ; i++) { }
نتیجه :
در تست انجام شده، سرعت اجرای حلقه ها روی 100 میلیون آیتم به ترتیب زیر است
1- حلقه for که از متغیر count میخواند (زمان : 378 میلی ثانیه)
2- حلقه for که از خاصیت list.Count میخواند (زمان : 415 میلی ثانیه)
3- حلقه list.ForEach یا اصطلاحا ForEach Lambda (زمان : 650 میلی ثانیه)
4- حلقه foreach (زمان : 1136 میلی ثانیه)

همانطور که مشاهده میکنید تفاوت این ها آنقدر محسوس نیست که سرعت پروژه را کاهش دهد.
درنتیجه بهتر از کدی را بنویسید که «تمیز» تر است.

@IranAspMvc
ظاهرا مایکروسافت بزرگترین شرکت اوپن سورس جهان شده؛ با آزاد کردن ۶۰هزار پتنتش

https://jadi.net/2018/10/microsoft-joined-oin/

لینوس توروالدز خالق لینوکس یکبار گفته بود که اگر روزی مایکروسافت برای لینوکس برنامه بنویسه، اون پیروز شده. حالا نه فقط مایکروسافت ادیتوری مثل vscode رو در دنیای لینوکس هم منتشر کرده و نه فقط اجازه می ده فضای لینوکسی به سیستم عامل خودش راه پیدا کنه، که این هفته اعلام کرد که عضو شبکه اختراع آزاد شده (OIN یا هر ترجمه دقیق دیگه ای که داره). این کنسرسیوم کارش اینه که پتنت‌های آزاد هر شرکت رو در اختیار بقیه شرکت‌ها بذاره در مقابل اینکه پتنت‌های بقیه شرکت‌ها هم برای این شرکت‌ها آزاد بشه.

شبکه Open Invention Network حدود ۲۶۵۰ عضو که توشن اسم‌هایی مثل گوگل، آی بی ام، ردهت و سوزه به چشم می‌خورن. مدیر عامل این شبکه اعلام کرده که «مایکروسافت هر چیزی که داره رو آورده. چه تکنولوژی قدیمی‌ترش مثل اندروید و کرنل لینوکس و اوپن استک و چه تکنولوژی‌های جدیدترش مثل LF Energy و هایپرلجر و همه قبلی‌ها و بعدی‌هاشون».

تعداد پتنت‌هایی که مایکروسافت آورده حدود ۶۰هزار تا است و خوبه یادمون باشه که درآمد مایکروسافت فقط از پتنت‌های اندروید حدود ۳.۴ میلیارد دلار در سال ۲۰۱۴ بوده. معلومه که همه شک شدن. مایکروسافت مدعی است که دچار یک تغییر فلسفی بنیادی شده و از جایی که با جامعه آزاد دوست نبوده در حرکت به سمت اون است و با این کار نشون داده که این حرکت جدی و مصممه. مدیر اجرایی مایکروسافت می‌گه که دنبال بهتر کردن وضعیت توسعه دهنده‌ها است و کاری نداره که اونها رو لینوکس کار می کنن یا ویندوز و از دات نت استفاده می کنن یا جاوا.

این تغییر مدتی طولانی است که در شرکت مایکروسافت دیده می شه و دلیلش هم به احتمال زیاد درک این مساله است که دنیای آینده دنیای باز است. جایی که واقعا ایده ها رقابت می کنن و کسانی که در دنیای باز باشن، دسترسی بیشتری به ایده‌های متنوع و همچنین دسترسی بیشتری به خلاقیت خواهند داشت. اتفاق بسیار بزرگیه و من هم هنوز بهش شک دارم؛ هی فکر میکنم شاید جایی از خبر رو نفهمیدم یا نکته پنهانی داره که من نمی دونم. اما به هرحال به نظر می رسه مایکروسافت بیشتر از ۶۰هزار پتنتش رو از این به بعد برای دنیای آزاد، رایگان کرده.
بنا بر درخواست بعضی از دوستان مبنی بر آموزش Asp Core تصمیم دارم یک دوره #تدریس نیمه خصوصی قیمت مناسب با موضوع
«آموزش Asp Core مقدماتی تا پیشرفته»
برگزار کنم

🔹 کلاس در ۹ جلسه ۳ ساعته (مجموعا ۲۷ ساعت) در طول ۳ هفته برگزار خواهد شد (البته طول دوره، روز و ساعت برگزاری با توجه به تایم دانشجویان قابل تغییر خواهد بود)

🔸 پیش لازمه این اموزش، تسلط نسبی بر C#, SQL, HTML, CSS و JavaScript میباشد (جهت یکنواخت بودن سطح دانشجویان، از آنها تست و گزینش انجام خواهد شد)

🔹 در این آموزش وقت دانشجویان صرف موراد عمومی طراحی سایت مثل آموزش Bootstrap, jQuery, Angular و دیزاین نخواهد شد و تمرکز اصلی بر روی موضوعات تخصصی DotNetCore, AspCore, EF Cor است (این دوره یک آموزش همه جانبه نیست که نیمی از وقت دوره صرف موارد غیر تخصصی شود، درنتیجه برای کسانی که میخواهند در AspCore حرفه ای شوند و نه دانش سطحی بر روی موارد بیشتر پیدا کنند، مفید خواهد بود)

🔸 این از ابتدا پروژه محور و عملی خواهد بود و مباحث تئوری در لابلای موارد عملی تدریس خواهند شد

🔹در این دوره Best practice ها، نکات حاصل از تجربه عملی در پروژه های مختلف، کدنویسی اصولی و معماری استاندار پروژه تدریس خواهند شد

🔸 فیلم آموزش این دوره، ضبط و در اختیار دانشجویان قرار خواهد گرفت

🔹در پایان دوره، دانشجویان می توانند به مدت یک ماه از «پرسش و پاسخ کامل به همراه AnyDesk توسط مدرس» استفاده کنند

🔸ظرفیت دوره محدود (۵ نفر) بوده و از اوایل ماه آینده (آبان) شروع خواهند شد. ضمنا دوره حضوری بوده و در تهران برگذار خواهد شد

جهت رزرو و اطلاعات بیشتر میتوانید با بنده در ارتباط باشید
🔰@mj_ebrahimi
محمد جواد ابراهیمی
DotNetZoom pinned «بنا بر درخواست بعضی از دوستان مبنی بر آموزش Asp Core تصمیم دارم یک دوره #تدریس نیمه خصوصی قیمت مناسب با موضوع «آموزش Asp Core مقدماتی تا پیشرفته» برگزار کنم 🔹 کلاس در ۹ جلسه ۳ ساعته (مجموعا ۲۷ ساعت) در طول ۳ هفته برگزار خواهد شد (البته طول دوره، روز و…»
#Announcement #Released
نسخه Preview 3 منتشر شد
شامل :
.NET Core 2.2 Preview 3 (Runtime)
.NET Core SDK 2.2.100 Preview 3 (SDK)
Asp .Net Core 2.2 Preview 3
Entity Framework Core 2.2 Preview 3

🔰 توضیحات بیشتر :
https://github.com/dotnet/core/blob/master/release-notes/2.2/preview/2.2.0-preview3.md
🔰 امکانات جدید و بهبود های 2.2 Preview 3 AspCore
https://blogs.msdn.microsoft.com/webdev/2018/10/17/asp-net-core-2-2-0-preview3-now-available/
🔰 امکانات جدید و بهبود های EF Core 2.2 Preview 3
https://blogs.msdn.microsoft.com/dotnet/2018/10/17/announcing-entity-framework-core-2-2-preview-3/

لینک دانلود NET Core (SDK) 2.2.100 Preview 3 :
64x : https://bit.ly/2yrInB7
86x : https://bit.ly/2yYmIQP

نسخه SDK شامل NET Core , ASP .NET Core runtime می باشد و نیاز به نصب جداگانه آنها نمی باشد.
جهت استفاده از این نسخه باید Visual Studio 15.9 Preview 3 به بالا داشته باشید که می توانید توسط Visual Stuido Installer آن را اپدیت کنید
_______________
@IranAspMvc
#Issues
و اما لیست Issue های و مشکلات AspNet Core , EF Core 2.2 Preview 3 در لینک زیر قابل مشاهده است
https://github.com/aspnet/Announcements/issues/323

از مهم ترین Issue های کشف شده تاکنون می توان به مورد زیر اشاره کرد :

⭕️ وقتی یک پروژه MVC یا Razor Pages جدید ایجاد کنید فایل استایل bootstrap.min.css در سمت کلاینت رندر نمی شود، در صورتی که در فایل Layout وجود دارد!
دلیل این مشکل، نقص در integrity check این فایل است و با افزودن خاصیت
crossorigin="anonymous"
به تگ <link> این CSS، برطرف خواهد شد.

⭕️ و یا استثنای NullReferenceException به هنگام کار با IHttpClientFactory که با تنظیم کردن خاصیت زیر قابل حل می باشد.
HttpClientFactoryOptions.HandlerLifetime = Timeout.InfiniteTimespan;

🔰 با نصب نسخه SDK جدید، نسخه پیش فرضی که پروژه شما بر روی آن اجرا می شود، آخرین ورژن خواهد بود
اگر با آخرین ورژن (که درحال حاضر Previwe 3 نسخه 2.2 است) مشکل پیدا کردید، (مثل همین موارد بالا) می توانید با افزودن فایل global.json به سلوشن خود، ورژن SDK پروژه خود را تغییر دهید مانند زیر
{
"sdk": {
"version": "2.1.300"
}
}

توضیحات بیشتر :
https://docs.microsoft.com/en-us/dotnet/core/tools/global-json
___________
@IranAspMvc
به سلامتی #RedHat هم رفت خونه بخت!
شرکت IBM شرکت Red Hat را 34 میلیارد دلار خرید.
https://read.bi/2zdaZh8
___________
@IranAspMvc
#News #NetCore3
ماکروسافت اعلام کرد ASP NET Core 3.0 دیگر از Net Framework Full پشتیبانی نخواهد کرد
https://bit.ly/2zgCiqR
___________
@IranAspMvc
یکی از امکانات Angular 7، ویژگی Virtual Scrolling می‌باشد. در صورتیکه شما قصد داشته باشید یک لیست بزرگ از المنت‌ها (مثلا 1000 آیتم) را بارگذاری کنید، این‌کار می‌تواند بر روی کارآیی برنامه‌ی شما تاثیر بگذارد .
می تواند برای بارگذاری تنها بخش‌های قابل مشاهده‌ از یک لیست (مثلا 10 آیتم)، بر روی صفحه نمایش استفاده شود و همچنین تنها آیتم‌هایی Render خواهند شد که می‌تواند آن‌ها را در صفحه نمایش جا دهد. اگر لیست بارگذاری شده را اسکرول کنیم، در این حالت المنت‌ها در DOM به صورت پویا load و unload می‌شوند.

آموزش Virtual Scrolling در Angular 7 :
https://www.dotnettips.info/post/2939
لینک Demo :
https://stackblitz.com/edit/angular-jnjms3
___________
@IranAspMvc
https://bit.ly/2PEJSpr
بررسی و Navigate کردن بین کد های داخل Github مثل همیشه یک دردسر بوده و به راحتی امکان پذیر نیست، چرا که مانند یک IDE، رفرنس بین کدها مشخص نیست یا مثلا گزینه ای مانند Go to Definition وجود ندارد که بتوان محل تعریف یک متد را که در جایی درگیر استفاده شده است، یافت؛ به همین منوال برای یافتن کلاس هایی که یک Interface را Implement کرده اند و یا پیدا کردن کد های کلاسی که کلاس جاری از آن ارث بری کرده است
در این موارد تنها راه چاره، سرچ کردن نام متد یا کلاس درریپازیتوری Github است و سپس روبرو شدن با حجم انبوهی از کد ها که متن جستجو شده در آنها به کار رفته به مانند پیدا کردن "سوزن در گاه دون" است

افزونه Sourcegraph ابزاریست که قابلیت intelligence را به کد های Github شما میدهد و توسط آن میتوانید 3 عمل زیر را به راحتی انجام دهید
1- Go to Definition : یافتن کد تعریف کد مربوطه
2- Find References : یافتن تمام صفحاتی که کد مربوطه در آنجا استفاده شده است
3- Find Implementations : یافتن تمام پیاده سازی های کد(مثلا interface) مربوطه

* این افزونه از زبان های مختلفی مانند JavaScript, TypeScript, Python, Java, Go, ... پشتیبانی میکند ولی متاسفانه از زبان C# پشتیبانی نکرده و در مورد ریپازیتوری های C# کمکی به ما نمیکند

لینک دانلود افزونه Chrome:
https://chrome.google.com/webstore/detail/sourcegraph/dgjhfomjieaadpoljlnidmbgkdffpack
_______________
@IranAspMvc
DotNetZoom
https://bit.ly/2PEJSpr بررسی و Navigate کردن بین کد های داخل Github مثل همیشه یک دردسر بوده و به راحتی امکان پذیر نیست، چرا که مانند یک IDE، رفرنس بین کدها مشخص نیست یا مثلا گزینه ای مانند Go to Definition وجود ندارد که بتوان محل تعریف یک متد را که در جایی…
در ادامه پست قبلی به معرفی ابزاری برای Navigate/Browse کردن بین کد های C# می پردازیم

ابزار SourceBrowser ابزارییست برای راحت سازی Navigate کردن بین کد های C# که یک Solution سی شارپی یا VB.Net ایی را میگیرد و فایل های استاتیک Html ایی تولید می کند که حاوی کد های سلوشن شماست و قابل Navigate کردن بین کد هاست
اگر هنوز متوجه طرز کار آن نشده اید بهتر است سایت های زیر را که خروجی و حاصل این ابزار است را مشاهده کنید :

1- https://referencesource.microsoft.com (.NET Framework source online)
2- https://source.roslyn.io (Roslyn source online)
3- https://source.dot.net (.NET Core source online)
4- https://aspnetsource.azurewebsites.net (unofficial ASP.NET Core 1.0 source)

این ابزار بیشتر برای کسانی مفید است که کتابخانه یا فریمورک سی شارپی دارند و قصد دارند سورس کد خود را جهت راحتی بیشتر در Browse کردن در اختیار عموم قرار دهند

لینک ریپازیتوری و توضیحات بیشتر :
https://github.com/KirillOsenkov/SourceBrowser
_______________
@IranAspMvc
الگوی Repository و Unit Of Work روی EF؛ خوب یا بد؟!
https://bit.ly/2D9Bk3k

🔰 الگوی Repository پیشنهاد می کنه لایه ی واسطی بین لایه بیزینس/منطق برنامه و لایه دسترسی به دیتابیس ایجاد بشه و کد های لازم برای انجام عملیات روی دیتابیس داخل اون نوشته بشه. این لایه نحوه دسترسی به پایگاه داده را از لایه های بالایی پنهان می کنه و لایه های بالایی برای اجرای دستورات و یا فراخوانی داده ها باید از طریق این لایه درخواست های خودشون رو مطرح کنند.
درنتیجه برای جداسازی و ایزوله کردن نحوه دسترسی به داده، اون ها رو داخل Repository می میگذارند و لایه های بالایی بدون درگیر شدن با جزئیات نحوه دسترسی به داده ها، فقط متد های ریپازیتوری رو فراخوانی می کنند
در این الگو برای هر یک از Domain Model (کلاس های معادل جداولمون) نیاز هست تا یک کلاس Repository جدا ساخته شود و این مخزن مسئولیت ساخت کوئری های مرتبط را به عهده خواهد گرفت.

🔰 الگوی Unit Of Work هم یکی از الگوی های رایج هست و هدفش اینه که، چندین عملیات در قالب یک درخواست و یک Transaction روی دیتابیس اعمال بشه؛ نه اینکه به ازای هر تغییر و هر بار افزودن و حذف داده ها، بلافاصله و تک به تک، داده ها را به سمت پایگاه داده ارسال کنیم. چرا که این امر هم موجب کاهش کارایی و مصرف منابع خواهد شد و هم ممکن است در حین ثبت داده ها ناگهان خطایی رخ دهد و باقی تغییرات در پایگاه داده منعکس نشوند و این یعنی تراکنش‌های ناموفق یا پاره ای (partially-executed) که نهایتا به یکپارچگی و صحت داده‌ها صدمه می‌زند.

جالبه بدونین Entity Framework یک پیاده سازی کامل از این 2 الگو هست چرا که هم جزئیات و فرایند اجرا کوئری و عملیات دیتابیسی را داخل DbSet های Context متمرکز کرده (مانند Repositoy)
و هم توسط مکانیزم ChangeTracker، تمام عملیات لازم (افزودن، اپدیت اشیای ویرایش شده و یا حذف شده و...) رو توسط متد SaveChanges به صورت یک جا روی دیتابیس اعمال میکنه (مانند UOW)
حتی در داکیومنت خود ماکروسافت نیز، کلاس DbContext رو اینگونه معرفی میکنه:
A DbContext instance represents a combination of the Unit Of Work and Repository patterns ...

حال اینکه بعضی ها اصرار دارند روی EF (که خود پیاده سازی کاملی از Repository و UnitOfWork هست) یک بار دیگه این 2 الگو رو پیاده سازی کنند، یک باور اشتباه هست، چرا که درک صحیح و کاملی از این الگو ها و EF ندارند.

🔰 ولی چرا استفاده از الگوی Repository و Unit Of Work روی EF روش مناسبی نیست؟

1️⃣ انتزاع روی انتزاع اضافه کاریه!
همون طور که قبلا گفتیم EF پیاده سازی کاملی از این دو الگو هست و افزودن این 2 الگو روی آن، "دوباره کاری" ایی هست و اصلاحا بهش میگن انتزاعی روی انتزاع دیگر (Abstraction of an Abstraction) که تازه باعث میشه یه سری از قابلیت های EF رو از دست بدیم چرا که پیاده سازی ما به کاملی و یکپارچگی خود EF نیست! و عملا قابلیت های "خاص و ویژه" EF رو از دست میدیم.

2️⃣ جایگزین کردن ORM همیشه معقول نیست!
یکی دیگه از دلایلی که برنامه نویسان برای استفاده از Repository میارند اینه که ما میتونیم براحتی ORM پروژه رو تغییر بدیم.
وقتی شما از یک اینترفیس IRepository تو کل پروژتون استفاده میکنین باعث میشه بتونین کلاس پیاده سازی کننده این اینترفیس رو با یک کلاس دیگه (که همین اینترفیس IRepository رو پیاده سازی کرده) جایگزین کنین؛ مثلا یک بار میشه اون رو توسط EF پیاده سازی کنین و بار دیگه توسط یک ORM دیگه (مثلNHibernate) و چون هر دو اینها یک اینترفیس مشترک (IRepository) رو پیاده سازی کرده اند می توان بدون تغییر در کد ها، براحتی یکی را جایگزین دیگری کرد. (البته در واقع این مزیت نه به لطف Repository، بلکه به لطف استفاده از Interface به جای یک کلاس مشخص به دست میاد)
نکته مهم اینه که این مزیت زمانی مفیده که احتمال میدین ORM پروژه تغییر کنه، در غیر این صورت الکی خودتون رو به دردسر انداختین.
به شخصه توی ده ها پروژه ای که انجام دادم هیچ موقع ندیدم ORM یه پروژه عوض بشه، ولی همیشه دردسر این روش رو داریم به جون میخریم و نهایتا چیزی به جز پیچیده تر شدن کد ها و کمتر شدن خوانایی اونها و کند شدن سرعت توسعه، چیز خاصی نصیبمون نمیشه.

ادامه در پست بعد 👇
@IranAspMvc