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

اگر چندین درخواست با یک Session ID به موتور پردازشی ASP.NET وارد شوند و حداقل یکی از آن‌ها به صورت سشنی خواندنی+نوشتنی علامت گذاری شده باشد، اینگونه درخواست‌ها serialized می‌شود. به این معنا که این نوع درخواست‌ها در صف قرار داده شده و به ترتیب رسیدن، اجرا می‌شوند. این کار هم از این جهت لازم است که چندین درخواست یا به عبارتی چندین ترد همزمان، سبب انجام تغییرات ناخواسته‌ای در مقادیر سشن مورد استفاده نشوند.
و اگر چندین درخواست با یک Session ID به موتور پردازشی ASP.NET وارد شوند و تمام آن‌ها سشن «فقط خواندنی» باشند یا در آن‌ها سشن «غیرفعال» شده باشد، این درخواست‌ها به صورت موازی پردازش خواهند شد.

بنابراین اگر در برنامه خود از سشن استفاده نمی‌کنید، سطر زیر را به وب کانفیگ برنامه اضافه نمائید تا حداکثر استفاده را از پردازش موازی خودکار کرده باشید:

<httpModules>
   <remove name="Session"/>
</httpModules>

<sessionState mode="Off" />

و یا در ASP.NET MVC می‌توان کنترل ریزتری را به نحو زیر نیز اعمال کرد:
[SessionState(SessionStateBehavior.Disabled)]
public class AjaxTestController : Controller
{  
   //...
}
در اینجا تنها حالت سشن مرتبط با اکشن متدی (و یا تمام اکشن متدهای یک کنترلر) که برای درخواست‌های Ajax طراحی شده، خاموش گردیده است تا درخواست‌های غیرهمزمان Ajaxایی بتوانند حداکثر استفاده را از پردازش موازی خودکار کنند.
نکته دیگر اینکه اگر نیاز به استفاده از سشن در یک اکشن متد وجود داشته باشد می‌توان از فیلتر سشن‌های فقط خواندنی استفاده کرد تا باز هم به همان پردازش موازی پشت صحنه برسیم:
[SessionState(SessionStateBehavior.ReadOnly)]
مطالب
نکات امنیتی OWASP مخصوص برنامه نویس‌های دات نت
OWSAP ارگانی است غیرانتفاعی که هدف آن ترویج طراحی برنامه‌های امن وب است. در این راه هم مطالب آموزشی بسیار ارزشمندی را منتشر کرده است [+]. در لینک‌های زیر این مطالب از دیدگاه برنامه نویس‌های دات نت مورد بررسی قرار گرفته‌اند. هر چند مطابق آخرین گزارش WhiteHat که اخیرا منتشر شده [+]، تعداد Exploits مربوط به ASP.NET در مقایسه با PHP و جاوا بسیار کمتر بوده اما نیاز است تا با مشکلات عمومی موجود و راه‌حل‌های مرتبط بیشتر آشنا شد:



پروژه‌ها
TaskoMask : سیستم مدیریت تسک سورس باز مبتنی بر NET 6, Microservices, DDD
توضیح
پروژه‌ی سورس باز TaskoMask یک سیستم مدیریت تسک رایگان می‌باشد که سورس آن را می‌توانید از طریق این آدرس در گیت هاب مشاهده کنید. همچنین این پروژه از طریق آدرس taskomask.ir نیز در دسترس میباشد.
برای استفاده مفیدتر از این پروژه، داکیومنت‌های مورد نیاز شامل بخش دامین، معماری، وب سرویس و ... ایجاد شده اند که از طریق ریپازیتوری این پروژه بر روی گیت هاب در دسترس هستند.


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


ویژگی ها
در اینجا برخی ویژگی‌های مهم این پروژه را بررسی میکنیم ولی برای اطلاع از لیست دقیق ویژگی‌ها و امکانات این پروژه و نیز دسترسی به داکیومنت‌ها و بورد‌های آن، بهتر است به ریپازیتوری آن در گیت هاب مراجعه کنید.
NET 6.
#C
Blazor
 ASP.NET Web API
ASP.NET MVC
MongoDB
Redis
MediatR
Microservices
 DDD
CQRS
Event Sourcing
Notification
Repository
Onion Architecture 
 Acceptance Testing
Integration Testing
Unit Testing
UI Testing
E2E Testing


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


درخواست حمایت 
اگر این پروژه به هر نحوی برای شما سودمند بود با دادن یک ستاره ⭐ در گیت هاب ما را حمایت کنید.


تصاویر پروژه

