لزوم استفاده از پروژه‌های کدباز دات‌نتی

سوال این است: چرا به عنوان یک برنامه‌نویس دات‌نت به هنگام استفاده از یک نرم‌افزار کاربردی که از آن فقط انتظار کاربردی داریم نه برنامه‌نویسی، باز هم بهتر است در صورت امکان از معادل دات‌نتی آن استفاده کنیم؟ مثلاً:

اولین دلیل این است که مشکلات نصب کمتری خواهیم داشت. به عنوان یک برنامه‌نویس دات‌نت آشنایی خیلی بیشتری با IIS و ویندوز داریم تا مثلاً Apache و لینوکس. راه اندازی MS SQL برایمان خیلی راحت‌تر از راه اندازی MySQL است. دلیل بعدی یادگیری است. اگر به اندازه کافی با یک پروژه کدباز دات‌نتی ور برویم احتمال این هست که بتوانیم از آن یک سری چیزها برای دنیا و آخرتمان یاد بگیریم. سومین دلیل مربوط به احتمال دستکاری است. اگر روزی روزگاری لازم شد که application مورد نظر را مختصر دستکاری کنیم، می‌توانیم امیدوار باشیم که به علت آشنایی با دات‌نت بهتر می‌توانیم این کار را انجام دهیم. فکرش را بکنید برای یک دستکاری کوچک مجبور به استفاده از Perl یا Ruby می‌شدید. دلیل آخر حفظ منافع جمعی (تعصب) است. ما با استفاده از یک پروژه دات‌نتی از آن حمایت کرده‌ایم. با این حمایت، برنامه‌نویس یا برنامه‌نویسان مورد نظر بیشر تشویق می‌شوند در دنیای دات‌نت کار کنند. و این در نهایت به نفع ما جامعه دات‌نت کارهاست.

‫ALT.NET و MSDN Way‫

از زمانی که با NHibernate آشنا شدم متوجه یک جبهه جالب در دنیای دات‌نت شدم. جبهه کسانی که علاقه زیادی به port کردن پروژه‌های معروف جاوا به دات‌نت، استفاده از design patternهای شی‌گرایی و دنیای Open Source داشتند. نمونه بارز این جبهه خود NHibernate است. پروژه‌ای کاملاً open source برای تزریق OOP به کدهای دسترسی به دیتابیس بر اساس پروژه جاوایی Hibernate.

چند وقت پیش حین خواندن کتاب Foundation of Programming متوجه شدم که اسم این جبهه ALT.NET است. علایق این جبهه علاوه بر موارد بالا شامل unit test و CI و دیگر موارد مشابه هم می‌شود. طرفداران ALT.NET در عین حالی که روی سکوی دات‌نت متمرکز هستند از مایکروسافت و روش‌های مایکروسافتی گریزان هستند. آنها سعی می‌کنند برای هر تکنولوژی و ابزار مایکروسافتی، یک جایگزین open source ارائه دهند.

در مقابل ALT.NET روش MSDN Way قرار دارد. در روش MSDN Way عمده تمرکز افراد بر استفاده از APIهای تکنولوژی‌های مختلف دات‌نت است. کدهای برنامه‌نویسان MSDN Way شباهت زیادی به نمونه‌های معرفی شده توسط مایکروسافت در MSDN دارد. اصلاً اسم MSDN از همین جا آمده. یکی از نشانه‌های گروه MSDN استفاده از DataSet به جای ORMهاست.

برای کسب اطلاعات بیشتر به فصل اول کتاب Foundation of Programming مراجعه نمایید.

شما خودتان را بیشتر از پیروان ALT.NET می‌دانید یا MSDN Way؟

Private SVN hosting

سایت‌های رایگان خیلی زیادی برای نگهداری سورس تحت svn وجود دارد. از جمله CodePlex و SourceForge. اما متاسفانه این سایت‌ها فقط برای نگهداری سورس‌های کد باز (Open Source) قابل استفاده‌اند چون نمی‌توان سورس آنها را از دید عموم خارج کرد. بعضی سایت‌های دیگر مثل github هم هستند که امکان میزبانی سورس‌های غیر کد باز را ارائه می‌دهند اما نه به صورت مجانی. اگر می‌خواهید از این سرویس استفاده کنید باید پول پرداخت کنید. و اگر می‌خواهید از سرویس‌های رایگان این طور سایت‌ها استفاده کنید باز هم مجبور می‌شوید سورس خود را به صورت کد باز روی آنها قرار دهید.

