Anjuta 2.30 همان IDE که منتظرش بودید.

چند روزی است از Anjuta 2.30 استفاده می‌کنم، به نظر من یکی از بهترین محیط‌های توسعهٔ یکپارچه (IDE) است، در نسخهٔ جدید Anjuta قابلیت auto-completion پیشرفت قابل توجهی داشته و بصورت هوشمند کار می‌کند (Code Intellisense). پروژه‌های ساخته‌شده رابطهٔ تنگاتنگی با GNU Autotools (ابزارهای autoconf و automake و libtool و …) دارند. قابلیت اشکال‌زدایی برنامه، ابزارهای کمکی برای تشخیص threadها، نمایش وضعیت call stack و متغیرهای محلی و امکان استفاده از watchها را نیز دارد. بطور کلی امکانات این IDE را می‌توان بصورت زیر خلاصه نوشت:

  • استفاده از GNU Autotools برای پروژه‌ها
  • محیط یکپارچه با طراح رابط کاربری Glade
  • محیط یکپارچه با Devhelp برای مستندات API
  • Code Intellisense (همان auto-completion بصورت هوشمند)
  • اشکال‌زدایی برنامه توسط ابزارهای کمکی
  • قابلیت استفاده از افزونه‌ها
  • سادگی و قابلیت انعطاف زیاد IDE
  • Syntax Highlighting بطور پیش‌فرض توسط GtkSourceView
  • تعیین خودکار تورفتگی‌ها توسط ابزار Auto-intent
  • wizard برای ایجاد یک کلاس جدید از GObject در زبان C
  • نمایش امضای تابع بصورت شناور در زمان نوشتن پارامترها
  • جستجو و جایگزینی پیشرفته در کد منبع

برای نصب آن در دبیان testing (و اوبونتو، پارسیکس، …) دستور زیر را وارد کنید:

# apt-get install anjuta

همچنین اگر بستهٔ anjuta-extra را نصب کنید، قابلیت «نمایش نمودار ارث‌بری کلاس» اضافه شده است.

[+] وب‌سایت رسمی پروژه
[+] لیست قابلیت‌ها به همراه تصویر

ترسیم نمودارهای UML با Gaphor

نرم‌افزار Gaphor ابزاری ساده و راحت برای ایجاد نمودارهای UML است که توسط زبان پایتون و به کمک PyGTK توسعه می‌یابد (قابل نصب بر روی گنو/لینوکس، FreeBSD، ویندوز و Mac OS X). از قابلیت‌های این برنامه می‌توان به موارد زیر اشاره کرد:

  • سادگی و سهولت در استفاده
  • پشتیبانی از مدل داده‌ای مطابق با UML 2.0
  • بررسی نمودارهای ترسیم شده و یافتن خطاهای موجود در نمودارها
  • پشتبانی از ترسیم نمودارهای class و component و action و interaction و use case و state و profile
  • تولید خروجی SVG و PNG و PDF و XMI از روی نمودارها
  • ایجاد نمودار class از روی کدهای سورس یک برنامهٔ پایتون
  • قابلیت تنظیم خطوط ارتباطی بین اجزای نمودارها
  • پشتیبانی گرافیکی از stereotypeها روی کلاس‌ها، رابط‌ها و بسته‌ها
  • بسط‌یافتن کارآیی برنامه به کمک افزونه‌ها

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

# apt-get install gaphor

[+] وب‌سایت رسمی پروژه
[+] چند تصویر از محیط این برنامه
[+] دانلود و راهنمای نصب (بدون استفاده از مخزن)

NetBeans IDE 6.9 منتشر شد.

امروز اوراکل از در دسترس بودن محیط توسعهٔ یکپارچهٔ NetBeans 6.9 خبر داد. NetBeans IDE در این نسخه، سازندهٔ JavaFX (یک ویرایشگر بصری و ابزار صفحه‌آرایی برای ساخت برنامه‌های کاربردی JavaFX) را معرفی می‌کند.

به کمک سازندهٔ JavaFX، تشکیلات می‌تواند به سرعت ایجاد، بطور بصری ویرایش، و RIA (مخفف Rich Internet Application) را اشکال‌زدائی و اجزاء را به منابع داده متفاوت شامل بانک‌های اطلاعاتی و سرویس‌های وب متصل کند.

همچنین NetBeans IDE 6.9 قابلیت تعمیم کار با OSGi را ارائه می‌کند، تواناساختن توسعه‌دهندگان تا به راحتی دسته‌های OSGi برای برنامه‌های کاربردی مبتنی‌بر چهارچوب NetBeans را ایجاد کنند.

توضیحات بیشتر را می‌توانید از سایت رسمی اوراکل مطالعه کنید.

پشتیبانی Glade از GtkBuilder

