مطالب
ویدیوهای رایگان آموزش ساخت workflow برای SharePoint 2007

یک سری ویدیوی رایگان ایجاد و همچنین برنامه نویسی workflow های SharePoint 2007 در سایت آقای shelton موجود است که متاسفانه این سایت با اینترنت داتک باز نمی‌شود (یا ازون طرف یا از این طرف فیلتر شده! یا مشکل DNS اینترنت داتک است، نمی‌دونم).
برای راحتی دریافت آن‌ها یک mirror از این ویدیوها ایجاد شد:

Enabling incoming/outgoing email for MOSS 2007, download

Extracting Document Details with SharePoint Workflow's, download

Extracting email addresses & Sending emails with SharePoint Workflow, download

Programmatically creating user tasks with SharePoint Workflow, download

Programmatically escalating Overdue Tasks , download

Building Basic Approval Workflow, download

Building a Multilevel Approval Workflow, download

Using Active Directory Searching/Lookup in a SharePoint/MOSS 2007 Workflow, download

همچنین یک سری ویدیوی آموزشی رایگان دیگر نیز در مورد workflow foundation در این آدرس قابل دریافت است.
نظرات نظرسنجی‌ها
آیا «بازی» هم می‌نویسید؟
با تشکر از این نظر سنجی 
برای دوستانی که علاقه به بازی سازی دارن این مطلبو میزارم...
همانطور که میدونید بازیهای روز از گرافیک فوق العاده ای برخورداره و مشخصه که این بازیهارو فقط با برنامه نویسی نمیشه ساخت. 
نیازهایی نرم افزاری که برای ساخت یک بازی باید در نظر گرفت:
1-استفاده از 3d-max یا maya برای ساختن کارکترها و متریالها
2-استفاده از موتورهای بازی سازی مانند  unity game engine یا unrealengine هر دوی این موتورها از C# پشتیبانی می‌کنند و منابع آموزشی خوبی دارن. دوستان مایه داری که هزینه براشون مهم نیست میتونن از آنرییل انجین استفاده کنند و دوستانی که مانند من از نرم افزارهای رایگان یا ک.ر.ک استفاده می‌کنن یونیتی بهترین گزینه هست(با نرم افزارهای تغییر آی پی وارد سایت یونیتی بشید)
3-سی شارپ یا سی پلاس در حد متوسط 
همچنین نیاز هست تا حدودی به هوش مصنوعی و تکنیک‌های درآمد زایی از طریق بازی سازی آگاه بود.(باید بدونید این بازی که میسازید قراره فقط از فروش خود بازی کسب درآمد کنه یا رایگان باشه و  پرداختهای درون برنامه ای داشته باشه مانند اغلب بازیهای اندروید)
نکته: توسط موتورهای بازی سازی می‌توانید خروجی سازگار برای اندروید، آی او اس ، رایانه  و... داشته باشید .

مطالب
معرفی Decorator Design Pattern

فرض کنید که می‌خواهیم یک برنامه برای یک فروشگاه نوشیدنی (مانند coffee shop) بنویسیم ، این فروشگاه در ابتدای کار ممکن است ، منوی ساده‌ای جهت ارائه به مشتری داشته باشد. برای مثال ممکن است که فقط 3 یا 4 محصول داشته باشد. بنابراین ممکن است ما برنامه‌ای را که می‌خواهیم برای این مشتری بنویسیم به صورت زیر طراحی کنیم:

 


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

بنابراین تعداد این حالات را در نظر بگیرید که در آینده ممکن است چقدر زیاد بشود:

 

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

خوب با این روش ما n   کلاس تشکیل شده در رویکرد اول را فقط به 5 کلاس تبدیل کردیم. خوب این روشی بسیار ایده‌ال به نظر می‌رسد. اما ممکن است در آینده که تعداد چاشنی‌های ما بالا می‌رود و همچنین تعداد محصولاتمان نیز ممکن است بیشتر شود مجبور شویم که تعداد این کلاس‌ها را بیشتر کنیم،  و یا فکر کنید که ما می‌خواهیم هریک از چاشنی‌هایمان، یک قیمت را نسبت بدهیم. بنابراین مجبوریم که تمامی این‌ها را در کلاس پایه اضافه کنیم؛ بله درست است، ما با کلاس پایه‌ی حجیمی روبرو می‌شویم که بیشتر خواص و یا متدهای آن برای زیر کلاس‌های دیگر مناسبت نیستند. خوب آیا روش بهتری برای جلوگیری از این مشکل داریم؟ بلی.

خوب ما به این مسئله به این صورت نگاه می‌کنیم که شروع می‌کنیم با نوشیدنی‌ها و آن‌ها را با چاشنی‌ها در زمان اجرا تزیین (Decorate) می‌کنیم؛ نه کامپایل.

