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

<channel>
	<title>Catatan riset Yodi Aditya</title>
	<atom:link href="http://re.web.id/feed/" rel="self" type="application/rss+xml" />
	<link>http://re.web.id</link>
	<description>Python, PHP, High load, Server dan Teknologi Web terbaru</description>
	<lastBuildDate>Sat, 28 Jan 2012 12:52:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Browsing Blackberry Bold dengan TelkomselFlash</title>
		<link>http://re.web.id/browsing-blackberry-bold-dengan-telkomselflash/</link>
		<comments>http://re.web.id/browsing-blackberry-bold-dengan-telkomselflash/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 12:52:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sistem]]></category>
		<category><![CDATA[blackberry internet telkomselflash]]></category>
		<category><![CDATA[internetat blackberry telkomselflash]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=62</guid>
		<description><![CDATA[Semula saya pikir untuk internet-an di Blackberry dengan kartu Halo, di-haruskan dengan berlangganan BIS. Ternyata, tidak begitu. Saya iseng2x menggunakan kartu Halo yang sudah berlangganan Internet TelkomselFlash di Blackberry Bold 9800. Dengan mengubah settings di Options -> Lalu search &#8220;tcp&#8221; &#8230; <a href="http://re.web.id/browsing-blackberry-bold-dengan-telkomselflash/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Semula saya pikir untuk internet-an di Blackberry dengan kartu Halo, di-haruskan dengan berlangganan BIS. Ternyata, tidak begitu. Saya iseng2x menggunakan kartu Halo yang sudah berlangganan Internet TelkomselFlash di Blackberry Bold 9800. Dengan mengubah settings di Options -> Lalu search &#8220;tcp&#8221; supaya melihat opsi TCP/IP.</p>
<p>Disana di-set :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apn: internet<br />
username: <br />
password:</div></td></tr></tbody></table></div>
<p>Save lalu open Browser. Yap! sekarang bisa surfing website dengan telkomselflash di Blackberry.</p>
<p>Baca artikel berikut untuk menjadikan <a href="http://yodi.biz/2012/01/28/blackberry-as-usb-modem-connect-into-internet-wvdial-on-ubuntu-with-barry/">Blackberry sebagai USB modem di Ubuntu</a></p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/browsing-blackberry-bold-dengan-telkomselflash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips git menampilkan branch pada console / terminal ubuntu</title>
		<link>http://re.web.id/tips-git-menampilkan-branch-pada-console-terminal-ubuntu/</link>
		<comments>http://re.web.id/tips-git-menampilkan-branch-pada-console-terminal-ubuntu/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 02:41:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sistem]]></category>
		<category><![CDATA[git branch status]]></category>
		<category><![CDATA[git branch terminal]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=52</guid>
		<description><![CDATA[Ketika bekerja dengan beberapa git project, seringkali kita lupa sedang berada di branch mana. Apakah sedang di branch master, experimental, testing atau custom ? Kadang kita juga lupa untuk selalu melakukan &#8220;git branch&#8221; untuk melihat branch yang aktif. Solusi untuk &#8230; <a href="http://re.web.id/tips-git-menampilkan-branch-pada-console-terminal-ubuntu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ketika bekerja dengan beberapa git project, seringkali kita lupa sedang berada di branch mana. Apakah sedang di branch master, experimental, testing atau custom ? Kadang kita juga lupa untuk selalu melakukan &#8220;git branch&#8221; untuk melihat branch yang aktif.</p>
<p>Solusi untuk masalah ini adalah dengan menampilkan status branch pada console / terminal secara otomatis.<br />
Saya menggunakan Ubuntu 11.10 Oneiric dalam contoh ini. Untuk menampilkan branch pada console :<br />
<span id="more-52"></span><br />
1. Edit ~/.bashrc</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># source /etc/bash_completion.d/git<br />
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w $(__git_ps1 &quot;(%s)&quot;)$ '</div></td></tr></tbody></table></div>
<p>Or with Color :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w $(__git_ps1 &quot;[\[\e[34;1m\]%s\[\e[0m\]]&quot;)$ '</div></td></tr></tbody></table></div>
<p>2. Reload terminal<br />
Buka terminal baru untuk me-reload konfigurasi atau</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">source ~/.bashrc</div></td></tr></tbody></table></div>
<p>3. Testing<br />
Coba masuk ke folder repository git dan anda akan mendapatkan status branch</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ubuntu@ubuntu:~/htdocs/software/vim-pydjango (master)</div></td></tr></tbody></table></div>
<p>Bila anda menggunakan VIM, maka patut mencoba <a href="https://github.com/yodiaditya/vim-pydjango">vim-pydjango</a> yang support dengan git, python, django, HAML dan lainnya <img src='http://re.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/tips-git-menampilkan-branch-pada-console-terminal-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mengenal Branch di Github</title>
		<link>http://re.web.id/mengenal-branch-di-github/</link>
		<comments>http://re.web.id/mengenal-branch-di-github/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 06:13:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sistem]]></category>
		<category><![CDATA[branch git]]></category>
		<category><![CDATA[membuat branch github]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=48</guid>
		<description><![CDATA[Ketika kita men-develop applikasi menggunakan git, tentu secara default kita menggunakan master sebagai repository utama. Pada kebanyakan kasus ketika developing, kita menambahkan fitur2x / perubahan yang bersifat untuk &#8220;testing&#8221;. Namun, perubahan tersebut tidak ingin di-commit ke master. Pada kondisi inilah &#8230; <a href="http://re.web.id/mengenal-branch-di-github/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ketika kita men-develop applikasi menggunakan git, tentu secara default kita menggunakan master sebagai repository utama. Pada kebanyakan kasus ketika developing, kita menambahkan fitur2x / perubahan yang bersifat untuk &#8220;testing&#8221;. Namun, perubahan tersebut tidak ingin di-commit ke master. Pada kondisi inilah kita membutuhkan branch.</p>
<p>Branch adalah repository yang berbeda dengan master dan independen. Kia bisa mem-publish repository branch ini untuk di-clone oleh orang lain. Selain itu, ketika perubahan di branch sudah &#8220;layak&#8221; dimasukkan ke dalam master repo, maka kita melakukan &#8220;merge&#8221; alias penggabungan 2 repositori.<br />
<span id="more-48"></span><br />
Silahkan buka terminal / console anda dan masuk ke folder master repo.</p>
<p><strong>1. Membuat branch baru</strong><br />
Branch baru dapat dibuat dengan perintah &#8220;git branch &#8221; semisal :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git branch experimental</div></td></tr></tbody></table></div>
<p>Lalu kita akan switch dari master ke testing dengan &#8220;git checkout &#8221; semisal :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git checkout experimental</div></td></tr></tbody></table></div>
<p>Kita akan membuat Branch baru sekaligus switch ke branch tersebut.</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git checkout -b experimental</div></td></tr></tbody></table></div>
<p><strong>2. Check branch</strong><br />
Kita cek jumlah branch dan sedang di branch mana dengan :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git branch</div></td></tr></tbody></table></div>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">* experimental<br />
master</div></td></tr></tbody></table></div>
<p><strong>3. Rebase</strong><br />
Ketika bekerja di branch &#8220;experimental&#8221;, ternyata ada perubahan di branch &#8220;master&#8221;. Kita ingin branch &#8220;experimental&#8221; update dengan perubahan di master. Maka kita perlu melakukan &#8220;rebase&#8221; :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git rebase master</div></td></tr></tbody></table></div>
<p>Dalam menggunakan Github, kita akan mengenal lokal dan remote. Lokal adalah repo yang ada di komputer kita. Sedangkan remote adalah repo yang ada di-server. Ketika kita mem-create branch di lokal, maka kita perlu mem-&#8221;pull&#8221; ke branch remote agar orang lain bisa mem-clone dari server.</p>
<p>Kita dapat &#8220;pulling&#8221; branch lokal ke remote dengan cara :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git push origin experimental</div></td></tr></tbody></table></div>
<p>Dalam posisi lainnya, kita hendak mem-clone branch dari remote server. Maka ini dapat dilakukan dengan cara :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git fetch origin [remote-branch]:[lokal-branch]</div></td></tr></tbody></table></div>
<p><strong>4. Menggabungkan Branch</strong><br />
Ketika perubahan branch di-anggap perlu dimasukkan ke master, maka kita menggunakan &#8220;merge&#8221;.<br />
Pertama, kita switch ke master dengan :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git checkout master</div></td></tr></tbody></table></div>
<p>Bila hendak membandingkan &#8220;changes&#8221; yang akan di-merge :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git diff master experimental</div></td></tr></tbody></table></div>
<p><strong>5. Delete branch</strong><br />
Menghapus branch yang sudah di-merge :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git branch -d experimental</div></td></tr></tbody></table></div>
<p>Menghapus branch yang belum di-merge :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git branch -D experimental</div></td></tr></tbody></table></div>
<p>Referensi :<br />
<a href="http://help.github.com/git-cheat-sheets/">http://help.github.com/git-cheat-sheets/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/mengenal-branch-di-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solve Permission denied (publickey). fatal: The remote end hung up unexpectedly</title>
		<link>http://re.web.id/solve-permission-denied-publickey-fatal-the-remote-end-hung-up-unexpectedly/</link>
		<comments>http://re.web.id/solve-permission-denied-publickey-fatal-the-remote-end-hung-up-unexpectedly/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 21:20:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sistem]]></category>
		<category><![CDATA[github Permission denied]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=46</guid>
		<description><![CDATA[After upgrading my Ubuntu into 11.10 ( Oneiric ), then i start to develop my application on Github local folder. When i push several commit, suddenly i got this kind of error : 12Permission denied (publickey). fatal: The remote end &#8230; <a href="http://re.web.id/solve-permission-denied-publickey-fatal-the-remote-end-hung-up-unexpectedly/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After upgrading my Ubuntu into 11.10 ( Oneiric ), then i start to develop my application on Github local folder. When i push several commit, suddenly i got this kind of error :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Permission denied (publickey).<br />
fatal: The remote end hung up unexpectedly</div></td></tr></tbody></table></div>
<p>I feel have correct configuration and there should be no error. Until i realize that my SSH keys for Github was deleted with the past OS. <img src='http://re.web.id/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>So, i start to generate ssh-key and add into Github.</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mkdir ~/.ssh<br />
chmod 700 ~/.ssh<br />
ssh-keygen -t rsa<br />
cat ~/.ssh/id_rsa.pub</div></td></tr></tbody></table></div>
<p>Copy to SSH Key on Github Account. Then, i start configuring my local github profiles :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">git config --global user.name &quot;My Name&quot;<br />
git config --global user.email my-email<br />
git config --global github.user yodiaditya<br />
git config --global github.token mytoken</div></td></tr></tbody></table></div>
<p>Feel embarassing that i forgot about using brand new Ubuntu Oneiric <img src='http://re.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/solve-permission-denied-publickey-fatal-the-remote-end-hung-up-unexpectedly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash replacing string inside text files using SED command line Ubuntu</title>
		<link>http://re.web.id/bash-replacing-string-inside-text-files-using-sed-command-line-ubuntu/</link>
		<comments>http://re.web.id/bash-replacing-string-inside-text-files-using-sed-command-line-ubuntu/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 11:28:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sistem]]></category>
		<category><![CDATA[bash replacing text files]]></category>
		<category><![CDATA[sed]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=41</guid>
		<description><![CDATA[This is mostly happen when we have many configuration or text files inside our Ubuntu / servers. For example , i have 5 nginx virtualhost files. For some reason, i need to change my sites to run NGINX on port &#8230; <a href="http://re.web.id/bash-replacing-string-inside-text-files-using-sed-command-line-ubuntu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is mostly happen when we have many configuration or text files inside our Ubuntu / servers. For example , i have 5 nginx virtualhost files. For some reason, i need to change my sites to run NGINX on port 84. So i need to change</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">listen 80;</div></td></tr></tbody></table></div>
<p>into</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">listen 84;</div></td></tr></tbody></table></div>
<p>in each virtualhost files.</p>
<p>The fast way to do it is by using SED. The pattern is :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sed -i 's/&lt;search-string&gt;/&lt;replace-string&gt;/ your-files'</div></td></tr></tbody></table></div>
<p>Here are example :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo sed -i 's/listen &nbsp; 80;/listen &nbsp; 84;/' *</div></td></tr></tbody></table></div>
<p>Now all files which contain <em>listen 80;</em> will replaced with <em>listen 84;</em>. Easy right ? <img src='http://re.web.id/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/bash-replacing-string-inside-text-files-using-sed-command-line-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bermain dengan Awk untuk log / file text processing</title>
		<link>http://re.web.id/bermain-dengan-awk-untuk-log-file-text-processing/</link>
		<comments>http://re.web.id/bermain-dengan-awk-untuk-log-file-text-processing/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 04:46:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sistem]]></category>
		<category><![CDATA[awk text processing]]></category>
		<category><![CDATA[belajar awk]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=29</guid>
		<description><![CDATA[Salah satu bahasa pemograman di Linux yang sering dipakai oleh para professor, programmer dan peneliti di luar negeri adalah Awk. Ini semacam &#8220;little&#8221; programming language. Awk biasanya dipakai untuk analasis log yang panjang atau grab text lalu di-modify. Intinya, kalau &#8230; <a href="http://re.web.id/bermain-dengan-awk-untuk-log-file-text-processing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Salah satu bahasa pemograman di Linux yang sering dipakai oleh para professor, programmer dan peneliti di luar negeri adalah Awk. Ini semacam &#8220;little&#8221; programming language. Awk biasanya dipakai untuk analasis log yang panjang atau grab text lalu di-modify. Intinya, kalau anda mendapatkan data di file text dan butuh di-analisis namun tidak mau ribet, bisa memakai Awk.</p>
<p>Saya menggunakan Ubuntu Natty 11.04 dimana Awk sudah ter-install otomatis didalamnya. Untuk pengetahuan dasar, strutur penggunaan awk adalah</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk ''</div></td></tr></tbody></table></div>
<p>. Dimana syntax pemograman bisa dilakukan di dalam kurung-kurawal {}. Contohnya adalah awk &#8216;{print $3}&#8217;. Mari kita coba &#038; silahkan buka terminal / console anda.</p>
<p>1. Awk digunakan untuk print kata ke-n</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">echo 'this is for testing purpose only' | awk '{print $3}'</div></td></tr></tbody></table></div>
<p>Ini akan menghasilkan result : &#8220;for&#8221;. Awk meng-analisis string yang di-echo. Lalu Awk meng-eksekusi fungsi &#8220;print $3&#8243; dimana memunculkan kata ke-tiga dari string yang didapatkan.</p>
<p>2. Mem-parsing log files.<br />
Berikut ini contoh file log dari NGINX salah satu domain saya, silahkan disimpan menjadi test.log.<br />
<span id="more-29"></span></p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">66.249.71.137 - - [27/Aug/2011:06:25:16 +0000] &quot;GET /dashboard-interface-2010-ford-fusion-hybrid HTTP/1.1&quot; 200 4285 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:06:26:49 +0000] &quot;GET /why-people-buy-insurance HTTP/1.1&quot; 200 5265 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:06:31:00 +0000] &quot;GET /toyota-yaris-honda-fit-hyundai-accent-nissan-versa-chevrolet-aveo5-sub-compact-shootout HTTP/1.1&quot; 200 4363 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:06:35:11 +0000] &quot;GET /auto-show-test-drive-nissan-teana-part-2 HTTP/1.1&quot; 200 10142 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
209.85.224.87 - - [27/Aug/2011:06:40:23 +0000] &quot;GET /feed HTTP/1.1&quot; 200 3635 &quot;-&quot; &quot;FeedBurner/1.0 (http://www.FeedBurner.com)&quot;<br />
66.249.71.137 - - [27/Aug/2011:06:49:17 +0000] &quot;GET /95-f150-door-repair HTTP/1.1&quot; 200 5151 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:06:54:16 +0000] &quot;GET /assets/image/nissan-march-0-11-07-25-03-59-28.jpg HTTP/1.1&quot; 200 27262 &quot;http://www.autopartsz.com/nissan-march-2003-54km-1200cc-auto&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:06:54:30 +0000] &quot;GET /1932-ford-high-boy-street-rod-roadster.-sold- HTTP/1.1&quot; 200 3975 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
202.96.51.155 - - [27/Aug/2011:06:55:50 +0000] &quot;GET /aaa-auto-insurance-quotes-get-free-instant-quotes-here HTTP/1.1&quot; 200 12229 &quot;-&quot; &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; TencentTraveler ; .NET CLR 1.1.4322; .NET CLR 2.0.50215)&quot;<br />
66.249.71.137 - - [27/Aug/2011:06:59:12 +0000] &quot;GET /55-ford-fairlane-club-sedan-wfordomatic-sold HTTP/1.1&quot; 200 3842 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:01:33 +0000] &quot;GET /toyota-tacoma-product-information-speaker-adapter-baffle-mounts-2005-2006-2007-2008-2009-2010-2011 HTTP/1.1&quot; 200 4074 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
77.88.43.26 - - [27/Aug/2011:07:01:36 +0000] &quot;GET /professional-drivers-progressive-insurance-automotive-x-prize HTTP/1.1&quot; 200 7676 &quot;-&quot; &quot;Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:07:33 +0000] &quot;GET /stereo-replacement-installation-guide-for-toyota-tundra HTTP/1.1&quot; 200 3598 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:20:05 +0000] &quot;GET /how-to-replace-ford-explorer-ball-joints HTTP/1.1&quot; 200 4868 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:20:37 +0000] &quot;GET /2008-suzuki-reno-t4589-eastern-shore-toyota HTTP/1.1&quot; 200 3011 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:24:16 +0000] &quot;GET /ford-taurus-door-panel-and-door-ajar-switch-remove-and-replace-ford-taurus-1997 HTTP/1.1&quot; 200 3239 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:31:50 +0000] &quot;GET /viewed HTTP/1.1&quot; 200 5501 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:32:22 +0000] &quot;GET /watched HTTP/1.1&quot; 200 5220 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:34:43 +0000] &quot;GET /toyota-camry-kelley-blue-book HTTP/1.1&quot; 200 6479 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:36:01 +0000] &quot;GET /2008-lexus-rx-350-awd-4dr HTTP/1.1&quot; 200 8538 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:39:25 +0000] &quot;GET /2009-toyota-yaris-video-review HTTP/1.1&quot; 200 3310 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
94.63.4.57 - - [27/Aug/2011:07:39:27 +0000] &quot;GET /2010-ford-ranger-cruise-control-issue HTTP/1.1&quot; 200 23175 &quot;-&quot; &quot;Mozilla/4.0 (compatible; ICS)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:42:33 +0000] &quot;GET /2007-dodge-ram-1500-regular-cab-st-pickup-8-ft-bed-one-owner-clean-auto-check-8995.-yelm-wa HTTP/1.1&quot; 200 4416 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;<br />
209.85.224.94 - - [27/Aug/2011:07:42:49 +0000] &quot;GET /feed HTTP/1.1&quot; 200 3635 &quot;-&quot; &quot;FeedBurner/1.0 (http://www.FeedBurner.com)&quot;<br />
66.249.71.137 - - [27/Aug/2011:07:46:12 +0000] &quot;GET /2010-toyota-prius-gear-ring-light-making-upgrade-no.-1 HTTP/1.1&quot; 200 3662 &quot;-&quot; &quot;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&quot;</div></td></tr></tbody></table></div>
<p>Kita lihat baris pertama :<br />
66.249.71.137 &#8211; - [27/Aug/2011:06:25:16 +0000] &#8220;GET /dashboard-interface-2010-ford-fusion-hybrid HTTP/1.1&#8243; 200 4285 &#8220;-&#8221; &#8220;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&#8221;</p>
<p>Mempunyai struktur yaitu : IP Address (spasi) &#8211; (spasi) &#8211; (spasi) Tanggal visits (spasi) dst.</p>
<p>Semisal kita ingin mendapatkan ip-address (kata pertama) dari log ini, maka bisa menggunakan print $1.</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '{print $1}' test.log</div></td></tr></tbody></table></div>
<p>Dan hasilnya  :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
119.63.196.75<br />
77.88.43.26<br />
66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
66.249.71.137<br />
173.24.212.249<br />
173.24.212.249</div></td></tr></tbody></table></div>
<p>3. Lalu bagaimana kalau kita ingin menampilkan kata yang terakhir dari sebuah line ? Pada contoh baris pertama log ini, kita ingin menampilan &#8220;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&#8221;.  </p>
<p>Maka kita bisa menggunakan $NF. Semisal :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '{print $1, $NF}' test.log</div></td></tr></tbody></table></div>
<p>Dan hasilnya :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">119.63.196.110 +http://www.baidu.com/search/spider.html)&quot;<br />
66.249.71.137 +http://www.google.com/bot.html)&quot;<br />
66.249.71.137 &quot;Googlebot-Image/1.0&quot;<br />
76.92.113.147 Firefox/6.0&quot;<br />
76.92.113.147 Firefox/6.0&quot;<br />
66.249.71.137 &quot;Googlebot-Image/1.0&quot;<br />
98.139.241.248 &quot;YahooCacheSystem&quot;<br />
98.139.241.248 &quot;YahooCacheSystem&quot;<br />
66.249.71.137 &quot;Googlebot-Image/1.0&quot;</div></td></tr></tbody></table></div>
<p>4. Menampilkan line number<br />
Ketika kita mem-parse log panjang, kita menginginkan adanya line number untuk mempermudah analsis. Maka kita bisa menggunakan NR. Contohnya :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '{ print NR &quot;) &quot; $1 &quot; -&gt; &quot; $(NF-1) }' test.log</div></td></tr></tbody></table></div>
<p>Hasilnya :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">387) 204.236.155.105 -&gt; Resolver,<br />
388) 184.72.47.71 -&gt; &quot;UnwindFetchor/1.0<br />
389) 204.236.147.26 -&gt; Resolver,<br />
390) 184.72.47.71 -&gt; &quot;UnwindFetchor/1.0<br />
391) 50.18.121.47 -&gt; &quot;UnwindFetchor/1.0<br />
392) 50.18.121.47 -&gt; &quot;UnwindFetchor/1.0<br />
393) 46.20.47.43 -&gt; &quot;Mozilla/5.0</div></td></tr></tbody></table></div>
<p>5. Formatting<br />
Ketika kita hendak mem-parse date log dengan :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '{ print $4 }' test.log</div></td></tr></tbody></table></div>
<p>Kita akan mendapatkan hasil :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[28/Aug/2011:03:57:29<br />
[28/Aug/2011:04:04:18<br />
[28/Aug/2011:04:06:08<br />
[28/Aug/2011:04:06:10<br />
[28/Aug/2011:04:06:10<br />
[28/Aug/2011:04:06:21<br />
[28/Aug/2011:04:10:58<br />
[28/Aug/2011:04:10:58<br />
[28/Aug/2011:04:10:58<br />
[28/Aug/2011:04:16:15<br />
[28/Aug/2011:04:21:48</div></td></tr></tbody></table></div>
<p>Semisal kita hendak mendapatkan tanggal saja. Maka kita lihat delimiter antara tanggal dan waktu adalah &#8220;:&#8221; (titik dua). Kita bisa menggunakan delimiter didalam awk, contohnya :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '{print $4 }' test.log | awk -F: '{print $1}'</div></td></tr></tbody></table></div>
<p>Akan menghasilkan :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011<br />
[28/Aug/2011</div></td></tr></tbody></table></div>
<p>Kita ingin tanggal yang muncul tanpa ada &#8220;[&#8221; didepan. Maka kita bisa menghilangkan karakter yang tidak diinginkan menggunakan sed. Contoh :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '{ print $4 }' test.log | awk -F: '{ print $1 }' | sed 's/\[//'</div></td></tr></tbody></table></div>
<p>Akan menghasilkan :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">27/Aug/2011<br />
27/Aug/2011<br />
27/Aug/2011<br />
27/Aug/2011<br />
27/Aug/2011<br />
27/Aug/2011<br />
28/Aug/2011<br />
28/Aug/2011<br />
28/Aug/2011<br />
28/Aug/2011</div></td></tr></tbody></table></div>
<p><b>Update!</b><br />
Dari komen ferdianto, kita bisa memakai fungsi substr dari AWK, yaitu :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '{ print $4 }' test.log | awk -F: '{ print substr($1,1) }'</div></td></tr></tbody></table></div>
<p>Fungsi substr adalah meng-ekstrak string. Bisa sama2x menghilangkan karakter di depan.<br />
Namun, terdapat perbedaan antara substr dengan SED.</p>
<p>Ketika kita hendak mem-filter string terhadap karakter tertentu yang letaknya di belakang, di-depan maka kita bisa menggunakan SED u/ efektivitas.</p>
<p>Substr sendiri kinerjanya mirip dengan PHP substr dimana kita meng-ekstrak dari karakter tersebut. </p>
<p>6. Memilah berdasarkan karakter tertentu ( explode )</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk 'BEGIN { FS=&quot;,&quot;}; { print $1} ' test.log</div></td></tr></tbody></table></div>
<p>Atau</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk -F, '{ print $1} ' test.log</div></td></tr></tbody></table></div>
<p>7. Filtering untuk Email</p>
<p>Kita ingin mem-filter berdasarkan gmail dengan separator &#8220;,&#8221;</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk -F, '/@gmail/ { print $1; }' emails.txt</div></td></tr></tbody></table></div>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk -F, '/@gmail/ { print $1 $2 }' emails.txt | sed 's/&quot;//;s/&quot;$//;s/&quot;&quot;/,/'</div></td></tr></tbody></table></div>
<p>Untuk menghilangkan space</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk '/@gmail/ { $1=$1; print $1 &quot;,&quot; $2 }'</div></td></tr></tbody></table></div>
<p>Untuk mengambil link dari sebuah html / text :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">awk 'BEGIN{ RS=&quot;&lt;A *HREF *= *\&quot;&quot;} NR&gt;2 {sub(/&quot;.*/,&quot;&quot;);print; }' index.html</div></td></tr></tbody></table></div>
<p>Anda baca sampai disini? Bagus! Sekadar informasi, AWK lebih tua dari Perl, dimana dibuat pada tahun 1977!</p>
<p>Referensi yang patut dibaca lebih lanjut :<br />
1. <a href="http://gregable.com/2010/09/why-you-should-know-just-little-awk.html#">http://gregable.com/2010/09/why-you-should-know-just-little-awk.html#</a><br />
2. <a href="http://www.reddit.com/r/programming/comments/dkew8/why_you_should_know_just_a_little_bit_of_awk/">http://www.reddit.com/r/programming/comments/dkew8/why_you_should_know_just_a_little_bit_of_awk/</a><br />
3. <a href="http://news.ycombinator.com/item?id=1738688">http://news.ycombinator.com/item?id=1738688</a></p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/bermain-dengan-awk-untuk-log-file-text-processing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bermain pythonchallenge.com untuk belajar algoritma python</title>
		<link>http://re.web.id/bermain-pythonchallenge-com-untuk-belajar-algoritma-python/</link>
		<comments>http://re.web.id/bermain-pythonchallenge-com-untuk-belajar-algoritma-python/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 11:50:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[python challenge]]></category>
		<category><![CDATA[python string]]></category>
		<category><![CDATA[python translate]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=25</guid>
		<description><![CDATA[Hari ini saya baru tahu kalau ada situs yang mengajarkan Python melalui teka-teki asik yaitu pythonchallenge.com. Iseng-iseng saya mencoba 2 level karena lekas mau mandi. Setelah saya menjawab 2 pertanyaan maka pattern dari situs ini bisa ditebak. Untuk lolos dari &#8230; <a href="http://re.web.id/bermain-pythonchallenge-com-untuk-belajar-algoritma-python/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hari ini saya baru tahu kalau ada situs yang mengajarkan Python melalui teka-teki asik yaitu <a href="http://pythonchallenge.com">pythonchallenge.com</a>. Iseng-iseng saya mencoba 2 level karena lekas mau mandi. Setelah saya menjawab 2 pertanyaan maka pattern dari situs ini bisa ditebak.</p>
<p>Untuk lolos dari pertanyaan di situs ini, coba perhatian kata kunci di URL setelah /def/ serta hiraukan .html. Biasanya clue2x-nya adalah menyelesaikan masalah atau menemukan formula, lalu dari kata kunci di URL atau gambar itu, di jalankan di formula / solusi yang kita bikin. Selanjutnya, tinggal re-name saja URL-nya (setelah def) dan tetep pakai .html.</p>
<p>Penasaran? Ini jawaban saya :</p>
<p>Tahap 1 :<br />
Karena tulisannya adalah 2  pangkat 38, maka di Python adalah 2**38. Ketika mengganti 0.html dengan 2**38.html maka langsung ketahuan jawabannya.</p>
<p>Tahap 2:<br />
Ini adalah memindahkan karakter menjadi 2 kedepan. Ini script Python saya :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">import string<br />
<br />
def arrange(text):<br />
&nbsp; &nbsp; textLength = len(text)<br />
&nbsp; &nbsp; newText = []<br />
<br />
&nbsp; &nbsp; for i in range(textLength):<br />
&nbsp; &nbsp; &nbsp; &nbsp; if text[i].isalpha(): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Cek bila karakter adalah alphabet<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; digitText = ord(text[i])+2<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if digitText &gt; 122 : &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Kembali ke huruf depan bila lebih dari Z<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; digitText = digitText-26<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newText.append(chr(digitText))<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; else:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newText.append(text[i]) &nbsp; &nbsp; &nbsp; # Pass bila bukan alphabet<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; print(''.join(newText)) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Gabungkan kembali List yang dibuat<br />
<br />
if __name__ == '__main__':<br />
&nbsp; &nbsp; text = &quot;g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.&quot;<br />
&nbsp; &nbsp; # uncomment dibawah ini untuk lanjut ke tahap berikutnya<br />
&nbsp; &nbsp; # karena maksudnya apply on url, ambil keyword URL lalu di-translate<br />
&nbsp; &nbsp; #text = 'map' <br />
&nbsp; &nbsp; arrange(text)</div></td></tr></tbody></table></div>
<p>Cheers! <img src='http://re.web.id/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/bermain-pythonchallenge-com-untuk-belajar-algoritma-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memahami Context Switch</title>
		<link>http://re.web.id/memahami-context-switch/</link>
		<comments>http://re.web.id/memahami-context-switch/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 10:59:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sistem]]></category>
		<category><![CDATA[context switching]]></category>
		<category><![CDATA[mengenal context switch]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=15</guid>
		<description><![CDATA[Pada postingan sebelumnya, saya membahas tentang implementasi thread di dunia website. Sekilas info, traditional processing adalah dimana di dalam menjalankan instruksi harus sesuai dengan urutan/alur-nya. Berbeda dengan itu, thread bisa membagi-bagi sebuah alur yang diberikan (seperti gambar) lalu di-eksekusi &#38; &#8230; <a href="http://re.web.id/memahami-context-switch/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pada postingan sebelumnya, saya membahas <a href="http://re.web.id/threading/" target="_blank">tentang implementasi thread di dunia website</a>. Sekilas info, traditional processing adalah dimana di dalam menjalankan instruksi harus sesuai dengan urutan/alur-nya. Berbeda dengan itu, thread bisa membagi-bagi sebuah alur yang diberikan (seperti gambar) lalu di-eksekusi &amp; tetap di dalam processing.</p>
<p><img class="alignnone" title="Thread" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Multithreaded_process.svg/220px-Multithreaded_process.svg.png" alt="" width="220" height="208" /></p>
<p>Analoginya, ada sebuah tugas untuk memotong2x wortel. Traditional processing akan memotong dari kiri &#8211; kanan berurutan menggunakan satu tangan. Berbeda dengan thread, wortel dipotong oleh lebih dari 1 tangan dengan tidak berurutan namun hasilnya sama dengan yang traditional processing. (seperti gambar).</p>
<p>Salah satu kelebihan Thread adalah kemampuan untuk sharing memory / resource lain untuk digunakan bersama-sama . Selain itu thread menggunakan <a href="http://en.wikipedia.org/wiki/Address_space">address space</a> yang sama. Sampai disini dulu untuk threadnya, karena nantinya akan berkaitan dengan context switch.</p>
<p>Context switch adalah sebuah proses untuk menyimpan context ( variable, data2x ) dari eksekusi sebuah program / processing ketika di-interrupt, lalu dapat di-restore kembali dari proses yang terakhir ketike hendak di-eksekusi kembali. Ini mirip dengan proses download di browser. Kita bisa men-stop sebuah download file lalu me-resume kembali dimana dilanjutkan download yang sudah ada. Context switching yang membuat sebuah proses bisa di-interrupt lalu di-lanjutkan kembali dengan hasil proses sebelumnya.</p>
<p>Dengan context switching, multiple process bisa di jalankan di single CPU. Jadi sebenarnya ketika kita menjalankan berbagai aplikasi ( multi-tasking ) di atas single CPU (single-core), maka CPU tersebut menjalankan semua proses dengan berpindah-pindah dari satu ke lainnya. Context switching ini dilakukan oleh Operating System (OS). Secara interval context-switching pada sistem umumnya sekitar 10 milliseconds!</p>
<p>Kembali lagi ke thread. Penggunaan thread akan terasa bila dijalankan di multiple core dibandingkan di single core. Namun, penggunaan multiple-threading di single-core tetap lebih cepat dibandingkan single process.</p>
<p><a href="http://re.web.id/wp-content/uploads/2011/08/GIL_1cpu.png"><img class="alignnone size-medium wp-image-17" title="GIL_1cpu" src="http://re.web.id/wp-content/uploads/2011/08/GIL_1cpu-500x53.png" alt="" width="500" height="53" /></a></p>
<p><a href="http://re.web.id/wp-content/uploads/2011/08/GIL_2cpu.png"><img class="alignnone size-full wp-image-18" title="GIL_2cpu" src="http://re.web.id/wp-content/uploads/2011/08/GIL_2cpu.png" alt="" width="825" height="88" /></a></p>
<p>Bila thread bisa dijalankan di multiple-core, maka context switching juga berjalan di multiple-core juga. Sekarang kita sudah memahami konsep Context Switch di level OS. Dengan ini kita bisa lebih mendalami ke hal2x lain seperti asynchronous IO, blocking, non-blocking dan banyak lagi!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/memahami-context-switch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mengenal Threading di dunia Web</title>
		<link>http://re.web.id/threading/</link>
		<comments>http://re.web.id/threading/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 08:42:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[mengenal threading]]></category>
		<category><![CDATA[threading di python]]></category>

		<guid isPermaLink="false">http://re.web.id/?p=8</guid>
		<description><![CDATA[Di dunia website, tentunya kegiatan request &#38; response menjadi proses utama. Setiap request yang masuk akan diproses oleh sebuah program lalu diberikan outputnya (response). Topik kali ini adalah tentang bagaimana menjalankan proses untuk mengatasi request yang masuk lalu memberikan response-nya. &#8230; <a href="http://re.web.id/threading/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Di dunia website, tentunya kegiatan request &amp; response menjadi proses utama. Setiap request yang masuk akan diproses oleh sebuah program lalu diberikan outputnya (response). Topik kali ini adalah tentang bagaimana menjalankan proses untuk mengatasi request yang masuk lalu memberikan response-nya.</p>
<p>Kita membuat suatu program yang memproses setiap request lalu memberikan outputnya. Kita punya request yaitu &#8220;request&#8221;, di-proses dengan menambahkan kata2x &#8220;Hasil eksekusi dari :&#8221; di depan request masuk. Lalu outputnya di keluarkan. Dalam contoh ini, saya menggunakan Python dan berikut ini contoh prototipe sederhana :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#!/usr/bin/env python<br />
# buat file bernama &nbsp;test.py<br />
# Ekskusi : python test.py request<br />
<br />
import sys<br />
import datetime<br />
import time<br />
<br />
__author__ = 'Yodi aditya - re.web.id'<br />
<br />
def simpleProgram(request):<br />
&nbsp; &nbsp; start = datetime.datetime.now() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Waktu input masuk<br />
&nbsp; &nbsp; time.sleep(1) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Sleep selama 1 detik<br />
&nbsp; &nbsp; now = datetime.datetime.now() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Waktu output<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; return request+ ': %s \nresponse: %s ' % (start,now)<br />
<br />
&quot;&quot;&quot; proses utama ketika melakukan eksekusi ex : python test.py input &quot;&quot;&quot;<br />
if __name__ == '__main__' :<br />
&nbsp; &nbsp; if len(sys.argv) &gt; 1 :<br />
&nbsp; &nbsp; &nbsp; &nbsp; print(simpleProgram(sys.argv[1]))<br />
&nbsp; &nbsp; else:<br />
&nbsp; &nbsp; &nbsp; &nbsp; print('Tidak ada input! Coba : python test.py request.')</div></td></tr></tbody></table></div>
<p>Contoh ouput program ini :<br />
request: 2011-08-15 14:27:52.789295<br />
response: 2011-08-15 14:27:53.790361</p>
<p>Mari buat asumsi bahwa dalam kasus ini ternyata setiap pengolahan sebuah request membutuhkan waktu 1 detik karena keterbatasan kemampuan server / komputer. Sekarang kita punya pengunjung yang melakukan request tiap 1 detik. Apa yang terjadi? Tentunya program ini akan berjalan lancar bukan?</p>
<p>Nah, bagaimana bila pada 1 detik yang bersamaan, ada 3 visitor yang mengakses program ini?<br />
Kalau gitu kita ubah kode berikut menjadi :</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#!/usr/bin/env python<br />
# buat file bernama &nbsp;test.py<br />
# Ekskusi : python test.py request<br />
<br />
import sys<br />
import datetime<br />
import time<br />
<br />
__author__ = 'Yodi aditya - re.web.id'<br />
<br />
def simpleProgram(request):<br />
&nbsp; &nbsp; start = datetime.datetime.now() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Waktu input masuk<br />
&nbsp; &nbsp; time.sleep(1) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Sleep selama 1 detik<br />
&nbsp; &nbsp; now = datetime.datetime.now() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Waktu output<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; return request+ ': %s \nresponse: %s ' % (start,now)<br />
<br />
&quot;&quot;&quot; proses utama ketika melakukan eksekusi ex : python test.py input &quot;&quot;&quot;<br />
if __name__ == '__main__' :<br />
&nbsp; &nbsp; if len(sys.argv) &gt; 1 :<br />
&nbsp; &nbsp; &nbsp; &nbsp; for i in range(3): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Lakukan 3 kali iterasi<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(simpleProgram(sys.argv[1]))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; else:<br />
&nbsp; &nbsp; &nbsp; &nbsp; print('Tidak ada input! Coba : python test.py request.')</div></td></tr></tbody></table></div>
<p>Outputnya :</p>
<p>request: 2011-08-15 14:31:18.284534<br />
response: 2011-08-15 14:31:19.285620<br />
request: 2011-08-15 14:31:19.285862<br />
response: 2011-08-15 14:31:20.286936<br />
request: 2011-08-15 14:31:20.287031<br />
response: 2011-08-15 14:31:21.287550 </p>
<p>Dari sini terlihat bahwa program pertama kali melayani visitor 1 ( 18-19 ). Setelah selesai, maka akan melayani request visitor kedua ( 19-20 ). Dan yang terakhir, visitor ketiga (20-21).</p>
<p>Program ini memproses tiap 1 request saja. Setelah 1 request selesai, program baru menerima request berikutnya. Program ini tidak menerima request baru ketika proses request yang diterima belum selesai. Inilah yang disebut Blocking.</p>
<p>Lalu bagaimana kalau kita ingin program yang sedang memproses request bisa menerima request baru? Bagaimana program bisa menjalankan semua request secara simultan/bersamaan? </p>
<p>Dalam kondisi ini, kita membutuhkan Threading, yaitu metode untuk menjalankan semua proses masuk secara simultan. Program mampu menerima request baru sembari memproses request yang lama.</p>
<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#!/usr/bin/env python<br />
# buat file bernama &nbsp;test.py<br />
# Ekskusi : python test.py request<br />
<br />
import sys<br />
import datetime<br />
import time<br />
import threading<br />
<br />
__author__ = 'Yodi aditya - re.web.id'<br />
<br />
def simpleProgram(self, request):<br />
<br />
&nbsp; &nbsp; start = datetime.datetime.now() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Waktu input masuk<br />
&nbsp; &nbsp; time.sleep(1) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Sleep selama 1 detik<br />
&nbsp; &nbsp; now = datetime.datetime.now() &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Waktu output<br />
<br />
&nbsp; &nbsp; print '(%s)\n%s: %s \nresponse: %s ' % (self.getName(), request, start,now)<br />
<br />
class ThreadClass(threading.Thread):<br />
&nbsp; &nbsp; def __init__(self, target, *args):<br />
&nbsp; &nbsp; &nbsp; &nbsp; self._target = target<br />
&nbsp; &nbsp; &nbsp; &nbsp; self._args = args<br />
&nbsp; &nbsp; &nbsp; &nbsp; threading.Thread.__init__(self)<br />
<br />
&nbsp; &nbsp; def run(self):<br />
&nbsp; &nbsp; &nbsp; &nbsp; self._target(self, *self._args)<br />
<br />
&quot;&quot;&quot; proses utama ketika melakukan eksekusi ex : python test.py input &quot;&quot;&quot;<br />
if __name__ == '__main__' :<br />
&nbsp; &nbsp; if len(sys.argv) &gt; 1 :<br />
&nbsp; &nbsp; &nbsp; &nbsp; for i in range(3): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Lakukan 3 kali iterasi<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t = ThreadClass(simpleProgram, sys.argv[1])<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.start()<br />
&nbsp; &nbsp; else:<br />
&nbsp; &nbsp; &nbsp; &nbsp; print('Tidak ada input! Coba : python test.py request.')</div></td></tr></tbody></table></div>
<p>Outputnya adalah :</p>
<p>(Thread-1)<br />
request: 2011-08-15 15:19:37.864748<br />
response: 2011-08-15 15:19:38.865882<br />
(Thread-3)<br />
request: 2011-08-15 15:19:37.864960<br />
response: 2011-08-15 15:19:38.866367<br />
(Thread-2)<br />
request: 2011-08-15 15:19:37.864887<br />
response: 2011-08-15 15:19:38.866516 </p>
<p>Dari sini kelihatan bahwa 3 request bersamaan di-eksekusi langsung oleh program. Semua request di-eksekusi pada 37 dan output pada 38 ( 1 detik proses ). </p>
<p>Penggunaan Threading bisa dilakukan di berbagai bahasa pemograman yang support Threading seperti Python, Java, Clojure, C++ dan lainnya.</p>
<p>Implementasi Threading sangat penting di dunia website. Banyak sekali implementasi threading, seperti mengatasi proses Chatting dimana orang bisa menulis secara bersamaan. Membuat crawler yang mengunjungi berbagai situs lalu mengambil informasinya. Serta menghadapi request masuk secara bersamaan ketika website mendapatkan traffic tinggi. </p>
<p>Dapatkan source code via GitHub di <a href="https://github.com/yodiaditya/learning-python" target="_blank">https://github.com/yodiaditya/learning-python</a></p>
<p>Referensi :<br />
<a href="http://linuxgazette.net/107/pai.html">http://linuxgazette.net/107/pai.html</a><br />
<a href="http://www.ibm.com/developerworks/aix/library/au-threadingpython/">http://www.ibm.com/developerworks/aix/library/au-threadingpython/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://re.web.id/threading/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

