<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>KnightDNA's Technical Blog</title>
	<atom:link href="http://dnacodons.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dnacodons.wordpress.com</link>
	<description>Web Application Development, Business Intelligence, Software Engineering, etc.</description>
	<lastBuildDate>Mon, 26 Oct 2009 17:42:02 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>id</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='dnacodons.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/3b5201adbea4e64e3c548cf1a71c6442?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>KnightDNA's Technical Blog</title>
		<link>http://dnacodons.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dnacodons.wordpress.com/osd.xml" title="KnightDNA&#8217;s Technical Blog" />
		<item>
		<title>Diproteksi: Undergraduate Thesis Abstract</title>
		<link>http://dnacodons.wordpress.com/2009/10/26/undergraduate-thesis-abstract/</link>
		<comments>http://dnacodons.wordpress.com/2009/10/26/undergraduate-thesis-abstract/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 15:38:03 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dnacodons.wordpress.com/?p=252</guid>
		<description><![CDATA[Tidak ada kutipan karena ini adalah tulisan yang dilindungi kata sandi.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=252&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><form action="http://dnacodons.wordpress.com/wp-pass.php" method="post">
<p>Tulisan ini dilindungi kata sandi. Untuk melihatnya mohon masukkan sandi Anda di bawah ini:</p>
<p><label for="pwbox-252">Kata Sandi:<br />
<input name="post_password" id="pwbox-252" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="Kirim" /></p></form>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/252/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=252&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2009/10/26/undergraduate-thesis-abstract/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>
	</item>
		<item>
		<title>Iseng: Infix to Postfix Converter dan Postfix Evaluator dalam Bahasa Java</title>
		<link>http://dnacodons.wordpress.com/2008/09/15/iseng-infix-to-postfix-converter-dan-postfix-evaluator-dalam-bahasa-java/</link>
		<comments>http://dnacodons.wordpress.com/2008/09/15/iseng-infix-to-postfix-converter-dan-postfix-evaluator-dalam-bahasa-java/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 11:34:37 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Academics]]></category>
		<category><![CDATA[Exploration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[infiks]]></category>
		<category><![CDATA[infix]]></category>
		<category><![CDATA[infix to postfix]]></category>
		<category><![CDATA[informatika]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[posfiks]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://knightdna.wordpress.com/?p=191</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=191&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Tulisan ini adalah kelanjutan dari 2 post sebelumnya (<a href="http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-one/" target="_blank">post1</a>, <a href="http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-two/" target="_blank">post2</a>). Post ini akan membahas mengenai algoritma konversi ekspresi infiks (ekspresi matematika dengan bentuk <code>a <span style="text-decoration:underline;">op</span> b</code>, di mana <code>a</code> dan <code>b</code> adalah operan dan <span style="text-decoration:underline;"><code>op</code></span> adalah operator) ke posfiks (ekspresi matematika dengan bentuk <code>a b <span style="text-decoration:underline;">op</span></code>). 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.</p>
<p><strong>Algoritma Konversi Ekspresi Infiks ke Posfiks</strong></p>
<ol>
<li>Buatlah sebuah stack operator kosong</li>
<li>Masukkan ekspresi infiks yang akan dikonversi</li>
<li>Ambil setiap token pada ekspresi infiks, lalu periksa setiap token
<ul>
<li>Jika token adalah operan, maka tambahkanlah sebagai notasi posfiks</li>
<li>Jika token adalah tanda kurung buka, maka push tanda kurung buka ke stack operator</li>
<li>Jika token adalah tanda kurung tutup, maka pop terus stack operator sampai bertemu tanda kurung buka</li>
<li>Jika token adalah operator, periksalah stack operator
<ul>
<li>Jika stack kosong, maka push token ke dalam stack operator</li>
<li>Jika stack ada isinya, maka bandingkan presedensi puncak stack dengan token
<ul>
<li>Jika presedensi lebih besar maka pop stack operator dan tambahkanlah sebagai notasi posfiks</li>
</ul>
</li>
</ul>
</li>
<li>Push token ke stack operator</li>
</ul>
</li>
<li>Ulangi langkah 3 hingga token habis</li>
<li>Pop terus stack operator sampai kosong dan tambahkan sebagai notasi posfiks</li>
</ol>
<p><strong>Algoritma Evaluasi Ekspresi Posfiks</strong></p>
<ol>
<li>Buatlah sebuah stack operan kosong</li>
<li>Ambil setiap token pada ekspresi posfiks, lalu periksa setiap token
<ul>
<li>Jika token adalah operan, maka push token ke dalam stack operan</li>
<li>Jika token adalah operator, maka pop stack operan lalu simpan sebagai operan kedua, dan pop lagi stack operan lalu simpan sebagai operan pertama.</li>
<li>Lakukan perhitungan terhadap kedua operan sesuai dengan operator token</li>
</ul>
</li>
<li>Push hasil perhitungan ke dalam stack operan</li>
<li>Ulangi langkah 1 dan 2 hingga token habis</li>
<li>Pop stack operan dan kembalikan sebagai hasil evaluasi</li>
</ol>
<p>Sementara itu implementasinya dalam Bahasa Java adalah,</p>
<pre class="brush: java;">
/**
 *	@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&lt;character&gt; stackOfOperator;
	private MyStack&lt;double&gt; stackOfOperand;

	public MyInfixToPostfix() {
		stackOfOperator = new MyStack&lt;character&gt;();
		stackOfOperand = new MyStack&lt;double&gt;();
	}

	public boolean isOperator(String token) {
		return (token.equalsIgnoreCase(&quot;^&quot;) || token.equalsIgnoreCase(&quot;*&quot;) || token.equalsIgnoreCase(&quot;/&quot;)  ||
				token.equalsIgnoreCase(&quot;%&quot;) || token.equalsIgnoreCase(&quot;+&quot;) || token.equalsIgnoreCase(&quot;-&quot;));
	}

	public boolean isOperand(String token) {
		//sudah menangani kasus bilangan negatif
		return (!isOperator(token) &amp;&amp; ((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 = &quot;&quot;, postfixExp = &quot;&quot;;
		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 + &quot; &quot; + (Double.parseDouble(curToken));
			} else if(curToken.equals(&quot;(&quot;)) {
				//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(&quot;)&quot;)) {
				//jika currentToken adalah kurung tutup, maka pop stack operator sampai ketemu kurung buka
				while(((Character)stackOfOperator.peek()).charValue() != '(') {
					postfixExp = postfixExp + &quot; &quot; + 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) &gt; precedence(currentToken) maka pop stack
					*/
					Character opr = new Character(curToken.charAt(0));
					if (precedence(((Character)stackOfOperator.peek()).charValue()) &gt; precedence(opr)) {
						postfixExp = postfixExp + &quot; &quot; + stackOfOperator.pop();
					}
					//push currentToken
					stackOfOperator.push(opr);
				}
			} else {
				//ekspresi tidak valid
				throw new MyInfixToPostfixException(&quot;Ekspresi tidak valid&quot;);
			}
		}

		//ekspresi tidak valid
		if(nKurungBuka != nKurungTutup)
			throw new MyInfixToPostfixException(&quot;Ekspresi tidak valid&quot;);

		//pop terus stack operator sampai kosong
		while (!stackOfOperator.isEmpty()) {
			postfixExp = postfixExp + &quot; &quot; + stackOfOperator.pop();
		}
		return postfixExp;
	}

	public double evaluate(String postfixExp) throws Exception {
		StringTokenizer st = new StringTokenizer(postfixExp);
		double retval;
		String curToken = &quot;&quot;;

		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 = &quot;&quot;, postfixExp = &quot;&quot;;
		MyInfixToPostfix itp = new MyInfixToPostfix();

		System.out.println(&quot;PERHATIAN!&quot;);
		System.out.println(&quot;Pisahkah masing-masing operand dan operator (termasuk kurung buka dan tutup) dengan minimal satu buah spasi&quot;);
		System.out.println(&quot;--------------------------------------------------\n&quot;);
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			System.out.print(&quot;Masukkan ekspresi infix: &quot;);
			infixExp = br.readLine();
			postfixExp = itp.convertToPostfix(infixExp);

			System.out.println(&quot;Ekspresi postfix: &quot; + postfixExp);
			System.out.println(&quot;Hasil evaluasi: &quot; + itp.evaluate(postfixExp));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println(&quot;--------------------------------------------------\n&quot;);
		}
	}
}