برای مثال اگر مشتری ما یک نوشیدنی DarkRoast با Mocha و Whip خواست، سپس ما :
1- یک شی از DarkRoast  ایجاد می‌کنیم .
2- آن را با یک شی از  Mocha  تزئین می‌کنیم.
3- آن را با یک شی از Whip - تزیین می‌کنیم.
4- متد Cost()  را صدا می‌زنیم و  یک Delegation  را برای اضافه کردن قیمت چاشنی‌ها در نظر می‌گیریم.

بسیار خوب؛ اما ما عملیات تزئین یک شی را چگونه انجام می‌دهیم و delegation ما چگونه عمل می‌کند .
یک اشاره : به شیء تزئین کننده، مانند یک Wrappers فکر کنید. اجاز بدهید ببینم که چه طور این کار را انجام می‌دهیم.
1- یک شی از DarkRoast  ایجاد می‌کنیم.
 
 

2- آن را با یک شی از  Mocha  تزئین می‌کنیم.

3- آن را با یک شی از Whip تزیین می‌کنیم 


 4- حالا زمان محاسبه قیمت محصول برای مشتری فرا رسیده است. ما این کار را را با صدا زدن بیرونی‌ترین Decorator(Whip)  انجام می‌دهیم و شی  whip به کمک  Delegate مابقی توابع cost را صدا می‌زند.



  در آخر شما می‌توانید پیاده سازی این برنامه را به زبان جاوا در زیر مشاهد نمایید.

public abstract class Beverage
{
     string description ="unknow beverage";
     public String getDescription(){
         return description;
     }
     public abstract double cost();
}

public abstract class CondimentDecorator extends Beverage {
    public abstract string getDescription();
}

public class Espersso extends Beverage{
   public Espersso()
   {
      description="Espersso";
   }
   public double cost(){
     return 1.99;
   }
}

public class HouseBelend extends Beverage {
   public HouseBelend()
   {
     description="HouseBelend";
   }
   public double cost()
   {
     return .89;
   }
}

public class mocha extends condimateDecorator {
  Beverage beverage;
  public mocha(Beverage beverage)
  {
     this.beverage=beverage;
  }
   public string getDescription(){
      return beverage.getdescription() + "Mocha";
   }
   public double cost(){
     return .20 +beverage.cost
   }
}


// Now Use These classes in Final form
Beverage beverage=new Espersso();
//Customers want a coffe with double milk and whip
beverage=new mocha(beverage);
beverage=new mocha(meverage);
beverage=new whip(beverage);