اما این پایان راه نیست. اگر شما می‌خواهید سورس خود را به صورت غیر Open Source و به صورت مجانی در جایی نگهداری کنید می‌توانید از سایت‌های زیر استفاده کنید:

Assembla.com

دارای backup است.
محدودیتی در تعداد کاربر ندارد.
یک گیگا بایت فضا در اختیار می‌گذارد که نسبت به بقیه خیلی بیشتر است.
ثبت نام و کار با آن نیاز به تشریفات کمتری دارد.
از https استفاده می‌کند. در نتیجه ممکن است به علت محدودیت‌های اینترنت در ایران در بعضی روزهای خاص از کار بیفتد.
خیلی کند است.

http://unfuddle.com/about/tour/plans
به نظر خوب می‌آید

http://www.xp-dev.com
به نظر خوب می‌آید.

http://www.projectlocker.com
به نظر خوب می‌آید.

http://www.myversioncontrol.com
به نظر خوب می‌آید.

http://codesion.com
به نظر کند می‌رسد

http://www.sliksvn.com
خیلی قابل اطمینان است. ولی به نظر می‌رسد دارای تشریفات خیلی بیشتری برای ثبت نام است.

منبع:
http://www.svnhostingcomparison.com

اشتباهات دوران دانشگاه

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

۱- عدم توجه جدی به درس‌های غیر تخصصی خصوصاً دروس ریاضی و فیزیک در دوران دانشگاه.
البته منظورم از توجه این نیست که دروس بی‌استفاده‌ای مثل فیزیک ۱، ریاضی مهندسی، مدار الکتریکی یا معارف را با دقت زیاد خوانده و به خاطر سپرد. بلکه منظورم این است که باید آن‌ها را طوری پاس می‌کردم که کمترین وقت را از من تلف کرده تا بتوانم از وقت آزادم استفاده بهتری ببرم. و الا اعتقاد من این است که در دروسی مثل دروس فوق‌الذکر هیچ چیز با ارزشی برای یک دانشجوی نرم‌افزار وجود نداشته و نخواهد داشت.

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

۳- «دو دوره کردن» پروژه فارغ التحصیلی و کارآموزی
«دو دره کردن» اصطلاحی بد معنی است و بیشتر به معنی دزدیدن یا دور زدن و پیچوندن شدید به کار می‌رود. اما متاسفانه من هم مثل تعداد قابل توجهی از بقیه دوستان، پروژه و کارآموزی را با آب بندی و خالی بندی گذارندم. اگر می‌توانستم یک موضوع خوب برای پروژه پیدا کنم و حسابی روی آن وقت بگذارم و اگر یک شرکت خوب برای کارآموزی پیدا کرده و برای آن هم وقت می‌گذاشتم الان وضعیت خیلی بهتری در بازار کار می‌داشتم. متاسفانه پیچوندن در همه دروس و در همه زمینه‌ها در علم و صنعت حسابی باب بود.

۴- انتخاب C#‎ به جای جاوا.
آن اوایل دانشگاه همه ما با هم دلفی کار بودیم اما کمی بعد سر و کله دات‌نت و جاوا پیدا شد و خیلی‌ها از جمله خود من دلفی را فراموش و به سمت یکی از این دو سکو رفتیم. آن زمان خیلی با بحث Open Source و… آشنا نبودم و فکر می‌کردم چون جاوا کد باز است ممکن است خیلی رشد نکند. ولی چون مایکروسافت یک شرکت تجاری خیلی بزرگ است حتماً دات‌نت‎ موفق‌تر خواهد بود. البته گذر زمان نشان داد هر چند که دات‌نت‎ چندان شکست نخورد اما آنهایی که به سمت جاوا رفتند موفق‌تر بودند خصوصاً آنها که در ایران بودند. به عنوان مدرک می‌توانید تعداد پروژه‌های موفق در جاوا را مقایسه کنید با پروژه‌های موفق C#‎. به عنوان مثال Hibernate را. اگر نمونه کدها یا سواد آدم‌های جاوا کار را مقایسه کنید با نمونه کدهای C#‎ یا آدم‌های C#‎ کار متوجه می‌شوید که به طور نسبی جاوا کارها با سوادتر و کدهایی که می‌نویسند دقیق‌تر و اصولی‌تر است. در بازار کار هم برنامه‌نویس‌های جاوا محبوبیت بیشتری داشته و حتی میانگین حقوقی بالاتری هم دارند. به طور کلی به نظر می‌رسد در ایران شرکت‌های جاوایی تیم‌های قوی‌تر و برنامه‌نویس‌های بهتری داشته باشند تا شرکت‌های دات‌نتی.

