LINQPad

ژانویه 30, 2009

اگر دوست دارید ضمن یاد گرفتن LINQ به راحتی کوئری‌های خود را از روی دیتابیس بسازید، LINQPad برای شماست.

 linqpadscreen

LINQPad یک نرم‌افزار رایگان و کم حجم است که به شما کمک می‌کند عبارات LINQ خود را به سادگی از روی دیتابیس تهیه کنید. LINQPad همچنین 200 مثال در مورد کار با LINQ‌ دارد و از LINQ TO SQL‌ و LINQ To Objects و LINQ To XML پشتیبانی می‌کند. علاوه بر این LINQPad به شما امکان اجرای کدهای C#.NET و VB.NET را هم می‌دهد. LINQPad امکان AutoCompletion را هم دارد که البته رایگان نیست. شما می‌توانید نسخه اجرایی (بدون نیاز به نصب) یا Setup نرم‌افزار را با حجمی کمتر از 3 مگابایت از سایت برنامه دانلود کنید.

در ادامه چرا Google Chrome‌ مرورگر سال 2009 شماست یک ویژگی جالب دیگر کروم را معرفی می‌کنم. وقتی با کروم به صفحه‌ای می‌روید که یک موتور جستجو در آن قرار دارد، کروم این امکان را به شما می‌دهد تا با زدن دکمه Tab در نوار آدرس از موتورجستجوی آن صفحه برای جستجو استفاده کنید.

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

search

حالا وقتی دکمه Tab را بزنم، می‌توانم کلمه مورد نظرم را در یک پزشک جستجو کنم. این کار درست مثل این است که به یک پزشک بروم و در تکست باکس جستجو دنبال کلمات مورد نظرم بگردم.

search2

تجربه گوگل کروم را همین امروز آغاز کنید.

Firebird

دسامبر 29, 2008

logo_left_90 بعضی پروژه‌ها هستند که استفاده از SQL Server در آن‌ها مثل استفاده از تانک برای کشتن پشه است. از طرف دیگر نمی‌خواهید کارتان را با ابزار ساده و دم دستی مثل Access که هر کسی می‌تواند به داخلش سرک بکشد انجام دهید. اینجاست که دیتابیس‌های جایگزین مطرح می‌شوند. Firebird یکی از آن‌هاست که بانک اطلاعاتی شما را در فایل‌هایی با پسوند fdb ذخیره می‌کند.

Firebird را می‌توانید در آدرس http://www.firebirdsql.org پیدا کنید. توصیه می‌کنم درابتدا Firebird-2.1.1.17910 برای ویندوز را دانلود کنید. بعد از نصب در حالت Superserver خواهید دید که برای مدیریت دیتابیس هیچ چیز به جز یک ابزار خط فرمانی به نام isql در دسترس نیست.

isql را اجرا کنید و به کمک دستور زیر یک دیتابیس جدید بسازید:

CREATE DATABASE ‘D:\data\test.fdb’ page_size 8192 user ‘SYSDBA’ password ‘masterkey’;

; را فراموش نکنید، چرا که به isql‌ می‌فهماند که دستور شما تمام شده است. کار کردن با محیط خط فرمانی برایتان سخت است، خب برای همه همین طور است.
اگر به دنبال یک GUI مناسب می‌گردید در این آدرس کلی ابزار رایگان و غیررایگان برای کار با Firebird در پلتفرم‌های مختلف پیدا می‌کنید. من MiTeC InterBase Query را انتخاب کردم که کم حجم، ساده و در عین حال کاراست. به کمک این برنامه می‌توانید فایل‌های fdb خود را باز کنید و با object explorer تمام جداول و  روال‌ها و تریگر‌ها و … را ببینید و با ابزارهایی مثل SQL Editor کارهای SQL خود را انجام دهید یا به کمک Performance Monitor چیزهایی مثل استفاده از حافظه و … را مشاهده کنید و …

حالا نوبت به استفاده از Firebird در پروژ‌ه‌های دات نتی رسیده است. برای این کار Firebird .NET Data Provider را از این آدرس دانلود کنید. بعد از نصب چند dll خواهید داشت که باید آن‌ها را به پروژه خود اضافه کنید. بقیه کار شبیه به کار با داده در دات نت است. با کمک FbConnectionStringBuilder در FirebirdSql.Data.FirebirdClient یک رشته اتصال (Connection String) می‌سازید. یک شی از کلاس FbConnection برای کانکشن می‌گیرید و رشته اتصال را به عنوان پارامتر سازنده به آن می‌دهید. بعد با کمک کلاس FbCommand دستور مورد نظرتان را اجرا می‌کنید.

