‏نمایش پست‌ها با برچسب Tools. نمایش همه پست‌ها
‏نمایش پست‌ها با برچسب Tools. نمایش همه پست‌ها

۱۳۹۰/۰۷/۰۵

اضافه كردن كامنت جهت فضاهاي نام


در مورد «درست كردن فايل راهنماي CHM از توضيحات XML يك پروژه» پيشتر مطلبي در اين سايت منتشر شده است. تمام اين‌ها هم خوب! اما فايل راهنماي نهايي توليدي يك ايراد مهم دارد. Sandcastle Help File Builder نياز دارد كه به ازاي هر فضاي نامي كه در پروژه‌ي شما وجود دارد، يك summary و توضيح هم ارائه شود؛ در غير اينصورت خطاي قرمز رنگ زير را در ابتداي صفحه معرفي كلاس‌هاي يك فضاي نام، نمايش خواهند داد:


[Missing <summary> documentation for "N:Some.Test"]

از آنطرف كامپايلرهاي مورد استفاده چنين توضيحاتي را قبول ندارند و نمي‌توان براي فضاهاي نام، توضيحاتي را همانند كلاس‌ها يا متدها، ارائه داد. براي حل اين مشكل، يك راه حل ساده وجود دارد: به ازاي هر فضاي نامي كه در پروژه وجود دارد، يك كلاس خالي را به نام "NamespaceDoc" به پروژه اضافه كنيد. مثلا:

namespace Some.Test
{
    /// <summary>
    /// The <see cref="Some.Test"/> namespace contains classes for ....
    /// </summary>

    [System.Runtime.CompilerServices.CompilerGenerated]
    class NamespaceDoc
    {
    }
}

به اين ترتيب توضيحاتي كه ملاحظه مي‌كنيد توسط Sandcastle Help File Builder مورد استفاده قرار خواهد گرفت و آن اخطارهاي قرمز رنگ عدم وجود توضيحات مرتبط با فضاهاي نام، از فايل توليدي نهايي حذف خواهند شد.

روش دوم:
در خود برنامه Sandcastle Help File Builder، در قسمت Project Properties > Comments > NameSpaceSummaries، امكان وارد كردن توضيحات فضاهاي نام نيز وجود دارد. (كه آنچنان جالب نيست؛ بهتر است همه چيز يكپارچه باشد.)

۱۳۹۰/۰۷/۰۴

تبديل پروژه ويراستار به دات نت


پروژه ويراستار را از Ruby به سي شارپ تبديل كردم. سورس نهايي كامل، فايل‌هاي باينري، به همراه unit tests و راهنماي كتابخانه، از آدرس زير قابل دريافت هستند:



خلاصه كارهايي را كه انجام مي‌دهد:



۱۳۸۹/۰۲/۰۷

به روز رساني‌هايي جهت VS2010


تعدادي از ابزارهايي كه من از آن‌ها در VS.Net 2008 استفاده مي‌كنم اخيرا جهت VS2010 نيز به روز رساني شده‌اند كه ليست آن‌ها در ادامه ذكر خواهد شد:

الف) افزونه‌اي براي مرتب سازي كدهاي نوشته شده:
Regionerate : + و +

ب) افزونه‌اي جهت كار با SVN به كمك امكانات TortoiseSVN
VisualSvn : + و +

ج) افزونه‌اي كه بدون آن جدا كد نويسي در VS.Net لطفي ندارد!
Resharper : + و +

د) تم‌هاي مشكي جديد VS.Net 2010 جهت دوام آوردن بيشتر در تعداد ساعات بالاي كاري با اين محصول و خستگي كمتر چشم
New adapted themes

ه) ابزاري جهت code obfuscation
Eazfuscator : + و +

۱۳۸۹/۰۱/۱۱

YVD


يك GUI مختصر و مفيد براي كتابخانه سورس باز "دريافت فايل از يوتيوب" درست كردم كه از آدرس زير قابل دريافت است:



دريافت ، 115 KB
پيشنياز براي اجرا: دات نت فريم ورك سه و نيم (اگر از ويندوز 7 استفاده مي‌كنيد، به صورت پيش فرض نصب است).


به روز رساني

  • نگارش 0.2 جهت سازگاري با الگوي جديد يوتيوب، دريافت
  • نگارش 0.3 به همراه اضافه شدن پيش نمايش، سعي مجدد و ... ، دريافت
  • نگارش 0.4 جهت سازگاري با الگوي جديد ... ، دريافت

۱۳۸۸/۰۹/۱۷

فقط به خاطر يك نيم فاصله!


