<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>GAIBlog</title>
	<atom:link href="http://pebbie.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pebbie.wordpress.com</link>
	<description>weblog Grafika dan Intelejensia Buatan (GAIB)</description>
	<pubDate>Wed, 23 Jul 2008 15:59:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>id</language>
			<item>
		<title>membuat komponen delegasi mouse event</title>
		<link>http://pebbie.wordpress.com/2008/07/23/membuat-komponen-delegasi-mouse-event/</link>
		<comments>http://pebbie.wordpress.com/2008/07/23/membuat-komponen-delegasi-mouse-event/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 15:56:31 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[delphi]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=130</guid>
		<description><![CDATA[Ketika membuat aplikasi yang mengeksploitasi penanganan event mouse (mousedown, mousemove, mouseup) untuk berbagai keperluan (selection, draw, transform), solusi umum dalam paradigma prosedural adalah dengan menyimpan variabel global yang menyatakan modus kerja saat ini. 
Dalam paradigma berorientasi objek, penggunaan variabel state (dan penggunaan analisa kasus jamak (case of/if-then)) bisa jauh dikurangi. Jadinya penasaran untuk membuat komponen [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ketika membuat aplikasi yang mengeksploitasi penanganan <em>event</em> mouse (mousedown, mousemove, mouseup) untuk berbagai keperluan (selection, draw, transform), solusi umum dalam paradigma prosedural adalah dengan menyimpan variabel global yang menyatakan modus kerja saat ini. </p>
<p>Dalam paradigma berorientasi objek, penggunaan variabel state (dan penggunaan analisa kasus jamak (case of/if-then)) bisa jauh dikurangi. Jadinya penasaran untuk membuat komponen kecil dalam delphi untuk menangani pendelegasian penanganan mouse event.<br />
<span id="more-130"></span></p>
<pre><code><em>(* file : MouseEventHandler.pas
    auth: Peb Ruswono Aryan
*)</em>
<strong>unit</strong> MouseEventHandler;

<strong>interface</strong>

<strong>uses</strong>
  SysUtils, Classes, Controls;

<strong>type</strong>
  TMouseEventHandler = <strong>class</strong>(TComponent)
  <strong>protected</strong>
    <em>{ Protected declarations }</em>
    FButtonDown : boolean;
    FOnMouseDown : TMouseEvent;
    FOnMouseUp : TMouseEvent;
    FOnMouseMove : TMouseMoveEvent;
  <strong>published</strong>
    <em>{ Published declarations }</em>
    <strong>property</strong> BtnDown : boolean <strong>read</strong> FButtonDown <strong>write</strong> FButtonDown;
    <strong>property</strong> OnMouseMove : TMouseMoveEvent <strong>read</strong> FOnMouseMove <strong>write</strong> FOnMouseMove;
    <strong>property</strong> OnMouseDown : TMouseEvent <strong>read</strong> FOnMouseDown <strong>write</strong> FOnMouseDown;
    <strong>property</strong> OnMouseUp : TMouseEvent <strong>read</strong> FOnMouseUp <strong>write</strong> FOnMouseUp;
  <strong>end</strong>;

<strong>procedure</strong> Register;

<strong>implementation</strong>

<strong>procedure</strong> Register;
<strong>begin</strong>
  RegisterComponents('Samples', [TMouseEventHandler]);
<strong>end</strong>;

<strong>end</strong>.
</code></pre>
<p>Alasan kelas ini dijadikan turunan komponen VCL (TComponent) adalah supaya inisialisasinya tidak perlu ditempatkan di penangan event onCreate tapi bisa disimpan di deskripsi form (.dfm). </p>
<pre><code>
<strong>object</strong> SelMouseHandler: TMouseEventHandler
    OnMouseMove = SelMouseMove
    OnMouseDown = SelMouseDown
    OnMouseUp = SelMouseUp
    Left = 296
    Top = 36
<strong>end</strong>
</code></pre>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/130/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/130/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/130/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/130/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/130/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=130&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/07/23/membuat-komponen-delegasi-mouse-event/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Membandingkan Fitur Bahasa Pemrograman</title>
		<link>http://pebbie.wordpress.com/2008/07/16/membandingkan-fitur-bahasa-pemrograman/</link>
		<comments>http://pebbie.wordpress.com/2008/07/16/membandingkan-fitur-bahasa-pemrograman/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 07:40:35 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[akademik]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[riset]]></category>

		<category><![CDATA[programming language design]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=124</guid>
		<description><![CDATA[Semalam terpikir untuk melakukan pekerjaan iseng, membandingkan bahasa pemrograman (yang pernah saya pakai). Tingkat perbandingannya pun yang ringan-ringan saja karena baru pada tingkat leksikal, sedikit semantik, dan ditambah beberapa penilaian dari perspektif pribadi. Bahasa yang menjadi korbannya adalah LISP, BASIC, Pascal, C/C++, JAVA, Python (beberapa bahasa lain seperti turunan ECMAscript (javascript, action script) dan PHP [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">Semalam terpikir untuk melakukan pekerjaan iseng, membandingkan bahasa pemrograman (yang pernah saya pakai). Tingkat perbandingannya pun yang ringan-ringan saja karena baru pada tingkat leksikal, sedikit semantik, dan ditambah beberapa penilaian dari perspektif pribadi. Bahasa yang menjadi korbannya adalah LISP, BASIC, Pascal, C/C++, JAVA, Python (beberapa bahasa lain seperti turunan ECMAscript (javascript, action script) dan PHP dibuang dari daftar kecuali untuk fitur-fitur khusus).</p>
<p>fitur-fitur yang dipilih untuk diperbandingkan diantaranya :</p>
<ul>
<li>Komentar</li>
<li>Kenihilan</li>
<li>Analisa Kasus</li>
<li>Kepulangan</li>
<li>Cakupan</li>
</ul>
<p><span id="more-124"></span><br />
<strong>Komentar</strong><br />
Fitur untuk membuat komentar atau bagian dari kode sumber yang tidak diinterpretasi oleh kompilator biasanya dimanfaatkan sebagai dokumentasi kode yang hanya dimengerti oleh manusia atau mesin dalam taraf tertentu (auto-dokumentasi) atau sebagai alat bantu dalam proses <em>debugging</em>. Menurut saya komentar seharusnya mudah ditambahkan maupun dikurangi tanpa membuat kerepotan. Komentar pada umumnya dapat dikelompokkan menjadi dua buah kelompok yaitu satu baris dan beberapa baris. </p>
<p>Simbol penanda komentar dari kandidat berikut :
<pre><code><strong>#</strong> (python)
<strong>//</strong> (C/C++, Delphi)
<strong>'</strong> (BASIC)
<strong>;</strong> (Assembly)</code></pre>
<p> saya cenderung lebih suka menggunakan simbol pagar (<strong>#</strong>) karena satu dan lain hal diantaranya cukup mudah diakses dengan satu tangan (kelingking kiri pada tombol shift dan jari tengah tangan kiri pada tombol angka 3) dan makna &#8216;pagar&#8217; yang sesuai dengan definisi dari simbol ini yaitu &#8216;memagari&#8217; bagian yang tidak perlu diinterpretasi.</p>
<p>Kalau untuk simbol penanda komentar beberapa baris sekaligus, kandidatnya :
<pre><code>
<strong>{ }</strong> (pascal)
<strong>(* *)</strong> (pascal)
<strong>/* */</strong> (C/C++)
<strong>""" """</strong> (python)
</code></pre>
<p>Pilihan saya jatuh pada pascal yang pertama. Alasannya sederhana saja, paling sedikit yang perlu diketik :P. Simbol kurung kurawal ini digunakan untuk menyatakan cakupan di C/C++. </p>
<p><strong>Kenihilan</strong><br />
Dalam bahasa pemrograman yang memiliki representasi terhadap kondisi ada dan tiada (misalnya untuk <em>reference</em> objek, atau pointer ke alamat memori). ada berbagai macam nama sebagai simbol ketiadaan. Ada <strong>nil</strong> di pascal dan LISP, <strong>NULL</strong> di C atau <strong>null</strong> di JAVA, <strong>None</strong> di python, adajuga <strong>Nothing</strong> dan <strong>undefined</strong> (Action Script). Walaupun secara makna yang paling dekat dengan yang dimaksud adalah <strong>undefined</strong> (tidak terdefinisi, bukan berarti tidak ada), saya cenderung memilih <strong>nil</strong> karena tidak terlalu spesifik dengan pengucapan bahasa (bandingkan dengan <strong>null</strong>) dan tidak terlalu panjang (bandingkan dengan <strong>Nothing</strong> atau <strong>undefined</strong>).</p>
<p><strong>Analisa Kasus</strong><br />
Analisa kasus yang saya maksud bukan untuk kasus biner seperti <strong>if-then</strong> melainkan kasus jamak. Analisa kasus jamak memiliki banyak bentuk, beberapa digunakan hanya untuk kasus yang khusus seperti hanya untuk tipe data tertentu (case-of hanya untuk tipe ordinal (integer, set) di pascal) atau yang cukup generik sehingga sering dimanfaatkan juga sebagai penghemat dari rantai if-then-else-if-dst. </p>
<pre><code>
<em>(* PASCAL *)</em>
<strong>case</strong> X <strong>of</strong>
   [value1]:;
   [value2]:<strong>begin</strong>
   <strong>end</strong>;
<strong>end</strong>;

<em>/* C/C++, ECMA, PHP */</em>
<strong>switch</strong>(X){
   <strong>case</strong> [value1]:
          <strong>break</strong>;
   <strong>default</strong>:
}

<em>'BASIC</em>
<strong>SELECT CASE</strong> X
   <strong>CASE</strong>[value1]
   <strong>CASE</strong>[value1]
<strong>END SELECT</strong>

#LISP
(<strong>cond</strong>
 ((<strong>=</strong> X [value1]) )
 ((<strong>=</strong> X [value1]) )
)
</code></pre>
<p>Untuk hal ini saya masih bingung. Saya suka dengan sifat generik dari <strong>cond</strong> (atau depend-on dalam kuliah pemrograman fungsional) tetapi kadang merepotkan kalau memang yang dibandingkan adalah objek yang sama (apalagi terlalu banyak tanda kurungnya) sehingga mekanisme di atasnya lebih memudahkan. Sebetulnya analisa kasus di BASIC cukup enak mengingat tidak perlu adanya penghenti cakupan kasus (tidak menggunakan <strong>break</strong>, atau menggunakan pencakup <strong>begin-end</strong> yang menurut saya agak mengotori kode) seandainya saja tidak perlu ada <em>term</em> <strong>CASE</strong> setelah <em>term</em> <strong>SELECT</strong> dan Mekanisme pencakupan yang boros <em>keyword</em> (akan dibahas dalam fitur berikutnya). Pascal dan C/C++ sebetulnya cukup singkat kecuali untuk kekurangan pada pascal (perlu adanya <strong>begin-end</strong>) dan kekurangan keluarga C/C++ (break dan pencakupan kurung kurawal). Sepertinya untuk analisa kasus jamak belum ada yang bisa dibilang paling bagus.</p>
<p><strong>Kepulangan</strong><br />
Fitur ini berkaitan dengan fitur yang lebih besar yaitu dekomposisi program menjadi rutin-rutin kecil yang sering dipanggil agar mengurangi redundansi kode dan kemungkinan tidak konsistennya kode yang ditulis berulang. Hal yang menjadi sorotan adalah dua mekanisme umum yang diwakili oleh Pascal/Delphi (menggunakan nama fungsi atau <strong>result</strong>)dengan C/C++ (menggunakan <strong>return</strong>). Kasus uji yang dibandingkan antara lain nilai kembalian dan berhenti sebelum waktunya. </p>
<p>Kasus nilai kembalian (return value) untuk fungsi dari kedua mekanisme di atas cukup berbeda cara penanggulangannya. Penggunaan nama fungsi atau variabel lokal bernama <strong>result</strong> sangat membantu sebagai &#8216;kotak standar yang harus diisi&#8217; sedangkan pada C/C++ kita perlu menggunakan variabel sementara atau ekspresi langsung. Pada C/C++ nilai kembalian &#8216;dititipkan&#8217; ke mekanisme untuk keluar dari rutin (return) sedangkan pada Pascal mekanisme ini dipisahkan (menggunakan <strong>exit</strong>). Kedua mekanisme ini menurut saya cukup setara. Saya masih bingung mekanisme mana yang dipilih jika diminta untuk memutuskan (kalau keduanya ada dalam satu bahasa sepertinya akan membingungkan dan cukup boros <strong>keyword</strong> yang harus diingat).</p>
<p><strong>Cakupan</strong><br />
Cakupan (<em>scoping</em>) merupakan mekanisme yang selama ini dimanfaatkan sebagai aggregasi ataupun sebagai pembatas dalam ruang penamaan (<em>namespace</em>). Banyak pandangan tentang cakupan yang selama ini saya temui. Ada yang berpendapat bahwa penggunaan simbol yang baku dapat mempermudah untuk urusan <em>namespace</em> sementara pandangan lain bahwa simbol baku untuk pencakupan menyebabkan kode menjadi sulit dibaca. Saya akan menyoroti secara lebih umum yaitu membuat menjadi dua kelompok : </p>
<ul>
<li>Pencakupan eksplisit, menggunakan simbol (kurung, kurung kurawal)atau kata kunci khusus (begin-end, X-END X, do-od/if-fi) sebagai pembatas cakupan</li>
<li>Pencakupan implisit, menggunakan satu simbol penanda dan simbol kontrol seperti pada python</li>
</ul>
<p>Setelah ditulis di sini saya jadi agak bimbang. Saya cenderung menyukai mekanisme python yang secara tidak langsung juga mengatur bagaimana kode disusun dan tampil walaupun mekanisme ini seringkali menyulitkan bagi orang yang baru belajar pemrograman. Pencakupan yang eksplisit sepertinya terlalu banyak dilatarbelakangi pandangan subjektif sedangkan saya sendiri tidak terlalu peduli dengan mana yang paling bagus diantara mekanisme-mekanisme pencakupan ekspisit.</p>
<p><strong>Penutup</strong><br />
sebetulnya masih ada fitur lain yang ingin saya bahas tetapi sepertinya terlalu panjang kalau ingin dimasukkan di tulisan ini. Jadi sebaiknya nanti saja dibahas dalam tulisan berikutnya. Fitur lainnya yang ingin saya bahas antara lain :</p>
<ul>
<li>Deklarasi tipe, apakah lebih baik di awal (C/C++, JAVA), di akhir (Pascal, ActionScript 2.0), atau sistem <em>weak-typing</em></li>
<li><em>Signature</em>, </li>
<li><em>Traversal loop</em></li>
<li><em>Primitives</em>, dilema <strong>string</strong></li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/124/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/124/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/124/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=124&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/07/16/membandingkan-fitur-bahasa-pemrograman/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>About MidletPascal</title>
		<link>http://pebbie.wordpress.com/2008/07/11/about-midletpascal/</link>
		<comments>http://pebbie.wordpress.com/2008/07/11/about-midletpascal/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 16:26:31 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[gamedev]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[j2me]]></category>

		<category><![CDATA[midletpascal]]></category>

		<category><![CDATA[pascal]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=122</guid>
		<description><![CDATA[Hari ini saya kembali bermain-main dengan MidletPascal untuk meneruskan project game SHMUP yang dulu buat pertama kali nyoba pake MidletPascal. Terakhir disentuh (baca entri log-last modified di source code) tanggal 5 feb 2007! astaga.. dosa tuh bwt exavoltian. 
Tadinya ingin beli lisensi komersialnya MP, liat harganya sih $39 per tahun. lumayan lah masih lebih murah [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hari ini saya kembali bermain-main dengan MidletPascal untuk meneruskan project game SHMUP yang dulu buat pertama kali nyoba pake MidletPascal. Terakhir disentuh (baca entri log-last modified di source code) tanggal 5 feb 2007! astaga.. dosa tuh bwt <a href="http://exavoltism.googlepages.com/">exavoltian</a>. </p>
<p>Tadinya ingin beli lisensi komersialnya MP, liat harganya sih $39 per tahun. lumayan lah masih lebih murah dari Rapidshare kayaknya. Ternyata begitu baca forumnya, MP nggak lagi diterusin sama pemiliknya. Sedih.. padahal enak pake MidletPascal bwt bikin aplikasi J2ME yang sederhana (sepertinya memungkinkan bwt lebih kompleks, tapi saya cuma tertarik menggunakan MP untuk membuat game dengan cepat). Kelebihan dari MP adalah kompilasinya yang cepat (menggunakan kompiler byte-code internal tanpa perlu Java SDK) dan manajemen konfigurasi (bisa pilih target output ke MIDP1/2, Nokia API tanpa perlu mengubah kode CMIIW).</p>
<p>Berita baiknya adalah ada kemungkinan untuk MidletPascal dilepas ke open-source supaya bisa tetap ada yang merawat dan menambahkan fitur. Berdoa saja supaya lekas terlaksana.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/122/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/122/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/122/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=122&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/07/11/about-midletpascal/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Faktor Penentu Keakuratan dari Perangkat Lunak Pemeriksa Lembar Ujian</title>
		<link>http://pebbie.wordpress.com/2008/07/03/akurasi-pemeriksaan-ujian/</link>
		<comments>http://pebbie.wordpress.com/2008/07/03/akurasi-pemeriksaan-ujian/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 09:03:37 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[image processing]]></category>

		<category><![CDATA[work]]></category>

		<category><![CDATA[dmr]]></category>

		<category><![CDATA[uasbn]]></category>

		<category><![CDATA[ljk]]></category>

		<category><![CDATA[mark reader]]></category>

		<category><![CDATA[image degradation]]></category>

		<category><![CDATA[document image recognition]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=116</guid>
		<description><![CDATA[Disclaimer
Hari ini saya baru tahu bahwa terjadi polemik mengenai perangkat lunak yang digunakan sebagai pemeriksa lembar ujian di UASBN. Agak telat sepertinya kalau saya berkomentar sekarang, tetapi tidak apa lah, saya juga tidak bisa tinggal diam melihat arah diskusi yang kurang sehat. Saya tidak akan berkomentar masalah birokrasi, hukum dan administrasi, strategi bisnis. Saya hanya [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>Disclaimer</strong></p>
<p align="justify">Hari ini saya baru tahu bahwa terjadi <a href="http://pbasari.wordpress.com/2008/05/15/dmr-di-uasbn/">polemik</a> mengenai perangkat lunak yang digunakan sebagai pemeriksa lembar ujian di UASBN. Agak telat sepertinya kalau saya berkomentar sekarang, tetapi tidak apa lah, saya juga tidak bisa tinggal diam melihat arah diskusi yang kurang sehat. Saya tidak akan berkomentar masalah birokrasi, hukum dan administrasi, strategi bisnis. Saya hanya akan berkomentar perihal masalah teknis yang bisa dinilai secara lebih objektif. Walaupun saya sendiri secara administratif tercatat sebagai salah satu karyawan yang berpolemik, namun saya sebisa mungkin mencontoh mbah priyadi agar menjadi objektif dengan menempatkan diri saya sebagai pihak luar.</p>
<p><strong>Pendahuluan</strong></p>
<p align="justify">maksud dari tulisan ini adalah sebagai informasi kepada pengguna, pengamat, maupun pengembang perangkat lunak berbasis pengenalan citra dokumen bertanda jawab(<a href="http://www.digitalmarkreader.com">DMR</a>, <a href="http://www.smartmarkreader.com">SMR</a>, OMR Pro, LJK Reader, dst.) mengenai faktor degradasi yang sedikit banyak mempengaruhi keakuratan interpretasi. Faktor degradasi adalah faktor-faktor yang menyebabkan tidak tercapainya &#8216;kondisi ideal&#8217; dalam interpretasi citra. Dalam kasus citra dokumen, degradasi pada umumnya disebabkan oleh faktor fisik baik langsung maupun tidak langsung. Selanjutnya saya akan mengkhususkan pada kasus dokumen bertanda jawab (selanjutnya disebut DBJ, bukan LJK). </p>
<p><span id="more-116"></span><br />
<strong>Sekilas Pembacaan DBJ</strong></p>
<p align="justify">DBJ merupakan dokumen yang berisi acuan isian yang akan ditandai dengan menggunakan alat tulis (mis. Pensil 2B). DBJ mirip dengan lembar formulir yang fungsinya adalah sebagai media akuisisi data (<em>data capture</em>) hanya saja DBJ mengandalkan tanda (<em>mark</em>) sebagai masukan oleh manusia agar waktu pengisian menjadi efisien (memberi tanda lebih efisien dibanding menuliskan jawaban untuk pilihan yang sudah baku seperti pilihan berganda). Agar DBJ dapat diinterpretasi secara otomatis menggunakan komputer maka komputer perlu mengetahui lokasi yang diberi tanda oleh manusia dan makna dari tanda pada lokasi tersebut. Oleh sebab itulah biasanya pada lembar DBJ selain berisi informasi yang memandu manusia untuk memasukkan data yang tepat juga terdapat informasi lain yang bertujuan untuk membantu proses interpretasi. Informasi lain yang bertujuan membantu proses interpretasi dinamakan <em>marker</em>.</p>
<p align="justify">Kriteria dari marker adalah informasi yang dikandungnya, karakteristik geometri dan topologi yang khas. Informasi yang dikandung oleh marker seharusnya dapat membantu menentukan orientasi dari dokumen pada citra. Perlunya informasi ini diantaranya menentukan apakah DBJ pada citra mengalami kemiringan atau secara ekstrim menjadi terbalik (atas dan bawah). Marker biasanya memiliki karakteristik geometri yang khas agar dapat dengan mudah dan cepat ditemukan serta tidak menimbulkan ambiguitas. Salah satu contoh adalah untuk kasus QR Code yang menggunakan geometri dua buah kotak (padat dan berongga pada salah satu versinya) pada ketiga titik sudutnya atau dua buah garis yang terhubung di masing-masing salah satu ujungnya. Karakteristik topologi dari marker adalah lokasi relatif marker terhadap keseluruhan isi dokumen. Biasanya marker diletakkan di daerah batas luar dari dokumen khususnya pada sudut (mengingat dokumen biasanya berbentuk persegi panjang/bujur sangkar).</p>
<p><strong>Akuisisi</strong> </p>
<p align="justify">DBJ dalam bentuk citra digital diakuisisi dengan menggunakan perangkat masukan yang menghasilkan keluaran citra (pencitra). Adapun perangkat masukan yang menghasilkan citra sebagai keluarannya pada umumnya tampil dalam dua wujud yaitu pemindai (<em>scanner</em>) dan kamera. Untuk kasus DBJ, yang paling umum digunakan adalah pemindai. Kamera tidak dipilih karena pada kamera terdapat parameter yang tidak invarian yaitu orientasi dan pemfokusan (efek perspektif dan distribusi resolusi) sementara pada pemindai dokumen parameter orientasi dibuat menjadi invarian dan pemfokusan cukup konstan karena jarak sensor dengan media yang diakuisisi dikendalikan.</p>
<p align="justify">Produk pemindai yang tersedia di pasaran pun terdiri dari dua macam yaitu <em>flatbed</em> dan ADF(<em>automatic document feeder</em>). Pemindai <em>flatbed</em> berbentuk kotak (dengan tutup) dengan bagian pemindainya berupa lensa kaca dan sensor berada di dalam kotak. Pemindai <em>flatbed</em> berprinsip menggerakkan sensor ke area pindai. Pemindai jenis ini biasanya digunakan untuk memindai dokumen yang tebal dan untuk memindai beberapa lembar dokumen maka penggantian lembar dilakukan secara manual. Pemindai dengan teknologi ADF berprinsip dokumen yang bergerak sementara sensornya tetap agar pemindaian beberapa lembar sekaligus dapat dilakukan secara otomatis  tanpa perlu mengganti lembar secara manual.</p>
<p><strong>Degradasi Pemindaian</strong></p>
<p align="justify">Baik pemindai flatbed maupun ADF menggunakan sistem elektro-mekanis sebagai penggerak otomatis (baik sensor maupun dokumen). Ketidaksesuaian kinerja sistem elektro-mekanis ini dalam proses pemindaian menyebabkan degradasi yang bersifat langsung (berada di dalam perangkat) sedangkan degradasi yang disebabkan oleh manusia (peletakan lembar yang miring, coretan berlebih, kertas sobek, pengisian yang tipis) akan disebut sebagai penyebab degradasi secara tidak langsung.</p>
<p>Degradasi langsung dapat berupa : </p>
<ul>
<li>Dokumen mengalami rotasi. sebetulnya dokumen terotasi pada pemindai flatbed disebabkan oleh manusia (salah penempatan) sedangkan pada pemindai ADF dokumen terminimalkan akibat perata pada <em>tray</em> ataupun mekanisme perata. Kalaupun terjadi kemiringan pada hasil pemindaian pemindai ADF biasanya disebabkan oleh tumpukan lembar yang tidak rapi. degradasi ini bukan persoalan yang bisa dibilang penting karena sejak awal dengan teknologi marker yang juga bertujuan untuk mengatasi dokumen yang mengalami rotasi. kesimpulannya, pemindai apapun yang sudah menggunakan teknologi marker dapat dipastikan tidak bermasalah pada dokumen yang terotasi.</li>
<li>Dokumen mengalami distorsi. Dokumen dapat mengalami distorsi atau degradasi yang tidak bersifat homogen. contoh distorsi adalah efek perspektif pada kamera, atau pada kasus DBJ menggunakan scanner distorsi muncul sebagai adanya daerah dengan skala yang tidak merata. Persoalan ini umumnya jarang muncul namun strategi penyelesaiannya sampai saat ini masih bersifat terbuka alias belum ada teknik yang <em>ampuh</em>. Penyebab distorsi pada pemindai <em>flatbed</em> adalah kertas yang tidak seluruhnya menempel pada kaca pemindai walaupun pemindai <em>flatbed</em> sudah memiliki penutup namun hanya efektif untuk dokumen yang berbentuk lembar terpisah. Contoh nyatanya adalah ketika anda memindai langsung dari buku dengan bagian tengah buku tidak bisa menempel di kaca pemindai. Pada pemindai flatbed juga mungkin terjadi distorsi jika sistem elektro-mekanis penggerak sensor mengalami ketidakstabilan kecepatan. Distorsi pada pemindai ADF disebabkan oleh kegagalan pada sistem elektro-mekanis (<em>roller</em>) akibat macet ataupun seperti pemindai <em>flatbed</em> yaitu ketidakstabilan kecepatan motor penggerak.</li>
</ul>
<p>Degradasi tidak langsung berupa :</p>
<ul>
<li>Dokumen mengalami penskalaan. Pada perangkat pemindai dapat diatur oleh pengguna mengenai resolusi pemindaian. Pengaturan resolusi pemindaian akan menghasilkan dimensi (skala) citra (dalam satuan piksel) yang berbeda-beda. Sama seperti kasus rotasi, dokumen terskala dapat langsung ditangani dengan memanfaatkan <em>marker</em>.</li>
<li>Dokumen sobek. Sobek dapat terjadi dalam dua kasus yaitu lembar tersobek tanpa ada bagian yang hilang dan sobek dengan bagian yang hilang. Untuk kasus pertama biasanya tergantung dari perangkat pemindai apakah berhasil melakukan pindaian atau tidak (secara teori berhasil untuk f<em>latbed</em>). Jika pemindaian berhasil maka kemungkinan akan tampil bekas sobekan pada citra. Untuk kasus kedua (terjadi kehilangan bagian lembar DBJ), selama bagian yang hilang tidak signifikan (bagian jawaban, atau marker) maka degradasi ini secara teori tidak mengganggu keakuratan. Teknologi marker pada dasarnya dikatakan baik jika memiliki toleransi terhadap hilang akibat sobek atau tidak terdeteksi. </li>
</ul>
<p><strong>Kesimpulan</strong></p>
<p align="justify">Keakuratan pembacaan lembar DBJ atau LJK pada ujian yang dijual sebagai keunggulan teknis salah satu  cara mengujinya adalah dengan kehandalan mengatasi degradasi selama proses pencitraan. Untuk beberapa kasus degradasi sudah memiliki &#8216;obat&#8217;nya yang cukup efektif sementara kasus lainnya masih terbuka sebagai lahan inovasi. semoga informasi di atas dapat memberikan informasi yang benar bagi pengguna agar lebih paham mengenai teknologi sehingga tidak mudah terperdaya oleh taktik-taktik pemasaran dan semoga para penyedia perangkat lunak lebih jujur dan mencerdaskan konsumen.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/116/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/116/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=116&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/07/03/akurasi-pemeriksaan-ujian/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Implementasi Bilateral Filtering di Delphi</title>
		<link>http://pebbie.wordpress.com/2008/06/25/implementasi-bilateral-filtering-di-delphi/</link>
		<comments>http://pebbie.wordpress.com/2008/06/25/implementasi-bilateral-filtering-di-delphi/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 05:11:40 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[delphi]]></category>

		<category><![CDATA[image processing]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=110</guid>
		<description><![CDATA[Beberapa hari yang lalu sempat main-main dan nyasar ke tema bilateral filtering. Salah satu aplikasinya adalah sebagai filter awal sebelum melakukan upsampling. Bilateral Filtering sendiri merupakan teknik penapisan citra yang melakukan proses penghalusan namun tetap menjaga struktur pada citra (tepi) dengan kata lain bilateral filtering merupakan salah satu teknik untuk melakukan edge-preserving smoothing pada citra. [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">Beberapa hari yang lalu sempat main-main dan nyasar ke tema bilateral filtering. Salah satu aplikasinya adalah sebagai filter awal sebelum melakukan <em>upsampling</em>. Bilateral Filtering sendiri merupakan teknik penapisan citra yang melakukan proses penghalusan namun tetap menjaga struktur pada citra (tepi) dengan kata lain bilateral filtering merupakan salah satu teknik untuk melakukan <em>edge-preserving smoothing</em> pada citra. Hal yang membuat saya penasaran adalah hasil dari filtering yang didapat mirip dengan hasil dengan menggunakan teknik <a href="http://pebbie.wordpress.com/2007/10/25/implementasi-algoritma-difusi-non-linier-untuk-penghalusan-citra/">difusi non-linier</a>.</p>
<p align="justify">Prinsip dari bilateral filtering bisa dibilang cukup sederhana karena pada dasarnya merupakan teknik yang berbasis pada ketetanggaan (spatial windowing) seperti pada <a href="http://pebbie.wordpress.com/2007/04/05/jurus-jurus-penghalusan-citra-jurus-1-rata-rata-tetangga/">perata-rataan tetangga</a>(konvolusi diskret) atau <a href="http://pebbie.wordpress.com/2007/10/24/penghalusan-citra-dengan-penapisan-median/">penapisan median</a>. Proses pada bilateral filtering dapat dibagi menjadi dua proses yaitu seleksi dan penapisan itu sendiri. Proses seleksi bertujuan mengikut-sertakan piksel-piksel tetangga yang masuk dalam kriteria. Fungsi kriteria yang digunakan adalah fungsi pembatas berdasarkan &#8216;jarak&#8217; nilai piksel. Proses penapisannya sendiri dapat menggunakan penapisan linier (menggunakan kernel box atau gaussian) atau Penapisan non-linier (median filter).</p>
<p><span id="more-110"></span></p>
<p align="justify">Algoritma bilateral filtering memiliki dua parameter (selain parameter berupa citra yang difilter tentunya) yang perlu ditentukan secara manual yaitu jangkauan tetangga yang termasuk dalam proses seleksi dan jarak maksimum yang lolos seleksi. Dalam kode pascal saya mengimplementasi sebagai berikut :</p>
<pre><code><em>//default value</em>
  fdr := 0.025;  <em>{ range dalam skala 0.0 ... 1.0 }
</em>
  dr := Round(255 * fdr);
  dw := 7;    <em>{ neighborhood window size }</em>
  </code></pre>
<p align="justify">Untuk kode secara keseluruhan bisa dilihat di bawah, namun ada hal yang perlu dicatat yaitu kode di bawah ini melakukan filtering pada kanal luminance dari citra berwarna yang digunakan sebagai nilai skala pada tiap kanal (R, G, dan B) dan bobot yang digunakan merupakan bobot seragam (box filter). Variasi dari kode ini dapat dilakukan hal lainnya seperti melakukan filtering pada tiap kanal, menggunakan kernel gaussian sebagai kernel konvolusi, ataupaun menggunakan median filtering sebagai pengganti konvolusi.</p>
<pre><code>
<strong>procedure</strong> TFrmMain.BilateralFilteringExecute(Sender: TObject);
<strong>var</strong>
  i, j, k, l : integer;
  dr, dw, mid, n : integer;
  fdr, scale, tmpf : double;
  b, b2 : TBitmap;
  p : array of PArrRGB;
  p2 : PArrRGB;
  cur : TWarnaRGB;
  sum, tmp : integer;
  tmpstr : string;

  <strong>function</strong> _ok(x,y:integer):boolean;<strong>begin</strong>
    result := (X &gt;= 0) <strong>and</strong> (y &gt;= 0) <strong>and</strong> (x &lt; b.Width) <strong>and</strong> (y &lt; b.Height);
  <strong>end</strong>;

<strong>begin</strong>
  b := citra_make_greyscale(image1.picture.bitmap);
  b2 := Image1.Picture.Bitmap;

  setlength(p, b.Height);
  <strong>for</strong> j := 0 <strong>to</strong> b.Height-1 <strong>do</strong>
    p[j] := b.ScanLine[j];

  fdr := 0.025;

  dr := Round(255 * fdr);
  dw := 7;

  GetFloatParam('Range', 'bf.range', fdr);
  GetIntParam('Window Size', 'bf.window_size', dw);

  <strong>if</strong> dw <strong>and</strong> 1 &lt;&gt; 1 <strong>then</strong> inc(dw);<em>//make sure it's odd</em>
  mid := dw <strong>div</strong> 2;
  <strong>for</strong> j := 0 <strong>to</strong> b.Height-1 <strong>do begin</strong>
    p2 := b2.ScanLine[j];
    <strong>for</strong> i := 0 <strong>to</strong> b.Width-1 <strong>do begin</strong>

      cur := p[j][i];
      n := 0;
      sum := 0;
      <strong>for</strong> l := -mid <strong>to</strong> mid <strong>do begin</strong>
        <strong>for</strong> k := -mid <strong>to</strong> mid <strong>do begin</strong>
          <strong>if</strong> _ok(i+k, j+l) <strong>and</strong> (abs(cur.r-p[j+l][i+k].r)&lt;=dr) <strong>then begin</strong>
            inc(n);
            sum := sum + p[j+l][i+k].r;
          <strong>end</strong>;
        <strong>end</strong>;
      <strong>end</strong>;

      <em>//calc average</em>
      <strong>if</strong> n &gt;= 0 <strong>then begin</strong>
        tmp := round(sum / n);
        <strong>if</strong> cur.r &gt; 0 <strong>then</strong>
          scale := tmp / cur.r
        <strong>else</strong>
          scale := tmp;
        p2[i].r := clamp(round(scale * p2[i].r));
        p2[i].g := clamp(round(scale * p2[i].g));
        p2[i].b := clamp(round(scale * p2[i].b));
      <strong>end</strong>;

    <strong>end</strong>;
  <strong>end</strong>;
  b.Free;
  image1.refresh;
<strong>end</strong>;
</code></pre>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/110/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/110/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/110/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=110&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/06/25/implementasi-bilateral-filtering-di-delphi/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>AJAX dan Web 2.0</title>
		<link>http://pebbie.wordpress.com/2008/06/23/ajax-dan-web-20/</link>
		<comments>http://pebbie.wordpress.com/2008/06/23/ajax-dan-web-20/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 06:12:08 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[programming]]></category>

		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[pemrograman web]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=109</guid>
		<description><![CDATA[Web 2.0 merupakan istilah yang dilontarkan untuk mengangkat teknologi AJAX. Sementara AJAX sendiri sebetulnya hanya satu fitur yang merupakan penyederhanaan dari trik untuk mengendalikan perilaku browser agar mengambil konten dari penyedia layanan melalui hidden iframe. AJAX sejauh yang saya tahu merupakan kombinasi Javascript dan XMLDOM. Dalam pikiran saya, teknologi Web 2.0 akan membantu mengurangi bandwidth [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Web 2.0 merupakan istilah yang dilontarkan untuk mengangkat teknologi AJAX. Sementara AJAX sendiri sebetulnya hanya satu fitur yang merupakan penyederhanaan dari trik untuk mengendalikan perilaku browser agar mengambil konten dari penyedia layanan melalui hidden iframe. AJAX sejauh yang saya tahu merupakan kombinasi Javascript dan XMLDOM. Dalam pikiran saya, teknologi Web 2.0 akan membantu mengurangi bandwidth jaringan di kala tarif internet yang masih mahal dan aplikasi yang lebih responsif dan bebas layar kosong.</p>
<p>Tapi ternyata, pagi ini saya ukur sendiri. Gmail versi AJAX dan Gmail versi HTML jauh lebih bandwidth-friendly Gmail versi HTML. Paradoks sekali dengan apa yang tadinya saya bayangkan. Apalagi kalau melihat situs-situs lain yang (mungkin) kalau diukur proporsi antara informasi dan amplopnya (gambar untuk UI, markup layout, dan script) maka porsi untuk amplop akan lebih besar dan berbeda nyata dengan informasi. Okelah kita punya teknologi lain yaitu RSS. Well, More often than not penggunaannya juga salah strategi sehingga bukannya mengurangi konsumsi bandwidth malah menambah.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/109/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/109/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=109&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/06/23/ajax-dan-web-20/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>double underscore di phpwiki</title>
		<link>http://pebbie.wordpress.com/2008/06/16/double-underscore-di-phpwiki/</link>
		<comments>http://pebbie.wordpress.com/2008/06/16/double-underscore-di-phpwiki/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 13:04:52 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[hacking]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[phpwiki]]></category>

		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=107</guid>
		<description><![CDATA[beberapa waktu lalu saya memasang phpwiki di situs saya karena ukurannya yang cukup kecil. pada awalnya tidak masalah sampai saya menuliskan kode dalam python yang melibatkan double underscore (__) sebagai pengutip. Yang jadi persoalan adalah pengapit berupa double underscore merupakan pengganti dari pemformatan teks tebal. Setelah gagal coba-coba, akhirnya terpaksa mengubah kode PHP-nya langsung.
Perubahan dilakukan [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>beberapa waktu lalu saya memasang <a href="http://phpwiki.sourceforge.net">phpwiki</a> di <a href="http://wiki.pebbie.net">situs saya</a> karena ukurannya yang cukup kecil. pada awalnya tidak masalah sampai saya menuliskan kode dalam python yang melibatkan double underscore (__) sebagai pengutip. Yang jadi persoalan adalah pengapit berupa double underscore merupakan pengganti dari pemformatan teks tebal. Setelah gagal coba-coba, akhirnya terpaksa mengubah kode PHP-nya langsung.</p>
<p>Perubahan dilakukan di <strong>lib/transform.php</strong>, dengan menambahkan kode berikut : </p>
<pre><code><em>// double underscore</em>
      $tmpline = <strong>preg_replace</strong>("|(_ _)(.*?)(_ _)|",
                              "__\\2__", $tmpline);

</code></pre>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/107/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/107/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=107&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/06/16/double-underscore-di-phpwiki/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>load file SHP(ESRI)</title>
		<link>http://pebbie.wordpress.com/2008/06/14/load-file-shpesri/</link>
		<comments>http://pebbie.wordpress.com/2008/06/14/load-file-shpesri/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 20:59:53 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[delphi]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[work]]></category>

		<category><![CDATA[ESRI]]></category>

		<category><![CDATA[GIS]]></category>

		<category><![CDATA[library]]></category>

		<category><![CDATA[SHP]]></category>

		<category><![CDATA[spatial data]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=104</guid>
		<description><![CDATA[Kemarin malam ada permintaan untuk membuat pustaka yang dapat mengelola berkas data spasial dengan format SHP dari ESRI dengan menggunakan delphi. Berhubung belum pernah menggunakan format itu (yang pernah baru MIF dari MapInfo) untuk GIS. Akhirnya terpaksa pergi ke wotsit.org untuk mengunduh dokumentasi format berkas SHP dan googling untuk mendapatkan contoh berkas SHP. Setelah beberapa [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Kemarin malam ada permintaan untuk membuat pustaka yang dapat mengelola berkas data spasial dengan format SHP dari ESRI dengan menggunakan delphi. Berhubung belum pernah menggunakan format itu (yang pernah baru MIF dari MapInfo) untuk GIS. Akhirnya terpaksa pergi ke <a href="http://www.wotsit.org">wotsit.org</a> untuk mengunduh dokumentasi format berkas SHP dan googling untuk mendapatkan contoh berkas SHP. Setelah beberapa lama membaca dokumentasinya, ternyata format SHP itu cukup generik juga yah? Tadinya saya pikir format ini hanya untuk peta 2 dimensi saja. Ternyata format SHP juga menyediakan fasilitas untuk menyimpan data 3D (bahkan mungkin 4D berupa <em>scalar field</em> di ruang 3D).</p>
<p>Secara umum format SHP cukup sederhana yaitu Header utama berukuran tetap dan diikuti sejumlah chunk record berukuran varian (tergantung tipe bentuk). Secara umum tiap record dalam berkas SHP diasumsikan homogen, walau dimungkinkan juga untuk tidak homogen (dengan adanya field ShapeType di setiap recordnya). Yang (agak) merepotkan dari berkas SHP adalah adanya format penyimpanan BIG Endian dan Little Endian di dalam satu berkas tersebut. Berhubung Windows/I386 pada umumnya menggunakan format little endian maka perlu dimodifikasi sedikit untuk membaca dari stream (untungnya yang big endian formatnya integer bukan floating point jadinya tidak terlalu merepotkan).</p>
<p>Berhubung saya sedang malas untuk menjabarkan kodenya, saya unggah saja semuanya (library dan contoh pemakaian minus <em>executable</em>) di <a href='http://pebbie.files.wordpress.com/2008/06/shp.odt'>sini.</a></p>
<blockquote><p>Wew, another quick coding. kira2 4 jam (kok kayaknya lama ya? <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> biarin ah). udah jam 4 pagi nih.. nunggu shubuh dulu deh baru tidur.. </p></blockquote>
<p>PS: ubah ekstensi .odt menjadi .zip</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/104/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/104/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/104/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/104/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/104/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=104&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/06/14/load-file-shpesri/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Ubud yang malang</title>
		<link>http://pebbie.wordpress.com/2008/05/29/ubud-yang-malang/</link>
		<comments>http://pebbie.wordpress.com/2008/05/29/ubud-yang-malang/#comments</comments>
		<pubDate>Thu, 29 May 2008 13:47:49 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/2008/05/29/ubud-yang-malang/</guid>
		<description><![CDATA[Belum genap dua minggu saya menggunakan Ubud,UMPC dari zyrex kini sudah harus dikembalikan lagi karena tidak mau bangun. Kejadiannya berawal siang tadi ketika tiba-tiba hang saat akan terhubung dengan jaringan nirkabel di kampus dan tidak bangun-bangun lagi. Hanya tersisa lampu indikator power yang ditemani indikator caps lock. entah kenapa akhirnya segera melakukan klaim untuk penggantian [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">Belum genap dua minggu saya menggunakan Ubud,UMPC dari zyrex kini sudah harus dikembalikan lagi karena tidak mau bangun. Kejadiannya berawal siang tadi ketika tiba-tiba <em>hang</em> saat akan terhubung dengan jaringan nirkabel di kampus dan tidak bangun-bangun lagi. Hanya tersisa lampu indikator <em>power</em> yang ditemani indikator <em>caps lock</em>. entah kenapa akhirnya segera melakukan klaim untuk penggantian (<em>replacement</em>) dengan yang baru.</p>
<p align="justify">Sebelumnya, di umurmu yang kedua hari setelah berhasil terhubung ke internet (untung sudah diatur) ternyata minta aktivasi Vista starter (aneh, laptop mungil begitu kok pakai Vista? laptop besarku saja masih pakai XP Pro biar hemat).</p>
<blockquote><p>bud, bud.. kamu kok ngono to bud..? <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/103/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/103/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=103&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/05/29/ubud-yang-malang/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Menggabungkan nilai standar deviasi</title>
		<link>http://pebbie.wordpress.com/2008/05/29/menggabungkan-nilai-standar-deviasi/</link>
		<comments>http://pebbie.wordpress.com/2008/05/29/menggabungkan-nilai-standar-deviasi/#comments</comments>
		<pubDate>Thu, 29 May 2008 10:27:04 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
		
		<category><![CDATA[programming]]></category>

		<category><![CDATA[work]]></category>

		<category><![CDATA[aljabar]]></category>

		<category><![CDATA[standar deviasi]]></category>

		<category><![CDATA[statistik]]></category>

		<category><![CDATA[statistik gabungan]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=102</guid>
		<description><![CDATA[Melanjutkan tulisan yang ini, hanya saja untuk sekarang kasusnya adalah diketahui statistik dari n buah kelompok (rata-rata, banyaknya data, dan standar deviasi). persoalannya adalah bagaimana jika ingin menghitung statistik keseluruhan hanya berdasarkan data statistik saja tanpa perlu menghitung ulang dari keseluruhan data yang ada satu-per-satu.
Untuk menghitung rata-rata gabungan tentunya sangat mudah, yaitu dengan menghitung kembali [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">Melanjutkan tulisan yang <a href="http://pebbie.wordpress.com/2008/05/01/menghitung-rata-rata-dan-standar-deviasi-dalam-satu-kalang/trackback/">ini</a>, hanya saja untuk sekarang kasusnya adalah diketahui statistik dari <strong>n</strong> buah kelompok (rata-rata, banyaknya data, dan standar deviasi). persoalannya adalah bagaimana jika ingin menghitung statistik keseluruhan hanya berdasarkan data statistik saja tanpa perlu menghitung ulang dari keseluruhan data yang ada satu-per-satu.</p>
<p align="justify">Untuk menghitung rata-rata gabungan tentunya sangat mudah, yaitu dengan menghitung kembali jumlah seluruh data dari banyaknya data dan rata-rata.</p>
<blockquote><p>
<strong>rata-rata</strong> = <strong>jumlah_nilai</strong> / <strong>banyaknya_data</strong><br />
yang ekivalen dengan<br />
<strong>rata-rata</strong> * <strong>banyaknya_data</strong> = <strong>jumlah_nilai</strong>
</p></blockquote>
<p>selanjutnya kita menjumlahkan <strong>jumlah_nilai</strong> dari seluruh data menjadi <strong>jumlah_nilai_gabungan</strong> dan <strong>banyaknya_data</strong> menjadi <strong>banyaknya_data_gabungan</strong> sehingga untuk menghitung <strong>rata-rata_gabungan</strong> cukup menggunakan persamaan</p>
<blockquote><p>
<strong>rata-rata_gabungan</strong> = <strong>jumlah_nilai_gabungan</strong> / <strong>banyaknya_data_gabungan</strong>
</p></blockquote>
<p align="justify">Lalu bagaimana caranya menghitung standar deviasi gabungan?</p>
<p><span id="more-102"></span></p>
<p align="justify">Seperti kita merekonstruksi <strong>jumlah_nilai</strong> dari <strong>banyaknya_data</strong> dan <strong>rata-rata</strong>, maka sesuai dengan persamaan di tulisan terdahulu maka kita perlu merekonstruksi nilai dari variabel jumlah dari kuadrat nilai (<em>sum of square</em>)</p>
<blockquote><p>misalkan :<br />
<strong>n</strong> = banyaknya data<br />
<strong>sum</strong> = jumlah nilai<br />
<strong>m</strong> = rata-rata nilai dari n<br />
<strong>sumsq</strong> = jumlah dari kuadrat nilai<br />
<strong>s</strong> = standar deviasi</p>
<p>diketahui persamaan:</p>
<ol>
<li><strong>m</strong> = <strong>sum</strong> / <strong>n</strong></li>
<li><strong>s</strong><sup>2</sup> = (<strong>n</strong> * <strong>sumsq</strong> - <strong>sum</strong><sup>2</sup>) / ( <strong>n</strong> * (<strong>n</strong> - 1))</li>
</ol>
<p>maka nilai sumsq dapat diketahui dari persamaan:<br />
(<strong>s</strong><sup>2</sup> * <strong>n</strong> * (<strong>n</strong> - 1) + <strong>sum</strong><sup>2</sup>) / <strong>n</strong> = <strong>sumsq</strong></p>
<p>dari persamaan (1) maka nilai <strong>sum</strong> dapat disubtitusi dengan<br />
<strong>m</strong> * <strong>n</strong></p>
<p>maka persamaan tadi menjadi<br />
(<strong>s</strong><sup>2</sup> * <strong>n</strong> * (<strong>n</strong> - 1) + <strong>m</strong><sup>2</sup> * <strong>n</strong><sup>2</sup>) / <strong>n</strong> = <strong>sumsq</strong></p>
<p>distribusi n ditarik keluar sehingga menjadi<br />
(<strong>s</strong><sup>2</sup> * (<strong>n</strong> - 1) + <strong>m</strong><sup>2</sup> * <strong>n</strong>) = <strong>sumsq</strong>
</p></blockquote>
<p>nah, dari sini kita perlu mendefinisikan nilai-nilai gabungan yaitu</p>
<blockquote><p><strong>n&#8217;</strong> = <strong>n<sub>1</sub></strong> + <strong>n<sub>2</sub></strong> + <strong>n<sub>3</sub></strong> + &#8230; + <strong>n<sub>k</sub></strong></p>
<p>yang berlaku juga untuk variabel <strong>sum</strong> dan <strong>sumsq</strong></p>
<p>oleh sebab itu untuk menghitung standar deviasi gabungan dilakukan dengan menggunakan persamaan</p>
<p><strong>s&#8217;</strong><sup>2</sup> = (<strong>n&#8217;</strong> * <strong>sumsq&#8217;</strong> - <strong>sum&#8217;</strong><sup>2</sup>) / (<strong>n&#8217;</strong> * (<strong>n&#8217;</strong> - 1))
</p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/pebbie.wordpress.com/102/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/pebbie.wordpress.com/102/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=102&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2008/05/29/menggabungkan-nilai-standar-deviasi/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/pebbie-128.jpg" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
	</channel>
</rss>