Clip to OneNote

ژوئن 2, 2008

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

در ضمن در صورتی که مایل بودید می‌توانید از این برنامه استفاده کنید تا گزینه Sent To OneNote 2007 به ویندوز اکسپلورر شما اضافه شود تا بتوانید در هر زمان هر فایلی را از ویندوز به OneNote بفرستید. در آخر هم سری بزنید به وب‌سایت خوب OneNote PowerToys که برنامه‌های جالبی در رابطه با OneNote می‌توان در آن پیدا کرد.

توجه: این یادداشت قدیمی و مربوط به وبلاگ‌های پیشین است. برای اطلاعات بیشتر آنچه گذشت را بخوانید.


چند روز پیش بعد از انجام کامل یک پروژه و کامپایل نهایی و آپلود کردن فایل های تست به یک مشکل عجیب و غریب برخوردم. من برای سیستم خودم یک صفحه Login داشتم. دو تکست باکس برای وارد کردن نام کاربری و کلمه عبور و یک دکمه که عملیات ورود به سیستم را در رویداد click آن نوشته بودم. روی کامپیوتر خودم همه چیز درست بود ولی وقتی فایل ها رو آپلود کردم و خواستم لاگین کنم هیچ اتفاقی نمی افتاد در واقع فرم من اصلا ارسال نمی شد !

این برای من موضوع عجیبی بود با توجه به اینکه این مشکل فقط در IE وجود داشت و در فایرفاکس مشکلی نبود ( اینم تبلیغ برای فایرفاکس ;) ). خلاصه شروع کردم به پرسیدن از این و آن برای رفع مشکل. برای چند نفری آفلاین گذاشتم. به چند گروه یاهو که در آن ها عضو بودم سر زدم و مشکل را پست کردم. همین طور برای گروه برنامه نویسی asp.net  در گروه های گوگل. دست آخر هم پستی داشتم به انجمن های asp.net. دوست عزیزی هم لطف کرد و یک ارسال به انجمن های پرشین تولز برایم انجام داد. با چند نفری هم آنلاین در این مورد صحبت کردم. از جمله داریوش تصدیقی که اتفاقا آن موقع شب آنلاین بود.

از آن جا که من در صفحاتم از Required field validator استفاده کرده بودم به نظر می رسید که مشکل از همین کتابخانه اعتبارسنجی جاوایی باشد ( منظورم WebUIValidation.js ) است. با راهنمایی آقای تصدیقی سری زدم به فولدر aspnet_client تا نسخه این فایل رو بررسی کنم. روی سرور مورد بحث 3 نسخه از این فایل وجود داشت. علاوه بر نسخه 1_1_4322 ( که نسخه مورد نیاز بود ) دو ورژن دیگر هم وجود داشت که قدیمی تر بودند. بعد از پشتیبان گرفتن از این فایل ها آن ها را به جز نسخه اصلی از روی سرور پاک کردم. صفحه رو دوباره امتحان کردم. فرقی نکرده بود.

در فاصله یک ساعتی که مشغول این کارها و جستجو در وب بودم یکی دو جواب برای پست هایم آمده بود. خانم زاهدی از گروه برنامه نویسان asp.net در یاهو پیشنهاد کرده بودند که به جای Push button از Link button استفاده کنم. اما مهم ترین راه حل که این آقا در انجمن های asp.net منو به طرفش راهنمایی کرد اینجا بود. یادداشتی از Scott Mitchell در همین مورد.

راه حل :

به گفته scott وقتی سورس صفحه رو برای دیباگ کردن نگاه می کنیم به کد مشکل ساز زیر می رسیم :

حالا اگر ایونت هندلر ValidatorOnSubmit مقدار false برگرداند می توانید حدس بزنید که چه اتفاقی می افتد. اجازه بدهید به سورس ValidatorOnSubmit در فایل WebUIValidation.js نگاهی بیندازیم:

function ValidatorOnSubmit() {
     if (Page_ValidationActive) {
         return ValidatorCommonOnSubmit();
     }
     return true;
}

همان طور که می بینید مشکل از جای دیگری ( در واقع تابع ValidatorCommonOnSubmit ) پیش می آید که مقدار بازگشتی تابع ValidatorOnSubmit را مشخص می کند. این تابع به صورت زیر پیاده سازی شده :

function ValidatorCommonOnSubmit() {
      event.returnValue = !Page_BlockSubmit;
      Page_BlockSubmit = false;
}

