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

<channel>
	<title>furbo.org &#187; Design</title>
	<atom:link href="http://furbo.org/category/design/feed/" rel="self" type="application/rss+xml" />
	<link>http://furbo.org</link>
	<description>by Craig Hockenberry</description>
	<lastBuildDate>Fri, 04 May 2012 22:21:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Don&#8217;t design for early adopters</title>
		<link>http://furbo.org/2010/05/20/dont-design-for-early-adopters/</link>
		<comments>http://furbo.org/2010/05/20/dont-design-for-early-adopters/#comments</comments>
		<pubDate>Thu, 20 May 2010 17:59:45 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Advice]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=196</guid>
		<description><![CDATA[If you&#8217;re like me, the iPad has changed how you look at computers in just a matter of weeks. The possibilities for this device seem endless. It&#8217;s natural at this point to start thinking about the future, and to do that thinking in terms of the past. As an example, we&#8217;ve been getting plenty of feature [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re like me, the iPad has changed how you look at computers in just a matter of weeks. The possibilities for this device seem endless. It&#8217;s natural at this point to start thinking about the future, and to do that thinking in terms of the past.</p>
<p>As an example, we&#8217;ve been getting plenty of feature requests for Twitterrific that ask for features and capabilities that exist in other mobile and desktop software. That&#8217;s not surprising, since one of our early decisions with the iPad app was to trim the app down to its bare essentials.</p>
<p>Part of this had to do with schedule constraints. Sixty days was not a lot of time to build a product from scratch.</p>
<p>But a more important reason for paring back the design was to simplify the user interface. A new kind of user is about to be introduced to a computer that they can actually use: less interface is more as far as they&#8217;re concerned. We designed our iPad app with our families in mind, not the Twitter power user.</p>
<p>It turns out that our design intuition was pretty good:</p>
<blockquote><p>The non-tech-savvy users want something simple, to push an icon and get your e-mail and go online. With the iPad, people don&#8217;t feel intimidated by it.<br />
<br />
<a href="http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2010/05/03/MNDT1D7JQP.DTL">Mary Elizabeth O&#8217;Conner</a>
</p></blockquote>
<blockquote><p>To this technical-ninny it&#8217;s clear<br />
In my compromised 100th year,<br />
&nbsp;&nbsp;&nbsp;&nbsp;That to read and to write<br />
&nbsp;&nbsp;&nbsp;&nbsp;Are again within sight</br><br />
Of this Apple iPad pioneer.<br />
<br />
<a href="http://www.youtube.com/watch?v=ndkIP7ec3O8">Virginia</a>
</p></blockquote>
<p>Even folks that have access to the latest and greatest technology are <a href="http://chucksblog.emc.com/chucks_blog/2010/05/what-ipads-did-to-my-family.html">preferring the iPad over more complex devices</a>. Initial statistics also show that the <a href="http://ymobileblog.com/blog/2010/05/06/apple-ipad-user-analysis/">iPad has an older demographic</a>.</p>
<p>Of course, 300,000 geeks like you and me don&#8217;t fall into that category. We&#8217;re the first ones standing in line at the Apple store, and the first ones to use all this cool new software. And we know all the things that apps &#8220;used to do&#8221;. And we want all sorts of other bells and whistles. And we&#8217;re wrong.</p>
<p>As a developer, you should be very careful about this early feedback for your app. Simplicity is the name of the game in this <a href="http://stevenf.tumblr.com/post/359224392/i-need-to-talk-to-you-about-computers-ive-been">new world order</a>. You don&#8217;t maintain simplicity by adding tons of features.</p>
<p>Two of the most requested features after the 1.0 release of <a href="http://twitterrific.com/ipad">Twitterrific for iPad</a> were Instapaper support and photo uploading. If you think about these things, both have a high cognitive load. To use Instapaper, you need to know that:</p>
<ul>
<li>The service exists, and that you can signup for an account.</li>
<li>That you can install a bookmark and use it to save pages from your browser.</li>
<li>That these saved pages can be synced to your iPad using another application.</li>
</ul>
<p>For photo uploading, you have to know how to do one of these things in order to &#8220;get a picture&#8221;:</p>
<ul>
<li>Use the camera connection kit to transfer photos, or</li>
<li>Take a screenshot with a non-intuitive gesture (the power and home buttons), or</li>
<li>Tap and hold on a picture in a web page and save it to an album, or</li>
<li>Create events in iPhoto and sync them with iTunes</li>
</ul>
<p>Ask yourself if you could explain any one of these things to your mother in less than 25 words. I know I can&#8217;t and I&#8217;m pretty good with this kind of stuff.</p>
<p>Of course, these are both useful features and we added both of them in subsequent releases. In the case of Instapaper, the feature doesn&#8217;t even show up in the UI until you go into the Settings app and add your account information. My mom will never see it.</p>
<p>Photo uploading is a simple button on the compose screen that lets you choose a photo from your library. Eventually, our mothers will figure out how to add things to the photo library and use that feature. But they&#8217;ll be happiest when a future device let&#8217;s us put a &#8220;Take Picture Now&#8221; button on that screen.</p>
<p>It&#8217;s very easy to get caught up in the excitement this new device has generated in the last month and a half, but the real thrill will be in a year&#8217;s time when people who&#8217;ve never used a computer will be telling you how much they love your app. And there will be a lot more than 300,000 of them…</p>
<p><strong>Updated:</strong> Check out similar thoughts from my colleages: <a href="http://dlanham.com/2010/05/redesigning-twitterrific/">David Lanham</a> and <a href="http://gedblog.com/2010/05/20/twitterrifics-tough-love/">Gedeon Maheux</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2010/05/20/dont-design-for-early-adopters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Communal computing</title>
		<link>http://furbo.org/2010/04/29/communal-computing/</link>
		<comments>http://furbo.org/2010/04/29/communal-computing/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 16:07:07 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Observation]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=187</guid>
		<description><![CDATA[Dear Steve, First, let me congratulate you and everyone at Apple on the release of the iPad. From my dealings with your company, I know it wasn&#8217;t easy. Thanks to everyone for busting their asses: a lot of very complex puzzle pieces came together during those last 60 days! I recently had an encounter with [...]]]></description>
			<content:encoded><![CDATA[<p>Dear Steve,</p>
<p>First, let me congratulate you and everyone at Apple on the release of the iPad. From my dealings with your company, I know it wasn&#8217;t easy. Thanks to everyone for busting their asses: a lot of very complex puzzle pieces came together during those last 60 days!</p>
<p>I recently had an encounter with <a href="http://en.wikipedia.org/wiki/Bill_Atkinson">Bill Atkinson</a>. I told him that &#8220;I haven&#8217;t had this much fun with a computer since 1984.&#8221; He laughed, said &#8220;Thanks!&#8221;, and went back to working on <a href="http://www.billatkinson.com/aboutPhotoCard.html">his iPad app</a>. We, and many other developers like us, are completely smitten with this new device.</p>
<p>After owning an iPad for a little over three weeks, it feels like we&#8217;re dealing with something much bigger than that Mac we all got excited about<a href="http://en.wikipedia.org/wiki/Apple_Macintosh#1984:_Introduction"> over 25 years ago</a>. I&#8217;ve been struggling to define exactly what that is: beyond the technical specifications like the beautiful screen with its large multi-touch surface. Those specifications define what the device can do, but not what it means in our lives. I want to understand the magic.</p>
<p>Last week, much of that meaning came into clearer focus at a birthday party for my brother, niece and nephew (April is birthday month in our family!) My wife had loaded our iPad with photos from a recent trip to see the desert wildflowers in <a href="http://www.parks.ca.gov/?page_id=638">Anza Borrego</a> and my 50th birthday party from the week prior.</p>
<p>Predictably, people&#8217;s initial reaction was &#8220;Wow, that&#8217;s the new iPad!&#8221; But that quickly faded as I opened the Photos app and passed the device around. My family was more interested in sharing the photos than talking about the new technology.</p>
<p>I was particularly interested in how my mother, the quintessential technophobe, would react to the device. She picked up on things quickly and was flipping through photos in no time. It astonished me how the interface disappeared for her: at one point she subconsciously licked her finger before &#8220;flipping&#8221; to the next photo.</p>
<p>As interesting as it was to see someone non-technical use the device, the real eye opener was how several people could interact with the iPad at once. Much of my mother&#8217;s fear of computers was overcome because she was looking at the pictures alongside my sister-in-law who helped her out when she got stuck. Learning was organic.</p>
<p>My niece also discovered some of the games I had on the device. One, Abca, was a hit because many people could play it at once. I&#8217;ve always played the game by myself and was surprised at how much fun it was to have other people guessing words simultaneously. A group of people transformed the software into something no developer had ever expected.</p>
<p>All of this led to the revelation that we&#8217;ve begun a new age of &#8220;communal computing.&#8221; The desktop revolution centered around empowering individuals: this new revolution will extend that empowerment to groups of people.</p>
<p>The iPad was naturally passed around amongst the partygoers. Many people interacted with it during the evening, and I lost track of who had it at any given time. And therein lies a fundamental problem.</p>
<p>My iPad has a lot of personal information on it: <a href="http://www.apple.com/ipad/features/mail.html">email</a>, <a href="http://www.apple.com/ipad/features/pages.html">business documents</a>, and <a href="http://www.apple.com/ipad/features/numbers.html">financial data</a>. When you pass it around, you&#8217;re giving everyone who touches it the opportunity to mess with your private life, whether intentionally or not. That makes me uneasy.</p>
<p>It&#8217;s hard to fault Apple for this shortcoming. The secrecy of the project undoubtedly limited the amount of group interaction your designers and engineers would experience with their new creation. The social aspects of this device is probably just as much as revelation to them as it is to me.</p>
<p>I can envision several ways to solve this problem: either with a traditional login screen or with something new like folders that require a passcode to open. I have no doubt that your designers can find something elegant that gives me peace of mind as I share my iPad with friends and family.</p>
<p>Thanks for your time and consideration,</p>
<p>Craig Hockenberry</p>
<p><strong>Updated April 30th, 2010:</strong> I filed Radar <a href="http://openradar.appspot.com/7922808">#7922808</a> for this issue and it was marked as a duplicate of Radar <a href="rdar://problem/7584426">#7584426</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2010/04/29/communal-computing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Of toolbars and actions</title>
		<link>http://furbo.org/2009/05/01/of-toolbars-and-actions/</link>
		<comments>http://furbo.org/2009/05/01/of-toolbars-and-actions/#comments</comments>
		<pubDate>Sat, 02 May 2009 00:40:20 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Observation]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=109</guid>
		<description><![CDATA[Another area where I find iPhone development to be a bit convoluted was with toolbars and action sheets. The sheets are conceptually tied to the toolbar, yet there is no glue to combine UIActionSheet with UIToolbar. It&#8217;s also fairly difficult to represent your application state in the toolbar—an example is the refresh button in Twitterrific [...]]]></description>
			<content:encoded><![CDATA[<p>Another area where I find iPhone development to be a bit convoluted was with toolbars and action sheets. The sheets are conceptually tied to the toolbar, yet there is no glue to combine <code>UIActionSheet</code> with <code>UIToolbar</code>. It&#8217;s also fairly difficult to represent your application state in the toolbar—an example is the refresh button in <a href="http://twitterrific.com">Twitterrific</a> that turns into a cancel button while the refresh is taking place.</p>
<p>And then one day it dawned on me: an iPhone toolbar with an action sheet is like a menubar with menus on the Mac desktop (turn your phone upside down and there is even some visual similarity.)</p>
<p>After investigating some of the design patterns for <a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/nsmenu_Class/Reference/Reference.html"><code>NSMenu</code></a> and <a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSMenuItem_Class/Reference/Reference.html"><code>NSMenuItem</code></a>, it was clear that this would work well on a mobile interface as well. My implementation is a subclass of <code>UIToolbar</code> named <code>IFActionToolbar</code>.</p>
<p>In it&#8217;s simplest form, you attach a list of items to one of the toolbar&#8217;s bar button items:</p>
<pre>@interface MyViewController : UIViewController
{
  IBOutlet IFActionToolbar *toolbar;
  IBOutlet UIBarButtonItem *barButtonItem;
}

...</pre>
<pre>@implementation MyViewController  

...

- (void)viewDidLoad
{
  [super viewDidLoad];

  IFActionToolbarActionItem *actionItem = nil;

  NSMutableArray *actionItems = [NSMutableArray arrayWithCapacity:3];
  actionItem = [[[IFActionToolbarActionItem alloc] initWithTitle:@"One" target:self action:@selector(firstAction:)] autorelease];
  [actionItems addObject:actionItem];
  actionItem = [[[IFActionToolbarActionItem alloc] initWithTitle:@"Two" target:self action:@selector(secondAction:)] autorelease];
  [actionItems addObject:actionItem];
  actionItem = [[[IFActionToolbarActionItem alloc] initWithTitle:@"Cancel" target:nil action:NULL] autorelease];
  [actionItems addObject:actionItem];
  [toolbar attachActionItems:actionItems toItem:barButtonItem];

  [toolbar update];
}</pre>
<p>The <code>IFActionToolbarActionItem</code> is just a simple wrapper object that associates a title with a target and action. These action items are used to automatically construct the action sheet when the user taps on <code>barButtonItem</code>. If you&#8217;ve ever constructed an <code>NSMenu</code> using <code>NSMenuItems</code>, this will feel quite familiar.</p>
<p>Additionally, the toolbar supports an <code>-update</code> method. This method calls the assigned delegate to enable or disable toolbar buttons, set the image for the toolbar item, change the title of the action sheet, hide or show items in the action sheet, and define the cancel or destructive buttons in the sheet. Again, similar in pattern to how <code>NSMenuItems</code> are maintained.</p>
<p>Any time you call this update method, the <code>UIToolbar</code> is configured automatically. It makes it much easier to reflect the state of your controller in the view.</p>
<p>I&#8217;m not going to spend too much time discussing the inner workings of this class: the picture of a <a href="http://furbo.org/stuff/ActionToolbar_1.0.zip">sample project</a> is worth a thousand words.</p>
<p>One thing I would like to caution you about: don&#8217;t get too carried away with enabling and disabling items in the action menu. In our UI testing, we found that changing the list too much was confusing for users. It&#8217;s like the <a href="http://humanized.com/weblog/2007/03/05/are_adaptive_interfaces_the_answer/">&#8220;adaptive menus&#8221;</a> used in Microsoft Office: it&#8217;s very difficult for a user to adapt to your interface if it&#8217;s constantly changing. Just because you can doesn&#8217;t mean you should.</p>
<p>Again, I hope this code is useful in your own iPhone projects. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2009/05/01/of-toolbars-and-actions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matt Gallagher deserves a medal&#8230;</title>
		<link>http://furbo.org/2009/04/30/matt-gallagher-deserves-a-medal/</link>
		<comments>http://furbo.org/2009/04/30/matt-gallagher-deserves-a-medal/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 23:58:04 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Observation]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=108</guid>
		<description><![CDATA[Every once in awhile you read a blog post that completely changes the way you think about a problem. Matt Gallagher&#8217;s Cocoa With Love is one of those blogs where it happens often. If you&#8217;re not subscribing to his RSS feed, do it now. In particular, this post addressed a problem that every iPhone developer [...]]]></description>
			<content:encoded><![CDATA[<p>Every once in awhile you read a blog post that completely changes the way you think about a problem. Matt Gallagher&#8217;s <a href="http://cocoawithlove.com/">Cocoa With Love</a> is one of those blogs where it happens often. If you&#8217;re not subscribing to his RSS feed, <a href="feed://cocoawithlove.com/feeds/posts/default?alt=rss">do it now</a>.</p>
<p>In particular, <a href="http://cocoawithlove.com/2008/12/heterogeneous-cells-in.html">this post</a> addressed a problem that every iPhone developer has encountered: any kind of settings or form UI is a pain in the butt if you follow Apple&#8217;s sample code. And, of course, this is exacerbated because these essential interfaces aren&#8217;t very fun to code. For both <a href="http://twitterrific.com">Twitterrific</a> and <a href="http://frenzic.com">Frenzic</a>, it&#8217;s been a frustrating experience: I wanted to fix how this standard UI was created and maintained.</p>
<h3>The motivation</h3>
<p>Before I start talking about what I did using Matt&#8217;s concepts and code, I&#8217;d like to discuss the need for settings in an application.</p>
<p>There are some people who think that <a href="http://blog.atebits.com/2008/12/settings-are-in-the-settings-app/">settings should only be in the Settings app</a>. There are others that think they should <a href="http://mantia.me/blog/your-apps-settings-should-not-be-in-the-settings-app/">only be within the application</a>. I can honestly see how both groups are right, but what both sides fail to realize is that it&#8217;s often a matter of context.</p>
<p>If you&#8217;re working on a simple application with simple needs, relying on the infrastructure provided by the SDK is fine. You may have some additional support load for <a href="http://www.settingsareinthesettingsapp.com/">users who have problems finding your settings</a>, but that&#8217;s a reasonable tradeoff for saving development time. Sophia Teutschler&#8217;s <a href="http://www.sophiestication.com/groceries/">Groceries</a> app is a fine example of where the built-in settings shine: I turned off the Marker Felt font several months ago, and I haven&#8217;t touched it since.</p>
<p>In the case of Twitterrific, there were three main reasons why we built the settings into the application:</p>
<ol>
<li>We could not split the settings between two locations. From a user&#8217;s point-of-view, it&#8217;s incredibly confusing to have an application&#8217;s configuration in two places. This would have happened if we had put the account settings in the application and everything else in the Settings app.</li>
<li>Some of the settings are things that people will change on a fairly frequent basis. For example, the dark theme works best at night, while a light theme is better during the day. Leaving the app to make these types of adjustments is inconvenient.</li>
<li>The Settings app can&#8217;t handle preferences that are &#8220;dynamic.&#8221; An example is a vibration setting for the notification: there&#8217;s no way to make this appear on an iPhone but not on an iPod touch.</li>
</ol>
<div>As we start to see more complex applications appearing on the App Store, I think there will be a lot of other developers coming to grips with settings in their applications. That&#8217;s where my code comes in…</div>
<h3>The solution</h3>
<p>I&#8217;ve taken the basic concepts that Matt presented in his article and extended them to create a pixel perfect replica of what you see in the Settings application. Instead of <a href="http://developer.apple.com/iphone/library/documentation/PreferenceSettings/Conceptual/SettingsApplicationSchemaReference/Articles/RootContent.html#//apple_ref/doc/uid/TP40007018">configuring applications using a property list</a>, you do it with some very simple code in a view controller. (Domain-specific languages, such as those found in Ruby, were an inspiration for the methods used in this code.)</p>
<p>And if you&#8217;re not doing settings, the classes are still very handy for making user input forms. They were used in all of the search forms used in the <a href="http://twitterrific.com">new version of Twitterrific</a>.</p>
<p>To give you a quick taste of how it&#8217;s used, here&#8217;s a complete implementation of a table view controller that presents a single group with a text field and a switch control. In just six lines of code:</p>
<pre>- (void)constructTableGroups
{
  NSMutableArray *cells = [NSMutableArray array];
  IFTextCellController *textCell = [[[IFTextCellController alloc] initWithLabel:@"Text" andPlaceholder:@"Placeholder" atKey:@"sampleText" inModel:model] autorelease];
  [cells addObject:textCell];
  IFSwitchCellController *switchCell = [[[IFSwitchCellController alloc] initWithLabel:@"Switch" atKey:<span>@"sampleSwitch" inModel:model] autorelease];
  [cells addObject:switchCell];
  tableGroups = [[NSArray arrayWithObject:cells] retain];
}</span></pre>
<p>The real beauty of this code is that it&#8217;s incredibly easy to change. Settings and forms tend to evolve over the lifetime of a project, so using these simple declarations for the table view layouts makes it much simpler to adapt to new requirements. If I need to change the switch control shown above into a choice list, I can do it in a couple of lines of code.</p>
<p>So without further ado, here&#8217;s the <a href="http://furbo.org/stuff/GenericTableViews_1.0.zip">source code</a> in a sample project. The code is well documented, so you shouldn&#8217;t have any problems figuring out how it all works. Start by looking at the <strong>RootViewController</strong>, then take a look at the <strong>SampleViewController</strong>, followed by the <strong>SampleAdvancedViewController</strong>. If you&#8217;d like to incorporate this code into your own project, just grab all the classes with the Iconfactory prefix (&#8220;IF&#8221;.)</p>
<h3>The license</h3>
<p>Previously, I&#8217;ve released source code on this site without any licensing at all. This time, I&#8217;m going to try something new. You can do anything you want with this code with one requirement: you need to give the Iconfactory some <a href="http://iconfactory.com/iphone">link love</a> in your product.</p>
<p>For more details on the licensing terms, check out the Licensing.rtf file that&#8217;s included in the sample project. If you can&#8217;t abide by this restriction, please <a href="http://furbo.org/resume/">get in contact</a> and we can try to work something out.</p>
<p>I hope this code saves you as much time as it has saved me. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2009/04/30/matt-gallagher-deserves-a-medal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ringtone apps</title>
		<link>http://furbo.org/2008/12/09/ring-tone-apps/</link>
		<comments>http://furbo.org/2008/12/09/ring-tone-apps/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 17:36:46 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Observation]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=91</guid>
		<description><![CDATA[Dear Steve, As an iPhone developer who&#8217;s been in the App Store since its launch, I&#8217;m starting to see a trend that concerns me: developers are lowering prices to the lowest possible level in order to get favorable placement in iTunes. This proliferation of 99¢ &#8220;ringtone apps&#8221; is affecting our product development. Unlike a lot [...]]]></description>
			<content:encoded><![CDATA[<p>Dear Steve,</p>
<p>As an iPhone developer who&#8217;s been in the App Store since its launch, I&#8217;m starting to see a trend that concerns me: developers are lowering prices to the lowest possible level in order to get favorable placement in iTunes. This proliferation of 99¢ &#8220;ringtone apps&#8221; is affecting our product development.</p>
<p>Unlike a lot of other developers, I&#8217;m not going to give you suggestions on what to do about this: you and your team are perfectly capable of dealing with it on your own terms. Rather, I&#8217;d like to give you some insight into how these ringtone apps are affecting my business.</p>
<p>Both of our products, <a href="http://frenzic.com">Frenzic</a> and <a href="http://iconfactory.com/twitterrific">Twitterrific</a>, have been quite successful in the App Store. Frenzic is currently in <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewRoom?fcId=285114022&amp;genreIdString=36&amp;mediaTypeString=Mobile+Software+Applications">What&#8217;s Hot</a> and Twitterrific appears in both the <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewCustomPage?name=pageiTunes2008_Apps">Top Free and Top Paid Apps for 2008</a>. We also <a href="http://developer.apple.com/wwdc/ada/">won an ADA</a> at this year&#8217;s WWDC. It hasn&#8217;t been easy, but we&#8217;ve learned what it takes to make a kick ass product for the iPhone.</p>
<p>The problem now is funding those products.</p>
<p>We have a lot of great ideas for iPhone applications. Unfortunately, we&#8217;re not working on the cooler (and more complex) ideas. Instead, we&#8217;re working on 99¢ titles that have a limited lifespan and broad appeal. Market conditions make ringtone apps most appealing.</p>
<p>Before commencing any new iPhone development, we look at the numbers and evaluate the risk of recouping our investment on a new project. Both <a href="http://blogs.oreilly.com/iphone/2008/11/turning-ideas-into-application.html">developers</a> and <a href="http://iconfactory.com/home/staff">designers</a> cost somewhere between $150-200 per hour. For a three man month project, let&#8217;s say that&#8217;s about $80K in development costs. To break even, we have to sell over 115K units. Not impossible with a good concept and few of weeks of prominent placement in iTunes.</p>
<p>But what happens when we start talking about bigger projects: something that takes 6 or even 9 man months? That&#8217;s either $150K or $225K in development costs with a break even at 215K or 322K units. Unless you have a white hot title, selling 10-15K units a day for a few weeks isn&#8217;t going to happen. There&#8217;s too much risk.</p>
<p>Raising your price to help cover these costs makes it hard to get to the top of the charts. (You&#8217;re competing against a lot of other titles in the lower price tier.) You also have to come to terms with the fact that you&#8217;re only going to be featured for a short time, so you have to make the bulk of your revenue during this period.</p>
<p>This is why we&#8217;re going for simple and cheap instead of complex and expensive. Not our preferred choice, but the one that&#8217;s fiscally responsible.</p>
<p>I&#8217;m also concerned that this &#8220;making it up in volume&#8221; approach won&#8217;t last too much longer. With 10,000 apps in the App Store, it&#8217;s already a fricken&#8217; cat fight to get into one of the top 100 spots. What&#8217;s it going to be like when there are 20,000 apps? Or 100,000 apps? Volume is going to get split amongst a lot of players, hopefully the number of devices/customers will increase at the same rate.</p>
<p>We&#8217;re not afraid of competition. In fact, we welcome it as a way to improve our products and business. The thing we&#8217;re hoping for is a way to rise above the competition when we do our job well, not just when we have the lowest price.</p>
<p>I&#8217;ve been thinking about what&#8217;s causing this rush to the 99¢ price point. From what I can tell, it&#8217;s because people are buying our products sight unseen. I see customers complaining about how &#8220;expensive&#8221; a $4.99 app is and that it should cost less. (Do they do the same thing when they walk into Starbucks?) The only justification I can find for these attitudes is that you only have a screenshot to evaluate the quality of a product. A buck is easy to waste on an app that looks great in iTunes but works poorly once you install it.</p>
<p>Our products are a joy to use: as you well know, customers are willing to pay a premium for a quality products. This quality comes at a cost—which we&#8217;re willing to incur. The issue is then getting people to see that our $2.99 product really is worth three times the price of a 99¢ piece of crapware.</p>
<p>I also worry that this low price point for applications is going to limit innovation on the platform. Sure, apps like <a href="http://ocarina.smule.com/">Ocarina</a> and <a href="http://www.theblimppilots.com/The_Blimp_Pilots/Koi_Pond.html">Koi Pond</a> are very cool and very cheap. But when are we going to see the utility of the platform taken to another level, like when <a href="http://en.wikipedia.org/wiki/VisiCalc">spreadsheets</a> appeared on the Apple ][ and <a href="http://en.wikipedia.org/wiki/Pagemaker">desktop publishing</a> appeared on the Mac? (It could be argued that Safari has already accomplished this, but I still think there is a third party idea that will be just as transformative.)</p>
<p>It would be great if the killer app for the iPhone cost 99¢, but given the numbers above I can&#8217;t see it being very likely.</p>
<p>Thanks for your time and attention. I hope this information has been helpful.</p>
<p>Best regards,</p>
<p>Craig Hockenberry</p>
<p><strong>Updated December 12th, 2008:</strong> David Barnard shares some <a href="http://appcubby.com/blog/files/financial_realities.html">numbers and experiences</a> from selling his <a href="http://appcubby.com/">App Cubby</a> products. Of particular interest are the difficulties in measuring the effectiveness of our marketing efforts. With no feedback other than raw sales, it&#8217;s hard to know if your advertising dollars are well spent.</p>
<p><strong>Updated December 23rd, 2008:</strong> It looks like <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293760823&amp;mt=8">this is going to be the first thing</a> new iPhone and iPod touch owners are going to see on Christmas morning. You and your team have worked so hard to make a device with such great potential: why is this happening?</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/12/09/ring-tone-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choices</title>
		<link>http://furbo.org/2008/12/02/choices/</link>
		<comments>http://furbo.org/2008/12/02/choices/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 21:53:09 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Observation]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=90</guid>
		<description><![CDATA[A friend of mine recently commented that native Twitter applications are the new flashlights. It&#8217;s true, but it shouldn&#8217;t come as a surprise: consider the number of web apps that proliferated before the advent of the native SDK. Personally, I welcome this competition. Seeing the work of other developers whose work I respect and admire [...]]]></description>
			<content:encoded><![CDATA[<p>A friend of mine recently commented that native Twitter applications are <a href="http://twitter.com/mikeysan/status/1017668714">the new flashlights</a>. It&#8217;s true, but it shouldn&#8217;t come as a surprise: consider the number of web apps that proliferated before the advent of the native SDK.</p>
<p>Personally, I welcome this competition. Seeing the work of other developers whose work I respect and admire acts as an inspiration. Looking at how other developers tackle a problem domain often adds insight into solving similar issues with my own code. In other cases, it shows me how I don&#8217;t want to implement a feature (without the need to prototype.) In short, competition will make <a href="http://iconfactory.com/twitterrific">Twitterrific</a> better.</p>
<p>(I&#8217;m particularly disappointed that Ed Voas has decided to go back to work at Apple. I&#8217;ve been an admirer of his work since the days of <a href="http://www.kaleidoscope.net/greg/aaron.html">Aaron</a> and the <a href="http://en.wikipedia.org/wiki/Platinum_(Macintosh)">Appearance Manager</a>. From what I&#8217;ve seen with <a href="http://www.tweetsville.com/">Tweetsville</a> and <a href="http://www.fieryrobot.com/blog/category/iphone/">his blog entries</a> about its development, it&#8217;s clear that his decision is a loss for everyone working on the iPhone platform.)</p>
<p>Of course, this competition is also good for users. The most obvious benefit is that applications will evolve and improve more quickly as developers learn from each other and try to outdo the other guy.</p>
<p>But there is a more subtle benefit. There will always be more than one way to solve a problem: a developer&#8217;s personal preferences will inevitably seep into the implementation. Having many choices for a Twitter client means that developers don&#8217;t need to create a &#8220;one size fits all&#8221; solution. In essence, users get to choose a developer whose preferences match their own.</p>
<p>(And please do all developers a favor: tweets like &#8220;twitterific sux, twhatever rocks&#8221; do absolutely nothing besides make our skin even thicker than it already is.)</p>
<h3>Making Choices</h3>
<p>One of the most fascinating things about these native Twitter applications is the variety of user interfaces. In spite of all these apps using exactly the same API at Twitter, there are many different user experiences. It&#8217;s all about developers making choices.</p>
<p>I&#8217;ve wanted to write about what led to the user experience in <a href="http://iconfactory.com/twitterrific">Twitterrific</a> for quite awhile. It&#8217;s been only recently that where we&#8217;ve been and where we&#8217;re going have gelled to a point where I can express these thoughts in an essay. So while <a href="http://en.wikipedia.org/wiki/Tryptophan#Turkey_meat_and_drowsiness">tryptophan</a> was coursing through my veins, I started to look back on our past choices and think about where I see things going in the future.</p>
<p>John Gruber&#8217;s recent essay on iPhone-Likeness is a <a href="http://daringfireball.net/2008/11/iphone_likeness">definitive manifesto</a> for iPhone development. If you haven&#8217;t read it, <a href="http://daringfireball.net/2008/11/iphone_likeness">go do it now</a>. If you have read it, <a href="http://daringfireball.net/2008/11/iphone_likeness">go read it again</a>. And again: you can&#8217;t call yourself an iPhone developer until you&#8217;re read that fireball <a href="http://daringfireball.net/2008/11/iphone_likeness">at least three times</a>.</p>
<p>If you&#8217;re still to fricken&#8217; lazy to read that link, here&#8217;s what I like to call <em>Gruber&#8217;s First Law of iPhone Development</em>:</p>
<blockquote><p>Figure out the absolute least you need to do to implement the idea, do just that, and then polish the hell out of the experience.</p></blockquote>
<p>In a word, strive for one thing in your iPhone application: simplicity. Both in terms of functionality and beauty.</p>
<p>From the very first day, we tried to do this. And it turns out that &#8220;doing as little as possible&#8221; was one of our greatest challenges. (I&#8217;m using the plural pronoun here because the interface design was <a href="http://iconfactory.com/home/staff">a team effort</a>.)</p>
<p>To achieve this goal, you have to find the &#8220;nut&#8221; of your application. The thing that defines what you&#8217;re working on. Even more targeted than John Geleynse&#8217;s &#8220;application definition statement.&#8221; Something that you think of each time you start up Xcode, or every time you answer a customer email, or when you&#8217;re planning features for a new release.</p>
<p>(As an aside, if you haven&#8217;t seen John&#8217;s talk at WWDC 2008 yet, <a href="http://developer.apple.com/adconitunes/">do yourself a favor and download</a> &#8220;Session 351 &#8211; iPhone Application User Interface Design.&#8221; I guarantee you&#8217;ll get something out of it, even if you&#8217;re an experienced iPhone developer.)</p>
<p>For Twitterrific, our core function is reading.</p>
<p>The core function is not managing your Twitter account. Nor is it being a general purpose tool to exercise every nook and cranny of the API. It&#8217;s primary function is not to acting as a surrogate for SMS messaging.</p>
<p>Twitterrific is all about reading what other people are doing, thinking, or experiencing. Even its secondary function, posting tweets, is related to reading. The posting interface functions as a way for you to give your followers something interesting to read.</p>
<h3>Good Choices</h3>
<p>Reading as a core function manifests itself in several aspects of the application:</p>
<ul>
<li>The list of tweets is designed to be as compact as possilble. The stream of information is much easier to read when there is more of it visible. This meant keeping navigational elements to a minimum.</li>
<li>The detailed view, with larger text and less surrounding information, was designed to be read while in motion. Small fonts and compact presentation is problematic when your trying to read on a train or other moving vehicle. Navigational elements in this context are also larger and therefore easier to hit.</li>
<li>Simple navigation: it&#8217;s very easy for these elements to get in the way of reading. From the beginning, Twitterrific was designed to work with one hand using the thumb as the primary input. Pulling the device out of your pocket and checking your tweets should be quick and not require two hands.</li>
<li>Tweets often contain links to other items you want to read. The mini-browser allows these links to be opened and read as quickly as possible.</li>
<li>Making it easy to read things later. Links in tweets sometimes point to things that you&#8217;ll want to read or watch outside of the confines of a mobile device. To this end, we used Favorites as a way to pass information between the mobile and desktop platforms.</li>
<li>The main problem we found with pure web interfaces to Twitter was the inability to persist data. The cellular data network isn&#8217;t always available and reading tweets should not be impacted by network outages.</li>
<li>We go to great lengths to maintain a reading position between launches of the application. Since we&#8217;ve found that reading Twitter on a mobile device is done in &#8220;fits and starts&#8221;, keeping the reader&#8217;s location in a consistent state is very important. It&#8217;s not an easy feature to get right which could explain why Twitterrific is currently the only app that tries to do this (and our own implementation could even use improvement.)</li>
</ul>
<h3>Imperfect Choices</h3>
<p>Of course, we didn&#8217;t get everything right. At one point, my partner Talos Tsui suggested that we add the ability to follow and unfollow users from the iPhone UI. I argued that this felt too much like &#8220;account management&#8221; so we decided to not implement the feature. In retrospect, Talos was right: following is how you control what you read and needs to be a part of the application. We&#8217;re going to fix this in an upcoming release.</p>
<p>Other design choices were based on the current state of Twitter. At the time Twitterrific was being developed, Twitter was having some major scaling issues. Availability was sporadic and users were only allowed to access the Twitter API a total of 30 times per hour (regardless of which application they were using.)</p>
<p>This limitation played a factor in many of our design choices. Our concern was that users on the desktop would consume all the available API calls and then not be able to view tweets on their iPhone. We could have implemented a more readable view of the user&#8217;s archive (after you click on the @screen_name.) Instead, we display a web page—and don&#8217;t use any API requests. The latest round of native applications benefit from Twitter&#8217;s success in dealing with load. They don&#8217;t have to be so stingy with the API and they&#8217;re better off for it.</p>
<p>One of the best features of <a href="http://www.atebits.com/software/tweetie/">Tweetie</a> is the ability to follow &#8220;in reply to&#8221; links. At the time we were developing our client, these links were notoriously inaccurate. I had made a suggestion to the Twitter developers on how to improve this, but it hadn&#8217;t been implemented yet so we decided to defer the feature. Now that the API supports setting reply IDs, Twitterrific (both iPhone and desktop) and other clients are making the links more reliable and threading features are much more attractive.</p>
<h3>Future Choices</h3>
<p>And that leads into what I see happening in future versions of Twitterrific for the iPhone. If you&#8217;ve been paying attention to this essay, you won&#8217;t be surprised to learn that these features will benefit the reader.</p>
<p>As I just mentioned, threading features that allow a reader to catch up on conversations are now possible. <a href="http://www.atebits.com/software/tweetie/">Tweetie</a> has the right idea here, but we think the user interaction model is wrong. I&#8217;m all for competition, but I&#8217;m not going to tell how we plan to make it better. <a href="http://www.atebits.com/blog/">Loren Brichter</a> and others will have to wait :-)</p>
<p>Search and trends are also recent additions to the Twitter API that weren&#8217;t available at the time we did our initial development. (Summize was available as a third-party API, but hadn&#8217;t been purchased by Twitter yet.) We often use these features to see what people are saying about our products: <a href="http://search.twitter.com/search?q=frenzic">Frenzic</a>, <a href="http://search.twitter.com/search?q=xscope">xScope</a>, <a href="http://search.twitter.com/search?q=iconbuilder">IconBuilder</a>, <a href="http://search.twitter.com/search?q=twitterrific">Twitterrific</a>. It makes sense to use search as another way to provide entertaining and informative content for us to read.</p>
<p>Another area where we see room for improvement is filtering tweets. There is literally a flood of information coming from the people we follow, so making it easy to extract things like replies, direct messages and favorites from the main timeline will be helpful for the reader.</p>
<p>Finally, we see a need to keep the &#8220;reading point&#8221; synchronized between the desktop and the mobile device. We currently find it cumbersome to switch between clients because they have no way to let each other know where the reader is in the timeline. We&#8217;ve requested that the developers at Twitter <a href="http://code.google.com/p/twitter-api/issues/detail?id=171">provide a way to exchange metadata between clients</a>. iPhone applications usually work best when they are an adjunct to the desktop application. Treating the device as a satellite and providing it with metadata will improve the user experience for all Twitter clients.</p>
<p>Finally, I&#8217;d like to point out some things that we don&#8217;t plan on implementing.</p>
<p>I&#8217;ve been very impressed with <a href="http://www.tweetsville.com/">Tweetsville&#8217;s</a> implementation for direct messages. It&#8217;s a very creative solution to the problem, but I think it falls outside our core functionality: it turns Twitter into a conversation, not reading.</p>
<p>It could be argued that conversations are a type of reading. Unfortunately both users must follow each other for the exchange to be meaningful. And mobile use of Twitter tends to be asynchronous (unlike the desktop, it&#8217;s not &#8220;always on&#8221;.) These things, combined with the limitations of text entry on the iPhone, indicate that other media are better suited for two people having a chat.</p>
<p>Another thing we&#8217;re consciously avoiding: adding features just because &#8220;the other guy is doing it.&#8221; We think long and hard before adding anything to Twitterrific. Then we prototype a user interface and adjust it accordingly. Then we make the feature the best it can be.</p>
<p>And if you wonder why we go to all this trouble, just remember <em>Gruber&#8217;s First Law of iPhone Development</em>. It takes more time, but we&#8217;re in this for the long haul. There will certainly be a period of attrition for Twitter applications, much like there was for the web applications, and having the best user experience is the only way we&#8217;ll thrive.</p>
<p><strong>Addendum December 4th, 2008</strong></p>
<p>Fraser Speirs has some very interesting thoughts on <a href="http://speirs.org/2008/12/03/there-is-more-than-one-mobile-context/">contexts for mobile computing</a>.</p>
<p>Our application clearly falls into the &#8220;Type 1&#8243; and &#8220;Type 2&#8243; categories: and that&#8217;s a conscious choice we&#8217;ve made. You should make the same choice. It&#8217;s OK to go for a different context than we did, remember what I said earlier about applications taking on the personality of their developer?</p>
<p>Fraser also wonders why there aren&#8217;t a lot of &#8220;Type 3&#8243; applications in the store right now. I think there are a couple of reasons for this:</p>
<ul>
<li>Everyone is still working on their first version. Catering to power users who need more extensive capabilities comes as applications mature. iPhone applications haven&#8217;t had enough time to evolve.</li>
<li>The rush to a $0.99 price point doesn&#8217;t provide enough of a budget to fund additional feature development. Without a healthy revenue flow to pay back costs that have been incurred, it&#8217;s hard to justify new features (and additional costs.)</li>
</ul>
<p>In my opinion, both of these reasons will dissolve over time. In the meantime, consider if/how your application fits into &#8220;Type 3&#8243;. Plan ahead.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/12/02/choices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Splash screens</title>
		<link>http://furbo.org/2008/10/08/splash-screens/</link>
		<comments>http://furbo.org/2008/10/08/splash-screens/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 15:55:30 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=84</guid>
		<description><![CDATA[Twitterrific has a splash screen and I would like to get rid of it. But I can&#8217;t. Splash screens hurt the user experience from a purely psychological point-of-view. They don&#8217;t change the launch time of your iPhone application at all, but it looks and feels longer. But there&#8217;s a problem: you can only specify one [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://iconfactory.com/software/twitterrific">Twitterrific</a> has a splash screen and I would like to get rid of it. But I can&#8217;t.</p>
<p>Splash screens hurt the user experience from a purely psychological point-of-view. They don&#8217;t change the launch time of your iPhone application at all, but it <strong>looks and feels</strong> longer.</p>
<p>But there&#8217;s a problem: you can only specify one Default.png file to be displayed at launch time. Unfortunately, applications can have many visual states which you&#8217;d like to show as the code is loaded. In the case of Twitterrific, the list or detail view can be active and they have no visual commonality.</p>
<p>So what are the current options?</p>
<p>Some people have suggested that you have a single startup image (like the list view in Twitterrific) and use a Core Animation transition to the actual state the user was last in. This would work, of course, but it has a major flaw: it increases the amount of time needed before the user can actually start using the application (they need to wait for the transition to finish.)</p>
<p>Another option would be to show a blank screen. I tried this, and my first thought was that the application had crashed. Not acceptable.</p>
<p>Why not replace the Default.png on-the-fly? As <a href="http://jerakeen.org/notes/2008/10/iphone-contacts-and-maps-fast-start/">Tom Insam</a> notes, you can&#8217;t modify the application bundle: doing so breaks the application signing and will leave you with code that won&#8217;t run.</p>
<p>So that leaves us with splash screens. The user knows the launch is in progress, there are no jarring visual changes, and it&#8217;s the quickest way to get to an active state.</p>
<p>Of course, there are mechanisms to have multiple startup screens. You can see it in the Clocks app: the world clocks view has a different startup image than the stopwatch view. Another example are the new chrome-less Safari pages that you can put on the home screen: these apps take a snapshot of the current screen at exit and display it at the next launch.</p>
<p>Apple should expose this functionality to third parties. If you agree, please submit a duplicate for Radar ID# <a href="rdar://problem/5872097">5872097</a>. Until that happens, please excuse our splash screen.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/10/08/splash-screens/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[REDACTED]</title>
		<link>http://furbo.org/2008/10/01/redacted/</link>
		<comments>http://furbo.org/2008/10/01/redacted/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 15:28:47 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=67</guid>
		<description><![CDATA[Thank God—that&#8217;s the last time I&#8217;m going to type that word for awhile. The meme is dead, long live the SDK. As a way to celebrate the lifting of the NDA, we bring you some very special source code. To wile away the time between our product submission and the launch of the App Store, [...]]]></description>
			<content:encoded><![CDATA[<p>Thank God—that&#8217;s the last time I&#8217;m going to type that word for awhile. The meme is dead, long live <a href="http://developer.apple.com/iphone/program/">the SDK</a>.</p>
<p>As a way to celebrate the lifting of the NDA, we bring you some <a href="http://furbo.org/stuff/Redacted_1.0.zip">very special source code</a>. To wile away the time between our product submission and the launch of the App Store, my buddy <a href="http://domainbrainapp.com">Anthony Piraino</a> and I worked on this very special treat. Something that will be familiar to all developers who have had to <a href="http://www.apple.com/pr/library/2008/03/06iphone.html">keep their mouths shut since March 6th, 2008</a>. Just compile the source code and install it on your device. Typing pleasures await.</p>
<p>(You&#8217;ll need to <a href="http://click.linksynergy.com/fs-bin/stat?id=GqNyNwThLDE&#038;offerid=146261&#038;type=3&#038;subid=0&#038;tmpid=1826&#038;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Ftwitterrific-for-ipad%252Fid359914600%253Fmt%253D8%2526uo%253D6%2526partnerId%253D30&#038;u1=FURBO">install Twitterrific</a> from the App Store to get the full user experience. But you&#8217;ve done that already, right?)</p>
<p><img src="http://furbo.org/wp-content/uploads/2008/07/pissing_off_the_audubon_society.png" alt="" /></p>
<p>Besides being a fun inside joke, this very special application also shows an important aspect of iPhone development: <strong>URL schemes</strong>.</p>
<p>As we&#8217;ve seen <a href="http://furbo.org/2007/07/02/beyond-sweet/">many</a> <a href="http://furbo.org/2008/02/11/so-youre-going-to-write-an-iphone-app/">other</a> <a href="http://furbo.org/2008/03/18/more-brain-surgery/">times</a>, the needs of a mobile user are very different than those of a desktop user. On the desktop, tight integration of several application domains makes applications like <a href="http://www.panic.com/coda">Coda</a> a joy to use.</p>
<p>On the phone it&#8217;s better to focus on one task. From what I&#8217;ve seen, the best iPhone applications do one thing and do it well. Supporting URL schemes in your application makes that single task more attractive to other developers <strong>and</strong> users. It leads to what my friend Daniel Jalkut has aptly called the <a href="http://twitter.com/danielpunkass/statuses/833197031">&#8220;Un-Coda-fication&#8221;</a> of iPhone apps.</p>
<p>The benefit for a developer is obvious: it minimizes the scope of an application and the attendant memory footprint. You could write your own Twitter update code using a NSURLConnection, or you could use one line of code like this:</p>
<p><code>[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"twitterrific:///post?message=EASY"]];<br />
</code></p>
<p>There is a less obvious, but equally important benefit when you look at URL schemes from a user&#8217;s point-of-view. Since your application&#8217;s scope is limited to one task, users will depend on it when they want to perform that task. Even if that task is in the context of another application.</p>
<p>An example of this is sharing photos. Users know that the Camera application takes pictures and that the Mail application sends messages. You don&#8217;t see a camera button in Mail; you see an &#8220;Email Photo&#8221; button in your Camera Roll. The user&#8217;s first task it to take a picture and the next task is to mail it.</p>
<p>Since we&#8217;re not Apple, we can&#8217;t achieve the high level of integration between the Camera Roll and the Mail application. But we can use URL schemes to accomplish much the same thing.</p>
<p>I worked with Fraser Speirs and Ian Baird during the development of <a href="http://connectedflow.com/exposure/">Exposure</a> and <a href="http://cocktails.cocktaildb.com/">Cocktails</a> so that their applications could support a &#8220;Post to Twitter&#8221; button. Clicking on that button initiates a workflow that lets the user share what they&#8217;re looking at on Flickr or what kind of drink they&#8217;re enjoying. Leaving their app/task and launching <a href="http://twitterrific.com">Twitterrific</a> makes complete sense.</p>
<p>If you&#8217;d like to include a &#8220;Post to Twitter&#8221; button in your own application, all the code you need is in the postToTwitter: method in the very special application mentioned above. If you want to handle your own URL scheme, take a look at application:handleOpenURL: in the application delegate. Be careful about validating inputs: you don&#8217;t want malicious URLs to do bad things.</p>
<p>Not to dampen your enthusiasm, but please be aware of a couple of limitations with URL schemes. <strike>First, there is no way to know if a URL scheme is supported or not (<a href="http://www.openradar.me/5726829">rdar://problem/5726829</a>). Currently, the best you can do is to performSelector:withObject:afterDelay: then openURL:. If the selector gets called you know that the URL failed to open.</strike> Also, be aware that deleting an application can sometimes leave the URL registration database in a state where it no longer recognizes a scheme (<a href="http://www.openradar.me/6045562">rdar://problem/6045562</a>). This only happens when two applications support the same URL scheme, so you can avoid the problem by using a unique scheme name. Please use the Radar bug ID# for a &#8220;me too&#8221; bug report if this becomes a problem in your own application.</p>
<p>Now let&#8217;s enjoy our newfound freedom to discuss the iPhone SDK and the first of many sample code releases on this site!</p>
<p><strong>Update October 1st, 2008:</strong> As <a href="http://twitter.com/rentzsch/statuses/942422746">Jonathan Rentzsch</a> and <a href="http://twitter.com/tqbf/statuses/942282185">Thomas Ptacek</a> point out, URL schemes can be an attack vector for your application. Pay particular attention to the code in -application:handleOpenURL: in your application delegate. If you find any vulnerabilities in my code, please let me know so I can update this essay. Thanks!</p>
<p><strong>Update October 7th, 2008:</strong> Once your application supports URL schemes, it&#8217;s likely that you&#8217;ll want to provide a bookmarklet in Safari. Here&#8217;s the one we use in Twitterrific:</p>
<p><code>javascript:window.location='twitterrific:///post?message='+escape(window.location)</code></p>
<p>The hardest part about doing this is guiding the user through the setup process. <a href="http://joemaller.com/___">Joe Maller</a> came up with a simple solution that lets the user get the Javascript into their bookmark list. This was later refined by <a href="http://mekentosj.com/papers/___">Alexander Griekspoor</a>. Make sure to view the source on these pages for additional hints and installation instructions.</p>
<p>If you agree that this setup process is too difficult for end users, please submit a duplicate bug for Radar ID# <a href="http://www.openradar.me/5935641">5935641</a>. Thanks!</p>
<p><strong>Update February 4th, 2012:</strong> <a href="https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html">UIApplication</a> now provides a -canOpenURL: method that lets you check if there is an application installed that supports the URL scheme.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/10/01/redacted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nike &#8211; iPod</title>
		<link>http://furbo.org/2008/09/10/nike-ipod/</link>
		<comments>http://furbo.org/2008/09/10/nike-ipod/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 21:28:56 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Observation]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=81</guid>
		<description><![CDATA[Having just presented a talk at C4[2] about the human factors involved in developing touch-based applications, I find it rather ironic to see the Nike + iPod integration move into the latest iPod touch. Why? Because I see some serious problems with how our bodies will interact with this device and its software. Note: These [...]]]></description>
			<content:encoded><![CDATA[<p>Having just presented a talk at <a href="http://rentzsch.com/c4/twoOpen">C4[2]</a> about the human factors involved in developing touch-based applications, I find it rather ironic to see the Nike + iPod integration move into the latest iPod touch.</p>
<p>Why? Because I see some serious problems with how our bodies will interact with this device and its software.</p>
<p><strong>Note:</strong> These are first impressions. I obviously haven&#8217;t had a chance to use the product, so the implementation by Apple/Nike is just a guess at this point in time. I&#8217;ve heard that there are some special controls in this software that allow &#8220;eyes off&#8221; control: if that&#8217;s the case, then we&#8217;ll all learn something from that UI.</p>
<p>The first problem is the size. When I&#8217;m running, I want the smallest piece of equipment possible. The simple reason is that any mass acts as a pendulum as you move. Sure the new iPod touch is lighter than its predecessor, but it&#8217;s still bigger and heavier than its nano sibling. Bigger is certainly not better.</p>
<p>There&#8217;s also a problem with where this device will attach to your body. Because of the size and weight, it&#8217;s likely that you&#8217;ll need to use it on an armband or in your pocket. Both of these locations present problems with interaction. You can&#8217;t see buttons on a touch screen when they&#8217;re in your pocket. It&#8217;s also uncomfortable to operate an interface that is strapped to your arm: try to unlock, launch and use an application while it&#8217;s positioned on your upper arm. Now do it while you&#8217;re running.</p>
<p>Good luck finding the PowerSong button without looking, too. Unlike the Nike + iPod application on the nano, this and other operations can&#8217;t be done solely by feel. Being able to operate the device while running is essential: you literally don&#8217;t want to take your eyes off the road. This &#8220;eyes off&#8221; approach to interaction is why the new iPod touch has physical volume buttons and why it was the most popular request by customers.</p>
<p>Some may argue that this device will be fine in a more controlled setting such as a gym. But if you&#8217;re running on a treadmill, there is already plenty of feedback from the machine&#8217;s built-in sensors and monitors. You don&#8217;t need a sensor in your shoe.</p>
<p>But in either case, you&#8217;ll find the biggest interaction problem is that sweaty fingers don&#8217;t work well on a capacitance-based touch screen. The salts in your body fluids make it much harder for the device to recognize your input. If you don&#8217;t believe me, try dissolving a teaspoon of salt in a cup of water. Then dip your finger in the salty water and try using the screen. You&#8217;ll find touch controls are jerky and non-responsive. Now add some body movement and you&#8217;ve got a real interaction problem.</p>
<p>Sometimes a few simple buttons, and not a fancy multi-touch UI, is the best way to solve an interaction problem. </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/09/10/nike-ipod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thank you</title>
		<link>http://furbo.org/2008/06/12/thank-you/</link>
		<comments>http://furbo.org/2008/06/12/thank-you/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 18:13:45 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=66</guid>
		<description><![CDATA[Wow. There&#8217;s no denying the physical beauty of the award or the cool prizes that accompany it. But in this &#8220;day after&#8221; the thing that I&#8217;m finding most rewarding is the outpouring of support and congratulations. The six weeks of eating, sleeping, and breathing [REDACTED] preceded by months of digging through class-dump and respondsToSelector output [...]]]></description>
			<content:encoded><![CDATA[<p>Wow.</p>
<p>There&#8217;s no denying the physical beauty of the <a href="http://developer.apple.com/wwdc/ada/">award</a> or the cool prizes that accompany it. But in this &#8220;day after&#8221; the thing that I&#8217;m finding most rewarding is the outpouring of support and congratulations. The six weeks of eating, sleeping, and breathing [REDACTED] preceded by months of digging through class-dump and respondsToSelector output was far from easy: but it&#8217;s all worth it.</p>
<p>From <a href="http://iconfactory.com/home/staff">everyone here at the Iconfactory</a>, all we can say is thank you. It means so much.</p>
<p>Unfortunately, we&#8217;re still under NDA and have been advised by Apple not to share screenshots. We&#8217;re all anxious to show off our work, but we need to respect the wishes of our new partner.</p>
<p>If you&#8217;re here at WWDC, you can get a look at the UI on the panels on the third floor. There are also <a href="http://www.macnotes.de/2008/06/12/wwdc-erster-blick-auf-twitterriffic/">some</a> <a href="http://theilife.com/2008/06/11/live-from-the-2008-apple-design-awards-liveblog-and-photos-wwdc08/">photos</a> from last night&#8217;s event that hint at what&#8217;s about to come. For those of you wondering about the photo I took before going on stage last night: my big fat finger was over the lens on my iPhone—a great example of why ergonomics in your application is important.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/06/12/thank-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

