<?xml version="1.0" encoding="utf-8"?>
<feed
    xmlns="http://www.w3.org/2005/Atom"
    xmlns:at="http://www.sixapart.com/ns/at"
    xmlns:icbm="http://postneo.com/icbm"
    xmlns:rvw="http://purl.org/NET/RVW/0.2/"
    xml:lang="en">
    <title>Lost in Colonisation</title>
    <link rel="self" type="application/atom+xml" title="Lost in Colonisation (Atom)" href="http://alexhung.vox.com/library/posts/page/1/atom.xml" />
    <link rel="alternate" type="text/html" title="Lost in Colonisation" href="http://alexhung.vox.com/library/posts/page/1/"/>

    <link rel="service.post" type="application/atom+xml" title="Lost in Colonisation" href="http://www.vox.com/services/atom/svc=post/collection_id=6a00c2251c28f3f21900c2251c2869549d" />

    <link rel="service.subscribe" type="application/atom+xml" title="Lost in Colonisation" href="http://alexhung.vox.com/library/posts/atom.xml" />

    
    
        
    <link rel="next" type="application/atom+xml" title="Lost in Colonisation" href="http://alexhung.vox.com/library/posts/page/2/atom.xml" />
    
    <link rel="last" type="application/atom+xml" title="Lost in Colonisation" href="http://alexhung.vox.com/library/posts/page/35/atom.xml" />


    <generator uri="http://www.vox.com/">Vox</generator>
    <updated>2009-11-28T22:40:41Z</updated>

    <author>
        <name>Alex</name>
        <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
    </author>

    <id>tag:vox.com,2006:6p00c2251c28f3f219/</id>

    <subtitle>HK -&gt; UK -&gt; US -&gt; Where next?</subtitle>


    
    <entry>
        <title>Extending iPhone battery life</title>
    
    
    
        <link rel="alternate" type="text/html" title="Extending iPhone battery life" href="http://alexhung.vox.com/library/post/extending-iphone-battery-life.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="Extending iPhone battery life" href="http://alexhung.vox.com/library/post/extending-iphone-battery-life.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="Extending iPhone battery life" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f2190123ddc32c88860b" /> 
                <id>tag:vox.com,2009-11-27:asset-6a00c2251c28f3f2190123ddc32c88860b</id>
        <published>2009-11-27T20:44:32Z</published>
        <updated>2009-11-28T22:40:41Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>Since my first iPhone, I&#39;ve never had any issue with its battery life. As long as I get access to the charger by the end of the work day the battery life on the iPhone 2G or 3G have been perfectly adequate. That is until I started working on a project down in Atlanta and my weekly commute now extends to around 6-8 hours, depending on flight delays.<div><br /></div><div>I began looking for battery extender for my iPhone. Initially I wanted a battery extender that can charge the iPhone 3G and 3GS, as well as possibly the Kindle. This means the ability to attach different cables to the battery. Also the &#39;green&#39; side of me wanted a solar charging battery so that it&#39;d be possible to charge the battery up using solar energy alone. Unfortunately after perusing <a href="http://www.ilounge.com/index.php/accessories/">iLounge&#39;s extensive list</a> of battery extender reviews, it was pretty obvious that there weren&#39;t any battery out there that would satisfy my initial list of requirements. The closest one is the <a href="http://www.icetechusa.com/catalogue-solar-167464.html">IceTECH Solar i9005</a>. With its large solar panel, large battery capacity (2500 mAh), and large collection of connector tips, it would be ideal. The only issue is it doesn&#39;t currently support the iPhone 3GS, as Apple in its infinite wisdom has changed something with regard to charging on the 3GS.</div><div><br /></div><div>So the search was back to regular battery extender. There are plenty of options out there but none of them really excite me. At least not at the price they are charging for. That is until I came across <a href="http://www.monoprice.com/products/product.asp?c_id=108&amp;cp_id=10831&amp;cs_id=1083110&amp;p_id=5480&amp;seq=1&amp;format=2">MonoPrice&#39;s iPhone backup battery</a>. With a rather large capacity (2200 mAh *) and very affordable price (~$15, depending on quantity purchased), it is perfect.</div><div><br /></div><div>It arrived two weeks ago and I have so far used it twice. From about 10-15% charge in the iPhone, it would take about two hours to fully charge the phone from the backup battery. During that time, I was able to continue to use the iPhone with podcast playing in the background while online twittering and browsing. The only thing that is annoying is the &#39;cyclon&#39;-like blue LEDs in the front which move from left to right during the charging process (both from main to battery, and battery to phone). They are <strong>very</strong> bright and very distracting while using the phone with the battery attached, especially in a dark backseat of a taxi! To charge the backup battery, simply plug the iPhone cable to the bottom of the battery and charge it just like the phone. Unfortunately the battery does not pass the data through to the phone so you can&#39;t sync with iTunes while charging both the phone and the battery.</div><div><br /></div><div>But overall, the MonoPrice iPhone backup battery is priced just right and perform as advertised. High recommended if you are looking for a simple backup battery for your iPhone.</div><div><br /></div><div>* For comparison, iPhone 3G battery capacity is 1150 mAh which means the MonoPrice battery can potentially charge the iPhone from 10-15% charge to full twice!</div></p>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/extending-iphone-battery-life.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f2190123ddc32c88860b?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="battery" scheme="http://alexhung.vox.com/tags/battery/" label="battery" />
    
    <category term="iphone" scheme="http://alexhung.vox.com/tags/iphone/" label="iphone" />
    
    <category term="thoughtworks" scheme="http://alexhung.vox.com/tags/thoughtworks/" label="thoughtworks" />
    
    </entry>

    
    <entry>
        <title>UITableView scrolling performance gotcha</title>
    
    
    
        <link rel="alternate" type="text/html" title="UITableView scrolling performance gotcha" href="http://alexhung.vox.com/library/post/uitableview-scrolling-performance-gotcha.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="UITableView scrolling performance gotcha" href="http://alexhung.vox.com/library/post/uitableview-scrolling-performance-gotcha.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="UITableView scrolling performance gotcha" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f2190123ddbc73f7860c" /> 
                <id>tag:vox.com,2009-09-30:asset-6a00c2251c28f3f2190123ddbc73f7860c</id>
        <published>2009-09-30T19:09:11Z</published>
        <updated>2009-09-30T19:28:01Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>After a few months of .NET reporting/SSIS development work, I&#39;m back to an iPhone project this week. One enhancement I added yesterday was a better formatted table section title in a UITableView. Before, the section title is either a bunch of unformatted (also incorrectly by locale) dates (e.g. 2009-09-30), or times (e.g. 14:58) straight from the data source. The enhancement/bug fix is to format the date or time to be locale aware so the title would either be &quot;Wed Sep, 30 2009&quot; or &quot;2:58 PM&quot; if you are in the US.<div><br /></div><div>Pretty straightforward I thought, and after a couple of trips to NSDateFormatter and use the output in UITableView&#39;s&#160;<span class="Apple-style-span" style="font-family: Menlo, helvetica, hirakakupro-w3, osaka, &#39;ms pgothic&#39;, sans-serif; font-size: 11px; ">titleForHeaderInSection:section</span>&#160;method, it was all working very well in the simulator. That was until I put the app onto my iPhone for some real in-device testing.</div><div><br /></div><div>The scrolling performance in the table was <strong>horrible</strong>! My first thought was that it had to do with the background view I added to the custom table cell view for colouring the table cell background. But after nearly an hour of debugging through the code I still couldn&#39;t find anything wrong.</div><div><br /></div><div>Turns out that the&#160;<span class="Apple-style-span" style="font-family: Menlo, helvetica, hirakakupro-w3, osaka, &#39;ms pgothic&#39;, sans-serif; font-size: 11px; ">titleForHeaderInSection:section</span>&#160;method is not just called once per controller&#160;instantiation. It is called <strong>once per table cell display</strong>!</div><div><br /></div><div>Once I moved the code to format the section title into&#160;<span class="Apple-style-span" style="font-family: Menlo, helvetica, hirakakupro-w3, osaka, &#39;ms pgothic&#39;, sans-serif; font-size: 11px; ">viewDidLoad</span>&#160;and cached a copy of the nicely formatted titles in an array, the scrolling is back to normal speed.</div></p>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/uitableview-scrolling-performance-gotcha.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f2190123ddbc73f7860c?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="apple" scheme="http://alexhung.vox.com/tags/apple/" label="apple" />
    
    <category term="programming" scheme="http://alexhung.vox.com/tags/programming/" label="programming" />
    
    <category term="software development" scheme="http://alexhung.vox.com/tags/software+development/" label="software development" />
    
    <category term="objective-c" scheme="http://alexhung.vox.com/tags/objective-c/" label="objective-c" />
    
    <category term="iphone" scheme="http://alexhung.vox.com/tags/iphone/" label="iphone" />
    
    <category term="thoughtworks" scheme="http://alexhung.vox.com/tags/thoughtworks/" label="thoughtworks" />
    
    </entry>

    
    <entry>
        <title>QotD: The One Historical Event I&#39;d Like to Witness</title>
    
    
    
        <link rel="alternate" type="text/html" title="QotD: The One Historical Event I&#39;d Like to Witness" href="http://alexhung.vox.com/library/post/qotd-the-one-historical-event-id-like-to-witness.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="QotD: The One Historical Event I&#39;d Like to Witness" href="http://alexhung.vox.com/library/post/qotd-the-one-historical-event-id-like-to-witness.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="QotD: The One Historical Event I&#39;d Like to Witness" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f2190123dda14804860b" /> 
                <id>tag:vox.com,2009-09-13:asset-6a00c2251c28f3f2190123dda14804860b</id>
        <published>2009-09-13T03:08:23Z</published>
        <updated>2009-09-13T03:08:23Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <blockquote><p>If you could have personally witnessed one event in history, which one would you want to have seen?</p></blockquote><p>July 16, 1969 Landing of Apollo 11 on the Moon.
 </p>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/qotd-the-one-historical-event-id-like-to-witness.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f2190123dda14804860b?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="qotd" scheme="http://alexhung.vox.com/tags/qotd/" label="qotd" />
    
    <category term="space" scheme="http://alexhung.vox.com/tags/space/" label="space" />
    
    <category term="moon" scheme="http://alexhung.vox.com/tags/moon/" label="moon" />
    
    <category term="apollo" scheme="http://alexhung.vox.com/tags/apollo/" label="apollo" />
    
    <category term="historical event" scheme="http://alexhung.vox.com/tags/historical+event/" label="historical event" />
    
    </entry>

    
    <entry>
        <title>Portland photos</title>
    
    
    
        <link rel="alternate" type="text/html" title="Portland photos" href="http://alexhung.vox.com/library/post/portland-photos.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="Portland photos" href="http://alexhung.vox.com/library/post/portland-photos.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="Portland photos" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f219011016d00cc2860d" /> 
                <id>tag:vox.com,2009-09-12:asset-6a00c2251c28f3f219011016d00cc2860d</id>
        <published>2009-09-12T04:06:10Z</published>
        <updated>2009-09-12T04:06:10Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            
    
    
    

