Note for English Readers

If I write the articles in Indonesian, I will write a summary in English so that you can read my articles too. After you read the summary and you feel that you need more information about that, please do not hesitate to contact me via e-mail that can be found in my profile.

Thank you for reading my blogs.

Thursday, October 29, 2009

Opini: Menggunakan Linux dan Open Source Software adalah suatu pilihan

-- For English readers, please apologize me ... I wrote this article in Indonesian only --

Artikel ini merupakan opini saya tentang penggunaan Linux dan Open Source Software (OSS) yang adalah pilihan bagi masing-masing individu. Diawali dengan 5 butir pemikiran pribadi berdasarkan pengalaman pribadi saya, saya menyimpulkan bahwa pilihan untuk menggunakan Linux dan OSS tidak dapat dipaksakan, tetapi, walaupun begitu, bagi komunitas pengguna Linux dan OSS, jika kita tidak mengenalkan Linux dan OSS pada komunitas bukan pengguna Linux dan OSS, bagaimana mereka bisa memilih untuk menggunakan Linux dan OSS? Tidak kenal Linux dan OSS, pasti tidak akan memilih Linux dan OSS.

Beberapa waktu yang lalu, saya pernah didebat oleh beberapa rekan kerja saya tentang keuntungan penggunaan Linux dan OSS seperti OpenOffice.org, Blender, Gimp, dll, dalam aplikasi sehari-hari. Mereka beropini, menggunakan Linux dan OSS itu sedikit untungnya tetapi banyak susahnya. Mereka mencontohkan jika mereka ingin menginstall program harus selalu memperhatikan dependencies dari program tersebut; belum lagi masalah konfigurasi yang "njlimet". Selain itu, upgrade programnya juga terlalu sering, sehingga cukup merepotkan. Lalu, mereka membandingkan dengan penggunaan sebuah propriatery operating system dan propriatery software-software lain yang sangat terkenal dan banyak digunakan. Menurut mereka, banyak sekali kemudahan-kemudahan yang dialami seperti instalasi program baru yang sangat mudah dan upgrade yang sangat jarang. Salah satu statement mereka adalah "Hidup kok dibuat susah ... yang gampang-gampang saja ... ngapain susah-susah pakai Linux dan OSS padahal ada yang gampang ..."

Didebat seperti itu, saya, yang sejak akhir tahun 2003 telah secara total menggunakan Linux dan OSS, tidak langsung mendebat keras, tetapi, saya mulai menjelaskan, paling tidak, pemikiran dan opini saya tentang Linux dan OSS, sebenarnya apa sih alasan saya menggunakan Linux dan OSS ...

Pertama, dan juga tidak bisa ditawar-tawar lagi, masalah lisensi. Sebagian besar propriatery operating system dan software dijual dalam harga yang relatif mahal, terutama buat saya. Bisa-bisa, gaji saya sebulan habis untuk beli software ... itupun cuma dapat beberapa software ... Kalau membajak, sudah pasti, melanggar UU HAKI. Nah, solusi bagi siapa saja yang tidak berduit banyak dan ingin tidak melanggar UU HAKI, hanya satu: menggunakan Linux dan OSS. Dengan biaya yang relatif tidak mahal, kita bisa menggunakan Linux dan OSS dengan bebas, dalam koridor lisensi OSS seperti GPL, dsb.

Kedua, berdasarkan pengalaman saya, penggunaan Linux dan OSS membuat penghematan kapasitas hard disk yang sangat luar biasa. Sewaktu masih menggunakan propriatery operating system dan software, saya membutuhkan kapasitas hard disk minimal 20GB, dan itu sangat cepat "habis" jika banyak program yang diinstall. Bahkan, saya pernah mendengar keluh-kesah teman saya, kalau hard disk yang 160GB saja sekarang ini sudah tidak "layak" digunakan lagi karena propriatery operating system dan software yang baru sudah sangat "boros". Ketika saya beralih ke Linux dan OSS, kapasitas hard disk yang saya gunakan untuk operating system dan software tidak lebih dari 12 GB; itu sudah super sangat banyak OSS yang saya install pada Laptop saya. Sisanya, bisa "foya-foya" untuk data.

