Saturday, December 23, 2006

Zekr 0.5.0 beta 1 released

Zekr 0.5.0 beta 1 is out.
This release brings a very useful feature: Bookmarking.
There is a new bookmarks menu, plus a bookmark manager (with drag and drop feature ;)).

More features:
  • Printing is enhanced for this release, and Zekr uses different style sheet for printing. Just try printing from Quran/translation view or search view.
  • Current page search also is now much better. You can navigate through the current page search using buttons on search bar.
  • Goto random aya menu item added under view menu.
Download it from here.

Here are some screen shots from the new release.

A sample screenshot of bookmarks configuration form

A sample Zekr printed document

Sunday, December 17, 2006

SWT Class Hierarchy: A Criticism

From time to time, I find something odd with SWT class hierarchy, which causes me to code more. The only explanation I could tell to myself is that SWT is trying to have its API as easy as possible. But this easy-thinking could be sometimes really frustrating.

I express here 4 examples:
  1. Combo and CCombo are two classes with rather same interface (say ICombo), but in fact there is no common interface defined in SWT. Here is a case that happened to me; I had a number of (big) combo boxes in a SWT application, which worked fine in Windows. When I wanted to run the application on Linux, since setVisibleItemCount(int) is not implemented on GTK (actually not possible due to the way GTK combos are implemented: either a list+button or menu+button), combos covered the whole screen. If there was a common ICombo interface, I could easily change all the Linux combos to CCombo (which supports that method).
  2. setText()/getText() is a very common method among widgets, which is not forced by any interface. Suppose a case that you want to implement a number of different table editors (a CCombo and a Text as an example), with a common listener. If there was an interface for widgets (like IWidget), you could then use that to handle all the table columns regardless of column number.
  3. Button is another example. Why should checkbox, radio button, and normal button use the same class, and for example getSelection doesn't work for button? Neither SRP, nor LSP are held here.
  4. There would be fine to have a simple (either without any method) interface for layout data classes. setLayoutData(Object) would better to accept a special interface, rathe bare Object :).

Friday, December 8, 2006

منابع کنکور کارشناسی ارشد جامعه‌شناسی + نمونه سؤالات


منابع جدید کنکور (1389) مجموعه یازده رشته‌ای علوم اجتماعی (شامل 1. جامعه‌شناسی، 2. انسان‌شناسی (مردم‌شناسی)، 3. جمعیت‌شناسی، 4. توسعهٔ روستایی، 5. برنامه‌ریزی رفاع اجتماعی، 6. مطالعات فرهنگی، 7. جامعه‌شناسی انقلاب، 8. مطالعات جوانان، 9. برنامه‌ریزی و برنامه‌ریزی توسعهٔ منطقه‌ای، 10. برنامه‌ریزی گردشگری توریسم و 11. دانش اجتماعی مسلمین) به‌علاوهٔ پژوهش و مطالعات زنان را می‌توانید از سایت معاونت آموزشی جهاد دانشگای دانشگاه تهران دریافت کنید (یا در اینجا مشاهده کنید). حجم این فایل پی‌دی‌اف، 1.6مگابایت است. در صورتی که لینک فعال نبود، آن‌را در اینجا مشاهده کنید.

در اینجا هم تلفن 84650 (پیش‌شمارهٔ تهران: 021) برای مشاورهٔ تلفنی ذکر شده است.

- - - - - - - - - - - - -

این قسمت قدیمی است و 4 سال پیش در این وبلاگ نوشته شده است:

امروز داشتم تو اینترنت دنبال منابع و تست‌های کنکور کارشناسی ارشد علوم اجتماعی می‌گشتم. هرچند خیلی چیز زیادی گیرم نیومد ولی همینم جای شکرش باقیست. منابع کنکور توی مجله‌ی فصل نو (مجله‌ی اینترنتی علوم اجتماعی) اومده:



  1. معرفی منابع رشته علوم اجتماعی در کارشناسی ارشد
  2. معرفی منابع کار شناسی ارشد گرایش های مطالعات جوانان و زنان
  3. معرفی منابع کارشناسی ارشد گرایشهای برنامه ریزی رفاه اجتماعی و جمعیت شناسی