مطالب
چرا به الگوهای طراحی JavaScript نیاز داریم ؟
امروزه اهمیت یادگیری JavaScript بر هیچ کس پوشیده نیست ، API‌های جدید HTML 5 و امکانات جدید وب مثل Geo Location ، Offline storage ، Canvas ، Offline Web applications و ... همه نیاز به دانش JavaScript دارند. در نتیجه نیاز است علاوه بر یادگیری JavaScript به تمیز کد نوشتن جهت سهولت نگهداری آگاه بود.  همانطور که در کدهای سمت سرور مثل C# و یا PHP نیاز به استفاده از الگوهای طراحی (Design Patterns)است در JavaScript هم اوضاع به همین منوال است.
الگوی طراحی یک راه حل قابل استفاده مجدد است که برای حل مشکلات متداول در طراحی نرم افزار به کار می‌رود.
چرا به الگوی‌های طراحی JavaScript نیازمندیم ؟ 
  1. می خواهیم کد هایی با قابلیت استفاده‌ی مجدد بنویسیم ، استفاده از عملکرد‌های مشابه در سطح صفحات یک Web application یا چند Web Application.
  2. می خواهیم کد هایی با قابلیت نگهداری بنویسیم ، هر چه قدر در فاز توسعه کد‌های با کیفیت بنویسیم در فاز نگهداری از آن بهره می‌بریم. باید کد هایی بنویسیم که قابل Debug و خواندن توسط دیگر افراد تیم باشند.
  3. کدهای ما نباید با توابع و متغیر‌های دیگر پلاگین‌ها تداخل نامگزاری داشته باشند. در برنامه‌های امروزی بسیار مرسوم است که از پلاگین‌های Third party استفاده شود. می‌خواهیم با رعایت Encapsulation and modularization در کدهایمان از این تداخل جلوگیری کنیم.
معمولا کد‌های JavaScript که توسط اکثر ما نوشته می‌شود یک سری تابع پشت سرهم هست ، بدون هیچ کپسوله سازی : 
function getDate() {
    var now = new Date();
    var utc = now.getTime() + (now.getTimezoneOffset() * 60000);
    var est;
    est = new Date(utc + (3600000 * -4));
    return dateFormat(est, "dddd, mmmm dS, yyyy, h:MM:ss TT") + " EST";

}
function initiate_geolocationToTextbox() {
    navigator.geolocation.getCurrentPosition(handle_geolocation_queryToTextBox);
}

function handle_geolocation_queryToTextBox(position) {
    var longitude = position.coords.longitude;
    var latitude = position.coords.latitude;
    $("#IncidentLocation").val(latitude + " " + longitude);
}
به این روش کدنویسی Function Spaghetti Code گفته می‌شود که معایبی دارد : 
  • توابع و متغیر‌ها به Global scope برنامه افزوده می‌شوند.
  • کد Modular نیست.
  • احتمال رخ دادن Conflict در اسامی متغیر‌ها و توابع بالا می‌رود.
  • نگهداری کد به مرور زمان سخت می‌شود.
