نظرات مطالب
مفاهیم برنامه نویسی ـ آشنایی با سازنده‌ها
سلام،
آقای فرقانی بسیار عالی بود، واقعا لذت بردم،
فقط خواهشی از شما دارم این هستش که : دقت و حساسیت مبحث شی گرایی رو احیانا فدای چیز‌های دیگر نکنید!، منظورم این هستش که تا حد توان اصول مهندسی نرم افزار رو به صورت کامل رعایت بفرمایید و نگران کاربر مبتدی نباشید، کاربر مبتدی ، ناخودآگاه خودش مطالب غیر قابل فهم رو فیلتر میکنه و در بدترین حالت، در آن مورد، از شما سوال خواهند کرد و شما هم آنها را به موضوع مناسب ارجاع خواهید داد هر چند اگر موضوع ارائه شده بعدا قراره باز بشه، خیلی راحت می‌تونید در متن نوید توضیحات بیشتر رو به خواننده بدهید و در غیر این صورت ارجاع به توضیحات مناسب.
به هر حال باز هم تاکید می‌کنم و سفارش میکنم که دقت بیان و رعایت اصول رو فدای هیچ چیزی نکنید.
ممنونم.
مطالب
نرمال سازی (قسمت اول: First Normal Form)
مقدمه
نرمالسازی یا normalization باعث جلوگیری از تکرار و افزونگی اطلاعات می‌شود. و همچنین مانع از یکسری ناهنجاری‌ها در عملیات درج، بروز رسانی، حذف و انتخاب خواهد شد.
شکل‌های نرمال متعددی تعریف شده اند که به شرح زیر است:
  • شکل نرمال اول (1NF)
  • شکل نرمال دوم (2ND)
  • شکل نرمال سوم (3NF)
  • شکل نرمال بویس کاد (BCNF)
  • شکل نرمال چهارم (4NF)
  • شکل نرمال پنجم (5NF)
سه شکل اول نرمال یعنی 1NF، 2NF و 3NF توسط دکتر Codd تعریف شده اند. شکل نرمال بویس کاد نیز که یک تعریف اصلاح شده و قوی‌تر از 3NF به Boyce و Codd منسوب است. بعد از آن Fagin شکل چهارم نرمال(4NF) را تعریف کرد (چرا که در آن زمان BCNF شکل سوم نرمال خوانده می‌شد). 

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

شکل اول نرمال (First Normal Form)
تعریف رسمی:
یک متغیر رابطه ای به شکل اول نرمال است اگر و فقط اگر در هر مقدار مجاز آن متغیر رابطه ای، هر چندتایی فقط یک مقدار برای هر خصیصه داشته باشد.
 
منظور از اصطلاحات متغیر رابطه ای، چندتایی و خصیصه به طور غیر رسمی به ترتیب برابر است با جدول، سطر و ستون.
قسمت کلیدی تعریف، این جمله است:  "فقط یک مقدار برای هر خصیصه داشته باشد"
به دو جدول زیر توجه کنید، این جداول به شکل اول نرمال نمی‌باشد چرا که به ازای هر مشتری برای خصیصه شماره تلفن چند مقدار خواهیم داشت:


در جدول اول ستون شماره تلفن چند بار تکرار شده است. یعنی برای یک مشتری چند مقدار برای خصیصه شماره تلفن خواهیم داشت که این مغایر با تعریف شکل اول نرمال است. همین اتفاق نیز در جدول دوم افتاده است با این فرق که مقادیر خصیصه شماره تلفن در یک ستون درج شده اند.

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


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

گروه‌های تکرار شونده را با آکولاد ({}) مشکل کرده ام. این گونه جداول (که حتی در شکل نرمال اول هم قرار ندارند) مشکلات فراوانی دارند که در زیر به مواردی اشاره خواهیم داشت:
  • چگونه معدل ترم 5 را در جدول درج کنیم؟ پس برای اینکه بتوانیم تمام معدل‌ها را در جدول داشته باشیم باید به تعداد حداکثر ترم تحصیلی گروه‌های تکرار شونده در جدول داشته باشیم.
  • برای دانشجویی که فقط یک ترم تحصیل کرده است تمام گروه‌های تکرار شونده به غیر از یکی خالی خواهد ماند. فضای بسیاری به هدر خواهد رفت.
  • گزارش گیری بسیار سخت خواهد شد. بطور نمونه، چطور می‌خواهید بالاتری معدل دانشجویان را بدست بیاورین؟

پس با تبدیل جدول غیر نرمال به شکل نرمال اول، به مشکلات فوق غلبه خواهیم کرد:

اما یک متغیر رابطه ای که فقط به صورت شکل اول نرمال است ساختاری دارد که به دلایل متعدد، نامطلوب است.

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

در بخش بعدی ابتدا وابستگی تابعی مورد بررسی قرار خواهد گرفت سپس به فرم دوم نرمال پرداخته خواهد شد.

