<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2titles.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemtitles.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><description>I’m a software developer from Canada.You can view my portfolio at www.Lundie.ca.</description><title>Chris Lundie’s Blog</title><generator>Tumblr (3.0; @chrislundie)</generator><link>http://blog.lundie.ca/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ChrisLundie" /><feedburner:info uri="chrislundie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><feedburner:emailServiceId>ChrisLundie</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>Assessment of App Store economics</title><description>&lt;a href="http://communities-dominate.blogs.com/brands/2010/06/full-analysis-of-iphone-economics-its-bad-news-and-then-it-gets-worse.html"&gt;Assessment of App Store economics&lt;/a&gt;: &lt;p&gt;This article is one of the better “back of the envelope” App Store scare stories. It is sad that most apps cannot turn a profit, but what if you left out all the obvious garbage, spammy, just plain bad apps? I think the outlook for good apps isn’t nearly this bad.&lt;/p&gt;

&lt;p&gt;The estimate of $15,000 to develop an app sounds about right. It’s what I would charge for one month of full time development. However all my apps but one were written by me, for myself, in two weeks with no real money spent.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QG9xSNPTP8RZOQIwyhhbIxrJelc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QG9xSNPTP8RZOQIwyhhbIxrJelc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QG9xSNPTP8RZOQIwyhhbIxrJelc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QG9xSNPTP8RZOQIwyhhbIxrJelc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ChrisLundie?a=jS2KFAQFmac:1kS7Hw8pVyk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ChrisLundie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ChrisLundie/~3/jS2KFAQFmac/732128960</link><guid isPermaLink="false">http://blog.lundie.ca/post/732128960</guid><pubDate>Thu, 24 Jun 2010 16:23:30 -0400</pubDate><feedburner:origLink>http://blog.lundie.ca/post/732128960</feedburner:origLink></item><item><title>Big Hairy Challenge</title><description>&lt;a href="http://www.northumberlandview.ca/modules.php?op=modload&amp;name=PagEd&amp;file=index&amp;topic_id=1&amp;page_id=2155"&gt;Big Hairy Challenge&lt;/a&gt;: &lt;p&gt;A friend is doing painful, humiliating things to his body for charity.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kvCnUSHIHHHnOZIzwvXK2p74ZoQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kvCnUSHIHHHnOZIzwvXK2p74ZoQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kvCnUSHIHHHnOZIzwvXK2p74ZoQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kvCnUSHIHHHnOZIzwvXK2p74ZoQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ChrisLundie?a=R7ES7FM577k:erGwIIVLlxg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ChrisLundie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ChrisLundie/~3/R7ES7FM577k/555998410</link><guid isPermaLink="false">http://blog.lundie.ca/post/555998410</guid><pubDate>Wed, 28 Apr 2010 10:44:21 -0400</pubDate><feedburner:origLink>http://blog.lundie.ca/post/555998410</feedburner:origLink></item><item><title>Responsive UI on the iPhone and iPad</title><description>&lt;p&gt;Today I released an update to &lt;a href="http://www.linkdew.com/"&gt;my iPhone &amp; iPad app LinkDew&lt;/a&gt;. I think it does a decent job of keeping the UI responsive while doing some fairly intensive background operations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;LinkDew is a Twitter client that displays photos uploaded by the people you follow. It uses Core Data to save information about your friends, their tweets and photos that were linked in the tweets. In the iPhone simulator, running on the computer’s Core 2 Duo processor, everything is so fast, you don’t notice any delay. Running on a real iPhone 3G, it can actually take two or three seconds to parse the results from the Twitter API, extract all the photo links, insert the Core Data objects representing the links and statuses, and various other operations. If this were done on the main thread, the UI would be blocked and everything would freeze up for a few moments. This is not good.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I moved all of the heavy lifting to a background thread. The tricky part is that a Core Data context (&lt;em&gt;NSManagedObjectContext&lt;/em&gt;) cannot be shared between two threads. So, the background thread needs to make its own context. This is straightforward, but what happens when the importing operation is done, and you save the context? Well, the context you are using on the main thread will not know anything about the changes that were made on the other context. What to do?&lt;/p&gt;
&lt;p&gt;Core Data was designed with this in mind! You just need to register for this notification:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NSManagedObjectContextDidSaveNotification&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When the “background” context sends this notification, I just call &lt;em&gt;mergeChangesFromContextDidSaveNotification:&lt;/em&gt; on the “main” context, and make sure to do so on the main thread. Then everything syncs up and the UI is never blocked.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vIMn4ITBAxgSZIKjqkbx1hVFCeQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vIMn4ITBAxgSZIKjqkbx1hVFCeQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vIMn4ITBAxgSZIKjqkbx1hVFCeQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vIMn4ITBAxgSZIKjqkbx1hVFCeQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ChrisLundie?a=YjJPQJpwDv8:aqdsuKGg3tQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ChrisLundie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ChrisLundie/~3/YjJPQJpwDv8/552241786</link><guid isPermaLink="false">http://blog.lundie.ca/post/552241786</guid><pubDate>Mon, 26 Apr 2010 22:12:00 -0400</pubDate><feedburner:origLink>http://blog.lundie.ca/post/552241786</feedburner:origLink></item><item><title>LinkDew is ready for Twitter’s transition to OAuth</title><description>&lt;p&gt;Twitter recently &lt;a href="http://groups.google.com/group/twitter-api-announce/browse_thread/thread/f71eb68600996af8?pli=1"&gt;reminded 3rd party developers&lt;/a&gt; that the “Basic Authentication” method will be removed in the coming weeks. This means that many web sites and applications, including iPhone apps, need to be updated in order to keep Twitter integration working. I expect that some old, abandoned apps in the App Store will stop working altogether.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.linkdew.com/"&gt;My own LinkDew app&lt;/a&gt; was built for OAuth, so it will continue to work with no problem. I spent about two days writing my own code for OAuth and Twitter, because existing 3rd party code did not look very stable or well documented yet.&lt;/p&gt;
&lt;p&gt;It appears that the popular MGTwitterEngine library is &lt;a href="http://github.com/mattgemmell/MGTwitterEngine/issues/#issue/5"&gt;finally being updated&lt;/a&gt;. So, if you are writing your own app with Twitter integration, you may want to look into that instead of doing it yourself.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JTTZTirPOErsRrA8iv1_XZ5yVFI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JTTZTirPOErsRrA8iv1_XZ5yVFI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JTTZTirPOErsRrA8iv1_XZ5yVFI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JTTZTirPOErsRrA8iv1_XZ5yVFI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ChrisLundie?a=DrOKizDH8DU:a3hYQvIUKtE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ChrisLundie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ChrisLundie/~3/DrOKizDH8DU/552186921</link><guid isPermaLink="false">http://blog.lundie.ca/post/552186921</guid><pubDate>Mon, 26 Apr 2010 21:48:51 -0400</pubDate><feedburner:origLink>http://blog.lundie.ca/post/552186921</feedburner:origLink></item><item><title>LinkDew for iPad and iPhone: A beautiful Twitter gallery and slideshow</title><description>&lt;a href="http://www.linkdew.com/"&gt;LinkDew for iPad and iPhone: A beautiful Twitter gallery and slideshow&lt;/a&gt;: &lt;p&gt;My new app is available now. It is intended to be the simplest way to view your friends’ photos on Twitter. Hopefully I succeeded!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l3PtS2z0WHECSafmX530exaeRk0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l3PtS2z0WHECSafmX530exaeRk0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l3PtS2z0WHECSafmX530exaeRk0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l3PtS2z0WHECSafmX530exaeRk0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ChrisLundie?a=jflKV7Nf33o:r6stmQwa5DQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ChrisLundie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ChrisLundie/~3/jflKV7Nf33o/509209015</link><guid isPermaLink="false">http://blog.lundie.ca/post/509209015</guid><pubDate>Fri, 09 Apr 2010 19:03:19 -0400</pubDate><feedburner:origLink>http://blog.lundie.ca/post/509209015</feedburner:origLink></item><item><title>Best Free iPhone Apps for March 2010</title><description>&lt;a href="http://www.appolicious.com/articles/1628-best-free-iphone-apps-for-march-2010"&gt;Best Free iPhone Apps for March 2010&lt;/a&gt;: &lt;p&gt;Thank you to Appolicious for naming WhatVeggie one of the best apps of March 2010. I’m honoured!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AGo7qSb2qiI9tDUDKv-Ebx-_0j4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AGo7qSb2qiI9tDUDKv-Ebx-_0j4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AGo7qSb2qiI9tDUDKv-Ebx-_0j4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AGo7qSb2qiI9tDUDKv-Ebx-_0j4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ChrisLundie?a=nI25NOYwjoQ:BW930j40rlg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ChrisLundie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ChrisLundie/~3/nI25NOYwjoQ/487427728</link><guid isPermaLink="false">http://blog.lundie.ca/post/487427728</guid><pubDate>Wed, 31 Mar 2010 17:26:53 -0400</pubDate><feedburner:origLink>http://blog.lundie.ca/post/487427728</feedburner:origLink></item><item><title>WhatVeggie iPhone app now available</title><description>&lt;p&gt;I’m pleased to announce a new iPhone app called WhatVeggie. It contains all kinds of great reference material about fruits and vegetables. Just take it to the store and type in the 4-digit codes on the stickers.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lundie.ca/whatveggie/"&gt;http://www.lundie.ca/whatveggie/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8bD2VBtqVSngHdTPJDvLdtHE8CQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8bD2VBtqVSngHdTPJDvLdtHE8CQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8bD2VBtqVSngHdTPJDvLdtHE8CQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8bD2VBtqVSngHdTPJDvLdtHE8CQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ChrisLundie?a=NwzrzQrqk0k:gPcfn3fP_Gc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ChrisLundie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/ChrisLundie/~3/NwzrzQrqk0k/464962657</link><guid isPermaLink="false">http://blog.lundie.ca/post/464962657</guid><pubDate>Mon, 22 Mar 2010 00:57:17 -0400</pubDate><feedburner:origLink>http://blog.lundie.ca/post/464962657</feedburner:origLink></item></channel></rss>
