Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

Kehilangan Laptop

Teman saya baru saja kehilangan laptopnya kemarin. Kami pergi makan siang jam 12.10, dan kembali lagi ke kantor jam 12.40… dan laptopnya sudah tidak ada.

Setelah berkoordinasi dengan pihak keamanan gedung, kami berhasil mendapatkan rekaman CCTVnya. Berikut kronologi aktivitas sang maling seperti terekam di kamera.

  • 12.05 : Maling masuk di lobi lantai dasar

  • 12.10 : Maling turun lift di lantai 8.

  • 12.11 : Kami keluar dari kubikel dan menunggu lift. Sebenarnya berpapasan dengan sang maling. Tapi mana kami tau kalau dia mau mencuri?

  • 12.13 : Lift datang, semua orang masuk lift kecuali saya, karena mau ke toilet dulu

  • 12.14 : Saya selesai di toilet, menekan tombol lift. Sambil menunggu lift melongok ke kubikel untuk melihat keadaan. Sempat melihat orang itu, tapi tidak terlalu pay attention

  • 12.25 : Saya turun dengan lift

  • 12.25 : Sang maling meninjau situasi untuk terakhir kali, kemudian masuk ke ruangan kami (tidak tertangkap kamera)

  • 12.30 : Keluar dari ruangan membawa laptop, ditenteng dengan tangan (dia tidak bawa tas) dan tidak ditutupi apa-apa. Kemudian menekan tombol lift. Sambil menunggu lift datang, mondar-mandir petantang-petenteng di depan satpam IndoNet

  • 12.33 : Lift datang, dia masuk ke dalam lift

  • 12.34 : Terlihat di kamera lobi lantai dasar, menenteng laptop di tangan dan berjalan dengan santai keluar gedung

Hmm … begitu mudah, begitu cepat. Para pemilik laptop, jangan meninggalkan laptop Anda sembarangan. Bawalah kemana saja Anda pergi, ke toilet sekalipun.

Menurut pihak keamanan, maling yang sama telah menelan korban di lantai 10 bulan September lalu. Guess what, mereka juga punya rekaman videonya (makanya tau orangnya sama). What the f@#*, kalo sudah tau tampang malingnya kenapa gak waspada. Terlalu banyak makan gaji buta :( .


Coding Java tanpa Instal Java

Teman saya bekerja di salah satu bank terkemuka di Indonesia. Sebagai mantan programmer yang biasa menginstal ulang komputer sebulan sekali, tentunya akan sangat terpenjara bekerja di bank. Bagaimana tidak, instal Yahoo Messenger saja harus bikin form permohonan dulu.

Belakangan, teman saya ini sudah berhasil menginstal MySQL dan PHP tanpa akses Administrator. Ini dimungkinkan dengan penggunaan Uniform Server yang tinggal extract dan jalankan. Nah, sekarang dia ingin coding Java.

Untunglah kita bisa coding Java tanpa harus instal. Cukup copy folder jre dari instalasi yang sudah ada (misalnya punya teman), dan masukkan di dalam folder Eclipse. Ternyata Eclipse ini hebat sekali, dia bisa compile source code tanpa harus instal Java SDK.

Voila, Eclipse siap digunakan. Mungkin ini salah satu alasan kenapa aplikasi bank dibuat dengan Java, developer tidak perlu akses Administrator untuk instal :P.

Selamat coding di bank ….


Geek Personality Quiz

Ada lagi kuis untuk membuang-buang waktu luang dan bandwidth Anda. Jangan ketinggalan!! Ketahuilah jenis personality Anda segera.

Ini hasil kuis saya :

You are .exe When given proper orders, you execute them flawlessly.  You're familiar to most, and useful to all.
Which File Extension are You?


Refactoring

Three times and you refactor !! Begitu kata Martin Fowler dalam bukunya Refactoring.

Sering terjadi dalam pembuatan aplikasi, kita akan menulis suatu rutin yang sudah pernah kita tulis sebelumnya, dengan sedikit perbedaan parameter dan variabel. Biasanya, kalau menemui hal seperti ini, kita akan copy-paste dari kode yang sudah ada, melakukan sedikit modifikasi, dan selesai. Mudah dan sederhana, tapi terlalu rajin. Untuk jadi programmer yang efektif, kita perlu memiliki sifat malas.

Misalnya, kita punya UserDao, dengan kode seperti ini :

