<?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>Talk Funnel</title>
	<atom:link href="http://ramin.firoozye.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ramin.firoozye.com</link>
	<description>Ramin Firoozye&#039;s (occasional) Public Whisperings</description>
	<lastBuildDate>Sat, 05 May 2012 03:03:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Siri and third-party apps &#8211; Part I</title>
		<link>http://ramin.firoozye.com/2012/05/04/siri-and-third-party-apps-part-1/</link>
		<comments>http://ramin.firoozye.com/2012/05/04/siri-and-third-party-apps-part-1/#comments</comments>
		<pubDate>Fri, 04 May 2012 18:09:27 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=354</guid>
		<description><![CDATA[Apple&#8217;s Siri personal assistant was one of the main advertised features of the iPhone 4S. It is a marriage of speaker-indepent voice-recognition technology and domain-aware AI. What sets it apart is how it&#8217;s integrated with back-end and on-device services and how it maintains context across multiple requests so it feels like you&#8217;re having a conversation [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ramin.firoozye.com/wp-content/uploads/2012/05/ZZ01A9E84C.jpg"><img src="http://ramin.firoozye.com/wp-content/uploads/2012/05/ZZ01A9E84C.jpg" id="blogsy-1336186954363.622" class="alignleft size-full wp-image-357" width="206" height="237" alt="Siri on iPhone 4S"/></a>Apple&#8217;s Siri personal assistant was one of the main advertised features of the iPhone 4S. It is a marriage of speaker-indepent voice-recognition technology and domain-aware AI. What sets it apart is how it&#8217;s integrated with back-end and on-device services and how it maintains context across multiple requests so it feels like you&#8217;re having a conversation with an intelligent assistant instead of barking orders at a robot minion.</p>
<p>Once you get past the immediate thrill of having your phone understand your commands, talk back, and crack jokes, you quickly realize how much more powerful this all could be if Siri could do more than the relatively limited range of tasks it can currently perform.</p>
<p>That is, until you discover that Siri is a walled garden.</p>
<p>The entire iOS platform is predicated on the premise that third parties can add new features to the stock system provided by Apple. But here we have a seemingly closed system in which third-parties can not participate. As usual, Apple is mumm about whether a Siri SDK will ever be released.</p>
<p>But the question of <em>how</em> third-party apps <em>could</em> participate in Siri has been nagging at me since I first got my hands on an iPhone 4S and started playing with it. As I thought about it more I realized that for a third-party app to play in the Siri playground, there would have to be some profound changes in the way we develop iOS apps.</p>
<p>To first realize the scope of what Siri could do we should walk through a few use-cases of its current capabilities.</p>
<p><a href="http://ramin.firoozye.com/wp-content/uploads/2012/05/ZZ520F9EEB.jpg"><br /></a><a href="http://ramin.firoozye.com/wp-content/uploads/2012/05/ZZ520F9EEB1.jpg"><img src="http://ramin.firoozye.com/wp-content/uploads/2012/05/ZZ520F9EEB1.jpg" id="blogsy-1336186954422.907" class="alignright size-full wp-image-359" width="172" height="181" alt=""/></a>Let&#8217;s take the case of creating an appointment. We invoke Siri by holding down the home button which brings up a standard modal interface and turns on the microphone. We speak the words &#8220;make lunch appointment with John tomorrow at noon.&#8221; Siri goes into processing mode, then generates a voice-synthesized message asking which &#8220;John&#8221; you would like to schedule a meeting with. The list of possible particpants has been garnered from the addressbook. You respond by saying, say, &#8220;John Smith&#8221;. Siri then displays a mini-calendar (which closely resembles a line entry in the standard calendar), makes note of any other conflicts, then asks for you to confirm. You respond &#8216;yes&#8217; and the event has been entered into your calendar (and distributed out via iCloud or Exchange).</p>
<p>Let&#8217;s break down what Siri just did:</p>
<ol>
<li>It put up a system-modal dialog.</li>
<li>It captured some audio for processing.</li>
<li>It processed the audio and converted it to text (often without previous training to adapt to a specific person&#8217;s voice).</li>
<li>It managed to elicit enough context form the text to determine the request had to do with a calendar action.</li>
<li>It extracted the name of an individual out of the text and matched it against the addressbook.</li>
<li>It determined that the request was not specific enough and responded with a request for clarification. This request contained more data (list of other Johns) based on a search of the addressbook.</li>
<li>It converted the request to a synthesized voice.</li>
<li>The response was again recorded and processed for text recognition. It should be noted that one of the marvels of Siri is by going through a dialog, where each individual response is considered in the context of previous requests. When Siri offers a list of Johns, your response is &#8216;John Smith.&#8217; Taken out of context, it would not make any sense, but Siri maintained context from a previous request and handled the response properly.</li>
<li>Once confirmed, the event was scheduled with the calendar service.</li>
<li>The system modal dialog can now be dismissed.</li>
</ol>
<p>First, let&#8217;s consider whether Siri does voice-to-text recognition on the device itself or uses server resources. This is easy to verify. Put the phone into airplane mode and Siri can no longer operate so it&#8217;s likely it uses the server to do some (or all) of its recognition.</p>
<p><a href="http://ramin.firoozye.com/wp-content/uploads/2012/05/ZZ1067EEA61.jpg"><img src="http://ramin.firoozye.com/wp-content/uploads/2012/05/ZZ1067EEA61-150x39.jpg" id="blogsy-1336186954419.0654" class="alignright size-thumbnail wp-image-361" width="150" height="39" alt=""/></a>But how did Siri recognize that this was a calendar-related request (vs. a navigation one). It appears that once the voice data has been converted to text form, that the system categorizes the request into <em>domains</em>. By categorizing into well-defined domains the range of actions can be quickly narrowed. Having support for a sufficiently rich set of primitives within each domain creates the illusion of freedom to ask for anything. But of course, there are limits. Use an unusual word or phrase and it soon becomes obvious the vocabulary range has boundaries.</p>
<p>Once the action has been determined (e.g. <em>schedule event</em>) a particular set of slots need to be filled (who, when, where, etc.) and for each slot Siri apparently maintains a context and engages in a dialog until a minimum viable data set has been properly obtained. For example, if we ask it to &#8216;<em>make an appointement with John Smith&#8217;</em> Siri will ask <em>&#8216;OK&#8230; when&#8217;s the appointment?&#8217;</em> and if we say &#8216;<em>tomorrow&#8217;</em> it will come back and ask <em>&#8216;What time is your appointment?&#8217;</em> Once you&#8217;ve narrowed it down to <em>&#8216;noon&#8217;</em> it can proceed to make the appointment with the calendar service.</p>
<p>By all appearances it maintains a set of questions that require an answer in order for it to accomplish a task and it iterates until those answers are obtained. Note that in this context a <em>place</em> was not required but if offered it is used to fill out the location field of a calendar entry. Some slots are required (who and when) but others are optional (where). It should also be noted that in its current state, Siri can easily be confused if given superfluous data:</p>
<blockquote><p>Make lunch appointment with John Smith at noon tomorrow in San Francisco wearing a purple suit.</p></blockquote>
<p>The actual event is recognized as <em>Purple suite with John Smith</em> with the location marked as <em>San Francisco wearing</em>.</p>
<p>Once all the required slots have been filled the actual act of creating a calendar entry is pretty straightforward since iOS offers an internal API for accessing the calendar database.</p>
<p>But Siri is not limited to just calendar events. As of first release the list of services available via Siri include:</p>
<ul>
<li>Phone</li>
<li>iPod/Music</li>
<li>Messages</li>
<li>Calendar</li>
<li>Reminders</li>
<li>Maps and Directions</li>
<li>Email</li>
<li>Weather</li>
<li>Stocks</li>
<li>Clock, Alarm, and Timer</li>
<li>Address Book</li>
<li>Find My Friends</li>
<li>Notes</li>
<li>Web Search</li>
<li>Search via WolframAlpha</li>
<li>Nearby services and reviews via Yelp</li>
</ul>
<p>Several of these services (e.g. weather, stocks, Find My Friends, notes, and WolframAlpha) do not advertise a publicly accessible API. This means that for Siri to work with them, the service had to be modified so it could have an integration point with Siri.</p>
<p>It is the nature of this integration point which would be of interest to software developers and in the next post we&#8217;ll explore it a little more to see how Apple might integrate with third-parties if it chose to open up Siri to other apps.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2012/05/04/siri-and-third-party-apps-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Interface Rorschach Text</title>
		<link>http://ramin.firoozye.com/2011/07/29/user-interface-rorschach-text/</link>
		<comments>http://ramin.firoozye.com/2011/07/29/user-interface-rorschach-text/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 22:36:53 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=343</guid>
		<description><![CDATA[Job&#8217;s done. Fix it or leave it alone?   Image via Reddit.]]></description>
			<content:encoded><![CDATA[<p>Job&#8217;s done. Fix it or leave it alone?</p>
<p> </p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://ramin.firoozye.com/wp-content/uploads/2011/07/bathroom.png" border="0" alt="Bathroom" width="332" height="600" /></p>
<p>Image via <a href="http://www.reddit.com/r/pics/comments/j3iwt/i_twitch_everytime_i_go_to_the_bathroom_at_work/">Reddit</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2011/07/29/user-interface-rorschach-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Owning a Character</title>
		<link>http://ramin.firoozye.com/2011/07/01/owning-a-character/</link>
		<comments>http://ramin.firoozye.com/2011/07/01/owning-a-character/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 23:01:43 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[plus]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=340</guid>
		<description><![CDATA[Clayton Miller makes a good case that every OS tries to &#8216;own&#8217; a shape as a means of creating a strong visual identify. A parallel can be drawn to how online services become strongly associated with certain letters of the alphabet. Old timers may remember that in the early days of UUCP the ! exclamation mark [...]]]></description>
			<content:encoded><![CDATA[<p>Clayton Miller <a href="http://interuserface.net/2011/06/own-a-shape/">makes a good case</a> that every OS tries to &#8216;own&#8217; a shape as a means of creating a strong visual identify. A parallel can be drawn to how online services become strongly associated with certain letters of the alphabet.</p>
<p>Old timers may remember that in the early days of UUCP the <em>!</em> exclamation mark (also called the <em>bang path</em>) was used to designate the address route from a sender to a receiver. It was common practice to tell someone you could be reached at <em>site!foovax!machine!username.</em></p>
<p>The <em>@</em> (<a href="http://en.wikipedia.org/wiki/At_sign">at-sign</a>) superceded the bang path and was for years associated with an email address (i.e.<em> user@domain</em>). Then Twitter came along and adopted it as a designator for an individual (ie. <em>@twitterhandle</em>). Along the way Twitter also turned the <em>#</em> (<a href="http://www.nytimes.com/2011/06/12/fashion/hashtags-a-new-way-for-tweets-cultural-studies.html">hashtag</a>) into a common designator for a topic abbreviation.</p>
<p>Google&#8217;s Plus service has just opened its doors and you can guess at the scope of Google&#8217;s ambitions by the way they&#8217;re using one of the most common punctuation marks: the <em>+</em> (plus sign). This is used throughout the service as a designator for a user profile. In a <a href="https://plus.google.com/117840649766034848455/posts/FddaP6jeCqp">note posted to the Plus service</a> Andy Hertzfeld references a number of his colleagues that also worked on the Plus service.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://ramin.firoozye.com/wp-content/uploads/2011/07/pluspost.png" border="0" alt="Pluspost" width="394" height="135" /></p>
<p>Notice how links to an individual&#8217;s profile are shown. There is ubiquitous use of the <em>+</em> character through other parts of the service as well:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="http://ramin.firoozye.com/wp-content/uploads/2011/07/plusheader.png" border="0" alt="Plus Header" width="369" height="88" /></p>
<p>Even the URL for the service gets in on the act: <a href="http://www.google.com/+">http://www.google.com/+</a></p>
<p>It&#8217;s obvious this is a conscious choice on Google&#8217;s part to create a strong association and help adopt the letter for itself. You&#8217;ll know the grab has been successful when <em>+ First Lastname</em> starts popping up on business cards the same way <em>@username</em> started showing up with no explanation needed.</p>
<p>To complete the process Google will have to take two more steps:</p>
<ol>
<li>Allow a Google profile to have a real name instead of the current numeric designator. My Google profile is: <a href="https://plus.google.com/100474999684775059354">https://plus.google.com/100474999684775059354</a>. It should be <em>https://google.com/+/ramin firoozye</em> or at the very least <em>https://plus.google.com/ramin firoozye</em><em>.</em> Naturally, there will be contention for common names, but that&#8217;s an unavoidable problem on just about every service. Both <a href="http://www.linkedin.com/in/raminfiroozye">LinkedIn</a> and <a href="https://www.facebook.com/firoozye">Facebook</a> support shortened URLs with names pointing to public profiles.</li>
<li>Modify the Google search engine so names prefixed with a <em>+</em> are automatically looked up in the Google Plus or Profile service. The Google search box is everywhere. It should be easy to look someone up by simply entering <em>+name</em> in the search box. This might be a little tough since <em>+</em> is also a boolean operator in the Google search world. But they could make an exception for a single-word search if it starts with a <em>+</em>.</li>
</ol>
<p>It looks like the we&#8217;re in the early stages of the battle of the profiles. Trying to own the <em>+</em> sign is a smart move. Watch for other services as they try to mark their territory on the keyboard.</p>
<p>I&#8217;ve got dibs on<em>?ramin</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2011/07/01/owning-a-character/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2011 New Year&#8217;s Resolutions</title>
		<link>http://ramin.firoozye.com/2010/12/30/2011-new-years-resolutions/</link>
		<comments>http://ramin.firoozye.com/2010/12/30/2011-new-years-resolutions/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 09:38:31 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[World]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=325</guid>
		<description><![CDATA[2010 was a pretty incredible year both professionally and personally. My iPhone app ended up winning Macworld Best of Show a few weeks after release. I was part of the team that developed the iPad Slot Machine app which won &#8220;Coolest App&#8221; award at the first iPadDevCamp (that&#8217;s my Tinker Toy iPad stand pictured in [...]]]></description>
			<content:encoded><![CDATA[<p>2010 was a pretty incredible year both professionally and personally. My <a href="http://autoparkapp.com" target="_blank">iPhone app</a> ended up winning Macworld Best of Show a few weeks after release. I was part of the team that developed the iPad Slot Machine app which won &#8220;Coolest App&#8221; award at the first <a href="http://gigaom.com/apple/ipaddevcamp-the-future-of-ipad-apps/" target="_blank">iPadDevCamp</a> (that&#8217;s my <a href="http://www.flickr.com/photos/raminf/sets/72157623782494178/with/4506098109/" target="_blank">Tinker Toy iPad stand</a> pictured in <a href="http://gigaom.com/apple/ipaddevcamp-the-future-of-ipad-apps/" target="_blank">this article</a>, btw).</p>
<p>The best event by far, however, was our small family expanding by a happy, healthy, rambunctious +1.</p>
<p>The rest of the year was mostly a blur of WWDC, iOSDevcamps, and building cool iOS projects for clients. I did end up making time for a side project and I hope it will turn into a main project in the coming year. It&#8217;s not quite ready yet but I&#8217;ve shown it privately here in Silicon Valley and had a lot of positive feedback.</p>
<p>I don&#8217;t mean to build it up too much but it&#8217;s my biggest project yet, going back and revisiting some of the original ideas behind web technology and relating it to the mobile world. I&#8217;m calling it <a href="http://transomapp.com/" target="_self">Transom</a>. There&#8217;s still some work left but I hope to be able to share it openly in early 2011.</p>
<p>As far as New Year&#8217;s resolutions go, I&#8217;d like to make time to post more often and not only on coding matters but also broader topics of technology trends, its impact on our lives, and about subjects I think need to be talked about. I&#8217;m excited about the coming year &#8212; about life and tech and society &#8212; and hope to do a decent job of conveying that enthusiasm.</p>
<p>See you on the flip side and Happy New Year!</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2010/12/30/2011-new-years-resolutions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple Solution to iPhone 4 Antenna Problem</title>
		<link>http://ramin.firoozye.com/2010/07/02/simple-solution-to-iphone-4-antenna-problem/</link>
		<comments>http://ramin.firoozye.com/2010/07/02/simple-solution-to-iphone-4-antenna-problem/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 22:14:45 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=315</guid>
		<description><![CDATA[Before: After: I&#8217;m not an antenna engineer but it seems like the simplest solution would be to move the &#8216;gap&#8217; between the two antennae where it&#8217;s unlikely to be covered through casual touch. This would work for both left and right-handed users. From a hand-placement point-of-view the ideal spot would be in the middle of [...]]]></description>
			<content:encoded><![CDATA[<p>Before:</p>
<p><img src="http://ramin.firoozye.com/wp-content/uploads/2010/07/iphone4-before.png" border="0" alt="iphone4-before.png" width="500" height="317" /></p>
<p>After:</p>
<p><img src="http://ramin.firoozye.com/wp-content/uploads/2010/07/iphone4-after.png" border="0" alt="iphone4-after.png" width="500" height="317" /></p>
<p>I&#8217;m not an antenna engineer but it seems like the simplest solution would be to move the &#8216;gap&#8217; between the two antennae where it&#8217;s unlikely to be covered through casual touch. This would work for both left and right-handed users.</p>
<p>From a hand-placement point-of-view the ideal spot would be in the middle of the cable connector but that could introduce structural issues with the plug.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2010/07/02/simple-solution-to-iphone-4-antenna-problem/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Visitor&#8217;s Guide to WWDC and San Francisco</title>
		<link>http://ramin.firoozye.com/2010/06/04/a-visitors-guide-to-wwdc-and-san-francisco/</link>
		<comments>http://ramin.firoozye.com/2010/06/04/a-visitors-guide-to-wwdc-and-san-francisco/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 09:14:21 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[San Francisco]]></category>
		<category><![CDATA[wwdc]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=261</guid>
		<description><![CDATA[It&#8217;s time, once again, for the annual love-fest that is WWDC and that starts next week. I&#8217;ve been to each one since the iPhone launch (I know, that makes me a relative newbie) but having spent a good chunk of the past two decades living in San Francisco, I figured I&#8217;d combine tech-tips for first-time [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: right;" src="http://ramin.firoozye.com/wp-content/uploads/2010/06/wwdc20102.jpg" border="0" alt="wwdc2010.jpg" width="144" height="150" /></p>
<p>It&#8217;s time, once again, for the annual love-fest that is <a href="http://developer.apple.com/wwdc/">WWDC</a> and that starts next week. I&#8217;ve been to each one since the iPhone launch (I know, that makes me a relative newbie) but having spent a good chunk of the past two decades living in San Francisco, I figured I&#8217;d combine tech-tips for first-time attendees with social things to do for out-of-towners.﻿</p>
<h3>Tech Tips</h3>
<ul>
<li>You can register and get your badge on Sunday, the day before WWDC starts. That saves you a bit of time doing it on Monday when everyone stands in line to get into the keynote speech. If you do go in on Sunday then you may want to pop into <a href="http://sfmacindie.com/">sfMacIndie</a> at <a href="http://sanfrancisco.jilliansbilliards.com/">Jillian&#8217;s</a> in the Metreon at 6pm. It&#8217;s across the street from Moscone West. Grab a drink and chat up fellow developers. You may want to pace yourself. The next day is the big event and you want to be able to get there early &#8212; at least by 8am if not sooner. They don&#8217;t start letting you in until 9:30am so wear comfy shoes. Make sure to say hi to fellow line-standers as you hop from foot-to-foot trying to stay warm.</li>
<li>This is San Francisco. In June. This means chances of early morning sun are slim to none. Standing in line for the keynote means no moving for hours in the cold, blowing fog. Unless you&#8217;re seriously thick-skinned (like the poor, freezing <a href="http://venturebeat.com/wp-content/uploads/2009/06/iporn.jpg">iPorn girls</a> of last year) bring layers and be prepared to discard them as the day wears on and temperatures rise.</li>
<li>The on-screen keyboard on the iPad is nice, but don&#8217;t forget your laptop. You will want to take notes. Lots of notes. And fast. As <a href="http://www.marco.org/661870733">Marco Arment says</a> WWDC is one giant info-dump and there is no way to absorb everything. You&#8217;ll need a real keyboard to keep up. I like to create separate folders for each session and save note files in TextMate. Under each folder you can also save sample code for the sessions. Then I throw the whole top-level folder into TextMate as a project so I can quickly search and find what I&#8217;m looking for. I suggest you try to capture as much as you can while there and take time later to go over things. They were pretty quick about posting up the videos of each session last year, but there&#8217;s no replacement for one&#8217;s own notes.</li>
<li>Head down to the lunch area on the ground floor around noon. The food&#8217;s nothing to write home about (yeah, I&#8217;m being polite) but it&#8217;s a good chance to meet people and find out common interests. Most of the other times you&#8217;ll be standing in line or in-session. This is your chance to have a decent conversation and who knows, learn a thing or two from fellow developers. I&#8217;ve always enjoyed these random encounters.</li>
<li>If you have questions or want to get feedback from Apple engineers and designers, sign up for the labs and do it early. Spaces fill up fast, especially for the UI Design reviews. Drift down to the cafeteria area on the ground floor and find out what the sign-up protocol is. On the rare occasion there isn&#8217;t an interesting session, hover around the lab areas. You&#8217;ll pick up great info just by listening to Apple folks explain how things work.</li>
<li>Try to bring a Verizon or Sprint MiFi. The Apple-supplied WiFi network is OK, but most of the time it gets overloaded. Forget AT&amp;T&#8217;s 3G network. It&#8217;s a joke. With most people carrying a MacBook, an iPhone, and an iPad, your best bet is to bring your own network. The downside to this is you probably won&#8217;t be able to access the WWDC attendee-only content accessible to those on the network there. But once you&#8217;ve snagged all the goodies you can switch back to your own network and zip along. [<em>Update:</em> OK, maybe <a href="http://gigaom.com/2010/06/07/steve-jobs-survives-gizmodo-but-not-mifi/?utm_source=gigaom&amp;utm_medium=recent-posts">not such a good idea</a> if everyone turns them on at once.]</li>
<li>If you bring your own network, make sure you set a secure password for access to the wireless hub. And for crying out loud, don&#8217;t make it the 40-bit WEP. Go for the WPA2. Way too many people running <a href="http://www.wireshark.org/">Wireshark</a> or <a href="http://www.kismetwireless.net/">Kismet</a> out there. Also, while you&#8217;re at home set up all your network devices to log in, then set the hub to not broadcast its SSID. That way all those other people around you won&#8217;t have to scroll through a gajillion wireless hotspot names.</li>
<li>Bring a comfortable backpack. The one they&#8217;ve been handing out to WWDC attendees the last few years is pretty minimalistic. If you need space for all your gear (and an extra sweater) then bring your own. Don&#8217;t worry about food, unless you need to snack often. They provide bagels and cookies and whatnot to keep you fueled up.</li>
<li>Sync up your dev iPhone or iPad at home and back everything up. There&#8217;s a good chance there will be a new SDK drop there with a bunch of new goodies. Recommend you not try to download over the WiFi. Walk over to one of the round tables outside the session rooms and plug into the Ethernet firehose. Much, much faster.</li>
<li>Please, oh please remember to turn down the volume on your phone/iPad/Mac during sessions. Yes, you know you&#8217;re on Twitter and now we do too. You can thank <a href="http://furbo.org/">chirping bird man</a> for that.</li>
<li>If your backside is sore from all the sitting down or you feel like taking a quick nap, there are bean-bags on the top floor. First come-first serve.</li>
<li>If you&#8217;re looking for a job or have a job to post there are white-boards in the bean-bag lounge area.</li>
<li>Stash a power-strip in your pack &#8212; it&#8217;s a good way to make friends.  Among tech conferences WWDC is one of the better ones for providing power to attendees. Even so, they sometimes run out of plugs. I&#8217;m partial to the <a href="http://www.monstercable.com/productdisplay.asp?pin=4220">Monster Outlets to Go</a> units. They&#8217;re small and you can charge up most of your devices in one sitting. Some models even come with built-in USB charging ports. While you&#8217;re at it remember to bring separate power-to-USB adapters for your iPhone and iPad. The iPhone is happy with the <a href="http://store.apple.com/us/product/MB352LL/B">small 5W units</a> but the iPad needs the beefier <a href="http://store.apple.com/us/product/MC359LL/A">10W adapters</a>. If space is a premium you may want to grab a couple of <a href="http://www.amazon.com/gp/product/B00295RB3S">retractable USB cables</a> too.</li>
<li>If you&#8217;re missing anything or forget to bring any hardware, your two nearby geek supply outlets are the <a href="http://www.apple.com/retail/sanfrancisco/">Apple Store</a> on Stockton Street and <a href="http://www.centralcomputers.com/">Central Computer</a> on Folsom at 4th.</li>
</ul>
<p>OK, so much for the conference itself. What about the social life?</p>
<h3>Organized Events</h3>
<p>Here&#8217;s a good reference for organized after-session gatherings: <a href="http://wwdcparties.com/">http://wwdcparties.com﻿</a>. On Tuesday between 7:30 and 10:30 pm, however, a lot of people will likely head over to the Apple Design Awards ceremony. A large number will stick around for the Stump the <span style="text-decoration: line-through;">Chumps</span> Experts session. On Thursday night Apple throws a bash in Yerba Buena Gardens. You&#8217;ll need your WWDC badge to get in. If you&#8217;re of drinking age you&#8217;ll need to get a wrist-band at Moscone before heading over. Pace yourself on the booze if you plan on hitting any other places afterward. You get all the food and beer you can consume plus a (surprise) live musical act. And there&#8217;s still Friday&#8217;s sessions left.</p>
<h3 style="font-size: 1.17em;">Quick Eats</h3>
<p>If you get tired of eating pre-packaged sandwiches and are hankering for something slightly different, here are a few places within easy walking distance of Moscone. However, no guarantee they&#8217;ll get you in and out in time for the afternoon sessions:</p>
<ul>
<li><a href="http://westfield.com/metreon/ourstores/all-dining-2043.html">Food court at Metreon</a> - Walk across the street, grab yourself something and go sit outside in Yerba Buena Gardens to decompress. Absolutely glorious if it&#8217;s sunny.</li>
<li><a href="http://www.chow.com/restaurants/39386/taqueria-cancun">Taqueria Cancun</a> - Bit of a hike up on 6th and Market, but decent enough Mexican fare.</li>
<li><a href="http://www.outthedoors.com/">Out the Door</a> &#8211; (sorry, Flash site) is by the same people who run the outstanding <a href="http://slanteddoor.com/">Slanted Door</a> in the Ferry Building. This one&#8217;s in Westfield (Nordstrom) shopping center on Market and 5th.</li>
<li><a href="http://www.specialtys.com/">Specialty&#8217;s</a> &#8211; Great sandwiches. Best part is they have an <a href="http://www.specialtys.com/mobile">iPhone-friendly ordering service</a>. Closest one is on New Montgomery between Mission and Market.</li>
<li><a href="http://www.thesentinelsf.com/">The Sentinel</a> &#8211; I haven&#8217;t eaten there yet, but people keep recommending it and it&#8217;s top of my list for lunch places to try. Fancy-looking sandwiches.</li>
</ul>
<h3 style="font-size: 1.17em;">Coffee</h3>
<p>The swill they serve at WWDC may be fine for getting you over your previous night&#8217;s hangover, but you owe it to yourself to get some decent coffee while in town. Good places within walking distance:</p>
<ul>
<li><a href="http://bluebottlecoffee.net/cafe.html">Blue Bottle</a> - Just go. Get the Latte if you&#8217;re in a hurry or the drip coffee if you have time. Don&#8217;t worry, it&#8217;ll make sense once you get there.</li>
<li><a href="http://www.peets.com">Peet&#8217;s</a> - Closest one is on Mission between 3rd and New Montgomery. Strong coffee. Puts hair on your chest, whether you want it or not.</li>
<li><a href="http://www.chatz.com/">Chatz</a> - Bit of a hike on 2nd Street between Howard and Folsom, but good place to go if your feet need some stretching.</li>
</ul>
<h3>﻿Local Watering Holes</h3>
<p>For some reason after a day of technical brain-melding a lot of people are extra-primed to kick back and partake of adult beverages. Go figure. If that&#8217;s what you&#8217;re looking to do, here&#8217;s a number of local hangouts where you are sure to bump into fellow WWDC attendees:</p>
<ul>
<li><a href="http://sanfrancisco.jilliansbilliards.com/">Jillian&#8217;s</a> &#8211; It&#8217;s across the street, doubles as a sports bar, has a large selection of beers on tap, and has pool tables in the back.</li>
<li><a href="http://www.thirstybear.com/">Thirsty Bear Brewing</a> &#8211; Upscale brewpub. Decent beers and Tapas-style dishes, only a block away.</li>
<li><a href="http://www.thechieftain.com/">Chieftain&#8217;s</a> &#8211; Grungy Irish pub. First stop for a lot of die-hard old-timers before they inexplicably head all the way out to&#8230;</li>
<li><a href="http://www.tommystequila.com/">Tommy&#8217;s Mexican Restaurant</a> &#8211; A favorite of Apple folks, but it&#8217;s all the way out in outer Richmond. With places like <a href="http://www.tresagaves.com/locations/sf">Tres Agaves</a> or dive bars like City Bar in the Mission you&#8217;d think someone would try to find something more accessible. It&#8217;s far away, in the fog zone, and the place is usually mobbed but if you do decide to head out to Tommy&#8217;s try to snag a ride with someone else&#8211;preferably a teetotaler. There&#8217;s a chance you&#8217;ll end up slamming tequila shots and trust me, you won&#8217;t want to be driving, flagging down a rare cab, or being at the mercy of Muni late at night.</li>
<li><a href="http://www.harlotsf.com/">Harlot</a> &#8211; Decent, but small. Odds are there will be a line to get in.</li>
<li><a href="http://www.starwoodhotels.com/whotels/property/overview/index.html?propertyID=1153">XYZ bar at W Hotel</a> &#8211; Upscale drink spot. Excellent place to hang out if you&#8217;re on a corporate expense account or your app just cracked the Top 10.</li>
</ul>
<h3>A little further out &#8212; but still worth it</h3>
<p>Want to pretend you&#8217;re a local? Some are a bit of a walk, but if you get in with a group of fellow developers and want to get out of the Folsom/Howard zone, here are a few places to try (in no particular order):</p>
<ul>
<li><a href="http://theirishbank.com/">Johnny Foley&#8217;s</a> - Irish Pub within walking distance. It can get a bit touristy, but there&#8217;s nightly live music and (natch) Guinness on tap.</li>
<li><a href="http://www.zeitgeistsf.com/">Zeitgeist</a> - Sort of a cross-road of cultures and styles. No other way to describe it.</li>
<li><a href="http://www.sfstation.com/orbit-room-cafe-a892">Orbit Room Cafe</a> - Best damn Bloody Marys in town.</li>
<li><a href="http://www.thehotelutahsaloon.com/">Hotel Utah</a> - Grungy local spot, sometimes with good music.</li>
<li><a href="http://www.bottomofthehill.com/">Bottom of the Hill</a> - Great place for local live indy bands. Out in Potrero Hill (accessible via the Muni T-line) but the music&#8217;s usually worth the trip.﻿</li>
<li><a href="http://asiasf.com/">AsiaSF</a> - The waitresses double as transgender stage performers &#8212; and they&#8217;re awesome.</li>
<li><a href="http://www.21st-amendment.com/">21st Amendment Brewery</a> - Big with the local tech types floating around 2nd street. Decent brews.</li>
</ul>
<p>Obviously I&#8217;m leaving a lot out, but this should give you a decent starting point. Feel free to post any corrections or favorites in the comments. Hope to see you all at WWDC. If anyone wants to look me up and say hi, I&#8217;m <a href="http://twitter.com/raminf">@raminf</a> on Twitter.</p>
<p> </p>
<p><em>Update</em>: Added a few more places &#8212; for those in a hurry to get back to hacking and getting their mind blown.</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2010/06/04/a-visitors-guide-to-wwdc-and-san-francisco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AutoPark: my first iPhone app</title>
		<link>http://ramin.firoozye.com/2010/02/01/autopark-my-first-iphone-app/</link>
		<comments>http://ramin.firoozye.com/2010/02/01/autopark-my-first-iphone-app/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 16:30:01 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[autopark]]></category>
		<category><![CDATA[frolicware]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=256</guid>
		<description><![CDATA[There&#8217;s been a lot of behind-the-scenes activity around these parts and I hope to be posting more actively from here on out. But first I&#8217;d like to announce my first iPhone product on the AppStore, published under the FrolicWare label: AutoPark: Say Goodbye to Parking Tickets. It lets you keep track of time on your [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been a lot of behind-the-scenes activity around these parts and I hope to be posting more actively from here on out. But first I&#8217;d like to announce my first iPhone product on the AppStore, published under the <a href="http://frolicware.com" target="_blank">FrolicWare</a> label:</p>
<p><img src="http://d1avqodpi540yc.cloudfront.net/i/screenshots/ap06s.png" alt="" /></p>
<p><a href="http://autoparkapp.com" target="_blank">AutoPark</a>: <em>Say Goodbye to Parking Tickets.</em> It lets you keep track of time on your meter so you avoid parking tickets. It uses push notifications to send out an early-warning and a separate meter expiration alarm. The intent behind it, however, was to be an all-in-one driving assistant so it does a few more things, like:</p>
<ul>
<li>Help find a parked car using the GPS.</li>
<li>Remember where you parked in a parking lot (floor, section, color zone, etc).</li>
<li>Work with or without push alarms enabled (if away from the data network).</li>
<li>Track time on parking meters or with pre-paid parking machines.</li>
<li>Attach a text and picture note &#8212; handy for remembering what that rental car looks like.</li>
<li>Email all parking data out via a rich HTML message with embedded map and links.</li>
<li>Get a list of nearby local services (bank, gas station, bathrooms) you might need when you&#8217;re parking your car or right before leaving.</li>
</ul>
<p>it&#8217;s available for $4.99 <a href="http://itunes.apple.com/us/app/autopark/id335354555?mt=8" target="_blank">on the AppStore</a> and the first user reviews have been pretty positive. It&#8217;s already made it into <a href="http://macworld.com/article/145871/2010/01/autopark.html" target="_blank">MacWorld Magazine</a>!</p>
<p>But this isn&#8217;t just about a single iPhone app. There are a lot of posts rattling around my head that I&#8217;ll be rolling out gradually: from the evolution of the UI and graphic design, to running a one-person development shop, the economics of app development, the transition to iPad, tips and tricks on developing a push server, and the process of marketing an iPhone app. From conversations with fellow iPhone developers I get the feeling this is information that could be useful to others in their own efforts.</p>
<p>When the AppStore was first announced, I remember thinking this is the first time an individual or a small team can easily bring a software product to market without having to worry about a lot of the hassles of full-bore software publishing. I still think that&#8217;s the case, but I was off by an order of magnitude on the <em>it&#8217;ll be easy</em> department. I&#8217;m going to write about this experience because I think it&#8217;s good to get these things out there for all those people dreaming about starting their own gig.</p>
<p>In the meantime, here&#8217;s a <a href="http://slideshare.net/raminf/iphone-backend-servers" target="_blank">presentation</a> I gave at the January 2010 Silicon Valley iPhone Developer Meetup on development of back-end servers for iPhone apps. I tried to avoid making it about a specific product but it relies heavily on the experience of putting together the AutoPark push notification server.</p>
<p>This is only the first app out of the chute and this is the first post on what goes on behind the scenes. So stay tuned&#8230;</p>
<hr />
<p>P.S. I&#8217;ll be showing off AutoPark (and maybe a peek of an upcoming app) at <a href="http://macworldexpo.com" target="_blank">MacWorld Expo</a> in San Francisco February 9-13, 2010 at the Mobile Application Showcase. This is the first year they&#8217;re featuring iPhone apps so it&#8217;ll be interesting to see how they&#8217;re received in a historically Mac-only conference. It&#8217;s also my first time as an exhibitor (and yes, I&#8217;ll be blogging about it).</p>
<p>Feel free to pop over and say hi.</p>
<hr />
<p><strong>Update</strong>: AutoPark won <a href="http://www.macworld.com/article/146297/2010/02/bos2010_winners.html">Best of Show</a> at Macworld 2010 and got <a href="http://www.find.macworld.com/appguide/app.html?id=369299">4.5 out of 5 mice</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2010/02/01/autopark-my-first-iphone-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Merry Christmas</title>
		<link>http://ramin.firoozye.com/2009/12/07/merry-christmas/</link>
		<comments>http://ramin.firoozye.com/2009/12/07/merry-christmas/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 23:58:50 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[holiday]]></category>
		<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=254</guid>
		<description><![CDATA[(via SketchySantas) Happy Holidays to all.]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://ramin.firoozye.com/wp-content/uploads/2009/12/0EBACF67-F1D4-4966-BAA8-850184127ACE.jpg" alt="0EBACF67-F1D4-4966-BAA8-850184127ACE.jpg" border="0" width="500" height="354" /></div>
<p>(via <a href="http://sketchysantas.com" target="_blank">SketchySantas</a>)</p>
<p>Happy Holidays to all.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2009/12/07/merry-christmas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eval iPhone apps: the good, the bad, and the ugly</title>
		<link>http://ramin.firoozye.com/2009/10/16/eval-iphone-apps-the-good-the-bad-and-the-ugly/</link>
		<comments>http://ramin.firoozye.com/2009/10/16/eval-iphone-apps-the-good-the-bad-and-the-ugly/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 17:49:32 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=223</guid>
		<description><![CDATA[[ This ended up being a fairly long and somewhat technical post. I edited it down as best I could, but I think it's an important topic in the iPhone world and something that has to be laid out in its entirety. I suspect it won't be of much interest unless you're an iPhone app [...]]]></description>
			<content:encoded><![CDATA[<p>[ <i>This ended up being a fairly long and somewhat technical post. I edited it down as best I could, but I think it's an important topic in the iPhone world and something that has to be laid out in its entirety. I suspect it won't be of much interest unless you're an iPhone app developer, a highly technical end-user, or a masochist masquerading as a layperson. You have been warned. - Ed.</i>]</p>
<p><img src="http://ramin.firoozye.com/i/goodbadugly.jpg" width="160" height="210" alt="" /></p>
<p><a href="http://www.tuaw.com/2009/10/15/apple-relents-in-app-purchase-for-free-apps-allows-demo-to-paid/" target="_blank">The news</a> dropped like a bombshell on the iPhone developer community yesterday: Apple is now allowing In App Purchasing in free applications. <i>Hip Hip Hooray!</i></p>
<p>But wait. What does that mean?</p>
<p>I won&#8217;t repeat what I&#8217;ve already said in a <a href="http://ramin.firoozye.com/2009/03/19/eval-applications-on-the-iphone-appstore/" target="_blank">previous post</a> but the upshot is it&#8217;s now possible to ship a free application on the iPhone appstore then ask the customer to purchase an &#8216;unlock&#8217; token once they&#8217;re done evaluating it. The common consensus (as much as what is said on blogs, mailing lists, and twitter can be considered so) in the developer community is that it&#8217;s a positive move. <a href="" target="_blank">Marco Arment</a> (the developer of Instapaper) called it a &#8220;<i>&#8230; great move for both users and developers.</i>&#8221;</p>
<h3>The Good</h3>
<p><img src="http://ramin.firoozye.com/i/thegood.jpg" class="limg" width="110" height="119" alt="" /></p>
<p>With this seemingly small change in policy consumers can (finally) try out an app before they have to pay for it. No more buying an app then realizing it doesn&#8217;t work and getting stuck with a dud. The immediate effect will most likely be fewer impulse sales&#8211;which means lower short-term revenue&#8211;but in the long-term users are more likely to be happy customers instead of accidental ones.</p>
<p>It&#8217;ll also mean that app developers should be able to increase their asking price for well-made apps, because users will have had a chance to take it out for a test run. On the other hand, there&#8217;s no guarantee this will end up increasing per-app revenue given the low conversion ratio from free to for-pay apps. <i>In fact, I&#8217;d strongly question the logic of $0.99 apps even bothering to offer an evaluation version</i>. All those impulse and <i>let&#8217;s try this</i> purchases probably account for a more substantial portion of sales than most developers care to admit.</p>
<p>But the initial developer reaction seems to be positive. Most indy developers in it for the long run would rather have fewer happy customers vs. a lot of unhappy ones.</p>
<h3>The Bad</h3>
<p><img src="http://ramin.firoozye.com/i/thebad.jpg" class="limg" width="110" height="119" alt="" /></p>
<p>First, let&#8217;s take a little detour and define what we actually mean by an <i>evaluation</i> app.</p>
<p>In the regular computer world (versus, you know, the iPhone Candyland) a developer creates an application then offers it to the user for evaluation in one of two possible ways:</p>
<ol>
<li><b>Degraded mode</b>: this is where the application has some of its features disabled, for example, no saving or only printing with a watermark. The user gets to experience what the app does, but only <i>up to a point.</i> How much functionality is included is up to the developer but it&#8217;s in their interest to allow as much as possible to make the sale without giving up too much.</li>
<li><b>Time-limited mode</b>: this is where the application is fully functional for a limited amount of time (usually two weeks to 30 days). After that either the user buys the app or it stops working. A slight variation is where the app reverts to degraded mode when the eval clock runs out.
</li>
</ol>
<p>The main difference between a <em>Time-Limited</em> and a <em>Degraded</em> app is what the developer allows the user to experience during that period of time. That&#8217;s an important distinction because the end-user experience was noted by Apple as the main reason they initially didn&#8217;t allow In App Purchasing in free apps. The reasoning was that a user should not be told an application is free, then be forced to pay for it. But it appears that concerns for application piracy and loud complaints from developers have overridden those worries. But the problem is still valid. Hopefully Apple will make changes to the Appstore to better communicate the actual <i>fully unlocked</i> price to avoid end-user confusion.</p>
<p>There&#8217;s also a subtle issues unique to the <em>Time-limited</em> app on the desktop and that is what to do when the user tries to get around the evaluation restrictions &#8212; ostensibly to keep using the application in full evaluation mode <em>ad infinitum</em> without having to pay. The two most common methods are settings back the system clock (to make the app think the eval time hasn&#8217;t run out), or to uninstall then reinstall an app to reset the meter.</p>
<p>The solution to both of these problems is fairly simple: the app can write an <em>already run</em> token and periodically save a time-stamp in such a way that persists beyond an application getting uninstalled. Then it&#8217;s fairly easy to detect if the clock has moved back or if an app has been reinstalled.</p>
<p>But that&#8217;s the desktop. What about the iPhone? The problems are the same. Some users may be tempted to keep an eval app (especially a high-priced one) running. Can the clock reset trick work? Yes, it can. Most users leave their phone&#8217;s clock in its default auto-update mode so they can use their phone to keep track of time. But it&#8217;s fairly easy to reset it manually. All you have to do is run the <em>Settings</em> application, go under <em>General</em> tab and disable <i>Set Automatically</i> then set the clock to whatever date and time you want. The down-side to this is that so much of what you do on a typical iPhone relies on the system clock so it&#8217;s unlikely someone will be willing to put up with having a constantly skewed clock on their phone for the sake of just one application. But you never know.</p>
<p>What about the delete/reinstall method? On the iPhone, once an app has been deleted all associated files are also removed so there would have to be a way to save a persistent token that outlasts the app install-delete cycle. On the iPhone, unlike the Mac, no such place exists. The app developer <i>could</i> always save the unique device ID (UDID) of the phone on a server, but the Apple developer license explicitly forbids saving private user data off the phone. Does the UDID count as private data? It certainly is unique. We&#8217;ll have to see. But at the very least, it means each developer has to maintain server infrastructure to track this sort of thing.</p>
<p>So as it currently stands it&#8217;s too easy for a user to simply remove and reinstall an app or to fiddle with their clock and continue using an app in its fully-functional <i>eval</i> mode. I&#8217;m pretty sure this isn&#8217;t what Apple had in mind when allowing In App purchases.</p>
<p>That leaves <i>Degraded</i> mode. This means that the application the user would download from the Appstore for evaluation wouldn&#8217;t be the full version. In an earlier draft of the developer license agreement shipping this type of app was explicitly forbidden. In the newly revised version, well, it&#8217;s not so clear. In Attachment 2.4 it is clearly stated that:</p>
<blockquote><p>2.4	You may not use the In App Purchase API to send any software updates to Your Application or otherwise add any additional executable code to Your Application. An In App Purchase item must either already exist in Your Application waiting to be unlocked, be streamed to Your Application after the purchase transaction has been completed, or be downloaded to Your Application solely as data after the purchase transaction has been completed.</p></blockquote>
<p>This means that the full application functionality must be installed on the phone&#8211;no way to send up updated binaries. So all the code is there ready to go but a little key is needed to unlock it. On the desktop this type of app is derisively (and deservedly) called <i>crippleware</i>. </p>
<p>In other words, as of today, what Apple is allowing app developers to ship is <i>crippleware</i> for your iPhone. I could be wrong on this but this clearly falls under the category of <a href="http://en.wikipedia.org/wiki/Unintended_consequence" target="_blank">Unintended Consequences</a>.</p>
<h3>The Ugly</h3>
<p><img src="http://ramin.firoozye.com/i/theugly.jpg" width="110" height="119" alt="" /></p>
<p>The user plays with the eval app for 30 days (or so) then purchases the unlock token via In App Purchasing. The token is saved on the system so from now on the app launches in its unlocked state. But what form is that token going to take and where is it going to be stored? Given the current sandboxed architecture of the iPhone app, There are two places where an application can actually write data:</p>
<ol>
<li>The filesystem under the application&#8217;s <i>Documents</i> folder. This can be a text file, a user preference plist, a record in a SQLite database, or a CoreData store.</li>
<li>In the keychain as a secure key/value data item.</li>
</ol>
<p>Apple has intentionally stayed out of the business of what shape or form this add-on functionality or unlocking feature should take. It&#8217;s up to the individual developers to decide but odds are it will be one of these two methods. </p>
<p>Trouble is both these methods will actually make it <i>easier</i> for apps to get pirated.</p>
<p>On a regular iPhone no app can cross the sandbox line and access another app&#8217;s private data. But on a jailbroken phone no such lines exist. So a few minutes after the app is installed on a jailbroken phone, that special token can be easily extracted and plastered all over the internet. Now you don&#8217;t even need to resort to apps like <a href="http://www.electronicpulp.net/2009/02/02/download-crackulous-and-crack-any-iphone-app-with-one-click-any-time/" target="_blank">Crackulous</a> to get your free fully-functional apps.</p>
<p>The solution is for each individual app developer to implement tighter security around the application, by implementing secure unlock tokens, perhaps even tied to a specific handset so even if they&#8217;re removed from a single phone they won&#8217;t be usable on any other phone. But that involves knowing quite a bit about the pros and cons of cryptography and your typical iPhone app developer is not going to have the time and patience to implement anything like that. </p>
<p>So they&#8217;ll take the quick and expedient way&#8211;they&#8217;ll offer crippleware and save the token into a user preference plist or keychain &#8212; and hope and pray nobody bothers looking there. Or they&#8217;ll sign up with outfits like <a href="http://urbanairship.com/" target="_blank">Urban Airship</a>, <a href="http://www.ilime.com" target="_blank">iLime</a>, or <a href="http://www.push.io" target="_blank">Push.IO</a> to take care of it for them for a fee.</p>
<p>But this doesn&#8217;t mask the fact that with no Apple-defined standard, it&#8217;s going to be a free-for-all.</p>
<p>The final bit of ugliness heading our way has to do with user reviews. In the early days of the AppStore anyone could leave reviews &#8212; regardless of whether they had bought the app or not. This rendered the system useless since most of the initial write-ups consisted of, um, <i>price-resistant</i> customers (endearingly called <i>freetards</i> by developers) complaining about the price, no matter how low. It didn&#8217;t take long for Apple to clamp down on this by requiring only those who had actually purchased an app to review them. This substantially cut down on the noise and helped keep Appstore reviews an important part of the consumer decision-making process. </p>
<p>But now with the advent of free evaluation apps we&#8217;re going to go back to the halcyon days of price-gripes, where a user will download the free version of the app, take a look at the price for obtaining the unlock token and submit a 1-star review, complaining about, yes you got it, the price of the app. The current AppStore filter will not work since they&#8217;ve officially downloaded the app and technically count as having <i>purchased</i> the app.</p>
<p>One step forward. Two steps back. In other words, it&#8217;s going to get <i>ugly</i>. Again.</p>
<h3>Unless&#8230;</h3>
<p>You&#8217;ve been so patient. I won&#8217;t keep you waiting. Here are a few steps Apple needs to take for this eval system to work:</p>
<ol>
<li><b>Offer a simple, official API for supporting both <em>Time-limited</em> and <em>Degraded</em> evaluations</b>. This means associating some application <i>metadata</i> with each app when it&#8217;s installed and forcing <em>Springboard</em> (the iPhone application launcher) to honor these settings before running the application. Springboard already does this when it installs an app&#8211;that&#8217;s how the App Store application updated can tell what version you&#8217;re running vs. what&#8217;s on the store.
<p>To prevent the remove-reinstall workaround, there has to be a way to save some information that lives outside the sandbox and survives application removal. This can be on the phone or on a server. Again, Apple already does both these things. It saves data to the system keychain and it keeps track of what apps you&#8217;ve &#8220;bought&#8221; on the AppStore (so when you go reinstall, it knows not to charge you twice). So it would be easy for them to let the app-developer mark the application as eval, whether Time-limited (and or how long) or Degraded.</p>
<p>I would even argue that <i>anything</i> having to do with application installation or unlocking belongs in the AppStore/OS domain, not left to individual applications. Anything having to do with In App purchasing of extra grenade-launchers, leave it up to the app.</p>
</li>
<li>Far, far more importantly (and I can&#8217;t emphasize this enough) Apple should <b>provide a simple API for an application to verify that the current user has purchased the app</b>. This will do far more to cut down on application piracy than allowing free evals. The app developer can periodically and at random times invoke this API and ask two simple questions: <i>Has the current user bought this app?</i> and <i>When?</i>.
<p>A developer would be wise to sprinkle calls to the API throughout the app. Yes, the application binary can be patched and the API call removed, but that&#8217;s a higher wall for your typical cracker to climb than <a href="http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html" target="_blank">simply modifying a single entry in a text file</a>.</li>
<p> In the absence of a network connection, the default would be to let the application run a limited number of runs (until the user gets back to the network).</p>
<p>But what about the <i>When?</i> question? The answer would be a timestamp indicating when the user paid for the app. That piece of information is important to app-developers who currently have multiple free/pay versions of applications on the appstore (or who want to continue using that model). For these folks to move from a free/pro model to an eval/buy model means that their end users would have to obtain a new version of their application. There would have to be a way to tell whether the current user paid for the full version of the app during the pre-eval period and not force them to go through the whole purchase cycle again.</p>
<p>I should also emphasize that with this API the application will never have to be given access to any private user-credentials. Something like the following added to UIApplication will work wonders to ward off app piracy:</p>
<pre>
+ BOOL isAppPurchased;
+ NSDate* dateOfPurchase;
</pre>
<p></p>
<li>The last thing Apple could to do help eval/buy apps a success is implement a policy where only users who had purchased the unlock token would be allowed to post comment and reviews on the AppStore. Let&#8217;s maintain the status quo instead of taking a step back. The problem, however, is given the totally unstructured way the current In App Purchase model is implemented, there is no viable way in which an <em>extra rocket-launcher</em> token can be distinguished from an <em>unlock application</em> token.<br />
<br />
I would argue that unlocking eval applications, verifying proper ownership, and restricting access to the review system should be the responsibility of the entities that control application installation and launching&#8211;i.e., the operating system and iTunes&#8211;instead of individual developers. But in lieu of that, Apple should give developer tools to properly implement an evaluation system that welcomes legitimate users and cuts back on potential abuse.
</li>
</ol>
<p><strong>In summary:</strong> The In App Purchase mechanism is a great system for supporting application add-ons. But it&#8217;s wholly unsuited for supporting eval applications and does nothing to fight application piracy. Having properly implemented eval apps is important to the future of this ecosystem. Apple shouldn&#8217;t leave it up to individual developers to figure out how to get there. It should be part of the core functionality of the operating system.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2009/10/16/eval-iphone-apps-the-good-the-bad-and-the-ugly/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Problems with Push</title>
		<link>http://ramin.firoozye.com/2009/09/30/problems-with-push/</link>
		<comments>http://ramin.firoozye.com/2009/09/30/problems-with-push/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 06:51:22 +0000</pubDate>
		<dc:creator>ramin</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[push]]></category>

		<guid isPermaLink="false">http://ramin.firoozye.com/?p=215</guid>
		<description><![CDATA[I agree with most everything Karl Adam says about the limitations of the Apple Push Notification Service, especially the problem with its failure to stack notifications so they&#8217;re not missed. I posted a bug report a while back (rdar://7054632) offering a simple solution to get around this particular problem: save each incoming push payload into [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://ramin.firoozye.com/wp-content/uploads/2009/09/pushsad.png" alt="pushsad.png" border="0" width="195" height="212" /></div>
<p>I agree with most everything <a href="http://matrixPointer.com/karl/posts/push-notifications-no-cigar" target="_blank">Karl Adam says</a> about the limitations of the Apple Push Notification Service, especially the problem with its failure to stack notifications so they&#8217;re not missed. </p>
<p>I posted a bug report a while back (<a href="rdar://7054632" target="_blank">rdar://7054632</a>) offering a simple solution to get around this particular problem: save each incoming push payload into Messages.app as a separate entry. That way if I get a push and don&#8217;t have time to get to it I can ignore it and come back to Messages later on and retrieve it and all received Push messages are kept until I choose to get rid of them.</p>
<p>The entry could be in the form of a special URL link that shows the alert message, but when clicked generates the same JSON payload format as a regular push event and invokes the app in the same manner so no extra coding would be needed (OK, maybe just a little bit of code on the server to check against processing duplicate requests). It would take care of a lot of problems with push usability.</p>
<p>An even more pressing issue I have with Push is if you are on a WiFi network behind a bunch of firewalls and more than one NAT server. This happens often in corporations or in homes with multiple routers acting as range-extenders. In these cases pushes fail to reach you &#8212; until you get back to a 3G network.</p>
<p>For some people Push is doubling as a remote event timer (since Apple won&#8217;t let us access the phone&#8217;s alarm database or submit local cron tasks). This makes it really hard  to issue reliable time-based alerts. </p>
<p>If Apple would just open up true background tasks and/or timed alerts and let the user decide whether they trust an app to let it access those services (much like location-based or push services) a lot of these hassles would go away.</p>
<p>Also, a European friend brought up that whereas SMS is included in most phone plans, push incurs data usage charges. Could be a hassle if you&#8217;re traveling and continue getting pushes.</p>
<p>Over all, I&#8217;d say push on the iPhone is a work in progress. As much as I&#8217;m intrigued and excited by its potential, I&#8217;m frustrated by its current implementation and limitations.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramin.firoozye.com/2009/09/30/problems-with-push/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: ramin.firoozye.com @ 2012-05-20 12:09:37 -->