<div at:enclosure="asset" at:xid="6a00c2251c28f3f2190123dda0f02f860b" at:format="auto" at:align="center"
    class="enclosure enclosure-center enclosure-auto embed-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="width: 400px;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item embed-asset last">
    
            <div class="enclosure-embed">
        
                <iframe class="enclosure-iframe" frameborder="0" scrolling="no" src="http://a7.vox-data.com/6a00c2251c28f3f2190123dda0f02f860b-html" style="width: 400px; height: 300px;"></iframe>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->
 <div><br /></div>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/portland-photos.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f219011016d00cc2860d?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="flickr" scheme="http://alexhung.vox.com/tags/flickr/" label="flickr" />
    
    <category term="vacation" scheme="http://alexhung.vox.com/tags/vacation/" label="vacation" />
    
    <category term="photography" scheme="http://alexhung.vox.com/tags/photography/" label="photography" />
    
    <category term="oregon" scheme="http://alexhung.vox.com/tags/oregon/" label="oregon" />
    
    <category term="wine" scheme="http://alexhung.vox.com/tags/wine/" label="wine" />
    
    <category term="beach" scheme="http://alexhung.vox.com/tags/beach/" label="beach" />
    
    <category term="portland" scheme="http://alexhung.vox.com/tags/portland/" label="portland" />
    
    </entry>

    
    <entry>
        <title>How safe do you feel?</title>
    
    
    
        <link rel="alternate" type="text/html" title="How safe do you feel?" href="http://alexhung.vox.com/library/post/how-safe-do-you-feel.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="How safe do you feel?" href="http://alexhung.vox.com/library/post/how-safe-do-you-feel.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="How safe do you feel?" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f219011018042602860e" /> 
        
                        <id>tag:vox.com,2009-08-17:asset-6a00c2251c28f3f219011018042602860e</id>
        <published>2009-08-17T01:50:09Z</published>
        <updated>2009-08-19T01:35:08Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>Most people I know do not have any plan to backup their data. Somehow they put their trust to a piece of 3.5&quot; glass disc, spinning at 5400 times a second or more with a sharp metal spike fraction of a hair above it. Me? I like to spread my risk and backup my data, especially after suffering a total data lost about 12 years ago. As <a href="http://twitter.com/alexlindsay">Alex Lindsay</a> from the <a href="http://www.pixelcorps.com/">PixelCorps</a> often says on podcasts, &quot;Unless the data is stored in 3 different places, it doesn&#39;t exist&quot;. This may sound over the top but with all the online file sharing or storage services available it is actually pretty easy to have decent backup strategy with minimum cost. To achieve comprehensive backup coverage, it would definitely cost a few dollars.<div><br /></div><div>Like computer security, any backup strategy should be constructed in layers. This applies to both time, location, and accessibility. Let me use my backup strategy as an example.</div><div><br /></div><div>The least time consuming (in terms of setup and maintenance) backup component in my setup is <a href="http://www.apple.com/macosx/what-is-macosx/time-machine.html">Time Machine</a> that comes with OS X. I setup Time Machine to backup to an external drive (more on that later) that is the same size as my main bootup drive and that&#39;s it. Time Machine will then backup everything on the drive and updates the backup copy with any changes every hour. This provides the first layer in my backup strategy; files that are used most will always be backed up and available to restore quickly.</div><div><br /></div><div>In the event of my bootup hard disk fails, I can restore from the Time Machine backup. But that can take a while given most hard disk is rather large nowadays. So to keep down time to the minimum, every week I also clone the entire hard disk to an external disk (separated from the one Time Machine uses). I use <a href="http://www.bombich.com/software/ccc.html">Carbon Copy Cloner</a>&#160;for this and while it is not a &#39;set and forget&#39; setup like Time Machine, it only requires 5-10 minutes of actual effort every week on my part to clone the hard disk. This copy will allow me to boot my Mac up from the external drive within minutes of any internal hard disk failure. At the most, I&#39;ll have 6 days of data to catch up using Time Machine and that would not take long at all.</div><div><br /></div><div>So I have two copies of my internal hard disk on two different external drives, e.g. data in two places. Pretty safe, right? Yes, pretty safe but not <strong>very</strong> safe. What if any of these two external drives fails? Then I can easily back to having no backup at all.</div><div><br /></div>
    
    
    

    
    
    

    
    
    

    
    
    

    
    
    
