<?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>n8blog &#187; OS X</title>
	<atom:link href="http://www.n8gray.org/blog/category/apple/os_x/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.n8gray.org</link>
	<description>distraction in action</description>
	<lastBuildDate>Thu, 01 Jul 2010 18:21:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Speaking of Backup Bouncer</title>
		<link>http://www.n8gray.org/blog/2010/06/01/speaking-of-backup-bouncer/</link>
		<comments>http://www.n8gray.org/blog/2010/06/01/speaking-of-backup-bouncer/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 23:12:16 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Backup-Bouncer]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=263</guid>
		<description><![CDATA[I recently had the pleasure of being invited to give a talk about Backup Bouncer to the University of Utah Mac Managers Meeting.  I spoke a bit about Backup Bouncer&#8217;s history, gave a brief tour of the HFS+ filesystem, and gave a demo.  If you&#8217;re interested in the topic you can download the [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had the pleasure of being invited to give a talk about Backup Bouncer to the University of Utah Mac Managers Meeting.  I spoke a bit about Backup Bouncer&#8217;s history, gave a brief tour of the <span class="caps">HFS</span>+ filesystem, and gave a demo.  If you&#8217;re interested in the topic you can download the slides, audio, and video from iTunes U:</p>

<p><a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/utah.edu.3945859253?i=1227247986">Slides</a></p>

<p><a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/utah.edu.3946448910?i=1298025857">Audio</a></p>

<p><a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/utah.edu.3945859879?i=2026027899">Video</a></p>

<p>Or you can just search the iTunes Store for &#8220;Backup Bouncer&#8221;.  Surprisingly enough, my talk is the only hit.  <img src='http://www.n8gray.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>

<p>It was nice to get a chance to talk about my work, but a bit strange to give a talk over Skype.  I was expecting a video feed from the other end but there wasn&#8217;t any, so for all I know I was giving the talk to an empty room.  This had the beneficial side effect of totally eliminating any stage fright I might have felt, so maybe it was a net win.</p>

<p>Skype doesn&#8217;t support screen sharing and webcam video simultaneously, so the poor attendees were stuck looking at my (very static) slides while listening to my disembodied voice.  Furthermore, judging by the stuff on iTunes the sound quality of my bluetooth headset let a bit to be desired.  (Geez, you sink a whole $5 into a bluetooth headset and you get junk!  Where is the love?)</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2010%2F06%2F01%2Fspeaking-of-backup-bouncer%2F&amp;linkname=Speaking%20of%20Backup%20Bouncer"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2010/06/01/speaking-of-backup-bouncer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brush-off via Bug Report</title>
		<link>http://www.n8gray.org/blog/2009/09/24/brush-off-via-bug-report/</link>
		<comments>http://www.n8gray.org/blog/2009/09/24/brush-off-via-bug-report/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 17:20:49 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[QLColorCode]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=182</guid>
		<description><![CDATA[As QLColorCode fans are aware, Snow Leopard&#8217;s version of Xcode has caused some trouble for me.  To wit, Xcode 3.2 shipped a Quick Look plugin that registered for the public.source-code uniform type identifier1 (UTI), which is the primary UTI that QLCC registers for so it can do it&#8217;s magic.  In the world of [...]]]></description>
			<content:encoded><![CDATA[<p>As <span class="caps">QLC</span>olorCode fans are aware, <a href="http://www.n8gray.org/blog/2009/09/16/qlcolorcode-20-and-snow-leopard-woes/">Snow Leopard&#8217;s version of Xcode has caused some trouble for me</a>.  To wit, Xcode 3.2 shipped a Quick Look plugin that registered for the public.source-code uniform type identifier<sup class="footnote"><a href="#fn1">1</a></sup> (UTI), which is the primary <span class="caps">UTI </span>that <span class="caps">QLCC </span>registers for so it can do it&#8217;s magic.  In the world of applications it&#8217;s possible to bring up the Finder&#8217;s Get Info dialog on a file of a given type and assign it and it&#8217;s kin to some application, but there&#8217;s no such interface for Quick Look plugins.  Thus, there is no way to express a preference for <span class="caps">QLCC </span>over Xcode without <a href="http://code.google.com/p/qlcolorcode/wiki/ImportantNoteForXcodeUsers">removing or renaming the Xcode plugin</a>.</p>

<p>To make matters worse, the system&#8217;s top-secret non-configurable algorithm for resolving conflicts appears to work backwards from what users might hope for.  The Xcode plugin lives inside an Apple-supplied app bundle in a system directory.  It&#8217;s installed automatically if you choose to install Xcode itself, so it can easily up on your system without you even knowing it.  Compare this to <span class="caps">QLCC. </span> You, the user, have actively downloaded it and installed it for the express purpose of handling source code files in the Quick Look system.  You can easily remove it if you decide you don&#8217;t like it anymore.  Which plugin do you think should win if they conflict?  Apple thinks different.  The system always picks the Xcode plugin over <span class="caps">QLCC.</span></p>

<p>But come on, if you&#8217;re going to have a system like this there ought to be a way of saying &#8220;I want plugin X to handle <span class="caps">UTI</span> Y.&#8221;  This could be a nice shiny user interface somewhere or a down-n-dirty terminal command, but it needs to exist.  I sent a bug report to Apple saying as much (rdar://7240036, mirrored <a href="http://openradar.appspot.com/7240036">here</a>).  I described my problem and made it clear that the solution ought to be a preference system for Quick Look.  At the very least, I said, user-installed plugins should rule supreme.</p>

<p>Apple engineering&#8217;s response?  You can register for more specific <span class="caps">UTI</span>s than public.source-code.  Nothing about why they don&#8217;t want to have a preference system or let user-installed plugins override others.  Just &#8220;register for more specific <span class="caps">UTI</span>s.&#8221;  The idiocy of this suggestion is staggering.  The whole purpose of the hierarchical nature of the <span class="caps">UTI </span>system is to allow folks like me to say &#8220;I handle source code&#8221; without having to list every type of source code.  Highlight, the library that <span class="caps">QLCC </span>is based on, can colorize about 140 programming languages.  Apple engineering, with a straight face, is telling me that I should be registering for 140 <span class="caps">UTI</span>s because Xcode decided to register for the one I actually need.</p>

<p>It gets worse.  Even if I decided to take Apple&#8217;s advice, it&#8217;s impossible to say what those 140 <span class="caps">UTI</span>s should actually be, because there&#8217;s no central authority for registering <span class="caps">UTI</span>s.  (This is another glaring flaw with the <span class="caps">UTI </span>system as implemented by Apple.)  <span class="caps">UTI</span>s like <code>org.ocaml.ocaml-source</code> are generally defined and bound to file extensions like <code>.ml</code> by applications or other entities like Quick Look plugins.  So what happens if you install one app that binds <code>.ml</code> to <code>org.ocaml.ocaml-source</code> and another that binds it to <code>fr.inria.ocaml-source</code>?  Your guess is as good as mine.  That&#8217;s another bit of non-configurable secret sauce.  But I think it&#8217;s safe to say that only one will win.</p>

<p>So let&#8217;s go back to my hypothetical 140-UTI plugin.  Imagine the confusion and headaches when a user&#8217;s <code>.ml</code> files stop being highlighted just because she happened to download some random app that bound <code>.ml</code> to <code>fr.inria.ocaml-source</code> and my plugin has registered for <code>org.ocaml.ocaml-source</code>.  Can you imagine trying to solve these problems for random users of 140 programming languages, of which you actively use maybe 10?</p>

<p>But really, this is just an example of brush-off via bug report.  Despite my slagging I do believe the engineers at Apple are generally quite talented and bright.  They must know that the problem exists, but for whatever reason they&#8217;ve decided it&#8217;s not worth solving.  Furthermore, they&#8217;ve decided it&#8217;s not worth telling some no-name hacker why they think it&#8217;s not worth solving.  But the most insulting thing is that they didn&#8217;t even bother to mark my issue as a duplicate of some other issue requesting a prefs system for Quick Look.  (You&#8217;d better believe that one exists.)</p>

<p>&#8220;Go register for more specific <span class="caps">UTI</span>s, kid, yer bothering me.&#8221;</p>

<p class="footnote" id="fn1"><sup>1</sup> If you&#8217;re unfamiliar with the <span class="caps">UTI </span>system, John Siracusa&#8217;s encyclopedic review of Tiger has <a href="http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/11">a detailed description</a>.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2009%2F09%2F24%2Fbrush-off-via-bug-report%2F&amp;linkname=Brush-off%20via%20Bug%20Report"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2009/09/24/brush-off-via-bug-report/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Instruments problem on Snow Leopard</title>
		<link>http://www.n8gray.org/blog/2009/09/21/instruments-problem-on-snow-leopard/</link>
		<comments>http://www.n8gray.org/blog/2009/09/21/instruments-problem-on-snow-leopard/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 00:34:27 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=181</guid>
		<description><![CDATA[This is a quick note for any iPhone devs out there who are having problems getting their stack traces to show up with symbols in the Leaks instrument when running on the simulator.  It turns out that this is an issue with using the iPhone SDK 3.0.  If you switch your active SDK [...]]]></description>
			<content:encoded><![CDATA[<p>This is a quick note for any iPhone devs out there who are having problems getting their stack traces to show up with symbols in the Leaks instrument when running on the simulator.  It turns out that this is an issue with using the iPhone <span class="caps">SDK</span> 3.0.  If you switch your active <span class="caps">SDK </span>to 3.1 in Xcode then the symbols will appear again.  Apple says they&#8217;re &#8220;aggressively&#8221; working on the issue.</p>

<p>For history&#8217;s sake, I&#8217;m observing this on Snow Leopard 10.6.1, Xcode 3.2, Instruments 2.0.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2009%2F09%2F21%2Finstruments-problem-on-snow-leopard%2F&amp;linkname=Instruments%20problem%20on%20Snow%20Leopard"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2009/09/21/instruments-problem-on-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QLColorCode 2.0 and Snow Leopard woes</title>
		<link>http://www.n8gray.org/blog/2009/09/16/qlcolorcode-20-and-snow-leopard-woes/</link>
		<comments>http://www.n8gray.org/blog/2009/09/16/qlcolorcode-20-and-snow-leopard-woes/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 06:56:19 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[QLColorCode]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=180</guid>
		<description><![CDATA[Update: Thanks to a misconfiguration on my part, QLCC 2.0.0 didn&#8217;t work on Leopard.  The problem is solved in QLCC 2.0.2.


Continuing on my &#8220;update side projects for Snow Leopard&#8221; theme, I&#8217;ve just rolled a new release of QLColorCode.  I added support for a few new languages, including Scala, which is a personal fave. [...]]]></description>
			<content:encoded><![CDATA[<blockquote><strong>Update:</strong> Thanks to a misconfiguration on my part, <span class="caps">QLCC</span> 2.0.0 didn&#8217;t work on Leopard.  The problem is solved in <span class="caps">QLCC</span> 2.0.2.
</blockquote>

<p>Continuing on my &#8220;update side projects for Snow Leopard&#8221; theme, I&#8217;ve just rolled a new release of <span class="caps">QLC</span>olorCode.  I added support for a few new languages, including Scala, which is a personal fave.  I also fixed a bug or two and finally upgraded the bundled version of Highlight from 2.6.6 to 2.12, which was long overdue.</p>

<p>On the &#8216;meta&#8217; side, I moved the project&#8217;s source code from google code&#8217;s subversion to github.  I&#8217;ve been using git a lot lately so I expect I&#8217;ll do the same for my other projects as well.  Once you&#8217;ve gotten used to firing off branches for every little thing that crosses your mind and seamlessly switching between them at a moment&#8217;s notice it becomes hard to work in the <span class="caps">SVN </span>mindset again.</p>

<p>Unfortunately, <span class="caps">QLCC </span>has hit a bit of a roadblock with Snow Leopard.  More specifically, it&#8217;s not SnoLep that&#8217;s giving me a headache, it&#8217;s Xcode 3.2.  With the new Xcode Apple decided to include their own QL plugin for source code.  That&#8217;s great, I say, more choice is good!  <span class="caps">QLCC </span>will render everything that Xcode renders plus OCaml files, Scala files, and all sorts of other interesting languages that Xcode can&#8217;t handle.  I&#8217;m not worried about <span class="caps">QLCC </span>losing in a fair fight.  But no, Apple doesn&#8217;t fight fair.</p>

<p>It turns out that Quick Look always picks the Xcode plugin when rendering source code files (on my machine, at least).  I don&#8217;t think the Xcode plugin gets special treatment, it just happens to win in the algorithm QL uses to resolve plugin conflicts.  What is that algorithm?  Nobody outside of Apple knows.  It could be a coin-flip for all we know.  Heck, after a reboot it&#8217;s possible <span class="caps">QLCC </span>will always win!  In any case, when there are two plugins that both want to render files of type <code>public.source-code</code> it seems like maybe letting the user pick one would be a good idea, right?  Apple doesn&#8217;t think so.  No, they don&#8217;t want users to worry their pretty little heads about such matters.  Don&#8217;t worry about the algorithm, don&#8217;t worry about making choices, it&#8217;ll all be juuust fine.  Have a lollipop.</p>

<p>Except it&#8217;s not all fine.  Because let&#8217;s say a user decides that they prefer <span class="caps">QLCC </span>over the Xcode plugin.  Their only option for getting <span class="caps">QLCC </span>consistently and predictably is to somehow disable Xcode&#8217;s plugin.  They could remove it, rename it, or move it somewhere that <code>quicklookd</code> won&#8217;t find it.  But who wants to do something like that to an Apple-supplied file?  Nobody.  Even worse, Xcode&#8217;s application bundle is cryptographically signed.  <del datetime="2009-09-18T06:50:27+00:00">I believe that disabling the plugin by any of those means will invalidate the signature, though I haven&#8217;t confirmed this as fact.</del></p>

<p><strong>Update:</strong> After further research, it appears that disabling the plugin will <strong>not</strong> invalidate the signature on Xcode itself, so there shouldn&#8217;t be any terrible consequences if you choose to do so.  The plugin is located at: <code>/Developer/Applications/Xcode.app/Contents/Library/QuickLook/SourceCode.qlgenerator</code></p>

<p>So anyhow, <span class="caps">QLC</span>olorCode 2.0 is out.  It works with Snow Leopard.  If you have Xcode 3.2 installed you&#8217;ll probably never get to see it do its thing, but maybe one or two of you will still get something out of it.</p>

<p>For what it&#8217;s worth, quick look still sends .plist files to <span class="caps">QLCC. </span> Xcode&#8217;s plugin won&#8217;t touch those things.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2009%2F09%2F16%2Fqlcolorcode-20-and-snow-leopard-woes%2F&amp;linkname=QLColorCode%202.0%20and%20Snow%20Leopard%20woes"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2009/09/16/qlcolorcode-20-and-snow-leopard-woes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Backup Bouncer 0.2.0</title>
		<link>http://www.n8gray.org/blog/2009/09/15/backup-bouncer-020/</link>
		<comments>http://www.n8gray.org/blog/2009/09/15/backup-bouncer-020/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 01:49:59 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Backup-Bouncer]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=179</guid>
		<description><![CDATA[I just wrapped up Backup Bouncer 0.2.0, with the major change being that it now builds on Snow Leopard.  Get it at the usual place.  BB used to include a program called ctool that I had thought about using but never actually used.  This ctool program was unmaintained and didn&#8217;t build on [...]]]></description>
			<content:encoded><![CDATA[<p>I just wrapped up Backup Bouncer 0.2.0, with the major change being that it now builds on Snow Leopard.  Get it at <a href="http://www.n8gray.org/code/backup-bouncer/">the usual place</a>.  BB used to include a program called ctool that I had thought about using but never <strong>actually</strong> used.  This ctool program was unmaintained and didn&#8217;t build on SnoLep, so I finally just wiped it out.</p>

<p>All is not quite well on the Snow Leopard front, however.  The rsync that Apple ships (at least the one in 10.6.1) has a bug.  When copying a <span class="caps">FIFO </span>it attempts to copy the <strong>contents</strong> of the <span class="caps">FIFO. </span> If you know what a <span class="caps">FIFO </span>is, you know why this is bad.  So rsync hangs in the <code>90-fifo</code> test of the test suite.  When running from a terminal you can work around this by just hitting Control-C, which will cause the copy to stop and the other copiers to be tested.  If you want to avoid the hang you can rename <code>tests.d/90-fifo.test</code> to <code>tests.d/90-fifo.test.disabled</code> or whatever floats your boat.  I haven&#8217;t done that already because, well, a hang is arguably a valid test result!</p>

<p>Oh, and I also fixed a bug with the <span class="caps">BSD </span>flags test.  If you care about that stuff you should re-test.</p>

<p>One other interesting tidbit &#8212; I changed the &#8220;lots of metadata&#8221; test to lock the file.  This trips up some copiers that duplicate the &#8220;locked&#8221; status before setting up other metadata, causing the other metadata to be lost.</p>

<p>Much to my shame, I had an e-mail upheaval and I can&#8217;t find the names of the individuals who reported the <span class="caps">BSD </span>flags bug and the &#8220;early locking&#8221; phenomenon.  If that was you, please drop me a message and I&#8217;ll give you the credit you deserve.</p>

<p><strong><span class="caps">UPDATE</span>:</strong>  It was Rob Kennedy who reported the <span class="caps">BSD </span>flags bug and the &#8220;early locking&#8221; phenomenon.  I hadn&#8217;t thought to search through my blog comments.  Silly me!  Thanks a lot for those tips, Rob!</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2009%2F09%2F15%2Fbackup-bouncer-020%2F&amp;linkname=Backup%20Bouncer%200.2.0"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2009/09/15/backup-bouncer-020/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Printing from OS X 10.5 to Ubuntu</title>
		<link>http://www.n8gray.org/blog/2008/06/12/printing-from-os-x-105-to-ubuntu/</link>
		<comments>http://www.n8gray.org/blog/2008/06/12/printing-from-os-x-105-to-ubuntu/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 02:20:15 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=175</guid>
		<description><![CDATA[This took me waaaay too long to figure out.  A while back I set up printer sharing (with browsing) on my Ubuntu-based server.  My Mac (running Tiger at the time) found the server just fine and it all just worked &#8212; I couldn&#8217;t believe how simple it was!  But then I upgraded [...]]]></description>
			<content:encoded><![CDATA[<p>This took me waaaay too long to figure out.  A while back I set up printer sharing (with browsing) on my Ubuntu-based server.  My Mac (running Tiger at the time) found the server just fine and it all just worked &#8212; I couldn&#8217;t believe how simple it was!  But then I upgraded to Leopard, and among the (numerous) casualties was the shared printer.  No matter what I tried, what protocol I used, what driver I used, the shared printer just wouldn&#8217;t work.  After hours of banging my head against the keyboard I let it go.  About 9 months have passed, and today I decided to take one more swing at.  Can you believe it?  I found the problem!  There were two problems really.</p>

<p>First, to access a shared printer on <strong>another</strong> machine, you have to turn on print sharing on <strong>your</strong> machine.  This defies all logic, but there you go.</p>

<p>Second, for some utterly inscrutable reason <a href="http://docs.info.apple.com/article.html?artnum=306984">Apple decided to *dis*able the <span class="caps">CUPS </span>browsing protocol, leaving only Bonjour browsing working</a>.  ????  Stupid.  Stupid.  Stupid.  It&#8217;s as if they said &#8220;let&#8217;s make sure Mac users will have lots of trouble printing to Linux servers, that&#8217;ll improve our customer satisfaction!&#8221;  To fix this lameness, do the following:</p>

<code> cupsctl BrowseProtocols='&quot;cups dnssd&quot;'</code>

<p>Combining these two tips, the shared printer <strong>finally</strong> appeared in the &#8220;Default&#8221; pane of the new printer dialog and printing to it just worked.  Hopefully Apple makes this more sensible in Snow Leopard&#8230;</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2008%2F06%2F12%2Fprinting-from-os-x-105-to-ubuntu%2F&amp;linkname=Printing%20from%20OS%20X%2010.5%20to%20Ubuntu"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2008/06/12/printing-from-os-x-105-to-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Backup Bouncer and Time Machine</title>
		<link>http://www.n8gray.org/blog/2008/06/09/backup-bouncer-and-time-machine/</link>
		<comments>http://www.n8gray.org/blog/2008/06/09/backup-bouncer-and-time-machine/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 00:18:36 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Backup-Bouncer]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=174</guid>
		<description><![CDATA[Oh Mama!  Another Backup Bouncer post!  You might think that I, the author of Backup Bouncer, the crusader for end-user verification of backup tools, would have run BB on Time Machine at some point.  If so, you have seriously underestimated my laziness.  But this morning I got an e-mail from a [...]]]></description>
			<content:encoded><![CDATA[<p>Oh Mama!  Another Backup Bouncer post!  You might think that I, the author of Backup Bouncer, the crusader for end-user verification of backup tools, would have run BB on Time Machine at some point.  If so, you have seriously underestimated my laziness.  But this morning I got an e-mail from a user asking for help testing TM with <span class="caps">BB, </span>and this finally spurred me to do the test myself.</p>

<p>Here&#8217;s how you test Time Machine with Backup Bouncer:</p>



<pre>$ mkdir ~/bb
# We need to trick BB into thinking this is a volume it created
$ touch ~/bb/bbouncer-vol
$ sudo bbouncer create ~/bb
# Now do a Time Machine backup and wait till it's done
$ mv ~/bb ~/bb-orig
# Now restore the ~/bb directory from Time Machine.  
# Try not to catch SPACE MADNESS!!!
$ bbouncer verify -d ~/bb-orig ~/bb
</pre>



<p>On my Leopard 10.5.3 machine here&#8217;s what I get with BB 0.1.3:</p>



<pre>Verifying:    basic-permissions ... ok (Critical)
Verifying:           timestamps ... ok (Critical)
Verifying:             symlinks ... ok (Critical)
Verifying:    symlink-ownership ... FAIL 
Verifying:            hardlinks ... FAIL (Important)
Verifying:       resource-forks ... 
   Sub-test:             on files ... ok (Critical)
   Sub-test:  on hardlinked files ... FAIL (Important)
Verifying:         finder-flags ... ok (Critical)
Verifying:         finder-locks ... ok 
Verifying:        creation-date ... ok 
Verifying:            bsd-flags ... FAIL 
Verifying:       extended-attrs ... 
   Sub-test:             on files ... ok (Important)
   Sub-test:       on directories ... ok (Important)
   Sub-test:          on symlinks ... ok 
Verifying: access-control-lists ... 
   Sub-test:             on files ... ok (Important)
   Sub-test:              on dirs ... ok (Important)
Verifying:                 fifo ... FAIL 
Verifying:              devices ... FAIL 
Verifying:          combo-tests ... 
   Sub-test:  xattrs + rsrc forks ... ok 
   Sub-test:     lots of metadata ... ok 
</pre>



<p>The only annoyance is that hardlinks aren&#8217;t preserved, but that&#8217;s not surprising considering the way hardlinks are used internally by TM to prevent wasted space.  (I should point out that the hardlink failure here is <strong>not</strong> the same as <a href="http://www.n8gray.org/blog/2008/06/09/more-backup-bouncer/">the Apple rsync one I mentioned earlier today</a>, and it&#8217;s not nearly as bad.)  These results are not perfect but I would have no problem recommending TM backups to any less-than-hardcore user.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2008%2F06%2F09%2Fbackup-bouncer-and-time-machine%2F&amp;linkname=Backup%20Bouncer%20and%20Time%20Machine"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2008/06/09/backup-bouncer-and-time-machine/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>More Backup Bouncer</title>
		<link>http://www.n8gray.org/blog/2008/06/09/more-backup-bouncer/</link>
		<comments>http://www.n8gray.org/blog/2008/06/09/more-backup-bouncer/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 23:09:47 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Backup-Bouncer]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=173</guid>
		<description><![CDATA[I just released Backup Bouncer 0.1.3.  I&#8217;ve changed the output format to print the &#8220;priority&#8221; of a test along with its outcome, which hopefully should clear up some confusion among less experienced users.  On a tip from Patrick Power I&#8217;ve added a new test that combines resource forks and hard links.  Unfortunately, [...]]]></description>
			<content:encoded><![CDATA[<p>I just released <a href="http://www.n8gray.org/code/backup-bouncer/">Backup Bouncer 0.1.3</a>.  I&#8217;ve changed the output format to print the &#8220;priority&#8221; of a test along with its outcome, which hopefully should clear up <a href="http://www.n8gray.org/blog/2008/06/02/backup-bouncer-is-working/">some confusion</a> among less experienced users.  On a tip from <a href="http://www.n8gray.org/blog/2007/11/03/backup-bouncer-012/#comment-20735">Patrick Power</a> I&#8217;ve added a new test that combines resource forks and hard links.  Unfortunately, Apple&#8217;s rsync fails this test in OS X 10.5.3:</p>



<pre>------------------ rsync-apple ------------------
Verifying:    basic-permissions ... ok (Critical)
Verifying:           timestamps ... ok (Critical)
Verifying:             symlinks ... ok (Critical)
Verifying:    symlink-ownership ... ok 
Verifying:            hardlinks ... ok (Important)
Verifying:       resource-forks ... 
   Sub-test:             on files ... ok (Critical)
   Sub-test:  on hardlinked files ... FAIL (Important)
Verifying:         finder-flags ... ok (Critical)
Verifying:         finder-locks ... FAIL 
Verifying:        creation-date ... FAIL 
Verifying:            bsd-flags ... ok 
Verifying:       extended-attrs ... 
   Sub-test:             on files ... ok (Important)
   Sub-test:       on directories ... ok (Important)
   Sub-test:          on symlinks ... FAIL 
Verifying: access-control-lists ... 
   Sub-test:             on files ... ok (Important)
   Sub-test:              on dirs ... ok (Important)
Verifying:                 fifo ... ok 
Verifying:              devices ... ok 
Verifying:          combo-tests ... 
   Sub-test:  xattrs + rsrc forks ... ok 
   Sub-test:     lots of metadata ... ok 
</pre>



<p>If you add a resource fork to a file that&#8217;s hardlinked to another file then only one of the files gets copied.  <img src='http://www.n8gray.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />   This, no doubt, is due to the hackery involved to make <span class="caps">HFS</span>+ look like it has a real hardlinks when it actually doesn&#8217;t.</p>

<p>Some of the changes in BB 0.1.3 were a bit invasive and Bash is not the greatest of programming languages, so please keep your eyes open for bugs.  If you see something in your results that doesn&#8217;t make sense just let me know.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2008%2F06%2F09%2Fmore-backup-bouncer%2F&amp;linkname=More%20Backup%20Bouncer"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2008/06/09/more-backup-bouncer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Backup Bouncer is Working, Confusing, Annoying Developers</title>
		<link>http://www.n8gray.org/blog/2008/06/02/backup-bouncer-is-working/</link>
		<comments>http://www.n8gray.org/blog/2008/06/02/backup-bouncer-is-working/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 20:05:38 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Backup-Bouncer]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/?p=172</guid>
		<description><![CDATA[A friend recently pointed out that BB gets some love on the Carbon Copy Cloner product page.  This is quite satisfying to me, since my indirect goal with BB was to get it into the hands of the folks making the tools.  The primary goal was always to let users validate backup tools [...]]]></description>
			<content:encoded><![CDATA[<p>A friend recently pointed out that BB gets some love on <a href="http://www.bombich.com/software/ccc.html">the Carbon Copy Cloner product page</a>.  This is quite satisfying to me, since my indirect goal with BB was to get it into the hands of the folks making the tools.  The primary goal was always to let users validate backup tools on their own, but it was always clear that this would end up putting pressure on the tool makers.  When a user comes to you and says, &#8220;your tool fails backup bouncer test foo,&#8221; you either pay attention or lose a customer.  This is very empowering for end-users, but one can see how it has the potential to irritate tool developers if they disagree with <span class="caps">BB&#8217;</span>s test methodology.</p>

<p><span id="more-172"></span></p>

<p>So I wasn&#8217;t too surprised when a user forwarded me a somewhat exasperated-sounding note from Shirt Pocket software explaining why SD doesn&#8217;t pass <span class="caps">BB&#8217;</span>s <span class="caps">FIFO </span>and device file tests.  I won&#8217;t paste the note in here, since I feel that would be poor form, but I will pass along their rationale for not copying these files.  They feel that <span class="caps">FIFO</span>s and device files are normally system-created files that are not meant to be preserved across reboots or backups.  For that reason, SD doesn&#8217;t back up these filesystem object types at all.</p>

<p>One can understand how Shirt Pocket arrived at this policy.  Writing a good <i>system-level</i> backup tool is more subtle than it might appear.  There are actually parts of the filesystem that you <strong>don&#8217;t</strong> want to back up, like caches, VM files, and so forth.  You <strong>don&#8217;t</strong> want to back up the device files under <code>/dev</code>, since those get created dynamically depending on what devices are attached.  In short, there are some parts of the filesystem that are tied to the state of the running system, and these should not normally be copied in a backup.</p>

<p>The problem with Shirt Pocket&#8217;s policy is that although it is certainly true that the system-created <span class="caps">FIFO</span>s and device files should not be copied in a system-level backup, there are legitimate reasons a <strong>user</strong> might create <span class="caps">FIFO</span>s or device files, and there&#8217;s every reason to preserve those user-created objects during a backup.  Don&#8217;t get me wrong &#8212; this is obscure stuff that only advanced <span class="caps">UNIX </span>hackers would do, but hey, advanced <span class="caps">UNIX </span>hackers need reliable backups too!  <span class="caps">SD&#8217;</span>s policy is, <span class="caps">IMHO, </span>overly broad.  I would be much more comfortable if SD excluded filesystem <strong>locations</strong> rather than entire classes of filesystem objects.</p>

<p>The Shirt Pocket letter also accused BB of being &#8220;rather misleading to most&#8221; on this issue because it makes people worry about something that won&#8217;t cause them any problems.  Although I vehemently disagree with the &#8220;misleading&#8221; characterization, I agree that not every BB test is equally important in practical terms.  Most end-users will absolutely not care that tool X doesn&#8217;t backup <span class="caps">FIFO</span>s.  This is why BB has <strong>always</strong> had a prioritization feature.  Quoting from the usage string of bbouncer:</p>


<pre>-T &lt;set&gt;     Use the given set of tests.  &lt;set&gt; can be either 
             &quot;critical&quot;, for tests whose failure will cause problems
             for average users, or &quot;important&quot;, for tests whose
             failure may not cause problems for many users, but which
             may be important to power-users or may qualify as 
             critical in the future.
</pre>



<p>The <span class="caps">FIFO</span>/device file tests are not included in either the &#8220;critical&#8221; or &#8220;important&#8221; set of tests.  So I&#8217;m saying (and have always said) that most users, even most power users, won&#8217;t care about them.  So why test for them at all?  Consider the situation before <a href="http://blog.plasticsfuture.org/2006/03/05/the-state-of-backup-and-cloning-tools-under-mac-os-x/">Maurits&#8217; blogged on backups</a> and BB existed.  Most people, myself included, didn&#8217;t even know what the full set of OS X filesystem object types and metadata <strong>was</strong>.  Maurits filled us in on what existed, but knowing how to test for preservation was still a black art.  BB was meant to democratize that testing, but also to act as an <strong>exhaustive</strong> test set.  (I don&#8217;t claim to have achieved even close to 100% coverage, but that&#8217;s the goal.)  So it&#8217;s important to me that BB include tests for any metadatum or filesystem object that can conceivably have a reason to be backed up.</p>

<p>Having said that, I&#8217;ll concede there&#8217;s a usability bug here.  The -T option is unlikely to be discovered by casual users, and they&#8217;re the ones who need it most!  It&#8217;s not used by <code>autopilot</code> and it&#8217;s not even documented in the <span class="caps">README. </span> So I think I&#8217;ll be making the following changes:</p>


<ul>
<li>I&#8217;ll document -T more pervasively</li>
<li>I&#8217;ll have the priority of a test appear in <span class="caps">BB&#8217;</span>s output</li>
<li>I&#8217;ll have BB default to running in &#8220;important&#8221; mode, changing the exhaustive mode to an opt-in option</li>
</ul>



<p>Hopefully this will help prevent confusion for casual users and ease the support burden of tool developers while maintaining <span class="caps">BB&#8217;</span>s goals of providing easy backup tool validation and exhaustive test coverage.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2008%2F06%2F02%2Fbackup-bouncer-is-working%2F&amp;linkname=Backup%20Bouncer%20is%20Working%2C%20Confusing%2C%20Annoying%20Developers"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2008/06/02/backup-bouncer-is-working/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>QLColorCode 1.0</title>
		<link>http://www.n8gray.org/blog/2008/03/26/qlcolorcode-10/</link>
		<comments>http://www.n8gray.org/blog/2008/03/26/qlcolorcode-10/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 06:18:40 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[QLColorCode]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2008/03/26/qlcolorcode-10/</guid>
		<description><![CDATA[I just put up the latest release of QLColorCode, and it&#8217;s a doozy!  Well, not really, but it does (probably) fix a crash bug that was biting me pretty frequently.  It also adds some more miscellaneous language UTIs and lets you put a cap on the size of rendered files so you don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>I just put up the latest release of <span class="caps">QLC</span>olorCode, and it&#8217;s a doozy!  Well, not really, but it does (probably) fix a crash bug that was biting me pretty frequently.  It also adds some more miscellaneous language <span class="caps">UTI</span>s and lets you put a cap on the size of rendered files so you don&#8217;t accidentally render massive 50MB <span class="caps">SQL </span>dumps and such.  All in all, it seems like this project has reached a stable point so I&#8217;ve gone ahead and called it version 1.0.</p>

<p><a href="http://qlcolorcode.googlecode.com/">Get it at the goog</a>.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2008%2F03%2F26%2Fqlcolorcode-10%2F&amp;linkname=QLColorCode%201.0"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2008/03/26/qlcolorcode-10/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Announcing QLColorCode</title>
		<link>http://www.n8gray.org/blog/2007/12/03/announcing-qlcolorcode/</link>
		<comments>http://www.n8gray.org/blog/2007/12/03/announcing-qlcolorcode/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 00:11:50 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[QLColorCode]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/12/03/announcing-qlcolorcode/</guid>
		<description><![CDATA[One of the features I&#8217;ve really liked in Leopard has been Quick Look.  It&#8217;s a really nice way to browse files quickly, without opening up a bunch of random apps.  However, the QL plugin that Apple provides for reading source code is, well, just plain boring.  You just get the text, in [...]]]></description>
			<content:encoded><![CDATA[<p>One of the features I&#8217;ve really liked in Leopard has been Quick Look.  It&#8217;s a really nice way to browse files quickly, without opening up a bunch of random apps.  However, the QL plugin that Apple provides for reading source code is, well, just plain boring.  You just get the text, in black &#038; white.  We all know how nice syntax highlighting is, so why didn&#8217;t they give us some of that?</p>

<p>Well, it turns out to be trivially easy to do a QL plugin that renders <span class="caps">HTML. </span> Mix in <a href="http://pygments.org/">Pygments</a>, the very capable syntax highlighting engine that can output <span class="caps">HTML, </span>and you&#8217;ve got a syntax highlighting QL plugin in under 100 lines of code!</p>

<p><img id="image153" src="http://www.n8gray.org/wp-content/uploads/2007/12/qlcolorcodeminisnapshot.png" alt="A Small Snapshot of QLColorCode" /></p>

<p>Rather than host this project myself I&#8217;ve decided to try making a Google Code project.  You can find it here:</p>

<p><a href="http://code.google.com/p/qlcolorcode/">http://code.google.com/p/qlcolorcode/</a></p>

<p>Enjoy!</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F12%2F03%2Fannouncing-qlcolorcode%2F&amp;linkname=Announcing%20QLColorCode"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/12/03/announcing-qlcolorcode/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>ScriptExport 1.0 is Out</title>
		<link>http://www.n8gray.org/blog/2007/09/19/scriptexport-10-is-out/</link>
		<comments>http://www.n8gray.org/blog/2007/09/19/scriptexport-10-is-out/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 02:37:59 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[ScriptExport]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/09/19/scriptexport-10-is-out/</guid>
		<description><![CDATA[I finally got around to updating ScriptExport to the official iPhoto &#8216;08 export plugin SDK, added a nice icon and treated this as a good excuse to call it 1.0.  You can get the result in the usual place.  Here&#8217;s the ChangeLog:

      VERY LIKELY BREAKS OLD SCRIPTEXPORT SCRIPTS!
 [...]]]></description>
			<content:encoded><![CDATA[I finally got around to updating ScriptExport to the official iPhoto &#8216;08 export plugin <span class="caps">SDK, </span>added a nice icon and treated this as a good excuse to call it 1.0.  You can get the result in <a href="/code/scriptexport/">the usual place</a>.  Here&#8217;s the ChangeLog:<br />
<ul>
      <li><span class="caps">VERY LIKELY BREAKS OLD SCRIPTEXPORT SCRIPTS</span>!
      <li><span class="caps">BREAKS COMPATIBILITY WITH IPHOTO</span> 6 <span class="caps">AND EARLIER</span>!
      <li>Ported to the official iPhoto &#8216;08 Export Plugin <span class="caps">API.</span>
      <li>The set of metadata available has changed in the iPhoto &#8216;08 <span class="caps">API, </span>and these changes are reflected in ScriptExport.  Summarizing the differences:
            <ul>
                <li> iPImageRanking is renamed iPImageRating
                <li> iPImageCaption is renamed iPImageTitle
                <li> Added iPImageIsPortrait and iPImageIsEdited
                <li> iPImageArchiveDate and iPImageModifiedDate no longer exist
                <li> Albums are handled much differently, so iPAlbumName, iPAlbumComments, and iPAlbumMusicPath no longer exist.  See the documentation above for their replacements.
            </ul>
      <li>The output window Auto-scrolls!  Thanks to Kevin Reid for the example code.
      <li>Fixed a crash when the source file for an image is missing.
</ul><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F09%2F19%2Fscriptexport-10-is-out%2F&amp;linkname=ScriptExport%201.0%20is%20Out"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/09/19/scriptexport-10-is-out/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Goin&#8217; Legit</title>
		<link>http://www.n8gray.org/blog/2007/08/11/goin-legit/</link>
		<comments>http://www.n8gray.org/blog/2007/08/11/goin-legit/#comments</comments>
		<pubDate>Sat, 11 Aug 2007 22:35:00 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[ScriptExport]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/08/11/goin-legit/</guid>
		<description><![CDATA[When you&#8217;ve got a project like ScriptExport that uses an undocumented plugin API for an Apple product you tend to greet product releases (and even updates) with a bemused sigh.  The iPhoto export API has actually been pretty stable, but it&#8217;s always unsettled me to think of the extra work in store if Apple [...]]]></description>
			<content:encoded><![CDATA[<p>When you&#8217;ve got a project like ScriptExport that uses an undocumented plugin <span class="caps">API </span>for an Apple product you tend to greet product releases (and even updates) with a bemused sigh.  The iPhoto export <span class="caps">API </span>has actually been pretty stable, but it&#8217;s always unsettled me to think of the extra work in store if Apple had decided to change or remove it.  Happily, the chances of that happening have now diminished significantly.  The latest <span class="caps">ADC </span>(Apple Developer Connection) mail contained this paragraph:</p>

<blockquote>Download the iPhoto &#8216;08 Export Plug-in <span class="caps">SDK</span><br /><br />

<span class="caps">ADC</span> Members can download the <a href="https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=19837">iPhoto 2008 <span class="caps">SDK </span>package</a> which includes documentation and sample code on how to write iPhoto Export plug-ins supported by iPhoto &#8216;08. With step-by-step instructions, you&#8217;ll learn how to make a simple file exporter plug-in using iPhoto&#8217;s Export Plug-in <span class="caps">API.</span> This sample plug-in will allow users to set export image size, quality, and whether or not to embed metadata in the output image.</blockquote>

<p>I haven&#8217;t had a chance to look at the <span class="caps">API </span>yet, but yay!  Hopefully the documentation will clear up some of the more confusing aspects of the <span class="caps">API </span>(like the threading model, for example), and I&#8217;m sure this means good things for its longer-term stability.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F08%2F11%2Fgoin-legit%2F&amp;linkname=Goin%26%238217%3B%20Legit"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/08/11/goin-legit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xar rox</title>
		<link>http://www.n8gray.org/blog/2007/05/07/xar-rox/</link>
		<comments>http://www.n8gray.org/blog/2007/05/07/xar-rox/#comments</comments>
		<pubDate>Mon, 07 May 2007 23:18:16 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Backup-Bouncer]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/05/07/xar-rox/</guid>
		<description><![CDATA[Let&#8217;s hear it for xar, the first copier to ace the Backup Bouncer test suite!  In my last post I mentioned that they were just one test away, and now that bug 19 is fixed they&#8217;ve nailed it.  Kudos to Rob Braun and the rest of the folks working on xar (if there [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s hear it for <a href="http://code.google.com/p/xar/">xar</a>, the first copier to <strong>ace</strong> the Backup Bouncer test suite!  In <a href="/blog/2007/05/02/hail-to-the-xar/">my last post</a> I mentioned that they were just one test away, and now that <a href="http://code.google.com/p/xar/issues/detail?id=19">bug 19</a> is fixed they&#8217;ve nailed it.  Kudos to Rob Braun and the rest of the folks working on xar (if there are any others).</p>

<p>This is only in the svn version, folks, so don&#8217;t go downloading 1.4 and expecting greatness.</p>



<pre>------------------ xar ------------------
Verifying:    basic-permissions ... ok
Verifying:           timestamps ...
   Sub-test:    modification time ... ok
ok
Verifying:             symlinks ... ok
Verifying:    symlink-ownership ... ok
Verifying:            hardlinks ... ok
Verifying:       resource-forks ... ok
Verifying:         finder-flags ... ok
Verifying:         finder-locks ... ok
Verifying:        creation-date ... ok
Verifying:            bsd-flags ... ok
Verifying:       extended-attrs ...
   Sub-test:             on files ... ok
   Sub-test:       on directories ... ok
   Sub-test:          on symlinks ... ok
ok
Verifying: access-control-lists ...
   Sub-test:             on files ... ok
   Sub-test:              on dirs ... ok
ok
Verifying:                 fifo ... ok
Verifying:              devices ... ok
Verifying:          combo-tests ...
   Sub-test:  xattrs + rsrc forks ... ok
   Sub-test:     lots of metadata ... ok
ok
</pre>



<p>Hmm, I guess that means it&#8217;s time to start thinking up some harder tests.  Single-file backups?  These are tricky on Mac because the finder puts the metadata for a whole folder into a single .DS_Store file.  To do single-file backup right you need to be able to extract that one file&#8217;s metadata from the .DS_Store file, archive it, then reinsert it when you do a restore, all without disturbing the metadata of any other files in the folder.  It can be done, but it&#8217;s not the easiest thing in the world.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F05%2F07%2Fxar-rox%2F&amp;linkname=xar%20rox"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/05/07/xar-rox/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Hail to the xar!</title>
		<link>http://www.n8gray.org/blog/2007/05/02/hail-to-the-xar/</link>
		<comments>http://www.n8gray.org/blog/2007/05/02/hail-to-the-xar/#comments</comments>
		<pubDate>Thu, 03 May 2007 02:10:09 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Backup-Bouncer]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/05/02/hail-to-the-xar/</guid>
		<description><![CDATA[I just tried testing the latest SVN HEAD revision of xar, and wow.



------------------ xar ------------------
Verifying:    basic-permissions ... ok
Verifying:           timestamps ...
   Sub-test:    modification time ... ok
ok
Verifying:             [...]]]></description>
			<content:encoded><![CDATA[<p>I just tried testing the latest <span class="caps">SVN HEAD </span>revision of <a href="http://code.google.com/p/xar/">xar</a>, and wow.</p>



<pre>------------------ xar ------------------
Verifying:    basic-permissions ... ok
Verifying:           timestamps ...
   Sub-test:    modification time ... ok
ok
Verifying:             symlinks ... ok
Verifying:    symlink-ownership ... ok
Verifying:            hardlinks ... ok
Verifying:       resource-forks ... ok
Verifying:         finder-flags ... ok
Verifying:         finder-locks ... ok
Verifying:        creation-date ... FAIL
Verifying:            bsd-flags ... ok
Verifying:       extended-attrs ...
   Sub-test:             on files ... ok
   Sub-test:       on directories ... ok
   Sub-test:          on symlinks ... ok
ok
Verifying: access-control-lists ...
   Sub-test:             on files ... ok
   Sub-test:              on dirs ... ok
ok
Verifying:                 fifo ... ok
Verifying:              devices ... ok
Verifying:          combo-tests ...
   Sub-test:  xattrs + rsrc forks ... ok
   Sub-test:     lots of metadata ... ok
ok
</pre>



<p>Now that&#8217;s one impressive result!  They&#8217;ve got a bug in their tracker for the creation date issue, so hopefully it&#8217;ll be solved soon.  There&#8217;s still an unfortunate issue with xar that prevents me from gushing uncontrollably about it &#8212; you can&#8217;t build a &#8220;xarpipe&#8221; to copy filesystem subtrees around.  In other words, you always have to archive to a file, then unarchive from that file.  This means that if you want to, say, transfer all your files from an old drive to a new drive you&#8217;d better have a third drive around, or your new drive had better be twice as big as the size of the files on your old one.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F05%2F02%2Fhail-to-the-xar%2F&amp;linkname=Hail%20to%20the%20xar%21"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/05/02/hail-to-the-xar/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introducing Backup-Bouncer</title>
		<link>http://www.n8gray.org/blog/2007/04/27/introducing-backup-bouncer/</link>
		<comments>http://www.n8gray.org/blog/2007/04/27/introducing-backup-bouncer/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 21:50:44 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Backup-Bouncer]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/04/27/introducing-backup-bouncer/</guid>
		<description><![CDATA[Note: Since everybody is linking to this page as the canonical Backup Bouncer document, I should point out that the project page with the latest version is located here, and the source code and issue tracker are located here.  Also, the Backup Bouncer category of the blog has all the posts related to BB.


Do [...]]]></description>
			<content:encoded><![CDATA[<blockquote><b>Note:</b> Since everybody is linking to this page as the canonical Backup Bouncer document, I should point out that the project page with the latest version is located <a href="http://www.n8gray.org/code/backup-bouncer/">here</a>, and the source code and issue tracker are located <a href="http://github.com/n8gray/Backup-Bouncer">here</a>.  Also, <a href="http://www.n8gray.org/blog/category/projects/backup-bouncer/">the Backup Bouncer category of the blog</a> has all the posts related to <span class="caps">BB.</span>
</blockquote>

<p>Do you back up your files?  Of course you do!  (Right?  Right???)  But do your backups work?  Really?  Are you sure?  Have you checked?</p>

<p>Doing backups in OS X has always been a bit nerve-wracking.  We&#8217;ve got resource forks, Finder flags, and various other odd metadata that don&#8217;t exist on other platforms.  With the advent of Tiger, Apple told us that cp, tar, and rsync would finally be aware of our metadata and preserve it properly.  And there was much rejoicing.</p>

<p>But then someone (or something?) named maurits actually <strong>tested</strong> these tools (and quite a few others), and <a href="http://blog.plasticsfuture.org/2006/03/05/the-state-of-backup-and-cloning-tools-under-mac-os-x/">the results weren&#8217;t pretty</a>.  This was a valuable wake-up call for many in the Mac community, but maurits never got around to releasing his test suite so we could do our own testing.  Backup Bouncer is here to remedy this omission.</p>

<p><span id="more-141"></span></p>

<p>Backup Bouncer&#8217;s job is to keep the ugly backup tools out of the club.  It&#8217;s here to show you exactly how bad (or, dare I say it, good?) your backup tools are.  The way you use it is simple.  First you create a couple of volumes:</p>



<pre>bbouncer create-vol Src
bbouncer create-vol Dst</pre>



<p>Next you create the test files on the source volume:</p>

<code>bbouncer create /Volumes/Src</code>

<p>Now you use any old method you want to copy the files from <code>/Volumes/Src</code> to <code>/Volumes/Dst</code>.  Once that&#8217;s done, you verify the copy and see how well (or poorly) it went.  You can start by checking the &#8220;critical&#8221; properties &#8212; properties that you&#8217;ll almost always want preserved:</p>

<code>bbouncer verify -d -T critical /Volumes/Src /Volumes/Dst</code>

<p>Next you can expand the scope to &#8220;important&#8221; properties &#8212; properties that power-users may find important or may be critical in the future:</p>

<code>bbouncer verify -d -T important /Volumes/Src /Volumes/Dst</code>

<p>Finally, you can see how the tool fares on the entire test suite:</p>

<code>bbouncer verify -d /Volumes/Src /Volumes/Dst</code>

<p>As an example of how the results look, here are the results for <code>ditto</code> on the entire test suite:</p>



<pre>Verifying:    basic-permissions ... ok
Verifying:           timestamps ...
   Sub-test:    modification time ... ok
ok
Verifying:             symlinks ... ok
Verifying:    symlink-ownership ... FAIL
Verifying:            hardlinks ... ok
Verifying:       resource-forks ... ok
Verifying:         finder-flags ... ok
Verifying:         finder-locks ... FAIL
Verifying:        creation-date ... FAIL
Verifying:            bsd-flags ... FAIL
Verifying:       extended-attrs ...
   Sub-test:             on files ... FAIL
   Sub-test:       on directories ... FAIL
   Sub-test:          on symlinks ... FAIL
FAIL
Verifying: access-control-lists ...
   Sub-test:             on files ... FAIL
   Sub-test:              on dirs ... FAIL
ok
Verifying:                 fifo ... FAIL
Verifying:              devices ... ok
Verifying:          combo-tests ...
   Sub-test:  xattrs + rsrc forks ... FAIL
   Sub-test:     lots of metadata ... FAIL
FAIL
</pre>



<p>Pretty bad, eh?  On a more optimistic note, here are the results from Shirt Pocket Software&#8217;s <a href="http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html">SuperDuper!</a>, one of the only tools to even come close to passing all tests:</p>



<pre>Verifying:    basic-permissions ... ok
Verifying:           timestamps ...
   Sub-test:    modification time ... ok
ok
Verifying:             symlinks ... ok
Verifying:    symlink-ownership ... ok
Verifying:            hardlinks ... ok
Verifying:       resource-forks ... ok
Verifying:         finder-flags ... ok
Verifying:         finder-locks ... ok
Verifying:        creation-date ... ok
Verifying:            bsd-flags ... ok
Verifying:       extended-attrs ...
   Sub-test:             on files ... ok
   Sub-test:       on directories ... ok
   Sub-test:          on symlinks ... ok
ok
Verifying: access-control-lists ...
   Sub-test:             on files ... ok
   Sub-test:              on dirs ... ok
ok
Verifying:                 fifo ... FAIL
Verifying:              devices ... FAIL
Verifying:          combo-tests ...
   Sub-test:  xattrs + rsrc forks ... ok
   Sub-test:     lots of metadata ... ok
ok
</pre>



<p>Very nice!</p>

<p>Backup Bouncer also has a built-in set of &#8220;copiers&#8221;, to automate testing of command-line tools like cp, rsync, tar, asr, pax, ditto, and so on.  You can run these tests using the &#8220;bbouncer copy&#8221; command:</p>

<code>bbouncer copy -d /Volumes/Src /Volumes/Dst</code>

<p>You&#8217;ll get several pages of output, so I won&#8217;t show it all here.  Finally, I&#8217;ve included an <code>autopilot</code> script that you can use to create some volumes, initialize the source files, run all the copiers, and verify the results.</p>

<p>You can get Backup Bouncer <a href="/code/backup-bouncer">here</a>.</p>

<p><strong>Update:</strong> My <span class="caps">ACL </span>tests were broken.  I&#8217;ve updated the output shown here to reflect the corrected tests.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F04%2F27%2Fintroducing-backup-bouncer%2F&amp;linkname=Introducing%20Backup-Bouncer"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/04/27/introducing-backup-bouncer/feed/</wfw:commentRss>
		<slash:comments>101</slash:comments>
		</item>
		<item>
		<title>Somebody Noticed.</title>
		<link>http://www.n8gray.org/blog/2007/03/16/somebody-noticed/</link>
		<comments>http://www.n8gray.org/blog/2007/03/16/somebody-noticed/#comments</comments>
		<pubDate>Sat, 17 Mar 2007 06:03:47 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[ScriptExport]]></category>
		<category><![CDATA[Scripting]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/03/16/somebody-noticed/</guid>
		<description><![CDATA[It looks like the MacWeb has finally noticed my baby!  No, not that one.  The ugly one.  And hey, I got a shout out from no less than John Gruber, which probably single-handedly advances me a degree or two closer to Kevin Bacon.

It&#8217;s a nice feeling to see your name in the [...]]]></description>
			<content:encoded><![CDATA[<p>It looks like the <a href="http://www.tuaw.com/2007/03/16/scriptexport-iphoto-plugin-allows-shell-script-manipulation/">MacWeb</a> has finally <a href="http://havegnuwilltravel.apesseekingknowledge.net/2007/03/fun-with-iphoto.html">noticed</a> my baby!  No, not <a href="http://www.n8gray.org/photos/amaya-may-2006/DSC_2040">that one</a>.  <a href="http://www.n8gray.org/code/scriptexport/">The ugly one</a>.  And hey, I got a shout out from no less than <a href="http://daringfireball.net/linked/2007/march#fri-16-scriptexport">John Gruber</a>, which probably single-handedly advances me a degree or two closer to Kevin Bacon.</p>

<p>It&#8217;s a nice feeling to see your name in the blogs you read on a daily basis, even if it happens on a Friday at 10PM <span class="caps">PST </span>and by Monday I&#8217;ll be the only one who remembers this ever happened.  Maybe this is the push I need in order to finally get this thing to v1.0 status.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F03%2F16%2Fsomebody-noticed%2F&amp;linkname=Somebody%20Noticed."><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/03/16/somebody-noticed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MacFuse</title>
		<link>http://www.n8gray.org/blog/2007/02/16/macfuse/</link>
		<comments>http://www.n8gray.org/blog/2007/02/16/macfuse/#comments</comments>
		<pubDate>Fri, 16 Feb 2007 19:01:30 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/02/16/macfuse/</guid>
		<description><![CDATA[About a month ago, Google&#8217;s Amit Singh announced the availability of a port of the FUSE (Filesystems in USErspace) framework to Mac OS X.  Amit&#8217;s the guy who wrote the book on OS X internals, and probably understands OS X better than anyone else outside of Apple.  I&#8217;m not going to spend a [...]]]></description>
			<content:encoded><![CDATA[<p>About a month ago, Google&#8217;s Amit Singh <a href="http://googlemac.blogspot.com/2007/01/taming-mac-os-x-file-systems.html">announced</a> the availability of a port of the <a href="http://fuse.sourceforge.net/"><span class="caps">FUSE</span></a> (Filesystems in <span class="caps">USE</span>rspace) framework to Mac OS X.  Amit&#8217;s the guy who wrote <a href="http://osxbook.com/">the book on OS X internals</a>, and probably understands OS X better than anyone else outside of Apple.  I&#8217;m not going to spend a lot of time talking about why <span class="caps">FUSE </span>is a great idea &#8212; just check out the videos linked to from <a href="http://code.google.com/p/macfuse/">the MacFuse project page</a> and you&#8217;ll understand &#8212; but I do want to point out that <span class="caps">SSHFS </span>is really a pleasure to use.  It allows you to treat remote files just like local files <b>without any special server support</b>!  You do, of course, need <span class="caps">SSH </span>access to the machine in question, but this is usually the way I access remote machines anyhow.  </p>

<p>If you do need access to a machine where you don&#8217;t have an ssh account there&#8217;s also <span class="caps">FTPFS </span>and others.  There are <a href="http://fuse.sourceforge.net/wiki/index.php/FileSystems">a <strong>ton</strong> of <span class="caps">FUSE </span>filesystems</a> and it&#8217;s now become a pretty simple task to port them to OS X.  In the easiest cases it&#8217;s just a recompile.</p>

<p>Anyhow, big props to Amit Singh for doing a great service to the Mac community.  <a href="http://code.google.com/p/macfuse/">Get MacFuse here</a>.</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F02%2F16%2Fmacfuse%2F&amp;linkname=MacFuse"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/02/16/macfuse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tabbed Terminal.app</title>
		<link>http://www.n8gray.org/blog/2007/01/21/tabbed-terminalapp/</link>
		<comments>http://www.n8gray.org/blog/2007/01/21/tabbed-terminalapp/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 00:58:53 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2007/01/21/tabbed-terminalapp/</guid>
		<description><![CDATA[Rumor has it that the newest seed of Leopard has a tabbed version of Terminal.app.  At the moment I&#8217;m running mrxvt under X11 because all the Cocoa-based terminal emulators are &#8220;teh sluggy&#8221; with the exception of Terminal.app, which lacks support for tabs.  Could this leave NEdit as the only X-based app I use [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://forum.insanelymac.com/index.php?showtopic=39238">Rumor has it</a> that the newest seed of Leopard has a tabbed version of Terminal.app.  At the moment I&#8217;m running mrxvt under <span class="caps">X11 </span>because all the Cocoa-based terminal emulators are &#8220;teh sluggy&#8221; with the exception of Terminal.app, which lacks support for tabs.  Could this leave NEdit as the only X-based app I use in Leopard?  Only time will tell&#8230;</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2007%2F01%2F21%2Ftabbed-terminalapp%2F&amp;linkname=Tabbed%20Terminal.app"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2007/01/21/tabbed-terminalapp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tangerine &#8211; A BPM Tool</title>
		<link>http://www.n8gray.org/blog/2006/10/19/tangerine-a-bpm-tool/</link>
		<comments>http://www.n8gray.org/blog/2006/10/19/tangerine-a-bpm-tool/#comments</comments>
		<pubDate>Thu, 19 Oct 2006 19:43:43 +0000</pubDate>
		<dc:creator>n8</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://www.n8gray.org/blog/2006/10/19/tangerine-a-bpm-tool/</guid>
		<description><![CDATA[Call me strange, but one of the first things I noticed about iTunes was the BPM field in the song info dialog.  I had visions of filtering songs and putting together mixes based on tempo.  I even went as far as writing a little app that allowed me to click the mouse in [...]]]></description>
			<content:encoded><![CDATA[<p>Call me strange, but one of the first things I noticed about iTunes was the <span class="caps">BPM </span>field in the song info dialog.  I had visions of filtering songs and putting together mixes based on tempo.  I even went as far as writing a little app that allowed me to click the mouse in time with a song to calculate the <span class="caps">BPM </span>and insert it into the currently playing song&#8217;s metadata, but I soon abandoned hope of working through my large music library in my lifetime.  A signal-processing-based solution is what was needed, and the folks at a software company called <a href="http://www.potionfactory.com/">Potion Factory</a> have created one.</p>

<p>The new app is called Tangerine, and it automatically analyzes your iTunes library and adds <span class="caps">BPM </span>info for each song.  It&#8217;s not always perfect (the app&#8217;s still a beta release), but it&#8217;s quite good.  It also has a very slick interface &#8212; it&#8217;s actually got the functionality of an early release of iTunes!  It even has a playlist builder that lets you visualize the duration and tempo of each song.  One very cool feature is a auto-generator that builds a playlist for you with one of several tempo profiles!  See the screenshot below for details.</p>

<p><a class="imagelink" href="http://www.n8gray.org/wp-content/uploads/2006/10/playlist-gen.png" title="Playlist Generator"><img id="image133" src="http://www.n8gray.org/wp-content/uploads/2006/10/playlist-gen.thumbnail.png" alt="Playlist Generator"/></a></p>

<p>When Tangerine makes mistakes it&#8217;s likely to be either double or half the correct value, and there are easy shortcuts for doubling or halving the value it calculated.  However, there needs to be a better way to validate Tangerine&#8217;s <span class="caps">BPM </span>calculations within the app.  When I&#8217;m playing a song, for example, I&#8217;d like to see a metronome animation showing me what Tangerine thinks the tempo is.  For now, all you&#8217;ve got to go on is the numerical value, and I have to confess that I don&#8217;t have an internal feeling for what 92BPM should sound like.  It would also be nice to have a tap-along method for fixing the <span class="caps">BPM </span>of a track that Tangerine got wrong.  But hey, it&#8217;s a beta release so we can cut Potion Factory some slack.</p>

<p>All in all this is a very nice app that I&#8217;ve been wanting for a long time.  Plus, if you report a juicy bug or blog about the app they&#8217;ll give you a license when it ships (not that that had <em>anything</em> to do with this post <img src='http://www.n8gray.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )  <a href="http://www.potionfactory.com/blog/2006/10/18/introducing-tangerine/">Check it out</a>!</p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.n8gray.org%2Fblog%2F2006%2F10%2F19%2Ftangerine-a-bpm-tool%2F&amp;linkname=Tangerine%20%26%238211%3B%20A%20BPM%20Tool"><img src="http://www.n8gray.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.n8gray.org/blog/2006/10/19/tangerine-a-bpm-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