نسخه‌ي 64 بيتي ويندوز 7 را نصب كرده‌ام و اولين مشكل، نبود صفحه كليد مطابق استاندارد 2901 براي نسخه‌هاي 64 بيتي ويندوز است. پروژه وب فارسي دانشگاه صنعتي شريف، سال‌ها قبل فقط يك نسخه‌ي 32 بيتي از آن را تهيه كرده و نسخه‌هاي 64 بيتي موجود، مطابق استاندارد 9147 هستند و من به دلايل ذيل حاضر به استفاده از آن نيستم!
  1. در استاندارد 9147 ، جاي ژ و پ مطابق صفحه كليدي كه در بازار ايران فروخته مي‌شود نيست (و بايد به همه پاسخگو باشيد كه چرا اينطوري است).
  2. ي و ك در آن اصلاح شده و ديگر عربي نيست كه چقدر هم خوب، اما من تعداد زيادي برنامه و همچنين تعداد قابل توجهي فايل word دارم كه مطابق استاندارد 2901 تهيه شده‌اند. مشكلات ي و ك فارسي و عربي را هم در اينجا ذكر كرده‌ام و به دنبال باگ‌هاي جديد در برنامه‌ها نمي‌گردم.
  3. با ي و ك فارسي اگر در گوگل جستجو كنيد تعداد پاسخ‌هاي مرتبط يافت شده بسيار بسيار كمتر از حالتي خواهد بود كه با ي و ك عربي جستجو كنيد.
  4. در يك سازمان بايد رويه‌ا‌ي واحد در اين مورد برقرار باشد. يا همه بايد از 2901 استفاده كنند و يا همه از 9147.

نسخه‌ي كامل استاندارد 9147 را از سايت آقاي اخگري مي‌توانيد دريافت نمائيد:

به همين دلايل خصوصا قسمت دوم (هر چند ممكن است با آن موافق نباشيد)، نياز به صفحه كليد مطابق استاندارد 2901 نسخه‌ي 64 بيتي داشتم.

براي تهيه صفحه كليد فارسي از برنامه Microsoft Keyboard Layout Creator استفاده مي‌شود كه نسخه‌ي 1.4 آن‌را از آدرس زير مي‌توانيد دريافت نمائيد. اين نسخه قابليت توليد فايل‌هاي dll مرتبط 64 بيتي را هم دارد:


يكي از قابليت‌هاي اين برنامه بارگذاري صفحه كليد فارسي جاري سيستم است:



صفحه كليد استاندارد 2901 پروژه وب فارسي را اگر با آن باز كرده و سپس از منوي Project‌ گزينه‌ي Build DLL and setup package را انتخاب نمائيد، با خطاي زير متوقف خواهيد شد:
ERROR: 'VK_SPACE' in Shift State 'Shift' must be made up of white space character(s), but is defined as '‌' (U+200c) instead.

كه دقيقا مربوطه به اين سطر در تعاريف صفحه كليد است (صفحه كليد را مي‌شود به صورت فايلي با پسوند klc هم save as كرد):


39 SPACE 0 0020 200c 0020 -1 // SPACE, ZERO WIDTH NON-JOINER, SPACE, <none>

مفاهيم اين ستون‌ها هم به شرح زير هستند:
0 //Column 4
1 //Column 5 : Shft
2 //Column 6 : Ctrl
3 //Column 7 : Shft Ctrl

يعني جهت نمايش نيم فاصله حاصل از تركيب shift space مطابق استاندارد تايپ ايران، بجاي 0x0020 يا همان فاصله، از 0x200C استفاده شده است (مطابق استاندارد تايپ ايران بايد نوشت "مي‌روم" و نه "مي روم". به نيم فاصله و فاصله دقت بفرمائيد).
اما اين برنامه‌ي محترم دقيقا همين مورد را غلط گرفته و فايل dll نهايي را توليد نمي‌كند (مطابق خطايي كه ذكر شد).
برنامه‌ي Microsoft Keyboard Layout Creator هم با دات نت فريم ورك نوشته شده است. اگر كمي با reflector به آناليز آن بپردازيم به كلاس Accept و متد زير خواهيم رسيد:
private bool VerifySpaceBarIntegrity(ShiftState ss, bool fMustBeDefined)
در اين متد جايي كه خطاي ذكر شده صادر مي‌شود، مربوط به چند سطر زير است:

if (!Utilities.IsSpacing(ss.Characters))
{
this.WriteErrorToLogFile("SpaceKeyNeedsWhiteSpaceCharacters", new string[] { "VK_" + Utilities.VkStringOfIvk(ss.VK), this.m_stStateLabel[ss.State], ss.Characters, Utilities.FromCharacterToUPlusForm(ss.Characters) });
flag = false; /*اينجا بايد اصلاح شود!*/
}
خوب! به نظر شما ايرادي دارد كه اين flag هميشه true باشد؟! براي همين منظور، فايل MSKLC.exe را پچ كرده‌ام كه از آدرس زير قابل دريافت است:

