Diproteksi: Undergraduate Thesis Abstract
Diterbitkan 26 Oktober 2009 Uncategorized Masukkan kata sandi Anda untuk melihat komentarIseng: Infix to Postfix Converter dan Postfix Evaluator dalam Bahasa Java
Diterbitkan 15 September 2008 Academics , Exploration , Work 4 CommentsTags: infiks, infix, infix to postfix, informatika, java, OOP, posfiks, postfix, programming
Tulisan ini adalah kelanjutan dari 2 post sebelumnya (post1, post2). Post ini akan membahas mengenai algoritma konversi ekspresi infiks (ekspresi matematika dengan bentuk a op b, di mana a dan b adalah operan dan op adalah operator) ke posfiks (ekspresi matematika dengan bentuk a b op). Saya memanfaatkan StringTokenizer bawaan Java untuk mengambil setiap operator dan operan pada ekspresi infiks sebagai masukan, serta koleksi objek stack generik yang dibuat dari 2 post sebelumnya.
Algoritma Konversi Ekspresi Infiks ke Posfiks
- Buatlah sebuah stack operator kosong
- Masukkan ekspresi infiks yang akan dikonversi
- Ambil setiap token pada ekspresi infiks, lalu periksa setiap token
- Jika token adalah operan, maka tambahkanlah sebagai notasi posfiks
- Jika token adalah tanda kurung buka, maka push tanda kurung buka ke stack operator
- Jika token adalah tanda kurung tutup, maka pop terus stack operator sampai bertemu tanda kurung buka
- Jika token adalah operator, periksalah stack operator
- Jika stack kosong, maka push token ke dalam stack operator
- Jika stack ada isinya, maka bandingkan presedensi puncak stack dengan token
- Jika presedensi lebih besar maka pop stack operator dan tambahkanlah sebagai notasi posfiks
- Push token ke stack operator
- Ulangi langkah 3 hingga token habis
- Pop terus stack operator sampai kosong dan tambahkan sebagai notasi posfiks
Algoritma Evaluasi Ekspresi Posfiks
- Buatlah sebuah stack operan kosong
- Ambil setiap token pada ekspresi posfiks, lalu periksa setiap token
- Jika token adalah operan, maka push token ke dalam stack operan
- Jika token adalah operator, maka pop stack operan lalu simpan sebagai operan kedua, dan pop lagi stack operan lalu simpan sebagai operan pertama.
- Lakukan perhitungan terhadap kedua operan sesuai dengan operator token
- Push hasil perhitungan ke dalam stack operan
- Ulangi langkah 1 dan 2 hingga token habis
- Pop stack operan dan kembalikan sebagai hasil evaluasi
Sementara itu implementasinya dalam Bahasa Java adalah,
/**
* @author Aprian Diaz Novandi (13505102)
* @version 2.0
* @since 13 September 2008
* @see MyStack
* @throws MyInfixToPostfixException
* Implementasi kelas yang mengubah ekspresi masukan infix ke postfix dan melakukan evaluasi terhadap ekspresi postfix
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.lang.Double;
import java.lang.Math;
import java.util.StringTokenizer;
import MyCollection.*;
public class MyInfixToPostfix {
private MyStack<character> stackOfOperator;
private MyStack<double> stackOfOperand;
public MyInfixToPostfix() {
stackOfOperator = new MyStack<character>();
stackOfOperand = new MyStack<double>();
}
public boolean isOperator(String token) {
return (token.equalsIgnoreCase("^") || token.equalsIgnoreCase("*") || token.equalsIgnoreCase("/") ||
token.equalsIgnoreCase("%") || token.equalsIgnoreCase("+") || token.equalsIgnoreCase("-"));
}
public boolean isOperand(String token) {
//sudah menangani kasus bilangan negatif
return (!isOperator(token) && ((Character.isDigit(token.charAt(0))) || (token.charAt(0) == '-')));
}
//mengembalikan prioritas operator saat evaluasi
public int precedence(char opr) {
int retval;
switch (opr) {
case '^': { retval = 3; break; }
case '*': { retval = 2; break; }
case '/': { retval = 2; break; }
case '%': { retval = 2; break; }
case '+': { retval = 1; break; }
case '-': { retval = 1; break; }
default: { retval = 0; break; }
}
return retval;
}
public String convertToPostfix(String infixExp) throws Exception, MyInfixToPostfixException {
StringTokenizer st = new StringTokenizer(infixExp);
String curToken = "", postfixExp = "";
int nKurungBuka = 0, nKurungTutup = 0;
Character temp;
while(st.hasMoreTokens()) {
//mengambil token
curToken = st.nextToken();
if(isOperand(curToken)) {
//jika currentToken adalah operand, maka kembalikan sebagai ekspresi postfix
postfixExp = postfixExp + " " + (Double.parseDouble(curToken));
} else if(curToken.equals("(")) {
//jika currentToken adalah kurung buka, maka push tanda kurung buka ke stack operator
Character opr = new Character('(');
stackOfOperator.push(opr);
nKurungBuka++;
} else if(curToken.equals(")")) {
//jika currentToken adalah kurung tutup, maka pop stack operator sampai ketemu kurung buka
while(((Character)stackOfOperator.peek()).charValue() != '(') {
postfixExp = postfixExp + " " + stackOfOperator.pop();
}
temp = stackOfOperator.pop();
nKurungTutup++;
} else if(isOperator(curToken)) {
//jika currentToken adalah operator
if(stackOfOperator.isEmpty()) {
//stack operator masih kosong, maka push currentToken ke stack operator
Character opr = new Character(curToken.charAt(0));
stackOfOperator.push(opr);
} else {
/*
stack operator sudah ada isinya
ambil puncak stack, lalu bandingkan presedensinya dengan currentToken
jika precendence(puncak) > precedence(currentToken) maka pop stack
*/
Character opr = new Character(curToken.charAt(0));
if (precedence(((Character)stackOfOperator.peek()).charValue()) > precedence(opr)) {
postfixExp = postfixExp + " " + stackOfOperator.pop();
}
//push currentToken
stackOfOperator.push(opr);
}
} else {
//ekspresi tidak valid
throw new MyInfixToPostfixException("Ekspresi tidak valid");
}
}
//ekspresi tidak valid
if(nKurungBuka != nKurungTutup)
throw new MyInfixToPostfixException("Ekspresi tidak valid");
//pop terus stack operator sampai kosong
while (!stackOfOperator.isEmpty()) {
postfixExp = postfixExp + " " + stackOfOperator.pop();
}
return postfixExp;
}
public double evaluate(String postfixExp) throws Exception {
StringTokenizer st = new StringTokenizer(postfixExp);
double retval;
String curToken = "";
while (st.hasMoreTokens()) {
//mengambil token
curToken = st.nextToken();
if(isOperand(curToken)) {
//jika currentToken adalah operand, maka push ke stack operand
Double opn = new Double(Double.parseDouble(curToken));
stackOfOperand.push(opn);
} else {
//jika currentToken adalah operator, maka evaluasi dua operan sebelumnya
double opn2 = ((Double)stackOfOperand.pop()).doubleValue();
double opn1 = ((Double)stackOfOperand.pop()).doubleValue();
double result = 0;
switch(curToken.charAt(0)) {
case '*': { result = opn1 * opn2; break; }
case '+': { result = opn1 + opn2; break; }
case '-': { result = opn1 - opn2; break; }
case '/': { result = opn1 / opn2; break; }
case '%': { result = opn1 % opn2; break; }
case '^': { result = Math.pow(opn1, opn2); break; }
}
Double opn = new Double(result);
stackOfOperand.push(opn);
}
}
retval = ((Double)stackOfOperand.pop()).doubleValue();
return retval;
}
public static void main(String args[]) throws Exception {
String infixExp = "", postfixExp = "";
MyInfixToPostfix itp = new MyInfixToPostfix();
System.out.println("PERHATIAN!");
System.out.println("Pisahkah masing-masing operand dan operator (termasuk kurung buka dan tutup) dengan minimal satu buah spasi");
System.out.println("--------------------------------------------------\n");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Masukkan ekspresi infix: ");
infixExp = br.readLine();
postfixExp = itp.convertToPostfix(infixExp);
System.out.println("Ekspresi postfix: " + postfixExp);
System.out.println("Hasil evaluasi: " + itp.evaluate(postfixExp));
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("--------------------------------------------------\n");
}
}
}
/**
* @see java.lang.Exception
*/
class MyInfixToPostfixException extends Exception {
private String message;
public MyInfixToPostfixException(String _message) {
super(_message);
message = _message;
}
public String getMessage() {
return message;
}
public String toString() {
return "MyInfixToPostfixException: " + getMessage();
}
public void printStackTrace() {
System.out.println(this);
super.fillInStackTrace();
}
}
Di bawah ini adalah contoh pemanggilan programnya