مشکل کوچکی هست و آن اینکه آیا این تابع نباید یک مقدار return  کند ؟ بعد از گوگل کردن validatoronsubmit returning false به یادداشتی در وبلاگ Thomas Freudenberg می رسیم که مشکلی مشابه را بررسی می کند. این مشکل به یک hotfix مربوط به فریم ورک 1.1 برمی گردد.
اگر تابع ValidatorCommonOnSubmit مانند بالاست ValidatorCommonOnSubmit باید مقدار !Page_BlockSubmit  را برگرداند ( همان طور که در تابع می بینید مقدار Page_BlockSubmit قبلا false شده است ).

اگر این hotfix را نصب کرده اید باید تابع ValidatorCommonOnSubmit را به صورت زیر به روز رسانی کنید:

function ValidatorCommonOnSubmit()
{
    event.returnValue = !Page_BlockSubmit;
    ret_Val = !Page_BlockSubmit;
    Page_BlockSubmit = false;
    return ret_Val;
}

منبع : http://scottonwriting.net/sowBlog/posts/2943.aspx

در نوار آدرس روی دکمه کناری کلیک کنید تا لیست سایت‌هایی که اخیرا بازدید کرده‌اید را ببینید. به جای این کار می‌توانید حرف اول سایت مورد نظر را در نوار آدرس وارد کنید. وقتی لیست را دیدید، آدرس مورد نظر را های‌لایت کنید و دکمه Delete را بزنید. آدرس مورد نظر از لیست History حذف می‌شود.

مایکروسافت برای برنامه‌نویسان ASP.NET فریم ورک AJAX خود را پیشنهاد می‌کند. مثال ساده و در واقع HelloWorld برنامه‌های ای‌جکسی معمولاٌ برنامه‌ای است که زمان را نشان می‌دهد.

برای شروع با ASP.NET AJAX ابتدا ملزومات آن را (برای VS 2005) از این آدرس دانلود کنید. توجه کنید که برای ASP.NET 3.5 نیاز به دانلود چیزی ندارید. بعد از نصب ASP.NET AJAX برای ASP.NET 2.0  ویژوال استودیو خود را باز کنید، به قالب‌های بخش وب سایت یک قالب جدید به نام ASP.NET AJAX-Enabled Web Site اضافه شده است.

p1

یک پروژه جدید از این نوع را شروع کنید. حالا به مد Design صفحه Default.aspx خود بروید و از Toolbox یک UpdatePanel روی صفحه drag کنید. اکنون یک دکمه و یک label درون UpdatePanel و یک label‌ دیگر خارج از UpdatePanel قراردهید.

p3

حالا به بخش کد می‌رسیم. جایی که برای نشان دادن قابلیت AJAX هر دو label روی صفحه باید زمان جاری را نشان دهند. در Page_Load صفحه خود کد زیر را بنویسید:

protected void Page_Load(object sender, EventArgs e)
 {
        Label1.Text = DateTime.Now.ToString();
        Label2.Text = DateTime.Now.ToString ();
 }

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

توجه: این یادداشت قدیمی و مربوط به وبلاگ‌های پیشین است. برای اطلاعات بیشتر آنچه گذشت را بخوانید.


ASP.NET 2.0 سرویس‌هایی دارد مثل Membership, Role Management, Personalization که اطلاعاتی از آن‌ها باید در دیتابیس ذخیره شود،‌ در این مطلب قصد دارم راهی برای تنظیم SQL Server 2000 برای این قابلیت‌های ASP.NET 2.0 معرفی کنم.

مایکروسافت یک ویزارد برای تنظیم SQL Server برای ASP.NET 2.0 در نظر گرفته است که برای استفاده از آن باید به Command Prompt مربوط به Visual Studio 2005‌ بروید و دستور aspnet_regsql را تایپ کنید. بعد از اجرا یک ویزارد به نام ASP.NET SQL Server Setup Wizard‌ برای شما باز می‌شود که به کمک آن می‌توانید دیتابیس دلخواهی را برای استفاده از جداول سرویس‌های ASP.NET 2‌ تنظیم کنید. بعد از اتمام عملیات 11 جدول به دیتابیس شما اضافه می‌شود که همه آن‌ها با aspnet‌ شروع می‌شود (مثلا aspnet_Applications یا aspnet_Membership و ..)
البته اگر از سوییچ‌های مربوط به دستور aspnet_regsql‌ استفاده کنید می‌توانید هر کدام از سرویس‌ها را که بخواهید اضافه کنید. مثلا دستور aspnet_regsql.exe -E -S localhost -A mp جداول مربوط به سرویس‌های Membership و Profile‌ را به سرور لوکال‌هاست اضافه می‌کند. توضیحات کامل در مورد این دستور را اینجا ببینید.

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