<?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>Russell Finn&#039;s Weblog &#187; Programming</title>
	<atom:link href="http://sprucehill.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://sprucehill.com/rsf/blog</link>
	<description>Shouting into the wind since 2004.</description>
	<lastBuildDate>Wed, 18 Aug 2010 03:27:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Debugging software for laymen</title>
		<link>http://sprucehill.com/rsf/blog/2009/11/28/debugging-software-for-laymen/</link>
		<comments>http://sprucehill.com/rsf/blog/2009/11/28/debugging-software-for-laymen/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 02:32:51 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://russellfinn.com/?p=133</guid>
		<description><![CDATA[Brent Simmons provides what is possibly the best description for laymen of the joy/agony of debugging software that I've ever seen. <a href="http://sprucehill.com/rsf/blog/2009/11/28/debugging-software-for-laymen/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://inessential.com">Brent Simmons</a> provides what is possibly the best <a href="http://inessential.com/2009/11/23/the_non-linear_relationship_of_coding_ef">description</a> for laymen of the joy/agony of debugging software that I&#8217;ve ever seen:</p>

<blockquote><p>If it took 10 minutes to reduce memory usage by 96MB, then — were there a linear relationship — it should take under half a minute, less than 30 seconds, to go the rest of the way.</p><p>That’s the way things work in the real world, after all. If you have 100 bags of leaves to carry out to the curb, each bag will take about the same amount of time as the others.</p><p>Instead, it will probably take me about two hours, maybe more, to get rid of that last 4MB.</p><p>It’s almost as if you carried out 96 bags of leaves easily and quickly, then realized you can’t get those last four bags, even though they’re exactly the same as all the others, without pouring a new driveway first.</p><p>Which is crazy, right? If the real world operated like that all the time, we’d go completely nuts.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2009/11/28/debugging-software-for-laymen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2005: Not Ready To Lead</title>
		<link>http://sprucehill.com/rsf/blog/2008/10/26/visual-studio-2005-not-ready-to-lead/</link>
		<comments>http://sprucehill.com/rsf/blog/2008/10/26/visual-studio-2005-not-ready-to-lead/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 04:59:54 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/?p=108</guid>
		<description><![CDATA[Glenn Howe writes of an anomaly in Visual Studio 2005&#8242;s C++ compiler: &#8230; I discovered today (Friday) that if you compile something like:double x = (false) ? 0 : 1.4;that x will not equal 1.4 as most people (and the &#8230; <a href="http://sprucehill.com/rsf/blog/2008/10/26/visual-studio-2005-not-ready-to-lead/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://sprinkleofcocoa.blogspot.com/">Glenn Howe</a> writes of an anomaly in <a href="http://sprinkleofcocoa.blogspot.com/2008/10/visual-studio-2005-c-and-operator.html">Visual Studio 2005&#8242;s C++ compiler</a>:</p>

<blockquote>&#8230; I discovered today (Friday) that if you compile something like:<br /><br /><code>double x = (false) ? 0 : 1.4;</code><br /><br />that x will  not equal 1.4 as most people (and the gcc compiler) would think, but rather it will equal 1.0. Why? Because it sees <code>0</code>, interprets it as an integer and decides that if both halves of the <code>:</code> have to have the same type, then that type will be integer. The fact that this is in the middle of an assignment to double means nothing.
</blockquote>

<p>Yes, in fact it does mean nothing; the type of the lvalue on the left-hand side of an assignment expression has no effect on the type of the rvalue on the right-hand side.</p>

<p>He goes on:</p>

<blockquote>I&#8217;m not even saying that Visual Studio is wrong. It&#8217;s different from gcc which leads to platform specific bugs, &#8230;</blockquote>

<p>Well, I was a language lawyer in a previous life, so I can&#8217;t let it rest there.  (And those of you out there saying &#8220;Of course Visual Studio is wrong!&#8221; should recall that gcc doesn&#8217;t always get it right, either.)</p>

<p>Where were we?  The type of the conditional operator, right.  To find what that type should be, we have to look at the definition of the operator.</p>

<p>In C99, this is pretty straightforward. Section 6.5.15, which defines the conditional operator, says the result of the expression &#8220;is the value of the second or third operand (whichever is evaluated), converted to the type described below&#8221;.  Looking &#8220;below&#8221;, it further says when you have two operands of arithmetic type, the result type is the type that would be determined by the &#8220;usual arithmetic conversions&#8221; applied to the two operands.</p>

<p>Now a simple jump to section 6.3.1.8, which defines the &#8220;usual arithmetic conversions&#8221;, tells us: &#8220;&#8230; if the corresponding real type of either operand is <code><b>double</b></code>, the other operand is converted, without change of type domain, to a type whose
corresponding real type is <code><b>double</b></code>.&#8221;</p>

<p>OK, so that&#8217;s not completely straightforward, talking about &#8220;real types&#8221; and &#8220;type domains&#8221;, but basically we have two numbers, and if one of them is double the other is converted to double, and so that&#8217;s that; the type of the expression should be double, as we&#8217;d expect, and so Visual Studio 2005 is wrong.</p>

<p>If we&#8217;re in C.</p>

<p>C++ is more complicated.</p>

<p>(What a shock, right?)</p>

<p>Well, C++ has to allow for the possibility that either or both operand is a class type, and if so can it be converted to the other&#8217;s type, blah blah blah (section 5.16, if you&#8217;re following along at home).</p>

<p>Since we don&#8217;t have class type operands, we go on, applying the &#8220;standard conversions&#8221; to the operands (none of which apply here), and then, if &#8220;the second and third operands have arithmetic or enumeration type[,] the usual arithmetic conversions are performed to bring them to a common type, and the result is of that type.&#8221;</p>

<p>Hey, that was pretty simple after all.  No, wait: are the usual arithmetic conversions the same in C++ as they are in C?  Good question; let me see&#8230; (flip, flip, &#8230;) here we are, clause 5: yes, they are.</p>

<p>So from where I sit, Visual Studio 2005 is wrong in C++, too.</p>

<p>Wrong on conditional operators.</p>

<p>Wrong for America.</p>

<p><em>(I can&#8217;t wait for this election to be over&#8230;)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2008/10/26/visual-studio-2005-not-ready-to-lead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Micro-huh?</title>
		<link>http://sprucehill.com/rsf/blog/2008/04/03/micro-huh/</link>
		<comments>http://sprucehill.com/rsf/blog/2008/04/03/micro-huh/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 23:25:29 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[iPod/iPhone]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/?p=86</guid>
		<description><![CDATA[As reported by Macworld: &#8220;Exec touts developing iPhone apps without SDK&#8221;: There are more ways to develop applications for the Apple iPhone device than using the company’s beta iPhone SDK. Through a combination of Microsoft and other technologies, developers can &#8230; <a href="http://sprucehill.com/rsf/blog/2008/04/03/micro-huh/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As reported by <a href="http://www.macworld.com/article/132818/2008/04/iphone_development.html">Macworld</a>: &#8220;Exec touts developing iPhone apps without SDK&#8221;:</p>

<blockquote><p>There are more ways to develop applications for the Apple iPhone device than using the company’s beta iPhone SDK. Through a combination of Microsoft and other technologies, developers can build a Web application for the iPhone, according to a speaker at the VSLive conference in San Francisco on Wednesday.</p></blockquote>

<p>How would you use <i>Microsoft</i> technologies to make an iPhone application?  Oh, right:  <i>VSLive</i> = <i>Visual Studio Live</i>.  Got it.  Know your audience.</p>

<p><i>&#8220;Don&#8217;t worry about rubber-tired vehicles,&#8221; said a speaker at this week&#8217;s blacksmith convention.  &#8220;They can&#8217;t take you anywhere a well-shod horse can go.</i></p>

<p><i>&#8220;And besides, they won&#8217;t let you make your own tires, which I find kind of offensive.&#8221;</i></p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2008/04/03/micro-huh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Little details mean a lot</title>
		<link>http://sprucehill.com/rsf/blog/2008/03/04/little-details-mean-a-lot/</link>
		<comments>http://sprucehill.com/rsf/blog/2008/03/04/little-details-mean-a-lot/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 18:27:13 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/2008/03/04/little-details-mean-a-lot/</guid>
		<description><![CDATA[I&#8217;ve just filed my 2007 taxes using the much-maligned TurboTax. (I filed my 2005 taxes this past January, so I&#8217;m doing much better this year.) TurboTax for the Mac appears to have been completely rewritten with an eye towards satisfying &#8230; <a href="http://sprucehill.com/rsf/blog/2008/03/04/little-details-mean-a-lot/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just filed my 2007 taxes using the much-maligned TurboTax.  (I filed my 2005 taxes this past January, so I&#8217;m doing much better this year.)</p>

<p>TurboTax for the Mac appears to have been completely rewritten with an eye towards satisfying the Mac customer, which is a refreshing change for Intuit.  (It will be interesting to see how their Financial Life product looks this fall.)</p>

<p>As a good example of leveraging the foundations of Mac OS X to provide specific functionality for the customer: I was pleasantly surprised to be given these choices for saving my return after filing:</p>

<ol>
<li>&#8220;Print returns&#8221; (I routinely &#8220;print&#8221; to PDF, but Mac OS X already makes this easy);</li>
<li>&#8220;Backup to .Mac&#8221;: this puts a copy of my TurboTax data file, as well as a PDF with my return and all supporting worksheets, into a folder (Documents/TurboTax/2007) on my .Mac disk;</li>
<li>&#8220;Burn to CD&#8221;: this uses the standard disc burning interface to put a copy of my data file <em>as well as the TurboTax application</em> (fully updated, as far as I can tell) onto a CD.  Brilliant.  (I can&#8217;t tell you how much time I wasted looking for the 2005 software.  The fact that it wouldn&#8217;t run under Leopard once I found it is another issue entirely&#8230;)</li>
</ol>

<p>These are the little details that Mac users expect in their software (otherwise they wouldn&#8217;t have bought a Mac), and companies that pay attention to things like this should be able thrive in the Mac marketplace.  Granted, Intuit&#8217;s reputation on the Mac is in tatters (and deservedly so), but I&#8217;m <em>much</em> more inclined to check out Financial Life now than I was before.</p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2008/03/04/little-details-mean-a-lot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dancing with the elephant (revised)</title>
		<link>http://sprucehill.com/rsf/blog/2007/11/03/dancing-with-the-elephant/</link>
		<comments>http://sprucehill.com/rsf/blog/2007/11/03/dancing-with-the-elephant/#comments</comments>
		<pubDate>Sat, 03 Nov 2007 06:10:39 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/2007/11/02/dancing-with-the-elephant/</guid>
		<description><![CDATA[While gathering information about application compatibility with Leopard, I notice one developer, Snerdware, is struggling to keep up with the situation. They report two major problems that affect their current applications, and, with some evident frustration, blame both of them &#8230; <a href="http://sprucehill.com/rsf/blog/2007/11/03/dancing-with-the-elephant/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While gathering information about application compatibility with Leopard, I notice one developer, <a href="http://www.snerdware.com/">Snerdware</a>, is struggling to keep up with the situation.  They report two major problems that affect their current applications, and, with some evident frustration, blame both of them on Apple.  <em>[Note: I've substantially rewritten my commentary on the first issue, since I've learned additional information and since my main point applies to the second issue.]</em></p>

<p>The <a href="http://www.snerdware.com/support/index.php?x=&#038;mod_id=2&#038;id=50">first issue</a> affects both their products; the report here is for <a href="http://www.snerdware.com/addressx/">AddressX</a>:</p>

<blockquote><p>AddressX won&#8217;t startup on 10.5.0/Leopard running on an Intel-powered Mac (a log indicates &#8220;&#8230; Reason: no suitable image found. Did find: /usr/lib/libcrypto.0.9.dylib: mach-o, but wrong architecture. &#8230;&#8221;).</p>

<p>When we looked at the 10.5 pre-release, we encountered an OS X library issue &#8212; it installs a non-universal/PPC-only version of a library that&#8217;s critical to our applications (and, of course, all our developer systems are Intel-powered). &#8216;Though we filed a bug report early in October (original Problem ID: 5520955 and have now re-filed it), believe it or not, it&#8217;s still a problem with the released/commercial version of 10.5.0 (even without the bug report, you&#8217;d think that a check to ensure all binaries are universal would actually be a basic QA step &#8212; it&#8217;s one that&#8217;s easily automated!).
</p></blockquote>

<p>After corresponding with someone named Bryan D. at Snerdware and doing a little more research, I&#8217;ve learned the following things which make me more sympathetic to their problem than I originally was:
<ul><li>Apple includes <em>two</em> versions of <code>libcrypto</code>: one called <code>libcrypto.0.9.dylib</code>, and one called <code>libcrypto.0.9.7.dylib</code>, and a symbolic link <code>libcrypto.dylib</code> that points to the newer library.</li>
<li>In Leopard, the newer library is indeed a four-way universal binary, but the older library is PowerPC only.  I originally assumed this was because only pre-Intel applications would require it, since <code>libcrypto.0.9.7.dylib</code> has been available in Mac OS X at least as far back as 10.3.9; and so Snerdware was making a mistake by linking to the older library and then complaining that it wasn&#8217;t universal.</li>
<li>But it turns out that Snerdware relies on features that are present in the older library (which corresponds to <code>libcrypto</code> version 0.9.6l), but have been removed for some reason from the newer library.</li>
<li>More strangely, Apple <em>did</em> include a universal binary of <code>libcrypto.0.9.dylib</code> in the Intel versions of Tiger, but strangely left it PowerPC-only in Leopard. Huh?</li>
<li>Snerdware originally considered compiling the older library into their program, but since it&#8217;s crypto there are all kind of export regulations that come into play (and believe me, I know about this; I had to research exactly this topic at a previous job).</li>
</ul>
</p>

<p>Hopefully this was indeed an oversight that can be fixed in a future update; otherwise, Snerdware has a problem with no easy solution, and some portion of the blame lies with Apple.</p>

<p>The <a href="http://www.snerdware.com/support/index.php?x=&amp;mod_id=2&amp;id=51">second issue</a> is a more fundamental problem, and one that affects nearly all Mac developers &#8212; Apple has a history of making significant changes to core system services between OS versions.   I presume that Apple doesn&#8217;t do this maliciously, but there are plenty of developers who will tell you they&#8217;ve been burned by Apple changing or dropping technologies.  Apparently Snerdware is once burned and twice shy:
</p>

<blockquote> <p>Since we&#8217;ve previously been seriously &#8220;bitten&#8221; by Apple&#8217;s last-minute major changes to developer pre-releases, we can&#8217;t afford to take pre-releases seriously until they are near release. [...]
</p>

<p>With the imminent release of 10.5.0, we [...] discovered that, even &#8216;though OS X&#8217;s Sync Services has the same interfaces and we&#8217;ve seen no documentation/release notes that document subtle but significant changes in behavior, we see that the behavior has changed in a way that will cause us to make very major changes to Groupcal &#8230; Given that Groupcal was working very well with 10.4, this is more than annoying for us, as well. Be angry with Apple, not with us.
</p>
<p>[...] It&#8217;s things like this that make it much more difficult for an OS X product to be a viable business proposition.</p>
</blockquote>

<p>Here I have a harder time finding sympathy. <em>By their own admission</em> they waited until the last minute to check whether the behavior of Sync Services had changed, and now they report to their users that their flagship product won&#8217;t be compatible until the first quarter of 2008, and point the finger at Apple?</p>

<p>(Luckily their target market appears to be corporate workgroups running Exchange servers, and those folks are less likely to be rushing out and upgrading to Leopard, so Snerdware may have some time there.)</p>

<p>If my livelihood depended on my product operating correctly with Sync Services, I wouldn&#8217;t rely on Apple keeping its behavior unchanged from release to release; I&#8217;d be booting up each Leopard seed on a non-critical system and checking things out.  Perhaps I&#8217;d muster up the resources to send a developer to WWDC, where Apple encourages you to bring your code, try it out on the current seed, and discuss problems with the Apple engineers who have come up from Cupertino for the week for just this reason.</p>

<p>(To be fair, I don&#8217;t know that Snerdware didn&#8217;t do this; but with the &#8220;can&#8217;t afford to take pre-releases seriously&#8221; comment above, I somehow doubt it.)</p>

<p>And then &#8212; well, maybe Sync Services does change in the September seed and I still have a lot of work to do &#8212; but wouldn&#8217;t I&#8217;d be five weeks further along?</p>

<p>If you choose to dance with an elephant, you can approach it one of two ways &#8212; you can wait for the <a href="http://www.adobe.com/support/products/pdfs/leopardsupport.pdf">dust</a> to <a href="http://filemaker.com/support/leopard.html">settle</a>, and then see what the lay of the land is; or you can try to be more nimble and maneuver around the elephant.  We independent developers are supposed to be more nimble&#8230; aren&#8217;t we?</p>

<p><em>[But sometimes, even if you're nimble, you can get still stepped on...]</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2007/11/03/dancing-with-the-elephant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby vs. Python (take 147)</title>
		<link>http://sprucehill.com/rsf/blog/2006/07/25/ruby-vs-python-take-147/</link>
		<comments>http://sprucehill.com/rsf/blog/2006/07/25/ruby-vs-python-take-147/#comments</comments>
		<pubDate>Tue, 25 Jul 2006 16:54:45 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/2006/07/25/ruby-vs-python-take-147/</guid>
		<description><![CDATA[Tim Bray, a new student of Ruby, admires it for its readability, and compares it to Python: In theory, Python ought to do better, lacking all those silly end statements cluttering up the screen. But in practice, when I look &#8230; <a href="http://sprucehill.com/rsf/blog/2006/07/25/ruby-vs-python-take-147/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tim Bray, a new student of Ruby, <a href="http://www.tbray.org/ongoing/When/200x/2006/07/24/Ruby">admires it</a> for its readability, and compares it to Python:</p>

<blockquote>
  <p>In theory, Python ought to do better, lacking all those silly end statements cluttering up the screen. But in practice, when I look at Python code I find my eyes distracted by a barrage of underscores and double-quote marks. Typography is an important component of human communication, and Ruby&rsquo;s, on balance, is cleaner.</p>
</blockquote>

<p>John Gruber <a href="http://daringfireball.net/linked/2006/july#mon-24-bray_ruby">concurs</a>:</p>

<blockquote>
  <p>Now that I think about, those underscores and extra quotes are exactly why Python does not appeal to me. I find Python&rsquo;s indentation-as-block rule to be quite elegant, but its use of punctuation feels clumsy.</p>
</blockquote>

<p>As a Python programmer (but not a Ruby programmer), I have to say:</p>

<p>Huh?</p>

<p>I respect both Bray and Gruber, but I don&#8217;t see their point.  At all.</p>

<p>When I look at my Python code, I see underscores in two contexts.  The first is in the names of &#8220;special&#8221; methods and attributes. In practice for me, this is largely limited to <code>__init__</code>, since I rarely need to overload operators.  (And this syntax makes such identifiers stand out as &#8220;special&#8221;.  Who&#8217;s to say that this is less attractive than Ruby&#8217;s use of <code>$</code> to mark global variables?  Are underscores uglier than dollar signs?)</p>

<p>The second, more common use of underscores in my code is in long Cocoa method names, because by convention in PyObjC they replace the colons in the Objective-C selectors.  Those underscores are generally acknowledged as ugly by the PyObjC community, but accepted as a necessary evil.  I suspect Tim Bray is <em>not</em> writing PyObjC code.  (Maybe he&#8217;s writing more special operators than I am.)</p>

<p>As for quote marks (single or double), the only &#8220;barrages&#8221; I can think of are in multi-line string literals, which are frequently used as documentation strings (or comments, effectively).  I suppose this criticism might come from the common use of string literals as symbols &#8212; e.g., as keys in dictionaries (hash tables) &#8212; where Ruby has an actual symbol type, whose syntax is borrowed from Lisp keywords (a prefixed colon).</p>

<p>Whereas if one wanted to criticize a language for &#8220;clumsy&#8221; punctuation, one might point to any of the fourteen-odd uses of non-alphanumeric symbols in Ruby found <a href="http://www.rubygarden.org/faq/entry/show/137">here</a>:  marking different kinds of variables with <code>$</code>, <code>@</code>, <code>@@</code>, and <code>&amp;</code>; <em>four</em> kinds of &#8220;quoting mechanisms&#8221; with <code>%X{..}</code>; etc.  (Is that Perl I hear calling?)</p>

<p>Perhaps that&#8217;s why neither Bray nor Gruber commented on the controversial use of <code>@</code> in Python to mark the user of a <a href="http://www.python.org/dev/peps/pep-0318/">decorator</a> function.</p>

<p>So I have to say I just don&#8217;t get it.  To each his own, I guess.  I see that Ruby is getting a lot of buzz these days, in large part because of the success of Rails, and that&#8217;s fine; if I had to throw together a quick web application I might investigate Rails too.  Perhaps it&#8217;s just that I came to Python first and don&#8217;t really know Ruby very well.</p>

<p>Still, to me, saying Ruby&#8217;s use of punctuation is &#8220;cleaner&#8221; than Python&#8217;s is (to paraphrase Gruber) like criticizing the iPod because it doesn&#8217;t come in white&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2006/07/25/ruby-vs-python-take-147/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyWikit</title>
		<link>http://sprucehill.com/rsf/blog/2006/06/22/pywikit/</link>
		<comments>http://sprucehill.com/rsf/blog/2006/06/22/pywikit/#comments</comments>
		<pubDate>Thu, 22 Jun 2006 19:09:12 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/2006/06/22/pywikit/</guid>
		<description><![CDATA[In response to a challenge in the Mac forum at Ars Technica, I&#8217;ve banged out a quick service that adds &#8220;Search With Wikipedia&#8221; to your Services menu (right below &#8220;Search With Google&#8221;). It&#8217;s called PyWikit because (a) somebody suggested &#8220;Wikit&#8221; &#8230; <a href="http://sprucehill.com/rsf/blog/2006/06/22/pywikit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In response to a <a href="http://episteme.arstechnica.com/eve/forums?a=tpc&amp;s=50009562&amp;f=8300945231&amp;m=165004279731&amp;r=130002579731#130002579731">challenge</a> in the Mac forum at Ars Technica, I&#8217;ve banged out a quick service that adds &#8220;Search With Wikipedia&#8221; to your Services menu (right below &#8220;Search With Google&#8221;).  It&#8217;s called <a href="http://www.sprucehill.com/rsf/software/python/PyWikit.service.zip">PyWikit</a> because (a) somebody suggested &#8220;Wikit&#8221; for the name and (b) I wrote it in <a href="http://www.python.org">Python</a>, using <a href="http://pyobjc.sourceforge.net">PyObjC</a>.</p>

<p>To use it, <a href="http://www.sprucehill.com/rsf/software/python/PyWikit.service.zip">download</a> it and move it to your ~/Library/Services folder.  At the moment you will probably have to log out and log in again to update your Services menu.  If I get motivated I&#8217;ll build an installer, someday.  (Unlikely since I&#8217;ve only spent about an hour on this, most of which was taken up building a universal binary for PyObjC.  While it is true that PyObjC rocks, its universalness is still a little, uh, rocky.)</p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2006/06/22/pywikit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SubEthaEdit for $0 is a great deal</title>
		<link>http://sprucehill.com/rsf/blog/2006/04/25/subethaedit-for-0-is-a-great-deal/</link>
		<comments>http://sprucehill.com/rsf/blog/2006/04/25/subethaedit-for-0-is-a-great-deal/#comments</comments>
		<pubDate>Tue, 25 Apr 2006 19:07:51 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/2006/04/25/subethaedit-for-0-is-a-great-deal/</guid>
		<description><![CDATA[SubEthaEdit from CodingMonkeys is an excellent collaborative editor that I&#8217;ve used to help create session notes at past PyCons. Many people also use it as a programming editor, although to date I&#8217;m still in the BBEdit camp. Now, as part &#8230; <a href="http://sprucehill.com/rsf/blog/2006/04/25/subethaedit-for-0-is-a-great-deal/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codingmonkeys.de/subethaedit/">SubEthaEdit from CodingMonkeys</a> is an excellent collaborative editor that I&#8217;ve used to help create session notes at past <a href="http://www.python.org/pycon/">PyCons</a>.  Many people also use it as a programming editor, although to date I&#8217;m still in the <a href="http://www.barebones.com/products/bbedit/index.shtml">BBEdit</a> camp.</p>

<p>Now, as part of <a href="http://maczot.com/">BLOGZOT 2.0 on MacZOT.com</a>, MacZOT and TheCodingMonkeys will award $105,000 in Mac software &#8212; specifically, free SubEthaEdit licenses (if enough bloggers link back to the web site to reduce the license price to $0).</p>

<p>Obviously, the intention is to drive a lot of visits to the MacZOT site, but SubEthaEdit for $0 is a great deal no matter how you slice it.  (And MacZOT is an interesting idea itself; I&#8217;ve used it once or twice to spring for software I might not have otherwise bought, when the discount pushed the price down to impulse buying levels.)</p>

<p>(Thanks to <a href="http://www.macjournals.com">Matt Deatherage</a> for the heads-up.)</p>

<p><em>Update:</em> Yes, enough bloggers fell for the offer to drive the cost down to $0, and I got my free license code over the weekend &#8212; thanks, MacZOT and Coding Monkeys!</p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2006/04/25/subethaedit-for-0-is-a-great-deal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Tiger window style documented&#8230; sort of</title>
		<link>http://sprucehill.com/rsf/blog/2005/06/20/new-tiger-window-style-documented-sort-of/</link>
		<comments>http://sprucehill.com/rsf/blog/2005/06/20/new-tiger-window-style-documented-sort-of/#comments</comments>
		<pubDate>Mon, 20 Jun 2005 18:21:37 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/2005/06/20/new-tiger-window-style-documented-sort-of/</guid>
		<description><![CDATA[The new &#8220;unified title and toolbar&#8221; window style I previously commented on has now made an appearance in Apple&#8217;s documentation. Unfortunately, it just tells how to activate the feature from Carbon. We&#8217;re still waiting guidance on when to use it&#8230;]]></description>
			<content:encoded><![CDATA[<p>The new &#8220;unified title and toolbar&#8221; window style I <a href="http://www.sprucehill.com/rsf/blog/2005/04/15/exclusive-new-tiger-window-style-deciphered/">previously commented on</a> has now made <a href="http://developer.apple.com/qa/qa2005/qa1423.html">an appearance in Apple&#8217;s documentation</a>.  Unfortunately, it just tells how to activate the feature from Carbon.  We&#8217;re still waiting guidance on <em>when</em> to use it&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2005/06/20/new-tiger-window-style-documented-sort-of/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exclusive: New Tiger window style deciphered</title>
		<link>http://sprucehill.com/rsf/blog/2005/04/15/exclusive-new-tiger-window-style-deciphered/</link>
		<comments>http://sprucehill.com/rsf/blog/2005/04/15/exclusive-new-tiger-window-style-deciphered/#comments</comments>
		<pubDate>Fri, 15 Apr 2005 21:38:29 +0000</pubDate>
		<dc:creator>Russell</dc:creator>
				<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sprucehill.com/rsf/blog/2005/04/15/exclusive-new-tiger-windows-deciphered/</guid>
		<description><![CDATA[Paul Thurrott accidentally wrote a pretty favorable review of Mac OS X 10.4 (&#8220;Tiger&#8221;). Towards the end, he apparently realized he was losing all his street cred in the Windows world, so he threw in some gratuitously negative comments &#8212; &#8230; <a href="http://sprucehill.com/rsf/blog/2005/04/15/exclusive-new-tiger-window-style-deciphered/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Paul Thurrott accidentally wrote a pretty favorable <a href="http://www.winsupersite.com/reviews/macosx_tiger.asp">review</a> of Mac OS X 10.4 (&#8220;Tiger&#8221;).  Towards the end, he apparently realized he was losing all his street cred in the Windows world, so he threw in some gratuitously negative comments &#8212; &#8220;Tiger is in fact a minor upgrade with few major new features, more akin to what we&#8217;d call a service pack in the Windows world&#8221; &#8212; which, apart from being patently ridiculous, supports the not-very-original premise that Apple fans are &#8220;suckers&#8221; who will immediately cough up the cash for mere glitz.</p>

<ul>
<li>Pretty tough stance for a self-described &#8220;Mac fan [his] entire life&#8221;; so much so, we learn, that in 1987 he replaced his Commodore 64 with &#8230; an Apple IIgs.  This was followed by an Amiga; then, when Commodore went belly up, a PC running OS/2 &#8212; this is one industry analyst who really knows how to pick winners &#8212; and finally, in 2001, an iBook.  Pity the poor &#8220;Mac fan&#8221;, pressing his nose against the glass for <em>fourteen years</em>.</li>
</ul>

<p>I mention all this as an excuse to use another of Thurrott&#8217;s comments as a jumping-off point for an observation I have not seen elsewhere as yet.  (Not that anyone&#8217;s going to see it here, but at least I&#8217;ll be on the record.)  By now many people have commented on the new window style seen in Mail, where the title bar and toolbar blend together in a single gradient.  Thurrott remarks upon &#8220;yet another user interface style&#8221;, which he calls &#8220;plastic&#8221;; others have called this change &#8220;arbitrary&#8221; or &#8220;gratuitous&#8221; or &#8220;confusing&#8221;.</p>

<p>Well, I think I&#8217;ve figured out the logic.  Here are some applications using the new window style: <a href="http://images.apple.com/macosx/features/mail/images/mailnew20050412.jpg">Mail</a>, <a href="http://www.sprucehill.com/images/HelpViewerMail.png">Help Viewer</a>, <a href="http://images.apple.com/macosx/features/systempreferences/images/indexsearch20050412.jpg">System Preferences</a>, <a href="http://www.sprucehill.com/images/Xcode2Sample.png">Xcode 2</a>, and the <a href="http://www.sprucehill.com/images/SpotlightOrioles.png">Spotlight</a> window itself.  What do these all have in common? <em>The Spotlight search field.</em> The new window style, to me, is a visual cue that the application supports Spotlight as a primary navigation mechanism.</p>

<p>Unfortunately this analysis fails in two important respects:</p>

<ol>
<li><p>I haven&#8217;t found anything in the Apple documentation that suggests this usage is intentional. (Of course, the Tiger developer documentation hasn&#8217;t been publicly released yet.)</p></li>
<li><p>A huge exception to the rule is the Finder, whose windows still (inexplicably) use the &#8220;brushed metal&#8221; style. You&#8217;d expect that if a Spotlight cue were present anywhere, it&#8217;d be in the new Finder.</p></li>
</ol>

<p>Still, this is the best theory I know to explain the new style, and I haven&#8217;t seen anyone else mention it, so I hereby take credit for it.</p>

<ul>
<li>On the other hand, Mail&#8217;s <a href="http://images.apple.com/macosx/features/mail/images/mailnew20050412.jpg">toolbar icons</a>&#8230; I understand why they&#8217;re in &#8220;capsules&#8221; (to allow for toolbar button &#8220;groups&#8221; &#8212; though it makes the non-grouped icons needlessly cramped), and I even know why they&#8217;re &#8220;centered&#8221; (they&#8217;re not; they&#8217;re left-justified over the message list, skipping over the mailbox source list &#8212; a bit of a hack, but having <strong>Delete</strong> and <strong>Junk</strong> over the source list is potentially confusing).  But I won&#8217;t make apologies for them, either.</li>
</ul>

<p><em>[2005-04-16: Added Help Viewer to the sample applications.]</em></p>

<p><em>[2005-04-22: Well, I could be wrong… see <a href="http://www.sprucehill.com/rsf/blog/2005/04/15/exclusive-new-tiger-window-style-deciphered/#comment-6">first comment</a>.]</em></p>

<p><em>[2005-05-05: Yes, I'm wrong... see <a href="http://www.sprucehill.com/rsf/blog/2005/04/15/exclusive-new-tiger-window-style-deciphered/#comment-7_">second comment</a>.]</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sprucehill.com/rsf/blog/2005/04/15/exclusive-new-tiger-window-style-deciphered/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: www.russellfinn.com @ 2012-02-08 02:24:05 by W3 Total Cache -->
