<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>gedex's blog</title>
	<atom:link href="http://gedex.web.id/feed/" rel="self" type="application/rss+xml" />
	<link>http://gedex.web.id</link>
	<description>Web 2.0, Server Side Scripting, PHP, HTML, MySQL, CSS, web Design, Stylesheet, electronic, embedded system, digital circuit, microcontroller, 8051 microcontroller, assembler</description>
	<pubDate>Fri, 05 Mar 2010 00:00:48 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Pergeseran Waktu dalam Perjuangan</title>
		<link>http://gedex.web.id/archives/2010/03/05/pergeseran-waktu-dalam-perjuangan/</link>
		<comments>http://gedex.web.id/archives/2010/03/05/pergeseran-waktu-dalam-perjuangan/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 23:58:12 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[my life]]></category>

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

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

		<guid isPermaLink="false">http://gedex.web.id/?p=317</guid>
		<description><![CDATA[
Beberapa bulan ini saya merasakan pergeseran waktu kembali. Yup, hari terasa begitu cepat berlalu tahun ini, siang kini terasa semakin cepat dan malam menjelang pagi terasa begitu lama. Beberapa bulan ini saya kembali menjadi kalong, tidur dikala para pekerja terjebak macet menuju kantor mereka dan bangun dikala pekerja hendak makan siang. Well, sejak kuliah (dan [...]
]]></description>
			<content:encoded><![CDATA[<p>Beberapa bulan ini saya merasakan pergeseran waktu kembali. Yup, hari terasa begitu cepat berlalu tahun ini, siang kini terasa semakin cepat dan malam menjelang pagi terasa begitu lama. Beberapa bulan ini saya kembali menjadi kalong, tidur dikala para pekerja terjebak macet menuju kantor mereka dan bangun dikala pekerja hendak makan siang. Well, sejak kuliah (dan bahkan sejak SMA) saya sudah terinfeksi dengan pola hidup seperti ini. Belajar dan bekerja disaat semua orang terlelap bagi saya mempunyai nuansa tersendiri. Kadang jika kita ingin meraih sesuatu ada hal yang harus kita korbankan, entah itu kebersamaan atau waktu tidur. Dan sayangnya saya selalu ingin meraih sesuatu sehingga ada saja yang harus dikorbankan. Apa yang ingin saya raih saat ini? Hmm.. hanya satu, yaitu ilmu (saya bohong, plus uang tentunya). Berbicara tentang keinginan yang diraih, saya jadi teringat percakapan dengan teman saya malam kemarin, seseorang yang ingin bekerja dibidang yang disukai (tapi dengan <em>salary</em> yang setimpal). <span id="more-317"></span>Sebenarnya itu mudah, bahkan kita tidak perlu mencari pekerjaan itu. Jika memang ingin bekerja dibidang yang kita sukai plus gaji yang setimpal atau berlebih maka bekerjalah di bidang tersebut terlebih dahulu karena kecintaan terhadap bidang yag digeluti. Bangun <em>experience</em> di bidang tersebut sehingga orang dapat langsung menilai kualitas Anda karena experience. Tentunya experience perlu pengorbanan terlebih dahulu, baik waktu dan uang. Saya senang melihat profil Software Engineer di Facebook, Google dan Yahoo. Mereka benar-benar engineer yang mencintai pekerjaannya dan menginsparasi orang lain. Terkadang <a href="http://www.catonmat.net/blog/my-job-interview-at-google/" rel="external nofollow">proses udangan <em>interview</em> di Google</a> adalah dengan mencari di internet atau karena nama kita cukup terdengar di internet. Jadi membangun portfolio di internet sangat membantu mengenalkan diri Anda ke perusahaan yang Anda incar.</p>
<p>Well, membangun portfolio di internet tidak dapat instan. Mungkin kita bisa lihat perjalanan Guido van Rossum&mdash;mengembangkan Python&mdash;bekerja sebagai <em>engineer</em> di Google,  Rasmus Lerdorf&mdash;mengembangkan PHP&mdash;yang menjadi <em>Distinguished Engineer</em> Yahoo, dan banyak engineer lainnya. Oh ya, mempunyai <em>influence</em> merupakan <em>starting point</em> untuk dapat menjadi sukses seperti mereka. Oh ya, tentunya siap dengan pergeseran waktu.</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2010/03/05/pergeseran-waktu-dalam-perjuangan/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ls direktori dalam format tree</title>
		<link>http://gedex.web.id/archives/2010/03/04/ls-direktori-dalam-format-tree/</link>
		<comments>http://gedex.web.id/archives/2010/03/04/ls-direktori-dalam-format-tree/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 22:40:07 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[tips & tricks]]></category>

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

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

		<guid isPermaLink="false">http://gedex.web.id/?p=304</guid>
		<description><![CDATA[
Apabila kita bekerja dengan konsol dan ingin mengetahui struktur direktori tertentu biasanya kita melakukannya dengan perintah ls nama_direktori, lalu kita ls lagi direktori di dalamnya. Jika kita bekerja di desktop, kita dapat mengetahui struktur direktori tertentu dengan membuka penjelajah berkas (file browser). Sebenarnya di konsol, ada perintah tree untuk melihat senarai direktori dalam format tree.
tree [...]
]]></description>
			<content:encoded><![CDATA[<p>Apabila kita bekerja dengan konsol dan ingin mengetahui struktur direktori tertentu biasanya kita melakukannya dengan perintah <code>ls nama_direktori</code>, lalu kita <code>ls</code> lagi direktori di dalamnya. Jika kita bekerja di desktop, kita dapat mengetahui struktur direktori tertentu dengan membuka penjelajah berkas (<em>file browser</em>). Sebenarnya di konsol, ada perintah <code>tree</code> untuk melihat senarai direktori dalam format <em>tree</em>.</p>
<blockquote><p>tree - list contents of directories in a tree-like format.</p></blockquote>
<p>Saya menggunakan ubuntu, cukup mudah menginstalnya jika perintah <code>tree</code> belum tersedia.</p>
<p><code>sudo apt-get install tree</code></p>
<p>Lalu kita lihat seperti apa keluarannya:</p>
<pre>
akeda@akeda-desktop:~$ tree ~/www/keuangan/app/models
/home/akeda/www/keuangan/app/models
|-- activity.php
|-- activity_child.php
|-- behaviors
|   |-- empty
|   |-- formatable.php
|   `-- money.php
|-- budget.php
|-- budget_detail.php
|-- budget_detail_description.php
|-- city.php
|-- datasources
|   `-- empty
|-- funding_source.php
|-- group.php
|-- groups_module_action.php
|-- journal_bank.php
|-- journal_cash.php
|-- journal_tax.php
|-- menu.php
|-- menu_type.php
|-- module.php
|-- module_action.php
|-- province.php
|-- site_setting.php
|-- tax_type.php
|-- transaction.php
|-- transaction_revision.php
|-- unit.php
|-- unit_code.php
|-- user.php
|-- user_log.php
`-- volume.php

2 directories, 30 files
</pre>
<p></p>
<p>Sebernarnya keluaran hasil <code>tree</code> di atas berwarna tergantung tipe berkas dan ekstensinya (yang terdefinsi dalam <code>dircolors</code>). Untuk penggunaan lebih lanjut silahkan coba-coba dan baca <code>man tree</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2010/03/04/ls-direktori-dalam-format-tree/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Copy dari clipboard konsol (X11)</title>
		<link>http://gedex.web.id/archives/2010/02/26/copy-dari-clipboard-konsol-x11/</link>
		<comments>http://gedex.web.id/archives/2010/02/26/copy-dari-clipboard-konsol-x11/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 22:48:44 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[tips & tricks]]></category>

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

		<guid isPermaLink="false">http://gedex.web.id/?p=295</guid>
		<description><![CDATA[
Suatu saat Anda berada dalam konsol server yang tidak memiliki tetikus (mouse). Katakanlah Anda perlu mengkopi suatu berkas ke berkas lain, mungkin langkahnya seperti berikut:

membuka suatu berkas (misal dengan vim), dan
memblok seluruh baris lalu melakukan kopi (Ctrl-C), tutup berkas, dan
membuka berkas lainnya untuk mem-paste-nya.

Ups, mungkin Anda lupa bagaimana perintah di Vim untuk memblok keseluruhan baris. [...]
]]></description>
			<content:encoded><![CDATA[<p>Suatu saat Anda berada dalam konsol server yang tidak memiliki tetikus (<em>mouse</em>). Katakanlah Anda perlu mengkopi suatu berkas ke berkas lain, mungkin langkahnya seperti berikut:</p>
<ol>
<li>membuka suatu berkas (misal dengan vim), dan</li>
<li>memblok seluruh baris lalu melakukan kopi (Ctrl-C), tutup berkas, dan</li>
<li>membuka berkas lainnya untuk mem-paste-nya.</li>
</ol>
<p>Ups, mungkin Anda lupa bagaimana perintah di Vim untuk memblok keseluruhan baris. Disini xclip membantu Anda. Hal yang umum dilakukan kita adalah mengkopi isi dari berkas SSH Public Key di dalam berkas ~/.ssh/id_rsa.pub. Contohnya:</p>
<p><code>cat ~/.ssh/id_rsa.pub | xclip -sel clip</code></p>
<p>Silahkan klik Ctrl-V di tempat yang Anda inginkan. Untuk yang belum terinstall xclip, silahkan unduh di <a href="http://sourceforge.net/projects/xclip/" rel="external nofollow">sini</a>. Untuk pengguna Ubuntu:</p>
<p><code>sudo apt-get install xclip</code></p>
<p>Referensi:<br />
<a href="http://sourceforge.net/projects/xclip/" rel="external nofollow">http://sourceforge.net/projects/xclip/</a><br />
<a href="http://help.github.com/linux-key-setup/" rel="external nofollow">http://help.github.com/linux-key-setup/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2010/02/26/copy-dari-clipboard-konsol-x11/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sebelum Menggunakan Email Component CakePHP</title>
		<link>http://gedex.web.id/archives/2010/02/05/sebelum-menggunakan-email-component-cakephp/</link>
		<comments>http://gedex.web.id/archives/2010/02/05/sebelum-menggunakan-email-component-cakephp/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 22:18:49 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[coding]]></category>

		<category><![CDATA[tips & tricks]]></category>

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

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

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

		<guid isPermaLink="false">http://gedex.web.id/?p=276</guid>
		<description><![CDATA[
Yang umum dalam halaman pendaftaran adalah selesai mendaftar akan ada konfirmasi telah mendaftar. Halaman konfirmasi tersebut bisa saja dengan halaman web atau dikirim ke email pendaftar. Kebetulan saya sedang mengerjakan hal serupa dimana konfirmasi juga dikirimkan ke email pendaftar. Saya menggunakan CakePHP untuk mengembangkan aplikasi, dimana telah tersedia komponen Email untuk memudahkan pekerjaan seperti ini. [...]
]]></description>
			<content:encoded><![CDATA[<p>Yang umum dalam halaman pendaftaran adalah selesai mendaftar akan ada konfirmasi telah mendaftar. Halaman konfirmasi tersebut bisa saja dengan halaman web atau dikirim ke email pendaftar. Kebetulan saya sedang mengerjakan hal serupa dimana konfirmasi juga dikirimkan ke email pendaftar. Saya menggunakan CakePHP untuk mengembangkan aplikasi, dimana telah tersedia komponen Email untuk memudahkan pekerjaan seperti ini. Penjelasan di <a href="http://book.cakephp.org/view/176/Email">cookbook CakePHP, bagian Email Component</a> itu sudah cukup jelas dan sudah saya coba. Tapi jika Anda mengalami kendala tidak terkirimnya Email, mungkin saja sistem operasi Anda belum terinstall MTA (Mail Transfer Agent). Anda bisa gunakan sendmail. Instalasi MTA dan asosiasinya dengan DNS Server-nya tidak akan saya jelaskan disini, saya sendiripun belum pernah mencoba <img src='http://gedex.web.id/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Untuk coba-coba saat pengembangan, Anda bisa menggunakan MTA sendmail. Saya menggunakan Ubuntu, untuk menginstall-nya gunakan perintah ini:</p>
<p><code>sudo apt-get install sendmail mailutils</code></p>
<p>Untuk mencoba mengirim email bisa gunakan utiliti mail :</p>
<p><code>mail -s "Test" me@example.net < /var/log/email.info</code></p>
<p>Ini akan mengirim email ke me@example.net dengan subject Test dan isi pesannya adalah isi dari berkas <code>/var/log/email.info</code>. Kebetulan server development di tempat saya MTA-nya sudah terasosiasi dengan DNS Server-nya jadi saya bisa menerima email tersebut ke inbox gmail saya, tanpa masuk ke spam, from-nya otomatis terisi oleh nama_user_di_server_development@nama_domain. Jika belum terasosiasi dengan DNS-Server-nya akan nyangkut di spam. Jika sudah terinstall MTA dan bisa terkirim emailnya ke tujuan, saatnya mencobanya dengan CakePHP. Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2010/02/05/sebelum-menggunakan-email-component-cakephp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rencana Menulis Buku dan Mengajar</title>
		<link>http://gedex.web.id/archives/2010/02/05/rencana-menulis-buku-dan-mengajar/</link>
		<comments>http://gedex.web.id/archives/2010/02/05/rencana-menulis-buku-dan-mengajar/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 21:30:16 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[bekasi problems]]></category>

		<category><![CDATA[just FYI]]></category>

		<category><![CDATA[my life]]></category>

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

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

		<guid isPermaLink="false">http://gedex.web.id/?p=264</guid>
		<description><![CDATA[
Ketika seseorang bertanya hal teknis, saya sering memberi jawaban untuk googling (mungkin sedang tidak mood untuk menjelaskan) tapi terkadang saya memberi jawaban panjang lebar  (yang mungkin malah membuat sipenanya semakin bingung). Saya yakin kesalahan ada pada saya dalam hal menjelaskan. Untuk itu saya berusaha mengasah cara penyampaian dengan mulai berbicara di depan banyak orang. [...]
]]></description>
			<content:encoded><![CDATA[<p>Ketika seseorang bertanya hal teknis, saya sering memberi jawaban untuk <em>googling</em> (mungkin sedang tidak <em>mood</em> untuk menjelaskan) tapi terkadang saya memberi jawaban panjang lebar  (yang mungkin malah membuat sipenanya semakin bingung). Saya yakin kesalahan ada pada saya dalam hal menjelaskan. Untuk itu saya berusaha mengasah cara penyampaian dengan mulai <a href="http://gedex.web.id/archives/2009/12/05/seminar-go-open-source-di-sma-sudirman-bekasi/">berbicara di depan banyak orang</a>. Jika tidak halangan, insyaallah, hari sabtu dan minggu saya akan membawakan materi di acara bertema Joomla di Paramadina. Dengan membiasakan diri menyampaikan materi di depan banyak orang, saya berharap ke depannya akan lebih mudah menyampaikan suatu materi kepada orang lain. Di waktu saya yang tidak terlalu sibuk ini, saya terpikir ingin menulis buku dan mengajar. Untuk menulis buku ada beberapa tema yang ingin saya tuliskan, antara lain: Python atau Django, cakePHP, jQuery dan HTML5+CSS3. Saya tidak tahu apakah tema-tema tersebut sudah banyak bukunya atau belum di Indonesia. Mungkin saya akan survey dulu untuk mencari tahu. Saya juga tidak tahu penerbit buku mana yang tepat untuk tema komputer. Rencana saya (kalau memungkinkan) adalah menggratiskan pengunduhan buku dalam format pdf atau HTML, tapi memungkinkan orang lain untuk mendapatkan <em>hardcopy</em> buku tersebut di toko buku. Ini seperti buku <a href="http://diveintopython3.org/">Dive Into Python</a>. Saya tidak tahu apakah ada penerbit buku di Indonesia seperti <a href="http://apress.com/">Apress</a>. Apakah memungkinkan di Indonesia jika tulisan kita lisensikan di bawah lisensi <a href="http://creativecommons.org/licenses/by-sa/3.0/"><em>Creative Common</em></a> tapi penerbit mau mencetaknya?</p>
<p>Dulu saat saya rajin ke Gramedia, saya sering menumpang membaca buku-buku komputer. Ada hal yang mengagetkan saya dari salah seorang penulis buku komputer Indonesia. Penulis ini banyak menulis buku komputer dan buku yang ditulis bukan buku terjemahan. Temanya meliputi elektronika dan bahasa pemrograman. Yang membuat saya kaget adalah tulisan yang ada di buku ini sudah saya baca semuanya di internet, dengan kata lain apa yang ada di buku-bukunya itu ada semua di internet, hanya saja berbeda bahasa. Ini bukan lagi kutipan, tapi kumpulan terjemahan halaman situs berbahasa Inggris ke bahasa Indonesia. Pantas saja buku komputer yang ditulisnya banyak sekali. Memang sekilas tidak ada yang salah, tapi seharusnya di buku tersebut di jelaskan bahwa tulisan bab sekian merupakan terjemahan dari halaman situs blablabla. Menurut saya mengambil referensi dari buku lain atau halaman situs itu tidak ada yang salah selama pengutip tidak menyalahi hak cipta penulis. Tapi ini menjadi tidak wajar jika banyaknya halaman yang diterjemahkan tanpa mengubah gaya penulisan. Buku-buku luar , seperti buku pemrograman Python atau HTML+CSS itu banyak sekali. Tapi mereka semua menulis dengan gaya yang berbeda dan mereka menyusun <em>chapter</em>-nya berbeda pula. Apakah penerbit Indonesia meloloskan buku seperti ini dengan mudah? Atau saya saja yang lebay? Dan juga kebanyakan buku komputer di Indonesia itu tidak di jaga kelanjutannya oleh penulisnya sendiri. Beberapa penerbit luar seperti O&#8217;reilly dan Apress menyediakan halaman resource tersendiri untuk buku yang diterbitkan, ini meliputi errata, halaman unduh dan bahkan penulisnya membuatkan situs khusus untuk buku tersebut sebagai wadah diskusi, saran dan kritik dari pembaca. Sepertinya berat juga jadi penulis *berpikir kembali sebelum menulis*.</p>
<p>Selain berkeinginan menulis, kenapa tiba-tiba juga ingin mengajar? Well, menulis itu mudah. Kita tidak langsung mengetahui apakah pembaca memahami atau tidak. Sedangkan dengan mengajar kita langsung bertatap muka, sehingga setidaknya bisa diketahui apakah penyimak memahami apa yang kita sampaikan atau tidak. Ada beberapa ide yang terpikir oleh saya dalam mengajar, antara lain:</p>
<ol>
<li>Jika saya mengajar yang berkaitan dengan bahasa pemrograman, saya ingin yang saya ajarkan nanti membuat kelompok, merencakan membuat suatu proyek sumber terbuka lalu mengunggahnya di repositori dengan sistem kontrol versi (seperti di github.com, code.google.com atau sf.net). Mereka akan menjalani siklus pengembangan aplikasi sumber terbuka. Jika hitungan mengajar materi pemrograman ini selama 6 bulan, maka cukup bagi mereka untuk merilis sampai beberapa versi stabil. Saya lihat belum ada (CMIIW) perguruan tinggi berbasis IT di Indonesia yang mempunyai repositori sistem kontrol versi sendiri seperti github atau sf.net. Padahal ini bisa menjadi pemicu mahasiswanya untuk berkarya dan berkontribusi di dunia aplikasi sumber terbuka.</li>
<li>Di kampus saya ada kompetisi membuat perangkat lunak, tapi saya tidak tahu bagaimana proses pengembangan di belakangnya. Terkait dengan point no. 1, pastinya juri dapat memantau proses pengembangannya, juri dapat mengetahui siapa programmer yang paling aktif meng-<em>commit</em>. Selain penilaian secara fungsionalitas dan kekreatifan ide, seharusnya aplikasi juga dinilai dari kualitas kode yang dibuat. Mungkin ini agak sulit bagi juri jika harus mereview kualitas kode, tapi bisa digunakan skrip yang membaca dari repositori untuk melihat frekuensi baris komentar, membaca seberapa banyak log commit, frekuensi keaktifan programmer dalam commit — seperti <em>Ohloh Analysis Summary</em>. Dan baiknya setiap aplikasi menyediakan unit testing, sehingga juri bisa langsung melihat seberapa banyak unit test mencangkup aspek fungsionalitas aplikasi.</li>
</ol>
<p>Ya ini hanya rencana yang saya ingin wujudkan, insyaallah.</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2010/02/05/rencana-menulis-buku-dan-mengajar/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kesuksesan, Kegagalan dan Tanggung Jawab</title>
		<link>http://gedex.web.id/archives/2010/01/18/kesuksesan-kegagalan-dan-tanggung-jawab/</link>
		<comments>http://gedex.web.id/archives/2010/01/18/kesuksesan-kegagalan-dan-tanggung-jawab/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 19:51:32 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[etc]]></category>

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

		<category><![CDATA[just FYI]]></category>

		<category><![CDATA[my life]]></category>

		<category><![CDATA[my opinion]]></category>

		<guid isPermaLink="false">http://gedex.web.id/?p=246</guid>
		<description><![CDATA[
Sejak pertengahan desember saya sudah tidak lagi bekerja di perusahaan. Saya sempat berpindah ke content provider juga, dan hanya empat hari saya bekerja. Lho kenapa? Jawabannya akan saya berikan nanti. Ada beberapa alasan yang membuat saya &#8220;untuk sementara ini&#8221; menjadi pekerja lepas saja. Sebelum memulai bercerita, kita flashback dulu di masa saat saya menjelang lulus [...]
]]></description>
			<content:encoded><![CDATA[<p>Sejak pertengahan desember saya sudah tidak lagi bekerja di perusahaan. Saya sempat berpindah ke <em>content provider</em> juga, dan hanya empat hari saya bekerja. Lho kenapa? Jawabannya akan saya berikan nanti. Ada beberapa alasan yang membuat saya <strong>&#8220;untuk sementara ini&#8221;</strong> menjadi pekerja lepas saja. Sebelum memulai bercerita, kita <em>flashback</em> dulu di masa saat saya menjelang lulus kuliah. Faktor pertama yang membuat saya ingin bekerja di suatu perusahaan adalah uang, tapi itu dulu, saat saya baru pertama kali ingin bekerja. Saya sempat mengalami masa luntang-lantung hanya dengan datang ke kampus, ngobrol bersama teman, dan sesekali mengoprek robot tanpa menghasilkan uang sama sekali. Saya mulai mengkesampingkan idealisme saya dan berencana bekerja di perusahaan saja. Tanpa pikir panjang tawaran yang ada di depan mata saat itu pun saya ambil. Jelas saat itu, alasan utama adalah karena uang. Selain alasan uang, tentunya saya juga ingin mencari pengalaman dan ilmu. Saat bekerja disuatu perusahaan, saya merasakan idealisme yang mulai luntur. Saya tidak pernah lagi berpikir tentang kualitas karena saat bekerja saya lebih dituntut oleh waktu. Saya tidak sempat lagi untuk mencoba-coba hal baru, menerapkan hal baru bahkan untuk menulis kode secara rapih dan <em>decoupling</em>. Saya mulai berpikir &#8220;kapan saya bisa maju jika hanya berkutat dengan hal seperti ini terus&#8221;. Saat bekerja diperusahaan, saya harus menerima apapun pekerjaan yang diberikan. Meskipun gaya menulis kode saya tidak sesuai, saya harus tetap menerima. Saat merapikan pekerjaan lama, saya harus memilih diantara pekerjaan saya tidak selesai sesuai waktu atau memaksakan gaya menulis dengan yang sudah ada.<br />
<span id="more-246"></span><br />
Akhirnya saya memutuskan untuk keluar dari pekerjaan saya. Tidak terpikir oleh sayapun akan bekerja dimana nanti, hanya saya tidak ingin <em>stack</em>. Saya masih ingin mencari ilmu lagi. Akhirnya untuk sementara saya putuskan bekerja lepas saja, toh saya masih bisa bereksperimen bebas. Jika Anda yakin dengan bekerja lepas dapat membuat Anda lebih maju sambil menuntut ilmu, Anda tidak sendiri karena saya berpikir yang sama dengan Anda. Tidak semua bekerja di perusahaan itu membuat <em>stack</em>, ada beberapa orang yang beruntung dapat bekerja sambil bereksperimen. Beberapa perusahaan ada yang menghasilkan produk sumber terbuka dimana mengharuskan pekerjanya berkontribusi di produk sumber terbuka tersebut. Setelah keluar dari satu perusahaan saya sempat berpindah ke perusahaan <em>content provider</em>. Kenapa hanya sampai empat hari? Baiklah, mungkin ini kesalahan saya. Kita tidak pernah tahu apakah tempat bekerja kita nantinya akan membuat kita nyaman atau tidak. Saya berinsiatif mengundurkan diri secepatnya, karena jika saat saya tak nyaman tentunya akan berpengaruh terhadap kinerja. Saya sadari jika ini terlalu egois dan idealis, OK itu salah saya.</p>
<p>Kembali ke <del datetime="2010-01-17T19:19:51+00:00">laptop</del> masa kuliah. Sejak duduk di bangku kuliah, saya ingin sekali berkontribusi dalam banyak hal, salah satunya yang belum kesampaian adalah membuat proyek sumber terbuka. Karena saya sudah mempunyai banyak waktu luang, saya mencoba belajar untuk membuat <a href="https://www.ohloh.net/accounts/gedex">proyek sumber terbuka</a>. Jangan takut dengan kualitas kode kita saat ini, karena seiring waktu jika Anda terus belajar dengan benar kualitas kode yang Anda hasilkan pasti akan meningkat. Kunci dalam proyek sumber terbuka adalah <em>release early, release often</em>. Jadi mulailah kontribusikan skrip sederhana Anda, jangan takut dengan bug-bug yang akan muncul nantinya. Saya percaya dengan kita banyak berkontribusi bagi banyak orang pekerjaan akan datang dengan sendirinya. Sambil menulis kode secara bebas, saya bisa memanfaatkan situs untuk <em>freelancer</em> yang melelang pekerjaan lepas.</p>
<p>Pada saat berada dalam kondisi seperti ini, saya terlalu terngiang dengan pikiran &#8220;Apakah saya telah gagal? Apakah saya bisa sukses dengan cara seperti ini? Apakah saya tidak bertanggung jawab dengan <strong>tidak bekerja tetap</strong>? Saya yakin, orang-orang dekat Anda akan bertanya &#8220;Bagaimana keluarga mu kelak nak?&#8221;. Saya tidak punya jawaban yang tepat dengan pertanyaan itu, karena hal itu butuh pembuktian dan belum terjadi. Pertanyaan seperti itu sebenarnya sama seperti &#8220;Bagaimana nanti kamu saat umur 40?&#8221; Tidak tahu bukan. Tapi saya punya rencana saat ini. Hehe.. jadi saya hanya bisa sebutkan rencana. Mari kita baca kembali paragraf ini dari awal, perhatikan kalimat &#8220;Apakah saya <strong>telah gagal</strong>?&#8221;. Ini menunjukkan suatu kejadian lampau. Ya, kejadian ini mungkin akan terulang lagi di masa depan, mungkin juga tidak. Lalu kalimat setelahnya &#8220;Apakah saya bisa sukses dengan cara seperti ini?&#8221;. Ini menunjukkan ketidakpastian mengenai sesuatu yang kita tempuh. Pernah mendengar kalimat &#8220;Gagal adalah suatu kejadian, sukses adalah jalan / cara&#8221;? Lalu apa kaitannya dengan tanggung jawab? Menurut saya, tanggung jawab disini adalah bagaimana strategi kita menghadapi kejadian gagal dan mencapai jalan sukses. Dan satu lagi, sukses itu relatif, bukan uang. Orang mempunyai perspektif yang berbeda mengenai sukses. Saya mempunyai gambaran yang mungkin sama dengan Anda tentang sukses. Saat kita mempunyai beberapa target kedepan dan kita bisa sukses mencapai target tersebut, bisa dikatakan kita telah sukses. Saat saya mempunyai target membuat proyek sumber terbuka dan belum tercapai, bisa dikatakan saya sedang menjalani cara sukses saya. Saat saya telah membuat proyek sumber terbuka, saya mempunyai target mempopulerkan dan terus mengembangkan proyek tersebut. Dan seterusnya target itu akan terus ada.</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2010/01/18/kesuksesan-kegagalan-dan-tanggung-jawab/feed/</wfw:commentRss>
		</item>
		<item>
		<title>svn:ignore yang menjengkelkan</title>
		<link>http://gedex.web.id/archives/2010/01/05/svnignore-yang-menjengkelkan/</link>
		<comments>http://gedex.web.id/archives/2010/01/05/svnignore-yang-menjengkelkan/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 05:17:22 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[coding]]></category>

		<category><![CDATA[just FYI]]></category>

		<category><![CDATA[my life]]></category>

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

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

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

		<guid isPermaLink="false">http://gedex.web.id/?p=237</guid>
		<description><![CDATA[
Saat melihat blog Pak Budi Rahardjo saya jadi terpacu untuk menulis kembali. Konten blog tidak perlu selalu berisi hal teknis yang memerlukan waktu untuk menulisnya, tapi bisa kondisi hari ini. Yup hari ini saya dijengkelkan dengan sistem kontrol versi Subversion. Saya mulai membiasakan pekerjaan dan proyek pribadi untuk dikontrol versinya sejak saya bekerja di SIG. [...]
]]></description>
			<content:encoded><![CDATA[<p>Saat melihat blog Pak Budi Rahardjo saya jadi terpacu untuk menulis kembali. Konten blog tidak perlu selalu berisi hal teknis yang memerlukan waktu untuk menulisnya, tapi bisa kondisi hari ini. Yup hari ini saya dijengkelkan dengan sistem kontrol versi Subversion. Saya mulai membiasakan pekerjaan dan proyek pribadi untuk dikontrol versinya sejak saya bekerja di SIG. Yang menjengkelkan dari Subversion adalah <em>exclude</em> berkas yang tidak perlu di rekam versinya. Dalam Subversion digunakan perintah <code>svn propedit svn:ignore</code> untuk mengabaikan berkas di direktori kerja kita. </p>
<p>Tapi apabila kita banyak menggunakan berkas konfigurasi yang terpisah di beberapa direktori dan juga berkas temporari yang dihasilkan aplikasi, pekerjaan ini menjadi menjengkelkan. Belum lagi pengguna Subversion yang melupakan hal ini dan meng-<em>commit</em> berkas yang kita abaikan. Lalu kita ulang lagi <code>svn rm</code> dan menggunakan <code>svn propedit svn:ignore</code> kembali. Apakah ada solusi untuk ini ? Atau gunakan sistem kontrol versi lainnya seperti <a href="http://git-scm.com/">Git</a>? Untuk Git, saya belum begitu paham. Tapi saya sudah coba gunakan <a href="http://github.com/">github</a> untuk <a href="http://github.com/gedex/World-University-Names-Database/">skrip sederhana saya</a> sekaligus untuk belajar. Jika saya tertarik, saya akan pindahkan <a href="http://code.google.com/u/gedex.adc/">proyek iseng saya</a> ke <a href="http://github.com/gedex/">github</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2010/01/05/svnignore-yang-menjengkelkan/feed/</wfw:commentRss>
		</item>
		<item>
		<title>World University Names Database</title>
		<link>http://gedex.web.id/archives/2009/12/10/world-university-names-database/</link>
		<comments>http://gedex.web.id/archives/2009/12/10/world-university-names-database/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 17:57:59 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[coding]]></category>

		<category><![CDATA[tips & tricks]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://gedex.web.id/?p=221</guid>
		<description><![CDATA[
I&#8217;ve been searching for university names database, but i didn&#8217;t find complete database that covers at least universities in 240 countries. I decide to crawl university names in LinkedIn and Webometric, since both give university names based on country code. If you are in hurry to get university names database, you can download them here. [...]
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been searching for university names database, but i didn&#8217;t find complete database that covers at least universities in 240 countries. I decide to crawl university names in LinkedIn and Webometric, since both give university names based on country code. If you are in hurry to get university names database, you can download them <a href="http://github.com/gedex/World-University-Names-Database/">here</a>. If you are interested to know how to crawl the LinkedIn and Webometric university names data and build the database, then hang on with me.</p>
<p>I  used Python to crawl LinkedIn and Webometric. It was accidental, when i edit my profile on my LinkedIn, firebug shows ajax get request to populate university names on select element. So here is my python code to get LinkedIn university names based on country code:<br />
<span id="more-221"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">xml</span>.<span style="color: black;">dom</span> <span style="color: #ff7700;font-weight:bold;">import</span> minidom
<span style="color: #ff7700;font-weight:bold;">import</span> MySQLdb
&nbsp;
WS_URL = <span style="color: #483d8b;">'http://www.linkedin.com/wsSchoolDir?q=&amp;country=%s'</span>
DB_HOST = <span style="color: #483d8b;">'localhost'</span>
DB_NAME = <span style="color: #483d8b;">'bell'</span>
DB_USER = <span style="color: #483d8b;">'root'</span>
DB_PASSWD = <span style="color: #483d8b;">'123456'</span>
TBL_COUNTRY = <span style="color: #483d8b;">'countries'</span>
COUNTRY_ID = <span style="color: #483d8b;">'id'</span>
COUNTRY_CODE = <span style="color: #483d8b;">'iso2'</span>
TBL_SCHOOL = <span style="color: #483d8b;">'universities'</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> buildSchools<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    conn = MySQLdb.<span style="color: black;">connect</span><span style="color: black;">&#40;</span>
        host = DB_HOST, 
        <span style="color: #dc143c;">user</span> = DB_USER, 
        passwd = DB_PASSWD,
        db = DB_NAME,
        charset = <span style="color: #483d8b;">'utf8'</span>
    <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Creating table %sn&quot;</span> <span style="color: #66cc66;">%</span> TBL_SCHOOL
    cursor = conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;DROP TABLE IF EXISTS %s&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>TBL_SCHOOL<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;CREATE TABLE %s(`id` INT(11) NOT NULL AUTO_INCREMENT,`country_id` INT(5) NOT NULL,`name` VARCHAR(150) NOT NULL, PRIMARY KEY (`id`), KEY `country_id` (`country_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>TBL_SCHOOL<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Get countries from table %snn&quot;</span> <span style="color: #66cc66;">%</span> TBL_COUNTRY
    cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT %s, %s FROM %s WHERE 1&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>COUNTRY_ID, COUNTRY_CODE, TBL_COUNTRY<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    countries = cursor.<span style="color: black;">fetchall</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Trying to build schools..n&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> country <span style="color: #ff7700;font-weight:bold;">in</span> countries:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Populate schools in %sn&quot;</span> <span style="color: #66cc66;">%</span> country<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
        schools = getSchools<span style="color: black;">&#40;</span>country<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> school <span style="color: #ff7700;font-weight:bold;">in</span> schools:
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>school.<span style="color: black;">getAttribute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'v'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">and</span> school.<span style="color: black;">getAttribute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'v'</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">!</span>= <span style="color: #483d8b;">'0'</span>:
                univ = school.<span style="color: black;">childNodes</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>.<span style="color: black;">data</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'&quot;'</span>, <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\&quot;</span>'</span><span style="color: black;">&#41;</span>
                cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #483d8b;">'INSERT INTO %s VALUES(NULL, %d, &quot;%s&quot;)'</span><span style="color: #483d8b;">''</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>TBL_SCHOOL, country<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, univ<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;nEnd building schools.&quot;</span>
    cursor.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> getSchools<span style="color: black;">&#40;</span><span style="color: #dc143c;">code</span><span style="color: black;">&#41;</span>:
    dom = minidom.<span style="color: black;">parse</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">urllib</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>WS_URL <span style="color: #66cc66;">%</span> <span style="color: #dc143c;">code</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> dom.<span style="color: black;">getElementsByTagName</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'s'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
    buildSchools<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>I got 9,229 university names from LinkedIn. In case you are curious how the code operates, it just iterate country code (2 digit code) in my countries table and requests the web service URL based on that country code. The web service will return XML containing universities name and, i guest, their id. The code then parse the XML, iterates each university names and insert it to table universities. Webometric is more complete than LinkedIn, I got 16,773 university names. Webometric provides catalogue of world universities consisting html pages of university names based on country code. Basically, crawling proccess is the same, request each html page of country and parse the university name and, this is the bonus, university url. Each country might be more than one page consisting 50 universities per page. This time i used SGMLParser to parse html page. So here&#8217;s the code:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">sgmllib</span> <span style="color: #ff7700;font-weight:bold;">import</span> SGMLParser
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">urllib2</span> <span style="color: #ff7700;font-weight:bold;">import</span> urlopen, Request, BaseHandler
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">httplib</span> <span style="color: #ff7700;font-weight:bold;">import</span> BadStatusLine
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">import</span> MySQLdb
&nbsp;
WS_URL = <span style="color: #483d8b;">'http://www.webometrics.info/university_by_country.asp?country=%s'</span>
DB_HOST = <span style="color: #483d8b;">'localhost'</span>
DB_NAME = <span style="color: #483d8b;">'bell'</span>
DB_USER = <span style="color: #483d8b;">'root'</span>
DB_PASSWD = <span style="color: #483d8b;">'123456'</span>
TBL_COUNTRY = <span style="color: #483d8b;">'countries'</span>
COUNTRY_ID = <span style="color: #483d8b;">'id'</span>
COUNTRY_CODE = <span style="color: #483d8b;">'iso2'</span>
TBL_SCHOOL = <span style="color: #483d8b;">'webometric_universities'</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> UnivParser<span style="color: black;">&#40;</span>SGMLParser<span style="color: black;">&#41;</span>:
    domain = <span style="color: #483d8b;">'http://www.webometrics.info/'</span>
    path = <span style="color: #483d8b;">'/university_by_country.asp?country=%s'</span>
    univ = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    errorURL = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
    insideRowData = <span style="color: #ff4500;">0</span>
    insideColOfUnivName = <span style="color: #ff4500;">0</span>
    passedColOfUnivName = <span style="color: #ff4500;">0</span>
    insideColOfUnivLink = <span style="color: #ff4500;">0</span>
    insideUnivLink = <span style="color: #ff4500;">0</span>
    currentUniv = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
&nbsp;
    sleepCount = <span style="color: #ff4500;">1</span><span style="color: #66cc66;">;</span>
    insideColNav = <span style="color: #ff4500;">0</span>
    insideLinkOfNav = <span style="color: #ff4500;">0</span>
    currentLinkOfNav = <span style="color: #483d8b;">''</span>
&nbsp;
    nextPage = <span style="color: #483d8b;">''</span>
    pageNumber = <span style="color: #ff4500;">1</span>
    endOfPage = <span style="color: #ff4500;">0</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        SGMLParser.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, verbose=<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> parse<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, url<span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">univ</span> = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">pageNumber</span> = <span style="color: #ff4500;">1</span> 
        <span style="color: #008000;">self</span>.<span style="color: black;">goToNextPage</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">univ</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> goToNextPage<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, url<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;crawl page %d&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: #008000;">self</span>.<span style="color: black;">pageNumber</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">insideRowData</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivName</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">passedColOfUnivName</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivLink</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">insideUnivLink</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">currentUniv</span> = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">insideColNav</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">insideLinkOfNav</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">currentLinkOfNav</span> = <span style="color: #483d8b;">''</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">nextPage</span> = <span style="color: #483d8b;">''</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">endOfPage</span> = <span style="color: #ff4500;">0</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">try</span>:
            req = urlopen<span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">IOError</span>, e:
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Oops, we got HTTPError.&quot;</span>
            reason = <span style="color: #483d8b;">&quot;&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">hasattr</span><span style="color: black;">&#40;</span>e, <span style="color: #483d8b;">'reason'</span><span style="color: black;">&#41;</span>:
                reason = <span style="color: #483d8b;">'Failed to reach a server. Reason: %d'</span> <span style="color: #66cc66;">%</span> e.<span style="color: black;">reason</span>
            <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">hasattr</span><span style="color: black;">&#40;</span>e, <span style="color: #483d8b;">'code'</span><span style="color: black;">&#41;</span>:
                reason = <span style="color: #483d8b;">'The server couldn'</span>t fulfill the request. <span style="color: black;">Error</span> <span style="color: #dc143c;">code</span>: <span style="color: #66cc66;">%</span>d<span style="color: #483d8b;">' % e.code
            print reason
            self.errorURL.append({'</span>url<span style="color: #483d8b;">': url, '</span>reason<span style="color: #483d8b;">': reason})
            return
        except BadStatusLine, e:
            reason = &quot;&quot;
            if hasattr(e, '</span>reason<span style="color: #483d8b;">'):
                reason = '</span>Failed to reach a server. <span style="color: black;">Reason</span>: <span style="color: #66cc66;">%</span>d<span style="color: #483d8b;">' % e.reason
            elif hasattr(e, '</span><span style="color: #dc143c;">code</span><span style="color: #483d8b;">'):
                reason = '</span>The server couldn<span style="color: #483d8b;">'t fulfill the request. Error code: %d'</span> <span style="color: #66cc66;">%</span> e.<span style="color: #dc143c;">code</span>
            <span style="color: #ff7700;font-weight:bold;">print</span> reason
            <span style="color: #008000;">self</span>.<span style="color: black;">errorURL</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#123;</span><span style="color: #483d8b;">'url'</span>: url, <span style="color: #483d8b;">'reason'</span>: reason<span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span>
        <span style="color: #ff7700;font-weight:bold;">finally</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">sleepCount</span> = <span style="color: #ff4500;">1</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">feed</span><span style="color: black;">&#40;</span>req.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        req.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">nextPage</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">goToNextPage</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">domain</span> + <span style="color: #008000;">self</span>.<span style="color: black;">nextPage</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> __sleep<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0.5</span> <span style="color: #66cc66;">*</span> <span style="color: #008000;">self</span>.<span style="color: black;">sleepCount</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> getErrorURL<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">errorURL</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> start_tr<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, attrs<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideRowData</span> == <span style="color: #ff4500;">0</span>:
            <span style="color: #ff7700;font-weight:bold;">for</span> name, val <span style="color: #ff7700;font-weight:bold;">in</span> attrs:
                <span style="color: #ff7700;font-weight:bold;">if</span> name == <span style="color: #483d8b;">'class'</span> <span style="color: #ff7700;font-weight:bold;">and</span> val == <span style="color: #483d8b;">'nav6a'</span>:
                    <span style="color: #008000;">self</span>.<span style="color: black;">insideRowData</span> = <span style="color: #ff4500;">1</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> start_td<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, attrs<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideRowData</span>:
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">passedColOfUnivName</span> == <span style="color: #ff4500;">0</span>: 
                <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivName</span> = <span style="color: #ff4500;">1</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivLink</span> = <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>: <span style="color: #808080; font-style: italic;"># inside col of nav</span>
            <span style="color: #ff7700;font-weight:bold;">for</span> name, val <span style="color: #ff7700;font-weight:bold;">in</span> attrs:
                <span style="color: #ff7700;font-weight:bold;">if</span> name == <span style="color: #483d8b;">'class'</span> <span style="color: #ff7700;font-weight:bold;">and</span> val == <span style="color: #483d8b;">'nav6a'</span>:
                    <span style="color: #008000;">self</span>.<span style="color: black;">insideColNav</span> = <span style="color: #ff4500;">1</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> start_a<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, attrs<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivName</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">insideUnivLink</span> = <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideColNav</span>:
            <span style="color: #ff7700;font-weight:bold;">for</span> name, val <span style="color: #ff7700;font-weight:bold;">in</span> attrs:
                <span style="color: #ff7700;font-weight:bold;">if</span> name == <span style="color: #483d8b;">'class'</span> <span style="color: #ff7700;font-weight:bold;">and</span> val == <span style="color: #483d8b;">'nav6a'</span>:
                    <span style="color: #008000;">self</span>.<span style="color: black;">insideLinkOfNav</span> = <span style="color: #ff4500;">1</span>
                <span style="color: #ff7700;font-weight:bold;">if</span> name == <span style="color: #483d8b;">'href'</span>:
                    <span style="color: #008000;">self</span>.<span style="color: black;">currentLinkOfNav</span> = val
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> end_tr<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideRowData</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">insideRowData</span> = <span style="color: #ff4500;">0</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">passedColOfUnivName</span> = <span style="color: #ff4500;">0</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">univ</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span> <span style="color: #008000;">self</span>.<span style="color: black;">currentUniv</span> <span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">currentUniv</span> = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> end_td<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideRowData</span>:
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivName</span>:
                <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivName</span> = <span style="color: #ff4500;">0</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">passedColOfUnivName</span> = <span style="color: #ff4500;">1</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivLink</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideColNav</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">insideColNav</span> = <span style="color: #ff4500;">0</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> end_a<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span>  <span style="color: #008000;">self</span>.<span style="color: black;">insideUnivLink</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">insideUnivLink</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideLinkOfNav</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">insideLinkOfNav</span> = <span style="color: #ff4500;">0</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">currentLinkOfNav</span> = <span style="color: #483d8b;">''</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> handle_data<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, data<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideUnivLink</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">currentUniv</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'name'</span><span style="color: black;">&#93;</span> = <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span> data.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'&quot;'</span>, <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\&quot;</span>'</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'latin-1'</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">self</span>.<span style="color: black;">currentUniv</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'name'</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideColOfUnivLink</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">currentUniv</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'link'</span><span style="color: black;">&#93;</span> = u<span style="color: #483d8b;">'%s'</span> <span style="color: #66cc66;">%</span> data.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">insideLinkOfNav</span> <span style="color: #ff7700;font-weight:bold;">and</span> data.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> == <span style="color: #483d8b;">'next'</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #008000;">self</span>.<span style="color: black;">nextPage</span> == <span style="color: #483d8b;">''</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">nextPage</span> = <span style="color: #008000;">self</span>.<span style="color: black;">currentLinkOfNav</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">pageNumber</span> += <span style="color: #ff4500;">1</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> buildSchools<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    conn = MySQLdb.<span style="color: black;">connect</span><span style="color: black;">&#40;</span>
        host = DB_HOST, 
        <span style="color: #dc143c;">user</span> = DB_USER, 
        passwd = DB_PASSWD,
        db = DB_NAME,
        charset = <span style="color: #483d8b;">'latin1'</span>
    <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Creating table %sn&quot;</span> <span style="color: #66cc66;">%</span> TBL_SCHOOL
    cursor = conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;DROP TABLE IF EXISTS %s&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>TBL_SCHOOL<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;CREATE TABLE %s(`id` INT(11) NOT NULL AUTO_INCREMENT,`country_id` INT(5) NOT NULL,`name` VARCHAR(150) NOT NULL, `url` VARCHAR(150) NOT NULL, PRIMARY KEY (`id`), KEY `country_id` (`country_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>TBL_SCHOOL<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Get countries from table %snn&quot;</span> <span style="color: #66cc66;">%</span> TBL_COUNTRY
    cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT %s, %s FROM %s WHERE 1&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>COUNTRY_ID, COUNTRY_CODE, TBL_COUNTRY<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    countries = cursor.<span style="color: black;">fetchall</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    w = UnivParser<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Trying to build schools from webometric..n&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> country <span style="color: #ff7700;font-weight:bold;">in</span> countries:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;nPopulate schools in %s&quot;</span> <span style="color: #66cc66;">%</span> country<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
        schools = w.<span style="color: black;">parse</span><span style="color: black;">&#40;</span>WS_URL <span style="color: #66cc66;">%</span> country<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> school <span style="color: #ff7700;font-weight:bold;">in</span> schools:
            cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #483d8b;">'INSERT INTO %s VALUES(NULL, %d, &quot;%s&quot;, &quot;%s&quot;)'</span><span style="color: #483d8b;">''</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>TBL_SCHOOL, country<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, school<span style="color: black;">&#91;</span><span style="color: #483d8b;">'name'</span><span style="color: black;">&#93;</span>, school<span style="color: black;">&#91;</span><span style="color: #483d8b;">'link'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;nEnd building schools.&quot;</span>
&nbsp;
    <span style="color: #483d8b;">&quot;&quot;&quot; print error &quot;&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> err <span style="color: #ff7700;font-weight:bold;">in</span> w.<span style="color: black;">getErrorURL</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;%sn&quot;</span> <span style="color: #66cc66;">%</span> err
&nbsp;
    w.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    cursor.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> insertSchools<span style="color: black;">&#40;</span>url, cc<span style="color: black;">&#41;</span>:
    conn = MySQLdb.<span style="color: black;">connect</span><span style="color: black;">&#40;</span>
        host = DB_HOST, 
        <span style="color: #dc143c;">user</span> = DB_USER, 
        passwd = DB_PASSWD,
        db = DB_NAME,
        charset = <span style="color: #483d8b;">'latin1'</span>
    <span style="color: black;">&#41;</span>
    cursor = conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;SELECT %s FROM %s WHERE iso2 = '%s'&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>COUNTRY_ID, TBL_COUNTRY, cc.<span style="color: black;">upper</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    country = cursor.<span style="color: black;">fetchall</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    w = UnivParser<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    schools = w.<span style="color: black;">parse</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> school <span style="color: #ff7700;font-weight:bold;">in</span> schools:
        cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #483d8b;">'INSERT INTO %s VALUES(NULL, %d, &quot;%s&quot;, &quot;%s&quot;)'</span><span style="color: #483d8b;">''</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>TBL_SCHOOL, country<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, school<span style="color: black;">&#91;</span><span style="color: #483d8b;">'name'</span><span style="color: black;">&#93;</span>, school<span style="color: black;">&#91;</span><span style="color: #483d8b;">'link'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;nEnd building schools.&quot;</span>
&nbsp;
    <span style="color: #483d8b;">&quot;&quot;&quot; print error &quot;&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> err <span style="color: #ff7700;font-weight:bold;">in</span> w.<span style="color: black;">getErrorURL</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;%sn&quot;</span> <span style="color: #66cc66;">%</span> err
&nbsp;
    w.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    cursor.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
    buildSchools<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Sorry, if the code is messed up. Since i didn&#8217;t care about error handling, you might encounter some problems when running the scripts.</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2009/12/10/world-university-names-database/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Seminar Go Open Source di SMA Sudirman Bekasi</title>
		<link>http://gedex.web.id/archives/2009/12/05/seminar-go-open-source-di-sma-sudirman-bekasi/</link>
		<comments>http://gedex.web.id/archives/2009/12/05/seminar-go-open-source-di-sma-sudirman-bekasi/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 12:31:16 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[bekasi problems]]></category>

		<category><![CDATA[just FYI]]></category>

		<category><![CDATA[my life]]></category>

		<guid isPermaLink="false">http://gedex.web.id/?p=216</guid>
		<description><![CDATA[
Alhamdulillah telah selesai juga acara seminar Go Open Source di SMA Sudirman Bekasi. Saya sangat beruntung dapat diberi kesempatan sebagai pembicara di acara ini. Basically, para peserta yang notabene adalah siswa/siswi pangsud sangat antusias mengikuti acara, terlebih saat seksi tanya jawab. Mereka melontarkan banyak pertanyaan tentang &#8220;apa itu sih Linux?&#8221; dan &#8220;seperti apa itu sih [...]
]]></description>
			<content:encoded><![CDATA[<p>Alhamdulillah telah selesai juga acara seminar Go Open Source di SMA Sudirman Bekasi. Saya sangat beruntung dapat diberi kesempatan sebagai pembicara di acara ini. Basically, para peserta yang notabene adalah siswa/siswi pangsud sangat antusias mengikuti acara, terlebih saat seksi tanya jawab. Mereka melontarkan banyak pertanyaan tentang &#8220;apa itu sih Linux?&#8221; dan &#8220;seperti apa itu sih open source?&#8221;. Saya harap mereka akan terus terpacu untuk mengetahui &#8220;apa itu Linux dan apa itu open source&#8221;. Terima kasih untuk rekan-rekan di pangsud atas kerja samanya, komunitas <a href="http://bekasi.linux.or.id">BELL</a> atas jerih payahnya dan IGOS Center Bekasi atas usahanya untuk memasyaratkan open source. Well, a picture is worth a thousand words, tapi sayangnya saya tidak mengkopi satu photo pun, mungkin akan menyusul.</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2009/12/05/seminar-go-open-source-di-sma-sudirman-bekasi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Saatnya Tembak dan Maju</title>
		<link>http://gedex.web.id/archives/2009/12/05/saatnya-tembak-dan-maju/</link>
		<comments>http://gedex.web.id/archives/2009/12/05/saatnya-tembak-dan-maju/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 20:20:13 +0000</pubDate>
		<dc:creator>gedex</dc:creator>
		
		<category><![CDATA[etc]]></category>

		<category><![CDATA[my life]]></category>

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

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

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

		<guid isPermaLink="false">http://gedex.web.id/?p=213</guid>
		<description><![CDATA[
He.. sudah lama tidak menulis di blog ini. What&#8217;s wrong? Well, kalau dibilang sibuk banget, sebenarnya juga tidak. Tapi kerjaan, alhamdulillah, ada terus dan waktu luang yang ada sulit dialokasikan untuk menulis ataupun mengoprek. Hehe.. itu sama saja sibuk ya. Sebenarnya juga tidak, karena dalam sehari pasti ada waktu luang yang &#8220;masih&#8221; bisa dimanfaatkan untuk [...]
]]></description>
			<content:encoded><![CDATA[<p>He.. sudah lama tidak menulis di blog ini. What&#8217;s wrong? Well, kalau dibilang sibuk banget, sebenarnya juga tidak. Tapi kerjaan, alhamdulillah, ada terus dan waktu luang yang ada sulit dialokasikan untuk menulis ataupun mengoprek. Hehe.. itu sama saja sibuk ya. Sebenarnya juga tidak, karena dalam sehari pasti ada waktu luang yang &#8220;masih&#8221; bisa dimanfaatkan untuk menulis dan mengoprek. Berarti disini ada faktor lain yang menyebabkan si waktu luang tidak teralokasikan dengan baik. Ya, tepat sekali, karena apa? Benar sekali tebakan Anda, malas telah menurunkan produktifitas. Apakah saya malas selalu? Tentu tidak, saya juga mempunyai semangat untuk mempelajari teknologi terbaru dan saya senang mengoprek apa yang saya ingin ketahui. Dalam hal ini kondisi saya sedang tidak <em>in</em>.</p>
<p>Saya teringat oleh tulisan Joel Spolsky yang berjudul <a href="http://www.joelonsoftware.com/articles/fog0000000339.html">Fire and Motion</a>. Ada saat dimana programmer berada dalam fase tidak produktif dan tidak tahu kapan dapat kembali ke masa produktifnya. Seperti halnya orang diet, yang hanya dapat sementara dan kembali ke pola makan biasanya. Dia tidak tahu fase itu. Memang benar apa kata si Joel, seperti ada batu besar di otak kita yang sulit untuk menggulirkannya atau malah menunggu batu itu bergulir dengan sendirinya. Batu diam akan cenderung diam. Namun jika telah berada dalam pergerakan itu, sebaiknya yang perlu dipertahankan adalah pergerakannya, bahkan lebih dipercepat akan sangat bagus. Seperti dibilang Joel, dalam strategi perang apalagi kita hanya diam, maka musuh akan membrondongi kita. Well, saatnya saya mulai tembak Anda dan bergerak maju (Cover me! I&#8217;ll move to that bridge and shoot that bastard).</p>
]]></content:encoded>
			<wfw:commentRss>http://gedex.web.id/archives/2009/12/05/saatnya-tembak-dan-maju/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
