Tuesday, May 27, 2008

Perhitungan Durasi Eksekusi

Sering sekali kita ingin mengukur performansi dari aplikasi Java kita berdasarkan durasi eksekusi aplikasi tersebut.

Untuk itu saya menulis tips ini dalam bentuk satu source code, dimana kita menghitung durasi waktu dalam mili detik dan kemudian dikonversi ke satuan detik.

Dalam contoh ini, operasi yang dilakukan adalah pembacaan isi folder temp.


package org.phiintegration.com;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;

/**
* Ini adalah contoh perhitungan durasi waktu yang diperlukan
* untuk menjalankan keseluruhan aplikasi di thread Main.
*
* Dalam contoh ini kita melakukan perhitungan durasi waktu
* yang diperlukan untuk membaca daftar folder di temporary folder.
*
* @author Feris Thia
*
*/

public class DurasiBrowsingFolder {
public static void main(String[] args) throws IOException, Exception {

//Mencatat waktu awal proses
long waktuMulai= System.currentTimeMillis();

//Proses membaca daftar file di lokasi folder temp Java
String curDir = System.getProperty("java.io.tmpdir");
File dir = new File(curDir);

String[] entriFolder = dir.list();
if (entriFolder != null) {
for (int i=0; i<entriFolder.length; i++) {
String namaFile = entriFolder[i];
System.out.println(namaFile);
}
}


//Akhir proses

//Mencatat waktu akhir proses
long waktuSelesai = System.currentTimeMillis();

//Menghitung durasi dalam detik dan
//mencetak dengan format ##0.000000
double newRunTime = (double)(waktuSelesai - waktuMulai) / 1000;
DecimalFormat runtimeDF = new DecimalFormat("##0.000000");

System.out.println("Durasi eksekusi : " +
runtimeDF.format(newRunTime) +
" detik");
}
}

Tipe Data Primitif

Pengenalan

Tipe data primitif adalah tipe data dasar yang dikenali oleh Java dan bukan merupakan class.

Walaupun kelihatan sepele, tetapi dengan memahami cara penggunaan dan mengetahui nilai-nilai yang dapat ditampung oleh variabel data ini dapat mempermudah pekerjaan kita.

Terutama sekali bagi seorang programmer Java yang sehari-harinya berhadapan dengan berbagai macam data dan manipulasinya. Data ini bisa berasal dari database server, text, web, dsbnya...

Tipe data primitif ini dapat dikenali dengan ciri sebagai berikut :

  • memiliki keyword huruf kecil semuanya

  • memiliki wrapper class, yaitu class yang membantu untuk mewakili dan mengolah lebih lanjut nilai dari tipe data bersangkutan. Misalkan int dengan, class Integer.

  • karena bukan suatu class, untuk inisialisasi variabel tidak menggunakan keyword new


Rentang Nilai

Berikut adalah daftar tipe data primitif, rentang nilainya dan panjang bit-nya.

No

Tipe Data

Range Nilai dan Panjang Bit

1

byte

-128 s/d 127 (8 bit)

2

short

-32,768 s/d 32,767 (16 bit)

3

int

-2,147,483,648 s/d 2,147,483,647 (32 bit)

4

long

-9,223,372,036,854,775,808 s/d 9,223,372,036,854,775,807 (64 bit)

5

float

Nilai pecahan (32 bit)

6

double

Nilai pecahan (64 bit)

7

boolean

true / false (1 bit)

8

char

'\u0000' (0) s/d '\uffff' (65,535) (16 bit)

Keterangan :


Nilai Default


No

Tipe Data

Nilai Default

1

byte

0

2

short

0

3

int

0

4

long

0L

5

float

0.0f

6

double

0.0d

7

boolean

false

8

char

'\u0000' (0)

Keterangan:

  • Semua angka bilangan bulat secara default adalah bertipe int. Oleh sebab itu perlu digunakan suffix L untuk menyatakan bilangan bulat yang bertipe long , apalagi jika nilai bilangan bulat yang digunakan sudah melewati jangkauan nilai int.

  • Sebaliknya untuk bilangan pecahan, secara default tipenya adalah double. Sehingga untuk semua nilai pecahan yang akan dimasukkan sebagai nilai untuk tipe data float ini, maka perlu diberikan suffix f.

Contoh Penggunaan Yang Benar


