Senin, 23 Februari 2015

Mengatasi Problem with MergeList di Ubuntu


Barusan saya mendapat pesan error seperti pada screenshot di atas. Tidak tahu awal mulanya bagaimana. Saat pertama menghidupkan laptop dan mencoba menginstall program dengan apt-get, tak seperti biasanya. Yup.., muncul pesan error. Tepat setelah itu saya mendapati sebuah icon error di system tray. Pikir saya, ada opsi yang salah di Ubuntu software center. Saat saya buka, ummm, not responding, lalu beberapa waktu kemudian tertutup diikuti pesan message box error seperti biasa :p

Kira-kira seperti inilah error yang terjadi saat saya mencoba menginstall program

Saya coba buka file tersebut dengan gedit, rupanya memang isinya agak berbeda seperti biasa. Di antara teksnya ada yang tidak asing bagi saya, "IWIS hotspot login". :D
Kemungkinan besar ini terjadi karena saya mengeksekusi "apt-get update" saat terhubung wifi. Beberapa layanan wifi berbayar akan mengarahkan link apapun ke login page saat kita belum login. Saya yakin itu penyebabnya. Tapi kapan? Hmm, o iya semalam saya ketiduran dan lupa matiin laptop.... :v
Mungkin secara tak sadar saya membuka terminal :v bisa jadi... :v

So, bagaimana cara mengatasi masalah tersebut.
Awalnya saya coba hapus file yang dianggap error tadi, lalu saya ketik "apt-get update" di terminal, ternyata tak ada efeknya.
Saya langsung menyerah, langsung search di google :v
Dan inilah solusinya:

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update

Cara ini saya temukan di urutan paling atas, setelah saya coba langsung berhasil. Wow, saya beruntung sekali...
Sebagai rasa syukur saya, saya memutuskan untuk post masalah ini di blog agar bisa membantu orang lain yang mengalami masalah serupa. Hehehehe :D
Read more

Minggu, 22 Februari 2015

Macam - Macam Widget Toolkit


Widget toolkit, atau widget library merupakan software library yang bertugas membangun graphical user interface pada desktop. Contoh umum hasil kerja widget library yang sering kita lihat adalah adanya button, textbox atau komponen lain dalam sebuah window. Pada beberapa sistem operasi library ini dikembangkan sendiri untuk disertakan pada sistem. Namun, banyak pula library yang dikembangkan oleh pihak eksternal. Library eksternal lebih banyak digunakan paa sistem operasi open source dan sebaliknya pada library internal.

Widget toolkit umumnya bekerja secara event-driven. Saat sebuah widget menerima event(misalnya klik atau keypress), sebuah fungsi akan dipanggil untuk menangani event tersebut. Agar dapat bekerja dengan baik, widget toolkit harus menyediakan fungsi untuk mengasosiasikan fungsi dengan event. Saat ini widget toolkit juga dikembangkan agar dapat mendukung look and feel pengguna, sehingga banyak widget toolkit yang menyediakan theming engine. Dengan adanya komponen ini, tampilan widget dapat dikonfigurasi sesuai dengan keinginan.

Sistem operasi Windows menyediakan akses pembuatan widget dengan berbagai fungsi API yang disediakan secara defaut. Seiring dengan waktu, Windows juga mengembangkan library lain untuk menyempurnakan library yang sebelumnya. Library tersebut telah familiar dengan sebutan MFC(Microsoft Foundation Class) dan WPF(Windows Presentation Foundation).

Mac OS mengembangkan sendiri widget toolkit, sama halnya dengan Windows. Library ini dikenal sebagai Cocoa dan Carbon.

Sementara itu, pada sistem operasi Unix dan Unix-like(contohnya Linux) umumnya menggunakan widget library dari luar. Library yang paling umum digunakan adalah GTK. Ada pula beberapa sistem yang memadukannnya dengan library lain, misalnya FLTK, Qt dan WxWidgets.

Beberapa widget toolkit dapat digunakan di beberapa sistem operasi(cross-platform). Contohnya GTK. Walaupun awalnya diciptakan untuk Linux, Sekarang ini GTK dapat digunakan di Windows dan Mac OS juga. Dengan menggunakan widget cross-platform, kita dapat dengan mudah menciptakan aplikasi GUI yang multi-platform.

Berikut ini daftar lengkap Widget toolkit yang dikutip dari Wikipedia:

Amiga:
  • BOOPSI (Basic Object Oriented Programming System for Intuition) 
  • MUI 
  • Zune

Macintosh:
  • Cocoa 
  • MacApp 
  • Macintosh framework 
  • MacZoop Macintosh C++ framework 
  • PowerPlant Macintosh framework

