Archive for the ‘Programming’ Category

h1

Catastrophic Failure

November 13, 2008

IDE Visual Studio 2005 sangat hebat karena dia punya compiler yang terus menerus berjalan di background dan mengoreksi baris demi baris kode program agar cepat ketahuan kalau2 ada kesalahan dalam penulisan sintak dan juga tugas2 otomatis lainnya yang bisa dilakukan karena aktivitas background compiler ini. IntelliSense misalnya.

Eventhough there is one big drawback. Kalau project yang dikerjakan tergolong besar, bahkan sampai melibatkan source controller, maka VS2005 akan berjalan lambat seperti liliput. Tidak menutup kemungkinan pula terjadi error yang tak terhindarkan – catastrophic failure- seperti yang baru saja saya alami. Error ini terjadi pada background compiler. Untungnya saya tidak kehilangan kode yang saya tulis.

Kejadiannya sungguh instan, ketika sedang menulis kode, tiba-tiba muncul dialog yang menyatakan sebuah error pada compiler yang mengharuskan VS2005 ditutup secara paksa (sy biasa menyebutnya dialog “Don’t send”) Tentu saja saya kaget setengah mati. Dokumen source code yang saya kerjakan juga belum disave. Terbayang kalau2 harus mengulang semuanya dari awal…berapa jam kerja yang akan terbuang….

Tapi ternyata tidak seburuk itu. Yang dinyatakan error dan harus ditutup adalah background compiler, dan bukan keseluruhan IDE. Untunglah…sebuah tarikan nafas serasa menyegarkan seluruh pembuluh darah. Sebuah dialog muncul untuk memperingatkan agar segera men-save dokumen dan me-restart IDE. Namun karena tanggung, saya lanjutkan saja beberapa baris kode daripada nanti kelupaan. Karena ketidakadaan compiler tersebut, IDE Visual Studio 2005 terasa bagaikan notepad biasa, tanpa bantuan autocompletion dan auto error check yang biasa memanjakan para coder. Dan tentu saja, sangat cepat dan responsif 😀

Apa sebaiknya compilernya dimatikan terus saja ya…

h1

Lebih banyak nunggunya daripada kerjanya

October 16, 2008

Aku sudah merasakan betapa lambat dan beratnya IDE Visual Studio 2005. Bahkan pada saat itu proyek yang kukerjakan masih tergolong kecil. Namun sekarang aku terlibat di proyek yang cukup besar, menggunakan source code controller dan tidak satu orang saja yang bekerja di proyek ini. Dan ya ampun…waktu untuk menunggu loading, check in-check out, dan sebagainya, jauh lebih lama daripada waktu untuk bekerja… Benar2 sebuah uji kesabaran…

h1

Hidup dengan Algoritma

September 25, 2008

Sebagian dari kita mungkin sedikit asing dengan kata ini. Apa itu algoritma? Tanpa kita sadari, sebenarnya kita selalu menerapkan algoritma untuk melakukan suatu kegiatan dalam kehidupan sehari-hari. Bahkan kegiatan sekecil apapun kita tidak akan pernah lepas dari algoritma. Singkatnya, algoritma adalah suatu urutan atau langkah dalam menyelesaikan suatu permasalahan.

Mudahnya mari kita berandai-andai seperti demikian :
Misal kita ingin meminum segelas air yang ada di dispenser. Maka algoritma yang sering kita terapkan mungkin mendekati seperti ini :

1. Ambil gelas di rak yang berada di dapur
2. Bawa gelas tersebut dan letakkan dibawah keran dispenser.
3. Tekan kenop keran hingga air mengisi gelas
4. Tunggu hingga gelas penuh terisi air atau sesuai jumlah air yang diinginkan, hentikan kenop keran
5. Angkat gelas dari bawah keran
6. Selesai

Lihat, kegiatan yang sepele namun kita gunakan algoritma untuk memecahkannya. Setiap orang memiliki pola pikir yang berbeda, demikian juga dengan algoritma, tiap orang tidak akan mungkin sama. Yang ada hanya mirip antara satu sama lain. Algoritma diatas bisa juga dikembangkan, bagaimana jika air tidak keluar dari keran dispenser? Maka bisa saja berkembang seperti berikut :

