چهارگانه ی ACID
هر ترانکش دیتابیس باید از 4 اصل ACID پیروی کند تا داده های آن قابل اعتماد باشد. بیشتر دیتابیس های رابطه ای بر مبنای ACID کار میکنند.
در Atomicity داده ها باید از قانون همه یا هیچ پیروی کنند. یعنی یا تمام فیلدها درون جدول ذخیره میشود یا هیچکدام ذخیره نمیشود.
در Consistency دیتابیس بعد از هر تراکنش از یک حالت معتبر به یک حالت معتبر جدید میرود. مواردی مانند نوع فیلدها ، محدودیت های اعمال شده بر آن و رابطه ی بین جداول همیشه باید رعایت شود.
در Isolation هر تراکنش برای خود یکتا هست و به ذخیره شدن و یا نشدن سایر تراکنش ها مربوط نیست. اگر چندین تراکنش همزمان اعمال شود هیچکدام نباید روی دیگری اثر گذار باشد.
در Durability اطلاعات هر تراکنش بعد از آنکه در دیتابیس اعمال شد باید ذخیره شود. در واقع هروقت دیتابیس نتیجه ی تراکنش را بر میگرداند برنامه نویس میداند اطلاعات جایی در دیسک ذخیره شده است و در آینده ی دور هم قابل دسترسی است.
دیتابیس هایی که از این قوانین پیروی نمیکنند سرعت بیشتری دارند اما اعتماد پذیری کمتری دارند. مثلا دیتابیس Redis از Durability پیروی نمیکند و 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
#مهدی_کرامتی
امروز ویژوال استودیو 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
گیتهاب حساب کاربران ایرانی که از سرویس پولی استفاده میکردند مسدود کرده است. همچنین محدودیت هایی برای سرویس های رایگان اعمال کرده است.
در تازه ترین تغییرات دسترسی کاربران ایرانی به بخش ایجاد پروژه های خصوصی همچنین GitHub Pages قطع شده است.
مدتی پیش ایجاد پروژه های خصوصی با تعداد سه نفر در گیتهاب برای همه رایگان شد که ظاهرا با شروع اجرای تحریم های آمریکا از دسترس ایرانیان خارج شده است.
البته این تغییرات هنوز روی همه ی حسابهای کاربری اعمال نشده اما پیش بینی میشود در روزهای آینده این اتفاق روی دهد.
به نظر میرسد به زودی فقط ایجاد پروژه های عمومی برای ایرانیان ممکن باشد.
توضیحات بیشتر در بلاگ حامد سعیدی:
https://tinyurl.com/codehaks-github
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
خب همونطور که قبلا هشدار داده بودیم. بلاخره گیتهاب حرفشو عملی کرد و تحریم اکانت هایی ایرانی رو عملی کرد.
اگه فقط ریپو های عمومی (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
Telegram
Attach Files
آشنایی با Data Race
حالت Data Race زمانی روی میدهد که در یک Proccess دو یا چند Thread به محل مشترکی از حافظه همزمان دسترسی داشته باشند. مشکل زمانی پیش می آید که حداقل یکی از Thread مقدار ذخیره شده در حافظه را تغییر دهد در حالی که Thread دیگر در حال خواندن آن است.
در سی شارپ یکی از ساده ترین روش ها برای حل مشکل Data Race استفاده از lock است.کلمه ی کلیدی lock باعث میشود در یک لحظه ی واحد فقط یک Thread قادر به تغییر حافظه باشد.البته این روش بهینه نیست چون برنامه دیگر به صورت موازی اجرا نمیشود و Thread ها به نوبت می توانند با حافظه کار کنند. همچنین مشکلات دیگری از جمله dead-lock را به همراه دارد.
مشکل Race Condtion در نتیجه ی Data Race بوجود می آید و عامل تخریب داده های درون حافظه و عمکرد عجیب برنامه میشود. تا جایی که برنامه از کار می افتد.
خطای Race Conditon در سیستم آلارم باعث خاموشی سراسری آمریکای شمالی در سال 2003 شده است.
حالت 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 درصد سریعترین فریم ورک است و اختلاف ناچیزی با صدر جدول دارد.
در این دور ASP NET Core با سه پله سقوط در ردیف 10م حالت Plaintext قرار گرفت. هر چند از نظر RPS تغییر محسوسی نداشته است اما وضعیت آماری چند فریم ورک دیگر کمی بهتر شده است.
این دور روی نسخه ی 2.2 از ASP NET Core انجام شده است و انتظار میرود با آمدن نسخه ی 3.0 نتایج بهتری بدست آید.
فریم ورک ASP NET Core همچنان 99 درصد سریعترین فریم ورک است و اختلاف ناچیزی با صدر جدول دارد.
آشنایی با HashSet
کلاس HashSet برای نگه داری و جستجوی آرایه از اطلاعات را با پرفورمنس بالا استفاده میشود. این کالکشن مقدار تکراری نمیگیرد و ترتیب ندارد.
این کالکشن از مکانیزم هش به روش Separate Chaining استفاده میکند به این معنی که برای هر آیتم یک کد هش تولید میکند و آن را در ظرفهای جدا قرار میدهد. با این روش چک کردن آیتم تکراری سریعتر میشود و از Collision جلوگیری میشد.
در این تست لیستی شامل 20 هزار رکورد پرداخت چک شده و قرار است تعداد خریداران یکتا را بدست آوریم. مشاهده می کنید که در HashSet تقریبا 9.5 میلی ثانیه طول کشیده در حالی که List دوبرابر بیشتر زمان برده است.
از HashSet میتوان برای پردازش اطلاعات غیر تکراری با پرفورمنس بالا استفاده کرد.
کلاس HashSet برای نگه داری و جستجوی آرایه از اطلاعات را با پرفورمنس بالا استفاده میشود. این کالکشن مقدار تکراری نمیگیرد و ترتیب ندارد.
این کالکشن از مکانیزم هش به روش Separate Chaining استفاده میکند به این معنی که برای هر آیتم یک کد هش تولید میکند و آن را در ظرفهای جدا قرار میدهد. با این روش چک کردن آیتم تکراری سریعتر میشود و از Collision جلوگیری میشد.
در این تست لیستی شامل 20 هزار رکورد پرداخت چک شده و قرار است تعداد خریداران یکتا را بدست آوریم. مشاهده می کنید که در HashSet تقریبا 9.5 میلی ثانیه طول کشیده در حالی که List دوبرابر بیشتر زمان برده است.
از HashSet میتوان برای پردازش اطلاعات غیر تکراری با پرفورمنس بالا استفاده کرد.
جنگ ابری
گزارش مالی مایکروسافت نشان میدهد این شرکت در سال گذشته 38 میلیارد دلار از خدمات ابری سود داشته است.
این در حالی است که سرویس وب آمازون 25.6 میلیارد دلار بوده است و گوگل هم تنها با 8 میلیارد دلار در رتبه ی سوم قرار گرفته است.
سیاستهای جدید مایکروسافت در ارائه خدمات اوپن سورس و پذیرفتن لینکوس به عنوان بخش از اکو سیستم خدمات رسانی ابری باعث جذب مشتریان زیادی شده است.
مایکروسافت در حال حاضر با 56 دیتاسنتر در سراسر دنیا خدمات ابری Azure را عرضه می کند. همچنین تنها شرکتی است که در آفریقا و خاور میانه دیتاسنتر دارد.
منبع : فوربس
گزارش مالی مایکروسافت نشان میدهد این شرکت در سال گذشته 38 میلیارد دلار از خدمات ابری سود داشته است.
این در حالی است که سرویس وب آمازون 25.6 میلیارد دلار بوده است و گوگل هم تنها با 8 میلیارد دلار در رتبه ی سوم قرار گرفته است.
سیاستهای جدید مایکروسافت در ارائه خدمات اوپن سورس و پذیرفتن لینکوس به عنوان بخش از اکو سیستم خدمات رسانی ابری باعث جذب مشتریان زیادی شده است.
مایکروسافت در حال حاضر با 56 دیتاسنتر در سراسر دنیا خدمات ابری Azure را عرضه می کند. همچنین تنها شرکتی است که در آفریقا و خاور میانه دیتاسنتر دارد.
منبع : فوربس
آشنایی با Protocol Buffers
در واقع protobuf توسط گوگل ابداع شده و مشابه JSON فرمتی برای انتقال اطلاعات بین کلاینت و سرور است. با این فرق اساسی که داده ها به صورت باینری جابجا میشوند و کم حجمترند.
خاصیت دیگر Protobuf داشتن type است. هر فیلد نوع مشخصی دارد که کمک میکند زبانهای استاتیک تایپ راحت تر داده های دریافتی را پردازش کنند.
فرمت Protobuf بر عکس JSON برای انسان قابل خواندن نیست. گوگل برای زبانهایی مانند سی شارپ و جاوا ابزار خواندن این فرمت را تهیه کرده است.
این فرمت برای انتقال اطلاعات بین سرور و مرورگر (جاوا اسکریپت و SPA) مناسب نیست چون مرورگر ها با JSON به صورت شهروند درجه اول برخورد میکنند و با پرفورمنس بالایی میخوانند که با وجود حجم بیشتر داده در مقایسه با Protobuf سریعتر است.
کاربرد اصلی Protobuf در gRPC است. جایی که دو سرویس به صورت مستقیم با هم ارتباط دارند و لازم است درخواستهای زیادی در کوتاهترین زمان و با کمترین حجم جابجا شود.
در واقع protobuf توسط گوگل ابداع شده و مشابه JSON فرمتی برای انتقال اطلاعات بین کلاینت و سرور است. با این فرق اساسی که داده ها به صورت باینری جابجا میشوند و کم حجمترند.
خاصیت دیگر Protobuf داشتن type است. هر فیلد نوع مشخصی دارد که کمک میکند زبانهای استاتیک تایپ راحت تر داده های دریافتی را پردازش کنند.
فرمت Protobuf بر عکس JSON برای انسان قابل خواندن نیست. گوگل برای زبانهایی مانند سی شارپ و جاوا ابزار خواندن این فرمت را تهیه کرده است.
این فرمت برای انتقال اطلاعات بین سرور و مرورگر (جاوا اسکریپت و SPA) مناسب نیست چون مرورگر ها با JSON به صورت شهروند درجه اول برخورد میکنند و با پرفورمنس بالایی میخوانند که با وجود حجم بیشتر داده در مقایسه با Protobuf سریعتر است.
کاربرد اصلی Protobuf در gRPC است. جایی که دو سرویس به صورت مستقیم با هم ارتباط دارند و لازم است درخواستهای زیادی در کوتاهترین زمان و با کمترین حجم جابجا شود.
Forwarded from کدهک
در این ویدیو 4 روش مختلف استخراج و فیلتر کردن داده های دیتابیس با استفاده از LINQ و Entity framework بررسی می کنیم و آنها را از نظر کارایی مقایسه می کنیم.
قصد داریم با استفاده از Expression Tree ها و Extension Method ها کدهای بهتری بنویسیم.
https://tinyurl.com/cdhks-linq-q
قصد داریم با استفاده از Expression Tree ها و Extension Method ها کدهای بهتری بنویسیم.
https://tinyurl.com/cdhks-linq-q
چگونه سرور دانلود بسازیم؟
آشنایی با روشهای دانلود فایل در ASP NET Core
https://tinyurl.com/cdhk-dwnserv
آشنایی با روشهای دانلود فایل در ASP NET Core
https://tinyurl.com/cdhk-dwnserv
آشنایی با NGEN
اگر مرحله راه اندازی و شروع به کار برنامه ی شما کند است با استفاده از Native Image Generator می توانید کدهای تولید شده توسط JIT را کش کنید و در یک فایل جدا نگه داری کنید.
با این تکنیک مرحله ایجاد کد اسمبلی IL حذف می شود و سرعت بارگذاری برنامه افزایش پیدا میکند.
کدی که توسط NGEN تولید میشود Native نیست و همچنان به صورت Managed روی CLR اجرا میشود.
اگر فایل اصلی پروژه ی شما MyApp.dll نام دارد NGEN فایلی با نام MyApp.ni.dll در کنارش ایجاد میکند که شامل محتوای کش شده ی Native می شود. هنگام راه اندازی وجود این فایل توسط CLR چک میشود و در صورت وجود JIT از روی آن بارگذاری میشود.
زمانی که برنامه ی شما چند پروسس دارد که با هم منابع مشترک دارند استفاده از NGEN می تواند حافظه ی مصرفی را بهینه کند.
از آنجایی که کد شما قبلا JIT شده با هر تغییری در سورس باید مجدد کش آن باز سازی شود. همچنین در مواردی ممکن از حجم برنامه افزایش چشمگیری پیدا کند.
اگر مرحله راه اندازی و شروع به کار برنامه ی شما کند است با استفاده از Native Image Generator می توانید کدهای تولید شده توسط JIT را کش کنید و در یک فایل جدا نگه داری کنید.
با این تکنیک مرحله ایجاد کد اسمبلی IL حذف می شود و سرعت بارگذاری برنامه افزایش پیدا میکند.
کدی که توسط NGEN تولید میشود Native نیست و همچنان به صورت Managed روی CLR اجرا میشود.
اگر فایل اصلی پروژه ی شما MyApp.dll نام دارد NGEN فایلی با نام MyApp.ni.dll در کنارش ایجاد میکند که شامل محتوای کش شده ی Native می شود. هنگام راه اندازی وجود این فایل توسط CLR چک میشود و در صورت وجود JIT از روی آن بارگذاری میشود.
زمانی که برنامه ی شما چند پروسس دارد که با هم منابع مشترک دارند استفاده از NGEN می تواند حافظه ی مصرفی را بهینه کند.
از آنجایی که کد شما قبلا JIT شده با هر تغییری در سورس باید مجدد کش آن باز سازی شود. همچنین در مواردی ممکن از حجم برنامه افزایش چشمگیری پیدا کند.
آشنایی با BaaS
ابزار BaaS یا Backend as a service به خدماتی گفته میشود که کدهای سمت سرور را به صورت سرویس عرضه میکند.
بسیاری از اپ های موبایل یا SPA نیاز به ذخیره سازی اطلاعات در سرور مرکزی دارند. مشکل اصلی این است که باید پیاده سازی این وب سرویس یک کار تخصصی است و باید توسط برنامه نویس Back-end انجام شود.
در بسیاری از موارد وب سرویس کار زیادی انجام نمی دهد. هدف اصلی استفاده از وب سرویس ذخیره سازی اطلاعات کاربر یا تشخیص هویت آن است. اما در این میان هزینه ی تهیه ی سرور ، پیاده سازی وب سرویس و بروز نگاه داشتن آن کار مشکلی است.
در اینجا BaaS وارد میشود. این ابزار یک پنل مدیریتی در اختیار برنامه نویس Front-end یا موبایل قرار میدهد که سیستمهای تشخیص هویت و ذخیره سازی اطلاعات در آن قبلا پیاده شده است.
برنامه نویس موبایل با SDK دیتابیس خود را میسازد و یک وب سرویس آماده تحویل میگیرد بدون آنکه برای آن کدی بنویسد. همینطور امکان تغییر یا انجام تنظمیمات در دیتابیس از طریق API نیز وجود دارد.
ابزار BaaS یا Backend as a service به خدماتی گفته میشود که کدهای سمت سرور را به صورت سرویس عرضه میکند.
بسیاری از اپ های موبایل یا SPA نیاز به ذخیره سازی اطلاعات در سرور مرکزی دارند. مشکل اصلی این است که باید پیاده سازی این وب سرویس یک کار تخصصی است و باید توسط برنامه نویس Back-end انجام شود.
در بسیاری از موارد وب سرویس کار زیادی انجام نمی دهد. هدف اصلی استفاده از وب سرویس ذخیره سازی اطلاعات کاربر یا تشخیص هویت آن است. اما در این میان هزینه ی تهیه ی سرور ، پیاده سازی وب سرویس و بروز نگاه داشتن آن کار مشکلی است.
در اینجا BaaS وارد میشود. این ابزار یک پنل مدیریتی در اختیار برنامه نویس Front-end یا موبایل قرار میدهد که سیستمهای تشخیص هویت و ذخیره سازی اطلاعات در آن قبلا پیاده شده است.
برنامه نویس موبایل با SDK دیتابیس خود را میسازد و یک وب سرویس آماده تحویل میگیرد بدون آنکه برای آن کدی بنویسد. همینطور امکان تغییر یا انجام تنظمیمات در دیتابیس از طریق API نیز وجود دارد.
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
❇️ در آستانه انتشار نهایی 3 NET Core.
هم اکنون NET Core. 3 تا نسخه پیش نمایش 8 خودش پیش رفته و تقریبا در آستانه انتشار نهاییش هست
تیم NET Core. گفته در حال حاضر قرار نیست دیگه فیچر جدیدی اضافه کنن و بیشتر تمرکزشون رو روی Bugfix و Stability (پایداری) گذاشتن
ماکروسافت هم گفته نسخه های پیش نمایش 7 و 8 رو پشتیبانی رسمی (Go Live) میکنه و میتونین ازشون در Production استفاده کنید. ولی پیشنهاد میشه قبل از استفاده از اون تست های لازم رو انجام بدین
ماکروسافت تاریخ انتشار نهایی NET Core 3. رو ماه سپتامبر (ماه آینده) وعده داده ولی با توجه به اینکه هنوز RC (نسخه Release Condidate) اون منتشر نشده بعید میدونم به سپتامبر برسه و احتمالا میره واسه اکتبر (2 ماه آینده)
@IranAspMvc
هم اکنون NET Core. 3 تا نسخه پیش نمایش 8 خودش پیش رفته و تقریبا در آستانه انتشار نهاییش هست
تیم NET Core. گفته در حال حاضر قرار نیست دیگه فیچر جدیدی اضافه کنن و بیشتر تمرکزشون رو روی Bugfix و Stability (پایداری) گذاشتن
ماکروسافت هم گفته نسخه های پیش نمایش 7 و 8 رو پشتیبانی رسمی (Go Live) میکنه و میتونین ازشون در Production استفاده کنید. ولی پیشنهاد میشه قبل از استفاده از اون تست های لازم رو انجام بدین
ماکروسافت تاریخ انتشار نهایی NET Core 3. رو ماه سپتامبر (ماه آینده) وعده داده ولی با توجه به اینکه هنوز RC (نسخه Release Condidate) اون منتشر نشده بعید میدونم به سپتامبر برسه و احتمالا میره واسه اکتبر (2 ماه آینده)
@IranAspMvc
آشنایی با Thread Pool
ایجاد کردن Thread جدید فرآیند پر هزینه ای است و لازم است در Kernel و استک تخصیص حافظه صورت گیرد. به دلیل این هزینه ی بالا هیچوقت نباید برای مدیریت درخواستهای مجزا Thread جدید ایجاد کرد.
در اینجا از تکنیک Thread Pool یا استخر Thread استفاده میشود. به این معنی که تعداد زیادی Thread از قبل ساخته شده و آماده ی استفاده قرار می گیرند. در عمل دو نوع Thread درون Thread Pool دات نت وجود دارند :
Worker Thread
I/O Thread
از ترد I/O برای انجامی عملیات های سخت افزاری مانند کار با شبکه و هارد دیسک استفاده میشود که I/O Bound هستند.
ایجاد Threadهای زیاد باعث کمبود حافظه میشود و کم بودن آنها برنامه را کند میکند. ایده آل این است که به تعداد هسته ها Thread داشته باشیم اما در عمل بسیاری از آنها درگیر عملیات های I/O میشوند و هسته بیکار می ماند.
تعداد Thread ها بسته به میزان درخواستها کم و زیاد میشود و برای محاسبه ی آن از الگوریتم Hill Climbing استفاده میشود که Self-Feedback است و خودش را اصلاح میکند. این الگوریتم با کم شدن Throughput تشخیص میدهد که باید Thread بیشتر اضافه شود.
ایجاد کردن Thread جدید فرآیند پر هزینه ای است و لازم است در Kernel و استک تخصیص حافظه صورت گیرد. به دلیل این هزینه ی بالا هیچوقت نباید برای مدیریت درخواستهای مجزا Thread جدید ایجاد کرد.
در اینجا از تکنیک Thread Pool یا استخر Thread استفاده میشود. به این معنی که تعداد زیادی Thread از قبل ساخته شده و آماده ی استفاده قرار می گیرند. در عمل دو نوع Thread درون Thread Pool دات نت وجود دارند :
Worker Thread
I/O Thread
از ترد I/O برای انجامی عملیات های سخت افزاری مانند کار با شبکه و هارد دیسک استفاده میشود که I/O Bound هستند.
ایجاد Threadهای زیاد باعث کمبود حافظه میشود و کم بودن آنها برنامه را کند میکند. ایده آل این است که به تعداد هسته ها Thread داشته باشیم اما در عمل بسیاری از آنها درگیر عملیات های I/O میشوند و هسته بیکار می ماند.
تعداد Thread ها بسته به میزان درخواستها کم و زیاد میشود و برای محاسبه ی آن از الگوریتم Hill Climbing استفاده میشود که Self-Feedback است و خودش را اصلاح میکند. این الگوریتم با کم شدن Throughput تشخیص میدهد که باید Thread بیشتر اضافه شود.
فرق Layer و Tier
در واقع Layer یک مفهوم نرم افزاری است و مربوط به سورس کد شما میشود. وقتی برنامه ی خود را از نظر منطقی به چند بخش تقسیم می کنید از برنامه نویسی چند لایه یا N-Layer استفاده می کنید.
منظور از Tier تقسیم بندی برنامه به صورت فیزیکی است. شما می توانید یک برنامه ی چند لایه داشته باشید اما تنها روی یک Tier آن را اجرا کنید. اگر همه ی اجزای پروژه ی شما تنها درون یک سرور قرار میگیرند برنامه ی شما یک Tier است.
هر گاه کد را به شکلی اجر کنید که بخشی از آن در ماشین دیگری اجرا شود برنامه ی N-Tier دارید.
پیاده سازی برنامه ی N-Tier به مراتب مشکلتر از N-Layer است. مثلا در یک سایت چند لایه که به صورت یک ریدفه اجرا میشود برای برقرار کردن ارتباط با دیتابیس تنها باید از مرز بین پردازش ها عبور کنید اما اگر دیتابیس را به سرور دیگری منتقل کنید باید از طریق شبکه اطلاعات را جابجا کنید که ناپایدارتر و کندتر است و لازم است برای شرایط عدم اتصال یا از کار افتادگی ماشین برنامه ریزی کنید.
برنامه ی های چند ردیفه یا N-Tier انعطاف پذیرترند ،قابلیت پاسخگویی به کاربران بیشتری دارند و راحت تر Scale می شوند.
در واقع Layer یک مفهوم نرم افزاری است و مربوط به سورس کد شما میشود. وقتی برنامه ی خود را از نظر منطقی به چند بخش تقسیم می کنید از برنامه نویسی چند لایه یا N-Layer استفاده می کنید.
منظور از Tier تقسیم بندی برنامه به صورت فیزیکی است. شما می توانید یک برنامه ی چند لایه داشته باشید اما تنها روی یک Tier آن را اجرا کنید. اگر همه ی اجزای پروژه ی شما تنها درون یک سرور قرار میگیرند برنامه ی شما یک Tier است.
هر گاه کد را به شکلی اجر کنید که بخشی از آن در ماشین دیگری اجرا شود برنامه ی N-Tier دارید.
پیاده سازی برنامه ی N-Tier به مراتب مشکلتر از N-Layer است. مثلا در یک سایت چند لایه که به صورت یک ریدفه اجرا میشود برای برقرار کردن ارتباط با دیتابیس تنها باید از مرز بین پردازش ها عبور کنید اما اگر دیتابیس را به سرور دیگری منتقل کنید باید از طریق شبکه اطلاعات را جابجا کنید که ناپایدارتر و کندتر است و لازم است برای شرایط عدم اتصال یا از کار افتادگی ماشین برنامه ریزی کنید.
برنامه ی های چند ردیفه یا N-Tier انعطاف پذیرترند ،قابلیت پاسخگویی به کاربران بیشتری دارند و راحت تر Scale می شوند.
Forwarded from کدهک
Forwarded from کدهک
در این ویدیو نگاهی به Span در سی شارپ 7.3 می اندازیم و این قابلیت جدید که در دات نت core 2.1 به بعد قابل استفاده است را بررسی می کنیم.
https://tinyurl.com/cdhks-span-intro
https://tinyurl.com/cdhks-span-intro
نسخه نهایی NET Core 3.0
به زودی پیش نمایش 9 از فریم ورک NET Core 3.0 عرضه میشود. با تغییر سیستم نام گذاری نسخه های دات نت دیگر نسخه ای با نام RC یا Release Candidate معرفی نمیشود و طبق اعلام مدیر فنی این نسخه به عنوان RC قابل استفاده است. به این معنی که دیگر تغییر بزرگی در راه نیست و Breaking Change نخواهیم داشت.
تیم توسعه ی دات نت در حال حاضر تمرکز اصلی خود را روی Blazor گذاشته و عملا کار زیادی روی ASP انجام نمی دهد.
طبق اعلام مایکروسافت نسخه ی نهایی Net Core 3.0 همزمان با کنفرانس NETConf در 23 سپتامبر رسما عرضه میشود که کمتر از یک ماه دیگه است.
تغییرات بزرگ و مهم نسخه 3.0 شامل اضافه شدن WinForm و WPF به Core است. همچنین Blazor به عنوان Web UI از طریق Web Assembly امکان برنامه نویسی #C در مرورگر را فراهم میکند و می تواند جایگزین خوبی برای جاوااسکریپت باشد.
ماه پیش سورس پروژه دات نت در GitHub به
5.0 تغییر نام داده شد که به این معنی است که کار روی نسخه ی بعدی دات نت شروع شده است.
به زودی پیش نمایش 9 از فریم ورک NET Core 3.0 عرضه میشود. با تغییر سیستم نام گذاری نسخه های دات نت دیگر نسخه ای با نام RC یا Release Candidate معرفی نمیشود و طبق اعلام مدیر فنی این نسخه به عنوان RC قابل استفاده است. به این معنی که دیگر تغییر بزرگی در راه نیست و Breaking Change نخواهیم داشت.
تیم توسعه ی دات نت در حال حاضر تمرکز اصلی خود را روی Blazor گذاشته و عملا کار زیادی روی ASP انجام نمی دهد.
طبق اعلام مایکروسافت نسخه ی نهایی Net Core 3.0 همزمان با کنفرانس NETConf در 23 سپتامبر رسما عرضه میشود که کمتر از یک ماه دیگه است.
تغییرات بزرگ و مهم نسخه 3.0 شامل اضافه شدن WinForm و WPF به Core است. همچنین Blazor به عنوان Web UI از طریق Web Assembly امکان برنامه نویسی #C در مرورگر را فراهم میکند و می تواند جایگزین خوبی برای جاوااسکریپت باشد.
ماه پیش سورس پروژه دات نت در GitHub به
5.0 تغییر نام داده شد که به این معنی است که کار روی نسخه ی بعدی دات نت شروع شده است.