int nilai1 = 20;

long nilai2 = 1000;

long nilai3 = 23000L;

float nilai4 = 90;

float nilai5 = 1.24f;

double nilai6 = 100;

double nilai7 = 2010.9311;

double nilai8 = 2.0109311e3; //sama dengan nilai7 (2.0109311 dikalikan 10 pangkat 3)

double nilai9 = 11.2d;

long nilai_maks_long = 9223372036854775807L;

char nilai10 = 0;

char nilai11 = 'b';

char nilai12 = '\u0003';

boolean kondisi = true;


Contoh Penggunaan Yang Salah


long nilai_maks_long = 9223372036854775807; //harus menggunakan suffix L karena sudah di luar range int

float nilai13 = 0.03; //harus menggunakan suffix f

char nilai14 = '\u01'; //harus menggunakan format '\u9999' (\u diikuti 4 digit hexadecimal)



Referensi
  1. Sun's Java Tutorial, Primitive Data Types section.


Tuesday, May 20, 2008

Video : GData Java Client API Demo

Here is the video showing a demo on using CellDemo class from Google Data (GData) Java client API bundled.


With this video I intended to express 3 things :
  1. How we execute the sample in Eclipse environment
  2. The running class will create a HTTPS channel
  3. Execution result is immediately visible to us
You can watch the video here.

Saturday, May 17, 2008

Eclipse com.sun.mirror.apt.* Problem

When I'm working with Google GData Java client API in Eclipse environment, I found a numerous problems and errors. The problems were found in package com.google.gdata.data.apt which uses a number of classes from com.sun.mirror.apt package, actually a standard package of recent JDK bundled. And Eclipse recognize the package and all the classes as undefined ones.

Well, I have already followed the GData "Get Started" instructions and added all libraries needed. After googling for almost an hour - which is kinda waste of time.- finally I found out an answer. And it had to do with my understanding of Eclipse inclusion of JRE and JDK library.. surprising enough given that it is too basic !

I always assume that "Java library" in Eclipse workspace is a JDK one if we have it installed. But I was wrong, since Eclipse only include JRE library - not the JDK part.

So, what I'm going to do is to add tools.jar - a jar that has com.sun.mirror.apt.* classes - from JDK distribution into my Eclipse project.

To add it as external jar, here are the steps :
  • Navigate to Project=>Properties menu
  • Click on Java Build Path in left side navigation
  • Click at Libraries tag
  • Click on Add External JARs
  • Navigate into your JDK library folder, for example C:\Program Files\Java\jdk1.5.0_15\lib
  • Choose tools.jar and click Open button
  • Click OK
  • Done
Figure 1 : JRE jars and the added JDK's tools.jar


So for those who also develop Java application using GData Java API with Eclipse, I write this article in a hope that it can be a time savior for you facing the same problem.

Thank You for Visiting,

Wednesday, May 14, 2008

Mondrian Java OLAP Server + MySQL

Pentaho Mondrian adalah salah satu OLAP server open source yang dikembangkan dengan bahasa Java dan sangat populer. Tetapi terkadang untuk melakukan instalasi dan konfigurasi kita biasanya menemukan sejumlah isu. Artikel yang saya buat ini mudah-mudahan bisa membantu usaha untuk melakukan setup Mondrian sehingga bisa menjadi entry point untuk masuk ke dunia OLAP open source.

Untuk mengetahui lebih lanjut mengenai Mondrian Anda dapat mengunjungi situs kami di :
- http://pentaho.phi-integration.com/mondrian (Bahasa Indonesia)
- http://pentaho-en.phi-integration.com/mondrian (Bahasa Inggris)

Sunday, May 11, 2008

Static Factory Method dan Contoh Penggunaannya

Kita sebagai programmer Java sering sekali langsung menggunakan operator new untuk melakukan konstruksi dan inisialisasi class kita menjadi object. Kita bisa menggunakan cara lain, yaitu dengan factory method.

Apa sebenarnya fungsi operator new ?

Dengan bahasa yang sangat teknis maka fungsi operator new adalah melakukan konstruksi dan inisialisasi class kita dengan melakukan alokasi memori untuk objek baru dan mengembalikan referensi memori dari objek tersebut. Operator ini juga akan menjalankan metode constructor.