Pemanggilan Program MyInfixToPostfix
Sampai di sini dulu tulisan saya tentang konversi ekspresi infiks ke posfiks dan juga evaluasi ekspresi posfiks. Semoga tulisan ini berguna bagi Anda
-KnightDNA-
Selayang Pandang Data Warehouse (bagian II)
Diterbitkan 28 Agustus 2008 Exploration , Work 9 CommentsTags: basis data, bi, Business Intelligence, data warehouse, olap, oltp
Lanjutan dari artikel sebelumnya.
Arsitektur Data Warehouse
Secara umum, ada tiga macam arsitektur yang sering ada pada data warehouse, yaitu:
- Standar
Pada arsitektur ini, data warehouse langsung mengambil data yang berasal dari berbagai data sumber tanpa adanya tahapan pengumpulan di tempat sementara sebelum masuk ke data warehouse.
Arsitektur Data Warehouse Standar
- Dengan staging area
Pada arsitektur ini, data warehouse membersihkan dulu data yang berasal dari berbagai data sumber ke suatu tempat penampungan antara (disebut dengan staging) sebelum masuk ke data warehouse. Proses pembersihan ini akan dijelaskan lebih rinci pada proses ETL (akan dibahas pada posting selanjutnya
).

Arsitektur Data Warehouse dengan Staging
- Dengan staging area dan beberapa data mart
Pada arsitektur ini, data warehouse akan dibagi lagi menjadi beberapa upabagian (subset) sesuai dengan tujuan maupun penggunanya (misal: subset penjualan perusahaan, subset pemasaran perusahaan, maupun subset inventaris perusahaan). Upabagian dari data warehouse ini biasa disebut sebagai data mart. Data mart itu sendiri tidak selalu dipadang sebagai sesuatu yang diturunkan dari data warehouse (pendekatan top-down), tapi data mart itu bisa dipandang sebagai komponen penyusun data warehouse (pendekatan bottom-up).
Arsitektur Data Warehouse dengan Staging dan Data Mart
Catatan:
Hal, yang patut Anda perhatikan adalah bahwa staging itu bisa memiliki beberapa tingkatan (level), jadi data yang dijumlahkan (di-summarize) pada staging bisa memiliki level penjumlahan yang berbeda. Contohnya: staging data transaksi pada data warehouse suatu dealer motor bisa dijumlahkan per transaksi, per pelanggan, atau bisa jadi harian atau bulanan, tergantung dari kebutuhan user terhadap data warehouse.
Bersambung
-KnightDNA-
Selayang Pandang Data Warehouse (bagian I)
Diterbitkan 5 Agustus 2008 Exploration , Work 12 CommentsTags: basis data, bi, Business Intelligence, data warehouse, olap, oltp
Akhirnya, sesuai dengan janji saya pada tulisan saya sebelumnya tentang data warehouse, kali ini saya akan kupas tentang data warehouse secara konseptual (belum terlalu mengarah ke teknik). Sebelumnya, saya mohon koreksi dari pembaca sekalian apabila Anda menemukan tulisan saya yang masih belum benar. Baiklah, saya mulai saja.
Definisi Data Warehouse
Salah satu efek yang dihasilkan dari adanya suatu sistem informasi adalah munculnya banyak data. Data yang ada ini berasal dari sistem operasional yang berfungsi untuk menangani transaksi yang terkait dengan proses bisnis yang ditangani oleh sistem informasi tersebut. Contoh: sistem informasi presensi karyawan memunculkan data jumlah kehadiran kehadiran karyawan setiap hari dengan data yang disimpan tergantung pada apa yang dibutuhkan oleh sistem informasi tersebut (misalkan: nomor induk pegawai, jam masuk, pintu masuk, dsb.). Bayangkanlah sistem informasi ini dipakai di perusahaan yang jumlah karyawannya sebanyak 1000 orang. Apabila data ini dipakai selama seminggu masa kerja saja (5 hari), maka data yang masuk dalam basis data ada 1000 x 5 = 5000 baris. Anda tinggal kalikan saja apabila ingin menghitung jumlah data yang disimpan selama seminggu waktu operasional, sebulan, hingga setahun. Itu baru satu sistem informasi saja. Di korporasi yang besar sistem informasi yang ada berjumlah banyak dengan berbagai fungsi dan tujuannya. Akhirnya masalah berikutnya muncul: dengan data yang banyak dan bermacam-macam ini, apa yang bisa saya peroleh/manfaatkan?
Solusi atas masalah tersebut adalah data warehouse! Lompati dulu makna dari frasa data warehouse ini. Untuk bisa tahu dan paham tentang data warehouse, Anda harus tahu dulu definisi dari OLTP. Dalam terminologi basis data, aplikasi yang ada pada sistem informasi untuk contoh kasus di atas menjalankan fungsi yang disebut dengan OLTP (Online Transaction Processing). Jangan terjebak kata online di sini yang tidak sama dengan online ke jaringan Internet. Kata online di sini artinya adalah tersambung langsung dengan basis data. Pada OLTP, hal yang paling penting adalah kecepatan pemrosesan transaksi, sehingga pada OLTP ini aplikasi akan terhubung dengan basis data yang mengalami normalisasi untuk performa pemrosesan transaksi yang lebih cepat dan juga bisa juga untuk efisiensi kapasitas media penyimpanan (data yang redundan jumlahnya berkurang).