<div at:enclosure="asset" at:xid="6a00c2251c28f3f2190100a802bc13000e" at:format="small" at:align="left"
    class="enclosure enclosure-left enclosure-small photo-enclosure" 
     style="text-align: center; float: left;">
<div class="enclosure-inner"
    
        style="padding: 9px; border: 1px solid; width: px; margin: 0 20px 20px 0;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item photo-asset last">
    
            <div class="enclosure-image">
        
                <a href="http://alexhung.vox.com/library/photo/6a00c2251c28f3f2190100a802bc13000e.html"><img src="http://a3.vox.com/6a00c2251c28f3f2190100a802bc13000e-120pi" alt="Drobe on Mac Pro - 3" title="Drobe on Mac Pro - 3" /></a>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"><a href="http://alexhung.vox.com/library/photo/6a00c2251c28f3f2190100a802bc13000e.html" title="Drobe on Mac Pro - 3">Drobe on Mac Pro - 3</a></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->




<div>To mitigate that, the external drive that Time Machine uses is actually a <a href="http://www.drobo.com/">Drobo</a>. Drobo is a fully redundant disk array so data will be stored in a way that only all the drives fail at the same time in order to loss the data. This means my Time Machine copy is actually safer than just being stored on a regular external drive. The problem is that the Drobo drive is still sitting right where my machine is. What if someone break into my apartment and steals my computer, the clone external drive, and the Drobo? What if there is a fire in the building and all my computer equipment are lost?</div><div><br /></div><div>For that eventuality, only an offsite backup will save my data. Again, time, location, and accessibility guide which services I choose to use. For files that I access and save often, I store them on <a href="https://www.getdropbox.com/">Dropbox</a>. It is ultra fast (way faster to sync to the cloud than MobileMe, for example) which makes it a pleasure to use. The free option let you store up to 2GB of data and it is more than adequate for my day-to-day data. This also have the added advantage of allow me to access files on different computers, e.g. my work laptop. For files that I need less often and larger (for example, video files that I want to share online), I store them on <a href="http://www.apple.com/mobileme/features/idisk.html">MobileMe&#39;s iDisk</a>. Data syncing is nowhere as fast as Dropbox but it provides more data storage.</div><div><br /></div><div>I also use a separate online service to store my code. <a href="http://cvsdude.com/">cvsdude</a> provides online storage of code using CVS or Subversion. I also use <a href="https://github.com/">GitHub</a> for my latest code project. Eventually all of my code will be stored on GitHub once my subscription with cvsdude expires.</div><div><br /></div><div>But what about all the music, photos, and videos files that I own? Their large size make it difficult to backup to the cloud. Right now I store all of them on the Drobo so they are protected against disk failure but that means they exist only in one place (strictly speaking more than one copy is stored by Drobo). To guard against total loss, I am currently in the process of using&#160;<a href="https://mozy.com/">Mozy</a> to backup all of the media files which come to about 600+GB. The MozyHome Unlimited plan is not free but it will be tough to ask someone to provide that amount of backup storage at no cost! The issue with Mozy is the time requires to upload that much data to their data centre. Even with a decent upload connection of ~2Mbps I am expecting the upload to take at least 3-4 months to complete.</div><div><br /></div><div>To recap, here is where my data exists:</div><div><br /></div><div>1) Files (e.g. documents, emails, applications, etc.) - Internal hard disk, Time Machine on Drobo, clone on USB external drive = 3 places</div><div>2) Important/Frequent use documents (subset of #1) - Internal hard disk, Time Machine, clone drive, Dropbox, MobileMe&#39;s iDisk = 4 places</div><div>3) Code files - Internal hard disk, Time Machine, clone drive, MobileMe&#39;s iDisk, cvsdude/GitHub = 5 places</div><div>3) Media files (iTunes library, iPhoto library, iMovie Events &amp; Projects) - Drobo, Mozy = 2 places</div><div><br /></div><div>Am I crazy? Ask me again when you have a hard disk failure and want some advice on how to recover your precious data.</div></p>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/how-safe-do-you-feel.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f219011018042602860e?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="apple" scheme="http://alexhung.vox.com/tags/apple/" label="apple" />
    
    <category term="backup" scheme="http://alexhung.vox.com/tags/backup/" label="backup" />
    
    <category term="time machine" scheme="http://alexhung.vox.com/tags/time+machine/" label="time machine" />
    
    <category term="git" scheme="http://alexhung.vox.com/tags/git/" label="git" />
    
    <category term="svn" scheme="http://alexhung.vox.com/tags/svn/" label="svn" />
    
    <category term="dropbox" scheme="http://alexhung.vox.com/tags/dropbox/" label="dropbox" />
    
    <category term="mozy" scheme="http://alexhung.vox.com/tags/mozy/" label="mozy" />
    
    <category term="drobo" scheme="http://alexhung.vox.com/tags/drobo/" label="drobo" />
    
    <category term="github" scheme="http://alexhung.vox.com/tags/github/" label="github" />
    
    <category term="mobileme" scheme="http://alexhung.vox.com/tags/mobileme/" label="mobileme" />
    
    <category term="cvsdude" scheme="http://alexhung.vox.com/tags/cvsdude/" label="cvsdude" />
    
    </entry>

    
    <entry>
        <title>My first published iPhone app</title>
    
    
    
        <link rel="alternate" type="text/html" title="My first published iPhone app" href="http://alexhung.vox.com/library/post/my-first-published-iphone-app.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="My first published iPhone app" href="http://alexhung.vox.com/library/post/my-first-published-iphone-app.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="My first published iPhone app" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f219011017ff1992860e" /> 
        
                
                
                
                        <id>tag:vox.com,2009-08-06:asset-6a00c2251c28f3f219011017ff1992860e</id>
        <published>2009-08-06T21:27:20Z</published>
        <updated>2009-08-06T21:46:41Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>One of the two iPhone app that I worked on during earlier part of this year has landed on <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=325405256&amp;mt=8">iTunes AppStore</a>! As part of the sponsor for <a href="http://agile2009.agilealliance.org/">Agile 2009 conference</a>, a small team of ThoughtWorkers developed a conference app to help the attendees. I left my fingerprints on the Twitter, Maps, and Schedule screens. The other interesting parts include the cloud computing (on Google App Engine) that provides up-to-date sync of conference schedules, ability to mark sessions that you plan to attend, and provide feedback to the presenters. The app also includes the Agile Manifesto, the 12 principles, allows you to sign the manifesto, or even send email to your friends to sign up.<div><br /></div><div><div at:enclosure="asset" at:xid="6a00c2251c28f3f21901101683a502860c 6a00c2251c28f3f2190110185e0c3e860f 6a00c2251c28f3f219011017ff1981860e 6a00c2251c28f3f219011016be6e56860d" at:format="strip-horizontal" at:align="center" class="enclosure enclosure-center enclosure-strip enclosure-strip-horizontal"  style="text-align: center;">
