نظرات مطالب
استفاده از لوسین برای برجسته سازی عبارت جستجو شده در نتایج حاصل
- اگر کوئری SQL شما از ایندکس استفاده می‌کند نیازی به روش‌های full text search ندارید و موتورهای بانک اطلاعاتی به اندازه کافی برای مدیریت این نوع موارد سریع و بهینه هستند.
- جستجوی این سایت و یا full text search تک کلمه‌ای نیست. می‌تونید جمله هم بنویسید. کلا برای بهبود سرعت، کاهش مصرف CPU و حافظه کوئری‌های SQL ایی که از like استفاده می‌کنند، روش full text search پیشنهاد می‌شود.
استفاده از like در عبارات SQL روش بهینه‌ای نیست چون هربار full table scan صورت می‌گیرد (تصور کنید 100 نفر در حال جستجوی مطالبی در سایت هستند. در این حالت مصرف CPU، استهلاک هارد و مصرف بالای حافظه را درحین اسکن کامل جداول بانک اطلاعاتی درنظر بگیرید)

نظرات مطالب
ASP.NET MVC #4
قرار نیست برای هر کنترلر و View ایی که تعریف می‌شود، در فایل global.asax.cs تغییری انجام شود. route پیش فرض آن در اکثر موارد جوابگو است.
مگر اینکه بخواهید redirect‌های خاصی را تعریف کنید. مثلا لینک‌های تگ‌ها در بلاگر به این شکل بودند و هستند : http://site/search/label/tagname
برای اینکه این نوع لینک‌های رسیده و bookmark شده یا ثبت شده در سایت‌های مختلف به آدرس جدید http://site/tag/name هدایت شوند، می‌شود یک route برای آن نوشت:
 routes.MapRoute(
                "old_blogger", // Route name
                "search/label/{name}", // URL with parameters
                new { controller = "Tag", action = "Index", name = UrlParameter.Optional } // Parameter defaults
            );
به این ترتیب به صورت خودکار آدرس‌های قدیمی به آدرس‌های جدید (کنترلر Tag سایت) نگاشت خواهند شد و از این دست موارد. خلاصه فایل global.asax.cs نیاز به آنچنان تغییری ندارد و پیش فرض‌های آن در بسیاری از موارد کافی هستند. 
نظرات مطالب
یکسان سازی ی و ک دریافتی حین استفاده از NHibernate
سلام و عرض ادب
اگر کلیت مشکل فارسی و عربی را بررسی کنیم به گمانم به 3 سطح زیر میرسیم
1- تبدیل در ویندوز
2- تبدیل در UI
3- تبدیل در بانک اطلاعاتی

در تایید فرمایش شما ، شخصا چون صدها کاربر با میلیونها رکورد پراکند در سطح کشور دارم که همگی از هر دو ویندوز XP و 7 میخواهند استفاده کنند و هزینه تبدیل اطلاعات قبلی به فارسی بسیار بالاست ، ترجیح میدهم ادامه ورود اطلاعاتم روی عربی باشد .

اما در سطح بانک اطلاعاتی بدلیل کنترلهای فراوان و احتمال خطا زیاد موافق نیستم (اگر نیاز است میتوانم توضیح بیشتری بدهم )

در سطح UI هم همانگونه که فرمودید مشکلات عدیده ایی وجود دارد

در سطح ویندوز بهترین راه حل است ..اما نمیدانم چگونه میتوانم انرا پیاده کنم . اگر بتوانید راهنمایی بفرمایید من در مورد پیاده سازی و یا سرمایه گذاری روی پیاده سازی مشکلی ندارم

مرسی

وکیلی

Javan_Soft@Yahoo.com
نظرات مطالب
انتقال SVN به یک سیستم جدید
سلام
1 - اساس کار متداول SVN بر اساس فولدر سازی به ازای هر تغییر نیست. به ازای هر تغییر شما می‌تونید موارد اصلاحی را commit‌ کنید. بعد می‌شود بر اساس comment نوشته شده برای این commit‌ گزارش گرفت و نگارش جاری را مثلا با 5 نگارش قبل مقایسه کرد. با همین ابزار diff ایی که معرفی کردم. ضمنا امکان export کامل پروژه به ازای هر نگارش commit شده وجود دارد.
البته مباحث انعشابات و غیره هم وجود دارد که در فصلی جداگانه به آن پرداخته شده.
می‌شود برچسب یا tag ایجاد کرد و کل پروژه را تا یک نگارش خاص در آن قرار داد. عموما برای ارائه نگارش‌های عمومی این روش توصیه می‌شود.
یا می‌شود یک انعشاب درست کرد و جدا از خط اصلی کاری یا همان trunk کار کرد (مثلا آزمایش یک قابلیت جدید) و سپس این انعشاب تکمیل شده را با trunk و خط اصلی کاری یکی کرد.
هر کدام از این موارد (برچسب یا انشعاب) هم بر اساس پوشه‌ها هستند البته در مخزن کد.

