بازخوردهای دوره
ویژگی StringLength و اعمال maxlength به صورت خودکار در ASP.NET MVC
یک نکته 
امروز متوجه شدم که در  ورژنی که بنده از jquery-validation استفاده میکنم ، مقدار فیلد را Trim نکرده و عملا سمت کاربر اعتبار سنجی minimum مربوط به StringLength به درستی انجام نمیشد.
راه حل اینجا بود.  
کافی است که فایل jquery.validate.js رو گشوده و تغییرات زیر را اعمال کنید.
minlength: function( value, element, param ) {
    var length = $.isArray(value) ? value.length : this.getLength($.trim(value), element);
return this.optional( element ) || length >= param;
},

// http://jqueryvalidation.org/maxlength-method/
maxlength: function( value, element, param ) {
    var length = $.isArray(value) ? value.length : this.getLength($.trim(value), element);
return this.optional( element ) || length <= param;
},

// http://jqueryvalidation.org/rangelength-method/
rangelength: function( value, element, param ) {
    var length = $.isArray(value) ? value.length : this.getLength($.trim(value), element);
return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );
},

نظرات مطالب
معرفی برنامه‌ی Subtitle Tools
به روز رسانی
نکته‌ی مطلب «تخمین مدت زمان خوانده شدن یک مطلب» به این برنامه اضافه شد (یکبار کلیک بر روی recalculate در نوار ابزار آن). کار آن تصحیح مدت زمان نمایش یک ردیف زیرنویس بر اساس مدت زمان خوانده شدن آن هست تا سریع، پیش از خوانده شدن آن، ردیف بعدی نمایش داده نشود و اگر نمایش داده شد، در بالا و یا ذیل آن توسط برنامه‌ی پخش کننده، برای مدتی باقی بماند (روش کار KMPlayer).
مطالب
معرفی کتاب NHibernate 3 Beginners Guide, Aug 2011

در بیشتر مواردی که یک تکنولوژی جدید را برای یادگیری انتخاب می‌کنیم در اولین فرصت سراغ منابع آنلاین از قبیل کتابها و یا ویدئوهای موجود بر روی نت می‌رویم و در این بین ممکن است با محدودیت هایی از قبیل کیفیت بد اتصال به اینترنت و یا حجم مربوط به فایلهای موجود مواجه شویم. خوب چاره و نکته در اینجاست که با انتخاب یک کتاب مفید در این زمینه می‌توان تا حدود زیادی این محدویت‌ها را برطرف کرد. در ادامه  برای شروع کار با NHibernate  که روز به روز در حال توسعه است، میتوان کتاب  زیر را شروع بسیار خوبی برای کار دانست: 

NHibernate 3 Beginners Guide, Aug 2011 

در این کتاب بصورتی بسیار جامع از ابتدایی‌ترین مسئله تا فنی‌ترین مسائلی که  در هر پروژه‌ی‌ عملی هر توسعه دهنده ای با هر سطحی امکان مواجه شدن با این مشکلات را دارد به تفصیل بررسی شده. این کتاب شامل 12 فصل بوده که مطالب آن به شرح زیر ارائه شده است:
1- فصل اول – نگاه اولیه:
  • NHibernate چیست
  • موارد تازه در آخرین نسخه NHibernate
  • چرا ما استفاده کنیم و چه کسانی دیگری استفاده میکنند
  • زمانیکه به مشکل برخوردیم از کجا کمک بگیریم یا حتی نسخه ای تجاری تهیه کنیم
2- فصل دوم – اولین مثال کامل:
  • آماده سازی سیستم برای توسعه برنامه‌ها با استفاده از NHibernate
  • ایجاد یک مدل ساده از مشکل موجود
  • ایجاد بانک و برپایی یک نگاشت (Map) بین مدل و بانک
  • نوشتن و خواندن داده از و به بانک
  • بحث در مورد بدست آوردن نتیجه معادل بدون استفاده از NHibernate و یا ORM دیگر
3- فصل سوم - ایجاد یک مدل:
  • مدل چیست؟
  • عوامل اصلی موجود در ایجاد یک مدل چیست؟
  • چطور میتوان مدل ساخت؟
4- فصل چهارم – ایجاد شمای بانک:
  • یادگیری جدول چیست؟
  • یادگیری چطور جدولها به هم مرتبط شود؟
  • بحث در مورد  استراتژی‌های تحمیلی ای که کدام داده میتواند ذخیره شود
  • نمایش امکانات موجود برای بهبود کارایی دسترسی به داده
  • ایجاد بانک داده برای سیستم سفارش (Ordering System)
