<?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>Heuristic Media</title>
	<atom:link href="http://heuristicmedia.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://heuristicmedia.com/blog</link>
	<description>Developing apps for iOS and the web</description>
	<lastBuildDate>Fri, 09 Sep 2011 13:04:58 +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>Taxulator 1.4</title>
		<link>http://heuristicmedia.com/blog/?p=434</link>
		<comments>http://heuristicmedia.com/blog/?p=434#comments</comments>
		<pubDate>Fri, 09 Sep 2011 13:04:58 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[finance]]></category>
		<category><![CDATA[iOS (iPhone / iPad)]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[sales]]></category>
		<category><![CDATA[shopping]]></category>
		<category><![CDATA[tax]]></category>
		<category><![CDATA[Taxulator]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=434</guid>
		<description><![CDATA[Taxulator 1.4 is now available with interface sounds! Not a fan of sound? Just go to the Settings app on your device, tap Taxulator and turn Interface Sounds off. Taxulator 1.4 also adds an expanded Info page with more ways to provide feedback. Get it from the App Store or learn more at TaxulatorApp.com.]]></description>
			<content:encoded><![CDATA[<p>Taxulator 1.4 is now available with interface sounds! Not a fan of sound? Just go to the <em>Settings</em> app on your device, tap <em>Taxulator</em> and turn <em>Interface Sounds</em> off. Taxulator 1.4 also adds an expanded Info page with more ways to provide feedback.</p>
<p>Get it from the <a href="http://itunes.com/apps/taxulator">App Store</a> or learn more at <a href="http://TaxulatorApp.com">TaxulatorApp.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=434</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Figuring Out Error Messages in OSX</title>
		<link>http://heuristicmedia.com/blog/?p=431</link>
		<comments>http://heuristicmedia.com/blog/?p=431#comments</comments>
		<pubDate>Sat, 27 Aug 2011 18:19:24 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[OSX]]></category>
		<category><![CDATA[errors]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=431</guid>
		<description><![CDATA[One of the minor annoyances in OSX is its error messaging. We&#8217;re all used to seeing error messages like: The operation can&#8217;t be completed because an unexpected error occurred (error code -1309). Thanks. That&#8217;s helpful. The message tells us nothing, but it turns out that it&#8217;s pretty easy to learn more from the error number. [...]]]></description>
			<content:encoded><![CDATA[<p>One of the minor annoyances in OSX is its error messaging. We&#8217;re all used to seeing error messages like:</p>
<blockquote><p><em>The operation can&#8217;t be completed because an unexpected error occurred (error code -1309).</em></p></blockquote>
<p>Thanks. That&#8217;s helpful. </p>
<p>The message tells us nothing, but it turns out that it&#8217;s pretty easy to learn more from the error number. All you have to do is type one line into Terminal. Open Terminal (in Applications > Utilities) and type the <em>macerror</em> command followed by the error number:</p>
<blockquote><p><em>macerror -1309</em></p></blockquote>
<p>The <em>macerror</em> command for error -1309 returns:</p>
<blockquote><p><em>Mac OS error -1309 (fileBoundsErr): file&#8217;s EOF, offset, mark or size is too big</em></p></blockquote>
<p>This gives us a hint that the file we&#8217;re trying to work with is actually too big for the filesystem to handle (a very big file indeed considering that the old Mac HFS filesystem had a file size limit of 2 gigabytes, FAT32 is limited to 4GB and Mac HFS+ is limited to 8 <a href="http://en.wikipedia.org/wiki/Exabyte">exabytes</a> &#8211; so big as to be practically unlimited). We can&#8217;t do much about the filesystem limit, but at least we can stop banging our heads against the desk trying to figure out why that file won&#8217;t open.</p>
<p>The <em>macerror</em> command may not decipher every error number you encounter. If it fails, you can always search for the error in <a href="http://www.opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/MacErrors.h">MacErrors.h</a>.</p>
<p>Give these tools a try next time you run into a mysterious error. You&#8217;ll save yourself some time and headaches and you might learn a little more about your Mac.</p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=431</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taxulator 1.3</title>
		<link>http://heuristicmedia.com/blog/?p=427</link>
		<comments>http://heuristicmedia.com/blog/?p=427#comments</comments>
		<pubDate>Fri, 06 May 2011 17:59:37 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[finance]]></category>
		<category><![CDATA[iOS (iPhone / iPad)]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[sales]]></category>
		<category><![CDATA[shopping]]></category>
		<category><![CDATA[tax]]></category>
		<category><![CDATA[Taxulator]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=427</guid>
		<description><![CDATA[Taxulator 1.3 is available on the App Store now. This update introduces a new user interface and several performance enhancements. Get it from the App Store or learn more at TaxulatorApp.com.]]></description>
			<content:encoded><![CDATA[<p>Taxulator 1.3 is available on the App Store now. This update introduces a new user interface and several performance enhancements.</p>
<p>Get it from the <a href="http://itunes.com/apps/taxulator">App Store</a> or learn more at <a href="http://TaxulatorApp.com">TaxulatorApp.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=427</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mentions in the Toronto Star &amp; Ottawa Citizen</title>
		<link>http://heuristicmedia.com/blog/?p=406</link>
		<comments>http://heuristicmedia.com/blog/?p=406#comments</comments>
		<pubDate>Thu, 21 Oct 2010 18:36:31 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Anil Prasad]]></category>
		<category><![CDATA[Heuristic Media]]></category>
		<category><![CDATA[Innerviews]]></category>
		<category><![CDATA[Ottawa Citizen]]></category>
		<category><![CDATA[Task Ave]]></category>
		<category><![CDATA[Task Avenue]]></category>
		<category><![CDATA[Tony Wallace]]></category>
		<category><![CDATA[Toronto Star]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=406</guid>
		<description><![CDATA[My name and work has popped up in a few of Canada&#8217;s leading newspapers over the last few weeks&#8230; The Toronto Star mentioned the entire Task Avenue team in the Small Business section on October 14. The Ottawa Citizen mentioned the Innerviews app in Peter Hum&#8217;s piece on Anil Prasad on October 21. I received [...]]]></description>
			<content:encoded><![CDATA[<p>My name and work has popped up in a few of Canada&#8217;s leading newspapers over the last few weeks&#8230;</p>
<p>The Toronto Star mentioned the entire <a href="http://taskave.com" target="_target">Task Avenue</a> team in the <a href="http://www.thestar.com/business/smallbusiness/article/874712--when-your-start-up-is-an-app" target="_target">Small Business section</a> on October 14.</p>
<p>The Ottawa Citizen mentioned the Innerviews app in <a href="http://www.ottawacitizen.com/entertainment/Music+that+matters/3703036/story.html" target="_target">Peter Hum&#8217;s piece on Anil Prasad</a> on October 21. I received a personal mention in the <a href="http://communities.canada.com/ottawacitizen/blogs/jazzblog/archive/2010/10/21/innerviews.aspx" target="_target">expanded online interview</a> with Anil.</p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=406</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interview with an iPhone/iPad developer</title>
		<link>http://heuristicmedia.com/blog/?p=401</link>
		<comments>http://heuristicmedia.com/blog/?p=401#comments</comments>
		<pubDate>Fri, 15 Oct 2010 17:10:48 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[B2B]]></category>
		<category><![CDATA[Chris Herbert]]></category>
		<category><![CDATA[Innerviews]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[MI6]]></category>
		<category><![CDATA[Startup Weekend]]></category>
		<category><![CDATA[Task Avenue]]></category>
		<category><![CDATA[Tony Wallace]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=401</guid>
		<description><![CDATA[I was recently interviewed by Chris Herbert of MI6 Marketing Integration. We discuss Startup Weekend Toronto, Task Avenue, Innerviews and potential uses for the iPhone and iPad in business to business marketing. Interview: Tony Wallace, Heuristic Media by B2Bspecialist]]></description>
			<content:encoded><![CDATA[<p>I was recently <a href="http://www.mi6agency.com/2010/10/interview-with-an-iphoneipad-developer/">interviewed</a> by Chris Herbert of <a href="http://www.mi6agency.com">MI6 Marketing Integration</a>. We discuss <a href="http://toronto.startupweekend.org">Startup Weekend Toronto</a>, <a href="http://taskave.com">Task Avenue</a>, <a href="http://heuristicmedia.com/apps/innerviews">Innerviews</a> and potential uses for the iPhone and iPad in business to business marketing.</p>
<p><object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F5911292&#038;secret_token=s-Yfd6E&#038;"></param><param name="allowscriptaccess" value="always"></param><embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F5911292&#038;secret_token=s-Yfd6E&#038;" type="application/x-shockwave-flash" width="100%"></embed></object><span><a href="http://soundcloud.com/b2bspecialist/interview-tony-wallace-heauristic-media">Interview: Tony Wallace, Heuristic Media</a> by <a href="http://soundcloud.com/b2bspecialist">B2Bspecialist</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=401</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Task Avenue / Startup Weekend Toronto / DemoCamp 27</title>
		<link>http://heuristicmedia.com/blog/?p=388</link>
		<comments>http://heuristicmedia.com/blog/?p=388#comments</comments>
		<pubDate>Fri, 15 Oct 2010 16:58:27 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Brian Gilham]]></category>
		<category><![CDATA[DemoCamp]]></category>
		<category><![CDATA[Fred Wilson]]></category>
		<category><![CDATA[Matt Rintoul]]></category>
		<category><![CDATA[Nathan Garvie]]></category>
		<category><![CDATA[Satish Kanwar]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[Startup Weekend]]></category>
		<category><![CDATA[Task Avenue]]></category>
		<category><![CDATA[Tony Wallace]]></category>
		<category><![CDATA[Toronto]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=388</guid>
		<description><![CDATA[A short, scattered history of three hectic weeks in late September and early October, 2010: Startup Weekend Toronto On Saturday, September 24, I woke up bright and early and caught a train to Ryerson University to participate in the inaugural Startup Weekend Toronto. I wasn&#8217;t able to attend the opening session on Friday evening, so [...]]]></description>
			<content:encoded><![CDATA[<p>A short, scattered history of three hectic weeks in late September and early October, 2010:</p>
<h2>Startup Weekend Toronto</h2>
<p>On Saturday, September 24, I woke up bright and early and caught a train to <a href="http://www.ryerson.ca" target="_blank">Ryerson University</a> to participate in the inaugural <a href="http://toronto.startupweekend.org" target="_blank">Startup Weekend Toronto</a>. I wasn&#8217;t able to attend the opening session on Friday evening, so I started looking for a team that needed an iOS developer. I didn&#8217;t have to look far.</p>
<p>The first table I approached was occupied by two guys who later turned out to be <a href="http://twitter.com/matt416" target="_blank">Matt Rintoul</a> and <a href="http://twitter.com/n8garvie" target="_blank">Nathan Garvie</a>. They had MacBooks and iPhones, which I generally consider a good sign, so I introduced myself. Matt and Nathan explained that they had an idea for a location-based task manager app called <a href="http://taskave.com" target="_blank">Task Avenue</a>, but they couldn&#8217;t find an iPhone developer.</p>
<p>DING DING DING!!!</p>
<p>The following is my recollection of the next 30 hours, clouded by several weeks of sleep deprivation and brain fog&#8230; <span id="more-388"></span></p>
<p><a href="http://twitter.com/skanwar" target="_blank">Satish Kanwar</a> appears. Planning and discussion ensue. Not enough planning and discussion, but the kind of planning and discussion you engage in when you know you have about 24 hours to build an app. I dig into MapKit and CoreLocation. Matt and Nathan start designing the iPhone UI and website. Time passes. Brows furrow. <a href="http://twitter.com/bgilham" target="_blank">Brian Gilham</a> appears and starts working on a REST API. Everybody eventually gets tired of Ryerson&#8217;s cafeteria chairs and unreliable WiFi. Satish takes us to <a href="http://www.jetcooper.com/" target="_blank">Jet Cooper</a> so we can work in peace. The sun sinks below the horizon. Time passes. Brows furrow. Pizza and Red Bull appears. The sun emerges from behind the horizon. The iPhone app starts to look like an iPhone app. Part of it actually sort of works the way it should. I pack up and walk back to Ryerson. Coffee and donuts appear, then quickly disappear. Matt, Nathan, Satish and Brian reappear and start working on the presentation. I distribute an ad hoc build of the app to the team, then sit around in a daze. Time passes. I change shirts in a vain and pointless attempt to look like less of a catastrophe. All the Startup Weekend teams file into a conference room to present their work. The ideas and presentations are good. Some of them are very good, like <a href="http://schedify.com/">this</a> and <a href="http://www.ratehub.ca">this</a> and <a href="http://www.styllist.com/">this</a>. </p>
<p><a href="http://www.techvibes.com/blog/taskave-wins-first-place-at-startup-weekend-toronto-swtoronto" target="_blank">TASK AVENUE WINS! YAY!</a></p>
<p>Having now been awake for about 36 hours, I find the celebratory beer amazingly effective. I bid farewell to the team and stumble back to the train. End brain fog.</p>
<p><em>Note: You can read Matt&#8217;s (more lucid) take on Startup Weekend <a href="http://yousayyeah.com/post/1199312565/the-startup-weekend-experience" target="_blank">here</a>.</em></p>
<h2>DemoCamp 27</h2>
<p>On the Monday after Startup Weekend, the team agreed that we would take a few days off, then reconvene later that week to discuss the future of Task Avenue. That plan lasted about a day. On Tuesday, Satish received an invitation to present Task Avenue on stage at <a href="http://democamp.com/2010/09/03/dct27/" target="_blank">DemoCamp 27</a>, with <a href="http://avc.com" target="_blank">Fred Wilson</a> of <a href="http://unionsquareventures.com" target="_blank">Union Square Ventures</a> in attendance.</p>
<p>DemoCamp was a week away. Craaaaaaaaaaaaaaaaaaaaaaaaaaap&#8230;</p>
<p>We weren&#8217;t about to pass up an opportunity like that, but the prototype of Task Avenue from Startup Weekend wasn&#8217;t going to cut it. Back to work&#8230;</p>
<p>(The sun emerges from behind the horizon. Time passes. Brows furrow. Coffee appears, then quickly disappears. The sun sinks below the horizon. Repeat seven times.)</p>
<p>A week and a day later, hopped up on Starbucks and battling the need to sleep, I joined the team at DemoCamp. Fred Wilson delivered his <a href="http://startmeupryerson.com/democamp/" target="_blank">keynote speech</a>, then Satish and Brian hit the stage to walk the audience through the latest build of Task Avenue. The presentation went smoothly and received positive feedback. The Toronto Star took some photos of the team. All was right with the world.</p>
<h2>Next Steps</h2>
<p>The Task Avenue team is now hard at work turning our prototype into a fully functional app, and turning the team into a real company. We&#8217;re planning to release the app soon, so please <a href="http://taskave.com" target="_blank">add yourself to our mailing list</a> and <a href="http://twitter.com/taskave" target="_blank">follow us</a> for updates. We promise we won&#8217;t spam you. We only want to make your life easier.</p>
<h2>Press Coverage</h2>
<p>Since winning Startup Weekend, Task Avenue has received a lot of press coverage. Here is the best of it:</p>
<p><a href="http://www.thestar.com/business/smallbusiness/article/874712--when-your-start-up-is-an-app" target="_blank">Toronto Star</a><br />
<a href="http://www.blogto.com/tech/2010/10/toronto_startups_jump_on_the_location-based_bandwagon/" target="_blank">BlogTO</a><br />
<a href="http://www.techvibes.com/blog/startup-weekend-toronto-builds-13-startups-in-less-than-3-days" target="_blank">TechVibes</a><br />
<a href="http://www.judysims.com/simsblog/2010/10/one-weekend-was-all-it-took.html" target="_blank">SimsBlog</a><br />
<a href="http://www.getuproot.com/blog/?p=701" target="_blank">Uproot</a></p>
<h2>Links</h2>
<p><a href="http://taskave.com" target="_blank">Task Avenue</a><br />
<a href="http://twitter.com/taskave" target="_blank">Task Avenue on Twitter</a><br />
<a href="http://toronto.startupweekend.org" target="_blank">Startup Weekend Toronto</a><br />
<a href="http://twitter.com/swtoronto" target="_blank">Startup Weekend Toronto on Twitter</a><br />
<a href="http://democamp.com" target="_blank">DemoCamp</a></p>
<h2>Task Avenue Team</h2>
<p><a href="http://twitter.com/matt416" target="_blank">Matt Rintoul</a><br />
<a href="http://twitter.com/n8garvie" target="_blank">Nathan Garvie</a><br />
<a href="http://twitter.com/skanwar" target="_blank">Satish Kanwar</a><br />
<a href="http://twitter.com/bgilham" target="_blank">Brian Gilham</a><br />
<a href="http://twitter.com/heuristicmedia" target="_blank">Tony Wallace</a></p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=388</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Posterous Tech &amp; Media Blog</title>
		<link>http://heuristicmedia.com/blog/?p=386</link>
		<comments>http://heuristicmedia.com/blog/?p=386#comments</comments>
		<pubDate>Mon, 20 Sep 2010 00:06:22 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Heuristic Media]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[Posterous]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=386</guid>
		<description><![CDATA[I set up a new Posterous blog to collect cool tech- and media-related stuff that I find laying around these intertubes. heuristicmedia.posterous.com]]></description>
			<content:encoded><![CDATA[<p>I set up a new <a href="http://heuristicmedia.posterous.com" target="_blank">Posterous blog</a> to collect cool tech- and media-related stuff that I find laying around these intertubes.</p>
<p><a href="http://heuristicmedia.posterous.com" target="_blank">heuristicmedia.posterous.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=386</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Innerviews App &amp; Book Coverage at NPR</title>
		<link>http://heuristicmedia.com/blog/?p=374</link>
		<comments>http://heuristicmedia.com/blog/?p=374#comments</comments>
		<pubDate>Tue, 24 Aug 2010 03:22:45 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=374</guid>
		<description><![CDATA[A Blog Supreme, National Public Radio&#8217;s jazz blog, gave a shout out to the Innerviews app and book today. Check it out&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.npr.org/blogs/ablogsupreme/2010/08/23/129385814/two-types-of-in-depth-innerviews" target="_blank">A Blog Supreme</a>, National Public Radio&#8217;s jazz blog, gave a shout out to the <a href="http://www.heuristicmedia.com/apps/innerviews">Innerviews app</a> and book today. <a href="http://www.npr.org/blogs/ablogsupreme/2010/08/23/129385814/two-types-of-in-depth-innerviews" target="_blank">Check it out&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=374</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Innerviews for iPhone &amp; iPad</title>
		<link>http://heuristicmedia.com/blog/?p=356</link>
		<comments>http://heuristicmedia.com/blog/?p=356#comments</comments>
		<pubDate>Thu, 19 Aug 2010 14:03:14 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Anil Prasad]]></category>
		<category><![CDATA[fusion]]></category>
		<category><![CDATA[Innerviews]]></category>
		<category><![CDATA[interviews]]></category>
		<category><![CDATA[iOS (iPhone / iPad)]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[jazz]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[progressive]]></category>
		<category><![CDATA[rock]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=356</guid>
		<description><![CDATA[New Innerviews iPhone/iPad App Delivers In-Depth, Immersive and Visually-Rich Interviews With Rock, Pop and Jazz Luminaries Innerviews, a pioneering online music magazine, and Heuristic Media, a leading mobile app development company, are pleased to announce the immediate availability of the Innerviews app for iPhone, iPad and iPod Touch via the Apple App Store. The Innerviews [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.itunes.com/apps/innerviews" title="Download Innerviews from the App Store" target="_blank"><img class="right_align_top" src="http://www.heuristicmedia.com/blog/apps/innerviews/innerviews_promo.png" border="0" /></a></p>
<h2>New Innerviews iPhone/iPad App Delivers In-Depth, Immersive and Visually-Rich Interviews With Rock, Pop and Jazz Luminaries</h2>
<p><a href="http://www.innerviews.org" target="_blank">Innerviews</a>, a pioneering online music magazine, and Heuristic Media, a leading mobile app development company, are pleased to announce the immediate availability of the Innerviews app for iPhone, iPad and iPod Touch via the Apple App Store.</p>
<p>The <a href="http://www.heuristicmedia.com/apps/innerviews" target="_blank">Innerviews iPhone/iPad app</a> delivers in-depth, uncompromising interviews with music’s most vital and original voices, optimized for mobile reading. Brought to you by the creator of Innerviews.org, the first and longest-running music magazine on the Web, the app explores the widest variety of genres and styles of music imaginable, including rock, jazz, hip-hop, world music, pop, and folk. A few of the artist interviews featured in the initial app deployment include Porcupine Tree, Richard Thompson, Marcus Miller, Mike Stern, Ron Carter, Afro Celt Sound System, and Steve Hackett.</p>
<p>The Innerviews app was designed by Heuristic Media CEO and lead programmer Tony Wallace. Heuristic Media is a renowned app creation and consulting firm responsible for a variety of business and educational apps. The Innerviews app is Heuristic Media’s first foray into the entertainment and media field.</p>
<p>Key features of the Innerviews iPhone/iPad app include:</p>
<ul>
<li>The latest Innerviews interviews optimized for mobile viewing</li>
<li>Playlists exploring the latest in eclectic album and reissue releases</li>
<li>News about forthcoming interviews</li>
<li>Artists reflecting on their Innerviews experiences</li>
<li>Full support for iPhone 4 Retina display, iPad, earlier iPhones, and iPod Touch</li>
<li>Offline reading support</li>
<li>Gorgeous, intuitive user interface</li>
</ul>
<p>The app is available for download at: <a href="http://www.itunes.com/apps/innerviews" target="_blank">http://www.itunes.com/apps/innerviews</a></p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=356</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iOS Dev: Decoding PHP URL Encoded Strings with NSString</title>
		<link>http://heuristicmedia.com/blog/?p=308</link>
		<comments>http://heuristicmedia.com/blog/?p=308#comments</comments>
		<pubDate>Mon, 14 Jun 2010 14:27:09 +0000</pubDate>
		<dc:creator>Tony Wallace</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iOS (iPhone/iPad)]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[decode]]></category>
		<category><![CDATA[decoding]]></category>
		<category><![CDATA[encode]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[iOS (iPhone / iPad)]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[NSString]]></category>
		<category><![CDATA[rawurlencode]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[urlencode]]></category>

		<guid isPermaLink="false">http://heuristicmedia.com/blog/?p=308</guid>
		<description><![CDATA[If you do any PHP development, you should be familiar with the urlencode() function: 12345678910&#60;?php &#160; &#160; &#160;$string = &#34;This string will totally screw things up if it isn't urlencoded!&#34;; &#160; &#160; &#160;$encoded_string = urlencode&#40;$string&#41;; &#160; &#160; &#160;echo $encoded_string; &#160; &#160; &#160;// Result: &#160; &#160; &#160;// This+string+will+totally+screw+things+up+if+it+isn%27t+urlencoded%21 ?&#62; Notice that the resulting string contains percent [...]]]></description>
			<content:encoded><![CDATA[<p>If you do any PHP development, you should be familiar with the <a href="http://www.php.net/manual/en/function.urlencode.php" target="_blank"><em>urlencode()</em></a> function:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$string</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;This string will totally screw things up if it isn't urlencoded!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$encoded_string</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/urlencode"><span style="color: #990000;">urlencode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$encoded_string</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Result:</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// This+string+will+totally+screw+things+up+if+it+isn%27t+urlencoded%21</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Notice that the resulting string contains percent escapes in place of the apostrophe (&#8216;%27&#8242;) and exclamation point (&#8216;%21&#8242;), but the spaces have been replaced with &#8216;+&#8217; symbols. This is what <em>urlencode()</em> does, and it works just fine if the encoded string will be decoded by the <a href="http://php.net/manual/en/function.urldecode.php" target="_blank"><em>urldecode()</em></a> function in PHP.</p>
<p>Things get a little more complicated if you use <em>urlencode()</em> to encode a query response for an iOS app. The standard, easy way to remove percent escapes is the <a href="http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/20000154-BCIECHFE" target="_blank">NSString <em>stringByReplacingPercentEscapesUsingEncoding:</em></a> method. When used on the encoded string shown above, we get this:</p>
<p><span id="more-308"></span></p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>encodedString <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;This+string+will+totally+screw+things+up+if+it+isn%27t+urlencoded%21&quot;</span>; <span style="color: #11740a; font-style: italic;">// Presumably returned from a server call.</span><br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>decodedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>encodedString stringByReplacingPercentEscapesUsingEncoding<span style="color: #002200;">:</span> NSUTF8StringEncoding<span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, decodedString<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// Result:</span><br />
<span style="color: #11740a; font-style: italic;">// This+string+will+totally+screw+things+up+if+it+isn't+urlencoded!</span></div></td></tr></tbody></table></div>
<p>Oh crap. Why are the &#8216;+&#8217; symbols still there?</p>
<p>Well, it turns out that <em>stringByReplacingPercentEscapesUsingEncoding:</em> is named accurately &#8211; it <em>only</em> replaces percent escapes, so it thinks those &#8216;+&#8217; symbols are a valid part of the string. There are two simple ways around this problem.</p>
<p>If you have to work with an existing web service that uses <em>urlencode()</em>, you can prepare the string for decoding with the <a href="http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/20000154-SW6" target="_blank">NSString <em>stringByReplacingOccurrencesOfString:withString:</em></a> method, which replaces the &#8216;+&#8217; symbols with percent escapes representing spaces (%20):</p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>encodedString <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;This+string+will+totally+screw+things+up+if+it+isn%27t+urlencoded%21&quot;</span>;<br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>preparedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>encodedString stringByReplacingOccurrencesOfString<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;+&quot;</span> withString<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%20&quot;</span><span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, preparedString<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// Result:</span><br />
<span style="color: #11740a; font-style: italic;">// This%20string%20will%20totally%20screw%20things%20up%20if%20it isn%27t%20urlencoded%21</span><br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>decodedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>preparedString stringByReplacingPercentEscapesUsingEncoding<span style="color: #002200;">:</span> NSUTF8StringEncoding<span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, decodedString<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// Result:</span><br />
<span style="color: #11740a; font-style: italic;">// This string will totally screw things up if it isn't urlencoded!</span></div></td></tr></tbody></table></div>
<p>Ahhhhh&#8230; much better! </p>
<p><strong>VERY IMPORTANT DETAIL:</strong> You have to replace the &#8216;+&#8217; symbols <em>before</em> decoding the percent escapes or you&#8217;ll run into problems when you encounter a string that contains a valid &#8216;+&#8217; symbol (i.e. one that the string contained before encoding). The <em>urlencode()</em> function escapes &#8216;+&#8217; with &#8216;%2B&#8217; before escaping spaces with &#8216;+&#8217; , so valid &#8216;+&#8217; symbols will be safe until you finally decode the string. If that seems confusing to you, read it again and again and again. Or just urlencode() a string that contains a &#8216;+&#8217; symbol and study the result. You&#8217;ll figure it out.</p>
<p>On the other hand, if you&#8217;re building your own web service for your app, you can avoid that extra step by using PHP&#8217;s <a href="http://php.net/manual/en/function.rawurlencode.php" target="_blank"><em>rawurlencode()</em></a> function:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$string</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;This string will totally screw things up if it isn't urlencoded!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$encoded_string</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/rawurlencode"><span style="color: #990000;">rawurlencode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$encoded_string</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Result:</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// This%20string%20will%20totally%20screw%20things%20up%20if%20it%20isn%27t%20urlencoded%21</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>The <em>rawurlencode()</em> function conforms to <a href="http://www.faqs.org/rfcs/rfc1738.html" target="_blank">RFC 1738</a> and uses &#8216;%20&#8242; escapes for spaces, so it plays nice with <em>stringByReplacingPercentEscapesUsingEncoding:</em> right away:</p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>encodedString <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;This%20string%20will%20totally%20screw%20things%20up%20if%20it isn%27t%20urlencoded%21&quot;</span>;<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>decodedString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>encodedString stringByReplacingPercentEscapesUsingEncoding<span style="color: #002200;">:</span> NSUTF8StringEncoding<span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, decodedString<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// Result:</span><br />
<span style="color: #11740a; font-style: italic;">// This string will totally screw things up if it isn't urlencoded!</span></div></td></tr></tbody></table></div>
<p>There you have it! URL encoded strings decoded by NSString in one (or two) easy step(s).</p>
]]></content:encoded>
			<wfw:commentRss>http://heuristicmedia.com/blog/?feed=rss2&#038;p=308</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