۵- عدم استفاده مفید از سربازی
هر چند که سربازی را باید رفت چون همه می‌روند اما بنده به خاطری کوتاهی‌هایی که در بعضی زمینه‌ها و شبکه اجتماعی (در اینجا آشنا و پارتی) در طول دوران تحصیل کرده بودم نتوانستم امریه پیدا کنم. حتی نتوانستم در شهر یا نیروی دلخواه به سربازی بروم. در نتیجه دو سال از وقت با ارزشم را در تبریز و کوه‌های لرستان سپری کردم. طی این مدت تنها ارتباطم با کامپیوتر مجموعه Microsoft Office و خواندن یک کتاب ASP بود.

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

۷- دیگر موارد متفرقه مثل عدم کار روی پروژه‌های کد باز معروف، عدم حضور جدی و موثر در المپیادها، مسابقات و همایش‌های دانشجویی، دوست‌یابی نادرست و…

فردیس

«فردیس» یک پروژه‌ی Open Source خیلی کوچک است که برای کار با یونیکد ایجاد شده است. «فردیس» در یک دوره‌ی زمانی که به شدت نیاز به این داشتیم که بفهمیم فلان کلید صفحه کلید یا فلان کاراکتر دقیقاً کدام نویسه‌ی یونیکد است، کد آن چیست، نام رسمی آن در یونیکد چیست و در فونت‌های مختلف چطور نمایش می‌یابد متولد شد.

بعدها در کنار رفع این نیازها به فکر افتادم که «فردیس» فقط به صورت یک برنامه exe نباشد بلکه همه‌ی امکانات آن به علاوه دیگر امکاناتی که ممکن بود برنامه‌نویسان دیگر در ارتباط با فارسی و یونیکد به آن نیاز پیدا کنند هم به صورت یک library هم موجود باشد.

بخشی از آنچه که در مورد برنامه‌ی «فردیس» در ذهنم بوده هم اکنون پیاده‌سازی شده و بقیه‌ی آنها در Issue List پروژه موجود است. امیدوارم بتوانم به مرور زمان و بر اساس نیازمندی‌های خودم و بقیه این فهرست را تکمیل‌تر کنم.

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

لینک‌های مفید:
home page پروژه
Download پروژه
Discussions List پروژه
Issue Tracker پروژه
Source Code پروژه

Fardis

Fardis is a tiny open source project regarding Unicode and Persian/Arabic. Once a time I was in need to know more info about characters. Specially I needed to know what’s Unicode name and code of a specific character. So I created “Farids” as an .Net/C# and Windows desktop application/library.

Along with time I decided “Fardis” being a library too. So created an issue list and implemented some of them. I will implement more of them if I found them useful for myself or other users/programmers.

This task has been done with help of Nasser Hadjloo in both test and logo design.

Project links:
Home Page
Downloads
Discussions
Issue Tracker
Source Code

‫استفاده از سورس‌های Online

گاهی اوقات که می‌خواهیم روش استفاده از فلان متود یا کلاس یک Library خاص را دانسته یا می‌خواهیم چند نمونه کد با آن پیدا کنیم، یک راهش استفاده از سورس‌های Online کتابخانه‌ی مورد نظر است. البته به شرط آن که Library یا برنامه‌ی مورد نظر Open Source بوده و سورس کد آن به صورت Online موجود باشد.

معمولاً سورس کد همه‌ی پروژه‌های Open Source به صورت Online نیز موجود است. مثلاً سورس کد NHibernate در این آدرس و سورس کد Castle ActiveRecord در این آدرس قرار دارد. این سورس‌ها منبع خوبی هستند برای که بیشتر از روش کار فلان بخش Library سر در بیاوریم. مثلاً اگر می‌خواهید بدانید متود ActiveRecordStarter.SchemaUpdate چطور از کلاس SchemaUpdate موجود در NHibernate استفاده می‌کند، کافی است نگاهی به سورس کد کلاس ActiveRecordStarter بیندازید.