روی سایت شبکه‌ی آموزش سیما هم تست‌های خوبی به همراه پاسخ برای جامعه‌شناسی و مردم‌شناسی هست (البته من هنوز پاسخ‌نامه‌ش رو چک نکردم ولی بعید نیست که اشتباهاتی داشته باشه):

  1. سؤالات کارشناسی ارشد نظریه‌های جامعه‌شناسی
  2. سؤالات روش تحقیق
  3. سؤالات حوزه‌ها و مفاهیم جامعه‌شناسی
  4. سوالات کارشناسی ارشد مردم‌شناسی

Tuesday, December 5, 2006

مقایسه‌ای تطبیقی بین جاوا و دات‌نت

مقدمه

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

در این مستند قصد داریم تا از منظر تولید سیستم‌های مبتنی بر وب، مقایسه‌ای کاربردی بین جاوا و دات‌نت داشته باشیم.

تاریخچه

تاریخجه‌ی فراگیر شدن دات‌کام‌ها و در واقع ارائه‌ی سرویس‌های مجازی مبتنی بر وب به اواخر دهه‌ی 90 و خصوصاً سال‌های 1998 تا 2000 بر می‌گردد [JavaWorld]. در آن زمان علاوه بر فراگیر شدن اینترنت، بلوغ مرورگرهای وب و استانداردسازی قراردادهای ارتباطات مبتنی بر وب همه و همه به توسعه‌ی سرویس‌های مجازی کمک کردند و به بیانی شرکت‌ها یک زمین مجازی برای ارائه‌ی خدمات یافتند. به تبع آن، نیازی روزافزون برای تسهیل توسعه‌ی سیستم‌های مبتنی بر وب احساس می‌شد.

پاسخ شرکت سان (Sun Microsystems) به این نیازها ارائه‌ی بسته‌ی توسعه‌ی نرم‌افزار Java 2 Entrrprise Edition (به طور مخفف J2EE، که از نسخه‌ی 5 به بعد به Java EE معروف است) بود. این بسته در واقع مجموعه‌ای از استانداردهای فناوری‌های مبتنی بر وب بود که با استفاده از جاوا، مجموعه امکانات جدیدی را به توسعه‌دهندگان برنامه‌های وب (و فراتر از آن سیستم‌های توزیع‌شده مانند EJBها) ارائه می‌داد. J2EE در واقع مجموعه‌ای از استانداردها به همراه پیاده‌سازی مرجع آن‌ها (عموماً توسط سان) می‌باشد.

سه سال پس از ارائه‌ی J2EE (که اساساً حول محورهای برنامه‌های حجیم، معماری‌های پیچیده و طراحی منسجم قرار دارد)، مایکروسافت در سال 2002 فناوری دات‌نت را ارائه داد. در این بسته‌ی توسعه‌ی نرم‌افزار، مایکروسافت زبان‌های گوناگونی چون VB.Net، J#.Net، C++.Net و زبان جدید C#.Net را ارائه داد. همچنین برای توسعه‌ی سیستم‌های مبتنی بر وب برنامه‌نویسان می‌توانستند از فناوری ASP.Net استفاده نمایند. کتابخانه‌ی کلاس‌های دات‌نت با در نظر گرفتن امکانات موجود جاوا و به منظور رقابت با آن طراحی شده بودند. با اندک نگاهی به آن می‌توان متوجه شد که بر خلاف جاوا که طراحان آن بهترین تمرین‌ها (Best practices) را ملاک طراحی خود قرار داده بودند و به شدت به اصول طراحی پایبندند، پایبندی اصلی طراحان کتابخانه‌ی کلاس‌های دات‌نت، سهولت کاربر و آسانی نوشتن کد (هم از جهت اختصار و هم از جهت ملموس بودن) است.

