مهاجرت‌های بی‌پایان

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

آن زمان فکر سن مهاجرت بین ۲۲ (فارغ التحصیلی) تا ۲۶ یا ۲۷ بود. بعد از سربازی و شروع رسمی کار و زندگی فکر می‌کردم آنها که رفته‌اند که رفته‌اند ولی هنوز تعدادی مانده‌اند و نخواهند رفت. ولی اشتباه می‌کردم. متاسفانه الان که میانگین سنی آن دوستان به ۳۵ سال رسیده با کمال ناباوری می‌بینم که موج مهاجرت هنوز از پا ننشسته و حتی افرادی که چندین سال تجربه کار و زندگی بعد از دانشگاه داشتند هنوز هم یکی یکی در حال رفتن هستند.

‫انتقال دیتابیس bugnet به MS SQL 2008

bugnet (نرم‌افزار issue tracking دات‌نتی) را در جایی نصب کرده بوده و دیتابیسش را در SQL Server 2005 Express قرار داده بودم. به دلایلی تصمیم گرفتم دیتابیس را به نسخه‌ای از MS SQL 2008 منتقل کنم. یک دیتابیس خام با استفاده از installer باگ‌نت درست کردم و سعی کردم دیتا را از SQL 2005 Express به آن export کنم اما به خطاهایی برخورد کردم و موفق نشدم. به همین دلایل از روال دیگری برای انتقال دیتا استفاده کردم:

۱- یک دیتابیس خالی ساختم و دیتای قبلی را با استفاده از امکان Export به آن کپی کردم.
۲- روال Export قدرت تشخیص viewها را نداشت. در صفحه انتخاب جداول باید تیک viewها برداشته شود.
۳- باگ‌نت را به دیتابیس جدید وصل کردم. اولین خطایی که دیده می‌شد خطای Could not find stored procedure ‘BugNet_HostSetting_GetHostSettings’. بود.
۴- یک دیتابیس خام و خالی را با کمک installer باگ‌نت ساختم.
۵- با استفاده از گزینه Tasks – Generate Scripts دیتابیس مرحله قبلی را انتخاب کرده و گزینه‌های Stored Procedures و Views را انتخاب کنید.
۶- اسکریپت حاصله را در دیتابیس مرحله اول که همان دیتابیس اصلی است اجرا کردم. اصلاح use database نباید فراموش شود.
۷- یک بار خطای Item has already been added. Key in dictionary: ‘AdminNotificationUsername’ Key being added: ‘AdminNotificationUsername’ را دیدم. علت آن installer بود. که رکوردهای جدول HostSettings را duplicate کرده بود. رکوردهای تکراری این جدول باید پاک می‌شدند.
۸- اگر مقدار InstallationDate در AppSettings وجود نداشته باشد رکوردهای تکراری مجدداً اضافه می‌شود.
۹- همه مراحل اینجا را می‌شد یک جور دیگر هم انجام داد. ایجاد دیتابیس آماده توسط باگ‌نت، پاک کردن فقط جداول آن، export داده از دیتابیس حاوی داده‌ها.
۱۰- از اینجا به بعد مشکل login کردن وجود دارد. bugnet از ASP.NET Membership استفاده می‌کند. پس با کمی شناخت از مدل ASP.NET به راحتی می‌توان مشکلات login و کاربری را حل کرد.

‫تجاربی از LibreOffice

به خاطر دلخوشی خودم و به خاطر کسب آمادگی برای سویچ احتمالی به لینوکس، مدتی است که سعی می‌کنم به جای MS Office از LibreOffice استفاده کنم. LibreOffice کاملاً مشابه Open Office بوده و توسط تعدادی از برنامه‌نویسان قبلی Open Office اداره می‌شود. بد ندیدم نکاتی را که به عنوان یک ویندوز کار به آن برخورد کردم را بیان کنم.