1. Ambil gelas di rak yang berada di dapur
2. Bawa gelas tersebut dan letakkan dibawah keran dispenser.
3. Tekan kenop keran hingga air mengisi gelas
4. Jika :
– air tidak keluar dari keran, jalankan langkah nomor 5.
– air keluar, jalankan langkah nomor 7.
5. Cek apakah galon masih berisi air :
– jika tidak, jalankan langkah nomor 6
– jika ya, periksa keran dispenser, ulangi langkah nomor 3
6. Ganti galon kosong dengan galon yang masih berisi air, kemudian ulangi langkah nomor 3
7. Tunggu hingga gelas penuh terisi air atau sesuai jumlah air yang diinginkan, hentikan kenop keran
8. Angkat gelas dari bawah keran
9. Selesai

Dari algoritma diatas, apakah masih bisa dikembangkan lagi? Tentu saja. Lihat poin nomor 6, mengganti galon air tentu saja ada algoritmanya tersendiri. Nah kemudian bagaimana kira2 algoritma jika kita ingin air minum hangat? 🙂

Oh ya, tidak ada algoritma yang benar maupun salah. Asal tujuan tercapai, maka algoritma tersebut dinilai tepat dan dapat digunakan. Tentu saja, algoritma yang paling baik adalah yang paling efisien dan tidak merugikan atau menimbulkan masalah lain. Algoritma juga tidak boleh buntu, alias tidak ada pemecahannya, atau bahkan algoritma yang berputar-putar tanpa henti (infinite loop) coba amati algoritma berikut :

1. Ambil gagang telepon
2. Tekan nomor telepon yang akan dituju
3. Tunggu hingga terdengar nada sambung
4. Jika :
– panggilan dijawab, jalankan langkah nomor 5
– panggilan tidak dijawab, ulangi langkah nomor 2
5. Mulai berbicara
6. Selesai berbicara, letakkan gagang telepon di tempat semula
7. Selesai.

Algoritma apakah diatas? Ya benar, algoritma untuk melakukan komunikasi melalui telepon. Namun coba lihat poin nomor 4, pilihan yang kedua :
– Jika panggilan tidak dijawab, ulangi langkah nomor 2
Sekilas nampak masuk akal. Namun apa yang terjadi jika panggilan tidak juga dijawab? Kita akan terus menerus mengulang langkah nomor 2 -> 3 -> 4 -> 2 -> 3 -> 4 -> … tanpa henti. Itulah yang disebut infinite loop. Sebagai manusia yang berakal tidak mungkin kita akan melakukannya. Kecuali emang lagi pengen iseng ngga ada kerjaan lain 😀

Lalu bagaimana sebaiknya?

1. Ambil gagang telepon
2. Tekan nomor telepon yang akan dituju
3. Tunggu hingga terdengar nada sambung
4. Jika :
– panggilan dijawab, jalankan langkah nomor 6
– panggilan tidak dijawab, jalankan langkah nomor 5
5. Jika :
– masih ingin mencoba melakukan panggilan ulang, jalankan langkah nomor 2
– tidak ingin mencoba melakukan panggilan ulang, jalankan langkah nomor 7
6. Lakukan percakapan hingga selesai
7. Letakkan gagang telepon di tempat semula
8. Selesai.

Nah, tidak hanya programmer dan matematikawan yang selalu bergelut dengan algoritma. Otak kita yang canggih selalu memikirkan algoritma-algoritma kompleks tanpa kita sadari. Algoritma tiap orang dipengaruhi juga oleh pengalaman, wawasan dan bahkan gaya hidup. Belajar pemrograman bisa membuat kita berpikir secara sistematis dan efisien, karena dalam dunia pemrograman komputer, setiap perintah atau baris-baris kode harus didasarkan pada algoritma-algoritma. Kita dihadapkan pada sesuatu yang maya, yang tak nampak, oleh karena itu otak kita dibiasakan menyusun algoritma baru dengan pertimbangan-pertimbangan yang kritis. Mengapa kritis? karena selain maya, komputer tak mengenal kompromi. Salah dalam menetapkan langkah, maka kita tidak akan mendapatkan hasil yang diinginkan. Banyak programmer yang pintar menghapal dan mengingat kode-kode program, namun seringkali salah dalam menerapkan algoritma.

Apakah pemrograman menakutkan? Justru disitu tantangannya. Mengasyikkan bermain-main dengan algoritma dan logika, apalagi kita berkuasa penuh atas komputer yang kita “kendalikan”. Sekali kita berhasil menyelesaikan suatu masalah, maka tak ada lain selain kepuasan yang akan kita dapatkan.