Ketiga, Linux dan OSS relatif "ringan", relatif tidak banyak menyedot resources PC/Laptop. Propriatery software dan operating system yang baru rata-rata mensyaratkan spesifikasi hardware yang sangat tinggi, entah itu prosesornya atau kapasitas RAM; sekarang ini, sebagian besar mensyaratkan penggunaan minimal prosesor sekelas Pentium 4 dan RAM 1GB, itupun dengan konfigurasi hardware minimal, sangat terasa "lemot"-nya (lemot = lambat). Untuk Linux dan OSS, spesifikasi hardware yang dibutuhkan lebih rendah dari itu; bisa saja prosesor sekelas Pentium II atau III, RAM cuma 512MB (itu jika menggunakan KDE atau Gnome). Bahkan, Linux dan OSS, beberapa masih bisa jalan pada komputer tua; tentu saja jangan menggunakan KDE atau Gnome :) ... Dari penjelasan tersebut, PC/Laptop yang berspesifikasi tinggi --jika menggunakan propriatery operating system dan software ternyata performance-nya biasa-biasa saja-- pasti akan terasa cepat, dengan kata lain, performance-nya akan "sip" jika menggunakan Linux dan OSS, untuk mengerjakan pekerjaan yang levelnya sama, dengan hasil yang sama pula ... so pasti ... hemat waktu mengerjakan dan tidak perlu jengkel menunggu loading software :) ...

Keempat, juga berdasarkan pengalaman saya, penggunaan Linux dan OSS akan membuat penggunanya semakin mengerti proses yang terjadi saat booting, eksekusi program, cara kerja operating system, cara kerja driver, konsep networking, konsep multi user, bahkan, jika pengguna mempunyai skill programming yang baik dan mencoba untuk mengeksplorasi source code dari OSS maka pengguna tersebut akan mendapatkan banyak sekali pengetahuan yang tidak ternilai harganya untuk pengembangan diri. Saya, sebagai seorang dosen, sering mendapatkan hal-hal baru yang dulunya belum pernah saya ketahui, dan pengetahuan baru itu dapat memperkaya saya saat saya mengajar. berdiskusi, serta membimbing mahasiswa-mahasiswa saya dalam hal Arsitektur Komputer, Programming, Networking, dan Embedded System. Hal inilah yang terus-menerus memacu saya untuk mengoprek Linux dan OSS.

Kelima, yang ini akan terasa sangat idealis, penggunaan Linux dan OSS tidak membuat saya terikat pada suatu perusahaan atau sekelompok orang yang eksklusif, tertutup, dan berorientasi total pada profit. Memang, dalam dunia industri dan perdagangan, profit itu yang terutama dan pasti ada usaha-usaha khusus untuk "mengamankan" profit, misalnya, dengan cara meng-"close" akses-akses yang dapat mengurangi peningkatan profit seperti menutup source code, memasang dongle hardware, dsb. Itu wajar. Akan tetapi, sebagai anggota suatu komunitas sosial, apa salahnya jika share kepada orang lain yang memang membutuhkan tetapi mengalami keterbatasan untuk mendapatkan. Pemikiran saya, misalnya, suatu perusahaan pengembang software membebaskan penggunaan software untuk kalangan pelajar dan organisasi sosial, perusahaan tersebut masih tetap dapat memperoleh profit pada beberapa waktu yang akan datang; karena pelajar yang terbiasa menggunakan software tersebut, saat bekerja di suatu perusahaan lain, pasti akan menyarankan atasannya untuk menggunakan software tersebut, sehingga perusahaan tersebut akan membeli lisensi penggunaan software dari perusahaan pengembang software itu --> ini kan menghasilkan profit! Contoh lain, karena pelajar tersebut telah menyarankan penggunaan software tersebut, perusahaan tempat pelajar tersebut bekerja bisa membeli jasa technical support dari perusahaan pengembang --> profit lagi! Jadi, perusahaan-perusahaan pengembang software yang tidak sekedar mengutamakan profit, kelihatannya rugi di awal-awal, tetapi, setelah beberapa waktu lamanya, mereka akan menuai profit yang besar. Konsep inilah yang diterapkan oleh perusahaan-perusahaan pengembang OSS dan free software seperti Trolltech (kelihatannya sekarang telah diakuisisi oleh Nokia) dengan Qt-nya, RedHat dengan RHEL, Fedora-nya, Novell dengan SUSE Enterprise-nya, Sun dengan Java, Open Solaris, OpenOffice.org, Virtual Box-nya, dsb. Perusahaan-perusahaan tersebut tidak bangkrut gara-gara share dengan komunitas, malahan, mereka semakin unjuk gigi sehingga perusahaan pengembang propriatery software perlu mewaspadai mereka dalam persaingan industri software.