Microsoft Windows:
  • Microsoft Foundation Classes (MFC) 
  • Windows Template Library (WTL) 
  • SmartWin++ 
  • Visual Component Library (VCL) 
  • Windows Forms 
  • Windows Presentation Foundation

Unix dan Unix-like:
  • InterViews
  • Lesstif
  • Motif
  • Xaw

Cross-platform:
Elementary, GTK+, IUP, Tk, XForms, XVT, CEGUI, FLTK, FOX toolkit, GLUI, Juce, Qt, Ultimate++, wxWidgets, dll
Read more

Jumat, 20 Februari 2015

GTK Programming : GtkLinkButton


GtkLinkButton adalah widget turunan GtkButton dengan tambahan hyperlink. Widget ini sesuai untuk menaruh link website pada aplikasi. Saat pengguna mengeklik widget ini, browser default akan terbuka untuk membuka link yang  telah ditentukan. Sebenarnya bukan hanya untuk link ke website, bisa juga link ke folder, file, printer, dll. Semuanya tergantung parameter URI. Misalnya, “http://www.komputoo.com”, maka sistem akan membuka browser dan membuka link, atau “file:///home/irvan/”, maka sistem akan membuka file manager pada lokasi folder tersebut dan satu lagi contoh URI yang sering digunakan, “mailto:cinta@kamu.com”, URI ini akan membuka software pengelola email.

Let's Start
Ada 2 fungsi yang disediakan GTK untuk membuat GtkLinkButton, yaitu, gtk_link_button_new() dan gtk_link_button_new_with_label(). Fungsi pertama hanya memiliki 1 buah parameter string, berupa alamat URI. Label yang akan ditampilkan widget adalah string URI itu sendiri. Funsi yang kedua bentuknya hampir sama, hanya saja ada 1 parameter lagi, berupa sting yang menentukan label link button. Fungsi kedua ini kita pilih jika kita ingin menampilkan label sesuai keinginan.
GtkWidget *gtk_link_button_new (const gchar *uri);

GtkWidget *gtk_link_button_new_with_label (const gchar *uri, const gchar *label);


Source Code
#include<gtk/gtk.h>

int main(int argc, char *argv[])
{
    GtkWidget *window, *box, *link1, *link2, *link3;
    gtk_init(&argc, &argv);
    //window baru
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"GtkLinkButton");
    //buat gtkbox horisontal lalu pasang ke window
    box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
    gtk_container_add(GTK_CONTAINER(window), box);
    //buat linkbutton
    link1 = gtk_link_button_new("http://www.komputoo.com");
    link2 = gtk_link_button_new_with_label("http://www.facebook.com/komputoo", "Komputoo's Facebook");
    link3 = gtk_link_button_new_with_label("file:///home/", "Buka folder /home");
    //pasang widget ke box
    gtk_box_pack_start(GTK_BOX(box),link1,TRUE,TRUE,10);
    gtk_box_pack_start(GTK_BOX(box),link2,TRUE,TRUE,10);
    gtk_box_pack_start(GTK_BOX(box),link3,TRUE,TRUE,10);
    //tampilkan widget
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}


Lebih Jauh dengan GtkLinkButton

Ada beberapa fungsi lagi yang dapat Anda pelajari sendiri. Seperti biasa, tentu saja penerapan fungsi tambahan ini sengaja tidak saya sertakan dalam source code.

gtk_link_button_get_uri()

Fungsi ini digunakan untuk mendapatkan URI dari GtkLinkButton. Parameter link_button adalah widget yang diinginkan, lalu return value berupa pointer ke string URI.
const gchar *gtk_link_button_get_uri (GtkLinkButton *link_button);

gtk_link_button_set_uri()
Fungsi ini digunakan untuk mengupdate/mengubah URI widget GtkLinkButton. Paramater pertama adalah widget yang ingin diubah dan parameter kedua adalah string URI yang baru.
void gtk_link_button_set_uri (GtkLinkButton *link_button, const gchar *uri);

gtk_link_button_get_visited()
Fungsi ini digunakan untuk mengetahui apakah link sudah pernah dikunjungi sebelumnya. Parameternya adalah widget GtkLinkButton yang diinginkan. Jika sudah pernah return value bernilai 1 atau sama dengan GTK_TRUE.
gboolean gtk_link_button_get_visited (GtkLinkButton *link_button);