system.out.println(beverage.getDescription() + "$" +beverage.cost());
نظرات مطالب
الگوی طراحی Factory Method به همراه مثال
اینکه کلاس مشتق شده‌ی از آن تنها یک متد دارد در اینجا و یا کلا در طراحی شیءگرا، اهمیتی ندارد. کاربرد اصلی طراحی بر اساس اینترفیس‌ها یا کلاس‌های abstract، در تزریق وابستگی‌ها و همچنین unit testing است. زمانیکه بر اساس اینترفیس‌ها کار می‌کنید، می‌توانید پیاده سازی‌های مختلفی را در اختیار استفاده کنندگان قرار دهید (الگوی استراتژی)، وابستگی مستقیم لایه‌های مختلف برنامه را نسبت به یکدیگر کاهش دهید (تزریق وابستگی‌ها) و همچنین ساده‌تر می‌توانید عملیات mocking را پیاده سازی کنید (سهولت unit testing). در طراحی کتابخانه‌های شما حتی اگر نیازی به الگوی استراتژی هم نباشد، وجود اینترفیس‌ها، آینده‌نگری است جهت سهولت عملیات unit testing قسمت‌های مختلف آن. همچنین حتی اگر خود شما در کتابخانه‌ای که ارائه می‌کنید از الگوی استراتژی استفاده نکنید، در آینده ممکن است شخصی از پیاده سازی قسمتی از کتابخانه‌ی شما رضایت نداشته باشد و در این حالت به سهولت می‌تواند با تغییر تنظیمات تزریق وابستگی‌های شما، پیاده سازی دیگری را به کتابخانه‌ای که دیگر توسعه پیدا نمی‌کند، اعمال کند (قسمتی از آن‌را به سلیقه‌ی خودش تغییر دهد و جایگزین کند)؛ به عبارتی کتابخانه‌ی شما «افزونه پذیر» می‌شود.
نظرات مطالب
سفارشی سازی ASP.NET Core Identity - قسمت اول - موجودیت‌های پایه و DbContext برنامه
- « Identity.Dapper »
- « AspNetCore.Identity.MongoDB »
- این مورد بیشتر به طراحی کل سیستم بر می‌گردد؛ چون اجزای مختلف یک سیستم قرار است هماهنگ با اطلاعات کاربران و سطوح دسترسی آن‌ها کار کنند. بنابراین بهتر است زیرساخت سیستم یکپارچه باشد (اگر NoSQL انتخاب شد، کل سیستم NoSQL طراحی شود) تا مشکلات نگهداری، توسعه و همچنین کاهش کارآیی آن با سوئیچ بین بانک‌های اطلاعاتی مختلف وجود نداشته باشد.
به علاوه با تعویض این موارد در آینده همیشه یک قدم عقب‌تر از تیم ASP.NET Core Identity خواهید بود. همچنین بهینه سازی‌هایی که در اینجا صورت گرفته و طراحی آن، عمیقا با دید به EF Core انجام شده‌است (و اساس طراحی آن هم «رابطه‌ای» است). EF Core وابستگی به SQL Server ندارد و تعداد پروایدرهای رسمی بانک‌های اطلاعاتی مختلف آن قابل توجه است (SQL Server, SQLite, PostgreSQL, MySQL, SQL CE, InMemory) و سیستمی که با یک ORM کار می‌کند، همواره این مزیت قابل تعویض بودن بانک اطلاعاتی برنامه را خواهد داشت.
استفاده‌ی از Dapper و SQL نویسی مستقیم، تنها با یک اشتباه کوچک و فراموشی نکته‌ای، به حملات تزریق اس‌کیوال ختم خواهد شد و این مورد مساله‌ای است که حداقل با EF Core وجود ندارد و فوق العاده مهم است.
نظرات مطالب
Owin چیست ؟ قسمت اول
بله، به همین معنی است
البته دقت کنید، پیاده سازی OWIN کار ساده ای نیست، و به سرعت نمی‌توان شاهد پیاده سازی آن بر روی هاست‌های مختلف بود، و این پروسه با سرعت فعلی از نظر من مدتی طول خواهد کشید.
برای مثال Katana که یک پیاده سازی قابل استفاده و خوب از آن به شمار می‌رود کار شرکت مایکروسافت است و سایر پیاده سازی Open Source سایر تیم‌ها که بالطبع امکان مانور شرکت مایکروسافت را ندارند، کمی طول می‌کشد تا واقعا آماده استفاده شود.
و همچنین پیاده سازی‌های فعلی در قسمت هایی مانند Web Socket‌ها و سایر مسائل پیچیده دارای ضعف هایی هستند.
درست مانند استاندارد HTML 5 که بر روی مرورگرهای مختلف به میزان‌های مختلفی پیاده سازی شده است.
به بیان دیگر پیاده سازی OWIN صفر و صدی نیست، بلکه هر پیاده سازی ممکن است در داخل خود دارای ضعف‌ها و یا نواقصی باشد.
علاوه بر این اگر شما در کد نویسی ASP.NET MVC خود، بی جهت به امکانات پایه ASP.NET ایجاد وابستگی کنید، نیز در این عمل دچار مشکل خواهید شد، برای همین بدیهتا کاری را که می‌توانید با Action Filter انجام دهید را نباید با یک Http Module انجام دهید و ...
مهم‌ترین کار طراحی برنامه هایی که می‌نویسید به صورت سازگار با OWIN است که در پست‌های بعدی قرار است به همین قسم از مطالب بپردازیم
البته من آینده خوبی برای OWIN قائلم، و نفع آن در کوتاه مدت و بلند مدت کاملا آشکار و واضح است، کما این که در مطلب به آن اشاره شد.
برای مشاهده پیاده سازی‌های مختلف OWIN می‌توانید به سایت owin.org مراجعه کنید.
موفق و پایدار باشید
نظرات مطالب
محاسبه ی اختلاف زمان رخدادی در گذشته با زمان فعلی به فارسی
سلام
من توی پی اچ پی یه همچین تابعی نوشتم
/**
* Time Left function
*
* Example
* $x = 1332140945 ;
* echo time_left($x);
* @param $ts int timestamp's post
* @return string time left like 3mahe ghabl
*/
function time_left($ts = null)
{
if(!$ts)
return '';


$time = time();
$t = $time-$ts;

if(intval($t) < 0)
return 'آینده';

if(floor($t/31536000) >= 1 )
$out = floor($t/31536000).' سال قبل';
elseif(floor($t/2592000) >= 1)
$out = floor($t/2592000).' ماه قبل';
elseif(floor($t/604800) >= 1)
$out = floor($t/604800).' هفته قبل';
elseif(floor($t/86400) >= 1)
$out = floor($t/86400).' روز قبل';
elseif(floor($t/3600) >=1)
$out = floor($t/3600).' ساعت پیش';
elseif(floor($t/60) >= 1)
$out = floor($t/60).' دقیقه پیش';
else
$out = $t.' ثانیه قبل';
return $out;
} 
فقط واسه بررسی گذاشتم .
موفق باشید
نظرات مطالب
تفاوت انواع var و dynamic
بله اینها صحیح، ولی statically typed dynamic عبارتی است که Anders Hejlsberg هنگام صحبت در مورد آینده C# در  PDC09 به کاربرد.
The Future of C#
 
