<?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>Red Sweater Blog &#187; Macintosh</title>
	<atom:link href="http://www.red-sweater.com/blog/category/macintosh/feed" rel="self" type="application/rss+xml" />
	<link>http://www.red-sweater.com/blog</link>
	<description>Mac &#38; Technology Writings by Daniel Jalkut</description>
	<lastBuildDate>Tue, 17 Jan 2012 22:03:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Lion&#8217;s Whole-Disk Encryption</title>
		<link>http://www.red-sweater.com/blog/1935/lions-whole-disk-encryption</link>
		<comments>http://www.red-sweater.com/blog/1935/lions-whole-disk-encryption#comments</comments>
		<pubDate>Wed, 20 Jul 2011 15:36:37 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Lion]]></category>
		<category><![CDATA[Macintosh]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=1935</guid>
		<description><![CDATA[One of my favorite new features in Lion is a completely revamped &#8220;FileVault&#8221;, Apple&#8217;s brand-name for encryption techonologies that protect the data on your disk from eavesdroppers, should the disk be lost or stolen. In Mac OS X 10.6 and earlier, FileVault was a feature that only affected your home directory. In OS X Lion, [...]]]></description>
			<content:encoded><![CDATA[<p>One of my favorite new features in Lion is a completely revamped &#8220;FileVault&#8221;, Apple&#8217;s brand-name for encryption techonologies that protect the data on your disk from eavesdroppers, should the disk be lost or stolen.</p>
<p><img title="Security &amp; Privacy.png" src="http://www.red-sweater.com/blog/wp-content/downloads/2011/07/Security-Privacy.png" border="0" alt="Security  Privacy" width="450" height="85" /></p>
<p>In Mac OS X 10.6 and earlier, FileVault was a feature that only affected your home directory. In OS X Lion, it applies encryption at a very low-level, encrypting an entire volume of your disk at a time, and keeping it encrypted as you use it.</p>
<p>I was able to enable FileVault for my boot volume with relative ease, using the <strong>Security &amp; Privacy </strong>preference pane in System Preferences. However, the UI for this is pretty limited, and notably, it only allows you to protect the computer&#8217;s startup disk.</p>
<p>The way I have my Mac configured, most of my sensitive data is not on the startup volume, but is instead on a second partition called &#8220;Data&#8221; where I keep my home directory, media files, etc.  Apple&#8217;s Disk Utility allows you to erase and reformat a volume as encrypted from scratch, but what if you want to migrate a volume in-place, the way the system does the boot volume? You&#8217;re not completely out of luck.</p>
<p>OS X Lion ships with a low-level technology called &#8220;core storage,&#8221; which is used to facilitate a wide variety of disk-maintenance functionality, including whole-disk encryption. To get a quick look at what core storage supports, type &#8220;diskutil cs&#8221; at the Terminal command line. For a more in-depth look, type &#8220;man diskutil&#8221; and search for the core storage command documentation.</p>
<p><strong>Important:</strong> This is the part of the blog article where I warn you to be very careful before proceeding. The diskutil command is capable of doing incredibly destructive things to your disk and to your data, so you should feel confident <em style="font-weight: bold;">before doing anything </em>that you have a <strong>100% reliable backup of your data</strong>.</p>
<p>To convert an arbitrary volume to Lion&#8217;s whole-disk encryption, you use diskutil&#8217;s core storage &#8220;convert&#8221; command, and provide a passphrase. For example, if you have a volume called &#8220;Data&#8221; attached to your Mac, you would run something like this from the command line:</p>
<pre style="font-size: 1em;">% diskutil cs convert /Volumes/Data -passphrase [yourPasswordHere]</pre>
<p>What this does is kicks off a conversion process similar to what the System Preferences panel does when allowing you to convert your main startup volume to core storage with encryption. At any time during the conversion, you can use the diskutil command again to see status of your volumes, whether they are encrypted, not encrypted, or in-progress while converting.</p>
<pre style="font-size: 1em;">% diskutil cs list</pre>
<p>You&#8217;ll see a bunch of information, but search carefully for the named volume (e.g. &#8220;Data&#8221;) that you just started the conversion process on. You&#8217;ll find a line starting with something like:</p>
<pre style="font-size: 1em;">Size (Converted):</pre>
<p>This shows you what the progress in the conversion is. From time to time, check this manually, to see how far along things have progressed.</p>
<h3>Caveats</h3>
<p>In addition to the major admonition above to backup your data carefully, you should also know that after you have converted a volume, it seems to be in a sort of provisionally encrypted state where it&#8217;s still being treated by the running OS as a &#8220;native volume&#8221; although it&#8217;s been converted and is ready to be treated as a &#8220;core storage&#8221; volume. I have to confess I don&#8217;t really understand it 100%, but it seemed like a really good idea to me to restart <em>as soon as possible</em> after the conversion is complete.</p>
<p><strong>But before you restart,</strong> bear in mind that there appears to be a bug in the login process that will prevent a user whose home directory is on an encrypted (&#8220;locked&#8221;) <em>secondary volume</em> from being able to log in. It seems that whatever logic Apple applies to unlock volumes at login time is not applied early enough to allow the actual login to occur. This means that if you converted your secondary volume like I did, and it contains your home directory, you won&#8217;t be able to login.</p>
<p>For this reason, make sure that you have a valid account to log in to whose home directory is located on the main startup volume. In my experience, the process of logging in to this main-volume account will prompt the system to ask for the secondary volume&#8217;s password in order to unlock it. Once the secondary volume is unlocked, you can log out and log back in to your regular account, with the home directory on the secondary volume.</p>
<p>This bug is pretty annoying. Hopefully this is something that Apple will get fixed soon, and it may be for bugs like this that they haven&#8217;t enabled full-disk encryption as a full-fledged user-facing feature of the operating system. In the mean time, if encrypting your data is important to you, I hope these instructions and caveats will serve you well.</p>
<p><strong>Update: </strong>Not surprisingly, this topic is covered in some detail in <a href="http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars/13">John Siracusa&#8217;s Lion review</a>.</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/1935/lions-whole-disk-encryption/feed</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>The Future Of Mac App Store Installs</title>
		<link>http://www.red-sweater.com/blog/1566/the-future-of-mac-app-store-installs</link>
		<comments>http://www.red-sweater.com/blog/1566/the-future-of-mac-app-store-installs#comments</comments>
		<pubDate>Fri, 07 Jan 2011 21:49:28 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[App Store]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Macintosh]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=1566</guid>
		<description><![CDATA[It&#8217;s only been one day since the launch of the Mac App Store, and the Mac developer and user communities are buzzing with consequences, both good and bad, of the store and how it operates. One particularly vexing issue is the question of whether an app that is already on your Mac is &#8220;installed&#8221; or [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s only been one day since the <a href="http://www.red-sweater.com/blog/1559/the-mac-app-store">launch of the Mac App Store</a>, and the Mac developer and user communities are buzzing with consequences, both good and bad, of the store and how it operates.</p>
<p>One particularly vexing issue is the question of whether an app that is already on your Mac is &#8220;installed&#8221; or not in the eyes of the App Store application. Dan Moren of Macworld <a href="http://www.macworld.com/article/156980/2011/01/installed_apps_appstore.html">presents a great summary</a> of the situation.</p>
<p>In a nutshell: if App Store thinks an app is installed, it&#8217;s impossible to buy it. If App Store thinks an app is installed, but it&#8217;s not really from the App Store, there&#8217;s a risk of repurchasing something that you already own a license for.</p>
<p>What this brings into focus is the very problematic nature of that small multi-purpose button the App Store, that allows for either buying an app you don&#8217;t own, or for linking to an app that you do own:</p>
<p><img style="border-color: #aaa;" src="http://www.red-sweater.com/blog/wp-content/downloads/2011/01/App-Store-2.jpg" border="1" alt="App Store-2.jpg" width="450" height="186" /></p>
<p>As it happens, the App Store user interface is implemented primarily in HTML. Using a surprisingly under-appreciated feature of WebKit, the omnipresent web inspector, I was able to look behind the scenes at some of the interesting HTML that supports this Buy/Installed button. For Black Ink&#8217;s button above, this is what I see:</p>
<pre>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px monospace; color: #977d40;"><span style="color: #c22a9c;">&lt;button </span>version-string<span style="color: #c22a9c;">=</span><span style="color: #d92823;">"1.2.3"</span><span style="color: #c22a9c;"> </span>is-rental<span style="color: #c22a9c;">=</span><span style="color: #d92823;">"0"</span><span style="color: #c22a9c;"> </span>is-pre-order<span style="color: #c22a9c;">=</span><span style="color: #d92823;">"0"</span><span style="color: #c22a9c;"> </span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #d92823;"><span style="color: #977d40;"><span style="color: #000000;"><span style="font-size: medium;">   </span></span></span><span style="color: #977d40;">buy-params</span><span style="color: #c22a9c;">=</span>"productType=C&amp;amp;price=24990&amp;amp;
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #d92823;"><span style="color: #000000;"><span style="font-size: medium;">                 </span></span>salableAdamId=402376365&amp;amp;pricingParameters=STDQ"
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #223cf5;"><span style="color: #977d40;"><span style="color: #c22a9c;">   </span></span><span style="color: #977d40;">preflight</span><span style="color: #c22a9c;">=</span><span style="color: #d92823;">"<a href="http://a1757.phobos.apple.com/us/r1000/057/Purple/e7/fb/12/mzm.gytejomu.pfpkg"><span style="color: #223cf5;">http://a1757.phobos.apple.com/us/r1000/</span></a></span><span style="color: #d92823;"><span style="color: #223cf5;">
                 <a href="http://a1757.phobos.apple.com/us/r1000/057/Purple/e7/fb/12/mzm.gytejomu.pfpkg">057/Purple/e7/fb/12/mzm.gytejomu.pfpkg</a></span>"</span><span style="color: #c22a9c;"> </span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #977d40;"><span style="color: #c22a9c;">   </span>is-install-button<span style="color: #c22a9c;">=</span><span style="color: #d92823;">"0"</span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #223cf5;"><span style="color: #977d40;"><span style="color: #c22a9c;">   </span></span><span style="color: #977d40;">large-icon</span><span style="color: #c22a9c;">=</span><span style="color: #d92823;">"<a href="http://a1.phobos.apple.com/us/r1000/013/Purple/74/8c/bb/mzi.wpgwhzjm.170x170-75.png"><span style="color: #223cf5;">http://a1.phobos.apple.com/us/r1000/013/</span></a></span>
<span style="color: #d92823;"><span style="color: #223cf5;">                 <a href="http://a1.phobos.apple.com/us/r1000/013/Purple/74/8c/bb/mzi.wpgwhzjm.170x170-75.png">Purple/74/8c/bb/mzi.wpgwhzjm.170x170-75.png</a></span>"</span><span style="color: #c22a9c;"> </span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #977d40;">   is-update<span style="color: #c22a9c;">=</span><span style="color: #d92823;">"0"</span><span style="color: #c22a9c;"> </span>item-name<span style="color: #c22a9c;">=</span><span style="color: #d92823;">"Black Ink"</span><span style="color: #c22a9c;"> </span>adam-id<span style="color: #c22a9c;">=</span><span style="color: #d92823;">"402376365"</span><span style="color: #c22a9c;"> </span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #977d40;">   is-free-download<span style="color: #c22a9c;">=</span><span style="color: #d92823;">"0" </span><span style="color: #d92823;"><span style="color: #977d40;">bundle-id</span><span style="color: #c22a9c;">=</span>"com.red-sweater.blackink.macappstore"</span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #977d40;"><span style="color: #d92823;"><span style="color: #977d40;">   metrics-leaf</span><span style="color: #c22a9c;">=</span>"1"<span style="color: #c22a9c;"> </span><span style="color: #977d40;">metrics-loc</span><span style="color: #c22a9c;">=</span>"Buy" </span><span style="color: #d92823;"><span style="color: #977d40;">title</span><span style="color: #c22a9c;">=</span>"Buy, Black Ink: $24.99"</span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #977d40;"><span style="color: #d92823;"><span style="color: #977d40;">   disabled</span><span style="color: #c22a9c;">=</span>""<span style="color: #c22a9c;"> </span><span style="color: #977d40;">its-bound</span><span style="color: #c22a9c;">=</span>"iTSBuyButton"<span style="color: #c22a9c;">&gt;</span></span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #c22a9c;"><span style="color: #000000;"><span style="font-size: medium;">   </span></span>&lt;span <span style="color: #977d40;">class</span>=<span style="color: #d92823;">"price"</span>&gt;&lt;/span&gt;
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace;"><span style="color: #c22a9c;"><span style="font-size: medium;">   </span></span><span style="color: #c22a9c;">&lt;span </span><span style="color: #977d40;">class</span><span style="color: #c22a9c;">=</span><span style="color: #d92823;">"action"</span><span style="color: #c22a9c;">&gt;</span>Installed<span style="color: #c22a9c;">&lt;/span&gt;</span>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px monospace; color: #c22a9c;">&lt;/button&gt;
</pre>
<p>Formatting XML, even with a cool app like <a href="http://www.red-sweater.com/marsedit/">MarsEdit</a>, is still a huge pain. I&#8217;ve tried to make it readable here so you can enjoy some of the interesting tidbits in this markup. There are some tantalizing attributes like <strong>is-update</strong> and <strong>is-free-download</strong>, which might lead some of us to imagine whether a paid update may be a configuration away. There&#8217;s some hocus-pocus sale parameters which surely mean something to iTunes on the other end of the network connection, and there&#8217;s a link to the application&#8217;s pretty icon.
</p>
<p style="padding:1em; border-style:solid; border-width:1px; border-color:#aaa;">Wondering about that global web inspector trick? Any application that has the NSUserDefaults key <strong>WebKitDeveloperExtras</strong> defined to YES receives access to the sexy WebKit web inspector that is so awesomely utilized in Safari. You can define this for the App Store app by running this from the command line in a Terminal window: <strong>defaults write com.apple.appstore WebKitDeveloperExtras -bool true</strong> Make sure you quit App Store before you run it, then relaunch it.
</p>
<h3>But What&#8217;s Really Interesting&#8230;</h3>
<p>All of this is fun to poke around at, but what I find fascinating is the <strong>preflight</strong> attribute, which points to a mysterious asset on the web. This &#8220;.pfpkg&#8221; file, which as it turns out is simply <a href="http://code.google.com/p/xar/">xar</a> archive format, contains an interesting file called <strong>Distribution</strong>, an XML-formatted file that contains rules and attributes for how the application should be installed, how the App Store should locate an &#8220;Installed&#8221; app on the user&#8217;s Mac, etc. I&#8217;m not going to the trouble of color formatting this one, but have a look in a separate window:</p>
<p><a href="http://red-sweater.com/blog/wp-content/downloads/2011/01/BlackInkPreflight.txt">View Black Ink&#8217;s Preflight Rules</a></p>
<p>I believe the format for this XML document is either completely or partially tied up in the way the Mac OS X Installer packages work. I have been lucky enough in my lifetime not to have to do all that much with installer packages, so I am not sure exactly how to parse the whole file. It&#8217;s clear however, that the file contains information about the application, its version and bundle identifier. It also contains similar information for each of the frameworks that ships with the application.</p>
<p>But the interesting stuff begins below that, where we see flags such as <strong>customize=no</strong>, and an alluring <strong>volume-check</strong>, which seems to be terminology from Installer-land that alludes to installers being able to determine whether the targeted volume is suitable for installation.</p>
<p>As you can see, the Black Ink preflight document is pretty boring. No, there is no customize flag. No, there are no interesting volume-check attributes, aside from the fact that this requires 10.6.6, like every other dang app on the Mac App Store. Yawn.</p>
<p>I decided to take a look at another application in the App Store. One that, if anything was going to be interesting, surely this one would be.</p>
<p>
<img style="border-color: #aaa;" border="1" src="http://www.red-sweater.com/blog/wp-content/downloads/2011/01/App-Store-3.jpg" alt="App Store-3.jpg" border="0" width="450" height="204" /></p>
<p>One of the things I keep reminding myself, when trying to deduce what Apple&#8217;s plans are for a variety of &#8220;would be nice&#8221; features in the App Store, such as upgrades, trials, etc., is &#8220;how does the current setup inconvenience Apple itself?&#8221; Many of Apple&#8217;s apps are shipped for free with the system and are updated for free along with OS updates. But others are not: iLife and iWork are sold in a bundle with no upgrade pricing, and other apps such as Final Cut Pro and Logic have complicated pricing, which perhaps explains why they aren&#8217;t on the App Store at all. But Aperture falls right in the middle: fairly straight-forward pricing, but it&#8217;s expensive enough that they offer reasonable upgrade charges for users who already own a license. Maybe there will be something interesting in these <strong>preflight rules</strong>:</p>
<p><a href="http://red-sweater.com/blog/wp-content/downloads/2011/01/AperturePreflight.txt">View Aperture&#8217;s Preflight Rules</a></p>
<p>The file length alone indicates that something slightly more complicated is going on, and my eyes are drawn immediately to the JavaScript code in the middle of the document, and a function named <strong>shouldAllowPurchaseAndInstall()</strong>. Hmm, you mean there&#8217;s a choice? Usually what happens when you click &#8220;Buy&#8221; in the App Store, is you are prompted to login if necessary, and then you are warned that this is going to cost you money, it&#8217;s a big deal, etc. But as far as I can tell, a side-effect of clicking <strong>Buy</strong> in the App Store is that the aforementioned volume-check is also run on the target system, giving App Store one last chance to bail out of the process before something unfortunate is done.</p>
<p>In Aperture&#8217;s case, you can see by the nicely commented script that it takes care to only allows the <strong>Buy</strong> order to go through under certain circumstances. In making this determination, it checks all of the installed copies of Aperture on the system, looking for signs of App Store purchase such as the presence of a &#8220;_MASReceipt&#8221; inside the app. It also takes care to differentiate between different versions of Aperture, failing in some cases with a specific string that is presumably passed along to the App Store user.</p>
<p>If you&#8217;ve managed to follow along this far, you&#8217;re probably putting two and two together and realizing that the technology exists today for applications to avoid at least one of the problems mentioned above: the inadvertent redundant purchase that may happen when a user thinks it&#8217;s safe to buy an app, because &#8220;they already have a license.&#8221;</p>
<p>The preflight XML document may be documented in part or in full in the context of Mac OS X Installer Packages, but as far as I know, none of this is documented in the context of the Mac App Store. I do not know if any 3rd party developer has been invited to use this technique, or if it&#8217;s something we could just put into our installer packages somehow on our own, and hope for the best.</p>
<p>What&#8217;s most interesting about all this is that there is clearly an infrastructure in place for allowing a wide variation of behaviors, all centering around the multi-purpose Buy/Installed button in the App Store. I would like to see the <strong>volume-check</strong> options documented and made explicitly available to developers, so that we can help prevent unwanted redundant purchases on the part of our customers. I would also be curious to know if other hooks are in place or are planned to for example allow developers whose apps <em>do show up as installed</em> to second-guess that assumption and encourage the App Store to provide a &#8220;Buy&#8221; option to customers.</p>
<p>Where we&#8217;re going, only Apple knows, but I thought the details I discovered in this nook of the App Store app offer some interesting clues. I&#8217;m also interested in sharing this because I believe that the more we understand about the App Store install process, the better we&#8217;ll be able to offer meaningful enhancement requests to Apple. &#8220;Support paid upgrades&#8221; and &#8220;Allow variable behavior depending on installed apps&#8221; are fine feature requests, but if we are able to put them into the context of what Apple already knows is possible, they may be more likely to get implemented.</p>
<p>If anybody else has delved into the underbelly of the App Store and has observations to share, please do so in the comments, or with a link to your own blog article on the subject.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/1566/the-future-of-mac-app-store-installs/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Hold On A Minute</title>
		<link>http://www.red-sweater.com/blog/1397/hold-on-a-minute</link>
		<comments>http://www.red-sweater.com/blog/1397/hold-on-a-minute#comments</comments>
		<pubDate>Thu, 09 Sep 2010 18:00:18 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=1397</guid>
		<description><![CDATA[One of the big new features in MarsEdit 3 is a revamped media manager that allows you to easily browse local libraries from iPhoto, Aperture, etc. This functionality is based largely on the great work of the iMedia project, which was spearheaded by Karelia to replicate Apple&#8217;s own ubiquitous media browsing interface, some variant of [...]]]></description>
			<content:encoded><![CDATA[<p>One of the big new features in <a href="http://www.red-sweater.com/marsedit/">MarsEdit 3</a> is a revamped media manager that allows you to easily browse local libraries from iPhoto, Aperture, etc.</p>
<p><img src="http://www.red-sweater.com/blog/wp-content/downloads/2010/09/Media-Manager.png" alt="Media Manager.png" border="0" width="450" height="371" /></p>
<p>This functionality is based largely on the great work of the <a href="http://code.google.com/p/imedia/">iMedia</a> project, which was spearheaded by <a href="http://www.karelia.com/">Karelia</a> to replicate Apple&#8217;s own ubiquitous media browsing interface, some variant of which is available in Pages, iWeb, Mail, etc.</p>
<p>iMedia has been around for a while, but in the past year or more it has been undergoing a significant overhaul as its primary developers gear up to release the official 2.0 milestone. I have been involved in the 2.0 project for a long time now as an &#8220;early adopter,&#8221; using MarsEdit as a testing ground during the beta phase, and taking (mostly!) only the refined and polished aspects of the product for the final MarsEdit 3.0 release.</p>
<p>We are still ironing out some of the kinks, especially in parts of the project that were not tested in MarsEdit. One of the cool new features is support for the Flickr photo-sharing service. Like MarsEdit&#8217;s own Flickr-browser, it shows thumbnails of images on Flickr, and lets you treat them more-or-less like ordinary image files that you&#8217;d find on your computer.</p>
<p><img src="http://www.red-sweater.com/blog/wp-content/downloads/2010/09/iMedia2.png" alt="iMedia Flickr Support" border="0" width="450" height="344" /></p>
<p>Things get a little bit complicated when a user selects and drags one of these Flickr image thumbnails to another app, such as the Finder, or Photoshop. Since the image lives in the internet, and not on the local hard disk, it is not something that can be popped over to the application in an instant. Instead, a progress dialog comes up while the image is downloaded to the disk, and then the local copy is passed to the receiving application.</p>
<p><img src="http://www.red-sweater.com/blog/wp-content/downloads/2010/09/iMediaFlickr.png" alt="iMedia Flickr Download Panel" border="0" width="400" height="188" /></p>
<p>I try to contribute back when possible in the form of bug fixes and architectural feedback. Some of the work I did for iMedia 2.0 involved updating its drag-and-drop functionality to take advantage of new features in Mac OS X 10.6. In the process, I became a sort of de facto expert on handling dragging, which is a shame, because we could sure use a <em>real</em> expert, instead!</p>
<p>The other day, an issue came up that relates to the dragging of Flickr files. If the download is taking a while, and the user tries to cancel, mouse clicks are apparently ignored and they are stuck with the progress dialog above. I agreed to look into the issue, but there was just one problem: my network is too fast! Whenever <em>I</em> try to drag a Flickr image to another app, it&#8217;s done within a couple seconds, and I don&#8217;t have time to play around with clicking the cancel button.</p>
<p>If only I could get a <em>really slow connection</em> to Flickr, then I could easily test this. In the old days of Mac OS 9 or earlier, I may have resorted to plugging in a slow modem to simulate the experience of the less bandwidth-fortunate. In Mac OS X however, I can take advantage of the advanced firewall software that comes bundled with the operating system, and which allows me to configure &#8220;traffic shaping&#8221; policies on the traffic coming in and out of my computer. I found a great <a href="http://hints.macworld.com/article.php?story=20080119112509736">hint from Macworld</a> that got me on the right track.</p>
<p>My goal is to cause Flickr downloads to be artificially slow. In order to achieve this goal I need to find the specific web address that the downloads come from. To do this, I use the standard tcpdump terminal utility, which also comes bundled with Mac OS X:</p>
<pre>
sudo tcpdump -Atqp -s 0 -ien1
</pre>
<p>The only part you may want to change is the bit at the end that says &#8220;en1&#8243;. Depending on the network interface you&#8217;re using, you might want en0 or en2 instead. With this running in the terminal, I go back to iMedia and start downloading Flickr files. This lets me see what the addresses of those files look like, and I discover the pertinent host name is &#8220;farm5.static.flickr.com&#8221;. Using the information I gleaned from the Macworld article, I set up the following firewall traffic shaping rules:</p>
<pre>
sudo ipfw pipe 1 config bw 15KByte/s
sudo ipfw add 1 pipe 1 src-port 80 src-ip farm5.static.flickr.com
</pre>
<p>Translation?</p>
<ol>
<li>Create a pipe (you might prefer to call it a &#8220;tube&#8221;). A pipe is an artificial pass-through which can be configured to slow down, block, or otherwise alter the network traffic that goes through it.</li>
<li>Configure the pipe to limit bandwidth to a crawling 15KByte/s.</li>
<li>Configure all traffic coming from port 80 (the standard HTTP port), and originating from a specific hostname at Flickr, to pass through that pipe.</li>
</ol>
<p>As soon as these commands are executed, the pipe is in place, and Flickr download speeds are brought to screeching halt. I can now debug the issue with the download dialog and the cancel button patiently and curiously, instead of racing to try clicking the button while I still have the chance.</p>
<p>When I&#8217;m done debugging, I definitely want to delete the pipe, so that download speeds go back to normal:</p>
<pre>
sudo ipfw delete 1
</pre>
<p>Mucking around with the built-in firewall on Mac OS X is not for the extremely faint-of-heart. This is why all the commands listed in this entry require &#8220;sudo&#8221; superuser privileges. Yes, you could seriously screw up your computer&#8217;s network connection if you do something wrong. But if you are the type of person whose work requires you to test and debug network related tasks, this traffic shaping functionality can be a real asset when it comes to mimicking the network environments of other people.</p>
<p><strong>Addendum:</strong> I should have known I might be doing it the hard way, as usual. Clint Ecker <a href="http://twitter.com/clint/status/24032579293">reported on Twitter</a>, and several folks in the comments below, that <a href="http://mschrag.github.com/">speedlimit</a>, a Mac OS X preference pane, gets the job done in a much friendlier manner.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/1397/hold-on-a-minute/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Apple Downloads</title>
		<link>http://www.red-sweater.com/blog/1194/apple-downloads</link>
		<comments>http://www.red-sweater.com/blog/1194/apple-downloads#comments</comments>
		<pubDate>Wed, 21 Apr 2010 03:58:50 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Macintosh]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=1194</guid>
		<description><![CDATA[For many years Apple has provided a valuable service to 3rd party developers, and to Mac users, by hosting a directory of software you can download and install for your Mac. You can browse the database on Apple&#8217;s web site: http://www.apple.com/downloads/﻿. This resource helps to bridge the gap between Apple&#8217;s customers, who are looking for solutions, [...]]]></description>
			<content:encoded><![CDATA[<p>For many years Apple has provided a valuable service to 3rd party developers, and to Mac users, by hosting a directory of software you can download and install for your Mac. You can browse the database on Apple&#8217;s web site: <a href="http://www.apple.com/downloads/">http://www.apple.com/downloads/﻿</a>.</p>
<p>This resource helps to bridge the gap between Apple&#8217;s customers, who are looking for solutions, and 3rd party developers who are looking to provide them. I, along with most other developers, am grateful for this service.</p>
<p>A few weeks ago, Apple ruffled feathers in the developer community by quietly <a href="http://macdailynews.com/index.php/weblog/comments/24356/">removing the link</a> to the Downloads section from its formerly high-profile location in the main navigation bar on its home page. This disappointed many of us, as it will likely lead to far fewer casual visitors to the Downloads section, and consequently, far fewer click-throughs to our product pages.</p>
<p>Recently, The Unofficial Apple Weblog observed that Apple has <a href="http://www.tuaw.com/2010/04/20/downloads-page-at-apple-com-no-longer-being-updated/">stopped updating the Mac downloads</a> directory entirely. For those few apps that happened to be among the last admitted into the directory, this is a boon. They are permanently fixed as the &#8220;most recent&#8221; updates, since March 26. For the rest of us, this does not bode well.</p>
<p>Does Apple plan to introduce a new App Store for &#8220;authorized&#8221; Mac apps? Are they simply disinterested in the Mac since the iPod, iPhone, and iPad have taken one such an important role in their public relations? These are some of the questions that run through the minds of Mac developers as we try to interpret meaning from the unexplained actions.</p>
<p>Mac developers may be feeling a bit sensitive lately. As Apple rides the success of the iPod, iPhone and iPad, those of us who are still cranking out Mac software wonder whether Apple is as excited to boost us as we are to boost them.</p>
<p>But Apple is riding the success of the Mac, too. The Mac is still the heart of everything that Apple does. Imagine an expansive desert where no life seems possible. A settler discovers a spring, churning out water, in the middle of this wasteland. Soon others join in, and a town emerges. Eventually a government is formed, businesses are born, and a thriving economy springs to life. When the brilliant new Town Hall is erected, everybody agrees it is the crowning achievement for the town. It represents every forward-thinking inclination the citizens of this place have, and yet it would not be possible without that water. Without that gushing spring, the town is dead. The Town Hall is worthless.</p>
<p>The Mac is that spring of water that allows life to thrive in Apple&#8217;s ecosystem.</p>
<p>I think the failure to update entries on Apple&#8217;s Mac downloads site is a consequence of staff at Apple being stretched thin. I would not be surprised at all to learn that the very people who are responsible for reviewing submissions to the Mac downloads directory also serve as reviewers for the iPhone and iPad, either full time or on-demand as submissions for the touch platforms surge.</p>
<p>There have been times in Apple&#8217;s history when one of its technologies was clearly being ousted in favor of a successor. The Mac (eventually) obsoleted the Apple II. Mac OS X obsoleted Mac OS 9. In the absence of a clear successor, Mac OS X running on Apple&#8217;s sexy, modern hardware, is impossible to declare obsolete. We&#8217;ll be using Macs for a long time, and loving the way they empower us to make the most of our iPads, iPhones, and iPods.</p>
<p>And if Apple&#8217;s earnings announcement from earlier today is any indication, based on the <a href="http://www.macworld.com/article/150758/2010/04/apple_q2_2010.html?lsrc=twt_jsnell">huge Mac sales</a> this past quarter, they are probably still just as excited to build Macs as we are to use them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/1194/apple-downloads/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>A Stroke Of Luck</title>
		<link>http://www.red-sweater.com/blog/1150/a-stroke-of-luck</link>
		<comments>http://www.red-sweater.com/blog/1150/a-stroke-of-luck#comments</comments>
		<pubDate>Fri, 09 Apr 2010 18:28:38 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=1150</guid>
		<description><![CDATA[One of my customers reported a really subtle bug having to do with a keyboard shortcut for a command. I&#8217;m going to change some facts to protect the innocent, but imagine I got a report: &#8220;Every time I press cmd-N to create a new document and start typing, instead of accepting the text, it just [...]]]></description>
			<content:encoded><![CDATA[<p>One of my customers reported a really subtle bug having to do with a keyboard shortcut for a command. I&#8217;m going to change some facts to protect the innocent, but imagine I got a report:</p>
<blockquote>
<p>&#8220;Every time I press cmd-N to create a new document and start typing, instead of accepting the text, it just beeps at me.&#8221;</p>
</blockquote>
<p>This seems impossible to me. Creating a new document and typing into it is fundamental to my product. Surely if it was broken I would know from my own daily testing of the application. I try diligently to reproduce it, but of course, I can&#8217;t. Create a new document. Start typing. Everything works, everybody&#8217;s happy. Except the person who reported the bug.</p>
<p>At some point in my tinkering I stumble upon the bug. Beep. I can&#8217;t type. There it is! What a drag. <em>This application sucks!</em></p>
<p>Now that I&#8217;ve seen and heard the bug with my own eyes, I&#8217;m more committed than ever to fixing it. But how on earth did I do it? I try several more times and am unable to reproduce the problem.</p>
<p>I have only spotted the issue once in my dozens of trials, yet the customer claims it affects him <em>every single time.</em> ﻿What explains this? Maybe it simply doesn&#8217;t happen as often on my Mac as it does on his. My thoughts turn to the brute force of AppleScript. If this happens only once in a blue moon on my Mac, surely I can reproduce it by running a script that iterates the test conditions hundreds or thousands of times. I open AppleScript Editor and enter the following:</p>
<p><pre>
tell application "System Events"
	repeat 100 times
		keystroke "n" using command down
		keystroke "Testing typing"
	end repeat
end tell</pre>
</p>
<p>
Nothing! Even after running it 1000 times, nothing. How can this be? How could something so common for the customer, something that I saw myself <em>once</em>, be so difficult to reproduce on my Mac?
</p>
<p>
After playing around a bit more, I started to reproduce it more readily. What was happening? I couldn&#8217;t figure it out, but something &#8220;felt&#8221; a little different when I reproduced it. I thought carefully about the parameters of the bug, as exemplified (I thought) by my script:
</p>
<ol>
<li>The command key is pressed.</li>
<li>The N key is pressed.</li>
<li>The N key is released.</li>
<li>The command key is released.</li>
<li>Typing into the new document is attempted.</li>
</ol>
<p>
I looked again at the script. Perhaps this &#8220;keystroke&#8221; command is not literal enough. For all I know it&#8217;s circumventing the normal key events that get generated when you type on the keyboard. On a lark, I modified the script to be more explicit:
</p>
<p><pre>
tell application "System Events"
	repeat 100 times
		key down {command}
		key down  "n"
		key up "n"
		key up {command}
		key down "x"
		key up "x"
	end repeat
end tell</pre>
</p>
<p>
Here we have a more literal match with my analysis of what happens. Hold down the command key, press the N key, release, then type something. In this case I just type an x character because I figure any typing is enough to trigger the bug.
</p>
<p>
I ran this 100 times as well and no luck. The bug is simply not reproducible through scripting. I guess I&#8217;ll have to figure out what conditions are making it more likely for the customer to run into the bug. Maybe he has some 3rd party software that is interfering. Or &#8230; wait a minute.
</p>
<p><pre>
tell application "System Events"
	repeat 100 times
		key down {command}
		key down  "n"
		key up {command}
		key up "n"
		key down "x"
		key up "x"
	end repeat
end tell</pre>
</p>
<p>
I ran the modified script and the bug immediately exhibited itself. So what changed? Look carefully and you&#8217;ll see that my previous script assumed that when a keyboard shortcut is pressed, there is a sort of nested symmetry to the order of pressing and releasing the keys. When I press keyboard shortcuts, I hold the modifier keys down throughout the stroke, and release only after the letter key has been released. But this customer has muscle memory that inclines him to instead release the keys in the order they were pressed. When he releases the N key, the command key has &#8220;long&#8221; since been released. </p>
<p>
This subtle difference turns out to trigger a bug in my event monitoring code that, to make a long story short, robs first responder status from the default view in the document. So when he creates a new document, there is no first responder, and his typing just causes a bunch of beeps. When I create a new document, there&#8217;s always a first responder, so I don&#8217;t see the bug.
</p>
<p>
As difficult as this bug was to track down, it would have been near impossible without the theory testing, disproving, and ultimately proving tool of using AppleScript and System Events to zero on in the behavior. Sometimes when the steps a customer provides to reproduce a bug seem <em>exactly the same</em> as what you&#8217;re doing, you&#8217;re just not trying hard enough to find the difference.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/1150/a-stroke-of-luck/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Can&#8217;t Catch Me</title>
		<link>http://www.red-sweater.com/blog/1110/cant-catch-me</link>
		<comments>http://www.red-sweater.com/blog/1110/cant-catch-me#comments</comments>
		<pubDate>Thu, 28 Jan 2010 17:07:04 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=1110</guid>
		<description><![CDATA[&#160; The future of software is on the web. That&#8217;s what they keep telling me. I just smile, and say &#8220;I don&#8217;t think so. There will always be compelling technologies on the desktop.&#8221; I believe this, but I admit it carries an odor of blind loyalty to my comfort zone. People who argue the other [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>The future of software is on the web. That&#8217;s what they keep telling me. I just smile, and say &#8220;I don&#8217;t think so. There will always be compelling technologies on the desktop.&#8221; I believe this, but I admit it carries an odor of blind loyalty to my comfort zone.</p>
<p>People who argue the other side have latched on to a few admittedly stunning aspects of the web, and they seem to believe that these charming characteristics alone ensure a course for long-term victory over all others. These attributes include:</p>
<ul>
<li>Cross-platform. You can run a web app on any computer that has a capable browser.</li>
<li>Ubiquity. You don&#8217;t need to be near <em>your computer</em>&nbsp;to run a web app. You just &#8220;log in.&#8221;</li>
<li>Instant updates. No need to coerce customers to update, just change the code on the server and they&#8217;re quietly updated to the latest running code.</li>
<li>Open, standard technologies. You have control over and &nbsp;access to most of the source code at the heart of your application.</li>
</ul>
<p>Attractive indeed. If you imagine a world where the sum of all things you can do with a computer is exactly matched, and locked down for all time with what you can inside a browser, then the arguments for the web are persuasive. Why write for a specific platform when you can write for all platforms at once and gain the other advantages as well?</p>
<p>The error is in disregarding the many unmatchable attractions of &#8220;the desktop.&#8221; When I say desktop, I mean <em>any</em> platform that provides applications with more features than the standard web. iPhones are &#8220;the desktop.&#8221; As are Android, Palm Pre, Macs, PCs, and Linux. All offer features and functionality above and beyond what you can do on the web itself.</p>
<p>But the web can do a lot!, you cry, and point me to examples of ingenuity such as <a href="http://280slides.com/">280 Slides</a>, the flagship proof-of-concept from&nbsp;280 North&#8217;s <a href="http://cappuccino.org/">impressive library</a> for implementing web apps in a way that is reminiscent of programming in Objective-C. What these people are doing is mind-blowingly impressive, and if I decided to write a web app for some reason, I would probably use technologies like these.</p>
<p>But if I want to write a truly great app, it has to be a desktop app. And this will be true forever, or until there is no difference between the web and the desktop. I grant you, if the web <em>becomes the desktop</em>, something I find very unlikely, then the web will have in fact won by default.</p>
<h3>Anything You Can Do&#8230;</h3>
<p>Companies like 280 North are investing years of engineering time into a necessary pre-requisite for web-app domination: bringing the web&#8217;s capabilities up to approximately what the desktop offers. I quipped on <a href="http://www.coreint.org/">Core Intuition</a> that &#8220;Web 2009 = Windows 95&#8243;. It&#8217;s a play on an old bumper-sticker from Apple, that poked fun at Windows for finally having &#8220;caught up&#8221; to Macintosh&#8217;s 1989 feature set, in 1995. The amount of work done over the past few years on web app technologies is staggering, but when you take a step back, they celebrate victories over things we have taken for granted for <em>years</em>&nbsp;on the desktop. Things like drag and drop and animation are at least possible on the web. Other niceties such as inter-application scriptability would require a total overhaul of how web browsers behave.</p>
<p>The problem with the game of catch-up, is you only ever win if your target is moving slower than you are, or better yet if they stop completely. All desktop platforms are innovating to offer developers greater and greater capabilities that peer into the future of what your high-powered CPUs, GPUs, and peripheral hardware makes possible. Meanwhile, most web platforms are just trying to catch up.</p>
<p>And catching up is hard for many reasons, not least of which that they have <em>no idea where the desktop is going.</em>&nbsp;None of us do, and Apple&#8217;s announcement yesterday of the iPad is a great example of this. The goal of a &#8220;vaguely Mac/PC-like application interaction environment on the web&#8221; is thrown a curveball when desktop vendors such as Apple are constantly picking up the goal, brushing it off, and setting down again on a completely different path you&#8217;ll have to now forge a trail to.</p>
<p>It&#8217;s an unfair fight. We know exactly what the web can do, and we have a good idea of what it plans to do, thanks to its (laudable) open standards. But none of us has any idea what the next iPad, iPhone, Wii, Xbox, TomTom, <em>whatever</em>, will do. Don&#8217;t get me wrong: the web is excellent at innovating, but it innovates primarily for publishing and social interaction. It doesn&#8217;t innovate on desktop UI or device integration, the very areas where brilliant desktop applications shine. And it does innovate, as I have already suggested, in the art of catching up.</p>
<p>Anything you can run in a web browser can also run inside a desktop app, thanks to the modular embedding capabilities of WebKit on the Mac and Internet Explorer on the PC. However, it should be obvious that the inverse is not true. When something truly innovating and mind-blowing happens on the web, I can drop it into a WebView on my Mac and make it a part of my desktop experience. When something mind-blowing happens on the desktop, you can bet you&#8217;ll have people scurrying to painstakingly imitate it on the web. It takes a lot of work, and a lot of time, and sometimes it&#8217;s not <em>precisely</em>&nbsp;even possible. But&nbsp;eventually they will come up with something reasonably close.</p>
<p>I imagine in 5 or 10 years the web will have caught up to something resembling how desktops behave today. But I can&#8217;t even begin to imagine what we&#8217;ll have at our fingertips on the desktop, by then. iPad? We ain&#8217;t seen <em>nothing</em>&nbsp;yet.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/1110/cant-catch-me/feed</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Building A Bigger Nerd Ranch</title>
		<link>http://www.red-sweater.com/blog/598/building-a-bigger-nerd-ranch</link>
		<comments>http://www.red-sweater.com/blog/598/building-a-bigger-nerd-ranch#comments</comments>
		<pubDate>Fri, 26 Sep 2008 04:52:31 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Motivation]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=598</guid>
		<description><![CDATA[When newcomers to programming on the Mac ask me for advice about getting started with Cocoa, I usually boil it down to three steps, depending on the amount of time and money they are prepared to put into the task: If you&#8217;re the slightest bit curious, buy Mark Dalrymple and Scott Knaster&#8217;s affordable book, Learn [...]]]></description>
			<content:encoded><![CDATA[<p>When newcomers to programming on the Mac ask me for advice about getting started with Cocoa, I usually boil it down to three steps, depending on the amount of time and money they are prepared to put into the task:</p>
<ol>
<li>If you&#8217;re the slightest bit curious, buy <a href="http://borkwarellc.wordpress.com/">Mark Dalrymple</a> and <a href="http://www.knaster.com/">Scott Knaster&#8217;s</a> affordable book, <a href="http://www.spiderworks.com/books/learnobjc.php">Learn Objective-C on the Macintosh</a>. It&#8217;s great that this book not only starts from the very beginning, but is available as an easy electronic download, for instant gratification.</li>
<li>If you&#8217;re convinced you&#8217;re in for the long haul, but prefer to learn at your own pace and in your spare time, pick up Aaron Hillegass&#8217;s <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&#038;location=http%3A%2F%2Fwww.amazon.com%2FCocoa-Programming-Mac-OS-3rd%2Fdp%2F0321503619%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1222398930%26sr%3D1-1&#038;tag=redsweaterblo-20&#038;linkCode=ur2&#038;camp=1789&#038;creative=9325">Cocoa Programming for Mac OS X</a><img src="http://www.assoc-amazon.com/e/ir?t=redsweaterblo-20&amp;l=ur2&amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />.</li>
<li>If it&#8217;s time to put the pedal to the metal, and you want to minimize the chances of failing as you learn the basics of this art, drop everything and enroll in the <a href="http://bignerdranch.com/classes/objective-c_cocoa.shtml">Objective-C and Cocoa Bootcamp</a> class at <a href="http://bignerdranch.com/">Big Nerd Ranch</a>.</li>
</ol>
<p>
Big Nerd Ranch is run by the very Aaron Hillegass who authored the book you picked up in step 2, and he teaches the Cocoa bootcamp class himself. The class is not cheap, but neither is it exploitatively expensive. You will learn to program for the Macintosh with a group of classmates, living and programming on a bucolic country retreat, where your meals and lodging are taken care of.
</p>
<p>
The Big Nerd Ranch concept is exciting, and I have often fantasized about attending a class there myself. I&#8217;m probably overqualified for the boot camp, though as with most life experiences, you learn something when you review the basics. The ranch offers a variety of classes in addition to the boot camp, including courses on more advanced Cocoa programming, iPhone development, and even on Django and Ruby on Rails web programming.
</p>
<p>
Right now, Aaron is busy building a bigger, better, greener, serener (funner? funnest?) Big Nerd Ranch. He&#8217;s actually bought a large plot of land and is drafting plans for several new buildings. He&#8217;s treating all of us to many glorious details on his personal blog: <a href="http://www.possibleprobable.com/">possible/probable</a>. The blog frames itself as the chronicle of a man in his mid-youth, aiming to improve an already successful life by taking chances and aiming for the stars. It so happens that his stars form a constellation that idealizes and glorifies learning to program on the Mac.
</p>
<p>
When you check out the blog, be sure to read through the archives. You&#8217;ll be riveted by his stories of searching for suitable property, securing bank loans, winning and losing architects, and grappling with the underlying question of just how crazy pursing this dream might be.
</p>
<p>
Fortunately for us, Aaron seems to be guiding his own life with the words of his blog title, &#8220;possible&#8221; and &#8220;probable.&#8221; I interpret these slash/stroke separated terms optimistically, as I expect he does. If you can imagine something, if it seems vaguely possible, then with a little work it is made probable.
</p>
<p>
I find Aaron&#8217;s optimism inspiring, and his stories remind me of my own possible/probable dreams still waiting to be fulfilled. His zeal for the pursuit of happiness rests safely between recklessness and painful deliberation. He recognizes that while frightening risks need to be taken, putting in hours of hard and tedious work will greatly improve the odds of success.
</p>
<p>
We should all get to work turning our own possibilities into probabilities, because nobody else is going to do it for us. With the help of Aaron&#8217;s blog, we might find ourselves inching just a little bit closer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/598/building-a-bigger-nerd-ranch/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Wii Transfer 2.6</title>
		<link>http://www.red-sweater.com/blog/548/wii-transfer-26</link>
		<comments>http://www.red-sweater.com/blog/548/wii-transfer-26#comments</comments>
		<pubDate>Thu, 14 Aug 2008 22:56:40 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Indie]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Macintosh]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=548</guid>
		<description><![CDATA[My buddy and podcasting cohort Manton Reece has announced the release of Wii Transfer 2.6. His application is apparently a very cool means of interfacing content from your Mac over to your Nintendo Wii. I wish I had more hands-on experience, but unfortunately I do not yet have a Wii of my own to play [...]]]></description>
			<content:encoded><![CDATA[<p>My buddy and podcasting cohort Manton Reece has announced the release of <a href="http://www.riverfold.com/software/wiitransfer/">Wii Transfer 2.6</a>. His application is apparently a very cool means of interfacing content from your Mac over to your Nintendo Wii. I wish I had more hands-on experience, but unfortunately I do not yet have a Wii of my own to play with!</p>
<p>
If you love your Wii and your Mac, then this app is probably worth taking a look at. Congratulations, Manton, for finally shipping :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/548/wii-transfer-26/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Core Intuition Episode 3</title>
		<link>http://www.red-sweater.com/blog/510/core-intuition-episode-3</link>
		<comments>http://www.red-sweater.com/blog/510/core-intuition-episode-3#comments</comments>
		<pubDate>Sat, 21 Jun 2008 07:32:24 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Macintosh]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=510</guid>
		<description><![CDATA[Manton and I are still at it. We&#8217;ve heard the feedback, some of it lukewarm, some of it intentionally discouraging, but most of it extremely enthusiastic. We&#8217;re proud to announce the immediate availability of episode 3, where we talk about WWDC, MobileMe, iPhone 3G, and a bunch of relatively unrelated stuff. Check us out!]]></description>
			<content:encoded><![CDATA[<p>Manton and I are still at it. We&#8217;ve heard the feedback, some of it lukewarm, some of it <em>intentionally discouraging</em>, but most of it <strong>extremely enthusiastic</strong>.</p>
<p>
We&#8217;re proud to announce the immediate availability of <a href="http://www.coreint.org/">episode 3</a>, where we talk about WWDC, MobileMe, iPhone 3G, and a bunch of relatively unrelated stuff.
</p>
<p>
Check us out!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/510/core-intuition-episode-3/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Core Intuition: Traveling Luddites</title>
		<link>http://www.red-sweater.com/blog/504/core-intuition-traveling-luddites</link>
		<comments>http://www.red-sweater.com/blog/504/core-intuition-traveling-luddites#comments</comments>
		<pubDate>Fri, 06 Jun 2008 02:04:43 +0000</pubDate>
		<dc:creator>Daniel Jalkut</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Indie]]></category>
		<category><![CDATA[Macintosh]]></category>

		<guid isPermaLink="false">http://www.red-sweater.com/blog/?p=504</guid>
		<description><![CDATA[Manton and I recorded another episode this week, just in time to hopefully give you a little something extra to listen to on the way to WWDC, if that&#8217;s where the winds are taking you. In this episode we talk a bit about travel and how we keep up on our indie business commitments on [...]]]></description>
			<content:encoded><![CDATA[<p>Manton and I <a href="http://coreint.org/">recorded another episode</a> this week, just in time to hopefully give you a little something extra to listen to on the way to WWDC, if that&#8217;s where the winds are taking you.</p>
<p>
In this episode we talk a bit about travel and how we keep up on our indie business commitments on the road. We also chat about the recently updated book from Aaron Hillegass: <a href="http://www.amazon.com/exec/obidos/ASIN/0321503619/redsweaterblo-20">Cocoa Programming for Mac OS X</a>. Manton bought a copy but I apparently think I&#8217;m too good for programming books.
</p>
<p>
Finally we touch on the question of distributed source control systems, such as git, mercurial, and bazaar, and whether we should be switching to them or sticking with trusty Subversion.
</p>
<p>
Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.red-sweater.com/blog/504/core-intuition-traveling-luddites/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