من مدتی درگیر نوشتن یک برنامه‌ی مبتنی‌بر GTK شده بودم و برای طراحی پنجره از برنامه‌ی Glade استفاده کردم. نکته‌ی جالب برای برنامه‌نویسان این است که برنامه‌ی Glade از نسخه‌ی 3.6.0 به بعد از قالب GtkBuilder پشتیبانی می‌کند و پیشرفت‌های قابل توجهی داشته است. بنابراین از این پس برای استفاده از پنجره‌های طراحی شده در برنامه‌ی Glade نیازی به کتابخانه‌ی Glade (بسته‌ی libglade) نیست؛ پنجره را در برنامه‌ی Glade طراحی کنید، آن را در یک فایل XML ذخیره کنید و در کتابخانه‌ی GTK توسط تابع gtk_builder_add_from_file از آن استفاده کنید. همانطور که می‌بینید نیازی به کتابخانه‌ی Glade نیست و بطور مستقیم از کتابخانه‌ی GTK استفاده می‌شود.

لازم به ذکر است که برنامه‌ی Glade هنوز هم از کتابخانه‌ی Glade پشتیبانی می‌کند، پس اگر بخواهید می‌توانید از همان سبک قدیمی استفاده کنید.

از Glade کمک بخواهید.

به محض آشنایی با Gtk تا در مورد Glade می‌شنیدم، آن را «بدرد نخور» می‌دانستم. دلیل این طرز تفکر من هم فقط به خاطر تاثیر آن در کاهش سرعت اجرا بود. زیرا Glade بصورت یک لایه بر بالای Gtk عمل می‌کند. اما طرز تفکر من اشتباه بود، مزایای Glade بیش از معایت آن است.Glade چیست؟ برنامه‌ای است برای برنامه‌نویسان Gtk که به وسیله‌ی آن بدون نیاز به کدنویسی می‌توان در کوتاه‌ترین زمان ممکن، یک پنجره را طراحی کرد. همه چیز در Glade انجام می‌شود. حتی برای اتصال توابع به سیگنال‌ها، باز هم نیازی به کدنویسی ندارید و به کمک Glade می‌توانید این کار را انجام دهید! نتایج کار در یک فایل با پسوند glade و در قالب XML ذخیره می‌شود.

چطور از Glade در برنامه‌هایمان استفاده کنیم؟ در برنامه‌ی Glade، پس از طراحی پنجره و اتصال توابع به سیگنال‌ها، و ذخیره‌سازی نتایج کار در فایلی با پسوند glade، از این به بعد ادامه‌ی کار را کتابخانه‌ی Glade بر عهده خواهد گرفت. وظیفه‌ی کتابخانه‌ی Glade، خواندن فایل‌هایی با پسوند glade است که توسط برنامه‌ی Glade ایجاد شده‌اند؛ یعنی کتابخانه‌ی Glade در زمان اجرای برنامه، از روی محتویات فایل glade شروع به ساختن پنجره می‌کند. به کدهای زیر دقت کنید:

#include <gtk/gtk.h>
#include <glade/glade.h>
int main (int argc, char* argv[])
{
    GladeXML *xml;
    gtk_init (&argc, &argv);
    xml = glade_xml_new ("interface.glade", NULL, NULL);
    glade_xml_signal_autoconnect (xml);
    gtk_main ();
    return 0;
}

.
کدهای بالا مربوط به سورس یک برنامه است که با زبان C نوشته شده است. در اصل، همه‌ی کار در خط هفتم و توسط تابع glade_xml_new صورت گرفته است، در این خط، کتابخانه‌ی Glade بر اساس محتویات فایل interface.glade شروع به ایجاد پنجره‌ی Gtk می‌کند و برای دسترسی به اجزای این پنجره، اشاره‌گری را در متغیر xml قرار می‌دهد. از این به بعد، هر کاری که با پنجره یا ویدجت‌های درون آن داشتید را از طریق متغیر xml انجام خواهید داد. در خط هشتم و توسط تابع glade_xml_signal_autoconnect همه‌ی توابعی که توسط برنامه‌ی Glade به سیگنال‌ها متصل کرده بودیم را به سیگنال‌هایشان متصل می‌کند.

بهتر است پس از خواندن مطالب قبل، یک مثال عملی را با هم انجام دهیم، در ادامه بصورت قدم به قدم با هم آن را انجام خواهیم داد:

برنامه‌ی Glade را اجرا کنید. از پنل سمت چپ و در قسمت Toplevels بر روی آیکن Window کلیک کنید تا یک پنجره‌ی خالی برای ظاهر برنامه، در نظر گفته شود. از پنل سمت راست و در قسمت Properties، زبانه‌ی Common را انتخاب کنید، در این قسمت در جلوی گزینه Visible مقدار No نوشته شده است، بر روی دکمه‌ی No کلیک کنید تا مقدار Yes برای گزینه‌ی Visible در نظر گرفته شود. با انجام این کار، پنجره بطور پیش‌فرض نمایش داده خواهد شد. از پنل سمت راست و در قسمت Properties، زبانه‌ی General را انتخاب کنید، در این قسمت می‌توانید خاصیت‌های مختلف را مقداردهی کنید. توجه کنید مقداری که برای گزینه‌ی Name در نظر می‌گیرید، نامی است که توسط آن می‌توانید از طریق کد، به شیئ پنجره دسترسی داشته باشید. در اینجا همان نام window1 را بدون تغییر بگذارید. از پنل سمت راست و در قسمت Properties، زبانه‌ی Signals را انتخاب کنید، در این قسمت گزینه‌ی GtkWidget را باز کرده و سپس در جلوی گزینه‌ی delete_event، مقدار on_window1_delete_event را از لیست انتخاب کنید. با انجام این کار، پس از بستن پنجره، تابع on_window1_delete_event اجرا خواهد شد و به عبارتی، تابع on_window1_delete_event به سیگنال delete_event (بستن پنجره) متصل می‌شود.از پنل سمت چپ و در قسمت Containers بر روی آیکن Horizontal Box کلیک کنید و سپس بر روی پنجره‌ی خالی کلیک کنید تا یک جعبه‌ی بسته‌بندی افقی در پنجره اضافه شود. مقدار ۲ را انتخاب کنید تا تنها ۲ سلول (یا خانه) وجود داشته باشد. از پنل سمت چپ و در قسمت Control and Display بر روی آیکن Label کلیک کنید و سپس بر روی خانه‌ی سمت چپ بر روی پنجره کلیک کنید تا یک برچسب در سمت چپ پنجره قرار گیرد. از پنل سمت چپ و در قسمت Control and Display بر روی آیکن Text Entry کلیک کنید و سپس بر روی خانه‌ی سمت راست بر روی پنجره کلیک کنید تا یک ورودی متن در سمت راست پنجره و در کنار برچسب قرار گیرد. در انتها، از منوی File گزینه Save را انتخاب کرده و نتایج کار را در فایلی به نام interface.glade در دایرکتوری خانگی ذخیره کنید. برنامه‌ی Glade را ببندید.

یک فایل به نام main.c را در دایرکتوری خانگی و در کنار فایل interface.glade ایجاد کنید و آن را برای ویرایش باز کنید. کدهای زیر را در آن بنویسید:

#include <gtk/gtk.h>
#include <glade/glade.h>
gboolean on_window1_delete_event (GtkWidget* widget, GdkEvent* event, gpointer user_data)
{
    gtk_main_quit ();
}
int main (int argc, char* argv[])
{
    GladeXML *xml;
    gtk_init (&argc, &argv);
    xml = glade_xml_new ("interface.glade", NULL, NULL);
    glade_xml_signal_autoconnect (xml);
    gtk_main ();
    return 0;
}

.
ترمینال را باز کرده و به دایرکتوری خانگی بروید، دستور زیر را وارد کنید:

$ gcc -export-dynamic -o main main.c $(pkg-config --cflags --libs libglade-2.0) && ./main

.
با اجرای این دستور، کدهای فایل main.c کامپایل شده و برنامه‌ای به نام main تولید می‌شود، سپس این برنامه اجرا خواهد شد.

در صورتی که می‌خواهید به شیئ از پنجره دسترسی داشته باشید، از تابع glade_xml_get_widget استفاده کنید، بطور مثال در کدهای فایل main.c که در بالا نوشته شده، می‌توانید بعد از صدا زدن تابع glade_xml_new خط زیر رابرای دسترسی به شیئ پنجره اضافه کنید:

GtkWidget* window1 = glade_xml_get_widget (xml, "window1");

در این صورت هر جا که خواستید به پنجره دسترسی داشته باشید، می‌توانید از متغیر window1 استفاده کنید، به طور مثال می‌توانید عنوان پنجره را تغییر دهید:

gtk_window_set_title (GTK_WINDOW (window1), "Window title is changed.");

همانطور که می‌بینید، استفاده از Glade دارای مزایایی است، از جمله؛ جداسازی رابط کاربری از کدهای محاسباتی برنامه، طراحی سریع و آسان ظاهر برنامه، ایجاد تغییر در رابط کاربری بدون نیاز به تغییر در کدها و استفاده از ظاهر برنامه در زبان‌های مختلف برنامه‌نویسی بدون نیاز به تغییر در فایل glade. اما در مقابل یک ایراد بسیار کوچک نیز دارد که قابل صرف نظر است و آن این است که فقط در حین ایجاد پنجره در زمان اجرا، کمی کاهش سرعت (نامحسوس) را در پی خواهد داشت ولی پس از ایجادشدن پنجره، کاهش سرعتی وجود نخواهد داشت.

دنبال‌کردن

هر نوشتهٔ تازه‌ای را در نامه‌دان خود دریافت نمایید.