Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

Virtual Box

Oom Sindu beberapa hari ini berisik sekali membahas Virtual Box. Sudah beberapa artikel dia tulis, sehingga akhirnya saya tertarik untuk mencoba.

Virtual Box adalah aplikasi virtualization. Gunanya untuk menjalankan OS (Operating System) di dalam OS. Misalnya komputer kita berisi Linux, kemudian kita ingin mencoba berbagai ‘distro’ Windows seperti Vista atau 2003 server. Agar kita tidak repot, gunakan aplikasi virtualization sehingga kita bisa menjalankan OS lain seperti layaknya menjalankan aplikasi biasa. Dalam satu virtual machine, kita bisa menjalankan banyak OS lain.

Saya adalah penggemar berat aplikasi virtualization. Alasannya, saya menggunakan Linux sebagai OS utama, tapi masih harus menggunakan Windows untuk membuat dokumen untuk orang lain. Selain itu, saya juga butuh beberapa versi browser untuk mengetes aplikasi web yang saya buat.

Aplikasi virtualization juga sangat bermanfaat untuk project software development. Kita bisa buat satu virtual machine untuk menghosting Subversion repository server, bugtracker, aplikasi project management, dan build server. Backupnya juga mudah. Cukup copy file virtual machine tersebut ke DVD. Biasanya saya gunakan VM berukuran 8 GB, sehingga butuh 2 DVD sekali backup. When disaster strike, cukup copy file backup, server langsung up kembali tanpa butuh waktu lama untuk instal dan konfigurasi.

Dalam dunia virtualization, dikenal istilah host OS (OS tuan rumah) dan guest OS (OS tamu). Host OS adalah sistem operasi utama kita, sedangkan guest OS adalah OS yang berjalan di atas virtual machine.

Sebelum ini, saya sudah mencoba beberapa aplikasi lain, seperti VMWare, Qemu, dan Xen. Notebook saya memiliki spesifikasi Centrino 1.8GHz dan 512 (shared) RAM. Hasilnya, Xen tidak berhasil diinstal dengan pesan error ‘something about unsupported kernel and processor’. VMWare Server (gratis) dan Qemu (open source) berhasil diinstal dengan mulus. Pada waktu dijalankan, Qemu sedikit lebih ringan daripada VMWare. Dengan VMWare, pada saat guest OS Windows 2000 saya nyalakan, guest OS berjalan seperti keong racun abis kena garam. Sangat pelan. Padahal belum ada aplikasi yang dijalankan di guest OS. Praktis guest OS berikut host OS (Ubuntu Dapper) tidak dapat digunakan, karena ke-lemot-annya sudah mencapai taraf unusable.

Dengan Qemu, guest OS berjalan lambat, tapi host OS masih bisa digunakan dengan nyaman.

Ok, sekarang kita bahas virtualbox. Dari sisi instalasi, tidak ada masalah berarti. Ada beberapa petunjuk instalasi di blog Ubuntu Indonesia dan blog Oom Sindu yang bisa diikuti.

Khusus untuk saya, setelah langkah-langkah pada tutorial di atas dilakukan, virtualbox masih belum jalan. Saya harus menjalankan perintah berikut

$ sudo make -C /opt/VirtualBox-1.3.6/src install

karena ada sedikit masalah dengan kernel module.

Setelah itu, Virtual Box dapat dijalankan dengan sempurna.

Setelah saya instal Windows 2000 Professional (tahu diri gak berani install Vista dengan spec pas-pasan ;p), saya sangat terkesan. Guest OS berjalan dengan mulus dan cukup responsif tanpa mengganggu Host OS. Saat mengetik artikel ini, saya sedang menginstal Service Pack 4 di Guest OS. Di Host OS, saya sedang mendengarkan podcast David Maister, browsing Firefox dengan 6 tab terbuka, 2 diantaranya GMail dan Google Calendar -dua aplikasi web yang terkenal rakus memori karena terlalu ‘ajax’.

Hebatnya, tidak patah sedikitpun. Baik guest OS dan host OS dapat dijalankan dengan nyaman. Good luck trying the same using VMWare. Hmm .. saya jadi teringat iklan DVD player di TV yang diperankan Basuki.

Bravo Virtual Box. Best things in the world available for free. :D


Membuat aggregator dengan MagpieRSS

Pada artikel ini, kita akan belajar cara menambahkan feed aggregator di website kita. Untuk mudahnya, kita gunakan pustaka Magpie RSS. Dengan library ini, kita bisa membuat website yang berisi rangkuman dari website-website lain (web-based aggregator).

Penjelasan tentang apa itu RSS dapat dilihat di artikel ini.

Cara penggunaan Magpie RSS

Setelah donlod dan extract, copy empat file magpie:

  • rss_cache.inc

  • rss_fetch.inc

  • rss_parse.inc

  • rss_utils.inc

Berikut file dependensinya yang ada di folder extlib.

Selanjutnya, untuk mengolah RSS feed, hanya dibutuhkan tiga baris kode:

require_once('inc/rss_fetch.inc');
$url = "http://www.php.net/news.rss";
$rss = fetch_rss($url);