با شبیه سازی یک مثال مشکلات احتمالی را بررسی می‌کنیم : 
// file1.js
function saveState(obj) {
    // write code here to saveState of some object
    alert('file1 saveState');
}
// file2.js (remote team or some third party scripts)
function saveState(obj, obj2) {
     // further code...
    alert('file2 saveState");
}
همانطور که می‌بینید در این مثال در 2 فایل متفاوت در برنامه مان از 2 تابع با اسامی یکسان و امضای متفاوت استفاده کرده ایم . اگر فایل‌ها را اینگونه در برنامه آدرس دهی کنیم : 
<script src="file1.js" type="text/javascript"></script>
<script src="file2.js" type="text/javascript"></script>
متد saveState در فایلی که دیرتر آدرس داده شده (file2.js) ، متد saveState در file1.js را Override می‌کند ، در نتیجه عملکردی که از متد saveState در فایل اول انتظار داریم اتفاق نمی‌افتد.
 در پست بعدی به راه حل این مشکلات و کپسوله سازی خواهم پرداخت.
برای مطالعه‌ی بیشتر کتاب (Learning JavaScript Design Patterns) را از دست ندهید.
اشتراک‌ها
به روز رسانی امنیتی دات نت April 2015

اگر در وب کانفیگ برنامه‌های وب، حالت نمایش جزئیات خطاها به عموم تنظیم شده باشد، احتمال مشاهده‌ی جزئیات فایل وب کانفیگ وجود دارد.

حالت‌های امن:

<customErrors mode="remoteOnly" />
<customErrors mode="On" defaultRedirect="ErrorPage.htm" />
حالت ناامن:
<customErrors mode="off" />
به روز رسانی امنیتی دات نت April 2015
اشتراک‌ها
کمپین قلم فارسی آزاد

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


کمپین قلم فارسی آزاد
نظرات مطالب
نحوه ایجاد یک تصویر امنیتی (Captcha) با حروف فارسی در ASP.Net MVC
با تشکر فراوان از مقاله بسیار عالی
سوالی که اینجا مطرحه راه کار برای استفاده از این ماژول در دو وب سایت که بر روی یک هاست بارگذاری شدند چیه ؟
در واقع وقتی یکی از وب سایت‌ها فعال است برای وب سایت دوم این ماژول کار نمی‌کنه و پیام System.Security.Cryptography.CryptographicException: Object already exists دریافت می‌کنم.
لطف می‌کنید راهنمایی کنید به چه طریقی مشکل حل می‌شه .

نظرات مطالب
Image Annotations
اگر متدهای وب سرویس رو درون صفحاتی قرار بدیم که نیاز به لاگین کردن و احراز هویت جهت دسترسی به آنها باشد ، آیا میتوان متدهای وب سرویس رو  خارج از اون صفحات فراخوانی نمود ؟
چه تضمینی وجود دارد که در خارج از صفحات با سطح دسترسی (حداقل لاگین) وب سرویسها فراخوانی نشوند ؟
به نظر شما MS AJAX  کارش به پایان رسیده ؟
تشکر

نظرات مطالب
MVVM و فراخوانی متدهای اشیاء View از طریق ViewModel
با سلام.
وقتی که شاهین کیاست به من ایمیل زد و موضوع "خلاصه اشتراکهای روزانه" و پاسخی که جناب نصیری دادند رو به من اطلاع داد ابتدا گفتم نه! آخه چرا؟! ولی چند دقیقه بعد که کمی فکر کردم دیدم ایشون حق دارند. وقتی فقط یه نفر باشه که بروز باشه ، اطلاعات رو به اشتراک بگذاره و بازخوردی نبینه خسته ککنده هست.
متاسفانه این چند وقت اخیر اکثر دوستان دیگه هم مثل "بهروز راد" دست از نوشتن برداشتن. وبلاگ "مهدی موسوی" رو نگاه کنید. آخرین به روز رسانی برای چه تاریخی هست.
کسانی مثل مهدی موسوی ، وحید نصیری ، بهروز راد و دیگر دوستان که دانش زیادی برخوردار هستند ، گرفتاری هاشون هم بیشتر اما با تمام این گرفتاری ها به فکر ارتقاء سطح علمی دیگران هم هستند.
اما همونطور که جناب نصیری گفتند تعداد فنی نویسان بسیار کم هست.
وحید نصیری یکی از کسانی هست که من هر وقت میخوام به کسی یک فعال در زمینه ی IT رو معرفی کنم ایشون اولین نفر هست. من شخصا همیشه این بلاگ رو بررسی میکنم و از مطالب مفیدش استفاده میکنم.
امیدوارم که این وضع عوض بشه و همه ی دوستان اطلاعاتشون رو در هر سطحی که هست به اشتراک بگذارند. منظورم با خودم و شاهین هم هست. باید شروع کرد.
مرسی وحید نصیری.
نظرات مطالب
خواندنی‌های 23 فروردین
با سلام،
دوست عزیز. من اکیداً پیشنهاد می کنم سعی در فارسی کردن دانش رایانه نکنید. این خیانت است به آینده علمی کشور. محافظت از زبان پارسی وظیفه تک تک ما ایرانیان است. اما با راه و روش درستش. این علم و اکثر متون فنی آن به زبان انگلیسی بوده و کاربرد روزانه لغات فنی به زبان اصلی، باعث بالا بردن امکان مطالعه مطالب روز توسط تمام سطوح کارشناسان کشور و دانشجویان در این رشته و در سطوح مختلف آن می شود. چه علاقه ای به ریختن آب در چرخ مترجمان دارید ؟؟ آنها کار با ارزشی می کنند. اما ترجمه متون فنی کار عجیبی است وقتی می توان این مسئله را به خصوص در مورد زبانهای فنی حل کرد. واقعاً به نظر شما "دایر کردن فرو رفتنی" کاربردی زیبا و معنا دار است ؟ خواهش می کنم بجز حفظ زبان پارسی به آینده و حال علم کامپیوتر در ایران نیز بیاندیشید. سایت بسیار جالب و به روزی دارید. خسته نباشید و متشکرم.