پنجشنبه، آذر ۰۵، ۱۳۸۸

باستان شناسی در نرم افزار از زبان Dave Thomas

همین الان episode شماره 148 از رادیوی مهندسی نرم افزار را گوش دادم و فقط می توانم بگویم wow! یک گفتگوی یک ساعته سرگرم کننده و فوق العاده آموزنده برای کسانی که به هر نحوی با کد درگیر هستند.
این episode را بشنوید و نظرات خود را در با من در میان بگذارید.

جمعه، آبان ۲۲، ۱۳۸۸

این هفته: گنوم 3.0 برای اولین بار زمانی که برگها می ریزند

[ heise.de یکی از سایت های محبوب من در زمینه اخبار IT است. یکی از بخش های این سایت که متاسفانه در بخش انگلیسی وجود ندارد مقالات هفتگی است که در مورد یکی از مباحث روز اوپن سورس نوشته می شود. از این به بعد هر هفته ترجمه این مقاله ها را با عنوان این هفته در وبلاگ قرار می دهم. این اولین تجربه من در ترجمه یک متن فنی از آلمانی به فارسی است بنابراین از دوستان عزیز تقاضا دارم که پیشنهاد ها و انتقاده های خود را از من دریغ ننمایند!
کشور آلمان یکی از کشورهای پیشرفته در زمینه اوپن سورس و نرم افزار آزاد است. برای مثال آلمان با 40 درصد بالا ترین درصد استفاده کنندگان فایرفاکس در کشورهای پیشرفته را به خود اختصاص داده است. امیدوارم این مقالات برای شما نیز مفید باشد ]

براستی نمی توان برنامه نویسان گنوم را (به خاطر اعلام زمان قبلی انتشار گنوم 3.0) عجول و بی فکر نامید. برای اینکه پایداری محیط دسکتاپ محبوب لینوکس را به خطر نیندازد، تیم انتشار گنوم تصمیم گرفت، نسخه 3.0 را برای اولین بار در پاییز بعدی منتشر کند.
هنگامیکه این هفته خبر تصمیم انتشار گنوم 3.0 در سپتامبر 2010 به طور رسمی اعلام شد، کمی نامید بودم. اما این خبر یک غافلگیری غیر قابل پیشبینی نبود. در واقع این تصمیم با شعار گنوم کاملا هماهنگ است: بهبود ظاهر دسکتاپ لینوکس به صورت پیوسته اما نه بطور خاص با سرعت زیاد صورت می گیرد.
رقیب گنوم، KDE روش کاملا متفاوتی دارد. هنگامیکه این پروژه تقریبا دو سال پیش با معرفی KDE 4 تغییرات اساسی اعمال کرد و محیط دسکتاپ خود را از نو چید، سر و صدا و اعتراض زیادی به راه انداخت. این موضوع پیش از هر چیز دیگر به این دلیل بود که سازندگان KDE، دسکتاپ جدید را به صورت یک محصول نیمه تمام به کاربران خود ارایه کردند. خود تغییرات اعمال شده در KDE 4 کمتر مشکل ساز بودند.
از KDE 4.0 - در واقع یک نسخه بتا که هنوز از بسیاری از بیماری های کودکان رنج می برد – تا KDE 4.3 کار زیادی انجام شده است. در این ضمن تقریبا همه کاربران KDE به سیستم جدید عادت کردند و هر روز به تعداد distro های متمرکز بر KDE که ورژن پایدار قبلی (KDE 3) را از مخازن خود حذف می کنند افزوده می شود.
انجام چنین کاری از گنوم غیر قابل تصور است. این که گنوم 3.0 با بسیاری تغییرات جدیدش را عرضه کنند بدون آنکه سیستم را با کامل و دقیق تست کرده باشند، با فلسفه گنوم سازگار نیست. بنابراین ویژگی های جدید و چشمگیر احتمالی نظیر Gnome Sell و Gnome Zeitgeist که از شش ماه پیش در دسترس هستند، برای یک مدت طولانی آماده نخواهند شد و احتمالا تا ماه مارس (نسخه جدید گنوم دو بار در سال، همواره در مارس و سپتامبر منتشر می شود) به مرحله بتا می رسند.
علاوه بر این Gnome Shell، یکی از چنان تغییراتی (به کلمات زیبای انگلیسی User Experience) است که تیم گنوم نمی خواهد قبل از آن که نتایج Usability-Test آن مثبت باشد آن را به کاربران عرضه کند. یک روش عاقلانه در دنیایی که نرم افزار به صورت نیمه پخته برای کاربران سرو می شود و کاربر به عنوان یک موش آزمایشگاهی به کار گرفته می شود.
همچنین این مساله که اینتل برای Clutter GUI-Toolkit - که همراه با Metacity پایه موتور جدید مدیریت پنجره ها Mutter در گنوم 3.0 است - تقاضای یک به اصطلاح copyright-assignment کرده است کمی کار را پیچیده کرده است. به طور کلی این موضوع فرمالیته است اما هنوز کاملا تکلیف آن روشن نشده است.
بنابراین گنوم 2.30 در مارس آینده می آید. با وجود اینکه بعضی سایت های خبری این را به عنوان یک تاخیر نشان دادند اما تیم انتشار گنوم امکان تاخیر را از ابتدا به حساب آورده بود. مدیر انتشار گنوم، وینسنت اونتس در یک مصاحبه در زمان انتشار گنوم 2.28 به طور واضح بیان کرده بود: "ما می خواهیم گنوم 3.0 را در مارس 2010 عرضه کنیم، اما وقتی این موضوع امکان پذیر نباشد با این موضوع که قرار را به سپتامبر 2010 به تعویق بیندازیم، مشکلی نداریم. وقتی مارس برای عرضه قابل تحقق نباشد، گنوم 3.0 در پاییز می آید."
برای کاربران اوبونتو این موضوع تفاوت بزرگی ایجاد نخواهد کرد. نسخه جدید اوبونتو 10.04 (Lucid Lynx) که برای آوریل 2010 برنامه ریزی شده است یک نسخه Long-Time-Support است که کمپانی مادر کانونیکال دوست ندارد آن را با نرم افزار خیلی جدید عرضه کند. بنابراین حتی اگر گنوم 3.0 در مارس آماده می شد تازه برای اولین بار در اوبونتو 10.10 که اکتبر 2010 می آید سر و کله اش پیدا خواهد شد.
در اوپن سوزه و فدورا، گنوم 3.0 اولین اجرای خود را در نسخه های 14 در فدورا و 12 در اوپن سوزه تجربه خواهد کرد. علاقه مندان به تست دسکتاپ جدید می توانند از هم اکنون نسخه در حال توسعه را از مخازن نصب کنند.