Data Warehouse
Hal yang kontras dari OLTP (sistem operasional) akan ditemui pada Data Warehouse. Data Warehouse (yang secara harafiah berarti gudang data) adalah kumpulan seluruh data yang dimiliki oleh perusahaan yang didesain untuk melakukan analisis dan pelaporan, dan bukan untuk pemrosesan transaksi. Jadi, dalam istilah yang lebih sederhana, data warehouse adalah basis data yang ditujukan untuk analisis, pelaporan, dan terkadang juga untuk penambangan pengetahuan (knowledge mining). Data warehouse ini umumnya mengandung data historis yang diturunkan dari data yang dihasilkan oleh OLTP. Tidak menutup kemungkinan juga data warehouse ini juga mengambil data dari berbagai sumber data yang dimiliki oleh perusahaan yang tidak berasal dari basis data (misalkan: laporan keuangan biro tertentu yang berupa berkas/file spreadsheet). Karena sumber datanya bermacam-macam dengan skema dan format yang juga bermacam-macam, maka sebelum memasuki data warehouse, data harus mengalami proses ETL (extraction, transformation, dan loading) agar formatnya konsisten saat masuk ke data warehouse. Pembahasan rinci tentang ETL ini tidak dibahas di tulisan ini. Data warehouse merupakan bagian dari kecerdasan bisnis/business intelligence, yaitu penerapan teknologi informasi pada perusahaan yang berfungsi untuk membantu perusahaan dalam meningkatkan performa bisnis. Tujuan awalnya adalah untuk membantu perusahaan dalam proses penentuan keputusan (decision-making), sementara tujuan akhirnya tentu saja keuntungan perusahaan yang semakin berlipat
.
Perbedaan OLTP dan Data Warehouse
Perbedaan mendasar antara OLTP dengan Data Warehouse terletak pada hal-hal di bawah ini:
- Query
Query pada data warehouse kebanyakan berupa ad-hoc query, artinya query tersebut dibangkitkan secara dinamis lewat bentuk query yang terdefinisi di awal. Pola (kerangka) pada ad-hoc query sudah jelas, tapi saat melakukan analisis, bentuk (badan) query-nya bisa berbeda-beda. Hal yang berbeda akan ditemui di OLTP, yang memiliki query yang harus benar-benar terdefinisi di awal sesuai dengan kondisi (state) transaksi yang ditangani. - Modifikasi Data
Perubahan yang ada pada data warehouse bersifat tambahan saja dan umumnya bersifat borongan lewat proses ETL yang terjadwal secara periodik. Sementara pada OLTP, perubahan yang terjadi harus langsung dilakukan saat itu juga dan setiap modifikasi data yang ada harus konsisten dan benar (sesuai dengan setiap kondisi aktual dari proses bisnis yang ditangani). - Desain Skema
Data warehouse pada umumnya memiliki skema basis data yang didenormalisasi secara penuh atau didenormalisasi sebagian untuk memudahkan eksekusi analisis yang umumnya diimplementasikan dalam bentuk query agregasi dan kalkulasi rumit terhadap data multidimensi. Sementara pada OLTP, skema basis data mengalami normalisasi untuk memudahkan eksekusi transaksi yang terkait dengan operasi-operasi basis data (insert, update, delete), dan untuk menjamin konsistensi basis data. - Operasi Umum
Operasi umum yang implementasinya adalah berupa query analitik untuk data warehouse adalah operasi semacam ini, “Hitungnya masing-masing total penjualan produk X secara nasional per bulan sepanjang tahun 2007″ atau “”, sementara pada OLTP adalah, “Masukkan data pembelian produk ini (ke dalam basis data operasional)”. - Data historis
Pada data warehouse ada banyak data historis dalam jangka waktu yang lama (umumnya dipakai untuk proses analisis). Sementara pada OLTP data yang disimpan jangka waktunya tidak lama, kalaupun ada data historis hanya diperlukan untuk proses transaksi pada saat itu.
Karakteristik Data Warehouse
Beberapa karakteristik dari data warehouse adalah:
- Subject oriented
Karena data warehouse didesain untuk melakukan analisis maka data warehouse harus memproses query yang berupa pertanyaan yang bersifat subjektif, seperti “Produk apa yang paling laku dijual sepanjang tahun 2007?”. Kemampuan untuk memecahkan masalah yang bersifat subjektif ini membuat data warehouse bersifat subject-oriented. - Integrated Sumber data dari data warehouse adalah berbagai data yang dimiliki oleh suatu organisasi dari berbagai sumber dengan skema dan format yang bermacam-macam. Karakteristik ini terkait dengan fungsi data warehouse terhadap sumber data yang akan dimasukkan ke dalam data warehouse.
- Nonvolatile
Data yang sudah masuk ke dalam data warehouse tidak bisa diubah lagi. Hal ini memang sesuai dengan salah satu tujuan dari data warehouse, yaitu analisis. - Time-variant
Data yang ada di dalam data warehouse akan dianalisis perubahannya berdasarkan waktu.
Bersambung
-KnightDNA-
Instalasi dan Konfigurasi Oracle BI Publisher pada Apache Tomcat
Diterbitkan 4 Juli 2008 Exploration , Work 5 CommentsTags: bi, bi publisher, Business Intelligence, configuration, instalasi, installation, kerja praktek, konfigurasi, oracle, xml, xml publisher
Halo semuanya,
Kali ini saya akan menulis petunjuk instalasi dan konfigurasi Oracle BI Publisher Enterprise Edition. Berikut ini lingkungan (environment) tempat saya melakukan instalasi. Mohon Anda perhatikan dulu,
LINGKUNGAN INSTALASI
- Sistem operasi: Micro$*ft Wi*dows XP SP3
- Spesifikasi hardware: Intel Core2Duo T8100 @2.10GHz, RAM 2,00GB
- Server: Apache Tomcat 6.0.13
- Versi JDK: 1.6.0 Update 6
- Versi Oracle BI Publisher: 10.1.3.3.2
Berikut adalah langkah-langkahnya,
DEPLOYMENT ORACLE BI PUBLISHER SERVER
- Periksa folder installer BI publisher
Pastikan terdapat 4 folder utama:doc/,install/,manual/,stage/, danTranslations/ - Silakan masuk ke Tomcat Web Application Manager
- Pilih bagian deploy (WAR file to deploy)
- Sebarkan (deploy) file bernama
xmlpserver.waryang berada di foldermanual/generic - Apabila proses deployment berhasil maka path
/xmlpserverakan muncul di bagian Applications dari Tomcat Web Application Manager
KONFIGURASI REPOSITORI DAN FONT ORACLE BI PUBLISHER SERVER
Setelah aplikasi berhasil di-deploy, silakan ikuti langkah-langkah di bawah ini,
- Salin (copy) folder
XMLP/darimanual/ke server; tempatnya terserah Anda, asalkan masih berada di folder Apache Tomcat
Misal:<direktori_apache_tomcat>/webapps/xmlpserver(tempat deployment aplikasi .war tadi), atau di tempat lain
Catatan:<direktori_apache_tomcat>tempat saya ada diD:\apps\Tomcat6\, silakan sesuaikan dengan tempat Anda melakukan instalasi Apache Tomcat. - Silakan modifikasi file
xmlp-server-config.xmlyang berada di<direktori_apache_tomcat>/WEB-INF/
Akan muncul skema XML sebagai berikut<?xml version="1.0" encoding="UTF-8"?> <xmlpConfig xmlns="http://xmlns.oracle.com/oxp/xmlp"> <resource> <file path="${oracle.home}/xdo/repository"/> </resource> </xmlpConfig> - Gantilah atribut path pada tag file dengan path tempat Anda menyalin folder
XMLP/pada nomor 1
Misal:<file path="D:\apps\Tomcat6\webapps\xmlpserver\XMLP" />
- Salin (copy) font yang ada pada folder
manual/fontske direktori font yang dipakai oleh Java Runtime Environment di tempat Anda masing-masing.
Misal ke:D:\java\jre1.6.0_06\lib\fonts - Jalankan ulang (restart) server Anda
- Sekarang silakan jalankan BI Publisher Server dengan membuka
http://<hostname>:<port>/xmlpserver - Masuk log dengan akun “Administrator” dan sandi (password) “Administrator”
- Selanjutnya, silakan lakukan konfigurasi minimal pada server (baca bagian selanjutnya).
Catatan: demi keamanan, silakan modifikasi akun superuser Administrator tersebut.
Setelah Oracle BI Publisher server berhasil di-install, langkah selanjutnya adalah melakukan konfigurasi minimal, yaitu konfigurasi Scheduler dan Data Source. Konfigurasi hal lain tergantung dari kebebasan dan kreativitas Anda. Silakan baca Dokumentasi Oracle BI Publisher di folder doc/ pada tempat installer Oracle BI Publisher untuk tahu lebih lengkap. Hal tersebut akan terlalu banyak apabila diulas dalam satu tulisan ini.
Konfigurasi Oracle BI Publisher Scheduler
- Silakan masuk ke bagian Admin > Scheduler Configuration
- Masukkan parameter yang diperlukan, antara lain:
- Jenis DBMS (yang didukung untuk penjadwalan hanya Oracle/minimal 8i, IBM DB2/minimal versi 6, Micro$*ft SQL Server, MySQL, dan Sybase)
- Koneksi (memanfaatkan fasilitas JDBC, pastikan Anda sudah memiliki kelas driver untuk masing-masing DBMS)
Contoh:jdbc:oracle:thin@localhost:1521:orclapabila menggunakan DBMS Oracle dengan instans (instance) orcl - Akun (username) dan sandi (password), pastikan akun ini memiliki kewenangan (privilege) yang cukup untuk melakukan penambahan skema serta transaksi
INSERT,UPDATE, danDELETErecord. - Kelas driver basis data (misal:
oracle.jdbc.driver.OracleDriveruntuk DBMS Oracle)
- Untuk menguji apakah koneksi ke basis data berhasil, silakan uji dengan mengklik tombol “Test Connection”
- Apabila sudah berhasil, silakan tambah skema untuk scheduler tadi dengan mengklik tombol “Install Schema”
Konfigurasi Oracle BI Publisher Data Source
- Silakan masuk ke bagian Admin > Data Sources
Catatan: Perhatikan bahwa ada pengaturan untuk koneksi JDBC, koneksi JNDI, dan File (XML). Umumnya yang dipakai adalah koneksi JDBC atau File. - Untuk file, yang didukung adalah file XML, dan untuk menambahkannya silakan klik “Add Data Source”.
- Masukkan parameter yang dibutuhkan.
Catatan: Perhatikan bahwa parameter Full Path of Top-Level Directory harus diisi dengan absolut path ke folder di mana Anda akan menaruh kumpulan file .XML di dalamnya.
Misal:D:\data\xml - Untuk koneksi JDBC atau JNDI silakan lakukan langkah serupa dengan masukan file XML
Catatan: Perhatikan bahwa untuk parameter yang diperlukan pada JDBC mirip dengan langkah konfigurasi Oracle BI Publisher Scheduler, yaitu: Koneksi JDBC, username dan password, serta kelas driver basis data. Jangan lupa untuk memastikan koneksi sudah berhasil dengan mengklik tombol “Test Connection” terlebih dulu. Setelah itu, silakan klik tombol “Apply”.
CATATAN
Segala perubahan yang terkait dengan konfigurasi server akan bisa berjalan setelah Anda menjalankan ulang server.
INSTALASI ORACLE BI PUBLISHER DESKTOP
Setelah instalasi dan konfigurasi minimal Oracle BI Publisher Server dijalankan, maka Anda sudah bisa membangkitkan laporan dengan sumber data yang ada dari data source atau file XML tersendiri. Selain itu ada plug-in integrasi Micro$*ft Office dengan Oracle BI Publisher yang bisa Anda manfaatkan, yaitu Word Template Builder (untuk membuat template menggunakan MS Word) dan Excel Analyzer (untuk OLAP). Untuk memanfaatkannya, silakan install Oracle BI Publisher Desktop dan ExcelAnalyzer yang terdapat di folder instalasi, subfolder manual/XMLP/Tools.
Instalasi bersifat GUI-based sehingga akan memudahkan Anda untuk memasukkan parameter yang diperlukan pada saat instalasi. Silakan ikuti langkah-langkah langsung pada saat instalasi setelah mengklik masing-masing installer tadi.
CATATAN
- Cara menggunakan Word Template Builder akan menjadi pembahasan tersendiri dan tidak di tulisan ini
- Oracle BI Publisher Desktop dan ExcelAnalyzer memerlukan platform .NET 2.0 untuk berjalan. Pastikan Anda sudah meng-install .NET 2.0 sebelumnya.
Demikian catatan instalasi Oracle BI Publisher dari saya. Semoga bisa membantu Anda yang memerlukan panduan tersebut. Pesan saya, tetap gunakan aplikasi legal dan jangan terjebak pada fanatisme penggunaan teknologi atau kakas tertentu. Mohon koreksi bila Anda menemui kesalahan pada tulisan di atas, atau ada bagian yang kurang lengkap. Silakan isi bagian komentar apabila Anda ingin berdiskusi dengan saya. Terima kasih dan semoga hari Anda menyenangkan selalu!
-KnightDNA-
Say Hello to Oracle BI Publisher
Diterbitkan 2 Juli 2008 Exploration , Work 5 CommentsTags: bi, bi publisher, Business Intelligence, kerja praktek, oracle, xml, xml publisher
Halo semuanya,
Di awal Juli ini saya akan menulis artikel tentang Oracle BI Publisher. Mohon maaf, janji saya pada post sebelumnya tentang data warehouse belum bisa saya penuhi sekarang karena tulisan tentang data warehouse sifatnya sangat konseptual dan rupanya cukup njelimet (rumit) dan malas juga untuk menyusun tulisan tentang data warehouse agar mudah dibaca dan dipahami oleh pembaca,
. Baik, kali ini saya akan langsung membahas tentang salah satu bagian dari pembangunan data warehouse, yaitu reporting system, utamanya tentang kakas (tool) yang saya gunakan pada saat kerja praktek ini yaitu Oracle BI Publisher.
Sebaiknya, Anda mengetahui dulu keterkaitan antara data warehouse dan reporting system. Kalau Anda sudah tahu, silakan lewatkan (skip) paragraf ini untuk beralih ke paragraf berikutnya
. Data warehouse (bagian yang lebih detail dan teknis ada di post yang lain
) dibuat dengan tujuan untuk melakukan analisis terhadap data historis yang dimiliki oleh suatu organisasi (umumnya korporat), dan analisis ini digunakan sebagai penunjang keputusan atau kebijakan yang akan diambil oleh perusahaan. Nah, hasil akhir dari analisis data historis tadi bisa berupa berbagai laporan yang ditujukan untuk kalangan eksekutif perusahaan (umunya top level management). Contoh: Laporan hasil penjualan produk XXX (jangan ngeres dulu ya…
) di seluruh Indonesia yang akan ditujukan untuk manajer pemasaran PT XYZ. Laporan ini nantinya bisa dilihat lebih detail per provinsi (misalnya), atau per kabupaten, sehingga sang manajer pemasaran bisa tahu tren pasar secara hierarkis (dari nasional ke aras/level di bawahnya) dari laporan tersebut. Dari situ akhirnya sang manajer bisa memutuskan langkah perusahaan ke depan terkait dengan strategi pemasaran produk tersebut. Got the point?

