Ronsen's Blog

Kalkulator atau sejenisnya

Friday, February 20, 2009

Lagi iseng membuat program sederhana menghitung Reverse Polish notation.

 package com.blogspot.i-temp;  
   
 import java.util.Stack;  
 import java.util.StringTokenizer;  
   
 public class Calculator {  
   
   public static final String EXPRESSION = "2 3 4 * +";  
   
   private Stack<Integer> stack = new Stack<Integer>();  
   
   public Calculator() {  
   }  
   
   private boolean isOperator(char ch) {  
     boolean operator = false;  
     switch (ch) {  
     case '+':  
     case '-':  
     case '*':  
     case '/':  
       operator = true;  
       break;  
     }  
     return operator;  
   }  
   
   private int compute(int op1, int op2, char operator) {  
     int result = 0;  
     switch (operator) {  
     case '+':  
       result = op1 + op2;  
       break;  
     case '-':  
       result = op1 - op2;  
       break;  
     case '*':  
       result = op1 * op2;  
       break;  
     case '/':  
       result = op1 / op2;  
       break;  
     }  
     return result;  
   }  
   
   public int parse(String expression) {  
     StringTokenizer tokens = new StringTokenizer(expression);  
     String token;  
     char operator;  
     int op1, op2;  
   
     while (tokens.hasMoreTokens()) {  
       token = tokens.nextToken();  
       operator = token.charAt(0);  
   
       if (isOperator(operator)) {  
         op2 = stack.pop();  
         op1 = stack.pop();  
         stack.push(compute(op1, op2, operator));  
       } else {  
         stack.push(new Integer(token));  
       }  
     }  
   
     return stack.pop();  
   }  
   
   public static void main(String[] args) {  
     Calculator calculator = new Calculator();  
     int result = calculator.parse(EXPRESSION);  
     System.out.println("Result: " + result);  
   }  
   
 }  

Ternyata yang sulit itu mengubah ekspresi matematika biasa ke RPN.

Belajar Domain-driven Design

Monday, February 16, 2009

Sudah lama saya ingin belajar tentang DDD karena ingin meninggalkan cara yang selama ini saya tiru dari contoh-contoh yang ada baik itu dari website, referensi, bahkan e-book yang mengajarkan Anemic Domain Model. Singkatnya, ADM itu ternyata anti-pattern. Belajar DDD ini memaksa saya harus membaca ulang tentang design patterns supaya DDD tidak hanya sekedar buzzword.

Pustaka:

Rekursif

Friday, February 13, 2009

Sudah juga lama tidak mendengar istilah rekursif. Karena ingin menyegarkan otak saya ingin mengambilkan contoh menghitung bilangan faktorial. Berikut pseudocode yang ada di website Wikipedia:
function factorial is:
input: integer n such that n >= 0
output: [n × (n-1) × (n-2) × … × 1]

1. if n is 0, return 1
2. otherwise, return [ n × factorial(n-1) ]

end factorial

Kalau diterjamahkan dalam bahasa pemrograman Java:
class FactorialNumber {

  private static int[] NUMBERS = new int[] { 1, 2, 3, 4, 5 };

  public FactorialNumber() { }

  public static int factorial(int number) {
    if (number == 0) return 1;
    return number * factorial(number - 1);
  }

  public static void main(String[] args) {
    for (int number : NUMBERS) {
      System.out.println("Factorial(" + number + "): " + 
      FactorialNumber.factorial(number));
    }
  }
}

Entah kenapa penggunaan rekursif sering ditanyakan sewaktu wawancara kerja.

Membangun Web dengan Java

Tuesday, February 10, 2009

Banyak para pemula yang selalu kebingungan saat ingin membangun sebuah website dengan Java. Saat saya memulai Java sangat sedikit pilihan web server. Awalnya saya hanya mengenal Apache Web Server sebelumnya. Karena sering mengunjungi website tersebut makanya saya pun mengenal Apache Tomcat.

Dengan menggunakan Apache Tomcat sudah cukup membuat website yang canggih. Bahkan bisa menangani permintaan (request) dari pengguna dalam jumlah yang besar. Sebenarnya bukan sekedar tergantung server tetapi lebih bagaimana mengoptimasi kode-kode sumber tidak melakukan proses yang berlebihan.

Memang membangun web di Java agak berbeda dengan bahasa pemrograman yang lain. Apalagi dengan latar belakang sebelumnya menggunakan PHP. Ada beberapa aturan yang perlu (wajib) ditaati kalau tidak maka web yang dibangun tidak akan muncul. Solusi termudahnya adalah mulai menggunakan editor yang powerful seperti Eclipse dan Netbeans. Program tersebut membantu kita meletakkan struktur kode-kode Java dengan sangat baik.