با استفاده از اين نسخه (ابتدا برنامه اصلي را نصب كرده و سپس فايل exe را جايگزين نمائيد)، به راحتي مي‌توان نسخه‌ي استاندارد و اصلي 2901 را بارگذاري و مجددا كامپايل كرد (بدون توقف كامپايل به خاطر فقط يك نيم فاصله‌ي غيرمعتبر از ديدگاه نويسندگان اصلي برنامه). به اين صورت فايل‌هاي 64 بيتي لازم هم توليد مي‌شوند كه حاصل نهايي را از آدرس زير مي‌توانيد دريافت نمائيد:



اين فايل‌ها دقيقا بر مبناي همان فايل‌هاي پروژه وب فارسي استاندارد 2901 هستند؛ با اين تفاوت كه نسخه‌‌هاي غير 32 بيتي هم در آن لحاظ شده‌اند.


نصب اين dll ها هم از ويندوز ويستا به بعد داستان خودش را پيدا كرده؛ ابتدا بايد take ownership شود، سپس مي‌توان فايل اصلي را به سادگي جايگزين كرد و سپس reboot .
براي اين منظور ابتدا به پوشه‌ي system32 ويندوز مراجعه كرده و فايل KBDFA.DLL را پيدا كنيد.
در ادامه به پنجره خواص آن (كليك راست و انتخاب properties) مراجعه و برگه‌ي Security آن‌را انتخاب كنيد.
در اين قسمت بر روي دكمه‌ي Advanced كليك نمائيد.
در صفحه‌ي باز شده به برگه‌ي Owner مراجعه كنيد.
در اين قسمت بر روي دكمه‌ي Edit كليك نموده و كاربر خودتان را اضافه نمائيد.
پس از طي اين مرحله (يا همان take ownership) به برگه security مراجعه كرده و به كاربر خودتان دسترسي full control بدهيد.
اكنون مجوز تغيير اين فايل را بدون هيچ مشكلي خواهيد يافت.
در پايان reboot را فراموش نكنيد.

راه دوم:
يا برنامه نصاب حاصل از برنامه‌ي Microsoft Keyboard Layout Creator، مدخل جديدي را به صفحه كليدهاي قابل انتخاب ويندوز در كنترل پنل اضافه مي‌كند كه نيازي به reboot ندارد.


۱۳۸۸/۰۸/۰۷

CopyPasteKiller


افزونه‌اي به نام clone detective چندي قبل در اين سايت معرفي شد. اكنون پروژه ديگري به صورت يك برنامه مستقل ارائه شده است به نام copy/paste killer كه آن هم تمام فايل‌هاي پروژه شما را بررسي كرده، خطوط مشابه (نه الزاما دقيقا يكسان) را يافته و گزارش مي‌دهد. به اين صورت كار refactoring جهت حذف قسمت‌هاي تكراري و مديريت اين امر با سهولت بيشتري امكان پذير خواهد شد. اين برنامه در حال حاضر از VB.Net و سي شارپ پشتيباني مي‌كند.



جهت دريافت آن مي‌توان به آدرس زير مراجعه كرد:


Vote on iDevCenter

۱۳۸۸/۰۶/۲۹

معرفي افزونه‌ي WhySharper


ReSharper جهت بهبود كيفيت كد‌هاي نوشته شده راهنمايي‌هاي مختلفي را ارائه مي‌دهد. اما اكثر اين‌ها مختصر و مفيد و خلاصه هستند. براي مثال اين متد بهتر است استاتيك شود يا اين متغير بهتر است readonly شود و الي آخر. اما چرا؟
براي رفع اين نقيصه، افزونه‌اي براي ReSharper تهيه شده است به نام WhySharper كه دلايل راهنمايي‌هاي ارائه شده از طرف افزونه‌ي اصلي را نيز بيان مي‌كند (لينكي را به سايت stackoverflow جهت مشاهده بحث مربوطه ارائه مي‌دهد).



اين افزونه از گوگل كد و يا رپيدشير قابل دريافت است.

متاسفانه امكان استفاده از گوگل كد وجود ندارد و اين افزونه، فايل بررسي نگارش و همچنين پيشنهادات خود را از گوگل‌كد مي‌خواند كه سبب عدم بارگذاري آن خواهد شد. براي رفع اين مشكل، مسير زير را پس از نصب پيدا كنيد:

C:\Documents and Settings\UserName\Application Data\JetBrains\WhySharper

سپس دو فايل زير را در آن مسير كپي نمائيد:
http://whysharper.googlecode.com/svn/trunk/WhySharper/SuggestionsVersion.txt
http://whysharper.googlecode.com/svn/trunk/WhySharper/Suggestions.xml

دريافت اين دو فايل

۱۳۸۸/۰۶/۲۳

شبيه ساز ميل سرور براي برنامه نويس‌ها


مطلبي را در مورد شبيه سازي ارسال ايميل جهت بررسي خروجي واقعي يك برنامه قبلا نوشته بودم. در تكميل اين مبحث، برنامه رايگان و سورس بازي به نام Antix SMTP Server for Developers نيز وجود دارد كه از آدرس زير قابل دريافت است:


اين برنامه به صورت يك پروسه پس زمينه اجرا شده و توانايي‌هاي يك SMTP Server واقعي را شبيه سازي مي‌كند؛ بدون اينكه ايميلي را ارسال نمايد. پس از اجرا، منتظر دريافت ايميل‌هاي ارسالي از طريق SMTP Client برنامه‌ي شما شده و پس از دريافت ايميل‌ها، آن‌ها را در پوشه‌اي مشخص ذخيره مي‌كند. همچنين توسط اين برنامه مي‌توان عنوان ايميل‌هاي ارسالي را نيز مشاهده نمود (مزيت اصلي نسبت به روش قبلي معرفي شده). با دوبار كليك بر روي ايميل‌هاي ليست شده، مي‌توان آن‌ها را در mail client نصب شده مانند آوت لوك، مشاهده نمود. به اين صورت يك برنامه نويس مي‌تواند متن و فرمت ايميل‌هاي ارسالي توسط برنامه خود را پيش از بكارگيري آن در يك محيط واقعي كاري، كاملا بررسي و آزمايش نمايد. بديهي است كه اين برنامه حتي مي‌تواند بر روي كامپيوتري ديگر در شبكه نيز قرار داشته باشد. همچنين با توجه به نحوه‌ي توزيع ClickOnce اين برنامه، هر بار كه بسته شود، بررسي خواهد كرد كه آيا نگارش جديدتري از آن آماده شده است يا خير (اگر نصاب ClickOnce آن را دريافت و نصب كنيد).


اگر از دات نت فريم ورك استفاده مي‌كنيد، جهت استفاده از اين شبيه ساز كافي است app.config و يا web.config برنامه شما به صورت زير تنظيم شده باشد:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<mailSettings>
<smtp>
<network port="25" host="127.0.0.1"/>
</smtp>
</mailSettings>
</system.net>
</configuration>

پ.ن.
همانطور كه در تصوير مشخص است اين برنامه قادر به تفسير عنوان ايميل فارسي نيست (اولين عنوان بررسي شده فارسي است). اگر وقت كرديد در اين پروژه سورس باز شركت كنيد و نكته زير را به آن اعمال نمائيد (زيبايي يك كار سورس باز ...):
رمزگشايي عنوان يك ايميل فارسي دريافت شده

۱۳۸۸/۰۴/۳۰

افزونه CodeRush 9.2 و ايجاد مشكل براي IDE


نگارش جديد افزونه‌هاي DevExpress اين بار واقعا سنگ تمام گذاشته‌اند و با قابليت‌هاي آناليز كد افزونه‌ي ReSharper قابل مقايسه بوده و يا حتي در بعضي از موارد هم بهتر از آن‌ها هستند:



براي مثال مطابق شكل فوق تنها كافي است يك شيء از نوع disposable داشته باشيد كه در كد شما به صورت صريح dispose نشده باشد. بلافاصله آن‌را تشخيص داده و راه علاج را نيز توصيه مي‌كند.

اما پس از نصب آن، ديگر يك سري از پروژه‌هاي جديد در IDE قابل ايجاد شدن نيستند (حداقل براي من به اين صورت بود). پيغام خطايي هم كه از طرف VS.Net صادر مي‌شود به صورت زير است:

The project type is not supported by this installation?

پس از كمي جستجو مشخص شد كه روش رفع اين مشكل به صورت زير است:

devenv /setup
regsvr32.exe "%vs90comntools%\..\IDE\projectaggregator.dll"
devenv /resetskippkgs

سه سطر فوق را در خط فرمان صادر كرده و مدتي صبر كنيد تا عمليات به پايان رسد. پس از آن مشكل برطرف خواهد شد.

۱۳۸۸/۰۱/۲۰

ReSharper 4.5


نگارش نهايي ReSharper 4.5 ارائه شد. ارتقاء به اين نگارش از نگارش‌هاي قبلي آن رايگان است و با همان مجوز پيشين كار مي‌كند.
  • تمركز اين نگارش بر روي ميزان مصرف حافظه كمتر و كارآيي بيشتر است (نسبت به نگارش قبلي آن، در آزمايشي كه انجام دادم حدود 300 مگ مصرف حافظه كمتري دارد كه قابل توجه است).
  • سرعت باز شدن پروژه‌هاي بزرگ در آن به شدت بهبود يافته
  • اضافه شدن اخطارهاي در سطح پروژه. براي مثال آيا فيلد عمومي كه تعريف كرده‌ايد اصلا جايي استفاده شده است؟
  • پشتيباني از VB9 در مورد مباحث پيشرفته Refactoring .
  • اضافه شدن بررسي اصول نامگذاري متدها ، كلاس‌ها، متغيرها و غيره به صورت خودكار
