Archive for ‘Pemrograman Linux’

Juni 4, 2010

Instalasi dan Update Zeroshell (Retro)

(Artikel ini tersedia dengan Creative Commons Attribution-ShareAlike License)

Topik bahasan di artikel ini adalah:

  1. Instalasi router distro zeroshell-1.0-beta12 secara permanen (bukan live-CD/DVD) di storage IDE, SATA, dan USB atau device storage lainnya
  2. Update kernel dan initrd.gz dengan versi kernel lebih baru (2.6.31.4)
  3. Update root filesystem untuk kostumisasi aplikasi-aplikasi Zeroshell, misalnya untuk mensupport akses internetn lewat EVDO

Untuk otomatisasi langkah 2 dan 3, script shell (bash) juga ditampilkan. Saya menganggap Anda sedikit banyak telah paham dengan sistem dan program utility Linux serta pemrograman shell (sh), sehingga penjelasan lebih detail tidak diberikan. Bagi yang belum familiar, bisa mencarinya sendiri di internet.

read more »

Iklan
Mei 11, 2010

8Puzzle Generator

Kok 8Puzzle terus…? :D. Hehehe, mumpung lagi panas, jadi maklum yah…

Objektif permainan 8Puzzle adalah menyusun 9 cell dari keadaan awal (disebut initial state) menjadi susunan akhirnya (goal state). Nah, kalau di permainan nyatanya, permainan ini selalu solvable (dapat dipecahkan), walaupun susunan cell (tile)-nya diacak-acak. Tapi, kalau untuk program yang kita bebas untuk menentukan initial state dan/atau goal statenya, problem bisa saja tidak terpecahkan. Sehingga kalau kita buat algoritma untuk memecahkan 8puzzle, perlu ada testset yang benar-benar bisa dipecahkan.

Saya mencoba membuat program 8puzzle generator untuk membangkitkan testset untuk menguji algoritma yang diimplementasikan di program 8puzzle. Sederhana saja sih. Programnya bisa didownload di sini (untuk Windows) dan di sini (untuk Linux). Belum ada option untuk mengubah goalstatenya. Jadi, menjalankannya langsung dari konsole (Linux/Windows) dengan “./gen8puzzle” atau “gen8puzzle.exe

read more »

Tag:
Mei 6, 2010

Unsolvable 8Puzzle

Yuk, bermain sejenak dengan 8Puzzle :). Permainan yang terdiri dari 9 cell berisi 8 tile bernomor (1-8) dan 1 blank. Tile bernomor bisa digeser ke arah blank (sel yang kosong). Objektifnya dengan susunan tile awal diinginkan susunan tile akhir. Berikut contoh permainannya:

Contoh permainan 8puzzle

Berapa langkah pergeseran tile yang perlu dilakukan? Sok cobain, utak-utik sambil latihan otak. Syaratnya jangan pakai program apapun. Hehehe….

read more »

Mei 24, 2009

Optimasi Kode C (Contoh Kasus)

Dalam mengkode program, seringkali kita dihadapkan oleh problem optimasi terhadap rutin-rutin tertentu dalam program. Adapun tujuan optimasi sendiri diantaranya adalah 1) memperoleh footprint yang sekecil mungkin, dan 2) waktu eksekusi rutin yang secepat mungkin (biasanya sebagai implikasi dari footprint yang kecil), dengan tetap menjamin semantik rutin. Optimasi terhadap rutin ini sangatlah vital misalnya rutin dalam operasi real-time atau rutin yang berada di ISR (Interrupt Service Routine) yang keduanya menuntut kode yang time-constrained.

Sebagai contoh adalah requirement sederhana untuk memetakan 16 nilai x dalam y dengan ketentuan berikut:

x 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
y=f(x) 0 8 16 24 64 72 80 88 128 136 144 152 192 200 208 216

read more »

Januari 16, 2009

Parsing Command Line Options

Seringkali dalam menjalankan suatu perintah/program/utility di Linux, kita melewatkan argumen (dan option) untuk mengatur perilaku atau output program yang dijalankan tersebut. Misalnya:

	ls -al
	cat filename.txt
	dd if=infile of=outfile

Ketiga perintah tersebut melewatkan argumen. Untuk program dengan bahasa C, perintah akan dimulai dari fungsi main, yang dideklarasikan sebagai

	int main(int argc, char *argv[])

dimana argc adalah jumlah argumen program dan argv adalah array string dari argumen tersebut.

Berikut akan dijabarkan fragmen kode program untuk memproses/parsing argument yang dilewatkan dalam suatu command line, yaitu menggunakan fungsi getopt() dan parsing dari argv langsung.

Menggunakan Fungsi getopt()

