نظرات مطالب
OpenCVSharp #6
برای کار با وب کم و دوربین دیجیتال، این مقدار را باید محاسبه کرد (شمارش تعداد فریم دریافتی در طی حداقل 3 ثانیه):
private static double getFps(CvCapture capture)
{
    double counter = 0;
    double seconds = 0;
    var watch = Stopwatch.StartNew();
    while (capture.QueryFrame() != null)
    {
        counter++;
        seconds = watch.ElapsedMilliseconds / (double)1000;
        if (seconds >= 3)
        {
            watch.Stop();
            break;
        }
    }
    var fps = counter / seconds;
    return fps;
}
و بعد برای استفاده:
using (var capture = CvCapture.FromCamera(index: 0))
{
    var fps = getFps(capture);
    capture.SetCaptureProperty(CvConst.CV_CAP_PROP_FPS, fps);
    var interval = (int)(1000 / fps);
نظرات مطالب
MVC vs 3-Tier Pattern
لایه کسب و کار مغز برنامه شما میباشد. یک زمانی میخواهید معادله ریاضی حل کنید در این لایه و زمانی نیز نیاز است مقداری داده از انباره داده خود بخوانید. لذا UI درخواست محاسبه معادله یا استخراج گزارش را به کسب و کار میدهد، کسب و کار بررسی میکند تا درخواست را پاسخ دهد. اگر برای پاسخ نیاز به انباره داده بود به لایه داده میفرستد تا مطابق با آن درخواست داده‌های مناسب استخراج شده و برگشت داده شوند.
نکته ای که وجود دارد این است که لایه داده حتما نباید با یک پایگاه داده ارتباط برقرار کند، و لایه UI نیز نباید شخصا کار پردازشی یا منطقی انجام دهد و این کارها باید به لایه کسب و کار ارجاع داده شوند.
نظرات مطالب
بهینه سازی سرعت یافت ویوها با سفارشی سازی Lookup Caching در Razor View Engine
ضمن تشکر از ایده‌ای که مطرح کردید. طول عمر httpContext.Items فقط محدوده به یک درخواست و پس از پایان درخواست از بین می‌ره. مثلا یکی از کاربردهاش ذخیره اطلاعات Unit of work در طول یک درخواست هست و بعد از بین رفتن خودکار آن. بنابراین در این مثال cache.GetViewLocation اصلی بعد از یک درخواست مجددا فراخوانی میشه، چون GetRequestCache نه فقط طول عمر کوتاهی داره، بلکه اساسا کاری به key متد GetViewLocation نداره. کار s_key تعریف شده عموما تعریف lock هست نه استفاده ازش به عنوان کلید دیکشنری. بنابراین اگر خود MVC از HttpContext.Cache استفاده کرده، کار درستی بوده، چون به ازای هر درخواست نیازی نیست مجددا محاسبه بشه.
نظرات مطالب
محاسبه میانگین متحرک (moving average) در SQL Server 2012
با سلام و تشکر از شما. برای محاسبه میانگین متحرک در این سایت  به شیوه زیر عمل کرده. می‌تونید یه توضیحی راجع به اون بدهید.
SELECT
  T0.StockId
  ,T0.QuoteId
  ,T0.QuoteDay
  ,T0.QuoteClose
  , AVG (T0.QuoteClose) OVER (PARTITION BY T0.StockId ORDER BY T0.QuoteId ROWS 19 PRECEDING) AS MA20
FROM
  dbo.Quotes AS T0
نظرات مطالب
چک لیست تهیه یک برنامه ASP.NET MVC
- Forms authentication با IP کار نمی‌کند. بر اساس کوکی‌های رمزنگاری شده خاص خودش (مثلا در حالت بخاطر سپاری کلمه عبور) کاربر را بلافاصله اعتبارسنجی می‌کند.
- نکته Request.IsAuthenticated  رو گرفتی؟ پخته‌اش کن. مثلا بجای IP از نام یوزر که در Request کاربر اعتبارسنجی شده موجود است، استفاده کن. هدف ذکر یک نکته بود. هدف مطلب جاری ارائه راه حلی جامع برای شمارش مساله خطیر تعداد کاربران آنلاین نبود که مثلا بین 25 با 30 آن واقعا تفاوتی وجود دارد یا نه. اصلا مهم است یا نه.
من در این سایت این تعداد عدد رو برای 15 دقیقه کش می‌کنم. یعنی اصلا به روز نیست و لحظه‌ای محاسبه نمیشه و نمایش داده نخواهد شد. چرا؟ چون یک کاربرد مهم و اساسی نیست در سایت. فقط یک نمایش کلی است. فقط یک حس حضور در سایت هست؛ یعنی هستند چند نفر خواننده این دور و اطراف.
نظرات مطالب
EF Code First #7
- در مطلب «بررسی تفصیلی روابط many-to-many» توضیح داده شده.
- تعداد ستون‌های جدول واسط خارج از دسترس شما است و توسط EF مدیریت می‌شود.
- تعداد کالا در هر انبار را یا کوئری بگیرید که روش انجام کار در انتهای مطلب یاد شده با مثال عنوان شده یا اینکه یک فیلد محاسبه شده در جدول انبار ایجاد کنید و نه در جدول واسط.
تعریف این فیلد اضافی در جدول واسط بی‌معنا است؛ چون در این جدول، در هر سطر، رابطه بین یک کالا و یک انبار ذخیره می‌شود. بنابراین نگهداری تعداد کل کالاهای یک انبار خارج از مسئولیت یک ردیف این جدول واسط است.
نظرات مطالب
Microbenchmark
مطلب جالبی هست از یکی از اعضای تیم کامپایلر سی شارپ :(^)
بحث محاسبه کارآیی در دات نت شامل زمان صرف شده برای JIT اولیه کدها هم هست. به همین جهت اجرای اولیه اندکی بیشتر زمان می‌بره. همچنین GC هم در اینجا در ترد دیگری به موازات کار شما مشغول به کار است و اگر در یک اجرا زمان خوبی بدست آوردید به این معنا نیست که الزاما در اجرای بعدی هم همان زمان را بدست می‌آورید چون GC موکول شده به بعد. ضمن اینکه این نوع محاسبات چون به صورت ایزوله انجام می‌شود عموما بیانگر شرایط دنیای واقعی که پارامترهای زیادی در آن‌ها دخیل هستند، نیست.
و ... اینکه برای خیلی از برنامه نویس‌ها این نوع مقایسه‌ها بیشتر جذاب هستند:
Head-to-head benchmark: C++ vs .NET

پاسخ به بازخورد‌های پروژه‌ها
چند راهنمایی در مورد گروه بندی
- خیر. قابل مرج عمودی نیست.
- مراجعه کنید به مطلب گروه بندی و توضیحات enum ایی به نام GroupType
- نیاز به نوشتن یک IAggregateFunction سفارشی خاص خودتون دارید. یک نمونه رو در مثال ساعات کاری می‌تونید مشاهده کنید (WorkedHoursSumآن) و یا سورس پروژه در دسترس است. نمونه‌های دیگر برای ایده گرفتن اینجا هستند. در اینجا double.TryParse آن‌را طوری تغییر بدید که خروجی ویژه شما را بتواند پردازش کند. همچنین در اینجا می‌تونید عدد نهایی بازگشت داده شده رو به هر روشی که مایل بودید محاسبه و تغییر بدید و نهایتا برای معرفی این کلاس سفارشی جدید، از aggregateFunction.CustomAggregateFunction استفاده کنید.
پاسخ به بازخورد‌های پروژه‌ها
نمایش ردیف های اضافه در انتهای هر صفحه
- یک مثال محاسبه بیمه و مالیات یک فاکتور که جدول خاصی را در انتهای گزارش (نه انتهای هر صفحه) اضافه می‌کند، در مجموعه مثال‌ها موجود است.
- اگر table.NumberOfDataRowsPerPage تنظیم نشده، یعنی جدول تا پایان صفحه و تا جایی که جا باشد ادامه خواهد یافت. در این حالت می‌تونید اطلاعات اضافی ثابت را در Footer قرار دهید. مثال در مورد تهیه footer سفارشی زیاد هست.
- اگر table.NumberOfDataRowsPerPage تنظیم شده چیزی شبیه به مثال شما مثلا 4 ردیف در صفحه و دو ردیف اضافی، می‌تونید توسط روش events.RowStartedInjectCustomRows یک ردیف دلخواه را جایی تزریق کنید، قبل از ردیف مجموع صفحه البته. یک مثال
 
پاسخ به بازخورد‌های پروژه‌ها
کندی ایجاد فایل pdf
این اندازه گیری را به صورت زیر مجددا انجام دهید:
- یک فایل Global.asax به سرویس تهیه شده اضافه کنید. در روال protected void Application_Start آن، یک گزارش خالی رو تهیه کنید. هدف از اینکار وادار کردن فعال شدن JIT، جهت کامپایل زود هنگام iTextSharp است. JIT در هنگام آغاز یک برنامه دات نتی، قسمت‌های اعظم و مورد نیاز کدهای میانی را کامپایل می‌کند اما نه همه‌ی آن‌را. مابقی در زمان نیاز کامپایل خواهند شد. با این روش می‌تونید JIT رو وادار کنید زودتر کارش را به اتمام برساند. (همین مساله در زمان تهیه اولین گزارش به شدت خودش را نشان می‌دهد)
- تهیه دیتاسورس را از متد تهیه گزارش خارج کنید. این هم بالاخره زمانی را صرف می‌کند. اما بر اساس آن نباید سرعت کار با کتابخانه تهیه گزارش را محاسبه کرد.
- سه بار اندازه گیری کنید. بعد میانگین بگیرید.