در ادامه‌ی به بررسی دو فناوری جاوا و دات‌نت از منظر‌های مختلف می‌پردازیم.

کارایی (Performance)

هر چند مقایسه‌ی کارایی فناوری‌های مبتنی بر دات‌نت و جاوا کاری پیچیده و دشوار است، مقایسه‌ی سرعت محیط‌های اجرایی آن‌دو (1) برای برنامه‌های سرعت‌گیر و محاسباتی حاکی از آن است که تفاوت چندانی وجود ندارد. برخی ادعا می‌کنند که به دلیل قابلیت اجرای برنامه‌های جاوا بر روی بسترهای مختلف نرم‌افزاری (بر خلاف دات‌نت که فقط بر روی بستر ویندوز قابل اجراست (2)) کارایی آن نسبت به دات‌نت کم‌تر است. این ادعا هر چند در عمل برای برنامه‌های گرافیکی محیط ویندوز در مقابل برنامه‌های جاوا مبتنی بر سوینگ (Swing) مشاهده می‌شود، ولی برای برنامه‌های سنگین محاسباتی و یا مواردی چون سرعت عملیات ورودی و خروجی (I/O) به چالش کشیده می‌شود و باید در آن تردید کرد (3).

در مورد اجرای برنامه‌ها، هر دو محیط از روش تفسیر (interpret) (و نه کد ماشین) استفاده می‌کنند. در این روش پس از کامپایل کد منبع (source code)، یک کد دودویی میانی تولید می‌شود که برای مفسرهای جاوا/دات‌نت قابل فهم است. به طور معمول روش تفسیر در زمان اجرا از تولید و اجرای کد ماشین کندتر است ولی هر دو فناوری موجود برای بدست آوردن مزایای تفسیر از تولید کد ماشین صرف‌نظر کرده‌اند.

در بعد محسوس‌تر، باید سرعت تولید صفحات پویای ASP.Net را به عنوان مثال با JSP مقایسه کرد. این کار هرچند در نظر اول منطقی به نظر می‌رسد ولی با آسانی ممکن نیست. صرف‌نظر از اینکه دیگران چه ادعاهایی در مورد سرعت برنامه‌های تحت وب جاوا در مقابل دات‌نت دارند توجه به نکات زیر ضروری است:
برنامه‌های ASP.Net بالاجبار از تنها سرور قابل اطمینان برنامه‌های دات‌نت آی‌آی‌اس (Microsoft’s Internet Information System) استفاده می‌کنند. این وب سرور یکی از قدرتمندترین وب‌سرورهای محیط ویندوز است که منحصراً در همان محیط اجرا می‌شود. در مقابل برای توسعه‌ی یک برنامه‌ی تحت وب J2EE طیف وسیعی از سرورهای برنامه‌ی کاربردی از تجاری گرفته تا بازمتن (open source) و از سنگین‌وزن (heavy weight) گرفته تا سرورهای جاسازی شده (embedded) در اختیار برنامه‌ساز وب است. در این میان می‌توان از حداقل 10 سرور زنده و محبوب نام برد که بر روی تمامی محیط‌هایی که جاوا در آن اجرا می‌شود نصب می‌شوند (4).

ASP.Net به خصوص در نسخه‌ی دات‌نت دو، طیف وسیعی از امکانات ساخت برنامه‌های غنی تحت وب را در اختیار برنامه‌ساز قرار می‌دهد، در حالی که با استفاده از JSP و یا نهایتاً JSF، کاربر بسیاری از آن امکانات را توسط کتابخانه‌های جانبی و یا به صورت دستی به برنامه اضافه می‌کند. این امکانات یکپارچه مزیت خوبی را برای سرعت برنامه‌های دات‌نت مهیا می‌کنند، هر چند نمی‌توان حقیقتاً در مورد سرعت رندر شدن (rendering) صفحات ASP.Net و JSP به سادگی قضاوت کرد.

