نظرات مطالب
معرفی پروژه فروشگاهی Iris Store
موقع کلیک روی تاریخ، قیمت و تخفیف که به صورت x-editable هستند این پیغام خطا در کنسول کروم و فایرفاکس ظاهر می‌شود:


...... 
Uncaught TypeError: Cannot read property 'settings' of undefined

در کامنت‌ها به راه حل اشاره شده است:
Issues with Jquery unobtrusive 

راه حل :
$('#username').on('shown', function() {
    var $innerForm = $(this).data('editable').input.$input.closest('form');
    var $outerForm = $innerForm.parents('form').eq(0);
    $innerForm.data('validator', $outerForm.data('validator'));
});
نظرات مطالب
دسترسی رایگان به کل مجموعه Pluralsight به مدت 10 روز
نام فایل ثابت هست؛ اما پارامترهای امضای دیجیتال آدرس فایل، هربار فرق می‌کند. البته اگر این پارامترها بر اساس مقدار کوئری استرینگ Expires تولید شده باشند، تغییر مقدار Expires بی معنا خواهد بود. عدد آن هم برمبنای روش متداول Unix time تولید شده. یعنی مثلا Expires=1329207593 به این معنا است که تاریخ منقضی شدن لینک مساوی «Tue, 14 Feb 2012 08:19:53 GMT» خواهد بود (^).
در کل توصیه من این هست که یک VPS ارزون قیمت ویندوز تهیه کنید. ماهی 10 تومن یا همین حدود میشه. بعد لینک‌ها رو در این VPS دریافت (سرعت پورت یک مگ دارند عموما) و سپس سرفرصت این طرف دریافت کنید.
نظرات مطالب
شرح حال ابزارهای گزارشگیری موجود
در مورد این iTextSharp نمی دونم اما با ابزارهای کزارش سازی زیادی کار کردم، منجمله CrystalReport, FastReport, Telerik Reporting, QuickReport و چند تا دیگه
اما هیچ کدوم به پای DevExpress XtraReports نمی رسند! این رو بدون اغراق می گم. تنها مشکلش عدم پشتیبانی از راست به چپ هست که چون مشتریش کمه برا راست به چپ پیاده سازی نمی کنند.

واقعا اگر امکانش بود قیمت یک میلیونیش رو هم می دادیم.
با استفاده از این کامپوننت یک برنامه گزارش سازی پویا تهیه کردم، امکاناتی که اون می داد فراتر از اونی هستند که تا حالا دیده بودم.

اما ابزارهای گزارش گیری اوپن سورس شاید زمان زیادی لازم باشه تا به قدرت ابزارهای تجاری برسند. البته این نظر منه.
نظرات مطالب
هزینه استفاده از دات نت فریم ورک چقدر است؟
سورس دانت به صورت Shared Source توزیع شده و به عبارت دیگر سورس پشت شیشه است (فقط جهت Reference و از این قبیل). تا آنجا که می‌دانم این مجوز توسط جامعه متن باز پذیرفته شده نیست. متن باز امکان تغییر را نیز می‌دهد. و یا شاید منظور شما از سورس باز، متن باز نبوده!

در مورد قیمت VS یکی از بچه‌ها صحبت خوبی داشت؛ اگر قرار بود ما VS را خریداری کنیم هرسال یا هر چند سال یکبار این کار را می‌کردیم و مایکروسافت با توجه به Optionهای خوبی که برای اینطور خرید کردن دارد (Renew و ...)، می‌توان VS Ultimate که اگر اشتباه نکنم 11 هزار دلار است را با 3 هزار دلار تهیه کنیم. وقتی همه حقوق مولفین رعایت شود مطمئناً 3 هزار دلار برای یک برنامه نویس متوسط به بالا مبلغ بسیار مناسبی خواهد بود. مشترک MSDN بودن هم که شامل سیستم‌عامل‌ها و ... هم خواهد شد.
نظرات مطالب
هزینه استفاده از دات نت فریم ورک چقدر است؟
سورس دانت به صورت Shared Source توزیع شده و به عبارت دیگر سورس پشت شیشه است (فقط جهت Reference و از این قبیل). تا آنجا که می‌دانم این مجوز توسط جامعه متن باز پذیرفته شده نیست. متن باز امکان تغییر را نیز می‌دهد. و یا شاید منظور شما از سورس باز، متن باز نبوده!

در مورد قیمت VS یکی از بچه‌ها صحبت خوبی داشت؛ اگر قرار بود ما VS را خریداری کنیم هرسال یا هر چند سال یکبار این کار را می‌کردیم و مایکروسافت با توجه به Optionهای خوبی که برای اینطور خرید کردن دارد (Renew و ...)، می‌توان VS Ultimate که اگر اشتباه نکنم 11 هزار دلار است را با 3 هزار دلار تهیه کنیم. وقتی همه حقوق مولفین رعایت شود مطمئناً 3 هزار دلار برای یک برنامه نویس متوسط به بالا مبلغ بسیار مناسبی خواهد بود. مشترک MSDN بودن هم که شامل سیستم‌عامل‌ها و ... هم خواهد شد.
مطالب
دو خبر در مورد برنامه Reflector