چهارشنبه، آبان ۲۰، ۱۳۸۸

رفع مشکل Eclipse در اوبونتو 9.10

اگر شما هم با Eclipse در اوبونتو کار می کنید حتما متوجه رفتارهای عجیب آن در اوبونتو 9.10 شده اید. هر دو نسخه 3.4 و 3.5 این مشکل را دارند که بعضی دکمه ها با کلیک ماوس کار نمی کنند (بدون این راه حل می توانید با Enter یا Space bar فرمان را به دکمه ها بفرستید). همچنین بعضی آیکون ها نمایش داده نمی شوند. علت استفاده کارمیک از GTK 2.18 است که به دلیل جدید بودن باعث به وجود آمدن این مشکلات شده است. یک راه حل این مشکل downgrade به GTK 2.16 است که در مخازن موجود نیست و باید از سورس کامپایل شود. خوشبختانه یک راه حل بسیار ساده برای حل این مشکل وجود دارد: قبل از اجرای Eclipse مقدار متغیر محیطی GDK_NATIVE_WINDOWS را به عدد یک set کنید.

مسلما راه های زیادی برای این کار وجود دارد. یکی از ساده ترین راه ها استفاده از اسکریپت زیر برای اجرای Eclipse است:
#!/bin/sh
export GDK_NATIVE_WINDOWS=1

./eclipse
این اسکریپت را در فولدر Eclipse قراردهید و برای اجرای Eclipse از آن استفاده کنید تا این مشکلات محو شوند!

سه‌شنبه، آبان ۱۹، ۱۳۸۸

Polite Exceptions

As you already know Java has two kinds of exceptions. Checked and unchecked. In the former version compiler complains about the possibility of something going wrong and forces you to handle the doomsday scenario! but unchecked exceptions are happening at runtime and .... Read the rest in a Java text book.

Last week I was working on JBoss, trying to get a DB2 connection from JBoss's connection pool and it threw an exception. It was really a very polite exception:
18:56:50,238 INFO [CachedConnectionManager] Closing a connection for you. Please close them yourself: org.jboss.resource.adapter.jdbc.jdk5.WrappedConnectionJDK5@1e120da
java.lang.Throwable: STACKTRACE
at org.jboss.resource.connectionmanager.CachedConnectionManager.registerConnection(CachedConnectionManager.java:290)
at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:423)
at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:849)
at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89)
....
It was the best exception of my life! It closed the connection for me and told me PLEASE close it yourself! :)

This post does not intend to be technical but if you encountered the same problem leave a comment here and I will tell you how I managed to solve it.

دوشنبه، آبان ۱۸، ۱۳۸۸

یک اصطلاح جالب از مارتین فاولر

دیروز مطلبی در مورد continuous integration در سایت مارتین فاولر می خواندم. مارتین فاولر یکی از خوش فکر ترین افراد حال حاضر دنیای نرم افزار است. خواندن مقاله های مارتین بسیار لذت بخش است. در حین خواندن این مقاله به پاراگراف زیر برخوردم که اصطلاح جالبی داشت و مطرح کردن آن خالی از لطف نیست:
The basic rule of thumb is that you should be able to walk up to the project with a virgin machine, do a checkout, and be able to fully build the system. Only a minimal amount of things should be on the virgin machine - usually things that are large, complicated to install, and stable.
یک ماشین virgin! راستش تا کنون من در مورد کامپیوتری که باهاش کار می کنم این گونه فکر نکرده بودم که زمانی virgin بوده است! یک بار سر یک پروژه JBoss درست کار نمی کرد. همکارم به من گفت که بیا یک JBoss نو نصب کنیم و عملیات را دوباره تکرار کنیم و کلی به اصطلاح JBoss نو خندیدیم ولی فکر نمی کردم که بشود اصلاح virgin را برای JBoss هم به کار برد!