2 - افزونه Visual SVN این مورد را ساده‌تر کرده. خودش گزینه‌ی ایجاد خودکار مخزن و افزودن به آن‌را دارد و از این لحاظ در وقت صرفه جویی می‌شود.
مطالب
OneNote و مصرف بالای RAM و CPU

از برنامه OneNote زیاد استفاده می‌کنم. عموما برای یادداشت برداری از سایت‌ها؛ فقط کافی است یک صفحه از مرورگر خودتون را با Ctrl+A انتخاب و با Ctrl+C در حافظه کپی کنید. سپس با Ctrl+V در OneNote ، کل صفحه با همان فرمت اصلی و تمام تصاویر، جداول و غیره ذخیره خواهد شد. همچنین در OneNote 2010، دریافت تصاویر از سایت‌ها به صورت asynchronous است (برخلاف نگارش 2007 آن) و حین دریافت تصاویر برنامه متوقف نمی‌شود.

اما اگر سرویس Windows search که کار indexing را انجام می‌دهد خاموش باشد:
  • احتمالا OneNote شما بالای 400 مگ رم مصرف خواهد کرد.
  • مرتبا هنگ می‌کند.
  • عموما CPU Usage ایی بالای 50 درصد به صورت مداوم خواهید داشت.
  • جستجوی آن دیگر درست کار نمی‌کند و بسیار بسیار کند خواهد بود.
و اگر سرویس یاد شده روشن باشد،‌ همه چیز عادی است، از مصرف رم تا CPU و غیره.

مطالب
پایان پروژه ASP.NET Ajax Control Toolkit !

بله! همانطور که حدس زده می‌شد بالاخره مایکروسافت تکلیف خودش را با کتابخانه‌های Ajax ایی تولید شده در طی این چند سال مشخص کرد و از این پس انتخاب اصلی جهت تولید برنامه‌های ASP.NET مبتنی بر Ajax ، تنها jQuery است.
اصل مطلب رو می‌تونید اینجا مطالعه کنید:



خلاصه آن:
  • ASP.NET AJAX در آینده نیز کاملا پشتیبانی می‌شود، اما شهروند درجه یک محسوب نخواهد شد؛ مانند استفاده از ScriptManager و UpdatePanel
  • Ajax Control Toolkit که اکنون به صورت سورس باز در سایت CodePlex نیز قابل دریافت است، منسوخ شده در نظر گرفته شده و تنها در آینده شاید هر از چندگاهی به رفع باگ‌های گزارش شده در آن پرداخته شود (اما دیگر به صورت فعال توسعه داده نخواهد شد).
  • Microsoft Ajax Library / ASP.NET Ajax Library هر چند تشابه اسمی با ASP.NET Ajax دارند اما جزئی از کتابخانه‌ی AJAX Control Toolkit بوده و این مورد نیز از این پس منسوخ شده در نظر گرفته خواهد شد (مانند استفاده از DataView یا Sys.require ).

راهنماهای پروژه‌ها
اعداد فارسی در گزارشات
عموما برای نمایش اعداد فارسی در گزارشات، از فونت‌های فارسی تغییر یافته استفاده می‌شود. برای مثال فونت irsans ایی که در پوشه bin مثال‌های پروژه هست، از این نوع است. فونت‌های معمولی را در یک فونت ادیتور باز می‌کنند و بجای اعداد انگلیسی آن، معادل اعداد فارسی موجود در همان فایل فونت را کپی و پیست می‌کنند. این روش از قدیم برای ساخت گزارشات فارسی کاربرد داشته است.

