<?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>Blue Lotus Blog</title>
	<atom:link href="http://www.aorensoftware.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aorensoftware.com/blog</link>
	<description>Articles and thoughts from a techmonkey...</description>
	<lastBuildDate>Mon, 26 Mar 2012 17:04:11 +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>iOS 6 Predictions</title>
		<link>http://www.aorensoftware.com/blog/2012/03/06/ios-6-predictions/</link>
		<comments>http://www.aorensoftware.com/blog/2012/03/06/ios-6-predictions/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 05:48:31 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[60beat]]></category>
		<category><![CDATA[AirPlay]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Apple TV]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Game Center]]></category>
		<category><![CDATA[GamePad]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security/Cryptography]]></category>
		<category><![CDATA[Startup Grind]]></category>
		<category><![CDATA[Systems]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Video Games]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1393</guid>
		<description><![CDATA[It is always fun to try and guess what Apple is going to do next. You can guarantee that there will always be surprises and sure bets, letdowns and magical moments. The Apple rumor sites do a decent job of soliciting leaks, reading between the lines and making educated conjecture. As a developer, I often [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/crystal_ball.jpg" alt="" title="crystal_ball" width="200" height="242" style="float: right; margin-left: 20px; margin-top: 5px;" /></p>
<p>It is always fun to try and guess what <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> is going to do next. You can guarantee that there will always be surprises and sure bets, letdowns and <strong>magical moments</strong>. The <uword  category='Websites/Apple/Rumors' href='http://9to5mac.com/' href_order='2' href2='http://www.macrumors.com/' href2_order='3' href3='http://appleinsider.com/' href3_order='4'>Apple rumor sites</uword> do a decent job of soliciting leaks, reading between the lines and making educated conjecture. As a developer, I often like to take a good look at where <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword>&#8217;s technology is right now and make <strong>logical extrapolations</strong> as to where things are headed. Oftentimes, when <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> announces some new feature or technology it seems obvious in retrospect if we had only connected the dots. Based on 2011&#8242;s release schedule, it is a fair bet to say that <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> is going to announce <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 6 at <uword  category='Conferences/Programming' href='https://developer.apple.com/wwdc/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Apple_Worldwide_Developers_Conference' wikipedia_order='21'>WWDC</uword> sometime this summer and distribute a developer beta. That means that in the coming months little trickles of information are going to get doled out to the rumor sites about what kind of changes and additions we can expect. Just for fun, I wanted to get my own predictions out in the open before any of that started. Here is my very <strong>developer-oriented</strong> prediction list of what we might be expecting in <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 6:<span id="more-1393"></span></p>
<p><span style="font-size: 1.6em; float: right; margin-top: 15px;"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/04/Check-Mark.jpg" /><b>&nbsp;90%</b></span></p>
<h2><uword  category='Software/OS/iOS' href='http://www.apple.com/iphone/features/notification-center.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Notification_Center' wikipedia_order='21'>Notification Center</uword> <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>API</uword></h2>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/notificationsMed.jpg" alt="" title="notificationsMed" width="200" height="297" style="float: left; margin-right: 20px; margin-bottom: 10px; margin-top: 10px;" /></p>
<p>It seems often that <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> will introduce a new feature or technology, keep it fairly closed off from developer access for a cycle and then release an <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>API</uword> for it after they learn a little more about how people really use it and work out many of the initial kinks in the system. <uword  category='Software/OS/iOS' href='http://www.apple.com/iphone/features/notification-center.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Notification_Center' wikipedia_order='21'>Notification Center</uword> seems <strong>very ripe</strong> for this kind of <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>API</uword> access. <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> has had a full release cycle to gather user reactions and think about how to design a really clean <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>API</uword> for developers to hook into. Of course 3rd party apps can already get their notifications listed in <uword  category='Software/OS/iOS' href='http://www.apple.com/iphone/features/notification-center.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Notification_Center' wikipedia_order='21'>Notification Center</uword> simply by using the same old <uword  category='Software/OS/iOS/API' href='https://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction/Introduction.html' href_order='2'>Notification API</uword> that has been around since <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 3. However, there is currently no way to further customize the display and do anything <strong>fancy</strong> like the weather or stock widgets. There are already a lot of nice additions and hacks for <uword  category='Software/OS/iOS' href='http://www.apple.com/iphone/features/notification-center.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Notification_Center' wikipedia_order='21'>Notification Center</uword> in the jailbreak world (which also it seems is a good indicator of what frameworks and <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>APIs</uword> <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> is likely to open up next). This seems like a nice, low-risk, natural progression of a fairly straightforward technology that has already had some time to grow up a bit by itself in the wild. </p>
<p><span style="font-size: 1.6em; float: right; margin-top: 15px;"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/04/Check-Mark.jpg" /><b>&nbsp;80%</b></span></p>
<h2><uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>API</uword></h2>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/siriMed.jpg" alt="" title="siriMed" width="200" height="200" style="float: left; margin-right: 20px; margin-top: 5px;" /></p>
<p><uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> was the hot new feature of <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5 exclusive to the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/IPhone_4S_No_shadow.png/138px-IPhone_4S_No_shadow.png' image_order='1' href='http://www.apple.com/iphone/' href_order='2' buyamazon='http://www.amazon.com/Apple-iPhone-4S-16GB-Black/dp/B005VGFQXE%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB005VGFQXE' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPhone_4S' wikipedia_order='21'>iPhone 4S</uword>. For 2 weeks everybody swooned over it and would use it to impress their friends with interesting natural language queries like &#8220;<em>Where&#8217;s my wife?</em>&#8221; or &#8220;<em>What&#8217;s the volume of 63 grams of barium?</em>&#8220;. Then we all hit the limits of what <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> could do and she became <strong>just another feature</strong>. Like <uword  category='Software/OS/iOS' href='http://www.apple.com/iphone/features/notification-center.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Notification_Center' wikipedia_order='21'>Notification Center</uword>, <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> has had a full release cycle for <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> to study user response and nail down the user experience. It is time now to unleash the real potential that <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> promised us and allow developers to hook into it.</p>
<p>If generalized into two broad categories, <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> can accomplish two different kinds of tasks. <strong>First</strong>, she can answer questions by querying a web service like <uword  category='Websites/Reviews' image='http://upload.wikimedia.org/wikipedia/en/d/dd/Yelplogo.png' image_order='1' href='http://www.yelp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fyelp%252Fid284910350%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' appios_order='10' appandroid='http://www.amazon.com/Yelp/dp/B004SZ3RU8%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB004SZ3RU8' appandroid_order='13' twitter='https://twitter.com/#!/YELP' twitter_order='18' wikipedia='http://en.wikipedia.org/wiki/Yelp,_Inc.' wikipedia_order='21'>Yelp</uword>, <uword  category='Websites/Math' image='http://www.wolframalpha.com/images/press/photos/logos/wa-logo-stacked2-med.jpg' image_order='1' href='http://www.wolframalpha.com/' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fwolframalpha%252Fid334989259%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' appios_order='10' appandroid='http://www.amazon.com/Wolfram-Alpha-LLC/dp/B004J1DBJI%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB004J1DBJI' appandroid_order='13' twitter='https://twitter.com/#!/wolfram_alpha' twitter_order='18' wikipedia='http://en.wikipedia.org/wiki/Wolfram_Alpha' wikipedia_order='21'>Wolfram Alpha</uword>, etc&#8230; <strong>Secondly</strong>, she can perform simple device-local application tasks like create reminders, create calendar items, call phone numbers and send messages. It seems like <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> would want to vet any sort of web service that <strong>all</strong> <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> users could potentially smash with traffic and so the more likely route of opening up <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> would probably lie in attaching <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>APIs</uword> to performing <strong>simple actions </strong>or <strong>application local queries</strong>. Imagine if you could ask your turn-by-turn direction app for directions with your voice instead of typing addresses or if you could tell your stock trading program to perform certain actions by voice (that could lead to some hilarious headlines, just be sure to always listen to <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword>&#8217;s confirmation first). This kind of an <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>API</uword> seems like it would be fairly <strong>difficult to design correctly</strong> and would probably <strong>require more of the developer</strong> than something like <uword  category='Software/OS/iOS' href='http://www.apple.com/iphone/features/notification-center.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Notification_Center' wikipedia_order='21'>Notification Center</uword>. I expect that at a minimum, <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> will initially have a few cookie cutter commands where developers can plug in their own simple verbs and nouns. &#8220;<em><uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword>, compose tweet: &#8216;had cereal for breakfast today&#8217;</em>&#8220;. &#8220;<em><uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword>, how many (insert virtual game currency here) do I have?</em>&#8220;. Developers can instantly leverage <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword>&#8217;s voice recognition tech and give their users access to all the information and tasks that their applications offer. This seems like the natural progression for where <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> has to go next if she is going to keep distinguishing herself from competing assistant programs. Much like the advent of the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> itself, it seems like <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> is poised to spark another app revolution which will cement its platform by harnessing the power of it&#8217;s developers once again. </p>
<p><span style="font-size: 1.6em; float: right; margin-top: 15px;"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/04/Check-Mark.jpg" /><b>&nbsp;65%</b></span></p>
<h2>Full <uword  category='Hardware/Networking' image='http://upload.wikimedia.org/wikipedia/commons/f/fc/BluetoothLogo.svg' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Bluetooth' wikipedia_order='21'>Bluetooth</uword>/30-pin <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>API</uword></h2>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/bluetoothMed.png" alt="" title="bluetoothMed" width="200" height="200" style="float: left; margin-right: 20px;" /></p>
<p>Both users and developers alike have been clamoring for a public <uword  category='Software/Engineering' wikipedia='http://en.wikipedia.org/wiki/Application_programming_interface' wikipedia_order='21'>API</uword> to the 30-pin connector and <uword  category='Hardware/Networking' image='http://upload.wikimedia.org/wikipedia/commons/f/fc/BluetoothLogo.svg' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Bluetooth' wikipedia_order='21'>Bluetooth</uword> stack for years. <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> does have an official <uword  category='Hardware/Development' href='https://developer.apple.com/programs/mfi/' href_order='2'>MFi program</uword> that hardware developers can sign up for, but they have to purchase <strong>high-priced <uword  category='Software/Security' wikipedia='http://en.wikipedia.org/wiki/Encryption' wikipedia_order='21'>decryption</uword> chips</strong> from <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> for every peripheral they build and pay <strong>significant licensing fees</strong>. For years it seemed like it was in <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword>&#8217;s best interest to keep a very tight quality control over the kinds of peripherals 3rd parties could produce for <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> hardware, but with devices like the <uword  category='Hardware/Accessories' image='http://www.60beat.com/v/vspfiles/assets/images/img-gamepad-small.jpg' image_order='1' buy='http://www.60beat.com/?Click=207' buy_order='6'>60beat GamePad</uword> (and to a minor extent the <uword  category='Hardware/iOS/Payments' image='http://upload.wikimedia.org/wikipedia/en/5/52/Squareuplogo.jpg' image_order='1' href='https://squareup.com/' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsquare%252Fid335393788%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' appios_order='10' wikipedia='http://en.wikipedia.org/wiki/Square_(application)' wikipedia_order='21'>Square Card Reader</uword>) which <strong>side-step <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword>&#8217;s lockout</strong> by going through the microphone input in the headphone jack, it is clear that the bar for developing hardware peripherals needs to be lowered. Incidentally, I have a friend who is currently developing an <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> peripheral using audio input over <uword  category='Hardware/Networking' image='http://upload.wikimedia.org/wikipedia/commons/f/fc/BluetoothLogo.svg' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Bluetooth' wikipedia_order='21'>Bluetooth</uword> and software signal processing to avoid paying the licensing fees and integrating the <uword  category='Software/Security' wikipedia='http://en.wikipedia.org/wiki/Encryption' wikipedia_order='21'>decryption</uword> chip.</p>
<p>After taking a closer look at <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5, it appears that <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> is slowly heading in a more <strong>open direction</strong> in this regard with the addition of the <uword  category='Software/OS/iOS' manpage='https://developer.apple.com/library/ios/#documentation/CoreBluetooth/Reference/CoreBluetooth_Framework/_index.html' manpage_order='17'>CoreBluetooth.framework</uword>. It is currently limited to interfacing only with <uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Bluetooth_low_energy' wikipedia_order='21'>BTLE</uword> (<uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Bluetooth_low_energy' wikipedia_order='21'>Bluetooth Low Energy</uword>) devices though. Now that <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> devices are unarguably mainstream and the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> peripheral market has had a fair amount of time to mature and settle, it might be time for <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> to open up these ports for <strong>general license-free use</strong> by any developer. There is a huge demand for <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> compatible game controllers right now as evidenced by the <uword  category='Hardware/Accessories' image='http://www.60beat.com/v/vspfiles/assets/images/img-gamepad-small.jpg' image_order='1' buy='http://www.60beat.com/?Click=207' buy_order='6'>60beat GamePad</uword>, <uword  category='Hardware/Gaming/iOS' image='http://www.thinkgeek.com/images/products/frontsquare/e762_icade_ion.jpg' image_order='1' href='http://www.kqzyfj.com/click-5653721-10746449?url=http%3A%2F%2Fwww.thinkgeek.com%2Felectronics%2Fretro-gaming%2Fe762%2F%3Fref%3Dc&amp;cjsku=E762ION' href_order='2' buyamazon='http://www.amazon.com/ION-iCade-Arcade-Cabinet-iPad-Mac/dp/B004YC4NH6%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB004YC4NH6' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/ICade' wikipedia_order='21'>iCade</uword>, <uword  category='Hardware/Gaming/iOS' image='http://www.icontrolpad.com/photos/press-pack/thumbs/icontrolpad-iphone4.jpg' image_order='1' href='http://www.icontrolpad.com/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IControlPad' wikipedia_order='21'>iControlPad</uword> and <uword  category='Hardware/Gaming/iOS' image='https://discoverybaygames.com/sites/default/files/styles/380s/public/atari-arcade-lf-530x430-blk1.png' image_order='1' href='http://discoverybaygames.com/appcessories/atari-arcade-duo-powered-joystick' href_order='2' buyamazon='http://www.amazon.com/Atari-Arcade-04-0002EN-iPad-Device/dp/B0062H2KNK%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0062H2KNK&amp;tag=httpwwwaorens-20' buyamazon_order='8'>Atari Arcade</uword>. It would be really interesting to see what kinds of great controller options would come out of the woodwork if it were more economically attractive to develop <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> hardware peripherals. This kind of freedom for the communications ports would be extremely convenient in conjunction with my next prediction&#8230;</p>
<p><span style="font-size: 1.6em; float: right; margin-top: 15px;"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/04/Check-Mark.jpg" /><b>&nbsp;75%</b></span></p>
<h2><uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV</uword> <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Software_development_kit' wikipedia_order='21'>SDK</uword></h2>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/appletvMed.jpg" alt="" title="appletvMed" width="200" height="97" style="float: left; margin-right: 20px; margin-bottom: 40px; margin-top: 35px;" /></p>
<p><uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> pretty much fell into the Gaming industry by <strong>complete accident</strong>. Nobody, not even <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> themselves could have foreseen the kind of massive takeover of <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> devices in the portable market, especially because they weren&#8217;t even trying to attack that market in the first place. The <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV</uword> has long been publicly declared as a &#8220;hobby&#8221; for <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> and long been looked at suspiciously as a <uword  category='Fiction/Myths' wikipedia='http://en.wikipedia.org/wiki/Trojan_Horse' wikipedia_order='21'>Trojan Horse</uword> by analysts and pundits for&#8230;something&#8230;. The reason it currently exists is to get the <uword  category='Software/Music' image='http://upload.wikimedia.org/wikipedia/en/b/b0/ITunes_Logo.png' image_order='1' href='http://www.apple.com/itunes/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/ITunes' wikipedia_order='21'>iTunes</uword> Music and Movie Stores into your living room. Why not the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> as well?</p>
<p>Granted, there are significant development challenges for developers in porting apps to the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV</uword>, such as dealing with <strong>one more UI idiom</strong> in addition to the phone and pad ones they have to target right now. Developers would obviously have to live without <uword  category='Hardware/Devices/Screens' wikipedia='http://en.wikipedia.org/wiki/Multi-touch' wikipedia_order='21'>multi-touch</uword>, <uword  category='Hardware/Devices' wikipedia='http://en.wikipedia.org/wiki/Accelerometer' wikipedia_order='21'>accelerometer</uword> and microphone input (if targeting the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV 2</uword>, rumors suggest that the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV</uword> 3 may headline <uword  category='Software/OS/iOS' image='http://images.apple.com/iphone/features/images/siri_icon.png' image_order='1' href='http://www.apple.com/iphone/features/siri.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Siri_(software)' wikipedia_order='21'>Siri</uword> as a feature). They would also need to deal with potentially small storage space (8GB for the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV 2</uword>). The <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> developer community has proven itself to be a very quick responder to new hardware and has great feature adoption rates, as evidenced by the second app gold rush sparked by the original <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/IPad_2_White_on_table.jpg/245px-IPad_2_White_on_table.jpg' image_order='1' href='http://www.apple.com/ipad/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;keywords=iPad&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329269556&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3AiPad%2Cn%3A2423172011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPad' wikipedia_order='21'>iPad</uword>. <strong>Obvious applications</strong> would include games (duh), more applications that blur the line between books and movies, home automation/security app ports and data visualization software hooked up to analytics services and the like (it seems like every other startup office I visit these days has a computer in a public place hooked up to some data visualization of sales or hits or something). The sheer <strong>financial incentives</strong> that accompany a high position in the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> sales charts all but guarantee massive developer adoption of any potential future <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV</uword> <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Software_development_kit' wikipedia_order='21'>SDK</uword>. One can speculate as to whether <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> will maintain a separate <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> branch just for the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV</uword> as it currently does and later unify it (much like it did with the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/IPad_2_White_on_table.jpg/245px-IPad_2_White_on_table.jpg' image_order='1' href='http://www.apple.com/ipad/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;keywords=iPad&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329269556&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3AiPad%2Cn%3A2423172011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPad' wikipedia_order='21'>iPad</uword>), or if it is going to be merged in with <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 6 right out of the gate. Again, I don&#8217;t think <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> is going to initially position the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV</uword> as a gaming console (it can&#8217;t compete with the horsepower of the entrenched players at the moment), but one shouldn&#8217;t underestimate the power of <strong>yearly hardware upgrades</strong> and a <strong>voracious and resourceful developer community</strong>. Should the <uword  category='Hardware/Gaming/Consoles' image='http://upload.wikimedia.org/wikipedia/commons/thumb/0/03/Xbox-360-Consoles-Infobox.png/285px-Xbox-360-Consoles-Infobox.png' image_order='1' href='http://www.xbox.com' href_order='2' buyamazon='http://www.amazon.com/Xbox-360-4GB-Console-Kinect/dp/B003O6EE4U%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB003O6EE4U' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Xbox_360' wikipedia_order='21'>Xbox</uword>, <uword  category='Hardware/Gaming/Consoles' image='http://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/PS3Versions.png/263px-PS3Versions.png' image_order='1' href='http://us.playstation.com/' href_order='2' buyamazon='http://www.amazon.com/PlayStation-3-320GB-System/dp/B003VUO6LU%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB003VUO6LU' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/PlayStation_3' wikipedia_order='21'>Playstation</uword> and <uword  category='Hardware/Gaming/Consoles' image='http://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Wii_console.png/240px-Wii_console.png' image_order='1' href='http://www.nintendo.com/wii' href_order='2' buyamazon='http://www.amazon.com/Wii-Nintendo/dp/B0009VXBAQ%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0009VXBAQ' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Wii#Name' wikipedia_order='21'>Wii</uword> start getting worried?</p>
<p><span style="font-size: 1.6em; float: right; margin-top: 15px;"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/04/Check-Mark.jpg" /><b>&nbsp;70%</b></span></p>
<h2><uword  category='Software/Video' href='http://www.apple.com/ipad/features/airplay.html' href_order='2' href2='http://www.aorensoftware.com/blog/2011/08/20/exploring-airplay-mirroring-internals/' href2_order='3' wikipedia='http://en.wikipedia.org/wiki/AirPlay' wikipedia_order='21'>AirPlay Mirroring</uword> Plus</h2>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/airview_logo_Med.jpg" alt="" title="airview_logo_Med" width="200" height="200" style="float: left; margin-right: 20px; margin-bottom: 10px; margin-top: 5px;" /></p>
<p>The collection of technologies and protocols now dubbed &#8220;<uword  category='Software/Video' href='http://www.apple.com/ipad/features/airplay.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/AirPlay' wikipedia_order='21'>AirPlay</uword>&#8221; has had quite an interesting technical history. First there was <uword  category='Software/Music' href='http://www.apple.com/airportexpress/features/airplay.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/AirTunes' wikipedia_order='21'>AirTunes</uword>, with which you could send <uword  category='Software/Security' wikipedia='http://en.wikipedia.org/wiki/Encryption' wikipedia_order='21'>encrypted</uword> audio to authorized devices like the <uword  category='Hardware/Networking' image='http://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Apple_airport_express.jpg/318px-Apple_airport_express.jpg' image_order='1' href='http://www.apple.com/airportexpress/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;redirect=true&amp;keywords=airport%20express&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329331062&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3Aairport%20express%2Cn%3A2459920011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/AirPort_Express' wikipedia_order='21'>AirPort Express</uword> from <uword  category='Software/Music' image='http://upload.wikimedia.org/wikipedia/en/b/b0/ITunes_Logo.png' image_order='1' href='http://www.apple.com/itunes/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/ITunes' wikipedia_order='21'>iTunes</uword>. Then came a separate technology called <uword  category='Software/Video' href='http://www.apple.com/ipad/features/airplay.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/AirPlay' wikipedia_order='21'>AirPlay Video</uword>, which allows <uword  category='Software/Music' image='http://upload.wikimedia.org/wikipedia/en/b/b0/ITunes_Logo.png' image_order='1' href='http://www.apple.com/itunes/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/ITunes' wikipedia_order='21'>iTunes</uword> and <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> devices to send <uword  category='Software/Security' wikipedia='http://en.wikipedia.org/wiki/Unencrypted' wikipedia_order='21'>unencrypted</uword> video/audio to the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV 2</uword>. Then last summer we got <uword  category='Software/Video' href='http://www.apple.com/ipad/features/airplay.html' href_order='2' href2='http://www.aorensoftware.com/blog/2011/08/20/exploring-airplay-mirroring-internals/' href2_order='3' wikipedia='http://en.wikipedia.org/wiki/AirPlay' wikipedia_order='21'>AirPlay Mirroring</uword>, which is yet another additional, separate technology that sends <uword  category='Software/Security' wikipedia='http://en.wikipedia.org/wiki/Encryption' wikipedia_order='21'>encrypted</uword> video/audio of whatever is on <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> device to the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV 2</uword>.</p>
<p><uword  category='Software/Video' href='http://www.apple.com/ipad/features/airplay.html' href_order='2' href2='http://www.aorensoftware.com/blog/2011/08/20/exploring-airplay-mirroring-internals/' href2_order='3' wikipedia='http://en.wikipedia.org/wiki/AirPlay' wikipedia_order='21'>AirPlay Mirroring</uword> has had a huge impact on presentation technology (I use it at an event I founded called the <uword  category='Websites/Events/Startups' image='http://aorensoftware.com/StartupGrind/sug-logo.png' image_order='1' href='http://www.StartupGrind.com/' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fstartup-grind%252Fid442779893%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Startup Grind</uword>). It has even <strong>more unlocked potential</strong> as clearly evidenced by existence of <uword  category='Software/Apps/Mac' image='http://twimg0-a.akamaihd.net/profile_images/1829608108/Reflection-Icon_reasonably_small.jpg' image_order='1' href='http://reflectionapp.com/' href_order='2' twitter='https://twitter.com/#!/ReflectionApp' twitter_order='18'>Reflection</uword> and <uword  category='Software/Apps/Mac' image='http://twimg0-a.akamaihd.net/profile_images/1828284816/Air-Parrot-Icon_reasonably_small.jpg' image_order='1' href='http://airparrot.com/' href_order='2' twitter='https://twitter.com/#!/airparrot' twitter_order='18'>AirParrot</uword> and by the recently revealed <uword  category='Software/Video' href='http://www.apple.com/ipad/features/airplay.html' href_order='2' href2='http://www.aorensoftware.com/blog/2011/08/20/exploring-airplay-mirroring-internals/' href2_order='3' wikipedia='http://en.wikipedia.org/wiki/AirPlay' wikipedia_order='21'>AirPlay Mirroring</uword> capability in <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/3/3d/MountainLionHero.png' image_order='1' href='http://www.apple.com/macosx/mountain-lion/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/OS_X_Mountain_Lion' wikipedia_order='21'>OS X Mountain Lion</uword>. I predict that at some point <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> will add <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword>-<uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> device mirroring capabilities as well. The idea of sharing your device screen with somebody else near you doesn&#8217;t seem extremely interesting until you add something like <strong>multicasting</strong> into the mix. Imagine a conference talk or a board meeting where the speaker uses their <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/IPad_2_White_on_table.jpg/245px-IPad_2_White_on_table.jpg' image_order='1' href='http://www.apple.com/ipad/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;keywords=iPad&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329269556&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3AiPad%2Cn%3A2423172011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPad' wikipedia_order='21'>iPad</uword> to show the audience slides or some other sort of demonstration, and instead of cranking your neck over to get a glimpse of a poorly lit, off angle projection screen, you simply follow along on your own <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/IPad_2_White_on_table.jpg/245px-IPad_2_White_on_table.jpg' image_order='1' href='http://www.apple.com/ipad/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;keywords=iPad&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329269556&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3AiPad%2Cn%3A2423172011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPad' wikipedia_order='21'>iPad</uword>. This seems like a no-brainer considering all <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> has to do is port the <uword  category='Software/Video' href='http://www.apple.com/ipad/features/airplay.html' href_order='2' href2='http://www.aorensoftware.com/blog/2011/08/20/exploring-airplay-mirroring-internals/' href2_order='3' wikipedia='http://en.wikipedia.org/wiki/AirPlay' wikipedia_order='21'>AirPlay mirroring</uword> receiver app over over to mainline <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> from the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Apple_TV_2nd_Generation.jpg/240px-Apple_TV_2nd_Generation.jpg' image_order='1' href='http://www.apple.com/appletv/' href_order='2' buyamazon='http://www.amazon.com/gp/product/B001FA1NK0/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FA1NK0' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Apple_TV' wikipedia_order='21'>Apple TV 2</uword> and add multicasting support. Now that the <uword  category='Software/Video' href='http://www.apple.com/ipad/features/airplay.html' href_order='2' href2='http://www.aorensoftware.com/blog/2011/08/20/exploring-airplay-mirroring-internals/' href2_order='3' wikipedia='http://en.wikipedia.org/wiki/AirPlay' wikipedia_order='21'>AirPlay Mirroring</uword> private key has been extracted and the protocol reverse engineered, if <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> doesn&#8217;t do it, some other enterprising developer will. </p>
<p><span style="font-size: 1.6em; float: right; margin-top: 15px;"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/04/Check-Mark.jpg" /><b>&nbsp;70%</b></span></p>
<h2><uword  category='Tech' wikipedia='http://en.wikipedia.org/wiki/Mobile_payment' wikipedia_order='21'>Mobile Payments</uword></h2>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/Google-WalletMed.jpg" alt="" title="Google-WalletMed" width="200" height="212" style="float: left; margin-right: 20px; margin-top: 5px;" /></p>
<p>The <uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Near_field_communication' wikipedia_order='21'>NFC</uword> rumor got a lot of play last year when people threw around <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Original_iPhone_docked.jpg/159px-Original_iPhone_docked.jpg' image_order='1' href='http://www.apple.com/iphone/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;keywords=iphone&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329263392&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3Aiphone%2Cn%3A2407749011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPhone' wikipedia_order='21'>iPhone</uword> 5 predictions, but we haven&#8217;t really heard much from it lately. <uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Near_field_communication' wikipedia_order='21'>NFC</uword>/<uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Radio-frequency_identification' wikipedia_order='21'>RFID</uword> reading hardware in phones has had somewhat of a <strong>hard time gaining adoption</strong> despite a lot of press and attention put on its potential uses. In the <uword  category='Countries' image='http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg' image_order='1' href='http://www.usa.gov/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/United_States' wikipedia_order='21'>United States</uword> there are only a handful of Android phones currently sporting <uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Near_field_communication' wikipedia_order='21'>NFC</uword>/<uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Radio-frequency_identification' wikipedia_order='21'>RFID</uword> hardware at the moment, which is somewhat surprising considering that Android handset makers are constantly looking for ways to distinguish themselves. <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Googlelogo.png/320px-Googlelogo.png' image_order='1' href='http://www.google.com' href_order='2' twitter='https://twitter.com/#!/google' twitter_order='18' linkedin='http://www.linkedin.com/company/google' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Google' wikipedia_order='21'>Google</uword> seems to be making a fairly large play for the use of the technology in payments although adoption doesn&#8217;t appear to be significant right now.</p>
<p>It appears that <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> is going to throw their weight behind <uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Bluetooth_low_energy' wikipedia_order='21'>BTLE</uword> for the kinds of things that <uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Near_field_communication' wikipedia_order='21'>NFC</uword> is typically used for. They are already shipping <uword  category='Hardware/Networking' wikipedia='http://en.wikipedia.org/wiki/Bluetooth_low_energy' wikipedia_order='21'>BTLE</uword> hardware in the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/IPhone_4S_No_shadow.png/138px-IPhone_4S_No_shadow.png' image_order='1' href='http://www.apple.com/iphone/' href_order='2' buyamazon='http://www.amazon.com/Apple-iPhone-4S-16GB-Black/dp/B005VGFQXE%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB005VGFQXE' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPhone_4S' wikipedia_order='21'>iPhone 4S</uword> and, as mentioned above, they have already provided the <uword  category='Software/OS/iOS' manpage='https://developer.apple.com/library/ios/#documentation/CoreBluetooth/Reference/CoreBluetooth_Framework/_index.html' manpage_order='17'>CoreBluetooth API</uword> for it in <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5. <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> could potentially &#8220;just walk in<" to the payments ball game with two gigantic assets already in place. <strong>First</strong>, they have a huge guaranteed, uniform hardware install base to entice developers and partners and <strong>secondly</strong>, there are hundreds of millions of credit card accounts in <uword  category='Software/Music' image='http://upload.wikimedia.org/wikipedia/en/b/b0/ITunes_Logo.png' image_order='1' href='http://www.apple.com/itunes/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/ITunes' wikipedia_order='21'>iTunes</uword> already hooked up and primed to go. The payments-in-real-life arena seems <strong>ripe for disruption</strong> as evidenced by the success of such players as <uword  category='Hardware/iOS/Payments' image='http://upload.wikimedia.org/wikipedia/en/5/52/Squareuplogo.jpg' image_order='1' href='https://squareup.com/' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fsquare%252Fid335393788%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' appios_order='10' wikipedia='http://en.wikipedia.org/wiki/Square_(application)' wikipedia_order='21'>Square</uword> and the seemingly uncompetitive entrenchment of the few large credit card companies in the <uword  category='Countries' image='http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg' image_order='1' href='http://www.usa.gov/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/United_States' wikipedia_order='21'>US</uword>. It only remains to be seen if <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> is even interested in this space at all. Time and time again they have proven that they aren&#8217;t going to just jump into the latest buzzword market simply because it is the hot thing right now. That said, <uword  category='Tech' wikipedia='http://en.wikipedia.org/wiki/Mobile_payment' wikipedia_order='21'>mobile payments</uword> married to <uword  category='Software/Music' image='http://upload.wikimedia.org/wikipedia/en/b/b0/ITunes_Logo.png' image_order='1' href='http://www.apple.com/itunes/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/ITunes' wikipedia_order='21'>iTunes</uword>/<uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> seem to make a lot of sense to me, and enough time has passed for <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> to be able to calmly evaluate the arena with a <strong>cool head</strong> and develop a <strong>consistent plan</strong>. </p>
<h1>What Won&#8217;t be Coming:</h1>
<p>Here are some things I think would be great if they made it into <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 6 but I wouldn&#8217;t put any money on it:</p>
<h2><uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/e/e6/Game_Center_logo.png' image_order='1' href='http://www.apple.com/game-center/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Game_Center' wikipedia_order='21'>Game Center</uword> 3rd Party Authentication</h2>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/gamecenterSmall.png" alt="" title="gamecenterSmall" width="200" height="200" style="float: left; margin-right: 20px; margin-bottom: 10px;" /></p>
<p>This is something I had hoped <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> would include in their gaming social network from the get-go (a year ago I wrote about how this is the number one problem holding back <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/e/e6/Game_Center_logo.png' image_order='1' href='http://www.apple.com/game-center/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Game_Center' wikipedia_order='21'>Game Center</uword> adoption). For games that require accounts or some sort of establishment of identity, being able to develop a game that authenticates against <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/e/e6/Game_Center_logo.png' image_order='1' href='http://www.apple.com/game-center/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Game_Center' wikipedia_order='21'>Game Center</uword> user accounts would be a godsend. Unless you are a large development house that has already created secure user account management systems, it is a <strong>huge pain</strong> to manage users, and an even bigger pain for your customers when you ask them to do <strong>yet another song and dance</strong> through a signup process. <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword> could very easily integrate a 3rd party authentication system into <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/e/e6/Game_Center_logo.png' image_order='1' href='http://www.apple.com/game-center/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Game_Center' wikipedia_order='21'>Game Center</uword>, but I have heard through the grapevine that there is <strong>no internal interest</strong> in doing so. Instead they have provided us with <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword>-hosted turn-based gaming functionality, which alleviates some of the problems developers have had, but it has some severe limitations and doesn&#8217;t address entire swaths of game genres like realtime action games. </p>
<h2>Deep <uword  category='Websites/Social' image='http://upload.wikimedia.org/wikipedia/commons/0/06/Facebook.svg' image_order='1' href='http://www.facebook.com' href_order='2' twitter='https://twitter.com/#!/facebook' twitter_order='18' linkedin='http://www.linkedin.com/company/facebook' linkedin_order='19' facebook='http://www.facebook.com/facebook' facebook_order='20' wikipedia='http://en.wikipedia.org/wiki/Facebook' wikipedia_order='21'>Facebook</uword> Integration</h2>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2012/03/facebook-logoSmall.png" alt="" title="facebook-logoSmall" width="200" height="200" style="float: left; margin-right: 20px; margin-bottom: 10px; margin-top: 5px;" /></p>
<p>By all accounts (from the rumor sites) this one almost happened. Technically there is nothing stopping it. <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5 already brought us deep <uword  category='Websites/Social' image='http://upload.wikimedia.org/wikipedia/en/thumb/1/1e/Twitter_2010_logo.svg/200px-Twitter_2010_logo.svg.png' image_order='1' href='http://www.twitter.com' href_order='2' twitter='https://twitter.com/#!/twitter' twitter_order='18' linkedin='http://www.linkedin.com/company/twitter' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Twitter' wikipedia_order='21'>Twitter</uword> integration and from what it looks like from the outside, most of the work was already done (see <uword  category='Websites/Social' href='http://www.apple.com/itunes/ping/' href_order='2'>Ping</uword> etc&#8230;). Instead things got bogged down on the <strong>business side</strong> of things as they often do, and after some heavy Jobs vs. <uword  category='People/Tech' image='http://twimg0-a.akamaihd.net/profile_images/77846223/profile_reasonably_small.jpg' image_order='1' twitter='https://twitter.com/#!/finkd' twitter_order='18' linkedin='http://www.linkedin.com/pub/mark-zuckerberg/0/835/a34' linkedin_order='19' facebook='http://www.facebook.com/zuck' facebook_order='20' wikipedia='http://en.wikipedia.org/wiki/Mark_Zuckerberg' wikipedia_order='21'>Zuckerberg</uword> meetings it appears like it was no longer meant to be. That is not to say that it can&#8217;t happen in the future, which is why some people have high hopes that it will arrive in <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 6. I however feel that as time as passed, <strong>distances have grown</strong> instead of shrunk. These days <uword  category='Websites/Social' image='http://upload.wikimedia.org/wikipedia/commons/0/06/Facebook.svg' image_order='1' href='http://www.facebook.com' href_order='2' twitter='https://twitter.com/#!/facebook' twitter_order='18' linkedin='http://www.linkedin.com/company/facebook' linkedin_order='19' facebook='http://www.facebook.com/facebook' facebook_order='20' wikipedia='http://en.wikipedia.org/wiki/Facebook' wikipedia_order='21'>Facebook</uword> seems to be the girl everybody wants to dance with, and it seems every day they and <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Microsoft_wordmark.svg/200px-Microsoft_wordmark.svg.png' image_order='1' href='http://www.microsoft.com' href_order='2' twitter='https://twitter.com/#!/microsoft' twitter_order='18' linkedin='http://www.linkedin.com/company/microsoft' linkedin_order='19' facebook='http://www.facebook.com/Microsoft' facebook_order='20' wikipedia='http://en.wikipedia.org/wiki/Microsoft' wikipedia_order='21'>Microsoft</uword> continue to get cozier with each other. I wouldn&#8217;t preclude this from happening sometime in the future, but <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 6? Too soon.</p>
<h1>Your Predictions</h1>
<p>What do you think? Do I have it right? Any <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 6 predictions of your own? Let me know in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2012/03/06/ios-6-predictions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iOS Caster Now Has 60beat GamePad Support</title>
		<link>http://www.aorensoftware.com/blog/2012/01/06/ios-caster-now-has-60beat-gamepad-support/</link>
		<comments>http://www.aorensoftware.com/blog/2012/01/06/ios-caster-now-has-60beat-gamepad-support/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 08:51:24 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[60beat]]></category>
		<category><![CDATA[Caster]]></category>
		<category><![CDATA[Computer Games]]></category>
		<category><![CDATA[GamePad]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1222</guid>
		<description><![CDATA[Here&#8217;s demo of the new 60beat GamePad with my friend Mike&#8216;s game Caster HD. I added support to both Caster/Caster HD and the update has been submitted to the App Store for approval. It shouldn&#8217;t be too long before the update actually hits the App Store. (UPDATE: Both updates are now live on the App [...]]]></description>
			<content:encoded><![CDATA[<p><center><iframe width="824" height="419" src="http://www.youtube.com/embed/Cvygl3Op92E?rel=0" frameborder="0" allowfullscreen></iframe></center></p>
<p>Here&#8217;s demo of the new <a href="http://www.60beat.com/?Click=207">60beat GamePad</a> with my friend <a href="http://elecorn.com/blog/">Mike</a>&#8216;s game <a href="http://bit.ly/casterhdapp">Caster HD</a>. I added support to both <a href="http://bit.ly/casterapp">Caster</a>/<a href="http://bit.ly/casterhdapp">Caster HD</a> and the update has <strong>been submitted</strong> to the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> for approval. It shouldn&#8217;t be too long before the update actually hits the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword>. (<strong>UPDATE</strong>: Both updates are now live on the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword>!)</p>
<p>In the video I demo the controls starting with the cursor. The <a href="http://bit.ly/castermac">Mac</a>/<a href="http://bit.ly/castersteam">Win</a>/<a href="http://bit.ly/casterlinux32">Linux</a> version of <uword  category='Software/Games' image='http://aorensoftware.com/images/casterRounded256.png' image_order='1' href='http://www.casterthegame.com' href_order='2' trailer='http://www.youtube.com/watch?v=wCWZV9xPa0M' trailer_order='5' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcaster%252Fid314016537%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10' appmac='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcaster%252Fid406520140%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30' appmac_order='11' appwebos='http://developer.palm.com/appredirect/?packageid=com.elecorn.app.caster' appwebos_order='12' appwindows='https://www.plimus.com/jsp/buynow.jsp?contractId=2239186' appwindows_order='14'>Caster</uword> has game pad support for the in-game cursor and so it was easiest to just hook into that. You don&#8217;t need to worry about switching between touch and game pad controls. <uword  category='Software/Games' image='http://aorensoftware.com/images/casterRounded256.png' image_order='1' href='http://www.casterthegame.com' href_order='2' trailer='http://www.youtube.com/watch?v=wCWZV9xPa0M' trailer_order='5' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcaster%252Fid314016537%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10' appmac='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcaster%252Fid406520140%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30' appmac_order='11' appwebos='http://developer.palm.com/appredirect/?packageid=com.elecorn.app.caster' appwebos_order='12' appwindows='https://www.plimus.com/jsp/buynow.jsp?contractId=2239186' appwindows_order='14'>Caster</uword> has no on-screen control overlays and both control styles will work <strong>concurrently</strong> so you just plug in and go! No setting switch required. </p>
<p>After getting into the game I demonstrate the settings for the <strong>camera movement</strong> which is controlled by the right analog stick. The start button will <strong>pause</strong> the game and give you access to the options menu. There you can tweak the camera sensitivity and invert the axis if you want. </p>
<p>A lot of the other controls are doubled up so you can use whichever you prefer. The left analog stick or the directional pad control <strong>walking movement</strong>. Button 3 or R2 will <strong>jump</strong>. Button 4 or the R1 will <strong>fire</strong>. Buttons 1, 2 and L2 will rotate through the <strong>different weapons</strong>. By holding down L1 you initiate a <strong>dash</strong> when moving.</p>
<p>(While I&#8217;ve got you here, be sure to check out my new 3D physics shooter <a href="http://www.invaderzurp.com">Invader Zurp</a> if you haven&#8217;t already. It is a ton of fun and there is nothing else like in on the <a href="http://bit.ly/invaderzurp">App Store</a>. <img src='http://www.aorensoftware.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2012/01/06/ios-caster-now-has-60beat-gamepad-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Death to .DS_Store</title>
		<link>http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/</link>
		<comments>http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 05:18:33 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[.DS_Store]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[mach_star]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1159</guid>
		<description><![CDATA[The &#8220;.DS_Store&#8221; file is an abomination and must be stopped. You know what I&#8217;m talking about. I regularly rant about how this annoying file gets in your way, dirties things up and just screws with your stuff in general. Today I decided to do something about it. Before we get to that, lets quickly review [...]]]></description>
			<content:encoded><![CDATA[<p>The &#8220;<uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword>&#8221; file is an <strong>abomination</strong> and must be stopped. You know what I&#8217;m talking about. I regularly rant about how this annoying file <strong>gets in your way</strong>, <strong>dirties things up</strong> and just <strong>screws with your stuff</strong> in general. Today I decided to do something about it. Before we get to that, lets quickly review what it is and why it sucks. </p>
<h2>What Is It?</h2>
<p><img style="float: left; margin-right: 20px; margin-top: -10px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/dsstore3.png" alt="" title="dsstore" width="318" height="347" class="aligncenter size-full wp-image-1161" /></p>
<p>The <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> is a <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Metadata' wikipedia_order='21'>metadata</uword> file created primarily by <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/commons/e/e8/OS_X_Logo.png' image_order='1' href='http://www.apple.com/macosx/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Mac_OS_X' wikipedia_order='21'>Mac OS X</uword>&#8217;s <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder.app</uword>. Because of the dot (&#8220;.&#8221;) prefix it is typically not visible in many file browsers and most <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/commons/e/e8/OS_X_Logo.png' image_order='1' href='http://www.apple.com/macosx/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Mac_OS_X' wikipedia_order='21'>Mac OS X</uword> users are probably not aware of it. It is regularly created when the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> accesses <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/File_system' wikipedia_order='21'>filesystem</uword> directories. It contains directory information about icon locations, view options, silkscreen configuration and the like. The functionality that it provides is moderately useful, but becoming less and less relevant over time. In any case, a long time ago the <strong>horrible</strong> decision was made to store that <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Metadata' wikipedia_order='21'>metadata</uword> in an actual file (<uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword>) in the <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/File_system' wikipedia_order='21'>filesystem</uword> within the relevant directory. We have been paying for it ever since. Over time more and more <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Metadata' wikipedia_order='21'>metadata</uword> relating to files and the <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/File_system' wikipedia_order='21'>filesystem</uword> has been added to <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/commons/e/e8/OS_X_Logo.png' image_order='1' href='http://www.apple.com/macosx/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Mac_OS_X' wikipedia_order='21'>Mac OS X</uword>, but thankfully those have been stored in saner places (<uword  category='Software/Tech' wikipedia='http://en.wikipedia.org/wiki/Extended_file_attributes' wikipedia_order='21'>extended attributes</uword>, etc). For the time being though <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> is still here with us and still causing trouble. What&#8217;s so harmful about the file you might ask?</p>
<p><span id="more-1159"></span></p>
<h3>Cross-OS Cleanliness</h3>
<p>The <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> file is only useful if you are accessing the <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/File_system' wikipedia_order='21'>filesystem</uword> with the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword>. What if you aren&#8217;t using the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> though? What if you aren&#8217;t even using <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/commons/e/e8/OS_X_Logo.png' image_order='1' href='http://www.apple.com/macosx/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Mac_OS_X' wikipedia_order='21'>Mac OS X</uword> at all? <strong>At best</strong> the files then become wasted space that is ignored. <strong>At worst</strong> they are horrible clutter that dirties up your file browsing experience. It doesn&#8217;t take much online searching to find <strong>countless</strong> forum posts from <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/b/b7/Windows_logo.svg/200px-Windows_logo.svg.png' image_order='1' href='http://windows.microsoft.com' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;field-keywords=Microsoft%20Windows&amp;url=search-alias%3Dsoftware' buyamazon_order='8' buyebay='http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&amp;campid=5575002009&amp;icep_uq=Microsoft%20Windows&amp;icep_sortBy=12&amp;icep_catId=58058&amp;ipn=psmain&amp;icep_vectorid=229466&amp;kwid=902099&amp;mtid=824&amp;kw=lg' buyebay_order='9' wikipedia='http://en.wikipedia.org/wiki/Microsoft_Windows' wikipedia_order='21'>Windows</uword> users asking what these files are or the <strong>innumerable</strong> removal scripts that Linux users have authored to clean them from their directories. On <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/commons/e/e8/OS_X_Logo.png' image_order='1' href='http://www.apple.com/macosx/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Mac_OS_X' wikipedia_order='21'>Mac OS X</uword>, if you insert a <uword  category='Hardware' image='http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/SanDisk_Cruzer_Micro.png/320px-SanDisk_Cruzer_Micro.png' image_order='1' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;field-keywords=USB%20flash%20drive&amp;url=search-alias%3Delectronics' buyamazon_order='8' buyebay='http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&amp;campid=5575002009&amp;icep_uq=USB%20flash%20drive&amp;icep_sortBy=12&amp;icep_catId=293&amp;ipn=psmain&amp;icep_vectorid=229466&amp;kwid=902099&amp;mtid=824&amp;kw=lg' buyebay_order='9' wikipedia='http://en.wikipedia.org/wiki/USB_flash_drive' wikipedia_order='21'>USB flash drive</uword>, mount a network volume or zip up a directory to give to a friend, more likely than not, <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> files have hopped on for the ride. Whoever has to interact with those directories next that doesn&#8217;t use a <uword  category='Hardware/Computers' href='http://www.apple.com/mac/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;redirect=true&amp;keywords=mac&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329246109&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3Amac%2Cn%3A2423158011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/Macintosh' wikipedia_order='21'>Mac</uword> is going to have to deal with those in some way even if it just having to consciously ignore them. Eventually a power-user facing flag was added that would disable <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> file creation on network volumes (&#8220;<code>defaults write com.apple<uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/.desktop' wikipedia_order='21'>.desktop</uword>services <uword  category='Software/OS' href='http://support.apple.com/kb/HT1629' href_order='2'>DSDontWriteNetworkStores</uword> true</code>&#8220;) which was a good move. There are still however, plenty of reasons why <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/commons/e/e8/OS_X_Logo.png' image_order='1' href='http://www.apple.com/macosx/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Mac_OS_X' wikipedia_order='21'>Mac OS X</uword> users hate having them on their own systems.</p>
<h3><uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Revision_control' wikipedia_order='21'>Source Control</uword> Gunk</h3>
<p>All the programmers in the room, <strong>raise your hand</strong> if you have ever added &#8220;<uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword>&#8221; to your <code><uword  category='Software/Programming' href='http://help.github.com/ignore-files/' href_order='2'>.gitignore</uword></code> file or equivalent <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Revision_control' wikipedia_order='21'>source control</uword> ignore configuration? What&#8217;s that? That guy in the back who didn&#8217;t raise his hand? Oh, he was sleeping&#8230;<em>there&#8217;s his hand</em>. The contents of the <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> file are always changing and so even if you did happen to check the <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> files into your <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Repository_(version_control)' wikipedia_order='21'>repository</uword> (furthering it&#8217;s unholy propagation) it is always going to be showing up as a changed file and gunking up your commits with changes and data that have <strong>absolutely nothing at all to do with your code</strong>. I have to wonder how many global man hours have been wasted in configuring <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Repository_(version_control)' wikipedia_order='21'>source repos</uword> to ignore these files or cleaning them out of the repos after someone YET AGAIN added them in their latest commit. </p>
<h3><uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Filesystem_permissions' wikipedia_order='21'>Permissions</uword> Playtime</h3>
<p>Because the <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> file is so inconspicuous and usually innocuous, a lot of the time we simply forget it is there. Unfortunately when doing things like mass permission changes and the like, the <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> file will unintentionally come along for the ride. Suppose you tighten up the <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Filesystem_permissions' wikipedia_order='21'>permissions</uword> on a directory that has a <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> in it. After a while you decide to go through an manually clean it or lower the <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Filesystem_permissions' wikipedia_order='21'>permission levels</uword> on the contents again. You had better remember that you also raised the <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Filesystem_permissions' wikipedia_order='21'>permissions</uword> on the <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> file as well or you might be puzzled why you don&#8217;t have permission to delete the directory or why the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> isn&#8217;t saving your directory options. It is no show stopper. Any competent <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Command-line_interface' wikipedia_order='21'>command line</uword> monkey can figure it out and fix it. But again, the few minutes it takes to fix it should never have been necessary. <strong>Technology is supposed to save time, not destroy it.</strong></p>
<p><img style="float: right; margin-left: 20px; margin-top: 10px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/Patriot-Games.jpg" alt="" title="Patriot Games" width="200" height="300" class="aligncenter size-full wp-image-1162" /></p>
<h2>So What Do We Do About It?</h2>
<p>Those were just three examples that I thought of off the top of my head. Leave your own <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> horror/annoyance stories in the comments and I will add any more that don&#8217;t generally fall under one of those three examples. So they are a time consuming annoyance, <strong>easy enough to whine about</strong>. But what to <strong>DO</strong> about it? The other day I again <a href="http://twitter.com/#!/snielsen42/status/150314800403070976">ranted on twitter</a> about them and it <a href="http://twitter.com/#!/paulschreiber/status/150381129906651136">was suggested</a> that maybe someone could write a <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Daemon_(computing)' wikipedia_order='21'>daemon</uword> that would listen to <uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/FSEvents_ProgGuide/Introduction/Introduction.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/FSEvents' wikipedia_order='21'>fsevents</uword> and nuke them on creation. I kept thinking that the evil should really be stopped at the source. The <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword>. I <a href="http://twitter.com/#!/snielsen42/status/150384779806773248">wondered aloud</a> what it would take to patch the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> so that it wouldn&#8217;t even create them anymore at all. I decided that the creation of <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> files needed to be stopped. Like <uword  category='People/Fictional' imdb='http://www.imdb.com/character/ch0003246/' imdb_order='16' wikipedia='http://en.wikipedia.org/wiki/Jack_Ryan_(Tom_Clancy_character)' wikipedia_order='21'>Jack Ryan</uword> in <a href="http://www.imdb.com/title/tt0105112/">Patriot Games</a> I decided that &#8220;I will make it my mission in life&#8221;. For an afternoon at least. So in the interest of <strong>cleanliness</strong> I came up with a <strong>dirty hack</strong>. I call it <a href="https://github.com/snielsen/DeathToDSStore">DeathToDSStore</a>. I have documented my investigation and development process below.</p>
<h2>Who&#8217;s Behind This!? I Want A Name!</h2>
<p><center><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/strings3.png" alt="" title="strings2" width="650" height="138" class="aligncenter size-full wp-image-1164" /></center></p>
<p>I initially suspected that it was solely the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder.app</uword> that was responsible for <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> creation. After a little investigation it appeared like that was pretty much true but there <em>might</em> be other things out there that also create them. My first lead was the <code><uword  category='Software/OS' href='http://support.apple.com/kb/HT1629' href_order='2'>DSDontWriteNetworkStores</uword></code> setting that causes the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> to not create the files on network mounts. I needed to find out where the code that interacted with that setting lives. Examining <code>/System/Library/<uword  category='Software/OS' manpage='http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/CoreServicesLayer/CoreServicesLayer.html' manpage_order='17' wikipedia='http://en.wikipedia.org/wiki/CoreServices' wikipedia_order='21'>CoreServices</uword>/<uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder.app</uword></code> with <code>strings</code> came up empty. It must be in a framework somewhere. Poking around <code>/System/Library/PrivateFrameworks</code> revealed the culprit: <code>DesktopServicesPriv.framework</code>. Ok so, <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> authoring functionality is very likely in this framework. Clients of this framework in <code>/System/Library/<uword  category='Software/OS' manpage='http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/CoreServicesLayer/CoreServicesLayer.html' manpage_order='17' wikipedia='http://en.wikipedia.org/wiki/CoreServices' wikipedia_order='21'>CoreServices</uword></code> include <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/1/17/Dock.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Dock.app' wikipedia_order='21'>Dock.app</uword>, FileSyncAgent.app, TimeMachine.menu, backupd and <strong>the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder.app</uword></strong>. For the time being I was just going to concentrate on the main offender.</p>
<h3>AKA Property Stores</h3>
<p><center><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/networkproperties3.png" alt="" title="networkproperties" width="650" height="384" class="aligncenter size-full wp-image-1165" /></center></p>
<p>I started perusing <code>DesktopServicesPriv.framework</code>&#8216;s symbols using <code><uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/nm.1.html' manpage_order='17' wikipedia='http://en.wikipedia.org/wiki/Nm_(Unix)' wikipedia_order='21'>nm</uword></code> (piped into <code><uword  category='Software/Programming' manpage='http://sourceware.org/binutils/docs/binutils/c_002b_002bfilt.html' manpage_order='17'>c++filt</uword></code>) to see what kind of things I had to work with. Hmm, <code>FSVolumeInfo::ShouldWriteNetworkPropertyStores()</code>? That sounds like it could be directly connected to <code><uword  category='Software/OS' href='http://support.apple.com/kb/HT1629' href_order='2'>DSDontWriteNetworkStores</uword></code>. Perusing around a little more it appears like <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> files are called &#8220;<strong>Property Stores</strong>&#8221; internally. There is even a <uword  category='Software/Programming' href='http://www.cplusplus.com/doc/tutorial/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/C++' wikipedia_order='21'>C++</uword> <code>HFSPlusPropertyStore</code> class present. I had just found what I was looking for. Time to start poking at things.</p>
<h3>I Wanna Be A <uword  category='Software/Programming' href='https://github.com/rentzsch/mach_star' href_order='2'>mach_star</uword></h3>
<p><center><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/nm3.png" alt="" title="nm" width="650" height="384" class="aligncenter size-full wp-image-1166" /></center></p>
<p>I pulled out <a href="http://twitter.com/#!/rentzsch">rentzsch</a>&#8216;s awesome <a href="https://github.com/rentzsch/mach_star">mach_star</a> injection/overriding code and started overriding various routines in that class. For some reason I wasn&#8217;t able to use <code><uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man3/dlsym.3.html' manpage_order='17'>dlsym</uword>()</code> to get the address of any <uword  category='Software/Programming' href='http://www.cplusplus.com/doc/tutorial/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/C++' wikipedia_order='21'>C++</uword> member functions. I tried all sorts of permutations of the mangled name that <code><uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/nm.1.html' manpage_order='17' wikipedia='http://en.wikipedia.org/wiki/Nm_(Unix)' wikipedia_order='21'>nm</uword></code> was giving me for stuff but nothing seemed to work. &#8220;<em>Well, I guess I could always just plug the raw address in.</em>&#8221; I thought. So I used <code><uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/vmmap.1.html' manpage_order='17'>vmmap</uword> <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword></code> to get the base address of where the <code>DesktopServicesPriv.framework</code>&#8216;s <code><uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/CodeFootprint/Articles/MachOOverview.html' href_order='2'>__TEXT</uword></code> section was residing in memory. If <a href="http://en.wikipedia.org/wiki/Address_space_layout_randomization">ASLR</a> (<uword  category='Software/Security' wikipedia='http://en.wikipedia.org/wiki/Address_space_layout_randomization' wikipedia_order='21'>Address Space Layout Randomization</uword>) is in play then this value can be different every launch. (<strong>EDIT UPDATE</strong>: <a href="http://www.twitter.com/comex">comex</a> reminded me about the <uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/dyld.1.html' manpage_order='17'>_dyld</uword> family of routines and so this is now obtained manually at <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Run_time_(program_lifecycle_phase)' wikipedia_order='21'>runtime</uword> instead.)</p>
<p><code><uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/nm.1.html' manpage_order='17' wikipedia='http://en.wikipedia.org/wiki/Nm_(Unix)' wikipedia_order='21'>nm</uword></code> gave me the offsets of the functions I was targeting and so it was simple enough to just add them together to get the location of the functions I needed to override. It would obviously be a lot cleaner to be able to determine the address from within the binary at <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Run_time_(program_lifecycle_phase)' wikipedia_order='21'>runtime</uword> but I couldn&#8217;t convince <code><uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man3/dlsym.3.html' manpage_order='17'>dlsym</uword></code> to give me anything and this was working (unfortunately it adds an external dependencies on <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword>&#8217;s Developer Tools (<code><uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/nm.1.html' manpage_order='17' wikipedia='http://en.wikipedia.org/wiki/Nm_(Unix)' wikipedia_order='21'>nm</uword></code>) and BSD.pkg(<code><uword  category='Software/Programming' manpage='http://sourceware.org/binutils/docs/binutils/c_002b_002bfilt.html' manpage_order='17'>c++filt</uword></code>)).</p>
<h3>Gotcha!</h3>
<p><center><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/flush3.png" alt="" title="flush" width="650" height="384" class="aligncenter size-full wp-image-1169" /></center></p>
<p>After a bit of trial and error I found that overriding <code>HFSPlusPropertyStore::FlushChanges()</code> with a function that simply did nothing, successfully prevented the creation of <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> files on both <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Snow_Leopard' wikipedia_order='21'>Snow Leopard</uword> and Lion. On first inspection it doesn&#8217;t appear that overriding this function has any unintended behaviors and appears to accomplish the objective of halting <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> creation quite nicely! Or about as nicely as you can when you are doing something like live patching the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword>.</p>
<p>(<em>Side note:</em> I noticed that I am not the only one using <uword  category='Software/Programming' href='https://github.com/rentzsch/mach_star' href_order='2'>mach_star</uword> to live patch the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword>. The <a href="http://www.dropbox.com">Dropbox</a> <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Daemon_(computing)' wikipedia_order='21'>daemon</uword> is doing it as well every time the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> launches)</p>
<h2>There&#8217;s An App For That</h2>
<p>So I packaged my work up into an <a href="http://www.aorensoftware.com/Downloads/Files/DeathToDSStore.zip">app</a> (you can also run it through the <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Command-line_interface' wikipedia_order='21'>command line</uword> under <uword  category='Software/OS' href='http://xkcd.com/149/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Sudo' wikipedia_order='21'>sudo</uword> with the &#8220;<code>-silent</code>&#8221; option) and published <a href="https://github.com/snielsen/DeathToDSStore">the source</a> on github. In the near future I am going to add a <code><uword  category='Software/Programming' manpage='https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man8/launchd.8.html' manpage_order='17' wikipedia='http://en.wikipedia.org/wiki/Launchd' wikipedia_order='21'>launchd</uword></code> option so that it will run every time the user logs in or any time the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/8/8d/Dock_finder.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/Finder_(software)' wikipedia_order='21'>Finder</uword> is run (<strong>EDIT UPDATE</strong>: The option to install a Launch Agent has now been added). Now that I have a solution I am going to put my <strong>money where my mouth is</strong> and start running without <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword> file creation full time. Hopefully I wont run into any major issues (I will report them here if I do) and I am pretty sure that I wont miss their functionality (At least by having new ones created. Existing <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Disk_image' wikipedia_order='21'>disk images</uword> and CDs with custom layouts will still be read just fine). So far the result is pretty positive! Is this <em>safe</em>? Eh&#8230;. The safety/cleanliness/forward compatibility of patching OS components has been discussed and debated ad nauseum. You probably already understand the risks involved. Things look pretty stable but I make <strong>no promises</strong>. Go ahead and try out the <a href="http://www.aorensoftware.com/Downloads/Files/DeathToDSStore.zip">DeathToDSStore.app</a> or build your own from <a href="https://github.com/snielsen/DeathToDSStore">source</a> if you want and let me know how it works out for you. Remember that you need to have the Developer Tools installed, BSD.pkg installed and admin authorization. <strong>Death to <uword  category='Software/Tech' href='http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/.DS_Store' wikipedia_order='21'>.DS_Store</uword>!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Zurp 1.0 Postmortem</title>
		<link>http://www.aorensoftware.com/blog/2011/12/15/zurp-1-0-postmortem/</link>
		<comments>http://www.aorensoftware.com/blog/2011/12/15/zurp-1-0-postmortem/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 03:47:31 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[Achievements]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Bullet3d]]></category>
		<category><![CDATA[Cannonade]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Game Center]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[Invader Zurp]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Postmortems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Psychology]]></category>
		<category><![CDATA[Startups]]></category>
		<category><![CDATA[Video Games]]></category>
		<category><![CDATA[Weaponry]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1128</guid>
		<description><![CDATA[Last September I wrote a blog post introducing Invader Zurp which revealed a little of the back story on how I came upon this new game idea after it&#8217;s first 2 months in development. Fast forward to 3 months later and Invader Zurp had just hit the App Store! I thought it would be useful [...]]]></description>
			<content:encoded><![CDATA[<p>Last September I wrote a blog post <a href="http://www.aorensoftware.com/blog/2011/09/12/invader-zurp/">introducing Invader Zurp</a> which revealed a little of the back story on how I came upon this new game idea after it&#8217;s first 2 months in development. Fast forward to 3 months later and <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> had just <a href="http://bitly.com/invaderzurp">hit the App Store</a>! I thought it would be useful to sit down and review the last 5 months of development, kind of plan out where I want to go from here and go over the <strong>events</strong> and <strong>insights</strong> that I thought were most influential during development.</p>
<h3>The Story So Far&#8230;</h3>
<p><img style="float: left; margin-right: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/zurpsketch.jpg" alt="" title="zurpsketch" width="220" height="300" class="aligncenter size-full wp-image-1153" /></p>
<p>So to recap the original <a href="http://www.aorensoftware.com/blog/2011/09/12/invader-zurp/">blog post</a> a bit, it was the middle of the summer (2011) and I had been working my brains out on <a href="http://www.aorensoftware.com/blog/2011/04/02/introduction-to-cannonade/">Cannonade</a> for the previous 6 months. I was a little discouraged at that point because progress wasn&#8217;t coming quite as quickly as I had hoped. Reception from my testers (just friends and family at that point) hadn&#8217;t been as positive as I had wanted either. I still had a very clear vision of what I wanted Cannonade to be and still believed that there is a <em>ton of untapped potential for multiplayer-only games on <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword></em>. But there was only so much I that could do as a <strong>one-man team</strong> and testing a multiplayer game can be quite time consuming. I took the family on vacation in early July and was able to step away from things for a while. It was then that I got an idea for a single player experience that distilled the core gameplay mechanic of Cannonade down to it&#8217;s essence. Thus <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> was born. Within two weeks I had modularized the Cannonade game engine, re-written the graphics sub-system in <uword  category='Software/Graphics' image='http://upload.wikimedia.org/wikipedia/en/9/9f/OpenGL_ES_logo.png' image_order='1' href='http://www.khronos.org/opengles/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/OpenGL_ES' wikipedia_order='21'>OpenGL ES</uword> 2.0 and had a working <uword  category='Concepts' wikipedia='http://en.wikipedia.org/wiki/Prototype' wikipedia_order='21'>prototype</uword>. And it was <strong>fun</strong>! I found myself on very long &#8220;testing&#8221; sessions playing even after I had verified my fixes. I seeded the first alpha version in early September and wrote the introductory blog post. Then began the journey of finishing the game and kicking the darn thing out the door. <span id="more-1128"></span></p>
<h3>Feedback Lesson 1: Make Written Feedback Easy</h3>
<p><img style="float: right; margin-left: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/feedback.png" alt="" title="feedback" width="300" height="102" class="aligncenter size-full wp-image-1141" /></p>
<p>I got a lot of really <strong>great</strong> feedback from my testers all along the way. I learned two very valuable things about feedback through my experiences with <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword>. The first was that you really need to make it dumb easy for people to give you <strong>WRITTEN</strong> feedback. A lot of my friends would give me awesome feedback when I saw them in person but for the life of me I wouldn&#8217;t be able to remember it even the next day. I got on the beta list for the <a href="https://testflightapp.com/sdk/">TestFlight SDK</a> and start integrating various features into <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword>. One of the most important functionality that I saw in the <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Software_development_kit' wikipedia_order='21'>SDK</uword> was a <strong>one-line</strong> (of code) feedback dialog. I added an obnoxious red &#8220;Feedback&#8221; button into the app and made it pervasive except when the user was actively playing the game. This button brought up the <uword  category='Websites/Programming' href='https://testflightapp.com' href_order='2'>TestFlight</uword> feedback dialog where they could write to their hearts content. <strong>The floodgates opened</strong>. I started getting a lot of feedback. Most of it was pretty short, just stuff people had noticed in the moment. But it was those little things that people would not have remembered to tell me later that really helped raise the polish level in a lot of places. </p>
<h3>Feedback Lesson 2: Take Individual Opinions As Part Of A Whole</h3>
<p><img style="float: right; margin-left: 20px; margin-top: 7px; margin-bottom: 3px;;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/opinion.jpg" alt="" title="opinion" width="250" height="258" class="aligncenter size-full wp-image-1142" /></p>
<p>The second important thing I learned about feedback was that any individual person&#8217;s opinion needs to be treated as a part of a larger set of feedback. I had friends tell me very confidently that things needed to be this way or that way. My friends are really smart and know what they are talking about and so I would start to worry that maybe I was on the wrong track and I really should change course (sometimes <em>drastically</em>). However, once I took that individual nugget of feedback and put it up against all the other feedback I was getting I was able to remove my more emotional reactions to it and look things more objectively. This meant that even if my friends were right and I was wrong, I could deal with it in a better way by understanding how it fit in to the entire picture of collective user reaction. I could see <strong>patterns</strong> emerge across multiple testers that indicated that a particular piece was either very wrong or very right. I wasn&#8217;t doing game design by committee though. I still took minority advice sometimes when I felt it was the right thing to do and ultimately I had to veto some majority feedback when I truly felt that it didn&#8217;t mesh with the overlying game vision. I was willing to try anything though and I did in fact implement a lot of crazy feedback that my testers gave me just so that I could see what it felt like in action. An idea on paper and the same idea in implementation are often <strong>completely different things</strong>. I mean, just look at the &#8220;<em>it&#8217;s just a big <uword  category='Hardware/Devices' href='http://www.apple.com/ipodtouch/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;keywords=ipod%20touch&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329269048&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3Aipod%20touch%2Cn%3A2423740011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPod_Touch' wikipedia_order='21'>iPod Touch</uword></em>&#8221; <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/IPad_2_White_on_table.jpg/245px-IPad_2_White_on_table.jpg' image_order='1' href='http://www.apple.com/ipad/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;keywords=iPad&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329269556&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3AiPad%2Cn%3A2423172011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPad' wikipedia_order='21'>iPad</uword>. </p>
<h3>Building A Game For Me</h3>
<p><img style="float: left; margin-right: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/ikaruga.jpg" alt="" title="ikaruga" width="300" height="255" class="aligncenter size-full wp-image-1143" /></p>
<p>The overall gameplay concept of <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> was originally inspired a lot by <a href="http://en.wikipedia.org/wiki/Ikaruga">Ikaruga</a>. <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/c/c7/Ikaruga_cover_DC.jpg' image_order='1' buyamazon='http://www.amazon.com/gp/product/B002G5HXNY/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002G5HXNY' buyamazon_order='8' buyebay='http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&amp;pub=5575002009&amp;toolid=10001&amp;campid=5337041634&amp;customid=&amp;icep_uq=Ikaruga&amp;icep_sellerId=&amp;icep_ex_kw=&amp;icep_sortBy=12&amp;icep_catId=139973&amp;icep_minPrice=&amp;icep_maxPrice=&amp;ipn=psmain&amp;icep_vectorid=229466&amp;kwid=902099&amp;mtid=824&amp;kw=lg' buyebay_order='9' wikipedia='http://en.wikipedia.org/wiki/Ikaruga' wikipedia_order='21'>Ikaruga</uword> is a game that you can completely play through in <strong>25 minutes</strong>. But the REAL game is not simply completing the levels from start to finish, but rather it&#8217;s mastering the intricate chaining system and racking up huge scores. I thought that this was a really deep gameplay mechanic. One that really wouldn&#8217;t be appreciated unless the player invested some time into it. However, this deeper gameplay and <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/c/c7/Ikaruga_cover_DC.jpg' image_order='1' buyamazon='http://www.amazon.com/gp/product/B002G5HXNY/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002G5HXNY' buyamazon_order='8' buyebay='http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&amp;pub=5575002009&amp;toolid=10001&amp;campid=5337041634&amp;customid=&amp;icep_uq=Ikaruga&amp;icep_sellerId=&amp;icep_ex_kw=&amp;icep_sortBy=12&amp;icep_catId=139973&amp;icep_minPrice=&amp;icep_maxPrice=&amp;ipn=psmain&amp;icep_vectorid=229466&amp;kwid=902099&amp;mtid=824&amp;kw=lg' buyebay_order='9' wikipedia='http://en.wikipedia.org/wiki/Ikaruga' wikipedia_order='21'>Ikaruga</uword> as a whole is not regarded as being a very casual friendly game (casual gaming being what the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>iOS App Store</uword> seems to reward a lot). <a href="http://en.wikipedia.org/wiki/Treasure_(company)">Treasure</a> (the developer) is well known for catering towards the more &#8220;hardcore&#8221; elements in gaming. I initially designed <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> in a similar manner to <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/c/c7/Ikaruga_cover_DC.jpg' image_order='1' buyamazon='http://www.amazon.com/gp/product/B002G5HXNY/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002G5HXNY' buyamazon_order='8' buyebay='http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&amp;pub=5575002009&amp;toolid=10001&amp;campid=5337041634&amp;customid=&amp;icep_uq=Ikaruga&amp;icep_sellerId=&amp;icep_ex_kw=&amp;icep_sortBy=12&amp;icep_catId=139973&amp;icep_minPrice=&amp;icep_maxPrice=&amp;ipn=psmain&amp;icep_vectorid=229466&amp;kwid=902099&amp;mtid=824&amp;kw=lg' buyebay_order='9' wikipedia='http://en.wikipedia.org/wiki/Ikaruga' wikipedia_order='21'>Ikaruga</uword> in that you could easily burn through all 100 waves of structures in about 20 minutes. The REAL game and the mechanic that would add substantive depth would exist in a system that rewards you for making tricky <strong>mid-air</strong> block hits. Anyone could shoot the blocks and destroy the towers but it took real skill to hit things in such a way that the blocks would pop up into the air and you needed to be lighting fast in order to target them before they hit the ground. Doing so would reward the player with a lot of points. Coupled with this is an automatic upgrading system that directly ties to your score, the maximum number of missiles that you have to shoot, how fast the missiles regenerate after being shot, how fast your shields regenerate and how powerful your missiles are. The idea was to have a nice smooth power ramp up. You start out with only a few, slowly regenerating missiles and as you get more points, you gradually upgrade to become an uber powerful, unstoppable destruction machine. The thing is that you need to make sure you are scoring a lot of points so that your <strong>upgrade curve</strong> stays ahead of the <strong>difficulty curve</strong>. The waves coming at you steadily increase in turret number and rate of fire and so if you don&#8217;t make sure to rack up tons of points along the way you will eventually not be able to keep up with the onslaught. Learning the point-heavy, mid-air shot skill is really important because it <strong>compounds</strong> on itself very quickly. The more points you get, the more upgrades. The more upgrades you get, the higher potential for you to be able to milk points and stay in the game. At this point in development the player always started the game with the same upgrade levels every time. Because of this you could very clearly observe your own skill increase by seeing how far you got before death or how high a score you were able to rack up before finishing the game. It was a very <strong>pure</strong> game concept that I enjoyed quite thoroughly. </p>
<h3>Building A Game For The Masses</h3>
<p><img style="float: left; margin-right: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/angrybird.png" alt="" title="angrybird" width="256" height="256" class="aligncenter size-full wp-image-1144" /></p>
<p>However, like <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/c/c7/Ikaruga_cover_DC.jpg' image_order='1' buyamazon='http://www.amazon.com/gp/product/B002G5HXNY/ref=as_li_ss_tl?ie=UTF8&amp;tag=httpwwwaorens-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002G5HXNY' buyamazon_order='8' buyebay='http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&amp;pub=5575002009&amp;toolid=10001&amp;campid=5337041634&amp;customid=&amp;icep_uq=Ikaruga&amp;icep_sellerId=&amp;icep_ex_kw=&amp;icep_sortBy=12&amp;icep_catId=139973&amp;icep_minPrice=&amp;icep_maxPrice=&amp;ipn=psmain&amp;icep_vectorid=229466&amp;kwid=902099&amp;mtid=824&amp;kw=lg' buyebay_order='9' wikipedia='http://en.wikipedia.org/wiki/Ikaruga' wikipedia_order='21'>Ikaruga</uword>, this mechanic&#8217;s hardcore simplicity didn&#8217;t appeal to everyone. Many people thought it was too simple and they said they didn&#8217;t feel like they had a reason to play it again once they got a little taste of it. They kept wanting me to put in more stuff and add more to complexity to the gameplay. I didn&#8217;t want to complicate things up though. I wanted to keep things &#8220;<a href="http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&#038;offerid=146261&#038;type=3&#038;subid=0&#038;tmpid=1826&#038;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Ffruit-ninja%252Fid362949845%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30" target="itunes_store">Fruit Ninja</a>&#8221; simple and I felt that every added gameplay intricacy would need to be baked in for a long time to see if it really worked in the game (idea vs implementation). I had a long talk with my friend <a href="http://twitter.com/reedolsen">Reed Olsen</a> about it one day. We talked a lot about what kind of games are successful right now on the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> and what kinds of <strong>psychology</strong> they were tapping into to breed their success. I didn&#8217;t want to simply follow a pattern and become a &#8220;<strong>me-too</strong>&#8221; game, but there were many clear examples of gaming hooks that were extremely effective in getting people to play and continue playing that I couldn&#8217;t ignore. I thought long and hard about these and tried to find a way to integrate some without losing the gameplay essence I had already refined. After a long period of agonizing I decided to test out an in-game currency system. This added a very valuable psychological hook of giving the player the feeling of <strong>progress</strong> every time they played the game. Regardless of whether they did poorly or totally rocked it, their total accrued money would still go up. They would be farther than they were last time. They would feel accomplishment. I was wary of adding this element to the game mainly because I didn&#8217;t want grinding to ultimately overcome skill and I was also keenly aware that in-game currency systems (especially the ways in which they are implemented in freemium games) are distasteful to many in the gaming community right now. But I decided that I was going to be <strong>willing to give anything a try</strong>. I allowed the player to purchase upgrades outside of the gameplay that would increase the base level that their in-game upgrade levels started at. This meant that I had to adjust the difficulty curve up so that the player would need to save currency up and purchase upgrades to (<em>realistically</em>) be able to finish the game. No longer would a very skilled player be able to just waltz in and finish the game with just the initial upgrade levels. They would need to put in some time and work to get accomplish that goal. In practice I found that this worked fairly well at providing a hook for the less &#8220;hardcore&#8221; players and didn&#8217;t detract as much from the pure gameplay mechanic as I thought it would. I eventually had to bump down the maximum missile regeneration level because once the player had max&#8217;d out all their upgrade levels they basically became an unstoppable block-killing machine. Skill kind of got thrown out the window for the high end players at that point. After making some small adjustments to the max upgrade levels I found a nice <strong>sweet spot</strong> that made the player feel like through their efforts they had grown into a powerful, planet ravaging machine but still left room for the high end players to compete against each other with their pure skill. </p>
<h3>Further Motivation</h3>
<p><img style="float: right; margin-left: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/starcoin.png" alt="" title="starcoin" width="250" height="243" class="aligncenter size-full wp-image-1145" /></p>
<p>Another gameplay addition I developed grew out of a conversation with my friend <a href="http://twitter.com/elecorn">Mike Smith</a>. Again, he wanted some additional gameplay element to increase the complexity and I was resistant. But in the course of our chat we came up with an idea that I thought meshed really well with the existing mechanic and wasn&#8217;t confusing or overwhelming. The idea was suggested that I hide three special blocks in every wave and tie some sort of bonus to hitting all of them. This was really appealing to me because it was super easy to implement and addressed a <strong>major complaint</strong> that a lot of people had up to that point which was that they always felt like they were out of missiles. I decided to put three shiny gold blocks into every wave and give the player a full missile reload if they were able to hit all three. This meant that now there was now an opportunity for a full missile reload at pretty much every moment. The player now had to <strong>balance</strong> whether they were going to take the risk of spending ammo to go after the gold blocks or write them off. It was a great improvement on the gameplay and also allowed for another progress-based psychological hook. I could keep track of how many blocks the player got in each wave and record those in a running stats menu outside of gameplay. That way the player can see the progress they are making towards getting all the gold blocks in every wave. This kind of optional &#8220;collect&#8221; mechanic is used to great effect in tons of games these days (in my mind most notably in the <a href="http://en.wikipedia.org/wiki/Mario">Mario</a> franchise). I then layered on an additional mechanic of keeping track of how long the player can maintain getting all three blocks in the waves in a row and giving a bonus missile damage multiplier as their <strong>streak</strong> increases. This seemed like a very easy element to simply layer on that would add depth without adding complexity and confusion. I then did a similar thing with enemy turret destruction streaks and started keeping track of those stats as well. The feeling of having your accomplishments recorded can be pretty powerful and very motivating to people with <strong>completionist</strong> mindsets which brings me to the next element I layered on.</p>
<h3>Achievement Unlocked: Make 50 Achievements, Ship Game</h3>
<p><img style="float: right; margin-left: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/06/achievement-unlocked-04-300x224.png" alt="" title="achievement-unlocked-04" width="300" height="224" class="aligncenter size-medium wp-image-700" /></p>
<p>Achievements are a no-brainer. They are super easy to implement and you get a lot of psychological mileage out of them. I found that coming up with crazy achievements and writing their humorous descriptions was some of the <strong>most fun</strong> I had during the development of Cannonade and <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword>. It is well documented that having a lot of easy early game achievements can do a lot to keep people invested in your game and motivate them to keep playing. Coming up with a nice curve of achievements for the beginners, intermediate, advanced and <em>insane</em> was pretty fun and actually not that hard. I didn&#8217;t need to worry about giving any skill level too many. I could just make whatever achievement popped into my head. I loved coming up with really random ones that players would accidentally run into during the course of the game. &#8220;<em>Huh? What was that achievement? Eh whatever, cool!</em>&#8220;. I was really proud of a lot of the locked/unlocked achievement descriptions that I came up with. Unfortunately <a href="http://www.apple.com/game-center/">Game Center</a> has visually small spaces in their app to display those descriptions and so anything more than just a basic description gets truncated. So when perusing achievements, be sure to do it in the in-game menu where you can view the &#8220;<strong>Director&#8217;s Cut</strong>&#8221; achievement descriptions. </p>
<h3>Future Plans</h3>
<p>I had a lot of other cool ideas that I wanted to implement in <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> but I knew that I needed to pare things down and determine my exact 1.0 feature set or else I would never get around to shipping (&#8220;<em>Sometimes you just need to shoot the engineers and ship the darn thing</em>&#8220;). I had a lot of ideas like:</p>
<ul>
<li>In-App purchase to allow people to buy in-app currency (kind of a given these days on the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword>).</li>
<li>I also wanted to rip out and incorporate the Cannonade level editor (what I used to make all the levels) into <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> so that the players could design and ulpoad their own building designs and have them trickle down into the game. It would be really cool to see a different set of towers every day, each with a little &#8220;Designed by GamerX&#8221; credit under their announcement title.</li>
<li>I want to have alternate missile effect sets like psychedelic rocket contrails or themed missile explosions like a burst of hearts when missiles explode for <uword  category='Holidays' wikipedia='http://en.wikipedia.org/wiki/Valentine%27s_Day' wikipedia_order='21'>Valentine</uword>&#8217;s day.</li>
<li>I wanted to have a lot of analytics hooks and an <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> release &#8220;Feedback&#8221; button that the players could use to interact with me.</li>
<li>I also wanted more <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Zurp</uword> character art, <uword  category='Software/OS' href='http://www.apple.com/icloud/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/ICloud' wikipedia_order='21'>iCloud</uword> save game support, <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/e/e6/Game_Center_logo.png' image_order='1' href='http://www.apple.com/game-center/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Game_Center' wikipedia_order='21'>Game Center</uword> avatars, <uword  category='Websites/Social' image='http://upload.wikimedia.org/wikipedia/en/thumb/1/1e/Twitter_2010_logo.svg/200px-Twitter_2010_logo.svg.png' image_order='1' href='http://www.twitter.com' href_order='2' twitter='https://twitter.com/#!/twitter' twitter_order='18' linkedin='http://www.linkedin.com/company/twitter' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Twitter' wikipedia_order='21'>Twitter</uword> integration and a lot of other little things.</li>
</ul>
<p>Many of these will find their way into a future update. Just need to prioritize them correctly.</p>
<h3>Submission Deathmarch</h3>
<p>About a month before release I was talking to my friend <a href="http://twitter.com/mason3dtech">Mason Sheffield</a> about what I felt I needed for a 1.0 release and how far off I thought I was. He challenged me to get 1.0 on to the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> by <uword  category='Holidays' wikipedia='http://en.wikipedia.org/wiki/Christmas' wikipedia_order='21'>Christmas</uword> (2011 <img src='http://www.aorensoftware.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). I thought was a really unrealistic target. I looked at what still needed to be done and saw an unsurmountable mountain. But <strong>December 25/26th</strong> is the biggest day of the year for the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> and it was also ahead of my own in-head release target. I decided that this challenge was just the kind of motivation I needed and it put a fire under me. The <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> review team was going to be shutting down on December 22nd and I thought that during this season there would be a lot of other developers also trying to make the deadline in order to get on to the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> before <uword  category='Holidays' wikipedia='http://en.wikipedia.org/wiki/Christmas' wikipedia_order='21'>Christmas</uword>. I conservatively estimated that a review would take two weeks and so that put my submission deadline at December 8th. So for the last month of 1.0 development I <strong>worked like crazy</strong> and started aggressively cutting things right and left. About two weeks before the deadline I hit a moment when I realized &#8220;Hey, this thing is actually coming together! I might actually make it!&#8221;. I was quickly heading toward the light at the end of the tunnel. I was seeding every two or three days (much faster than my usual goal of once a week) and felt like I was running a <uword  category='Software/Games' image='http://upload.wikimedia.org/wikipedia/en/c/c8/Marathon-intro.jpg' image_order='1' href='http://marathon.bungie.org/' href_order='2' buyamazon='http://www.amazon.com/Marathon-MAC/dp/B0009H73XG%3FSubscriptionId%3DAKIAIC42HBITN42TF5YA%26tag%3Dhttpwwwaorens-20%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0009H73XG' buyamazon_order='8' buyebay='http://rover.ebay.com/rover/1/711-53200-19255-0/1?icep_ff3=9&amp;campid=5575002009&amp;icep_uq=Marathon&amp;icep_sortBy=12&amp;icep_catId=1249&amp;ipn=psmain&amp;icep_vectorid=229466&amp;kwid=902099&amp;mtid=824&amp;kw=lg' buyebay_order='9' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmarathon-1%252Fid419805412%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' appios_order='10' wikipedia='http://en.wikipedia.org/wiki/Marathon_(video_game)' wikipedia_order='21'>marathon</uword>. Soon enough though the day of truth arrived. I actually decided then to give myself two extra days to finalize a couple of things and squash as many bugs as I could before submission. On December 10th I finally submitted <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> version 1.0 to the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword>. It was amazing how many truly egregious bugs I found on the day of submission and was thankfully able to squash them right before submission. I figured that I would probably get approved (fingers crossed) just in time for December 25th and that would give me enough time to make a website, gameplay trailer and find reviewers to give promo codes to. To my surprise, <strong>only four days later</strong> the <uword  category='Websites/Programming' href='https://itunesconnect.apple.com' href_order='2'>iTunes Connect</uword> app on my phone buzzes to tell me that <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> is &#8220;In Review&#8221; and only 40 minutes later it changed to &#8220;Ready For Sale&#8221;. This was a nice surprise and actually caught me a little off guard! So now that the game is <a href="http://bitly.com/invaderzurp">finally for sale</a> the time has come to start promoting it and preparing for the first update. I definitely want to be in the league of other great games that have quality content/features in every update. I want my users know that when they get an update from me it&#8217;s going to be something new and good to explore. Aright, enough writing, back to work!</p>
<p>(Interesting side note: I found out during app validation that you can&#8217;t submit an app with an unresolvable <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Symbolic_link' wikipedia_order='21'>symlink</uword> in it. I was doing this intentionally though. Email me if you want to know why.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2011/12/15/zurp-1-0-postmortem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Invader Zurp is on the App Store!</title>
		<link>http://www.aorensoftware.com/blog/2011/12/15/invader-zurp-is-on-the-app-store/</link>
		<comments>http://www.aorensoftware.com/blog/2011/12/15/invader-zurp-is-on-the-app-store/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 22:20:36 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[Achievements]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Bullet3d]]></category>
		<category><![CDATA[Game Center]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[Invader Zurp]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Psychology]]></category>
		<category><![CDATA[Startups]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1134</guid>
		<description><![CDATA[Aright it&#8217;s here! Invader Zurp, the project I have worked so hard on for the last 5 months is now for sale on the App Store! I want to thank all my wonderful testers for all their time they put into playing it and even more for the thoughtful and productive feedback that they so [...]]]></description>
			<content:encoded><![CDATA[<p><center><a href="http://bitly.com/invaderzurp"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/titleIZ.png" alt="" title="titleIZ" width="500" height="247" class="aligncenter size-full wp-image-1135" /></a></center></p>
<p>Aright it&#8217;s here! <a href="http://www.invaderzurp.com">Invader Zurp</a>, the project I have worked so hard on for the last 5 months is now for sale on the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword>! I want to thank all my wonderful testers for all their time they put into playing it and even more for the thoughtful and productive feedback that they so lavishly furnished on me. I couldn&#8217;t have done it without you! </p>
<p>Check out the gameplay trailer here:</p>
<p><center><iframe width="824" height="419" src="http://www.youtube.com/embed/X3JtlDrIFnE?rel=0" frameborder="0" allowfullscreen></iframe></center></p>
<p><center><big><big><big>Now <a href="http://bitly.com/invaderzurp">Go Get It!</a></big></big></big></center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2011/12/15/invader-zurp-is-on-the-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Application-Specific Bullet Physics Optimization</title>
		<link>http://www.aorensoftware.com/blog/2011/12/13/application-specific-bullet-physics-optimization/</link>
		<comments>http://www.aorensoftware.com/blog/2011/12/13/application-specific-bullet-physics-optimization/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 06:29:30 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[Bullet3d]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[Invader Zurp]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Psychology]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1107</guid>
		<description><![CDATA[In developing Cannonade and Invader Zurp I have invested a fair amount of time becoming familiar with the Bullet Physics Library and trying to milk every bit of performance out of it as I can. Realistic physics simulation plays a crucial part in both games and is also the performance bottleneck in the majority of [...]]]></description>
			<content:encoded><![CDATA[<p>In developing <a href="http://http://www.aorensoftware.com/blog/2011/04/02/introduction-to-cannonade/">Cannonade</a> and <a href="http://www.invaderzurp.com">Invader Zurp</a> I have invested a fair amount of time becoming familiar with the <a href="http://www.bulletphysics.com">Bullet Physics Library</a> and trying to milk every bit of performance out of it as I can. Realistic physics simulation plays a crucial part in both games and is also the <strong>performance bottleneck</strong> in the majority of gameplay scenarios with both. When trying to optimize for performance I generally see myself using two kinds of approaches. One is a higher level algorithmic approach that tries to see ways to create less work or avoid work in order to keep things going fast. Once I have nailed down as best I can, the minimum set of work that I really cannot avoid doing, then comes the work of getting down and dirty and speeding up the routines that actually do that work. When I initially approached the problem of speeding up Bullet, I first simply treated it as a black box (work that I wouldn&#8217;t be able to avoid) and <a href="http://www.aorensoftware.com/blog/2011/03/31/bullet-physics-optimization-for-ios/">explored what kinds of compiler configurations</a> I could leverage to create the fastest possible execution of the physics simulation work. Later, after I had nailed down the gameplay mechanic for <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> I was able to start specifically attacking the set of physics simulation work needed for the game and whittled it down to a much smaller amount using some simplifications, accuracy compromises and psychology. </p>
<p><span id="more-1107"></span></p>
<h3>Work, work&#8230; More work?</h3>
<p><center><a href="http://www.invaderzurp.com"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/IZ.png" alt="Invader Zurp" title="IZ" width="600" height="450" class="aligncenter size-full wp-image-1113" /></a></center></p>
<p>So a basic description of the gameplay in <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> is that you, the player are flying in 1st person over a planet&#8217;s surface towards structures made up of variously shaped and sized blocks. The player taps the screen to fire missiles at the structures which then explode. This explosion destroys some blocks and sends other blocks flying through the air. There are also some special blocks (called turrets) that shoot missiles back at the player which must be intercepted or else the player takes damage. In the next couple of sections I am going to step through the procedures that I go through in order to make sure that my physics simulation work is as small as possible while still giving the player a good gameplay experience. </p>
<h3>Less Stuff, Less Work</h3>
<p>First things first. The player is constantly moving forward and &#8220;blocky&#8221; structures are being brought into the simulation at the horizon regularly as the player plays the game. Obviously more blocks means more work and so minimizing the amount of blocks in the simulation is imperative. Because the direction the player is moving never changes, it only seems natural that once a block has moved behind the player&#8217;s viewpoint that it should be removed from the simulation. In this game a block behind the player can no longer be interacted with (<em>usually</em>) and so it is simple enough to just remove them from the simulation. I also thought about removing blocks once they have left the player&#8217;s view frustum but I decided that I should still keep those blocks in play in case a missile has already targeted it and is currently homing in on it. The player might be really disappointed to have successfully targeted a special bonus block only to have it lifted from their grasp as it leaves their view. In addition to removing blocks behind the player viewpoint I also remove blocks that have been pushed too far into the background. </p>
<h3>Shh&#8230; Don&#8217;t move. It&#8217;s <uword  category='Hardware/Processors' wikipedia='http://en.wikipedia.org/wiki/Central_processing_unit' wikipedia_order='21'>CPU</uword> Load&#8217;s Based On Movement</h3>
<p><img style="float: right; margin-left: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/trex.jpg" alt="" title="Tyrannosaurus Rex in scene from film &#039;Jurassic Park&#039;." width="200" height="142" class="aligncenter size-full wp-image-1120" /></p>
<p>Another very basic performance concept in physics simulation is that if objects are not moving (or are moving so slowly as to not be perceived as moving) we can <strong>skip</strong> over a large part of the simulation for them. You can set a movement threshold that causes blocks to become inactive from a lot of the simulation once their velocity falls below it. This functionality is built in to Bullet (<code>btRigidBody::setSleepingThresholds()</code>) and most other physics engines. In <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> I chose to bump up that threshold higher than normal so that blocks would become inactive sooner. I also set the friction coefficients of the blocks and the ground such that blocks would slide around less and fall under the inactivity threshold quicker (<code>btRigidBody::setFriction()</code>). Because the player is constantly moving there is not a lot of perceived difference to the player between a block that is sliding around a little bit and one that is stationary. Thus, aggressively changing these values didn&#8217;t result in a very different experience for the player. Also, when new block structures are added to the simulation, every block is always initially flagged as inactive (<code>btRigidBody::setActivationState(ISLAND_SLEEPING)</code>). This is because in <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> it is assumed that the structures are all initially standing still. This does have the interesting side effect of allowing for structurally unsound buildings to appear to be holding up. Blocks can be suspended in air and blocks can also occupy the same space at the same time indefinitely. Of course the instant a moving block collides with it the entire thing falls apart but I decided that the charm of having interesting (but structurally insufficient or conflicting) building designs outweighed the realistic depiction of the structure. </p>
<h3>Accuracy Is In The Eye Of The Beholder</h3>
<p><img style="float: right; margin-left: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/eyeofbeholder.jpg" alt="" title="eyeofbeholder" width="200" height="138" class="aligncenter size-full wp-image-1119" /></p>
<p>There is an interesting problem in traditional realtime physics simulation called &#8220;<strong>tunneling</strong>&#8221; which I describe in depth in <a href="http://www.aorensoftware.com/blog/2011/06/01/when-bullets-move-too-fast/">another blog post</a>. In that post I describe some techniques to deal with the problem of relatively small objects tunneling through others and different ways of dealing with it. In <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> the fastest moving objects are (<em>usually</em>) the missiles that the player shoots at the oncoming structures and incoming enemy missiles. The missiles travel quite quickly (especially when they are completely leveled up) and at a normal simulation granularity they can easily tunnel through the blocks. I considered special-casing them and simulating their movement and collision myself but I eventually decided to have them remain as Bullet simulation objects and keep (most) <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Collision_detection' wikipedia_order='21'>collision detection</uword> for them inside the physics engine. Taking some cues from the solution I came up with for Cannonade (&#8220;<em>Convex Sweep Collision Based Time Slicing</em>&#8220;, discussed in the tunneling blog post) I decided to start from there. To ensure that the missiles do not tunnel through blocks even at their high rate of speed I decided to increase the granularity of the simulation high enough so that they could not completely tunnel through an individual block. Because doing so increases the needed computational power substantially, I had to make sure that I only did it when <strong>absolutely necessary</strong>. So every frame I would spend some <uword  category='Hardware/Processors' wikipedia='http://en.wikipedia.org/wiki/Central_processing_unit' wikipedia_order='21'>CPU</uword> cycles performing convex sweep collision queries (<code>btCollisionWorld::convexSweepTest</code>) for the fast moving missiles to see if they are likely to hit a block within the next simulation frame. If it seems like a collision is likely then I see what the fastest velocity is of any of the missiles that will likely hit a block during that frame. I use that velocity to determine just how much more accuracy (and in turn granularity) my simulation needs to ensure that the fastest moving missile will not tunnel. The cost of performing convex sweep collision queries is expensive but in the long run they save much more time by making sure that the simulation runs at lower accuracy level when missiles aren&#8217;t going to tunnel. Those convex sweep queries can still get quit expensive though. I started looking at ways to avoid performing it. I looked very closely at the specifics of the missile&#8217;s role and player perception in my game and got <strong>an insight</strong>. When you tap on the screen an algorithm determines which block or enemy missile you most likely intend to hit with your missile. Your missile is entered into the simulation and undergoes forces that cause it to home into it&#8217;s target until either it or it&#8217;s target is destroyed. Because of that strong homing force, I noticed that <strong>9X%</strong> of the time the only collision that a missile would ever experience in it&#8217;s lifetime is one with it&#8217;s target. I figured that if I only performed the convex sweep query for a missile when it was getting close to it&#8217;s target that I could forego performing a ton of queries when the missiles are not close to their targets or much less when they aren&#8217;t even close to any block at all. It is substantially less expensive to simply calculate the straight-line distance between a missile and it&#8217;s target and then check if that distance is within a certain threshold. If it was within the threshold only then would I actually perform a convex sweep query to determine if I really did need to increase the simulation granularity. A side effect of this is that occasionally missiles will tunnel through blocks that they are not targeting. In practice though I have only actually noticed this happening two or three times. The computation savings was <strong>well worth the compromise</strong> in this specific application. I took this optimization one step further and also decided to sort the missiles per frame in order of how close they were to their targets. This meant that the missiles which were more likely to come up with a positive collision as a result of the convex sweep query were examined first. This then meant that a contender for the fastest moving collision during the frame was calculated earlier and thus increased the likelihood of being able to forego convex sweep queries on missiles that had less of a chance (due to their increased distance from their targets) of coming back with a positive collision because they were perhaps moving slower than the missile that we already had determined had collided. All of these optimizations led to a <strong>significant performance boost</strong> without sacrificing significant user perceived accuracy. Occasionally when there is a lot going on you can see individual frames take longer as the simulation granularity gets spiked but it is usually only for a few individual frames. For the most part, the player taps, sees a missile shoot out towards the structure and then watches it blow up, all with a fairly regular <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Frame_rate' wikipedia_order='21'>frame rate</uword>. </p>
<h3>They Are So Small Anyway&#8230;</h3>
<p><img style="float: right; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/upgradeMissile.png" alt="" title="upgradeMissile" width="200" height="200" class="aligncenter size-full wp-image-1123" /></p>
<p>In that same strain of missile collision performance, I devised another slight performance win but it was instead born out of player experience rather than an egregious slowdown. In addition to targeting structural blocks, your missiles can also target the enemy&#8217;s defense missiles which are constantly homing in on you. Unfortunately, because of the missile&#8217;s speeds relative to their sizes, what would usually happen is that the player&#8217;s missile would speed towards the enemy missile very quickly and then violently hover around it for a while before finally colliding with it and exploding them both. This was not a very fun player experience and was also perceived as being a very <strong>erratic result</strong>. So I decided to pull missile to enemy-missile collision into my own code instead of using the physics engine. So I instead calculate the straight-line distance between the two and when the distance falls below a certain threshold the missile explodes and takes the enemy missile with it. This makes for a much more <strong>satisfying player experience</strong>. The player sees their missile heading toward it&#8217;s target and then both exploding when they appear to intersect. In addition to being a better game experience it saves on collision computation as well. In fact, we can probably say that we don&#8217;t need to even compute collision between a player missile and an enemy missile in the physics engine at all! Using collision flags (<code>btBroadphaseProxy::m_collisionFilterMask</code>, <code>btBroadphaseProxy::m_collisionFilterGroup</code>) I separated the missiles into specific groups that would only collide with the ground and blocks. The likelihood that two missiles would collide with each other when out in play area away from the ship was somewhat small (much less have a user even notice that it should have happened but didn&#8217;t) and so pulling those objects out of collision computation with each other was significant win. I also found that this was necessary because when the player got to higher levels of the game and started to fire missiles much more rapidly, their own missiles actually WOULD collide with each other (fairly often actually) and explode themselves very quickly after being fired because of the missile density around the area they were being fired out of the ship from. This was also a bad player experience that was fortunately also simply solved by taking the missiles out of collision tests with other missiles. </p>
<h3>Modifying Bullet</h3>
<p><img style="float: right; margin-left: 20px; margin-top: 7px; margin-bottom: 3px;" src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/12/bullet_logo.png" alt="" title="bullet_logo" width="200" height="81" class="aligncenter size-full wp-image-1118" /></p>
<p>At one point I experimented with extending Bullet itself to allow for more specialized control over it&#8217;s execution. I added some flags to collision bodies that allowed me to selectively control which bodies were fully put through <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Collision_detection' wikipedia_order='21'>collision detection</uword> and contact resolution system. My aim was to lower the hit of increasing the simulation granularity by keeping most of the simulation progressing forward at the rate of one full frame and instead only allowing the speedy missiles that were likely to tunnel undergo multiple sub-frame physics passes. That way the only increased performance hit would be involving the additional physics calculations associated with objects that I had determined were likely to tunnel. This would of course also sacrifice some accuracy because not all of the objects involved in a high granularity collision will be progressing forward like they normally would but the potential performance gain was <strong>too high to ignore</strong>. I took about a day to investigate this avenue and got things up and running but they didn&#8217;t quite work correctly. There were clearly many peripheral effects to my modifications that I did not yet fully understand and so I decided to instead keep Bullet an unmodified black box for <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> version 1.0 and planned on re-visiting that idea again when I had more time to dig into Bullet&#8217;s internals. </p>
<h3>Other</h3>
<p>Other small things I did to try to milk more performance was to keep my landscape geometry as simple as possible (in the case of <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> it is just one simple plane). I also read that adding the <code>SOLVER_ENABLE_FRICTION_DIRECTION_CACHING</code> flag to <code>m_solverMode</code> of <code>btContactSolverInfo</code> and lowering the <code>m_numIterations</code> in <code>btContactSolverInfo</code> (I lowered mine down to 2 down from the default 10) you could possibly gain some performance at the cost of simulation accuracy. Because of the quick gameplay pace and constant movement of <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> I felt that it was fairly tolerable of accuracy loss and so I added those settings in to my configuration. I didn&#8217;t do any formal or extensive testing to see if this had any effect but to the naked eye I couldn&#8217;t discern any significant performance gain (or loss, or accuracy loss for that matter) and so I decided to leave them in. </p>
<h3>Conclusion</h3>
<p>Well, that is about all the ones I could remember. I am sure that as time goes on I will be able to figure out more ways to squeeze the most out of Bullet. The grand takeaway is that in your application (especially games) it helps to look at your own specific situation and perform very narrow situation-specific optimizations. Are any of these optimizations applicable in your game/application? Any other ideas on getting more physics bang for your buck? Let me know in the comments. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2011/12/13/application-specific-bullet-physics-optimization/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Think Tank: Never let a good idea get away again!</title>
		<link>http://www.aorensoftware.com/blog/2011/11/28/think-tank-never-let-a-good-idea-get-away-again/</link>
		<comments>http://www.aorensoftware.com/blog/2011/11/28/think-tank-never-let-a-good-idea-get-away-again/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 03:59:20 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Psychology]]></category>
		<category><![CDATA[Think Tank]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1083</guid>
		<description><![CDATA[So I have these thoughts&#8230;a lot. No not that kind! I get these fun ideas for neat projects or crazy inventions as I am driving in the car, singing in the shower, lying in bed or even in the midst of coding. Really creative ideas that may or may not be realistically viable but worthy [...]]]></description>
			<content:encoded><![CDATA[<p>So I have these thoughts&#8230;a lot. No not that kind! <img src='http://www.aorensoftware.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I get these fun ideas for <strong>neat projects</strong> or <strong>crazy inventions</strong> as I am driving in the car, singing in the shower, lying in bed or even in the midst of coding. Really creative ideas that may or may not be realistically viable but worthy of entertaining nonetheless. I get really excited and start working it over in my mind. It feels like inspiration. <em>Then something happens&#8230;</em> Life resumes and I need to deal with the actual task at hand. No worry, it was such a compelling idea that I will surely remember it later when I have cycles to devote to it. <strong>And then I never think about it again</strong>. Or even worse, the next day rolls around and I all of the sudden remember that I did think of a cool idea the day before, but I can&#8217;t quite bring the memory into focus. Does any part of this sound familiar to you? </p>
<div style="float: right; margin-left: 20px;"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/11/oldthinktank.png" alt="" title="oldthinktank" width="300" height="286" class="aligncenter size-full wp-image-1087" /></div>
<h3>Write It Down</h3>
<p>&#8220;No more!&#8221; I declared. Nothing gets remembered unless it is written down. Hmm, idea notebook? <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/3/3e/TextEdit_icon.png' image_order='1' wikipedia='http://en.wikipedia.org/wiki/TextEdit' wikipedia_order='21'>TextEdit</uword> file on the computer? I did the text file thing for a while but I kept forgetting that it was there or didn&#8217;t have access to it at the time. No worries&#8230; Evolution of the computer to the rescue! Transferred things to <uword  category='Software/OS' href='http://www.apple.com/ipad/built-in-apps/notes.html' href_order='2'>Notes.app</uword> on the <uword  category='Hardware/Devices' image='http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Original_iPhone_docked.jpg/159px-Original_iPhone_docked.jpg' image_order='1' href='http://www.apple.com/iphone/' href_order='2' buyamazon='http://www.amazon.com/mn/search/?_encoding=UTF8&amp;keywords=iphone&amp;tag=httpwwwaorens-20&amp;linkCode=ur2&amp;qid=1329263392&amp;rnid=2941120011&amp;camp=1789&amp;creative=390957&amp;rh=k%3Aiphone%2Cn%3A2407749011' buyamazon_order='8' wikipedia='http://en.wikipedia.org/wiki/IPhone' wikipedia_order='21'>iPhone</uword>. <em>Not good.</em> Too jumbled, un-organized, too much information presented in-general. I knew of the million and a half &#8220;getting things done&#8221;, task management, mind-mapping and brain organization apps/ecosystems out there. But I found most were too general for what I wanted and too heavy. <em>Well, if you want something done&#8230;</em></p>
<p><span id="more-1083"></span></p>
<h3>Version 1.0</h3>
<p>I decided that I was going to create a web page where I could dump all my ideas instead. It would sort and organize the ideas so that I could easily review them when I was looking for an idea. I am not a web programmer and so it was kind of fun to learn about the latest in <uword  category='Software/Programming' wikipedia='http://en.wikipedia.org/wiki/Ajax_(programming)' wikipedia_order='21'>AJAX</uword>-ish web technology and poke around a bit with it. I got something up and running within an evening and it actually worked pretty well. No longer was I going to lose those awesome little nuggets of inspiration. I called it &#8220;<strong><uword  category='Software/Productivity' image='http://aorensoftware.com/ThinkTank/tt2.png' image_order='1' href='http://aorensoftware.com/ThinkTank/' href_order='2' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/Think_Tank' wikipedia_order='21'>Think Tank</uword></strong>&#8220;.</p>
<h3>Gone Native</h3>
<div style="float: right; margin-left: 20px;"><a href="http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&#038;offerid=146261&#038;type=3&#038;subid=0&#038;tmpid=1826&#038;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30" target="itunes_store"><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/11/tt2.png" alt="" title="tt2" width="256" height="256" class="aligncenter size-full wp-image-1088" /></a></div>
<p>Some time passed and I was thinking about how one of these days I should really re-write the <uword  category='Software/Productivity' image='http://aorensoftware.com/ThinkTank/tt2.png' image_order='1' href='http://aorensoftware.com/ThinkTank/' href_order='2' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/Think_Tank' wikipedia_order='21'>Think Tank</uword> web page cleanly using modern web standards and methodologies. But then it dawned on me: &#8220;<em>You&#8217;re a native <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> programmer. Why don&#8217;t you do what you do best and implement <uword  category='Software/Productivity' image='http://aorensoftware.com/ThinkTank/tt2.png' image_order='1' href='http://aorensoftware.com/ThinkTank/' href_order='2' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/Think_Tank' wikipedia_order='21'>Think Tank</uword> as a native <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> app?</em>&#8221; Yea! Then the interface would be nice and fast and I could take advantage of all sorts of <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> goodness as well. What&#8217;s more, I could then put it on <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword> for others to take advantage of. I set to work and quickly got it up and running. I have been using it myself for about 3 weeks and it just what I wanted. <strong>Simple</strong>, <strong>straightforward</strong> and <strong>fast</strong>. Now when I get an idea I just whip out <uword  category='Software/Productivity' image='http://aorensoftware.com/ThinkTank/tt2.png' image_order='1' href='http://aorensoftware.com/ThinkTank/' href_order='2' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/Think_Tank' wikipedia_order='21'>Think Tank</uword>, jot down what is in my head and get back to what I am doing. And now that <uword  category='Software/Productivity' image='http://aorensoftware.com/ThinkTank/tt2.png' image_order='1' href='http://aorensoftware.com/ThinkTank/' href_order='2' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/Think_Tank' wikipedia_order='21'>Think Tank</uword> has just been released on the <a href="http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&#038;offerid=146261&#038;type=3&#038;subid=0&#038;tmpid=1826&#038;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30" target="itunes_store">App Store for $0.99</a> anybody else can take advantage of it now as well. </p>
<p><center><big><big><strong><uword  category='Software/Productivity' image='http://aorensoftware.com/ThinkTank/tt2.png' image_order='1' href='http://aorensoftware.com/ThinkTank/' href_order='2' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%253FpartnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/Think_Tank' wikipedia_order='21'>Think Tank</uword>: Never let a good idea get away again!</strong><br /><a href="http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&#038;offerid=146261&#038;type=3&#038;subid=0&#038;tmpid=1826&#038;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fthink-tank!%252Fid480471896%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30" target="itunes_store">Get Think Tank from the App Store</a></big></big></center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2011/11/28/think-tank-never-let-a-good-idea-get-away-again/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Invader Zurp Progress</title>
		<link>http://www.aorensoftware.com/blog/2011/10/27/invader-zurp-progress/</link>
		<comments>http://www.aorensoftware.com/blog/2011/10/27/invader-zurp-progress/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 03:56:47 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[Achievements]]></category>
		<category><![CDATA[Bullet3d]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[Invader Zurp]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1073</guid>
		<description><![CDATA[Above is some footage from the current Invader Zurp alpha (apologies for the bad exposure). As you can see, things have come quite a ways since I released the first video! There are a lot more visual effects, 5 music tracks from Monte &#8216;Trance&#8217; Emerson, a new gameplay mechanic, an in-game currency system and tons [...]]]></description>
			<content:encoded><![CDATA[<p><center><iframe width="824" height="419" src="http://www.youtube.com/embed/O8PBuLQcH-s?rel=0" frameborder="0" allowfullscreen></iframe></center></p>
<p>Above is some footage from the current <uword  category='Software/Games' image='http://www.aorensoftware.com/images/zurp_icon3_128.png' image_order='1' href='http://www.invaderzurp.com' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Finvader-zurp%252Fid461872128%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Invader Zurp</uword> alpha (apologies for the bad exposure). As you can see, things have come quite a ways since I released <a href="http://www.aorensoftware.com/blog/2011/09/12/invader-zurp/">the first video</a>! There are a lot <strong>more visual effects</strong>, <strong>5 music tracks</strong> from <a href="http://www.cdbaby.com/cd/tranceemerson">Monte &#8216;Trance&#8217; Emerson</a>, a <strong>new gameplay mechanic</strong>, an <strong>in-game currency</strong> system and tons of other little advancements. I must say that I feel like things are progressing quite nicely! I still have a ways to go though and so I am going to continue cranking away with my head down until it is finished.</p>
<p>What are your thoughts on how development is going? Let me know in the comments. Also, a huge thank you to all of my testers who have given me invaluable feedback on all the builds thus far. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2011/10/27/invader-zurp-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Startup Grind.app 1.3 (October Update)</title>
		<link>http://www.aorensoftware.com/blog/2011/10/18/startup-grind-1-3-october-update/</link>
		<comments>http://www.aorensoftware.com/blog/2011/10/18/startup-grind-1-3-october-update/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 02:43:04 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[Indie]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Startup Grind]]></category>
		<category><![CDATA[Startups]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=1059</guid>
		<description><![CDATA[The Startup Grind is expanding! You may or may not have heard that we have recently opened up a Los Angeles chapter of the Startup Grind and to coincide with that we have added multiple chapter support to the Startup Grind.app! Now if you are a member of the Startup Grind LA your upcoming and [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.startupgrind.com">Startup Grind</a> is expanding! You may or may not have heard that we have recently opened up a <uword  category='Cities/US/California' wikipedia='http://en.wikipedia.org/wiki/Los_Angeles' wikipedia_order='21'>Los Angeles</uword> chapter of the <uword  category='Websites/Events/Startups' image='http://aorensoftware.com/StartupGrind/sug-logo.png' image_order='1' href='http://www.StartupGrind.com/' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fstartup-grind%252Fid442779893%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Startup Grind</uword> and to coincide with that we have added multiple chapter support to the <uword  category='Websites/Events/Startups' image='http://aorensoftware.com/StartupGrind/sug-logo.png' image_order='1' href='http://www.StartupGrind.com/' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fstartup-grind%252Fid442779893%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Startup Grind.app</uword>! Now if you are a member of the <a href="http://www.meetup.com/Startup-Grind-LA/">Startup Grind LA</a> your upcoming and past events should be visible when you log into the <uword  category='Websites/Events/Startups' image='http://aorensoftware.com/StartupGrind/sug-logo.png' image_order='1' href='http://www.StartupGrind.com/' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fstartup-grind%252Fid442779893%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Startup Grind.app</uword> with your Meetup account. If you are a member of multiple chapters then you will be presented with a top level pane allowing you to switch between them at will.</p>
<p><center></p>
<table>
<tr>
<td><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/10/Screenshot-2011.10.14-19.56.56.png" alt="" title="Screenshot 2011.10.14 19.56.56" width="300" height="450" class="aligncenter size-full wp-image-1060" /></td>
<td><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/10/Screenshot-2011.10.14-19.57.02.png" alt="" title="Screenshot 2011.10.14 19.57.02" width="300" height="450" class="aligncenter size-full wp-image-1061" /></td>
</tr>
</table>
<p></center></p>
<p>As we open up more chapters of the <uword  category='Websites/Events/Startups' image='http://aorensoftware.com/StartupGrind/sug-logo.png' image_order='1' href='http://www.StartupGrind.com/' href_order='2' appios='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fstartup-grind%252Fid442779893%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30' appios_order='10'>Startup Grind</uword> you will be able to access all the information and interactive elements for the events for every new meetup that we get going. More awesome features are in the works so stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2011/10/18/startup-grind-1-3-october-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPod Touch Server: iOS 5.0 Edition</title>
		<link>http://www.aorensoftware.com/blog/2011/10/12/ipod-touch-server-ios-5-0-edition/</link>
		<comments>http://www.aorensoftware.com/blog/2011/10/12/ipod-touch-server-ios-5-0-edition/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 22:01:16 +0000</pubDate>
		<dc:creator>snielsen</dc:creator>
				<category><![CDATA[Cannonade]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Game Center]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://www.aorensoftware.com/blog/?p=736</guid>
		<description><![CDATA[Achievement Unlocked: iOS 5 NDA In a previous blog post I outlined my need for an iOS server. I had found a sufficient but non-optimal solution for iOS devices running iOS 4.X. I mentioned at the end of that article that I had found an optimal solution utilizing some new features in iOS 5. Now [...]]]></description>
			<content:encoded><![CDATA[<p><center>
<div style="margin-bottom: 5px;"><big><big><big>Achievement Unlocked: <strong><uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5 <uword  category='Legal' wikipedia='http://en.wikipedia.org/wiki/Non-disclosure_agreement' wikipedia_order='21'>NDA</uword></strong></big></big></big></div>
<p><img src="http://www.aorensoftware.com/blog/wp-content/uploads/2011/06/NDAAcheivment2.png" alt="" title="NDAAcheivment2" width="408" height="245" class="aligncenter size-full wp-image-729" /></center></p>
<p>In a <a href="http://www.aorensoftware.com/blog/2011/06/11/ipod-touch-server/">previous blog post</a> I outlined my need for an <uword  category='Software/Networking' href='http://www.aorensoftware.com/blog/2011/06/11/ipod-touch-server/' href_order='2'>iOS server</uword>. I had found a sufficient but non-optimal solution for <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> devices running <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 4.X. I mentioned at the end of that article that I had found an optimal solution utilizing some new features in <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5. Now that <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5 has gone gold master and the <uword  category='Legal' wikipedia='http://en.wikipedia.org/wiki/Non-disclosure_agreement' wikipedia_order='21'>NDA</uword> has been lifted I can outline in detail how to get your own <uword  category='Software/Networking' href='http://www.aorensoftware.com/blog/2011/06/11/ipod-touch-server/' href_order='2'>iOS server</uword> up and running. To review, the three requirements for setting up a server in my situation are that it must:</p>
<ol>
<li>Be able to receive <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> (so it can get it&#8217;s work)</li>
<li>Have it&#8217;s display turned off (to save energy and avoid things like screen burn-in/fatigue)</li>
<li>Require no human interaction (needs to be completely autonomous)</li>
</ol>
<p>In the previous article I outlined why these were in conflict with each other on <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 4 devices. However, there is some new functionality and behavior policies that allow all three requirements to be fulfilled.</p>
<p><span id="more-736"></span></p>
<h2>The Solution? <uword  category='Software/OS' href='http://www.apple.com/ipad/built-in-apps/newsstand.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Newsstand_(Apple)' wikipedia_order='21'>Newsstand</uword></h2>
<p>Yes that&#8217;s right, <uword  category='Software/OS' href='http://www.apple.com/ipad/built-in-apps/newsstand.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Newsstand_(Apple)' wikipedia_order='21'>Newsstand</uword>. As in the virtual magazine functionality added to <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5. It seems that <uword  category='Software/OS' href='http://www.apple.com/ipad/built-in-apps/newsstand.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Newsstand_(Apple)' wikipedia_order='21'>Newsstand</uword> apps are granted a nice little exception in <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5 in which they are able to receive <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> even if the app is <strong>not the active application</strong>. <uword  category='Software/OS' href='http://www.apple.com/ipad/built-in-apps/newsstand.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Newsstand_(Apple)' wikipedia_order='21'>Newsstand</uword> apps are the only apps that are currently granted this exception and so other apps will still not receive delivery of <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> even if they are in the foreground but not the active application. So the first thing you need to do is add the <code>UINewsstandApp</code> key with a value of <code>YES</code> to your application&#8217;s <uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html' href_order='2'>Info.plist</uword>. In <uword  category='Software/Development' href='https://developer.apple.com/technologies/tools/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Apple_Developer_Tools' wikipedia_order='21'>Xcode</uword>, my server app is a different build configuration of the client app and so I added this line to a build script:</p>
<pre><code class="bash">/usr/libexec/PlistBuddy -c "Add :UINewsstandApp bool YES" 
"$CONFIGURATION_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/<uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html' href_order='2'>Info.plist</uword>"</code></pre>
<h2>Another Day, Another Mode</h2>
<p>Now <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Springboard' wikipedia_order='21'>Springboard</uword> thinks your app is a <uword  category='Software/OS' href='http://www.apple.com/ipad/built-in-apps/newsstand.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Newsstand_(Apple)' wikipedia_order='21'>Newsstand</uword> app and so it will from now on live in the magazine shelf inside of <uword  category='Software/OS' wikipedia='http://en.wikipedia.org/wiki/Springboard' wikipedia_order='21'>Springboard</uword>. The next thing you need to do is add <code>newsstand-content</code> to your <code>UIBackgroundModes</code> in the <uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html' href_order='2'>Info.plist</uword>. (in my project I don&#8217;t have any other background modes and so I just deleted the old one every time) Now this will allow your applications to receive <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> without being active.</p>
<pre><code class="bash">/usr/libexec/PlistBuddy -c "Delete :UIBackgroundModes" 
"$CONFIGURATION_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/<uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html' href_order='2'>Info.plist</uword>"
/usr/libexec/PlistBuddy -c "Add :UIBackgroundModes array" 
"$CONFIGURATION_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/<uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html' href_order='2'>Info.plist</uword>"
/usr/libexec/PlistBuddy -c "Add :UIBackgroundModes:0 string newsstand-content" 
"$CONFIGURATION_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/<uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html' href_order='2'>Info.plist</uword>"</code></pre>
<h2>The Special Bit</h2>
<p>Your app will now receive the special <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> but said <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> need to be flagged as <uword  category='Software/OS' href='http://www.apple.com/ipad/built-in-apps/newsstand.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Newsstand_(Apple)' wikipedia_order='21'>Newsstand</uword> content for the system to actually pass them along to your app. To do that you simply need to add one more field in your <uword  category='Software/Programming' href='http://www.json.org/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/JSON' wikipedia_order='21'>JSON</uword> <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notification</uword> that you send to <uword  category='Companies/Tech' image='http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Apple-logo.svg/200px-Apple-logo.svg.png' image_order='1' href='http://www.apple.com/' href_order='2' linkedin='http://www.linkedin.com/company/apple' linkedin_order='19' wikipedia='http://en.wikipedia.org/wiki/Apple_Inc.' wikipedia_order='21'>Apple</uword>&#8217;s servers:</p>
<pre><code class="php">$payload['aps']['content-available'] = 1;</code></pre>
<p>Note that that is the <strong>number</strong> 1, NOT the string &#8220;1&#8243;.</p>
<h2>Early Registration</h2>
<p>Inside your app&#8217;s execution you of course need to register to receive <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> so that they are actually delivered to your app. There is a new notification type that corresponds to the <uword  category='Software/OS' href='http://www.apple.com/ipad/built-in-apps/newsstand.html' href_order='2' wikipedia='http://en.wikipedia.org/wiki/Newsstand_(Apple)' wikipedia_order='21'>Newsstand</uword> content flagged notifications called <code>UIRemoteNotificationTypeNewsstandContentAvailability</code>. In my app I register for all types of notifications:</p>
<pre><code class="objectivec">[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationType)(
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeNewsstandContentAvailability)];</code></pre>
<h2>One Step Forward, Two Steps Back</h2>
<p>We have gotten pretty far but there is still a slight roadblock in achieving our goal of an <uword  category='Software/Networking' href='http://www.aorensoftware.com/blog/2011/06/11/ipod-touch-server/' href_order='2'>iOS server</uword>. You might notice now that on <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 5 when you hit the lock button not only does your app become inactive but it also gets backgrounded (this is in contrast to the <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> 4 behavior of becoming inactive but remaining in the foreground executing). The solution to this is to actually take a step backwards and remove it&#8217;s <uword  category='Software/OS' image='http://upload.wikimedia.org/wikipedia/en/thumb/a/a6/Apple_iOS.svg/200px-Apple_iOS.svg.png' image_order='1' href='http://www.apple.com/ios/' href_order='2' wikipedia='http://en.wikipedia.org/wiki/IOS' wikipedia_order='21'>iOS</uword> multitasking capabilities. You can do this by adding the <code>UIApplicationExitsOnSuspend</code> key to the <uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html' href_order='2'>Info.plist</uword>:</p>
<pre><code class="bash">/usr/libexec/PlistBuddy -c "Set :UIApplicationExitsOnSuspend YES" 
"$CONFIGURATION_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/<uword  category='Software/Programming' href='https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html' href_order='2'>Info.plist</uword>"</code></pre>
<p>What this does is it returns your app to pre-multitasking behavior so instead of continuing to execute or backgrounding when you hit the home button your server app now exits. This has an interesting side effect of keeping the app both in the foreground and executing even when the lock screen is up (to preserve behavior of applications written this way no doubt). So now your program not only keeps running while the lock screen is up and the display is off but it can also receive and immediately service <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword>.</p>
<h2>The Unlimited Plan</h2>
<p>But wait! We aren&#8217;t quite out of the woods yet. You might have noticed that you are only allowed one non-active delivered <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notification</uword> per 24 hour period. Obviously you want your server to receive as many <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> as you need. You can unlock this restriction actually by writing into your defaults the key <code>NKDontThrottleNewsstandContentNotifications</code> when you launch:</p>
<pre><code class="objectivec">[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NKDontThrottleNewsstandContentNotifications"];</code></pre>
<h2>Victory Dance</h2>
<p>Now you have it! An <uword  category='Software/Networking' href='http://www.aorensoftware.com/blog/2011/06/11/ipod-touch-server/' href_order='2'>iOS server</uword> that can completely power down it&#8217;s display, receive <uword  category='Software/Networking' wikipedia='http://en.wikipedia.org/wiki/Apple_Push_Notification_Service' wikipedia_order='21'>push notifications</uword> and require no human interaction. Now just plug in into a power source, sit it in the closet and let it do it&#8217;s thing.</p>
<p><em>Of course,</em> you realize that an app authored in such a way would never pass the muster required to make it on to the <uword  category='Websites/Store' image='http://images.apple.com/support/ipad/assistant/images/welcome_apps.gif' image_order='1' buylinkshareapple='http://click.linksynergy.com/fs-bin/stat?id=7hgDb73EIMc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fus%252Fartist%252Faoren-llc%252Fid421053779%253Fuo%253D4%2526partnerId%253D30' buylinkshareapple_order='7' wikipedia='http://en.wikipedia.org/wiki/App_Store_(iOS)' wikipedia_order='21'>App Store</uword>. But then again, this app is probably never going to leave your closet or server room anyway right? </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aorensoftware.com/blog/2011/10/12/ipod-touch-server-ios-5-0-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