gtk_link_button_set_visited()
Sebuah link dinyatakan visited (sudah pernah dikunjungi) tepat setelah user mengeklik link button pertama kali. Jika Anda ingin mengubah status menjadi visited ataupun sebaliknya, gunakan fungsi ini. Seperti biasa, parameter pertama adalah widget GtkLinkButton yang dinginkan dan parameter kedua adalah status yang diinginkan. Nilai 0 atau GTK_FALSE artinya link belum pernah dikunjungi, sementara nilai 1 atau GTK_TRUE bermaksud sebaliknya.
void gtk_link_button_set_visited (GtkLinkButton *link_button, gboolean visited);


Hasil

Read more

GTK Programming : Input Text dengan GtkEntry


GtkEntry juga merupakan jenis widget esensial alam pembuatan software. Widget ini sangat erat kaitannya dengan keyboard. Fungsi widget ini yaitu untuk menerima karakter yang telah diketik oleh user. GtkEntry hanya untuk menerima input dalam satu baris teks saja. Teks yang ditampilkan secara multiline harus dibuat dengan widget GtkTextView.

Banyak sekali fungsi API yang dapat kita gunakan untuk memanipulasi GtkEntry. Namun, karena masih dalam tahap awal, tutorial ini hanya menjelaskan fungsi dasarnya saja.

Let's Start
Pertama-tama, kita akan mengetahui bagaimana membuat widget GtkEntry. Setelah itu, beberapa API juga akan kita gunakan untuk mengolah teks dari dalam GtkEntry.

Sebelum membuat widget, perlu Anda ketahui bahwa GtkEntry sangat erat kaitannya dengan GtkEntryBuffer. Widget ini bersifat invisible, tidak untuk ditampilkan dan hanya berperan sebagai pelengkap. GtkEntryBuffer merupakan widget tersembunyi yang membantu GtkEntry menyimpan teks di dalamnya.

Fungsi gtk_entry_new() akan membuat GtkEntry sekaligus membuat serta menghubungkannya dengan GtkEntryBuffer. Jika mau, kita juga bisa membuat objek GtkEntryBuffer sendiri dengan gtk_entry_buffer_new(), lalu membuat GtkEntry dan menghubungkan GtkEntryBuffer dengan fungsi gtk_entry_new_with_buffer(). Untuk membantu Anda lebih mudah memahaminya, tutorial ini hanya mencangkup fungsi gtk_entry_new()  saja.

Berikut prototype fungsinya:
GtkWidget *gtk_entry_new (void);

Setelah dibuat dan ditampilkan, sekarang widget dapat menerima input teks dari keyboard. Jika diperlukan, Teksdalam widget dapat diubah dengan fungsi gtk_entry_set_text(). Kemudian Anda juga bisa mengekstrak teks dari widget tersebut dengan memanggil fungsi gtk_entry_get_text(),
void gtk_entry_set_text (GtkEntry *entry, const gchar *text);

Fungsi di atas membutuhkan 2 argumen untuk bekerja. Dai parameterpertama, yaitu entry, adalah widget GtkEntry yang akan diubah teksnya. Lalu yang kedua, text, adalah text yang ingin ditampilkan pada widget.
const gchar *gtk_entry_get_text (GtkEntry *entry);

Fungsi untuk mengekstrak teks berbentuk seperti di atas. Satu buah parameter merupakan GtkEntry yang ingin diketahui teksnya. Dari hasil pemanggilan fungsi, kita akan memperoleh sebuah pointer ke teks yang ditampilkan oleh widget.

Fungsi lain yang mungkin harus kita ketahui adalah gtk_entry_get_text_length(), untuk mengetahui jumlah huruf dalam teks dan gtk_entry_set_max_length(), untuk membatasi jumlah huruf dalam GtkEntry.
guint16 gtk_entry_get_text_length (GtkEntry *entry);

Parameter entry adalah GtkEntry yang ingin diketahui panjang hurufnya. Setelah memanggil fungsi, kita mendapatkan return berupa panjang huruf.
void gtk_entry_set_max_length (GtkEntry *entry, gint max);

Parameter pertama, yaitu entry adalah GtkEntry yang ingin diatur, lalu parameter max berupa panjang huruf maksimum.

Source Code
Kode berikut akan menampilkan window berisi sebuah GtkEntry dan GtkButton. Button ini untuk membuktikan cara kerja fungsi-fungsi yang dijelaskan di atas.


#include<gtk/gtk.h>

GtkWidget *window, *box, *entry, *button;

void button_clicked(GtkButton *button, gpointer user_data)
{
    const gchar *teks = gtk_entry_get_text(GTK_ENTRY(entry));
    guint16 panjang = gtk_entry_get_text_length(GTK_ENTRY(entry));
    g_print("Teks: %s\nPanjang: %d\n",teks, panjang);
    return;
}