/**
 *	@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 &quot;MyInfixToPostfixException: &quot; + getMessage();
	}

	public void printStackTrace() {
		System.out.println(this);
		super.fillInStackTrace();
	}
}
</pre>
<p>Di bawah ini adalah contoh pemanggilan programnya</p>
<div id="attachment_200" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-200" title="screenshoot-infixtopostfix-big" src="http://knightdna.files.wordpress.com/2008/09/screenshot11.jpeg?w=500&#038;h=280" alt="Pemanggilan Program MyInfixToPostfix" width="500" height="280" /><p class="wp-caption-text">Pemanggilan Program MyInfixToPostfix</p></div>
<p>Sampai di sini dulu tulisan saya tentang konversi ekspresi infiks ke posfiks dan juga evaluasi ekspresi posfiks. Semoga tulisan ini berguna bagi Anda <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>-KnightDNA-</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/191/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/191/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=191&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/09/15/iseng-infix-to-postfix-converter-dan-postfix-evaluator-dalam-bahasa-java/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>

		<media:content url="http://knightdna.files.wordpress.com/2008/09/screenshot11.jpeg" medium="image">
			<media:title type="html">screenshoot-infixtopostfix-big</media:title>
		</media:content>
	</item>
		<item>
		<title>Iseng: Linked-List Generik dan Stack Generik dengan Representasi Linked-List dalam Bahasa Java (bagian II)</title>
		<link>http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-two/</link>
		<comments>http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-two/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 04:49:48 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Academics]]></category>
		<category><![CDATA[Exploration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[generik]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[koleksi objek]]></category>
		<category><![CDATA[linked-list]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[pemrograman]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://knightdna.wordpress.com/?p=177</guid>
		<description><![CDATA[Lanjutan dari post sebelumnya.
Sekarang adalah kelas Stack dan StackException (letakkan keduanya sebagai dua kelas public di dua file yang berbeda)

/**
 *    @author     Aprian Diaz Novandi (13505102)
 *    @version    1.0
 *    @since      13 September 2008
 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=177&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Lanjutan dari post <a href="http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-one/" target="_blank">sebelumnya</a>.</p>
<p>Sekarang adalah kelas Stack dan StackException (letakkan keduanya sebagai dua kelas public di dua file yang berbeda)</p>
<pre class="brush: java;">
/**
 *    @author     Aprian Diaz Novandi (13505102)
 *    @version    1.0
 *    @since      13 September 2008
 *    @see        MyList
 *    @throws     MyStackException
 *    Implementasi kelas stack dengan representasi linked-list di Java
 */

package MyCollection;

public class MyStack&lt;t&gt; extends MyList&lt;t&gt; {
    //ukuran stack
    private int size;

    //puncak stack
    private ElmtList&lt;t&gt; top;

    //ctor
    public MyStack() {
        super();
        top = first;
        size = 0;
    }

    public boolean isEmpty() {
        return top == null;
    }

    public int getSize() {
        return size;
    }

    public T peek() {
        return top.getInfo();
    }

    public void push(T item) {
        ElmtList&lt;t&gt; node = new ElmtList&lt;t&gt;(item);
        super.insertFirst(node);
        top = first;
        size++;
    }

    public T pop() throws MyStackException {
        T item = null;
        if(isEmpty()) {
            throw new MyStackException(&quot;Stack kosong&quot;);
        } else {
            ElmtList&lt;t&gt; node = super.deleteFirst();
            item = node.getInfo();
            top = first;
            size--;
        }
        return item;
    }

    public String toString() {
        String retval = super.toString();
        return retval;
    }
}
</pre>
<pre class="brush: java;">

package MyCollection;

public class MyStackException extends Exception {
    private String message;

    public MyStackException(String _message) {
        super(_message);
        message = _message;
    }

    public String getMessage() {
        return message;
    }

    public String toString() {
        return &quot;MyStackException: &quot; + getMessage();
    }

    public void printStackTrace() {
        System.out.println(this);
        super.fillInStackTrace();
    }
}
</pre>
<p>Selanjutnya kelas StackDriver untuk pengujian</p>
<pre class="brush: java;">
import MyCollection.MyStack;
import MyCollection.MyStackException;

public class MyStackDriver {
	public static void main(String[] args) {
		MyStack&lt;integer&gt; S1 = new MyStack&lt;integer&gt;();
		MyStack&lt;character&gt; S2 = new MyStack&lt;character&gt;();
		try {
			S1.push(100);
			S1.push(101);
			S1.push(102);
			S2.push('(');
			int item = S1.pop();
			int itemTop = S1.peek();
			System.out.println(&quot;Item yang di-pop: &quot; + item);
			System.out.println(&quot;Item di top of stack: &quot; + itemTop);
		} catch (MyStackException e) {
			e.printStackTrace();
		} finally {
			System.out.println(S1);
			System.out.println(S2);
		}
	}
}
</pre>
<p>Oke, itu dulu keisengan saya <span style="text-decoration:line-through;">di sela kebosanan mengerjakan TA</span> untuk bagian pertama ini. Sampai jumpa di postingan saya selanjutnya tentang InfixToPostfix. <span style="text-decoration:line-through;">Doakan TA saya lancar ya <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </span>. Semoga berguna bagi Anda.</p>
<p>-KnightDNA-</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/177/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/177/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/177/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=177&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>
	</item>
		<item>
		<title>Iseng: Linked-List Generik dan Stack Generik dengan Representasi Linked-List dalam Bahasa Java (bagian I)</title>
		<link>http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-one/</link>
		<comments>http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-one/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 04:32:23 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Academics]]></category>
		<category><![CDATA[Exploration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[generik]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[koleksi objek]]></category>
		<category><![CDATA[linked-list]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[pemrograman]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://knightdna.wordpress.com/?p=172</guid>
		<description><![CDATA[Iseng-iseng ingin menambah daftar post, kali ini saya akan menyisipkan salah satu tugas mata kuliah S2 di Rekayasa Perangkat Lunak, IF-ITB. Mata kuliahnya Algoritma dan Pemrograman. Ya, sepintas namanya sama dengan mata kuliah yang pernah saya ambil saat tingkat satu kemarin, tapi ternyata setelah sang dosen (Pak Saiful) memberikan silabus kuliahnya tampaklah bahwa mata kuliah [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=172&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Iseng-iseng ingin menambah daftar post, kali ini saya akan menyisipkan salah satu tugas mata kuliah S2 di Rekayasa Perangkat Lunak, IF-ITB. Mata kuliahnya Algoritma dan Pemrograman. Ya, sepintas namanya sama dengan mata kuliah yang pernah saya ambil saat tingkat satu kemarin, tapi ternyata setelah sang dosen (<a href="http://www.informatika.org/~saiful/" target="_blank">Pak Saiful</a>) memberikan silabus kuliahnya tampaklah bahwa mata kuliah ini adalah lanjutan (lebih tepatnya ulangan dengan sudut pandang ala mahasiswa S2 <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ) dari trilogi pemrograman IF ITB <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  (Algoritma dan Pemrograman, Algoritma dan Struktur Data, dan Pemrograman Beriorentasi Objek).</p>
<p>Materinya, karena masih awal-awal, banyak yang me-review kuliah S1 kemarin, termasuk tugas-tugasnya. Kebetulan tugas minggu ini adalah review OOP yang terkait dengan materi koleksi objek dan kelas generik. Hmm, berhubung saya jarang sekali mengkode program dalam Bahasa Java (lebih sering menggunakan Bahasa C dan keluarganya serta teknologi .NET), jadi tugas kemarin sekalian membiasakan saya dengan Bahasa Java. Judul post ini adalah tugasnya, dan sebenarnya akan dipakai untuk membuat kelas yang akan mengubah notasi operasi matematika infiks menjadi posfiks, lalu melakukan evaluasi terhadap notasi posfiks tadi dengan menggunakan stack. Tapi stack-nya harus dalam representasi linked-list.</p>
<p>Sebenarnya di Java sudah ada kelas-kelas koleksi objek tersebut (List, Stack, dan Queue/tidak dibahas di post ini) milik API Java, tapi pak dosen menyarankan mahasiswanya untuk mengkode sendiri koleksi objek yang diperlukan dalam tugas. So, here it is. Mudah-mudahan berguna bagi adik-adik tingkat saya yang nantinya akan mengambil kuliah Pemrograman Beriorientasi Objek atau siapa pun yang ingin mencoba-coba. Just, correct me if I wrong <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: java;">

/**
 *    @author     Aprian Diaz Novandi (13505102)
 *    @version    3.0
 *    @since      13 September 2008
 *    Implementasi kelas linked-list generic di Java
 */

package MyCollection;

import java.lang.NullPointerException;

public class MyList&lt;t&gt; {
    static class ElmtList&lt;t&gt; {
        //data
        private T info;
        //referensi ke elemen selanjutnya
        private ElmtList&lt;t&gt; next;

        public ElmtList() {
            info = null;
        }

        public ElmtList(T _info) {
            info = _info;
        }

        public T getInfo() {
            return info;
        }

        public ElmtList&lt;t&gt; getNext() throws NullPointerException {
            return next;
        }

        public void setNext(ElmtList&lt;t&gt; node) throws NullPointerException {
            next = node;
        }

        public String toString() {
            if(next == null)
                return &quot;[&quot; + info + &quot;|X]&quot;;
            else
                return &quot;[&quot; + info + &quot;]-&gt;&quot;;
        }
    }

    //elemen pertama list
    protected ElmtList&lt;t&gt; first;

    //ctor
    public MyList() { }

    public boolean isEmpty() {
        return first == null;
    }

    public ElmtList&lt;t&gt; getFirst() {
        return first;
    }

    public void insertFirst(ElmtList&lt;t&gt; node) {
        node.setNext(first);
        first = node;
    }

    public void insertLast(ElmtList&lt;t&gt; node) {
        if(first == null)
            first = node;
        else {
            ElmtList P = first;
            while(P.getNext() != null) {
                P = P.getNext();
            }
            P.setNext(node);
        }
    }

    public ElmtList&lt;t&gt; deleteFirst() {
        ElmtList&lt;t&gt; node = first;
        if(node != null) {
            first = node.getNext();
            node.setNext(null);
        }
        return node;
    }

    public ElmtList&lt;t&gt; deleteLast() {
        ElmtList&lt;t&gt; P = first, Prev = null, retval = null;
        if (P == null) {
            //list kosong
            retval = null;
        } else if(P.getNext() == null) {
            //elemen list hanya satu
            first = null;
            retval = P;
        } else {
            while(P.getNext() != null) {
                Prev = P;
                P = P.getNext();
            }
            retval = P;
            Prev.setNext(null);
            P = Prev;
        }
        return retval;
    }

    public String toString() {
        ElmtList&lt;t&gt; P = first;
        String retval = &quot;&quot;;
        while(P.getNext() != null) {
            //cetak dan telusuri semua elemen
            retval += P.toString();
            P = P.getNext();
        }
        //cetak elemen terakhir
        retval += P.toString();
        return retval;
    }

    //driver, untuk pengujian
    public static void main(String[] args) {
        MyList&lt;integer&gt; L1 = new MyList&lt;integer&gt;();
        MyList&lt;string&gt; L2 = new MyList&lt;string&gt;();

        try {
            L1.insertFirst(new ElmtList&lt;integer&gt;(100));
            L1.insertFirst(new ElmtList&lt;integer&gt;(101));
            L1.insertFirst(new ElmtList&lt;integer&gt;(102));
            L1.deleteFirst();
            L2.insertFirst(new ElmtList&lt;string&gt;(&quot;aku&quot;));
            L2.insertFirst(new ElmtList&lt;string&gt;(&quot;kamu&quot;));
            L2.insertLast(new ElmtList&lt;string&gt;(&quot;dia&quot;));
            L2.insertLast(new ElmtList&lt;string&gt;(&quot;mereka&quot;));
            L2.deleteFirst();
            L2.deleteLast();
        } catch (NullPointerException e) {
            e.printStackTrace();
        } finally {
            System.out.println(L1);
            System.out.println(L2);
        }
    }
}
</pre>
<p>Bersambung.</p>
<p>-KnightDNA-</p>
<p>PS: Saya mengelompokkan koleksi-koleksi objek tadi dalam satu package bernama MyCollection</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/172/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/172/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/172/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=172&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/09/15/iseng-i-part-one/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>
	</item>
		<item>
		<title>Selayang Pandang Data Warehouse (bagian II)</title>
		<link>http://dnacodons.wordpress.com/2008/08/28/selayang-pandang-data-warehouse-bagian-ii/</link>
		<comments>http://dnacodons.wordpress.com/2008/08/28/selayang-pandang-data-warehouse-bagian-ii/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 15:36:10 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Exploration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[basis data]]></category>
		<category><![CDATA[bi]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[data warehouse]]></category>
		<category><![CDATA[olap]]></category>
		<category><![CDATA[oltp]]></category>

		<guid isPermaLink="false">http://knightdna.wordpress.com/?p=146</guid>
		<description><![CDATA[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.

 Dengan staging area
Pada arsitektur ini, data warehouse membersihkan dulu data yang [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=146&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Lanjutan dari <a title="Selayang Pandang Data Warehouse (bagian I)" href="http://dnacodons.wordpress.com/2008/08/05/selayang-pandang-data-warehouse-bagian-i/" target="_blank">artikel sebelumnya</a>.</p>
<p><strong>Arsitektur <em>Data Warehouse</em><br />
</strong>Secara umum, ada tiga macam arsitektur yang sering ada pada <em>data warehouse</em>, yaitu:<br />
<strong></strong></p>
<ol>
<li> <strong>Standar</strong><br />
Pada arsitektur ini, <em>data warehouse</em> langsung mengambil data yang berasal dari berbagai data sumber tanpa adanya tahapan pengumpulan di tempat sementara sebelum masuk ke <em>data warehouse</em>.</p>
<p><div id="attachment_148" class="wp-caption aligncenter" style="width: 424px"><img class="size-full wp-image-148" src="http://knightdna.files.wordpress.com/2008/08/ars001.gif?w=414&#038;h=302" alt="Arsitektur Data Warehouse Standar" width="414" height="302" /><p class="wp-caption-text">Arsitektur Data Warehouse Standar</p></div></li>
<li> <strong>Dengan <em>staging area</em></strong><br />
Pada arsitektur ini, <em>data warehouse</em> membersihkan dulu data yang berasal dari berbagai data sumber ke suatu tempat penampungan antara (disebut dengan <em>staging</em>) sebelum masuk ke <em>data warehouse</em>. Proses pembersihan ini akan dijelaskan lebih rinci pada proses ETL (akan dibahas pada <em>posting</em> selanjutnya <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ).</p>
<p><div id="attachment_149" class="wp-caption aligncenter" style="width: 441px"><img class="size-full wp-image-149" src="http://knightdna.files.wordpress.com/2008/08/ars002.gif?w=431&#038;h=321" alt="Arsitektur Data Warehouse dengan Staging" width="431" height="321" /><p class="wp-caption-text">Arsitektur Data Warehouse dengan Staging</p></div></li>
<li><strong>Dengan <em>staging area</em> dan beberapa <em>data mart</em><br />
</strong>Pada arsitektur ini, <em>data warehouse</em> akan dibagi lagi menjadi beberapa upabagian (<em>subset</em>) sesuai dengan tujuan maupun penggunanya (misal: <em>subset</em> penjualan perusahaan, <em>subset</em> pemasaran perusahaan, maupun <em>subset </em>inventaris perusahaan). Upabagian dari <em>data warehouse</em> ini biasa disebut sebagai <em>data mart</em>. <em>Data mart</em> itu sendiri tidak selalu dipadang sebagai sesuatu yang diturunkan dari <em>data warehouse</em> (pendekatan <em>top-down</em>), tapi <em>data mart</em> itu bisa dipandang sebagai komponen penyusun <em>data warehouse</em> (pendekatan <em>bottom-up</em>).</p>
<p><div id="attachment_150" class="wp-caption aligncenter" style="width: 498px"><img class="size-full wp-image-150" src="http://knightdna.files.wordpress.com/2008/08/ars003.gif?w=488&#038;h=317" alt="Arsitektur Data Warehouse dengan Staging dan Data Mart" width="488" height="317" /><p class="wp-caption-text">Arsitektur Data Warehouse dengan Staging dan Data Mart</p></div></li>
</ol>
<p><strong>Catatan:</strong></p>
<p>Hal, yang patut Anda perhatikan adalah bahwa <em>staging</em> itu bisa memiliki beberapa tingkatan (<em>level</em>), jadi data yang dijumlahkan (di-<em>summarize</em>) pada <em>staging</em> bisa memiliki level penjumlahan yang berbeda. Contohnya: <em>staging</em> 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 <em>data warehouse</em>.</p>
<p>Bersambung</p>
<p>-KnightDNA-</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/146/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/146/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=146&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/08/28/selayang-pandang-data-warehouse-bagian-ii/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>

		<media:content url="http://knightdna.files.wordpress.com/2008/08/ars001.gif" medium="image">
			<media:title type="html">Arsitektur Data Warehouse Standar</media:title>
		</media:content>

		<media:content url="http://knightdna.files.wordpress.com/2008/08/ars002.gif" medium="image">
			<media:title type="html">Arsitektur Data Warehouse dengan Staging</media:title>
		</media:content>

		<media:content url="http://knightdna.files.wordpress.com/2008/08/ars003.gif" medium="image">
			<media:title type="html">Arsitektur Data Warehouse dengan Staging dan Data Mart</media:title>
		</media:content>
	</item>
		<item>
		<title>Selayang Pandang Data Warehouse (bagian I)</title>
		<link>http://dnacodons.wordpress.com/2008/08/05/selayang-pandang-data-warehouse-bagian-i/</link>
		<comments>http://dnacodons.wordpress.com/2008/08/05/selayang-pandang-data-warehouse-bagian-i/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 07:49:45 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Exploration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[basis data]]></category>
		<category><![CDATA[bi]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[data warehouse]]></category>
		<category><![CDATA[olap]]></category>
		<category><![CDATA[oltp]]></category>

		<guid isPermaLink="false">http://knightdna.wordpress.com/?p=136</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=136&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Akhirnya, sesuai dengan janji saya pada <a title="Say Hello to Oracle BI Publisher" href="http://dnacodons.wordpress.com/2008/07/02/say-hello-to-oracle-bi-publisher/" target="_blank">tulisan saya sebelumnya</a> tentang <strong>data warehouse</strong>, 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.</p>
<p><strong>Definisi Data Warehouse</strong></p>
<p>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?</p>
<p>Solusi atas masalah tersebut adalah <strong>data warehouse</strong>! Lompati dulu makna dari frasa data warehouse ini. Untuk bisa tahu dan paham tentang data warehouse, Anda harus tahu dulu definisi dari <strong>OLTP</strong>. Dalam terminologi basis data, aplikasi yang ada pada sistem informasi untuk contoh kasus di atas menjalankan fungsi yang disebut dengan OLTP (<em>Online Transaction Processing</em>). Jangan terjebak kata <em>online </em>di sini yang tidak sama dengan <em>online </em>ke jaringan Internet. Kata <em>online </em>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).</p>
<div id="attachment_137" class="wp-caption aligncenter" style="width: 424px"><img class="size-full wp-image-137" src="http://knightdna.files.wordpress.com/2008/08/dwh.gif?w=414&#038;h=302" alt="Data Warehouse" width="414" height="302" /><p class="wp-caption-text">Data Warehouse</p></div>
<p>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 <strong>analisis </strong>dan <strong>pelaporan</strong>, dan <strong>bukan untuk pemrosesan transaksi</strong>. Jadi, dalam istilah yang lebih sederhana, <em>data warehouse</em> adalah basis data yang ditujukan untuk analisis, pelaporan, dan  terkadang juga untuk penambangan pengetahuan (<em>knowledge mining</em>). <em>Data warehouse</em> ini umumnya mengandung data historis yang diturunkan dari data yang dihasilkan oleh OLTP. Tidak menutup kemungkinan juga <em>data warehouse</em> 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 (<em>extraction</em>, <em>transformation</em>, dan <em>loading</em>) agar formatnya konsisten saat masuk ke <em>data warehouse</em>. Pembahasan rinci tentang ETL ini tidak dibahas di tulisan ini.  <em>Data warehouse</em> merupakan bagian dari kecerdasan bisnis/<em>business intelligence</em>, 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 (<em>decision-making</em>), sementara tujuan akhirnya tentu saja keuntungan perusahaan yang semakin berlipat <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  .</p>
<p><strong>Perbedaan OLTP dan Data Warehouse</strong></p>
<p>Perbedaan mendasar antara OLTP dengan Data Warehouse terletak pada hal-hal di bawah ini:</p>
<ol>
<li><em><strong>Query</strong></em><br />
Query pada <em>data warehouse</em> kebanyakan berupa <em>ad-hoc query</em>, artinya <em>query </em>tersebut dibangkitkan secara dinamis lewat bentuk query yang terdefinisi di awal. Pola (kerangka) pada <em>ad-hoc query</em> sudah jelas, tapi saat melakukan analisis, bentuk (badan) <em>query</em>-nya bisa berbeda-beda. Hal yang berbeda akan ditemui di OLTP, yang memiliki <em>query</em> yang harus benar-benar terdefinisi di awal sesuai dengan kondisi (<em>state</em>) transaksi yang ditangani.</li>
<li><strong>Modifikasi Data</strong><br />
Perubahan yang ada pada <em>data warehouse</em> 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).</li>
<li><strong>Desain Skema</strong><br />
<em> Data warehouse</em> pada umumnya memiliki skema basis data yang di<strong>denormalisasi</strong> 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 <strong>normalisasi </strong>untuk memudahkan eksekusi transaksi yang terkait dengan operasi-operasi basis data (<em>insert</em>, <em>update</em>, <em>delete</em>), dan untuk menjamin konsistensi basis data.</li>
<li><strong>Operasi Umum</strong><br />
Operasi umum yang implementasinya adalah berupa query analitik untuk <em>data warehouse</em> adalah operasi semacam ini, &#8220;Hitungnya masing-masing total penjualan produk X secara nasional per bulan sepanjang tahun 2007&#8243; atau &#8220;&#8221;, sementara pada OLTP adalah, &#8220;Masukkan data pembelian produk ini (ke dalam basis data operasional)&#8221;.</li>
<li><strong>Data historis</strong><br />
Pada <em>data warehouse</em> 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.</li>
</ol>
<p><strong>Karakteristik Data Warehouse</strong></p>
<p>Beberapa karakteristik dari <em>data warehouse</em> adalah:</p>
<ol>
<li><em><strong>Subject oriented</strong></em><br />
Karena <em>data warehouse</em> didesain untuk melakukan analisis maka <em>data warehouse</em> harus memproses <em>query </em>yang berupa pertanyaan yang bersifat subjektif, seperti &#8220;Produk apa yang paling laku dijual sepanjang tahun 2007?&#8221;. Kemampuan untuk memecahkan masalah yang bersifat subjektif ini membuat <em>data warehouse</em> bersifat <em>subject-oriented</em>.</li>
<li><em><strong>Integrated</strong></em> Sumber data dari <em>data warehouse</em> adalah berbagai data yang dimiliki oleh suatu organisasi dari berbagai sumber dengan skema dan format yang bermacam-macam. Karakteristik ini terkait dengan fungsi <em>data warehouse</em> terhadap sumber data yang akan dimasukkan ke dalam <em>data warehouse</em>.</li>
<li><em><strong>Nonvolatile</strong></em><br />
Data yang sudah masuk ke dalam <em>data warehouse</em> tidak bisa diubah lagi. Hal ini memang sesuai dengan salah satu tujuan dari <em>data warehouse</em>, yaitu analisis.</li>
<li><strong>Time-variant</strong><br />
Data yang ada di dalam <em>data warehouse</em> akan dianalisis perubahannya berdasarkan waktu.</li>
</ol>
<p>Bersambung</p>
<p>-KnightDNA-</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/136/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/136/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/136/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=136&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/08/05/selayang-pandang-data-warehouse-bagian-i/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>

		<media:content url="http://knightdna.files.wordpress.com/2008/08/dwh.gif" medium="image">
			<media:title type="html">Data Warehouse</media:title>
		</media:content>
	</item>
		<item>
		<title>Instalasi dan Konfigurasi Oracle BI Publisher pada Apache Tomcat</title>
		<link>http://dnacodons.wordpress.com/2008/07/04/instalasi-dan-konfigurasi-oracle-bi-publisher-pada-apache-tomcat/</link>
		<comments>http://dnacodons.wordpress.com/2008/07/04/instalasi-dan-konfigurasi-oracle-bi-publisher-pada-apache-tomcat/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 04:04:09 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Exploration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[bi]]></category>
		<category><![CDATA[bi publisher]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[instalasi]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[kerja praktek]]></category>
		<category><![CDATA[konfigurasi]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xml publisher]]></category>

		<guid isPermaLink="false">http://blog.knightdna.com/2008/07/04/instalasi-dan-konfigurasi-oracle-bi-publisher-pada-apache-tomcat/</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=113&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Halo semuanya,</p>
<p>Kali ini saya akan menulis petunjuk instalasi dan konfigurasi Oracle BI Publisher Enterprise Edition. Berikut ini lingkungan (<em>environment</em>) tempat saya melakukan instalasi. Mohon Anda perhatikan dulu,</p>
<p><strong>LINGKUNGAN INSTALASI</strong></p>
<ul>
<li>Sistem operasi: Micro$*ft Wi*dows XP SP3</li>
<li>Spesifikasi <em>hardware</em>: Intel Core2Duo T8100 @2.10GHz, RAM 2,00GB</li>
<li>Server: Apache Tomcat 6.0.13</li>
<li>Versi JDK: 1.6.0 Update 6</li>
<li>Versi Oracle BI Publisher: 10.1.3.3.2</li>
</ul>
<p>Berikut adalah langkah-langkahnya,</p>
<p><strong><em>DEPLOYMENT</em> ORACLE BI PUBLISHER SERVER</strong></p>
<ol>
<li>Periksa folder <em>installer</em> BI publisher<br />
Pastikan terdapat 4 folder utama: <code>doc/</code>, <code>install/</code>, <code>manual/</code>, <code>stage/</code>, dan <code>Translations/</code></li>
<li>Silakan masuk ke <strong>Tomcat Web Application Manager</strong></li>
<li>Pilih bagian <em>deploy </em>(<strong>WAR file to deploy</strong>)</li>
<li>Sebarkan (<em>deploy</em>) file bernama <code>xmlpserver.war</code> yang berada di folder <code>manual/generic</code></li>
<li>Apabila proses <em>deployment</em> berhasil maka <em>path </em><code>/xmlpserver</code> akan muncul di bagian <strong>Applications </strong>dari Tomcat Web Application Manager</li>
</ol>
<p><strong>KONFIGURASI REPOSITORI DAN FONT ORACLE BI PUBLISHER SERVER</strong><br />
Setelah aplikasi berhasil di-<em>deploy</em>, silakan ikuti langkah-langkah di bawah ini,</p>
<ol>
<li>Salin (copy) folder <code>XMLP/</code> dari <code>manual/</code> ke server; tempatnya terserah Anda, asalkan masih berada di folder Apache Tomcat <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Misal: <code>&lt;direktori_apache_tomcat&gt;/webapps/xmlpserver</code> (tempat deployment aplikasi .war tadi), atau di tempat lain<br />
<em> Catatan: </em><code>&lt;direktori_apache_tomcat&gt;</code> tempat saya ada di <code>D:\apps\Tomcat6\</code>, silakan sesuaikan dengan tempat Anda melakukan instalasi Apache Tomcat.</li>
<li>Silakan modifikasi file <code>xmlp-server-config.xml</code> yang berada di <code>&lt;direktori_apache_tomcat&gt;/WEB-INF/</code><br />
Akan muncul skema XML sebagai berikut</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;xmlpConfig xmlns=&quot;http://xmlns.oracle.com/oxp/xmlp&quot;&gt;
&lt;resource&gt;
&lt;file path=&quot;${oracle.home}/xdo/repository&quot;/&gt;
&lt;/resource&gt;
&lt;/xmlpConfig&gt;
</pre>
</li>
<li>Gantilah atribut path pada tag file dengan path tempat Anda menyalin folder <code>XMLP/</code> pada nomor 1<br />
Misal:</p>
<pre class="brush: xml;">
&lt;file path=&quot;D:\apps\Tomcat6\webapps\xmlpserver\XMLP&quot; /&gt;
</pre>
</li>
<li>Salin (<em>copy</em>) <em>font </em>yang ada pada folder <code>manual/fonts</code> ke direktori font yang dipakai oleh Java Runtime Environment di tempat Anda masing-masing.<br />
Misal ke: <code>D:\java\jre1.6.0_06\lib\fonts</code></li>
<li>Jalankan ulang (<em>restart</em>) server Anda</li>
<li>Sekarang silakan jalankan BI Publisher Server dengan membuka <code>http://&lt;hostname&gt;:&lt;port&gt;/xmlpserver</code></li>
<li> Masuk log dengan akun &#8220;Administrator&#8221; dan sandi (password) &#8220;Administrator&#8221;</li>
<li> Selanjutnya, silakan lakukan konfigurasi minimal pada <em>server</em> (baca bagian selanjutnya).<br />
<em> Catatan: </em>demi keamanan, silakan modifikasi akun <em>superuser</em> Administrator tersebut.</li>
</ol>
<p>Setelah Oracle BI Publisher server berhasil di-<em>install</em>, langkah selanjutnya adalah melakukan konfigurasi minimal, yaitu konfigurasi <strong>Scheduler </strong>dan <strong>Data Source</strong>. Konfigurasi hal lain tergantung dari kebebasan dan kreativitas Anda. Silakan baca Dokumentasi Oracle BI Publisher di folder <code>doc/</code> pada tempat installer Oracle BI Publisher untuk tahu lebih lengkap. Hal tersebut akan terlalu banyak apabila diulas dalam satu tulisan ini.</p>
<p><em>Konfigurasi Oracle BI Publisher Scheduler</em></p>
<ol>
<li>Silakan masuk ke bagian <strong>Admin</strong> &gt; <strong>Scheduler Configuration</strong>
<ul> 	Masukkan parameter yang diperlukan, antara lain:</p>
<li>Jenis DBMS (yang didukung untuk penjadwalan hanya Oracle/minimal 8i, IBM DB2/minimal versi 6, Micro$*ft SQL Server, MySQL, dan Sybase)</li>
<li>Koneksi (memanfaatkan fasilitas JDBC, pastikan Anda sudah memiliki kelas driver untuk masing-masing DBMS)<br />
Contoh: <code>jdbc:oracle:thin@localhost:1521:orcl</code> apabila menggunakan DBMS Oracle dengan instans (<em>instance</em>) orcl</li>
<li>Akun (username) dan sandi (password), pastikan akun ini memiliki kewenangan (<em>privilege</em>) yang cukup untuk melakukan penambahan skema serta transaksi <code>INSERT</code>, <code>UPDATE</code>, dan <code>DELETE</code> record.</li>
<li>Kelas driver basis data (misal: <code>oracle.jdbc.driver.OracleDriver</code> untuk DBMS Oracle)</li>
</ul>
</li>
<li>Untuk menguji apakah koneksi ke basis data berhasil, silakan uji dengan mengklik tombol &#8220;Test Connection&#8221;</li>
<li>Apabila sudah berhasil, silakan tambah skema untuk <em>scheduler </em>tadi dengan mengklik tombol &#8220;Install Schema&#8221;</li>
</ol>
<p><em>Konfigurasi Oracle BI Publisher Data Source</em></p>
<ol>
<li>Silakan masuk ke bagian <strong>Admin &gt; Data Sources</strong><br />
<em> Catatan: </em>Perhatikan bahwa ada pengaturan untuk koneksi JDBC, koneksi JNDI, dan File (XML). Umumnya yang dipakai adalah koneksi JDBC atau File.</li>
<li>Untuk file, yang didukung adalah file XML, dan untuk menambahkannya silakan klik &#8220;Add Data Source&#8221;.</li>
<li>Masukkan parameter yang dibutuhkan.<br />
<em>Catatan: </em>Perhatikan bahwa parameter <strong>Full Path of Top-Level Directory</strong> harus diisi dengan <em>absolut path</em> ke folder di mana Anda akan menaruh kumpulan file .XML di dalamnya.<br />
Misal:   <code>D:\data\xml</code></li>
<li>Untuk koneksi JDBC atau JNDI silakan lakukan langkah serupa dengan masukan file XML<br />
<em>Catatan: </em>Perhatikan bahwa untuk parameter yang diperlukan pada JDBC mirip dengan langkah konfigurasi Oracle BI Publisher Scheduler, yaitu: Koneksi JDBC, <em>username </em>dan <em>password</em>, serta kelas driver basis data. Jangan lupa untuk memastikan koneksi sudah berhasil dengan mengklik tombol &#8220;Test Connection&#8221; terlebih dulu. Setelah itu, silakan klik tombol &#8220;Apply&#8221;.</li>
</ol>
<p><strong>CATATAN</strong><br />
<font color="#ff0000"> Segala perubahan yang terkait dengan konfigurasi server akan bisa berjalan setelah Anda menjalankan ulang server</font>.</p>
<p><strong>INSTALASI ORACLE BI PUBLISHER DESKTOP</strong><br />
Setelah instalasi dan konfigurasi minimal Oracle BI Publisher Server dijalankan, maka Anda sudah bisa membangkitkan laporan dengan sumber data yang ada dari <em>data source</em> atau file XML tersendiri. Selain itu ada <em>plug-in</em> integrasi Micro$*ft Office dengan Oracle BI Publisher yang bisa Anda manfaatkan, yaitu <strong>Word Template Builder</strong> (untuk membuat <em>template </em>menggunakan MS Word) dan <strong>Excel Analyzer</strong> (untuk OLAP). Untuk memanfaatkannya, silakan <em>install </em><strong>Oracle BI Publisher Desktop</strong> dan <strong>ExcelAnalyzer</strong> yang terdapat di folder instalasi, subfolder <code>manual/XMLP/Tools</code>.</p>
<p>Instalasi bersifat GUI-<em>based </em>sehingga akan memudahkan Anda untuk memasukkan parameter yang diperlukan pada saat instalasi. Silakan ikuti langkah-langkah langsung pada saat instalasi setelah mengklik masing-masing <em>installer </em>tadi.</p>
<p><strong>CATATAN</strong></p>
<ol>
<li> Cara menggunakan <strong>Word Template Builder</strong> akan menjadi pembahasan tersendiri dan tidak di tulisan ini <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </li>
<li><strong>Oracle BI Publisher Desktop</strong> dan <strong>ExcelAnalyzer</strong> memerlukan platform .NET 2.0 untuk berjalan. Pastikan Anda sudah meng-<em>install </em>.NET 2.0 sebelumnya.</li>
</ol>
<p>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! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>-KnightDNA-</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/113/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/113/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=113&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/07/04/instalasi-dan-konfigurasi-oracle-bi-publisher-pada-apache-tomcat/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>
	</item>
		<item>
		<title>Say Hello to Oracle BI Publisher</title>
		<link>http://dnacodons.wordpress.com/2008/07/02/say-hello-to-oracle-bi-publisher/</link>
		<comments>http://dnacodons.wordpress.com/2008/07/02/say-hello-to-oracle-bi-publisher/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 10:27:14 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Exploration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[bi]]></category>
		<category><![CDATA[bi publisher]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[kerja praktek]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xml publisher]]></category>

		<guid isPermaLink="false">http://blog.knightdna.com/2008/07/02/say-hello-to-oracle-bi-publisher/</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=112&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Halo semuanya,</p>
<p>Di awal Juli ini saya akan menulis artikel tentang <strong>Oracle BI Publisher</strong>. Mohon maaf, janji saya pada <em>post </em>sebelumnya tentang <em>data warehouse </em>belum bisa saya penuhi sekarang karena tulisan tentang <em>data warehouse</em> sifatnya sangat konseptual dan rupanya cukup <em>njelimet</em> (rumit) <strike>dan malas</strike> juga untuk menyusun tulisan tentang <em>data warehouse</em> agar mudah dibaca dan dipahami oleh pembaca, <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  . Baik, kali ini saya akan langsung membahas tentang salah satu bagian dari pembangunan <em>data warehouse</em>, yaitu <em>reporting system</em>, utamanya tentang kakas (<em>tool</em>) yang saya gunakan pada saat kerja praktek ini yaitu Oracle BI Publisher.</p>
<p>Sebaiknya, Anda mengetahui dulu keterkaitan antara <em>data warehouse</em> dan <em>reporting system</em>. Kalau Anda sudah tahu, silakan lewatkan (<em>skip</em>) paragraf ini untuk beralih ke paragraf berikutnya <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  . <em>Data warehouse </em>(bagian yang lebih detail dan teknis ada di post yang lain <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ) 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. <em>Nah</em>, hasil akhir dari analisis data historis tadi bisa berupa berbagai laporan yang ditujukan untuk kalangan eksekutif perusahaan (umunya <em>top level management</em>). Contoh: Laporan hasil penjualan produk XXX (jangan <em>ngeres </em>dulu ya&#8230; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ) 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. <em>Got the point</em>? <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align:center;"><img src="http://blog.knightdna.com/wp-content/uploads/2008/07/oracle_busi_intel_clr_small.gif" alt="Oracle BI Publisher" /></p>
<p>Salah satu kakas (<em>tool</em>) yang cukup andal dalam masalah <em>enterprise reporting system</em> ini adalah Oracle BI Publisher (dulu bernama <strong>XML Publisher</strong>, karena data mentah keluarannya berformat XML, bahkan hingga saat ini). Ada beberapa kelebihan tentang kakas ini, yaitu:</p>
<ol>
<li>Terintegrasi dengan Micro$*ft Word, jadi, pengguna <em>enterprise reporting system</em> bisa melakukan pembangunan <em>template</em> laporan menggunakan kakas dokumen produksi Micro$*ft yang mudah dipakai <strike>dan mahal ini</strike>. Yang perlu Anda catat, Word Template Builder ini perlu <em>platform </em>.NET 2.0 agar bisa digunakan.</li>
<li>Mampu mendukung pengiriman lebih dari satu <em>channel </em>(web, FTP, e-mail, faks, printer).</li>
<li>Mampu mendukung format keluaran yang bermacam-macam (XML/mentah, HTML, MHTML, PDF, CSV, PPT).</li>
<li>Menyediakan fasilitas penjadwalan untuk pengiriman laporan (sepertinya ini merupakan standar dari suatu <em>enterprise reporting system</em>).</li>
<li>Menyediakan layanan <em>web service</em>, sehingga fasilitas pembangkitan laporan bisa dipanggil melalui aplikasi lain.</li>
<li>Mampu mendukung <em>template </em>animasi Flash, jadi laporan yang dibuat bisa menjadi laporan yang menarik dan interaktif.</li>
<li>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 <strong>Java Database Connectivity</strong> (JDBC) <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  . 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.</li>
</ol>
<p>Baru 7 hal tersebut kelebihan Oracle BI Publisher yang saya ketahui sejauh ini. Saya belum pernah membandingkan aplikasi <em>enterprise reporting system</em> yang lain, jadi pendapat di atas masih kurang objektif. Harap maklum saja, sebelumnya saya hanya mendapatkan teori dan konsep saja pada saat kuliah <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  .</p>
<p>Sementara itu, beberapa hal yang menurut saya &#8220;kurang&#8221; dari kakas ini adalah tentu saja dari segi harga <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  . <em>Yup</em>, Oracle BI Publisher memang termasuk golongan aplikasi <em>proprietary</em> yang biasa dipakai kalangan korporat. Tapi tentu saja kocek dan kemampuan menurut saya sudah cukup sebanding. <em>Hehe</em>, beruntung juga saya bisa mencoba satu contoh kakas mahal secara legal.</p>
<p>Apabila Anda tertarik untuk melihat aplikasi Oracle BI Publisher, silakan kunjungi <a href="http://www.oracle.com/technology/products/xml-publisher/" title="Situs resmi Produk Oracle BI Publisher" target="_blank">halaman resminya</a>, dan apabila Anda ingin tahu lebih banyak tentang cara penggunaannya, silakan kunjungi <a href="http://blogs.oracle.com/xmlpublisher/" title="Blog Oracle BI Publisher" target="_blank">blog Oracle BI Publisher</a>.</p>
<p>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 <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  . Terakhir, mohon koreksi apabila Anda menemui kesalahan.</p>
<p>-KnightDNA-</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/112/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/112/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/112/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=112&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/07/02/say-hello-to-oracle-bi-publisher/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>

		<media:content url="http://blog.knightdna.com/wp-content/uploads/2008/07/oracle_busi_intel_clr_small.gif" medium="image">
			<media:title type="html">Oracle BI Publisher</media:title>
		</media:content>
	</item>
		<item>
		<title>Cabang-Cabang FreeBSD (FreeBSD Branches)</title>
		<link>http://dnacodons.wordpress.com/2008/03/24/cabang-cabang-freebsd-freebsd-branches/</link>
		<comments>http://dnacodons.wordpress.com/2008/03/24/cabang-cabang-freebsd-freebsd-branches/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 05:30:40 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Exploration]]></category>
		<category><![CDATA[branches]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[freebsd-CURRENT]]></category>
		<category><![CDATA[freebsd-RELEASE]]></category>
		<category><![CDATA[freebsd-STABLE]]></category>

		<guid isPermaLink="false">http://blog.knightdna.com/2008/03/24/cabang-cabang-freebsd-freebsd-branches/</guid>
		<description><![CDATA[Written by: Alief Nugraha (E-mail System Administrator of ITB)
Edited and translated by: Aprian Diaz Novandi &#8220;KnightDNA&#8221;
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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=103&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Written by: Alief Nugraha (E-mail System Administrator of ITB)<br />
Edited and translated by: Aprian Diaz Novandi &#8220;KnightDNA&#8221;</p>
<p><strong>FreeBSD-CURRENT</strong><br />
<em> Apa FreeBSD-CURRENT itu?</em><br />
FreeBSD-CURRENT adalah versi <em>development </em>(<em>bleeding-edge</em>) yang berisi <em>work in progress</em>, 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 <em>production server</em>.</p>
<p><em>What is FreeBSD-CURRENT?</em><br />
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.</p>
<p><strong>FreeBSD-STABLE</strong><br />
<em> Apa FreeBSD-STABLE itu?</em><br />
FreeBSD-STABLE adalah <em>development branch </em>yang di dalamnya <em>major release </em>akan dibuat. Dari waktu ke waktu, FreeBSD-STABLE akan berubah seiring dengan teknologi yang digabung dari FreeBSD-CURRENT, sehingga mungkin tidak sesuai dengan kebutuhan <em>end-user</em>. Apabila Anda ingin mengikuti teknologi terbaru pada FreeBSD dengan stabilitas yang cukup terjamin (namun tidak ada jaminan bahwa <em>branch </em>ini tidak bermasalah), silakan ikuti <em>branch </em>ini.</p>
<p><em>What is FreeBSD-STABLE?</em><br />
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&#8217;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.</p>
<p><strong>FreeBSD-RELEASE</strong><br />
<em> Apa FreeBSD-RELEASE itu?</em><br />
FreeBSD-RELEASE adalah <em>snapshot </em>dari FreeBSD-STABLE yang telah teruji stabilitasnya, dan tidak akan mengalami perubahan/penambahan teknologi baru. Perubahan yang ada hanyalah <em>patch </em>yang berhubungan dengan keamanan. Anda direkomendasikan untuk memasang FreeBSD-RELEASE pada <em>production server</em>.</p>
<p><em>What is FreeBSD-RELEASE?</em><br />
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.</p>
<p><em>Apa keuntungan menggunakan FreeBSD-RELEASE?</em><br />
Anda dapat memperbarui sistem Anda menggunakan freebsd-update(8), baik untuk memperbarui sistem ke versi -RELEASE berikutnya ataupun untuk mendapatkan <em>security patch </em>terbaru tanpa harus mengkompilasi ulang sistem Anda.</p>
<p><em>What are the advantages of using the FreeBSD-RELEASE?</em><br />
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.</p>
<p><em>Jadi, branch apakah yang sebaiknya saya pakai untuk production server?</em><br />
Penulis menganjurkan Anda untuk mengikuti <em>branch </em>-RELEASE. Jangan lupa untuk melihat <em>security errata</em>, dan mem-<em>patch</em> ulang FreeBSD Anda.</p>
<p><em>So, which branch of FreeBSD that I should use in the production server?</em><br />
I recommend you to use the -RELEASE branch. Do not forget to see the security errata and repatch your FreeBSD.</p>
<p>-alief.nugraha-<br />
-Team Mailadm ITB-</p>
<p>-KnightDNA-</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/103/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/103/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=103&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/03/24/cabang-cabang-freebsd-freebsd-branches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>
	</item>
		<item>
		<title>Membuat CAPTCHA Sederhana</title>
		<link>http://dnacodons.wordpress.com/2008/03/14/membuat-captcha-sederhana/</link>
		<comments>http://dnacodons.wordpress.com/2008/03/14/membuat-captcha-sederhana/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 12:21:25 +0000</pubDate>
		<dc:creator>KnightDNA</dc:creator>
				<category><![CDATA[Academics]]></category>
		<category><![CDATA[Exploration]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web programming]]></category>

		<guid isPermaLink="false">http://blog.knightdna.com/2008/03/14/repost-membuat-captcha-sederhana/</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=97&subd=dnacodons&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>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.</p>
<p>Berikut ini adalah langkah-langkah untuk membuat CAPTCHA:</p>
<ol>
<li>Buatlah <em>session</em> untuk menyimpan hasil pengacakan string.</li>
<li>Definisikan gambar yang akan dibuat (tentukan ukuran, dan warna yang akan memenuhi gambar tersebut).</li>
<li>Persiapkan string yang akan diacak.</li>
<li>Tambahkan komponen-komponen yang akan memperkuat pengamanan CAPTCHA: font yang unik, penambahan <em>background</em>, penambahan garis-garis, rotasi teks, pembuatan font dengan ukuran masing-masing karakter yang berbeda, dsb.</li>
<li>Bangkitkan CAPTCHA dengan menghidupkan session, dan memanggil fungsi pembangkit gambar yang ada pada ekstensi GD.</li>
</ol>
<p>Dan inilah contoh <em>source code</em>-nya (Anda diperbolehkan untuk mengutip, mengedit, memodifikasi, dan menyebarkannya):</p>
<pre class="brush: php;">
&lt;?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(&quot;Content-type: image/png&quot;);
imagepng($im);
imagedestroy($im);
?&gt;
</pre>
<p>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</p>
<pre class="brush: xml;">
&lt;img src=&quot;image.php&quot; /&gt;
</pre>
<p>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.</p>
<p>Skrip di atas masih memiliki kelemahan, yaitu masih bisa diinterpretasi oleh aplikasi yang memanfaatkan aspek kecerdasan buatan (<em>computer vision</em>). 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 <em>spam</em>.</p>
<p>Untuk melihat contoh aplikasi yang memanfaatkan CAPTCHA, Anda bisa menuju <em>link</em>: <a title="KnightDNA's Guestbook" href="http://arc.itb.ac.id/~diaz/captcha" target="_blank">http://arc.itb.ac.id/~diaz/captcha</a></p>
<p>Tips di bawah ini barangkali berguna untuk Anda yang tertarik untuk bermain-main dengan CAPTCHA:</p>
<ol>
<li> 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</li>
<li>Modifikasilah karakter-karakter CAPTCHA yang dibuat dengan merotasi karakter dan/atau mengatur ukuran karakter tersebut agar berbeda.</li>
</ol>
<p>-KnightDNA-</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dnacodons.wordpress.com/97/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dnacodons.wordpress.com/97/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dnacodons.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dnacodons.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dnacodons.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dnacodons.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dnacodons.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dnacodons.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dnacodons.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dnacodons.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dnacodons.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dnacodons.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dnacodons.wordpress.com&blog=5299441&post=97&subd=dnacodons&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dnacodons.wordpress.com/2008/03/14/membuat-captcha-sederhana/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/82530995a4e00e7f6df581a7b550724b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">KnightDNA</media:title>
		</media:content>

		<media:content url="image.php" medium="image" />
	</item>
	</channel>
</rss>