<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-26918278</atom:id><lastBuildDate>Wed, 23 Jun 2010 08:50:57 +0000</lastBuildDate><title>a geeky blogger</title><description>yet another blog about computer, technology, programming, and internet</description><link>http://www.geekyblogger.com/</link><managingEditor>noreply@blogger.com (Ismail Habib)</managingEditor><generator>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AProgrammersThought" /><feedburner:info uri="aprogrammersthought" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>AProgrammersThought</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-3668819558823960710</guid><pubDate>Sat, 19 Jun 2010 14:18:00 +0000</pubDate><atom:updated>2010-06-19T16:18:13.613+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">GAE</category><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Pairing Google App Engine with Other(s)</title><description>&lt;a href="http://1.bp.blogspot.com/_GXn7fIpTaPs/TBzI260wmtI/AAAAAAAABrU/g2G3wyPGDr0/s1600/appengine_lowres.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_GXn7fIpTaPs/TBzI260wmtI/AAAAAAAABrU/g2G3wyPGDr0/s1600/appengine_lowres.gif" /&gt;&lt;/a&gt;I discovered &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine (GAE)&lt;/a&gt; just a couple months ago and immediately attached to it. The idea of having a web application platform which is easy to use (no sys-admin thingy, just concentrate on developing), scalable, and free (up to a certain limit). Without even realizing (okay, I'm exaggerating), I ended up with a project where I paired up GAE with another server. Well, not necessary a server, but any kind of machine that provides something extra to GAE. At first I wasn't so sure that this is a good idea, however, in the end I was convinced that this is the best solution that I can come up with.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. GAE's power vs GAE's limitation&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
With great power comes great responsibility. With cool features come some restrictions. It's a trade-off, ying and yang. I'm a Java programmer so I care mainly about the Java version of GAE. In GAE, not all Java features is available. Things like creating thread and writing to file system are not allowed in GAE. GAE also doesn't have persistent running process and every task should be finished in 30 seconds or less. Despite that, you might still want the GAE power. Why not using both?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Scalability is not entirely necessary, but still needed in some part&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
As I mentioned in the first paragraph. Scalability is one of GAE virtue. We can have a part of our application which requires high scalability to be deployed on GAE. Another part of the application that could not be necessarily scalable may reside on the other server. I could imagine this setting where GAE serves as an interface to outside the system and/or as a storage while the other server responsible to do things that GAE specifically couldn't do due to its restrictions.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. It will be pure GAE in the future&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
For one or more reason, we can't have a pure GAE solution. It might be because the application is migrated from other technology and require some more time to be ported, or that the current GAE is not yet capable, but will be in the future (see &lt;a href="http://code.google.com/appengine/docs/roadmap.html"&gt;GAE road map&lt;/a&gt;). It might be a good decision to start doing things in GAE if we believe that the future is on GAE, thus investing some resources now instead of doing it later (which will cost more without a doubt).&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-3668819558823960710?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=CTtsA-5EWt4:QZCbGb3U_Sw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=CTtsA-5EWt4:QZCbGb3U_Sw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=CTtsA-5EWt4:QZCbGb3U_Sw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=CTtsA-5EWt4:QZCbGb3U_Sw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=CTtsA-5EWt4:QZCbGb3U_Sw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/CTtsA-5EWt4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/CTtsA-5EWt4/pairing-google-app-engine-with-others.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_GXn7fIpTaPs/TBzI260wmtI/AAAAAAAABrU/g2G3wyPGDr0/s72-c/appengine_lowres.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2010/06/pairing-google-app-engine-with-others.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-5268778906775633120</guid><pubDate>Sun, 30 May 2010 08:41:00 +0000</pubDate><atom:updated>2010-05-30T11:26:49.194+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Article</category><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Bagaimana Saya Menjelaskan REST kepada Istri (How I Explained REST to My Wife)</title><description>For the first time since this blog is created. I'm writing a post in two languages. I was impressed with an explanation from Ryan Tomayko which is based on his conversation with his non-techy wife about REST. You can read the original version &lt;a href="http://tomayko.com/writings/rest-to-my-wife"&gt;here&lt;/a&gt;. Some people may think that the article is somewhat sexist. However, I do believe that he didn't do it on purpose ;) The rest of this post will be in Bahasa Indonesia.&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
Artikel di bawah ini adalah terjemahan dari &lt;a href="http://tomayko.com/writings/rest-to-my-wife"&gt;artikel yang ditulis oleh Ryan Tomayko&lt;/a&gt;. Beberapa bagian tulisan di bawah ini mungkin tidak/kurang/belum akurat, namun akan saya coba untuk memperbaharuinya setiap kali saya menemukan kekurangan. Semoga bermanfaat.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Siapa itu Roy Fielding?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Orang yang cerdas.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Oh, memangnya apa yang dia lakukan?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Dia &lt;a href="http://1997.webhistory.org/www.lists/www-talk.1994q2/1072.html"&gt;membantu menulis (mengkode) web server pertama&lt;/a&gt; dan &lt;a href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/top.htm"&gt;melakukan banyak research&lt;/a&gt; untuk menjelaskan kenapa web bekerja seperti itu. &lt;a href="http://www.blogger.com/"&gt;Namanya ada di spesifikasi&lt;/a&gt; untuk protokol yang digunakan untuk menerima halaman web dari server ke browser.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Bagaimana cara kerjanya?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Maksudnya, web?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Yup.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Hmm. Semua itu sangat mengagumkan. Lucunya, orang tidak terlalu menghargai ini. Protokol yang sedang kubicarakan ini, HTTP, mampu melakukan banyak hal berguna yang diacuhkan orang dengan alasan-alasan tertentu.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Maksudnya HTTP seperti yang ada di awal teks yang aku ketik di browser?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Ya. Itu menunjukkan browser tentang protokol apa yang digunakan. Yang kamu ketik itu adalah satu dari sekian terobosan penting dalam sejarah komputer.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Kok bisa?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Karena itu mampu mendeskripsikan lokasi dari suatu hal dimanapun di dunia ini. Itu adalah fondasi dari web. Kamu bisa bayangkan itu seperti koordinat GPS untuk pengetahuan dan informasi.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Untuk halaman web?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Tidak hanya untuk halaman web. Orang itu, Roy Fielding, dia banyak bercerita tentang apa yang ditunjukkan oleh HTTP dalam riset yang aku sebutkan tadi. Web dibangun dengan arsitektur "REST". REST memberikan definisi dari "resource" dimana "resource" ini ditunjuk oleh HTTP.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Halaman web itu sebuah resource?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Kira-kira begitulah. Sebuah halaman web adalah representasi dari sebuah resource. Resource itu sendiri adalah sebuah konsep. URL-itulah yang diketikkan ke browser...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Aku tahu apa itu URL.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Oh. URL dapat memberi tahu browser bahwa ada sebuah konsep di suatu tempat. Browser kemudian dapat menanyakan representasi spesifik dari konsep tersebut. Lebih spesifik lagi, browser tersebut bertanya tentang representasi halaman web dari konsep yang ada.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Apa ada jenis lain dari representasi?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Sebetulnya, representasi adalah salah satu hal yang kurang termanfaatkan. Dalam banyak kasus, sebuah resource hanya memiliki satu representasi. Tapi kami berharap bahwa representasi akan digunakan lebih banyak di masa depan karena akan ada banyak format baru bermunculan.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Seperti apa?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Hmm. Ada konsep yang disebut orang sebagai "Web Services". Itu bisa berarti macam-macam tapi konsep dasarnya ialah bahwa mesin juga dapat menggunakan web seperti manusia.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Maksudnya seperti robot begitu?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Tidak, bukan begitu. Bukan maksudku bahwa robot akan duduk di kursi dan kemudian browsing halaman web. Tapi komputer dapat menggunakan protokol yang sama untuk mengirim message antar sesamanya. Kami sudah melakukan itu untuk waktu yang lama tapi tidak ada teknik yang dapat digunakan untuk berbicara dengan mesin di seluruh dunia pada saat ini.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Kenapa tidak?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Karena mereka tidak didesain seperti itu. Ketika Fielding dan teman-temannya mulai membangun web, kemampuan untuk berkomunikasi antar mesin di seluruh dunia adalah perhatian utama mereka. Kebanyakan dari teknik yang digunakan untuk membuat komputer berkomunikasi dengan sesamanya tidak memiliki kebutuhan seperti itu. Kebanyakan hanya perlu untuk berkomunikasi dengan grup kecil saja.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Dan sekarang kamu perlu untuk berkomunikasi dengan semua mesin?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Ya - bahkan lebih. Kami perlu untuk dapat berkomunikasi dengan semua mesin tentang semua hal yang ada di mesin-mesin tersebut. Jadi kamu membutuhkan sebuah cara untuk memungkinkan mesin berbagi informasi tentang resource yang mungkin belum ada pada mesin lain.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Apa?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Misalkan kamu ngobrol dengan adikmu dan dia mau meminjam sapu atau apapun. Tapi kamu tidak punya - Ibumu yang punya. Jadi kamu bilang ke adikmu untuk meminjam dari Ibumu. Ini terjadi sepanjang waktu di dunia nyata dan ini juga akan terjadi ketika mesin mulai berkomunikasi satu sama lain.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Jadi bagaimana mesin memberitahu satu sama lain tentang lokasi hal-hal tersebut?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: URL, pastinya. Kalau semua yang dibutuhkan mesin memiliki URL, berarti kamu sudah menciptakan sebuah equivalen dari kata benda. Kesepakatan antara kamu, aku, dan seisi dunia tentang kata benda dalam suatu cara pastinya penting kan?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Ya.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Mesin tidak punya kata benda yang universal - makanya mereka payah. Setiap bahasa pemrograman, database, atau sistem lain punya cara yang berbeda-beda dalam mengkomunikasikan benda. Itulah kenapa URL itu sangat penting. URL memungkinkan semua sistem ini berkomunikasi tentang benda masing-masing.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Tapi ketika aku melihat halaman web, aku nggak berpikir seperti itu.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Orang lain juga tidak. Kecuali Fielding dan sedikit orang lain. Itulah kenapa mesin masih payah.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Bagaimana dengan kata kerja, kata ganti, dan kata sifat?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Lucu juga kamu tanya itu karena itu adalah hal penting lain dari REST. Eng, setidaknya kata kerja lah.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Aku cuma bercanda.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Itu lucu, tapi sebenarnya bukan joke sama sekali. Kata kerja itu penting. Ada konsep yang sangat kuat dalam pemrograman yang siebut sebagai "polymorphism" dalam Computer Science. Itu adalah cara kami mengatakan bahwa benda yang berbeda bisa memiliki kata kerja yang sama yang dikenakan pada mereka.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Aku tak mengerti.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Wel... Kita lihat meja kopi. Kata benda apa saja yang ada? Gelas, baki, koran, remote. Sekarang, apa saja yang bisa kamu lakukan terhadap benda-benda itu?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Aku tak mengerti.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Kamu bisa &lt;i&gt;mengambil&lt;/i&gt; mereka, kan? Kamu bisa mengangkat mereka. Kamu bisa menjatuhkan mereka. Kamu bisa membakar mereka. Kamu bisa menggunakan kata kerja yang sama untuk objek manapun yang ada di sana.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Oke... jadi?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Nah, itu yang penting. Bagaimana jika kita tidak bisa mengatakan, "ambil gelas", atau "ambil koran", atau "ambil remote"; Bagaimana jika untuk itu kita harus menggunakan kata kerja yang berbeda untuk setiap kata benda? Kita tidak bisa menggunakan kata "ambil" secara unversal, tapi harus menggunakan kata baru untuk setiap kombinasi kata kerja/kata benda.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Wow! Itu aneh.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Ya, itu aneh. Otak kita cukup cerdas untuk mengetahui bahwa kata kerja yang sama dapat digunakan untuk benda-benda yang berbeda. Sebagian kata kerja memang lebih spesifik dan hanya bisa digunakan pada kata benda tertentu. Misalnya, aku tidak bisa "mengendarai gelas" atau "minum mobil". Tapi sebagian kata kerja sangat universal seperti ambil (GET), taruh (PUT), dan hapus (DELETE).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Kamu tidak bisa menghapus gelas.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Oke, tapi kamu bisa membuang gelas. Tapi itu cuma joke kan?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Yeah.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Jadi, HTTP -protokol yang dibuat Fielding dan teman-temannya ini- adalah tentang penggunaan kata kerja ke kata benda. Contohnya, ketika kamu mengunjungi sebuah halaman web, browser akan menggunakan HTTP GET ke URL yang kamu ketikkan dan halaman web akan kamu peroleh.&lt;br /&gt;
&lt;br /&gt;
Halaman web biasanya mengandung gambar kan? Gambar adalah resource yang berbeda. Halaman web hanya menyebutkan URL ke gambar dan browser akan memanggil HTTP GET ke semua URL gambar tersebut hingga semua resource yang dibutuhkan untuk menampilkan halaman web itu diperoleh. Tapi yang penting disini ialah bahwa hal-hal yang berbeda dapat diperlakukan dengan cara yang sama. Apakah kata benda itu adalah gambar, teks, video, mp3, slideshow, atau apapun. Aku bisa melakukan instruksi GET untuk semua hal tersebut selama mereka memiliki URL.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Sepertinya GET itu kata kerja yang penting.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Memang. Terutama bila kamu menggunakan browser karena browser biasanya hanya digunakan untuk mengambil sesuatu. Browser tidak terlalu banyak berinteraksi dengan resource. Ini jadi masalah karena orang jadi berpikir bahwa HTTP itu hanya untuk mengambil sesuatu. Padahal sebenarnya HTTP itu adalah protokol umum untuk mengaplikasikan kata kerja pada kata benda.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Keren. Tapi aku tidak paham kenapa ini bisa mengubah apapun. Kata benda dan kata kerja apa saja yang kamu mau?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Kata benda sudah ada tapi tidak dalam format yang benar.&lt;br /&gt;
&lt;br /&gt;
Coba bayangkan ketika kamu sedang browsing di amazon.com untuk mencari hadiah natal. Bayangkan setiap produk adalah kata benda. Sekarang, ketika mereka tersedia dalam bentuk yang dapat dimengerti mesin, kamu bisa melakukan banyak hal yang menarik.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Mengapa mesin tidak bisa mengeri halaman web biasa?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Karena halaman web didesain untuk dimengerti oleh manusia. Mesin tidak peduli terhadap layout dan style. Mesin hanya butuh data. Idealnya, setiap URL punya representasi yang dapat dimenerti manusia dan representasi yang dapat dimengerti mesin. Ketika sebuah mesin melakukan GET terhadap resource, maka dia akan meminta representasi yang dapat dimengerti mesin. Ketika sebuah browser melakukan GET terhadap resource atas permintaan manusia, maka yang diperoleh adalah representasi yang dapat dimengerti oleh manusia.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Jadi semua orang harus membuat format yang dapat dimengerti oleh mesin ke semua halaman web mereka?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Kalau itu memang bermanfaat.&lt;br /&gt;
&lt;br /&gt;
Kita sudah banyak ngobrol dengan abstraksi. Bagaimana kalau ita ambil contoh yang nyata. Kamu adalah seorang guru -di sekolah aku yakin kamu punya sistem komputer yang besar, atau tiga atau empat komputer, yang memungkinkanmu untuk mengelola murid: di kelas mana mereka berada, berapa nilai mereka, kontak darurat, informasi mengenai buku yang kamu ajarkan, dan laib sebagainya. Jika sistem ini web-based, maka kemungkinan ada URL untuk setiap benda yang terlibat disini: murid, guru, kelas, buku, ruangan, dll. Saat ini, memasukkan URL lewat browser akan memberikanmu sebuah ahalaman web. Jika ada representasi yang dapat dimengerti oleh mesin untuk setiap URL, maka mudah saja untuk menelurkan sebuah aplikasi ke dalam sistem karena semua infomasi tersebut dapat dikonsumsi dengan cara yang standar. Itu juga akan memungkinan semua sistem untuk berkomunikasi satu sama lain dengan mudah. Atau, kamu bisa membuat sistem untuk propinsi atau negara yang bisa berkomunikasi dengan masing-masing sekolah untuk mengumpulkan nilai ujian. Kemungkinan yang ada bisa tanpa batas.&lt;br /&gt;
&lt;br /&gt;
Setiap sistem akan memperoleh informasi dari yang lain dengan menggunakan instruksi HTTP GET yang sederhana. Jika sebuah sistem perlu menambahkan sesuatu ke sistem lain, maka dia akan menggunakan HTTP POST. Jika sebuah sistem ingin memutakhirkan sesuatu ke sistem lain, dia akan menggunakan HTTP PUT. Satu-satunya yang perlu didiskusikan adalah dalam bentuk apa data itu seharusnya.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Jadi ini yang kamu dan semua orang komputer lakukan sekarang? Mendiskusikan bagaimana data itu seharusnya?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Sedihnya, tidak. Malah kebanyakan sibuk menulis spesifikasi kopleks untuk melakukan hal ini dengan cara yang berbeda dan tidak terlalu bermanfaat. Benda tidak universal dan kata kerja tidak polimorphic. Kita membuang puluhan tahun pengalaman dari penggunaan di dunia nyata dan teknik yang telah terbukti dan memulai kembali dengan sesuatu yang kelihatannya sangat mirip dengan sistem lain yang telah gagal di masa lalu. Kami menggunakan HTTP tapi hanya karena itu membantu kita untuk menghindari pembicaraan dengan administrator jaringan. Kami mengorbankan kemudahan dengan aplikasi yang terlihat keren dan aplikasi wizard.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Kenapa?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Aku tidak tahu.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Istri&lt;/b&gt;: Kenapa kamu tidak bilang apa-apa?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ryan&lt;/b&gt;: Mungkin nanti.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-5268778906775633120?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=xs7vkF5V3zI:FYjjywNm428:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=xs7vkF5V3zI:FYjjywNm428:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=xs7vkF5V3zI:FYjjywNm428:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=xs7vkF5V3zI:FYjjywNm428:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=xs7vkF5V3zI:FYjjywNm428:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/xs7vkF5V3zI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/xs7vkF5V3zI/bagaimana-saya-menjelaskan-rest-kepada.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>1</thr:total><feedburner:origLink>http://www.geekyblogger.com/2010/05/bagaimana-saya-menjelaskan-rest-kepada.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-599722266116105436</guid><pubDate>Fri, 21 May 2010 18:47:00 +0000</pubDate><atom:updated>2010-05-21T20:48:15.098+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Game</category><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Pacman on google.com</title><description>30th anniversary of the legendary game: Pacman. Play it on &lt;a href="http://google.com/"&gt;google.com&lt;/a&gt; now! ;)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GXn7fIpTaPs/S_bU_gIp8iI/AAAAAAAABqQ/8xgiUO2lQZw/s1600/30+years+pacman.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://4.bp.blogspot.com/_GXn7fIpTaPs/S_bU_gIp8iI/AAAAAAAABqQ/8xgiUO2lQZw/s400/30+years+pacman.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-599722266116105436?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=4peItTQIvtk:djIZD4Qddk8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=4peItTQIvtk:djIZD4Qddk8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=4peItTQIvtk:djIZD4Qddk8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=4peItTQIvtk:djIZD4Qddk8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=4peItTQIvtk:djIZD4Qddk8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/4peItTQIvtk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/4peItTQIvtk/pacman-on-googlecom.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_GXn7fIpTaPs/S_bU_gIp8iI/AAAAAAAABqQ/8xgiUO2lQZw/s72-c/30+years+pacman.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2010/05/pacman-on-googlecom.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-971029042263600311</guid><pubDate>Fri, 23 Apr 2010 08:31:00 +0000</pubDate><atom:updated>2010-04-23T10:31:36.953+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">GWT</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Drawing Circle on Google Maps using GWT</title><description>I was a bit surprised to realize that Google Maps API does not provide us with a circle overlay. Oh well, I believe they will do that someday. As for now, we just have to be satisfied with what we have.&lt;br /&gt;
&lt;br /&gt;
We can do this in two ways. Drawing circle is easy. By using an image of circle and&amp;nbsp;stretch&amp;nbsp;it to the right size, or by using Polygon Overlay and approximate a circle. The most difficult thing is we have to be able to do transformation of points to latitude/longitude coordinate. No need to reinvent the wheel, somebody else have pointed out how to do this kind of things. Check out these two links:&lt;br /&gt;
&lt;a href="http://seewah.blogspot.com/2009/10/circle-overlay-on-google-map.html"&gt;Drawing circle on Google Maps with an image&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://markmail.org/message/u2gu6ajnsu75c3kj#query:+page:1+mid:h724b66m3n7k773h+state:results"&gt;Drawing circle on Google Maps&amp;nbsp;with an approximation (using Polygon)&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
However, these two codes are written for JavaScript. I'm using the knowledge provided by both to rewrite it for GWT. I'm using the approximation method, but it should be easy for you if you want to use image instead of Polygon.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public void drawCircleFromRadius(LatLng center, double radius,
   int nbOfPoints) {

 LatLngBounds bounds = LatLngBounds.newInstance();
 LatLng[] circlePoints = new LatLng[nbOfPoints];

 double EARTH_RADIUS = 6371000;
 double d = radius / EARTH_RADIUS;
 double lat1 = Math.toRadians(center.getLatitude());
 double lng1 = Math.toRadians(center.getLongitude());

 double a = 0;
 double step = 360.0 / (double) nbOfPoints;
 for (int i = 0; i &amp;lt; nbOfPoints; i++) {
  double tc = Math.toRadians(a);
  double lat2 = Math.asin(Math.sin(lat1) * Math.cos(d) + Math.cos(lat1)
    * Math.sin(d) * Math.cos(tc));
  double lng2 = lng1
    + Math.atan2(Math.sin(tc) * Math.sin(d) * Math.cos(lat1),
     Math.cos(d) - Math.sin(lat1) * Math.sin(lat2));
  LatLng point = LatLng.newInstance(Math.toDegrees(lat2), Math
   .toDegrees(lng2));
  circlePoints[i] = point;
  bounds.extend(point);
  a += step;
 }

 Polygon circle = new Polygon(circlePoints, "white", 0, 0, "green", 0.5);

 map.addOverlay(circle);
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-971029042263600311?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=umcxhSS8_Ec:di6MWvfkDMg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=umcxhSS8_Ec:di6MWvfkDMg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=umcxhSS8_Ec:di6MWvfkDMg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=umcxhSS8_Ec:di6MWvfkDMg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=umcxhSS8_Ec:di6MWvfkDMg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/umcxhSS8_Ec" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/umcxhSS8_Ec/drawing-circle-on-google-maps-using-gwt.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>2</thr:total><feedburner:origLink>http://www.geekyblogger.com/2010/04/drawing-circle-on-google-maps-using-gwt.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-5052480271317508493</guid><pubDate>Tue, 23 Mar 2010 12:43:00 +0000</pubDate><atom:updated>2010-03-23T13:43:16.891+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Troubleshooting</category><title>Forcing a Screen Setting in Windows 7</title><description>I was trying to install a new screen on my laptop when I realized that it was not as easy as I expected. This screen was huge (compared to my laptop's screen) with a very high resolution (1920x1080) setting suggested. However, with 1920x1080, the only refresh rate available is only 29Hz and 30Hz, which would make my screen looks very flickeringly sharp (I don't even know if it is a word). Updating the driver of my VGA card and the screen doesn't help at all.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GXn7fIpTaPs/S6i1Oppt6HI/AAAAAAAABoY/7UDL0fI_tM4/s1600-h/screen+adjust.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GXn7fIpTaPs/S6i1Oppt6HI/AAAAAAAABoY/7UDL0fI_tM4/s320/screen+adjust.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The fix was surprisingly easy and funny though. I went to the Screen Resolution adjustment, clicked on the "advanced" link. Open the "Monitor" tab, and unchecked "hide modes that this monitor cannot display". The available modes then changed, and I picked 60Hz as the refresh rate. Things went went from that moment on.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Moral of this story: sometimes you are allowed to force your Windows to do something, especially when it underestimating your expensive hardware :P&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-5052480271317508493?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=31VZXRczkUc:NxfPsMQaiws:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=31VZXRczkUc:NxfPsMQaiws:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=31VZXRczkUc:NxfPsMQaiws:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=31VZXRczkUc:NxfPsMQaiws:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=31VZXRczkUc:NxfPsMQaiws:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/31VZXRczkUc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/31VZXRczkUc/forcing-screen-setting-in-windows-7.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_GXn7fIpTaPs/S6i1Oppt6HI/AAAAAAAABoY/7UDL0fI_tM4/s72-c/screen+adjust.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2010/03/forcing-screen-setting-in-windows-7.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-7590061341648194187</guid><pubDate>Tue, 24 Nov 2009 14:18:00 +0000</pubDate><atom:updated>2009-11-25T07:24:11.830+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Troubleshooting</category><title>Changing Screen Resolution in Ubuntu under VirtualBox</title><description>This problem has caused me a relatively severe headache today. I'm doing a project which require me to use a Linux OS. Since I don't have Linux in my office PC, I decided to install one (Ubuntu 9.10) in a VirtualBox instead of creating a double booting configuration. The installation procedure was easy and painless, but then the problem is coming. The installed Ubuntu does not have any option to increase the screen resolution other than 800x600 and 640x480.&lt;br /&gt;
&lt;br /&gt;
I tried to install the suitable driver with no result except destroying my X Window which forces me to reinstall the Ubuntu again (thank God I use virtual machine...). Then I started looking around for a solution and several forums and websites point me to this:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Choose &lt;i&gt;Devices &lt;/i&gt;-&amp;gt; &lt;i&gt;Install Guest Additions&lt;/i&gt;... on the VirtualBox menu&lt;/li&gt;
&lt;li&gt;It will mount a CD which will appear on the Desktop&lt;/li&gt;
&lt;li&gt;Go to your terminal (&lt;i&gt;Applications &lt;/i&gt;-&amp;gt; &lt;i&gt;Accessories &lt;/i&gt;-&amp;gt; &lt;i&gt;Terminal&lt;/i&gt;)&lt;/li&gt;
&lt;li&gt;Go to the CD directory by typing "&lt;i&gt;cd /media/cdrom0&lt;/i&gt;" (without the quotes)&lt;/li&gt;
&lt;li&gt;Type "&lt;i&gt;sudo sh ./VBoxLinuxAdditions-x86.run&lt;/i&gt;", again, without the quotes. At the first try I couldn't find this file instead just a directory "OS2". If you experience the same thing, this is probably because you set your VirtualBox OS type as "Ubuntu" instead of "Linux 2.6". In this case, shut down your VirtualBox, change the OS type and redo the whole stuffs from the beginning&lt;/li&gt;
&lt;li&gt;Restart your VirtualBox&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Now, this has successfully gave me another resolution, which is 1024x768. Not bad, but I'm rather greedy and I want something more! (Hey, my PC could do better!). Continue with this:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Go to the terminal again&lt;/li&gt;
&lt;li&gt;Edit the xorg.conf by typing "&lt;i&gt;sudo gedit /etc/X11/xorg.conf&lt;/i&gt;" (yes, no quotes)&lt;/li&gt;
&lt;li&gt;If you can find some already existing screen resolution, then you can add more, otherwise you can include something like this:&lt;/li&gt;
&lt;/ul&gt;&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #f2f5f6; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(221, 221, 221); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; border-right-color: rgb(221, 221, 221); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(221, 221, 221); border-top-style: solid; border-top-width: 1px; border-width: initial; overflow-x: auto; overflow-y: visible; padding-bottom: 1px; padding-left: 1px; padding-right: 1px; padding-top: 1px;"&gt;Section "Screen"
        Identifier "Screen0"
        Device     "Videocard0"
        DefaultDepth     24
        Subsection "Display"
                Viewport   0 0
                Depth     24
                &lt;b style="background-attachment: initial; background-clip: initial; background-color: #dddddd; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-size: 1em;"&gt;Modes     "1280x1024" "1024×768"&lt;/b&gt;
        EndSubSection
EndSection&lt;/pre&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Be really careful when you're doing this. It is always nice to make a backup beforehand&lt;/li&gt;
&lt;li&gt;Restart your VirtualBox and enjoy the new screen resolution&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Reference:&lt;br /&gt;
1.&amp;nbsp;&lt;a href="http://www.mikesouthby.co.uk/2009/11/virtualboxubuntu-9-10-changing-screen-resolution/"&gt;http://www.mikesouthby.co.uk/2009/11/virtualboxubuntu-9-10-changing-screen-resolution/&lt;/a&gt;&lt;br /&gt;
2.&amp;nbsp;&lt;a href="http://www.mjmwired.net/linux/2009/09/15/default-xorg-resolution/"&gt;http://www.mjmwired.net/linux/2009/09/15/default-xorg-resolution/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-7590061341648194187?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=u2DcsR3C9kU:84zULFVdN8s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=u2DcsR3C9kU:84zULFVdN8s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=u2DcsR3C9kU:84zULFVdN8s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=u2DcsR3C9kU:84zULFVdN8s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=u2DcsR3C9kU:84zULFVdN8s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/u2DcsR3C9kU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/u2DcsR3C9kU/change-screen-resolution-in-ubuntu.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>3</thr:total><feedburner:origLink>http://www.geekyblogger.com/2009/11/change-screen-resolution-in-ubuntu.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-5964129176236308194</guid><pubDate>Sat, 14 Nov 2009 10:10:00 +0000</pubDate><atom:updated>2009-11-14T11:13:04.691+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial</category><category domain="http://www.blogger.com/atom/ns#">Drawing</category><title>Improving a Scanned Hand-Drawing</title><description>I did a lot of digital drawing and painting as a hobby. One of the most common problem I faced is the lack of quality of the scanned lines from the scanned drawing. Thus, an improvement on the scanned drawing is required before doing anything else. Before we start, I should warn you that this is the way that I found works, doesn't mean that there is not other way to do it. I'm using Photoshop and Corel Draw to do this, but I suppose any other application with similar features should work fine.&lt;br /&gt;
&lt;br /&gt;
I prefer to trace a scanned hand-drawing before doing anything else. Tracing is nice because with tracing I can have an output in form of vector. Thus, further improvement could be made easily. However, tracing a scanned hand-drawing often caused many detail loss. Increasing trace resolution wouldn't help since the output will not posses simple, clear, and solid lines.&lt;br /&gt;
&lt;br /&gt;
To overcome this situation, I propose to do a preprocessing for the scanned hand-drawing. I'm using a self hand-drawing with a manga-ish style. Forgive the quality, I'm only an amateur :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_GXn7fIpTaPs/Sql4xBJJcVI/AAAAAAAABeU/gKJ-t4mt6T0/s1600-h/scannan-grayscale.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5379964013386494290" src="http://1.bp.blogspot.com/_GXn7fIpTaPs/Sql4xBJJcVI/AAAAAAAABeU/gKJ-t4mt6T0/s400/scannan-grayscale.jpg" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 265px;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Once you scan your hand-drawing, we need to adjust the color intensity. I'm using "Level" feature of Photoshop and adjust accordingly.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/_GXn7fIpTaPs/Sql4xqQWbWI/AAAAAAAABec/IfNS9T7sedk/s1600-h/scannan-grayscale-levelled.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5379964024422559074" src="http://4.bp.blogspot.com/_GXn7fIpTaPs/Sql4xqQWbWI/AAAAAAAABec/IfNS9T7sedk/s400/scannan-grayscale-levelled.jpg" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 265px;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The next step is to apply a filter called "Photocopy" from Photoshop. I choose this because it will make the lines bolder and flatten (is this even the correct word?) the color.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_GXn7fIpTaPs/Sql4x6uyYEI/AAAAAAAABek/PEWXoUrvfNM/s1600-h/scannan-grayscale-levelled-photocopy.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5379964028845187138" src="http://1.bp.blogspot.com/_GXn7fIpTaPs/Sql4x6uyYEI/AAAAAAAABek/PEWXoUrvfNM/s400/scannan-grayscale-levelled-photocopy.jpg" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 265px;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The resulting image is good enough for tracing. I import the image and do the tracing with Corel Draw.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/_GXn7fIpTaPs/Sql4ydJFUtI/AAAAAAAABes/7m54agvZENU/s1600-h/scannan-grayscale-levelled-photocopy-traced.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5379964038082286290" src="http://2.bp.blogspot.com/_GXn7fIpTaPs/Sql4ydJFUtI/AAAAAAAABes/7m54agvZENU/s400/scannan-grayscale-levelled-photocopy-traced.jpg" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 265px;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The result is clean and artistic. You can always make further&amp;nbsp;adjustment&amp;nbsp;easily since it is in form of vector.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-5964129176236308194?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=1xBAkZAvq5o:FCyphAhhDfs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=1xBAkZAvq5o:FCyphAhhDfs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=1xBAkZAvq5o:FCyphAhhDfs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=1xBAkZAvq5o:FCyphAhhDfs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=1xBAkZAvq5o:FCyphAhhDfs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/1xBAkZAvq5o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/1xBAkZAvq5o/improving-scanned-hand-drawing.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_GXn7fIpTaPs/Sql4xBJJcVI/AAAAAAAABeU/gKJ-t4mt6T0/s72-c/scannan-grayscale.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2009/11/improving-scanned-hand-drawing.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-8518829380541154203</guid><pubDate>Thu, 25 Dec 2008 09:47:00 +0000</pubDate><atom:updated>2008-12-25T10:53:58.773+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Game</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Game of Imagination</title><description>It has been a while since I wrote my last post and losing my internet connection (followed by losing the enthusiasm of writing). Anyway, here I am trying to write something again and it's going to be something fun, yups: it is about a game, to be precise: games.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://walkofcredo.blogspot.com/2008/12/crayon-physics-deluxe.html"&gt;A friend of mine&lt;/a&gt; posted this video about a game called: &lt;a href="http://www.crayonphysics.com/"&gt;Crayon Physics Deluxe&lt;/a&gt;. I took a peek on it, and fell in love at the first sight. Crayon Physics Deluxe is a puzzle game where we have to solve a problem (mostly to guide a ball to a star) using physics rules, kind of remind me of the old-nice &lt;a href="http://en.wikipedia.org/wiki/The_Incredible_Machine"&gt;Incredible Machine&lt;/a&gt; which I played a long time ago. However, the difference (and the most interesting part) is that Crayon Physics Deluxe allows the user to create objects freely using a "pen" and transforms them into world objects which automatically follow the physics rule. Take a look at this cool video on their website:&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 15px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-000556167588975276 visible ontop" href="http://vimeo.com/moogaloop.swf?clip_id=1849263&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;/a&gt;&lt;object width="400" height="321"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1849263&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=1849263&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="321"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/1849263"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It looks like a very nice game, but I'm not a type of guy who's willing to buy something just because it looks nice :) I tried to get more information and trial version of the game which eventually leads me into an another game called &lt;a href="http://www.zanydoodle.com/"&gt;Zany Doodle&lt;/a&gt;, which luckily offers a trial version of the game. I tried the game and enjoyed it very much even though I only use a normal mouse instead of a touchscreen (which I believe will increase the game experience heavily). Moreover, I found out that the Crayon Physics Deluxe is actually originated from the free game Crayon Physics which is developed by the same person. However, the free Crayon Physics is nowhere as good as its paid counterpart, not even better than the free trial of Zany Doodle since it cannot create objects like a triangle or just a random line.&lt;br /&gt;&lt;br /&gt;Should I say anything more? Just download the Crayon Physics &lt;a href="http://rapidshare.com/files/176606080/crayon.zip"&gt;here&lt;/a&gt; and the free trial of Zany Doodle &lt;a href="http://www.zanydoodle.com/download.php"&gt;here&lt;/a&gt;. Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-8518829380541154203?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=Ys0qjCtzdys:X5XQhVeHVSE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=Ys0qjCtzdys:X5XQhVeHVSE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=Ys0qjCtzdys:X5XQhVeHVSE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=Ys0qjCtzdys:X5XQhVeHVSE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=Ys0qjCtzdys:X5XQhVeHVSE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/Ys0qjCtzdys" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/Ys0qjCtzdys/game-of-imagination.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>13</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/12/game-of-imagination.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-7139422515753661595</guid><pubDate>Thu, 17 Jul 2008 12:59:00 +0000</pubDate><atom:updated>2008-07-17T15:16:19.352+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Scour - A Social Search Engine</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GXn7fIpTaPs/SH9DbzRcKWI/AAAAAAAAA2U/NVugnxWKqFc/s1600-h/logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_GXn7fIpTaPs/SH9DbzRcKWI/AAAAAAAAA2U/NVugnxWKqFc/s400/logo.gif" alt="" id="BLOGGER_PHOTO_ID_5223968237671950690" border="0" /&gt;&lt;/a&gt;&lt;a style="font-weight: bold;" href="http://www.scour.com/" onclick="parent.location.href='http://scour.com/invite/habsq';return event.returnValue=false"&gt;Scour&lt;/a&gt; (currently in beta) is another web 2.0 hype tagged as "&lt;span style="font-style: italic;"&gt;social search engine&lt;/span&gt;" intended to give user more authority to determine results from searching process. Scour aggregates result from Google, Yahoo, and MSN and combine them with the votes from users to decide the order of the results. Besides voting, Scour also allows users to leave comments for every search results. Sounds like another Digg? Another worth mentioning feature from Scour is the reward system. Users will get a certain number of points for every search or another contribution they make (voting, commenting, inviting friends). After several thousand of points, users are able to convert them into a visa gift card. While this pay-per-search idea is nothing new, I wonder if the social part of Scour will able to keep them surviving in the next few years given the fact that they will probably have to compete with Google (&lt;a href="http://www.techcrunch.com/2008/07/14/google-bucket-testing-new-digg-like-search-interface/"&gt;Google is developing their search engine with a similar idea to Scour&lt;/a&gt;, I bet without the reward system).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GXn7fIpTaPs/SH9GDxRE5kI/AAAAAAAAA2k/-KiaPy_c0Zo/s1600-h/cap.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_GXn7fIpTaPs/SH9GDxRE5kI/AAAAAAAAA2k/-KiaPy_c0Zo/s400/cap.JPG" alt="" id="BLOGGER_PHOTO_ID_5223971123351578178" border="0" /&gt;&lt;/a&gt;I have tried Scour for around three days now, and I'm sure they want to improve on several things (it's a beta anyway). Currently the results are limited to 3 pages no matter what keyword I use to do the searching. The search results are also lack of highlighting (updated: not anymore!). They have also included a browser-integrated search bar, which is good for me since I want to try it without having to change the way I use Google. However, every time I click on a search result a frame appeared in the bottom of the page which allowed the users to give vote or comment on the result (this frame didn't appear when I tried to open the search result on a new tab instead of clicking it). This might be a good way to encourage users to participate in the voting/commenting activities, but I found it a little bit annoying. Hopefully they will find a better way to do it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-7139422515753661595?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=u8fh6DNovJ0:FT_Qy_FYYi8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=u8fh6DNovJ0:FT_Qy_FYYi8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=u8fh6DNovJ0:FT_Qy_FYYi8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=u8fh6DNovJ0:FT_Qy_FYYi8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=u8fh6DNovJ0:FT_Qy_FYYi8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/u8fh6DNovJ0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/u8fh6DNovJ0/scour-social-search-engine.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_GXn7fIpTaPs/SH9DbzRcKWI/AAAAAAAAA2U/NVugnxWKqFc/s72-c/logo.gif" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/07/scour-social-search-engine.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-305492904128004631</guid><pubDate>Mon, 14 Jul 2008 11:44:00 +0000</pubDate><atom:updated>2008-07-14T13:46:31.498+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Life Hack</category><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Family Tree Builder</title><description>1. I have a big family which keeps on expanding&lt;br /&gt;2. I live far away from most of them&lt;br /&gt;3. I have terrible memory (being old and things like that... you know)&lt;br /&gt;&lt;br /&gt;Those are my top three arguments why I sometime (or often) forget about things related to my family. Some examples: the date of my parent's marriage, my brother in law's birthday, or even the name of my one year old cousin. Now I'd like to say goodbye for all those fake arguments by introducing a geeky way to keep all family-related information in a sophisticated way: Family Tree Builder.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GXn7fIpTaPs/SHs8VYI5b0I/AAAAAAAAA0k/DOB6a1jkT7g/s1600-h/cap.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_GXn7fIpTaPs/SHs8VYI5b0I/AAAAAAAAA0k/DOB6a1jkT7g/s400/cap.JPG" alt="" id="BLOGGER_PHOTO_ID_5222834530820910914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Family Tree Builder is a genealogy software (for Windows only) which can be downloaded for free at &lt;a href="http://www.myheritage.com/family-tree-builder"&gt;http://www.myheritage.com/family-tree-builder&lt;/a&gt;. I like this software a lot, especially since it offers some nice features such as: integration with &lt;a href="http://www.myheritage.com"&gt;myheritage.com&lt;/a&gt; (allows me to share and let others review the information on the web, though without capability of multi-user editing), photograph for every family member (and events), event reminder (birthday, marriage, etc), and also possibility to input unsure information for date (i.e. birthday around January 1982).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-305492904128004631?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=JhmXEy9nut4:2p6N1kOGKmc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=JhmXEy9nut4:2p6N1kOGKmc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=JhmXEy9nut4:2p6N1kOGKmc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=JhmXEy9nut4:2p6N1kOGKmc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=JhmXEy9nut4:2p6N1kOGKmc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/JhmXEy9nut4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/JhmXEy9nut4/family-tree-builder.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_GXn7fIpTaPs/SHs8VYI5b0I/AAAAAAAAA0k/DOB6a1jkT7g/s72-c/cap.JPG" height="72" width="72" /><thr:total>19</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/07/family-tree-builder.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-4603609832407666633</guid><pubDate>Fri, 04 Jul 2008 19:35:00 +0000</pubDate><atom:updated>2008-07-04T21:35:59.684+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blog</category><title>Blogger Wish List</title><description>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Amanda celebrates &lt;a href='http://www.bloggerbuster.com'&gt;Blogger Buster&lt;/a&gt;'s birthday by arranging &lt;a href='http://www.bloggerbuster.com/2008/06/competition-win-ultimate-blogging.html'&gt;a nice competition&lt;/a&gt; to suggest some new features for &lt;a href='www.blogger.com'&gt;Blogger&lt;/a&gt;. As a Blogger user myself, I couldn't careless about it, especially since it comes with a really nice incentive ;) Okay, so here are my thoughts about new features that should be implemented:&lt;br/&gt;&lt;br/&gt;&lt;b&gt;1. Give option to show only snippet of posts with "read more" button&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;...or using the Blogger term: "Show excerpts of my posts, with links to the full text". This is the most important feature that I think should be implemented ASAP by the Blogger team (other than in-post comment, which already introduced in Blogger Beta). This feature will allow me to show more posts in the front page and let the reader to pick the one he/she interested in instead having to scroll all the way to the bottom page and check for previous posts.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;2. More variety of widgets&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;I realize that some really useful widgets are missing in the Blogger, especially "Top Commentators" and "Top Posts". Top Commentators should display the most active commenters in the whole blog along with a link to their blog (as an incentive for supporting the blog by actively commenting it). Top Posts could be based on number of comments, traffics, or (even better) by popularity of the post decided by several criterias such as comments, traffics, number of links, digg, technorati, etc. Another widgets that I could think of are "Recent Posts" and "Recent Comments" (It is possible but with limit of 5 entries only). Emm... am I asking too much here? :D&lt;br/&gt;&lt;br/&gt;&lt;b&gt;3. Possibility to create additional pages&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;I would love to have a special page for author, links, and archives. Yes, it is possible by applying some sort of hacks but still I prefer to have it as a explicit feature.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;4. Shows "possible related posts" by category or content&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;One of the best way to keep the reader stay in our blog after finished reading a post is by offering them to read another related articles. It is very nice if related posts are shown in relation with the content but related posts by category is also good enough for me.&lt;br/&gt;&lt;br/&gt;You can also suggest a new feature directly to the Blogger team &lt;a href='http://help.blogger.com/?page=wishlist'&gt;here&lt;/a&gt;. I'm waiting for the good news! ;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-4603609832407666633?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=z73p4o7A0Is:SIhuKRJA6FM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=z73p4o7A0Is:SIhuKRJA6FM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=z73p4o7A0Is:SIhuKRJA6FM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=z73p4o7A0Is:SIhuKRJA6FM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=z73p4o7A0Is:SIhuKRJA6FM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/z73p4o7A0Is" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/z73p4o7A0Is/blogger-wish-list.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>3</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/07/blogger-wish-list.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-3285024767795813037</guid><pubDate>Tue, 01 Jul 2008 17:46:00 +0000</pubDate><atom:updated>2008-07-01T20:09:47.910+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AI</category><category domain="http://www.blogger.com/atom/ns#">Article</category><title>The Limit of Artificial Intelligence (AI)</title><description>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I always crazy about sci-fi futuristic movies. Humanoid robots, machines vs men (with the help of Arnold) wars, or robots taking over the whole earth and keeping men as batteries. Simply love them. Most of those movies introduced the existence of highly-intelligent machines. Sometimes they are shown as having a human-level intelligent, in other case they are even better. Well now the question is: is it even possible? To what extent the development of so called Artificial Intelligence (AI) will be?&lt;br/&gt;&lt;br/&gt;Back in 1960 something, experts predicted that in 20 years machine would be capable of doing everything human capable of, which is often called as "Strong AI". With respect for those AI experts, we are now in 2008 and it's not even close. Strong AI is proven to be much more difficult and complicated to achieve. This misprediction has caused AI experts being addressed as a “liar”, and consequently being forced to changes the direction of AI research from “Strong AI” into a more short-term, specific domain of problem, which is called "Applied AI" or "Weak AI". However, the dream of “human level AI” will never cease, and debate about it is always interesting to follow.&lt;br/&gt; &lt;br/&gt;There has been a great discussion about whether human level AI is likely to be achieved by a mere symbol processing like what most weak AI commonly use. By applying a huge collection of formal rules and in addition, scaling up processing capabilities and storage capacity, and there we are. This opinion is greatly opposed by some experts. As current system lacks of something that is called “understanding”, “minds”, “conscience”, or other things which is related to mental states.  The argument based on the idea that there is something more than just behavior to call a machine have an intelligent comparable to human. For example, let say that a machine capable of translating English to French. Even if the machine did it correctly, it is arguably incorrect to say that the machine actually “understand” English (or French).&lt;br/&gt;&lt;br/&gt;But who need minds anyway? Intelligent is all about behavior, and it alone is enough. To see it from a different perspective, I (and my ignorance) have a trouble to imagine what “minds” and “conscience” are. Are they just some terms used to express something unexplainable? Or perhaps it just simply does not exists from the very beginning?&lt;br/&gt;&lt;br/&gt;I have a nice discussion with one of my friend about this matter, and his view is somewhat different from what I expect, but nevertheless very fascinating to be followed. His first thought is that, even if human are capable of doing it, creating a machine with human level intelligent is unnecessary. Life is difficult enough, why would you like to increase the competition among human by introducing some humanoids? Other thing he expressed is that there is no way human will be able to do such a thing. An inventor would not be able to invent anything equal or beyond itself, as human is not God.&lt;br/&gt;&lt;br/&gt;p.s: I am not an AI researcher nor expert in this field. Just someone who has an interest in it.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-3285024767795813037?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=vixJxHP9JeE:5FzqTJHcDjY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=vixJxHP9JeE:5FzqTJHcDjY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=vixJxHP9JeE:5FzqTJHcDjY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=vixJxHP9JeE:5FzqTJHcDjY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=vixJxHP9JeE:5FzqTJHcDjY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/vixJxHP9JeE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/vixJxHP9JeE/limit-of-artificial-intelligence-ai.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>2</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/07/limit-of-artificial-intelligence-ai.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-5869849311355887708</guid><pubDate>Sun, 29 Jun 2008 09:45:00 +0000</pubDate><atom:updated>2008-06-29T13:17:56.829+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Internet Time Machine</title><description>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;div align='left'&gt;Remember my post about &lt;a href='http://www.geekyblogger.com/2008/06/google-and-yahoo-from-old-time.html'&gt;Google and Yahoo From The Old Time&lt;/a&gt;? You didn't think that I made those screen capture from lo&lt;img height='72' width='204' style='float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;' src='http://www.archive.org/images/wayback.gif'/&gt;ng time ago, did you? Well, in fact I didn't. Going back in time is surely not possible, at least not for now. Luckily, a website called &lt;a href='http://www.archive.org/web/web.php'&gt;Internet Archive WayBack Machine&lt;/a&gt; allows us to blast to the past and surfing through the Internet in the past. The idea is simple, it crawls web pages and puts them into archive. Obviously, it's not possible to archive every single web site running out there, but their attempt is quite incredible. Up until now, they claimed to have around 85 billion web pages archived from 1996.&lt;br/&gt;&lt;br/&gt;You could access the WayBack Machine directly from the website or use the button for browser by drag-and-drop this link: &lt;a href='javascript:location.href=&amp;apos;http://web.archive.org/web/*/&amp;apos;+document.location.href;' title='WayBack'&gt;Wayback&lt;/a&gt; to your browser toolbar. Enjoy the past.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-5869849311355887708?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=QyghYzUTlio:XICkH093aQo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=QyghYzUTlio:XICkH093aQo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=QyghYzUTlio:XICkH093aQo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=QyghYzUTlio:XICkH093aQo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=QyghYzUTlio:XICkH093aQo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/QyghYzUTlio" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/QyghYzUTlio/internet-time-machine.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/internet-time-machine.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-6949723955687786315</guid><pubDate>Sat, 28 Jun 2008 13:23:00 +0000</pubDate><atom:updated>2008-06-30T10:22:43.250+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Misc</category><title>New Blog Name and Domain</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Today is quite a day for me and my blog. I decided to change my blog name from &lt;span style="font-weight: bold;"&gt;a programmer's thought&lt;/span&gt; into &lt;span style="font-weight: bold;"&gt;a computer geek's blog&lt;/span&gt;. The reason is because the old name is not so relevant with the content of my blog. Thus, instead of focusing in programming-related post, I can freely put anything as long as it has something to do with computer *wink*.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_GXn7fIpTaPs/SGZYO4pwGjI/AAAAAAAAAxM/FPNEi9_56Ak/s1600-h/geekblog.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216954231104215602" alt="" src="http://4.bp.blogspot.com/_GXn7fIpTaPs/SGZYO4pwGjI/AAAAAAAAAxM/FPNEi9_56Ak/s400/geekblog.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" border="0" /&gt;&lt;/a&gt;The domain is also changed. I used to use a subdomain from blogger &lt;a style="font-weight: bold;" href="http://habsq.blogspot.com/"&gt;habsq.blogspot.com&lt;/a&gt;, but then a friend of mine (yes, even a computer geek has friends) told me that it is better to use a domain of my own. Finding the right name for my blog is quite painful experience. Most of the name I thought has already been registered, especially because I prefer to have a .com or .net extension which sounds much cooler than those with .us or .info for example ;) Ultimately I decided to use the name &lt;a style="font-weight: bold;" class="linkification-ext" href="http://www.geekyblogger.com/" title="Linkification: http://www.geekyblogger.com"&gt;www.geekyblogger.com&lt;/a&gt; which doesn't sound too bad, don't you think so? I used &lt;a href="http://www.namecheap.com/"&gt;NameCheap&lt;/a&gt; to register and it's quite cheap since I used a promotion code “ROSEMONTH” (thanks to Qiqinofa). So, please be nice to me and update your bookmark will you?&lt;br /&gt;&lt;br /&gt;I will keep my hosting in blogger until I decide that I really need my own hosting for this blog. For now, enjoy my blog!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-6949723955687786315?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=23IAy1-14n8:z-l-YAds9zc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=23IAy1-14n8:z-l-YAds9zc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=23IAy1-14n8:z-l-YAds9zc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=23IAy1-14n8:z-l-YAds9zc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=23IAy1-14n8:z-l-YAds9zc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/23IAy1-14n8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/23IAy1-14n8/new-blog-name-and-domain.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_GXn7fIpTaPs/SGZYO4pwGjI/AAAAAAAAAxM/FPNEi9_56Ak/s72-c/geekblog.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/new-blog-name-and-domain.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-3451213902879382440</guid><pubDate>Tue, 24 Jun 2008 19:38:00 +0000</pubDate><atom:updated>2009-01-18T10:52:54.492+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial</category><category domain="http://www.blogger.com/atom/ns#">Programming</category><category domain="http://www.blogger.com/atom/ns#">Life Hack</category><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Modifying Google Translation Button to Open Translation in New Tab/Window</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;The &lt;a href="http://www.geekyblogger.com/2008/05/creating-one-click-web-page-translation.html"&gt;translation button from Google&lt;/a&gt; has proved to be very useful in most situation (by me), especially since the &lt;a href="http://www.geekyblogger.com/2008/05/google-translation-now-with-language.html"&gt;language detection was introduced&lt;/a&gt;. However, I feel that there is something lacking. The problem is that the translation generated replaces the current active window/tab while sometimes I prefer to have another window/tab open. The translation button itself is a JavaScript, so we can play with is just a little bit. Here is the original code for translation button (I use the code for translation into English):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;javascript:&lt;br /&gt;var t = ((window.getSelection&amp;amp;&amp;amp;window.getSelection()) || (document.getSelection&amp;amp;&amp;amp;document.getSelection()) || (document.selection&amp;amp;&amp;amp;document.selection.createRange &amp;amp;&amp;amp; document.selection.createRange().text));&lt;br /&gt;var e = (document.charset || document.characterSet);&lt;br /&gt;if (t!='') {location.href='http://translate.google.com/translate_t?text=' + t + '&amp;amp;hl = en&amp;amp;langpair=auto|en&amp;amp;tbb=1&amp;amp;ie=' + e;} else {location.href='http://translate.google.com/translate?u=' + escape(location.href) + '&amp;amp;hl = en&amp;amp;langpair=auto|en&amp;amp;tbb=1&amp;amp;ie=' + e;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;In order to make the translation to be opened in a new window/tab, we just have to make a bit change in it:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;javascript:&lt;br /&gt;var t = ((window.getSelection&amp;amp;&amp;amp;window.getSelection()) || (document.getSelection&amp;amp;&amp;amp;document.getSelection()) || (document.selection&amp;amp;&amp;amp;document.selection.createRange &amp;amp;&amp;amp; document.selection.createRange().text));&lt;br /&gt;var e = (document.charset||document.characterSet);&lt;br /&gt;if (t!='') {var myWindow=window.open('http://translate.google.com/translate_t?text=' + t + '&amp;amp;hl=en&amp;amp;langpair=auto|en&amp;amp;tbb=1&amp;amp;ie='+e,'Translation','')} else&lt;br /&gt;{var myWindow=window.open('http://translate.google.com/translate?u=' + escape(location.href) + '&amp;amp;hl=en&amp;amp;langpair=auto|en&amp;amp;tbb=1&amp;amp;ie=' + e,'Translation','')};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;If you hate this kind of stuff, just drag and drop the link below to your browser toolbar:&lt;br /&gt;&lt;a href="javascript:var%20t=((window.getSelection&amp;amp;&amp;amp;window.getSelection())||(document.getSelection&amp;amp;&amp;amp;document.getSelection())||(document.selection&amp;amp;&amp;amp;document.selection.createRange&amp;amp;&amp;amp;document.selection.createRange().text));%20var%20e=(document.charset||document.characterSet);if(t!=&amp;amp;apos;&amp;amp;apos;){var%20myWindow=window.open(&amp;amp;apos;http://translate.google.com/translate_t?text=&amp;amp;apos;+t+&amp;amp;apos;&amp;amp;hl=en&amp;amp;langpair=auto|en&amp;amp;tbb=1&amp;amp;ie=&amp;amp;apos;+e,&amp;amp;apos;Translation&amp;amp;apos;,&amp;amp;apos;&amp;amp;apos;)}%20else%20{var%20myWindow=window.open(&amp;amp;apos;http://translate.google.com/translate?u=&amp;amp;apos;+escape(location.href)+&amp;amp;apos;&amp;amp;hl=en&amp;amp;langpair=auto|en&amp;amp;tbb=1&amp;amp;ie=&amp;amp;apos;+e,&amp;amp;apos;Translation&amp;amp;apos;,&amp;amp;apos;&amp;amp;apos;)};"&gt;Translate to English&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope this is useful. Please let me know if you have a better idea. Obviously, any questions are welcome.&lt;br /&gt;&lt;br /&gt;edited: thanks for the suggestion&lt;br /&gt;&lt;h3&gt;Related Posts&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.geekyblogger.com/2008/05/creating-one-click-web-page-translation.html"&gt;Creating a One-Click Web Page Translation Button&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.geekyblogger.com/2008/05/google-translation-now-with-language.html"&gt;Google Translation Now With Language Detection&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-3451213902879382440?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=sqdKWltQIhE:XJ5hvs3pTjg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=sqdKWltQIhE:XJ5hvs3pTjg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=sqdKWltQIhE:XJ5hvs3pTjg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=sqdKWltQIhE:XJ5hvs3pTjg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=sqdKWltQIhE:XJ5hvs3pTjg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/sqdKWltQIhE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/sqdKWltQIhE/modifying-google-translation-button-to.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>3</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/modifying-google-translation-button-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-6498792690510917282</guid><pubDate>Sun, 22 Jun 2008 13:43:00 +0000</pubDate><atom:updated>2008-06-23T17:47:42.767+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software</category><category domain="http://www.blogger.com/atom/ns#">Internet</category><category domain="http://www.blogger.com/atom/ns#">Blog</category><title>ScribeFire: A Must Have Firefox Addon for Blogger</title><description>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;For the last two years I blog with mostly the same procedure. Open a word processor, write my article, find/create related pictures/videos, collect all required references, login to my blog account, copy-paste my article, format my article, upload/link images/videos, and publish it. Every blog-writing-cycle requires an enormous browsing, tab-switching, and some boring stuffs.&lt;br /&gt;&lt;br /&gt;I finally change the way I blog after two years of blogging, and its all thanks to &lt;a href='http://www.scribefire.com/'&gt;ScribeFire&lt;/a&gt;. ScribeFire is an addon for the Mozilla Firefox Web Browser (which just reach the third version, in case you don't know) that let us to enhance our blogging experience. ScribeFire integrates the blogging capabilities with the browser. Posting, editing, and categorizing posts in your blog could be done much faster than usual.&lt;br /&gt;&lt;br /&gt;&lt;div align='center'&gt;&lt;img src='http://lh6.ggpht.com/habsky/SF5Wz1vgZnI/AAAAAAAAAwQ/vyh9PDZNJOY/%5BUNSET%5D.jpg' style='max-width: 800px; width: 510px; height: 167px;'/&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Some reasons why I really love ScribeFire are:&lt;br /&gt;1. I don't need to login or open any web site just to start posting&lt;br /&gt;2. ScribeFire split my browser display which allows me to write and read website in parallel&lt;br /&gt;3. Copying links or pictures is as easy as drag and drop&lt;br /&gt;4. Works on multiple blogs&lt;br /&gt;5. Compatible with many blog services, including blogger and wordpress&lt;br /&gt;6. Creating links to my other posts (which I did a lot) is very easy and fast&lt;br /&gt;7. Compatible with Firefox 3 ;)&lt;br /&gt;&lt;br /&gt;So, are you a blogger? If yes, don't miss this great stuff!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-6498792690510917282?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=VzHjUCJrVqE:bIkCQYD0Sz0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=VzHjUCJrVqE:bIkCQYD0Sz0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=VzHjUCJrVqE:bIkCQYD0Sz0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=VzHjUCJrVqE:bIkCQYD0Sz0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=VzHjUCJrVqE:bIkCQYD0Sz0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/VzHjUCJrVqE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/VzHjUCJrVqE/scribefire-must-have-firefox-addon-for.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>4</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/scribefire-must-have-firefox-addon-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-2873960568683928859</guid><pubDate>Mon, 16 Jun 2008 16:17:00 +0000</pubDate><atom:updated>2008-07-01T21:02:16.854+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WSN</category><category domain="http://www.blogger.com/atom/ns#">ITS</category><category domain="http://www.blogger.com/atom/ns#">Article</category><title>Wireless Sensor Network and Intelligent Transportation System</title><description>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;This is the third article related to &lt;a href='http://www.geekyblogger.com/search/label/ITS'&gt;Intelligent Transportation System&lt;/a&gt;. You can see the &lt;a href='http://www.geekyblogger.com/2008/06/brainstorming-designing-intelligent.html'&gt;first&lt;/a&gt; and &lt;a href='http://www.geekyblogger.com/2008/06/automated-highway-system-ahs.html'&gt;second&lt;/a&gt; article first if you like to.&lt;br/&gt;&lt;br/&gt;It is widely known that knowing the position and speed of the vehicles on the road network in real-time is one of the major challenges that vehicle control and traffic management applications are facing [2]. Wireless Sensor Network (WSN) is considered as a potential technology that might be useful as an infrastructure component of an ITS since it received significant attention in the last decade and successful research put them in the forefront to answer this challenge [2].&lt;br/&gt;&lt;br/&gt;A wireless sensor network is a collection of nodes organized into a cooperative network. Each node consists of processing capability (one or more microcontrollers, CPUs or DSP chips), may contain multiple types of memory (program, data and flash memories), have a RF transceiver (usually with a single omni-directional antenna), have a power source (e.g., batteries, solar cells), and accommodate various sensors and actuators. The nodes communicate wirelessly and often self-organize after being deployed in an ad hoc fashion [1]. It is an infrastructure comprised of sensing(measuring), computing, and communication elements that gives the user the ability to instrument, observe, and react to events and phenomena in specified environment. The environment can be the physical world, or a biological system [3].&lt;br/&gt;&lt;br/&gt;Currently, wireless sensor networks are beginning to be deployed at an accelerated pace. It is not unreasonable to expect that in 10-15 years that the world will be covered with wireless sensor networks with access to them via the Internet. This can be considered as the Internet becoming a physical network. This new technology is exciting with unlimited potential for numerous application areas including environmental, medical, military, transportation, entertainment, crisis management, homeland defense, and smart spaces [1].&lt;br/&gt;&lt;br/&gt;Some typical applications of Wireless Sensor Network are tracking, monitoring, and controlling. In a typical application, a WSN is scattered in a region where it is meant to collect data through its sensor nodes. Existing and potential applications of sensor networks include, among others, military sensing, physical security, air traffic control, traffic surveillance, video surveillance, industrial and manufacturing automation, process control, inventory management, distributed robotics, weather sensing, environment monitoring, national border monitoring, and building and structures monitoring [3].&lt;br/&gt;&lt;br/&gt;&lt;span style='font-weight: bold;'&gt;Key Technology&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;The basic functionalities for WSN depends on the application, which in this case is ITS. There are several type of sensor parameters, including: physical measurements, chemical and biological measurements, and event measurements. In ITS, the most important features are the vehicle states, which includes position, speed, direction. Other possibility of feature is classification, for example: is a vehicle in traffic a car, a truck, or a bus? Some possible sensors for ITS includes magnetoresistive, light, pressure, and video (visible or infrared).&lt;br/&gt;&lt;br/&gt;As for the transmission part, there are several wireless transmission technologies available. WSN can use some wireless technologies such as Bluetooth, ZigBee, Wireless LAN, WiMax, and 3G. The requirements of communication are related to the implementation of ITS. Some properties that have to be put into considerations are: range of communication, data throughput, and power consumption. In term of range, 3G covers the longest range, continue by WiMax, Wireless LAN, Bluetooth and Zigbee. Theoretically all those technologies are useful for ITS, however it is all depend on the topology and implementation of the system.&lt;br/&gt;&lt;br/&gt;ITS typically does not involved a high data rate communication, however if the system requires a responsive, real-time communication then using ZigBee is arguably not very suitable since it data rates is as low as 20 kbps. However, it is designed to run several years on a single set of batteries [3]. Bluetooth offers approximately 1 to 3 Mbps and Wireless LAN have a maximum data transmission rate of 54 Mbps, but none of them as energy-efficient as ZigBee.&lt;br/&gt;&lt;br/&gt;Each sensor node needs an operating system which capable of controlling hardware, provides hardware abstraction, and fill in the gap between application and hardware. TinyOS is one of the de facto standards of operating system designed specifically for WSN. It component library includes network protocols, distributed services, sensor drivers, and data acquisition tools. TinyOS’s event-driven execution model enables fine-grained power management, yet allows the scheduling flexibility made necessary by the unpredictable nature of wireless communication and physical world interfaces [3]. Some of its advantages are [3]:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;It requires very little code and a small amount of data&lt;/li&gt;&lt;li&gt;Events are propagated quickly and the rate of posting a task and switching the corresponding context is very high&lt;/li&gt;&lt;li&gt;It enjoys efficient modularity&lt;/li&gt;&lt;/ul&gt;[1] California PATH. Vehicle Platooning and Automated Highways.&lt;br/&gt;[2] J. Sijs, Z. Papp, P.P.J. van den Bosch. Vehicle Motion-State-Estimation Using Distributed Sensing. 2007&lt;br/&gt;[3] Kazem Sohraby, Daniel Minoli. Wireless Sensor Network. 2007&lt;br/&gt;&lt;br/&gt;&lt;h3&gt;Related Posts&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href='http://www.geekyblogger.com/2008/06/brainstorming-designing-intelligent.html'&gt;Brainstorming: Designing an Intelligent Transportation System (ITS)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.geekyblogger.com/2008/06/automated-highway-system-ahs.html'&gt;Automated Highway System (AHS)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-2873960568683928859?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=QCMETFaAvIo:ZU5y_frm0bw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=QCMETFaAvIo:ZU5y_frm0bw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=QCMETFaAvIo:ZU5y_frm0bw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=QCMETFaAvIo:ZU5y_frm0bw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=QCMETFaAvIo:ZU5y_frm0bw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/QCMETFaAvIo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/QCMETFaAvIo/wireless-sensor-network-and-intelligent.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/wireless-sensor-network-and-intelligent.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-5296035733635128084</guid><pubDate>Mon, 16 Jun 2008 15:34:00 +0000</pubDate><atom:updated>2008-06-30T06:47:03.832+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Firefox 3, Download it Tomorrow!</title><description>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Mozilla &lt;a href='http://developer.mozilla.org/devnews/index.php/2008/06/11/coming-tuesday-june-17th-firefox-3/'&gt;announces that Firefox 3 will be available on Tuesday, 17 June 2008&lt;/a&gt;. Since &lt;a href='http://arstechnica.com/news.ars/post/20080529-mozilla-aims-for-record-breaking-firefox-3-launch.html'&gt;Mozilla aims for record-breaking&lt;/a&gt;, we can help them by downloading Firefox 3, tomorrow... yes tomorrow! Don't forget it! ;D&lt;br/&gt;&lt;br/&gt;related post:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;a href='http://www.spreadfirefox.com/en-US/worldrecord/?from=sfx&amp;amp;uid=0&amp;amp;aid='&gt;Spread Firefox | Download day 2008&lt;/a&gt; (external link)&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-5296035733635128084?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=w_eZLjLkbZs:G4yKSqciIwc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=w_eZLjLkbZs:G4yKSqciIwc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=w_eZLjLkbZs:G4yKSqciIwc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=w_eZLjLkbZs:G4yKSqciIwc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=w_eZLjLkbZs:G4yKSqciIwc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/w_eZLjLkbZs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/w_eZLjLkbZs/firefox-3-download-tomorrow.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>2</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/firefox-3-download-tomorrow.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-5506042577419626049</guid><pubDate>Tue, 10 Jun 2008 11:52:00 +0000</pubDate><atom:updated>2008-06-10T14:00:58.785+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Google and Yahoo From The Old Time</title><description>Ever wonder how Google and Yahoo looks like years ago?&lt;br /&gt;&lt;br /&gt;Here they are:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google (1999)&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GXn7fIpTaPs/SE5sVADFh7I/AAAAAAAAAuk/3aC9GGFbxvY/s1600-h/google1999.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_GXn7fIpTaPs/SE5sVADFh7I/AAAAAAAAAuk/3aC9GGFbxvY/s400/google1999.JPG" alt="" id="BLOGGER_PHOTO_ID_5210220926960240562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Yahoo (1997)&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GXn7fIpTaPs/SE5sVtbiOMI/AAAAAAAAAus/cuOJvFHmVpI/s1600-h/yahoo1997.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_GXn7fIpTaPs/SE5sVtbiOMI/AAAAAAAAAus/cuOJvFHmVpI/s400/yahoo1997.JPG" alt="" id="BLOGGER_PHOTO_ID_5210220939142379714" border="0" /&gt;&lt;/a&gt;Notice that Google has removed the "!" while Yahoo still keeps it. It also quite funny to see how Google feels that it is necessary to explain "Why use Google" :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-5506042577419626049?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=_SD3m7CM0Sc:j8vTjyvXayw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=_SD3m7CM0Sc:j8vTjyvXayw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=_SD3m7CM0Sc:j8vTjyvXayw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=_SD3m7CM0Sc:j8vTjyvXayw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=_SD3m7CM0Sc:j8vTjyvXayw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/_SD3m7CM0Sc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/_SD3m7CM0Sc/google-and-yahoo-from-old-time.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_GXn7fIpTaPs/SE5sVADFh7I/AAAAAAAAAuk/3aC9GGFbxvY/s72-c/google1999.JPG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/google-and-yahoo-from-old-time.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-78641360579747084</guid><pubDate>Sun, 08 Jun 2008 07:15:00 +0000</pubDate><atom:updated>2008-07-01T20:50:14.956+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial</category><category domain="http://www.blogger.com/atom/ns#">Troubleshooting</category><title>Creating Thumbnails from a Video</title><description>Usually when you want to share a video, people often ask for screenshots. Sometimes it is better to give several small thumbnails rather than just one big screenshot. This simple tutorial will tell you how to do such thing with ease.&lt;br /&gt;&lt;br /&gt;First, you will need the &lt;span style="font-weight: bold;"&gt;Media Player Classic (MPC)&lt;/span&gt;. It is a free software that you can get from &lt;a href="http://sourceforge.net/projects/guliverkli/"&gt;sourceforge&lt;/a&gt;. If you are using Windows XP then you just have to download it &lt;a href="http://prdownloads.sourceforge.net/guliverkli/mpc2kxp6490.zip?download"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now you already have the MPC, follow these instruction:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Extract the zip file and run the mplayer.exe&lt;/li&gt;&lt;li&gt;Open the video you'd like to use as a source&lt;/li&gt;&lt;li&gt;Click on &lt;span style="font-weight: bold;"&gt;File -&gt; Save Thumbnails&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GXn7fIpTaPs/SEuIL67sadI/AAAAAAAAAts/45eN8gxth6E/s1600-h/1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_GXn7fIpTaPs/SEuIL67sadI/AAAAAAAAAts/45eN8gxth6E/s400/1.JPG" alt="" id="BLOGGER_PHOTO_ID_5209407132363680210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On the dialogue box, specify your output filename and type (jpg or bmp). You can also specify the number of thumbnails you want to make by setting the number of rows and colums. You can also specify the witdh of the output file.&lt;/li&gt;&lt;li&gt;Press &lt;span style="font-weight: bold;"&gt;Save &lt;/span&gt;and leave everything else to MPC&lt;/li&gt;&lt;li&gt;Now you have your thumbnails&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GXn7fIpTaPs/SEuIMrO-PAI/AAAAAAAAAt8/IrTojHyw_nM/s1600-h/thumbs20080607234046_resize.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_GXn7fIpTaPs/SEuIMrO-PAI/AAAAAAAAAt8/IrTojHyw_nM/s400/thumbs20080607234046_resize.jpg" alt="" id="BLOGGER_PHOTO_ID_5209407145329441794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Important note:&lt;br /&gt;&lt;br /&gt;If you get the error message "&lt;span style="font-weight: bold;"&gt;Get Current Image Failed, hr = 8000ffff&lt;/span&gt;", do this following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Click &lt;span style="font-weight: bold;"&gt;View -&gt; Options&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Open &lt;span style="font-weight: bold;"&gt;Playback -&gt; Output&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GXn7fIpTaPs/SEuIMYYJvfI/AAAAAAAAAt0/U5KJHbfmOOE/s1600-h/2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_GXn7fIpTaPs/SEuIMYYJvfI/AAAAAAAAAt0/U5KJHbfmOOE/s400/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5209407140267671026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Change the DirectShow Video from &lt;span style="font-weight: bold;"&gt;Overlay Mixer&lt;/span&gt; to anything else (I have tried &lt;span style="font-weight: bold;"&gt;VMR7 windowed&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;VMR9 renderless&lt;/span&gt; and it's work perfectly)&lt;/li&gt;&lt;li&gt;Click &lt;span style="font-weight: bold;"&gt;OK&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Restart your MPC&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-78641360579747084?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=UIXl0ZZrouU:2SXbHYSxla8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=UIXl0ZZrouU:2SXbHYSxla8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=UIXl0ZZrouU:2SXbHYSxla8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=UIXl0ZZrouU:2SXbHYSxla8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=UIXl0ZZrouU:2SXbHYSxla8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/UIXl0ZZrouU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/UIXl0ZZrouU/creating-thumbnails-from-video.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_GXn7fIpTaPs/SEuIL67sadI/AAAAAAAAAts/45eN8gxth6E/s72-c/1.JPG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/creating-thumbnails-from-video.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-3857732866727953972</guid><pubDate>Thu, 05 Jun 2008 15:37:00 +0000</pubDate><atom:updated>2008-06-05T18:10:59.176+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>Why Linux? Why Not?</title><description>The Linux Operating System (or should I say GNU/Linux) obviously has become a quite popular alternative to Windows. &lt;a href="http://www.whylinuxisbetter.net/"&gt;This site&lt;/a&gt; describes 24 advantages of using Linux compared to Windows in a quite eye catching fashion. While some minor point such as "get a great music player" or "keep an eye on the weather" might not be absolutely true, however I mostly agree with most of the description. The information provided is clear, pretty objective (it even mentions some reason why you should stick to Windows), easy to understand, and (this is why I like it so much) simple-yet-deep-enough. Em, am I being contradictive?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GXn7fIpTaPs/SEgOReoqNQI/AAAAAAAAAtc/5_AzkjQxxz4/s1600-h/cap.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_GXn7fIpTaPs/SEgOReoqNQI/AAAAAAAAAtc/5_AzkjQxxz4/s400/cap.JPG" alt="" id="BLOGGER_PHOTO_ID_5208428662498145538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;captured from &lt;a class="linkification-ext" href="http://www.whylinuxisbetter.net/" title="Linkification: http://www.whylinuxisbetter.net/"&gt;http://www.whylinuxisbetter.net/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If the list is not long enough then I will suggest you to check another &lt;a href="http://cityblogger.com/archives/2007/01/24/101-reasons-why-linux-is-better-than-windows"&gt;101 reasons why Linux is better than Windows&lt;/a&gt; (even though so far it's only 54)... and NO, I'm not a fans of Linux or whatsoever. In fact, after read those articles (and some counter articles) I decide to install Linux on my computer today!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-3857732866727953972?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=VdH9hWtGGis:wt7XQ-E0C_4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=VdH9hWtGGis:wt7XQ-E0C_4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=VdH9hWtGGis:wt7XQ-E0C_4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=VdH9hWtGGis:wt7XQ-E0C_4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=VdH9hWtGGis:wt7XQ-E0C_4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/VdH9hWtGGis" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/VdH9hWtGGis/why-linux-why-not.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_GXn7fIpTaPs/SEgOReoqNQI/AAAAAAAAAtc/5_AzkjQxxz4/s72-c/cap.JPG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/why-linux-why-not.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-1572303927139460461</guid><pubDate>Thu, 05 Jun 2008 08:43:00 +0000</pubDate><atom:updated>2008-07-01T21:05:02.190+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AI</category><category domain="http://www.blogger.com/atom/ns#">ITS</category><category domain="http://www.blogger.com/atom/ns#">Article</category><title>Automated Highway System (AHS)</title><description>One of the most exciting part of Intelligent Transportation System (ITS) is &lt;a href="http://en.wikipedia.org/wiki/Automated_highway_system"&gt;Automated Highway System (AHS)&lt;/a&gt;. AHS is a way to reduce the congestion in highways. The idea is improving traffic flow and safeties by applying intelligent and automation in driving system. Autonomous control of driving tasks was considered to substantially improve the traffic flow.&lt;br /&gt;&lt;p class="MsoNormal" style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;The most interesting feature of AHS is a concept of group of vehicles arranged in a relatively small-fixed distance called “platoon”. Platooning is possible when every vehicle is equipped with intelligent and automation which allows smooth merging, lane changing and splitting maneuvers in a way that is advantageous to the highway performance.&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GXn7fIpTaPs/SEetT-oqNPI/AAAAAAAAAtU/NbWi_2ECHmc/s1600-h/1-6-4.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_GXn7fIpTaPs/SEetT-oqNPI/AAAAAAAAAtU/NbWi_2ECHmc/s400/1-6-4.gif" alt="" id="BLOGGER_PHOTO_ID_5208322052819924210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;platooning (taken from: &lt;a class="linkification-ext" href="http://www.its.go.jp/" title="Linkification: http://www.its.go.jp"&gt;www.its.go.jp&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="text-align: left;"&gt;Since platooning enables vehicles to operate much closer together than is possible under manual driving conditions, each lane can carry at least twice as much traffic as it can today. This should make it possible to greatly reduce highway congestion. Also, at close spacing aerodynamic drag is significantly reduced, which can lead to major reductions in fuel consumption and exhaust emissions. The high-performance vehicle control system also increases the safety of highway travel, reduces driving stress and tedium, and provides a very smooth ride [&lt;a href="http://www.path.berkeley.edu/"&gt;California PATH&lt;/a&gt;].&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;As mentioned above, an AHS requires every vehicle to be both intelligent and to some extent, automatic. This is where the Intelligent Vehicle (IV) takes its role in AHS.&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left;"&gt;IV is considered as a new technology for obtaining a more efficient driver-vehicle operation. It is meant to improve safety, operational efficiency, and convenience while driving. An IV system senses the environment around the vehicle by using sensors and strives to achieve more efficient vehicle operation by assisting the driver or by taking full control of the vehicle. Obviously, the ideal system for AHS is where the IV has fully autonomous system. In other words, the systems should remove human intervention from the control and therefore take the entire control functionalities of vehicle operations.&lt;/p&gt;&lt;h3&gt;Related Posts&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.geekyblogger.com/2008/06/brainstorming-designing-intelligent.html"&gt;Brainstorming: Designing an Intelligent Transportation System (ITS)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.geekyblogger.com/2008/06/wireless-sensor-network-and-intelligent.html"&gt;Wireless Sensor Network and Intelligent Transportation System&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-1572303927139460461?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=3oT4w8fFBJI:_G_R6EX86Qs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=3oT4w8fFBJI:_G_R6EX86Qs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=3oT4w8fFBJI:_G_R6EX86Qs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=3oT4w8fFBJI:_G_R6EX86Qs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=3oT4w8fFBJI:_G_R6EX86Qs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/3oT4w8fFBJI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/3oT4w8fFBJI/automated-highway-system-ahs.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_GXn7fIpTaPs/SEetT-oqNPI/AAAAAAAAAtU/NbWi_2ECHmc/s72-c/1-6-4.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/automated-highway-system-ahs.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-5224177239942573375</guid><pubDate>Mon, 02 Jun 2008 10:31:00 +0000</pubDate><atom:updated>2008-07-01T21:07:06.394+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AI</category><category domain="http://www.blogger.com/atom/ns#">WSN</category><category domain="http://www.blogger.com/atom/ns#">ITS</category><category domain="http://www.blogger.com/atom/ns#">Article</category><title>Brainstorming: Designing an Intelligent Transportation System (ITS)</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Growth in congestion, as well as the difficulties in constructing new infrastructures has lead into a research in &lt;a href="http://en.wikipedia.org/wiki/Intelligent_Transportation_System"&gt;Intelligent Transportation System (ITS)&lt;/a&gt;. The advances in sensing technologies, computer hardware and software, etc are also become additional motivation in this field of research. &lt;a href="http://en.wikipedia.org/wiki/Automated_highway_system"&gt;Automatic Highway System (AHS)&lt;/a&gt; is one of the most interesting topic. Its main idea: platooning is believed to be able to improve highway throughput without having to ignore the safety but instead improving it.&lt;br /&gt;&lt;br /&gt;It is widely known that knowing the position and speed of the vehicles on the road network in real-time is one of the major challenges that vehicle control and traffic management applications are facing. &lt;a href="http://en.wikipedia.org/wiki/Wireless_sensor_network"&gt;Wireless Sensor Network (WSN)&lt;/a&gt; is considered as a potential technology that might be useful as an infrastructure component of an ITS since it received significant attention in the last decade and successful research put them in the forefront to answer this challenge. WSN itself is an exciting technology with unlimited potential for numerous application, including tracking, monitoring, and controlling.&lt;br /&gt;&lt;br /&gt;A distributed paradigm is the most suited approach to implements an ITS. While it is naturally distributed (spatially) and consisted of various components, which may range from several to thousands number of components (scalability issue), it is also relatively complex. Not to mention that by distribute the implementation accordingly, a certain level of reliability could be achieved more easily. Dynamic components in ITS are implemented as agents. Instead of rely heavily in modeling the process, agent-oriented paradigm offers a higher abstraction compared to the object-oriented paradigm. Agent is an autonomous entity that behaves according to its perception of the environment and its knowledge. In most cases, one agent is not enough to form the expected system. Therefore, a &lt;a href="http://en.wikipedia.org/wiki/Multi-agent_system"&gt;Multi-Agent System (MAS)&lt;/a&gt; is required.&lt;br /&gt;&lt;br /&gt;Since there is no formal method to test a distributed system, the only way to do it is by using a &lt;a href="http://en.wikipedia.org/wiki/Computer_simulation"&gt;simulation&lt;/a&gt;. An engine that capable of simulating any dynamic behaviors is required. Using multi-agent approach as it concept, a researches is allowed to decomposed a big system into intelligent entities with specified behaviors. In a traffic system problem domain, some entities could be considered as agents: car, driver, traffic controller, etc depending on the modelers themselves.&lt;br /&gt;&lt;br /&gt;The simulation of an ITS system might not be complete without the introduction of human behaviors. However, human behaviors may vary for each individual or culture. Investigating the difference in culture might be interesting not only in describing the human part of the system but also to parameterize some characteristics of controllers.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Related Posts&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.geekyblogger.com/2008/06/automated-highway-system-ahs.html"&gt;Automatic Highway System (AHS)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.geekyblogger.com/2008/06/wireless-sensor-network-and-intelligent.html"&gt;Wireless Sensor Network and Intelligent Transportation System&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-5224177239942573375?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=npw1RsMKxmk:SzAu7XuYiqk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=npw1RsMKxmk:SzAu7XuYiqk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=npw1RsMKxmk:SzAu7XuYiqk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=npw1RsMKxmk:SzAu7XuYiqk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=npw1RsMKxmk:SzAu7XuYiqk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/npw1RsMKxmk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/npw1RsMKxmk/brainstorming-designing-intelligent.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/06/brainstorming-designing-intelligent.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-2049990972940527098</guid><pubDate>Thu, 29 May 2008 10:34:00 +0000</pubDate><atom:updated>2008-05-29T12:58:02.245+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tutorial</category><category domain="http://www.blogger.com/atom/ns#">Internet</category><title>Setting up an FTP Server Behind NAT (Network Address Translation)</title><description>Before starting, I assume that you have enough knowledge about &lt;a href="http://en.wikipedia.org/wiki/File_Transfer_Protocol"&gt;FTP&lt;/a&gt;, &lt;a href="http://slacksite.com/other/ftp.html"&gt;active and passive mode in FTP&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Network_address_translation"&gt;NAT (Network Address Translation)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My home LAN (Local Area Connection) is consisted of several computers connected to The Internet via a router with a single IP Address, therefore obviously NAT is required. With NAT, there are two types of IP Address, local and global address(es). The computers in my network use local addresses which are only recognized inside my network. On the other hand, the router uses both address, so that it is possible to reach the router from local network or from the internet. I want to use one of my computer as an FTP server that can be accessed from outside my local network. The problem is that with only local address, the computer I used for FTP server couldn't be accessed from outside the local network.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GXn7fIpTaPs/SD6HZOoqNMI/AAAAAAAAAs8/LrEQ38B4Oio/s1600-h/network.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_GXn7fIpTaPs/SD6HZOoqNMI/AAAAAAAAAs8/LrEQ38B4Oio/s400/network.JPG" alt="" id="BLOGGER_PHOTO_ID_5205747086781985986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In active mode, client is the one responsible in opening ports for data transmission. However, in passive mode (which is more popular), this responsibility is taken care by server. This is a similar problem from the previous one. The ports which are opened by the server are only available for those in the local network since it is using a local address.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution: Port Forwarding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In order to make the local FTP server available for anyone connected to the internet, a port forwarding must be applied to the router. For active mode, you just simply add port 21 (the default port for FTP) and forward it to the FTP server address. For passive mode, the same thing also have to be applied. In addition, several other ports are also need to be opened for data transmission.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;I'm using the very common router (LinkSys WRT54GL) with local address 192.168.1.1. I want to open the port 21 and another ports from 60000-60050 for data transmission (this is actually up to you, pick anything above 1024). Open the router's interface from browser: &lt;a class="linkification-ext" href="http://192.168.1.1/" title="Linkification: http://192.168.1.1"&gt;http://192.168.1.1&lt;/a&gt;. Open the Application &amp;amp; Gaming -&gt; Port Range Forward and fill in as follow (192.168.1.100 is my FTP Server's local address).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GXn7fIpTaPs/SD6HgeoqNNI/AAAAAAAAAtE/fvNfNt5izFM/s1600-h/linksys.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_GXn7fIpTaPs/SD6HgeoqNNI/AAAAAAAAAtE/fvNfNt5izFM/s400/linksys.JPG" alt="" id="BLOGGER_PHOTO_ID_5205747211336037586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;FTP Server Application&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another important thing that you need to do when using passive mode is setting up the FTP Server application itself. I think most of the FTP server application supports the usage of FTP server behind NAT. I'm going to use the free &lt;a href="http://filezilla-project.org/download.php?type=server"&gt;FileZilla FTP server&lt;/a&gt; as an example. In order to make the FTP Server works, you need to let it know about its global address. If you have a fixed address then you just have to tell the application about it, otherwise you will need another tool to retrieve the global address such as the one provided by FileZilla: &lt;a class="linkification-ext" href="http://ip.filezilla-project.org/ip.php" title="Linkification: http://ip.filezilla-project.org/ip.php"&gt;http://ip.filezilla-project.org/ip.php&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To set up the FileZilla FTP server, open the Edit -&gt; Settings menu and choose "Passive mode settings". If you have a fixed IP address (like in my example is 202.169.1.1), fill in the "Use the following IP" field, otherwise (or if you're not sure), just tick the "Retrieve external IP address from" and fill it with "&lt;a class="linkification-ext" href="http://ip.filezilla-project.org/ip.php" title="Linkification: http://ip.filezilla-project.org/ip.php"&gt;http://ip.filezilla-project.org/ip.php&lt;/a&gt;". Tick both "Don't use external IP for local connections" and "Use custom port range". Fill the port range with the same range that you have filled in the router settings.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GXn7fIpTaPs/SD6IG-oqNOI/AAAAAAAAAtM/3qVtvfyeb-w/s1600-h/FileZilla.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_GXn7fIpTaPs/SD6IG-oqNOI/AAAAAAAAAtM/3qVtvfyeb-w/s400/FileZilla.JPG" alt="" id="BLOGGER_PHOTO_ID_5205747872761001186" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-2049990972940527098?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=itiD17a8cz8:TOQImBVQBoo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=itiD17a8cz8:TOQImBVQBoo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=itiD17a8cz8:TOQImBVQBoo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=itiD17a8cz8:TOQImBVQBoo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=itiD17a8cz8:TOQImBVQBoo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/itiD17a8cz8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/itiD17a8cz8/setting-up-ftp-server-behind-nat.html</link><author>noreply@blogger.com (Ismail Habib)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_GXn7fIpTaPs/SD6HZOoqNMI/AAAAAAAAAs8/LrEQ38B4Oio/s72-c/network.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/05/setting-up-ftp-server-behind-nat.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-26918278.post-4395912651546460459</guid><pubDate>Tue, 27 May 2008 11:32:00 +0000</pubDate><atom:updated>2008-06-02T01:12:53.700+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Game</category><category domain="http://www.blogger.com/atom/ns#">Software</category><title>Echochrome: Not Just Another Game</title><description>Even though I'm not a real gamer, I still like to follow the development in the game world. From what I see in the recent years, the development of games is a bit stagnant. It's true that in matter of graphics we have been experiencing an incredible improvement. However, the types of game doesn't vary as much as I expected. A death in creativity?&lt;br /&gt;&lt;br /&gt;If you also have a similar opinion, then you might be interested to know this game: &lt;a href="http://en.wikipedia.org/wiki/Echochrome"&gt;Echochrome (Mugen Kairou)&lt;/a&gt;. It is a game developed by SONY for the PlayStation Portable and PlayStation 3. Echochrome is a puzzle game involving a figure traversing a rotatable world where physics and reality are affected by perspective. What seems to be a impossible path is made possible by rotating the camera to the right angle. A hole will not have any effect when you cover it with another object.&lt;br /&gt;&lt;br /&gt;This game based on &lt;a href="http://en.wikipedia.org/wiki/Object_Locative_Environment_Coordinate_System"&gt;OLE Coordinate System&lt;/a&gt; developed (an engine that determines what is occuring based on the camera's perspective) by Jun Fujiki. This engine made it possible to constraints movement not only by 3D coordinates but also by the position of camera as well.&lt;br /&gt;&lt;br /&gt;Take a look at the trailer below and I hope you will enjoy it as much as I do :)&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-020446234547388986 visible ontop" href="http://www.youtube.com/v/QfICeBtVv8U&amp;amp;hl=en"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-020446234547388986 visible ontop" href="http://www.youtube.com/v/QfICeBtVv8U&amp;amp;hl=en"&gt;&lt;/a&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QfICeBtVv8U&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/QfICeBtVv8U&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26918278-4395912651546460459?l=www.geekyblogger.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=azBtzKGzc-E:4XOLdV2CxJ8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=azBtzKGzc-E:4XOLdV2CxJ8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=azBtzKGzc-E:4XOLdV2CxJ8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AProgrammersThought?a=azBtzKGzc-E:4XOLdV2CxJ8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AProgrammersThought?i=azBtzKGzc-E:4XOLdV2CxJ8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AProgrammersThought/~4/azBtzKGzc-E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/AProgrammersThought/~3/azBtzKGzc-E/echochrome-not-just-another-game.html</link><author>noreply@blogger.com (Ismail Habib)</author><thr:total>0</thr:total><feedburner:origLink>http://www.geekyblogger.com/2008/05/echochrome-not-just-another-game.html</feedburner:origLink></item></channel></rss>