در مجموع می‌توان گفت به جز مواردی نظیر برنامه‌های گرافیکی تحت ویندوز، برنامه‌های دات‌نت مزیتی از لحاظ سرعت اجرا بر جاوا ندارند و حتی در مواردی کندتر اجرا می‌شوند.

زمان توسعه

اساساً این یک حقیقت است که سرعت توسعه‌ی برنامه‌های دات‌نت بیشتر از برنامه‌های J2EE است، هرچند باید به این نکته توجه داشت که برای هر شرکت تولید نرم‌افزار، مهم تخصص‌های موجود در آن شرکت است. در صورتی که تخصص‌های برابر دات‌نت و جاوا وجود داشته باشد، سرعت تولید برنامه‌های تحت وب دات‌نت - مشروط بر شرایط زیر - به صورت محسوسی بیشتر از برنامه‌های J2EE است:
محیط و فناوری‌های مورد استفاده توسط مایکروسافت پشتیبانی شوند. این بدان معنی است که بهترین حالت برای تولید نرم‌افزار در محیط دات‌نت، استفاده از VS.Net در کنار VSS (مدیریت کنترل نسخه‌های متن برنامه)، MS SQL Server‌ به عنوان دِیتابیس سِرور و IIS به عنوان وب سرور می‌باشد. تغییر هر یک از موارد فوق به یک محصول غیر مایکروسافتی (مثلاً استفاده از اراکل به جای SQL Server) مساوی با تأخیر در تولید نرم‌افزار در محیط دات‌نت است.
به دلیل قدمت بیشتر جاوا (از حدود سال 1996) در برابر دات‌نت (از 2002) کتابخانه‌های گوناگونی برای تقریباً هر کاری برای جاوا نوشته شده است. در حالی که دات‌نت تلاش می‌کند در این مورد از جاوا عقب نماند، ولی این حقیقت کماکان وجود دارد که عموماً کتابخانه‌های قابل قبول دات‌نت توسط شرکت مایکروسافت ارائه می‌شوند. کافی است مقایسه‌ای بین برنامه‌های موجود بر سایت SourceForge.net داشته باشیم. در حال حاضر (شهریور 85) در برابر 6.480 برنامه‌ی مختلف به زبان‌های VB.Net و C#.Net، بیش از 22.000 برنامه جاوا (شامل کتابخانه‌ها، برنامه‌های کاربردی، بازی‌ها، ابزارهای اینترنت و ...) وجود دارد. این واقعیت وجود دارد که در برابر 3 یا 4 کتابخانه‌ی مختلف بازمتن جاوا برای یک کار خاص (مثلاً فشرده‌سازی، ایمیل، پروتکل‌های مختلف شبکه و ...) یک و یا دو پیاده‌سازی مورد استفاده در دات‌نت (و آن‌هم متعلق به مایکروسافت) وجود دارد. در واقع در برابر بازار آزاد و خنثای تولید نرم‌افزارهای Java/J2EE (که با ارائه‌ی استاندارد و لیسانس کردن نرم‌افزارها، به شرکت‌های مختلف اجازه می‌دهد تا پیاده‌سازی خود را برای هر استاندارد J2EE ارائه دهند)، انحصار بازار و تجارت اصلی دات‌نت در اختیار مایکروسافت است.

انجمن (community)

جاوا و دات‌نت توسط طیف وسیعی از کاربران مورد استفاده قرار می‌گیرند. در حالی که شرکت‌های بزرگی چون مایکروسافت و SAP از طرفداران اصلی دات‌نت هستند، در طرف دیگر میدان سان، اراکل (Oracle)، آی‌بی‌ام (IBM) و رِدهَت (RedHat) حضور دارند. اراکل در دیتابیس خود یکپارچگی قابل قبولی با جاوا ارائه می‌کند و در عین حال هر سه شرکت اراکل، آی‌بی‌ام و سان (و همچنین BEA) بسته‌ی JDK خود را تحت لیسانس سان (یعنی به صورت کاملاً Sun compaliant) ارائه می‌دهند. در این مورد کاربران با گزینه‌های مختلفی از بسته‌ی توسعه‌ی نرم‌افزار جاوا مواجهند.