۱- مهم‌ترین مزیت استفاده از LibreOffice برای من رایگان بودن آن، رهایی از مشکلات کرک و آسوده خیالی ناشی از رعایت کپی رایت می‌باشد.
۲- مهم‌ترین مشکلی که با LibreOffice دارم عادت نداشتن به آن است. به عنوان کسی که از زمان ویندوز ۳٫۱ از MS Office استفاده می‌کرده برایم خیلی سخت بوده و هست که به LibreOffice عادت کنم.
۳- ظاهراً LibreOffice Writer با متون دو زبانه مشکل دارد. گاهی اوقات که در یک پاراگراف فارسی از چند کلمه انگلیسی و بعضی کاراکترها مثل خط تیره استفاده می‌کنم. کلمات انگلیسی فارسی توی هم فرو می‌روند و به هیچ وجه قابل اصلاح نیستند.
۴- در Writer مکان‌نما در جای صحیح نشان داده نمی‌شود. یعنی زیادی به حروف یا حاشیه پاراگراف چسبیده است.
۵- نمی‌توانم در Writer فونت پیش فرض را عوض کنم.
۶- در MS Word می‌توانستم با یک shortcut خاص سایز فونت همه نوشته را با هم یکی بالا ببرم یا یکی پایین بیاورم. انجام این کار در Writer برایم غیر ممکن است.
۷- Paste کردن حتی از notepad باعث به هم ریختگی فونت می‌شود.

البته ممکن است همه این مشکلات به خاطر نا آشنایی خودم یا اجرای LibreOffice در ویندوز باشد.

‫ریسک‌های freelance شدن

اگر مدت‌ها یک کارمند شرکتی بوده باشید و بخواهید به کار پروژه‌ای (freelance) سویچ کنید، ریسک‌های زیر را می‌توان برای این تغییر روش متصور شد:

۱- آیا با کار پروژه‌ای می‌توانم همینقدر پولی که الان به صورت ماهانه در می‌آورم، در آورم؟

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

۲- آیا توانایی لازم در پوشش دادن صفر تا صد پروژه را دارم؟

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

۳- آیا برآورد هزینه و زمان پروژه را به درستی انجام می‌دهم؟

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

۴- پروسه خروج از شرکت فعلی و تغییر شرایط زندگی چطور خواهد بود؟

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

‫انتقال فردیس از codeplex به github

پروژه «فردیس» از سایت codeplex به github منتقل شد. چون کار کردن با یک سورس کنترل distributed مثل git خیلی راحت‌تر از svn یا TFS است.

هم زمان با این انتقال، شماره نسخه «فردیس» یکی بالا رفته و به 0.23 رسید. در این نسخه به جز توابع کار با یونیکد و حروف فارسی و غیر فارسی، توابع کوچکی هم برای کار با تاریخ‌های شمسی و غیر شمسی و کار با stringها خصوصاً stringهای فارسی اضافه شد.


اطلاعات بیشتر:

* آدرس جدید
* دسترسی به سورس
* دریافت سورس با گیت: git@github.com:afsharm/fardis.git
* دریافت فایل زیپ سورس
* دریافت نسخه اجرایی v0.23
* ثبت ایرادات و اشکالات
* ویکی

انتقال سایت کارویس به آدرس جدید

سایت کاریابی اختصاصی برنامه‌نویسان، کارویس، صاحبخانه شد و از آدرس قبلی به دامنه اختصاصی خودش یعنی http://karvis.ir منتقل شد. هدف از این کار توسعه بیشتر کارویس و افزایش rank آن است.

لطفاً فید قبلی را پاک و از فید جدید به آدرس http://karvis.ir/feed.svc/all?format=rss استفاده نمایید.

Converting an ASP.NET website to web application project in Visual Studio 2010

During converting a large ASP.NET website (more than 500 aspx page and 750 ascx user control) to a Web Application Project in Visual Studio 2010, I encountered many problems and found solutions for them. I’d like to share them with all.