شاید این خبر رو دیده باشید که نگارش بعدی Reflector شرکت RedGate کاملا تجاری است (به قیمت 35 دلار) و دیگر نگارش lite و رایگانی نخواهد داشت؛ برخلاف وعده‌ای که در ابتدای کار در مورد رایگان نگه داشتن کار آقای Lutz Roeder داده بودند. همان روز هم شرکت JetBarins در تصویری به صورت ضمنی اعلام کرد که نگارش بعدی ReSharper چیزی شبیه به Reflector را به صورت سرخود ارائه خواهد داد. کامنت‌های آن هم جالب است. وقت کردید بخونید!


نظرات مطالب
اعمال تزریق وابستگی‌ها به مثال رسمی ASP.NET Identity
با تشکر از توجه شما. 
در این پروژه نمونه و با همین تنظیمات، شرایط بدین گونه است: 
کاربر سایت را به صورت ناشناس مشاهده می‌کند. سپس با اطلاعات خود وارد سایت می‌شود. پس از تعییت هویت، مثلا به بخش Product هم دسترسی پیدا می‌کند. تا این مرحله همه چیز خوب است و خیر. سپس از حساب خود خارج می‌شود و دقایقی بعد، مجددا وارد حساب خود می‌شود. از این لحظه به بعد، رفتار برنامه متفاوت می‌شود. چرا که با وجود اینکه کاربر تایید هویت شده، اما اگر بخواهد مثلا دوباره به همان بخش Product مراجعه کند، سیستم ابتدا او را به صفحه‌ی ورود هدایت کرده و با کاربر، به عنوان یک کاربر ناشناخته برخورد می‌کند. همین گونه است برای سایر قسمتهایی که صفت Authorize  برای آنها لحاظ شده. پرسش من این است که آیا این رفتار طبیعی ست؟
قبلا گفتم که با تغییر مقدار validateInterval   ظاهرا این مشکل بر طرف می‌شود. لااقل این رفتار تغییر می‌کند. شما  فرمودید که در نظرگرفتن هر عددی جز صفر، موجب می‌شود تا کوکی بلافاصله به روز نشود. این صحبت شما کاملا صحیح و منطقی. اما آیا ورودهای مکرر به نظر شما منطقی ست؟
به کدهای این پروژه هم دقت کردم. مقدار validateInterval   برابر با 30 لحاظ شده که ظاهرا نباید اینگونه باشد. برای اینکه هم به رویکردی که شما به آن اشاره کردید برسیم و هم کاربر مجبور نباشد مدام Login کند، لطفا بفرمایید که چه تغییراتی لازم است؟ در صورتیکه من اشتباه کرده ام و یا چیزی را ندیده و یا از قلم انداخته ام، لطف می‌کنید اگر راهنمایی بفرمایید.
نظرات مطالب
تبدیل HTML به PDF با استفاده از کتابخانه‌ی iTextSharp
- در مورد فارسی نویسی در iTextSharp یک دیباگ مرحله به مرحله قبلا در سایت مطرح شده. اگر خروجی یونیکد نگرفتید یعنی قلم صحیحی در حال استفاده نیست. کدهایی که قبلا ارسال کرده بودم به این نحو است:
// روش صحیح تعریف فونت  
var systemRoot = Environment.GetEnvironmentVariable("SystemRoot");
FontFactory.Register(Path.Combine(systemRoot, "fonts\\tahoma.ttf"));
در کدهای شما به این نحو:
var systemRoot = Environment.GetEnvironmentVariable("SystemRoot");
FontFactory.Register(Path.Combine(systemRoot, "c:\\windows\\fonts\\tahoma.ttf"));
با توجه به استفاده از Path.Combine، مسیری را که معرفی کرده‌اید می‌شود چیزی مانند c:\\windows\\c:\\windows\\fonts\\tahoma.ttf . به همین جهت این فونت یافت نشده و ثبت نمی‌شود (چون دوبار system root در آن وجود دارد).
- بله؛ قدرت پردازش CSS در XML Worker آن خیلی بهتر است از HTML Worker.
- در مورد میزان چرخش جدول، RunDirection = PdfWriter.RUN_DIRECTION_RTL را با حالت LTR هم تست کنید (PdfWriter.RUN_DIRECTION_LTR ).
مطالب
بازسازی کد: جایگزینی آرایه با شیء (Replace array with object)
از آرایه برای ذخیره سازی آیتم‌های مشابه استفاده می‌شود. این تشابه باید علاوه بر اینکه در نوع داده‌ای آیتم‌ها رعایت شود، باید از نظر مفهومی نیز رعایت شود.
زمانیکه از یک آرایه برای نگهداری المنت‌های غیر مشابه استفاده می‌شود، نیاز به چنین بازسازی کدی است. به طور مثال آرایه‌ای که آیتم اول آن "نام" و آیتم دوم آن "امتیاز" است. قطعا کار با چنین آرایه‌ای بسیار مشکل خواهد بود. زمانیکه یک آرایه را از نوع داده‌ای عمومی‌تری (مثلا object در سی شارپ) تعریف و انواع داده‌ای متفاوت را در آیتم‌های آن نگهداری کنیم، اوضاع بسیار بدتر خواهد شد. 
محور اصلی بازسازی کد "جایگزینی آرایه با شیء" ایجاد یک کلاس، برای ذخیره اطلاعات آرایه است. به این صورت که برای هر آیتم آرایه، یک خصوصیت در کلاس مربوطه ایجاد می‌شود. 
به طور مثال به آرایه زیر توجه نمایید:
var row = new string[3]; 
row[0] = "Liverpool"; 
row[0] = "15";
در آرایه بالا، آیتم اول نشان دهنده نام تیم و آیتم دوم نشان دهنده امتیاز تیم است. با وجود اینکه این مثال کمی غیر واقعی به نظر میرسد، اما چنین مثال‌هایی در برنامه نویسی روزمره ممکن است به اشکال مختلفی مشاهده شود. مانند استفاده از dictionary برای دریافت اطلاعات فرم وب، استفاده از Tuple (در زبان سی شارپ) برای انتقال اطلاعات و … 
در این مثال طراحی بهتر، ایجاد یک کلاس یا ساختار (بسته به شرایط کلی مسئله) برای نشان دادن امتیاز تیم است:  
public class Performance 
{ 
       public string TeamName { get; set; } 
       public int Score { get; set; } 
}
همانطور که مشاهده می‌کنید، به ازای هر یک از آیتم‌های آرایه، خصوصیتی در کلاس جدید ایجاد شده‌است. همچنین انتخاب انواع داده‌ای نیز در طراحی جدید، ساده‌تر و اصولی‌تر انجام خواهد شد.
تمامی استفاده‌ها از آرایه‌ها، در دسته بندی این نوشتار برای بازسازی کد قرار نمی‌گیرند. آرایه‌هایی که اصل مشابه بودن آیتم‌ها را رعایت می‌کنند، معمولا نیازی به بازسازی کد ندارند. به طور مثال در نرم افزارهای فروشگاه اینترنتی، خصوصیات کالا به صورت داینامیک ذخیره شده و احتمالا برای دسترسی و مدیریت آن، از آرایه یا لیست استفاده می‌شود. اما با کمی دقت خواهیم دید، این استفاده از آرایه، با تعریف مشابه بودن آیتم‌ها همخوانی دارد. زیرا تمامی آیتم‌های آرایه به طور مثال از نوع خصوصیت کالا هستند. همچنین عملا امکان بازسازی و ایجاد کلاس در این مثال وجود ندارد؛ زیرا خصوصیات کالاها در زمان توسعه مشخص نیستند و در زمان اجرای برنامه تنظیم می‌شوند. 
مطالب
طراحی تعاملی (Interaction Design)