پروژه‌های Open Source معروف معمولاً دارای Unit Test هم هستند. این Unit Testها پر هستند از نمونه‌های ساده از نحوه‌ی چگونگی استفاده از پروژه. به عنوان مثال اگر به دنبال نمونه کدی برای عملیات ذخیره، حذف یا بازیابی رکوردهای یک Entity در Castle ActiveRecord هستید کافی است به کد کلاس ActiveRecordTestCase مراجعه کنید.

از دیگر مزایای سورس‌های Online این است که همیشه در دسترس هستند، نیاز به Downloadهای متعدد ندارند و لینک آنها را به راحتی می‌توان از طریق ایمیل و غیره به این ور و اون ور فرستاد.

پروژه‌های جاوایی در دات‌نت

تعدادی زیادی از پروژه‌های کد باز معروف ‭.Net‬ از روی پروژه‌های موفق Java ساخته شده‌اند. یکی از قشنگ‌ترین چیزهایی که در این تقلید رعایت شده، یکسان بودن API هر دو است. یعنی مثلاً اگر پروژه‌ی جاوایی JavaProjABC وجود داشته باشد که شامل سه کلاس C1 و C2 و C3 بوده و کلاس C2 شامل متودی به اسم m1 باشد که دو پارامتر string دریافت می‌کند، پروژه‌ی دات‌نتی آن که احتمالاً NProjABC یا ProjABC.Net نام دارد هم دقیقاً همین کلاس‌ها و همین متودها را دارد. علاوه بر این رفتار کلاس‌ها و متودها هم یکی است. مثلاً اگر متود m1 در پروژه‌ی جاوایی دو پارامتر دریافتی را در یک فایل متنی نوشته و زیر آن یک خط می‌کشد، متود m1 پروژه‌ی دات‌نتی هم دقیقاً همین کار را می‌کند.

خوبی این موضوع این است که کدهای نوشته شده برای استفاده از یک پروژه‌ی جاوایی یا دات‌نتی اصطلاحاً قابل حمل بوده و به راحتی قابل تبدیل به platform دیگر است. خوبی دیگر آن، یکی بودن شکل و شمایل configuration است. مثلاً کدهای مورد نیاز برای configuration پروژه‌ی جاوایی log4j بسیار شبیه به configuration نسخه‌ی دات‌نتی یعنی log4net است. خوبی دیگری هم هست که خیلی هم قابل استفاده است. وقتی که کار کردن با یکی را بلد باشید کار کردن با آن یکی را هم خود به خود یاد گرفته‌اید و اگر مثالی یا کتابی روی یکی از پروژه‌ها موجود باشد، در آن پروژه‌ی دیگر هم می‌توان از آن استفاده کرد.

این مورد آخر جدیداً خیلی برای من به درد بخور بود. یکی از APIهای پر استفاده‌ی جستجو در NHibernate عبارت است از ICriteria. من به مشکلی در استفاده از آن برخورده بودم که نمی‌دانستم چطور باید آن را حل کنم. در مورد NHibernate و ICriteria جستجو کردم و چیز خاصی پیدا نکردم. اما خوشبختانه چون NHibernate پورت پروژه‌ی معروف جاوایی Hibernate به دات‌نت است توانستم از روی یک سوال و جواب Hibernate جاوایی به جوابم برسم.

نرم‌افزارهای آزاد و متن‌باز

دوستی می‌خواست چیزهایی راجع به نرم‌افزارهای آزاد، متن‌باز، تفاوت‌ها و دیگر مسائل بداند. این متن جوابی است به ایشان.

متن‌باز بودن نرم‌افزار به چه معنی است؟ تا آنجا که من می‌دانم هر نرم‌افزاری می‌تواند متن‌باز هم باشد. مثلاً یک نرم‌افزار پولی یا مجانی یا آزاد یا غیر آزاد می‌تواند متن‌باز هم باشد یا نباشد. دلیل این که همراه بیشتر نرم‌افزارهای پولی سورس آنها هم ارائه نمی‌شود آن است که سورس برنامه‌ها بسیار گرانقیمت‌تر از خود نرم‌افزارها هستند. مثلا ویندوز ایکس‌پی فرضاً ۱۰۰ دلار است ولی سورس کد آن ۱۰ میلیون دلار است.

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