تقریباً تمامی دیتابیس‌های کنونی قابل استفاده در هر دو محیط دات‌نت (با استفاده از ODBC و یا native client) و جاوا (JDBC) هستند.

سایت‌ها، میلینگ‌لیست‌ها، انجمن‌ها و گروه‌های مجازی به دلیل قدمت بیشتر جاوا، به مراتب از دات‌نت بیشترند. و باز به همین دلیل کتابخانه‌های موجود جاوا بسیار وسیع‌تر از موارد مشابه دات‌نت هستند.

قابلیت گسترش

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

سهولت استفاده برنامه‌نویس

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

آسانی یادگیری

به نظر نمی‌رسد در این مورد تفاوت خاصی بین دو فناوری وجود داشته باشد، هرچند پشتیبانی دات‌نت از چندین زبان به برنامه‌نویسان این امکان را می‌دهد که ملموس‌ترین زبان را برای خود انتخاب کنند.

انحصار (سیستم‌عامل، ابزارها و ...)

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

از مزایای دیگر جاوا قابلیت اجرای آن بر روی اکثر سیستم‌عامل‌های موجود است. در واقع این به عنوان مهم‌ترین برتری جاوا بر دات‌نت شناخته می‌شود، هر چند برخی آن‌را سرگردان کننده می‌دانند. جاوا از موبایل‌های ساده تا دستگاه‌های اکترونیکی نظیر ماکروفر و یخچال و PDA حضور دارد (نسخه‌ی سبک جاوا). در مقابل دات‌نت هم بر روی PDAهای Pocket PC وجود دارد (نسخه‌ی سبک دات‌نت).

سخت‌افزار مورد نیاز

تفاوت زیادی بین سخت‌افزار مورد نیاز وجود ندارد؛ اگرچه برنامه‌اهی جاوا عموماً به عنوان مصرف‌کننده‌ی بالای حافظه شناخته می‌شوند، دات‌نت هم در این عرصه دست کمی از جاوا ندارد.

نرم‌افزار مورد نیاز

برای برنامه‌سازی جاوا باید Java SDK را در اختیار داشت و برای دات‌نت نیز .Net Framework که هر دو به صورت رایگان قابل دریافتند.

اپن‌سورس

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

یک برنامه‌نویس محیط جاوا به سادگی می‌تواند با استفاده از هر فناوری حوزه‌ی J2EE یک نرم‌افزار - فقط با استفاده از ابزارهای بازمتن - تولید کند.

به علاوه روند توسعه‌ی خود Java SDK به سایت java.net (که حاوی پروژه‌های باز متن جاوا است) منتقل شده و کاربران از نسخه‌ی Java SE 5 به بعد به سادگی به کد منبع SDK جاوا دسترسی دارند. این موضوع متأسفانه هنوز در مورد دات‌نت اتفاق نیفتاده ولی با توجه به رویکرد جدید مایکروسافت نسبت به حمایت از پروژه‌های بازمتن بعید نیست در سال‌های آتی شاهد آن باشیم.

به تازگی سان اعلام کرده که می‌خواهد بسته‌ی نرم‌افزاری توسعه‌ی جاوا را تحت لیسانس آزاد گنو (GNU General Public License) ارائه کند.

در کنار این جریان مایکروسافت هم با حمایت از چند سایت (که پروژه‌های بازمتن را توسعه می‌دهند) قصد دارد تا نقشی در عرصه‌ی بازمتن ایفا کند. سایت‌های GotDotNet و CodePlex از این دسته‌اند.

محیط برنامه سازی (IDE: Integrated Development Environment)