Salah satu kakas (tool) yang cukup andal dalam masalah enterprise reporting system ini adalah Oracle BI Publisher (dulu bernama XML Publisher, karena data mentah keluarannya berformat XML, bahkan hingga saat ini). Ada beberapa kelebihan tentang kakas ini, yaitu:
- Terintegrasi dengan Micro$*ft Word, jadi, pengguna enterprise reporting system bisa melakukan pembangunan template laporan menggunakan kakas dokumen produksi Micro$*ft yang mudah dipakai
dan mahal ini. Yang perlu Anda catat, Word Template Builder ini perlu platform .NET 2.0 agar bisa digunakan. - Mampu mendukung pengiriman lebih dari satu channel (web, FTP, e-mail, faks, printer).
- Mampu mendukung format keluaran yang bermacam-macam (XML/mentah, HTML, MHTML, PDF, CSV, PPT).
- Menyediakan fasilitas penjadwalan untuk pengiriman laporan (sepertinya ini merupakan standar dari suatu enterprise reporting system).
- Menyediakan layanan web service, sehingga fasilitas pembangkitan laporan bisa dipanggil melalui aplikasi lain.
- Mampu mendukung template animasi Flash, jadi laporan yang dibuat bisa menjadi laporan yang menarik dan interaktif.
- Mampu mendukung berbagai sistem manajemen basis data (RDBMS); tidak terbatas keluarga Oracle saja. Anda juga bisa mengambil data yang berada pada RDBMS MySQL, dan RDBMS lain asalkan didukung oleh Java Database Connectivity (JDBC)
. Satu lagi, Anda bisa langsung menjadikan file XML sebagai sumber data, asalkan skemanya sesuai. Pembahasan tentang skema XML ini masuk ke bagian teknis, dan tidak akan dibahas di sini.
Baru 7 hal tersebut kelebihan Oracle BI Publisher yang saya ketahui sejauh ini. Saya belum pernah membandingkan aplikasi enterprise reporting system yang lain, jadi pendapat di atas masih kurang objektif. Harap maklum saja, sebelumnya saya hanya mendapatkan teori dan konsep saja pada saat kuliah
.
Sementara itu, beberapa hal yang menurut saya “kurang” dari kakas ini adalah tentu saja dari segi harga
. Yup, Oracle BI Publisher memang termasuk golongan aplikasi proprietary yang biasa dipakai kalangan korporat. Tapi tentu saja kocek dan kemampuan menurut saya sudah cukup sebanding. Hehe, beruntung juga saya bisa mencoba satu contoh kakas mahal secara legal.
Apabila Anda tertarik untuk melihat aplikasi Oracle BI Publisher, silakan kunjungi halaman resminya, dan apabila Anda ingin tahu lebih banyak tentang cara penggunaannya, silakan kunjungi blog Oracle BI Publisher.
Sampai di sini dulu tulisan pengantar dari saya tentang Oracle BI Publisher. Sampai jumpa di tulisan selanjutnya tentang langkah instalasi dan konfigurasi Oracle BI Publisher. Saya berencana untuk mempublikasikan banyak artikel seputar kerja saya di sini, termasuk tentang Oracle BI Publisher
. Terakhir, mohon koreksi apabila Anda menemui kesalahan.
-KnightDNA-
Cabang-Cabang FreeBSD (FreeBSD Branches)
Diterbitkan 24 Maret 2008 Exploration Tinggalkan a KomentarTags: branches, freebsd, freebsd-CURRENT, freebsd-RELEASE, freebsd-STABLE
Written by: Alief Nugraha (E-mail System Administrator of ITB)
Edited and translated by: Aprian Diaz Novandi “KnightDNA”
FreeBSD-CURRENT
Apa FreeBSD-CURRENT itu?
FreeBSD-CURRENT adalah versi development (bleeding-edge) yang berisi work in progress, perubahan eksperimental, dan mekanisme transisional yang mungkin akan dipakai dalam rilis FreeBSD selanjutnya. Peringatan penulis: FreeBSD-CURRENT bisa saja sangat tidak stabil, dan sama sekali tidak disarankan untuk digunakan pada production server.
What is FreeBSD-CURRENT?
FreeBSD-CURRENT is the development version (bleedging-edge) containing work in progress, experimental changes, and transitional mechanism that will probably be used in the next release of FreeBSD. Warning: FreeBSD-CURRENT may be unstable, and it is not hardly recommended to be used in a production server.
FreeBSD-STABLE
Apa FreeBSD-STABLE itu?
FreeBSD-STABLE adalah development branch yang di dalamnya major release akan dibuat. Dari waktu ke waktu, FreeBSD-STABLE akan berubah seiring dengan teknologi yang digabung dari FreeBSD-CURRENT, sehingga mungkin tidak sesuai dengan kebutuhan end-user. Apabila Anda ingin mengikuti teknologi terbaru pada FreeBSD dengan stabilitas yang cukup terjamin (namun tidak ada jaminan bahwa branch ini tidak bermasalah), silakan ikuti branch ini.
What is FreeBSD-STABLE?
FreeBSD-STABLE is a development brach where the major release will be made. As the time goes by, FreeBSD-STABLE will be changed with the merged technology from FreeBSD-CURRENT, therefore it may not be suitable for the end-user’s necessity. If you want to follow the latest technology in FreeBSD with an adequate stability (but there is no guarantee that this branch will have no problems), you may use this branch.
FreeBSD-RELEASE
Apa FreeBSD-RELEASE itu?
FreeBSD-RELEASE adalah snapshot dari FreeBSD-STABLE yang telah teruji stabilitasnya, dan tidak akan mengalami perubahan/penambahan teknologi baru. Perubahan yang ada hanyalah patch yang berhubungan dengan keamanan. Anda direkomendasikan untuk memasang FreeBSD-RELEASE pada production server.
What is FreeBSD-RELEASE?
FreeBSD-RELEASE is a snapshot from FreeBSD-STABLE where its stability has properly been tested, and it will not have a major change or addition with the latest technology. The only changes is on the security patch. You are recommended to install FreeBSD-RELEASE on production server.
Apa keuntungan menggunakan FreeBSD-RELEASE?
Anda dapat memperbarui sistem Anda menggunakan freebsd-update(8), baik untuk memperbarui sistem ke versi -RELEASE berikutnya ataupun untuk mendapatkan security patch terbaru tanpa harus mengkompilasi ulang sistem Anda.
What are the advantages of using the FreeBSD-RELEASE?
You may update your system using freebsd-update(8), either to update your system into the next -RELEASE version or to get the latest security patch without recompiling your operating system.
Jadi, branch apakah yang sebaiknya saya pakai untuk production server?
Penulis menganjurkan Anda untuk mengikuti branch -RELEASE. Jangan lupa untuk melihat security errata, dan mem-patch ulang FreeBSD Anda.
So, which branch of FreeBSD that I should use in the production server?
I recommend you to use the -RELEASE branch. Do not forget to see the security errata and repatch your FreeBSD.
-alief.nugraha-
-Team Mailadm ITB-
-KnightDNA-
Membuat CAPTCHA Sederhana
Diterbitkan 14 Maret 2008 Academics , Exploration , Tips and Tricks 9 CommentsTags: captcha, php, web programming
CAPTCHA (kepanjangan: Completely Automated Public Turing test to tell Computers and Humans Apart) adalah gambar yang mengandung kode alfabetik, numerik, ataupun alfanumerik, yang pada umumnya mudah dibaca oleh manusia namun susah (bahkan tidak bisa) dibaca oleh komputer. CAPTCHA bisa dibuat dengan menggunakan skrip PHP dan ekstensi GD yang berfungsi untuk membangkitkan grafik. Tulisan ini akan mengulas tentang cara membuat CAPTCHA sederhana. Anda cukup menyediakan web server Apache dengan modul PHP 5 dan ekstensi GD versi 2.0.34.
Berikut ini adalah langkah-langkah untuk membuat CAPTCHA:
- Buatlah session untuk menyimpan hasil pengacakan string.
- Definisikan gambar yang akan dibuat (tentukan ukuran, dan warna yang akan memenuhi gambar tersebut).
- Persiapkan string yang akan diacak.
- Tambahkan komponen-komponen yang akan memperkuat pengamanan CAPTCHA: font yang unik, penambahan background, penambahan garis-garis, rotasi teks, pembuatan font dengan ukuran masing-masing karakter yang berbeda, dsb.
- Bangkitkan CAPTCHA dengan menghidupkan session, dan memanggil fungsi pembangkit gambar yang ada pada ekstensi GD.
Dan inilah contoh source code-nya (Anda diperbolehkan untuk mengutip, mengedit, memodifikasi, dan menyebarkannya):
<?php
/**
* @name image.php
* @author Aprian Diaz Novandi
* @todo Skrip PHP yang menghasilkan
gambar berformat .PNG dari string hasil pengacakan
huruf kapital dengan font jenis AnkeCalligraph.TTF
* @version 1.0.0.0
* @since May 15th 2007
*/
/*memulai session untuk menyimpan hasil pengacakan
string*/
session_start();
//membuat gambar berukuran 150x50 piksel
$im = imagecreatetruecolor(150, 50);
//definisi warna
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 175, 175, 175);
$black = imagecolorallocate($im, 0, 0, 0);
/*membuat kotak berwarna putih dari titik (0,0) s.d.
(150,50)*/
imagefilledrectangle($im, 0, 0, 150, 50, $white);
//string teks yang akan diacak
$str =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
/*mengambil enam karakter saja dari hasil pengacakan
string*/
$text = substr(str_shuffle($str),0,6);
//font yang dipilih
$font = 'Walrod-Regular.TTF';
/*parameter fungsi imagettftext
(gambar_sumber,ukuran_font,sudut,x,y,
warna,jenis_font,text_yang_akan_ditulis)*/
//menambahkan bayangan
imagettftext($im, 22, 0, 10, 35, $grey, $font, $text);
//menambahkan teks
imagettftext($im, 16, 0, 10, 35, $black, $font, $text);
//menghidupkan session
/*nilai variabelnya bisa dienkripsi, bisa plain, agar lebih
aman silakan dienkripsi*/
$_SESSION['randstr'] = sha1($text);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
Kode di atas adalah kode untuk gambar CAPTCHA-nya. Simpanlah di file yang berbeda (misalkan bernama image.php). Untuk menampilkan gambar tersebut, silakan gunakan tag image pada HTML
<img src="image.php" />
Dan untuk mencocokkan gambar yang muncul, silakan bandingkan kesamaan input dari form dengan variabel $_SESSION['randstr']. Apabila pada kode gambar CAPTCHA, nilai variabel $_SESSION['randstr'] dienkripsi (misal menggunakan algoritma enkripsi SHA1), tentu input tersebut juga harus dienkripsi.
Skrip di atas masih memiliki kelemahan, yaitu masih bisa diinterpretasi oleh aplikasi yang memanfaatkan aspek kecerdasan buatan (computer vision). CAPTCHA yang baik adalah CAPTCHA yang susah diinterpretasi oleh aplikasi semacam itu. Saat ini, semakin banyak aplikasi yang dikembangkan untuk mematahkan pengamanan halaman web dengan CAPTCHA, dan biasanya akan dipakai oleh mesin penyebar spam.
Untuk melihat contoh aplikasi yang memanfaatkan CAPTCHA, Anda bisa menuju link: http://arc.itb.ac.id/~diaz/captcha
Tips di bawah ini barangkali berguna untuk Anda yang tertarik untuk bermain-main dengan CAPTCHA:
- Hindari pembuatan CAPTCHA tanpa latar belakang karena akan semakin memudahkan aplikasi pembaca kode CAPTCHA. Paling tidak buatlah tambahan garis-garis atau buatlah dengan pilihan font yang unik tapi masih terbaca manusia
- Modifikasilah karakter-karakter CAPTCHA yang dibuat dengan merotasi karakter dan/atau mengatur ukuran karakter tersebut agar berbeda.
-KnightDNA-






Komentar Terakhir