TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
MP3 Streaming Server
Membangun MP3 Streaming Server Bagi Anda yang memiliki koleksi ribuan lagu MP3, kenapa tidak berbagi dengan temanteman Anda dengan mengatur sebuah MP3 streaming server? Hampir semua MP3 player populer telah mendukung fasilitas ini.
M
embagi koleksi lagu dapat dilakukan dengan berbagai cara. Apabila Anda menggunakan Windows, tentu cara yang paling mudah barang kali dengan mempergunakan protokol SMB. Apa yang perlu dilakukan oleh user hanyalah menyiapkan sebuah direktori lagu yang akan di-share, mengatur hak akses dalam file sharing dan yang lain pun bisa segera melakukan mapping, dan dapat mengakses koleksi lagu tersebut seolaholah berada di harddisk sendiri. Cara yang satu ini memang mudah bagi pengguna Windows. Namun, bagi pengguna Linux, ada beberapa hal yang harus diatur terlebih dahulu. Akan menjadi sangat rumit padahal apa yang diinginkan hanyalah mendengarkan lagu. Bagi yang fanatik berat dengan UNIX, cara lain seperti berbagi lewat NFS mungkin akan diusahakan. Toh, pengguna Windows juga dapat mengakses share NFS tersebut. Apalagi pengguna Linux. Namun, cara ini akan lebih parah dari cara pertama. Peng-
Interface web gnump3d.
50
INFOLINUX 04/2005
guna Windows harus melakukan banyak hal untuk sekadar mendengarkan lagu. Masih ada cara lain, yaitu dengan berbagi lagu lewat FTP. Sayangnya, pengguna harus men-download terlebih dahulu ke dalam harddisk lokal. Cara ini tidak menyenangkan. Bahwa ada FTPFS, pengaturan yang harus dilakukan akan menjadi sangat kompleks dan tidak platform independent. Selain FTP, kita masih bisa mempergunakan HTTP. Jadi, kumpulan lagu dibuat agar bisa diakses via web browser, namun sayangnya, user juga harus men-downloadnya terlebih dahulu. Mempergunakan WebDAV juga bukan solusi yang mudah. Cara yang sebenarnya sangat baik adalah dengan mempergunakan streaming server. Apa yang Anda perlukan sebagai sisi pembagi lagu hanyalah sebuah program streaming server, selain kumpulan lagu Anda. Sebagai streaming server, kita akan mempergunakan Gnump3d. Sementara, pihak lain yang ingin memutar lagu yang Anda tawarkan hanya perlu mempergunakan berbagai play-
Streaming server telah diaktifkan.
www.infolinux.web.id
er MP3 atau OGG yang mendukung fasilitas streaming. Umumnya, hampir semua player populer seperti Winamp dan XMMS telah mendukung dengan sangat baik. Dengan mempergunakan streaming server seperti ini, kita bahkan dapat berbagi file melalui internet. Seru, bukan? Sebagai langkah pertama, kita akan menginstall program gnump3d. Program ini bisa didapatkan di http://www.gnump3d.org. Namun umumnya, berbagai distro telah memaketkan program ini ke dalam CD atau DVD yang datang bersamanya. Periksa terlebih dahulu CD distro Anda sebelum mendownload. Gnump3d sangat mudah diinstal dan tidak membutuhkan banyak tetek bengek (Anda akan membutuhkan Perl). Selain itu, program ini juga dapat menyediakan fasilitas streaming untuk format OGG (walaupun namanya sudah telanjur mempergunakan istilah MP3). Yang lebih seru lagi, Gnump3d juga bahkan dapat menyediakan streaming untuk video MPEG.
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL MP3 Streaming Server
random playlist.
Program ini juga memungkinkan user menentukan apa yang ingin diputar. Streaming dapat dilakukan untuk file tunggal, atau, untuk keseluruhan tree direktori, atau, terserah Anda saja. Semuanya bisa diatur. Setelah dijalankan, kita dapat membuka web browser untuk melihat daftar file (yang akan ditampilkan secara realtime; Anda tidak perlu me-restart server ketika lagu ditambahkan). Setelah langkah pertama selesai, kita akan melanjutkan ke langkah kedua, yaitu mengonfigurasi gnump3d. File konfigurasi gnump3d umumnya akan disimpan di dalam /etc/gnump3d/gnump3d.conf. Anda juga dapat meng-override pengaturan utama ini dengan file konfigurasi per user yang akan disimpan sebagai .gnump3drc di home directory user. Bagi Anda yang anti melakukan konfigurasi, Anda dapat memberikan saja opsi –config kepada gnump3d pada saat dijalankan. Konfigurasi gnump3d.conf mempergunakan format variabel=nilai. Dokumentasinya sendiri cukup baik. Sebelum suatu variabel atau opsi diatur, kita selalu dapat membaca catatan singkat yang dituliskan sebagai komentar. Setelah semua konfigurasi diselesaikan, kita akan melanjutkan ke langkah ketiga, yaitu menjalankan gnump3d. Caranya sangatlah mudah. Cukup jalankan saja program:
Konfirmasi streaming.
tuk menjalankan gnump3d memiliki hak akses pada log, koleksi lagu, port, dan lain sebagainya. Sekali lagi, hindari menjalankan gnump3d sebagai root. Berikut ini adalah tampilan gnump3d apabila sukses dijalankan: GNUMP3d is free software, covered by the GNU General Public License, and you are welcome to change it
and/or distribute copies of it under certain conditions. For full details please visit the COPYING URL given below: Copying details: http://localhost:8888/ COPYING
gnump3d
Tentu saja, Anda harus menyesuaikan pengaturan Anda untuk masalah keamanan. Pastikan user yang Anda gunakan un-
www.infolinux.web.id
INFOLINUX 04/2005
51
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
MP3 Streaming Server
GNUMP3d now serving upon: http://localhost:8888/ GNUMP3d website: http://www.gnump3d.org/ Indexing your music collection, this may take some time. (Run with ‘--fast’ if you do not wish this to occur at startup). Indexing complete. Tag Cache initialized, 11 entries
Pada saat menjalankan, secara default gnump3d akan melakukan indexing pada koleksi musik Anda. Tunggulah beberapa saat. Kini, sesuai dengan pengaturan Anda, bukalah web browser dan akseslah alamat streaming server Anda (lengkap dengan port). Anda akan mendapatkan tampilan yang sangat ramah. Kliklah salah satu entri, dan secara default, akan menampilkan dialog untuk memroses link tersebut. Umumnya, pilihlah Enqueue untuk player favorit Anda. Dalam tiga langkah saja, kita sudah selesai mengatur sebuah streaming server. Luar biasa, bukan? Satu hal terakhir, barang kali Anda akan senang mengamati statistik streaming server Anda. Selain melalui web, Anda juga bisa mempergunakan program gnump3dtop yang datang bersama dengan paket program ini. Cara penggunaannya sangat sederhana, cukup jalankan saja gnump3dtop diikuti dengan statistik apa yang ingin diamati (lagu, agent, dan lain-lain, jalankan gnump3d-top tanpa parameter untuk melihat opsi yang tersedia). Contoh: gnump3d-top --songs
2 /Charlene - I’ve Never Been To Me.mp3 tr> 1 /Clief Richard - The Best Of Me.mp3 1
52
INFOLINUX 04/2005
Program ini memang ditujukan bagi web dan akan menghasilkan kode-kode HTML. Sampai di sini pembahasan kita dalam mengatur streaming server. Selamat mencoba! Noprianto ([email protected] )
Berikut ini adalah beberapa opsi yang mungkin berguna:
Opsi
Deskripsi
port
Port di mana gnump3d berjalan. Berikan nilai di atas 1024 untuk lebih amannya. Merupakan root direktori untuk apa yang ingin Anda share. Di SUSE, default-nya adalah /srv/mp3. Letakkan semua file yang ingin di-share ke dalam direktori ini. Logfile selalu berguna untuk pemeriksaan balik. Format logfile yang dipergunakan adalah 100% sama dengan format logfile yang dipergunakan oleh Apache. Berikan path lengkap ke logfile. Anda dapat mengatur format penulisan log Anda di sini. Anda bisa memodifikasi dari contoh yang telah tersedia. Path ke program statistik gnump3d. Gnump3d datang dengan sebuah program statistik yaitu gnump3d-top. User yang menjalankan program gnump3d. Jangan gunakan root. Gunakan user yang memiliki hak rendah. Client yang diperbolehkan untuk mengakses streaming server Anda. Berikan alamat IP (dipisahkan ; apabila lebih dari 1). Anda juga dapat memberikan nilai all ataupun none. Kebalikan dari allowed_clients Apabila diset, maka user perlu memasukkan password untuk dapat mempergunakan layanan yang Anda berikan. Database password adalah file dengan nama .password di direktori MP3.
root
logfile
log_format stats_program user allowed_clients
denied_clients enable_password_protection
recursive_randomize theme song_format shoutcast_streaming
Berikut ini adalah contoh keluarannya: Count td>Song 3 /David Tao - Ai Hen Jian Dan.mp3
info/Jikustik - Setia.mp3.m3u”>/ info/Jikustik - Setia.mp3 td>
enable_browsing
www.infolinux.web.id
Format password adalah username:password username1:password1 ....:... usernamen:passwordn Melakukan pengacakan secara rekursif Mengatur theme untuk tampilan web gnump3d Format lagu yang akan ditampilkan pada daftar Mengatur stream informasi judul lagu dalam format shoutcast. Apabila client mendukung (XMMS dan Winamp dapat bekerja dengan baik), aturlah nilainya menjadi 1. Mengatur agar daftar lagu dapat dibrowse. Apabila tidak, maka Anda harus mengakses langsung file recurse.m3u atau file playlist lain dan tidak memiliki akses ke daftar langsung. Default-nya adalah 1. Beberapa dari anda mungkin akan menonaktifkannya.
IKLAN
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
IRC Server
Membangun IRC Server IRC adalah salah satu cara berkomunikasi melalui Internet yang sangat populer. Menggunakan Linux, kita juga bisa membangun IRC server dan menyediakan service IRC kepada lingkungan kerja kita, terutama untuk kebutuhan lokal. Di artikel ini, kita akan membahas bagaimana membangun IRC server secara cepat.
S
ebagai makhluk sosial, berkomunikasi dan bermasyarakat adalah kebutuhan manusia di manapun manusia tersebut berada. Salah satu cara berkomunikasi adalah dengan berbicara. Dan, dengan perkembangan teknologi Internet dan komunikasi, kita juga dapat berbicara dengan orang lain yang terpisah secara geografis dengan mudah. Menggunakan komputer misalnya, kita bisa mengirim pesan teks ataupun gambar dan bisa diterima dalam hitungan detik oleh pengguna komputer di belahan bumi berbeda. Terdapat banyak cara untuk mengirim pesan melalui Internet. Kita bisa bedakan menjadi dua kategori besar, yaitu realtime dan non-realtime. E-mail termasuk dalam kategori non-realtime, sementara instant messaging dan IRC termasuk dalam kategori realtime. Cara berkomunikasi secara realtime memiliki keuntungan karena kita bisa berbicara secara langsung seperti halnya berbicara antardua orang dalam tempat yang sama. IRC, sebagai salah satu cara berkomunikasi realtime, termasuk cepat populer di kalangan pengguna komputer. Dengan adanya IRC, sekelompok pengguna yang memiliki ketertarikan yang sama dapat bergabung dalam satu ruang virtual ataupun berbicara secara privat. Berbeda dengan instant messaging, IRC pada awalnya memang telah didesain untuk pembicaraan publik dan dikembangkan untuk pembicaraan privat. Sementara, instant messaging dikembangkan pada awalnya untuk pembicaraan privat, walaupun beberapa implementasi menyediakan fasilitas konferensi. Bagi kebanyakan pengguna IRC, penggunaan IRC umumnya dikonotasikan untuk bicara ngalor ngidul, ataupun hal-hal yang sedikit nakal. Namun, IRC sebenarnya
54
INFOLINUX 04/2005
Berikut ini adalah pembahasan beberapa opsi file konfigurasi ircd.conf.
Kepentingan Opsi Deskripsi mandatory
M
Mengatur nama server, deskripsi, dan port server. Format konfigurasi: M:<Server NAME>:
::
Contoh konfigurasi: M:nop.keant.com:192.168.0.50:Komputer nop:6667
mandatory
A
Mengatur informasi administratif Format konfigurasi: A:::::
Contoh konfigurasi: A:Supernopp:Supernopp <supernopp@nop>: informasi penting::
mandatory
P
Port yang digunakan Format konfigurasi: P::<*>:::
Contoh konfigurasi: P::::6667:
mandatory
i/I
Konfigurasi otorisasi untuk client. Tanpa mengatur konfigurasi ini, client tidak akan bisa terkoneksi ke server. Opsi i akan mengatur restricted mode yang akan melarang perubahan nick dan status channel operator, sementara I akan mengizinkan akses penuh. Format konfigurasi: I::<Password>::: i::<Password>:::
Contoh konfigurasi: I:*@*::::
Bersambung...
www.infolinux.web.id
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL IRC Server
(Lanjutan) Berikut ini adalah pembahasan beberapa opsi file konfigurasi ircd.conf.
Kepentingan Opsi Deskripsi suggested
Y
Menentukan kelas koneksi. Umumnya dipergunakan untuk melakukan klasifikasi koneksi dari client, misalnya client yang datang dari situs tertentu akan dikelompokkan sebagai kelas tertentu. Kita mengenal server class dan client class. Umumnya, opsi ini dipergunakan dalam jaringan besar. Format konfigurasi server class: Y::::<Max Links>:<SendQ>::
1: nomor kelas 2: frekuensi ping (dalam detik) 3: frekuensi koneksi (dalam detik) 4: jumlah maksimal link inisial dalam kelas ini 5: sendq 6: tidak dipakai 7: tidak dipakai Format konfigurasi client class: Y: :::<Max Links>:<SendQ>::
1: nomor kelas 2: frekuensi ping (dalam detik) 3: frekuensi koneksi (dalam detik) 4: jumlah maksimal link dalam kelas ini 5: sendq untuk setiap client 6: jumlah maksimum link dari user di server 7: jumlah maksimum link dari user di jaringan TIDAK DISET DALAM ARTIKEL INI suggested
B
Mengatur server alternatif dimana user akan diarahkan apabila server kita telah penuh. Format konfigurasi: B:::<Server Name>::
TIDAK DISET DALAM ARTIKEL INI opsional
O
Mendefinisikan akses operator. Kita tidak selalu membutuhkan adanya operator untuk menjalankan server Format konfigurasi: O::<Password>:: :
TIDAK DISET DALAM ARTIKEL INI opsional
K
Mendefinisikan user@host yang di-banned dari server Format konfigurasi: K:::<User>:<port>: k::::<port>:
TIDAK DISET DALAM ARTIKEL INI
www.infolinux.web.id
pernah populer dalam menyediakan cara berkomunikasi realtime pada saat terjadi berbagai konflik dan ketegangan di beberapa lokasi negara di masa lalu. IRC juga banyak digunakan oleh developer open source dan komunitas underground untuk saling bertukar kode program, tip trik, dan berbagi pengetahuan lainnya. Berbagai proyek open source juga memiliki irc channel tempat para pengguna dan pengembang saling bertukar informasi. Tak jarang, kita bahkan bisa belajar produk open source melalui protokol komunikasi ini. Semasa mengerjakan skripsi, penulis banyak belajar dari komunitas di beberapa channel. IRC dimungkinkan dengan adanya IRC server dan IRC Client. Untuk IRC client, kita mengenal banyak implementasi populer, seperti irc, epic, bitchx, Mirc, Xchat, Gaim, Kopete, konversation, dan lain sebagainya. Sementara, untuk irc server, kita bisa mempergunakan ircd. Bagi Anda yang bekerja di kantor dan senang mempergunakan Yahoo! Messenger atau MSN Messenger, percakapan mempergunakan kedua protokol tersebut sangatlah tidak ekonomis. Bayangkan saja, pesan harus lari dulu ke Yahoo! atau ke MSN dan ada akhirnya kembali ke rekan yang duduk di sebelah kita. Menempuh ratusan sampai ribuan kilometer. Anda bisa membangun IRC server lokal dan rekan-rekan kerja Anda bisa memanfaatkannya untuk berkomunikasi. Bisa membangun channel yang berbeda-beda pula. Asal, pekerjaan utama tidak terlupakan, tentunya. Untuk membangun IRC server, pertama-tama Anda harus memiliki paket ircd terlebih dahulu. Carilah paket untuk distribusi Linux yang Anda gunakan sebelum Anda melakukan kompilasi dari source code. Anda bisa men-download ircd di alamat berikut: http://www.irc.at/site/download.php?lang=en. Setelah itu, lakukanlah instalasi seperti biasa. Paket-paket untuk berbagai distro telah tersedia. Ambil paket untuk distro Anda dan lakukanlah instalasi dengan mudah. Setelah ircd terinstal, kita akan melanjutkan ke tahapan kedua, yaitu melakukan konfigurasi. Harap diperhatikan bahwa konfigurasi ircd agak sedikit unik dan nyentrik, walaupun tidak akan membuat sakit kepala seperti halnya konfigurasi sendmail. File
INFOLINUX 04/2005
55
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
IRC Server
Terhubung ke irc server.
konfigurasi ircd, umumnya tersimpan sebagai /etc/ircd/ircd.conf terdiri dari banyak baris, dengan masing-masing baris mirip dengan baris pada /etc/passwd. Setiap baris akan berisikan opsi yang berbeda, lengkap dengan parameternya. Di dalam file konfigurasi ini, dibedakan juga derajat kepentingan suatu opsi. Ada opsi yang mandatory, disarankan, opsional, tidak diperlukan dan tidak disarankan. Dengan demikian, akan lebih mudah bagi kita untuk membuat konfigurasi yang sederhana. Masing-masing derajat kepentingan, terutama yang diperlukan umumnya mengandung tidak terlalu banyak opsi. Anda dapat merujuk tabel pada halaman sebelumnya untuk berbagai opsi dan contoh penggunaannya. Setelah konfigurasi selesai, kita bisa melanjutkan ke langkah ketiga, yaitu menjalankan dan menguji IRC server kita. Jalankan perintah inisialisasi (umumnya di /etc/init.d/ircd) dengan parameter start, se-
Manual ircdwatch.
56
INFOLINUX 04/2005
Daftar channel (inisial dan tidak dapat digunakan).
bagai contoh: /etc/init.d/ircd start
Atau, pada SUSE: rcircd start
Tergantung pada distro Anda, apabila sukses, maka akan terdapat pesan sukses yang ditampilkan. Untuk keamanan, IRC server akan dijalankan dengan user yang tidak memiliki hak berarti. Setelah server dijalankan, gunakanlah client favorit Anda untuk menguji. Dalam tulisan ini, penulis akan mempergunakan konversation irc client. Setelah server Anda berjalan dengan baik, Anda akan segera bisa membangun channel baru dan memulai ruang virtual Anda sendiri. Apabila IRC server ingin selalu diaktifkan, Anda bisa meminta distro Anda untuk menjalankan ircd pada saat booting
Manual ircd.
www.infolinux.web.id
(gunakan tool distro Anda, misal Runlevel Editor YaST untuk distro SUSE). Ircd datang dengan sebuah utiliti ircdwatch, yang berguna untuk memeriksa daemon ircd dan akan melakukan restarting apabila diperlukan. Anda mungkin akan membutuhkan utiliti ini. Utility ini juga bisa Anda manfaatkan dengan menggunakannya bersama-sama shell script. Demikianlah pembahasan kita dalam membangun irc server. Dengan membangun irc server lokal, kita bisa mengakomodasi kebutuhan akan komunikasi realtime tanpa harus membuang bandwidth yang mahal ke luar. Bagi Anda yang memiliki akses ke jaringan global, Anda selalu bisa mempergunakan protokol ini untuk mengenal berbagai orang di belakan dunia lain. Yang penting, sekali lagi, jangan sampai irc server menyebabkan gangguan produktivitas di lain hari. Selamat mencoba! Noprianto ([email protected] )
IKLAN
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
namazu
Membangun Search Engine dengan namazu Saat ini, kita mengenal berbagai jenis search engine. Bagimana kalau kita juga mengimplementasikan sebuah search engine sendiri untuk kebutuhan lokal ataupun intranet? Tidak perlu memiliki kemampuan pemrograman. Kita gunakan saja namazu. Dengan namazu, search engine menjadi begitu mudah dan cepat untuk diimplementasikan.
M
anusia pada dasarnya adalah makhluk tukang simpan. Apa saja disimpan. Mulai dari baju-baju yang bahkan sudah tidak terpakai sampai dengan e-mail-e-mail sampah yang pasti tidak akan pernah dibaca lagi. Di dunia komputer, tak heran apabila kapasitas harddisk tidak pernah cukup. Pada saat membeli harddisk berukuran 80 GB mungkin akan terasa besar, namun seiring dengan penggunaannya, besar kemungkinan untuk menambah harddisk. Masalahnya, selain keterbatasan ruang atau tempat, manusia juga suka sekali lupa. Tidak semua memang, namun jumlah manusia pelupa kini semakin banyak. Apabila budaya menumpuk barang dikombinasikan dengan budaya lupa, maka banyak hal akan menjadi semakin menarik, termasuk tulisan ini. Pembahasan di atas hanyalah salah satu alasan dari pentingnya fasilitas pencari. Berhubungan dengan masalah fisik saja, mencari barang yang kecil dan telah dimiliki
Pembuatan index.
58
INFOLINUX 04/2005
selama tahunan akan susah. Begitupun dengan topik yang disimpan di antara ribuan file yang juga telah disimpan tahunan. Hal lain yang mendukung perlunya pencarian adalah waktu. Tidak mungkin bagi kita untuk selalu mencari sesuatu secara manual. Dalam kehidupan sehari-hari, kita mungkin akan membuat daftar berisikan barang yang kita miliki dan tempat penyimpanannya, sehingga, apabila ingin mencari sesuatu, tinggal melihat ke daftar. Tidak perlu mengobrakabrik seisi rumah (dengan asumsi, kita selalu meletakkan barang di tempat penyimpanan yang seharusnya, tidak mengambil dari gudang namun malas menyimpan kembali ke gudang sehingga dibiarkan begitu saja di kamar kerja misalnya). Apabila dikembangkan lebih luas, salah satu pentingnya pencarian adalah masalah lokasi. Terutama di penggunaan komputer. Ada kalanya, kita perlu mencari informasi yang tidak disimpan di lokal, namun tersimpan
Pembuatan index (selesai).
www.infolinux.web.id
di remote entah di komputer mana. Apabila ada fasilitas pencari lintas lokasi, maka masalah keterbatasan lokasi bisa dipecahkan. Seiring dengan perkembangan teknologi, search engine menjadi populer. Dengan adanya search engine, kita bisa mencari tanpa terbatas lokasi, waktu, dan lain sebagianya. Masukkan saja apa yang ingin dicari, dan search engine akan menampilkan informasi yang didapatkannya. Untuk menurunkan kehebatan search engine di internet, Google bahkan merilis pencarian versi desktop sehingga user dapat semakin mudah mencari apa yang tersimpan di dalam harddisk komputer. Pencariannya begitu hebat sehingga berbagai dokumen juga dapat ditelusuri dengan mudah (Google dipenuhi dengan begitu banyak tenaga kerja superunik dan hebat, dalam budaya kerja yang 70% menyenangkan dan menggembirakan, dan sisanya adalah darah, keringat dan air mata. Menurut salah satu pejabat Google).
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL namazu
Sebenarnya, jauh sebelum Google merilis pencarian versi desktop, kita juga telah mengenal fasilitas pembuatan search engine yang dapat diterapkan secara lokal ataupun intranet, juga Internet. Walau, barang kali lebih banyak yang menerapkan untuk lokal ataupun intranet saja. Berbagai tool bisa kita gunakan. Dan, salah satunya adalah dengan mempergunakan namazu. Namazu adalah search engine full-text yang ditujukan untuk kemudahan penggunaan. Namazu dapat dipergunakan untuk sistem pencarian mulai dari harddisk lokal sampai web berukuran medium. Pada awalnya, namazu hanya dikembangkan untuk bahasa Jepang, namun untuk saat ini, juga telah dapat menangani bahasa Inggris dan bahasa latin lainnya. Namazu pada awalnya dikembangkan oleh Satoru Takabayashi dan saat ini telah dikembangkan oleh namazu project (www.namazu.org). Sebagai catatan soal nama, dalam bahasa Inggris, kata jepang namazu berarti catfish.
Indexing Umumnya, sebelum pencarian dapat dilakukan, kita akan melakukan proses indexing terlebih dahulu, termasuk penggunaan namazu. Contoh yang paling baik adalah dalam kehidupan sehari-hari. Katakanlah kita memiliki banyak barang yang tersimpan di dalam rumah. Terkadang, untuk mencari sebuah obeng saja, kita mungkin harus menelurui gudang, kamar kerja, garasi dan lain sebagainya. Untuk mempermudah pencarian, sebuah index pun dibuat. Proses pembuatan index disebut dengan indexing. Dalam melakukan indexing investori
HTML yang dihasilkan namazu.
peralatan di rumah tersebut, kita melakukan pencatatan barang-barang kunci dan lokasinya. Sebagai contoh:
Barang
Lokasi
Obeng Kantong Plastik Colokan T ...
Gudang Dapur Gudang ...
Daftar tersebut kita gunakan sebagai index untuk mempermudah pencarian. Apabila ingin mencari obeng, maka kita bisa menuju ke gudang. Hanya satu masalah seperti yang telah disebutkan, kita mungkin lupa untuk meletakkan kembali obeng ke gudang setelah digunakan. Dalam hal ini, index harus diperbaiki secara berkala. Di komputer pun sama. Kita umumnya menjalankan program peng-index yang akan mencatat berbagai hal di dalam sistem sesuai kemampuannya. Tentu saja index tersebut tidak sekadar pasangan kata kunci dan lokasi, melainkan harusnya dalam format yang telah teroptimasi untuk pencarian. Sebagai contoh adalah berbagai format binary yang di dalamnya berisikan tree. Bisa kita bayangkan betapa pentingnya index. Misal, kita memiliki 100 buah file teks. Kita ingin mencari satu kata, misalnya Linux ke dalam kumpulan file tersebut. Kita sebenarnya bisa memanfaatkan program find, grep, cat, dan lain sebagainya untuk mencari. Jadi, tidak mempergunakan search engine. Tapi, bayangkan waktu dan usaha yang diperlukan. Apabila mempergunakan sistem pencarian berbasis index yang sederhana saja, tentunya waktu yang diperlukan akan lebih sedikit karena pencari hanya per-
lu mencari ke daftar dan segera menemukan file mana yang diperlukan. Masalah klasik dari index seperti manusia yang suka mengembalikan barang ke tempat semula juga terjadi di komputer. Tentu saja, pengguna file tidak harus selalu memindahmindahkan file setelah digunakan. Namun, bisa saja file telah dihapus atau diubah dan kata kunci menjadi tidak relavan lagi. Google juga mengalami masalah yang sama, namun menanganinya dengan pintar. Ada kalanya suatu website telah berubah, namun Google tetap menyimpannya. Google akan menyimpan ini sebagai cache dan pengguna masih bisa mendapatkan informasi yang diinginkan walaupun sumber informasi sudah tidak menampilkannya lagi. Indexing adalah hal yang penting, dan juga digunakan oleh namazu.
Namazu dan komponen namazu Namazu datang dengan seperangkat tool dan komponen terpisah yang dapat dipergunakan sesuai dengan kebutuhan. Namun, pada umumnya, kita bisa membedakan tiga komponen utama namazu: mknmz, adalah sebuah program Perl yang berguna untuk membuat index sebelum pencarian dilakukan. namazu, adalah sebuah program C yang berguna untuk melakukan pencarian secara command line, berdasarkan index yang dibuat. namazu.cgi, adalah sebuah program C untuk keperluan CGI, yang akan melakukan pencarian berdasarkan index yang dibuat.
Penggunaan namazu.cgi.
www.infolinux.web.id
INFOLINUX 04/2005
59
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
namazu
Bantuan pencarian.
Selain datang dengan program-program utama, namazu juga datang dengan berbagai tool (akan dibahas belakangan) dan filter. Namazu dibangun dengan modular dan mempergunakan filter-filter untuk menangani indexing dokumen. Berikut ini adalah filter standar yang datang dengan namazu: bzip2.pl, untuk menangani file bzip2 (membutuhkan program bzip2). compress.pl, untuk menangani file hasil kompresi program compress. deb.pl, untuk menangani paket debian (membutuhkan program dpkg). dvi.pl, untuk menangani file dvi (membutuhkan dvi2tty). excel.pl, untuk menangani format MS Excel (membutuhkan xlhtml). gzip.pl, untuk menangani file gzip (membutuhkan program gzip atau modul Perl Compress::Zlib. hdml.pl, untuk menangani file hdml. hnf.pl, untuk menangani file Hyper NIKKI System. html.pl, untuk menangani file html. mailnews.pl, untuk menangani Mail/ News. man.pl, untuk menangani halaman manual. mhonarc.pl, untuk menangani file MhoArc (www.mhonarc.org). msword.pl, untuk menangani format MS Word (membutuhkan wvWare). pdf.pl, untuk menangani format PDF (membutuhkan pdftotext, bagian dari xpdf). postscript.pl, untuk menangani file postscript (membutuhkan ps2ascii). powerpoint.pl, untuk menangani format
60
INFOLINUX 04/2005
Form html untuk pencarian.
MS Powerpoint (membutuhkan pptHtml, bagian dari xlHtml). rfc.pl, untuk menangani file RFC. rpm.pl,untuk menangani paket RPM (membutuhkan program rpm). taro.pl, untuk menangani format ichitaro, pengolah kata untuk bahasa Jepang. tex.pl, untuk menangani format tex (membutuhkan detex).
Program namazu yang dikompilasi untuk Windows memiliki beberapa filter khusu seperti berikut: ichitaro456.pl, untuk menangani format ichitaro, pengolah kata untuk bahasa Jepang (membutuhkan JSTXT. tool untuk MSDOS). oleexcel.pl, untuk menangani format MS Excel (membutuhkan Excel). olemsword.pl, untuk menangani format MS Word (membutuhkan Word). olepowerpoint.pl, untuk menangani format MS powerpoint (membutuhkan PowerPoint). oletaro.pl, untuk menangani format ichitaro. olertf.pl, untuk menangani format rtf (membutuhkan Word). Untuk bekerja dengan namazu, seperti telah disinggung, kita perlu membuat index terlebih dahulu dengan program mknmz (yang bekerja dengan filter-filter yang baru saja dibahas). Setelah itu, kita bisa mempergunakan program namazu atau namazu.cgi untuk ;pencarian. Sebelum kita melanjutkan lebih jauh, kita perlu memahami apa yang bisa dan
www.infolinux.web.id
tidak bisa dilakukan oleh namazu, sebagai referensi agar Anda bisa menyesuaikan kebutuhan Anda. Namazu dapat dimanfaatkan untuk hal-hal berikut ini: Mencari file yang tersimpan di komputer. Mencari kata yang tersimpan dalam file. Mencari dengan berbagai kriteria dan dapat bekerja dengan reguler expression. Dapat mencari berbasiskan command line dan web. Namazu tidak dapat dimanfaatkan untuk: Mencari file di komputer lain. Pencarian web tidak bisa diandalkan untuk server yang sangat sibuk. Harap diperhatikan bahwa penggunaan komputer yang cukup cepat, dengan RAM yang cukup besar dan harddisk yang cukup cepat akan mampu meningkatkan kinerja namazu.
Pembuatan index Untuk membuat index, kita akan mempergunakan program mknmz. Berikut ini adalah cara penggunaannya: mknmz [options] ...
Untuk , kita memberikan direktori yang ingin di-index. Berikut ini adalah beberapa opsi yang mungkin berguna: -a, menargetkan semua file (umumnya diset). -t, menspesifikan tipe media. -e, tidak memasukkan pencarian file HTML yang berisikan <meta name=”ROBOTS” content=”NOINDEX”>. -U, tidak mengencode URI.
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL namazu
-X, tidak membuat summary pada heading. -C, menampilkan konfigurasi. -f, mempergunakan file konfigurasi lain. -q, melakukan indexing dengan tidak banyak menampilkan output. -V, bertindak verbose. Berikut ini adalah contoh penggunaan mknmz untuk mengamati konfigurasi aktif: $ mknmz -C Loaded rcfile: /etc/namazu/ mknmzrc System: linux Namazu: 2.0.12 Perl: 5.008003 NKF: module_nkf KAKASI: module_kakasi -ieuc oeuc -w ChaSen: module_chasen -j -F ‘%m ‘ Wakati: module_kakasi -ieuc -oeuc -w
Lang_Msg: en_US.UTF-8 Lang: en_US.UTF-8 Coding System: euc CONFDIR: /etc/namazu LIBDIR: /usr/share/namazu/pl FILTERDIR: /usr/share/namazu/ filter TEMPLATEDIR: /usr/share/namazu/ template Supported media types: application/postscript application/x-bzip2 application/x-compress application/x-gzip application/x-rpm message/news message/rfc822 text/hnf text/html text/html; x-type=mhonarc text/plain text/plain; x-type=rfc text/x-hdml text/x-roff
www.infolinux.web.id
Dengan mengamati apa yang tertera pada konfigurasi aktif ini, kita bisa menentukan paling tidak media tipe mana yang dapat menjadi target. Pada contoh berikut, penulis melakukan indexing pada /usr/share/doc/packages dan mknmz mendapatkan sekitar hampir 20.000 file yang diindex. Keluarannya sangatlah panjang. Berikut ini baris-baris terakhir perintah mknmz di komputer penulis: $ mknmz -a /usr/share/doc/ packages ... ... 19436/19440 - /usr/share/doc/ packages/zvbi/ChangeLog [text/ plain] 19437/19440 - /usr/share/doc/ packages/zvbi/INSTALL [text/ plain] 19438/19440 - /usr/share/doc/ packages/zvbi/NEWS [text/plain] 19439/19440 - /usr/share/doc/ packages/zvbi/README [text/
INFOLINUX 04/2005
61
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
namazu
plain] 19440/19440 - /usr/share/doc/ packages/zvbi/TODO [text/plain] Writing index files... [Base] Date: Sat Dec 18 14:56:33 2004 Added Documents: 19,440 Size (bytes): 185,389,802 Total Documents: 19,440 Added Keywords: 1,470,031 Total Keywords: 1,470,031 Wakati: module_ kakasi -ieuc -oeuc -w Time (sec): 5,161 File/Sec: 3.77 System: linux Perl: 5.008003 Namazu: 2.0.12
Bisa kita lihat bahwa pembuatan index tersebut menambahkan keyword pencarian sebanyak 1.470.031 buah. Harap diperhatikan juga, bahwa indexing sebagian besar file teks tersebut memakan waktu sekitar 5000
detik (kurang lebih 1,5 jam; penulis membuatnya di hari libur :)) di mesin celeron di atas 2 GHz dan RAM 256. Cukup memakan waktu. Indexing ratusan MB file RPM/ GZIP/BZIP2 mungkin akan lebih lama lagi. Di direktori aktif tempat menjalankan mknmz, akan terdapat file dengan nama file diawali dengan NMZ*. Bagi Anda yang tertarik, dapat melihat tabel 1 tentang kegunaan masing-masing file berawalan NMZ. Bagi Anda yang sekedar ingin mengimplementasikan search engine, Anda bisa melanjutkan ke pembahasan berikutnya.
Pencarian berbasis command line Setelah kita memiliki index, maka kita dapat memulai pencarian dengan pencari berbasis command line: namazu. Berikut ini adalah cara penggunaan namazu: namazu [options] [index]...
Berikut ini adalah beberapa opsi yang mungkin berguna: -n, jumlah dokumen yang ditampilkan.
Tabel 1. Kegunaan masing-masing file berawalan NMZ.
FIle
Kegunaan
NMZ.i NMZ.ii NMZ.w NMZ.wi NMZ.r NMZ.p NMZ.pi NMZ.t
Index untuk pencarian kata (inverted file) Index untuk mencari ke dalam NMZ.i Daftar kata index untuk mencari ke dalam NMZ.w Daftar file yang terdaftar dalam index Index untuk pencarian berbasis frase Index untuk NMZ.p Mencatat informasi tentang timestamp dan dokumen yang telah dihapus. Memiliki masalah dengan tahun 2038 (timestamp berbasiskan epoch dihitung setiap detik sejak 1 Januari 1970). NMZ.field.{subject,from,date,message-id,...} Mencatat informasi field NMZ.field.{subject,from,date,message-id,...}.i Index untuk mencari ke dalam NMZ.field.{subject,from,date,message-id,...} NMZ.access Konfigurasi akses control NMZ.status Mencatat berbagai status untuk kebutuhan update index NMZ.result Menentukan hasil pencarian NMZ.head Header hasil pencarian NMZ.foot Footer hasil pencarian NMZ.body Deskripsi query NMZ.tips Tips pencarian dokumen NMZ.log Logfile untuk upate index NMZ.lock Lockfile untuk mencegah pencarian NMZ.lock2 Lockfile untuk mencegah pembuatan index dalam waktu bersamaan NMZ.slog Logfile untuk kata kunci yang dicari
62
INFOLINUX 04/2005
www.infolinux.web.id
-w, nomor dokumen yang pertama ditampilkan. -l, menampilkan hasil pencarian dengan menampilkan format. -s, menampilkan hasil pencarian singkat. --late, mengurutkan dokumen dalam late order. --early, mengurutkan dokumen dalam early order. --sort-METHOD, mengurutkan dokumen dengan metode tertentu. --ascending, mengurutkan dokumen dalam modus ascending (default). --all, menampilkan semua hasil pencarian. -c, menampilkan jumlah hasil pencarian. -h, menampilkan hasil pencarian dalam format HTML. -o, menyimpan hasil pencarian dalam file tertentu. -q, tidak menampilkan informasi ekstra. Berikut ini adalah contoh penggunaan namazu: $ namazu -s -n 10 -w 0 linux /home/nop/temp/namazu/ Results: References: [ linux: 2000 ] Total 2000 documents matching your query. 1. MAINTAINERS (score: 302) /usr/share/doc/packages/kerneldocs/MAINTAINERS (51,186 bytes) 2. PORTING (score: 160) /usr/share/doc/packages/ntop/ PORTING (18,352 bytes) 3. CREDITS (score: 151) /usr/share/doc/packages/kerneldocs/CREDITS (85,160 bytes) 4. DVD+RW/+R/-R[W] for Linux (score: 139) /usr/share/doc/packages/dvd+rwtools/index.html (59,652 bytes) 5. Changelog (score: 136) /usr/share/doc/packages/cdrecord /Changelog (206,483 bytes) 6. HISTORY (score: 132) /usr/share/doc/packages/utillinux/HISTORY (54,742 bytes)
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
namazu
Kombinasi PHP dan namazu.
7. FAQ (score: 126) /usr/share/doc/packages/glibcdevel/FAQ (82,646 bytes) 8. Linux Client with Linux Kernel-Space NFS server (score: 118) /usr/share/doc/packages/nfsutils/node24.html (15,226 bytes) 9. Linux Client with Linux Kernel-Space NFS server (score: 118) /usr/share/doc/packages/nfsutils/node26.html (15,230 bytes) 10. README (score: 102) /usr/share/doc/packages/lilo/ README (132,914 bytes) Current List: 1 - 10
Penggunaan garbage cleaner.
docs/CREDITS /usr/share/doc/packages/dvd+rwtools/index.html /usr/share/doc/packages/ cdrecord/Changelog /usr/share/doc/packages/utillinux/HISTORY /usr/share/doc/packages/glibcdevel/FAQ /usr/share/doc/packages/nfsutils/node24.html /usr/share/doc/packages/nfsutils/node26.html /usr/share/doc/packages/lilo/ README
Atau, meminta namazu untuk menampilkan hasil pencarian dalam format HTML dan menyimpannya ke dalam file hasil.html. $ namazu -h -n 10 -w 0 linux /home/nop/temp/namazu/ > hasil. html
Dalam contoh tersebut, Anda meminta namazu untuk mencari Linux (menggunakan index yang tersimpan di /home/nop/ temp/namazu) dan menampilkan 10 hasil pertama dalam format singkat. Tentu saja, Anda juga bisa meminta namazu untuk hanya mendaftarkan nama file saja, contoh:
Anda juga bisa meminta namazu untuk hanya menampilkan jumlah hasil pencarian seperti cara berikut ini:
$ namazu -l -n 10 -w 0 linux /home/nop/temp/namazu/ /usr/share/doc/packages/kerneldocs/MAINTAINERS /usr/share/doc/packages/ntop/ PORTING /usr/share/doc/packages/kernel-
Menggunakan namazu, sebenarnya Anda tidak harus mencari sesuatu sebagai suatu kata tunggal. Anda bisa mempergunakan query yang lebih kompleks seperti: penggunaan AND. Sebagai contoh: Linux and Linus. Harap diperhatikan bahwa AND adalah default di dalam namazu.
$ namazu -c linux /home/nop/ temp/namazu/ 2000
query lanjutan
www.infolinux.web.id
penggunaan OR. Sebagai contoh: Linux or Windows. Penggunaan not. Sebagai contoh: Linux not unix. Penggunaan grouping dengan tanda kurung (dipisahkan satu atau lebih spasi). Sebagai contoh (linux and unix) not windows. Penggunaan frase, dengan mengapit frase dalam “ “ atau { }. Sebagai contoh: { Linus Torvalds }. Harap diperhatikan bahwa pencarian berbasis frase tidak selalu tepat. Penggunaan substring di awal, di tengah atau di akhir. Sebagai contoh *linux, *bsd*, free*. Penggunaan reguler expression. Sintaks RE yang digunakan adalah gaya Ruby (sama-sama dari Jepang), walaupun gaya Perl juga ditawarkan. Sebagai contoh: /pro(gram|blem)s?/. Pencarian field specific (terutama untuk mail/news). Field yang bisa digunakan adalah Subject:, From:, Message-Id:. Sebagai contoh: +subject:Linux. Boleh dikatakan, namazu sangat sukses dalam menangani query. Sampai di sini, sebenarnya kita sudah selesai mengimplementasikan search engine. Namun, agar lengkap, kita juga akan membahas konfigurasi namazu, namazu di web (baik menggunakan namazu.cgi ataupun PHP), berbagai tip untuk mempercepat pencarian dan pembahasan berbagai tool lain yang datang bersama namazu).
Konfigurasi namazu Mknmz dan namazu menyimpan file kon-
INFOLINUX 04/2005
63
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
namazu
cgi?query=linux Pemberian query akan langsung membuat namazu.cgi mencari sesuai kata kunci yang dimasukkan. Sementara, dengan memberikan parameter max, kita dapat mengubah penampilan entri per halaman namazu: http://localhost/cgi-bin/namazu. cgi?query=linux&max=10 Pemberian parameter whence juga dapat dipergunakan untuk langsung melompat ke nomor tertentu hasil pencarian: http://localhost/cgi-bin/namazu.cgi?query= linux&max=10&whence=27 Untuk pengurutan data, Anda bisa memberikan parameter sort, sebagai contoh: http://localhost/cgi-bin/namazu.cgi?query= linux&max=10&whence=27&sort=score
Preview dengan vfnmz.
figurasi mereka di /etc/namazu/mknmzrc dan /etc/namazu/namazurc. Berikut ini, kita akan membahas beberapa opsi penting di kedua file konfigurasi tersebut.
mknmzrc: Berikut ini adalah beberapa opsi penting dalam file konfigurasi mknmzrc. $HTML_SUFFIX, menspesifikan suffix html. $ALLOW_FILE, menentukan file yang diperbolehkan dalam pembuatan index. $DENY_FILE, menentukan file yang tidak diperbolehkan dalam pembuatan index. $SEARCH_FIELD, menentukan field dalam pencarian field-specific. $ON_MEMORY_MAX, menentukan ukuran maksimal file yang dapat di-load ke dalam memory. $FILE_SIZE_MAX, menentukan ukuran maksimal file untuk indexing. $TEXT_SIZE_MAX, menentukan ukuran maksimal file text untuk indexing. $WORD_LENG_MAX, menentukan maksimal panjang kata untuk indexing.
namazurc: Berikut ini adalah beberapa opsi penting dalam file konfigurasi namazurc: Index, menentukan direktori default untuk index. Template, menentukan direktori default untuk template.
64
INFOLINUX 04/2005
Replace, menentukan string yang ingin di-replace. Logging, menentukan aktif atau tidaknya (On atau Off, default adalah on) fasilitas keyword logging. Scoring, metode scoring yang digunakan (tfidf atau simple).
Dan, untuk penampilan data, Anda bisa memberikan parameter result, sebagai contoh: http://localhost/cgi-bin/namazu.cgi?query= linux&max=10&result=short&sort=score
Namazu di web dengan php Anda bisa mengubah beberapa hal seperti direktori index dan opsi memory (dibahas kemudian). Jangan lupa menghapus tanda komentar pada suatu opsi.
namazu.cgi Komponen utama ketiga dari namazu adalah namazu.cgi yang dapat berfungsi sebagai aplikasi CGI untuk pencarian data di internet. Penggunaan namazu.cgi begitu mudah untuk dilakukan. Namun, sebelum mempergunakan namazu.cgi, sangat disarankan untuk melakukan konfigurasi terhadap file namazurc. Setelah itu, nyalakanlah web server Anda (Anda akan membutuhkan Apache terinstal dan terkonfigurasi dengan baik untuk cgi, berbagai distro modern seperti SUSE dan Red Hat telah melakukannya untuk Anda). Cara penggunaan namazu.cgi yang paling mudah adalah dengan memberikan langsung kata kunci pencarian dan berbagai opsi ke dalam URL pemanggilan namazu. cgi. Sebagai contoh: http://localhost/cgi-bin/namazu.
www.infolinux.web.id
Sebenarnya, kita juga dapat mempergunakan namazu dalam kombinasi dengan script PHP. Namazu selanjutnya kita manfaatkan sebagai backend search engine. Pada pengembangan berikutnya, namazu akan sekaligus datang dengan libnmz yang matang sehingga kita bisa langsung mempergunakan pustaka namazu dengan berbagai bahasa pemrograman yang mendukung penggunaan pustaka sistem. Berikut ini adalah contoh kerjasama antara PHP dan namazu (bukan namazu.cgi) dalam menghasilkan pencarian. Kita akan memiliki 2 file: search.html: form HTML. search.php: prosesor yang akan meminta namazu untuk mencari dan mengembalikan hasilnya ke browser. Isi file search.html: Contoh pencarian mempergunakan namazu Masukkan kata kunci
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
namazu
Isi file search.php: if (trim($_ REQUEST[query]) == “”) header (“location: search.html”);
pembuatan index dapat langsung menargetkan tipe dokumen yang ditentukan. Ini bisa mempercepat sampai 20%. Meningkatkan memory pada opsi $ON_ MEMORY_MAX di mknmzrc. Default memori yang digunakan adalah 5 MB, Anda bisa menjadikannya 100 MB Apabila Anda memiliki RAM sebesar 1 GB misalnya. Mempergunakan komputer yang cepat.
[namazu’s options] [index]...
Contoh: bnamazu -b w3m -qh linux
nmzgrep nmzgrep adalah tool yang digunakan untuk berurusan dengan egrep. Berikut ini adalah sintaks penggunaan: nmzgrep [egrep’s options] <pattern> [index]...
Menyimpan memory untuk indexing $nmz = `/usr/bin/namazu -qh $_REQUEST[query]`; echo $nmz; ?>
Penjelasan: Pertama-tama, kita membuat form HTML yang berisikan satu variabel “query” yang akan dilewatkan ke program search. php. Program ini kemudian memanggil namazu dan memanfaatkan output html namazu (-h) untuk menghasilkan kodekode HTML. Pemberian opsi -q dimaksudkan untuk membuat output seminimal mungkin (hanya mengandung hasil pencarian dan nama program). Tentu saja, ini adalah contoh sederhana dan tidak bisa diandalkan untuk keperluan serius. Anda dapat mengembangkan script Anda sendiri ataupun memanfaatkan namazu.cgi.
Berbagai tip Kita dapat melakukan berbagai hal untuk memanfaatkan namazu sebaik mungkin, secepat mungkin. Berikut ini adalah beberapa tip penggunaan namazu:
Fast Indexing Harus diakui, indexing adalah proses yang paling memakan waktu dalam penggunaan namazu. Untuk penyimpanan berukuran 100 GB misalnya, pembuatan index akan memakan waktu sangat lama. Namun, Anda bisa melakukan beberapa hal berikut untuk sedikit mempercepat proses indexing: Menggunakan modul Perl (terutama untuk filter). Menentukan opsi-media-type sehingga
Indexing akan memakan sangat banyak memory. Anda bisa mempergunakan opsi –checkpoint dan mengurangi memory yang dipakai untuk $ON_MEMORY_MAX. Penggunaan opsi –checkpoint akan mampu menghemat ukuran proses mknmz.
Meng-update index untuk dokumen yang diubah atau dihapus Index yang dibuat dengan mknmz pada dasarnya adalah sederhana dan menyimpan ID dokumen yang dihapus sebagai tambahan dari index utama. Jika update pada index terjadi berulang-ulang, maka informasi dokumen yang terhapus akan bertambah dan performa akan berkurang. Untuk ini, kita bisa memanfaatkan program garbage cleaner yang datang bersama namazu.
Contoh: nmzgrep linux
gcnmz Program ini akan berfungsi sebagai garbage cleaner (baca bagian tips namazu). Berikut ini adalah sintaks penggunaan: gcnmz [options] ...
Contoh penggunaan: gcnmz -v /home/nop/temp/namazu/
mailutime mailutime adalah tool untuk mengatur timestamp mail/news. Berikut ini adalah cara penggunaan: mailutime ...
vfnmz
Tool-tool lain Namazu, selain datang dengan ketiga komponen utama (mknmz, namazu, namazu. cgi), juga datang dengan berbagai tool lain. Berikut ini adalah pembahasan berbagai tool tersebut. Beberapa tool dapat menjadi sangat berguna (seperti garbage cleaner yang dibahas pada bagian tip).
Vfnmz adalah tool untuk melakukan preview hasil pencarian. Berikut ini adalah cara penggunaan: vfnmz
Contoh penggunaan: vfnmz /home/nop/temp/namazu/ > /tmp/vfnmz.html
bnamazu
rfnmz
bnamazu adalah tool yang digunakan untuk berurusan dengan web browser. Apabila Anda melakukan pencarian dan menampilkan hasilnya dalam format HTML misalnya, tentu Anda tidak ingin melihat kode-kode HTML begitu saja (akan sulit dimengerti). Anda bisa menyimpannya ke dalam file html untuk dibuka dengan web browser misalnya, atau, Anda mempergunakan bnamazu untuk langsung membuka web browser bagi Anda. Berikut ini adalah sintaks penggunaan:
rfnmz adalah tool untuk merekonstruksi file NMZ.field.*.i. Berikut ini adalah cara penggunaan:
bnamazu [-n] [-b browser]
www.infolinux.web.id
rfnmz
Contoh penggunaan: rfnmz /home/nop/temp/namazu
Demikianlah pembahasan tentang namazu. Jangan lupa melakukan maintain index secara rutin untuk sistem yang besar. Sesuaikan pula komputer yang dipergunakan untuk membangun index, terutama
INFOLINUX 04/2005
65
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Virtual Hosting Center
Cara Mudah dan Cepat Membuat Virtual Hosting Center Mengelola server hosting berbasis Linux tidak selalu rumit. Tersedia paket-paket aplikasi berbasis web, misalnya webmin yang memiliki modul khusus untuk mengelola virtual server.
D
engan semakin berkembangnya Internet, maka mempunyai domain sendiri bagi perorangan atau khususnya perusahaan dan organisasi akan memberikan nilai prestigious. Betapa tidak, dengan memasarkan produk melalui Internet maka dengan mudah orang dapat mengakses informaasi produk Anda dari belahan dunia manapun. Tidak memandang jarak dan waktu, asalkan terhubung ke Internet maka semuanya ada di tangan Anda. Dari sinilah bisnis hosting center akhir-
akhir ini sangat marak dan banyak tumbuh di Internet, termasuk di Indonesia yang tarifnya sangat murah. Namun, hanya sekadar mempunyai domain saja mungkin mudah, tetapi fasilitas dan layanan serta customer support itu yang harus menjadi prinsip setiap pemilik bisnis hosting center. Artikel ini menjelaskan cara membuat hosting sederhana dengan memanfaatkan webmin. Webmin ialah sebuah program berbasis web yang digunakan untuk membantu meng-administrasi sistem berbasis sistem operasi Unix/Linux. Contoh kali ini
Gambar 1.1. Install modul virtual server.
penulis menggunakan Linux Red Hat 9.0. Syarat utama ialah di komputer Anda harus sudah terinstalasi webmin. Silakan download webmin versi terbaru di http://www. webmin.com. Proses instalasinya tidak penulis tunjukkan karena di edisi InfoLINUX yang terdahulu sudah dibahas dengan jelas. Atau jika Anda menggunakan distro yang lebih baru, misalnya Mandrake 10.0, sudah menyertakan webmin. Hanya dengan satu IP publik kita dapat membuat banyak domain. Dan setiap domain mempunyai fasilitas e-mail tersendiri dan juga memberikan layanan ftp untuk transfer file. Apabila Anda mengombinasikan semua jenis server di atas, maka akan membutuhkan proses yang lama. Untuk membuat DNS Server saja membutuhkan banyak waktu, belum lagi ftp server dan lainnya. Untuk itulah webmin menyertakan modul yang bernama virtual server. Modul ini cocoknya digunakan untuk membuat hosting center kecil-kecilan atau untuk sebuah kelompok organisasi/perusahaan. Modul virtual server mendukung penggunaan quota, database server, apache web server, mail server, dan ftp server. Untuk mendapatkan modul virtual server terbaru, Anda dapat men-dowloadnya langsung dari situs webmin yaitu http:// www.webmin.com.
Gambar 1.2. Instalasi sukses.
Gambar 1.4. Recheck konfigurasi.
66
INFOLINUX 04/2005
Gambar 1.3. Icon Virtualmin Virtual Servers
www.infolinux.web.id
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL Virtual Hosting Center
1. Instalasi
2. Konfigurasi
Penulis menggunakan virtual server dengan paket virtual-server-1.81.wbm.gz. Untuk menginstalasi modul webmin ini, silakan buka webmin https://192.168.0.1:10000/ webmin/edit_mods.cgi. Untuk menunjukkan kemudahan dan fleksibilitas, penulis mengakses URL di atas dari MS Windows dan penulis menggunakan jenis upload file. Artinya file tidak harus berasal dari sistem Linux itu sendiri tetapi dari komputer di mana kita pergunakan sekarang. Kemudian, klik Install Module. Pastikan bahwa instalasi modul baru berjalan sukses seperti gambar 1.2. Secara otomatis virtual server akan masuk ke bagian server. Modul ini bernama Virtualmin Virtual Servers.
Ketika kali pertama membuka https://192. 168.0.1:10000/virtual-server/, virtual server akan mengecek keberadaan atau konfigurasi quota, web server (apache), database (mysql), mail server (postfix), dan aplikasi pendukung yang lainnya. Mungkin ketika sistem di cek konfigurasinya, error, atau kesalahan yang umum akan terjadi, misalnya error konfigurasi Postfix:
Gambar 1.6. Konfigurasi virtual domains.
Gambar 1.5.Error konfigurasi Postfix.
Gambar 1.7. Error mysql.
Gambar 1.8. Disable mysql.
www.infolinux.web.id
INFOLINUX 04/2005
67
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Virtual Hosting Center
Gambar 1.9. Virtual server sukses dikonfigurasi.
Gambar 1.11.Membuat domain baru.
Gambar 1.10. Menu webmin virtual-server.
Gambar 1.13. Tes web domain iftah.com.
Kemungkinan Anda akan mengalami seperti gambar 1.5. Error tersebut tampil karena Postfix belum dikonfigurasi agar support virtual domain. Buka webmin http s://192.168.0.1:10000/postfix/virtual.cgi. Isikan Domain mapping lookup tables : hash:/etc/postfix/vitual, seperti gambar 1.6. Simpan dan restart postfix. Kesalahan yang tampak pada gambar 1.7 ialah di karenakan mysql tidak terinstalasi. Untuk men-disable dukungan virtual-server terhadap mysql, klik module configuration. Pilih No pada opsi MySQL setup and configuration enable. Klik Save. Kembali ke konfigurasi virtual server (https://192.168.0 .1:10000/virtual-server). Apabila semua aplikasi pendukung virtual server berjalan dengan semestinya maka akan tampil seperti gambar 1.9. Kembali lagi ke https://192.168.0.1:10000/virtualserver/. Untuk membuat domain baru, klik Add a new virtual server.
68
INFOLINUX 04/2005
Dari gambar 1.11, domain baru yang akan dibuat adalah iftah.com. Dengan mempunyai mail server, DNS server, web server, untuk konfigurasi domain dapat login ke webmin. Kemudian, klik Create Server. Nah, sekarang bukalah di browser http://
Gambar 1.12. Menyimpan konfigurasi.
iftah.com untuk tes web domain iftah.com. Cara mengupload file untuk website, gunakan program ftp untuk mengakses ftp.iftah.com. Alamat ftp.iftah.com ini otomatis dibuat ketika Anda membuat domain iftah. com.
Gambar 1.14. Upload ke ftp.iftah.com.
www.infolinux.web.id
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Virtual Hosting Center
Untuk melihat hasilnya, buka kembali http://iftah.com. Nah, membuat domain itu mudah, bukan? Anda juga dapat menginstalasi squirrelmail sebagai webmail server dan mengonfigurasi squirrelmail, seperti yang pernah dibahas juga di InfoLINUX. Untuk melakukan konfigurasi domain iftah.com via webmin, buka URL https://iftah.com:10000. Login dengan username iftah dan password yang sudah diisi ketika kali pertama membuat domain. Fasilitas user agar dapat login ke webmin, dapat saja Anda disable. Silakan mengonfigurasi ulang virtual server jika tidak ingin user dapat login ke webmin. Bila login berhasil, hanya menu untuk user saja yang dapat ditampilkan. Modul virtual server ini sangatlah cocok jika ingin dijadikan sebagai modal untuk membuat hosting center. Tentunya Anda harus tetap selalu update modul dan webmin ketika memutuskan webmin digunakan untuk administrasi sistem dan web hosting.
3. Keamanan Kita harus menyadari bahwa di dunia ini tidak ada sistem operasi yang aman. Sistem operasi dikategorikan dalam software. Sedangkan komponen yang membuat lebih aman ialah brainware, yaitu penanggung jawab sistem atau administrator. Banyak langkah yang dapat dilakukan untuk mengamankan sistem. Salah satu cara mengamankan webmin, ialah mengganti default port 10000, misalnya menjadi 29152. Berikut ini cara mengubah port: [root]# cd /etc/webmin [root@syafii webmin]# vi
Gambar 1.16. Mengakses webmin iftah.com.
miniserv.conf
Ubah baris port=10000 menjadi port=29152, lalu simpan dan restart webmin: [root]# /sbin/service webmin restart
Umumnya, langkah awal sebelum cracker mulai bekerja ialah melakukan scanning port. Dari tindakan scanning akan dapat mengetahui service apa saja yang sedang berjalan. Untuk menangkap tindakan scanning ini, penulis penggunakan portsentry. Paket portsentry dapat di-download dari http://www.psionic.com atau juga di http:// www.rpmfind.net. Salah satu fungsi portsentry ialah memasukkan IP address komputer yang melakukan scanning ke dalam file /etc/hosts. deny. File /etc/hosts.deny ini akan diakses oleh sistem untuk mengecek IP address komputer mana saja yang tidak diperbolehkan mengakses ke dalam sistem. Ketika seseorang melakukan scanning port maka secara otomatis IP address-nya akan dimasukkan ke dalam /etc/hosts.deny. Sebelum IP address tersebut dihapus dari /etc/hosts. deny, selamanya tidak dapat mengakses inet service komputer kita. Berikut ini langkah kompilasi dan instalasi portsentry dari source. Sebelum kompilasi, pastikan di komputer anda sudah terinstall C Compiler, GCC, lalu copy file source portsentry ke direktori /usr/local/src. [root@syafii src]# tar zxvf portsentry-1.1.tar.gz [root@syafii src]# cd portsentry-1.1 [root@syafii portsentry-1.1]#
Gambar 1.15. File website berhasil diupload.
make linux [root@syafii portsentry-1.1]# make install
File hasil instalasi terletak di /usr/local/ psionic/portsentry. Perintah menjalankan portsentry: [root]# /usr/local/psionic/ portsentry/portsentry -tcp [root]# /usr/local/psionic/ portsentry/portsentry -udp [root]# /usr/local/psionic/ portsentry/portsentry -stcp [root]# /usr/local/psionic/ portsentry/portsentry -atcp [root]# /usr/local/psionic/ portsentry/portsentry -sudp [root]# /usr/local/psionic/ portsentry/portsentry -audp
Agar portsentry otomatis dijalankan ketika booting, tambahkan enam baris perintah di atas pada file /etc/rc.d/rc.local atau file lain yang dijalankan saat boot. Penulis hanya menunjukkan cara mudah dalam mengonfigurasi sistem dan server hosting. Untuk lebih detailnya silakan Anda mencoba sendiri. M. Syafii ([email protected] )
Gambar 1.17. Menu webmin iftah.com.
www.infolinux.web.id
INFOLINUX 04/2005
69
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Virtual Hosting Center
Network Traffic Monitoring dengan ntop Terkadang, tanpa kita sadari, traffic pada jaringan kita mengalami masalah. Dengan mata biasa, hal ini umumnya tidak dapat dideteksi. Untuk itu, kita membutuhkan program network monitoring untuk membantu mengamati apa yang sedang terjadi di dalam jaringan kita. Ntop adalah salah satu program network monitoring yang bisa diandalkan. Kita akan membahas network monitoring sederhana mempergunakan ntop.
A
dministrator suatu jaringan umumnya harus selalu memperhatikan kesehatan jaringan yang dikelola. Apabila dipersempit, administrator suatu jaringan harus tahu betul apa yang sedang terjadi pada server yang dikelolanya, atau, paling tidak, memiliki cara cepat untuk mengetahui apa yang terjadi. Untuk itu, berbagai tool dapat dipergunakan. Salah satunya adalah dengan mempergunakan ntop. Ntop adalah singkatan dari network top, yang berfungsi untuk memonitor jaringan dan mengumpulkan informasi tentang protokol dan host untuk ditampilkan. Dalam bekerja, ntop membutuhkan libpcap untuk penanganan paket secara
low level. Sebagia sebuah program network monitoring, ntop sangatlah luar biasa. Pertama, ntop dapat bekerja berbasiskan command line ataupun menampilkan bekerja dan menampilkan informasi di web. Yang kedua, ntop juga bisa dikembangkan dengan bantuan plugin sehingga memudahkan pengembang lain untuk menambahkan fitur ke dalam ntop. Sebuah pustaka, libntop bahkan disediakan bagi developer untuk mengakses internel ntop. Bagi Anda yang sering bekerja dengan jaringan, penampilan informasi via web pasti akan mengingatkan Anda pada MRTG (Multi Router Traffic Grapher). Ntop pada dasarnya tidak dikembangkan untuk bersa-
Interface web ntop.
70
INFOLINUX 04/2005
www.infolinux.web.id
ing dengan MRTG, namun lebih ditujukan untuk saling bekerja sama. Anda akan membutuhkan keduanya. Keduanya memang merupakan tool untuk menganalisa network packet. Keduanya juga bisa menampilkan informasi tentang jaringan. Namun, cara mendapatkan informasi dan tipe informasi yang ditampilkan berbeda. Lebih lanjut, MRTG bekerja menggunakan protokol SNMP (Simple Network Monitoring Protocol), sementara, ntop memroses network packet secara langsung. Ntop tidak ditujukan untuk bekerja dan memonitor beberapa jaringan. Ntop secara khusus memfokuskan penampilan infomasi untuk satu jaringan tunggal. Namun, ntop juga memiliki banyak kelebihan. Salah satunya adalah menampilkan informasi dengan sangat detil. Program-program network analyzer lain akan mendeteksi kesibukan yang sedang terjadi pada port 80 apabila terjadi request ke web server misalnya. Namun, ntop benar-benar menampilkan apa yang terjadi pada port dan protokol tersebut. Kelemahannya adalah, dengan melakukan pemrosesan kompleks pada network packet, ntop akan membutuhkan daya pemrosesan yang besar, terutama pada jaringan yang cukup besar. Selain itu, karena membutuhkan akses ke jaringan fisik (melalui akses langsung pada network card atau memanfaatkan netflow (Cisco) /sflow (www. sflow.org), maka kemampuan akses lintas jaringan akan terbatas. Beberapa catatan lanjut pada ntop adalah: ntop didesain untuk berfungsi sebagai hybrid packet analyzer, bukan analyzer
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL Virtual Hosting Center
IP Summary | Traffic.
murni untuk ethernet (layer 2), ataupun analyzer murni untuk TCP/IP (layer 3). Ntop mendapatkan data pada layer 2, yang dapat berarti ethernet ataupun protokol lain. Selain ethernet, ntop juga dapat bekerja dengan FDDI, PPP, RAW, dan token ring. Daftar protokol ini terus bertambah. Ntop (3.0) juga telah mendukung Ipv6. Informasi lebih lanjut mengenai ntop bisa didapatkan di www.ntop.org, dan dukungan untuk ntop bisa didapatkan di www. ntopsupport.com. Umumnya, berbagai distro populer yang telah memaketkan kemampuan server juga datang dengan paket ntop. Kalaupun tidak, Anda selalu bisa mencari paket ntop untuk distro Anda di Internet. Setelah instalasi dilakukan, umumnya, Anda dapat saja login sebagai root, dan kemudian menjalankan ntop tanpa memberikan opsi tambahan. Anda juga dapat langsung membuka web browser Anda dan mengakses ntop pada alamat http://localhost:3000. Ntop sebaiknya dijalankan oleh user yang memiliki hak akses rendah, dan kalau bisa, tidak memiliki akses login ke sistem. Berikut ini adalah contoh menjalankan ntop sebagai user biasa: # ntop
kan oleh root. Hal ini karena ntop membutuhkan akses ke perangkat jaringan. Namun, ketika Anda memberikan opsi -u nop seperti perintah sebelumnya, maka, setelah akses root tidak diperlukan lagi, maka ntop akan dijalankan oleh user yang bersangkutan. Pertama kali dijalankan, Anda akan diminta untuk memberikan password. Pada saat dijalankan, ntop akan mencari berbagai plug-in dan melakukan inisialisasi plugin yang bersangkutan. Plug-in dapat didisable dan di-enable melalui interface web
dengan sangat mudah. Mekanisme penggunaan plug-in pada ntop telah dioptimalkan sedemikian rupa dengan mempergunakan threading. Pada saat menjalankan program ntop, Anda mungkin akan mempergunakan beberapa opsi berikut: -u: berjalan sebagai user tertentu. Pada awal dijalankan, ntop harus dijalankan sebagai user root pada awalnya untuk dapat mengakses perangkat jaringan dalam modus promiscuous. Anda sebenarnya dapat pula meminta ntop untuk berjalan sebagai user non root dengan men-disable kemampuan bekerja dalam modus promiscuous ini. Gunakan opsi -s. -s: berjalan pada modus non promiscuous. Anda bisa menjalankan ntop sebagai user lain sejak awalnya. -P: Path untuk file database. Pastikan user yang menjalankan ntop dapat menulis pada direktori ini. -A: Untuk mengatur password admin. Secara default, setelah Anda mengatur password untuk kali pertama, ntop tidak akan meminta perubahan password. Anda dapat mempergunakan opsi ini untuk mengubah password admin. -d: menjalankan ntop sebagai daemon. -i : nama interface yang ingin dimonitor -p <list>: list protokol yang ingin dimo-
-u nop -P /tmp
Harap diperhatikan, untuk pertama-tamanya, ntop memang harus selalu dijalan-
All protocols | Traffic.
www.infolinux.web.id
INFOLINUX 04/2005
71
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Virtual Hosting Center
nitor. Sebagai contoh: -p http. -w <port>: mengubah port default http server. -K: masuk ke modus debug. Bagi Anda yang ingin mengetahui cara kerja ntop lebih lanjut, barangkali opsi ini akan menjadi menarik bagi Anda. -W <port>: menentukan port untuk https Untuk administrasi, sangat disarankan untuk mempergunakan interface web. Pembuat ntop telah mendesain agar penampilan informasi dan pengaturan dapat dilakukan dengan baik. Untuk penampilan informasi, plugin untuk PDA (PDAPlugin) bahkan tersedia untuk menampilkan informasi yang dapat dimengerti oleh PDA. Sementara, untuk tugas-tugas administratif, ntop akan meminta Anda untuk memasukkan password. Tampilan web ntop akan dibagi dalam dua frame. Frame atas akan berfungsi sebagai menu dan frame bawah akan berfungsi sebagai konten. Menu ntop akan berisikan sub menu. Klik terlebih dahulu menu ntop di baris atas, dan sub menu yang bersangkutan akan tampil di baris kedua. Menu admin akan berisikan banyak submenu. Beberapa diantaranya akan ditampilkan bersama dengan logo gembok, yang mana aksesnya akan membutuhkan password admin. Terdapat beberapa tugas administratif yang berguna:
Data dump.
ResetStats, berguna untuk mereset statistik. Users, berguna untuk melakukan manajemen user. Shutdown, berguna untuk menshutdown ntop langsung dari web. Plugin, berguna untuk pengaturan plugin Untuk mengaktifkan atau menonaktifkan plugin yang terdaftar, aktiflah di Admin|Plugin. Untuk menampilkan plug-
Pengaturan user.
72
INFOLINUX 04/2005
www.infolinux.web.id
in atau mempergunakan plug-in (untuk plug-in tertentu), kliklah link pada kolom View. Sebagai contoh, apabila Anda ingin mengakses ntop dari PDA, Anda akan mengakses PDA Plugin, atau dengan mengakses /plugins/PDAPlugin. Aktivasi plug-in dapat dilakukan dengan klik link aktifasi (toggle) yang berada pada kolom Active. Berapa plug-in masih dapat dikonfigurasi lebih lanjut. Kliklah nama plug-in yang berada dalam kolom Configure. Form konfigurasi akan ditampilkan. Hal lain yang berguna adalah menampilkan log ntop, yang bisa dilakukan dengan mengakses Admin|Log. Untuk pemecahan masalah lanjutan, terutama ketika meminta bantuan kepada pihak lain, Anda juga dapat meminta ntop untuk membuat dump file. Anda dapat mengakses fasilitas ini melalui menu Admin|Dump Data. Anda dapat meminta ntop untuk melakukan dumping berbagai data, dan dalam beraneka format. Anda bahkan dapat melakukan dumping ke dalam format XML, Perl, Python, dan PHP. Luar biasa, bukan? Di luar tugas-tugas administratif, Anda selalu bisa mempergunakan ntop untuk menampilkan berbagai informasi mengenai jaringan dengan mengakses berbagai menu yang tersedia. Cepat dan mudah karena berbasis Web. Selamat mencoba dan memanfaatkan ntop! Noprianto ([email protected] )
IKLAN
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
WxWindows
Pemrograman Multiplatform dengan WxWindows Bagian 2 dari 2 Artikel C++ adalah salah satu bahasa berorientasi objek yang matang dan telah digunakan dalam pembangunan banyak aplikasi skala besar. Dengan digabungkan dengan wx, kita bisa membangun aplikasi berbasis GUI yang canggih, dengan biaya yang tidak terlalu besar. Di artikel lanjutan ini, kita akan membahas cara pemrograman wx yang lebih baik lagi.
K
etika penulis beberapa lama berkenalan dengan open source, penulis merasa ingin melihat source code yang terbuka tersebut. Ingin mempelajari. Penulis memulai dengan aplikasi kecil yang dibuat dengan bahasa C/C++. Dari hasil membuka-buka source tersebut, penulis ternyata cukup terkejut karena beberapa hal berikut. Yang pertama. Rupanya, untuk membuat aplikasi yang kecil sekalipun, banyak sekali file source C/C++ yang beberapa di antaranya membutuhkan file lain. Sementara, ada satu atau dua file yang hanya berisikan beberapa baris kode. Hal ini bertentangan dengan pemahaman penulis tentang pembuatan program. Waktu itu, penulis berpendapat bahwa untuk membuat sebuah program dengan fungsi spesifik, mungkin file source yang dibutuhkan hanya satu atau dua, dengan sebagian besar fungsi/logika disimpan dalam satu atau dua file tersebut. Waktu itu, penulis benar-benar tidak mengerti alasan programmer aplikasiaplikasi tersebut untuk memisahkan kelas, kode, header dan lain sebagainya. Butuh waktu cukup lama untuk mengerti. Yang kedua, yang cukup membuat penulis sadar, rupanya file header sebisa mungkin tidak diisi dengan logika program. Kita telah membahas pemrograman C++ dan Wx di edisi yang lalu. Kita juga tidak melakukan separasi kelas, kode program dan header sehingga semua menumpuk dalam satu atau dua file. Di edisi ini, kita akan menulis ulang aplikasi kemarin menjadi lebih baik, lebih siap dikembangkan.
74
INFOLINUX 04/2005
Separasi kelas, kode, dan header Walaupun tidak wajib, sebaiknya kita memberikan separasi yang jelas antara setiap kelas dan definisi kelas serta kode-kode pembentuk kelas. Berikut ini, kita akan menuliskan aplikasi HelloWorld kita sebelumnya menjadi lebih bagus lagi. Hasilnya sama, tetap aplikasi Hello World. Pertama-tama, karena kita memiliki dua kelas (wxHelloWorld dan wxMainFrame), maka kita akan memiliki pula dua file untuk definisi kerangka kelas, sebuahlah dengan nama helloworld.h dan MainFrame.h Yang kedua, karena setiap header helloworld.h dan MainFrame.h hanya mendefinisikan kelas, kita perlu file pendukung untuk kode kelas wxHelloWorld dan wxMainFrame. Sebutlah dengan nama helloworld. cpp dan MainFrame.cpp. Dengan demikian, dari satu file (helloworld.cpp), program kita akan berkembang menjadi empat file (helloworld.h, MainFrame.h, helloworld.cpp dan MainFrame. cpp). Berikut ini adalah isi dari masing-masing file. helloworld.h (di header ini, kita hanya mendeklarasikan kelas wxHelloWorld): #ifndef HelloWorld_H #define HelloWorld_H class wxHelloWorld : public wxApp { public: virtual bool OnInit (); };
www.infolinux.web.id
DECLARE_APP (wxHelloWorld) #endif // HelloWorld_H
MainFrame.h (di header ini, kita hanya mendeklarasikan kelas wxMainFrame): #ifndef MainFrame_H #define MainFrame_H class wxMainFrame : public wxFrame { public: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size); }; #endif// MainFrame_H
MainFrame.cpp (di file ini, kita menuliskan kode-kode kelas wxMainFrame. Harap diperhatikan, kita perlu menggunakan header MainFrame.h): #include <wx/wx.h> #include “MainFrame.h” wxMainFrame :: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size): wxFrame ( (wxFrame *) NULL, -1, title, pos, size ) {
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
WxWindows
CreateStatusBar (2); SetStatusText (“Hello World”); };
.cpp.o : $(CXX) -c `wx-config -cxxflags` -o $@ $< all:
helloworld.cpp (di file ini, kita menuliskan kode-kode kelas wxHelloWorld. Harap diperhatikan, kita perlu menggunakan header helloworld.h dan MainFrame.h): #include <wx/wx.h> #include “helloworld.h” #include “MainFrame.h” IMPLEMENT_APP (wxHelloWorld) bool wxHelloWorld :: OnInit () { wxMainFrame *frame = new wxMainFrame (“Hello World”, wxPoint (50,50), wxSize (200,200)); SetTopWindow (frame);
frame -> Show (TRUE);
$(PROGRAM)
$(PROGRAM): $(OBJECTS) $(CXX) -o $(PROGRAM) $(OBJECTS) `wx-config --libs` clean: rm -f *.o $(PROGRAM)
Satu-satunya perubahan adalah dengan menambahkan MainFrame.o pada variabel OBJECTS. Kompilasi program kita kemudian dapat dilakukan dengan perintah yang sama. $ make -f makefile.unx g++ -c `wx-config --cxxflags` -o helloworld.o helloworld.cpp g++ -c `wx-config --cxxflags` -o MainFrame.o MainFrame.cpp g++ -o helloworld helloworld.o MainFrame.o `wx-config –libs`
Kompilasi kita bertambah satu baris, yaitu dengan kompilasi MainFrame.o secara terpisah. Kini, aplikasi kita siap dijalankan.
return TRUE;
Menambahkan kontrol lain dan menangani event
};
Kini, kita telah menuliskan kerangka kelas dan kode dengan benar. Setiap kelas satu file, dan separasi dilakukan antara definisi kelas dan kode. Namun sayangnya, makefile.unx kita menjadi ketinggalan zaman dengan pengubahan ini. Kenapa? Pada variabel OBJECTS, kita hanya mendeklarasikan objek helloworld.o. Kita perlu melakukan sedikit modifikasi agar makefile kita bisa digunakan. Berikut ini adalah makefile.unx yang baru: CXX = $(shell wx-config --cxx) PROGRAM = helloworld OBJECTS = helloworld.o MainFrame.o
Kini, aplikasi kita telah dapat menampilkan sebuah form kosong. Kita akan melengkapinya dengan menu bar, text control dan contoh penggunaan dialog untuk membuka file dan menampilkannya ke text control tersebut. Aplikasi kita juga akan memiliki sebuah about box yang sangat sederhana. Semua pengubahan ini akan dikerjakan pada kelas wxMainFrame. Oleh karena itu, file yang harus diedit adalah MainFrame.h dan MainFrame.cpp. Karena menu bar dan text control adalah milik dari wxMainFrame, maka kita akan mendeklarasikan pada bagian private kelas wxMainFrame. Berikut ini adalah file MainFrame.h yang baru: #ifndef MainFrame_H #define MainFrame_H
# implementation .SUFFIXES:
.o .cpp
enum {
www.infolinux.web.id
MENU_QUIT, MENU_ABOUT, MENU_OPEN }; class wxMainFrame : public wxFrame { public: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size); private: wxMenuBar *menubar; wxMenu *FileMenu; wxTextCtrl *textctrl; }; #endif// MainFrame_H
File ini belum sepenuhnya final karena belum melibatkan penanganan event. Namun, sampai langkah ini, kita telah memiliki tiga anggota private kelas yaitu menubar, FileMenu, dan textctrl. Berikut ini adalah file MainFrame.cpp yang baru (juga belum sepenuhnya final karena belum melibatkan penanganan event). #include <wx/wx.h> #include “MainFrame.h” wxMainFrame :: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size): wxFrame ( (wxFrame *) NULL, -1, title, pos, size ) { CreateStatusBar (2); SetStatusText (“Hello World”);
menubar = new wxMenuBar; FileMenu = new wxMenu; FileMenu -> Append (MENU_ ABOUT, “&About”, “Show about info...”); FileMenu -> AppendSeparator
INFOLINUX 04/2005
75
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
WxWindows
(); FileMenu -> Append (MENU_ OPEN, “&Open”, “Open file...”); FileMenu -> AppendSeparator (); FileMenu -> Append (MENU_ QUIT, “&Quit”, “Quit from application...”); menubar -> Append (FileMenu, “&File”);
SetMenuBar (menubar); textctrl = new wxTextCtrl (this, -1, wxString (“Halo”), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); Situs web wxWindows
};
Apabila dikompilasi ulang, maka kini Anda akan memiliki helloworld yang baru. Helloworld yang ketika dijalankan akan memiliki menu bar dan text control. Menu bar juga akan mengandung menu File dengan submenu About, Open, dan Quit. Sampai saat ini, apa yang kita miliki hanyalah pengenal untuk submenu About, Open, dan Quit. Kita belum memiliki event handling sama sekali. Katakanlah, untuk menangani setiap submenu, kita akan memiliki fungsi sendiri. Sebut saja dengan nama OnAbout, OnOpen, dan OnQuit. Kita perlu mengubah MainFrame.h untuk menambahkan deklarasi fungsi dan deklarasi tabel event. Berikut ini adalah isi MainFrame.h yang baru (dan final): #ifndef MainFrame_H #define MainFrame_H enum {
{ public: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size); void OnQuit (wxCommandEvent &event); void OnAbout (wxCommandEvent &event); void OnOpen (wxCommandEvent &event); protected: DECLARE_EVENT_TABLE (); private: wxMenuBar *menubar; wxMenu *FileMenu; wxTextCtrl *textctrl;
};
Kita menambahkan DECLARE_EVENT_ TABLE () untuk mendeklarasikan event tabel untuk setiap event yang akan diproses. Berikut ini adalah isi file MainFrame.cpp yang baru (dan final). #include <wx/wx.h> #include “MainFrame.h”
class wxMainFrame : public wxFrame
76
INFOLINUX 04/2005
wxMainFrame :: wxMainFrame (const wxString &title, const wxPoint &pos, const wxSize &size): wxFrame ( (wxFrame *) NULL, -1, title, pos, size ) { CreateStatusBar (2); SetStatusText (“Hello World”);
}; #endif// MainFrame_H
MENU_QUIT, MENU_ABOUT, MENU_OPEN
wxFrame) EVT_MENU (MENU_QUIT, wxMainFrame :: OnQuit) EVT_MENU (MENU_ABOUT, wxMainFrame :: OnAbout) EVT_MENU (MENU_OPEN, wxMainFrame :: OnOpen) END_EVENT_TABLE ()
BEGIN_EVENT_TABLE (wxMainFrame,
www.infolinux.web.id
menubar = new wxMenuBar; FileMenu = new wxMenu; FileMenu -> Append (MENU_ ABOUT, “&About”, “Show about info...”); FileMenu -> AppendSeparator (); FileMenu -> Append (MENU_ OPEN, “&Open”, “Open file...”); FileMenu -> AppendSeparator
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL WxWindows
(); FileMenu -> Append (MENU_QUIT, “&Quit”, “Quit from application...”); menubar -> Append (FileMenu, “&File”);
SetMenuBar (menubar); textctrl = new wxTextCtrl (this, -1, wxString (“Halo”), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); Connect (MENU_QUIT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnQuit); Connect (MENU_ABOUT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnAbout); Connect (MENU_OPEN, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnOpen);
}; void wxMainFrame :: OnQuit (wxCommandEvent &event) { Close (TRUE); }; void wxMainFrame :: OnAbout (wxCommandEvent &event) { wxMessageBox (“Hello World Example v0.1”, “About Hello World”, wxOK | wxICON_ INFORMATION, this); }; void wxMainFrame :: OnOpen (wxCommandEvent &event) { wxFileDialog *dlg = new wxFileDialog (this, “open a text
file”, “”,””, “All Files (*.*)|*.*|Text files (*.txt)|*.txt”, wxOPEN, wxDefaultPosition); if (dlg -> ShowModal () == wxID_OK) { textctrl -> LoadFile (dlg -> GetFilename () ); SetStatusText (dlg -> GetFilename (), 0);
Setelah dideklarasikan pada tabel event, kita secara eksplisit menghubungkan ID tertentu dengan fungsi yang telah dipersiapkan di constructor wxMainFrame. Connect (MENU_QUIT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnQuit); Connect (MENU_ABOUT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnAbout); Connect (MENU_OPEN, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &wxMainFrame :: OnOpen);
}; dlg -> Destroy (); };
Kita menambahkan cukup banyak kode ke dalam MainFrame.cpp kita. Berikut ini adalah penjelasannya: Pemberian event yang telah dideklarasikan secara protected pada definisi kelas wxMainFrame dilakukan dengan cara pembuatan tabel event: BEGIN_EVENT_TABLE (wxMainFrame, wxFrame) EVT_MENU (MENU_QUIT, wxMainFrame :: OnQuit) EVT_MENU (MENU_ABOUT, wxMainFrame :: OnAbout) EVT_MENU (MENU_OPEN, wxMainFrame :: OnOpen) END_EVENT_TABLE ()
Tabel event kita untuk saat ini hanya menangani EVT_MENU (), yaitu penanganan event dari menu. Setiap deklarasi isi tabel menggunakan ID yang telah dideklarasikan di dalam MainFrame.h. Setiap ID akan dihubungkan dengan fungsi yang telah disiapkan. Ada satu hal yang bisa kita pelajari di sini. Borland, sekitar tahun 1996 pernah mengumumkan bahwa Delphi memiliki shared event handling. Satu event handler yang bisa dipakai bersama-sama. Dengan wx, hal tersebut dapat dilakukan dengan mudah. Cukup berikan ID yang sama, atau handler yang sama, maka shared event handling bisa diimplementasikan.
www.infolinux.web.id
Fungsi wxMainFrame :: OnAbout () dan wxMainFrame :: OnQuit () kemudian dipersiapkan dengan isi masing-masing adalah penampilan message box dan keluar dari mainframe. Keluar dari mainframe yang merupakan frame utama berarti keluar dari aplikasi karena di wxHelloWorld :: OnInit (), kita tidak memiliki penanganan apa-apa lagi. Pembuatan dialog dapat dilakukan dengan sangat mudah. Yang perlu diperhatikan adalah bahwa kita membuat dialog secara dinamis dan menghancurkannya pula dengan pemanggilan method Destroy (). Membuka dan melakukan loading ke dalam text control dapat dilakukan dengan sangat mudah, hanya dengan memanggil method LoadFile (). Kini, lakukanlah kompilasi ulang. Dan, setelah itu, aplikasi kita telah siap digunakan. Cobalah untuk mengakses setiap menu itemnya. Bisa kita lihat, pemrograman GUI menggunakan pustaka wx dicapai dengan menggunakan API yang bersih dan potensial untuk dimengerti. Perbedaan dengan pemrograman a la Delphi misalnya adalah, bahwa kita mengerti betul setiap langkah pembuatan aplikasi kita. Mulai dari deklarasi kelas, menurunkan kelas, membuat event table, menambahkan kontrol dan lain sebagainya. Sampai di sini dulu perkenalan kita dengan wx. Kita akan terus melanjutkan dengan pembahasan wx lainnya. Selamat mencoba, dan sampai ketemu lagi! Noprianto ([email protected] )
INFOLINUX 04/2005
77