یکی از موارد مهم در تولید نرم‌افزار ابزار اصلی برنامه‌نویسان یعنی محیط برنامه‌سازی با IDE می‌باشد. در حالی که دات‌نت تنها یک IDE قدرتمند دارد که غیر رایگان است، جاوا در حدود ده IDE مختلف از محیط‌های بازمتنی مانند Eclipse و NetBeans گرفته تا محیط‌های تجاری چون IntelliJ IDEA، JBuilder، Workshop، JDeveloper و WebSphere را در اختیار دارد.

یگانه محیط برنامه‌سازی دات‌نت Visual Studio.Net می‌باشد که تقریباً تمامی امکاناتی که یک IDE بالغ باید داشته باشد را در خود گرد آورده. در مقابل ابزارهای بازمتنی چون Eclipse با قابلیت نصب pluginهای گوناگون، IDEهای دیگر را به چالش می‌کشد. هرچند محیط‌های بازمتنی چون SharpDevelop هم برای توسعه‌ی برنامه‌های دات‌نت در اختیار است، لیکن این محیط‌ها تفاوت چشمگیری با VS.Net دارند.

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

نتیجه‌گیری

باید توجه داشت که قالب مستنداتی از این دست که مقایسه‌ای بین فناوری‌های مختلف انجام می‌شوند، جانبدارانه، به منظور بازارگرمی و حمایت از یک فناوری نوشته می‌شوند (و شاید این مستند هم از این قاعده مستثنا نباشد، هر چند تلاش شد تا بی‌طرفی حفظ شود)؛ لذا به نظر اکثر صاحب‌نظران حوزه‌ی مهندسی نرم‌افزار، مهم این است که تیم تولید چه مهارت‌هایی را دارد و چه محدودیت‌هایی در محیط وجود دارد. این یک واقعیت است که به ازای هر امکان در جاوا امکان مشابهی در دات‌نت وجود دارد (و بالعکس) و نهایتاً مدیر باید تصمیم خود را عاقلانه و بر مبنای مهارت تیم تولید، امکانات سخت‌افزاری/نرم‌افزاری ، سهولت استفاده‌ی کاربران، زمان تولید،‌ سیستم عامل هدف و مواردی از این دست بگیرد.


(1) .Net CLR (Common Language Runtime) versus JVM (Java Virtual Machine)
(2) پروژه‌ی مونو (Mono) یک پیاده‌سازی غیر رسمی محیط‌کار دات‌نت بر روی سیستم عامل لینوکس است، که هر چند امکان اجرای بسیاری از برنامه‌های دات‌نت را بر روی لینوکس فراهم می‌کند، لکن به دلیل ماهیت غیر رسمی‌اش، هیچ‌گاه به عنوان یک محیط‌کار کامل و منطبق با پیاده‌سازی مایکروسافت شناخته نمی‌شود.
(4) Tomcat, JBoss, Weblogic, OC4J, WebSphere, Jetty, JonAS, Caucho, ...

Saturday, December 2, 2006

How to make windows native executable files for Java applications

There are several ways to make a native executable file for a java application. There are generally two approaches in making executable files. The first approach is to make a .exe files which does NOT rely on a JRE on the host machine. In this method, all necessary java library files (jar files, zip file, class files, dlls, and so on) are put in a single installer file, which can then be installed on a machine without a JRE. This is a nice solution, since you can be sure that end-user of your java application does not need to know a word about JRE and Java, but for a small cost. The cost is the size of your final binary installer which may be up to 10MB for a small Hello World application. In fact it relies on the JRE version and the size of runtime library and some other jar files bundled with a standard JDK distribution.

There are several ways to make your executable java applications by this manner. You can use commercial products, such as "Zero G InstallAnywhere", "Advanced Installer" and "Excelsior JET". The last one claims that have a powerful optimizer which makes java applications run faster than running on a normal JRE. Here is a benchmark by Excelsior. "Zero G InstallAnywhere" is widely used by companies who release their software, or developer's packages in Java language.