<div class="enclosure-inner" style=" margin: 5px; border: 1px solid; text-align: center;"><a href="http://alexhung.vox.com/library/photo/6a00c2251c28f3f21901101683a502860c.html" class="enclosure-strip-link" title="Splash Screen"><img src="http://a2.vox.com/6a00c2251c28f3f21901101683a502860c-120pi" alt="Splash Screen" class="enclosure-strip-image" style="margin: 5px; border: 0;" /></a><a href="http://alexhung.vox.com/library/photo/6a00c2251c28f3f2190110185e0c3e860f.html" class="enclosure-strip-link" title="Conference Schedule Screen"><img src="http://a6.vox.com/6a00c2251c28f3f2190110185e0c3e860f-120pi" alt="Conference Schedule Screen" class="enclosure-strip-image" style="margin: 5px; border: 0;" /></a><a href="http://alexhung.vox.com/library/photo/6a00c2251c28f3f219011017ff1981860e.html" class="enclosure-strip-link" title="Twitter feed Screen"><img src="http://a1.vox.com/6a00c2251c28f3f219011017ff1981860e-120pi" alt="Twitter feed Screen" class="enclosure-strip-image" style="margin: 5px; border: 0;" /></a><a href="http://alexhung.vox.com/library/photo/6a00c2251c28f3f219011016be6e56860d.html" class="enclosure-strip-link" title="Agile Manifesto Screen"><img src="http://a6.vox.com/6a00c2251c28f3f219011016be6e56860d-120pi" alt="Agile Manifesto Screen" class="enclosure-strip-image" style="margin: 5px; border: 0;" /></a></div>
</div> <!-- end enclosure -->
 
 
 
 </div><div><br /></div></p>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/my-first-published-iphone-app.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f219011017ff1992860e?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="iphone" scheme="http://alexhung.vox.com/tags/iphone/" label="iphone" />
    
    <category term="thoughtworks" scheme="http://alexhung.vox.com/tags/thoughtworks/" label="thoughtworks" />
    
    <category term="agile2009" scheme="http://alexhung.vox.com/tags/agile2009/" label="agile2009" />
    
    </entry>

    
    <entry>
        <title>The High Line</title>
    
    
    
        <link rel="alternate" type="text/html" title="The High Line" href="http://alexhung.vox.com/library/post/the-high-line.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="The High Line" href="http://alexhung.vox.com/library/post/the-high-line.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="The High Line" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f2190110168100ea860c" /> 
                <id>tag:vox.com,2009-08-02:asset-6a00c2251c28f3f2190110168100ea860c</id>
        <published>2009-08-02T02:41:56Z</published>
        <updated>2009-08-02T02:43:49Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>Having a brand new camera body encourages me to take more photos during the weekend (funny that always works). Today, Leah and I went to the <a href="http://www.thehighline.org/">High Line</a> after having brunch with some friends. From the <a href="http://en.wikipedia.org/wiki/High_Line_(New_York_City)">Wikipedia</a>, the High Line is<div><br /></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><p>The High Line is a 1.45-mile (2.33 km) section of the former elevated freight railroad of the West Side Line, along the lower west side of Manhattan, which has been redesigned and planted as a greenway. The High Line runs from the former 34th Street freightyard, near the Javits Convention Center, through the neighborhood of Chelsea to Gansevoort Street in the Meat Packing District of the West Village.</p></blockquote><br />
    
    
    


    
    
    


    
    
    

