<?xml version="1.0" encoding="UTF-8"?>
<rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>iamthewalr.us</title>
	
	<link>http://iamthewalr.us/blog</link>
	<description>by Colin Barrett</description>
	<lastBuildDate>Thu, 06 Oct 2011 15:56:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Iamthewalrus" /><feedburner:info uri="iamthewalrus" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Goodbye, Steve</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/pTdXF3mZKFI/</link>
		<comments>http://iamthewalr.us/blog/2011/10/goodbye-steve/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 00:11:26 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=456</guid>
		<description><![CDATA[I would not be here today, doing what I do, if not for Steve Jobs. Considering I never met the man, he had an incredible impact on my career, my outlook on life, and my definition of success. Goodbye, Steve. Rest easy. See also, Remembering Steve Jobs on Nullary Sources.]]></description>
			<content:encoded><![CDATA[<p>I would not be here today, doing what I do, if not for Steve Jobs. Considering I never met the man, he had an incredible impact on my career, my outlook on life, and my definition of success.</p>

<p>Goodbye, Steve. Rest easy.</p>

<p><em>See also, <a href="http://nullarysources.tumblr.com/tagged/RIP_Steve_Jobs">Remembering Steve Jobs on Nullary Sources.</a></em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=pTdXF3mZKFI:_h7hYexOSGg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=pTdXF3mZKFI:_h7hYexOSGg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/pTdXF3mZKFI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/10/goodbye-steve/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/10/goodbye-steve/</feedburner:origLink></item>
		<item>
		<title>Busy</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/YQ2MLim6GZE/</link>
		<comments>http://iamthewalr.us/blog/2011/09/busy/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 22:59:41 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=450</guid>
		<description><![CDATA[I&#8217;ve been busy &#8212; really busy. Much of that energy obviously has been going in to running Springs &#38; Struts, my Mac and iOS consulting business. I&#8217;ve been using the Springs &#38; Struts name for over two and a half years now and 2011 has been our best year yet. I&#8217;ve shipped several apps for [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been busy &#8212; really busy.</p>

<p>Much of that energy obviously has been going in to running <a href="http://springsandstruts.com">Springs &amp; Struts</a>, my Mac and iOS consulting business. I&#8217;ve been using the Springs &amp; Struts name for over two and a half years now and 2011 has been our best year yet. I&#8217;ve shipped several apps for happy clients already this year. I&#8217;ve also begun to experiment with using subcontractors (and being a subcontractor myself), an effort which has been quite successful. In fact, I no longer think of Springs &amp; Struts as just another name for myself &#8212; instead, it has become its own thing. I couldn&#8217;t be happier.</p>

<p>I&#8217;ve also been on a few podcasts. I recently made an appearance on my friend Kanen Flowers&#8217;s new podcast, <a href="http://scruffythinking.com/scruffy/">Scruffy Thinking</a>. I was on the episode <a href="http://scruffythinking.com/scruffy/2011/7/27/i-do-all-my-writing-in-latex.html">&#8220;I Do All My Writing in Latex&#8221;</a> with Kanen, Ron Brinkmann and Merlin Mann (holy shit) talking about Markdown and text documents and text editors and things like that. I think I did a pretty good job of pretending to sound intelligent. Additionally, some clips that were cut from that episode (and other Scruffy Thinking episodes) ended up on <a href="http://scruffythinking.com/scruffy/2011/8/3/the-real-cbarrett.html">&#8220;The Real @cbarrett&#8221;</a> &#8212; including the Dirk Gently–esque story of how Kanen and I met.</p>

<p>You can also hear me on the teasers for the upcoming <a href="http://soundcloud.com/postmodem">Postmodem podcast</a>, with my friends Phillip Bowden and Patrick Thomson. It&#8217;s a little more free form than Scruffy Thinking, but we discuss things of general interest to nerds &#8212; movies, comics, music, tech, and so on. So far we&#8217;ve only released <a href="http://soundcloud.com/postmodem">a couple of lower quality clips</a> to whet the appetite, but we have a few full episodes in the can waiting on editing. Eventually they&#8217;ll see release, and we&#8217;re already planning to record more.</p>

<p>Also worth noting is that <a href="http://nullarysources.tumblr.com/">Nullary Sources</a>, the link blog I co-host with &#8216;Ili Butterfield, is still going strong. We&#8217;ve been posting a lot of great content that&#8217;s tough to sum up in one go &#8212; instead I recommend just going and checking it out.</p>

<p>And of course I&#8217;m on the usual cadre of social networks. I recommend my venerable <a href="https://twitter.com/#!/cbarrett">Twitter account</a> as well as my <a href="http://www.quora.com/Colin-Barrett">activity on Quora</a> &#8212; a relatively new Q&amp;A service that I&#8217;ve really been enjoying lately. I&#8217;ve written over 300 answers about a wide variety of subjects.</p>

<p>All of this is my very roundabout way of saying that while I haven&#8217;t necessarily been writing as much here as I&#8217;d like to, I&#8217;ve been putting content out there if you know where to find it.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=YQ2MLim6GZE:BxwD3w7j1-E:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=YQ2MLim6GZE:BxwD3w7j1-E:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/YQ2MLim6GZE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/09/busy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/09/busy/</feedburner:origLink></item>
		<item>
		<title>Staying away from Android</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/fr2U0VcLF4s/</link>
		<comments>http://iamthewalr.us/blog/2011/09/staying-away-from-android/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 20:27:14 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=444</guid>
		<description><![CDATA[As if there wasn&#8217;t already reason enough, Florian Mueller on FOSS Patents drops a bombshell. Maybe the bombshell. It&#8217;s all there &#8212; all your worst fears about Android, confirmed by filings for Oracle v. Google. The twofacedness about &#8220;open&#8221;. Giving preferential treatment to specific OEMs (specifically Motorola). And this, which I already understood implicitly but [...]]]></description>
			<content:encoded><![CDATA[<p>As if there wasn&#8217;t already <a href="http://www.quora.com/Android-OS/Why-do-app-developers-often-neglect-Android-and-write-exclusively-for-iOS">reason enough</a>, Florian Mueller on FOSS Patents <a href="http://fosspatents.blogspot.com/2011/09/shocker-for-android-oems-google.html">drops a bombshell</a>. Maybe <em>the</em> bombshell.</p>

<p>It&#8217;s all there &#8212; all your worst fears about Android, confirmed by filings for Oracle v. Google. The twofacedness about &#8220;open&#8221;. Giving preferential treatment to specific OEMs (specifically Motorola).</p>

<p>And this, which I already understood implicitly but it&#8217;s still sickening to see it spelled out like this, from a 2009 document entitled &#8220;Android Strategy and Partnerships Overview&#8221;:</p>

<blockquote>
  <p>&#8220;Android isn&#8217;t a new product to monetize; it&#8217;s a new medium to drive monetization on existing products.&#8221;</p>
</blockquote>

<p>Combined, it&#8217;s all enough to make me physically ill. I&#8217;m staying out of this mess. There&#8217;s no way something this gross can be sustainable. And if it somehow does succeed &#8212; if Google&#8217;s story plays out the same way as Microsoft&#8217;s did (which is what all of this really reminds me of) &#8212; count me out anyway.</p>

<p><em>Also posted <a href="http://www.quora.com/Colin-Barrett/Staying-away-from-Android">on Quora</a>.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=fr2U0VcLF4s:p2yu3yug_jY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=fr2U0VcLF4s:p2yu3yug_jY:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/fr2U0VcLF4s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/09/staying-away-from-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/09/staying-away-from-android/</feedburner:origLink></item>
		<item>
		<title>Why GNU grep is fast</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/GYoALWqO_qY/</link>
		<comments>http://iamthewalr.us/blog/2011/08/why-gnu-grep-is-fast/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 19:27:03 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=397</guid>
		<description><![CDATA[Mike Haertel, original author of GNU grep: &#35;1 trick: GNU grep is fast because it AVOIDS LOOKING AT EVERY INPUT BYTE. &#35;2 trick: GNU grep is fast because it EXECUTES VERY FEW INSTRUCTIONS FOR EACH BYTE that it &#42;does&#42; look at. Fantastic knowledge dump. I wasn&#8217;t aware of the Boyer-Moore algorithm that GNU grep uses, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html">Mike Haertel, original author of GNU grep</a>:</p>

<blockquote>
  <p>&#35;1 trick: GNU grep is fast because it AVOIDS LOOKING AT
  EVERY INPUT BYTE.</p>
  
  <p>&#35;2 trick: GNU grep is fast because it EXECUTES VERY FEW
  INSTRUCTIONS FOR EACH BYTE that it &#42;does&#42; look at.</p>
</blockquote>

<p>Fantastic knowledge dump. I wasn&#8217;t aware of the <a href="http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm">Boyer-Moore algorithm</a> that GNU grep uses, but it&#8217;s definitely being filed away for future use.</p>

<p>Reminds me of <a href="http://ridiculousfish.com/blog/archives/2006/05/30/old-age-and-treachery/">this post by Peter Ammon</a>, about optimizing searching in <a href="http://ridiculousfish.com/hexfiend/">Hex Fiend</a>, which is also worth reading.</p>

<p>(Via <a href="https://twitter.com/anantn/status/100641533258235904">Anant Narayanan</a>.)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=GYoALWqO_qY:uIOfsIRh5n8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=GYoALWqO_qY:uIOfsIRh5n8:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/GYoALWqO_qY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/08/why-gnu-grep-is-fast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/08/why-gnu-grep-is-fast/</feedburner:origLink></item>
		<item>
		<title>NSFetchedResultsController silently ignores changes</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/eYGpd4IKGIg/</link>
		<comments>http://iamthewalr.us/blog/2011/07/nsfetchedresultscontroller/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 17:00:48 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=409</guid>
		<description><![CDATA[Say you&#8217;ve got an NSFetchedResultsController with a predicate like project.enabled == YES. (Imagine this app shows a list of to-do items, organized into projects.) Now say you enable (or disable) a project. What will NSFetchedResultsController do? I assumed that it would fire insert or delete events for items coming in or out of the set [...]]]></description>
			<content:encoded><![CDATA[<p>Say you&#8217;ve got an <code>NSFetchedResultsController</code> with a predicate like <code>project.enabled == YES</code>. (Imagine this app shows a list of to-do items, organized into projects.) Now say you enable (or disable) a project. What will <code>NSFetchedResultsController</code> do?</p>

<p>I assumed that it would fire insert or delete events for items coming in or out of the set of items that matched the predicate. What actually happens is that <code>NSFetchedResultsController</code> does not pick up these changes.</p>

<p>Perhaps a simpler way of stating it is that <code>NSFetchedResultsController</code> does not seem to track changes when the predicate contains a key path that drills down into a relationship.</p>

<h3>Workaround</h3>

<p>You can force <code>NSFetchedResultsController</code> to pick up the changes, but it&#8217;s a bit ugly. Here&#8217;s an example:</p>

<pre><code>[project setValue:[NSNumber numberWithBool:YES] forKey:@"enabled"];

for (NSManagedObject *todo in [project valueForKey:@"todos"]) {     
    [todo willChangeValueForKey:@"project"];
    [todo didChangeValueForKey:@"project"];
}
</code></pre>

<p>Posting these &#8220;empty&#8221; KVO notifications appears to fix the problem.</p>

<h3>Radar and sample project</h3>

<p>I&#8217;ve filed this as <a href="rdar://problem/9790804">radar 9790804</a>. Muchos gracias to <a href="http://porn.quiteajolt.com">&#8216;Ili Butterfield</a> for whipping up <a href="http://iamthewalr.us/blog/wp-content/uploads/2011/07/cascade.zip">a sample project demonstrating this bug</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=eYGpd4IKGIg:K0sUEu-ALAU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=eYGpd4IKGIg:K0sUEu-ALAU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/eYGpd4IKGIg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/07/nsfetchedresultscontroller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/07/nsfetchedresultscontroller/</feedburner:origLink></item>
		<item>
		<title>Technological Dinosaur</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/cHD4hf4L5ho/</link>
		<comments>http://iamthewalr.us/blog/2011/07/technological-dinosaur/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 20:40:26 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=398</guid>
		<description><![CDATA[Matt Haughey, the creator of MetaFilter, recently sat down with the Willamette Week for an interview. Most of the interview is about MetaFilter and is quite good, but this part caught my eye: Geeks who know how to program and make things should be able to make a small thing that runs forever and make [...]]]></description>
			<content:encoded><![CDATA[<p>Matt Haughey, the creator of MetaFilter, <a href="http://www.wweek.com/portland/article-17721-the_blogfather.html">recently sat down with the Willamette Week for an interview</a>. Most of the interview is about MetaFilter and is quite good, but this part caught my eye:</p>

<blockquote>
  <p>Geeks who know how to program and make things should be able to make a small thing that runs forever and make $100,000 a year and live off that. I mean, what is wrong with that? It’s an awesome goal.</p>
  
  <p>I never got that message anywhere in the tech community. Like, what is wrong with making a decent living in doing something you love forever? And then people put that down as a &#8220;lifestyle business.&#8221; Or ask, &#8220;How are you going to change the world or make the next Facebook?&#8221;</p>
  
  <p>It’s like nobody sings unless they want to be Britney Spears. That’s stupid—we should all sing in bars three nights a week if we like it and get paid as professional musicians. Who says you have to be a superstar? I hate the whole &#8220;rock-star programmer&#8221; thing where you have to make the next Facebook.</p>
</blockquote>

<p>I couldn&#8217;t agree more. Quitting my job was easily the best decision I ever made, despite the hardships.</p>

<p>As Matt touches on, in large parts of the tech community, independent life is not even really considered as a path to success &#8212; it&#8217;s seen as dilettantey and unserious. This has always sat really wrong with me: my heroes were people like Brent Simmons and Gus Mueller and Wil Shipley. These guys were out there and selling Mac software simply because it made them happy.</p>

<p>I guess that attitude is somewhat anachronistic; the wider tech industry has celebrated the easy money, get rich quick, dot com lifestyle for some time now.</p>

<p>I&#8217;m going to continue to do what makes me happy, though. Why would I do anything else?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=cHD4hf4L5ho:1QNAW5y315I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=cHD4hf4L5ho:1QNAW5y315I:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/cHD4hf4L5ho" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/07/technological-dinosaur/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/07/technological-dinosaur/</feedburner:origLink></item>
		<item>
		<title>My Xcode 4 blocker of the moment</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/t_bmcgUkG70/</link>
		<comments>http://iamthewalr.us/blog/2011/07/my-xcode-4-blocker-of-the-moment/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 03:23:04 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=388</guid>
		<description><![CDATA[My current set up in Xcode 3 runs something like this: For day to day development, I use the Debug configuration. Pretty standard. No real correlation between running the product on the device and simulator. When I want to do &#8212; or simply try out &#8212; a Release style build, I switch to the release [...]]]></description>
			<content:encoded><![CDATA[<p>My current set up in Xcode 3 runs something like this:</p>

<ul>
<li>For day to day development, I use the Debug configuration. Pretty standard. No real correlation between running the product on the device and simulator.</li>
<li>When I want to do &#8212; or simply try out &#8212; a Release style build, I switch to the release configuration. I do this from time to time just as a sanity check. 99% of the time I use Release, it&#8217;s on the device.</li>
<li>Even more rarely &#8212; once a week at the maximum &#8212; I need to do a release. In my case, these releases are usually milestone builds for clients, just to show how the application is progressing.</li>
</ul>

<p>Even still, I have a couple of requirements about these release builds:</p>

<p>Firstly, I need to be able to run and test the <em>exact build</em> I&#8217;m going to send to a client. Seems foolish to do anything else.</p>

<p>Also, I have a somewhat complicated, but I don&#8217;t think unreasonable release process. It goes something like this: After running and doing a final smoke test on the release build, I run a script I&#8217;ve developed. This script:</p>

<ol>
<li>Copies the dSYM from build/Release to dSYMs/</li>
<li>Commits</li>
<li>Adds a tag for the current version (based on the CFBundleVersion)</li>
<li>Bumps the CFBundleVersion</li>
<li>Commits</li>
<li>Runs the PackageApplication script included with Xcode to create a .ipa file from the .app in build/Release</li>
<li>Opens a Mail message with that .ipa file attached</li>
</ol>

<p>It also has support for parsing &amp; incrementing the CFBundleShortVersionString key and a couple other things.</p>

<p>So to be clear, I&#8217;m backing up the dSYMs for each release in source control and trusting my email provider to host the builds of old versions of the applications (only reason I&#8217;ve found to need those EXACT old versions is to re-sign them).</p>

<p>Also note that this script isn&#8217;t run from Xcode, and in fact it wouldn&#8217;t be a good idea to do that. (I&#8217;m working on a version that has interactive capabilities to prompt the user if it notices odd things, like if the build it finds is older than a certain threshold or signed in a way that&#8217;s probably wrong.)</p>

<p>I think these are all pretty reasonable requirements. It&#8217;s certainly not the most Xcode-y way of going about doing this, but it makes sense to me and I think is at least somewhat internally consistent.</p>

<h3>Where Xcode 4 falls down</h3>

<p>Firstly, the new default location for built products &#8212; which is in <code>~/Library/Developer/Xcode/DerivedData/$AppName-$RandomSeriesOfDigits</code><sup id="fnref:long"><a href="#fn:long" rel="footnote">1</a></sup> and seems to have been chosen so schemes and workspaces don&#8217;t step on each other (totally reasonable) &#8212; totally breaks my script. I&#8217;m totally not against having to add more options to my script (plus some sensible defaults) for specifying which scheme or workspace or whatever is wanted, and then having my script look up the location for that scheme. But there doesn&#8217;t seem to be any way to do that.</p>

<p>(Moving my built products back into SRCROOT seems like it&#8217;s begging for disaster further down the road, and I&#8217;m really hesistant to do this.)</p>

<p>I also find the combination of schemes &amp; actions totally unnecessary. I don&#8217;t understand what problem they&#8217;re trying to solve. I&#8217;ve never found configurations, especially with .xcconfig files, to be inadequate.</p>

<p>The default actions are both too limiting &#8212; in my workflow there are multiple types of &#8220;Archiving&#8221; (more on that word later) &#8212; and also way too broad &#8212; testing and analyzing and running are all totally overlapping for me. I also can&#8217;t imagine a workflow where I&#8217;d want to configure more than one of the actions for a particular scheme &#8212; that seems like something you&#8217;d want in a target. Maybe I&#8217;m missing something.</p>

<h3>Aside: Core Data</h3>

<p>One problem not mentioned above is Xcode 4&#8217;s handling of Core Data. All of the below applies to the only released version, 4.0.2.</p>

<ul>
<li>You cannot change the model version identifier. rdar://problem/9592700 which is duped to rdar://problem/9006105 (which I see as open).</li>
<li>When you create a new model version, what you enter for the model&#8217;s name in the into the wizard doesn&#8217;t stick. I.e. &#8220;MyApp (5) 2&#8221; is the default and no matter how many times I tried to change it to &#8220;MyApp (6)&#8221;, the resulting file would be created as &#8220;MyApp (5) 2&#8221;. Infuriating.</li>
</ul>

<h3>Returning to the main thrust of the post, about Xcode 4&#8217;s failings</h3>

<p>Because of the above problems with Core Data, I still need to use Xcode 3 somewhat frequently &#8212; at the very least to deal with Core Data model files. It&#8217;s really unclear to me what exactly is going to propagate back from Xcode 4 in terms of schemes, actions, etc. Not creating an addition scheme seems to not break things for me, but I have not played with this out of fear of breaking it.</p>

<p>Finally, I&#8217;d like to address &#8220;archiving&#8221;. The standard archive action frankly blows for one big reason: I have multiple machines. It&#8217;s largely worthless to have half the dSYMs on one machine, half on the other. Moving the dSYMs into source control and keeping the .ipas in email is a pretty good solution and works well. Having to dick around in the Organizer is so annoying. (The Organizer itself seems to be a random collection of functionality the designers that weren&#8217;t iTunesy enough to fit in the main UI.)</p>

<p><strong>This situation honestly sucks, and I see no way to use Xcode 4 for releasing software (especially when it involves Core Data) &#8212; for the foreseeable future I&#8217;ll continue to use Xcode 3 for doing so.</strong></p>

<p>(One last thing: Xcode 4 is a total boor on a 13&#8221; screen. It&#8217;s nearly impossible for me to use comfortably. (If you tell me my font&#8217;s too big I will hurt you.))</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:long">
<p>An example of this is: <code>/Users/cbarrett/Library/Developer/Xcode/DerivedData/test-ghxwstqpgxzcuufqwfomddrxbuzo/Build/Products/Debug-iphonesimulator/test.app.dSYM</code>&#160;<a href="#fnref:long" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=t_bmcgUkG70:7NZ1NKi_DAw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=t_bmcgUkG70:7NZ1NKi_DAw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/t_bmcgUkG70" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/07/my-xcode-4-blocker-of-the-moment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/07/my-xcode-4-blocker-of-the-moment/</feedburner:origLink></item>
		<item>
		<title>Introducing Nullary Sources</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/b6Fq4gCT6ro/</link>
		<comments>http://iamthewalr.us/blog/2011/04/introducing-nullary-sources/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 21:04:43 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=385</guid>
		<description><![CDATA[For a quite a while now, my friend &#8216;Ili Butterfield and I have been talking about starting a linkblog. Much to the surprise of both of us, however, it actually happened. We call it Nullary Sources. (Be glad we didn&#8217;t use the original name, which was an awful takeoff on &#8220;Daring Fireball&#8221;). While Nullary Sources [...]]]></description>
			<content:encoded><![CDATA[<p>For a quite a while now, <a href="http://porn.quiteajolt.com">my friend &#8216;Ili Butterfield</a> and I have been talking about starting a linkblog. Much to the surprise of both of us, however, <a href="http://nullarysources.tumblr.com">it actually happened</a>.</p>

<p><strong>We call it <a href="http://nullarysources.tumblr.com">Nullary Sources</a></strong>. (Be glad we didn&#8217;t use the original name, which was an awful takeoff on &#8220;Daring Fireball&#8221;).</p>

<p>While Nullary Sources has no set theme, <a href="http://porn.quiteajolt.com/2011/04/08/nullary-sources/">as &#8216;Ili mentioned when he introduced it last week</a>, so far we&#8217;ve put together pleasing mix of current events, video game music and baseball &#8212; pretty different from this site I would say.</p>

<p>The site is still young and we&#8217;re still exploring the format, but we haven&#8217;t really done anything like what I&#8217;ve been posting here, so I&#8217;m hoping to have plenty of juice to continue writing about technology and small business in this space. (Programming note: I&#8217;ve been intentionally keeping it quiet here the past week to give Nullary Sources a chance to stand up on its own. I&#8217;m pleased with how it&#8217;s gone so far.)</p>

<p>But who knows. Like most things on the internet, it&#8217;s pretty ephemeral &#8212; we&#8217;ve signed no contracts and have made no outside commitments. But at the same time I&#8217;m pretty fired up about it. I don&#8217;t think there&#8217;s anything else quite like it out there, and people seem to really like it so far.</p>

<p>Anyway, I hope you folks enjoy it. Here are a couple posts to give you a flavor for what we&#8217;ve published so far.</p>

<ul>
<li>A post by &#8216;Ili <a href="http://nullarysources.tumblr.com/post/4536718347/more-diddy-kong-racing-music-its-always-time-for">about one of the tracks on the <em>Diddy Kong Racing</em> soundtrack</a>.</li>
<li>A post by me <a href="http://nullarysources.tumblr.com/post/4368943188/wu-tang-clans-bring-da-ruckus-1993-video-is">about Wu-Tang Clan&#8217;s <em>Enter the Wu-Tang (36 Chambers)</em></a>.</li>
<li>A post with contributions from the both of us <a href="http://nullarysources.tumblr.com/post/4272206723/the-highest-salaried-player-on-every-mlb-team">about the highest-salaried player on every MLB team</a>.</li>
<li>One of the earliest posts, entitled <a href="http://nullarysources.tumblr.com/post/4229773673/a-picture-of-samuel-johnson-glaring">&#8220;A Picture of Samuel Johnson Glaring&#8221;</a>. Probably my favorite thing on the site so far.</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=b6Fq4gCT6ro:dRUG69mHU0Y:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=b6Fq4gCT6ro:dRUG69mHU0Y:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/b6Fq4gCT6ro" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/04/introducing-nullary-sources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/04/introducing-nullary-sources/</feedburner:origLink></item>
		<item>
		<title>On a Theoretical “HgHub” (and Why Cloning Is a Bad Idea)</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/f5QIkU4Jz-A/</link>
		<comments>http://iamthewalr.us/blog/2011/04/on-a-theoretical-hghub/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 19:08:39 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=373</guid>
		<description><![CDATA[&#8220;If Mercurial is so awesome, why doesn&#8217;t someone make HgHub?&#8221; If your company&#8217;s mission statement is &#8220;like X but for Y&#8221; you&#8217;re in trouble. There&#8217;s nothing in there that will inform the thousands of decisions you&#8217;ll make about your product in the future. You&#8217;ll be simply copying X over and over again &#8212; forever a [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;If Mercurial is so awesome, why doesn&#8217;t someone make HgHub?&#8221;</p>

<p>If your company&#8217;s mission statement is &#8220;like X but for Y&#8221; you&#8217;re in trouble. There&#8217;s nothing in there that will inform the thousands of decisions you&#8217;ll make about your product in the future. You&#8217;ll be simply copying X over and over again &#8212; forever a clone.<sup id="fnref:more"><a href="#fn:more" rel="footnote">1</a></sup></p>

<p>Truth be told, Git is probably the least interesting part of GitHub. In fact, GitHub will <a href="https://twitter.com/danielpunkass/status/57144707146457088">probably still be around</a> when the next generation version control systems appear, and GitHub&#8217;s mission &#8212; embodied in statements like &#8220;GitHub is the best way to collaborate with others&#8221; and &#8220;GitHub: Social Coding&#8221; &#8212; will lead them smoothly into the future.</p>

<p>My advice to someone interested in creating another Mercurial-based tool for code hosting<sup id="fnref:e"><a href="#fn:e" rel="footnote">2</a></sup> would be to examine GitHub&#8217;s features and see what you think you could do better. What gaps are there in GitHub&#8217;s offerings? What class of users are served poorly by GitHub?<sup id="fnref:pr"><a href="#fn:pr" rel="footnote">3</a></sup> How can you reduce the costs of switching to your service? Are those people going to be willing to pay you money? If you can answer these questions &#8212; and decide to use Mercurial for the basis for your system &#8212; you&#8217;ll be well on your way to developing a serious GitHub competitor.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:more">
<p>However, &#8220;like X for Y&#8221; <em>is</em> a reasonable place to start brainstorming &#8212; it can help you to identify Ys that are underserved by X &#8212; but it&#8217;s often not enough to support an entire product.&#160;<a href="#fnref:more" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:e">
<p>Besides <a href="https://bitbucket.org/">BitBucket</a>, <a href="http://code.google.com/p/support/wiki/GettingStarted">Google Code</a>, and even the lowly <a href="http://mercurial.selenic.com/wiki/PublishingRepositories">hgweb</a>.&#160;<a href="#fnref:e" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:pr">
<p>My own personal sore spot with GitHub is its pricing structure. As a software consultant, I have a ton of repositories that need to be private but many of which I won&#8217;t come back to for ages, if ever. GitHub&#8217;s pricing structure, where the more private repositories you have the more you pay, isn&#8217;t a good value for me.&#160;<a href="#fnref:pr" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=f5QIkU4Jz-A:dHNaPwqzreg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=f5QIkU4Jz-A:dHNaPwqzreg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/f5QIkU4Jz-A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/04/on-a-theoretical-hghub/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/04/on-a-theoretical-hghub/</feedburner:origLink></item>
		<item>
		<title>What Is a Convenience Constructor?</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/f1pQpienRSY/</link>
		<comments>http://iamthewalr.us/blog/2011/04/what-is-a-convenience-constructor/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 23:52:41 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=365</guid>
		<description><![CDATA[Short answer: A convenience constructor is one that performs object allocation &#38; initialization in one step &#38; returns an autoreleased object to the caller. Long answer: In Cocoa, object allocation and initialization are separate steps. Take this code for example: NSString *string = [[[NSString alloc] init] autorelease]; NSString *string2 = [NSString string]; The second line [...]]]></description>
			<content:encoded><![CDATA[<p>Short answer: A convenience constructor is one that performs object allocation &amp; initialization in one step &amp; returns an autoreleased object to the caller.</p>

<p>Long answer: In Cocoa, object allocation and initialization are separate steps. Take this code for example:</p>

<pre><code>NSString *string = [[[NSString alloc] init] autorelease];
NSString *string2 = [NSString string];
</code></pre>

<p>The second line uses a convenience constructor, but they are equivalent. Here&#8217;s a breakdown:</p>

<pre><code>[NSString alloc]
</code></pre>

<p>allocates the correct amount of memory (depending on the number of instance variables and other runtime-need storage) on the heap for an object of the NSString class and returns a pointer to it. (Think of this as a malloc and a bzero, conceptually.)</p>

<pre><code>[... init]
</code></pre>

<p>initializes the above object. This is where your code runs to set up the object and get it into whatever initial state it needs to be in.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>

<pre><code>[... autorelease]
</code></pre>

<p>autoreleases the object. This is critical in Cocoa &#8212; memory management patterns dictate that callers should return autoreleased objects if they no longer need to hold a reference to them. A Cocoa programer will expect a method like <code>+string</code> to return an autoreleased object (how autorelease works is a bit out of scope).<sup id="fnref:narc"><a href="#fn:narc" rel="footnote">2</a></sup></p>

<p>Why would you want this? It&#8217;s significantly simpler. to write, especially if you&#8217;re passing the object to another method and never actually holding a reference to it yourself.</p>

<p><em>I originally <a href="http://www.quora.com/What-is-convenience-constructor/answer/Colin-Barrett">wrote this on Quora</a>, and have lightly edited it to fit this space.</em></p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>This would be a good time to mention designated initializers. A full explanation is out of scope, but the designated initializer is the initializer that all other initializers for your class are supposed to call, to make it easier for subclassers &#8212; so they don&#8217;t have to implement a ton of <code>initBlahBlah</code> functions. By loose convention, the designated initializer is the one with the most parameters.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:narc">
<p>Cocoa programmers expect the returned object to be autoreleased because of the NARC rule &#8212; code only obtain an owning reference only if it sends new, alloc, retain or copy (or mutableCopy) to the object itself, otherwise the object should be autoreleased. For more information, <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1">see the memory management guide</a>.&#160;<a href="#fnref:narc" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=f1pQpienRSY:9szygXhaMwg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=f1pQpienRSY:9szygXhaMwg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/f1pQpienRSY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2011/04/what-is-a-convenience-constructor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2011/04/what-is-a-convenience-constructor/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.937 seconds --><!-- Cached page served by WP-Cache -->