This is the most easy (but not free) solution. There is also a free solution, which is to use GCJ (GNU Compiler for Java). NativeJ, is a free fron-end for GCJ (since GCJ is hard to deal with in Windows). NativeJ's website says:
NativeJ is a Java to native compiler. It allows AOT (ahead of time) compilation of your Java applications.With NativeJ, you can create real standalone native binaries (.exe on Windows) which will no longer depend on a JRE.


GCJ is an incomplete Java compiler and runtime environment. It is absolutely open source, and runs on platforms supported by GCC (Linux/UNIX, Window, Solaris). By the time of this article, the latest (non-stable) version of GCJ was 4.1. I'm, not sure but I think that 4 should be compatible with Sun JDK 1.4. This is a nice idea to use GCJ as a free tool to make your Java applications into Windows (or other supported platforms) native executable, but there are some problems with that. Since it is incomplete, you can not be sure that all your java files can be compiled and linked with GCJ. The other problem is that there is not an IDE which supports GCJ as a JRE and Java compiler and linker. Eclipse, NetBeans, IntelliJ IDEA, JBuilder, JDeveloper, WSAD, JCreator, etc.; none of them does support GCJ. The best one for this mean may be Eclipse, since there are hundreds of plugins written for it. There is only one plugin for Eclpise which auto generates a GNU Makefile for a java project. This Makefile can only be run under Linux platforms! Here is a nice article about "Compiling Java with GCJ" by Per Bothner.

The second approach is to make .exe files which still relies on JRE. It means that one should have JRE installed on his/her computer in order to be able to run the binary executable file. In fact it works as a simple batch (.bat) file script: checking if JRE is available on user's system and run the main class with class path properly set. This way is nice for those who want to give their application to IT professionals, developers, or someone who may use the application on a machine with proper JRE. The size of .exe file will not be an issue, since it doesn't put library files in the exe file. There are a lot of solutions for this mean:

و کسی گفت، چنین گفت، سفر سنگین است...

روايت

و کسی گفت، چنین گفت، سفر سنگین است
باد با قافله دیری است که سرسنگین است

گفت، با زخم جگرکاه قدم باید سود
بر نمکپوش ترین راه قدم باید سود

گفت، ره خون جگر می‌دهد امشب همه را
آب در کاسه‌ی سر می‌دهد امشب همه را

سایه‌ها گزمه‌ی مرگند، زبان بربندید
بار دزدان به کمینند سبک‌تر بندید

مقصد آهسته بپرسید، کسان می‌شنوند
پر مگویید که صاحب قفسان می‌شنوند

گردباد است که پیچیده به خود می‌خیزد
از پس گردنه‌ی کوه احد می‌خیزد

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

زنده‌ها از تف لبسوز عطش، دود شده
مرده‌ها در نفس باد، نمکسود شده

دشت سر تا قدم از خون کسان رنگین است
و کسی گفت، چنین گفت، سفر سنگین است

خسته‌ای گفت که زاریم، ز ما در گذرید
هفت سر عائله داریم، ز ما درگذرید

گفت، گفتند و شنیدم گذر پر عسس است
تا نمکسود شدن فاصله یک جیغ ‌بس است

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

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

پای از این جاده بدزدید، سلامت این است
نشنیدید که گفتند سفر سنگین است؟

و چنان رعد شنیدم که دلیری غرید
نه دلیری، که از این بادیه شیری غرید

گفت، فریادرسی گر نبود، ما هستیم
نه بترسید، کسی گر نبود، ما هستیم

گفت، ماییم ز سر، تا به شکم محو هدف
خنجری داریم، بی‌تیغه و بی‌دسته به کف

نصف شب خفتن ما، پاس دهی‌های شما
بعد از آن، پاس‌دهی‌های شما، خفتن ما

الغرض ماییم بیداردل و سرهشیار
خنجر از کف نگذاریم، مگر وقت فرار...

