چرا باید به عقب برگردیم و بیشتر و عمیقتر مطالعه کنیم؟
برای یادگیری سی شارپ و ASP NET Core از کجا باید شروع کنیم؟
نگاهی به مصاحبه های فنی و وضعیت بد برنامه نویس ها تازه کار
برای استخدام شدن و مهاجرت لازم نیست میکروسرویس بلد باشید!
https://youtu.be/wfajhkMhdsg
برای یادگیری سی شارپ و ASP NET Core از کجا باید شروع کنیم؟
نگاهی به مصاحبه های فنی و وضعیت بد برنامه نویس ها تازه کار
برای استخدام شدن و مهاجرت لازم نیست میکروسرویس بلد باشید!
https://youtu.be/wfajhkMhdsg
چهارگانه ی ACID
هر ترانکش دیتابیس باید از 4 اصل ACID پیروی کند تا داده های آن قابل اعتماد باشد. بیشتر دیتابیس های رابطه ای بر مبنای ACID کار میکنند.
در Atomicity داده ها باید از قانون همه یا هیچ پیروی کنند. یعنی یا تمام فیلدها درون جدول ذخیره میشود یا هیچکدام ذخیره نمیشود.
در Consistency دیتابیس بعد از هر تراکنش از یک حالت معتبر به یک حالت معتبر جدید برود. مواردی مانند نوع فیلدها ، محدودیت های اعمال شده بر آن و رابطه ی بین جداول همیشه باید رعایت شود.
در Isolation هر تراکنش برای خود یکتا هست و به ذخیره شدن و یا نشدن سایر تراکنش ها مربوط نیست. اگر چندین تراکنش همزمان اعمال شود هیچکدام نباید روی دیگری اثر گذار باشد.
در Durability اطلاعات هر تراکنش بعد از آنکه در دیتابیس اعمال شد باید ذخیره شود. در واقع هروقت دیتابیس نتیجه ی تراکنش را بر میگرداند برنامه نویس میداند اطلاعات جایی در دیسک ذخیره شده است و در آینده ی دور هم قابل دسترسی است.
دیتابیس هایی که از این قوانین پیروی نمیکنند سرعت بیشتری دارند اما اعتماد پذیری کمتری دارند. مثلا دیتابیس Redis از Durability پیروی نمیکند و ACID نیست.
هر ترانکش دیتابیس باید از 4 اصل ACID پیروی کند تا داده های آن قابل اعتماد باشد. بیشتر دیتابیس های رابطه ای بر مبنای ACID کار میکنند.
در Atomicity داده ها باید از قانون همه یا هیچ پیروی کنند. یعنی یا تمام فیلدها درون جدول ذخیره میشود یا هیچکدام ذخیره نمیشود.
در Consistency دیتابیس بعد از هر تراکنش از یک حالت معتبر به یک حالت معتبر جدید برود. مواردی مانند نوع فیلدها ، محدودیت های اعمال شده بر آن و رابطه ی بین جداول همیشه باید رعایت شود.
در Isolation هر تراکنش برای خود یکتا هست و به ذخیره شدن و یا نشدن سایر تراکنش ها مربوط نیست. اگر چندین تراکنش همزمان اعمال شود هیچکدام نباید روی دیگری اثر گذار باشد.
در Durability اطلاعات هر تراکنش بعد از آنکه در دیتابیس اعمال شد باید ذخیره شود. در واقع هروقت دیتابیس نتیجه ی تراکنش را بر میگرداند برنامه نویس میداند اطلاعات جایی در دیسک ذخیره شده است و در آینده ی دور هم قابل دسترسی است.
دیتابیس هایی که از این قوانین پیروی نمیکنند سرعت بیشتری دارند اما اعتماد پذیری کمتری دارند. مثلا دیتابیس Redis از Durability پیروی نمیکند و ACID نیست.
کارگاه آموزشی ASP NET Core 6.0 : گام اول
سر فصلها:
01 - Introduction
02 - Tools
03 - Demo1: First App
04 - Demo2: CRUD App
05 - Razor Pages
06 - Routing
07 - Model Binding & Validation
08 - Tag Helpers
09 - Razor Views & View Components
10 - Demo3: Blog App
مدت دوره : 10 ساعت
هزینه دوره : 399 هزار تومان
شروع دوره : 21 اسفند 1400
پیش نیاز : آشنایی با مبانی سی شارپ
* سطح دوره مقدماتی است و برای افرادی مناسب است که آشنایی کمی با توسعه وب و فریم ورک ASP NET Core دارند.
جهت ثبت نام یا کسب اطلاعات بیشتر با @codehak در تلگرام یا شماره 09380146555 در واتساپ تماس بگیرید
سر فصلها:
01 - Introduction
02 - Tools
03 - Demo1: First App
04 - Demo2: CRUD App
05 - Razor Pages
06 - Routing
07 - Model Binding & Validation
08 - Tag Helpers
09 - Razor Views & View Components
10 - Demo3: Blog App
مدت دوره : 10 ساعت
هزینه دوره : 399 هزار تومان
شروع دوره : 21 اسفند 1400
پیش نیاز : آشنایی با مبانی سی شارپ
* سطح دوره مقدماتی است و برای افرادی مناسب است که آشنایی کمی با توسعه وب و فریم ورک ASP NET Core دارند.
جهت ثبت نام یا کسب اطلاعات بیشتر با @codehak در تلگرام یا شماره 09380146555 در واتساپ تماس بگیرید
Forwarded from Software Philosophy (mohsen)
بالاخره golang هم generic دار شد!
طبق این پروپوزال، امکان استفاده از generic به نسخه Go 1.18 اضافه میشود و در سال 2022 منتشر خواهد شد. اما نکته جالب در مورد تغییر این است بر خلاف بیشتر زبانها که مفهوم جنریک با
نکته جالبتر این است که این چالش هنگامی که Generic به زبان C# در نسخه 2.0 هم اضافه شد وجود داشت و باعث ایجاد یک Breaking Change از نسخه 1.0 به نسخه 2.0 شد. در این پست سعی میکنم این مشکل را با یک مثال از توییتی که Eric Lippert در این مورد زده توضیح بدم.
عبارت زیر را در نظر بگیرید:
این عبارت در نسخه 1.0 و در نسخه 2.0 به دو طریق مختلف ترجمه میشود. که در کد زیر سعی کردم با فاصلهگذاریهای متفاوت آن را نشان دهم.
نکته جالب دیگر این است که generics به عنوان یک ویژگی بسیار مهم، تقریبا در سال 2002 به C# اضافه شد و پس از ۲۰ سال قرار است به زبان Go اضافه شود.
در این مدت برخی طرفداران زبان Go نبود این امکان را این گونه توجیه میکردند که این یک نقص نیست و تصمیم طراحی بوده که این زبان این امکان را نداشته باشد. به هر حال دیگر نیازی به توجیه نیست و از این به بعد هنگام استفاده از زبان قدرتمند Go از generic ها هم میتوانید استفاده کنید.
https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
#مهران_داودی (لینکدین - بلاگ)
کانال تلگرام:
@SoftwarePhilosophy
________
طبق این پروپوزال، امکان استفاده از generic به نسخه Go 1.18 اضافه میشود و در سال 2022 منتشر خواهد شد. اما نکته جالب در مورد تغییر این است بر خلاف بیشتر زبانها که مفهوم جنریک با
Foo<T>
نماش داده میشود، در Go این مفهوم به صورت Foo[T]
نمایش داده خواهد شد و برای این تصمیم هم دلیل جالبی وجود دارد که در این مستند توضیح داده شدهاست.نکته جالبتر این است که این چالش هنگامی که Generic به زبان C# در نسخه 2.0 هم اضافه شد وجود داشت و باعث ایجاد یک Breaking Change از نسخه 1.0 به نسخه 2.0 شد. در این پست سعی میکنم این مشکل را با یک مثال از توییتی که Eric Lippert در این مورد زده توضیح بدم.
عبارت زیر را در نظر بگیرید:
A(B<C,D>E())
این عبارت در نسخه 1.0 و در نسخه 2.0 به دو طریق مختلف ترجمه میشود. که در کد زیر سعی کردم با فاصلهگذاریهای متفاوت آن را نشان دهم.
// C# 1.0همانطور که میبینید در نسخه 1.0، فراخوانی متد
A( B<C , D>E() )
// C# 2.0
A( B<C,D> E() )
A
با دو پارامتر ورودی انجام شده و علامت < و > به عنوان علامتهای کوچکتری و بزرگتری تفسیر شدهاند، اما در نسخه 2.0 این عبارت فراخوانی متد A
با یک ورودی جنریک است.نکته جالب دیگر این است که generics به عنوان یک ویژگی بسیار مهم، تقریبا در سال 2002 به C# اضافه شد و پس از ۲۰ سال قرار است به زبان Go اضافه شود.
در این مدت برخی طرفداران زبان Go نبود این امکان را این گونه توجیه میکردند که این یک نقص نیست و تصمیم طراحی بوده که این زبان این امکان را نداشته باشد. به هر حال دیگر نیازی به توجیه نیست و از این به بعد هنگام استفاده از زبان قدرتمند Go از generic ها هم میتوانید استفاده کنید.
https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
#مهران_داودی (لینکدین - بلاگ)
کانال تلگرام:
@SoftwarePhilosophy
________
Twitter
Eric Lippert
@Max_Horstmann I note that C# parses these potential ambiguities without relying on type information. But that came with two costs: (1) an unbounded lookahead in the parser and (2) a breaking change from 1.0 to 2.0; A(B<C,D>E()) has two arguments to A in…
آشنایی با Marten
با Marten به راحتی دیتابیس های اسنادی ایجاد کنید و در ASP NET Core به کار بگیرید. این کتابخانه از قابلیت های PostgreSQL در کار با JSON استفاده می کند و می تواند جایگزین خوبی برای MongoDb باشید.
https://youtu.be/srp58FtMyL8
با Marten به راحتی دیتابیس های اسنادی ایجاد کنید و در ASP NET Core به کار بگیرید. این کتابخانه از قابلیت های PostgreSQL در کار با JSON استفاده می کند و می تواند جایگزین خوبی برای MongoDb باشید.
https://youtu.be/srp58FtMyL8
آشنایی با PDB
وقتی پروژه دات نت را بیلد می کنید در کنار فایل exe یا dll نهایی یک فایل با پسوند pdb هم ساخته میشود.
این فایل برای دیباگ کردن کد استفاده میشود. وقتی برنامه ی شما با خطا روربرو میشود با کمک PDB شماره خط و عنوان فایلی که در آن خطا روی داده است به کاربر گزارش میشود.
فایل pdb نشانهای کد کامپایل شده را به شماره خط و نام فایل وصل میکند و اطلاعات آن را در غالب یک فایل دیتابیسی ذخیره میکند و از این طریق Visual Studio می تواند خطای پیش آمده در نسخه کامپایل شده ی پروژه را به سورس کد ارتباط دهد و Break Point ها را اعمال کند.
بهتر است این فایل را در کنار پروژه منتشر کنید تا در صورت بروز مشکل رهگیری آن برای شما ساده تر شود.
این فایل در Remote Debugging هم کاربر دارد. شما می توانید وبسایت در حال اجرا روی سرور یا درون Docker را به صورت ریموت دیباگ کنید و در محیط Production تست کنید.
بدون pdb مپ کردن سورس کد کامپایل شده به سورس اصلی ممکن نیست.
وقتی پروژه دات نت را بیلد می کنید در کنار فایل exe یا dll نهایی یک فایل با پسوند pdb هم ساخته میشود.
این فایل برای دیباگ کردن کد استفاده میشود. وقتی برنامه ی شما با خطا روربرو میشود با کمک PDB شماره خط و عنوان فایلی که در آن خطا روی داده است به کاربر گزارش میشود.
فایل pdb نشانهای کد کامپایل شده را به شماره خط و نام فایل وصل میکند و اطلاعات آن را در غالب یک فایل دیتابیسی ذخیره میکند و از این طریق Visual Studio می تواند خطای پیش آمده در نسخه کامپایل شده ی پروژه را به سورس کد ارتباط دهد و Break Point ها را اعمال کند.
بهتر است این فایل را در کنار پروژه منتشر کنید تا در صورت بروز مشکل رهگیری آن برای شما ساده تر شود.
این فایل در Remote Debugging هم کاربر دارد. شما می توانید وبسایت در حال اجرا روی سرور یا درون Docker را به صورت ریموت دیباگ کنید و در محیط Production تست کنید.
بدون pdb مپ کردن سورس کد کامپایل شده به سورس اصلی ممکن نیست.
چگونه State یک اپلیکیشن وب را مدیریت کنیم و ابزاری مشابه Session پیاده کنیم؟
https://youtu.be/OFX5CAK5S-8
https://youtu.be/OFX5CAK5S-8
آموزش RabbitMQ
چگونه با استفاده از RabbitMQ در پس زمینه ایمیل ارسال کنیم؟
آشنایی با Messaging در میکروسرویس ها
https://youtu.be/dbAMHRIj75M
چگونه با استفاده از RabbitMQ در پس زمینه ایمیل ارسال کنیم؟
آشنایی با Messaging در میکروسرویس ها
https://youtu.be/dbAMHRIj75M
از یک پروژه خالی ASP NET Core شروع می کنیم و گام به گام تغییر میدهیم تا تبدیل به Blazor WASM شود.
https://youtu.be/KEXT6GpbcpA
https://youtu.be/KEXT6GpbcpA
قابلیت !! از سی شارپ 11 حذف شد
در نسخه اولیه سی شارپ 11 قابلیت Parameter null-checking اضافه شده بود که امکان می داد null بودن یک پارامتر با دو علامت تعجب چک شود.
اما بعد از بررسی های بیشتر و بازخوردی که از سمت توسعه دهندگان دات نت دریافت شد، تیم توسعه سی شارپ تصمیم گرفت این قابلیت را حذف کند و برنامه ای برای گنجاندن آن در سی شارپ 11 ندارد.
بجای آن پیشنهاد شده است که اگر می خواهید در یک خط پوچ بودن یک پارامتر را چک کنید از دستور زیر استفاده کنید (دات نت 6 به بالا)
ArgumentNullException.ThrowIfNull(myString);
در نسخه اولیه سی شارپ 11 قابلیت Parameter null-checking اضافه شده بود که امکان می داد null بودن یک پارامتر با دو علامت تعجب چک شود.
اما بعد از بررسی های بیشتر و بازخوردی که از سمت توسعه دهندگان دات نت دریافت شد، تیم توسعه سی شارپ تصمیم گرفت این قابلیت را حذف کند و برنامه ای برای گنجاندن آن در سی شارپ 11 ندارد.
بجای آن پیشنهاد شده است که اگر می خواهید در یک خط پوچ بودن یک پارامتر را چک کنید از دستور زیر استفاده کنید (دات نت 6 به بالا)
ArgumentNullException.ThrowIfNull(myString);
اولین نسخه WCF Core منتشر شد.
ابزار WCF با روی کار آمدن دات نت Core از پشتیبانی مایکروسافت خارج شد و تیم دات نت تصمیم گرفت دیگر این پروژه را به نسخه جدید منتقل نکند. اما همزمان سورس آن در گیتهاب قرار گرفت.
مایکروسافت به طور غیر مستقیم در توسعه و پورت کردن WCF به دات نت Core نقش داشته اما بخش اصلی کار توسط توسعه دهندگان مستقل انجام شده است.
حالا تیم توسعه WCF Core اعلام کرده است که نسخه اول این کتابخانه به طور رسمی برای دات نت Core منتشر شده است.
https://github.com/CoreWCF/CoreWCF
ابزار WCF با روی کار آمدن دات نت Core از پشتیبانی مایکروسافت خارج شد و تیم دات نت تصمیم گرفت دیگر این پروژه را به نسخه جدید منتقل نکند. اما همزمان سورس آن در گیتهاب قرار گرفت.
مایکروسافت به طور غیر مستقیم در توسعه و پورت کردن WCF به دات نت Core نقش داشته اما بخش اصلی کار توسط توسعه دهندگان مستقل انجام شده است.
حالا تیم توسعه WCF Core اعلام کرده است که نسخه اول این کتابخانه به طور رسمی برای دات نت Core منتشر شده است.
https://github.com/CoreWCF/CoreWCF
در ASP NET Core ابزار IoC Container از سه روش Scoped و Transient و Singleton پشتیبانی می کند. در این ویدیو اثر استفاده از هرکدام را بررسی می کنیم
https://youtu.be/OhcYyK-w5Mg
https://youtu.be/OhcYyK-w5Mg