Nah ... berdasarkan kelima pemikiran/opini saya itu, saya menyimpulkan bahwa sebenarnya penggunaan Linux dan OSS itu merupakan pilihan individu, tidak dapat dipaksakan, karena tiap individu mempunyai pemikiran sendiri-sendiri tentang apa yang dianggap baik dan bermanfaat. Bagi yang suka menggunakan propriatery software, silakan saja, asal tidak melanggar hukum. Bagi pengguna OSS, silakan menggunakan dengan bebas dalam koridor lisensi yang biasanya disebutkan pada dokumen license.txt.
Logikanya, bagaimana mereka bisa memilih menggunakan OSS jika mereka tidak mengenal OSS?
Akhir kata, bagi saya dan pengguna OSS, dalam mempopulerkan OSS, kita perlu mengenalkan OSS kepada semua pengguna propriatery software, minimal, beri kesempatan kepada mereka untuk "mencicipi" OSS, selanjutnya terserah mereka ... Logikanya, bagaimana mereka bisa memilih menggunakan OSS jika mereka tidak mengenal OSS? Hal ini yang saya lakukan di laboratorium. Mahasiswa semester dua saya kenalkan dengan Linux dan OSS; mereka menggunakannya dalam waktu satu semester. Selanjutnya ... terserah mereka. Berdasarkan pengalaman saya, paling tidak sekitar 30% - 40% dari mereka, tertarik untuk mencoba Linux dan OSS lebih dalam. Langkah saya juga diikuti oleh dosen-dosen dari jurusan, fakultas, dan departemen lain yang juga mengenalkan OSS untuk kegiatan perkuliahan dan laboratorium, seperti penggunaan R untuk statistik, Maxima serta wxMaxima untuk matematika, OpenOffice.org untuk dokumentasi laporan mahasiswa, NetKit dan ns-2 untuk networking, dan Scilab untuk aplikasi signal processing.

Wednesday, October 28, 2009

3-in-1 USB Converter

Berawal dari permasalahan yang dialami oleh 2 mahasiswa saya, yang pada saat itu membutuhkan suatu ARM Bootloader yang bisa digunakan pada Laptop --ARM Bootloader yang tersedia adalah ARM Bootloader yang menggunakan Serial Port (COM Port), padahal port ini sudah tidak ada lagi pada Laptop--, saya mulai mendesain suatu ARM Bootloader yang menggunakan USB Port menggunakan IC FT232RL keluaran FTDI Limited. Dalam pengembangan desain, saya mulai berpikir untuk mengakomodasi beberapa kebutuhan dasar mahasiswa saya yang lain dan juga dosen-dosen yang lain, yang mana mereka membutuhkan suatu converter dari USB ke UART untuk sistem minimum berbasis mikrokontroler atau mikroprosesor serta converter dari USB ke ZigBee untuk aplikasi image processing pada mobile robot yang dikendalikan dari Laptop secara wireless. Akhirnya, jadilah suatu alat yang saya beri nama 3-in-1 USB Converter, yang seharusnya dapat digunakan pada semua platform (sudah dites dan dapat digunakan pada platform Linux dan Windows). Untuk diketahui bahwa dalam mendesain converter ini, saya secara total menggunakan Open Source Software yang berjalan pada sistem operasi Linux, seperti: gEDA, pcb, minicom, Code::Blocks, wxWidgets, dan libftdi. Hal ini membuktikan bahwa Open Source Software sudah berkembang dengan pesat dan dapat diandalkan dalam aplikasi sehari-hari, mulai dari aplikasi level designer, developer, sampai dengan aplikasi level end-user.

Skema rangkaian dari 3-in-1 USB Converter dapat dilihat pada gambar berikut. Sebagai catatan, hanya gunakan 1 fungsi untuk 1 penggunaan, maksudnya, jika converter ini digunakan sebagai USB to UART Converter, sebaiknya jangan digunakan sebagai USB to ZigBee Converter atau ARM Bootloader. Hal ini dikarenakan jalur komunikasi pada IC FT232RL digunakan secara shared pada ketiga fungsi ini; converter ini hanya menggunakan 1 IC FT232RL dan IC ini hanya mempunyai 1 channel jalur komunikasi. Ada 3 jumper yang digunakan untuk konfigurasi seperti tegangan supply dari I/O --J2-- (+5V atau +3.3V), asal tegangan supply --J1-- (USB-powered atau self-powered), dan aktivasi ARM Bootloader --J3--.

Desain menggunakan gEDA dan pcb:




Hasil akhir dari 3-in-1 USB Converter ini dapat dilihat pada gambar berikut:





Pesan dmesg saat 3-in-1 USB Converter dihubungkan pada Laptop:



Setting minicom dan tampilan pada minicom saat ujicoba:



 

Program ujicoba yang di-develop menggunakan Code::Blocks dan library wxWidgets dan libftdi:





Jika Anda tertarik untuk memperoleh 3-in-1 USB Converter yang siap pakai, silakan menghubungi saya via e-mail untuk informasi lebih lanjut. Alamat e-mail saya dapat dilihat pada Profile saya.

Referensi:

Summary:
When I see that 2 of my students had difficulty in their undergraduate final project since there was no USB ARM Bootloader that could be used, I decided to develop USB ARM Bootloader using IC FT232RL, manufactured by FTDI Limited. In next step of development, I tried to accomodate the needs of my other students and my colleagues that need USB to UART converter for serial communication between PC/Laptop and microprocessor- or microcontroller-based minimum system and USB to ZigBee converter for image processing applied to mobile robot system that is controlled by PC/Laptop wirelessly. Please note that I totally used Open Source Software, such as gEDA, pcb, minicom, Code::Blocks, wxWidgets, dan libftdi, in phase of development and testing of the 3-in-1 USB Converter.

There are some notes:
  • You cannot use all functions in one time, because FT232RL has only one channel. I shared this channel for all functions. 
  • There are 3 jumpers for configuration: J1 for USB-powered or self-powered I/O selector, J2 for selecting +5V or +3.3V supply of I/O, and J3 for activating ARM Bootloader function.

You can look all of pictures above for schematics, the product, etc. For more information about this product, please do not hesitate to contact me via e-mail (see my profile).

Thursday, October 15, 2009

Slackbuild script untuk AVR Development Software

Bagi pengguna Linux dan ingin bereksperimen dengan mikrokontroler AVR, sekarang ini Anda sudah dapat bereksperimen secara penuh pada platform Linux. Beberapa development software yang dibutuhkan adalah kelompok avr-binutils, avr-gcc, avr-gdb, avr-libc, dan avrdude. Sebagai firmware downloader, Anda dapat menggunakan USBasp yang didesain oleh Thomas Fischl, yang juga sudah saya bahas pada blog saya ini. Untuk para Slackers yang ingin mencoba mikrokontroler AVR, Anda dapat menginstall semua development software dari mikrokontroler AVR dengan Slackbuild script. Anda tinggal mendownload script dan source file lalu jalankan script-nya.

Yang telah saya kerjakan dengan Slackbuild script, setelah selesai mendownload semuanya, saya mencari versi terbaru pada saat itu. Ternyata, hanya Slackbuild script untuk gcc saja yang perlu diedit karena saya memutuskan menggunakan gcc versi 4.4.1 daripada gcc versi 4.3.4. Jadi, saya edit baris ini dari avr-gcc.SlackBuild:

VERSION=${VERSION:-4.3.4}

menjadi:

VERSION=${VERSION:-4.4.1}

Untuk semua Slackbuild script, karena saya menggunakan Slackware64 13.0, maka baris ini:

ARCH=${ARCH:-i486}

saya edit menjadi:

ARCH=${ARCH:-x86_64}

Catatan: jika Anda menggunakan Slackware 13.0, Anda tidak perlu mengedit baris tersebut.

Setelah selesai menjalankan semua Slackbuild scripts, saya mendapatkan paket-paket berikut ini:
  • avr-binutils-2.19.1-x86_64-1_SBo.tgz
  • avr-gcc-4.4.1-x86_64-1_SBo.tgz
  • avr-gdb-6.8-x86_64-1_SBo.tgz
  • avr-libc-1.6.7-x86_64-2_SBo.tgz
  • avrdude-5.8-x86_64-1_SBo.tgz
yang selanjutnya saya install menggunakan command installpkg.

Referensi:


Summary:
For Slackers that want to make experiments on AVR microcontrollers, now, you have all of AVR Development Software running in your Slackware. You can use Slackbuild scripts to build installer packages of these: avr-binutils, avr-gcc, avr-gdb, avr-libc, and avrdude. The only script that you have to edit if you want to build newer version is avr-gcc.SlackBuild, please edit the following line:

VERSION=${VERSION:-4.3.4}

become this:

VERSION=${VERSION:-4.4.1}

For Slackware64 users, as usual, you have to change the following line:

ARCH=${ARCH:-i486}

to be like this line:

ARCH=${ARCH:-x86_64}

The packages that I have been built using Slackbuild scripts:
  • avr-binutils-2.19.1-x86_64-1_SBo.tgz
  • avr-gcc-4.4.1-x86_64-1_SBo.tgz
  • avr-gdb-6.8-x86_64-1_SBo.tgz
  • avr-libc-1.6.7-x86_64-2_SBo.tgz
  • avrdude-5.8-x86_64-1_SBo.tgz
then I installed them using installpkg command.

Wednesday, October 14, 2009

USBasp

USBasp adalah sebuah USB In-circuit programmer untuk mikrokontroler AVR yang didesain oleh Thomas Fischl. Penggunaannya cukup mudah dan dapat dijalankan pada platform Linux, Mac OS X, maupun Windows. USBasp dapat men-download firmware ke internal flash dari mikrokontroler AVR yang menjadi targetnya dengan kecepatan maksimal 5 kB/s dan tersedia jumper untuk men-set USBasp agar support mikrokontroler AVR target yang mempunyai low clock speed (< 1.5MHz); biasanya, jika kita membeli mikrokontroler AVR yang baru, by default, kebanyakan AVR tersebut di-set menggunakan internal clock frekuensi 1MHz (untuk mengubah setting clock ini, Anda harus memprogram LFUSE, HFUSE, dan/atau EFUSE; silakan lihat datasheet dari mikrokontroler AVR yang digunakan untuk lebih rincinya).