و ...


۱۳۸۸/۰۱/۰۶

Notepad++ 5.3


Notepad++ برنامه‌ي رايگاني است براي ويرايش كدها با قابليت syntax highlighting بسيار عالي و درخور توجه به همراه يك دو جين افزونه كه قابليت‌هاي آن‌را افزايش مي‌دهند.

قبل از اين برنامه، از ultra-edit براي ويرايش‌هاي "دم دستي" استفاده مي‌كردم و اگر قابليت‌هاي اين دو را مقايسه كنيم، پس از نصب افزونه‌هاي NP++ ، اين برنامه چيزي كمتر از برنامه‌ي غير رايگان ultra-edit نخواهد داشت.

افزونه‌ي SVN براي NP++

۱۳۸۸/۰۱/۰۵

StyleCop 4.3.1.3


به روز رساني جديد StyleCop و يا همان ابزار استاندارد سازي و يكنواخت كردن ظاهر كدهاي نوشته شده كه پيشتر در تيم‌هاي داخلي مايكروسافت مورد استفاده قرار مي‌گرفت، از آدرس زير قابل دريافت است.

همچنين نگارش جديد StyleCop for ReSharper را نيز مي‌توانيد از آدرس زير دريافت نمائيد.

۱۳۸۸/۰۱/۰۴

معرفي Docu


Docu ابزار مستند سازي كدهاي دات نت شما است كه هدف اصلي آن سادگي است (سادگي در مقابل نمونه‌اي مانند sandcastle و برنامه‌هاي كمكي آن).
مشاهده‌ي سايت اصلي آن

براي استفاده از آن، در قسمت خواص پروژه در VS.NET ، در قسمت build ، تيك مربوط به توليد XML documentation را بايد گذاشت و سپس دستور زير را در خط فرمان اجرا نمائيد و همين:

docu your-assembly-name.dll


خروجي حاصل يك سري فايل html است كه به صورت خودكار توليد خواهند شد. نمونه‌اي از خروجي آن در اين آدرس قابل مشاهده است.


Krypton 3.5


Krypton مجموعه‌اي از كامپوننت‌هاي رايگان و غير رايگان مخصوص windows forms است. نگارش 3 و نيم آن اخيرا منتشر شده است و با ارائه اين مجموعه تعداد كامپوننت‌هاي رايگان آن به 41 عدد مي‌رسد.




تازه‌هاي اين نگارش:
KryptonDateTimePicker
KryptonMonthCalendar
DateTimePicker for KryptonRibbon
MonthCalendar for KryptonContextMenu
Per-KryptonPage ButtonSpecs


ماخذ

ابزار حذف دات نت فريم ورك‌هاي ناقص


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

دريافت

دقت داشته باشيد كه از اين ابزار به عنوان آخرين راه حل موجود بايد استفاده شود. ابتدا سعي كنيد از طريق control panel نسبت به عزل موارد موجود اقدام كنيد و اگر اينكار موفقيت آميز نبود، از ابزار فوق استفاده نمائيد.

ماخذ



۱۳۸۷/۱۲/۰۶

Postable


ارسال سورس كد برنامه‌ها در بلاگر داستان خودش را دارد كه پيشتر در مورد آن بحث شد.
اما اين‌كار (تبديل كاراكترهاي غيرمجاز به نمونه‌هاي مجاز يا به اصطلاح escape آن‌ها) پس از يك مدت تبديل به دردسر خواهد شد. به همين جهت برنامه‌ي كوچك زير را براي ساده‌تر كردن اين وضع تهيه كرده‌ام، كه از آدرس زير قابل دريافت است:



دريافت برنامه (براي اجرا نياز به دات نت فريم ورك 2 دارد)

اين برنامه‌ي كمكي، انجام چند كار زير را در بلاگر براي شما ساده‌تر خواهد كرد:
الف) escape خودكار كاراكترهاي غيرمجاز xml هنگام ارسال سورس كدهاي خود و همچنين قرار دادن آن‌ها داخل تگ‌هاي div و pre مناسب.

روش برنامه نويسي آن:

public static string EscapeXml(string s)
{
var xml = s;
if (!string.IsNullOrEmpty(xml))
{
// replace literal values with entities
xml = xml.Replace("&", "&amp;");
xml = xml.Replace("<", "&lt;");
xml = xml.Replace(">", "&gt;");
xml = xml.Replace("\"", "&quot;");
xml = xml.Replace("'", "&apos;");
}
return xml;
}
ب) حذف خطوط بين تگ‌هاي html . اين مورد هنگام ارسال يك table استاندارد html در بلاگر لازم است. براي مثال در بلاگر ارسال كد زير
<table>
<tr>
<td>data
</td>
</tr>
سبب ايجاد فواصل عجيبي در حين نمايش رديف‌هاي جدول در سايت خواهد شد، زيرا بلاگر به ازاي هر خط جديد يك br را به صورت خودكار نمايش خواهد داد. براي رفع اين مشكل از دكمه remove html new lines استفاده كنيد. به اين صورت اطلاعات فوق به صورت خودكار به شكل زير تبديل مي‌شوند:

<table> <tr> <td>data</td> </tr>

روش برنامه نويسي آن :

private static readonly Regex REGEX_BETWEEN_TAGS = new Regex(@">\s+<", RegexOptions.Compiled);
private static readonly Regex REGEX_LINE_BREAKS = new Regex(@"\n\s+", RegexOptions.Compiled);
public static string RemoveSpaces(string html)
{
html = REGEX_BETWEEN_TAGS.Replace(html, "> <");
return REGEX_LINE_BREAKS.Replace(html, string.Empty);

}

ج) حذف كاراكتر 0xA0 . البته اين مورد ارتباطي به بلاگر پيدا نمي‌كند ولي اگر با CPP كار كرده باشيد، حتما به مورد كپي سورس از اينترنت به داخل اديتور و عدم كامپايل آن، برخورده‌ايد. در سورس كدهاي CPP مجاز به استفاده از كاراكتر No-Break Space نيستيد (0xA0) و بايد حذف شود. حال فرض كنيد با بيش از 200 سطر سر و كار داريد. بنابراين نياز به يك تميز كننده سريع وجود خواهد داشت. (اين مورد در اديتور برنامه management studio اس كيوال سرور هم صادق است)

txtMod.Text = txtOrig.Text.Replace((char)160, ' ');
ساده است ولي انجام دستي آن مشكل خواهد بود.

۱۳۸۷/۰۹/۱۵

معرفي پلاگين Agent Johnson !


چقدر خوب مي‌شد اگر IDE ويژوال استوديو دات نت اشيايي از نوع disposable را براي ما مشخص مي‌كرد و در ادامه پيشنهاد استفاده از عبارت using را براي آن‌ها مي‌داد؟
سؤال: اين مساله چه اهميتي دارد؟
به مثال متداول زير دقت بفرمائيد:

string connString = "...";
SqlConnection conn = new SqlConnection(connString);
string cmdString = "select * from author where name=N'test'";
SqlCommand cmd = new SqlCommand(cmdString, conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
...
}
conn.Close();

اين مثالي است كه در اكثر سايت‌هاي آموزشي مي‌توان يافت. باز كردن كانكشن به ديتابيس، اجراي كوئري و دريافت اطلاعات حاصل و در آخر بستن كانكشن. بسيار هم خوب! در اين مثال اگر name مساوي test وجود نداشته باشد، روند اجراي برنامه در اولين reader.Read با يك exception متوقف خواهد شد. يعني عملا ممكن است به بستن كانكشن نرسيم (هيچ الزامي وجود ندارد كه كدهاي ما سطر به سطر اجرا شوند). اين مورد چه مشكلي را ايجاد خواهد كرد؟ فقط كافي است سايت ما 100 نفر بازديد كننده داشته باشد. در مدت زمان كوتاهي كل سايت با خطاي زير از كار مي‌افتد و پيغامي كه از كاربران دريافت خواهيد كرد اين است: "باز هم برنامه كند شد، "بازهم" سايت كار نمي‌كنه ..."
Exception Details: System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