Variabel $rss tinggal dilooping dan ditampilkan sesuai keinginan. Sebagai contoh, saya tampilkan isi feed dalam tabel.

<table border="1">
    <tr><th>No</th><th>Judul</th><th>Ringkasan</th></tr>
    <? $i=0; foreach ($rss->items as $item) { $i++; ?>
    <tr>
        <td><?=$i ?></td>
        <td><a href="<? echo($item[link]); ?>"><? echo($item[title]); ?></a></td>
        <td><? echo($item[description]); ?></td>
    </tr>
    <? } ?>
</table>

Hasilnya dapat dilihat di sini. Sedangkan source codenya dapat didownload di sini.

Demikian … cukup mudah bukan? Selamat menampilkan rangkuman website orang di website anda sendiri. Jangan lupa memperhatikan etika dan hak cipta.


Apa itu RSS ?

Sudah tau RSS?

Jika Anda bukan programmer, wajar jika tidak tahu. Tapi jika Anda programmer … jangan sampai tidak tahu. Apalagi bilang,

RSS itu kan sama dengan CSS …

RSS itu banyak kepanjangannya, beberapa diantaranya antara lain:

  • Really Simple Syndication

  • Rich Site Summary

  • RDF Site Summary

RSS berisi rangkuman dari isi suatu website. Misalnya kita mengunjungi website yang berisi banyak artikel. Kita bisa mengambil data RSSnya, yang berisi :

  • Judul Artikel

  • Tanggal Publish

  • Pengarang

  • Potongan isinya

Sebagai contoh, misalnya kita ingin selalu mengikuti perkembangan terbaru di dunia PHP. Cukup masukkan URL http://www.php.net/news.rss di aplikasi aggregator. Nanti aplikasi aggregator akan menampilkan RSS feed tersebut dengan antarmuka yang mudah dibaca.

Ada beberapa versi format data RSS, yaitu versi 0.9, 0.91, 1.0, dan 2.0. Selain itu, juga ada format lain yang namanya Atom. Data ini (baik RSS maupun Atom) tersebut dikemas dalam format XML, yang nantinya dapat dibaca oleh aplikasi yang namanya aggregator. Ulasan tentang berbagai jenis aplikasi aggregator berbasis desktop dapat dilihat di sini.

Aplikasi aggregator juga ada yang berbasis web. Misalnya Google Reader dan Bloglines. Kita juga bisa membuat sendiri dengan menggunakan library Magpie RSS atau menggunakan plugin di berbagai aplikasi Content Management System populer. Biasanya aplikasi populer seperti Wordpress, Drupal, atau Joomla sudah memiliki plugin untuk itu. Contoh nyatanya bisa dilihat di website Pak Cipi. Website ini dibuat dengan Drupal.

Cara kerja aplikasi aggregator sama dengan aplikasi mail client (Outlook Express, Evolution, atau Thunderbird). Bedanya, kalau aplikasi mail client mengambil data email dari mail server, aplikasi aggregator mengambil data RSS dari website yang menyediakan. Kita bisa memasukkan website sebanyak-banyaknya sesuai keinginan kita. Nantinya, kalau website yang kita daftarkan merilis artikel/berita baru, rangkumannya akan muncul di aggregator kita. Di aplikasi aggregator akan muncul entri Unread Items seperti halnya Unread Mails. Aplikasi aggregator ini berguna agar kita tidak perlu mengunjungi setiap website satu persatu. Cukup lihat judul dan ringkasan artikel baru. Jika menarik, kita kunjungi websitenya. Jika tidak menarik, diabaikan saja.

Demikianlah penjelasan singkat tentang RSS. Jangan salah lagi membedakan antara RSS dan CSS.

They are different !!


Pesan Buku Subversion

Berkat posting Ifnu yang berapi-api, buku Subversion saya sudah banyak yang pesan. Ini kenyataan yang menggembirakan, mengingat saya belum banyak berpromosi.

Ini dia gambar sampul depannya.

Sampul Depan Buku Subversion

Sedangkan ini sampul belakangnya.

Sampul Belakang Buku Subversion

Silahkan lihat dulu daftar isinya untuk mengetahui apa saja yang dibahas dalam buku ini.

Bab 1 dan Bab 2 boleh didownload secara cuma-cuma.

Tebal buku 160 halaman.

Pertanyaan yang sering ditanyakan adalah,

Saya sudah cari di toko buku, tapi tidak ada. Bagaimana cara mendapatkannya?

Jawabannya, tentu saja tidak ada. Soalnya buku ini saya terbitkan sendiri tanpa melalui penerbit. Jadi, distribusinya juga mandiri alias melalui kantor pos terdekat.

Sementara ini, website untuk pemesanan masih sedang dibuat. Walaupun demikian, buku Subversion dapat dipesan dengan empat langkah mudah:

  1. Kirim email pemesanan ke endy [at] artivisi [dot] com. Sebutkan nama dan alamat Anda. Pastikan alamatnya benar, supaya tukang pos tidak tersesat.

  2. Transfer pembayaran ke

