پاسخ به بازخورد‌های پروژه‌ها
خطا در اجرا و تست گیری از پروژه
- این‌ها به معنای restore نشدن وابستگی‌های برنامه هستند. اطلاعات بیشتر
- روش دوم: یک پروژه‌ی MVC جدید را بر اساس VS خودتان ایجاد کنید. بعد فایل‌های این پروژه را یکی یکی به آن اضافه کنید.
پاسخ به بازخورد‌های پروژه‌ها
تعداد درخواست بر اساس هر Urls
«آیا واقعا با توجه به برنامه شما این تعداد درخواست ارسال میشه»
بله. احتمالا مشکلی شبیه به این مطلب را دارید: «حذف پردازش درخواست‌های فایل‌های استاتیک در متد Application_AuthenticateRequest»  
پاسخ به بازخورد‌های پروژه‌ها
گزارش خطا
نه. به عمد این بررسی را قرار دادم؛ چون نصاب فایل‌های VSIX اگر طول مسیر بیشتر از حدی باشد، متوقف می‌شود و کار نمی‌کند. یعنی محدودیت اصلی از طرف خود مایکروسافت است.
مطالب
C# 7 - Generalized Async Return Types
از زمان ارائه‌ی C# 5 و معرفی الگوهای async/await، تنها نوع‌های خروجی پشتیبانی شده، <Task، Task<T و void (در موارد خاص) بودند. مشکل همراه با این روش، اجبار به وهله سازی رسمی یک Task است؛ حتی اگر نوع خروجی کاملا مشخص باشد.
برای نمونه در متد ذیل، میزان حجم مصرفی در یک پوشه بازگشت داده می‌شود:
public async Task<long> GetDirectorySize(string path, string searchPattern)
{
    if (!Directory.EnumerateFileSystemEntries(path, searchPattern).Any())
        return 0;
    else
        return await Task.Run<long>(() => Directory.GetFiles(path, searchPattern,
        SearchOption.AllDirectories).Sum(t => (new FileInfo(t).Length)));
}
اگر پوشه‌ای خالی باشد، حجم آن صفر است و در این حالت نیازی به ایجاد یک ترد مخصوص آن نیست. اما با توجه به اینکه خروجی متد، <Task<long است، هنوز هم باید این Task وهله سازی شود. برای نمونه اگر به کدهای IL آن دقت کنیم، return 0 آن به صورت ذیل ترجمه می‌شود:
 AsyncTaskMethodBuilder<long>.Create()

باید دقت داشت که Task، یک نوع ارجاعی است و استفاده‌ی از آن به معنای تخصیص حافظه‌است. اما زمانیکه قسمتی از کد کاملا همزمان اجرا می‌شود و یا مقداری کش شده را بازگشت می‌دهد، این تخصیص حافظه‌ی اضافی، خصوصا اگر در حلقه‌ها بکار گرفته شود، هزینه‌بر خواهد بود.


امکان تعریف خروجی‌های سفارشی متدهای async در C# 7.0

در C# 7 می‌توان خروجی‌های سفارشی را جهت متدهای async تعریف کرد و پیشنیاز اصلی آن پیاده سازی متد GetAwater است. برای مثال <System.Threading.Tasks.ValueTask<T یک چنین نوع سفارشی را ارائه می‌دهد. در این حالت، متد ابتدای بحث را می‌توان به صورت ذیل بازنویسی کرد:
public async ValueTask<long> GetDirectorySize(string path, string searchPattern)
{
    if (!Directory.EnumerateFileSystemEntries(path, searchPattern).Any())
        return 0;
    else
        return await Task.Run<long>(() => Directory.GetFiles(path, searchPattern,
        SearchOption.AllDirectories).Sum(t => (new FileInfo(t).Length)));
}
اگر دقت کنید بجز تغییر نوع خروجی متد، تغییر دیگری نیاز نبوده‌است.
همانطور که از نام  ValueTask نیز مشخص است، یک struct است؛ برخلاف Task و تخصیص حافظه‌ی آن بر روی stack بجای heap صورت می‌گیرد. به این ترتیب با کاهش فشار بر روی GC، در حلقه‌هایی که خروجی value type دارند، با اندازه گیری‌های انجام شده، کارآیی تا 50 درصد هم می‌تواند بهبود یابد.