روش صحيح براي مقابله با اين نوع خطاها قرار دادن قسمت بستن كانكشن در قسمت finally يك try/finally است تا مطمئن باشيم كه حتما اين قسمت اجرا خواهد شد. روش زيباتر اين‌كار استفاده از عبارت using است. عبارت using نيز در نهايت به يك try/finally توسط كامپايلر بسط داده خواهد شد اما كد حاصل در اين حالت خواناتر است. بنابراين در اين حالت حتي اگر خطايي نيز رخ دهد، شيء مورد نظر حتما dispose خواهد شد. (از دات نت 2 به بعد عبارت using به VB.Net نيز افزوده شده است)

 using (SqlConnection connection =
new SqlConnection(connectionString))
{
...

عبارت using را تنها در مورد اشيايي از نوع IDisposable مي‌توان بكار برد. يكي از توانايي‌هاي پلاگين Agent Johnson تشخيص اين مورد و گوشزد كردن آن است (شكل زير):



Agent Johnson در حقيقت پلاگيني است براي پلاگين ديگري به نام Resharper . اين پلاگين را از آدرس زير مي‌توان دريافت كرد (احتمالا به يك پروكسي نياز خواهد بود ...):
http://code.google.com/p/agentjohnsonplugin/
البته بحث تشخيص اشياء disposable يكي از توانايي‌هاي آن است. ساير موارد را در آدرس فوق مي‌توانيد مشاهده نمائيد.

۱۳۸۷/۰۹/۰۶

تميزكردن زوايد HTML نهايي سايت


آيا مي‌دانيد CSS سايت شما تا چه اندازه مفيد و مورد مصرف بوده و كداميك از selector هاي آن بدون مصرف باقيمانده‌اند؟
خوشبختانه افزونه مفيدي براي فايرفاكس به نام Dust-Me Selectors موجود است كه خروجي سايت را بررسي كرده و اضافات را گوشزد خواهد كرد. اين افزونه را از آدرس زير مي‌توانيد دريافت كنيد:
https://addons.mozilla.org/en-US/firefox/addon/5392
پس از نصب، يك آيكون جارو به status bar فايرفاكس اضافه خواهد شد كه با كليك بر روي آن، صفحه جاري آناليز شده و css selectors بدون استفاده در آن گوشزد خواهند شد.



همچنين مورد ديگري كه عموما رديابي آن مشكل است، تشخيص تصاوير مفقود يك صفحه است. كداميك از عناصري كه در فايل HTML نهايي به آنها ارجاعي وجود دارد واقعا در سايت ما موجود است و از قلم نيفتاده است؟
براي اين منظور ابتدا Firebug را نصب كنيد. سپس افزونه Yslow آنرا نيز بايد نصب نمود.
زمانيكه يك صفحه درحال بارگذاري است، بر روي آيكون Yslow در status bar فايرفاكس كليك كرده و پس از نمايان شدن آن، بر روي Performance كليك كنيد تا كار آناليز عناصر صفحه آغاز شود. پس از پايان كار، بر روي دكمه components كليك نمائيد تا علاوه بر مشاهده تاثير عناصر مختلف صفحه بر نحوه بارگذاري و سرعت سايت شما، عناصر مفقود را با رنگ قرمز نمايان سازد.



۱۳۸۷/۰۹/۰۳

درست كردن فايل راهنماي CHM از توضيحات XML يك پروژه


تا حالا هيچ وقت براي شما اين سؤال پيش اومده كه اين فايل‌هاي CHM راهنماي زيبايي كه براي مثال به‌عنوان مستندات يك كتابخانه در دات نت ارائه مي‌شوند با چه نرم‌افزار يا نرم‌افزارهايي توليد مي‌شوند؟ يا اينكه به نظر يك يا چند نفر ساعت‌ها وقت مي‌گذارند، صفحات HTML مربوطه را توليد مي‌كنند و در آخر با استفاده از ابزارهاي توليد فايل CHM ، فايل راهنما را نهايي مي‌كنند؟
اين فايل‌ها به صورت خودكار بر اساس XML code comments ارائه شده براي يك متد ، كلاس و امثال آن توليد مي‌شوند. براي مثال به توضيحات زير دقت بفرمائيد:

/// <summary>
/// استخراج ايميل‌هاي يك فايل متني و ذخيره آن در فايلي جديد
/// </summary>
/// <param name="inFilePath">فايل ورودي</param>
/// <param name="outFilePath">فايل خروجي</param>
public static void ExtractEmails(string inFilePath, string outFilePath)

هر چند VS.Net‌ در ايجاد خوكار قالب اوليه اين نوع كامنت‌ها بسيار خوب عمل مي‌كند اما نكات پيشرفته‌تري نيز در اين‌باره موجود هستند كه در كيفيت فايل راهنماي توليد شده بر اساس اين توضيحات بسيار مؤثرند. راهنماي كاملي در اين‌باره را از اينجا مي‌توانيد دريافت كنيد.
در ادامه نحوه توليد خودكار اين نوع راهنماها را بررسي خواهيم كرد.

الف) نصب برنامه‌هاي مورد نياز
براي ايجاد فايل chm از توضيحات xml ايي ارائه شده، ابتدا دو برنامه سورس باز زير را دريافت و نصب كنيد:
سپس نياز به HTML Help 2.0 compiler خواهد بود. اين كامپايلر به همراه SDK ويژوال استوديو ارائه مي‌شود. بسته به نگارش VS مورد استفاده، نياز است تا يكي از موارد زير را دريافت و نصب كنيد:
برنامه hxcomp.exe ذكر شده، عموما در مسير زير نصب خواهد شد:
%Program Files%\Common Files\Microsoft Shared\Help 2.0 Compiler\
ب) تنظيمات VS.Net
مرحله بعد به تنظيمات VS.Net مربوط مي‌شود. به صفحه خواص پروژه مراجعه كنيد و در برگه Build ، گزينه توليد XML documentation file را انتخاب كنيد. سپس مجددا پروژه خود را كامپايل كنيد.