آزاد بودن نرم‌افزار اصلاً ربطی به پول ندارد. یعنی نرم‌افزار می‌تواند آزاد باشد ولی پولی هم باشد. مثلاً شرکت موزیلا می‌تواند فایرفاکس را در حین این که نرم‌افزاری آزادی هم هست، آن را به فروش هم برساند. حتی شرکت‌هایی غیر از موزیلا، مثلاً مایکروسافت یا شهرداری تهران هم می‌توانند فایرفاکس را بفروشند بدون که کار خلاف قانونی انجام داده باشند.

اما در مورد تغییرات قضیه یک کم فرق می‌کند. اگر شما یا هر کس دیگری در چیزی مثل فایرفاکس یا وردپرس یا جوملا یا هر چیز دیگری تغییری دادید و خواستید آن را دوباره منتشر کنید باید طبق اجازه‌نامه‌ی آن رفتار کنید. مثلاً اگر اجازه‌نامه‌ی آن GPL است باید نسخه تغییر یافته‌ی آن مجدداً تحت اجازه‌نامه‌ی GPL بوده و سورس تغییر یافته‌ی آن به طور عمومی در دسترس باشد. بیشتر اجازه‌نامه‌ها شما را مجبور می‌کنند علاوه بر این که نسخه‌ی تغییر و سورس آن منتشر کنید، شما را مجبور می‌کنند نسخه‌ی مجوز قبلی، پدیدآورندگان، تغییر دهندگان قبلی و… را همراه با تغییرات جدید ارائه دهید. این به این معنی است که اگر وردپرس تحت یکی از این جور اجازه‌نامه‌ها مثل GPL باشد و شما آن را تغییر داده و مجدداً منتشر کردید، علاوه بر این باید سورس تغییر یافته را در دسترس عموم قرار داده و ضمناً اجازه ندارید مشخصات پدیدآورندگان قبلی را پاک کرده یا تغییر دهید.

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

روش رایج پول در آوردن از نرم‌افزارهای آزاد، پشتیبانی فنی و خدمات مشاوره است. مثلاً نرم‌افزار OTRS خودش آزاد، متن‌باز و مجانی است و هر کسی هر کار که دلش خواست می‌تواند با آن بکند. اما شرکت حامی آن خدمات hosting آن را به صورت پولی ارائه می‌کند، خدمات نصب و مشاوره و خدمات پشتیبانی آن را هم به صورت پولی ارائه می‌کند و پول خوبی از این راه به دست می‌آورد. البته راه‌های زیادی برای پول درآوردن از نرم‌افزارهای آزاد هست که بستگی به شرایط دارد.

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

جهت اطلاع بیشتر:
‫کپی‌لفت (Copyleft) چیست؟ 

‫چرا FOSS (و Open Source) برای ما خوب است؟‫حرکت به سمت FOSS
‫برنامه‌های من برای مهاجرت به FOSS 

ضمناً فکر می‌کنم سایت‌ها و انجمن‌های فارسی‌زبان زیادی باشند که روی این موضوعات کار می‌کنند.

NHibernate Forge


NHibernate Forge is “The official new home for the NHibernate community”. Everyone who wants to start with NHibernate, probably tries to utilize this site. Recently I visited this site because I was looking for some information about NHibernate and decided to write my point of view about it:

1. Best section of site in my opinion, is its Wiki, but it still needs more Wikies like introduction of NHibernate related books and references.
2. From this site, it isn’t obvious clear that if it is active enough to contribute or not. Specially when you consider that there is just one blog post in 2010’s first quarter in its blog.
3. If someone wants to contribute in site’s content and in NHibernate itself, where is a starting point or directions for him? I  found just a short direction in Welcome Message.
4. Deep Grok is forbidden for me, because I use an Iranian IP! It’s absolutely  against open source spirit.
5. It seems that creating user in nhforge.org is not very easy because I signed up but I haven’t received any email during last 18 hours.

At the end, I hope an active NHibernate Forge for all.