<?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>CarpĂ© Cocoa</title>
	<atom:link href="http://carpe-cocoa.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://carpe-cocoa.com</link>
	<description>My journey into iPhone development</description>
	<lastBuildDate>Tue, 24 Nov 2009 21:03:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Extended Warranties Value for Money</title>
		<link>http://carpe-cocoa.com/2009-11-24/extended-warranties-value-for-money/</link>
		<comments>http://carpe-cocoa.com/2009-11-24/extended-warranties-value-for-money/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 21:03:31 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Musings]]></category>
		<category><![CDATA[failure analysis]]></category>
		<category><![CDATA[statistics]]></category>
		<category><![CDATA[warranties]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=319</guid>
		<description><![CDATA[Alexander Micek&#8217;s post &#8220;When Information Overwhelms Facts&#8221; (via Daring Fireball) has some interesting commentary on a laptop reliability study that has been making the rounds recently.
In the comments Tonio Loewald stated that
Laptop failure rates of 20-30% over three years certainly seem pretty accurate based on my experience (and that’s how Ars Technica looked at it), [...]]]></description>
			<content:encoded><![CDATA[<p>Alexander Micek&#8217;s post &#8220;<a href="http://tumbledry.org/2009/11/20/when_information_overwhelms" target="_blank">When Information Overwhelms Facts</a>&#8221; (<a href="http://daringfireball.net/linked/2009/11/24/micek-information-facts" target="_blank">via Daring Fireball</a>) has some interesting commentary on a <a href="http://www.squaretrade.com/pages/laptop-reliability-1109/." target="_blank">laptop reliability study</a> that has been making the rounds recently.</p>
<p>In the comments <a href="http://loewald.com/blog/">Tonio Loewald</a> stated that</p>
<blockquote><p>Laptop failure rates of 20-30% over three years certainly seem pretty accurate based on my experience (and that’s how Ars Technica looked at it), so the “value for money” equation for extended warranties pretty much comes down to 0.15 x purchase cost (since your laptop has about a 15% chance of failing due to reliability issues after its standard warranty expires).</p></blockquote>
<p>This would mean that AppleCare on a $1699 MacBook Pro is worth about $255. Apple charges $349 for this coverage, but it also includes 3 years (well, 33 extra months) of phone support. You can decide if that&#8217;s worth it for you, but it&#8217;s certainly not unreasonable.</p>
<p>Looking a bit closer, the report claims a 31% <em>total</em> failure rate over 3 years, with 10.6% from accidental damage and 20.4% from hardware malfunctions. You might be able to get accidental damage covered under warranty, especially if the company uses 3rd-party vendors (I&#8217;ve been told by Dell techs &#8220;I don&#8217;t care if you poured a can of Coke in the machine&#8221;), but such failures are generally specifically excluded from coverage, so lets go with the 20.4%. The paper shows that the 1-year hardware malfunction rate is 4.7%, so that leaves a 15.7% failure rate over the 2 out-of-warranty years. This agrees quite well with Tonio&#8217;s claim.</p>
<p>The other term in the equation is more suspect. The Square Trade report doesn&#8217;t give any details on the failures making up that 20.4%, but it seems likely that almost all are single-component failures, which would <em>not</em> require replacing the whole system. The actual value equation is more like:
<pre><em>value = 0.16 * average repair cost.</em></pre>
<p>Of the 7 laptops I&#8217;ve owned over the past 15 years I&#8217;ve had one screen, one hard drive, one trackpad, one motherboard, and one power supply fail. None of the repairs were significantly over $300, and none of the machines were under $1000 new (most were quite a bit more!). A bit of lazy Googling seems to back this sub-$300 average repair bill, if someone has current, reliable numbers on this I&#8217;d love to see them.</p>
<p>Even if we&#8217;re generous (pessimistic?) and<em> double</em> the repair bill, that extended warranty has an expected value of about $95. And since we&#8217;re on a 3-year cycle here, what happens if the failure happens in the 35th month? Are you going to pay for the repair or just buy that replacement system a month early?</p>
<p>The bottom line is that, like most kinds of insurance, the vendor on an extended warranty is assuming a risk in exchange for profit. The average consumer isn&#8217;t going to get back anywhere near the cost of the coverage. Even those needing one typical repair are going to break even at best. You might be able to get additional value out of extras like battery replacement, but in general extended warranties don&#8217;t make a lot of sense.</p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-11-24/extended-warranties-value-for-money/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPhone OS 3.0.1 Released</title>
		<link>http://carpe-cocoa.com/2009-07-31/iphone-os-3-0-1-released/</link>
		<comments>http://carpe-cocoa.com/2009-07-31/iphone-os-3-0-1-released/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 21:53:23 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=314</guid>
		<description><![CDATA[Apple has released iPhone OS 3.0.1. All iPhone users can (and should!) update for free through iTunes. If iTunes does not notify you that the update is available, click the &#8220;Check for Update&#8221; button on the device summary tab.
This update fixes the much-publicised SMS vulnerability, which could allow an attacker to access a phone through [...]]]></description>
			<content:encoded><![CDATA[<p>Apple has released iPhone OS 3.0.1. All iPhone users can (and should!) update for free through iTunes. If iTunes does not notify you that the update is available, click the &#8220;Check for Update&#8221; button on the device summary tab.</p>
<p>This update fixes the <a href="http://www.forbes.com/2009/07/28/hackers-iphone-apple-technology-security-hackers.html" target="_blank">much-publicised</a> <a href="http://news.cnet.com/8301-27080_3-10299378-245.html?tag=newsFeaturedBlogArea.0" target="_blank">SMS vulnerability</a>, which could allow an attacker to access a phone through a series of SMS messages, only one of which is visible to the user. It seems the bug is in the baseband code, possibly in reference code from the chip vendor, since a number of devices from different vendors are (or were) reportedly vulnerable to variants of this attack, including Android and HTC WinMo devices.</p>
<p><a href="http://support.apple.com/kb/HT3754" target="_blank">Apple&#8217;s knowledge base article</a> on the update has little new info.</p>
<p>iPod Touch users are unaffected by this update, since they do not have SMS capability. The iPhone OS for iPod Touch remains at version 3.0. The update does not seem to affect tethering either.</p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-07-31/iphone-os-3-0-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Detecting when Bluetooth is disabled with GKSession</title>
		<link>http://carpe-cocoa.com/2009-07-29/detecting-when-bluetooth-is-disabled-with-gksession/</link>
		<comments>http://carpe-cocoa.com/2009-07-29/detecting-when-bluetooth-is-disabled-with-gksession/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 21:47:45 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[GameKit]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=304</guid>
		<description><![CDATA[Edit: As noted in the comments, this technique no longer works in iPhone OS 3.1.
If you are writing an iPhone GameKit app without using GKPeerPickerController (as I did in PhotoBeamer), you need to detect when Bluetooth is disabled and ask the user to turn it on in the settings app. Apple doesn&#8217;t provide a way [...]]]></description>
			<content:encoded><![CDATA[<p><em>Edit: As noted in the comments, this technique no longer works in iPhone OS 3.1.</em></p>
<p>If you are writing an iPhone GameKit app without using <code>GKPeerPickerController</code> (as I did in <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=321814330&amp;mt=8">PhotoBeamer</a>), you need to detect when Bluetooth is disabled and ask the user to turn it on in the settings app. Apple doesn&#8217;t provide a way for a developer to enable Bluetooth other than through <code>GKPeerPickerController</code>.</p>
<p>This is pretty easy to do. First, create your <code>GKSession</code> and set it to be available:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">    session <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>GKSession alloc<span style="color: #002200;">&#93;</span> initWithSessionID<span style="color: #002200;">:</span>kMyAppSessionID
                                       displayName<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span>
                                       sessionMode<span style="color: #002200;">:</span>GKSessionModeClient<span style="color: #002200;">&#93;</span>;
    session.delegate <span style="color: #002200;">=</span> self;
    <span style="color: #002200;">&#91;</span>session setDataReceiveHandler<span style="color: #002200;">:</span>self withContext<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
    session.available <span style="color: #002200;">=</span> <span style="color: #a61390;">YES</span>;</pre></div></div>

<p>Next, set up your <code lang="objc">- (void)session:(GKSession *)session didFailWithError:(NSError *)error</code> delegate method to detect when Bluetooth is not available and alert the user:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// GKSessionErrorDomain causes link error (rdar://problem/7014349)</span>
<span style="color: #6e371a;">#if 0</span>
<span style="color: #6e371a;">#define kGKSessionErrorDomain GKSessionErrorDomain</span>
<span style="color: #6e371a;">#else</span>
<span style="color: #6e371a;">#define kGKSessionErrorDomain @&quot;com.apple.gamekit.GKSessionErrorDomain&quot;</span>
<span style="color: #6e371a;">#endif</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>session<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>GKSession <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>session didFailWithError<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSError</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>error <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>error domain<span style="color: #002200;">&#93;</span> isEqual<span style="color: #002200;">:</span>kGKSessionErrorDomain<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&amp;</span>amp;<span style="color: #002200;">&amp;</span>amp;
        <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>error code<span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> GKSessionCannotEnableError<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #11740a; font-style: italic;">// Bluetooth disabled, prompt the user to turn it on</span>
    <span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #11740a; font-style: italic;">// Some other error, get the description from the NSError object</span>
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #11740a; font-style: italic;">// destroy the GKSession and clean up</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>The <code lang="objc">GKSessionErrorDomain</code> symbol causes a link error for me, so I&#8217;m temporarily using the constant string instead. When Apple fixes the SDK, I&#8217;ll change that <code lang="objc">#if 0</code> to use the official symbolic name.</p>
<p>Note that this error will sometimes occur on a reconnection attempt even when Bluetooth is enabled, presumably because the old session is still partially active.</p>
<p>It would be nice to have a more user-friendly way to turn on Bluetooth without leaving the app and without using the full <code lang="objc">GKPeerPickerController</code> UI. I&#8217;ve filed a bug report (rdar://problem/7061502) asking for this functionality. You should <a title="Apple Bug Reporter" href="https://bugreport.apple.com/" target="_blank">file one too</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-07-29/detecting-when-bluetooth-is-disabled-with-gksession/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>GameKit Troubleshooting</title>
		<link>http://carpe-cocoa.com/2009-07-22/gamekit-troubleshooting/</link>
		<comments>http://carpe-cocoa.com/2009-07-22/gamekit-troubleshooting/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 00:23:31 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[appMobi]]></category>
		<category><![CDATA[BeamCatcher]]></category>
		<category><![CDATA[PhotoBeamer]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=294</guid>
		<description><![CDATA[EDIT August 19, 2009: Added information about server timeouts.
GameKit is a new feature in iPhone OS 3.0 that allows apps to easily exchange data over a Bluetooth Personal Area Networking (PAN). Apple did a great job making this functionality available, but there are a few issues users may see with these applications. If you are [...]]]></description>
			<content:encoded><![CDATA[<p><em>EDIT August 19, 2009: Added information about server timeouts.</em></p>
<p>GameKit is a new feature in iPhone OS 3.0 that allows apps to easily exchange data over a Bluetooth Personal Area Networking (PAN). Apple did a great job making this functionality available, but there are a few issues users may see with these applications. If you are having problems connecting with a GameKit app such as <a title="See PhotoBeamer in the App Store (opens in iTunes)" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=321814330&amp;mt=8 " target="_blank">PhotoBeamer</a> and <a title="See BeamCatcher in the App Store (opens in iTunes)" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=321815121&amp;mt=8 " target="_blank">BeamCatcher</a>, try the following steps to resolve the issue.</p>
<ol>
<li><strong>Be sure you are using a supported device.</strong> The original iPhone (which has a silver back) and the original iPod Touch (which lacks hardware volume controls on the side) do not have the necessary hardware to support PhotoBeamer or other GameKit apps.</li>
<li><strong>Be sure Bluetooth is on.</strong> You should see a Bluetooth icon next to the battery icon like this: <img class="alignnone size-full wp-image-295" title="Bluetooth In Status Bar" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/Bluetooth-In-Status-Bar.png" alt="Bluetooth In Status Bar" width="41" height="17" />. It&#8217;s OK if it&#8217;s grey, but it must be there.<sup><small><a id="ref1" href="#1">[1]</a></small></sup></li>
<li><strong>Turn off WiFi.</strong> The WiFi and Bluetooth radios operate on the same frequency band and share an antenna. Turning off WiFi ensures that the maximum bandwidth is available to the Bluetooth connection.<sup><small><a id="ref2" href="#2">[2]</a></small></sup></li>
<li><strong>Be patient.</strong> The Bluetooth radio powers down if it has not been used for a while, and takes some time to start up. It can also take some time for two unpaired devices to synchronize and start to transfer data. Allow a minute or so before giving up on a connection. It&#8217;s often faster, but this is not something we have control over.</li>
<li id="idle_timeout"><strong><em>(Added 8/19/09) </em>If changing servers, be prepared to wait.</strong> Developers do not have direct control over the Bluetooth PAN. It is created automatically when a connection is made, and is torn down after it has been idle for some time. Unfortunately, each device can only have one outgoing (client mode) PAN active at a time. For PhotoBeamer, this means that if you are viewing photos from one friend, then try to disconnect and view another friend&#8217;s photos, it will take a long time for the second friend&#8217;s phone to show up. This can also happen when switching between different PAN apps.</li>
<li><strong>If all else fails, restart</strong> the app or even the device. Sometimes the resolver just stops seeing a particular device.<sup><small><a id="ref3" href="#3">[3]</a></small></sup> We expect this to improve with future iPhone OS updates as the technology matures.</li>
</ol>
<p>Networking is easy in a perfect environment. It&#8217;s hard in the real world (at the OS level at least, modern operating systems shield the developer from much of this), and it&#8217;s even harder when it&#8217;s a decentralized, low-power wireless network like Bluetooth. I spent years working on this sort of thing at a very low level in very demanding environments. I definitely feel for the Apple engineers trying to make this a smooth, painless user experience, but it&#8217;s not quite there yet. Until it is, I&#8217;ll continue to look for new ways to improve the experience within the confines of the iPhone SDK.</p>
<p>&#8212;</p>
<ol>
<li id="1">Apps that use the Apple-provided peer picker will offer to turn on Bluetooth for you. Apps such as PhotoBeamer which allow connections at any time or use a custom peer selection UI for another reason can warn you that Bluetooth is disabled but can not turn it on. You need to go to the Settings app and turn it on yourself. <small><a href="#ref1">[BACK]</a></small></li>
<li id="2">See, you have to go to the Settings App anyway! <small><a href="#ref2">[BACK]</a></small></li>
<li id="3"><em> (Added 8/19/09)</em> This is probably because of the limited number of outgoing PAN connections and <a href="#idle_timeout">idle timeout issue</a>. <small><a href="#ref3">[BACK]</a></small></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-07-22/gamekit-troubleshooting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhotoBeamer Coverage</title>
		<link>http://carpe-cocoa.com/2009-07-20/photobeamer-coverage/</link>
		<comments>http://carpe-cocoa.com/2009-07-20/photobeamer-coverage/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 16:26:29 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[appMobi]]></category>
		<category><![CDATA[BeamCatcher]]></category>
		<category><![CDATA[PhotoBeamer]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=284</guid>
		<description><![CDATA[Since PhotoBeamer went live, I&#8217;ve been watching the comments and reviews coming in and working on a number of updates and improvements. I&#8217;m just about ready to submit the 1.1 version to the App Store. The new version has a number of improvements I think you&#8217;ll like.
We&#8217;ve also sent out a number of promo codes [...]]]></description>
			<content:encoded><![CDATA[<p>Since PhotoBeamer went live, I&#8217;ve been watching the comments and reviews coming in and working on a number of updates and improvements. I&#8217;m just about ready to submit the 1.1 version to the App Store. The new version has a number of improvements I think you&#8217;ll like.</p>
<p>We&#8217;ve also sent out a number of promo codes to various review sites, so hopefully we&#8217;ll see some in-depth reviews soon. In the mean time, I found launch-day reviews from <a title="Today's Notable iPhone Apps - Monday July 13th Edition : iSmashPhone" href="http://www.ismashphone.com/2009/07/todays-notable-iphone-apps-monday-july-13th-edition.html" target="_blank">iSmashPhone</a> and <a title="Use PhotoBeamer To Send And Recieve Photos Over Bluetooth : App Advice" href="http://appadvice.com/appnn/2009/07/use-photobeamer-to-send-and-recieve-photos-over-bluetooth/" target="_blank">App Advice</a>. If you know of another site that&#8217;s reviewed PhotoBeamer and BeamCatcher, let me know!</p>
<p><strong>Update:</strong> PhotoBeamer was reviewed on <a title="Weird + Small Apps 22: Feed Me!, SNS Contact, PhotoBeamer, Ghostly Discovery + More : iLounge Article" href="http://www.ilounge.com/index.php/articles/comments/weird-small-apps-22-feed-me-sns-contact-photobeamer-ghostly-discovery-more/" target="_blank">iLounge</a> today. They rated it a B-, and said &#8220;A legitimately useful tool&#8221;.. &#8220;Apple should add more features like this but until it does, PhotoBeamer is a fine option&#8221;. They did seem to miss that BeamCatcher is available as a free viewer though. <em>(added July 22, 2009)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-07-20/photobeamer-coverage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhotoBeamer Available in the App Store</title>
		<link>http://carpe-cocoa.com/2009-07-14/photobeamer-available-in-the-app-store/</link>
		<comments>http://carpe-cocoa.com/2009-07-14/photobeamer-available-in-the-app-store/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 16:06:31 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[appMobi]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=242</guid>
		<description><![CDATA[A little over a month ago, the appMobi team was sitting outside around a table at our favorite bar/restaurant, enjoying the warm summer weather and a cold drink. We had just finished our last meeting before I headed off to WWDC, and we were sharing pictures on our iPhones by passing them around the table. [...]]]></description>
			<content:encoded><![CDATA[<p>A little over a month ago, the appMobi team was sitting outside around a table at our favorite bar/restaurant, enjoying the warm summer weather and a cold drink. We had just finished our last meeting before I headed off to WWDC, and we were sharing pictures on our iPhones by passing them around the table. That was when we realized &#8220;there should be an app for <em>this</em>!&#8221;</p>
<p>Sure, there are apps that let you upload images to Facebook, Flickr, and all sorts of other places&#8230;. Sure, you can email a picture, and with iPhone OS 3.0 coming soon even MMS one (assuming you&#8217;re not in the US and don&#8217;t care about quality). There are even apps that let you share photos on the spot, phone-to-phone, but only if you are all on the same WiFi network.</p>
<p>We knew that 3.0 would be out soon, possibly as soon as WWDC. We also knew that 3.0 had peer-to-peer Bluetooth networking support through the new GameKit framework. We decided this was a perfect opportunity to take advantage of the new OS.</p>
<p>I went home and got some sleep (long day and Crown don&#8217;t make for productive programming), then dived right into GameKit first thing in the morning. By lunch time I was able to share small images reliably, but clearly needed a lot of UI and networking polish. We knew we wouldn&#8217;t be the only ones with this idea, and that the quality of the app would be more important than being the first ones to market.</p>
<p>I spent the rest of the week polishing the prototype, and by the time I left for San Francisco had the core user interface pretty solid: translucent autohiding toolbars, a zooming and scrolling image view very much like the native Photos app, support for viewers coming and going mid-session, and more.</p>
<p>During the keynote at WWDC Apple announced that the 3.0 gold master was available immediately to developers. I updated from the Beta I was running and immediately found bugs in my apps. Not so much in PhotoBeamer, but in SpinSlide, which was already in the store with paying customers. I had to put PhotoBeamer aside and work on fixing the bugs in SpinSlide as quickly as possible, while attending 8+ hours of sessions and nearly as many parties through the week.</p>
<p>Once I got back from WWDC I was able to finish up the bug fixes and internationalization work on SpinSlide (now available in Spanish and Japanese!) and get back to work on PhotoBeamer. I updated the networking code to send arbitrary size images reliably, added a camera button to allow taking pictures right in the app, and continued with the visual polish, adding activity spinners and a status view with separate progress bars for each client and a multi-line status area to ensure the user has a chance to read messages as they come up. I created a free version called BeamCatcher and fought through some issues with my build scripts, and added the ability for the clients to save images to their Photo Album, but only if the sender allows.</p>
<p>A few beta test sessions using multiple devices at once uncovered some more bugs that were addressed, and the arrival of the 3GS showed some more room for improvement in both the networking and image display code, thanks to the larger images. Most importantly, I discovered how to detect when Bluetooth is not enabled without using the built-in peer picker controller, which doesn&#8217;t fit well with the PhotoBeamer app flow.</p>
<p>After all that, and an unusually long review at Apple (likely due to the massive influx of new and updated apps around 3.0), both <a title="See PhotoBeamer in the App Store" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=321814330&amp;mt=8" target="_blank">PhotoBeamer</a> and <a title="See BeamCatcher in the App Store" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=321815121&amp;mt=8" target="_blank">BeamCatcher</a> went live June 12th. Get PhotoBeamer to share your pictures. If your friends won&#8217;t spring for the full app, they can download BeamCatcher to view for free.</p>
<p><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Main.jpg" title="PhotoBeamer can send or receive images" rel="lightbox[242]"><img class="size-thumbnail wp-image-243 alignnone" title="PhotoBeamer can send or receive images" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Main-100x150.jpg" alt="PhotoBeamer Main" width="100" height="150" /></a><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Extra-1.jpg" title="Sender decides if clients can save the images" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-244" title="Sender decides if clients can save the images" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Extra-1-100x150.jpg" alt="Sender decides if clients can save the shared images" width="100" height="150" /></a><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Extra-2.jpg" title="Sender decides if client can connect" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-245" title="Sender decides if client can connect" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Extra-2-100x150.jpg" alt="Sender is prompted when a client tries to connect" width="100" height="150" /></a><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Extra-3.jpg" title="Progress is shown for each client" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-246" title="Progress is shown for each client" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Extra-3-100x150.jpg" alt="Progress is shown for each client" width="100" height="150" /></a><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Extra-4.jpg" title="View in portrait or landscape mode" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-247" title="View in portrait or landscape mode" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/PhotoBeamer-Extra-4-150x100.jpg" alt="View in portrait or landscape mode" width="150" height="100" /></a></p>
<p><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Main.jpg" title="BeamCatcher is receive-only" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-248" title="BeamCatcher is receive-only" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Main-100x150.jpg" alt="BeamCatcher is receive-only" width="100" height="150" /></a><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Extra-1.jpg" title="Looking for PhotoBeamers nearby" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-249" title="Looking for PhotoBeamers nearby" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Extra-1-100x150.jpg" alt="Looking for PhotoBeamers nearby" width="100" height="150" /></a><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Extra-2.jpg" title="BeamCatcher receiving the initial image" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-250" title="BeamCatcher receiving the initial image" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Extra-2-100x150.jpg" alt="BeamCatcher receiving the initial image" width="100" height="150" /></a><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Extra-3.jpg" title="Image received - save button is now active" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-251" title="Image received - save button is now active" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Extra-3-150x100.jpg" alt="Image received - save button is now active" width="150" height="100" /></a><a href="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Extra-4.jpg" title="After a few seconds the UI slides out allowing an unobstructed view" rel="lightbox[242]"><img class="alignnone size-thumbnail wp-image-252" title="After a few seconds the UI slides out allowing an unobstructed view" src="http://carpe-cocoa.com/wp-content/uploads/2009/07/BeamCatcher-Extra-4-150x100.jpg" alt="After a few seconds the UI slides out allowing an unobstructed view" width="150" height="100" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-07-14/photobeamer-available-in-the-app-store/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>What&#8217;s New in iPhone OS 3.0, A Developer&#8217;s Perspective</title>
		<link>http://carpe-cocoa.com/2009-06-19/whats-new-in-iphone-os-3-0-a-developers-perspective/</link>
		<comments>http://carpe-cocoa.com/2009-06-19/whats-new-in-iphone-os-3-0-a-developers-perspective/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 22:28:45 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone Development]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=231</guid>
		<description><![CDATA[WWDC 2009 ended a week ago, the new iPhone 3G S is out, and iPhone OS 3.0 has been available for a couple of days now, so I think it&#8217;s finally OK to talk publicly about the 3.0 SDK (after all, you can go get it from Apple for free now).
Last night I gave a [...]]]></description>
			<content:encoded><![CDATA[<p>WWDC 2009 ended a week ago, the new iPhone 3G S is out, and iPhone OS 3.0 has been available for a couple of days now, so I think it&#8217;s finally OK to talk publicly about the 3.0 SDK (after all, you can go get it from <a title="Apple iPhone Developer Portal" href="http://developer.apple.com/iphone" target="_blank">Apple</a> for free now).</p>
<p>Last night I gave a talk at the <a title="Philadelphia Area Mac and iPhone Programming Group" href="http://phillycocoa.org/" target="_blank">Philly CocoaHeads</a> meeting in an attempt to cover the 1000 or so new APIs in over a dozen functional areas in under an hour. I&#8217;m sharing the slides here for all, whether you were able to make it last night or not. We had some great discussions, which unfortunately are not in the slides, but hopefully these will help give you an idea of what is newly possible in iPhone OS, and where to look for more details.</p>
<p><a href="http://carpe-cocoa.com/wp-content/uploads/2009/06/CocoaHeads-June-2009.pptx">What&#8217;s New in iPhone OS 3.0, Philly CocoaHeads June 2009 (pptx, 552kB)</a></p>
<p><a href="http://carpe-cocoa.com/wp-content/uploads/2009/06/CocoaHeads-June-2009-Minimal.pdf">What&#8217;s New in iPhone OS 3.0, Philly CocoaHeads June 2009 (pdf, 366kB)</a></p>
<p>I&#8217;d love to hear your thoughts on the new APIs and how you plan to make use of them in your apps.</p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-06-19/whats-new-in-iphone-os-3-0-a-developers-perspective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://carpe-cocoa.com/2009-06-19/hidden-elephant-software-%c2%bb-targeting-iphone-2-x-on-snow-leopard-with-xcode-3-2/</link>
		<comments>http://carpe-cocoa.com/2009-06-19/hidden-elephant-software-%c2%bb-targeting-iphone-2-x-on-snow-leopard-with-xcode-3-2/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 18:46:28 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[iPhone Development]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=229</guid>
		<description><![CDATA[Serban Porumbescu, whom I met last week at WWDC, posted instructions for targeting iPhone OS 2.x from XCode 3.2.
There&#8217;s not much to add, so I&#8217;m just posting to add it to my Google-powered memory.
]]></description>
			<content:encoded><![CDATA[<p><a title="@serban on Twiter" href="http://twitter.com/serban" target="_blank">Serban Porumbescu</a>, whom I met last week at WWDC, posted instructions for <a title="Hidden Elephant Software - Targeting iPhone 2.x on Snow Leopard with Xcode 3.2" href="http://hiddenelephant.com/blog/2009/06/12/targeting-iphone-2x-on-snow-leopard-with-xcode-32/" target="_blank">targeting iPhone OS 2.x from XCode 3.2</a>.</p>
<p>There&#8217;s not much to add, so I&#8217;m just posting to add it to my Google-powered memory.</p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-06-19/hidden-elephant-software-%c2%bb-targeting-iphone-2-x-on-snow-leopard-with-xcode-3-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codebrain Blog &#124; A Day In The Life Of A Software Recruiter</title>
		<link>http://carpe-cocoa.com/2009-06-03/codebrain-blog-a-day-in-the-life-of-a-software-recruiter/</link>
		<comments>http://carpe-cocoa.com/2009-06-03/codebrain-blog-a-day-in-the-life-of-a-software-recruiter/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 01:42:15 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Musings]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=225</guid>
		<description><![CDATA[Stuart Cam provides a depressingly humorous (and accurate) view of software recruiters in Codebrain Blog &#124; A Day In The Life Of A Software Recruiter. I am regularly contact by recruiters looking for &#8220;.NET Specialists&#8221; (usually with 3-5 years experience) despite the fact that I&#8217;ve never touched .NET. I&#8217;ve been an embedded and systems developer [...]]]></description>
			<content:encoded><![CDATA[<p>Stuart Cam provides a depressingly humorous (and accurate) view of software recruiters in <a href="http://blog.codebrain.co.uk/post/2009/06/03/A-Day-In-The-Life-Of-A-Software-Recruiter.aspx">Codebrain Blog | A Day In The Life Of A Software Recruiter</a>. I am regularly contact by recruiters looking for &#8220;.NET Specialists&#8221; (usually with 3-5 years experience) despite the fact that I&#8217;ve <em>never touched</em> .NET. I&#8217;ve been an embedded and systems developer the entire time .NET has been in existence. I really can&#8217;t fathom what these people are thinking, they are either spamming everyone in their database, or they are getting a (poor) regex hit on the &#8220;.net&#8221; at the end of my email address.</p>
<p>In any case, I&#8217;ve yet to land a job through a recruiter, despite hours spent talking to them. I <em>have</em> occasionally had a recruiter describe an opportunity that I&#8217;d already heard about through networking, but that&#8217;s as far as it goes. The same holds true for most of the developers I know. The best positions are often not even advertised.</p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-06-03/codebrain-blog-a-day-in-the-life-of-a-software-recruiter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SpinSlide is Live!</title>
		<link>http://carpe-cocoa.com/2009-05-28/spinslide-is-live/</link>
		<comments>http://carpe-cocoa.com/2009-05-28/spinslide-is-live/#comments</comments>
		<pubDate>Fri, 29 May 2009 01:26:40 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[appMobi]]></category>

		<guid isPermaLink="false">http://carpe-cocoa.com/?p=221</guid>
		<description><![CDATA[SpinSlide is now live! The best damn slide tile puzzle ever!
Watch a video demo, read my previous post about it, or just go buy it!

]]></description>
			<content:encoded><![CDATA[<p><a title="SpinSlide on the AppStore" href="itms://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=317323388&amp;mt=8&amp;s=143441" target="_blank">SpinSlide</a> is now live! The best damn slide tile puzzle ever!</p>
<p>Watch a <a title="SpinSlide Demo Video" href="http://www.youtube.com/watch?v=DdxUK9O88FE" target="_blank">video demo</a>, read my <a title="First App Submission" href="http://carpe-cocoa.com/2009-05-20/first-app-submission/" target="_self">previous post</a> about it, or just <a title="SpinSlide on the AppStore" href="itms://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=317323388&amp;mt=8&amp;s=143441" target="_blank">go buy it!</a></p>
<p><object width="480" height="385" data="http://www.youtube-nocookie.com/v/DdxUK9O88FE&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x5d1719&amp;color2=0xcd311b" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube-nocookie.com/v/DdxUK9O88FE&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x5d1719&amp;color2=0xcd311b" /><param name="allowfullscreen" value="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://carpe-cocoa.com/2009-05-28/spinslide-is-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