اشتراک‌ها
نرم افزار یادآوری زمان استراحت (breaktimer)
پروژه ای open source  که در پلتفرم‌های متنوع نسخه نصبی دارد و میتوانید  جهت یادآوری زمان استراحت استفاده کنید.
برخی امکاناتی که استفاده کردم:
- غیر فعال کردن دکمه snooze و skip
- انتخاب زمان تکرار، مدت استراحت و ساعت کاری
نرم افزار کاربردیی هستش، در محیط کار استفاده کنید ... 
نرم افزار یادآوری زمان استراحت (breaktimer)
اشتراک‌ها
Hoisting در JIT دات نت

Hoisting برای مثال به معنای عدم محاسبه‌ی مجدد arr.Length در حلقه‌ی ذیل به ازای هر بار تکرار است:

public void Update(int[] arr, int x, int y)
{
    for (var i = 0; i < arr.Length; i++)
    {
        arr[i] = x + y;
    }
}

Hoisting در JIT دات نت
نظرات مطالب
Blazor 5x - قسمت ششم - مبانی Blazor - بخش 3 - چرخه‌های حیات کامپوننت‌ها
دلیل دوبار فراخوانی کدهای Razor در هنگام استفاده  از متدهای async سرویس‌های EF چیست ؟آیا راهی برای جلوگیری از تکرار آن وجود دارد؟
در تکه کد زیر کلمه Code دوبار در خروجی چاپ میشود و این برای کار با حلقه ها  باعث کاهش کارایی میشود
@page "/counter"  
@{ Debug.WriteLine("Code"); } @code { protected override async Task OnInitializedAsync() { var _dbContext = new ApplicationDbContext(); await _dbContext.Question.ToListAsync(); } }
نظرات مطالب
مهارت‌های تزریق وابستگی‌ها در برنامه‌های NET Core. - قسمت ششم - دخالت در مراحل وهله سازی اشیاء توسط IoC Container
منظور بنده وهله سازی کلاس Lazy در «تنظیمات اولیه‌ی ثبت سرویس‌ها» بود که  برای تمام سرویس ها  در کلاس startup برنامه فقط یک بار  این کلاس را وهله سازی نماییم و مجبور نباشیم به ازای هر سرویس این کار را تکرار کنیم؟ خواستم بدونم نحوه انجام این کار در Ioc Container توکار  NET Core. یا از طریق کتابخانه  Scrutor  به چه صورتی انجام می‌شود؟ 
نظرات مطالب
اعتبارسنجی در فرم‌های ASP.NET MVC با Remote Validation
حالت پیش‌فرض اعتبارسنجی آن OnBlur هست. یکبار هم که انجام شد، تا زمانیکه cache آن تغییری نکند، تکرار نمی‌شود. اگر می‌خواهید این وضعیت را تغییر دهید، می‌توان آن‌را دستی هم فعال کرد:
$("#id1").change(function () {
   // trigger RemoteValidation
   $('#id1').removeData('previousValue'); //clear cache
   $('form').validate().element('#id1'); //retrigger remote call
   // $('#id1').blur();
});
نظرات مطالب
ساخت ربات تلگرامی با #C
مشکل شما دقیقا جاییه که توی کد فوق نمایش داده نشده !
این متغیر kalame چیه و کجا تعریف شده؟
شما ظاهرا حواست نیست که یه متغیر رو قبل از حلقه تعریف کردی و یا کلا از نوع static در نظر گرفتی و مقدارش رو بین کاربرها به اشتراک گذاشتی
برای همین توی هربار تکرار حلقه و پاسخ دادن به کاربر، هنوز اطلاعات کاربر قبلی توی متغیر باقی مونده.
فعلا این نظریه که از روی حدس میشه داد. اگر مشکل این نبود باید سورس کامل‌تری ارائه بدی که بشه به راحتی مشکل رو پیدا کرد
نظرات مطالب
EF Code First #3
یک موردی که وجود داره این هست که انگار [compare] و [notmapped] بهم نمی‌سازن
این مورد رو برای فیلد تکرار کلمه عبور قرار دادم  که هم به جدول نگاشت نشه و هم بتونم توی فرم استفاده کنم ولی مثل اینکه این دو بهم نمیسازن
مورد بعدی اینکه وقتی از یک ویو مدل استفاده میشه که از یک مدل ارث بری می‌کنه ،ef موقع ساخت دیتابیس ساختار جدول رو از روی ویومدل بر میداره
نظرات مطالب
ایجاد سیستم وضعیت آب و هوا مانند گوگل (بخش اول)
- نه الزاما. اگر چندین جا استفاده و تکرار می‌شود یا منطق طولانی دارد، روش «نوشتن HTML Helpers ویژه، به کمک امکانات Razor» می‌تواند مفید باشد.
- منطق قرار گرفته در View فقط باید کار «نهایی» نمایشی را انجام دهد. اگر در View مثلا مستقیما با دیتابیس کار می‌کنید، محاسبات مرتبط با فیلد خاصی را انجام می‌دهید و کلا هر منطقی که «نهایی» بودن نمایش اطلاعات را زیر سؤال ببرد، باید از View جدا شده و به کنترلر و زیرساخت آن منتقل شود.