5- فصل پنجم - نگاشت مدل به بانک داده:
  • بدست آوردن یک درک درست درباره نگاشت و پیش نیازهای آن
  • بحث در مورد ریزه کاری‌های چهار تکنیک پر استفاده معمول نگاشت
  • توصیف و توسعه قراردادها برای کاهش تقلا در کدنویسی
  • ایجاد خودکار اسکریپت برای ایجاد شمای بانک دیتا از روی نگاشت مان
  • توصیف و نگاشت مدل دامنه سیستم سفارش مان
6- فصل ششم – وهله‌ها و تراکنش ها
  • بحث در مورد اشیاء وهله و تراکنش
  • معرفی شیء session factory
  • پیاده سازی برنامه ای که دیتا ذخیره و بازخوانی میکند
  • تجزیه و تحلیل متدهای گوناگون برای مدیریت وهله‌ها در پر استفاده‌ترین انواع برنامه
7- فصل هفتم - آزمایش کردن، نمایه سازی، نظارت، واقع نگاری
  • پیاده سازی یک بستر پایه برای ساخت آزمایش ساده کد دسترسی به بانک داده
  • ایجاد آزمایش‌ها برای تایید کد دسترسی به بانک داده مان
  • تجزیه و تحلیل ارتباط بین NHibernate و بانک داده
  • پیکربندی NHibernate برای واقع نگاری داده‌های مورد توجه
8- فصل هشتم - پیکر بندی
  • بحث در مورد پیکربندی قبل از شروع
  • آشنا شدن با لیست مولفه‌های NHibernate که میتوان پیکربندی کرد
  • یادگیری چهار روش متفاوت پیکربندی که چگونه میتوان در برنامه هایمان استفاده کرد
