<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-19969388</id><updated>2009-11-08T22:30:04.976+08:00</updated><title type="text">Ham is a Geek</title><subtitle type="html">&lt;i&gt;" I would love to change the world,&lt;br&gt; but they won't give me the source code "&lt;/i&gt;&lt;br&gt;-- Unknown Geek</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://hamisageek.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default?start-index=26&amp;max-results=25" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>226</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><link rel="self" href="http://feeds.feedburner.com/HamIsAGeek" type="application/atom+xml" /><feedburner:emailServiceId>HamIsAGeek</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><id>tag:blogger.com,1999:blog-19969388.post-5215915979533865958</id><published>2009-06-05T15:26:00.004+08:00</published><updated>2009-06-05T15:46:19.621+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="laptop" /><category scheme="http://www.blogger.com/atom/ns#" term="t61" /><title type="text">A Naked T61</title><content type="html">My laptop refused to boot early this week. It beeped and printed "Fan Error" on screen. The laptop has been with me for almost two years and after seeing the error it occurred to me that I have never opened it, not even once, and now I have to.&lt;br /&gt;&lt;br /&gt;One thing I love about Thinkpads is how well documented they are. I was immediately able to obtain the hardware service manual from Lenovo's website and got to work stripping the bezels, keyboard and palm rest to get to the dirty fan.&lt;br /&gt;&lt;br /&gt;For the voyeuristic pleasure of my fellow geeks, I took some pics of my naked T61, after I cleaned it up, of course. Enjoy !!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/hgcphoenix/3597628714/" title="PIC_0012 by osirishinzen, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3381/3597628714_825ddd8645_m.jpg" alt="PIC_0012" width="240" height="180" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/hgcphoenix/3597627588/" title="PIC_0001 by osirishinzen, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3647/3597627588_ce84130101_m.jpg" alt="PIC_0001" width="240" height="180" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/hgcphoenix/3597635054/" title="PIC_0002 by osirishinzen, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3410/3597635054_5484318728_m.jpg" alt="PIC_0002" width="240" height="180" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/hgcphoenix/3597628066/" title="PIC_0013 by osirishinzen, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2442/3597628066_b36411eceb_m.jpg" alt="PIC_0013" width="240" height="180" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-5215915979533865958?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jZq_w3OBbJ3SH2qhVa3qMb5IuWA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jZq_w3OBbJ3SH2qhVa3qMb5IuWA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jZq_w3OBbJ3SH2qhVa3qMb5IuWA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jZq_w3OBbJ3SH2qhVa3qMb5IuWA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=UzaMdN7eQ7g:ck0ym7JjuaU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=UzaMdN7eQ7g:ck0ym7JjuaU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=UzaMdN7eQ7g:ck0ym7JjuaU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=UzaMdN7eQ7g:ck0ym7JjuaU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/5215915979533865958/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/06/naked-t61.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/5215915979533865958" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/5215915979533865958" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/UzaMdN7eQ7g/naked-t61.html" title="A Naked T61" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/06/naked-t61.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-4705255604965363153</id><published>2009-05-30T22:31:00.002+08:00</published><updated>2009-05-30T22:35:43.773+08:00</updated><title type="text">ExtJS Tip : Dynamically change a button icon</title><content type="html">This works for ExtJS 2 or higher. Oddly, there is no method in the button class that allows you to change the icon dynamically.  This is useful if you want to reuse buttons in the toolbar for example.&lt;br /&gt;&lt;br /&gt;I found an override from &lt;a href="http://extjs.com/forum/showthread.php?t=56335&amp;amp;highlight=change+toolbar+button+icon"&gt;this&lt;/a&gt; forum post which worked for me after  a few tweaks.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Ext.override(Ext.Button, {&lt;br /&gt;    setIcon: function(url){&lt;br /&gt;        if (this.rendered){&lt;br /&gt;            var btnEl = this.getEl().child(this.buttonSelector);&lt;br /&gt;            btnEl.setStyle('background-image', 'url(' +url+')');&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;})&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-4705255604965363153?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ySHbpQsYS8FmihKovPSdEpUhiOg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ySHbpQsYS8FmihKovPSdEpUhiOg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ySHbpQsYS8FmihKovPSdEpUhiOg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ySHbpQsYS8FmihKovPSdEpUhiOg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=mEFYSsHnnVs:Bz8fgKAjZI0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=mEFYSsHnnVs:Bz8fgKAjZI0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=mEFYSsHnnVs:Bz8fgKAjZI0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=mEFYSsHnnVs:Bz8fgKAjZI0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/4705255604965363153/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/05/extjs-tip-dynamically-change-button.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/4705255604965363153" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/4705255604965363153" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/mEFYSsHnnVs/extjs-tip-dynamically-change-button.html" title="ExtJS Tip : Dynamically change a button icon" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/05/extjs-tip-dynamically-change-button.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-5300211109850647299</id><published>2009-05-29T11:02:00.004+08:00</published><updated>2009-05-29T11:20:39.523+08:00</updated><title type="text">An exercise in Metacognition ... computer for sale ads</title><content type="html">A Facebook buddy posted this as his status ...&lt;br /&gt;&lt;h3 style="font-weight: normal;" class="UIIntentionalStory_Message"&gt;60K PHP for brand-new MB466,2.0 GHz, IntelCore2Duo,160GB DDR3 Memory, 160GB HD, NVIDIA GeForce 9400M graphics, stndrd kbrd, aluminum unibo&lt;/h3&gt;What went thru my mind during the first few seconds of reading  ....&lt;br /&gt;&lt;ol&gt;&lt;li&gt;60K PHP ? Kinda expensive for a PC&lt;/li&gt;&lt;li&gt;Is this a laptop or desktop ?&lt;/li&gt;&lt;li&gt;MB466 ? must be the model number of something.&lt;/li&gt;&lt;li&gt;2.0 IntelCore2Duo ? really expensive PC, I could probably assemble an entry level Core i7 with 60K&lt;br /&gt;&lt;/li&gt;&lt;li&gt;160GB DDR3 Memory ? WOW must be a server or workstation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;aluminum unibo ?! Great Scott ! It's a Mac !&lt;/li&gt;&lt;/ol&gt;What I learned about myself ....&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I immediately knew it was an ad for a computer.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I focus too much on the price, so much so that it influences everything else about the ad, maybe that's why I don't have a Mac :-)&lt;/li&gt;&lt;li&gt;I don't know the specs for a Mac when I see one.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-5300211109850647299?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v7uiAoiU1UWmPMn__F2rLoyhM7U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v7uiAoiU1UWmPMn__F2rLoyhM7U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/v7uiAoiU1UWmPMn__F2rLoyhM7U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v7uiAoiU1UWmPMn__F2rLoyhM7U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=yD8HjNpf5OQ:hLoHesWZYks:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=yD8HjNpf5OQ:hLoHesWZYks:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=yD8HjNpf5OQ:hLoHesWZYks:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=yD8HjNpf5OQ:hLoHesWZYks:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/5300211109850647299/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/05/exercise-in-metacognition-computer-ads.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/5300211109850647299" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/5300211109850647299" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/yD8HjNpf5OQ/exercise-in-metacognition-computer-ads.html" title="An exercise in Metacognition ... computer for sale ads" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/05/exercise-in-metacognition-computer-ads.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-8121983267493953974</id><published>2009-05-19T17:41:00.004+08:00</published><updated>2009-05-29T11:24:23.837+08:00</updated><title type="text">Reusing Coffee Grounds</title><content type="html">&lt;p&gt;A couple of months ago I got myself a coffee press and started trying out different blends from my local Starbucks. &lt;/p&gt;&lt;p&gt;All this time I've been throwing away the coffee grounds when I could have been using them for something else.&lt;/p&gt;&lt;p&gt;According to the Natural Home Magazine &lt;a href="http://lifehacker.com/5260189/use-your-old-coffee-grounds-to-clean-dishes-kill-fleas-and-more"&gt;article&lt;/a&gt; that &lt;a href="http://lifehacker.com/5260189/use-your-old-coffee-grounds-to-clean-dishes-kill-fleas-and-more"&gt;this&lt;/a&gt; Lifehacker blog post points to, used coffee grounds can be used ...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;as deodorizer for your refrigerator&lt;/li&gt;&lt;li&gt;dish washing pad&lt;/li&gt;&lt;li&gt;as fertilizer&lt;/li&gt;&lt;li&gt;as a facial mask&lt;/li&gt;&lt;/ul&gt;Uhm, I probably won't try that last one :-)&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-8121983267493953974?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iQ-ktiEvWWpoTGAPxJ9IBNg-Md4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iQ-ktiEvWWpoTGAPxJ9IBNg-Md4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iQ-ktiEvWWpoTGAPxJ9IBNg-Md4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iQ-ktiEvWWpoTGAPxJ9IBNg-Md4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=QBjzgB2qVIY:e900FLsfA_g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=QBjzgB2qVIY:e900FLsfA_g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=QBjzgB2qVIY:e900FLsfA_g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=QBjzgB2qVIY:e900FLsfA_g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://lifehacker.com/5260189/use-your-old-coffee-grounds-to-clean-dishes-kill-fleas-and-more" title="Reusing Coffee Grounds" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/8121983267493953974/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/05/reusing-coffee-grounds.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/8121983267493953974" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/8121983267493953974" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/QBjzgB2qVIY/reusing-coffee-grounds.html" title="Reusing Coffee Grounds" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/05/reusing-coffee-grounds.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-526554275969826347</id><published>2009-05-12T14:18:00.008+08:00</published><updated>2009-05-14T15:00:59.457+08:00</updated><title type="text">the Star Trek reboot</title><content type="html">Firstly, I think it shouldn't be called a prequal. It's probably fashionable to make prequals after the "Star Wars" movies but this is by no means a prequal.&lt;br /&gt;&lt;br /&gt;I would rather call it a retelling of sorts.&lt;br /&gt;&lt;br /&gt;What if James Kirk grew up without a father ?&lt;br /&gt;What if Spock is more emotional than logical ?&lt;br /&gt;&lt;br /&gt;Star Trek : The Next Generation (TNG) was the series that turned me into a "trekkie". Prior to watching that series, I had no idea who Captain Kirk was, let alone Spock. Truth be told, I fell in love with the Star Trek of Capt. Jean Luc Picard in the 24th century because of the tech. I was fascinated by the &lt;a href="http://en.wikipedia.org/wiki/Communicator_%28Star_Trek%29"&gt;comm badge&lt;/a&gt;, the &lt;a href="http://en.wikipedia.org/wiki/Hypospray"&gt;hypospray&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/VISOR"&gt;VISORS&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Dilithium_%28Star_Trek%29"&gt;dilithium crystal&lt;/a&gt; powered cores, &lt;a href="http://en.wikipedia.org/wiki/Holodeck"&gt;holodecks&lt;/a&gt;, warp drive engines, force fields and the &lt;a href="http://en.wikipedia.org/wiki/LCARS"&gt;LCARS&lt;/a&gt; console.&lt;br /&gt;&lt;br /&gt;Apparently, though, I'm not hard core enough a "trekkie" because I've been trying to get myself to watch reruns of The Original Star Trek series (TOS) but have failed miserably to finish a single episode.&lt;br /&gt;&lt;br /&gt;I did not like the original TV series but I definitely liked watching this Star Trek movie. Yup, I liked it, in spite of the &lt;a href="http://villageidiotsavant.blogspot.com/2009/05/bright-and-shiny-crap.html"&gt;flaws in the story telling&lt;/a&gt; and the &lt;a href="http://blogs.discovermagazine.com/badastronomy/2009/05/08/ba-review-star-trek/"&gt;scientific inconsistencies&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Oddly, I liked it not for the same reasons that I liked watching TNG (the tech) , Heroes (super powers) or Fringe (mystery behind William Bell), nope I liked it because ...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;James Kirk seems more complex and driven. He is motivated to live up to his parallel self in the other timeline.&lt;/li&gt;&lt;li&gt;Spock is not stubbornly logical and is giving in to his human side.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bones' colorful rhetoric, specially when he's upset.&lt;/li&gt;&lt;li&gt;Chekov, Scotty and Sulu for the comic relief&lt;/li&gt;&lt;/ul&gt;This was my first time watching a movie on IMAX, btw. I can't say I liked it very much. I thought the screen was too close and too big for me to see all the action.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-526554275969826347?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ep0AFnuYgpRR8ZKf-7ve0GP3Bxk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ep0AFnuYgpRR8ZKf-7ve0GP3Bxk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ep0AFnuYgpRR8ZKf-7ve0GP3Bxk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ep0AFnuYgpRR8ZKf-7ve0GP3Bxk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=pEFfo27fxrY:YeDGbPIIsxk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=pEFfo27fxrY:YeDGbPIIsxk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=pEFfo27fxrY:YeDGbPIIsxk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=pEFfo27fxrY:YeDGbPIIsxk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/526554275969826347/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/05/star-trek-reboot.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/526554275969826347" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/526554275969826347" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/pEFfo27fxrY/star-trek-reboot.html" title="the Star Trek reboot" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/05/star-trek-reboot.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-2679370577185291425</id><published>2009-05-12T12:53:00.006+08:00</published><updated>2009-05-13T09:51:11.839+08:00</updated><title type="text">I DON'T want free laptops from Sony Ericsson</title><content type="html">I got 3 forwarded e-mails urging me to forward the e-mail to 8 people for me to get a free Sony Ericsson laptop. As a bonus, if I send it to 20 people, I get a higher spec'd Sony Ericsson laptop.&lt;br /&gt;&lt;br /&gt;I hate to break it to you folks but Sony Ericsson makes cellphones. Both the T18 and R320 are retired cellphone models from Sony Ericcson.&lt;br /&gt;&lt;br /&gt;A quick google search got me to the following links, all of which says that this is a big hoax !!!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.hoax-slayer.com/ericsson-free-lap-top.shtml"&gt;Hoax Slayer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://urbanlegends.about.com/od/internet/a/ericsson_hoax.htm"&gt;About.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;So please stop forwarding these e-mails because no one is getting a free laptop from this. It's not clear what the intent of the perpetrators are but one thing is for sure, you're exposing yourself and your contacts to people you do not know. Internet marketers are the least of your worries, there are spammers, hackers and worst of all identity thieves to contend with, so please think before you click "forward".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wHDGba8khz8/SgkChy9ZoJI/AAAAAAAAAIQ/c52bElBMR4k/s1600-h/noname.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 301px; height: 400px;" src="http://4.bp.blogspot.com/_wHDGba8khz8/SgkChy9ZoJI/AAAAAAAAAIQ/c52bElBMR4k/s400/noname.jpeg" alt="" id="BLOGGER_PHOTO_ID_5334798013235306642" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-2679370577185291425?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-VsDL2i6axH8UrJPmC1MRlx1GwE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-VsDL2i6axH8UrJPmC1MRlx1GwE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-VsDL2i6axH8UrJPmC1MRlx1GwE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-VsDL2i6axH8UrJPmC1MRlx1GwE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=G3Q0O0sNQRM:RRhtgoQMKLI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=G3Q0O0sNQRM:RRhtgoQMKLI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=G3Q0O0sNQRM:RRhtgoQMKLI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=G3Q0O0sNQRM:RRhtgoQMKLI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/2679370577185291425/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/05/i-dont-want-free-laptops-from-sony.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/2679370577185291425" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/2679370577185291425" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/G3Q0O0sNQRM/i-dont-want-free-laptops-from-sony.html" title="I DON'T want free laptops from Sony Ericsson" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_wHDGba8khz8/SgkChy9ZoJI/AAAAAAAAAIQ/c52bElBMR4k/s72-c/noname.jpeg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/05/i-dont-want-free-laptops-from-sony.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-2280093267915444982</id><published>2009-04-13T21:31:00.002+08:00</published><updated>2009-04-13T21:37:00.695+08:00</updated><title type="text">What Your Webmail Choice Reveals About You</title><content type="html">I have accounts on all the free web mail services. You name it, I have it. It's partly because I work in web development but mostly because I love collecting e-mail addresses even if they get neglected every now and then.&lt;br /&gt;&lt;br /&gt;However, my main web mail account is Gmail, it's been Gmail since 2004 and as the McDonald's ad goes," I'm Lovin It".&lt;br /&gt;&lt;br /&gt;The Gmail personality description is so me :-) I wonder if they hired a psychologist for this article.&lt;br /&gt;&lt;br /&gt;So which webmail service reflects your personality. Find out &lt;a href="http://www.pcworld.com/businesscenter/article/162940/what_your_webmail_choice_reveals_about_you.html"&gt;here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-2280093267915444982?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_GR0378yk7Nt3t-aSV42Ib747P8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_GR0378yk7Nt3t-aSV42Ib747P8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_GR0378yk7Nt3t-aSV42Ib747P8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_GR0378yk7Nt3t-aSV42Ib747P8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=BJrpUR0wzWM:6WDHo4OzjxM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=BJrpUR0wzWM:6WDHo4OzjxM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=BJrpUR0wzWM:6WDHo4OzjxM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=BJrpUR0wzWM:6WDHo4OzjxM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://www.pcworld.com/businesscenter/article/162940/what_your_webmail_choice_reveals_about_you.html" title="What Your Webmail Choice Reveals About You" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/2280093267915444982/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/04/what-your-webmail-choice-reveals-about.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/2280093267915444982" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/2280093267915444982" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/BJrpUR0wzWM/what-your-webmail-choice-reveals-about.html" title="What Your Webmail Choice Reveals About You" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/04/what-your-webmail-choice-reveals-about.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-6182317271246546185</id><published>2009-04-13T13:50:00.003+08:00</published><updated>2009-04-13T14:02:13.004+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pidgin" /><category scheme="http://www.blogger.com/atom/ns#" term="gtalk" /><title type="text">Google Talk Group Chat on Pidgin</title><content type="html">I'm not sure if it's just me but every time I am invited to a group chat on Gtalk I am given a link to log in to the gtalk web interface.&lt;br /&gt;&lt;br /&gt;This has been somewhat annoying that Pidgin doesn't support group chats from Gtalk.&lt;br /&gt;&lt;br /&gt;Apparently, I've been annoyed for nothing because Pidgin already supports group chats on gtalk.&lt;br /&gt;I'm just not sure why pidgin doesn't automatically recognize that it's a group chat and just bring me into the conference like it does on Yahoo, MSN or the other IM services it supports.&lt;br /&gt;&lt;br /&gt;When someone invites you to join a group chat, you get a message with some text that looks like&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;private-chat-xxxxxxx@groupchat.google.com&lt;/span&gt; and a link that launches your browser that leads you to a page that launches gtalk gadget. Note that "&lt;span style="font-weight: bold;"&gt;xxxxx&lt;/span&gt;" represents some random string that is most likely used to identify the group chat room.&lt;br /&gt;&lt;br /&gt;So here's how to join a Gtalk group chat from Pidgin using the above information :&lt;br /&gt;&lt;br /&gt;1. Click &lt;span style="font-weight: bold;"&gt;Buddies&lt;/span&gt; from the menu&lt;br /&gt;2. Then click &lt;span style="font-weight: bold;"&gt;Join Chat&lt;/span&gt;&lt;br /&gt;3. In the account drop down, make sure you use a Gtalk account.&lt;br /&gt;4. For the Room textfield, paste &lt;span style="font-style: italic; font-weight: bold;"&gt;private-chat-xxxxxxx&lt;br /&gt;&lt;/span&gt;5. For the&lt;span style="font-style: italic; font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Server textfield, paste &lt;span style="font-style: italic; font-weight: bold;"&gt;groupchat.google.com&lt;br /&gt;&lt;/span&gt;6. Click&lt;span style="font-style: italic; font-weight: bold;"&gt; JOIN&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-6182317271246546185?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bNsmXpfUTZ6Xur-9pKatji005uk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bNsmXpfUTZ6Xur-9pKatji005uk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bNsmXpfUTZ6Xur-9pKatji005uk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bNsmXpfUTZ6Xur-9pKatji005uk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=vkmHN5Ny5kg:kTiVvtse4GM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=vkmHN5Ny5kg:kTiVvtse4GM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=vkmHN5Ny5kg:kTiVvtse4GM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=vkmHN5Ny5kg:kTiVvtse4GM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/6182317271246546185/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/04/google-talk-group-chat-on-pidgin.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/6182317271246546185" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/6182317271246546185" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/vkmHN5Ny5kg/google-talk-group-chat-on-pidgin.html" title="Google Talk Group Chat on Pidgin" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/04/google-talk-group-chat-on-pidgin.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-7037952925044108540</id><published>2009-04-11T23:35:00.004+08:00</published><updated>2009-04-11T23:39:02.113+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="version control" /><category scheme="http://www.blogger.com/atom/ns#" term="cvs" /><title type="text">Recursively add folders and files in CVS</title><content type="html">One thing I really like about subversion is that an "svn add" on a folder recursively adds the folders and files inside that directory.&lt;br /&gt;&lt;br /&gt;It's not the case with CVS, you can always do a "cvs import" but if you really need to use "cvs add", then you may find the following useful:&lt;br /&gt;&lt;br /&gt;To recursively add &lt;span style="font-weight: bold;"&gt;directories&lt;/span&gt; inside a folder that is already under CVS :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;find . -type d -print | grep -v CVS | xargs -n1 cvs add&lt;/blockquote&gt;&lt;br /&gt;To recursively add &lt;span style="font-weight: bold;"&gt;files&lt;/span&gt; inside a folder that is already under CVS :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;find . -type f -print | grep -v CVS | xargs -n1 cvs add&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-7037952925044108540?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sKLw8L4S336pE7vyOw_iXQdb3LY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sKLw8L4S336pE7vyOw_iXQdb3LY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sKLw8L4S336pE7vyOw_iXQdb3LY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sKLw8L4S336pE7vyOw_iXQdb3LY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=gzCPLUEtuWc:I6Vh4-Knhvw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=gzCPLUEtuWc:I6Vh4-Knhvw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=gzCPLUEtuWc:I6Vh4-Knhvw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=gzCPLUEtuWc:I6Vh4-Knhvw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/7037952925044108540/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/04/recursively-add-folders-and-files-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/7037952925044108540" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/7037952925044108540" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/gzCPLUEtuWc/recursively-add-folders-and-files-in.html" title="Recursively add folders and files in CVS" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/04/recursively-add-folders-and-files-in.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-359456850273528264</id><published>2009-04-11T20:57:00.004+08:00</published><updated>2009-04-13T21:39:28.108+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="treepanel" /><category scheme="http://www.blogger.com/atom/ns#" term="extjs" /><title type="text">ExtJS Tip : Recursively Opening Nodes in a TreePanel</title><content type="html">There was one client who requested an improvement that stuck in the &lt;a href="http://hamisageek.blogspot.com/2007/07/ajax-powered-file-manager-demo.html"&gt;Ajax File Storage UI package&lt;/a&gt; that I developed.&lt;br /&gt;&lt;br /&gt;This client wanted the user interface to open a particular folder based on the url. For example, http://mysite.com/filemanager/?folder_id=100 should return a page that launches the UI and opens the folder with id 100.&lt;br /&gt;&lt;br /&gt;This is a perfectly valid request but there were a few challenges, namely ;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the treepanel nodes are loaded using ajax&lt;/li&gt;&lt;li&gt;the nodes or folders to open could be several levels deep&lt;/li&gt;&lt;/ul&gt;The solution had a back-end and a front-end component.&lt;br /&gt;&lt;br /&gt;The back-end component involved generating a list of folder_id's that led to the target folder_id. If the target folder is 3 levels deep, this folder list would have 3 folder_ids. Luckily this wasn't too hard to do in OpenACS as the heirarchy of folders in the file storage package is easy enough to get from the database.&lt;br /&gt;&lt;br /&gt;The front-end solution is a javascript function that goes thru this list and opens each folder based on the id's on that list.  Just in case it is useful to someone using the ExtJS treepanel, here's the code for that function.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;    asyncExpand : function(x) {&lt;br /&gt;    var treepanel = Ext.getCmp('treepanel');&lt;br /&gt;    var node = treepanel.getNodeById(this.config.initOpenFolder);&lt;br /&gt;    if(!node) {&lt;br /&gt;        var x = x+1;&lt;br /&gt;        var nextnodeid = this.config.pathToFolder[x];&lt;br /&gt;        var nextnode = treepanel.getNodeById(nextnodeid);&lt;br /&gt;        nextnode.on("expand",this.asyncExpand.createDelegate(this,[x]), this, {single:true});&lt;br /&gt;        nextnode.expand(true);&lt;br /&gt;    } else {&lt;br /&gt;        node.select()&lt;br /&gt;        node.fireEvent("click",node);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You will notice that it is an example of a &lt;a href="http://www.google.com.ph/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwww.c-point.com%2Fjavascript_tutorial%2Frecursion.htm&amp;amp;ei=dJzgSZXxH4eVkAXo05jYCw&amp;amp;usg=AFQjCNEIw-87T3f3_wtPW9T9Nqxu6EJMJQ&amp;amp;sig2=LXEqBA96ItSrjanvcO0yOg"&gt;recursive function&lt;/a&gt; or a function that calls itself. Allow me to break it down for you.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var treepanel = Ext.getCmp('treepanel');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Of course you need a treepanel, the one I use just happens to have the id "treepanel"&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var node = treepanel.getNodeById(this.config.initOpenFolder);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;this.config.initOpenFolder&lt;/span&gt; is the variable that holds the folder_id that the UI should open into by default. The script calls &lt;span style="font-style: italic;"&gt;getNodeById&lt;/span&gt; in the hopes of getting a reference to that folder on the treepanel&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    if(!node) {&lt;br /&gt;        var x = x+1;&lt;br /&gt;        var nextnodeid = this.config.pathToFolder[x];&lt;br /&gt;        var nextnode = treepanel.getNodeById(nextnodeid);&lt;br /&gt;        nextnode.on("expand",this.asyncExpand.createDelegate(this,[x]), this, {single:true});&lt;br /&gt;        nextnode.expand(true);&lt;br /&gt;    } else {&lt;br /&gt;        node.select()&lt;br /&gt;        node.fireEvent("click",node);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;If the node does not exist on the first level of the tree, we presume that it maybe on succeeding levels. This is where we make use of the folder_id list that the back-end should create for you, this list should be a javascript array.&lt;br /&gt;&lt;br /&gt;In this case it is &lt;span style="font-style: italic;"&gt;this.config.pathTofolder&lt;/span&gt;. This part of the function ...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;gets the next id on the list&lt;br /&gt;&lt;/li&gt;&lt;li&gt;gets a reference to the node with that id&lt;br /&gt;&lt;/li&gt;&lt;li&gt;assigns a function to the expand event of the node to call &lt;span style="font-style: italic;"&gt;asyncExpand&lt;/span&gt; with the index of the next folder_id on the list.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;When asyncExpand is called again, it will check to see if a node with a folder_id that matches &lt;span style="font-style: italic;"&gt;this.config.initOpenFolder &lt;/span&gt;exists. If not, it will get a reference to, assign a listener to the expand event and call the expand function of the node with the given index (x) .&lt;br /&gt;&lt;br /&gt;The process repeats until the folder with id equal to &lt;span style="font-style: italic;"&gt;this.config.initOpenFolder &lt;/span&gt;is found&lt;span style="font-style: italic;"&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-359456850273528264?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EzqlH0P5n8fVzgSjTYAv2I6oZBw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EzqlH0P5n8fVzgSjTYAv2I6oZBw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EzqlH0P5n8fVzgSjTYAv2I6oZBw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EzqlH0P5n8fVzgSjTYAv2I6oZBw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=lpaQwF7j-U4:aak0E96eQgs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=lpaQwF7j-U4:aak0E96eQgs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=lpaQwF7j-U4:aak0E96eQgs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=lpaQwF7j-U4:aak0E96eQgs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/359456850273528264/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/04/extjs-tip-recusively-opening-nodes-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/359456850273528264" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/359456850273528264" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/lpaQwF7j-U4/extjs-tip-recusively-opening-nodes-in.html" title="ExtJS Tip : Recursively Opening Nodes in a TreePanel" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/04/extjs-tip-recusively-opening-nodes-in.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-412127309819519106</id><published>2009-04-06T22:33:00.006+08:00</published><updated>2009-04-10T15:20:02.811+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="tv commercial" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title type="text">Are you technically savvy enough to be a PC ?</title><content type="html">Ok, so I can believe that Lauren is "not cool enough to be a mac person" because she's on a budget and there is no doubt in my mind that you can find a better deal with a PC just because there are a lot more PC retailers and manufacturers out there.&lt;br /&gt;&lt;br /&gt;However, I am having a hard time believing that this guy Giampaolo is tech savvy. Maybe Lauren is a better actress ? ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="340" width="530"&gt;&lt;param name="movie" value="http://www.youtube.com/v/6LzcD5vSH80&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/6LzcD5vSH80&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="340" width="530"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-412127309819519106?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t32CYa_j0Sk1C6tSIQF9DtWRgJI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t32CYa_j0Sk1C6tSIQF9DtWRgJI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t32CYa_j0Sk1C6tSIQF9DtWRgJI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t32CYa_j0Sk1C6tSIQF9DtWRgJI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=mbRExphv3Qs:MBzfO15zdE4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=mbRExphv3Qs:MBzfO15zdE4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=mbRExphv3Qs:MBzfO15zdE4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=mbRExphv3Qs:MBzfO15zdE4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/412127309819519106/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/04/are-you-technically-savvy-enough-to-be.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/412127309819519106" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/412127309819519106" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/mbRExphv3Qs/are-you-technically-savvy-enough-to-be.html" title="Are you technically savvy enough to be a PC ?" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/04/are-you-technically-savvy-enough-to-be.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-212988179021392318</id><published>2009-04-04T20:28:00.006+08:00</published><updated>2009-04-05T12:24:00.197+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="world" /><category scheme="http://www.blogger.com/atom/ns#" term="economy" /><category scheme="http://www.blogger.com/atom/ns#" term="commentary" /><title type="text">Nograles slams OECD</title><content type="html">I just had to react to a &lt;a href="http://business.inquirer.net/money/breakingnews/view/20090404-197929/Nograles-slams-OECD"&gt;breaking news item&lt;/a&gt; on &lt;a href="http://business.inquirer.net/money/breakingnews/view/20090404-197929/Nograles-slams-OECD"&gt;Inquirer.net&lt;/a&gt; about Congressman and Speaker of the Philippine House of Representatives Prospero Nograles slamming the Organisation for Economic Co-operation and Development(OECD) for black listing the Philippines as "a non-cooperative tax haven".&lt;br /&gt;&lt;br /&gt;The congressman deserves a round of applause, no, more than applause, a standing ovation for slamming this action of the OECD and further pointing out that it is, in fact, the members of the OECD who are directly or indirectly responsible for the economic crisis the world is experiencing now.&lt;br /&gt;&lt;br /&gt;Among its members include the United States, the United Kingdom, Germany, Iceland and Spain all of whom have had financial institutions closed or bailed out of bankruptcy. A full listing of its members can be found &lt;a href="http://www.oecd.org/document/58/0,3343,en_2649_201185_1889402_1_1_1_1,00.html"&gt;here&lt;/a&gt;. I just wonder where the OECD was when the financial institutions of its own member nations were making bad choices and imprudent decisions when their economies were booming.&lt;br /&gt;&lt;br /&gt;I am no economist but it doesn't take any financial expertise to see how well our local financial institutions have fared compared to the biggest most reknowned institutions abroad. This tells me that, at least in this regard, our government must have done something right.&lt;br /&gt;&lt;br /&gt;I really thought crab mentality was a Filipino trait, apparently it's international.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-212988179021392318?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZFDzFYZySNNrpPPi_ohJKgNSZqs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZFDzFYZySNNrpPPi_ohJKgNSZqs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZFDzFYZySNNrpPPi_ohJKgNSZqs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZFDzFYZySNNrpPPi_ohJKgNSZqs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=dFuTsY0LhDk:R86MRVyIP5Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=dFuTsY0LhDk:R86MRVyIP5Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=dFuTsY0LhDk:R86MRVyIP5Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=dFuTsY0LhDk:R86MRVyIP5Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://business.inquirer.net/money/breakingnews/view/20090404-197929/Nograles-slams-OECD" title="Nograles slams OECD" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/212988179021392318/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/04/nograles-slams-oecd.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/212988179021392318" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/212988179021392318" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/dFuTsY0LhDk/nograles-slams-oecd.html" title="Nograles slams OECD" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/04/nograles-slams-oecd.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-8037109404638843466</id><published>2009-04-04T15:11:00.013+08:00</published><updated>2009-04-10T15:20:24.893+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vpn" /><category scheme="http://www.blogger.com/atom/ns#" term="systems administration" /><category scheme="http://www.blogger.com/atom/ns#" term="dd-wrt" /><title type="text">Setting up OpenVPN with dd-wrt for unexpected road trips you don't want to miss</title><content type="html">&lt;span style="font-style: italic;"&gt;Somehow the words "web worker" and "vacation" don't seem to mix well together.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Web Working on Road Trips&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't have any solid plans for the holy week but I certainly don't want to miss trips to Tagaytay, Bulacan or the nearby Ocean Park if anybody decides they want to go on a road trip.&lt;br /&gt;&lt;br /&gt;Fortunately, finding an internet connection is easier now than ever before. Between &lt;a href="http://smart.com.ph/bro/"&gt;Smart Bro&lt;/a&gt;, &lt;a href="http://www.globebroadbandtattoo.com.ph/"&gt;Globe Tatto&lt;/a&gt;, commercial and free Wi-Fi services, you're pretty much covered, specially if you won't be wandering too far away from Metro Manila.&lt;br /&gt;&lt;br /&gt;You've got your trusty laptop and internet access is not a problem, so what's keeping you from going on that road trip ?&lt;br /&gt;&lt;br /&gt;For me, it's secure access to my files and the virtual machines on my home network.&lt;br /&gt;&lt;br /&gt;The internet may be more accessible here in the Philippines but it isn't necessarily more secure. In fact the data packets, be it from WiFi, 3G or HSDPA, are transmitted over the air. Anyone, with enough knowhow, the proper hardware and software could possibly capture the data as it is being transmitted.&lt;br /&gt;&lt;br /&gt;What's a mobile web worker to do ? The solution, setting up a Virtual Private Network (VPN) .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Is a VPN Overkill ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I know, it sounds overkill but "VPN" should not connote buying expensive Cisco hardware and VPN software. It's now possible to set up a VPN on your home network with relatively inexpensive hardware like the &lt;a href="http://www-ph.linksys.com/servlet/Satellite?c=L_Product_C2&amp;amp;childpagename=PH%2FLayout&amp;amp;cid=1139845558921&amp;amp;pagename=Linksys%2FCommon%2FVisitorWrapper&amp;amp;lid=5892185430B04"&gt;Linksys WRT54G&lt;/a&gt; router (which I happen to own) and free software like &lt;span style="text-decoration: underline;"&gt;dd-wrt&lt;/span&gt;&lt;a href="http://www.dd-wrt.com/dd-wrtv3/index.php"&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The first thing to do of course is to acquire a router that supports dd-wrt. This use to be easy as the Linksys WRT54G was the only router that was supported. Today, you have a lot more options from the likes of Buffalo, Asus and Netgear.&lt;br /&gt;&lt;br /&gt;I won't discuss how to setup dd-wrt on your router as it's out of the scope of this article. You can find instructions from the &lt;a href="http://www.dd-wrt.com/wiki/index.php/Installation"&gt;dd-wrt wik&lt;/a&gt;i and do a search on google to read about how other people have fared in their attempts at installation. Note though that the process is not for the feint of heart. It's gotten easier with each release but there is still a possibility that you will "brick" (the term used to describe a router that has been rendered useless) your router.&lt;br /&gt;&lt;br /&gt;dd-wrt has many builds. Make sure to install the vpn build.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What you need for your VPN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In addition to :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A supported router, I used a Linksys WRT54G v2.2 router.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;dd-wrt vpn build, I installed v24-sp1&lt;/li&gt;&lt;/ul&gt;here are the other prerequisites for setting up the VPN :&lt;ul&gt;&lt;li&gt;A desktop or laptop computer with Linux , my desktop is running OpenSUSE v11&lt;br /&gt;&lt;/li&gt;&lt;li&gt;OpenVPN on the linux desktop, I installed this using the Yast software manager&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A text editor like Kate or vi&lt;/li&gt;&lt;/ul&gt;Let me stress that this worked for me using the above hardware and software. If you are using a different router and/or a different version of dd-wrt, you might want to do some more research before attempting this.&lt;br /&gt;&lt;br /&gt;You've been warned !!&lt;br /&gt;&lt;br /&gt;The computer with OpenVPN is where we generate the certificate files needed to setup the OpenVPN server on dd-wrt. We will not be setting up OpenVPN on this computer.&lt;br /&gt;&lt;br /&gt;It is also possible to use windows with the OpenVPN GUI installed instead of a linux desktop but I won't discuss how to do it here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step by Step Set Up&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's get to it.&lt;br /&gt;&lt;br /&gt;1. On your linux desktop, open a terminal and become root by using su.&lt;br /&gt;&lt;blockquote&gt;su -&lt;/blockquote&gt;2.  Go to /usr/share/openvpn/easy-rsa/2.0&lt;br /&gt;&lt;blockquote&gt;cd /usr/share/openvpn/easy-rsa/2.0&lt;/blockquote&gt;3.  Execute the following commands in the correct order&lt;br /&gt;&lt;blockquote&gt;# sets some environment variables to make the succeeding scripts work&lt;br /&gt;source vars&lt;br /&gt;&lt;br /&gt;# cleans up any previously created keys if any&lt;br /&gt;./clean-all&lt;br /&gt;&lt;br /&gt;# create a certificate&lt;br /&gt;# you will be asked to enter some information&lt;br /&gt;# remember what you entered as you will need to use the same information&lt;br /&gt;# to generate the server key&lt;br /&gt;./build-ca&lt;br /&gt;&lt;br /&gt;# create a server key&lt;br /&gt;./build-key-server server&lt;br /&gt;&lt;br /&gt;# create the Diffie-Hellman parameters needed by the server&lt;br /&gt;./build-dh&lt;/blockquote&gt;4. The commands above will create a keys folder inside the current folder you are in with the files you need for the next step. Open the files using your chosen text editor.&lt;br /&gt;&lt;br /&gt;5. Open a web browser and enter the IP address of your router. If you did not change the default, the IP should be 192.168.1.1. This opens to the web administration interface for dd-wrt&lt;br /&gt;&lt;br /&gt;6. Click Services, then under OpenVPN daemon click the "Enable" radio button. This should reveal additional textareas where you need to paste the contents of the files from the keys folder.&lt;br /&gt;&lt;blockquote&gt;Public Server Cert            &gt; ca.crt&lt;br /&gt;&lt;br /&gt;# note that you only need the portion of ca.crt that starts with&lt;br /&gt;# -----BEGIN CERTIFICATE -----&lt;br /&gt;# and ends with&lt;br /&gt;# ----- END CERTIFICATE -----.&lt;br /&gt;&lt;br /&gt;Certificate Revoke List (CRL) &gt; (blank)&lt;br /&gt;Public Client Cert            &gt; server.crt&lt;br /&gt;Private Client Key            &gt; server.key&lt;br /&gt;DH PEM                        &gt; dh1024.pem&lt;br /&gt;OpenVPN Config                &gt; (see 7 below)&lt;br /&gt;OpenVPN TLS Auth              &gt; (blank)&lt;/blockquote&gt;7.  For the OpenVPN Config textarea, you will need to decide what IP address range you want to use for the private routing network that will be used by OpenVPN. In the sample configuration below, I decided to use 192.168.2.0 as the private routing network. The push parameter should have the IP and subnet of your local area network.&lt;br /&gt;&lt;blockquote&gt;push "route 192.168.1.0 255.255.255.0"&lt;br /&gt;server 192.168.2.0 255.255.255.0&lt;br /&gt;dev tun0&lt;br /&gt;proto udp&lt;br /&gt;keepalive 10 120&lt;br /&gt;dh /tmp/openvpn/dh.pem&lt;br /&gt;ca /tmp/openvpn/ca.crt&lt;br /&gt;cert /tmp/openvpn/cert.pem&lt;br /&gt;key /tmp/openvpn/key.pem&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;8. Once the textareas have been filled up, click "Apply Settings" and just to be sure, click "Reboot Router" to reboot the router.&lt;br /&gt;&lt;br /&gt;Hopefully, the OpenVPN server on your router should be up and running. To verify, use ssh to log into your router and run&lt;br /&gt;&lt;blockquote&gt;ps | grep openvpn&lt;/blockquote&gt;You should see an openvpn process running. If you don't, then you'll need to take the following steps to turn on logging and debug the problem.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Troubleshooting with Logs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To turn on logging, click the Services tab and click the "Enable" radio button under System Log. Leave "Remote Server" blank. Then add &lt;span style="font-style: italic;"&gt;verb 5&lt;/span&gt; to your OpenVPN config textarea. Click "Apply Settings". Then log into your router via ssh and execute.&lt;br /&gt;&lt;blockquote&gt;tail -f /var/log/message&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Connecting Clients&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that you have your server up and running. The next thing we want to do is to setup a client computer to connect to the OpenVPN server. If you're on windows, you can download the OpenVPN GUI.&lt;br /&gt;&lt;br /&gt;For Linux users, you can use the openvpn applet for the NetworkManager which comes installed by default on most Linux distributions.&lt;br /&gt;&lt;br /&gt;Before anything else, you need to create the certificates that your client computers (in this case my laptop) will use to connect to the server.&lt;br /&gt;&lt;br /&gt;Login to your linux desktop and go back to /usr/share/openvpn/easy-rsa/2.0, then execute&lt;br /&gt;&lt;blockquote&gt;./build-key client1&lt;/blockquote&gt;where &lt;span style="font-style: italic;"&gt;client1&lt;/span&gt; is the name of the client computer you want to connect to. You can also leave it as client1 if you like.&lt;br /&gt;&lt;br /&gt;The above will generate 3 files in the keys folder, a client1.crt, client1.csr and client1.key. You need to copy client1.crt and client1.key to the client computer that wants to connect to the server. You also need to copy ca.crt from the keys folder to the client computer.&lt;br /&gt;&lt;br /&gt;Click on the NetworkManager applet icon on your linux desktop, then click "VPN Connections" -&gt; "Configure VPN".&lt;br /&gt;&lt;br /&gt;Click on the VPN tab, then click "Add", choose "OpenVPN" from the connection type drop down.&lt;br /&gt;&lt;br /&gt;In the succeeding form, enter the following information :&lt;br /&gt;&lt;blockquote&gt;Connection name : (enter whatever you like here)&lt;br /&gt;Gateway : (for now enter the IP address of your router)&lt;br /&gt;Type: Certificates (TLS)&lt;br /&gt;User Certificate : point this to the location of client1.crt on the client computer&lt;br /&gt;CA Certificate : point this to the ca.crt file&lt;br /&gt;Private Key: point this to client1.key&lt;/blockquote&gt;You should now be able to use the NetworkManger to connect to your router's OpenVPN server.&lt;br /&gt;We have tested so far that the VPN server works but for this to be actually useful, the OpenVPN server should be able to accept connections from the internet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dynamic DNS and the Router Firewall&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In quickest way to do this is to sign up to a free dyanmic DNS service.&lt;br /&gt;&lt;br /&gt;dd-wrt supports several free dynamic dns services &lt;a href="http://www.dd-wrt.com/wiki/index.php/DDNS_-_How_to_setup_Custom_DDNS_settings_using_embedded_inadyn_-_HOWTO"&gt;here&lt;/a&gt; is a comprehensive how to from the dd-wrt wiki.&lt;br /&gt;&lt;br /&gt;Once you have DDNS set up, you need to open port 1194 on the router's firewall in order to accept connections from the internet.&lt;br /&gt;&lt;br /&gt;Go back to the dd-wrt web interface, click the Administration tab, then click Commands. Enter the following code and click the  "Save Firewall" button.&lt;br /&gt;&lt;blockquote&gt;# Replace 1194 with your OpenVPN port number:&lt;br /&gt;iptables -I INPUT 1 -p tcp --dport 1194 -j ACCEPT&lt;br /&gt;iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT&lt;br /&gt;&lt;br /&gt;# change 192.168.2.0/24 to the private routing network you chose earlier&lt;br /&gt;iptables -I FORWARD 1 --source 192.168.2.0/24 -j ACCEPT&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;You may want to click "Reboot Router" to reboot the router and make sure that openvpn is working with the new start up firewall script.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Connecting for real&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The next step is to go on a road trip, find free WiFI and connect to the OpenVPN server.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Have a blessed holy week and advanced happy easter to everyone&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References :&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=35689&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=0"&gt;http://www.dd-wrt.com/phpBB2/viewtopic.php?t=35689&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=0&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dd-wrt.com/wiki/index.php/OpenVPN"&gt;http://www.dd-wrt.com/wiki/index.php/OpenVPN&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-8037109404638843466?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w-tCyRQUwC9Wsm4_HZ7m-_4dENI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w-tCyRQUwC9Wsm4_HZ7m-_4dENI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w-tCyRQUwC9Wsm4_HZ7m-_4dENI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w-tCyRQUwC9Wsm4_HZ7m-_4dENI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=H0BlcKc4xys:ROANqxaVze4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=H0BlcKc4xys:ROANqxaVze4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=H0BlcKc4xys:ROANqxaVze4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=H0BlcKc4xys:ROANqxaVze4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/8037109404638843466/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/04/setting-up-openvpn-with-dd-wrt-for.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/8037109404638843466" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/8037109404638843466" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/H0BlcKc4xys/setting-up-openvpn-with-dd-wrt-for.html" title="Setting up OpenVPN with dd-wrt for unexpected road trips you don't want to miss" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/04/setting-up-openvpn-with-dd-wrt-for.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-755291978670677990</id><published>2009-03-30T12:20:00.004+08:00</published><updated>2009-04-10T15:20:46.881+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="tv commercial" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title type="text">I'm not cool enough to be a Mac person</title><content type="html">&lt;a href="http://mikeabundo.com/2009/03/29/microsoft-laptop-mac/"&gt;Mike Abundo&lt;/a&gt; dissects Microsoft's new ad. I felt it is genuine and real. While price is not everything, I believe that one is more likely to find value for money with so many PC's (choices) on the market.&lt;br /&gt;&lt;br /&gt;Just last week, a friend was shopping around at the SM Cyberzone, looking for a laptop. He was totally drooling over a macbook pro but accepts that he can't afford the Mac with the specs he needs.  Lo and behold he found and bought a &lt;a href="http://www.laptopking.com.ph/controller.do?action=singleproduct&amp;amp;productid=4685"&gt;laptop&lt;/a&gt; for just P28,000 ($600). That laptop was a centrino core 2 duo with 2 GB of RAM and 160GB of HDD. When he told me, I couldn't believe it either. Note, though, that the price does not include the OS. He needed to shell out an extra P5,000 for Vista, he decided to save the P5,0000 and installed Ubuntu on it instead. ;-)&lt;br /&gt;&lt;br /&gt;DISCLAIMER : I'm a PC ... a Linux PC :-)&lt;br /&gt;&lt;br /&gt;&lt;object height="295" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/EIS6G-HvnkU&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/EIS6G-HvnkU&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="295" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-755291978670677990?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OLJfxaeqttFUS56Ef7ZO2L-CvZ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OLJfxaeqttFUS56Ef7ZO2L-CvZ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OLJfxaeqttFUS56Ef7ZO2L-CvZ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OLJfxaeqttFUS56Ef7ZO2L-CvZ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=PSc6kgoHtN0:28TxE3-JT7U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=PSc6kgoHtN0:28TxE3-JT7U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=PSc6kgoHtN0:28TxE3-JT7U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=PSc6kgoHtN0:28TxE3-JT7U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://feeds.mikeabundo.com/~r/MikeAbundo/~3/MA0vKM4CEV0/" title="I'm not cool enough to be a Mac person" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/755291978670677990/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/03/im-not-cool-enough-to-be-mac-person.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/755291978670677990" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/755291978670677990" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/PSc6kgoHtN0/im-not-cool-enough-to-be-mac-person.html" title="I'm not cool enough to be a Mac person" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/03/im-not-cool-enough-to-be-mac-person.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-5519579773663024457</id><published>2009-03-17T21:52:00.005+08:00</published><updated>2009-04-10T15:21:11.178+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="systems administration" /><category scheme="http://www.blogger.com/atom/ns#" term="computer" /><category scheme="http://www.blogger.com/atom/ns#" term="swap" /><title type="text">Swappiness, virtualziation and a faster system</title><content type="html">I've been know to keep my workstation up and running for at most a week before rebooting.&lt;br /&gt;&lt;br /&gt;I find it necessary because I notice a significant slow down in the performance of my workstation after that period of time.&lt;br /&gt;&lt;br /&gt;I haven't been able to figure out why until a few weeks ago.&lt;br /&gt;&lt;br /&gt;My workstation has 2GB of internal memory and as per the rule of thumb, I have a 4GB swap partition allocated on a 250GB hard disk drive. &lt;br /&gt;&lt;br /&gt;I really can't claim to know what's happening in the background but my hunch is that the stuff that the virtual machines and applications I keep open that are initially on internal memory are gradually being moved to the swap partition.&lt;br /&gt;&lt;br /&gt;Swap is generally slower because it's on a disk drive.&lt;br /&gt;&lt;br /&gt;I found &lt;a href="http://fosswire.com/post/2009/2/sysctl-swappiness/"&gt;this article from FOSSWire&lt;/a&gt; that suggests turning off swap to speed up your system.&lt;br /&gt;&lt;br /&gt;Its working well for me so far :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-5519579773663024457?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ck4UP7x8t-35zNVHB2BOm4hQTUE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ck4UP7x8t-35zNVHB2BOm4hQTUE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ck4UP7x8t-35zNVHB2BOm4hQTUE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ck4UP7x8t-35zNVHB2BOm4hQTUE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=ICjGyfWw1EU:rEbxHML-QDM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=ICjGyfWw1EU:rEbxHML-QDM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=ICjGyfWw1EU:rEbxHML-QDM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=ICjGyfWw1EU:rEbxHML-QDM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://fosswire.com/post/2009/2/sysctl-swappiness/" title="Swappiness, virtualziation and a faster system" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/5519579773663024457/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/03/swappiness-virtualziation-and-faster.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/5519579773663024457" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/5519579773663024457" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/ICjGyfWw1EU/swappiness-virtualziation-and-faster.html" title="Swappiness, virtualziation and a faster system" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/03/swappiness-virtualziation-and-faster.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-6898805874179594642</id><published>2009-03-02T12:05:00.004+08:00</published><updated>2009-04-03T12:20:49.690+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="photos" /><category scheme="http://www.blogger.com/atom/ns#" term="workspaces" /><title type="text">5 Inspirational Workspaces</title><content type="html">Simon Mackie over at &lt;a href="http://webworkerdaily.com/"&gt;Web Worker Daily&lt;/a&gt; lists 5 inspirational workspaces. My personal favorite on that list is the &lt;a href="http://ramblingrenovators.blogspot.com/2008/04/98-done-o.html"&gt;Rambling Renovator's Office Space&lt;/a&gt; primarily because of the lime green on the walls.&lt;br /&gt;&lt;br /&gt;However, a single laptop will probably not suffice for me. I have found that I need 2 monitors to be productive and I am contemplating on getting a bigger 3rd one to get Aptana IDE to fit.&lt;br /&gt;&lt;br /&gt;I would probably throw in a few elements of &lt;a href="http://www.stefandidak.com/office/index.php"&gt;Stefan Didak's Home Office&lt;/a&gt; into it and it would be perfect :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-6898805874179594642?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n0yFu_isyNEH0rFO8dzLaAr5EXM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n0yFu_isyNEH0rFO8dzLaAr5EXM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n0yFu_isyNEH0rFO8dzLaAr5EXM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n0yFu_isyNEH0rFO8dzLaAr5EXM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=bS4z_ZwTr84:jGmeoOt5AIY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=bS4z_ZwTr84:jGmeoOt5AIY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=bS4z_ZwTr84:jGmeoOt5AIY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=bS4z_ZwTr84:jGmeoOt5AIY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://webworkerdaily.com/2009/02/28/5-inspirational-workspaces/" title="5 Inspirational Workspaces" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/6898805874179594642/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/03/5-inspirational-workspaces.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/6898805874179594642" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/6898805874179594642" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/bS4z_ZwTr84/5-inspirational-workspaces.html" title="5 Inspirational Workspaces" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/03/5-inspirational-workspaces.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-1682607607595975164</id><published>2009-02-26T20:47:00.003+08:00</published><updated>2009-04-03T12:21:19.364+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title type="text">Google's Native Client Security Contest and Is this Google's verison of the Java browser plugin ?</title><content type="html">So I was skimming thru my reading list today when I came across &lt;a href="http://google-code-updates.blogspot.com/2009/02/announcing-native-client-security.html"&gt;this&lt;/a&gt; blog post from the Google Code Update blog. It looks like Google is running a contest to find bugs, exploits and vulnerabilities on the Native Client.&lt;br /&gt;&lt;br /&gt;The first thing I asked myself was, what's the Native Client ?&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://code.google.com/p/nativeclient/?utm_campaign=en&amp;amp;utm_source=en-et-gcblog&amp;amp;utm_medium=et"&gt;google code page&lt;/a&gt; for the native client project looked straightforward but the possibilities of something like this is astounding. &lt;br /&gt;&lt;br /&gt;Running Quake on your browser ? Are you kidding ? Get Outta here !!!&lt;br /&gt;&lt;br /&gt;If you can run Quake on your browser, imagine being able to run other MMORPG's (World of Warcraft anyone ?) on the browser !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-1682607607595975164?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cqtpIrJHA-aNwGh64FVjPxtPYIM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cqtpIrJHA-aNwGh64FVjPxtPYIM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cqtpIrJHA-aNwGh64FVjPxtPYIM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cqtpIrJHA-aNwGh64FVjPxtPYIM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=ZG1ObhgTfY4:F8N-_i0ET-s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=ZG1ObhgTfY4:F8N-_i0ET-s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=ZG1ObhgTfY4:F8N-_i0ET-s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=ZG1ObhgTfY4:F8N-_i0ET-s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://google-code-updates.blogspot.com/2009/02/announcing-native-client-security.html" title="Google's Native Client Security Contest and Is this Google's verison of the Java browser plugin ?" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/1682607607595975164/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/02/googles-native-client-security-contest.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/1682607607595975164" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/1682607607595975164" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/ZG1ObhgTfY4/googles-native-client-security-contest.html" title="Google's Native Client Security Contest and Is this Google's verison of the Java browser plugin ?" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/02/googles-native-client-security-contest.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-7854042641253310858</id><published>2009-02-23T20:09:00.003+08:00</published><updated>2009-04-03T12:21:03.872+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware" /><category scheme="http://www.blogger.com/atom/ns#" term="computer" /><title type="text">If I were going to build a new PC</title><content type="html">Someone asked me, if I were going to build a high-end PC today, what parts would go into it and how much would it cost. &lt;br /&gt;&lt;br /&gt;The first thing I asked was, what's it for ? He says it's going to be a windows box for graphics and multimedia with a little gaming on the side.&lt;br /&gt;&lt;br /&gt;Here's my answer ....&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt; 14,000 : Core i7 920&lt;br /&gt; 16,500 : Msi Eclipse X58 SLI 1366&lt;br /&gt; 29,000 : Corsair 6gb (TR3X6G1333C9) XMS3 X 2 = 12GB&lt;br /&gt;  3.750 : Palit ATI HD 3850 Super 512mb (256bit) ddr3&lt;br /&gt; 13,000 : 1tb Caviar Black (WD1001FALS) 32mb dual processor  X 2 = 2TB&lt;br /&gt;  7,800 : Cooler Master (RC-932) HAF 932 atx w/o psu black&lt;br /&gt;  7.000 : Cooler Master UCP 700W Ultimate 80PLUS Silver Certified&lt;br /&gt; 18,000 : 2693hm SAMSUNG 26"&lt;br /&gt;------------------------------------------&lt;br /&gt;P109,050&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;Prices are from TipidPC.com. &lt;br /&gt;&lt;br /&gt;So what do you think ? A little overkill for graphics and multimedia or should I have gone dual SLI or even a 4870 X2 graphics card ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-7854042641253310858?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9aEVbZE-z7nt6x5izRbMoUnQqxs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9aEVbZE-z7nt6x5izRbMoUnQqxs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9aEVbZE-z7nt6x5izRbMoUnQqxs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9aEVbZE-z7nt6x5izRbMoUnQqxs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=zhwMAvkO"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=oB1HTVtZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?i=oB1HTVtZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=dpvril79"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/7854042641253310858/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/02/if-i-were-going-to-build-new-pc.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/7854042641253310858" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/7854042641253310858" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/Z1MDIE1qFm4/if-i-were-going-to-build-new-pc.html" title="If I were going to build a new PC" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/02/if-i-were-going-to-build-new-pc.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-6299742441702059572</id><published>2009-02-23T12:21:00.005+08:00</published><updated>2009-04-10T15:21:36.473+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="social networking" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><title type="text">Facebook HowTo : Protect Your Privacy on Facebook</title><content type="html">I found this rather informative video from CnetTV on how to protect your privacy on Facebook using the groups list feature. I've been spending so much time on Facebook accumulating friends that I think I'm going to need to do this soon :-)&lt;br /&gt;&lt;br /&gt;&lt;object width="335" height="360"&gt;&lt;param name="movie" value="http://www.cnet.com/av/video/flv/newPlayers/universal.swf" /&gt;&lt;param name="wmode" value="transparent" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="FlashVars" value="playerType=embedded&amp;value=50005235" /&gt;&lt;embed src="http://www.cnet.com/av/video/flv/newPlayers/universal.swf" type="application/x-shockwave-flash" wmode="transparent" width="335" height="360" allowFullScreen="true" FlashVars="playerType=embedded&amp;value=50005235"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-6299742441702059572?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Sg2fn-bTVd30UDSIDaiP-0mgRrA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Sg2fn-bTVd30UDSIDaiP-0mgRrA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Sg2fn-bTVd30UDSIDaiP-0mgRrA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Sg2fn-bTVd30UDSIDaiP-0mgRrA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=rQUKdT2o"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=bKYRrOL0"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?i=bKYRrOL0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=JA186MTf"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://cnettv.cnet.com/2001-1_53-50005235.html" title="Facebook HowTo : Protect Your Privacy on Facebook" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/6299742441702059572/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/02/facebook-howto-protect-your-privacy-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/6299742441702059572" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/6299742441702059572" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/imQQLyINnT0/facebook-howto-protect-your-privacy-on.html" title="Facebook HowTo : Protect Your Privacy on Facebook" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/02/facebook-howto-protect-your-privacy-on.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-3505050573566203213</id><published>2009-02-16T12:22:00.003+08:00</published><updated>2009-04-10T15:21:51.404+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="qa" /><category scheme="http://www.blogger.com/atom/ns#" term="watir" /><title type="text">An ingenious solution for handling Javascript popups in Watir</title><content type="html">So I've been struggling to figure out how to elegantly and properly handle popups on Watir. I've read and tried all five solutions listed on &lt;a href="http://wiki.openqa.org/display/WTR/JavaScript+Pop+Ups"&gt;http://wiki.openqa.org/display/WTR/JavaScript+Pop+Ups&lt;/a&gt; but still couldn't find one that works well for the version of Ruby/Watir I am using.&lt;br /&gt;&lt;br /&gt;I'm using Ruby 1.8.6 and Watir 1.6.2, BTW.&lt;br /&gt;&lt;br /&gt;Then I came across a blog post that proposes to override the javascript alert and confirm functions. Read the whole thread from google groups &lt;a href="http://groups.google.com/group/watir-general/browse_thread/thread/a77d11549f40a5f1/71aa139712355317?lnk=gst&amp;amp;q=execscript+popup#71aa139712355317"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I was stoked !!! Even more so that it worked beautifully.&lt;br /&gt;&lt;br /&gt;What I did was to encapsulate it into a def which accepts the IE instance created by watir.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  def replace_js_popups(ie)&lt;br /&gt;      ie.document.parentWindow.execScript("window.confirm=function(){return true}");&lt;br /&gt;      ie.document.parentWindow.execScript("window.alert=function(){return true}");&lt;br /&gt;  end&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now, right after going to a page, I would call on "replace_js_popups" to override both confirm and alert, like so.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ie = Watir::IE.new&lt;br /&gt;ie.goto(&lt;span style="font-style: italic;"&gt;url_with_popup_here&lt;/span&gt;)&lt;br /&gt;replace_js_popup&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Of course, this is not a fool proof solution. By replacing the alert and confirm functions with a function that always returns true, you will need to always expect the popups to return a value of true in your automated tests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-3505050573566203213?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w4w5rMu8YVSL3XGWuU53A7hQdmA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w4w5rMu8YVSL3XGWuU53A7hQdmA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w4w5rMu8YVSL3XGWuU53A7hQdmA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w4w5rMu8YVSL3XGWuU53A7hQdmA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=HpQSY0MI"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=RSm18Vsn"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?i=RSm18Vsn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=iN86cNMl"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://groups.google.com/group/watir-general/browse_thread/thread/a77d11549f40a5f1/71aa139712355317?lnk=gst&amp;q=execscript+popup#71aa139712355317" title="An ingenious solution for handling Javascript popups in Watir" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/3505050573566203213/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/02/ingenious-solution-for-handling.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/3505050573566203213" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/3505050573566203213" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/M1eEIeO230s/ingenious-solution-for-handling.html" title="An ingenious solution for handling Javascript popups in Watir" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/02/ingenious-solution-for-handling.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-6620565446867593538</id><published>2009-02-08T23:30:00.007+08:00</published><updated>2009-04-10T15:22:19.930+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="extjs" /><category scheme="http://www.blogger.com/atom/ns#" term="grid" /><title type="text">ExtJS Tip : Sortable Grid Rows via Drag and Drop</title><content type="html">One particular challenge on a recent project is to have the ability to sort grid rows using drag and drop. With lots of help from the ExtJS forums, here's how I ended up doing it.&lt;br /&gt;&lt;br /&gt;The code snippet below shows an Ext gridpanel with the added ability to allow users to sort rows using drag and drop. This is acheived by (1) setting the enableDragDrop configuration to true to allow dragging and dropping of rows and (2) creating a drop target that handles the drop event when a row is dropped.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update 031609&lt;/span&gt; : An anonymous comment mentioned having problems with sorting multiple rows. This tip only works with single select rows. I have added the code change below that forces the grid to use a single select row selection model.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;var grid = new Ext.grid.GridPanel({&lt;br /&gt;id: 'mygrid',&lt;br /&gt;title: 'My Grid',&lt;br /&gt;store: store, // define the data store in a separate variable&lt;br /&gt;loadMask: true,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    ddGroup:'mygridDD',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    enableDragDrop: true,&lt;/span&gt; // enable drag and drop of grid rows&lt;br /&gt;viewConfig: {&lt;br /&gt;emptyText: 'No pages found',&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sm: new Ext.grid.RowSelectionModel({singleSelect:true}),&lt;/span&gt;&lt;br /&gt;forceFit: true&lt;br /&gt;}, columns: gridcolumns, // define grid columns in a separate variable&lt;br /&gt;listeners: {&lt;br /&gt;"render": {&lt;br /&gt;  scope: this,&lt;br /&gt;  fn: function(grid) {&lt;br /&gt;&lt;br /&gt;      // Enable sorting Rows via Drag &amp;amp; Drop&lt;br /&gt;      // this drop target listens for a row drop&lt;br /&gt;      //  and handles rearranging the rows&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;              var ddrow = new Ext.dd.DropTarget(grid.container, {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                  ddGroup : 'mygridDD',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                  copy:false,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                  notifyDrop : function(dd, e, data){&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                      var ds = grid.store;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                      // NOTE:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                      // you may need to make an ajax call here&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                      // to send the new order&lt;br /&gt;              // and then reload the store&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                      // alternatively, you can handle the changes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                      // in the order of the row as demonstrated below&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                        // ***************************************&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                        var sm = grid.getSelectionModel();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                        var rows = sm.getSelections();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                        if(dd.getDragData(e)) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                            var cindex=dd.getDragData(e).rowIndex;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                            if(typeof(cindex) != "undefined") {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                                for(i = 0; i&lt;rows.length;&gt;&lt;span style="font-weight: bold;"&gt; &amp;lt;  rows.length; i++) {&lt;br /&gt;                                ds.remove(ds.getById(rows[i].id));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                                }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                                ds.insert(cindex,data.selections);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                                sm.clearSelections();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                             }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                         }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                        // ************************************&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                   }) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                   // load the grid store&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                  //  after the grid has been rendered&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                  store.load();&lt;/span&gt;&lt;br /&gt;       }&lt;/rows.length;&gt;&lt;/span&gt;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;})   &lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-6620565446867593538?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BN-yJAHZlyxzVJpwmhqs6YRFz0o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BN-yJAHZlyxzVJpwmhqs6YRFz0o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BN-yJAHZlyxzVJpwmhqs6YRFz0o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BN-yJAHZlyxzVJpwmhqs6YRFz0o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=KAF6WR3y"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=FbJkq6Ej"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?i=FbJkq6Ej" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=1fnSKfDY"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/6620565446867593538/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/02/extjs-tip-sortable-grid-rows-via-drag.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/6620565446867593538" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/6620565446867593538" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/wJs23qcdlTo/extjs-tip-sortable-grid-rows-via-drag.html" title="ExtJS Tip : Sortable Grid Rows via Drag and Drop" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/02/extjs-tip-sortable-grid-rows-via-drag.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-3970876175855319325</id><published>2009-02-01T19:44:00.003+08:00</published><updated>2009-04-03T12:21:35.585+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="inspiration" /><title type="text">How to live your life</title><content type="html">I subscribe to &lt;a href="http://blogs.inquirer.net/moneysmarts/2009/02/01/how-to-live-your-life/"&gt;Salve Duplito's blog over at Inquirer.net Blogs&lt;/a&gt; for the personal finance articles.&lt;br /&gt;&lt;br /&gt;Today, I got a special treat because today's blog post was definitely more than personal finance, it was about living.&lt;br /&gt;&lt;br /&gt;Prof. Randy Pausch passed away last year of pancreatic cancer but not before speaking to about an audience of 400 at Carnegie Mellon University for the "Last Lecture" series. While watching the video I am always reminded that the speaker was going to die and that made it all the more powerful, I almost shed a tear too when he mentioned for whom his lecture was really for at the end.&lt;br /&gt;&lt;br /&gt;Sad and inspiring at the same time.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/R9ya9BXClRw&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/R9ya9BXClRw&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-3970876175855319325?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BczIvXIAuYLBmiHAufFeRJEo3qc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BczIvXIAuYLBmiHAufFeRJEo3qc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BczIvXIAuYLBmiHAufFeRJEo3qc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BczIvXIAuYLBmiHAufFeRJEo3qc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=Q0NeeLM0"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=10REe4kX"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?i=10REe4kX" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=i0UGIVyH"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://blogs.inquirer.net/moneysmarts/2009/02/01/how-to-live-your-life/" title="How to live your life" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/3970876175855319325/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/02/how-to-live-your-life.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/3970876175855319325" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/3970876175855319325" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/2zFg6fQw-tg/how-to-live-your-life.html" title="How to live your life" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/02/how-to-live-your-life.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-3171553499608027213</id><published>2009-01-29T22:30:00.003+08:00</published><updated>2009-03-16T14:06:59.636+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qa" /><category scheme="http://www.blogger.com/atom/ns#" term="jing" /><category scheme="http://www.blogger.com/atom/ns#" term="screencast" /><title type="text">Jing for screencasts</title><content type="html">So if a picture (of your desktop) is worth a thousand words, what's a screencast worth ?&lt;br /&gt;&lt;br /&gt;I'll tell you what it's worth ... to a web developer struggling to communicate with a quality assurance engineer, it's ten or so e-mails, a hundred lines of instant messages and a couple of VOIP sessions.&lt;br /&gt;&lt;br /&gt;Enter the Jing Project.&lt;br /&gt;&lt;br /&gt;Jing is a free desktop application that allows you to create a screen shot or video of your desktop or a portion of your desktop.  &lt;a href="http://thedesignexperience.org/"&gt;Dave&lt;/a&gt; was the one who recommended it a couple of years back and it's really been helpful as a tool to communicate with QA and even with clients.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.jingproject.com/assets/img/jing-logo.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 105px; height: 74px;" src="http://www.jingproject.com/assets/img/jing-logo.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So what do I like about Jing  ....&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's relatively easy and straightforward to use. No complex settings and options.&lt;/li&gt;&lt;li&gt;You can capture your entire desktop or just a portion of your desktop&lt;/li&gt;&lt;li&gt;The option to easily upload to screencast.com or to an FTP server&lt;/li&gt;&lt;li&gt;Captures sound as well so you can narrate and talk while creating your screencast&lt;/li&gt;&lt;/ul&gt;My only qualm about Jing is that there is no Linux version but I believe it's in the pipeline. Download Jing from &lt;a href="http://www.jingproject.com/"&gt;www.jingproject.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-3171553499608027213?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ih5fb5yRrDhS8_b6ACgFjND5luU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ih5fb5yRrDhS8_b6ACgFjND5luU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ih5fb5yRrDhS8_b6ACgFjND5luU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ih5fb5yRrDhS8_b6ACgFjND5luU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=lq1wUqh6AFA:5wikFtam_BM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=lq1wUqh6AFA:5wikFtam_BM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?i=lq1wUqh6AFA:5wikFtam_BM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/HamIsAGeek?a=lq1wUqh6AFA:5wikFtam_BM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/HamIsAGeek?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="related" href="http://www.jingproject.com/" title="Jing for screencasts" /><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/3171553499608027213/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/01/jing-for-screencasts.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/3171553499608027213" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/3171553499608027213" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/lq1wUqh6AFA/jing-for-screencasts.html" title="Jing for screencasts" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/01/jing-for-screencasts.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-856602241044201195</id><published>2009-01-28T11:36:00.002+08:00</published><updated>2009-01-28T11:40:10.722+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="version control" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title type="text">Git Tip : svn cleanup for git</title><content type="html">With subversion, I execute "svn cleanup" on a working copy to make sure that my working copy is clean.&lt;br /&gt;&lt;br /&gt;On git, the command seems to be :&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;git checkout -f master&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-856602241044201195?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4KwpooCnY27t1y-bHBytG0G7dxE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4KwpooCnY27t1y-bHBytG0G7dxE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4KwpooCnY27t1y-bHBytG0G7dxE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4KwpooCnY27t1y-bHBytG0G7dxE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=jaex14Kk"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=r6pPLZk9"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?i=r6pPLZk9" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=Se5udEXQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/856602241044201195/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/01/git-tip-svn-cleanup-for-git.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/856602241044201195" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/856602241044201195" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/Al7cWiWBkzE/git-tip-svn-cleanup-for-git.html" title="Git Tip : svn cleanup for git" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/01/git-tip-svn-cleanup-for-git.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-19969388.post-2559049801643367190</id><published>2009-01-27T20:37:00.006+08:00</published><updated>2009-01-28T09:51:09.621+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="virtualization" /><category scheme="http://www.blogger.com/atom/ns#" term="xen" /><title type="text">Beginning adventures with Xen</title><content type="html">I've been a fan of virtualiztion since VMware gave away VMware Server for free. I've upgraded the host OS on my desktop twice and I have been able to remain productive as all my work resides on a separate disk and in virtual machines.&lt;br /&gt;&lt;br /&gt;However, since &lt;a href="http://hamisageek.blogspot.com/2007/11/vmware-server-20-beta-tempted-dont.html"&gt;VMware Server 2.0&lt;/a&gt; was released, I've been actively looking for alternatives. Coincidentally, our hosting provider will be implementing Xen soon for LAMP deployments and I thought this to be the perfect excuse to at least install and try it out.&lt;br /&gt;&lt;br /&gt;Well, so far I'm stuck because I can't boot to X windows on the Xen Kernel because I'm using nvidia drivers. I'm sure there is a solution already somewhere but I'm going to stop for now and leave it as something to look forward to solving over the coming weekend ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19969388-2559049801643367190?l=hamisageek.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EmFt5A9Vf_ToaydY5ZQ8v-XFf8M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EmFt5A9Vf_ToaydY5ZQ8v-XFf8M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EmFt5A9Vf_ToaydY5ZQ8v-XFf8M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EmFt5A9Vf_ToaydY5ZQ8v-XFf8M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=411tgpLu"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=XzosOaSC"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?i=XzosOaSC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/HamIsAGeek?a=FSPVj3jE"&gt;&lt;img src="http://feeds.feedburner.com/~f/HamIsAGeek?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://hamisageek.blogspot.com/feeds/2559049801643367190/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://hamisageek.blogspot.com/2009/01/discovering-xen.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/2559049801643367190" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19969388/posts/default/2559049801643367190" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/HamIsAGeek/~3/3G0YuAPh9JA/discovering-xen.html" title="Beginning adventures with Xen" /><author><name>Ham-the-geek</name><uri>http://www.blogger.com/profile/10046970730389911333</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="16397780274225803577" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://hamisageek.blogspot.com/2009/01/discovering-xen.html</feedburner:origLink></entry></feed>
