<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.antipode.ca/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Antipode</title>
	
	<link>http://www.antipode.ca</link>
	<description>Allen Pike on gidgets and gazmos.</description>
	<lastBuildDate>Mon, 19 Jul 2010 19:16:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.antipode.ca/antipode" /><feedburner:info uri="antipode" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.antipode.ca%2Fantipode" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.antipode.ca%2Fantipode" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.antipode.ca%2Fantipode" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.antipode.ca/antipode" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.antipode.ca%2Fantipode" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.antipode.ca%2Fantipode" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.antipode.ca%2Fantipode" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>A Tale of two Budgetable competitors</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/MyAAjfIp7ZQ/</link>
		<comments>http://www.antipode.ca/2010/a-tale-of-two-budgetable-competitors/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 19:16:16 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Budgetable]]></category>
		<category><![CDATA[Startups]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1778</guid>
		<description><![CDATA[Four years ago I started a personal finance site called Budgetable. Before I got very far, two strong competitors sprouted up: Mint and Wesabe. I had mixed feelings about it, but I shuttered Budgetable and referred people to Wesabe. Was that a good call? How did the competitors do?
Wesabe, as of this month, has gone [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right"  src="http://www.antipode.ca/wp-content/uploads/2010/07/budgetable.png"  alt=""  title="The Budgetable logo."  width="150"  height="150"  class="alignnone size-full wp-image-1786"   style="float: right; padding-bottom: 10px; padding-left: 10px"/>Four years ago I started a personal finance site called Budgetable. Before I got very far, two strong competitors sprouted up: Mint and Wesabe. I had mixed feelings about it, but I shuttered Budgetable and <a href="http://blog.wesabe.com/2010/06/30/wesabe-is-discontinuing-its-accounts-tab-as-of-july-31st/" >referred people to Wesabe</a>. Was that a good call? How did the competitors do?</p>
<p><b>Wesabe</b>, as of this month, <a href="http://blog.wesabe.com/2010/06/30/wesabe-is-discontinuing-its-accounts-tab-as-of-july-31st/" >has gone out of business</a>. Reportedly, they lost their venture backing and after years, still had no revenue.  They planned to sell subscriptions, but later changed to trying to sell directly to banks. I&#8217;m not sure why they thought they could sell web apps to large, conservative businesses, but hey. Wesabe was also expensive to run. Between running secure servers and paying for the service that connects to all those banks, they had to fold.</p>
<p>On the other hand, <b>Mint</b> was by most accounts a success. They made some revenue by upselling financial services to users, and grew extremely fast. They only supported US banks, but that seemed to help more than it hurt. They built a significant threat to the establishment (Intuit&#8217;s Quicken) and then were <a href="http://www.mint.com/press/intuit-to-acquire-mint-com/" >acquired by Intuit for 170 million</a>.</p>
<p>So where are we now? Four years later, if you want personal finance tools, you go to Intuit. <a href="http://37signals.com/svn/posts/1927-the-next-generation-bends-over" > Jason Fried lamented this</a>, but now that their #1 competitor has died, it&#8217;s even more dramatic.</p>
<p>Yet with hindsight, I&#8217;m still happy having retired Budgetable. Both competitors had to get big venture capital investment to do what they did, and neither got to profitability. They had to give their services away for free since that&#8217;s what consumers expect, and now neither of them exist as separate entities. That&#8217;s just not my game.</p>
<div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=MyAAjfIp7ZQ:CVOlQoN5clk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=MyAAjfIp7ZQ:CVOlQoN5clk:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/MyAAjfIp7ZQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/a-tale-of-two-budgetable-competitors/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/a-tale-of-two-budgetable-competitors/</feedburner:origLink></item>
		<item>
		<title>SproutCore spreads its wings</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/y5lPZVH-6KY/</link>
		<comments>http://www.antipode.ca/2010/sproutcore-spreads-its-wings/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 17:15:10 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[SproutCore]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1767</guid>
		<description><![CDATA[Charles Jolley, creator and lead developer of the SproutCore JavaScript framework, has left Apple to found his own company:
Now that I am no longer held back by big-company legal restrictions, I am going to be much more involved with the platform. Very soon I will post some new example code. Some others are working on [...]]]></description>
			<content:encoded><![CDATA[<p>Charles Jolley, creator and lead developer of the SproutCore JavaScript framework, has <a href="http://blog.sproutcore.com/post/756343010/the-next-revolution" >left Apple to found his own company</a>:</p>
<blockquote><p>Now that I am no longer held back by big-company legal restrictions, I am going to be much more involved with the platform. Very soon I will post some new example code. Some others are working on new documentation and build tools to ease that pain as well. Starting this fall, my new company will also start to offer online and in person training and mentoring courses to your team get up to speed quickly.  We can also finally get started on that book.</p></blockquote>
<p>This is exactly what SproutCore needed. It&#8217;s great that Apple is using it and putting resources into it, but being restricted from promoting your open source product is painful. There&#8217;ll still be teams at Apple using it, and now there&#8217;ll be a group that&#8217;s willing and able to spread it.</p>
<div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=y5lPZVH-6KY:qqBICz2rxp8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=y5lPZVH-6KY:qqBICz2rxp8:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/y5lPZVH-6KY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/sproutcore-spreads-its-wings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/sproutcore-spreads-its-wings/</feedburner:origLink></item>
		<item>
		<title>Leaving Apple</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/L79rX24z1lI/</link>
		<comments>http://www.antipode.ca/2010/leaving-apple/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 23:09:02 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Steam Clock]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1697</guid>
		<description><![CDATA[Today was my last day at Apple.
Working there has been the experience of a lifetime. The people, the products, and the coffee are all wonderful. I&#8217;m going to miss laughing at rumour sites, hiding prototypes, and not needing to explain where I work.
At Steve Jobs&#8217; commencent address at Stanford, he said:
You&#8217;ve got to find what [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right"  src="http://www.antipode.ca/wp-content/uploads/2010/06/badge.jpg"  alt=""  title="I was lucky enough to get a blue-logo badge."  width="150"  height="150"  class="alignnone size-full wp-image-1698"   style="float: right; padding-bottom: 10px; padding-left: 10px"/>Today was my last day at Apple.</p>
<p>Working there has been the experience of a lifetime. The people, the products, and the coffee are all wonderful. I&#8217;m going to miss laughing at rumour sites, hiding prototypes, and not needing to explain where I work.</p>
<p>At Steve Jobs&#8217; <a href="http://www.youtube.com/watch?v=Hd_ptbiPoXM" >commencent address at Stanford</a>, he said:</p>
<blockquote><p>You&#8217;ve got to find what you love. And that is as true for your work as it is for your lovers. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven&#8217;t found it yet, keep looking. Don&#8217;t settle.</p></blockquote>
<p>&#8220;Don&#8217;t settle&#8221; sounds obvious, but it took me a long time to realize how working at a company like Apple could possibly be settling. It turns out that while I like programming, it&#8217;s not my true love. The work I truly love is ensuring that a product is great. Sometimes that&#8217;s programming, sometimes it&#8217;s design, sometimes it&#8217;s talking to customers. It seems then that I belong at a small company where a role like that exists.</p>
<p>A great thing about small companies is that you can build your own. And so, tomorrow is my first day at <a href="http://www.steamclocksoftware.com/" >Steam Clock Software</a>. We&#8217;re going to take inspiration from great companies like Panic and 37signals, but with our own twist. We founded Steam Clock to make awesome software products and to be the best place to work in Vancouver. Getting there should be a fun ride.</p>
<p>Onward!</p>
<div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=L79rX24z1lI:Ly7E1ANJFyQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=L79rX24z1lI:Ly7E1ANJFyQ:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/L79rX24z1lI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/leaving-apple/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/leaving-apple/</feedburner:origLink></item>
		<item>
		<title>Twitter is fixing links</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/nx8K31W_tlE/</link>
		<comments>http://www.antipode.ca/2010/twitter-is-fixing-links/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 01:00:07 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1725</guid>
		<description><![CDATA[Last year I complained about URL shorteners on Twitter, and proposed a solution. Today they announced that they&#8217;re adopting something similar:
All links shared on Twitter.com or third-party apps will be wrapped with a t.co URL. A really long link such as http://www.amazon.com/Delivering-Happiness-Profits-Passion-Purpose/dp/0446563048 might be wrapped as http://t.co/DRo0trj for display on SMS, but it could be [...]]]></description>
			<content:encoded><![CDATA[<p>Last year I <a href="http://www.antipode.ca/2009/twitter-and-url-mangling/" >complained about URL shorteners on Twitter</a>, and proposed a solution. Today they announced that they&#8217;re <a href="http://blog.twitter.com/2010/06/links-and-twitter-length-shouldnt.html" >adopting something similar</a>:</p>
<blockquote><p>All links shared on Twitter.com or third-party apps will be wrapped with a t.co URL. A really long link such as <em>http://www.amazon.com/Delivering-Happiness-Profits-Passion-Purpose/dp/0446563048</em> might be wrapped as <em>http://t.co/DRo0trj</em> for display on SMS, but it could be displayed to web or application users as <em>amazon.com/Delivering-</em> or as the whole URL or page title.</p></blockquote>
<p>My guess is that Twitter clients will just use the domain as the link text, but either way it&#8217;s a big win for usability and readability. Any suggestions on what domains I should punish on Unladen Follow?</p>
<div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=nx8K31W_tlE:oFynUMEEsCE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=nx8K31W_tlE:oFynUMEEsCE:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/nx8K31W_tlE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/twitter-is-fixing-links/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/twitter-is-fixing-links/</feedburner:origLink></item>
		<item>
		<title>Scrolling libraries for Mobile Safari</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/kmNbyglse00/</link>
		<comments>http://www.antipode.ca/2010/scrolling-libraries-for-mobile-safari/#comments</comments>
		<pubDate>Sat, 01 May 2010 18:44:31 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobile Safari]]></category>
		<category><![CDATA[Scrolling]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1661</guid>
		<description><![CDATA[Scroll panes are a challenge for many Mobile Safari app developers. Often you&#8217;ll want to have persistent UI on a page that doesn&#8217;t scroll when the main content area does, especially on the iPad. However, Mobile Safari requires two-finger scrolling for iframes and overflow:scroll elements, and doesn&#8217;t support position:fixed. Both these decisions make sense for making [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right"  class="alignnone size-full wp-image-1663"  title="The elusive native beauty."  src="http://www.antipode.ca/wp-content/uploads/2010/04/scroll-tension.jpg"  alt=""  width="150"  height="150"   style="float: right; padding-bottom: 10px; padding-left: 10px"/>Scroll panes are a challenge for many Mobile Safari app developers. Often you&#8217;ll want to have persistent UI on a page that doesn&#8217;t scroll when the main content area does, especially on the iPad. However, Mobile Safari requires two-finger scrolling for iframes and <code>overflow:scroll</code> elements, and doesn&#8217;t support <code>position:fixed</code>. Both these decisions make sense for making existing content browsable using touch, but complicate things for apps that need kind of scrolling.</p>
<p>Luckily, it&#8217;s possible to implement high-performance touch scrolling with fixed elements using the hardware-accelerated animations available on the iPhone and iPad. Even more luckily, people are working on this problem so you don&#8217;t have to, and have released their work under MIT-style licenses.</p>
<h2>iScroll</h2>
<p><strong>Website</strong>: <a href="http://cubiq.org/scrolling-div-for-mobile-webkit-turns-3/16" >Announcement blog post</a>.<br/>
<strong>Demo</strong>: <a href="http://cubiq.org/dropbox/iscroll/" >iPhone only</a>.<br/>
<strong>Minified Size</strong>: 7.6KB.</p>
<p>The most commonly used scrolling library for Mobile Safari has been Matteo Spinelli&#8217;s iScroll library. iScroll is now at version 3, and supports most of what you&#8217;d want from an iPhone scrolling library. The look and feel are pretty close, but are not an exact reproduction of native scrolling. For example, version 3 removed the effect where scrollbars shrink when you scroll past the end of the region. Further, support for non-Apple devices is intermittent, which causes concerns for people using PhoneGap to make cross-platform apps. For these reasons, a lot of developers I&#8217;ve talked to aren&#8217;t satisfied with it.</p>
<p>In terms of perception, iScroll suffers most from a weak web presence. It&#8217;s hard to find on Google because &#8220;iScroll&#8221; is actually the name of an unrelated eBook app. The library is distributed through blog entries rather than a dedicated website, so make sure you&#8217;re looking at the latest iScroll-related entry. The creator has now switched gears to a more general purpose JavaScript library called <a href="http://code.google.com/p/ghosttouch/" >GhostTouch</a>, which is still at an early stage. As a result, a community hasn&#8217;t really formed around this library.</p>
<h2>TouchScroll</h2>
<p><strong>Website</strong>: <a href="http://uxebu.com/blog/2010/04/27/touchscroll-a-scrolling-layer-for-webkit-mobile/" >Announcement blog post</a> and <a href="http://github.com/davidaurelio/TouchScroll" >GitHub page</a>.<br/>
<strong>Demo</strong>: <a href="http://static.uxebu.com/~david/touchscroll/" >iPhone and iPad</a>.<br/>
<strong>Minified Size</strong>: 17.4KB.</p>
<p>This week David Aurelio released TouchScroll, a competing library. It&#8217;s more code than iScroll, but seeks to be more featureful and high-fidelity. It automatically updates to compensate for its content changing, and is also scrollable on desktop browsers simply by setting <code>overflow:scroll</code>. It&#8217;s written with PhoneGap developers in mind, including first-class Android support. It&#8217;s currently buggier than iScroll, but given its <a href="http://daringfireball.net/linked/2010/04/28/touchscroll" >current buzz</a>, its <a href="http://github.com/davidaurelio/TouchScroll" >fork-friendly GitHub page</a>, and the PhoneGap focus I can see TouchScroll becoming the dominant library in the medium term.</p>
<h2>Frameworks</h2>
<p>In the meantime, various frameworks have been implementing their own touch scrolling. Earlier this month at JSConf, the SproutCore guys announced and demoed <a href="http://blog.sproutcore.com/post/531215199/introducing-sproutcore-touch" >their own touch scrolling support</a>. While they don&#8217;t have native-style scrollbars yet, their performance is very good. For large apps, the performance benefits of their incremental rendering technology is a big win: only elements that are visible are rendered in the DOM. Other frameworks are working on solutions, for example the jqTouch plugin for jQuery has a plugin of its own based on iScroll. In the long term I see most frameworks including touch scrolling as part of the package.</p>
<div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=kmNbyglse00:l9RG9ncNYIY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=kmNbyglse00:l9RG9ncNYIY:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/kmNbyglse00" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/scrolling-libraries-for-mobile-safari/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/scrolling-libraries-for-mobile-safari/</feedburner:origLink></item>
		<item>
		<title>Choosing a viewport for iPad sites</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/KXlJ3NUw_pE/</link>
		<comments>http://www.antipode.ca/2010/choosing-a-viewport-for-ipad-sites/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 09:40:24 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1612</guid>
		<description><![CDATA[The iPad has made choosing a good viewport tag for your site more challenging. You now need to specify something that looks good with your content for screens that are 320px, 480px, 768px, and 1024px wide.
Viewports
Mobile Safari presents desktop-sized sites on small screens by rendering to a virtual browser screen that is 980px1 wide, and [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right"  class="alignnone size-full wp-image-1615"  title="Original Photo: Darren Hester."  src="http://www.antipode.ca/wp-content/uploads/2010/04/viewport.jpg"  alt=""  width="150"  height="150"   style="float: right; padding-bottom: 10px; padding-left: 10px"/>The iPad has made choosing a good viewport tag for your site more challenging. You now need to specify something that looks good with your content for screens that are 320px, 480px, 768px, and 1024px wide.</p>
<h2>Viewports</h2>
<p>Mobile Safari presents desktop-sized sites on small screens by rendering to a virtual browser screen that is 980px<sup>1</sup> wide, and letting you pan and zoom that page. Viewport tags let you tell Mobile Safari that your site displays properly narrower than 980px, and set other preferences for scaling your page.</p>
<p>Craig Hockenberry famously <a href="http://furbo.org/2007/07/24/one-line-of-code/" >determined the ideal viewport tag</a> for content sites in the iPhone era. That technique is no longer sufficient for the iPad because it can blow up your content larger than 1:1, blurring your images.</p>
<h2>TN2262</h2>
<p>The Apple tech note &#8220;<a href="http://developer.apple.com/safari/library/technotes/tn2010/tn2262.html" >Preparing Your Web Content for iPad</a>&#8221; has a good suggestion: avoid hard-coding a width for your viewport. On the iPad, a viewport width smaller than 1024 can cause your content to be blown up and blurred. Their suggestion is</p>
<pre>&lt;meta name="viewport" content="width=device-width" /&gt;</pre>
<p>This is an improvement, but your content will still be blown up if your device is in landscape mode. This is because device-width is the width of the physical device (320px or 768px), not the width of the screen in the current orientation. As a consequence, you can get content rendered at 768px and blown up to 1024px.</p>
<h2>Avoiding Blowup</h2>
<p>To make sure your content is not blown up, set the maximum-scale to 1.0:</p>
<pre>&lt;meta name="viewport" content="width=device-width,
                               maximum-scale=1.0" /&gt;</pre>
<p>Sites with the above tag will get a 1:1 viewport for all devices and orientations. This is impractical if your site does not render properly at 320px wide. In this case, hardcode a width and also set a maximum scale so your site isn&#8217;t blown up on the iPad:</p>
<pre>&lt;meta name="viewport" content="width=720,
                               maximum-scale=1.0" /&gt;</pre>
<p>This viewport will give you 1:1 rendering on the iPad, and a 720px viewport on the iPhone and iPod touch. Any desktop site that looks good narrower than 980px should set a viewport like this, especially any site that fits in 768px, since you can opt portrait-oriented iPad users into 1:1 unblurred versions of your content.</p>
<h2>The initial-scale Hack</h2>
<p>In Craig&#8217;s aforelinked viewport post from 2007, he suggested adding an initial-scale and minimum-scale of around 0.5 to your viewport for long pages. Back then, this simply limited how zoomed out the page would be on initial load. That&#8217;s unnecessary now, since Mobile Safari instead sets the initial zoom to whatever is required to fit the width of the screen.</p>
<p>Setting a small initial-scale nowadays has an interesting effect: if your chosen initial-scale is less than would be required to fit the width of the screen, your viewport is expanded. For example, if you set a viewport of 640px wide, and an initial-scale of 0.5, it will display normally on the iPhone (scaled 0.5x to fit 640px into 320px.) On the iPad, however, it will expand your viewport to 1280px, which was probably not your intention.</p>
<p>Overall, the initial-scale hack doesn&#8217;t seem to have utility anymore, and has odd side effects, so I imagine sites that have adopted the initial-scale hack, <a href="http://daringfireball.net/linked/2007/07/24/one-line" >such as Daring Fireball</a>, will drop it as iPad usage increases.</p>
<ol class="footnotes" ><li id="footnote_0_1612"  class="footnote" >Of course, when the iPad is in landscape orientation of 1024px wide, it will use 1024px.</li></ol><div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=KXlJ3NUw_pE:uGAQCpDHLrs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=KXlJ3NUw_pE:uGAQCpDHLrs:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/KXlJ3NUw_pE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/choosing-a-viewport-for-ipad-sites/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/choosing-a-viewport-for-ipad-sites/</feedburner:origLink></item>
		<item>
		<title>Four-way racing coming to PS3</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/cmx5LaQ9fKo/</link>
		<comments>http://www.antipode.ca/2010/four-way-racing-coming-to-ps3/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 01:59:11 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[PlayStation]]></category>
		<category><![CDATA[Split Screen]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1584</guid>
		<description><![CDATA[As a follow-up to last month&#8217;s article on split screen, it turns out that Vancouver&#8217;s United Front Games feels my pain. ModNation Racers is bringing four-way racing to the PS3:
I think we can all remember this experience from other games we have enjoyed, and we were keen to make sure we delivered the same frantic [...]]]></description>
			<content:encoded><![CDATA[<p>As a follow-up to last month&#8217;s <a href="http://www.antipode.ca/2010/an-ode-to-split-screen/" >article on split screen</a>, it turns out that Vancouver&#8217;s United Front Games feels my pain. <a href="http://blog.us.playstation.com/2010/03/23/modnation-racers-ps3-bringing-back-the-split-screen/" >ModNation Racers is bringing four-way racing to the PS3</a>:</p>
<blockquote><p>I think we can all remember this experience from other games we have enjoyed, and we were keen to make sure we delivered the same frantic experience for ModNation Racers.</p></blockquote>
<p>I say it gives Mario Kart a run for its money.</p>
<div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=cmx5LaQ9fKo:2oABgubldsw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=cmx5LaQ9fKo:2oABgubldsw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/cmx5LaQ9fKo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/four-way-racing-coming-to-ps3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/four-way-racing-coming-to-ps3/</feedburner:origLink></item>
		<item>
		<title>Altering Time retired</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/3lVqnbNoTek/</link>
		<comments>http://www.antipode.ca/2010/altering-time-retired/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 06:38:56 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Altered Alterations]]></category>
		<category><![CDATA[Altering Time]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1561</guid>
		<description><![CDATA[Yesterday I retired Altering Time, my first website. It had a great run with some great people, and it&#8217;s sad it couldn&#8217;t last forever. In its memory I recorded the story of Altering Time, along with the stories of the games it was home to, Asylum and Faith. I also preserved the Halls of Fame [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right"  src="http://www.antipode.ca/wp-content/uploads/2010/03/altering-time-dates1.jpg"  alt=""  title="This is the last of the nostalgia, I promise."  width="150"  height="150"  class="alignnone size-full wp-image-1574"   style="float: right; padding-bottom: 10px; padding-left: 10px"/>Yesterday I retired Altering Time, my first website. It had a great run with some great people, and it&#8217;s sad it couldn&#8217;t last forever. In its memory I recorded the <a href="http://www.antipode.ca/altering-time/" >story of Altering Time</a>, along with the stories of the games it was home to, <a href="http://www.antipode.ca/political-asylum/" >Asylum</a> and <a href="http://www.antipode.ca/engineering-faith/" >Faith</a>. I also preserved the Halls of Fame for three of the many features the site had: <a href="http://www.antipode.ca/visitors-quotes/" >Quotes</a>, <a href="http://www.antipode.ca/wtf-sites/" >WTF Sites</a>, and <a href="http://www.antipode.ca/altering-time-karma/" >Karma</a>. Finally, I spun off Just Ask Oldguy, a column on the site run by someone wiser than myself, into <a href="http://www.justaskoldguy.com/" >its own Q&#038;A site</a>.</p>
<p>I never used to understand why people would have side projects each with their own domains and branding instead of tying everything into one monolithic site. Now I realize it&#8217;s much better for the same reason you modularize anything else: it lets you upgrade, rewrite, shut down, reassign, or otherwise evolve with minimal mess. Plus, it&#8217;s fun.</p>
<p>Having one less project on my mind, not to mention no longer having 20,000 lines of unmaintained PHP running on my server, will help me sleep at night. More importantly, it frees up that mental bandwidth for the next big thing. Onward!</p>
<div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=3lVqnbNoTek:2hxvV7qMEQ4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=3lVqnbNoTek:2hxvV7qMEQ4:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/3lVqnbNoTek" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/altering-time-retired/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/altering-time-retired/</feedburner:origLink></item>
		<item>
		<title>Cassandra: Too fast</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/Ttp3uwQ3acA/</link>
		<comments>http://www.antipode.ca/2010/cassandra-too-fast/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 04:01:56 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Link]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[NoSQL]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1445</guid>
		<description><![CDATA[Twitter&#8217;s Ryan King on the Cassandra non-relational datastore:
We were originally trying to use the BinaryMemtable interface, but we actually found it to be too fast — it would saturate the backplane of our network. We’ve switched back to using the Thrift interface for bulk loading (and we still have to throttle it). 
Awesome.
]]></description>
			<content:encoded><![CDATA[<p>Twitter&#8217;s <a href="http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king" >Ryan King on the Cassandra non-relational datastore</a>:</p>
<blockquote><p>We were originally trying to use the BinaryMemtable interface, but we actually found it to be too fast — it would saturate the backplane of our network. We’ve switched back to using the Thrift interface for bulk loading (and we still have to throttle it). </p></blockquote>
<p>Awesome.</p>
<div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=Ttp3uwQ3acA:-pmYVOUgMdU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=Ttp3uwQ3acA:-pmYVOUgMdU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/Ttp3uwQ3acA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/cassandra-too-fast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/cassandra-too-fast/</feedburner:origLink></item>
		<item>
		<title>More JSLint, less JSWTF</title>
		<link>http://feeds.antipode.ca/~r/antipode/~3/6K4gvJfiOpk/</link>
		<comments>http://www.antipode.ca/2010/more-jslint-less-jswtf/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 20:35:03 +0000</pubDate>
		<dc:creator>Allen</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Textmate]]></category>

		<guid isPermaLink="false">http://www.antipode.ca/?p=1408</guid>
		<description><![CDATA[The JavaScript community has been enjoying WTFJS this week. Seasoned JS programmers know there are a few weird bumps and traps in the language if you&#8217;re not watching. You can take some of the burden off yourself, however, by linting your JavaScript.
There are many JavaScript linting programs out there. As a counterpart to his book [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right"  src="http://www.antipode.ca/wp-content/uploads/2010/02/wtfjs.jpg"  alt=""  title="Fry is suspicious of these JavaScript constructs."  width="150"  height="150"  class="alignnone size-full wp-image-1437"   style="float: right; padding-bottom: 10px; padding-left: 10px"/>The JavaScript community has been enjoying <a href="http://wtfjs.com/" >WTFJS</a> this week. Seasoned JS programmers know there are a few weird bumps and traps in the language if you&#8217;re not watching. You can take some of the burden off yourself, however, by linting your JavaScript.</p>
<p>There are many JavaScript linting programs out there. As a counterpart to his book <i>The Good Parts</i>, Douglas Crockford maintains a tool called <a href="http://www.jslint.com/" >JSLint</a>. Matthias Miller was inspired by this, and maintains a similar but less picky tool he confusingly calls <a href="http://www.javascriptlint.com/" >JavaScript Lint</a>. If you want to go even further, there is the <a href="http://code.google.com/closure/compiler/" >Google Closure Compiler</a>.</p>
<p>Take <a href="http://wtfjs.com/post/393377619/im-certain-that-this-will-end-all-debate-about" >this WTFJS caused by implied semicolons</a>:</p>
<pre>function laugh()
{
  return
  {
    haha: "ha!"
  };
}
laugh();
// returns undefined</pre>
<p>The lint programs will warn you (in different ways) that your return gets an implicit semicolon, and the object with &#8220;haha&#8221; in it never gets executed.</p>
<p>Or <a href="http://wtfjs.com/post/386167751/this-is-because-parseint-accepts-a-second-argument" >this one</a>:</p>
<pre>parseInt('06'); // 6
parseInt('08'); // 0</pre>
<p>Lint will tell you that you can&#8217;t use parseInt safely without specifying that you want base-10, or wrapping it in something that assumes base-10.</p>
<p>They&#8217;ll also catch things like this:</p>
<pre>{
  "ping": "pong",
  "foo": "bar",
} // IE says parse error on the last line of your file.
// (It doesn't understand trailing commas, yay!)</pre>
<p>and this:</p>
<pre>if (foo == bar) {
{
  // You doubled a bracket.
  // Now need to round-trip to your browser to find out.
}</pre>
<p>You can save yourself from these wtfs and parse errors. All you need to do is have your text editor run a lint program instantly when you save your JavaScript. The excellent <a href="http://github.com/subtleGradient/javascript-tools.tmbundle" >JavaScript Tools Textmate bundle</a> does this for you using JavaScript Lint<sup>1</sup>, and is easy to set up. If Textmate isn&#8217;t your favourite or you prefer the more aggressive JSLint, you can set up your own save macro on any editor worth its salt.</p>
<ol class="footnotes" ><li id="footnote_0_1408"  class="footnote" >Even though JavaScript Tools says it&#8217;s using JSLint, it&#8217;s actually using the more lax JavaScript Lint.</li></ol><div class="feedflare">
<a href="http://feeds.antipode.ca/~ff/antipode?a=6K4gvJfiOpk:k_T_y8CbkM0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/antipode?i=6K4gvJfiOpk:k_T_y8CbkM0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/antipode/~4/6K4gvJfiOpk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.antipode.ca/2010/more-jslint-less-jswtf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.antipode.ca/2010/more-jslint-less-jswtf/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.553 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-09-02 12:59:05 -->
