<?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; Opinion</title>
	<atom:link href="http://furbo.org/category/opinion/feed/" rel="self" type="application/rss+xml" />
	<link>http://furbo.org</link>
	<description>by Craig Hockenberry</description>
	<lastBuildDate>Thu, 01 Jul 2010 16:12:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Brain farts</title>
		<link>http://furbo.org/2009/06/15/brain-farts/</link>
		<comments>http://furbo.org/2009/06/15/brain-farts/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 21:17:01 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Observation]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=111</guid>
		<description><![CDATA[What happened?
In spite of plenty of advance warning from Twitter, we got caught by the Twitpocalypse bug.
For the 2.0.1 release, we had tested our software extensively. I actually wrote an emulation layer on top of the code that reads data from Twitter that added a large number to every ID read from Twitter. This testing [...]]]></description>
			<content:encoded><![CDATA[<h3>What happened?</h3>
<p>In spite of plenty of <a href="http://groups.google.com/group/twitter-development-talk/browse_thread/thread/24c87f61ea602904">advance warning</a> from Twitter, we got caught by the <a href="http://twitter.com/rentzsch/status/1786073038">Twitpocalypse bug</a>.</p>
<p>For the 2.0.1 release, we had tested our software extensively. I actually wrote an emulation layer on top of the code that reads data from Twitter that added a large number to every ID read from Twitter. This testing uncovered several bugs which were fixed and incorporated into the <a href="http://svn.cocoasourcecode.com/MGTwitterEngine/">MGTwitterEngine</a> open source code.</p>
<p>Unfortunately, this testing didn&#8217;t take into account that the library we use to parse the data (<a href="http://lloyd.github.com/yajl/">YAJL</a>) includes a range check that ensures signed values, which are allowed by the JSON specification, will fit into 32-bit storage. The &#8220;YAJL Error 3&#8243; is that library telling us that the range check failed.</p>
<p>In hindsight, I should have fed the parser some large unsigned integers. In the wonderful world of software development, we call this a <strong>brain fart</strong>.</p>
<h3>How did we respond?</h3>
<p>Unfortunately, the Twitpocalypse occurred on Friday evening, just as my wife and I were heading out for a high school graduation. I quickly shot off an email to Twitter asking a few questions (I had mistakenly thought that there were problems with data being returned by an authenticated connection.)</p>
<p>After a couple of hours of iPhone email and SMS, it was clear that we were going to need do a new release. We had a critical bug that affected thousands of users. And our fear was this submission would take longer than normal: many developers are submitting 3.0 updates.</p>
<p>Life officially sucked at this point, and the graduation ceremony was memorable for all the wrong reasons.</p>
<p>After getting a few hours of fitful rest, I opened up Xcode on Saturday morning and started looking for the problem. It took just a few minutes to find the bug and another few minutes to fix it. Our concern at this point was getting the update to users.</p>
<h3>Apple saves the day</h3>
<p>In spite of it being the middle of weekend after a busy week at WWDC, we were able to get in touch with Apple Developer Relations. Our contact was able to expedite the approval of the application.</p>
<p>To say that this was a relief would be the understatement of the century. The <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284540316&#038;mt=8">update for the free version</a> started showing up in iTunes on Sunday evening. The <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284542696&#038;mt=8">paid version was updated</a> on Tuesday morning.</p>
<h3>What can we learn from this?</h3>
<p>Developers are human. We make mistakes. It&#8217;s interesting to note that <a href="http://twitter.com/atebits/status/2153788845">Loren Brichter</a> and <a href="http://twitter.com/birdfeedapp/status/2148534512">Buzz Anderson</a>, fellow developers whose skills I hold in high regard, were also affected by the Twitpocalypse. It really does happen to the best of us.</p>
<p>It&#8217;s also interesting to see that Loren and Buzz reacted in the same way I did: by fixing the problem ASAP. In Loren&#8217;s case, that meant <a href="http://twitter.com/atebits/status/2161396468">finding a hotel with WiFi</a> in order to distribute his update. Buzz released a new beta <a href="http://twitter.com/birdfeedapp/status/2159774601">in a matter of hours</a>.</p>
<p>In my experience, these brain farts are problems with easy fixes. It&#8217;s something like checking for invalid bounds, getting a Boolean state wrong, or something else of that nature. It&#8217;s not a complex problem: it&#8217;s an oversight.</p>
<p>The problem, therefore, is not how fast we can react to fixing critical bugs, but how fast the App Store reviewers can react with an approval.</p>
<p>As a device that&#8217;s constantly connected to the Internet, the iPhone taps into a stream of data that is unpredictable. Data in &#8220;the cloud&#8221; can change at any time, and web applications naturally adapt to these changes with a quick deployment strategies. Those of us who are building client applications on top of this network infrastructure need the ability to adapt quickly, too.</p>
<p>Security issues are another area where a quick response is a requirement, not a luxury. If I discover something that puts a user&#8217;s private data at risk, it&#8217;s my responsibility to fix the problem as quickly as possible. Time spent in a review queue is time spent being exposed to a flaw.</p>
<p>At the same time, we shouldn&#8217;t blame Apple for these delays in reviewing applications. In the year that they have been selling our products, the App Store has been more successful than anyone imagined. It&#8217;s clear to me that reviewers and others involved in the approval process are overwhelmed by this success.</p>
<h3>How can we fix it?</h3>
<p>Fortunately, I think there&#8217;s a simple way to solve this problem for all developers selling products on the App Store. The inspiration for this solution will be obvious to anyone who&#8217;s used Apple&#8217;s Developer Technical Support (DTS.)</p>
<p>When you purchase an ADC membership, you are given a number of &#8220;incidents&#8221;. These DTS incidents can be used when you have a problem that can&#8217;t be solved through documentation, support forums or hours and hours of debugging. It&#8217;s for the hard stuff, and usually involves getting an engineer at Apple involved to understand and fix the issue.</p>
<p>As a developer, I&#8217;m very careful to use these incidents wisely: they are a last resort. There are some years where I don&#8217;t use them at all, those are the good years.</p>
<p>A similar system could be put in place for critical bug fixes on the App Store. If every developer was given one or two &#8220;prioritized reviews,&#8221; it would act as insurance for the brain farts. You&#8217;d have a way to raise a flag and say &#8220;I need special attention for a critical bug.&#8221;</p>
<p>If another developer has a critical bug, I have no problem with my review process for a feature release taking a little longer. And since prioritized reviews would be a scarce resource, they won&#8217;t be open for abuse because developers will think twice before using them.</p>
<p>Because it&#8217;s not a matter of <strong>if</strong> you have a brain fart that leads to a critical bug, it&#8217;s a matter of <strong>when</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2009/06/15/brain-farts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Front Row To Go</title>
		<link>http://furbo.org/2009/03/16/front-row-to-go/</link>
		<comments>http://furbo.org/2009/03/16/front-row-to-go/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 19:41:46 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Observation]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=104</guid>
		<description><![CDATA[Everyone and his brother has a prediction about Apple and the mythical &#8220;netbook.&#8221; This is mine.
Before I get into the actual prediction, let me say that I&#8217;ve come to this conclusion by looking at Apple as a business, not as a supplier of shiny gadgets for our technolust. As much as we love the things [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone and his brother has a prediction about Apple and the mythical &#8220;netbook.&#8221; This is mine.</p>
<p>Before I get into the actual prediction, let me say that I&#8217;ve come to this conclusion by looking at Apple as a business, not as a supplier of shiny gadgets for our technolust. As much as we love the things they make, their goal as a corporation is to make the stockholder&#8217;s happy. They do that by selling lots of products. We&#8217;re just a means to that end.</p>
<p>A lot of the speculation regarding the netbook says that it provides functionality in the price gap between a $200 iPhone and a $1000 MacBook. While that&#8217;s true, it misses the point.</p>
<p>Apple would rather sell you another device <strong>in addition</strong> to the ones they already sell. They&#8217;re not interested in cutting into (presumably healthy) MacBook sales with a netbook. Likewise, selling a bigger touch device could cut into iPhone sales: keep your crappy cell phone and buy the netbook to throw in your purse or backpack.</p>
<p>One of the things that saved Apple was a simplified product line based around professional and consumer uses. Does it really make sense to have more than one consumer-level device for laptop computing? The MacBook already kicks ass in that department: having another device in that category just muddies the water.</p>
<p>But what if there was a device that could work in conjunction with your other Apple products? Something that extended their capabilities. Something that made each product better for a few hundred dollars.</p>
<p>Apple and their shareholders would love this: you&#8217;d buy the iPhone and the &#8220;netbook&#8221;. And eventually the MacBook. And maybe an Apple TV. And probably an iPod, too.</p>
<p>So what are some of the problems with the current hardware lineup?</p>
<ul>
<li>iPhone / iPod touch &#8211; Small screen, small keyboard.</li>
<li>Mac &#8211; No touch screen, running Front Row prevents using your Mac for other things.</li>
<li>Apple TV &#8211; crappy remote, no keyboard.</li>
<li>iPod &#8211; Very small screen with no touch screen or keyboard.</li>
</ul>
<p>So what kind of product could fill in these gaps? I call it &#8220;Front Row To Go.&#8221; Think of it as a second screen for the current hardware. Something that could:</p>
<ul>
<li>Display photos on a larger screen than on the iPhones and iPods. It would also be effective as an adjunct to iPhoto on the desktop: Microsoft&#8217;s Surface prototype shows how effective it is to display pictures on a horizontal surface that can be manipulated by multiple viewers.</li>
<li>Provide a touch screen keyboard for the iPhone and Apple TV: a better input mechanism than hunting and pecking on chiclets. (Maybe this is the reason Bluetooth keyboards aren&#8217;t available for the iPhone.)</li>
<li>Show movies on a larger screen: anyone who&#8217;s taken a transoceanic flight knows that looking at the iPhone/iPod screen for more than a couple hours can be quite tiresome. An added benefit is that the player&#8217;s battery wouldn&#8217;t be consumed by the display&#8217;s power needs.</li>
<li>Provide touch input to desktop applications. Multi-touch is <a href="http://furbo.org/2007/07/16/multi-touch-on-the-desktop/">never going to happen on a vertically oriented display</a>, so make a separate device that works horizontally. An obvious benefit to developers is that they don&#8217;t have to rewrite code: if it makes sense, multi-touch can be added to enhance current applications.</li>
</ul>
<p>As with all other Apple products, Front Row To Go could obviously work as a standalone device. Sync your content onto the device and take it with you: no more dragging a laptop to a family reunion just because Aunt Bessie can&#8217;t see the tiny photos on the iPhone. Get your bookmarks and feeds from the Mac and surf the web using Front Row To Go&#8217;s version of Safari while you&#8217;re listening to music or watching TV.</p>
<p>As far as how these features would be implemented, that&#8217;s anyone&#8217;s guess. There might be an API for developers, or maybe it&#8217;s a closed system. The device might be able to play iPhone games or run multiple iPhone applications at once (much like the current Dashboard works in Mac OS X.) With a common base of OS X running throughout the product line, pretty much anything is possible.</p>
<p>And that gets to the real point of this essay: think about what Apple has learned from the halo effect surrounding the iPod (and now the iPhone.) If you have any doubt that this effect is alive and well, drop into an Apple Store on any weekend and take a look around: plenty of customers who are happy with one product and looking at others.</p>
<p>In my opinion, these consumers are the ones that Apple will target with a &#8220;netbook,&#8221; not the ones that are jonesing for a sexy little machine that fills a perceived gap in the product range. I hope I&#8217;m right, because I&#8217;d love to be one of those customers lining up to buy Front Row To Go.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2009/03/16/front-row-to-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bootstrap</title>
		<link>http://furbo.org/2009/02/19/bootstrap/</link>
		<comments>http://furbo.org/2009/02/19/bootstrap/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 17:54:26 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Observation]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=93</guid>
		<description><![CDATA[A lot of people stumble upon this website because they&#8217;re looking for information about developing applications for the iPhone. If this is your first time here, welcome!
I have been developing applications for the iPhone since it was released (using both the Jailbreak and official SDK.) My company is currently selling several applications in iTunes. I [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of people stumble upon this website because they&#8217;re looking for information about developing applications for the iPhone. If this is your first time here, welcome!</p>
<p>I have been developing applications for the iPhone since it was released (using both the Jailbreak and official SDK.) <a href="http://iconfactory.com/home/about">My company</a> is currently <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewArtist?id=281795483">selling several applications in iTunes</a>. I also have many years of experience with the underlying technologies on the device (Cocoa, the predecessor to Cocoa Touch.) I&#8217;d like to share some of my experiences and give you some pointers that will help get you started.</p>
<p>The first thing you need to know is that learning how to develop applications for a mobile device isn&#8217;t easy. But it&#8217;s worth the effort, ask any seasoned iPhone developer about seeing their work run on the device for the first time: it&#8217;s fricken&#8217; amazing.</p>
<h3>Get a Feel for the Device</h3>
<p>Some of you may want to target the web with your application. If this is the case, you&#8217;ll want to start looking at a series of articles I wrote for A List Apart: <em>Put Your Content in My Pocket</em> (<a href="http://alistapart.com/articles/putyourcontentinmypocket">Part 1</a> and <a href="http://alistapart.com/articles/putyourcontentinmypocketpart2/">Part 2</a>.)</p>
<p>Even if you&#8217;re going to be writing a native application, knowing how to develop web pages for Mobile Safari will be helpful. A product information website and other ancillary information about your app will work best when your new customers can view it on their device.</p>
<p>Working with the web is also a good way to start understanding how a mobile device is so much different than a desktop. Using HTML and CSS can be an excellent way to begin thinking about your application design and doing prototypes—<a href="http://furbo.org/2007/07/02/beyond-sweet/">we&#8217;ve used this technique</a> in many of our own products.</p>
<p>After getting a feel for the web capabilities of the iPhone and iPod touch, you&#8217;ll want to look around the Apple Developer Connection (ADC) site for <a href="http://developer.apple.com/webapps/">more in-depth technical documentation for developing web applications</a>.</p>
<p>Which leads to our next topic&#8230;</p>
<h3>Buy a Mac</h3>
<p>There&#8217;s no two ways about it. If you&#8217;re going to develop iPhone applications, you&#8217;re going to do it on a Mac. The whole toolchain is Mac-only: you can&#8217;t do it in Visual Studio or Eclipse or anything else that runs on Windows.</p>
<p>Don&#8217;t think that this is some evil plan by Apple to make you use a Mac. It&#8217;s no more nefarious than Microsoft requiring Mac developers to purchase Visual Studio in order to develop Windows versions of our products.</p>
<p>Buying a Mac can be an expensive proposition: if you&#8217;re just getting started and on a shoestring budget, here&#8217;s some advice on doing it on the cheap:</p>
<ol>
<li>Buy a used machine. A lot of perfectly good hardware can be <a href="http://computers.shop.ebay.com/items/Computers-Networking__mac-book-pro_W0QQLHQ5fSiteWideConditionZUsed285fddQQ_flnZ1QQ_fromfsbZQQ_sacatZ58058QQ_ssovZ1QQ_trksidZp3286Q2ec0Q2em282">found on Ebay</a>. New models of the Mac Book Pro were recently introduced, so many people are selling hardware after they upgrade. This older hardware is perfectly fine for doing iPhone development: the apps you&#8217;re going to develop are small and compact and don&#8217;t need a lot of processor power to build and test.</li>
<li>Buy a <a href="http://www.apple.com/macmini/">Mac mini</a>. Even though you&#8217;re buying new hardware, you&#8217;ll save money because you&#8217;re supplying your own display, keyboard and other peripherals. If you&#8217;re like me, you have plenty of this stuff lying around.</li>
</ol>
<p>If you&#8217;re having a hard time justifying the hardware expenditure, remember that you can <a href="http://www.macworld.com/article/133513/2008/05/bothworlds.html">run Windows or any other x86 based OS on this machine</a>.</p>
<p>The only thing to keep in mind as you&#8217;re buying hardware: make sure that the Mac has an Intel processor. The development tools won&#8217;t run on the older PowerPC processors.</p>
<p>The good news is that once you buy the Mac, all the development tools are free. Think about <a href="https://msdn.microsoft.com/en-us/subscriptions/bb841434.aspx">all the money you spent buying Visual Studio and MSDN</a> and you&#8217;ll feel much better about spending a thousand bucks for the hardware :-)</p>
<p>So how do you get all these free development tools? Read on&#8230;</p>
<h3>Join Up and Download</h3>
<p>There are two things you&#8217;ll need to do before you can start writing applications: sign up for ADC and register to become an iPhone developer.</p>
<p>Neither of these things costs money. Everything is free until you want to put your code onto the device. At that point, you&#8217;ll need to pay $99 to get a certificate that allows you to sign the binary and put it on the device.</p>
<p>The first step is to create an Apple ID; it&#8217;s an email address that you&#8217;ll use to access the developer site. You may already have one for your iTunes account. <a href="http://developer.apple.com/iphone/program/download.html">These pages guide you through the sign-up process</a>.</p>
<p>Once you have an application that you want to test on a device and distribute on the App Store, you need to <a href="http://developer.apple.com/iphone/program/">apply to the iPhone Developer Program</a>.</p>
<p>After you have the keys to the ADC kingdom, there is a wealth of additional information available&#8230;</p>
<h3>Sit Back and Watch Some Movies</h3>
<p>Before you start diving into coding, I highly recommend spending a few hours watching the &#8220;<a href="http://developer.apple.com/iphone/index.action">Getting Started Videos&#8221; in the iPhone Dev Center</a>.</p>
<p>(Note: if the links on that page are grayed out, it&#8217;s because you&#8217;re not logged in yet. Sign in using the Apple ID that you obtained above.)</p>
<p>As I said earlier, I came into iPhone development with a fairly extensive background in the technologies used on the device: even so, I learned a lot from these videos. Make sure you take advantage of this valuable resource.</p>
<p>And make sure you do it before rushing off and hacking on code&#8230;</p>
<h3>Start Playing</h3>
<p>If you&#8217;re like me, you&#8217;ll want to start playing around with code as soon as possible. The best way to do this is with the <a href="http://developer.apple.com/iphone/samples/index.action">excellent sample code</a> that Apple provides on its developer site.</p>
<p>(Note: Again, that link is behind a login, so you&#8217;ll need an Apple ID before you can download the samples.)</p>
<p>Since you&#8217;re new to iPhone development, it&#8217;s likely that you&#8217;ll have some problems going beyond a simple build and run of the projects you download. (If you&#8217;re having problems running the sample projects, make sure that you have &#8220;Simulator&#8221; selected in the drop-down menu at the top of the project window.)</p>
<p>When you start to get confused by Xcode or the syntax of Objective-C, you&#8217;ll want to move onto the next step&#8230;</p>
<p>(Note: I said &#8220;when&#8221;, not &#8220;if&#8221;. Trust me on this.)</p>
<h3>Crack a Book or Two or Three</h3>
<p>You&#8217;re lucky that there are a lot of great books about iPhone development available now. It&#8217;s a luxury that those of us who worked on iPhone apps during the NDA are very jealous of :-)</p>
<p>If you&#8217;re just starting out, I&#8217;d highly recommend <a href="http://www.amazon.com/gp/product/1430216263?ie=UTF8&amp;tag=furboorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430216263">Beginning iPhone Development: Exploring the iPhone SDK</a> by Dave Mark and Jeff LaMarche. The best thing about this book is the step-by-step approach it takes to working with Xcode, Objective-C and the iPhone APIs. They&#8217;ll lead you through the basics and you&#8217;ll be building your own apps in no time at all.</p>
<p>As you get more comfortable with the tools and AppKit/UIKit frameworks, I&#8217;d recommend you take a look at Erica Sadun&#8217;s <a href="http://www.amazon.com/gp/product/0321555457?ie=UTF8&amp;tag=furboorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321555457">iPhone Developer&#8217;s Cookbook: Building Applications with the iPhone SDK</a>. This book presumes a bit more knowledge about the SDK, but is a very handy reference both to the official and unofficial APIs. (Go ahead and play with the undocumented features, but do not use them in an application that you want to put on the App Store.) You may want to read my <a href="http://furbo.org/2008/11/13/cooking-with-gas/">in-depth review of this book</a>.</p>
<p>Since you&#8217;re going to be working with Cocoa Touch on the iPhone, you&#8217;ll also want to start thinking like a Cocoa programmer. Every great iPhone and Mac developer has nothing but wonderful things to say about <a href="http://www.amazon.com/gp/product/0321503619?ie=UTF8&amp;tag=furboorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321503619">Cocoa Programming for Mac OS X</a> by Aaron Hillegass. Don&#8217;t be misled by the &#8220;for Mac OS X&#8221;—you&#8217;re going to be working with classes and design patterns that are identical on both platforms. You&#8217;ll also have a Mac that you&#8217;re using for development, so building the samples and test code isn&#8217;t a problem.</p>
<p>If you have previous development experience with C, C++ or Java, you&#8217;ll want to <a href="http://www.cocoabuilder.com/archive/message/cocoa/2008/5/15/206700">read this mailing list post</a> by Erik Buck that enumerates some of the difficulties that you&#8217;ll have coming up to speed with Objective-C and Cocoa. Make sure to take some time and read the replies to that post: many of the people commenting on that post are fellow developers whose work I hold in high regard.</p>
<p>And while we&#8217;re talking about Erik&#8217;s writing: there are a lot of experienced Cocoa developers <a href="http://www.amazon.com/gp/product/0321535022?ie=UTF8&amp;tag=furboorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321535022">waiting for this book</a>. You won&#8217;t need it for awhile, but you will need it.</p>
<p>As you&#8217;ve probably figured out by now, this whole learning process is going to take awhile. I&#8217;d also be remiss if I didn&#8217;t mention that there is a pretty steep learning curve. <a href="http://furbo.org/about/">I&#8217;ve built products</a> in assembly code, BASIC, C/C++ on Unix, X11, Win32, Java and <a href="http://furbo.org/resume/">a whole bunch of other technologies</a>. Objective-C and Cocoa weren&#8217;t the easiest to pick up, but they&#8217;re definitely the ones that I plan on sticking with. Try not to get discouraged: once you &#8220;get it&#8221; developing with this language and framework is a joyous experience.</p>
<h3>Other Resources</h3>
<p>I&#8217;ve been coding long enough to remember a time when we didn&#8217;t have the Internet as a source of information. Thank God those days are behind us: here are some online resources that I use often:</p>
<ul>
<li><a href="http://www.cocoabuilder.com/archive/bydate">cocoabuilder.com</a> There are two mailing lists where other Cocoa developers and Apple engineers hang out: <a href="http://www.lists.apple.com/mailman/listinfo/cocoa-dev">Cocoa-dev</a> and <a href="http://www.omnigroup.com/mailman/listinfo/macosx-dev">MacOSX-dev</a>. The archives for both of these lists can be searched using CocoaBuilder: extremely handy when you come up against a problem that someone else has already solved.</li>
<li><a href="http://cocoadev.com/">cocoadev.com</a> A wiki that is maintained by the Cocoa developer community. This is the first place I look when I need to learn some new part of the framework. As an example, check out this entry <a href="http://www.cocoadev.com/index.pl?NSString">about the string class</a>.</li>
<li><a href="http://cocoadevcentral.com/">cocoadevcentral.com</a> A beautiful site maintained by Scott Stevenson. So many great tutorials and links to other sites and blogs that focus on Cocoa development. Spend some time exploring those links and you&#8217;ll learn a lot about our developer community.</li>
</ul>
<p>Apple recently launched another great resource: <a href="https://devforums.apple.com/community/iphone">Developer Forums</a>. It&#8217;s currently in beta, but is still an excellent place to ask fellow developers questions about iPhone SDK topics.</p>
<h3>But wait, there&#8217;s more!</h3>
<p>You&#8217;ll find a lot of iPhone content on this site. Here&#8217;s <a href="http://furbo.org/?s=iphone">proof</a>.</p>
<p>To save you some time, here are some quick links to some of the more popular essays on this site:</p>
<p><a href="http://furbo.org/2008/08/26/dealing-with-memory-loss-the-crash/">Memory management issues (part 1.)</a></p>
<p><a href="http://furbo.org/2008/08/27/dealing-with-memory-loss-the-cleanup/">Memory management issues (part 2.)</a></p>
<p><a href="http://furbo.org/2008/08/06/beta-testing-on-iphone-20/">How to run a beta test.</a></p>
<p><a href="http://furbo.org/2008/08/08/symbolicatifination/">Extracting information from crash reports.</a></p>
<p><a href="http://furbo.org/2008/11/12/the-final-test/">Final release testing.</a></p>
<p><a href="http://furbo.org/2008/11/19/release-day/">What to expect on release day.</a></p>
<p><a href="http://furbo.org/2008/11/10/debugging-with-backups/">Debugging with customer backups.</a></p>
<p><a href="http://furbo.org/2009/01/12/expiration-perspiration/">How to deal with expired certificates.</a></p>
<p>And, of course, source code for you to use in your own projects:</p>
<p><a href="http://furbo.org/2008/10/01/redacted/">[REDACTED]</a></p>
<p><a href="http://furbo.org/2008/10/07/fancy-uilabels/">Fancy UILabels</a></p>
<p>Or just have fun with:</p>
<p><a href="http://furbo.org/2008/09/19/lights-off/">Lights Off</a></p>
<p>And if you aren&#8217;t already completely bored with me crapping on about the iPhone, <a href="http://furbo.org/2009/02/02/macworld-famous/">there are videos</a>.</p>
<h3>Conclusion</h3>
<p>I hope this information has been helpful and gotten you started in the wonderful world of iPhone development. Don&#8217;t forget to subscribe to this site&#8217;s RSS feed since I have a lot more I&#8217;d like to write about :-)</p>
<p>Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2009/02/19/bootstrap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Raising prices</title>
		<link>http://furbo.org/2009/02/16/raising-prices/</link>
		<comments>http://furbo.org/2009/02/16/raising-prices/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 20:39:20 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Observation]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=99</guid>
		<description><![CDATA[Many of you are starting to realize that a ringtone price point does not sustain a business. I&#8217;m with you.
Lately, I&#8217;ve been thinking about ways to make higher prices more palatable to customers. Several discussions at Macworld kicked off these thoughts, and a recent tweet by Justin Williams made me realize that a lot of you [...]]]></description>
			<content:encoded><![CDATA[<p>Many of you are starting to realize that a <a href="http://furbo.org/2008/12/09/ring-tone-apps/">ringtone</a> price point does not sustain a business. I&#8217;m <a href="http://appcubby.com/blog/files/the_experiment.html">with</a> <a href="http://majicjungle.com/blog/?p=66">you</a>.</p>
<p>Lately, I&#8217;ve been thinking about ways to make higher prices more palatable to customers. Several discussions at Macworld kicked off these thoughts, and <a href="http://twitter.com/justin/status/1210786170">a recent tweet</a> by Justin Williams made me realize that a lot of you could benefit from these ideas. Hopefully, this short essay will help us all make it through the App Store gold rush.</p>
<p>The first thing to do is think about a &#8220;Lite&#8221; or ad-supported version of your application. Let customers find out how great your work is by giving them a free copy.</p>
<p>Based on our dealings with Apple Developer Relations, there are two basic rules you need to follow when making a Lite version of your product:</p>
<ol>
<li>The product must be fully functional. The application must stand on its own and be useful.</li>
<li>The user should not be inundated with &#8220;up-sell&#8221; reminders. Showing BUY NOW every 5 minutes is the quickest way I know to get rejected by the App Store.</li>
</ol>
<p>The hard part, of course, is how to limit functionality. For many games, it&#8217;s pretty easy: you just limit the number of levels the user gets to play for free. A similar technique can be used for applications that track data by limiting the number of records that can be added.</p>
<p>But there are many applications that don&#8217;t fall into these neat categories. One such application is our own <a href="http://frenzic.com">Frenzic</a>. Due to the game&#8217;s open-ended nature, there&#8217;s not much we can do to set &#8220;levels.&#8221; Until there is some kind of demo mechanism on the App Store, we&#8217;re stuck with advertising, good reviews and word-of-mouth.</p>
<div>One interesting case is James Thomson&#8217;s <a href="http://pcalc.com/iphone/index.html">PCalc</a> application. I love this calculator, and found <a href="http://www.dragthing.com/blog/?p=103">his analysis of what to keep and what to remove</a> very interesting. You should note that this effort paid off: <a href="http://www.dragthing.com/blog/?p=119">his sales doubled</a> as a result of the Lite version.</div>
<p>Free applications that are supported by ads are also a viable alternative. We&#8217;ve seen a steady stream of sales with <a href="http://iconfactory.com/twitterrific">Twitterrific</a> because customers that use the free version know exactly what they are going to get for their $10. The main consideration with this approach is thoughtful integration of the ads into the user&#8217;s activities. Annoying a user with ads is a good way to get deleted from the home screen.</p>
<p>Using this model, some people will never buy your application. And that&#8217;s OK, and maybe even better, because you&#8217;ll make your money back over the long term. I was not surprised when <a href="http://www.shazam.com/">Shazam</a> started showing ads. They spent a lot of time and money developing their application and back-end infrastructure. When millions of people are using your product and seeing ads every day, that revenue can be substantial and easily pay for development costs.</p>
<p>Another thing I&#8217;ve noticed is that iPhone applications that have a tie-in to a Mac desktop product can command a higher price. If you have group of users who already love what you do on the desktop, selling those users mobile functionality is easy. Take a look at <a href="http://www.culturedcode.com/things/">Things</a> and <a href="http://www.omnigroup.com/applications/omnifocus/">OmniFocus</a> as examples: the desktop versions of these apps sell for $50 and $80, respectively.</p>
<p>The iPhone version of these products sell for $10 and $20. From a customer&#8217;s point-of-view, that&#8217;s not 10 times more expensive than the typical ringtone app. Instead, it&#8217;s a small price to pay for mobile access to their desktop data. Conceptually, the 20-25% fee is just another upgrade cost.</p>
<p>Finally, you should take a look at vertical markets. I love the prices for <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?id=26321&amp;popId=30">Medical applications</a> in the App Store. There are <strong>a lot</strong> of apps with price tags over $10 (some are even over $100.) Again, the customer for these apps is not thinking so much about cost, but rather of the value provided.</p>
<p>When businesses start to see the capabilities that an iPhone applications gives a distributed workforce, vertical markets could become quite lucrative. You may only have hundreds or thousands of customers, but if you&#8217;re earning hundreds of dollars from each of them, that&#8217;s a viable business.</p>
<p>In closing, I&#8217;ll pass on a small reminder that an Apple employee gave me during Macworld: the App Store has only been live for a little over six months. Last month&#8217;s 25 year anniversary of the Mac should also remind us that this new market for our products is still in its infancy. Yes, it&#8217;s a wild ride at the moment, but if you think about your costs, customers and revenue streams, I think you&#8217;ll enjoy a very long journey.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2009/02/16/raising-prices/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 of other [...]]]></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 acts [...]]]></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>Cooking with gas</title>
		<link>http://furbo.org/2008/11/13/cooking-with-gas/</link>
		<comments>http://furbo.org/2008/11/13/cooking-with-gas/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 23:16:30 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=86</guid>
		<description><![CDATA[One of the great things about the NDA being lifted is that a lot of great books about iPhone development are finally being published. It&#8217;s about time: for many months the top search hit on this site has been iphone app development. A lot of new developers need guidance.
Last week, Addison-Wesley contacted me saying that [...]]]></description>
			<content:encoded><![CDATA[<p>One of the great things about <a href="http://www.urbandictionary.com/define.php?term=cooking%20with%20gas">the NDA being lifted</a> is that a lot of great books about iPhone development are finally being published. It&#8217;s about time: for many months the top search hit on this site has been <a href="http://www.google.com/search?client=safari&amp;rls=en-us&amp;q=iphone+app+development&amp;ie=UTF-8&amp;oe=UTF-8">iphone app development</a>. A lot of new developers need guidance.</p>
<p>Last week, Addison-Wesley contacted me saying that they wanted to mail a free copy of Erica Sadun&#8217;s new book, <a href="http://www.amazon.com/gp/product/0321555457?ie=UTF8&amp;tag=furboorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321555457">The iPhone Developer&#8217;s Cookbook</a><img style="display: inline; border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=furboorg-20&amp;l=as2&amp;o=1&amp;a=0321555457" border="0" alt="" width="1" height="1" />. I guess that&#8217;s one of the benefits of having a web log that a lot of other iPhone developers read: I took them up on the offer since there were no strings attached.</p>
<p>To be honest, I wasn&#8217;t expecting to get much out of this book. After spending many months digging around in the bowels of the SDK, I thought I had seen it all. I&#8217;m happy to report that I was wrong.</p>
<p>If you&#8217;re an experienced iPhone developer, you won&#8217;t learn much from the beginning of the book: you already know about the application package, setting up Xcode, platform limitations, how UIKit uses MVC, and so on. If you&#8217;re new to the platform, this information will certainly be helpful and I found that it was presented clearly and concisely.</p>
<p>So what did I like about this book?</p>
<p>First off, there are the recipes. These short snippets of code show you how to do a lot of common tasks. Need to build some draggable views? Just look up the recipe &#8220;Dragging Views&#8221; and you have a few pages of pertinent information (including a brief introduction to UITouch.)</p>
<p>I much prefer this format over long, involved examples that are complete implementations. The recipes in this book act as a quick way to get up to speed and they help you find more detailed information in the Developer Documentation in Xcode. The recipe format gets you pointed in the right direction.</p>
<p>In going through these recipes I ended up learning some new things. For example, I didn&#8217;t realize that you can set the number of rows in a UIAlertView. Again, the short and sweet recipe format makes it easy to pick these things out.</p>
<p>There are also some clever recipes: I particularly enjoyed the one that added a UIProgressView as a subview to an empty UIActionSheet. A nice trick to leverage the existing UIKit classes in new and different ways.</p>
<p>But the real value of this book comes from Erica&#8217;s experience in working with the Jailbreak APIs. She goes where the Xcode documentation does not and lets us peek behind the curtains. (This book, in effect, summarizes a lot of the <a href="http://ericasadun.com/">poking around</a> she did during the early days of the iPhone.)</p>
<p>Personally, I will never use undocumented iPhone SDK calls. It&#8217;s just too dangerous: you risk not getting accepted into the App Store because you&#8217;ve broken the terms of the license agreement (section 3.3.1.) And even if you do sneak it through, what are you going to do if the unpublished API changes and breaks your app? You&#8217;ll have a hell of a lot of unhappy customers for the couple of weeks it takes to get a new version submitted and approved.</p>
<p>So why is Erica&#8217;s exploration into the undocumented side of the API so helpful? Because it shows us what Apple is using in their own applications. And if we need similar functionality, we can file enhancement requests using this inside knowledge.</p>
<p>As an example, there&#8217;s the page curl animation that is used in the Maps application. You won&#8217;t find it in the API documentation, but it&#8217;s there if you use @&#8221;mapCurl&#8221; or @&#8221;mapUnCurl&#8221; as the animation type. If you want to do that in your own app, <a href="https://bugreport.apple.com/">write a Radar and let the developers at Apple know</a>. Make sure to give them context for the enhancement request:  tell them why exposing the API would make your app better.</p>
<p>Personally, I have written Radars for the inclusion of <a href="rdar://problem/6358873">the UICalloutView class</a> and <a href="rdar://problem/6358914">UIToolbar customization functionality</a>.</p>
<p>In summary, I highly recommended Erica&#8217;s book. If you&#8217;re a beginner, you&#8217;ll find code that helps get you started. For those of us who have more experience, you&#8217;ll find it to be a valuable reference for both public and private APIs.</p>
<p>If you&#8217;re planning to buy a copy, please <a href="http://www.amazon.com/gp/product/0321555457?ie=UTF8&amp;tag=furboorg-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321555457">make me rich with affiliate kickbacks</a><img style="display: inline; border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=furboorg-20&amp;l=as2&amp;o=1&amp;a=0321555457" border="0" alt="" width="1" height="1" /> at Amazon. Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/11/13/cooking-with-gas/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 are first [...]]]></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>Listeners found this review helpful</title>
		<link>http://furbo.org/2008/07/16/listeners-found-this-review-helpful/</link>
		<comments>http://furbo.org/2008/07/16/listeners-found-this-review-helpful/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 18:04:36 +0000</pubDate>
		<dc:creator>Craig Hockenberry</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Observation]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://furbo.org/?p=76</guid>
		<description><![CDATA[A major feature of the App Store are the user reviews about the software being offered. There&#8217;s just one problem: software is not music. I&#8217;ve never had an MP3 crash or lack features. Applications also evolve and improve; I&#8217;m pretty sure the Jimi Hendrix track I&#8217;m listening to right now is the same one he [...]]]></description>
			<content:encoded><![CDATA[<p>A major feature of the App Store are the user reviews about the software being offered. There&#8217;s just one problem:<span class="entry-content"> software is not music. I&#8217;ve never had an MP3 crash or lack features. Applications also evolve and improve; I&#8217;m pretty sure the Jimi Hendrix track I&#8217;m listening to right now is the same one he recorded in 1969.</span></p>
<p>The App Store in iTunes fails to address these fundamental differences between their latest offering and what has been offered previously (media.) There is so much potential here: iTunes could be a great way for developers to collect feedback and find problems. Instead, we get gems like these:</p>
<blockquote><p><span class="entry-content">The icon to this App scares me so much&#8230; That I&#8217;m too afraid to install the App. That bird looks angry </span><span class="entry-content">like it wants to peck my eyes out for even concidering [sic] to install the application.</span></p></blockquote>
<blockquote><p>If you are gullible enough to watch FOX &#8220;News,&#8221; then you are gullible enough to download this app and work for them for FOX for free&#8211; you already are in a way, just  by watching. This would be a great app for those of you that like to monitor &#8220;ethnic&#8221; types when the nation goes to &#8220;Code Orange,&#8221; or, God forbid, &#8220;Code Red!&#8221; <span class="entry-content">Make sure you have this app when you&#8217;re digging your bomb shelter or spying on your neighbors&#8217; subversive activities.</span></p></blockquote>
<p>What makes this worse is that flagging reviews as inappropriate content seems to have no effect. I have flagged reviews of my own products, and those of other developers, and nothing has changed. If Apple wants developers and users alike to take this system seriously, they must address this problem immediately. Yes, it&#8217;s tedious and costly to do this review, but with continued neglect this system will end up being like YouTube for software.</p>
<p>If you have doubts that this will happen, take a look at the most helpful review for <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=283853762&amp;mt=8">Band</a>. Users are already learning how to game the system.</p>
<p>Some have suggested that buying the app should be a requirement before leaving a review. I agree, but this will not completely mitigate the need to vet content. A large percentage of applications are free: the trolls will just download before going on their merry way.</p>
<p>If all of this wasn&#8217;t depressing enough for developers, I&#8217;ll leave you with my biggest disappointment: reviews are a one way street. I&#8217;m not one to feed the trolls, but many of the reviews I&#8217;m seeing would benefit from a &#8220;Just try this&#8230;&#8221; or &#8220;We&#8217;re working on that&#8230;&#8221; type of response. There&#8217;s not even a link to our support on the reviews page.</p>
<p>I remain hopeful that someone at Apple will see what&#8217;s going on and have the power to fix it. My only advice would be to act quickly: the longer you wait, the harder it will be to clean things up.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/07/16/listeners-found-this-review-helpful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brain surgeons</title>
		<link>http://furbo.org/2008/03/16/brain-surgeons/</link>
		<comments>http://furbo.org/2008/03/16/brain-surgeons/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 00:57:11 +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/2008/03/16/brain-surgeons/</guid>
		<description><![CDATA[Unless you&#8217;ve been stranded on a remote Pacific isle, you&#8217;re no doubt aware of the current furor over third party iPhone applications not being able to run in the background. To be blunt, I&#8217;ve never seen so many experts without a fricken&#8217; clue. If you haven&#8217;t written code using the jailbreak tool chain, your opinions [...]]]></description>
			<content:encoded><![CDATA[<p>Unless you&#8217;ve been stranded on a remote Pacific isle, you&#8217;re no doubt aware of the current furor over third party iPhone applications not being able to run in the background. To be blunt, I&#8217;ve never seen so many experts without a fricken&#8217; clue. If you haven&#8217;t written code using the jailbreak tool chain, your opinions on the iPhone SDK, based entirely on what you see in a simulator, just aren&#8217;t relevant. You might as well be explaining the nuances of brain surgery.</p>
<p>As someone who has been involved in iPhone development <a href="http://furbo.org/2007/08/19/mobiletwitterrific/">for the past six months</a>, please let me offer you a healthy dose of reality.</p>
<p><a href="http://iconfactory.com/software/twitterrific">Twitterrific</a> on the iPhone could definitely make use of a background process to gather new tweets. In fact, a prototype version of the software did just that. And it was a huge design failure: after doing XML queries every 5 minutes, the phone&#8217;s battery was almost dead after 4 hours. In fact, the first thing I said after giving <a href="http://daringfireball.net">Gruber</a> this test version was &#8220;don&#8217;t use auto-refresh.&#8221;</p>
<p>The heart of the problem are the radios. Both the EDGE and Wi-Fi transceivers have significant power requirements. Whenever that hardware is on, your battery life is going to suck. My 5 minute refresh kept the hardware on and used up a lot of precious power.</p>
<p>(Those of you under NDA with the iPhone SDK should take a look at the documentation for Core Location. After reading about how it should be used, you&#8217;ll understand why getting your location in Maps and similar applications is only done on an &#8220;as needed&#8221; basis.)</p>
<p>And right about now, you&#8217;re thinking &#8220;But I&#8217;ll be smart about how I use the hardware.&#8221; Sorry, bucko, but you&#8217;re the exact reason why we don&#8217;t have background processing in the current SDK. You&#8217;re living in your own little dream world.</p>
<p>What happens when App A uses the network at 5 minutes past the hour, and App B uses it at 10 minutes past, and App C uses it at 15 minutes past, and so on? There&#8217;s no way for you to know what other apps are doing is there? And yet the battery is still taking a pounding.</p>
<p>In my opinion, such a scenario is quite likely. As a satellite device, the iPhone requires contact with other machines to do interesting things. Periodically hitting the network is the primary reason that developers want to run in the background.</p>
<p>Some have stated that Apple is limiting innovation. My opinion is that they are helping us from collectively shooting ourselves in the feet.</p>
<p>It takes several months of actual iPhone development before you eventually realize that the iPhone requires a completely different mindset. Until that happens, you&#8217;ll make assumptions based on desktop experience, and that in turn will lead to a lot of bad designs.</p>
<p>For what it&#8217;s worth, I think Apple will address this issue in the future. I can imagine a solution based on a plug-in (bundle) architecture that lets your application do things when the phone decides it&#8217;s a good time (not when you decide it&#8217;s a good time.) If the radios go on because you&#8217;re checking Mail, then you get a &#8220;network active&#8221; notification and a chance to run some short-lived TCP/IP connections. If you take too long, you&#8217;d get killed, much like Safari does with Javascript that runs too long.</p>
<p>Do I expect such a sophisticated system to be available in a beta of version 1.0? Hell no. And neither should you.</p>
]]></content:encoded>
			<wfw:commentRss>http://furbo.org/2008/03/16/brain-surgeons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
