<?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: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>
	<lastBuildDate>Mon, 08 Jun 2009 12:47:49 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>id</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
		<url>http://www.gravatar.com/blavatar/5b4a1b01c2abacd36afb4a5c6575a479?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>GAIBlog</title>
		<link>http://pebbie.wordpress.com</link>
	</image>
			<item>
		<title>Mengintip Situs Kampanye Pemilihan Presiden NKRI 2009</title>
		<link>http://pebbie.wordpress.com/2009/06/08/mengintip-situs-kampanye-pemilihan-presiden-nkri-2009/</link>
		<comments>http://pebbie.wordpress.com/2009/06/08/mengintip-situs-kampanye-pemilihan-presiden-nkri-2009/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 12:44:55 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[opini]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[pilpres]]></category>
		<category><![CDATA[pilpres2009]]></category>
		<category><![CDATA[situs kampanye]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=325</guid>
		<description><![CDATA[Sebetulnya sedang asik mengembangkan framework Web yang terinspirasi dari berbagai CMS (Django, WordPress, dan Drupal) lalu membaca e-mail dari milis HMIF yang mencantumkan tautan ke situs kampanye pilpres 2009 yang akhirnya penasaran ingin tahu apa engine/web framework/cms yang digunakan. 
situs SBY-Boediono ternyata menggunakan drupal, Megawati-Prabowo menggunakan Joomla, dan JK-Wiranto menggunakan wordpress. tidak sulit sebetulnya untuk [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=325&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sebetulnya sedang asik mengembangkan framework Web yang terinspirasi dari berbagai CMS (Django, WordPress, dan Drupal) lalu membaca e-mail dari milis HMIF yang mencantumkan tautan ke situs kampanye pilpres 2009 yang akhirnya penasaran ingin tahu apa engine/web framework/cms yang digunakan. </p>
<p>situs <a href="http://sbypresidenku.com/">SBY-Boediono</a> ternyata menggunakan drupal, <a href="http://megaprabowo.com/">Megawati-Prabowo</a> menggunakan Joomla, dan <a href="http://jk-wiranto-2009.com/">JK-Wiranto</a> menggunakan wordpress. tidak sulit sebetulnya untuk mengetahui apa engine yang digunakan apalagi untuk engine yang bersifat kode terbuka (open-source). kesimpulannya, tidak ada yang menggunakan cms buatan sendiri. </p>
<blockquote><p>mengapa menyebut &#8216;tidak ada yang menggunakan cms buatan sendiri&#8217;?</p></blockquote>
<p>jawabannya sederhana saja, pada saat tulisan ini dibuat pada situs megawati prabowo dan SBY-Boediono tercantum penanda Hak Cipta, atau Copyright ( &copy; ) dan tentu saja pada situs yang mencantumkan tanda copyright tersebut jejak-jejak penanda bahwa situs tersebut dibuat menggunakan framework yang sudah ada tidak dimunculkan (coba saja cari kata &#8216;drupal&#8217; di halaman situs SBY-Boediono atau cari kemunculan kata &#8216;joomla&#8217; di situs Mega-Prabowo). </p>
<p>Memang ternyata walaupun hanya situs JK-Wiranto yang penampilannya kacau waktu dibuka, tetapi tidak menyatakan tanda copyright pengembang situs bahkan tetap mencantumkan atribut copyright milik wordpress serta tautan ke situs WordPress.</p>

<a href='http://pebbie.wordpress.com/2009/06/08/mengintip-situs-kampanye-pemilihan-presiden-nkri-2009/sby/' title='sby'><img width="150" height="29" src="http://pebbie.files.wordpress.com/2009/06/sby.png?w=150&#038;h=29" class="attachment-thumbnail" alt="" title="sby" /></a>
<a href='http://pebbie.wordpress.com/2009/06/08/mengintip-situs-kampanye-pemilihan-presiden-nkri-2009/jkwin/' title='jkwin'><img width="150" height="50" src="http://pebbie.files.wordpress.com/2009/06/jkwin.png?w=150&#038;h=50" class="attachment-thumbnail" alt="" title="jkwin" /></a>
<a href='http://pebbie.wordpress.com/2009/06/08/mengintip-situs-kampanye-pemilihan-presiden-nkri-2009/megapro/' title='megapro'><img width="150" height="110" src="http://pebbie.files.wordpress.com/2009/06/megapro.jpg?w=150&#038;h=110" class="attachment-thumbnail" alt="" title="megapro" /></a>

<p>Catatan:</p>
<blockquote><p><strong>1: What is the license for Drupal?</strong></p>
<p>Drupal and all contributed files hosted on Drupal.org are licensed under the <u>GNU General Public License, version 2 or later</u>. That means you are free to download, reuse, modify, and distribute any files hosted on Drupal.org&#8217;s CVS repository <u>under the terms of either the GPL version 2 or version 3, and to run Drupal in combination with any code with any license that is compatible with either versions 2 or 3</u>, such as the Affero General Public License (AGPL) version 3.</p></blockquote>
<blockquote><p>Joomla is free, open, and available to anyone <u>under the GPL license</u>.</p></blockquote>
<p><em>now who&#8217;s conform to these licenses?</em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/325/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=325&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/06/08/mengintip-situs-kampanye-pemilihan-presiden-nkri-2009/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Programmatically set core affinity in multicore environment</title>
		<link>http://pebbie.wordpress.com/2009/06/02/programmatically-set-core-affinity-in-multicore-environment/</link>
		<comments>http://pebbie.wordpress.com/2009/06/02/programmatically-set-core-affinity-in-multicore-environment/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 07:48:36 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[delphi]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[core affinity]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[win32]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=320</guid>
		<description><![CDATA[Prosesor multicore sudah tidak asing tetapi aplikasi yang umumnya dikembangkan biasanya hanya terdiri dari satu thread. Sejak dahulu ternyata sudah ada Win32 API untuk menentukan afinitas proses/thread ke prosesor tertentu. Kode di bawah menggunakan delphi 7.
Mendapatkan Jumlah core/Prosesor

var
  sinfo : TSystemInfo;
begin
  GetSystemInfo(sinfo);
  { jumlah prosesor ada di field dwNumberOfProcessors }
  showmessage(inttostr(sinfo.dwNumberOfProcessors));

Menentukan [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=320&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Prosesor multicore sudah tidak asing tetapi aplikasi yang umumnya dikembangkan biasanya hanya terdiri dari satu thread. Sejak dahulu ternyata sudah ada Win32 API untuk menentukan afinitas proses/thread ke prosesor tertentu. Kode di bawah menggunakan delphi 7.</p>
<p><strong>Mendapatkan Jumlah core/Prosesor</strong></p>
<pre name="code" class="delphi">
var
  sinfo : TSystemInfo;
begin
  GetSystemInfo(sinfo);
  { jumlah prosesor ada di field dwNumberOfProcessors }
  showmessage(inttostr(sinfo.dwNumberOfProcessors));
</pre>
<p><strong>Menentukan Afinitas ke core tertentu</strong><br />
Afinitas ke core menggunakan bit vector. Tiap 1 bit diasosiasikan ke core tertentu mulai dari LSB. karena tipe data yang dilemparkan ke fungsi tsb adalah 32 bit unsigned integer maka mungkin maksimum prosesor yang bisa diakses sejumlah 32.</p>
<p>berikut ini contoh kode agar aplikasi yang sedang berjalan hanya menggunakan core pertama (cpu0) saja.</p>
<pre name="code" class="delphi">
SetProcessAffinityMask(GetCurrentProcess, 1);
</pre>
<p>berikut ini contoh kode agar aplikasi yang sedang berjalan hanya menggunakan core pertama (cpu0) dan kedua (cpu1).</p>
<pre name="code" class="delphi">
SetProcessAffinityMask(GetCurrentProcess, 3);
</pre>
<p>sedangkan berikut ini contoh kode agar aplikasi yang sedang berjalan hanya menggunakan core kedua (cpu0) saja.</p>
<pre name="code" class="delphi">
SetProcessAffinityMask(GetCurrentProcess, 2);
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/320/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=320&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/06/02/programmatically-set-core-affinity-in-multicore-environment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Bloated Computing : A Collective Crime</title>
		<link>http://pebbie.wordpress.com/2009/05/20/bloated-computing-a-collective-crime/</link>
		<comments>http://pebbie.wordpress.com/2009/05/20/bloated-computing-a-collective-crime/#comments</comments>
		<pubDate>Wed, 20 May 2009 09:30:33 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[opini]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=316</guid>
		<description><![CDATA[Hukum Moore menjanjikan kapasitas komputasi yang semakin lama semakin besar. Tetapi kemajuan terhadap state-of-the-art dan dampak terhadap kehidupan end-user belum tentu meningkat dengan laju yang sama. Beberapa penyebab terjadinya hal ini antara lain faktor ekonomi yang tidak dapat dipisahkan dari industri teknologi yang menjanjikan agar setiap perubahan kemajuan dapat berjalan perlahan tetapi berkesinambungan. Ekonomi menjadi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=316&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hukum Moore menjanjikan kapasitas komputasi yang semakin lama semakin besar. Tetapi kemajuan terhadap <em>state-of-the-art</em> dan dampak terhadap kehidupan <em>end-user</em> belum tentu meningkat dengan laju yang sama. Beberapa penyebab terjadinya hal ini antara lain faktor ekonomi yang tidak dapat dipisahkan dari industri teknologi yang menjanjikan agar setiap perubahan kemajuan dapat berjalan perlahan tetapi berkesinambungan. Ekonomi menjadi keran pengontrol terhadap teknologi yang dapat dinikmati oleh setiap orang. Hal yang sebetulnya diinginkan bukanlah teknologi melainkan manfaat dan dampaknya terhadap kehidupan dan kemanusiaan. Pada titik tertentu, fungsi keran pengontrol yang secara abstrak menjadi model antrian M/M/1 tentu akan mencapai kejenuhan yang menjadi <em>bottleneck</em> yang memisahkan antara manusia yang semakin lapar akan manfaat dan eksplorasi ilmiah yang menanti untuk diwujudkan. </p>
<p>Bloat, yang dalam bahasa indonesia mirip dengan istilah kembung (pada perut) yang maknanya adalah penumpukan zat-zat yang mengantri untuk dicerna. Dalam konteks teknologi khususnya komputasi istilah bloat lebih tepat dimaknakan sebagai fenomena tambal-sulam yang selama ini terjadi sejak awal industri komputasi tetapi sengaja ditutup-tutupi atau didogmakan untuk dimaklumi sebagai bagian dari perkembangan ke arah yang lebih baik. </p>
<p>Bayangkan sebuah teknologi yang memungkinkan orang untuk bertukar kata di tempat yang berbeda jika dilihat sebagai rangkaian teknologi di bawahnya menjadi sebuah koleksi benda-benda yang saling terhubung dalam suatu kekacauan yang dilihat dari luar sebagai keteraturan (bahkan mungkin kenyamanan jika kedua orang yang terlibat memiliki hubungan emosional). Jika disederhanakan, maka teknologi yang terlibat dapat dikelompokkan menjadi Perangkat keras, Perangkat lunak, dan mekanisme dan media telekomunikasi (hal ini tidak akan dibahas mengingat telekomunikasi pun dapat dideskripsikan menggunakan HW dan SW). </p>
<p>Contoh produk yang termasuk perangkat keras adalah Prosesor. Kalau kita merefleksikan perkembangan arsitektur prosesor dan implementasinya, kita akan mendapatkan salah satu babak mengenai dua buah arsitektur yang menonjol yaitu CISC dan RISC. Arsitektur RISC dimunculkan akibat arsitektur CISC yang semakin lama semakin mengganggu (<em>bloated, if i may say so</em>) akibat kompleksitasnya. Salah satu alasan penentang CISC adalah pihak produsen CPU yang berbasis arsitektur CISC disinyalir melakukan praktek semi-monopoli yang lebih tepatnya membuat tuas untuk mengendalikan pasar CPU dan industri di atasnya. Walaupun pada akhirnya konsensus menyetujui bahwa arsitektur RISC lebih baik dari CISC dari beberapa parameter yang dianggap signifikan, saat ini kita masih menjumpai prosesor yang menggunakan arsitektur CISC (walaupun implementasi di dalamnya menggunakan RISC). </p>
<p>Dalam dunia perangkat lunak kejadian bloat bisa lebih radikal dibanding pada perangkat keras. Kunci penyebabnya terletak pada awal sejarahnya yaitu mesin turing yang dalam sebuah konjekturnya menyatakan bahwa hampir semua jenis &#8216;komputer&#8217; dapat disimulasikan atau diemulasikan menggunakan mesin turing universal. Fenomena ini secara nyata sudah dijelaskan dalam dunia perangkat keras pada contoh prosesor di atas. Fenomena yang dijelaskan menggunakan mesin turing tersebut secara sederhana adalah memungkinkan kita untuk membuat infrastruktur komputasi sebagai kumpulan teknologi yang bertumpuk berlapis-lapis. </p>
<p>&#8220;so what? bukankah cara tersebut (tumpukan berlapis) bertujuan untuk mempermudah?&#8221;. Well, menjadi <em>ignorant</em> memang seringkali &#8216;menyenangkan&#8217;. Analogi dari tumpukan berlapis tersebut adalah birokrasi, agar dapat berjalan seperti yang diharapkan maka pada masing-masing lapisan dibuat batasan-batasan. Meskipun pembatasan tidak selamanya buruk, pembatasan pun tidak selamanya baik. Pertanyaannya adalah, sudah setinggi apakah tumpukan lapisan tersebut dan seberapa luas ruang ekspresi manusia dibanding ruang-ruang yang digunakan untuk membatasinya? kaitkan dengan jargon-jargon komputasi seperti <em>cloud computing</em> dan virtualisasi. </p>
<p>sebagai penutup, mari lihat salah satu contoh <a href="http://azrl.wordpress.com/2009/05/19/how-i-connect-to-the-internet/">interpretasi dari jargon <em>cloud computing</em></a> yang memanfaatkan virtualisasi. <em>The interpretation itself has nothing wrong with it, the problem is the implication related to computing in rural areas. Do we really gonna charge rural people for the bloated technology that we bring just for something that actually can have much leaner and cheaper implementation? if there&#8217;s no one to answer therefore i would be the first person to say NO. if we really would like to help them (not conversely, help ourself with burden sharing) then we should use our head to skim the technology first before we give to people in rural areas.</em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/316/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=316&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/05/20/bloated-computing-a-collective-crime/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>simple chat server in python</title>
		<link>http://pebbie.wordpress.com/2009/05/06/simple-chat-server-in-python/</link>
		<comments>http://pebbie.wordpress.com/2009/05/06/simple-chat-server-in-python/#comments</comments>
		<pubDate>Wed, 06 May 2009 08:52:27 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[akademik]]></category>
		<category><![CDATA[distributed system]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[mmog]]></category>
		<category><![CDATA[pygame]]></category>
		<category><![CDATA[pymmo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[threading]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=312</guid>
		<description><![CDATA[Bosan!
Lagi pengen cari hiburan. Akhirnya ngoprek python yang mrogramnya headache-free. Biar seru pygame dipilih sebagai mainan. Hasil akhirnya game pesawat-pesawatan SHMUP-defense yang dipublish di sini yang dibuat dalam waktu 1 hari (gambarnya udah dibikin di project lain yang platformnya j2me). 
Biar belajar sesuatu yang baru tapi masih berkaitan sama tugas kuliah (distributed shared memory bwt [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=312&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bosan!</p>
<p>Lagi pengen cari hiburan. Akhirnya ngoprek python yang mrogramnya <em>headache-free</em>. Biar seru <a href="http://www.pygame.org">pygame</a> dipilih sebagai mainan. Hasil akhirnya game pesawat-pesawatan SHMUP-defense yang dipublish di <a href="http://games.pebbie.net/2009/05/simple-shmup-using-pygame/">sini</a> yang dibuat dalam waktu 1 hari (gambarnya udah dibikin di project lain yang platformnya j2me). </p>
<p>Biar belajar sesuatu yang baru tapi masih berkaitan sama tugas kuliah (distributed shared memory bwt wireless embedded network sama simulasi berbasis agen) akhirnya diputuskan pengen bikin MMO yang <em>as-simple-as-possible</em> pake python. Lagi penasaran aja pake socket di python. ternyata cukup sederhana, mungkin bisa dibilang lebih sederhana dari socket di JAVA. habis baca <a href="http://ilab.cs.byu.edu/python/">tutorialnya</a> langsung bikin echo server, dengan tambahan. di client, untuk nerima message dari client yang lain nggak harus nunggu input seperti yang ada di <a href="http://www.enchantedage.com/pymmo">sini</a>.<br />
<span id="more-312"></span></p>
<pre name="code" class="python">
&quot;&quot;&quot;
	file : server.py
	auth : Pebbie
	desc : echo server, multithreaded
&quot;&quot;&quot;
import socket, threading
import os, sys

BACKLOG = 5
class Server:
	def __init__(self,host=&#039;&#039;,port=8080,size=1024):
		self.host = host
		self.port = port
		self.size = size
		self.socket = None
		self.threads = []
		self.run()

	def open(self):
		try:
			self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
			self.socket.bind((self.host,self.port))
			self.socket.listen(BACKLOG)
		except socket.error(value, message):
			if self.socket:
				self.socket.close()
			print &quot;create socket failed : &quot;, message
			sys.exit(1)

	def run(self):
		self.open()
		running = True
		while running:
			c = Client(self, self.socket.accept())
			self.threads.append(c)
			c.start()
		self.close()

	def close(self):
		self.socket.close()
		for c in self.threads:
			c.join()

	def send(self,msg):
		for c in self.threads:
			c.client.send(msg)

class Client(threading.Thread):
	def __init__(self,owner,(client,address)):
		threading.Thread.__init__(self)
		self.owner = owner
		self.client = client
		self.address = address
		self.size = 1024
		self.running = False

	def close(self):
		try:
			self.owner.threads.remove(self)
			self.owner.send(&quot;quit&quot;)
			self.client.close()
		except:
			pass
		self.running = False
		print &quot;closing &quot;, self.address

	def run(self):
		self.running = True
		while self.running:
			try:
				data = self.client.recv(self.size)
				if data:
					print &quot;received from &quot;, self.address, data
					self.interpret(data)
				else:
					self.close()
			except:
				self.close()

	def interpret(self,msg):
		if msg == &quot;stop&quot;:
			self.client.send(msg)
			self.close()
		else:
			self.owner.send(msg)

if __name__==&#039;__main__&#039;:
	s = Server()
</pre>
<p>Tadinya di contoh kode Python network programming ada kode yang pakai modul select, tapi entah kenapa selalu aja exception ketika objek yang dimasukinnya sys.stdin. mungkin ada yang pernah pengalaman bisa bantu?</p>
<p>berikutnya kode untuk client</p>
<pre name="code" class="python">
&quot;&quot;&quot;
	file : client.py
	auth : pebbie
	desc : echo client, bisa ngirim untuk client lain
&quot;&quot;&quot;
from socket import *
import threading
import os,sys

DATASIZE = 1024
class SocketListener(threading.Thread):
	def __init__(self,owner):
		threading.Thread.__init__(self)
		self.owner = owner
		self.socket = owner.socket
		self.running = False

	def run(self):
		print &quot;listener started&quot;
		self.running = True
		while self.running:
			data = self.socket.recv(self.owner.size)
			print &#039;\nreceived:&#039;, data
			if data == &quot;stop&quot;:
				self.running = False
		self.socket.close()
		print &quot;disconnected, press return&quot;

class Client:
	def __init__(self,host=&#039;localhost&#039;,port=8080,size = DATASIZE):
		self.host = host
		self.port = port
		self.size = size
		self.socket = None
		self.listener = None
		self.open()

	def open(self):
		try:
			self.socket = socket(AF_INET, SOCK_STREAM)
			self.socket.connect((self.host,self.port))
		except :
			self.socket = None
			print &quot;something happened, connect failed&quot;, msg
			sys.exit(1)
		self.listener = SocketListener(self)
		self.listener.start()

	def run(self):
		while self.listener.running:
			cmd = raw_input()
			if not self.listener.running:
				break
			self.socket.send(cmd)
		self.listener.join()

if __name__==&#039;__main__&#039;:
	Client().run()
</pre>
<p>di client, kode untuk socket.recv dipisah di thread tersendiri. jadi kalau client lain ngirim pesan, pesannya bisa diterima tanpa harus ngetik sesuatu (kekurangan yang ada di contoh pymmo). selanjutnya tinggal penanganan data world &amp; entity, sama game client. rencananya sih untuk manajemen data pake sqlite3 aja yang udah built-in di python 2.5. cara pakai sqlite pun lumayan mudah, tapi dibahasnya nanti aja kalo kode untuk usernya udah jadi. <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':D' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/312/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=312&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/05/06/simple-chat-server-in-python/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Betulkah Pemilu Legislatif 2009 Gagal?</title>
		<link>http://pebbie.wordpress.com/2009/04/21/betulkah-pileg09-gagal/</link>
		<comments>http://pebbie.wordpress.com/2009/04/21/betulkah-pileg09-gagal/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 07:41:44 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[opini]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[icr]]></category>
		<category><![CDATA[it kpu]]></category>
		<category><![CDATA[pemilu]]></category>
		<category><![CDATA[pileg2009]]></category>
		<category><![CDATA[tabulasi]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=277</guid>
		<description><![CDATA[Sudah lewat waktu pelaksanaan tabulasi suara nasional (real count) yang tadinya direncanakan selama 10 hari setelah pemilu. Berbagai polemik muncul di berbagai media baik televisi maupun di internet. Persoalan yang dijadikan topik polemik diantaranya pemilihan ICR sebagai teknologi ujung tombak penghitungan suara di KPUD, dan adanya pihak (yang mengaku sebagai hacker) yang berusaha masuk tanpa [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=277&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sudah lewat waktu pelaksanaan tabulasi suara nasional (real count) yang tadinya direncanakan selama 10 hari setelah pemilu. Berbagai polemik muncul di berbagai media baik televisi maupun di internet. Persoalan yang dijadikan topik polemik diantaranya pemilihan ICR sebagai teknologi ujung tombak penghitungan suara di KPUD, dan adanya pihak (yang mengaku sebagai hacker) yang berusaha masuk tanpa izin ke server tabulasi suara dan sempat berusaha mengubah data perolehan suara.</p>
<p>Sebelum menjustifikasi apakah pemilu legislatif ini gagal atau tidak dan menjustifikasi siapa dan apa yang salah ada baiknya kita memilah dulu masalah-masalah yang ada. Polemik pemilu kali ini membahas aspek organisasi dan aspek teknologi. Sebagai blog yang membahas teknologi maka saya tidak akan ikut-ikutan mengurusi aspek organisasi walaupun sebagaimana kita ketahui bahwa keputusan atas pemilihan teknologi memang adalah kewenangan organisasi yang dalam hal ini adalah KPU. Adapun peran pihak lain (BPPT dan vendor produk teknologi baik ICR, sistem tabulasi, maupun aspek teknis IT lainnya) yang terlibat dalam teknologi yang digunakan pada pemilu kali ini tidak lain hanyalah sebagai perealisasi atas keputusan yang dibuat oleh KPU.<br />
<span id="more-277"></span></p>
<ol>
<li>
<h3>Teknologi ICR</h3>
<p>Teknologi ini merupakan topik yang sedikit banyak terkait dengan isi dari blog ini. oleh sebab itu akan segera dibahas terlebih dahulu. Pada berbagai situs dan blog di negeri ini (<a href="http://www.detikinet.com">[1]</a>, <a href="http://tipemilu2009.wordpress.com">[2]</a>, <a href="http://geeks.netindonesia.net/blogs/tahir">[3]</a>) sudah ramai dibahas mengenai apa itu teknologi ICR dan bagaimana kelebihan dan kekurangannya. </p>
<p>Saya akan membahas hal-hal apa saja yang ada di dalam produk ICR yang perlu diketahui oleh publik. Selama ini yang sering disebut baik di televisi maupun di situs internet hanyalah bagaimana mengenali gambar dalam bentuk berikut (contoh didapat dari database MNIST):<br />
<div id="attachment_278" class="wp-caption alignnone" style="width: 234px"><img src="http://pebbie.files.wordpress.com/2009/04/angka9.png?w=224&#038;h=232" alt="contoh gambar berisi angka (sumber basisdata MNIST)" title="angka9" width="224" height="232" class="size-full wp-image-278" /><p class="wp-caption-text">contoh gambar berisi angka</p></div> menjadi teks berupa angka &#8220;9&#8243;. </p>
<p>Kalau kita hanya berpikir bagaimana mengkonversi gambar tersebut menjadi angka maka akurasi yang didapat cukup tinggi (99.6 % dari 50000 gambar. pada situs Yang Le Cun yang sering disebut di situs <a href="http://tipemilu2009.wordpress.com">[2]</a>). Pengujian yang dilakukan pada waktu standarisasi produk ICR tidak sampai 50000 (maksimal hanya 500 dari satu paket form C1-IT yang ditulis oleh penguji), walaupun demikian pencapaian angka 98% sebagaimana yang diklaim oleh salah satu vendor yang disalah artikan sebagai pernyataan dari BPPT sebagai tim reviewer tidak mustahil. </p>
<p>Pertanyaannya adalah apakah jumlah data mempengaruhi keakuratan produk di lapangan? jawabannya tentu tidak. Hal yang lebih penting adalah cakupan variasi pada kasus latih dan uji. Dalam hal ini terdapat jurang antara dunia akademik dengan dunia nyata. Di dunia akademik, validasi sebuah pengujian dengan model distribusi statistik tertentu dan ambang batas jumlah pengujian dapat dinyatakan cukup valid karena ada asumsi bahwa peneliti boleh salah tetapi tidak boleh bohong (kejujuran ilmiah) dan hal yang menjadi fokus adalah seberapa besar kapabilitas metode komputasi yang diuji (lewat partisi antara distribusi data yang digunakan untuk pelatihan dan distribusi data yang digunakan untuk pengujian). Lain halnya dalam dunia nyata yang cenderung pragmatis yaitu jika memungkinkan maka akurasi yang diharapkan adalah 100% tak peduli apakah cara (pengembangan metode) untuk mendapat 100% itu valid atau tidak secara akademik(terlihat pada logika pembantahan yang ditulis oleh publik di <a href="http://aalinazar.wordpress.com/2009/04/20/buang-buang-uang-rakyat-dengan-icr/">sini</a>).</p>
<p>Hal penting yang menjadi kebutuhan pada penghitungan menggunakan teknologi ICR tidak hanya apakah teknologi tersebut akurat mengenali gambar di atas menjadi angka 9 (tidak tertukar dengan 5, 3, atau <img src='http://s.wordpress.com/wp-includes/images/smilies/face-cool.png' alt='8)' class='wp-smiley' /> melainkan lebih umum lagi yaitu :
<ul>
<li>cepat</li>
<li>akurat dan dapat dipertanggung-jawabkan</li>
</ul>
<p>kriteria cepat merupakan isu utama mengingat jumlah dokumen yang diproses luar biasa banyak dan tersebar secara geografis. Pemeriksaan ini dapat dikomposisi menjadi proses yang atomik yaitu pemindaian per TPS yang dilakukan oleh operator ICR di KPUD. Adapun proses pemeriksaan setiap dokumen form C1-IT yang terdiri dari 8 lembar ini akan melalui subproses berikut:
<ul>
<li>pemindaian untuk mengubah dokumen kertas menjadi dokumen elektronik (citra digital).</li>
<li>pembacaan angka-angka (nomor partai dan perolehan suara) di tiap lembar oleh teknik ICR</li>
<li>verifikasi untuk menjamin data yang dikirimkan ke pusat adalah benar biarpun terjadi kesalahan pembacaan</li>
<li>penyimpanan paket yang berisi citra yang sudah dibubuhi cap <em>watermark</em> dan hasil pembacaan dan log verifikasi yang sudah dienkripsi dan dibubuhi <em>watermark</em>.</li>
</ul>
<p>kriteria akurat dan dapat dipertanggung jawabkan sudah dicakup lewat adanya proses verifikasi, dilampirkannya  citra hasil scan, dan perlindungan terhadap paket yang dikirimkan. Paket yang diterima oleh sistem tabulasi di pusat akan diperiksa kembali untuk memeriksa kemungkinan terjadinya pengubahan selama paket tersebut dibuat hingga diterima oleh pusat sebelum data perolehan tersebut digabung ke dalam perolehan yang bisa dilihat oleh publik. Berdasarkan simulasi penghitungan yang dilakukan di <a href="http://arifrahmat.wordpress.com/2009/04/20/rahasia-di-balik-lambannya-perhitungan-it-kpu/">sini</a> dapat diketahui bahwa proses verifikasi di pusat telah berjalan dan ditolaknya paket kiriman dari daerah.</p>
<p>Proses pemindaian, pembacaan, penyimpanan paket, dan verifikasi di pusat merupakan proses yang waktu pengerjaannya dapat dianggap konstan. Proses yang waktunya bervariasi terletak pada verifikasi dan hal ini dipengaruhi oleh keberhasilan perangkat lunak ICR dalam melakukan pembacaan. Demi keberpercayaan terhadap data yang dibaca maka diasumsikan bahwa pasti akan terjadi kesalahan pada pembacaan, pertanyaannya adalah seberapa besar, dimana penyebab kesalahannya, dan bagaimana mengatasinya.</p>
<ol>
<li>seberapa besar kesalahan pembacaannya?.<br /> rentang kesalahan yang mungkin terjadi mulai dari dokumen tidak berhasil dibaca sama sekali, hingga kesalahan pengenalan angka (perolehan suara)</li>
<li>dimana penyebab kesalahannya?<br />Kesalahan pengenalan angka terletak dari kapasitas teknik pengenalan pola yang digunakan dan kesalahan dalam melokalisasi objek yang dicurigai berisi angka. Kesalahan ini bisa bervariasi dan sangat bergantung pada variasi masukan. Sedangkan kesalahan dokumen tidak terbaca bisa terjadi disebabkan beberapa hal : kertas terlalu tipis sehingga gagal dipindai oleh perangkat pemindai, terjadi kerusakan fisik pada kertas pada saat kertas dicetak maupun setelah kertas diterima di KPUD. Hal terakhir berhubungan dengan pola (marker) yang ditambahkan pada kertas untuk menjadi referensi posisi oleh program untuk mengantisipasi transformasi <em>affine</em>(rotasi, geser, skala) yang mungkin terjadi pada citra hasil pemindaian (sebagaimana yang pernah saya jabarkan untuk kasus UASBN). Persoalan pemilihan pola marker yang ditambahkan pada kertas dan pola yang digunakan pada program ICR merupakan kuncinya. Tiap jenis pola memiliki kelebihan dan resikonya masing-masing.</li>
<li>Bagaimana mengatasinya? Hal ini akan saya bahas lebih lanjut di bawah.</li>
</ol>
<p>Terkait kesalahan pengenalan angka yang persoalannya terletak pada kesalahan lokalisasi atau segmentasi objek yang dicurigai sebagai objek angka akan lebih mudah dipahami jika diberikan contoh berikut.<br />
<div id="attachment_283" class="wp-caption alignnone" style="width: 510px"><img src="http://pebbie.files.wordpress.com/2009/04/lokal.png?w=500&#038;h=1533" alt="adanya objek yang bukan angka diisi pada kotak untuk angka" title="lokal" width="500" height="1533" class="size-full wp-image-283" /><p class="wp-caption-text">adanya objek yang bukan angka diisi pada kotak untuk angka</p></div><br />
<div id="attachment_289" class="wp-caption alignnone" style="width: 234px"><img src="http://pebbie.files.wordpress.com/2009/04/lokal21.png?w=224&#038;h=118" alt="pembatalan yang hanya dimengerti manusia" title="lokal21" width="224" height="118" class="size-full wp-image-289" /><p class="wp-caption-text">pembatalan yang hanya dimengerti manusia</p></div><br />
<div id="attachment_290" class="wp-caption alignnone" style="width: 251px"><img src="http://pebbie.files.wordpress.com/2009/04/lokal31.png?w=241&#038;h=124" alt="angka 8 keluar area isian" title="lokal31" width="241" height="124" class="size-full wp-image-290" /><p class="wp-caption-text">angka 8 keluar area isian</p></div>[caption id="attachment_291" align="alignnone" width="229" caption="angka 6 keluar area, angka 0 atau 8"]<img src="http://pebbie.files.wordpress.com/2009/04/lokal41.png?w=229&#038;h=112" alt="angka 6 keluar area, angka 0 atau 8" title="lokal41" width="229" height="112" class="size-full wp-image-291" />[/caption]</p>
<p>Itu baru dari pemisahan antara objek angka dengan objek lainnya. kalaupun angka berhasil dilokalisasi, namun ambiguitas akibat pengisi pun dapat terjadi seperti berikut.<br />
<div id="attachment_292" class="wp-caption alignnone" style="width: 239px"><img src="http://pebbie.files.wordpress.com/2009/04/kenal2.png?w=229&#038;h=112" alt="angka 1 atau angka 0?" title="kenal2" width="229" height="112" class="size-full wp-image-292" /><p class="wp-caption-text">angka 1 atau angka 0?</p></div></p>
<p>Pola marker yang digunakan pada form C1-IT adalah penggunaan kotak hitam yang terletak pada sudut-sudut kertas. Entah berdasarkan alasan apa KPU memutuskan untuk menggunakan pola tersebut. Tetapi pola tersebut sejauh yang saya ketahui merupakan pola marker yang memiliki resiko paling tinggi dari berbagai pola marker lainnya. </p>
<p>Pola tersebut terdiri dari 4 buah kotak hitam pada tiap sudut kertas dengan tambahan satu kotak di kiri atas untuk menjadi informasi tambahan orientasi (biasanya kiri atas). Resiko yang dapat terjadi adalah seperti yang sekarang terjadi yaitu jika dokumen C1-IT yang terdiri dari 8 lembar tersebut di-<em>staples</em> dan ketika dibuka, kertas tersobek. Ketika dipindai, maka hasilnya mungkin menjadi seperti berikut : <div id="attachment_282" class="wp-caption alignnone" style="width: 507px"><img src="http://pebbie.files.wordpress.com/2009/04/sobek.png?w=497&#038;h=351" alt="sobek akibat staples" title="sobek" width="497" height="351" class="size-full wp-image-282" /><p class="wp-caption-text">sobek akibat staples</p></div></p>
<p>Apa yang terjadi? secara otomatis dua buah marker hilang dan kertas langsung tidak dapat dibaca karena posisinya tidak tepat. Hal ini bisa diatasi dengan penentuan posisi marker secara manual, tetapi waktu yang diperlukan akan menjadi lama karena proses <em>trial and error</em>. </p>
<p>Kembali ke proses verifikasi, karena proses yang terjadi pada verifikasi sudah tetap maka variasi waktu sangat dipengaruhi oleh bagaimana teknik interaksi yang digunakan. Spesifikasi yang diberikan oleh tim reviewer IT KPU (dalam hal ini BPPT) hanyalah bahwa perangkat lunak ICR harus menampilkan hasil pembacaan disertai citra hasil pindai secara bersamaan (agar operator hanya melihat ke monitor tanpa perlu memegang kertas untuk verifikasi sebagaimana halnya jika dilakukan dengan data entry secara manual/diketik) dan tidak mencantumkan bagaimana proses interaksi berlangsung. Sebagai gambaran, operator ICR yang ada di KPUD diasumsikan mempunyai kemampuan operasi yang kurang (khususnya kemampuan mengetik menggunakan keyboard komputer dan mengoperasikan mouse untuk memanipulasi objek di layar). Oleh sebab itu, sebaiknya untuk melakukan verifikasi perangkat masukan yang perlu digunakan pun dikurangi (misalkan cukup menggunakan mouse saja). Visualisasi hasil pembacaan pun sebaiknya menjadi perhatian untuk mengurangi kerja otot leher dan otot mata. Teknik yang optimal adalah menampilkan tiap angka pembacaan yang terletak di samping objek yang dikenali serta memungkinkannya dilakukan penyuntingan di tempat (<em>in-place editing</em>). </p>
<p>Namun kenyataannya, hanya satu vendor yang memperhatikan efisiensi dari interaksi. Vendor lainnya sepertinya lebih menonjolkan fungsi (akurasi pembacaannya) yang waktu pengenalannya bisa diprediksi sejak awal dan bisa dianggap konstan. Hal ini mencerminkan seberapa matang vendor tersebut dalam menyediakan produk IT.</p>
<p>Kebanyakan vendor ICR mengimplementasi proses verifikasi dengan membagi area layar menjadi 2 yaitu sebelah kiri untuk hasil pembacaan (baik dalam bentuk tabel ataupun formulir isian), dan area layar sebelah kanan untuk menampilkan citra hasil pemindaian. Hal ini memiliki mekanisme yang sama seperti entry manual dengan kertas yang mengharuskan operator menggerakkan otot leher dan otot mata secara ekstrim (dari kertas ke monitor atau dari monitor sebelah kiri dan sebelah kanan). Walaupun gerakan tersebut bisa dibilang sedikit, namun karena dilakukan secara berulang-ulang dan bolak-balik(akibat data yang banyak dan operator yang sedikit) akan lebih cepat mengakibatkan kelelahan karena otot yang lelah dekat dengan otak. Hal ini sudah terjadi dan tidak dapat dihindari lagi. </li>
<li>
<h3>Adanya penyusup di server KPU</h3>
<p>Saya tidak akan pernah menyebut penyusup tersebut sebagai hacker. Hal ini menjadi polemik dengan adanya provokasi bahwa jika KPU melaporkan penyusup tersebut ke aparat, maka KPU dianggap menyulut perang dengan komunitas underground. Padahal sebelum pemilu, pihak representatif dari komunitas underground sudah memberikan himbauan agar anggota komunitas tersebut jika menemukan lubang kesalahan pada sistem TI KPU supaya segera melaporkan sehingga dapat diperbaiki bukan malahan mengorek-ngorek lubang tersebut lalu masuk dan mengacak-acak seperti tikus. Walaupun sang penyusup berhasil masuk dan berusaha mengacak-acak (mengubah data), namun pihak TI KPU berhasil mencegah terjadinya perubahan dan mengidentifikasi pelakunya. Lucunya, muncul opini bahwa tindakan pelaporan pelaku penyusupan ke aparat kepolisian menyulut perang yang mengancam keberjalanan pemilihan presiden mendatang. Hal ini jelas-jelas menunjukkan sikap kekanak-kanakan yang tidak bertanggung jawab. Apakah <em>mentang-mentang</em> berhasil masuk lalu tidak mau disalahkan. Padahal sebelumnya sudah ada himbauan/peringatan larangan. </p>
<p>Hal inilah yang kurang baik, seperti yang sudah saya nyatakan sebelumnya bahwa saya tidak akan memberi gelar hacker pada penyusup tersebut. alasannya sederhana secara bahasa. istilah hacker mengandung arti bahwa orang tersebut melakukan kegiatan <em>hacking</em> secara rutin sebagai profesi bukan karena melakukan sekali (tentu berbeda makna istilah &#8216;pelaku pembunuhan&#8217; dengan &#8216;pembunuh&#8217;).
</li>
</ul>
<p>Kesimpulannya, teknologi ICR tidak dapat dibilang gagal namun yang salah adalah pemilihan teknologi ICR dalam penyelenggaraan pemilu lah yang gagal (banyak aspek yang terkait dengan faktor keberhasilan penerapan teknologi ICR yang diabaikan) sehingga yang perlu dirunut adalah bagaimana keputusan tersebut dibuat bukan pada teknologinya. (jangan malah <em>buruk muka cermin dibelah</em>)</p>
<p><strong>Disclaimer</strong><br />
Tulisan di atas merupakan pendapat pribadi penulis dan tidak merepresentasikan perusahaan tempat penulis bekerja.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/277/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=277&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/04/21/betulkah-pileg09-gagal/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>

		<media:content url="http://pebbie.files.wordpress.com/2009/04/angka9.png" medium="image">
			<media:title type="html">angka9</media:title>
		</media:content>

		<media:content url="http://pebbie.files.wordpress.com/2009/04/lokal.png" medium="image">
			<media:title type="html">lokal</media:title>
		</media:content>

		<media:content url="http://pebbie.files.wordpress.com/2009/04/lokal21.png" medium="image">
			<media:title type="html">lokal21</media:title>
		</media:content>

		<media:content url="http://pebbie.files.wordpress.com/2009/04/lokal31.png" medium="image">
			<media:title type="html">lokal31</media:title>
		</media:content>

		<media:content url="http://pebbie.files.wordpress.com/2009/04/lokal41.png" medium="image">
			<media:title type="html">lokal41</media:title>
		</media:content>

		<media:content url="http://pebbie.files.wordpress.com/2009/04/kenal2.png" medium="image">
			<media:title type="html">kenal2</media:title>
		</media:content>

		<media:content url="http://pebbie.files.wordpress.com/2009/04/sobek.png" medium="image">
			<media:title type="html">sobek</media:title>
		</media:content>
	</item>
		<item>
		<title>On Base64</title>
		<link>http://pebbie.wordpress.com/2009/03/31/on-base64/</link>
		<comments>http://pebbie.wordpress.com/2009/03/31/on-base64/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 16:47:00 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[delphi]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[base64]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=273</guid>
		<description><![CDATA[*duh, dah lama nggak update blog saking sibuknya (cari alesan)*
Beberapa waktu yang lalu ada permintaan untuk melakukan encoding/decoding ke format base64. karena waktu yang mendesak dan jumlah item requirement yang banyak maka alternatif pertama adalah mencari kode public domain di internet. ternyata tidak satupun yang bisa dipakai (pada saat yang sempit itu). hambatannya bermacam-macam, mulai [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=273&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>*duh, dah lama nggak update blog saking sibuknya (cari alesan)*</p>
<p>Beberapa waktu yang lalu ada permintaan untuk melakukan <em>encoding/decoding</em> ke format <a href="http://en.wikipedia.org/wiki/Base64">base64</a>. karena waktu yang mendesak dan jumlah <em>item requirement</em> yang banyak maka alternatif pertama adalah mencari kode <em>public domain</em> di internet. ternyata tidak satupun yang bisa dipakai (pada saat yang sempit itu). hambatannya bermacam-macam, mulai dari hasil <em>encoding</em> yang tidak sesuai, atau hasil <em>decoding</em> yang beda dengan acuan. setelah duduk sebentar sambil <em>melototin</em> lagi halaman wikipedia yang mendeskripsikan aturan pengkodean basis64 akhirnya langkah terakhir malah bikin sendiri fungsi yang sesuai dengan spek (teks dari/ke base64, <em>binary</em>(variabel bertipe ataupun <em>byte stream</em>) dari/ke base64).</p>
<p>bagi yang berminat menggunakan, dipersilakan menggunakan kode berikut sebebas-bebasnya (pubdom as no warranty for using).<br />
<span id="more-273"></span></p>
<pre name="code" class="delphi">
(*
 * auth : Peb Ruswono Aryan
 * desc : base64 encoding/decoding for delphi
 *)
type
  tbytearr = array of byte;

{
	encode64 : Pointer x Nat --&gt; string
	desc: encode binary data to base64 message
}
function encode64( const v: Pointer; vsize: cardinal ): string;
const
  lut64             = &#039;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&#039;;
var
  tribyte           : array[0..2] of byte;
  p                 : PByteArray;
  ci, i             : cardinal;

  function enc3byteto4char( len: integer ): string;
  begin
    result := lut64[1 + tribyte[0] shr 2];
    result := result + lut64[1 + ( ( tribyte[0] and $03 ) shl 4 ) + ( tribyte[1] shr 4 )];
    if len &gt; 1 then
      result := result + lut64[1 + ( tribyte[1] and $0F ) shl 2 + ( tribyte[2] shr 6 )]
    else
      result := result + &#039;=&#039;;
    if len &gt; 2 then
      result := result + lut64[1 + tribyte[2] and $3F]
    else
      result := result + &#039;=&#039;;
  end;
begin
  p := PByteArray( v );
  ci := 0;
  repeat
    i := 0;
    while i &lt; 3 do begin
      if ci &gt;= vsize then break;
      tribyte[i] := p[ci];
      inc( ci );
      inc( i );
    end;
    result := result + enc3byteto4char( i );
  until ci &gt;= vsize;
end;

{
	decode64 : String --&gt; DynamicArray of byte
	desc: decode base64message to binary data (array of byte)
}
function decode64( msg: string ): TbyteArr;
var
  pb                : array of byte;
  lm, pi            : integer;
  len               : integer;

  function decodechar( c: char; var code: byte ): boolean;
  begin
    result := true;
    case c of
      &#039;A&#039;..&#039;Z&#039;: code := ord( c ) - ord( &#039;A&#039; );
      &#039;a&#039;..&#039;z&#039;: code := ord( c ) - ord( &#039;a&#039; ) + 26;
      &#039;0&#039;..&#039;9&#039;: code := ord( c ) - ord( &#039;0&#039; ) + 52;
      &#039;+&#039;: code := 62;
      &#039;/&#039;: code := 63;
    else
      result := false;
    end;
  end;

  procedure decodeblock( blk: string );
  var
    t, i            : byte;
    w               : dword;
  begin
    w := 0;
    i := 0;
    while i &lt; 4 do begin
      if not decodechar( blk[i + 1], t ) then break;
      w := w shl 6 + t;
      inc( i );
    end;
    result[pi] := ( w shr 16 ) and $FF;
    inc( pi );
    if pi &gt;= len then exit;
    result[pi] := ( w shr 8 ) and $FF;
    inc( pi );
    if pi &gt;= len then exit;
    result[pi] := ( w and $FF );
    inc( pi );
  end;
begin
  len := length( msg ) * 3 div 4;
  lm := length( msg );
  if msg[lm] = &#039;=&#039; then dec( len );
  if msg[lm - 1] = &#039;=&#039; then dec( len );
  setlength( result, len );
  pi := 0;
  repeat
    decodeblock( copy( msg, 1, 4 ) );
    delete( msg, 1, 4 );
  until length( msg ) &lt;= 0;
end;

{
	encode64str : string --&gt; string
	desc: encode text string into base64 message
}
function encode64str( msg: string ): string;
var
  p                 : TByteArr;
  i                 : integer;
begin
  setlength( p, length( msg ) );
  for i := 0 to high( p ) do
    p[i] := ord( msg[i + 1] );
  result := encode64( @p[0], length( p ) );
end;

{
	decode64str : string --&gt; string
	desc: decode base64 message containing text
}
function decode64str( msg: string ): string;
var
  p                 : TByteArr;
  i                 : integer;
begin
  result := &#039;&#039;;
  p := decode64( msg );
  for i := 0 to length( p ) do
    result := result + chr( p[i] );
end;
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/273/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=273&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/03/31/on-base64/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>using libjpeg to read-write JPEG</title>
		<link>http://pebbie.wordpress.com/2009/02/10/using-libjpeg-to-read-write-jpeg/</link>
		<comments>http://pebbie.wordpress.com/2009/02/10/using-libjpeg-to-read-write-jpeg/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 03:23:22 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=269</guid>
		<description><![CDATA[Beberapa waktu lalu sempat iseng coba-coba menggunakan libjpeg dengan MinGW. Awalnya dari install msys lalu nyoba build libjpeg. setelah dicoba untuk utak-atik pengolahan citra ternyata lumayan cepat juga.


#include &#60;stdio.h&#62;
#include &#60;stdlib.h&#62;
#include &#60;setjmp.h&#62;
#include &#60;mem.h&#62;

#include &#60;jpeglib.h&#62;

fungsi baca-tulis dari libjpeg tidak mengembalikan data dalam bentuk bitmap. oleh sebab itu saya membuat sendiri struktur bitmap sederhana dan fungsi-fungsi minimal untuk [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=269&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Beberapa waktu lalu sempat iseng coba-coba menggunakan libjpeg dengan MinGW. Awalnya dari install msys lalu nyoba build libjpeg. setelah dicoba untuk utak-atik pengolahan citra ternyata lumayan cepat juga.<br />
<span id="more-269"></span></p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;setjmp.h&gt;
#include &lt;mem.h&gt;

#include &lt;jpeglib.h&gt;
</pre>
<p>fungsi baca-tulis dari libjpeg tidak mengembalikan data dalam bentuk bitmap. oleh sebab itu saya membuat sendiri struktur bitmap sederhana dan fungsi-fungsi minimal untuk itu.</p>
<pre name="code" class="c">

//tipe data untuk manipulasi bitmap
typedef unsigned char byte;
typedef struct st_RGBimage {
	int w, h;
	int stride;
	byte* data;
}bitmap;

bitmap* create_bitmap(int w, int h, int stride)
{
	bitmap* tmp = (bitmap*)malloc(sizeof(bitmap));
	tmp-&gt;w = w;
	tmp-&gt;h = h;
	tmp-&gt;stride = stride;
	tmp-&gt;data = (byte*)malloc(sizeof(byte)*stride*h);
	return tmp;
}

void free_bitmap(bitmap** bmp){
	free((*bmp)-&gt;data);
	free(bmp);
	*bmp = NULL;
}
</pre>
<p>mari mulai dengan membaca dan memuat citra jpeg ke struktur bitmap.</p>
<pre name="code" class="c">
//struktur dan fungsi sampingan
struct my_error_mgr{
	struct jpeg_error_mgr pub;
	jmp_buf setjmp_buffer;
};

void my_error_exit(j_common_ptr cinfo)
{

}

int load_jpeg(char * filename, bitmap** bmp)
{
	struct jpeg_decompress_struct cinfo;
	struct my_error_mgr jerr;
	FILE * infile;
	JSAMPARRAY buffer;
	int row_stride;
	int i;

	if ((infile = fopen(filename, &quot;rb&quot;)) == NULL) {
		fprintf(stderr, &quot;can&#039;t open %s\n&quot;, filename);
		return 0;
	}

	cinfo.err = jpeg_std_error(&amp;jerr.pub);
	jerr.pub.error_exit = my_error_exit;

	if (setjmp(jerr.setjmp_buffer)) {
		jpeg_destroy_decompress(&amp;cinfo);
		fclose(infile);
		return 0;
	}

	jpeg_create_decompress(&amp;cinfo);
	jpeg_stdio_src(&amp;cinfo, infile);
	jpeg_read_header(&amp;cinfo, TRUE);
	jpeg_start_decompress(&amp;cinfo);

	row_stride = cinfo.output_width * cinfo.output_components;
	(*bmp) = create_bitmap(cinfo.output_width, cinfo.output_height, row_stride);
	buffer = (*cinfo.mem-&gt;alloc_sarray)((j_common_ptr) &amp;cinfo, JPOOL_IMAGE, row_stride, 1);
	i = 0;
	while (cinfo.output_scanline &lt; cinfo.output_height) {
		jpeg_read_scanlines(&amp;cinfo, buffer, 1);
		memcpy((void*)((*bmp)-&gt;data+i), (void*)buffer[0], row_stride);
		i+= row_stride;
	}

	jpeg_finish_decompress(&amp;cinfo);
	jpeg_destroy_decompress(&amp;cinfo);
	fclose(infile);
	return 1;
}
</pre>
<p>setelah dibaca, fungsi selanjutnya adalah menyimpan dari struktur bitmap.</p>
<pre name="code" class="c">
void save_jpeg(char *filename, int quality, bitmap* bmp)
{
	struct jpeg_compress_struct cinfo;
	struct jpeg_error_mgr jerr;

	FILE * outfile;
	JSAMPROW row_pointer[1];
	int row_stride;

	cinfo.err = jpeg_std_error(&amp;jerr);
	jpeg_create_compress(&amp;cinfo);

	if ((outfile = fopen(filename, &quot;wb&quot;)) == NULL) {
		fprintf(stderr, &quot;can&#039;t open %s\n&quot;, filename);
		exit(1);
	}

	jpeg_stdio_dest(&amp;cinfo, outfile);
	cinfo.image_width = bmp-&gt;w;
	cinfo.image_height = bmp-&gt;h;
	cinfo.input_components = 3;
	cinfo.in_color_space = JCS_RGB;

	jpeg_set_defaults(&amp;cinfo);
	jpeg_set_quality(&amp;cinfo, quality, TRUE);
	jpeg_start_compress(&amp;cinfo, TRUE);

	row_stride = bmp-&gt;w * 3;
	while(cinfo.next_scanline &lt; cinfo.image_height){
		row_pointer[0] = &amp;bmp-&gt;data[cinfo.next_scanline * bmp-&gt;stride];
		jpeg_write_scanlines(&amp;cinfo, row_pointer, 1);
	}

	jpeg_finish_compress(&amp;cinfo);
	fclose(outfile);
	jpeg_destroy_compress(&amp;cinfo);
}
</pre>
<p>sekarang saya sudah bisa manipulasi sederhana dengan struktur bitmap.</p>
<pre name="code" class="c">

bitmap* rgb_binarize(bitmap* bmp24, int threshold)
{
	//bitmap* g = create_bitmap(bmp24-&gt;w, bmp24-&gt;h, bmp24-&gt;stride / 3);
	bitmap* g = create_bitmap(bmp24-&gt;w, bmp24-&gt;h, bmp24-&gt;stride);
	int i,j, tmp;
	for (j=0; j&lt;bmp24-&gt;h; ++j){
		for (i=0; i&lt;bmp24-&gt;w; ++i){
			tmp = (int)(0.299*bmp24-&gt;data[bmp24-&gt;stride*j+i*3]+0.587*bmp24-&gt;data[bmp24-&gt;stride*j+i*3+1]+0.114*bmp24-&gt;data[bmp24-&gt;stride*j+i*3+2]);
			tmp = (tmp&gt;threshold)?255:0;
			g-&gt;data[j*g-&gt;stride + i*3] = (byte)tmp;
			g-&gt;data[j*g-&gt;stride + i*3 + 1] = (byte)tmp;
			g-&gt;data[j*g-&gt;stride + i*3 + 2] = (byte)tmp;
		}
	}
	return g;
}

int main(int argc, char **argv){
	bitmap * bmp;
	bitmap * grey;
	if (argc&gt;1)
		load_jpeg(argv[1], &amp;bmp);
	else return 1;
	grey = rgb_binarize(bmp, 128);
	save_jpeg(&quot;grey.jpg&quot;, 90, grey);
	free_bitmap(&amp;bmp);
	free_bitmap(&amp;grey);
	return 0;
}
</pre>
<p>selamat mencoba! <img src='http://s.wordpress.com/wp-includes/images/smilies/face-wink.png' alt=';)' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/269/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=269&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/02/10/using-libjpeg-to-read-write-jpeg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>ITB kehilangan salah satu putra terbaiknya</title>
		<link>http://pebbie.wordpress.com/2009/02/09/itb-kehilangan-salah-satu-putra-terbaiknya/</link>
		<comments>http://pebbie.wordpress.com/2009/02/09/itb-kehilangan-salah-satu-putra-terbaiknya/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 12:54:38 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[ITB]]></category>
		<category><![CDATA[akademik]]></category>
		<category><![CDATA[distributed system]]></category>
		<category><![CDATA[multimedia system]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=267</guid>
		<description><![CDATA[Pagi ini merupakan senin kelabu bagi komunitas STEI ITB khususnya Informatika. Pagi ini saya mendapat sms yang mengabarkan hal ini dari Mas Arif dan Pak Iping. Jantung saya berdegup kencang sampai akhirnya bisa tenang dan jam 9.15 saya berangkat ke kampus yang ternyata tidak ada kuliah dan saya bersama mahasiswa S2 IF angkatan 2008 berangkat [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=267&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Pagi ini merupakan senin kelabu bagi komunitas STEI ITB khususnya Informatika. Pagi ini saya mendapat sms yang mengabarkan hal ini dari <a href="http://arifrahmat.wordpress.com">Mas Arif</a> dan Pak Iping. Jantung saya berdegup kencang sampai akhirnya bisa tenang dan jam 9.15 saya berangkat ke kampus yang ternyata tidak ada kuliah dan saya bersama mahasiswa S2 IF angkatan 2008 berangkat melayat menuju kediaman keluarganya di Arcamanik. Sampai di sana ternyata jenazah beliau sudah akan disholatkan. Akhirnya saya langsung mengikuti iringan mobil menuju masjid yang dimaksud yang kemudian langsung dimakamkan di Tempat Pemakaman Umum Nagrog di Ujung berung. Karena saya membawa sepeda motor, saya ingin mengantar (alm) Pak Farid di samping mobil ambulans yang membawanya menuju kediamannya yang terakhir. Sampai di sana saya pun segera mencari posisi di dekat makam agar saya bisa melihat beliau dikuburkan. Saya tak kuasa menahan air mata haru ketika Pak Prof. Adang Suwandi Ahmad memberikan sambutan. Masih tak percaya rasanya mendengar kabar duka ini. Padahal kamis yang lalu masih sempat berkomunikasi dengan beliau bersama Pak Iping ketika akan berangkat menuju Gedung CCAR untuk sosialisasi penelitian strategis nasional dari DIKTI.</p>
<p>Saya pribadi pertama kali berinteraksi dengan Pak Farid adalah ketika kuliah Jaringan Komputer. Ketika itu saya sangat menikmati gaya beliau mengajar walaupun saya sering datang terlambat sehingga tidak diijinkan masuk. sampai akhirnya ketika masa UTS tiba, saya sakit dan karena kehadiran yang kurang saya &#8216;divonis&#8217; mengulang mata kuliah tersebut. walaupun begitu saya masih menikmati kuliah pasca UAS karena masih ingin mempelajari materi kuliah. Interaksi berikutnya adalah ketika mengambil mata kuliah pilihan Sistem Multimedia di tahun ke 4 yang pertama kali dibuka waktu itu dan diajar oleh Beliau. Kuliah waktu itu merupakan kuliah yang sangat berkesan, karena waktu itu saya tergerak oleh nasihat beliau tentang cara dan pola berpikir yang kritis. Waktu itu saya sudah merasa cukup dengan pola pikir saya ketika itu, tetapi ternyata setelah mendengar nasihat dan cerita beliau saya merasa diingatkan bahwa saya masih perlu banyak belajar. Ketika itulah titik balik dari pribadi saya yang masih sering bermain-main menjadi lebih serius. Cerita lainnya adalah ketika kami mengikuti kegiatan riset dari ditjen postel depkominfo yang kala itu dua kali diadakan di Bogor. Walaupun kami tidak dalam tim riset yang sama, saya masih sempat &#8216;belajar&#8217; dari beliau dari bincang-bincang sembari menunggu acara mulai yang memang tertunda beberapa jam. Interaksi terakhir adalah di Semester 1 yang lalu ketika Beliau mengajar di Mata kuliah Sistem Berkinerja Tinggi (High Performance Computing) yang lagi-lagi baru dibuka (kelas pertama). Walaupun ketika itu para dosen khususnya Ketua KK Informatika sempat mengkhawatirkan beliau yang sedang masa pemulihan dari stroke karena tetap bersikeras mengajar. Inilah kuliah terakhir dari beliau yang paling berkesan, walau kadang-kadang kami sebagai anak-anaknya masih sering nakal seperti terlambat atau lupa mengerjakan tugas tapi suasana kelas masih tetap menyenangkan.</p>
<p>Walaupun hingga saat ini Program studi informatika belum mempunyai guru besar (professor emeritus), dan beliau pernah bercerita bahwa beliau berkeras untuk tidak mendapatkan gelar ini karena sikap tegas dalam menentang sistem keprofesoran di Indonesia. Beliau menyatakan bahwa beliau tidak mengurus gelar profesor karena alasan pribadi dan tidak mengurus syarat2 mendapatkan gelar sejak tahun 1991. Walaupun demikian rekan sejawatnya khususnya Elektro ITB angkatan 70 seperti Prof. Adang Suwandi Ahmad yang sekarang menjabat sebagai dekan STEI sudah menjadi guru besar sehingga dapat dipahami bahwa kalaupun beliau menginginkan untuk menjadi guru besar, pun saat ini beliau sudah mendapatkan gelar tersebut. Sebagai institut pendidikan yang pertama kali membuka program studi informatika di Indonesia, memang agak aneh kalau Informatika ITB sampai saat ini belum memiliki guru besar. Walaupun mungkin di universitas lain program serupa sudah memiliki lebih dari 3 atau bahkan alumni informatika itb sudah ada yang menjadi profesor baik di dalam maupun luar negri. Tampaknya memang, gelar guru besar bagi komunitas informatika itb memiliki makna tersendiri yang cukup dalam di hati murid-muridnya. Dr. Farid Wazdi adalah teladan, bahwa seorang guru besar tidak perlu sebuah gelar yang diakui negara. Seorang guru besar, telah mendapat gelar tersebut di setiap benak  murid-muridnya dan menurut saya seperti itulah makna sejati dari &#8216;guru besar&#8217;.</p>
<p>Selamat jalan Pak Farid, semoga Bapak dapat menghadap Sang Pencipta dalam keadaan damai dan keluarga yang ditinggalkan diberi ketabahan. Kami akan selalu mengingat cerita dan semangat Bapak dalam kehidupan kami di dunia informatika. </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=267&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/02/09/itb-kehilangan-salah-satu-putra-terbaiknya/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
		<item>
		<title>Do it yourself CCTV/Surveilance from scratch</title>
		<link>http://pebbie.wordpress.com/2009/01/18/do-it-yourself-cctvsurveilance-from-scratch/</link>
		<comments>http://pebbie.wordpress.com/2009/01/18/do-it-yourself-cctvsurveilance-from-scratch/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 17:47:53 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[delphi]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[cctv]]></category>
		<category><![CDATA[webcam]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=257</guid>
		<description><![CDATA[Terinspirasi dengan tulisan tentang memasang sendiri sistem cctv dengan zoneminder saya jadi iseng membuat sistem serupa (bukan memasang lagi, ini membuat). Awalnya memang tidak berniat untuk ke arah sana, hanya ingin melakukan interpretasi citra dengan memanfaatkan webcam, tapi kemudian terhambat karena framerate yang lambat ketika awal-awal mencoba.

Pendahuluan
Oke, mari dimulai percobaannya. Spesifikasi kita kali ini adalah [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=257&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">Terinspirasi dengan tulisan tentang <a href="http://ryosaeba.wordpress.com/2009/01/18/diy-cctv-dengan-zoneminder/">memasang sendiri sistem cctv dengan zoneminder</a> saya jadi iseng membuat sistem serupa (bukan memasang lagi, ini membuat). Awalnya memang tidak berniat untuk ke arah sana, hanya ingin melakukan interpretasi citra dengan memanfaatkan webcam, tapi kemudian terhambat karena <em>framerate</em> yang lambat ketika awal-awal mencoba.</p>
<p><span id="more-257"></span><br />
<strong>Pendahuluan</strong></p>
<p align="justify">Oke, mari dimulai percobaannya. Spesifikasi kita kali ini adalah membuat sistem cctv yang mengambil gambar dari webcam dan dapat diakses melalui web server (ujung yang cukup generik, bisa diperluas dengan membuat mobile client yang mengakses http <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':D' class='wp-smiley' /> ). Selain itu tiap gambar diarsipkan sehingga memungkinkan untuk pemrosesan yang tidak membutuhkan tenggat. Agar lebih sederhana, kita akan mendekomposisi sistem yang kita buat menjadi 3 modul : </p>
<ol>
<li>program pengakses webcam (GUI). </li>
<li>program perantara (CLI, bisa jadi opsional, nanti akan dijelaskan alasannya).</li>
<li>halaman web (HTML+PHP)</li>
</ol>
<p><strong>Alat dan Bahan</strong><br />
Berikutnya alat yang diperlukan : </p>
<ul>
<li>web server (saya menggunakan xampp 1.5). modul yang diperlukan sebetulnya hanya apache dan php. database tidak diperlukan saat ini untuk menyederhanakan program.</li>
<li>compiler delphi (anda bisa menggunakan apapun sebetulnya, tapi saya menggunakan delphi)</li>
<li><em>A win32 machine</em>. ya ya.. saya pakai API Windows tapi nggak pakai DirectX, cuma pakai VFW (Video for Windows). stok lama.</li>
<li>Webcam. USB atau apapun. sekali-lagi, demi kesederhanaan, saya hanya menggunakan 1 webcam (default) yang ada di laptop. <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':D' class='wp-smiley' /> </li>
</ul>
<p><strong>Arsitektur sistem</strong><br />
gambaran umum sistem bisa dilihat dalam gambar berikut.<br />
<img src="http://pebbie.files.wordpress.com/2009/01/cctv.png?w=410&#038;h=302" alt="arsitektur cctv (7KB)" title="arsitektur cctv" width="410" height="302" class="alignnone size-full wp-image-258" /><br />
Program 1,2, dan 3 sesuai dengan penjelasan di awal.</p>
<p><strong>Program 1</strong></p>
<p align="justify">Program ini dibuat menggunakan delphi dan terdiri dari 1 modul webcam dan 1 form. berikut ini kode untuk unit pengakses webcam (konstanta dan prosedur sudah di-dietkan supaya hanya mengandung yang diperlukan saja). </p>
<pre name="code" class="delphi">
unit _cam;

interface

uses
  Windows,
  Messages,
  Controls,
  ExtCtrls;

const
  WM_CAP_START      = WM_USER;
  WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
  WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
  WM_CAP_SAVEDIB    = WM_CAP_START + 25;
  WM_CAP_COPY       = WM_CAP_START + 30;
  WM_CAP_SET_SCALE  = WM_CAP_START + 53;
  WM_CAP_SET_PREVIEW = ( WM_CAP_START + 50 );
  WM_CAP_SET_OVERLAY = ( WM_CAP_START + 51 );
  WM_CAP_SET_PREVIEWRATE = ( WM_CAP_START + 52 );

type
  TCam = class
  protected
    hWndC: HWND;
    FIsCapturing: Boolean;
    procedure BeginCapture( Container: TWinControl );
    procedure EndCapture;
  public
  	constructor Create( Container: TWinControl );
    destructor Free;
  	property Handle:HWND read hwndc;
  	property Capturing:boolean read FIsCapturing;
    procedure CopyToClipboard;
    procedure SaveToFile( filename: string );
  end;

implementation

uses
  ClipBrd;

function capCreateCaptureWindowA( lpszWindowName: PCHAR;
  dwStyle: longint;
  x: integer;
  y: integer;
  nWidth: integer;
  nHeight: integer;
  ParentWin: HWND;
  nId: integer ): HWND; stdcall external
&#039;AVICAP32.DLL&#039;;

{ TCam }

procedure TCam.BeginCapture( Container: TWinControl );
begin
  hWndC := capCreateCaptureWindowA( &#039;Capture Window&#039;,
    WS_CHILD or WS_VISIBLE,
    Container.Left,
    Container.Top,
    Container.Width,
    Container.Height,
    Container.Handle,
    0 );
  if hWndC &lt;&gt; 0 then begin
    SendMessage( hWndC, WM_CAP_DRIVER_CONNECT, 0, 0 );
    SendMessage( hWndC, WM_CAP_SET_SCALE, 1, 0 );
    SendMessage( hWndC, WM_CAP_SET_PREVIEWRATE, 24, 0 );
    SendMessage( hWndC, WM_CAP_SET_PREVIEW, 1, 0 );
    FIsCapturing := True;
  end;
end;

procedure TCam.CopyToClipboard;
begin
	if hWndC &lt;&gt; 0 then begin
    SendMessage( hwndc, WM_CAP_COPY, 0, 0 );
  end;
end;

procedure TCam.EndCapture;
begin
	FIsCapturing := False;
	if hWndC &lt;&gt; 0 then begin
    SendMessage( hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0 );
    hWndC := 0;
  end;
end;

procedure TCam.SaveToFile( filename: string );
begin
  if hWndC &lt;&gt; 0 then begin
    SendMessage( hWndC,
      WM_CAP_SAVEDIB,
      0,
      longint( pchar( filename ) )
      );
  end;
end;

constructor TCam.Create(Container: TWinControl);
begin
	inherited Create;
	BeginCapture(Container);
end;

destructor TCam.Free;
begin
	EndCapture;
end;

end.
</pre>
<p>sedangkan kode untuk formnya adalah sebagai berikut. satu hal yang perlu diperhatikan. form berikut saya buat StayOnTop karena kalau di-minimize atau tersembunyi, gambarnya tidak akan di-<em>update</em>. Hal lainnya adalah pengaturan webcam agar bisa didapat framerate yang tinggi (di laptop saya setelah beberapa fitur dimatikan seperti low-light boost dan color boost baru bisa berjalan di 25 FPS).</p>
<pre name="code" class="vb">
//unit1.dfm
object Form1: TForm1
  Left = 192
  Top = 107
  BorderStyle = bsDialog
  Caption = &#039;Form1&#039;
  ClientHeight = 241
  ClientWidth = 321
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = &#039;MS Sans Serif&#039;
  Font.Style = []
  FormStyle = fsStayOnTop
  OldCreateOrder = False
  OnCloseQuery = FormCloseQuery
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Panel1: TPanel
    Left = 0
    Top = 0
    Width = 320
    Height = 240
    BevelOuter = bvNone
    Color = clBlack
    TabOrder = 0
  end
  object _proc: TTimer
    Enabled = False
    Interval = 48
    OnTimer = _procTimer
    Left = 56
    Top = 16
  end
end
</pre>
<p>dan <em>code-behind</em>-nya adalah sebagai berikut.</p>
<pre name="code" class="delphi">
unit Unit1;

interface
uses
  Windows,
  Messages,
  SysUtils,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  ExtCtrls,
  MPlayer,
  StdCtrls,
  citra,
  Spin,
  ClipBrd,
  _cam,
  jpeg,
  inifiles;

type
  TForm1 = class( TForm )
    Panel1: TPanel;
    _proc: TTimer;
    procedure FormCreate( Sender: TObject );
    procedure FormCloseQuery( Sender: TObject; var CanClose: Boolean );
    procedure _procTimer( Sender: TObject );
  private
    cam: TCam;
    bmp: TBitmap;
    jpg: TJpegImage;
    ini: TIniFile;
  public
  end;

var
  Form1             : TForm1;
  capmode           : integer;
  datapath          : string;

implementation
{$R *.DFM}

{ TForm1 }

procedure TForm1.FormCreate( Sender: TObject );
begin
  ini := TIniFile.Create( extractfilepath( application.ExeName ) + &#039;config.ini&#039; );
  capmode := ini.ReadInteger( &#039;server&#039;, &#039;mode&#039;, 0 );
  if capmode = 2 then begin
    datapath := ini.ReadString( &#039;server&#039;, &#039;datadir&#039;, &#039;data&#039; );
    if pos( &#039;:&#039;, datapath ) = 0 then datapath := extractfilepath( application.ExeName ) + datapath;
  end;
  jpg := TJpegImage.Create;
  jpg.CompressionQuality := ini.ReadInteger(&#039;server&#039;,&#039;jpegquality&#039;, 40);
  _proc.Interval := 1000 div ini.ReadInteger(&#039;server&#039;, &#039;fps&#039;, 5);
  bmp := TBitmap.Create;
  if not Assigned( cam ) then cam := TCam.Create( Panel1 );
  _proc.Enabled := cam.Capturing;
end;

procedure TForm1.FormCloseQuery( Sender: TObject; var CanClose: Boolean );
begin
  CanClose := False;
  _proc.Enabled := false;
  jpg.Free;
  bmp.Free;
  if Assigned( cam ) then cam.Free;
  CanClose := True;
end;

procedure TForm1._procTimer( Sender: TObject );
begin
  if cam.Capturing then begin
    if capmode &gt; 0 then begin
      cam.CopyToClipboard;
      if capmode = 2 then begin
        bmp.Assign( clipboard );
        jpg.Assign( bmp );
        jpg.SaveToFile( format( &#039;%s\%.12d.jpg&#039;, [datapath, gettickcount] ) );
      end;
    end;
  end;
end;

end.
</pre>
<p align="justify">Program di atas akan menyimpan hasil rekaman dari webcam ke dalam file dalam format JPEG yang kualitasnya dapat diparameterkan sehingga ukuran file keluarannya dapat juga diatur. Nama file rekaman menggunakan gettickcount yang dikodekan menjadi string sepanjang 12 digit. Penggunaan angkan dimaksudkan agar memudahkan dalam mencari file terakhir tanpa harus menggunakan database. Untuk sementara semua hasil rekaman dari webcam disimpan dalam satu direktori (datadir). Selanjutnya bisa menggunakan struktur direktori yang mencerminkan tanggal (YYYY\MM\DD\) untuk memudahkan pengarsipan.<br />
program di atas menggunakan file konfigurasi dengan nama config.ini yang lokasinya sama dengan lokasi executable.</p>
<pre name="code" class="c#">
[server]
#mode capture
#0:no save
#1:save to clipboard
#2:save to file (jpeg)
mode=2
datadir=data
jpegquality=40
fps=10
</pre>
<p>konfigurasi di atas akan membuat program webcam menyimpan 10 gambar tiap detik dengan kualitas kompresi sekitar 40 (untuk resolusi webcam 320&#215;240 membutuhkan sekitar 5KB). Dari hasil hitung-hitungan. kalau 1 detik 10 gambar dikali 5 KB jadi 50. satu jam perlu 180MB. satu hari perlu 4GB. sedangkan 1 tahun perlu ~1.5TB. angka-angka tersebut adalah gambaran kasar dengan asumsi tiap detik direkam (biarpun tidak ada perubahan). untuk analisis lebih lanjut (membuat gambar-gambar yang tidak berubah) bisa dilakukan dengan membuat program lain yang bekerja pada direktori tersebut ^_^. </p>
<p><strong>Web Interface</strong></p>
<p>Berikutnya adalah program nomor 3 yaitu halaman web yang terdiri dari dua file yaitu index.html dan getimg.php.</p>
<pre name="code" class="html">
&lt;html&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;refresh&quot; content=&quot;3&quot; /&gt;
	&lt;/head&gt;
	&lt;body&gt;
	&lt;img src=&quot;getimg.php&quot;/&gt;&lt;/body&gt;
&lt;/html&gt;
</pre>
<pre name="code" class="php">
&lt;?php
//file: getimg.php
$t = time().&#039;.txt&#039;;
$result = system(&#039;cctv &quot;C:\Program Files\Borland\Delphi7\Projects\cctv\data&quot; &gt; &#039;.$t);
if (file_exists($t)){
	$result = file_get_contents($t);
	$img = urldecode(str_replace(&#039;%0D%0A&#039;, &#039;&#039;, urlencode($result)));
	header(&#039;Content-type:image&#039;);
	echo file_get_contents($img);
	unlink($t);
}
?&gt;
</pre>
<p><strong>Perantara</strong></p>
<p align="justify">Yang terakhir adalah program perantara. Ada alasan khusus mengapa saya membuat program perantara dibanding menjadikannya langsung dalam skrip PHP yaitu yang pertama terpikir. hehehe.. persoalannya adalah mengambil file terakhir (timestamp terbesar) dalam direktori yang membutuhkan iterasi ke tiap file (silakan coba buat versi skrip php-nya dan bandingkan dengan versi pemanggilan command-line).</p>
<pre name="code" class="delphi">
program cctv;
{$APPTYPE CONSOLE}

uses
  SysUtils;

var
	tdir : string;

procedure pandu;
begin
  writeln( &#039;ERR: use cctv &lt;datadir&gt;&#039; );
end;

function getlastfile( dir: string ): string;
var
  sr                : TSearchRec;
  FileAttrs         : integer;
  tmp               : string;
  mask              : string;
  cur, last         : longint;
begin
  result := &#039;&#039;;
  last := -1;
  mask := &#039;*.*&#039;;
  FileAttrs := faAnyFile or faDirectory;
  if FindFirst( dir + &#039;\&#039; + mask, FileAttrs, sr ) = 0 then begin
    repeat
      if ( Pos( &#039;.&#039;, sr.Name ) &lt;&gt; 1 ) then begin
        tmp := dir + &#039;\&#039; + sr.Name;
        trystrtoint( changefileext( sr.Name, &#039;&#039; ), cur );
        if cur &gt; last then begin
          result := tmp;
          last := cur;
        end;
      end;
    until FindNext( sr ) &lt;&gt; 0;
    FindClose( sr );
  end;
end;

begin
  if ParamCount &lt; 1 then pandu;
  tdir := getlastfile( paramstr( 1 ) );
  if tdir &lt;&gt; &#039;&#039; then writeln( tdir );
end.
</pre>
<p><strong>Penutup</strong><br />
Akhirnya selesai juga. pesan terakhir dari saya, tidak ada skinsyut hasil program karena subjek yang dijadikan skrinsyutnya (saya) sudah kusut <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':D' class='wp-smiley' /> . silakan dicoba sendiri, kalau ada yang nggak berhasil silakan komentar di sini (belum tentu saya bantu juga sih <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':D' class='wp-smiley' /> ).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/257/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=257&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/01/18/do-it-yourself-cctvsurveilance-from-scratch/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>

		<media:content url="http://pebbie.files.wordpress.com/2009/01/cctv.png" medium="image">
			<media:title type="html">arsitektur cctv</media:title>
		</media:content>
	</item>
		<item>
		<title>Percobaan Transplantasi DLL</title>
		<link>http://pebbie.wordpress.com/2009/01/15/percobaan-transplantasi-dll/</link>
		<comments>http://pebbie.wordpress.com/2009/01/15/percobaan-transplantasi-dll/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 17:36:41 +0000</pubDate>
		<dc:creator>pebbie</dc:creator>
				<category><![CDATA[hacking]]></category>

		<guid isPermaLink="false">http://pebbie.wordpress.com/?p=253</guid>
		<description><![CDATA[Masih penasaran gara-gara gagal instalasi MS-MPI di laptop yang notabene pake XP Home Edition. Kalau lihat dari errornya sih cuma gara-gara nggak ada 1 fungsi di modul kernel32.dll yang bernama GetProcessIdOfThread. Berhubung di situs download HPC SDK tercatat bisa digunakan di XP Profesional jadinya penasaran untuk mengkanibal DLL dari XP Pro ke XP Home.

Ternyata di [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=253&subd=pebbie&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">Masih penasaran gara-gara <a href="http://geeks.netindonesia.net/blogs/pebbie/archive/2009/01/14/parallel-programming-mpich2-vs-ms-mpi.aspx">gagal instalasi MS-MPI</a> di laptop yang notabene pake XP Home Edition. Kalau lihat dari errornya sih cuma gara-gara nggak ada 1 fungsi di modul kernel32.dll yang bernama <font face="Courier New">GetProcessIdOfThread</font>. Berhubung di situs download <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=12887DA1-9410-4A59-B903-693116BFD30E&amp;displaylang=en">HPC SDK</a> tercatat bisa digunakan di XP Profesional jadinya penasaran untuk mengkanibal DLL dari XP Pro ke XP Home.</p>
<p><span id="more-253"></span></p>
<p align="justify">Ternyata di <font face="Courier New">Kernel32.dll</font> dari XP Pro juga nggak ada fungsi <font face="Courier New">GetProcessIdOfThread</font>.</p>
<blockquote><p>wah, microsoft bo&#8217;ong nih.. katanya bisa Microsoft Windows XP Professional Edition 32-bit&#8230;</p></blockquote>
<p align="justify">Masih belum puas, coba &#8216;pinjam&#8217; dari Vista, pinjem dari rekan kerja di kantor yang laptopnya pake vista. Eh, ga taunya nggak cukup sama <font face="Courier New">kernel32.dll</font> . kernel32 ternyata bergantung ke <font face="Courier New">ntdll.dll</font> yang beda sama di xp home. ya sudah jadinya coba salin sekalian. Berhubung <font face="Courier New">kernel32.dll</font> lagi dipakai sama program lain, jadinya file <font face="Courier New">kernel32.dll</font> yang ada di <font face="Courier New">C:\Windows\System32</font> nggak bisa dihapus.. paling juga di-<em>rename</em> trus bikin <font face="Courier New">kernel32.dll</font> yang baru hasil transplantasi dari Vista. Cara ini pun masih belum berhasil, pasalnya Windows punya mekanisme recovery yang otomatis mengganti file sistem miliknya dengan cadangannya. Nggak mau kalah, dicari sumber cadangannya lah.. yang akhirnya ketemu.. versi <font face="Courier New">kernel32.dll</font> terakhir yang dipake ada di direktori servicepack setelah ada beberapa versi dari Windows Update.</p>
<p align="justify">Haha.. beres, ternyata betul.. kalau isi direktori cadangan itu diubah maka nggak ada cadangan yang lain. langkah selanjutnya .. restart windows untuk melihat efeknya.</p>
<p>..<br />
..<br />
&#8230;.</p>
<p align="justify">CELAKA!!! Windows-nya nggak mau masuk ke layar biru, cuma sampai gambar windows sama progress bar.. udah gitu restart lagi-restart lagi otomatis. Biarpun dicoba di-<em>disable</em> pake <em>Safe Mode with Command Prompt</em> pun sama.. mungkin karena biarpun <em>command prompt</em>, tetep load modul <font face="Courier New">ntdll.dll</font> sama <font face="Courier New">kernel32.dll</font>.</p>
<p align="justify">waduh, lupa bikin restore point sebelumnya. walaupun kalo dipikir-pikir tiap update baru kan bikin restore point tapi tetep aja nggak bisa masuk ke windows. Langsung bongkar-bongkar koleksi CD nyari CD Instalasi Windows XP yang ternyata nggak ketemu. Akhirnya kembali ke kantor untuk ambil DVD Instalasi dari MSDN yang ada isinya XP Home Edition SP2 dan bikin Recovery CD di desktop.</p>
<p align="justify">Setelah berhasil masuk command prompt, kondisi saat ini file <font face="Courier New">kernel32.dll</font> nggak ada, naah.. coba pakai <font face="Courier New">kernel32.dll</font> sama <font face="Courier New">ntdll.dll</font> dari vista dan berujung gagal lagi. <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':D' class='wp-smiley' />  yasudah deh, karena sudah malam (main-mainnya udahan) langsung dikembalikan pakai file dll aslinya dan sekarang sudah bisa lagi posting blog pakai laptop. <img src='http://s.wordpress.com/wp-includes/images/smilies/face-smile-big.png' alt=':D' class='wp-smiley' /> </p>
<p>fiuh.. malam yang menegangkan.. <img src='http://s.wordpress.com/wp-includes/images/smilies/face-raspberry.png' alt=':P' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pebbie.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pebbie.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pebbie.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pebbie.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pebbie.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pebbie.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pebbie.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pebbie.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pebbie.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pebbie.wordpress.com/253/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pebbie.wordpress.com&blog=944265&post=253&subd=pebbie&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://pebbie.wordpress.com/2009/01/15/percobaan-transplantasi-dll/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0bf1c3f23d84daac10f463f6f0172802?s=96&#38;d=wavatar&#38;r=X" medium="image">
			<media:title type="html">pebbie</media:title>
		</media:content>
	</item>
	</channel>
</rss>