و کسی گفت، بخسبید، فرج در پیش است
کربلا را بگذارید که حج در پیش است

گفت، ایام برات است، مبادا بروید
وقت ذکر و صلوات است، مبادا بروید

گفت، ما از حضراتیم، به ما تکیه کنید
مستجاب ‌الدعواتیم، به ما تکیه کنید

گفت، جنگ و جدل از مرد دعا مپسندید
ریگ در بغض فروهشته‌ی ما مپسندید

بنشینید که آبی ز فراتی برسد
شاید از اهل کرم خمس و زکاتی برسد

سفره باید کرد ... اما علم رفتن را
روضه باید خواند تا آب برد دشمن را

الغرض در همه‌ی قافله یک مرد نبود
یا اگر هم بود، شایسته‌ی ناورد نبود

همه یخ‌های جهان را، همه را سنجیدیم
مثل دل‌های فرومرده‌ی ما سرد نبود

رنج اگر هست، نه از جاده، که از ماندن‌هاست
ورنه سرباخته را زحمت سردرد نبود

آه از آن شب، شب عصیان، که در این تنگ‌آباد
غیر آواز گره‌خورده‌ی شبگرد نبود

آه از آن پیکار، کز هیبت دشمن ما را
طبل و سرنا و رجز بود و هماورد نبود

یادگار - آن علم سوخته - را گم کردیم
آخرین آتش افروخته را گم کردیم

درِ هفتاد رقم بتکده واشد از نو
چارده کنگره‌ی طاق، بنا شد از نو

آنچه آن پیر فروهشت، جوانان خوردند
گله را گرگ ندزدید، شبانان خوردند

بس که خمیازه گران گشت، وضو باطل شد
جاده هم از نفس خسته‌ی ما منزل شد

باز ماییم و قدم‌سای به سرگشتن‌ها
مثل پژواک، خجالت‌کش برگشتن‌ها

از خم محوترین کوچه پدیدار شده
و به خال لبت ای دوست! گرفتار شده

یا محمد! نفسی سوخته در دل داریم
آتشی سرخ و برافروخته در دل داریم

یا محمد! شررآلوده‌ی عصیان ماییم
تشنه‌تر، خشک‌تر از ریگ بیابان ماییم

یا محمد! همه جز پوچی تکرار نبود
چارده قرن علم بود و علمدار نبود

یا محمد! شب طوریم، برآی از پس ابر
چشمراهان ظهوریم، برآی از پس ابر

و کسی گفت : چنین گفت، کسی می‌آید
مژده ای دل! که مسیحا نفسی می‌آید

ما یقین داریم آن سوی افق مردی هست
مرد اگر هست، بدانید که ناوردی هست

ما نه مرداب، که جوییم، بیا برگردیم
و نمک‌خورده‌ی اوییم، بیا برگردیم

نه در این کوه، صدای همگان خواهد ماند
آنچه در حنجره‌ی ماست، همان خواهد ماند

خسته منشین که حدیبیه حنینی دارد
عاقبت صلح حسن، جنگ حسینی دارد

دشنه بردار که بر فرق کسان باید کوفت
و قفس بر سر صاحب‌قفسان باید کوفت

هرزه هر بته که رویید، به داسش بندیم
گرد خود هر که بچرخید، به حراسش بندیم

سفر دشت غریبی است، نفس تازه کنیم
آخرین جنگ صلیبی است، نفس تازه کنیم

زخم وامانده‌ی خصم است و نمکدان شما
ای جوانان عجم! جان من و جان شما

کوه، از هیبت ما ریگ روان خواهد شد
و کسی گفت، چنین گفت، چنان خواهد شد

شمع این مرقد اگر هست، همین ما را بس
مذهب احمد اگر هست، همین ما را بس

این شعر زیبا از محمدکاظم کاظمی، شاعر افغانی-ایرانی است.

First post

I'm happy to have my first post here.