تعریف Interaction Design در زبان طراحی، تعامل انسان و کامپیوتر و توسعه نرم‌افزار اینگونه بیان می‌شود:

« عمل طراحی تعاملی محصولات دیجیتالی، محیط‌ها، سیستم‌ها و سرویس‌ها. مانند سایر رشته‌های طراحی، Interaction Design دارای شاخه‌ها و توجهاتی است، اما به طور ساده می‌توان گفت که تمرکز اصلی این رشته برروی رفتارها است.»

طراحی تعاملی یا Interaction Design که به اختصار به آن IxD نیز گفته می‌شود، بر روی ایجاد واسط‌های کاربری جذاب با رفتار‌های خوب تمرکز دارد. فهم این نکته که کاربران و تکنولوژی چگونه با یکدیگر ارتباط دارند، در این شاخه بسیار مهم و ضروری است. با این درک، شما می‌توانید موارد زیر را پیش‌بینی نماید: اینکه چگونه یک فرد با سیستم تعامل دارد؟ چگونه مشکلات را با داشتن آن سیستم رفع می‌کند؟ و در نهایت با استفاده از این موارد راه‌های جدیدی برای توسعه سیستم، برای انجام کارها پیشنهاد دهید. در ادامه به بررسی Best Practice های Interaction Design خواهیم پرداخت.

بهترین روش‌های طراحی تعاملی ( Interaction Design )