public class UserDao {
    public void insert(User u) {
      // connect dulu
      Connection conn = DriverManager.getConnection(url, user, pass);
      PreparedStatement ps = conn.prepareStatement("INSERT INTO tbl_user VALUES (?,?)");
      
      // ... dan seterusnya .... 
    }
}

Setelah itu, kita akan menambahkan method untuk delete:

public class UserDao {
    public void insert(User u) {
        // connect dulu
        Connection conn = DriverManager.getConnection(url, user, pass);
        PreparedStatement ps = conn.prepareStatement("INSERT INTO tbl_user VALUES (?,?)");
      
        // ... dan seterusnya .... 
    }

    public void delete (User u) {
        // connect dulu
        Connection conn = DriverManager.getConnection(url, user, pass);
        PreparedStatement ps = conn.prepareStatement("DELETE FROM  tbl_user WHERE id=?");
      
        // ... dan seterusnya .... 
    }
}

Nah, sekarang kita mau tambah method untuk search user berdasarkan id, tentunya kita akan tulis kode seperti ini :

public class UserDao {
    public void insert(User u) {
        // connect dulu
        Connection conn = DriverManager.getConnection(url, user, pass);
        PreparedStatement ps = conn.prepareStatement("INSERT INTO tbl_user VALUES (?,?)");
      
        // ... dan seterusnya .... 
    }

    public void delete (User u) {
        // connect dulu
        Connection conn = DriverManager.getConnection(url, user, pass);
        PreparedStatement ps = conn.prepareStatement("DELETE FROM  tbl_user WHERE id=?");
      
        // ... dan seterusnya .... 
    }

    public User search (int id) {
        // connect dulu
        Connection conn = DriverManager.getConnection(url, user, pass);
        PreparedStatement ps = conn.prepareStatement("SELECT * FROM  tbl_user WHERE id=?");
      
        // ... dan seterusnya .... 
    }
}

Stop !!! Three times and you refactor. Artinya, begitu kita paste untuk kedua kali (berarti ada tiga kopi blok yang sama), itulah waktunya kita refactor. Kita paste blok tersebut, masukkan ke dalam function/method sendiri, berikan parameter seperlunya. Ini untuk menghindari terjadinya duplikasi kode, sehingga untuk tiap perintah cuma ada satu versi.

Setelah direfactor, kode di atas menjadi :

public class UserDao {
    public PreparedStatement prepareStatement(String sql) {
        // connect dulu
        Connection conn = DriverManager.getConnection(url, user, pass);
        return conn.prepareStatement(sql);              
    }

    public void insert(User u) {
        PreparedStatement ps = prepareStatement("INSERT INTO tbl_user VALUES (?,?)");
        // ... dan seterusnya .... 
    }

    public void delete (User u) {
        PreparedStatement ps = prepareStatement("DELETE FROM tbl_user WHERE id=?");      
        // ... dan seterusnya .... 
    }

    public User search (int id) {
        PreparedStatement ps = prepareStatement("SELECT * FROM tbl_user WHERE id=?");
        // ... dan seterusnya .... 
    }
}

Apabila kita menggunakan IDE canggih seperti Eclipse, IDEA, atau Netbeans, refactoring ini mudah saja dilakukan. Tinggal blok kode yang akan direfactor, kemudian klik kanan, dan pilih Extract Method. Method baru akan dibuatkan dan diisi dengan kode yang kita blok. Sedangkan kode asal yang kita blok sebelumnya akan diganti dengan pemanggilan method baru.

Extract Method hanya satu contoh kecil saja dari Refactoring. Masih ada Extract Classes, Inline Method, dan lain sebagainya. Buku wajib buat programmer Java.

Silahkan beli di Amazon atau download di Flazx.


Deadline !!!

Deadline memang bikin stress.

Cangkir kopi bertebaran, dan kantung mata bergelayutan. Tidak lupa bos mondar-mandir di belakang, terus menerus kirim email, telpon ke HP, kirim BUZZ lewat Y!, dan melakukan tindakan-tindakan lain yang menambah ketegangan.

Di tengah kesibukan deadline, jangan lupa untuk selalu berpikir positif, dan yang paling penting, jangan mudah tertipu. Beberapa jenis deadline sebetulnya palsu, merupakan kelihaian pihak-pihak tertentu yang menguasai teknik khusus.

Di website ini dapat Anda baca beberapa teknik untuk menciptakan nuansa deadline di lingkungan Anda.

Selamat mengejar deadline, awas maag kumat. :P