آشنایی با JWT
مکانیزم JWT یک روش برای Authorization تحت وب است به این صورت که کلاینت نام کاربری و رمز ورود خود را به سرور ارسال میکند و سرور در صورت درست بودن اطلاعات (Authenticate) کدی با محتوای base64 تولید میکند و آن را به کلاینت ارسال میکند.
از اینجا به بعد کلاینت برای دریافت اطلاعات از سرور فقط کافی است کد (نشان) دریافت شده را درون Header قرار دهد و در هر درخواست به سرور ارسال کند. سرور از روی الگوریتم داده ها را به امضای دیجیتال تبدیل میکند و آن را با امضای نشان مطابقت میدهد.
نشان JWT شامل سه بخش است :
بخش اول Header که نوع الگوریتم تولید امضا را مشخص میکند.
بخش دوم Payload که محتوای اطلاعات شامل نام کاربری، آی دی یا سمت و ... است.
بخش سوم Signature که یک امضای دیجیتال است که از روی الگوریتم رمزگذاری و اطلاعات بخش دوم تهیه میشود تا اطمینان حاصل شود محتوای نشان تغییر نمیکند.
هر بخش با نقطه از هم تفکیک میشود.
این روش گاهی Bearer token هم خوانده میشود.
اطلاعات توکن با فرمت Base64 جابجا میشود و رمزنگاری نشده است و توسط هر کس قابل خواندن است مگر اینکه از روشهایی مثل JWS یا JWE استفاده شود.
مکانیزم JWT یک روش برای Authorization تحت وب است به این صورت که کلاینت نام کاربری و رمز ورود خود را به سرور ارسال میکند و سرور در صورت درست بودن اطلاعات (Authenticate) کدی با محتوای base64 تولید میکند و آن را به کلاینت ارسال میکند.
از اینجا به بعد کلاینت برای دریافت اطلاعات از سرور فقط کافی است کد (نشان) دریافت شده را درون Header قرار دهد و در هر درخواست به سرور ارسال کند. سرور از روی الگوریتم داده ها را به امضای دیجیتال تبدیل میکند و آن را با امضای نشان مطابقت میدهد.
نشان JWT شامل سه بخش است :
بخش اول Header که نوع الگوریتم تولید امضا را مشخص میکند.
بخش دوم Payload که محتوای اطلاعات شامل نام کاربری، آی دی یا سمت و ... است.
بخش سوم Signature که یک امضای دیجیتال است که از روی الگوریتم رمزگذاری و اطلاعات بخش دوم تهیه میشود تا اطمینان حاصل شود محتوای نشان تغییر نمیکند.
هر بخش با نقطه از هم تفکیک میشود.
این روش گاهی Bearer token هم خوانده میشود.
اطلاعات توکن با فرمت Base64 جابجا میشود و رمزنگاری نشده است و توسط هر کس قابل خواندن است مگر اینکه از روشهایی مثل JWS یا JWE استفاده شود.
در ASP NET Core ابزار IoC Container از سه روش Scoped و Transient و Singleton پشتیبانی می کند. در این ویدیو اثر استفاده از هرکدام را بررسی می کنیم
https://youtu.be/OhcYyK-w5Mg
https://youtu.be/OhcYyK-w5Mg
شمارش خودکار ارجاع یا ARC روشی است که در زبانهایی مانند Objective-C و Swift برای مدیریت حافظه استفاده میشود.
در این روش پاکسازی حافظه یک شی زمانی انجام میشود که دیگر هیچ رفرنسی به آن داده نشده باشد.
در GC که #C و Java از آن استفاده میکنند پاکسازی حافظه در بازه های زمانی اتفاق می افتد و باعث مکث در برنامه میشود. همچنین هنگامی که حافظه سیستم پر میشود باید GC در بازه های زمانی کوتاهتر اجرا شود.
در ARC رفرنس های داده شده به شی یا گرفته شده از آن شمارش میشود و زمانی که تعداد آنها به صفر میرسد حافظه شی تخلیه میشود. این روش نیاز به الگوریتم ساده تری دارد و جایی که منابع حافظه محدود است (موبایل) کارایی بیشتری دارد.
اما ARC قادر به مدیریت Reference Cycle نیست یعنی زمانی که شی A فقط به شی B وابسته باشد و برعکس تعداد رفرنس ها هیچوقت صفر نمیشود و نیاز به مکانیزم بیرونی برای تشخیص و پاکسازی بوجود می آید در غیر این صورت Memory Leak پیش می آید.
همچنین دفعات زیاد رفرنس دهی یا حذف رفرنس از شی در ARC غیر بهینه عمل میکند. در حالی که در GC تاثیر نمیگذارد.
در iOS از نسخه 5 به بعد از ARC استفاده میشود.
در این روش پاکسازی حافظه یک شی زمانی انجام میشود که دیگر هیچ رفرنسی به آن داده نشده باشد.
در GC که #C و Java از آن استفاده میکنند پاکسازی حافظه در بازه های زمانی اتفاق می افتد و باعث مکث در برنامه میشود. همچنین هنگامی که حافظه سیستم پر میشود باید GC در بازه های زمانی کوتاهتر اجرا شود.
در ARC رفرنس های داده شده به شی یا گرفته شده از آن شمارش میشود و زمانی که تعداد آنها به صفر میرسد حافظه شی تخلیه میشود. این روش نیاز به الگوریتم ساده تری دارد و جایی که منابع حافظه محدود است (موبایل) کارایی بیشتری دارد.
اما ARC قادر به مدیریت Reference Cycle نیست یعنی زمانی که شی A فقط به شی B وابسته باشد و برعکس تعداد رفرنس ها هیچوقت صفر نمیشود و نیاز به مکانیزم بیرونی برای تشخیص و پاکسازی بوجود می آید در غیر این صورت Memory Leak پیش می آید.
همچنین دفعات زیاد رفرنس دهی یا حذف رفرنس از شی در ARC غیر بهینه عمل میکند. در حالی که در GC تاثیر نمیگذارد.
در iOS از نسخه 5 به بعد از ARC استفاده میشود.
آموزش Collection Binding با Blazor Server و مقایسه آن با Blazor Web Assembly
https://youtu.be/uYT3k0P3rdc
https://youtu.be/uYT3k0P3rdc
در این ویدیو یک Custom TagHelper Attribute تعریف می کنیم که می تواند تگهای HTML درون ویو را پنهان کند.
https://youtu.be/kYdnCIohbIs
https://youtu.be/kYdnCIohbIs
مایکروسافت شرکت تولید کننده بازی Activision Blizzard را به قیمت 68.7 میلیارد دلار خریداری می کند.
این خرید به صورت تمام نقدی انجام میشود و پس از آن مایکروسافت را به سومین شرکت تولید کننده بازی های رایانه ای تبدیل می شود.
بازی هایی مثل Call of Duty و Candy Crush و Warcraft از محصولات Activision Blizzard هستند که به مالکیت مایکروسافت منتقل می شوند.
این بزرگترین گام مایکروسافت برای توسعه شاخه بازی و پلتفرم XBox به شمار میرود.
این خرید به صورت تمام نقدی انجام میشود و پس از آن مایکروسافت را به سومین شرکت تولید کننده بازی های رایانه ای تبدیل می شود.
بازی هایی مثل Call of Duty و Candy Crush و Warcraft از محصولات Activision Blizzard هستند که به مالکیت مایکروسافت منتقل می شوند.
این بزرگترین گام مایکروسافت برای توسعه شاخه بازی و پلتفرم XBox به شمار میرود.
مقایسه حجم دانلود اپلیکیشن های Blazor WebAssembly
اپ هایی که با Blazor WebAssembly پیاده میشوند برای اجرا ابتدا باید به طور کامل روی دستگاه کاربر دانلود شوند. این رفتار مشابه مانند React و Angular است. البته در مورد فریم ورکهای جاوا اسکریپت حجم دانلود به مراتب کمتر است.
حجم فریم ورک دات نت در وب اسمبلی چیزی در حدود 1 مگابایت است.
در حالت Ahead of time compilation که سورس بجای ترجمه در زمان اجرا از قبل کامپایل میشود حجم تا 3 مگابایت افزایش میابد.
استفاده از AOT برای اپ هایی که نیاز به پرفورمنس بالا دارند و CPU-Bound هستند توصیه میشود. مثل بازی ها و برنامه هایی با محاسبات ریاضی سنگین.
استفاده از EF Core حجم اپ های Blazor را به حد چشمگیری افزایش میدهد. پس اگر با دیتابیس کار می کنید (مثل sqlite در مرورگر) کاربر برای استفاده از برنامه شما باید چیزی در حدود 5 مگابایت را دانلود کند. البته این دانلود فقط در اجرای اول نیاز است و در مراحل بعدی کاهش میابید.
اپ هایی که با Blazor WebAssembly پیاده میشوند برای اجرا ابتدا باید به طور کامل روی دستگاه کاربر دانلود شوند. این رفتار مشابه مانند React و Angular است. البته در مورد فریم ورکهای جاوا اسکریپت حجم دانلود به مراتب کمتر است.
حجم فریم ورک دات نت در وب اسمبلی چیزی در حدود 1 مگابایت است.
در حالت Ahead of time compilation که سورس بجای ترجمه در زمان اجرا از قبل کامپایل میشود حجم تا 3 مگابایت افزایش میابد.
استفاده از AOT برای اپ هایی که نیاز به پرفورمنس بالا دارند و CPU-Bound هستند توصیه میشود. مثل بازی ها و برنامه هایی با محاسبات ریاضی سنگین.
استفاده از EF Core حجم اپ های Blazor را به حد چشمگیری افزایش میدهد. پس اگر با دیتابیس کار می کنید (مثل sqlite در مرورگر) کاربر برای استفاده از برنامه شما باید چیزی در حدود 5 مگابایت را دانلود کند. البته این دانلود فقط در اجرای اول نیاز است و در مراحل بعدی کاهش میابید.
آشنایی با LLVM
این پروژه در سال 2000 به عنوان یک تحقیق دانشجویی توس کریس لتنر شروع شد.
در گذشته وقتی میخواستید یک زبان برنامه نویسی جدید بسازید بایدفرآیند خوانش کد و تبدیل آن به زبان ماشین را خودتان پیاده میکردید. مشکل این است که پردازنده های سخت افزاری متعددی در بازار وجود دارد و ساز و کار x86 با ARM و PowerPC و ... متفاوت است.
این مشکلی است که LLVM به خوبی حل می کند. LLVM مجموعه ای از ابزار با API های ماژولار در اختیار شما قرار میدهد تا بتوانید سورس کد را به زبانی میانی یا Intermediate Representation تبدیل کنید. فقط کافی است کدهای مربوط به Front-End را بنویسید و به LLVM ارسال کنید.
این Front-End بخشی از کامپایلر است که وظیفه ی Parse کردن و تشخیص خطاهای Syntax را به عهده دارد. بعد از اینکه کد شما به IR تبدیل شد LLVM می تواند آن را برای انواع مختلف سخت افزار آماده کند و کد ماشین مورد نیاز را تولید کند.
ابزار LLVM کمک کرده فرآیند طراحی زبان های برنامه نویسی جدید آسانتر شود و در نتیجه زبانهایی مثل Kotlin و Rust و Swift در کوتاهترین زمان جای خود را بین برنامه نویسان باز کرده اند.
این پروژه در سال 2000 به عنوان یک تحقیق دانشجویی توس کریس لتنر شروع شد.
در گذشته وقتی میخواستید یک زبان برنامه نویسی جدید بسازید بایدفرآیند خوانش کد و تبدیل آن به زبان ماشین را خودتان پیاده میکردید. مشکل این است که پردازنده های سخت افزاری متعددی در بازار وجود دارد و ساز و کار x86 با ARM و PowerPC و ... متفاوت است.
این مشکلی است که LLVM به خوبی حل می کند. LLVM مجموعه ای از ابزار با API های ماژولار در اختیار شما قرار میدهد تا بتوانید سورس کد را به زبانی میانی یا Intermediate Representation تبدیل کنید. فقط کافی است کدهای مربوط به Front-End را بنویسید و به LLVM ارسال کنید.
این Front-End بخشی از کامپایلر است که وظیفه ی Parse کردن و تشخیص خطاهای Syntax را به عهده دارد. بعد از اینکه کد شما به IR تبدیل شد LLVM می تواند آن را برای انواع مختلف سخت افزار آماده کند و کد ماشین مورد نیاز را تولید کند.
ابزار LLVM کمک کرده فرآیند طراحی زبان های برنامه نویسی جدید آسانتر شود و در نتیجه زبانهایی مثل Kotlin و Rust و Swift در کوتاهترین زمان جای خود را بین برنامه نویسان باز کرده اند.