Maret 29, 2013

Idiomatic Programming


Salah satu hal yang menghambat orang untuk belajar adalah banyaknya istilah-istilah yang membingungkan. Semua domain pengetahuan biasanya memang mempunyai istilah-istilah sendiri dan meskipun ada satu istilah yang muncul di lebih dari satu domain pengetahuan, pengertiannya seringkali tidak sama sehingga pemahaman tentang istilah bersifat context-dependent (harus dilihat konteksnya). 

Memplejari pemrograman juga kurang lebih harus memahami berbagai macam istilah yang muncul. Kali ini saya akan menjelaskan sedikit tentang istilah "idiomatic programming". Jika anda sering membaca milis, newsgroup, atau berbagai macam resources di Internet, terutama yang terkait dengan pemrograman, barangkali akan sering mendengar istilah-istilah berikut:
  • Idiomatic Clojure
  • Idiomatic Go
  • Idiomatic C++
Saya petikkan berbagai pertanyaan (dalam Bahasa Inggris) di berbagai sumber di Internet terkait dengan hal ini:
Jawaban-jawaban dari pertanyaan tersebut tidak penting untuk tulisan ini, yang penting adalah pengertian dari "Idiomatic Clojure", "idiomatic way to ..... in Go". 

Kata "idiom" di luar konteks pemrograman digunakan untuk menunjukkan "bahasa yang khusus untuk suatu komunitas, orang, wilayah, atau kelas" (diambil dari http://www.merriam-webster.com/dictionary/idiom - ada beberapa arti lain yang mirip). Dalam konteks bahasa pemrograman, kata "idiom" sebenarnya mirip dengan hal-hal seperti itu. Jika kita membicarakan "Idiomatic Go" maka kita akan membicarakan pola / patterns yang dianggap baik untuk menyelesaikan masalah dengan sintaks dan semantik dari Go. Demikian juga jika menggunakan "Idiomatic Clojure", yaitu menunjukkan cara pemecahan masalah pemrograman yang baik dan sesuai dengan pola yang digunakan oleh para pemrogram Clojure. Ingat, seringkali ada banyak cara untuk melakukan suatu hal menggunakan suatu bahasa pemrograman tertentu. Bisa saja kode sumber kita betul dan menghasilkan sesuatu yang benar sesuai tujuan pembuatan program, tetapi tidak "idiomatic". Jadi, berbicara tentang hal ini sama saja berbicara tentang optimasi kode sumber. 

Dari mana mengetahui "Idiomatic Programming"? Tidak mudah memang. Yang jelas, jika ingin mempejari dari buku-buku, carilah buku atau dokumentasi semacam "Effective Java" (http://www.oracle.com/technetwork/java/effectivejava-136174.html), "Effective Go" (http://golang.org/doc/effective_go.html), atau berbagai macam buku tentang design patterns sertaprogramming patterns. Latihan serta bergaul dengan fellow programmers di seluruh dunia juga akan sangat membantu kita untuk memahami "Idiomatic Programming". 

Maret 11, 2013

Instalasi Arch Linux 2013.03.01 - Lebih Tidak Ramah dari Sebelumnya

Saat tadi menginstall Arch Linux menggunakan image tanggal 1 Maret 2013 (Arch 2013.03.01), saya cukup terkejut dengan "kemajuan" dari distro ini. Dulu pertama saya install distro ini (saya lupa tahunnya, sudah lama), masih relatif ramah dengan menu mode teks. Jika dulu ada menu dan antarmuka teks yang menuntun ke instalasi sistem Arch, saat saya mencoba kemarin, semua menu ini hilang. Semua digantikan dengan instruksi minimal dari Wiki dalam bentuk file install.txt di $ROOT_HOME/ (/root). Surprise!

Petunjuk instalasi minimal dan pada beberapa hal kurang jelas. Sangat disarankan untuk ada komputer lain yg terkoneksi ke Internet. Selain itu, bersiaplah menghadapi kekacauan. Instalasi disini saya laksanakan di Lenovo G480 dengan image iso Arch Linux dual (32 bit dan x86_64) 2013.03.01 dengan koneksi TelkomSpeedy. Langkah-langkah ini saya ambil dari petunjuk instalasi, tetapi dengan beberapa penjelasan yang lebih jelas supaya tidak terjadi kesalahan.

  • Download image .iso dari https://www.archlinux.org/download/ - saya menggunakan image dual 2013.03.01 - besarnya sekitar 500an MB.
  • Burn image tersebut kedalam CD/DVD
  • Disable UEFI dari setting BIOS (dilakukan sebelum masuk ke OS, di Lenovo G48 dilakukan dengan menekan F2)
  • Konfigurasikan di setup BIOS untuk booting dari DVD/CD.
  • Setelah booting, anda akan dihadapkan pada prompt superuser setelah otomatis login. 
  • Atur partisi lebih dulu: "# cfdisk /dev/sda", setelah itu buat partisi-partisi yang anda inginkan. Untuk kasus saya, hanya saya buat 495 GB dalam 1 partisi (/dev/sda1) serta 5 GB untuk swap.
  • Buat filesystem di partisi /dev/sda1: "# mkfs.ext4 /dev/sda1"
  • Mount partisi baru tersebut. Partisi tersebut akan kita gunakan untuk base system dari Arch Linux:  "mount /dev/sda2 /mnt".
  • Ethernet card tidak terdeteksi, tetapi WLAN0 langsung terdeteksi dan aktif, jadi tinggal kita setup saja. Pada posisi ini, kita masih berada pada mode booting CD. Pada file /etc/wpa_supplicant/wpa_supplicant.conf - isikan berikut ini (lainnya di buat sebagai baris komentar, depan diletakkan #)
network={
ssid="nama ESSID"
psk="password"
priority=1
}
  • Aktifkan WLAN0:
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf &
  • Karena DHCP sudah aktif, biasanya sudah akan bisa terkoneksi. Jika belum, matikan service DHCP:  "# systemctl stop dhcpcd.service". Setelah itu aktifkan DHCP menggunakan: "# dhcpcd wlan0".
  • Bootstrap base system: "# pacstrap /mnt base base-devel"
  • Install GRUB2: "# arch-root /mnt  -S base base-devel"
  • Install syslinux: "# arch-root /mnt -S syslinux"
  • Buat fstab (saya tambahkan untuk UUID / -U):
# genfstab -p -U  /mnt >> /mnt/etc/fstab

  • # arch-chroot /mnt
  • pacman -S elinks vim mc wpa_supplicant net-tools
  • Ikuti "Installation Guide", pada bagian "Configure the booloader: refer back to the appropriate article from the bootloader installation section", konfigurasi GRUB2 dengan cara menjalankan perintah2 berikut ini: (1) gtub-mkconfig (2) grub-install.
  • Set password untuk root: # passwd
  • Tekan Ctrl-D untuk keluar dari chroot.
  • umount /mnt
  • reboot
Berikutnya, anda tinggal mengikuti berbagai dokumentasi di wiki Arch Linux untuk instalasi software-software tambahan.