Berdasarkan skema rangkaian dari Thomas Fischl, saya membuat artwork PCB untuk USBasp yang nantinya saya, beserta Laboratorium Otomasi dan Sistem Embedded, Jurusan Teknik Elektro, Universitas Surabaya, gunakan untuk men-download firmware ke internal flash dari mikrokontroler AVR, seperti untuk praktikum mata kuliah Mikrokontroler dan proyek pembuatan intelligent robot. (hardware robot yang digunakan pada Ubaya Robosoccer Competition 2009 dikembangkan menggunakan mikrokontroler AVR). Program yang saya gunakan untuk menggambar ulang skema rangkaian serta membuat artwork PCB-nya adalah gEDA dan pcb, suatu GPL'ed Electronic Design Automation Suite yang sangat layak diandalkan, dan terlebih lagi (dan yang paling penting), program ini berjalan di atas platform Linux. Gambar berikut ini menunjukkan tampilan gEDA dan pcb untuk pembuatan USBasp.



Setelah dicetak dan disolder seluruh komponennya, serta, firmware USBasp telah di-download-kan ke ATmega8 yang digunakan pada USBasp ini, maka hasil akhirnya dapat dilihat pada gambar berikut ini:



USBasp in action menggunakan AVRDude sebagai ISP Software:



Jika Anda tertarik untuk memperoleh USBasp yang siap pakai atau masih dalam bentuk belum disolder, silakan menghubungi saya via e-mail untuk informasi lebih lanjut. Alamat e-mail saya dapat dilihat pada Profile saya.

Solusi jika USBasp tidak dapat digunakan oleh user biasa di Linux
Jika pada saat Anda menggunakan USBasp sebagai user biasa di Linux, ternyata USBasp Anda tidak dapat digunakan, tetapi saat Anda sebagai root atau superuser, ternyata USBasp tersebut dapat digunakan, berarti Anda sebagai user biasa tidak mempunyai hak akses ke USBasp. Solusi untuk masalah ini cukup mudah. Anda harus membuat file baru dengan nama 99-usbasp-rules pada direktori /lib/udev/rules.d yang isinya sebagai berikut:

# allow users to claim the device
ACTION=="add" SUBSYSTEM=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE="0664", GROUP="plugdev"

untuk idVendor dan idProduct dapat Anda ketahui melalui command: lsusb (dengan catatan Anda sebagai root atau superuser dan USBasp Anda terhubung ke PC/Laptop). Setelah file tersebut di-save, re-plug USBasp Anda dan Anda akan mempunyai hak akses ke USBasp. Jangan lupa, pastikan user biasa tersebut telah menjadi group member dari plugdev.

Referensi:


Summary:
This article shows USBasp, a USB in-circuit programmer for Atmel AVR Controllers, designed by Thomas Fischl. I have created PCB artwork for USBasp using gEDA and pcb, a GPL'ed Electronic Design Automation Suite that is running on Linux, then have applied it to all activities/projects related to AVR microcontroller in my laboratory,  such as laboratory session for my students and intelligent robot developments.

If your USBasp cannot be used by user, but it can be detected and used by root, you have to add an udev rule in directory /lib/udev/rules.d through these steps (as a superuser or root):
  • create new file: 99-usbasp-rules 
  • add these lines below to the file (you can obtain idVendor and idProduct by lsusb command as root and make sure your USBasp connected to your PC/laptop):
ACTION=="add" SUBSYSTEM=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE="0664", GROUP="plugdev"
  • save the file
  • copy it to /lib/udev/rules.d (note: you must be a root to do this)
  • re-plug your USBasp
Now, you can use your USBasp in user mode.

Monday, October 12, 2009

Kompilasi dan Instalasi OpenCV 2.0.0 pada Linux -- Compiling & Installing OpenCV 2.0.0 on Linux --

Seperti yang telah saya janjikan pada tulisan sebelumnya, sekarang saya ingin membagikan pengalaman saya saat melakukan kompilasi dan instalasi OpenCV 2.0.0 di laptop saya. Distro Linux yang saya gunakan adalah Slackware64 13.0, tapi, menurut saya, pengalaman saya ini merupakan pengalaman untuk Linux secara umum, tidak tergantung distro. OK, kita mulai ...