read more »

Januari 16, 2009

Make dan Makefile: Tools Pengembangan Software

Dalam artikel berikut akan dibahas tentang tools pengembangan software di Linux yaitu program make dan Makefile. Program make dan Makefile digunakan untuk mengelola proyek software. Umumnya digunakan untuk mengontrol kompilasi dari source code, menyiapkan halaman manual, dan instalasi aplikasi ke direktori target. Program make menjalankan fungsinya berdasarkan Makefile yang berisi rule bagaimana aplikasi kita akan dibangun.

Makefile berisi rules dan set dependensi. Dependensi mempunyai sebuah target (file yang harus dibuat) dan set source file dependensinya. Rules mendeskripsikan bagaimana membuat target dari file dependensinya. Makefile ini dibaca oleh program make, yang akan menentukan target yang akan dibangun dan membandingkan waktu modifikasi dari source file untuk memutuskan rules mana yang akan dijalankan untuk membangun target.

Syntax Makefile:

# Ini merupakan comment
# Note: 
# 1. Tidak boleh ada spasi di awal baris (harus pakai tab untuk indent)
# 2. Baris perintah yang panjang dalam rules bisa dipecah dengan '\'
#    Namun, tidak boleh ada spasi setelah '\' tersebut
# 3. Perintah 'make ' akan menjalankan rules untuk membangun target tersebut
# 4. Perintah 'make' tanpa melewatkan parameter, akan menjalankan target yang
#    didefinisikan pertama. Jadi, target 'all' sebaiknya ada di barisan pertama

CC = gcc # Ini macro: MACRONAME=value
CFLAGS = -I. -g -Wall -ansi
all: $(target)
$(target):$(dependensi: object file{*.o}, source code{*.c,*.h})
	${rules} #Misalnya: $(CC) $(CFLAGS) -o $(target) $(dependensi)

read more »

Mei 7, 2008

Thread by Example (5): Thread-Specific Data

Semua thread dalam satu program memakai alokasi alamat memory yang sama, yang artinya jika satu thread mengubah isi suatu alamat memory, maka perubahannya akan dapat dilihat oleh thread lain. Hal ini memungkinkan multiple thread untuk beroperasi dengan data yang sama tanpa menggunakan mekanisme interprocess communication.

Namun, kadang kita butuh tiap thread mempunyai alamat data sendiri yang saling independen. Linux menyediakan area thread-specific data, yang memungkinkan tiap thread mempunyai duplikat data yang terpisah, yang dapat diubah tanpa mempengaruhi thread lain.

Objective

Yang dipelajari:

  • menggunakan thread-specific data dalam thread

read more »

Mei 7, 2008

Thread by Example (4) : Thread Mutex

Mutex (MUTual EXclusion lock) memberikan solusi dari problem race condition saat beberapa thread berusaha mengakses kode secara bersamaan, sehingga hanya satu thread yang bisa mengaksesnya dalam satu waktu dan thread lain akan menunggu saat thread tersebut telah selesai mengaksesnya. Artinya jika satu thread telah mengunci mutex, dan thread berikutnya berusaha mengunci mutex, maka thread ini akan diblock atau pending, sampai thread pertama membuka kunci mutex.

Objective

Yang dipelajari:

  • inisialisasi mutex
  • lock dan unlock mutex

read more »

Mei 5, 2008

Threads by Example (3): Threads semaphore

Dalam artikel ini akan dibahas tentang metode sinkronisasi antar thread menggunakan semaphore. Semaphore ini digunakan untuk menjaga suatu rutin kode sedemikian sehingga hanya satu thread yang bisa mengeksekusinya dalam satu waktu (dalam hal ini semaphore yang digunakan adalah binary semaphore).

Objective

Yang dipelajari:

  1. mengimplementasikan semaphore di thread
  2. inisialisasi semaphore
  3. menggunakan blocking sem_wait
  4. menggunakan non-blocking sem_trywait
  5. menggunakan sem_post
  6. menggunakan sem_getvalue

read more »

April 25, 2008

Threads by Example(2): Threads return value

Melanjutkan bahasan tentang threads, sekarang bagaimana untuk mendapatkan return value dari fungsi thread?
Untuk mendapatkan thread return value, masukkan lokasi value_ptr ke fungsi pthread_join(pthread_t thread, void **value_ptr).

Objective

Yang dipelajari:

  1. mengakses return value dari fungsi thread
  2. menggunakan pthread_exit untuk return
  3. sharing variable global antar thread
  4. membuat detached thread (clean up resource automatically when exit), selain joinable thread (default, harus memanggil pthread_join untuk merelease resource)
  5. mengecek thread_id, sebelum join

read more »