Constructor sendiri adalah method yang namanya sama dengan nama class yang kita definisikan. Contoh penggunaan constructor dan operator new adalah seperti pada listing kedua class Java di bawah ini.

RowData.java

import java.text.SimpleDateFormat;
import java.util.Date;


public class RowData {
private int numberOfFields;
private Date currentDate;

public RowData() {
this.numberOfFields = 0;

currentDate = new Date();
}

public void printCurrentDate()
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(df.format(currentDate));
}

}


InstantiateRowData .java

public class InstantiateRowData {

public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil operator new
* secara langsung dari luar class
**********************************
*/
RowData c = new RowData();

c.printCurrentDate();
}
}


Factory Method

Factory method adalah method yang memiliki fungsi khusus untuk melakukan konstruksi class menjadi objek dan mengembalikan referensi objek tersebut.

Method ini harus bersifat static dan ditempelkan ke dalam class tersebut. Dan untuk menjamin bahwa kita tidak akan bisa melakukan konstruksi langsung maka secara eksplisit method constructor harus diubah diberi akses private.

Lihatlah kedua class setelah diubah konstruksinya.

RowData.java

import java.text.SimpleDateFormat;
import java.util.Date;


public class RowData {
private int numberOfFields;
private Date currentDate;

private RowData() {
this.numberOfFields = 0;

currentDate = new Date();
}

public static RowData getRowData()
{
return new RowData();
}

public void printCurrentDate()
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(df.format(currentDate));
}

}

Perhatikan di baris 9 bahwa constructor kita telah diberi akses private dari yang sebelumnya bersifat public sehingga operator new tidak mungkin dapat mencapainya lagi dari luar class RowData. Kita menggantikannya dengan suatu method static getRowData() yang bersifat public. Di dalam method ini kita kembali melakukan konstruksi objek dengan operator new.

InstantiateRowData.java

public class InstantiateRowData {

public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil
* factory method
**********************************
*/
RowData c = RowData.getRowData();

c.printCurrentDate();
}
}
Kegunaan Factory Method

Walaupun kelihatan sangat sederhana, tetapi apabila kita sudah makin mahir dalam melakukan coding di Java dan menangani proyek yang makin lama skalanya semakin besar maka akan ada kebutuhan untuk membuat aplikasi yang bersifat concurrent atau yang bersifat parallel multi threading. Kondisi ini membuat kita membutuhkan teknik coding yang makin kompleks dan sophisticated. Salah satunya adalah menghindarkan konstruksi objek setengah jadi (half-constructed object) yang dapat terekspos melalui method constructor. Dan ini bisa dipecahkan dengan sangat baik melalui teknik factory method ini.

Selain itu factory method ini juga sudah menjadi bagian dari design pattern yang merupakan kumpulan pola coding yang bisa digunakan kembali sesuai kasus atau reusable.

Download File-file Contoh

Ok, buat Anda yang malas mengetik lagi atau tidak ada editor memadai dan ingin kompilasi langsung dan lihat efeknya silahkan download file-file contohnya di sini.

Blog Business Intelligence PHI-Integration

Hi para sahabat Java,

Hari ini saya memperkenalkan company blog yang khusus membahas penggunaan produk data management dan business intelligence baik open source maupun proprietary. Seperti yang Anda ketahui bahwa produk solusi dari PHI-Integration adalah Pentaho - perusahaan open source BI terdepan saat ini - dimana kami merupakan partner resmi mereka sejak 2006 sehingga blog ini akan membahas cukup banyak tentang produk Pentaho mulai dari Kettle - Pentaho Data Integration, Mondrian OLAP Server, Weka data mining, dan Pentaho Dashboard.


Gambar Tampilan OLAP dari JPivot + MS Analysis Server

Blog yang saya sediakan untuk BI ini dapat Anda akses di http://business-intelligence.blogspot.com. Dari tulisan ini diturunkan sudah terdapat 2 artikel yaitu setting dan testing Mondrian sebagai OLAP XML Provider dan penggunaan JPivot untuk mengkonsumsi data OLAP Microsoft Analysis Server.

Demikian pengumuman ini saya buat. Semoga blog tersebut dapat memberi pengenalan, edukasi dan menjadi wadah berbagi pengetahuan dan pengalaman sebagai praktisi dan profesional di bidang data management dan business intelligence (BI).

Salam,