* BCA KCP Dewi Sartika Jakarta, rekening 273 124 336 2 atas nama Endy Muhardin. 


* Mandiri KCP Dewi Sartika Jakarta, rekening 0 7 0000 4860 255 atas nama Endy Muhardin. 
  1. Harga buku Rp. 50.000. Ongkos kirim Jabodetabek Rp. 6.000, di luar Jabodetabek Rp. 10.000. Setelah transfer dilakukan, beri tahu saya tentang pembayaran ini melalui email. Cantumkan nominal transfer, rekening asal, dan waktu transaksi untuk memudahkan verifikasi.

  2. Segera setelah pembayaran saya terima, buku akan segera dikirim. Dalam beberapa hari, tergantung jauh dekatnya, buku akan sampai di tangan Anda.

Ongkos kirim yang dijadikan patokan adalah Jakarta - Bogor dengan menggunakan Kilat Tercatat Kantor Pos. Saya masih mencari alternatif pengiriman yang lebih murah. Bila ada yang punya saran agar ongkos kirim lebih murah, jangan ragu untuk memberi tahu saya.

Terima kasih atas pesanan Anda. Kalau ada keluhan, silahkan kirim email ke saya supaya diperbaiki.


Interface vs Abstract class

Kapan pakai interface, dan kapan pakai abstract class?

Pertanyaan menarik ini muncul di milis jug-indonesia. Karena jawabannya cukup panjang, jadi saya copy-paste, sesuaikan sedikit, dan posting di blog.

First of all, ini pertanyaan advanced. Kapan pakai interface, dan kapan pakai abstract class itu cuma bisa dipahami dengan coding banyak-banyak (learning by doing), berpikir secara abstrak, dan banyak belajar desain aplikasi. Jadi jangan berkecil hati kalau Anda bingung setelah membaca artikel ini. Bukannya Anda tidak berbakat coding, tapi hanya kurang jam terbang saja.

Berikut jawaban saya.

Abstract class itu digunakan untuk mengimplementasikan pattern Template Method. Sedangkan interface digunakan (diantaranya) untuk mengimplementasikan pattern Observer.

Pakai interface bila satu class mau memiliki beberapa tipe data. Di Java, tipe data ditentukan oleh interface dan class. Mengacu pada buku Design Pattern, interface digunakan untuk menerapkan pattern Observer.

Contoh mudahnya seperti ini. Misalnya kita membuat aplikasi GUI. dan menggunakan komponen text (JTextArea). Komponen ini memiliki beberapa method untuk mengaktifkan event handling, beberapa diantaranya:

  • addMouseListener(MouseListener msl) : merespon gerakan mouse
  • addCaretListener(CaretListener cls) : merespon gerakan kursor

Kalau kita definsikan class seperti ini:

public class EventLog implements MouseListener, CaretListener {}

maka class EventLog bisa diumpankan pada kedua method di atas, karena class EventLog bertipe data EventLog, MouseListener, dan juga CaretListener.

Lalu, kapan kita menggunakan abstract class? Salah satunya apabila kita ingin membuat Template Method.

Kutipan dari Design Pattern GoF

By defining some of the steps of an algorithm using abstract operations, the template method fixes their ordering, but it lets Application and Document subclasses vary those steps to suit their needs.

Seperti kita ketahui, Template Method itu salah satu methodnya concrete dan (sebaiknya) final.

Contoh template method bisa dilihat di implementasi AbstractFormController di Spring Framework.

Untuk non-pengguna Spring, AbstractFormController itu mendefinisikan workflow pemrosesan HTML form. Method yang perlu diperhatikan di sini adalah method handleRequestInternal. Isi method ini kira2 seperti ini (dimodifikasi agar mudah dimengerti):

protected void handleRequestInternal() {
    bindDataDariForm();
    setelahBindSebelumValidasi();
    validasiData();
    setelahValidasi();
    processFormSubmission();
}

Seperti kita lihat di atas, method ini memanggil beberapa method lain secara berurutan. Urutan ini penting, karena kita tidak mau validasi dipanggil setelah form diproses. Apa gunanya validasi kalau pemrosesan sudah selesai?

Class AbstractFormController ini punya abstract method, yaitu:

public abstract void processFormSubmission();

Kenapa dibuat abstract? Karena pada saat menulis kode tersebut, Rod Johnson tidak tahu apa yang kita ingin lakukan pada saat form diproses. Ada yang mau simpan ke database, ada yang mau kirim email, dan berbagai kegiatan lain yang tidak terbayangkan sebelumnya. Oleh karena itu, method ini dibuat abstract, sehingga kita harus membuat implementasinya (override)

Nah, kita sebagai end-user, biasanya hanya perlu mengimplement method processFormSubmission tersebut. Method lainnya hanya dioverride apabila perlu. Misalnya kita ingin pakai logika validasi sendiri, atau ada pemrosesan khusus setelah validasi.

Teknik Template Method ini tidak bisa diimplement dengan interface, karena harus ada method concrete handleRequestInternal yang berfungsi untuk mendefinsikan workflow.

Demikian, mudah-mudahan bisa dimengerti.