برای کامپایل قطعه کد فوق و تامین نوع جدید ValueTask، نیاز به نصب بسته‌ی نیوگت ذیل نیز می‌باشد:
 PM> install-package System.Threading.Tasks.Extensions
مطالب
زیر نویس فارسی ویدیوهای ساخت برنامه‌های مترو توسط سی شارپ و XAML - قسمت اول

سایت pluralsight ویدیوهای آموزشی بسیار با کیفیتی را در مورد مباحث مختلف دات نت تا بحال تهیه کرده و تقریبا هر موضوع جدیدی هم که اضافه می‌شود، بلافاصله یک سری جدید را تهیه می‌کنند. مدرسین انتخابی هم عموما افراد نامدار و باسوادی هستند.
پروژه‌ای رو در سایت کدپلکس شروع کردم جهت تهیه زیرنویس فارسی برای این ویدیوها:


این کار نسبت به کار تهیه زیرنویس‌های فارسی موجود برای فیلم‌های انگلیسی کار سخت‌تری است به چند دلیل:
- اسکریپت آماده‌ای وجود ندارد. کار شنیداری است.
- زمانبندی آماده‌ای وجود ندارد.
- مباحث تخصصی است.
- مدرس از ثانیه اول ویدیو تا ثانیه آخر آن حرف می‌زند!

برای مثال جهت تهیه زیرنویس‌های فارسی فیلم‌های انگلیسی عموما به سایت‌هایی مانند subscene.com مراجعه می‌شود. یک زیرنویس یا به قولی اسکریپت آماده یافت شده و شروع به ترجمه می‌شود. متن آماده است. زمانبندی آماده است و فقط کار ترجمه باقی می‌ماند.
اما در مورد ویدیوهای آموزشی انگلیسی خیر. به همین جهت در این زمینه کار آنچنانی تابحال صورت نگرفته.
کار زمانبری است. فعلا رکورد من برای هر سه دقیقه ویدیوی آموزشی که مدرس از ثانیه اول تا آخر آن حرف می‌زند، 40 دقیقه کار تهیه زیر نویس فارسی زمانبندی شده است.

سری جدیدی رو که شروع کردم تحت عنوان «Building Windows 8 Metro Apps in C# and XAML» در سایت pluralsight ارائه شده.
فعلا قسمت اول آن زیرنویس دار شده و از اینجا قابل دریافت است. برای مشاهده آن‌ها برنامه با کیفیت و رایگان KMPlayer توصیه می‌شود.

لیست ویدیوهای قسمت اول آن به شرح زیر است:

Building Windows 8 Metro Apps in C# and XAML 
Overview 00:50:41
This modules provides an overview of how to develop Windows 8 Metro style applications in C# and XAML.

Introduction
XAML and Codebehind
Asynchronous APIs
Demo: Asynchronous APIs
Files and Networking
Demo: Requesting Capabilities
Integrating with Windows 8
WinRT and .NET
Summary

کلمه سی شارپ در این قسمت کمی غلط انداز است. بیشتر بحث و توضیح است تا کد نویسی. بنابراین برای عموم قابل استفاده است. خصوصا نگاهی دارد به تازه‌های ویندوز 8 از دیدگاه برنامه نویس‌ها مانند سطوح دسترسی برنامه‌های مترو، معرفی Charms ، نحوه به اشتراک گذاری اطلاعات در بین برنامه‌های مترو نصب شده، برای مثال جایی که دیگر Clipboard سابق وجود ندارد و مواردی از این دست.

5 قسمت دیگر این مبحث باقیمانده که هر زمان تکمیل شد، خبرش رو خواهید شنید و تقریبا از این پس این سایت به همین ترتیب جلو خواهد رفت. فکر می‌کنم اینطوری مفیدتر باشد. هر از چندگاهی یک مبحث جدید زیرنویس دار شده را می‌توانید مشاهده کنید.

اگر علاقمند بودید می‌تونید در این پروژه شرکت کنید و یک موضوع جدید و مستقل را برای تهیه زیرنویس شروع کنید. یا حداقل اگر پس از مشاهده این سری آماده شده، اصلاحی را انجام دادید، می‌تونید اون رو برای اعمال در اینجا ارسال کنید.

نظرات اشتراک‌ها
ماشین حساب ویندوز سورس باز شد!
 بنظرتون چرا در این پروژه ترجیح دادن  بجای C# از C++ استفاده کنن؟ پرفورمنس؟ بخاطر code base قدیمی و مینیمم کردن تغییرات؟