int main(int argc, char *argv[])
{
    gtk_init(&argc, &argv);
    //window baru
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"Hello world");
    //buat gtkbox horisontal lalu pasang ke window
    box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
    gtk_container_add(GTK_CONTAINER(window), box);
    //buat GtkEntry, set text, set max length
    entry = gtk_entry_new();
    gtk_entry_set_text(GTK_ENTRY(entry),"Hello");
    gtk_entry_set_max_length(GTK_ENTRY(entry),10);
    //buat button, connect signal
    button = gtk_button_new_with_label("Tampil");
    g_signal_connect(button, "clicked", G_CALLBACK(button_clicked), 0);
    //pasang entry dan button ke box
    gtk_box_pack_start(GTK_BOX(box),entry,TRUE,TRUE,10);
    gtk_box_pack_start(GTK_BOX(box),button,TRUE,TRUE,10);
    //tampilkan widget
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}


Hasil

Read more

Kamis, 19 Februari 2015

GTK Programming : GtkSeparator



Separator bisa jadi merupakan widget paling sederhana diantara widget lainnya, karena untuk membuat widget ini, kita cukup tahu satu fungsi API saja. Separator merupakan widget yang berperan sebagai garis pembatas antara dua widget atau lebih. Umumnya widget ini banyak dipasang dibagian toolbar atau bagian lain yang memiliki banyak icon. Tapi sebenarnya penggunaannya bebas di tangan programmer.
 
Let’s Start

Pembuatan GtkSeparator dilakukan dengan fungsi gtk_separator_new(), berikut ini adalah bentuk lengkap fungsinya.


GtkWidget *gtk_separator_new (GtkOrientation orientation);

Satu buah parameter tipe GtkOrientation diperlukan untuk menentukan orientasi separator, dapat berupa vertikal(GTK_ORIENTATION_VERTICAL) atau horisontal(GTK_ORIENTATION_HORIZONTAL).

Source Code
#include<gtk/gtk.h>

int main(int argc, char *argv[])
{
    GtkWidget *window, *box, *button1, *separator, *button2;
    gtk_init(&argc, &argv);
    //window baru
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"GtkSeparator");
    //buat gtkbox horisontal lalu pasang ke window 
    box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); 
    gtk_container_add(GTK_CONTAINER(window), box);
    //buat gambar dari file dan icon theme
    button1 = gtk_button_new_with_label("button1");
    separator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
    button2 = gtk_button_new_with_label("button2");
    //pasang image1 dan image2 ke box
    gtk_box_pack_start(GTK_BOX(box),button1,TRUE,TRUE,10); 
    gtk_box_pack_start(GTK_BOX(box),separator,TRUE,TRUE,10); 
    gtk_box_pack_start(GTK_BOX(box),button2,TRUE,TRUE,10);
    //tampilkan widget
    gtk_widget_show_all(window);
    gtk_main();
    return 0;

Sangat sederhana bukan? :)
Let's see it!

Hasil

Selamat mencoba... :)
Read more

GTK Programming : GtkImage untuk Penayangan Gambar


Gambar merupakan komponen esensial untuk sebuah program. Tanpa gambar program yang kita buat terasa kurang menarik dan kurang interaktif. Dalam GTK, widget GtkImage adalah widget yang dibuat khusus untuk menampilkan gambar. Beruntung sekali, widget ini mendukung banyak format gambar, jadi kita tidak perlu repot-repot memikirkan lagi untuk membuat gambar yang formatnya sesuai. Karena GTK sudah mendukung hampir semua jenis format gambar bitmap.

Gambar yang bisa diload oleh GTK bisa berasal dari beberapa macam sumber, bisa dari file, icon theme, stock, resource, dll. Dalam tutorial ini hanya akan dibahas cara penampilan icon dari file dan icon theme, karena kedua sumber gambar tersebut mungkin akan lebih sering digunakan.

Gambar dari file tidak perlu saya jelaskan, yang jelas untuk menampilkannya kita harus tahu path file gambar yang akan ditampilkan. Misalnya, “/home/irvan/jannina.png”.
Sementara itu, berbagai jenis icon theme yang dapat kita temukan pada folder /usr/share/icons/. Icon yang digunakan dipilih berdasarkan tema icon saat ini. Untuk memilih jenis icon dari theme yang akan ditampilkan, kita cukup mengetahui nama file icon tanpa harus mengetahui path nya.

Let’s Start
Membuat widget GtkImage dapat dilakukan dengan fungsi gtk_image_new(). Fungsi ini hanya membuat sebuah widget tanpa menyertakan gambar. Untuk menempatkan gambar pada widget, selanjutnya kita harus menggunakan fungsi  gtk_image_set_from_file() atau  gtk_image_set_from_icon_name(). Baca sampai akhir untuk mengetahui penjelasan kedua fungsi ini.