<div at:enclosure="asset" at:xid="6a00c2251c28f3f219011016810030860c" at:format="auto" at:align="center"
    class="enclosure enclosure-center enclosure-auto embed-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="width: 400px;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item embed-asset last">
    
            <div class="enclosure-embed">
        
                <iframe class="enclosure-iframe" frameborder="0" scrolling="no" src="http://a0.vox-data.com/6a00c2251c28f3f219011016810030860c-html" style="width: 400px; height: 300px;"></iframe>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->


<div><br /></div></p>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/the-high-line.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f2190110168100ea860c?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="flickr" scheme="http://alexhung.vox.com/tags/flickr/" label="flickr" />
    
    <category term="photography" scheme="http://alexhung.vox.com/tags/photography/" label="photography" />
    
    <category term="new york city" scheme="http://alexhung.vox.com/tags/new+york+city/" label="new york city" />
    
    <category term="high line" scheme="http://alexhung.vox.com/tags/high+line/" label="high line" />
    
    </entry>

    
    <entry>
        <title>Naples photos</title>
    
    
    
        <link rel="alternate" type="text/html" title="Naples photos" href="http://alexhung.vox.com/library/post/naples-photos.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="Naples photos" href="http://alexhung.vox.com/library/post/naples-photos.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="Naples photos" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f219011016b69d79860d" /> 
                <id>tag:vox.com,2009-07-26:asset-6a00c2251c28f3f219011016b69d79860d</id>
        <published>2009-07-26T04:03:45Z</published>
        <updated>2009-07-26T04:03:45Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            
    
    
    