The dynamic keyword acts as a static type declaration in the C# type system. This way C# got the dynamic features and at the same time remained a statically typed language. 

http://msdn.microsoft.com/en-us/magazine/gg598922.aspx 
در واقع کلمه کلیدی dynamic به کامپایلر می‌فهماند که compile-time checking  را غیر فعال کن! تا در زمان اجرا به نوع متغییر رسیدگی شود.

شاید اگر بگوییم dynamic نوعی static است که مزایای انواع dynamic را در بر می‌گیرد بهتر باشد.

خواندن این مقاله هم خالی از لطف نیست:
نظرات مطالب
زیر نویس فارسی ویدیوهای ساخت برنامه‌های مترو توسط سی شارپ و XAML - قسمت اول
- کار خیلی ارزشمندیه واقعا. و یه سبک نویی هست در تولید محتوا به زبان فارسی.
- توی support سایت گفتن که به زودی زیرنویس برا همه‌ی Course ها خواهیم گذاشت.
- اگر امکان براتون داشته باشه، یه پستی بزنین که نحوه‌ی تولید اسکریپت رو توش توضیح بدین. چون مشکل اصلی اینجاست.
- از اونجایی که فکر میکنم، این کار احتمالا دستی انجام میگیره(یعنی به راحتی نیست)
  یه پیشنهاد دارم: به دلیل تایم‌های کوتاه هر section و بعد از اون هر part از section ها که خیلی کوتاهند. میشه تا اقدام رسمی خود پلورال‌سایت به تولید زیرنویس، فقط حرفهایی که در کلیپ توسط مدرس زده شده نوشته شود(بدون توجه به زمانبدی).
که این میتونه دوجور باشه:
- یکی از الف تا ی.
 - یکی دیگه، صرفا اشاره و رساندن موضوع به صورت تیتر وار.
خب از مزیت‌های این کار:
 - کاهش شدید زمانبری تولید محتواست.
 - توان تولید محتوا(یا اصلاح محتوا) توسط افراد بیشتر.
 - با توجه به ادای شفاف کلمات مدرسان، و با وجود همچین چیزی احتمالا اکثر مطالب قابل فهم‌تر خواهد بود.
 - و شاید جالب‌تر از اینها، گزیده‌‌ نوشته‌هایی خواهند شد، که برای مرور کردن دوره‌ها در آینده بسیار مفید و کارا خواهد بود.
نظرات مطالب
MVVM و فراخوانی متدهای اشیاء View از طریق ViewModel
سلام استاد ... خیلی نوکریم ... :دی
والا من نمیدونم شما رو چه دلیلی میفرمایین که خلاصه ی اشتراکات مورد استقبال قرار نگرفت!!! ... ولی من میدونم که این کار شما رو نمونشو تو هیچ بلاگ ایرانی به شخصه ندیده بودم و واقعا (واقعا!) کار قشنگی بود و واقعا(واقعا!!) مفید واقع شد و من و خیلی از دوستان صمیمانه انتظار داریم که به این کار ادامه بدین!

من با این کارتون با بسیاری از بلاگ های مفید ایرانی و اونور آبی :دی آشنا شدم و خیلی هاشو الان دارم follow میکنم ...

در ضمن شک نداریم که وبلاگ شما بهترین وبلاگ فارسی موجود در برنامه نویسی حرفه ای و نیمه حرفه ای هست ... (خودتونم شک نکنید :دی)

آره! قبول دارم که ما وبلاگ خونایه خوبی نیستیم!!! ... زورمون میاد یه لایک معمولی کنیم یا کامنت تشکر بذاریم! ... ولی این دلیل نمیشه که از کار شما استقبال نمیشه ... من وقتی تو گودرم تایتلایه شما رو وقتی نوشته بود خلاصه اشتراکایه ... میدیدم بی درنگ expand میکردم لینک رو!

اصن شما یه پست بزنین در مورد این قضیه و کارایی که قصد دارین در آینده انجام بدینو مطرح کنین ... مطمئنم اونوقته که تازه متوجه میشین که  چقدر طرفدار دارین!!! ... که خیلی ها شما رو اسطوره ی خودشون میدونن ... که خیلی ها شما رو دعا میکنن ... که خوش به حالتون تو اون دنیا :دی ... که ...

موفق باشید ...
یا علی ...