ج) تنظيمات Sandcastle Help File Builder
يك پروژه جديد را در اين برنامه آغاز كرده و سپس فايل اسمبلي و xml توليد شده آنرا انتخاب كنيد. (بر روي دكمه add كليك كرده و هر دو فايل exe يا dll مورد نظر را به همراه فايل xml آن كه در قسمت ب توليد كرديم، انتخاب كنيد. در صورت عدم انتخاب يكي از موارد فايل راهنما توليد نخواهد شد)
اكنون نوبت به تنظيمات پروژه مي‌رسد.
در قسمت Build:
گزينه Help File Format را انتخاب كرده و سپس html help 2x را نيز تيك بزنيد. (در صورت تمايل به توليد اين نوع فرمت)
در قسمت Dependencies ، تمام اسمبلي‌هايي را كه پروژه شما به آن وابسته است، اضافه كنيد.
توسط گزينه Framework Version ، نگارشي از دات نت فريم ورك كه اسمبلي شما بر اساس آن كامپايل شده است را انتخاب كنيد.
در قسمت Help File:
Presentation Style را بر روي VS2005 قرار دهيد. اين‌كار اجباري نيست اما راهنماي حاصل زيباتر خواهد بود.
در قسمت Paths :
مسيرهاي كامپايلرهاي راهنما را مشخص كنيد. بر روي سيستم من اين مسيرها مطابق شكل زير هستند:


اگر HTML Help Workshop بر روي سيستم شما نصب نبود، آنرا از اين آدرس دريافت نمائيد.

د) ساخت فايل راهنما
بر روي آيكون build در نوار ابزار برنامه كليك كنيد (و يا انتخاب گزينه documentation->build)

تا اينجا اگر هر دو نوع Help1xAndHelp2x را در قسمت build انتخاب كرده باشيد، دو نوع راهنماي مستقل و همچنين قابل يكپارچه شدن با سيستم راهنماي VS.net را توليد كرده‌ايد.



ه) يكپارچه سازي Help2x توليد شده با سيستم راهنماي VS.Net
پروژه جديدي را در VS.Net از نوع Other Project Types > Extensibility > Help Integration Wizard ايجاد كنيد. در مرحله اول، ايجاد setup و نوع VS را انتخاب كرده و در صفحه بعد فايل‌هاي Help2x خود را اضافه كنيد (فايلهايي با پسوند hxs). دو مرحله آخر را مطابق نيازهاي كاري خود تنظيم نموده و پروژه را در آخر build كنيد. نصاب توليد شده فايل‌هاي راهنماي شما را با سيستم راهنماي VS.Net يكپارچه خواهد ساخت.

چند نكته:
1- جهت سفارشي سازي بيشتر راهنماي توليد شده مي‌توان از ابزار سورس باز زير نيز كمك گرفت:
http://www.codeplex.com/DocProject
2- افزونه‌اي رايگان براي VS.Net جهت سهولت توليد توضيحات XML در آدرس زير قابل دريافت است:
http://www.roland-weigelt.de/ghostdoc

۱۳۸۷/۰۸/۲۹

فشرده سازي اسمبلي‌هاي دات نت


ابزارهاي زيادي براي محافظت و يا فشرده سازي و رمزنگاري اسمبلي‌هاي دات نت موجود هستند كه اكثر آنها تجاري هستند. برنامه netz نمونه‌اي است سورس باز و رايگان كه تنها كار فشرده سازي اسمبلي موجود را انجام مي‌دهد. همچنين با استفاده از آن سورس اسمبلي شما به‌وسيله برنامه reflector قابل مرور نخواهد بود. هر چند اين برنامه سورس باز است و امكان unpack كردن نتيجه آن نيز احتمالا با اندكي سعي ميسر خواهد بود اما باز هم يك مرحله پيشرفت محسوب مي‌شود! خصوصا اينكه مي‌توان براي آن Custom Compression Provider نوشت و براي مثال فايل زيپ شده نهايي را رمزنگاري نيز كرد.

قبل از عمل:



بعد از عمل:


نحوه استفاده:

فشردن كردن يك فايل exe توسط آن
netz app.exe

الحاق كردن فايل zip.dll همراه با فايل exe (بدون نياز به توزيع فايل zip.dll):
netz -z app.exe

يكي كردن تمام dll هاي برنامه با فايل exe در قالب يك فايل نهايي:
netz -s app.exe lib1.dll lib2.dll

نكته:
در اينجا به صورت پيش فرض از فايل zip.dll براي فشرده سازي استفاده مي‌شود (كه براي تمام نگارش‌هاي دات نت قابل استفاده است). در نگارش‌هاي جديد دات نت، فشرده سازي نيز به كلاس‌هاي استاندارد اضافه شده است كه امكان استفاده از آن نيز در اينجا مهيا است (و ديگر نيازي به استفاده از zip.dll آن نخواهد بود).
netz.exe -r net20comp.dll  app.exe

نحوه برنامه نويسي يك compression provider سفارشي براي آن در آدرس زير توضيح داده شده است. (اعمال موارد امنيتي دلخواه و استفاده از آن)
http://madebits.com/netz/compress.php

و موارد ديگري كه در راهنماي سايت آن توضيح داده شده‌اند.