Kita juga bisa meload gambar bersamaan dengan pembuatan widget. Membuat GtkImage dengan gambar dari file sangat mudah. Fungsi yang kita gunakan hanya memerlukan sebuah parameter berupa path file gambar yang akan ditampilkan.


GtkWidget *gtk_image_new_from_file(const gchar *filename);

Sementara itu, membuat gambar dari icon theme tidak jauh berbeda. Untuk meload gambar dari icon theme, selain menyertakan parameter nama icon, kita juga menyertakan ukuran icon pada parameter kedua.


GtkWidget *gtk_image_new_from_icon_name(const gchar *icon_name, GtkIconSize size);

Berikut ini adalah macam-macam ukuran icon yang merupakan kelompok enumerasi dari GtkIconSize:
  • GTK_ICON_SIZE_INVALID
  • GTK_ICON_SIZE_MENU
  • GTK_ICON_SIZE_SMALL_TOOLBAR
  • GTK_ICON_SIZE_LARGE_TOOLBAR
  • GTK_ICON_SIZE_BUTTON
  • GTK_ICON_SIZE_DND
  • GTK_ICON_SIZE_DIALOG

Source Code
#include<gtk/gtk.h>
int main(int argc, char *argv[])
{
    GtkWidget *window, *box, *image1, *image2;
    gtk_init(&argc, &argv);
    //window baru
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"Hello world");
    //buat gtkbox horisontal lalu pasang ke window 
    box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); 
    gtk_container_add(GTK_CONTAINER(window), box);
    //buat gambar dari file dan icon theme
    image1 = gtk_image_new_from_file("/home/irvan/jannina.png");
    image2 = gtk_image_new_from_icon_name("gtk-open", GTK_ICON_SIZE_DIALOG);
    //pasang image1 dan image2 ke box
    gtk_box_pack_start(GTK_BOX(box),image1,TRUE,TRUE,10); 
    gtk_box_pack_start(GTK_BOX(box),image2,TRUE,TRUE,10);
    //tampilkan widget
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}


Mengatur Gambar
Sebelumnya telah disinggung tentang fungsi gtk_image_set_from_file() dan gtk_image_set_from_icon_name(). Kedua fungsi ini dapat kita gunakan untuk meload gambar pada GtkImage yang belum berisi gambar, atau juga bisa untuk mengubah gambar yang sudah ada sebelumnya.


void gtk_image_set_from_file (GtkImage *image, const gchar *filename);


void gtk_image_set_from_icon_name (GtkImage *image, const gchar *icon_name, GtkIconSize size);

Parameter image adalah widget yang ingin di atur. Penjelasan parameter lainnya sama seperti fungsi sebelumnya.
Kedua fungsi ini tidak disertakan dalam source code, silahkan mencobanya sendiri yaa. :D


Hasil


Read more

Rabu, 18 Februari 2015

Install Cinnamon di Ubuntu


Pengguna Linux Mint yang mencoba sensasi Ubuntu mungkin akan rindu dengan Cinnamon. Saya adalah salah satunya. Meskipun Linux Mint bukan distro kesukaan saya, namun sensasi desktop Cinnamon selalu membuat saya teringat :v
Saya berpikir, daripada berpindah lagi ke Linux Mint, kenapa saya tidak install Cinnamon saja? Segera saja saya membuka Terminal dan saya ketikkan "sudo apt-get install cinnamon". Jangan tanya apa yang terjadi... :3

Yup, ternyata tidak bisa...

Sebelumnya saya mencoba GNOME, XFCE, MATE dan LXDE. Namun tidak ada yang greget bagi saya :v

Akhirnya saya coba browsing, dan inilah cara yang harus saya lakukan untuk menginstall Cinnamon di Ubuntu:

sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-stable
sudo apt-get update
sudo apt-get install cinnamon

Dan, ini dia desktop saya... Keren kan? keren kan? :v



Yang membut saya suka Cinnamon adalah tampilan Start Menu nya yang elegan. Meskipun unity lebih keren, Cinnamon memiliki taskbar yang memudahkan saya melakukan navigasi program dengan mudah. Selain itu konfigurasi desktop Cinnamon juga mudah, kalau menrut saya. Sampai saat ini, ada satu hal yang saya kurang suka dari Cinnamon. Setelah login, butuh waktu sekitar 30-50 detik untuk memulai Cinnamon. Walaupun begitu saya tetap pasang Cinnamon selama lebih dari 1 bulan ini :D
Bagaimana dengan Anda?
Read more