Wah jadi ngelantur nih…hehehe…yah..tulisan ini bukan buat ngajak semua orang buat jadi programmer kok 😀 Hanya agar kita tahu bahwa hidup ini tak pernah lepas dari algoritma. Saking pentingnya bahkan jadi mata kuliah tersendiri di banyak jurusan teknik, ex : Teknik Informatika, Teknik Elektro, dan lain-lain. Mungkin perlu juga dimasukkan dalam kurikulum sekolah 🙂

h1

Tulisanku yang Melanglang Buana

August 27, 2008

Iseng-iseng searching di google, secara tidak sengaja saya menemukan sebuah tulisan dari sebuah blog yang sama-sama dari wordpress juga, dengan judul dan “caption” alias potongan kata2 yang mirip dengan posting yang pernah saya buat.

Karena penasaran, saya klik hasil pencarian google tersebut untuk melihat isi dari tulisan.
Ternyata benar, 100% persis dengan tulisan saya. Tidak ada yang berubah satu huruf maupun satu tanda baca pun.

Well…dalam hati saya hanya berpikir : wah tulisan yang saya buat ternyata bisa bermanfaat juga buat orang lain, sampai2 mereka mengambilnya begitu saja tanpa menyertakan siapa penulis sebenarnya, atau dalam dunia maya dan hak cipta disebut juga credits.

Saya tidak marah, tidak juga melarang tulisan saya dimuat dan disertakan di media lain, malah saya senang karena ilmu yang dibagikan tidak akan berkurang justru semakin berlipat-lipat. Hanya saja coba sertakan siapa penulis aslinya. Hal yang sama banyak juga berlaku di forum-forum dan media komunitas lain, dimana sudah menjadi aturan tak tertulis yang wajib ditepati (jika tidak ingin disebut script-kiddies, leecher, pirater, copycat, dll) jika menyertakan hasil karya orang lain, maka sertakan nama pembuatnya sebagai credit. Ngga susah koq dan ngga akan memperjelek tampilan situs anda. Justru anda akan semakin disenangi oleh pembaca maupun penulis yang anda sadur hasil karyanya.

h1

[PHP] – Navigate to previous and next row from current row

August 3, 2008

Terinspirasi dari posting vandai tentang PHP-MySql: Select previous row and next row from current ID tentang bagaimana cara bernavigasi dari row saat ini ke row selanjutnya dan sebelumnya. Berikut solusi dari vandai :

Go to previous row :

SELECT field1
FROM tablename
WHERE id < $currentid
ORDER BY id DESC
LIMIT 1

Go to next row :

SELECT field1
FROM tablename
WHERE ID > $currentid
ORDER BY id ASC
LIMIT 1

Solusi yang bagus dan efisien untuk menghemat resource database server. Namun bagaimana jika field ID bukan bertipe data numerik (integer, float, dll) ?

Lanjut ke solusi >>

h1

[Visual Basic 2005] Threading pada Visual Basic 2005

July 29, 2008

Threading merupakan salah satu teknik pemrograman yang menurut sebagian orang rumit dan membingungkan karena kompleksitasnya. Tapi untunglah, di .NET Framework, Microsoft telah menyediakan sebuah komponen khusus untuk menangani kegiatan threading ini yang membuat segalanya jadi lebih mudah.

Komponen tersebut adalah BackgroundWorker. Dari namanya sudah dapat ditebak kegunaan dari komponen ini bukan 🙂

Terdapat 2 method utama pada komponen ini antara lain :

  • RunWorkerAsync : untuk memerintahkan thread agar mulai aktif dan menjalankan tugasnya.
  • CancelAsync : untuk menghentikan thread secara “paksa”.

Selain method terdapat 3 event utama yang dimiliki oleh BackgroundWorker yang memungkinkan kita mengontrol sebuah thread.
Event tersebut adalah :

  • DoWork : Event ini dibangkitkan ketika method RunWorkerAsync dipanggil yang menandakan bahwa thread diperintahkan untuk aktif. Di event inilah routine yang perlu dilakukan oleh thread dieksekusi. Contohnya, membuka file, melakukan pengambilan data dari database server, dan sebagainya.
  • ProgressChanged : Event ini dibangkitkan ketika thread sedang bekerja. Di event ini biasanya digunakan untuk menjalankan ProgressBar untuk menginformasikan sejauh mana thread telah melakukan tugasnya.
  • RunWorkerCompleted : Event ini dibangkitkan ketika thread selesai menjalankan routine yang dibebankan pada event DoWork. Biasanya di event ini terdapat routine-routine yang dijalankan ketika suatu thread selesai menjalankan routine nya. Misal, menghapus file yang sudah berhasil dibaca oleh thread, menutup koneksi database, mengeluarkan MessageBox dan sebagainya.