Contoh-contoh source code akan saya simpan di https://github.com/ronsen.

Kenapa Java

Setelah menginstall Java sekarang kita mau kemana? Kalo sekedar ingin melihat demonya langsung saja buka %JAVA_HOME%/demo/jfc. Di situ tersedia beberapa aplikasi yang dapat langsung dijalankan. Biasanya setiap Java mengeluarkan Java Development Kit yang baru saya langsung mencoba-coba demo ini. Dan saat ini kita sudah bisa menikmati Nimbus Look and Feel dengan mengunduh Java SE Update N.

Tidak ada alasan khusus saya menggunakan Java. Hanya pilihan random dari beberapa bahasa pemrograman yang sudah ada. Semua orang pasti mulai dari awal sebelum terjun ke dunia nyata pemrograman. Kebetulan saya menggunakan Pascal di bangku kuliah kemudian beralih ke C/C++. Setelah itu mencoba-coba Delphi dan membuat aplikasi berbasis window kemudian tertarik dengan pemrograman berbasis web. Pilihan saat itu yang saya tahu hanya dua yaitu ASP dan PHP.

Lingkungan memang sangat berpengaruh dalam tahap perkembangan skill seseorang. Kebetulan rata-rata mahasiswa di kampus saya lebih menyukai membangun aplikasi window. Saya ingin mencari bahasa pemrograman lain selain yang sudah saya ketahui. Singkat cerita saya lebih memilih menggunakan Java dengan AWT-nya. Karena sudah mencicipi menggunakan editor serba drag and drop anda pasti tahu kalau AWT sudah cukup membuat anda membenci Java.

Setelah mempelajari lebih dalam, untungnya kita juga bisa membangun aplikasi berbasis web dengan menggunakan Java. Yah, dari sini karir saya dimulai...

Linuxer yang Bahagia

Saturday, February 7, 2009

Pertama kali aku menggunakan komputer, Windows adalah satu-satunya sistem operasi yang kukenal. Saat itu aku menggunakan Windows 3.1. Linux pertama kali aku dengar saat duduk di bangku kuliah. Pengguna Linux di kampusku pun masih bisa dihitung dengan jari. Mungkin karena penggunaannya yang sulit untuk mahasiswa bahkan untuk mahasiswa teknik informatika. Bagaimana tidak? Berkenalan dengan Linux langsung disuguhi console. Err.. kok balik lagi zaman dinosaurus? :D

Legal

Masalah legalitas mungkin yang menjadi kendala pengguna Windows secara umum. Masih banyak pengguna Windows yang aku lihat menggunakan lisensi GPL (Glodok Public License) a.k.a bajakan. Dan ini sudah menjadi rahasia umum kalau menggunakan Windows yang terpikir pertama kali pasti bajakan. Maraknya razia Windows bajakan sebenarnya cukup membuat kalian malu karena Microsoft sendiri menganggap kalian pencuri!

Ketergantungan

Gara-gara ketergantungan inilah yang membuat aku beralih dari Windows ke Linux atau secara umum perangkat lunak Microsoft. Beberapa kali proyek yang dulu aku tangani sangat tergantung ke produk Microsoft. Misalkan saja sebuah Content Management System (CMS) ternyata membutuhkan plugin Microsoft Office supaya bekerja dengan baik. Sialnya yang diperlukan bukan sekedar ActiveX tapi harus meng-install Microsoft Office! Damn, kami harus beli lisensinya hanya gara-gara satu CMS. BTW, CMS ini juga tidak gratis (pssstt.. biar bisa dijual). Hanya CMS? Tidak, masih banyak. Kalau aku tulis blog ini pasti sangat panjang.

Virtualisasi

Disinilah hebatnya Linux. Aku bisa membuat sistem operasi virtual dengan jumlah tidak terbatas. Sebagai contoh aku butuh sebuah demo untuk diperlihatkan kepada client. Aku cukup membuat sebuah image sistem operasi yang sudah diatur untuk dapat jalan di komputer lain tanpa kuatir tidak jalan karena faktor-faktor yang tidak terprediksi. Apakah Windows bisa demikian? Tidak, biarpun menggunakan yang asli, Windows akan memintamu mengaktivasi karena digunakan di mesin yang berbeda. Jalan satu-satunya harus menelepon customer service Microsoft! Repot, bukan? Being legal is not enough!

Masih banyak alasan lain kenapa aku menggunakan Linux seperti halnya virus yang sampai sekarang menjadi masalah di Windows. Terus bagaimana dengan Games? Ah, itu masalahmu bukan masalahku. :-)