9- فصل نهم – نوشتن پرس و جو
  • یادگیری چگونگی استفاه از (LINQ (Language Integrated Query در NHibernate  برای دریافت داده
  • پرس و جو با استفاده از criteria query API
  • استفاده از گویش object-oriented اصلی SQL بنام Hibernate Query Language HQL
  • بحث در مورد موجودیت هایی با خواصی که توان lazy load دارند
  • مقابله با بارگذاری حریصانه با lazy loading بطوریکه بصورت دسته ای از پرس و جو بنظر آید
10- فصل دهم – اعتبار سنجی داده برای نگهداری (ذخیره)
11- فصل یازدهم – اشتباهات متداول – چیزهایی برای جلوگیری
 

 

 
مطالب
معرفی Local Storage و چند کتابخانه مرتبط
یکی از راه‌های ذخیره داده‌ها در سمت کلاینت، استفاده از کوکی‌ها می‌باشد که تقریبا همه با آن کم و بیش آشنایی داریم و هر کدام بسته به نیاز، تا حدودی از آن استفاده کرده‌ایم. اما می‌توان local storage را در یکی دو مورد نسبت به کوکی برتر شمرد؛ مواردی مثل حجم داده‌های ذخیره شده که نسبت به کوکی بیشتر می‌باشد و عدم ارسال با درخواست‌های ارسالی سمت سرور.

Local Storage
با استفاده از Local Storage قادر خواهیم بود تا داده‌هایی را در سمت کلاینت ذخیره کنیم؛ بدون اینکه بر عملکرد سایت تاثیر بگذارد. منظور از تاثیر بر روی عملکرد این است که در هر رفت به سمت سرور لازم نیست با درخواست ارسالی، داده‌های اضافه‌ای ارسال شوند.
با استفاده از Local Storage قادر خواهیم بود حداقل 5 مگابایت داده را ذخیره کنیم.

  استفاده از Local Storage با استفاده از دو شیء زیر امکان پذیر می‌باشد:
  • window.localStorage  : اطلاعات ذخیره شده در آن فاقد تاریخ انقضاء می‌باشند و تا زمانی که اقدام به حذف آن ننمایید، داده‌های آن معتبر می‌باشند.
  • window.sessionStorage : اطلاعات ذخیره شده در آن تا زمان بسته شدن تب مرورگر، معتبر می‌باشند. با بسته شدن تب فعلی مرورگر، تمامی اطلاعات ذخیره شده از بین خواهند رفت.

نحوه استفاده:

- نحوه افزودن داده در Local Storage به صورت کلید/ مقدار می‌باشد.

ابتدا نگاهی داشته باشیم به اینترفیس Storage:

interface Storage {
  readonly attribute unsigned long length;
  DOMString? key(unsigned long index);
  getter DOMString? getItem(DOMString key);
  setter void setItem(DOMString key, DOMString value);
  deleter void removeItem(DOMString key);
  void clear();
}
برای مطمئن شدن از پشتیبانی مرورگر از Local storage، بهتر است ابتدا اقدام به بررسی پشتیبانی مرورگر مربوطه کرده و در صورت پشتیبانی، اقدام به ذخیره سازی داده کنیم. نحوه بررسی پشتیبانی مرورگر به صورت زیر می‌باشد:
if (typeof(Storage) !== "undefined") {
    // do ...
}

شیء window.localStorage
همانطور که بیان کردیم، در این روش داده دارای تاریخ انقضاء نمی‌باشد.
() SetItem :
متد setItem برای ذخیره اطلاعات است و نحوه استفاده از آن به صورت زیر می‌باشد:
localStorage.setItem("lastpost", "localstorage");
setItem ابتدا مقدار کلید را بررسی کرده و در صورت عدم موجود بودن، اقدام به ذخیره مقدار با کلید مورد نظر خواهد کرد.
localStorage.setItem("visitorCount",15 );
localStorage.setItem("visitorCount", 16);
در کد فوق مقدار visitorcount برابر با 16 خواهد بود.

() getItem  :
برای دسترسی به مقدار ذخیره شده می‌توانیم از متد getItem به همراه مقدار کلید استفاده کنیم. در صورت موجود نبودن مقدار، null برگردانده خواهد شد.
 localStorage.getItem("lastpost");
لازم به ذکر است، میتوانیم به صورت زیر هم اقدام به ذخیره و بازیابی داده‌ها کنیم:
localStorage.lastpost = "localstorage";
document.getElementById("result").innerHTML = localStorage.lastpost;
در این حالت شبیه به استفاده از ViewBag  می‌باشد.

و برای حذف اطلاعات ذخیره شده:
localStorage.removeItem("lastpost");
- کلید و مقدار به صورت رشته‌ای ذخیره خواهند شد. در صورتی که قصد ذخیره سازی با فرمت‌های دیگری را داشته باشید، باید ابتدا اقدام به convert نمایید. البته در ادامه کتابخانه‌هایی را برای این مقصود معرفی خواهیم کرد.

خصوصیت length :
تعداد جفت کلید / مقدار‌های جاری را بر میگرداند.

متد Key :
این متد مقداری را از ورودی دریافت کرده و اسم کلید مورد نظر را بر میگرداند. ایندکس آن از صفر شروع خواهد شد. قطعه کد زیر باعث برگرداندن مقدار lastname می‌شود:
 localStorage.setItem("name","uthman" );
   localStorage.setItem("lastname","24" );

   alert(localStorage.key(1));
متد () clear :
این متد باعث پاک شدن تمامی داده‌های ذخیره شده خواهد شد.

شی sessionStorage :
از نظر syntax دستوری همانند localStorage می‌باشد و تفاوت آن فقط در زمان ذخیره سازی است؛ با بسته شدن تب مرورگر، تمامی داده‌های ذخیره شده پاک خواهند شد.

کتابخانه‌های مرتبط :
Locker :
با استفاده از این کتابخانه ، قادر خواهید بود تا اطلاعات را با فرمت‌های مورد نظر، بدون convert آنها ذخیره نمایید. نمونه‌ای از آن به صورت زیر خواهد بود:
Lockr.set('website', 'SitePoint'); // string
Lockr.set('categories', 8); // number
Lockr.set('users', [{ name: 'John Doe', age: 18 }, { name: 'Jane Doe', age: 19 }]);
کتابخانه فوق دارای امکاناتی بیشتری می‌باشد که در صورت تمایل می‌توانید به گیت هاب آن مراجعه نمایید.

secStore.js  :
با استفاده از کتابخانه SJCL امنیت داده‌های ذخیره شده، بالا می‌روند.
var storage = new secStore
  , options = {
    encrypt: true,
    data: {
      key: 'some data that is somewhat private'
    }
  };


storage.set(options, function(err, results){
  if (err) throw err;
  console.log(results);
});

و سایر کتابخانه‌های مرتبط :

//lz-string example

var string = 'A string to test our compression.';
console.log(string.length); // 33 
var compressed = LZString.compress(string);
console.log(compressed.length); // 18
string = LZString.decompress(compressed);