یک نکته: (خصوصا در جایی که Font از نوع System.Drawing.Font مورد نیاز است؛ مثلا در حین تولید نمودارهای MS Chart)
اگر فونت مورد نظر بر روی سرور نصب نیست، به این صورت هم قابل بارگذاری است:
var privateFontCollection = new PrivateFontCollection();    
privateFontCollection.AddFontFile(fontPath);
var fontFamily = privateFontCollection.Families[0];
var font = new Font(fontFamily); 
البته لازم به ذکر است که روش دیگر فرمت مقادیر نمایش داده شده، تنظیم DisplayFormatFormula است. یک مثال کاربردی در این زمینه: (^)
پاسخ به بازخورد‌های پروژه‌ها
عدم authorization بر اساس Permissions
Admin، User و ... این‌ها یکسری اسم بیشتر نیستند و به خودی خود ارزشی ندارند. اگر کاربری نقش CanAccessToSystemMaintenance در لیست نقش‌هاش ثبت شده باشه، به اون دسترسی پیدا می‌کنه. اگر نه، خیر. این شما هستید که به این نام‌ها مفهوم می‌بخشید (اگر در جایی استفاده شوند یا خیر). به همین جهت فیلتر Authorize هم یک لیست از نقش‌ها را قبول می‌کند. هم فیلتر Authorize و هم متد IsInRole بر اساس User Claims کار می‌کنند (یعنی لیست نقش‌های کاربر از بانک اطلاعاتی خوانده شده و به کوکی او در زمان لاگین اضافه می‌شوند. اگر این لیست فقط یک نقش را دارد (نامش برای این سیستم مهم نیست)، آن شخص فقط به همان یک نقش دسترسی خواهد داشت).
اگر می‌خواهید متد User.IsInRole به فیلد Permissions شما واکنش نشان دهد، باید لیست مربوطه، به لیست نقش‌ها یا Claims آن کاربر اضافه شود. در غیراینصورت کار نمی‌کند ( فیلتر Authorize هم به همین صورت).
- Mvc5AuthorizeAttribute.cs دقیقا همان فیلتر Authorize اصلی است که برای واکنش نشان دادن به اطلاعات AJax ایی طراحی شده و اصلا اطلاعات Permissions را بررسی نمی‌کند.
- فیلتر Mvc5ClaimAccessAuthorizeAttribute.cs به اطلاعات Claim خاصی واکنش نشان می‌دهد.
پاسخ به بازخورد‌های پروژه‌ها
تنظیم چندین OverallSummarySettings برای ستون های مختلف
OverallSummarySettings یک برچسب عمومی وکلی است (و به اندازه‌ی کافی جا برای نمایش آن هست). اگر می‌خواهید درکنار مقدار نهایی محاسبه شده، یک عبارت دلخواه را نمایش دهید، DisplayFormatFormula را مقدار دهی کنید که یک Func است با این ساختار:
public Func<object, string> DisplayFormatFormula { set; get; }
در اینجا object ایی که در اختیار شما قرار می‌گیرد، حاصل اعمال AggregateFunction است. رشته‌ای را که انتظار دارد، عبارتی است که شما سفارشی سازی خواهید کرد:
column.AggregateFunction(aggregateFunction =>
{
   aggregateFunction.NumericAggregateFunction(AggregateFunction.Sum);
   aggregateFunction.DisplayFormatFormula(obj => obj == null || string.IsNullOrEmpty(obj.ToString()) ? string.Empty : string.Format("{0:n0}", obj));
});
برای مثال در اینجا جمع ستون مرتبطی محاسبه شده، اما حاصل آن به فرمول نمایشی فوق ارسال شده تا سه رقم جداکننده‌ی هزارها به نتیجه‌ی جمع اضافه شود. در اینجا اگر علاقمند بودید هر رشته یا برچسب دیگری را هم اضافه کنید.
پرسش‌ها
جستجو Contains روی کلید های ترکیبی

اگر یک لیست رشته ایی داشته باشیم به راحتی میتونیم روی پایگاه داده جستجو کنیم:

var eyeColors = new List<string>
{
    "Black", "Green", "Brown"
};
var specificUsers = _context.Users.Where(x => eyeColors.Contains(x.EyeColor)).ToList();

حالا اگه لیست ما ترکیبی باشه این سرچ باید به چه صورت انجام بشه:

public class User
{
    public string FullName { get; set; }

    public string EyeColor { get; set; }
}
var customUsers = new List<User>
{
    new User{FullName = "Ali Ahmadi", EyeColor = "Brown"},
    new User{FullName = "Milad Rezaei", EyeColor = "Green"}
};

var specificUsers = _context.Users.Where(x => customUsers.Contains(new User(){EyeColor = x.EyeColor, FullName = x.FullName})).ToList();

روش فوق و روش های زیادی رو سرچ کردم ولی به جواب نرسیدم. آیا میشه از EF استفاده کرد یا راه حل دیگری دارد ؟