<div at:enclosure="asset" at:xid="6a00c2251c28f3f2190110167bd76e860c" at:format="auto" at:align="center"
    class="enclosure enclosure-center enclosure-auto embed-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="width: 400px;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item embed-asset last">
    
            <div class="enclosure-embed">
        
                <iframe class="enclosure-iframe" frameborder="0" scrolling="no" src="http://a6.vox-data.com/6a00c2251c28f3f2190110167bd76e860c-html" style="width: 400px; height: 300px;"></iframe>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->
 <div><br /></div>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/naples-photos.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f219011016b69d79860d?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="flickr" scheme="http://alexhung.vox.com/tags/flickr/" label="flickr" />
    
    <category term="vacation" scheme="http://alexhung.vox.com/tags/vacation/" label="vacation" />
    
    <category term="photography" scheme="http://alexhung.vox.com/tags/photography/" label="photography" />
    
    <category term="italy" scheme="http://alexhung.vox.com/tags/italy/" label="italy" />
    
    <category term="naples" scheme="http://alexhung.vox.com/tags/naples/" label="naples" />
    
    </entry>

    
    <entry>
        <title>Objective-C discourages good OO design/code?</title>
    
    
    
        <link rel="alternate" type="text/html" title="Objective-C discourages good OO design/code?" href="http://alexhung.vox.com/library/post/objective-c-discourages-good-oo-designcode.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="Objective-C discourages good OO design/code?" href="http://alexhung.vox.com/library/post/objective-c-discourages-good-oo-designcode.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="Objective-C discourages good OO design/code?" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f219011016696d4d860c" /> 
                <id>tag:vox.com,2009-06-28:asset-6a00c2251c28f3f219011016696d4d860c</id>
        <published>2009-06-28T20:44:51Z</published>
        <updated>2009-06-29T02:03:32Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>I started learning Objective-C when Apple released the iPhone SDK over a year ago, and started programming in it seriously at the beginning of this year. While there are many things I like about Objective-C as a OO language, there is one thing that continuously bother me.<div><br /></div><div>One of the four main tenant of object-oriented design is <a href="http://en.wikipedia.org/wiki/Encapsulation_(computer_science)">Encapsulation</a>. Meaning, the inner working of an object is hidden from public view.</div><div><br /></div><div>In Objective-C, an instance method can be declared in the implementation file (.m file) in the following ways:</div><div><ul><li>Implement the method without declaring it in the header file. This is (almost) equivalent to private method in C#/Java.</li><li>Declare the method signature in the header file, and implement the method in the .m file. This is like declaring a method public in C#/Java.</li></ul><div><br /></div><div><div>So how does this discourages me from writing good OO code with respect to encapsulation?</div><div><br /></div><div>If I choose the first option, I have two choices. Either I implement the method before its first usage which does no good with readability re Uncle Bob&#39;s <a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean Code</a>&#39;s <a href="http://www.markhneedham.com/blog/2008/09/15/clean-code-book-review/">newspaper metaphor</a>, OR implement it after and put up with the compiler warning about the method call may not exist.</div><div><br /></div><div>To get the freedom of placing the method anywhere in the .m file, I have to choose the second option and declare the method signature in the header file. The downside of this is that now the method is exposed as part of the class public interface and break encapsulation. (Yes, I know that the method can still be called without the header file declaration. Again, a compiler warning greets you.)</div><div><br /></div><div>All three options are undesirable to me. It is really a case of pick my poison! Right now, I choose option one and put the method before first usage. Readability suffers because I like reading methods <strong>after</strong> the usage but at least the header file is clean and represents the intended public interface.</div><div><br /></div><div><strong>Update:</strong> Martin Pilkington makes a suggestion to me via <a href="http://twitter.com/pilky/status/2378455535">Twitter</a>. I&#39;ll have to try it out and see.</div><div><br /></div><div><strong>Update #2: </strong>Someone else on Twitter&#160;<a href="http://twitter.com/bbum/status/2379696114">also suggests</a> using Extension to solve this issue. The Apple&#39;s <a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html">documentation here</a>&#160;(at the end of the page) shows how an extension of a class can be used to define private method, separated from the main class interface definition.</div><div><br /></div><div>My initial feel? Pretty inelegant workaround to an inherited problem of Objective-C legacy linkage to C. No thanks, I&#39;ll stick with declaring private methods before usage.</div></div></div></p>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/objective-c-discourages-good-oo-designcode.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f219011016696d4d860c?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="programming" scheme="http://alexhung.vox.com/tags/programming/" label="programming" />
    
    <category term="software development" scheme="http://alexhung.vox.com/tags/software+development/" label="software development" />
    
    <category term="objective-c" scheme="http://alexhung.vox.com/tags/objective-c/" label="objective-c" />
    
    <category term="object-oriented" scheme="http://alexhung.vox.com/tags/object-oriented/" label="object-oriented" />
    
    <category term="thoughtworks" scheme="http://alexhung.vox.com/tags/thoughtworks/" label="thoughtworks" />
    
    <category term="iphone sdk" scheme="http://alexhung.vox.com/tags/iphone+sdk/" label="iphone sdk" />
    
    <category term="encapsulation" scheme="http://alexhung.vox.com/tags/encapsulation/" label="encapsulation" />
    
    </entry>

    
    <entry>
        <title>Philadelphia Experiment</title>
    
    
    
        <link rel="alternate" type="text/html" title="Philadelphia Experiment" href="http://alexhung.vox.com/library/post/philadelphia-experiment.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="Philadelphia Experiment" href="http://alexhung.vox.com/library/post/philadelphia-experiment.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="Philadelphia Experiment" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251c28f3f21901101660fb86860c" /> 
                <id>tag:vox.com,2009-06-17:asset-6a00c2251c28f3f21901101660fb86860c</id>
        <published>2009-06-18T01:51:17Z</published>
        <updated>2009-06-18T03:22:34Z</updated>
    
        <author>
            <name>Alex</name>
            <uri>http://alexhung.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://alexhung.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <div>
    
    
    


    
    
    


    
    
    

