پرسش | پاسخ |
برای ایجاد یک وبلاگ بلاگری از کجا شروع کنم؟ | با داشتن یک اکانت جی میل، به آدرس زیر مراجعه کرده و هر تعداد که مایل بودید میتوانید وبلاگ ایجاد نمائید: |
قالبهای پیش فرض گوگل چنگی به دل نمیزنند و بود و نبود آنها احساس نمیشود! چه باید کرد؟ | برای تهیه قالبهای فارسی به آدرس زیر مراجعه نمائید: |
تاریخ فارسی را چه کنم؟ | روش دوستان ، روش من |
برنامه نویسم! کدهای من یا نمایش داده نمیشود یا فرمت آنها هنگام ارسال به هم میریزد. چه باید کرد؟ | روش مورد علاقهی من ، روش مایکروسافت (+ و + و افزونهای برای اینکار) |
آخرین نظرات کاربران سایت را چگونه در ستون کناری سایت نمایش دهم؟ | یکی از ویجتهای پرکاربرد گوگل در بلاگر، ویجت فید است. هر بلاگ دارای دو فید مطالب و نظرات است. ویجت فید را اضافه کرده و سپس آدرس فید نظرات سایت خود را به آن معرفی کنید. همیشه آخرین 5 نظر ارسالی را نمایش میدهد. این ویجت کاربردهای قابل توجهی میتواند داشته باشد. |
آمار مراجعان به سایت را باید در کجا ملاحظه کرد؟ | جای پیش فرضی وجود ندارد! یک اکانت Analytics برای خود تهیه کرده و آنرا به سایت اضافه کنید. همچنین پس از آن یک اکانت فید برنر را نیز برای خود تهیه کنید. فیدبرنر اکنون جزیی از گوگل است و پس از معرفی آدرس فید سایت خود به آن، یک آدرس جدید به همراه آیکونی برای نمایش در سایت به شما میدهد که میتوانید تگهای آن تصویر را توسط ویجت html نمایش دهید. همچنین از همین طریق نیز میتوان اشتراک از طریق ایمیل را به وبلاگ اضافه کرد. |
کامنتهای سایت من در بیرون از سایت باز میشوند. چرا؟ | به این مطلب مراجعه نمائید: |
چگونه برای بلاگ خود قسمت ارسال نظرات را تهیه نمایم؟ | من از سرویس فرم ساز Zoho استفاده میکنم که در سال 2008 جزو برترینهای وب شناخته شده بود. بعد از ایجاد فرم خود و دریافت کد مربوطه، یک مطلب جدید را ارسال کنید و در بدنهی آن ، کدی را که Zoho به شما ارائه میدهد قرار دهید. سپس لینک این مطلب را توسط یک ویجت html به کنار سایت اضافه کنید تا همیشه در دسترس باشد. |
- جداسازی نوعها در فایلهای جداگانه که باعث کاهش حجم فایل از طریق اینترنت و بارگزاری حجم کمتر در حافظه میشوند.
- استفاده
از فایلهای منبع و دادهها در اسمبلی: فرض کنید نیاز به محاسبهی اطلاعات بیمه دارید و برای این کار به اطلاعات داخل یک جدول آماری احتیاج
دارید. این جدول آماری میتواند یک فایل متنی ساده یا یک صفحهی گسترده مثل
اکسل یا در قالب ورد و هر چیز دیگری باشد که به جای embed شدن این جداول در
سورس کد برنامه، آنها را با استفاده از ابزاری مثل Assembly Linker
-AL.exe میتوانید جزئی از اسمبلی کنید و فقط نیاز است که بدانید
چگونه آن فایل را پارس یا تبدیل کنید.
- استفاده
از انواع ایجاد شده در زبانهای مختلف. در این حالت شما مقداری از کد را
با استفاده از #C نوشته اید و مقداری از آن را با Visual Basic مینویسید و
هر کدام در نهایت به یک ماژول جداگانه کامپایل خواهند شد. ولی تبدیل آن به
یک واحد منطقی مثل اسمبلی ممکن است و از این نظر میتوانید روی ماژولهای
یک دسته کنترل داشته باشید.
AssemblyDef | شامل مدخل ورودی (آدرس شروع حافظه) برای اسمبلیهایی است که ماژول عضو آن است. این مدخل شامل نام اسمبلی (بدون مسیر و پسوند)، شماره نسخه یا ورژن، culture، فلگ، الگوریتم هش و کلید عمومی ناشر، که میتواند نال باشد، هست. |
FileDef | شامل
یک مدخل ورودی برای هر فایل PE و فایلهای ریسورسی است که قسمتی از اسمبلی
را تشکیل میدهند. این مدخل ورودی شامل نام و پسوند فایل (بدون ذکر مسیر)،
فلگ و مقدار هش میشود. اگر تنها یک اسمبلی وجود داشته باشد، این جدول هیچ
مدخلی نخواهد داشت. |
ManifestResourceDef | شامل
یک مدخل ورودی برای هر فایل ریسورس است. این مدخل شامل نام فایل ریسورس،
فلگ و یک اندیس به جدول FileDef است که در آن اشارهای به آن فایل ریسورس
یا استریم است. |
ExportedTypesDef | شامل
یک مدخل ورودی برای هر نوع عمومی است که از همه ماژولهای PE استخراج شده
است. هر مدخل شامل نام نوع و اندیسی به جدول FileDef و یک اندیس دیگر به
جدول TypeDef است. نکته: برای ذخیره سازی حافظه و کم حجم شدن فایلها، نوعهای استخراج شده از فایلی که شامل مانیفست است دیگر در جدول جاری نام نوعها ذکر نمیگردد؛ چرا که این اطلاعات در جدول TypeDef اسمبلی جاری موجود
است. |
کامپایلر سی شارپ با استفاده از سوئیچهای زیر یک اسمبلی را تولید میکند:
/t[arget]:exe, /t[arget]:winexe, /t[arget]: appcontainerexe, /t[arget]: library, or /t[arget]:winmdobj
سوئئیچهای بالا باعث میشود که یک فایل PE با جدول مانیفست تولید گردد. در صورتیکه سوئیچ زیر را به کار ببرید، فایل تولید شده شامل جدول مانیفست نمیشود.
/t[arget]:module
نکتهی پایانی: محیط توسعه ویژوال استادیو به طور پیش فرض از اسمبلیهای چند فایل پشتیبانی نمیکند، اگر میخواهید که اسمبلیهای چند فایله تولید کنید باید در سوئیچهای مورد استفاده آن تجدید نظری داشته باشید.
در مقاله آینده این روشها را بررسی خواهیم کرد...
معرفی Bit Platform
وب اسمبلی چیست؟
<BlazorMode> ... </BlazorMode> <WebAppDeploymentType> ... </WebAppDeploymentType>
- وجود سیستم Exception handling در سرور و کلاینت (این موضوع به گونه ای بر اساس Best Practiceها پیاده سازی شده که اپلیکیشن را از بروز هر خطایی که بخواهد موجب Crash کردن برنامه شود ایزوله کرده)
- وجود سیستم User Authentication بر اساس JWT که شما در همان ابتدا که از این تمپلیت پروژه جدیدی میسازید صفحات SignIn ، SignUp را خواهید داشت.
- پکیج Bit Blazor UI که بالاتر درمورد آن صحبت کرده ایم از همان ابتدا در TodoTemplate نصب و تنظیم شده تا بتوانید به راحتی صفحات جدید با استفاده از آن بسازید.
- کانفیگ استاندارد Swagger در سمت سرور.
- ارسال ایمیل در روند SignUp.
- وجود خاصیت AutoInject برای سادهسازی تزریق وابستگی ها.
- و بسیاری موراد دیگر که در داکیومنتهای پروژه میتوانید آنهارا ببینید.
- شما میتوانید این پروژه را در گیتهاب مشاهده کنید.
- برای اشکالات یا قابلیت هایی که میخواهید برطرف شود Issue ثبت کنید.
- پروژه را Fork کنید و Star دهید.
- ایشوهایی که وجود دارد را برطرف کنید و Pull Request ارسال کنید.
- برای در جریان بودن از روند توسعه در جلسات برنامه ریزی (Planning Meeting) و گزارشات هفتگی (Standup Meeting ) که همه اینها در Microsoft Teams برگزار میشود شرکت کنید.
آشنایی با AOP IL Weaving
در دنیای دات نت، ابزارهای چندی امکان انجام IL Weaving را فراهم ساختهاند که تعدادی از آنها به قرار ذیل هستند:
- PostSharp
- LOOM.NET
- Wicca
و ...
در بین اینها، PostSharp معروفترین فریم ورک AOP بوده و در ادامه از آن استفاده خواهیم کرد.
پیشنیاز ادامه بحث
ابتدا یک پروژه کنسول جدید را آغاز کرده و سپس در خط فرمان پاور شل نوگت در VS.NET دستور ذیل را اجرا کنید:
PM> Install-Package PostSharp
مراحل ایجاد یک Aspect برای پروسه IL Code Weaving
ابتدا یک کلاس پایه مشتق شده از کلاسی ویژه موجود در یکی از فریم ورکهای AOP باید تعریف شود. مرحله بعد، کار اتصال این Aspect میباشد که توسط پردازشگر ثانویه IL Code Weaving انجام میشود.
در ادامه قصد داریم همان مثال LoggingInterceptor قسمت دوم این سری را با استفاده از IL Code Weaving پیاده سازی کنیم.
using System; namespace AOP03 { public class MyType { public void DoSomething(string data, int i) { Console.WriteLine("DoSomething({0}, {1});", data, i); } } class Program { static void Main(string[] args) { new MyType().DoSomething("Test", 1); } } }
using System; using PostSharp.Aspects; namespace AOP03 { [Serializable] public class LoggingAspect : OnMethodBoundaryAspect { public override void OnEntry(MethodExecutionArgs args) { Console.WriteLine("On Entry"); } public override void OnExit(MethodExecutionArgs args) { Console.WriteLine("On Exit"); } public override void OnSuccess(MethodExecutionArgs args) { Console.WriteLine("On Success"); } public override void OnException(MethodExecutionArgs args) { Console.WriteLine("On Exception"); } } }
اکنون اگر برنامه را اجرا کنیم، اتفاق خاصی رخ نداده و همان خروجی معمول متد DoSomething در کنسول نمایش داده خواهد شد. بنابراین در مرحله بعد نیاز است تا این Aspect را به کدهای برنامه متصل کنیم.
کلاس OnMethodBoundaryAspect در کتابخانه PostSharp، از کلاس MulticastAttribute مشتق میشود. بنابراین LoggingAspect ایی را که ایجاد کردهایم نیز میتوان به صورت یک ویژگی به متدهای مورد نظر خود افزود:
public class MyType { [LoggingAspect] public void DoSomething(string data, int i) { Console.WriteLine("DoSomething({0}, {1});", data, i); } }
On Entry DoSomething(Test, 1); On Success On Exit
public void DoSomething(string data, int i) { <>z__Aspects.a0.OnEntry(null); try { Console.WriteLine("DoSomething({0}, {1});", data, i); <>z__Aspects.a0.OnSuccess(null); } catch (Exception) { <>z__Aspects.a0.OnException(null); throw; } finally { <>z__Aspects.a0.OnExit(null); } }
خوب! این یک روش اتصال Aspects به برنامه است. اما اگر همانند Interceptors بخواهیم Aspect تعریف شده را سراسری اعمال کنیم چکار باید کرد (بدون نیاز به قرار دادن ویژگی بر روی تک تک متدها)؟
برای اینکار ابتدا نیاز است میدان عملکرد Aspect تعریف شده را توسط ویژگی MulticastAttributeUsage محدود کنیم تا برای مثال به خواص اعمال نشوند:
[Serializable] [MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)] public class LoggingAspect : OnMethodBoundaryAspect
[assembly: LoggingAspect(AttributeTargetTypes = "AOP03.*")]
مزیت روش IL Code Weaving نسبت به Interceptors، کارآیی و سرعت بالاتر است. از این جهت که کدهایی که قرار است اجرا شوند، پیشتر در اسمبلی برنامه قرار گرفتهاند و نیازی نیست تا در زمان اجرا، کدی به برنامه به صورت پویا تزریق گردد.
مصاحبه کامل با خالق ++C
Full Interview With the Creator of C++
By popular demand, and a request from the man himself, we’ve decided to release the full interview with esteemed computer scientist Bjarne Stroustrup (aka the creator of C++). We cover a bunch of topics so check the chapters to find what interests you the most! Filmed last year. Enjoy and happy trails!
00:00-02:42 Getting into programming
02:42-03:26 Programming being versatile
03:26-06:07 Industry changes
06:07-10:20 Inventing and maintaining C++
10:20-12:02 Key to making a successful language
12:02-16:04 Greatest lessons
16:14-20:06 Moving to the US
20:06-23:20 Advice to devs
سری طراحی نرم افزار مدیریت زندان!
سری آموزشی RxJS
استفاده توامان دات نت و داکر
Many developers I talk to are either using Docker actively or planning to adopt containers in their environment. Containers are an important trend in our industry and .NET is part of that. Microsoft and Docker have been working together so that you’ll have a great experience using Docker with .NET apps.