بنا بر ارادتی که به برادر کچل فاولر دارم مراحل استفاده از یک ماشین (منظور نرم افزار نصب شده روی ماشین) از دید ایشان را تشریح می کنم.
  1. ماشین virgin است و خوب شما با نصب برنامه ها آن را از این حالت خارج می کنید!
  2. زندگی زناشویی شما با ماشین شروع می شود. گاهی برنامه ها به شما حال می دهند. گاهی مجبور می شوید از راه های دیگری عمل کنید تا امورات شما بگذرد! (مثلا استفاده از command line به جای gui) و خوب گاهی هم ممکن است جای شما و ماشین عوض شود و بخواهد مقداری با شما حال کند که معمولا زیاد می افتد.
  3. زمانی از دست این زندگی خسته می شود و درایو ها را فرمت می کنید و یک ساعت بعد یک ماشین virgin جدید خواهید داشت!
If life was that easy! ;)

و نکته مهم در مورد Continuous Integration و سیستم ساخت این است که بتوانید سریع ماشین را راه بیاندازید و به زندگی خود ادامه دهید!

شنبه، آبان ۱۶، ۱۳۸۸

چرا سوییچ به ویندوز 7 برای کاربران لینوکس ایده خوبی است

امروز چهارمین روز مهاجرت از اوبونتو به ویندوز 7 است و باید صادقانه بگویم که ویندوز جدید مایکروسافت را دوست دارم. من معمولا ایده ها و محصولات جدید (در دنیای نرم افزار) را امتحان می کنم. این کار یکی از بهترین ابزارها برای جلوگیری از طرفداری بی دلیل از یک محصول است. مسلما هیچ چیز کامل نیست ولی تغییر محیط اثرات مطلوبی دارد. عمل به جمله های زیر یکی از اهداف من در زندگی است:

People who have been deprogrammed more than once seem to be the most
rational. A single ideology conversion can change one fanaticism for another.
After a second conversion, people tend to get a sense that many whole
collections of ideas – contradicting each other – can seem equally true. This
makes people suspicious of such collections of ideas, and thus more resistant to
the effects of parasitic idea-organisms.
One way to help free your mind is to deliberately adopt a new Ideology,
then deliberately trade it for another.

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

تغییر محیط تنها دلیل من برای استفاده از ویندوز 7 نیست. علاوه بر اینکه در ویندوز می توانم با iTunes آیپادم را sync کنم و با Adobe Acrobat Pro فایل های PDF را Annotate کنم (دو مشکل اساسی من در اوبونتو) ویندوز جدید سیستم عامل فوق العاده ای است. در زیر لیست ویژگی های مورد علاقه من در ویندوز 7 آورده شده است:
  • سرعت و مصرف حافظه قابل قبول. ویندوز 7 روی لپ تاپ من که 2 سال از عمرش می گذرد نسبت به ویستا بسیار سریعتر بالا می آید و تقریبا نصف آن حافظه می گیرد. هر چند سرعت بالا آمدن Karmic Koala بهتر از 7 است اما Come on! سرعت 7 در مقابل امکاناتی که در نصب برنامه های مختلف به شما می دهد قابل قبول است. من ترجیح می دهم به جای 30 یک دقیقه صبر کنم اما برنامه های مورد نیازم را داشته باشم. علاوه بر این Hibernate هم اینجا کار می کند. (کارت گرافیک من Nvidia است و این ویژگی در لینوکس کار نمی کرد)
  • Taskbar جدید که ترکیبی از مدل قدیمی و dock در OS X است.
  • مدیریت شبکه ها در Notification Area که ساده تر شده است.
  • تنظیم ها و اخطارهای امنیتی ویستا یک فاجعه بود که خوب در 7 خبری از آنها نیست.
  • تم های جدید که wallpaper را اتوماتیک عوض می کنند. واقعا از ظاهر قهوه ای و کهنه گنوم خسته شده بودم ظاهر براق و ترکیب رنگ های 7 برایم جذاب است.
فعلا که همه چیز به خوبی کار می کند. سایر ابزارها هم که تفاوتی نکرده اند. بجای Rythmbox از iTunes استفاده می کنم. فایرفاکس، کروم و Eclipse هم که همان ابزازهای آشنای قدیمی هستند. در ضمن می توانم بازی هم بکنم (Silent Hill Home Coming)

به همه لینوکسی ها توصیه می کنم که:
Give yourself (and your open source ideology) a break and start using Windows 7! Maybe something good comes out of it! ;)