در هنگام طراحی و توسعه یک محصول نرم‌افزاری با المان‌های تعاملی، ویژگی‌ها و سوالات مطرح شده‌ی زیر را در نظر بگیرید:

سوالات مهم در هنگام لحاظ کردن طراحی تعامل‌گرا


کاربران به چه صورت‌هایی می‌توانند با واسط کاربری در ارتباط باشند

- کاربر چه تعاملاتی را می‌تواند به طور مستقیم با ماوس، انگشت یا stylus با واسط کاربری داشته باشد؟

- چه دستوراتی را کاربر می‌تواند صادر کند و با آنها تعامل داشته باشد که به طور مستقیم جزء محصول نیست؟ به عنوان مثال Ctrl+C که درون مرورگرها فعال است و جزئی از خود محصول نیست.

دادن اطلاعاتی به کاربران، در مورد رفتار‌های سیستم، پیش از انجام یک عمل

- ظاهر المان‌های صفحه (رنگ، شکل، اندازه و ...) چه سرنخ‌هایی را در مورد عملکرد آنها به کاربر خواهد داد؟ این المان‌ها به کاربر می‌فهماند که چگونه باید از آنها استفاده کند.

- شما چه اطلاعاتی را می‌توانید در المان‌ها بگنجانید که کاربر پیش از انجام یک عملیات از عملکرد آن المان مطلع شود؟ این مفاهیم می‌توانند با گنجاندن label های با معنا در دکمه‌ها، یا دستورالعمل‌های بسیار کوتاه برای تاییدیه‌های نهایی کامل شود.

پیش‌بینی و کاهش خطاها

- آیا پیام‌های خطا، راه روشنی را برای کاربر باز می‌کند تا بتواند مشکل کار خود را پیدا کند و منشا خطا را کشف نماید؟

- آیا در برخی موارد فشار و اجبار ( Constraint ) برای تحمیل عملیاتی خاص به کاربر جهت جلوگیری از خطا وجود دارد؟ اصل Poka-Yoka می‌گوید برای جلوگیری از سردرگمی کاربر و همچنین جلوگیری از خطاهای ممکن، در برخی موارد لازم است که کاربر را در محدوده‌ای خاص و در یک مسیر مشخص (مانند مراحل تکمیل یک فرم) نگه داریم. این ایجاد فشار هم به کاربر کمک می‌کند و هم به تیم توسعه.

در نظر گرفتن فیدبک و زمان پاسخ سیستم

- چگونه قرار است که به کاربر بازخورد بدهیم که پروسه‌ای در حال اجرا است؟ هنگامیکه کاربر درگیر انجام عملیاتی است، سیستم باید متعاقبا یک پاسخ را برای کاربر نمایش دهد و چه بهتر که کاربر را در حین انجام پروسه (اگر پروسه طولانی باشد، مثلا بیش از 30 ثانیه) از آنچه که در سمت سرور صورت می‌گیرد آگاه سازد. این فرآیند‌ها را می‌توان با یک progress bar ساده مدل کرد.

- بین یک عمل و پاسخ آن چه مدت زمانی طول خواهد کشید؟ واکنش پاسخ را می‌توان در چهار سطح مشخص نمود: فوری یا immediate (کمتر از 0.1 ثانیه)، کند یا stammer (بین 0.1 تا 1 ثانیه)، وقفه یا interruption (بین 1 تا 10 ثانیه) و اختلال یا disruption  (بیش از 10 ثانیه).

نگاه استراتژیک درباره‌ی هر یک از عناصر درون صفحه

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

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

- آیا شما از استاندارد‌ها پیروی می‌کنید؟ بالاخره کاربران آنقدرها هم بی‌اطلاع نیستند. آنها کمی هم درباره‌ی اینکه یک رابط کاربری چگونه است و عناصر آنها چگونه رفتار می‌کنند، اطلاعات دارد. پس، از این رو نیازی به خلق و بدعت‌گذاری نیست. تنها کافی‌است اندکی از آنچه که در UX متداول شده، بهتر باشید. اگر روش شما بتواند خلاقانه و در عین حال ساده باشد، شما نیز می‌توانید صاحب سبک شوید.

ساده‌سازی برای افزایش سرعت یادگیری

- آیا اطلاعات مورد نیاز کاربر درون نرم‌افزار به هفت (به علاوه منهای دو) تکه تقسیم شده‌اند؟ George Miller طی آزمایشاتی کشف کرد که افراد تنها قادرند پنج تا نه مورد را در حافظه‌ی کوتاه مدت خود قرار دهند.

- آیا واسط User End تا حد ممکن ساده شده است؟ قانون Tesler بیان میکند که شما باید سعی کنید که تمامی پیچیدگی‌ها را تا آنجا که ممکن است از واسط User End حذف کنید.

منابع: