<?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:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>The Devel!</title>
    
    
    <link rel="alternate" type="text/html" href="http://blog.choonkeat.com/weblog/" />
    <id>tag:typepad.com,2003:weblog-1377320</id>
    <updated>2009-05-05T14:52:23+08:00</updated>
    <subtitle>choonkeat on programming &amp; software</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/choonkeat" /><feedburner:info uri="choonkeat" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry>
        <title>Since @replies can come from anybody</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/AEBN8tEgsrs/since-replies-can-come-from-anybody.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2009/05/since-replies-can-come-from-anybody.html" thr:count="4" thr:updated="2010-03-12T07:48:05+08:00" />
        <id>tag:typepad.com,2003:post-66379461</id>
        <published>2009-05-05T14:52:23+08:00</published>
        <updated>2009-05-05T15:07:59+08:00</updated>
        <summary>Someone, let's say Yahoo, could roll out their own twitter-like service (let's call it yatter). And all yahoo mail users "become" yatter users automatically, like how they became Openid accounts. when a yatter user "joe" yatts, "@twitter/charlie what are you...</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="braindump" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/"><div xmlns="http://www.w3.org/1999/xhtml"><p>Someone, let's say Yahoo, could roll out their own twitter-like service (let's call it yatter). And all yahoo mail users "become" yatter users automatically, like how they became Openid accounts.</p><ol>
<li>when a yatter user "<span style="color: #7f007f; font-family: Trebuchet MS;">joe</span>" yatts, "<span style="color: #7f007f; font-family: Trebuchet MS;">@twitter/charlie what are you doing?</span>"</li>
<li>yatter's twitter bot called "<span style="background-color: #00ffff; font-family: Trebuchet MS;">yatter</span>" relays the tweet, "<span style="color: #111111; background-color: #00ffff; font-family: Trebuchet MS;">yatter/joe: @charlie what are you doing?</span>"</li>
<li>twitter user "<span style="background-color: #00ffff; font-family: Trebuchet MS;">charlie</span>" sees the message in his @replies stream, and can respond, "<span style="background-color: #00ffff; font-family: Trebuchet MS;">@yatter/joe hitting my refresh button again and again</span>"</li>
<li>a yatter.com bot called "<span style="color: #7f007f; font-family: Trebuchet MS;">twitter</span>" relays the message, "<span style="color: #7f007f; font-family: Trebuchet MS;">twitter/charlie: @joe hitting my refresh button again and again</span>"</li>
<li>yatter user "<span style="color: #7f007f; font-family: Trebuchet MS;">joe</span>" sees that in his @replies stream in yatter.com.. (repeat from the top)</li>
</ol>
<p>I'd guess it makes sense for yatter apis to be fully compatible with twitter.com, in the ma.gnolia.com vs del.icio.us kind of way. So twitter clients just need to add a new config, "hostname", and we're done.</p><p>I think yatter.com could technically allow @yatter/joe to follow
@twitter/charlie. The question is, would twitter.com allow their @charlie user to
follow @yatter/joe?</p><p>Yatter could use the age-old hotmail trick and append the latest status message of the mail sender to the email footer. That should pique interests of recipients. Besides, "a signature" is an existing, understood concept that users can easily see why they'd would want to update their "yatter status"..</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/choonkeat/~4/AEBN8tEgsrs" height="1" width="1" /></div></content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2009/05/since-replies-can-come-from-anybody.html</feedburner:origLink></entry>
    <entry>
        <title>An iPhone optimized web page</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/ChE8K-CXj-E/an-iphone-optimized-web-page.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2009/04/an-iphone-optimized-web-page.html" thr:count="6" thr:updated="2009-08-26T11:23:06+08:00" />
        <id>tag:typepad.com,2003:post-66049659</id>
        <published>2009-04-27T11:03:05+08:00</published>
        <updated>2009-04-27T14:08:15+08:00</updated>
        <summary>The defacto way of making a web page "optimized for iPhone" is to slap on iUI (or variants) to simulate the look &amp; feel of a native app (i.e. the UITableView). You can click on an item in the list,...</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="web" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/"><div xmlns="http://www.w3.org/1999/xhtml"><p>The defacto way of making a web page "optimized for iPhone" is to slap on <a href="http://code.google.com/p/iui/">iUI</a> (or variants) to simulate the look &amp; feel of a native app (i.e. the UITableView). You can click on an item in the list, and the page slides sideways to reveal another list, or more details... etc.</p><p>However, the starting point of trying to mimic meant we're aiming for the web site's experience is to be <em>worse-or-almost-as-good</em> compared to if it was a native app. e.g. <a href="http://m.cnn.com/">m.cnn.com</a> Can aim to be different instead?</p><p>In trying to mimic a native app, the iUI approach locks down the browser's width &amp; scaling capability. I actually liked that part of browsing on the iPhone -- its automatic zoom! To zoom-in, you simply <a href="http://www.youtube.com/watch?v=3n0vt6TvEho#t=33s">double-tap on an area of the page</a>. To zoom out, double-tap again. (<em>There's pinching, but it is manual &amp; I don't like tedious things</em>)</p><p>Unfortunately, most layouts don't make it easy for iPhone to automatically zoom-in. The kicker is, a good &amp; fluid CSS layout actually hinders! e.g. the text is still small after double-tapping on <a href="http://jnd.org/">jnd.org</a></p><p>Turns out, the automatic zoom is controlled [only] by the width of the page segment.. meaning, the page's font size can be infinitesimally small -- it doesn't matter. As long as the containing width is also small (e.g. contains 5 words across 1 row), the user can still comfortably zoom in and get big text with sharp font of 5 words across the entire screen width!</p><p>Taking this to an extreme, we could have all our site's content render in tiny little font inside narrow columns on 1 single page and the iPhone visitor can still effortlessly zoom in and read everything! No click, ajax, network lag, read content, back, click another, .. etc.. i.e. instead of content hierarchy behind deep navigation, we could have it based on font sizes.</p><p>Sounds like a newspaper huh?</p><p>To try this out, I'd hacked up <a href="http://rsspaper.choonkeat.com/">this proof-of-concept</a> a few days ago, and have been using it to read my RSS feeds on my bus rides the past few days. While the app itself is <em>not there yet</em>, the zoom interface experiment has really been working out very well! </p>

<p><a href="http://www.flickr.com/photos/choonkeat/3478796556/" title="screenshots by choonkeat, on Flickr"><img alt="screenshots" border="0" height="173" src="http://farm4.static.flickr.com/3574/3478796556_fa30dc29e9_m.jpg" width="240" /></a>

</p><p>Have an iPhone/iPod touch? Try it and lemme know?</p><p>PS: A more extreme sell for a zoom-based UI is Microsoft's famous <a href="http://www.ted.com/index.php/talks/blaise_aguera_y_arcas_demos_photosynth.html">Seadragon</a> demo.<br />PS: this whole experiment was sparked off when I tried to read the beautiful <a href="http://hacker-newspaper.gilesb.com/">hacker-newspaper.gilesb.com</a> on my iPhone.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/choonkeat/~4/ChE8K-CXj-E" height="1" width="1" /></div></content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2009/04/an-iphone-optimized-web-page.html</feedburner:origLink></entry>
    <entry>
        <title>9.99 Reasons to Love IE6</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/-rckPsK69og/999-reasons-to-love-ie6.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2009/03/999-reasons-to-love-ie6.html" thr:count="4" thr:updated="2009-08-26T06:39:23+08:00" />
        <id>tag:typepad.com,2003:post-64768079</id>
        <published>2009-03-28T14:25:09+08:00</published>
        <updated>2009-03-28T15:58:00+08:00</updated>
        <summary>A friend showed me this website today: h...</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="web" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/"><div xmlns="http://www.w3.org/1999/xhtml"><p>A friend showed me this website today: <a href="http://www.bringdownie6.com/">http://www.bringdownie6.com/</a> "<em>Bring down!</em>" Such angry words. There's so much negativity on the Internet <a href="http://www.google.com/search?q=say+no+ie6">regarding a browser</a>.</p><p>Instead of 1) getting good folks to put feeble badges on websites, or 2) resigning to fate &amp; cursing whenever you have to fire-up IE6 and <em>check</em>, or 3) <a href="http://litmusapp.com/alkaline/">getting bigger, better tools</a> to do stupid things faster... Maybe we can be more constructive.</p><p>Here's an idea:</p><p>Dear Developers &amp; Designers,</p><p>Save your sanity: At $0.00 cost to you, we make your website work in IE6!</p><div style="margin-left: 40px;"><strong>Step 1.</strong> Register your website with us<br /><strong>Step 2.</strong> Just copy-paste this into your website's &lt;head&gt; section: <span style="background-color: #b9b9b9; font-family: Trebuchet MS;">&lt;script src="http://weloveinternetexplorer.com/bff.js"&gt;&lt;/script&gt;</span><br /><strong>Step 3.</strong> <em>*chuckle*</em> There's no Step 3!<br /></div><p /><p>How this'll work is that, all your IE6 site visitors will be gently redirected to our payment page, explaining nicely:</p><div style="margin-left: 40px;">We're sorry but Website XYZ no longer works with your old, antique Internet Explorer browser. BUT for just US$9.99/month (<span style="font-style: italic;">1 movie ticket</span><em>!</em>) the hardworking engineers at weloveinternetexplorer.com will fixup the website for YOU, and make this problem go away for you! It'll just take 30 seconds! We accept all major credit cards &amp; Paypal (maybe even <span style="text-decoration: line-through;">淘宝!</span> <a href="https://www.alipay.com/">Alipay</a> (correction by @xtinegoh) )<br /><br />But you choose not to :-( you may install any of these free, modern browsers and use Website XYZ through them: [firefox logo] [safari logo] [google chrome logo]<br /><br />--<br />WeLoveInternetExplorer.com Team<br /></div><p /><p>If the IE6 compatibility work has not been complete yet, the above pay-wall will not be shown. Instead, we'd display a cool 1990s construction worker icon that these folks will be extremely familiar with!</p><p><a href="http://blog.choonkeat.com/.a/6a00e398212d6f883301156f761a73970b-pi" style="display: inline;"><img alt="Construct2_e0" border="0" class="at-xid-6a00e398212d6f883301156f761a73970b " src="http://blog.choonkeat.com/.a/6a00e398212d6f883301156f761a73970b-800wi" title="Construct2_e0" /></a>
 </p><p>All paid users can of course transparently continue to use the web site (and all other websites that uses this service).</p><p><em>PS: Designers &amp; developers that would like to do Internet Explorer compatibility work (yes, all 3 of you out there, 尤其是中国的同胞朋友, Hội lập trình viên Việt Nam, and сотрудник российских программистов !!!!) Please <a href="http://blog.choonkeat.com/weblog/chew-choon-keat.html">contact me</a></em></p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/choonkeat/~4/-rckPsK69og" height="1" width="1" /></div></content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2009/03/999-reasons-to-love-ie6.html</feedburner:origLink></entry>
    <entry>
        <title>Why pick a different domain name for asset_host - and not just subdomains</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/AFJc1tlHa24/why-pick-a-different-domain-name-for-asset_host-and-not-just-subdomains.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2009/03/why-pick-a-different-domain-name-for-asset_host-and-not-just-subdomains.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-64487811</id>
        <published>2009-03-23T15:17:53+08:00</published>
        <updated>2009-03-29T05:50:06+08:00</updated>
        <summary>Some sites, e.g. Github.com, uses subdomain for images &amp; assets Whereas others, e.g. Yahoo.com, uses a different domain name. Because cookie bandwidth does add up. PS: I spot George Oat's picture on Flickr frontpage still. I wonders if it is...</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="web" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/"><div xmlns="http://www.w3.org/1999/xhtml"><p>Some sites, e.g. <a href="http://github.com">Github.com</a>, uses subdomain for images &amp; assets</p>
<p><a href="http://www.flickr.com/photos/choonkeat/3378694378/" title="assets from subdomain by choonkeat, on Flickr"><img alt="assets from subdomain" height="184" src="http://farm4.static.flickr.com/3439/3378694378_c68d6d575d_m.jpg" width="240" /></a>
</p>
<p>Whereas others, e.g. Yahoo.com, uses a different domain name.</p>
<p><a href="http://www.flickr.com/photos/choonkeat/3377876393/" title="assets from different domain by choonkeat, on Flickr"><img alt="assets from different domain" height="177" src="http://farm4.static.flickr.com/3460/3377876393_995f0549e8_m.jpg" width="240" /></a>
</p><p>Because cookie bandwidth does add up.</p><p><em>PS: I spot George Oat's picture on Flickr frontpage still. I wonders if it is a form of respect or neglect.</em></p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/choonkeat/~4/AFJc1tlHa24" height="1" width="1" /></div></content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2009/03/why-pick-a-different-domain-name-for-asset_host-and-not-just-subdomains.html</feedburner:origLink></entry>
    <entry>
        <title>How to really Post Load Google Ads (while keeping document.write happy &amp; page rendering snappy)</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/CVL5OLp8DOs/keeping-google-ads-documentwrite-and-browsers-all-happy.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2009/03/keeping-google-ads-documentwrite-and-browsers-all-happy.html" thr:count="5" thr:updated="2010-01-25T08:45:54+08:00" />
        <id>tag:typepad.com,2003:post-64347735</id>
        <published>2009-03-19T15:22:00+08:00</published>
        <updated>2009-04-19T09:20:27+08:00</updated>
        <summary>So you have a web page and it is getting some hits. One day, you decide you might as well earn some pennies off that traffic and began copy-pasting some Google Ads into it. But you know, Google Ads suck....</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="javascript" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/"><div xmlns="http://www.w3.org/1999/xhtml"><p>So you have a web page and it is getting some hits. One day, you decide you might as well earn some pennies off that traffic and began copy-pasting some Google Ads into it.</p><p>But you know, Google Ads suck. They use <span style="font-family: Courier;">document.write</span>. Yep, the things we were <a href="http://ejohn.org/blog/browser-page-load-performance/">warned against</a>. But that's not all. Their <span style="font-family: Courier;">document.write</span> actually pulls in more javascript, which in turn say "<em>weeeeell, while we're at it!</em>" and start to do even more <span style="font-family: Courier;">document.write</span>! (In this aspect, Microsoft ads seem more thoughtful, or it seems from Digg's homepage).</p><p>Anyways, this chokes the browser &amp; makes them stutter. Your web page now renders to your audience in stops and starts:</p><div style="margin-left: 40px;">some content appear &gt; ads appear (stall) &gt; more content appear &gt; ads appear (stall) &gt; rest of content appear<br /></div><p><br />A necessary evil? There are a few things that will fix to a certain extent: 1) use "script defer" or 2) <a href="http://www.webdeveloper.com/forum/showthread.php?t=195112">hacking document.write</a>. Not ideal in terms of fragility, and subsequent maintenance of ads embed codes.</p><p>Let's look at the problem again: 1) Google wants you to paste the script where the ad appears, 2) Wherever the script is pasted, the browser will stutter &amp; stall the content that comes after it.</p><p>For #2, maybe the "solution" is to paste the script AFTER all content? But wait -- doesn't that mean #1 the ads get rendered there &amp; not where I want them? Yes, but only initially.</p><p>Why not reposition these ads to where they're supposed to be after they are constructed:</p><div style="margin-left: 40px;">all content appear &gt; ads appear (below the fold, stall) &gt; ads appear in position<br /></div><p>Let's say that works, unfortunately it sound convoluted &amp; a hassle, the site has too many existing ads to migrate &amp; our guy managing the ads doesn't code, he just copies whatever Google provides &amp; blah blah blah... </p><p>That's what the <a href="http://github.com/choonkeat/postload_google_ads">postload_google_ads</a> Rails plugin is for :-) site-wide benefit for minimum fuss (upfront &amp; subsequently)</p><p>To see it in action, see <a href="http://therssemail.com/ads/demo_without_postload_google_ads">this demo</a>. Click on "Before" and "After". They 2 pages are essentially the same, but only one of them applies an "after_filter":</p><div style="margin-left: 40px;">The postload_google_ads plugin is an "after_filter" in Rails. This means that after your webapp has done its thing &amp; generated the dynamic HTML, the after_filter transplant the ads' script tag to the bottom of the DOM tree, leaving behind some placeholders. This modified html is then sent back &amp; rendered on the user's browser. After all your content renders, the ads will construct themselves (document.write all they want). After the ads are done, a little javascript repositions the rendered ads based on the absolute position of their corresponding placeholders.<br /></div><p>Until ads nework catch up to use unobtrusive javascript, I guess I'll have to settle for this.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/choonkeat/~4/CVL5OLp8DOs" height="1" width="1" /></div></content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2009/03/keeping-google-ads-documentwrite-and-browsers-all-happy.html</feedburner:origLink></entry>
    <entry>
        <title>git svn rebase - could not detach HEAD (howto fix)</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/enmj4U6IONg/git-svn-rebase-could-not-detach-head.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2008/11/git-svn-rebase-could-not-detach-head.html" thr:count="3" thr:updated="2009-04-18T02:50:18+08:00" />
        <id>tag:typepad.com,2003:post-58549868</id>
        <published>2008-11-16T03:55:23+08:00</published>
        <updated>2009-04-18T22:43:53+08:00</updated>
        <summary>Sounds gross but that is the curt message: $ git svn rebase ... First, rewinding head to replay your work on top of it... could not detach HEAD rebase refs/remotes/trunk: command returned error: 1 Not very helpful, no clue, can't...</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="git" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/"><div xmlns="http://www.w3.org/1999/xhtml"><p>Sounds gross but that is the curt message:</p><div style="margin-left: 40px; font-family: Courier;">$ git svn rebase<br />...<br />First, rewinding head to replay your work on top of it...<br />could not detach HEAD<br />rebase refs/remotes/trunk: command returned error: 1<br /></div><p><br />Not very helpful, no clue, can't even buy a vowel. But if you try something else, the error message begin to make the problem more obvious:</p><div style="margin-left: 40px; font-family: Courier;">$ git co refs/remotes/trunk<br />error: Untracked working tree file 'public/images/plugout_button.gif' <span style="background-color: #ffff00; font-family: Courier;">would be overwritten by merge</span>.<br /></div><p><br />Well... then git-svn should've said so!</p><div style="margin-left: 40px; font-family: Courier;">$ <span style="background-color: #ffff00; font-family: Courier;">rm</span> public/images/plugout_button.gif <br />$ git svn rebase<br />First, rewinding head to replay your work on top of it...<br />Applying ....<br /></div><p><br />So there. This post is so that I commit it to my long term memory, aka Google.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/choonkeat/~4/enmj4U6IONg" height="1" width="1" /></div></content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2008/11/git-svn-rebase-could-not-detach-head.html</feedburner:origLink></entry>
    <entry>
        <title>hquery: an unobtrusive server script implementation</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/XSjxXsuO_HM/hquery-an-unobtrusive-server-script-implementation.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2008/10/hquery-an-unobtrusive-server-script-implementation.html" thr:count="6" thr:updated="2009-12-03T22:23:52+08:00" />
        <id>tag:typepad.com,2003:post-56425969</id>
        <published>2008-10-02T14:43:33+08:00</published>
        <updated>2008-10-02T14:43:33+08:00</updated>
        <summary>I'd previously blogged about some ideas to resolve the developer-designer gulf regarding templates. I'm happy I've finally found time to code up a proof-of-concept: hquery - the unobtrusive server script from choonkeat on Vimeo. Q: What is "unobtrusive server script"?...</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="software" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/">
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I'd &lt;a href="http://blog.choonkeat.com/weblog/2008/03/no-template-is.html"&gt;previously blogged&lt;/a&gt; about some ideas to resolve the developer-designer gulf regarding templates. I'm happy I've finally found time to code up a proof-of-concept:&lt;/p&gt;&lt;div&gt;&lt;br&gt;

&lt;object width="500" height="377"&gt;	&lt;param name="allowfullscreen" value="true" /&gt;	&lt;param name="allowscriptaccess" value="always" /&gt;	&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1836815&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=CC0500CC0500&amp;amp;fullscreen=1" /&gt;	&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=1836815&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=CC0500CC0500&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="377"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/1836815?pg=embed&amp;amp;sec=1836815"&gt;hquery - the unobtrusive server script&lt;/a&gt; from &lt;a href="http://vimeo.com/user248563?pg=embed&amp;amp;sec=1836815"&gt;choonkeat&lt;/a&gt; on &lt;a href="http://vimeo.com?pg=embed&amp;amp;sec=1836815"&gt;Vimeo&lt;/a&gt;.

&lt;br&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;Q: What is "unobtrusive server script"?&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;If "unobtrusive javascript" adds interaction to a web page without being inside the markup - then "unobtrusive server script" replaces data in a web page without being inside the markup (and design).&lt;/div&gt;&lt;br&gt;&lt;div&gt;You'll get a clean separation of 1) designed web page is constructed, then 2) server data is weaved in, and finally 3) javascript hooks up the interactive portions.&lt;/div&gt;&lt;br&gt;&lt;div&gt;The key thing is that all 3 layers are stringed together by CSS path - a concept / language that both designers and developers can communicate with.&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;Q: Is this a silver bullet?&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;No. There are constraints: everything that needs to be dynamic, need its own CSS/XPath. e.g. Google's result page markup isn't very suitable:&lt;/div&gt;&lt;br&gt;&lt;div&gt;  &lt;span style="font-family: Courier;"&gt;&amp;lt;div&gt;&lt;span style="font-weight: bold;"&gt;this is abstract&lt;/span&gt;&amp;lt;cite&gt;citation&amp;lt;/cite&gt;&amp;lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Notice how we can't address the abstract content without stepping on &lt;span style="font-family: Courier;"&gt;&amp;lt;cite&gt;&lt;/span&gt;. When using USS, we'll need the markup to be:&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;div&gt;  &lt;span style="font-family: Courier;"&gt;&amp;lt;div&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;span&gt;this is abstract&amp;lt;/span&gt;&lt;/span&gt;&amp;lt;cite&gt;citation&amp;lt;/cite&gt;&amp;lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Then both abstract and citation can be targeted independently. Furthermore, to be totally isolated from markup changes, it is best to only use classes and ids without the tag names.&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;Q: Is USS a Ruby on Rails thing?&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Nope. "hquery" is just a library I wrote to do USS in Rails. I believe any language / framework can have its own USS renderer.&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;Q: How do I write javascript that needs dynamic values?&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Instead of writing mixed-up code like this:&lt;/div&gt;&lt;br&gt;&lt;blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"&gt;&lt;p&gt;&lt;span style="font-family: Courier;"&gt;&amp;lt;script&gt;&lt;br&gt;  alert("I am &amp;lt;%= user.name %&gt;");&lt;br&gt;&amp;lt;/script&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;div&gt;Try doing it this way (separating data from logic):&lt;/div&gt;&lt;br&gt;&lt;blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"&gt;&lt;p&gt;&lt;span style="font-family: Courier;"&gt;&amp;lt;div id="json"&gt;&amp;lt;script&gt;var user = {name: 'foo'};&amp;lt;/script&gt;&amp;lt;/div&gt;&lt;br&gt;&amp;lt;script&gt;&lt;br&gt;  alert("I am " + user.name);&lt;br&gt;&amp;lt;/script&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;div&gt;Then in your script, you can swap out the JSON data:&lt;/div&gt;&lt;br&gt;&lt;blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"&gt;&lt;p&gt;&lt;span style="font-family: Courier;"&gt;select "#json script" do |ele|&lt;br&gt;  ele.html "var person = " + current_user.to_json   &lt;br&gt;end&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;Q: Where next?&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;I dunno. Since hquery script is declarative, we can compile to regular &amp;lt;% messy %&gt; template as runtime? Or, have build tasks that can check that corresponding HTML contain necessary elements - i.e. a new design don't break/miss out anything?&lt;/div&gt;&lt;br&gt;&lt;div&gt;Anything else? Love to hear your thoughts!&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;span style="font-style: italic;"&gt;PS: I find myself trusting Yahoo search results when its in Google skin!&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/choonkeat/~4/XSjxXsuO_HM" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2008/10/hquery-an-unobtrusive-server-script-implementation.html</feedburner:origLink></entry>
    <entry>
        <title>So love this film</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/OjsIYUC2Jf4/so-love-this-film.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2008/07/so-love-this-film.html" thr:count="1" thr:updated="2008-07-09T02:34:42+08:00" />
        <id>tag:typepad.com,2003:post-52386086</id>
        <published>2008-07-08T17:09:07+08:00</published>
        <updated>2008-07-08T17:09:07+08:00</updated>
        <summary />
        <author>
            <name>choonkeat</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/"><div xmlns="http://www.w3.org/1999/xhtml"><p><script type="text/javascript" src="http://c-widgets.disney.go.com/o/47f52785575c8467/48732eaef46be766/48659d2e10d26989/c8cafe1/widget.js" /></p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/choonkeat/~4/OjsIYUC2Jf4" height="1" width="1" /></div></content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2008/07/so-love-this-film.html</feedburner:origLink></entry>
    <entry>
        <title>USA, Google IO and RailsConf '08</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/r6l5tVtaLCQ/usa-google-io-and-railsconf-08.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2008/06/usa-google-io-and-railsconf-08.html" thr:count="4" thr:updated="2009-07-14T15:27:55+08:00" />
        <id>tag:typepad.com,2003:post-50780006</id>
        <published>2008-06-04T04:43:53+08:00</published>
        <updated>2008-06-04T04:43:53+08:00</updated>
        <summary>This is a brain dump, knowing that if I don't write this now, I probably won't ever. USA They say the weather in San Francisco is perfect, but I think I'd prefer 8 degrees (celsius) warmer.. then it'll be really...</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="life" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/"><div xmlns="http://www.w3.org/1999/xhtml"><p>This is a brain dump, knowing that if I don't write this now, I probably won't ever.</p><div><span style="font-weight: bold;"><span style="font-size: 14px; ">USA</span></span></div><div>They say the weather in San Francisco is perfect, but I think I'd prefer 8 degrees (celsius) warmer.. <span style="font-style: italic;">then</span> it'll be really perfect. (And for my friends complaining their MacBook Pro runs hot... its a geographical/design problem, you see the CPU fans will never kick in <span style="font-style: italic;">here ;-</span>)</div><br /><div>A "quarter" is a really unproportionately valuable coin. Its a popular choice everywhere and you'll never have enough of it. I'm not sure if I can keep up, collecting 12 of them for my weekly laundry.</div><br /><div>On the street, there is no "green man" for pedestrians. Its a myth. The man is <a href="http://www.flickr.com/photos/choonkeat/2526855233/in/set-72157605277094910/">white</a>. <a href="http://www.theorytestadvice.co.uk.sharedcopy.com/HCPlus/7_Rules_135_-_179/c91901679e3ea67cea0e8b6458da5363.html#shcp2">Lines across a junction</a> means nothing, but a double-yellow in the middle of the road means it is 2-way. Turn right on red light is the default.</div><br /><div>Google is much more valuable in the States. The level of integration (and ease of use!!) they provide with real-world services is certainly something drool-worthy for Singaporeans. For example, look at this <a href="http://maps.google.com/maps?f=d&amp;hl=en&amp;geocode=6063996273876520721,37.806529,-122.403703&amp;saddr=San+Francisco+Int'l+Airport&amp;daddr=Alcatraz+Cruise+%4037.806529,-122.403703&amp;mra=cc&amp;dirflg=r&amp;sll=37.710405,-122.3973&amp;sspn=0.319409,0.426407&amp;ie=UTF8&amp;ll=37.737055,-122.410355&amp;spn=0.326897,0.513611&amp;z=11&amp;start=0">map</a>. Something a lot of ppl I talked to didn't realise is the information on the left pane: <span style="font-weight: bold;">Public Transit</span>. It has price, train schedules (go to options &amp; choose when you wanna arrive). A tourist like me can really survive on Google. Just add free wifi.</div><br /><div>The night before driving to <a href="http://www.flickr.com/photos/choonkeat/sets/72157605287440146/">Big Sur</a>, we went Google Earth surfing to recce the place. After been there for real, I think Google Earth redefines <a href="http://en.wikipedia.org/wiki/WYSIWYG">WYSIWYG</a>.</div><br /><div style="font-size: 14px; "><span style="font-weight: bold;">Google IO</span></div><div>2 things impressed me: Android demo and <a href="http://www.flickr.com/photos/choonkeat/sets/72157605317636269/">the food</a>.<br /></div><br /><div>For the 2 of you who haven't read, the Android demo in the first keynote was really impressive. Clearly iPhone inspired, but not as sheek.</div><br /><div>A "home" screen where you use swipe gesture to scroll. Favorite apps anchored at bottom. Press and hold to drag icons around. A Webkit browser means all their previous iPhone mods for google search, mail, etc now works the same in Android.. such coincidence. I bet screen dimensions will match as well.</div><br /><div>Best of all, a Google Maps "Street view" was demoed. It was really, really smooth. Holding it up and pointing your device north or south will actually swivel the street view to match your direction - how cool is that! Come to think of it, a compass is for street view might be a bit gimmicky. But if the compass works for google maps itself (where the maps rotate appropriately) now <span style="font-style: italic;">THAT</span> will be cool.<span style="font-family: Helvetica; font-size: 12px; line-height: normal; " /></div><div><span style="font-family: Helvetica; font-size: 12px; line-height: normal; "><span style="font-style: italic;">[Update: This is </span></span><span style="font-size: 12px; line-height: normal; "><a href="http://ajaxian.com/archives/flipping-out-over-safari"><span style="font-style: italic;">do-able indeed</span></a></span><span style="font-family: Helvetica; font-size: 12px; line-height: normal; "><span style="font-style: italic;"> on Webkit!]</span></span></div><br /><div style="font-size: 14px; "><span style="font-weight: bold;">RailsConf 08</span></div><div>My favourite part of the conference is the first lightning talk where I signed up and demo SharedCopy. This is the response in the IRC channel (roughly <a href="http://www.urbanhonking.com.sharedcopy.com/ideasfordozens/2008/06/4ecc2f5972f59a35bbe632daf1a242b8.html">the same from the floor</a>)</div><p><a href="http://www.flickr.com/photos/choonkeat/2542764619/" title="Response to SharedCopy Demo [RailsConf 2008] by choonkeat, on Flickr"><img alt="Response to SharedCopy Demo [RailsConf 2008]" border="0" height="375" src="http://farm4.static.flickr.com/3067/2542764619_67d3f611f7_o.jpg" width="592" /></a></p><p>[screenshot donated by <a href="http://blog.codefront.net/">Chu Yeow</a> - thanks!]</p><p>It is hard to do <a href="http://sharedcopy.com">SharedCopy</a> justice by describing it in words. It needs a demo. I'm glad I had the chance to do a quick one in RailsConf. My only regret is that I forgot to show the <a href="http://sharedcopy.com/public/read-later">read-later feature</a>.</p><div>Now Maglev is really interesting. Avi's showmanship definitely helped (he was putting and pulling rabbits out of the hat across different Ruby VMs). But Maglev is interesting in a different way JRuby / Rubinius is. The latter 2 effectively replaces MRI. Maglev however brings the Smalltalk way of doing things with it - if you have object persistence, why use a database? i.e. A regular joe Rails app may choose to run on MRI, JRuby or Rubinius. I don't see Maglev having much incentive (and interest) to run a regular Joe Rails app other than marketing purpose. Their vision is to run Ruby/Rails apps architected in an entirely different way. Hence, their paths don't really meet.</div><br /><div>There are gripes about the conference though. Some keynotes were really uninspiring (compared to RailsConf '06) the upside is I got my mod_rails working during one of the keynotes! And as if finding (cheap) hotels for a conference wasn't hard enough, it had to coincide with Portland's Rose Festival. Doh!</div><p><a href="http://sharedcopy.com/" /></p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/choonkeat/~4/r6l5tVtaLCQ" height="1" width="1" /></div></content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2008/06/usa-google-io-and-railsconf-08.html</feedburner:origLink></entry>
    <entry>
        <title>Something's Gotta Give</title>
        <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/choonkeat/~3/U4-P0d-bMsI/somethings-gotta-give.html" />
        <link rel="replies" type="text/html" href="http://blog.choonkeat.com/weblog/2008/05/somethings-gotta-give.html" thr:count="3" thr:updated="2008-05-28T07:05:27+08:00" />
        <id>tag:typepad.com,2003:post-50376082</id>
        <published>2008-05-26T18:30:00+08:00</published>
        <updated>2008-05-26T18:30:00+08:00</updated>
        <summary>Saw this clarification on TC regarding Twitter the issue certainly isn’t with creating new messages, the issue is when you check your own messages For eg, if I am following 200 people, the query needs to check the new messages...</summary>
        <author>
            <name>choonkeat</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="software" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.choonkeat.com/weblog/">
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Saw this clarification on TC regarding Twitter&lt;br&gt;&lt;div class='sharedcopy_widget' id='shcp_49cf5b567747f3411565e53a107ab110' &gt;&lt;blockquote class='cited'  cite='http://r7.sharedcopy.com/29ptdlct' style='cursor: pointer; margin-left: 0; padding: 0 0 1em 1em; border: 1px #FFFFFF solid; border-left: 1em #EEEEEE solid; background: #ffffff; '&gt; &lt;span class="content comments_count_1 withoutphoto" &gt;&lt;span class="text" &gt;&lt;div class="html_gist techcrunch_com"&gt;&lt;input class="csspath" type="hidden" value="body div#page div#container table tbody tr td div#content div#post-17834.post div.entry.snap_trigger_icon p img.shot.shcp_dimension_223x70" /&gt;&lt;img class="shot shcp_dimension_223x70" src="http://www.techcrunch.com/wp-content/twitter_logo.png" width="150" /&gt;&lt;/div&gt; &lt;blockquote style="text-align: justify; font-style: italic; border: 0px; " class="comment_body comment_body1" &gt;the issue certainly isn’t with creating new messages, the issue is when you check your own messages For eg, if I am following 200 people, the query needs to check the new messages from all those people and sort them into date order. That query would be really intense&lt;a href="http://r7.sharedcopy.com/29ptdlct#shcp0" &gt; &lt;sup&gt;link &amp;raquo;&lt;/sup&gt;&lt;/a &gt;&lt;/blockquote&gt; &lt;/span &gt;&lt;/span&gt; - from &lt;a href="http://r7.sharedcopy.com/29ptdlct"&gt;Twitter At Scale: Will It Work?&lt;/a&gt; via &lt;a href="http://sharedcopy.com"&gt;sharedcopy.com&lt;/a&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;script&gt;  var json_49cf5b567747f3411565e53a107ab110 = {   host: 'sharedcopy.com',   width: '480px',   height: '250px',   bgcolor: '#ffffff',   background: '#ffffff url(http://www.techcrunch.com.sharedcopy.com/images/loading.gif) no-repeat center center; ',   allow_click: false,   src: 'http://www.techcrunch.com.sharedcopy.com/embeds/copy/choonkeat/49cf5b567747f3411565e53a107ab110/480.250/ffffff.ffffff.cc0500/false/shcp0.html' };&lt;/script&gt;&lt;script src='http://sharedcopy.com/static/embed/script.js'&gt;&lt;/script&gt;&lt;br&gt;I'd heard that earlier in the &lt;a href="http://gillmorgang.techcrunch.com/2008/05/15/gillmor-gang-051508/"&gt;Gilmor Gang&lt;/a&gt; : Blaine clarified that static resources (e.g. profile images) are no issue at all, and that the the bigger issue is with each person's "home page", where multiple streams are joined and ordered chronologically. When 1 of the connected people update, all related cached "home pages" are obsolete - hence they are generated painfully often. (so don't refresh your own page so much!)&lt;br&gt;&lt;br&gt;I'm not a scaling expert. Nor do I know anything about Twitter's real problems. So treat this as noise maybe.&lt;br&gt;&lt;br&gt;Anyways, ignoring other things unknown and purely focusing on this particular aspect... I thought it'd be interesting to consider what we might gain, if we're just willing to give up certain things?&lt;br&gt;&lt;br&gt;So.. assuming static resources ain't a problem, lets try to have more of those! A single person's stream (without friends) looks cachable - like a blog that generates html instead of serving dynamic. A single person's social graph (following who) looks cachable as well. If assumptions are wrong here, then exit(1); So a person's homepage is his own static stream with static external references to static streams of ppl he follows. Like a html page referencing a bunch of CSS. No server side join or sort. Instead, the browser, with the help of some static javascript, pulls in &lt;em&gt;those&lt;/em&gt; resources, does the merging and sorting (and paging) and spit a pretty display similar to the current. i.e. every user's browser does its own merging and sorting, you know... like, help out will ya?&lt;br&gt;&lt;br&gt;Would that be better? And what did we give up? The ability to properly browse your own Twitter homepage on a browser without JS &amp;amp; clients using API need a few more pulls and do merging / sorting themselves too. &lt;br&gt;&lt;br&gt;Can we live with that?&lt;br&gt;&lt;br&gt;Update: Slim pointed to an article in the comments, and "Part III" of that article, Eran had talked abt the same alternative:&lt;br&gt;&lt;div class='sharedcopy_widget' id='shcp_49dba0a4cf15030cc61fbbc055bc4fb9' &gt;&lt;blockquote class='cited'  cite='http://r2.sharedcopy.com/29reg' style='cursor: pointer; margin-left: 0; padding: 0 0 1em 1em; border: 1px #FFFFFF solid; border-left: 1em #EEEEEE solid; background: #ffffff; '&gt; &lt;span class="content comments_count_2 withoutphoto" &gt;&lt;span class="text" &gt; &lt;blockquote style="text-align: justify; font-style: italic; border: 0px; " class="comment_body comment_body1" &gt;if you only ask this once, the server side batch solution will be faster. But when the client starts asking this once a minute or more repeatedly, resources go to waste and scalability is more expensive.&lt;a href="http://r2.sharedcopy.com/29reg#shcp0" &gt; &lt;sup&gt;link &amp;raquo;&lt;/sup&gt;&lt;/a &gt;&lt;/blockquote&gt; &lt;blockquote style="text-align: justify; font-style: italic; border: 0px; " class="comment_body comment_body2" &gt;Once the server is only serving data with limited scope, usually providing the messages of a single person with the optional perspective of the reader (to enforce access control), scaling becomes a much easier task as data can be segmented easier.&lt;a href="http://r2.sharedcopy.com/29reg#shcp1" &gt; &lt;sup&gt;link &amp;raquo;&lt;/sup&gt;&lt;/a &gt;&lt;/blockquote&gt; &lt;/span &gt;&lt;/span&gt; - from &lt;a href="http://r2.sharedcopy.com/29reg"&gt;Hueniverse: Scaling a Microblogging Service - Part III&lt;/a&gt; via &lt;a href="http://sharedcopy.com"&gt;sharedcopy.com&lt;/a&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;script&gt;  var json_49dba0a4cf15030cc61fbbc055bc4fb9 = {   host: 'sharedcopy.com',   width: '480px',   height: '250px',   bgcolor: '#ffffff',   background: '#ffffff url(http://www.hueniverse.com.sharedcopy.com/images/loading.gif) no-repeat center center; ',   allow_click: false,   src: 'http://www.hueniverse.com.sharedcopy.com/embeds/copy/choonkeat/49dba0a4cf15030cc61fbbc055bc4fb9/480.250/ffffff.ffffff.cc0500/false/shcp0.html' };&lt;/script&gt;&lt;script src='http://sharedcopy.com/static/embed/script.js'&gt;&lt;/script&gt;
&lt;br&gt;Update: Then again, you have scoble who follows 30k other people making it impractical for the client to fetch those streams independently... I guess most systems would decide to place limits and "punt" the issue, e.g. you can have at most 5000 friends. And that's something Twitter is unwilling to let go.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/choonkeat/~4/U4-P0d-bMsI" height="1" width="1"/&gt;</content>


    <feedburner:origLink>http://blog.choonkeat.com/weblog/2008/05/somethings-gotta-give.html</feedburner:origLink></entry>
 
</feed><!-- ph=1 --><!-- nhm:dynamic-ssi -->