Langkah pertama, sudah pasti, kita harus memastikan semua dependencies dari OpenCV 2.0.0 telah terinstall dengan baik pada PC/Laptop kita. Biasanya, untuk OpenCV, saya inginnya yang lengkap. Ada beberapa program yang merupakan dependencies dari OpenCV 2.0.0 yang "harus ada" (menurut kebutuhan dan mau saya), antara lain: xinelib, ffmpeg, libdc1394, v4l, swig, python, libjpeg, zlib, libpng, libtiff, libjasper. Untuk Slackware/Slackware64 13.0, beberapa dependencies seperti xinelib, swig, python, libjpeg, zlib, libpng, libtiff, dan libjasper telah terinstall; saya hanya perlu menambahkan ffmpeg, libdc1394, dan v4l. Mengenai cara mencari dan menambahkan dependencies, silakan dibaca pada manual distro masing-masing.

Setelah semua dependencies sudah terinstall, langkah kedua adalah kompilasi OpenCV 2.0.0. Untuk versi 2.0.0 ini, ada 2 cara kompilasi, yang pertama, cara klasik, menggunakan configure dan make; cara yang kedua adalah menggunakan cmake dan make. Saya telah mencoba kedua cara tersebut. Untuk yang menggunakan cmake, sebenarnya cara ini lebih mudah dan user-friendly (sejauh yang saya rasakan) tapi saat saya coba, setelah 85% proses kompilasi, muncul error.

# cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_LATEX_DOCS=ON ..

Jika tidak ada error, lalu:

# make

Error yang muncul:

...
Linking CXX shared library ../../lib/libcvaux.so
[ 84%] Built target cvaux
Scanning dependencies of target cvhaartraining
[ 84%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvboost.o
[ 84%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvcommon.o
[ 85%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvhaarclassifier.o
[ 85%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvhaartraining.o
[ 85%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvsamples.o
Linking CXX static library ../../lib/libcvhaartraining.a
[ 85%] Built target cvhaartraining
Scanning dependencies of target createsamples
[ 85%] Building CXX object apps/haartraining/CMakeFiles/createsamples.dir/createsamples.o
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libhighgui.so.2.0.0: undefined reference to `cvCreateCameraCapture_V4L(int)'
collect2: ld returned 1 exit status
make[2]: *** [bin/opencv_createsamples] Error 1
make[1]: *** [apps/haartraining/CMakeFiles/createsamples.dir/all] Error 2
make: *** [all] Error 2

Sampai sekarang, saya masih belum tahu sebabnya. Saya telah menanyakan ke forum OpenCV, belum ada jawaban, mungkin tidak ada yang mengalaminya, karena jika saya amati dari respon anggota forum, mayoritas bukan pengguna Linux.
Akhirnya, saya pakai cara klasik:

$ ./configure --with-xine --with-ffmpeg --with-1394libs --with-v4l --with-gtk --without-quicktime --enable-sse --with-swig --with-python --with-gthread

Jika tidak ada error, lalu:

$ make

Kompilasi sukses.

Langkah ketiga, install hasil kompilasi tersebut menggunakan make install. Pastikan Anda telah menjadi root user atau superuser saat menginstall:

# make install

Langkah terakhir adalah mencoba OpenCV 2.0.0. Kebetulan, 2 tahun lalu, saya pernah menulis di blog ini tentang cara membuat program dengan library OpenCV pada Linux. Program-program tersebut saya coba untuk di-compile ulang menggunakan library OpenCV versi 2.0.0 dan hasil kompilasinya dapat berjalan mulus pada laptop saya. Sekedar mengingatkan, cara kompilasi menggunakan library OpenCV adalah sebagai berikut:

$ g++ -Wall [nama_file].cpp -o [nama_file_output] `pkg-config opencv --cflags --libs`

Contoh:

$ g++ -Wall trial1.cpp -o trial1 `pkg-config opencv --cflags --libs`


Referensi:


Summary:
This article describes about compiling and installing OpenCV on Linux in general, not depending on Linux distros. All writings of this article are based on reference at OpenCV wiki site that you can find the link on Referensi. There are 4 steps that I've been worked that I will discuss.

First, make sure all dependencies of OpenCV have been installed properly. By my experience, I need xinelib, ffmpeg, libdc1394, v4l, swig, python, libjpeg, zlib, libpng, libtiff, and libjasper. For how to add dependencies, please consult to each distro's manual.

Second, compiling OpenCV. There are 2 methods, classical method (configure then make) and cmake method. When I tried cmake method using this command:

# cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_LATEX_DOCS=ON ..

I found an error when the process has been 85% finished.

...
Linking CXX shared library ../../lib/libcvaux.so
[ 84%] Built target cvaux
Scanning dependencies of target cvhaartraining
[ 84%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvboost.o
[ 84%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvcommon.o
[ 85%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvhaarclassifier.o
[ 85%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvhaartraining.o
[ 85%] Building CXX object apps/haartraining/CMakeFiles/cvhaartraining.dir/cvsamples.o
Linking CXX static library ../../lib/libcvhaartraining.a
[ 85%] Built target cvhaartraining
Scanning dependencies of target createsamples
[ 85%] Building CXX object apps/haartraining/CMakeFiles/createsamples.dir/createsamples.o
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libhighgui.so.2.0.0: undefined reference to `cvCreateCameraCapture_V4L(int)'
collect2: ld returned 1 exit status
make[2]: *** [bin/opencv_createsamples] Error 1
make[1]: *** [apps/haartraining/CMakeFiles/createsamples.dir/all] Error 2
make: *** [all] Error 2

Until now, I still don't know how to solve it. There is no response from OpenCV forum, perhaps, nobody got this error when compiling OpenCV 2.0.0.

I switched the method using classical method:

$ ./configure --with-xine --with-ffmpeg --with-1394libs --with-v4l --with-gtk --without-quicktime --enable-sse --with-swig --with-python --with-gthread

If no error, lalu:

$ make

I found no error until compilation finished.

Third, install the compiled OpenCV using (note: make sure you have been a root user or superuser when execute this command):

# make install

The last step is try to make a simple program that needs OpenCV library then compile it using:

$ g++ -Wall [input_file].cpp -o [output_file] `pkg-config opencv --cflags --libs`

Thursday, October 8, 2009

OpenCV 2.0.0 telah dirilis

-- Sorry, I wrote this article in Indonesian only. For information related to OpenCV 2.0.0 in English, please go to the OpenCV Wiki Site (see Referensi for the link) --

OpenCV merupakan suatu library kumpulan fungsi-fungsi pemrograman yang khusus ditujukan untuk real-time computer vision. Aplikasinya cukup luas, antara lain: Human-Computer Interaction (HCI), Object Identification, Segmentation and Recognition, Face Recognition, Gesture Recognition, Motion Tracking, Ego Motion, Motion Understanding, Structure From Motion (SFM), Stereo and Multi-Camera Calibration and Depth Computation, Mobile Robotics.

Bagi yang berkecimpung dalam bidang computer vision, terutama real-time computer vision, ada kabar yang menggembirakan, yaitu, pada tanggal 30 Sept. 2009, telah dirilis OpenCV versi 2.0.0. Beberapa penambahan fitur pada versi 2.0.0 ini bila dibandingkan dengan OpenCV 1.1pre1 antara lain:
  • bug fixed.
  • The brand-new C++ interface untuk sebagian besar fungsi pada OpenCV (cxcore, cv, highgui).
  • Build system menggunakan CMake.
  • Perbaikan pada fungsi-fungsi aljabar linier.
  • Support bicubic and Lanczos interpolation.
  • Support stereo camera (Linux).
  • Image dapat dikompress dan di-dekompress langsung pada buffer memory
  • Beberapa fungsi dasar dan operasi image processing (seperti operasi aritmatika, geometric image transformations, filtering, dll) telah mempunyai optimasi SSE2 sehingga fungsi-fungsi tersebut akan bekerja beberapa kali lebih cepat daripada versi sebelumnya.
  • dll.
Untuk lebih detilnya, silakan menuju ke link yang tercantum pada bagian referensi.

Instalasi OpenCV 2.0.0 for Linux dengan cara meng-compile sendiri dari source akan saya bahas kemudian. So ... be patient! :))

Referensi:

Friday, October 2, 2009

Menambahkan Multilib pada Slackware64 -- Enabling multilib on Slackware64 --

Seperti yang telah kita ketahui, Slackware 13.0 yang dirilis pada akhir Agustus 2009 lalu mempunyai 2 versi, yaitu: versi 32-bit dan versi 64-bit, sehingga sekarang ini, sudah ada 3 official port untuk slackware, yaitu: 32-bit port, 64-bit port, dan ARM-port. Slackware yang ARM port ditujukan untuk mesin yang dijalankan dengan prosesor berarsitektur ARM. Untuk 32-bit port, bisa dikatakan versi ini adalah versi normal release dari Slackware selama ini untuk komputasi 32-bit. Official port terbaru dari Slackware adalah 64-bit port, diberi nama Slackware64. Versi ini ditujukan untuk komputasi 64-bit yang sekarang ini sudah di-support oleh prosesor-prosesor keluaran Intel dan AMD yang terbaru. Untuk mengetahui apakah prosesor pada PC/laptop kita telah support komputasi 64-bit, silakan Anda membaca artikel tentang “Penggunaan cpuinfo untuk mengetahui apakah prosesor kita support komputasi 64-bit”.

Pada tutorial kali ini, akan dibahas mengenai penambahan multilib pada Slackware64 karena Slackware64 hanya menyediakan library untuk komputasi 64-bit sehingga Slackware64 tidak dapat menjalankan program-program yang hanya support komputasi 32-bit, seperti wine, skype, adobe reader, dan grub, serta tidak dapat meng-compile source code untuk komputasi 32-bit. Jadi, dengan kata lain, jika kita menghendaki Slackware64 yang terinstall pada PC/laptop kita dapat meng-compile dan menjalankan program-program untuk komputasi 32-bit, maka kita harus menyediakan library 32-bit yang dibutuhkan oleh program-program tersebut. Penambahan library 32-bit ini akan membuat Slackware64 kita mempunyai 2 jenis library, 32-bit dan 64-bit, oleh karena itu, kondisi ini disebut multilib, bentuk singkat dari multi-library. Untuk membuat Slackware64 kita menjadi multilib, caranya sangat mudah karena pada dasarnya, Slackware64 sudah multilib-ready, kita hanya tinggal meng-install-kan 32-bit libraries yang dibutuhkan. Eric Hameleers, sebagai pembuat dan maintainer Slackware64, telah menuliskan caranya pada http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:multilib. Tutorial ini akan membahas langkah-langkah yang telah dilakukan penulis untuk me-multilib-kan Slackware64 berdasarkan panduan dari Eric.

Pertama kali, Anda harus men-download paket-paket gcc dan glibc yang versi multilib serta compat32-tools dari website Eric (http://connie.slackware.com/~alien/multilib/). Paket-paket tersebut, pada saat tutorial ini ditulis, adalah sebagai berikut:

  • gcc-4.3.3_multilib-x86_64-4alien.txz

  • gcc-g++-4.3.3_multilib-x86_64-4alien.txz
  • gcc-gfortran-4.3.3_multilib-x86_64-4alien.txz
  • gcc-gnat-4.3.3_multilib-x86_64-4alien.txz
  • gcc-java-4.3.3_multilib-x86_64-4alien.txz
  • gcc-objc-4.3.3_multilib-x86_64-4alien.txz
  • glibc-2.9_multilib-x86_64-3alien.txz
  • glibc-i18n-2.9_multilib-x86_64-3alien.txz
  • glibc-profile-2.9_multilib-x86_64-3alien.txz
  • glibc-solibs-2.9_multilib-x86_64-3alien.txz
  • glibc-zoneinfo-2.9_multilib-noarch-3alien.txz
  • compat32-tools-1.0-noarch-12alien.tgz

File-file tersebut disimpan dalam satu directory, lalu jalankan command berikut:

# upgradepkg --reinstall --install-new *.t?z

Selanjutnya, Anda dapat men-download paket-paket compat32 dari website Eric (http://connie.slackware.com/~alien/multilib/slackware64-compat32/), dari directori a-compat32, ap-compat32, d-compat32, l-compat32, n-compat32, dan x-compat32. File-file tersebut merupakan paket slackware 32-bit yang sudah dikonversi menggunakan script yang ada pada compat32-tools, totalnya sekitar 60MB. Tentang cara konversi, bisa dibaca pada website Eric yang tertulis pada bagian referensi di akhir tutorial ini. Kemudian, jalankan command berikut untuk menginstall semua paket tersebut:

# installpkg *-compat32/*.t?z

Sebagai catatan, waktu penulis melakukan instalasi paket-paket ini, muncul pesan error saat instalasi pango-compat32, yaitu:

Executing install script for pango-compat32-1.22.4-x86_64-4.txz.

    /usr/bin/pango-querymodules-32: error while loading shared libraries: libXft.so.2: cannot open shared object file: No such file or directory

Jika Anda mengalami error ini, biarkan saja, nanti setelah semua paket terinstall, Anda hanya perlu mengulangi installasi pango-compat32:

# upgradepkg --reinstall pango-compat32-1.22.4-x86_64-4.txz

That's it all. Slackware64 Anda telah benar-benar multilib. Anda bisa menjalankan aplikasi 32-bit dan meng-compile source yang hanya dapat dijalankan pada slackware 32-bit. Gambar-gambar berikut menunjukkan bahwa aplikasi 32-bit seperti Adobe Reader 9.1.2 dan Skype 2.0.0.72 for Linux dapat dijalankan dengan mulus pada Slackware64 di laptop penulis serta pada saat booting, Anda akan melihat beberapa baris tambahan.


Catatan khusus bagi yang ingin meng-compile aplikasi 32-bit dari source, misalnya meng-compile wine, Anda harus mengkonfigurasi shell environment dengan menjalankan command berikut ini (lengkap dengan titiknya):

# . /etc/profile.d/32dev.sh


Cukup sekian tutorial multilib ini. Informasi lebih detil dapat Anda baca pada website Eric Hamaleers yang tercantum pada bagian referensi.

Referensi:


Summary:
This article shows how to enable multilib on Slackware64 in Indonesian based on Eric's work (see referensi). If you want to know more about enabling multilib on Slackware64 in English, I encourage you to read yourself at Eric's writing that is more detail than mine.