1. Website does not have namespace in projects. While Webproject does have. It’s better to add namespace for all pages and user controls. Namespaces must match physical path of file in the project tree. If you have not enough time to do it for all items you can just find items with same name and change class names only for them. I have added “Page” in the end of class names of pages that were residing in Pages folder.

2. App_code does work. Better to renamed it to something unreserved like WebCode. Check if build action is set to “compile” not to “content”.

3. Take special care for class name of master files.

4. You need to select “convert to web application” by right clicking the web project. It will add designer file for all items. This process is very slow.

5. rdlc reports files (MS SQL Reporting Services client reports) may produce many problems. web.config and other locations must be corrected with newer versions of Reporting Services.

6. Some datasets must be corrected via editing web project csproj file correctly. You must add an entry like following for designer file too.

     

True
True
DataSet1.xsd

You can also add a dummy dataset to project and see how it is.

7. Consider having all user controls in the project. In my special case “common” folder added to project too.

8. If you encounter errors like “Element ‘x’ is not a known element” in Visual Studio 2010  you may try this solution.

9. You may need additional tricks. For example create a dummy user control and drag it on the page.

10. Seems all user controls must have namespace

11. Total process may need many tricks. So turn on your innovation!

‫تبدیل سورس‌های svn به git

یک بار وقتی که می‌خواستم سورس‌های موجود در Source Safe را به یک سورس کنترل Subversion منتقل کنم متوجه شدم که کار خیلی سختی است. به این علت که ابزارهای خیلی کمی برای این کار وجود داشت. علاوه بر اینها به نظر می‌رسید history فایل‌ها را نمی‌توان به svn منتقل کرد. هیچ کس هم این کار را توصیه نمی‌کرد. این تبدیل از نظر آنها به درد نخور بوده و توصیه می‌شد که آخرین نسخه سورس Source Safe به صورت یک نسخه کاملاً fresh و بدون هیچ history به svn منتقل شود. من هم در آن زمان مجبور شدم همین کار را بکنم.

اما حالا یک بار دیگر می‌خواهم سورسی را از یک Source Control به یک Source Control دیگر منتقل کنم اما این بار با history. خوشبختانه چون می‌خواهم این بار سورس کد را از svn به git منتقل کنم مشکل چندانی ندارم. این کار چندان سخت نیست. کافی است با کمی جستجو به یک راهنمای خلاصه برسید و مراحل را دنبال کنید. من با کمک این راهنمای چند خطی توانستم سورس یک پروژه موجود در Codeplex را از svn به git منتقل کنم. البته دقت به چند نکته می‌تواند عملیات انتقال را راحت‌تر کند:

۱- باید به جای دستور git-svn از دستور git با سویچ svn استفاده کنید. یعنی به صورت git svn.

۲- git svn با urlهای فایلی مثل file:///d:/repo خیلی مشکل دارد. سعی کنید از urlی مثل svn://myserver استفاده کنید. درست کردن یک سرور با استفاده از svn کار چندان سختی نیست. به این راهنما مراجعه کنید.

۳- حواستان به این موضوع باشد که ساختار branch در svn تفاوت زیادی با git دارد. یعنی اگر می‌خواهید branchها را هم از svn به git منتقل کنید باید کمی documentationهای git را بالا و پایین کنید.

۴- بهتر است قبل از شروع سری به راهنمای git مخصوص svn کارها بیندازید.

۵- من همه این کارها را با کمک Git Extensions انجام دادم.

تجارب به روز رسانی تکنولوژی‌های دات نت و غیره