<div at:enclosure="asset" at:xid="6a00c2251c28f3f219011017dd17b0860e" at:format="auto" at:align="center"
    class="enclosure enclosure-center enclosure-auto embed-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="width: 400px;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item embed-asset last">
    
            <div class="enclosure-embed">
        
                <iframe class="enclosure-iframe" frameborder="0" scrolling="no" src="http://a0.vox-data.com/6a00c2251c28f3f219011017dd17b0860e-html" style="width: 400px; height: 300px;"></iframe>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name"></div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->


</div><p>Leah and I went to Philadelphia on a weekend trip this past weekend. For me, it was two days of experiments. All of which are for our trip to Naples/Pompeii later in July.<div><br /></div><div><strong>Canon 50D</strong></div><div><br /></div><div>The 50D is a vast improvement over my old 10D, bought way back in 2003. The increase in pixel count is obvious, but it is other much more subtle features that impress me. First, the quick startup time from sleep mode. The 10D takes about 5-10 seconds to wake up, thus sometimes I would miss shots. The 50D wakes up and ready to shoot almost instantaneously. The LCD screen is of course larger but it is the colour rendition that makes me take notice. With 10D, the LCD is always too bright and colour too saturated. The screen is still slightly too bright but the colour is almost spot on so preview is actually accurate. The low(er) noise level on high ISO settings makes it, for the first time for me at least, viable to shoot indoor with ISO1600 without worrying about unusable image. Images are still noisy but at least it is manageable.</div><div><br /></div><div><strong>Kata DR 467</strong></div><div><br /></div><div>I&#39;ve been using a camera hipbag inside my Oakley backpack on trips for a few years now. Mainly so it is not obvious that I&#39;m carrying an expensive digital camera. While that worked fairly well, it was awkward to store and retrieve the camera as I have two bag openings to deal with. Alex Lindsay (from PixelCorp and MacBreak Weekly) on Twitter recommended <a href="http://www.amazon.com/Kata-KT-DR-467-Digital-Rucksack/dp/B000VW6KXS/ref=sr_1_1?ie=UTF8&amp;s=electronics&amp;qid=1245289517&amp;sr=8-1">Kata DR-467</a>&#160;for travelling with DSLR. I looked online as well as touched it for real in B&amp;H before deciding to buy it. After this weekend, I was so glad I bought it! I can&#39;t believe I didn&#39;t get it earlier. The slide out compartment at the bottom for the camera and lenses are the best feature, making it very easy to store/retrieve camera on the go.</div><div><br /></div><div><strong>GeoCoder</strong></div><div><br /></div><div>I&#39;ve always wanted to geotag my photos so this trip was a perfect opportunity to utilise the built-in GPS in my iPhone to try that. I found on the AppStore this free app, <a href="http://www.drobnik.com/touch/index.php/geocorder">GeoCoder</a>, which claims to make geotagging easy. It was pretty easy to use and I just needed to remember to start a &#39;recording&#39; in GeoCoder at the beginning of the day and stop it at the end. I was afraid that it would drain my battery quickly but it turned out not to be the case.</div><div><br /></div><div>I was pretty excited about this whole geotagging thing until I got home and tried to use the GPX files GeoCoder produces in Google Earth. Turns out the iPhone GPS receiver is not sensitive enough to pick up GPS signal when the phone is in my pants pocket! So all I have are a handful of GPS locations whenever I took my phone out for a quick Twitter check or the iPhone happened to have enough signal.</div><div><br /></div><div>So GeoCoder is out for me for the time being.</div><div><br /></div><div>For the Naples/Pompeii trip, I have considered using one of my iPhone case and strap it to the Kata&#39;s shoulder strap in order to get decent GPS signal for the iPhone. Or I can purchase one of the cheaper GPS recorder and use that instead. I&#39;d probably still need to expose the recorder to the sky somehow though.</div></p>
        
    
                <p style="clear:both;">

    <a href="http://alexhung.vox.com/library/post/philadelphia-experiment.html?_c=feed-atom-full#comments">Read and post comments</a>

 | 

    
    <a href="http://www.vox.com/share/6a00c2251c28f3f21901101660fb86860c?_c=feed-atom-full">Send to a friend</a>

</p>

                </div>
            ]]>
        </content>
    
    <category term="photography" scheme="http://alexhung.vox.com/tags/photography/" label="photography" />
    
    <category term="canon" scheme="http://alexhung.vox.com/tags/canon/" label="canon" />
    
    <category term="gps" scheme="http://alexhung.vox.com/tags/gps/" label="gps" />
    
    <category term="philadelphia" scheme="http://alexhung.vox.com/tags/philadelphia/" label="philadelphia" />
    
    <category term="geotagging" scheme="http://alexhung.vox.com/tags/geotagging/" label="geotagging" />
    
    </entry>

</feed>