Baiklah mari kita coba mempraktekkan threading ini biar langsung terasa khasiatnya 😛

Read the rest of this entry ?

h1

Java : Bahasa Pemrograman Paling Narsis

April 4, 2008

Kata-kata ini sebenernya udah lama terngiang di kepala sejak pertama kali belajar tentang Java, bahasa pemrograman yang (katanya) multiplatform dan portable.

Kenapa paling narsis? ya, hampir semua yang ada dalam Java, baik class-class, package dan sebagainya selalu diawali dengan kata2 “Java” atau minimal huruf “J” didepannya. Contoh, dalam Java ada komponen atau class2 seperti : JButton, JWindow, JApplet, JDBC, dan masih banyak lagi. Buka user manual Java, maka hampir semua yang ada di indeksnya adalah huruf “J” hehehe…..

Jika anda pakar Java atau setidaknya pernah “berurusan” dengan bahasa ini pasti menyadari hal itu tapi mungkin sedikit yang sadar implikasi tersembunyi dari sistem penamaan ini. Ya, implikasi yang berujung pada anggapan bahwa java adalah bahasa yang “narsis”. Sama seperti seorang anak muda yang terobsesi pada dirinya sendiri (narsis), bangga akan dirinya, yang menuliskan namanya dimana saja, buku, baju, pin, tas, plat nomor dan sebagainya.

Mungkin maksud para pakar pembuat Java adalah untuk membedakan dengan komponen atau class milik bahasa lain. Tapi belum tentu juga. Coba amati, bahasa-bahasa lain yang juga sama2 berorientasikan obyek seperti C++, Ruby, bahasa-bahasa dalam .NET Framework, tidak menggunakan “nama merk” mereka dalam menamai sebuah class atau komponen. Tidak ada dalam komponen Visual Basic NET yang dinamai VBButton, VBComboBox, VBDataGrid, VBDBC, atau pada C# (baca : C sharp) komponen C#Button, C#GroupBox, C#DBC, dan seterusnya. Dan tidak masalah tuh meskipun tidak mengikutsertakan merk mereka dalam penamaan komponen. Dan untungnya mereka tidak menggunakan itu (gawat kalau ada nama komponen seperti itu soalnya kebanyakan karakter “#” tidak boleh dijadikan nama variabel).

Cara penamaan yang seperti ini memang ada juga efek positifnya, bisa membuat seseorang semakin jatuh cinta terhadap Java, seperti jika seseorang sering bersama dengan lawan jenisnya maka akan timbul ketertarikan dalam dirinya, tapi bisa juga seperti pedang bermata 2 yang membuat seseorang itu menjadi fanatis. Saya punya teman di kampus yang bisa dibilang memang suka Java. Saya bilang suka dan bukan pakar, karena memang kemampuannya di Java tidak sehebat itu, mungkin kemampuan teoritis saja dan belum bisa dipakai untuk menghasilkan sebuah produk. Dia sangat menyukai Java, sampai-sampai hanya Java saja bahasa yang dikenalnya. Sepertinya dia tidak tertarik untuk mempelajari bahasa lain.

Ok back to topic.
Boleh-boleh saja sih ya mau dinamai JButton atau apa terserah si pembuat Java nya kan? Tapi menurut saya cara ini tidak efisien, boros memori (butuh alokasi memori tersendiri untuk menaruh huruf “J” atau “Java” yang seharusnya bisa dipakai untuk keperluan lain) dan kasihan huruf J pada keyboard seorang programmer Java yang mengalami depresi karena frekuensi terkena tekanan jauh lebih banyak daripada huruf2 yang lain 😀

Kalau saja Sun mau merilis sebuah keyboard khusus yang menyertakan tombol “Java” sehingga dengan menekan tombol itu langsung tercetak kata “Java” di layar editor, mungkin bakal laris manis tanjung kimpul. Hwehehehe….