درست یک سال پیش در چنین روزی بعد از دریافت مجوز از «رییس»، پروژه مهاجرت از دات‌نت ۲ به ۳٫۵ شروع شد. با آن که همان وقت مطلب کاملی راجع به آن نوشته بودم اما موارد زیر از قلم افتاده بودند. دلیلش هم این بود که ما هم زمان با تغییر دات‌نت فریمورک و ویژوال استودیو، SQL Server را هم از نسخه ۲۰۰۵ به نسخه ۲۰۰۸ ارتقا داده بودیم و مطالب زیر را نمی‌شد در کنار آن بگذارم. با وجود تاخیر یک ساله‌ای که در ارسال این مطلب دارم چون کم کم باید برای دات‌نت ۴ و ویژوال استودیو ۲۰۱۰ حاضر شویم این موارد را در اینجا می‌گذارم تا شاید به درد کسانی که هنوز به دات‌نت ۳٫۵ مهاجرت نکرده‌اند بخورد.

مسائل بعد از به روز رسانی دات‌نت به ۳٫۵ و SQL Server به ۲۰۰۸:

۱ IIS همچنان نسخه ۲ را نشان می‌دهد نه ۳ یا ۳.۵
۲ به روز رسانی framework عمدتا شامل library بوده نه چیز دیگر
۳ نسخه ۳ و ۳.۵ عملا extensionی بر نسخه ۲ هستند و عملا همان نسخه ۲ هستند. ولی نسخه ۴ تغییری اساسی خواهد بود
۴ namespace یک resource و یک dataset عوض شده است
۵ به روز رسانی باعث پاک سازی و مرتب سازی نسخه‌های قبلی پروژه‌ها شد
۶ چطور بفهمم همه چیز واقعا به ۳.۵ تبدیل شده؟ لینک
۷ مشکل virual directory مربوط به reporting services و عدم حضور آن در IIS
۸ تعریف کاربر ASPNET در reporting services
۹ اکتیو ایکس چاپگر در RS 2008 هر دفعه نیاز به نصب دارد
۱۰ حس می‌کنم سرعت بالاتر رفته است
۱۱ در یکی از سیستم‌ها امکان چاپ وجود ندارد با خطای Unable to load printer control… که مربوط به اکتیو ایکس چاپ است
۱۲ مشکلات RS و فونت برنا رایانه (سری بی)

‫برنامه‌های من برای مهاجرت به FOSS

love foss اینجانب بعد از آن که به صف عشاق سینه‌چاک Open Source و FOSS پیوستم تصمیم گرفتم که به عنوان یک برنامه‌نویس و یک کاربر روزمره برنامه‌ای برای این مهاجرت بزرگ تدوین کنم. FOSS که گاهی اوقات آن را به نام Open Source هم می‌شناسند از یک طرف باعث می‌شود که کیفیت کار من به عنوان یک برنامه‌نویس افزایش یابد و از طرفی دیگر باعث کاهش عمده هزینه‌های (مالی/اخلاقی) نرم‌افزاری خودم و شرکت/اداره استخدام کننده‌ام می‌شود. درست است که ما در ایران هزینه‌ای بابت خرید یک نرم‌افزار خارجی نمی‌پردازیم ولی این کار به هر صورت غیر اخلاقی است و البته کار با نسخه‌های نایاب Crack هم دردسرهای فراوان خودش را دارد. البته فراموش نشود که عوض کردن عمده نرم‌افزارها و روش‌ها به نرم‌افزارهای آزاد کار چندان راحت و سریعی نیست. انجام این کار به صبر و حوصله زیاد و زمانی بین ۲ الی ۱۰ سال نیاز دارد. بنده برنامه این مهاجرت را اجالتاً به صورت یک لیست ۲۹تایی در آورده‌ام که در ادامه می‌آید:

مطالعاتی
۱- مطالعه چند کتاب در مورد FOSS و اجازه‌نامه‌های مرتبط با آن.
۲- مطالعه عمیق‌تر سی‌شارپ و مقایسه آن با جاوا به عنوان یکی از معروف‌ترین زبان‌های برنامه‌نویسی آزاد ولی مشابه سی‌شارپ.
۳- تمرکز بر روی روش‌ها و فناوری‌های برنامه‌نویسی بدون توجه خیلی زیاد به platform مثل ORMها و AJAX.
۴- مطالعه روش‌های SOA خصوصاً SCA به عنوان یک نمونه آزاد از معماری SOA.
۵- تمرکز بیشتر بر روی مسائلی که در همه Platformها کاربرد دارد مثل XML و XPath.
۶- تقویت هر چه بیشتر زبان انگلیسی به عنوان یک زبان بین‌المللی
۷- شناسایی Communityهای فعال برنامه‌نویسان آزاد سراسر دنیا.
۸- مطالعه استانداردهایی که مستقل از Platform هستند و سعی در اجرای دقیق آنها. اگر برنامه‌ای با استفاده از استانداردها و پروتکل‌های دقیق و درست نوشته شده باشد با دردسر کمتری در Platformهای دیگر اجرا می‌شود.
۹- نیم نگاهی به زبان‌های آزاد نوظهور مثل PHP و Ruby.
۱۰- آشنایی با دیگر فناوری‌ها و روش‌های رایج برنامه‌نویسی دنیای جاوا و استفاده از آنها در دات‌نت و سی‌شارپ.
۱۱- مطالعه Design Patternها. چون مهارتی است که در همه زبان‌های برنامه‌نویسی قابل استفاده است.
۱۲- هدف گرفتن زبان جاوا به عنوان زبان برنامه‌نویسی احتمالی بعدی.

تمرینی – عملی
۱۳- مشارکت در چند پروژه کدباز مثل کایوهوگا، اکالیپتوس و NHibernate
۱۴- با Source Controlهای بیشتری کار کنم. فقط MS Source Safe کافی نیست. باید آنهایی که بین بقیه برنامه‌نویسان رایج است را هم بشناسم.
۱۵- با سایت‌های نگهداری پروژه‌های FOSS مثل SourceForge و CodePlex بیشتر آشنا شوم.
۱۶- سعی در استقلال از IDE با کمک برنامه‌های خط فرمانی چون csc.exe
۱۷- با ابزارهای IssueTracker مثل JIRA و آن چه که در دل سایت‌ها و نرم‌افزارهایی مثل SourceForge، CodePlex و MS TFS به اسم Work Item یا چیزهای دیگری وجود دارند هم آشنا شوم.
۱۸- نیم نگاهی به Apache Web Server به عنوان یک Web Server آزاد که حتی می‌تواند ASP.NET را هم اجرا کند.
۱۹- تطبیق برنامه‌های تحت وب فعلی به نحوی که به جز IE در Firefox هم اجرا شوند. به این طریق می‌توان برنامه‌های فعلی را از طریق لینوکس هم اجرا کرد.
۲۰- برنامه‌هایی که می‌نویسم را حتی‌الامکان تحت وب پیاده‌سازی کنم نه به صورت Desktop زیر که اصولاً Desktop یعنی Cross-Dependent.

ابزارها – فناوری‌ها
۲۱- استفاده از MySql به جای MS Sql Server
۲۲- استفاده از NHibernate به جای LINQ و ADO
۲۳- استفاده از log4net به جای Entlib
۲۴- استفاده از Nant برای Build پروژه‌ها (در جهت استقلال از VS)
۲۵ – استفاده از Lucene.NET به عنوان موتور جستجو.

کاربردهای روزمره
۲۶- استفاده از Firefox و Chrome به جای IE. چون هر دو FOSS و Cross-Platform هستند.
۲۷- استفاده از Thunderbird به جای Outlook Express.
۲۸- تمرینات گهگاهی با لینوکس، لازم نیست فوراً ویندوز را کنار بگذارم.
۲۹- هر جا که بین یک نرم‌افزار FOSS و یک نرم‌افزار غیر FOSS حق انتخاب داشتم، از معادل FOSS یک نرم‌افزار استفاده کنم. مثلاً به جای DAP از FDM استفاده کنم، یا به جای Windows Media Player از VLC Player استفاده کنم.