<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Curtis on Software</title>
	
	<link>http://software.curtisfarnham.com</link>
	<description />
	<lastBuildDate>Sun, 30 Oct 2011 12:58:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CurtisOnSoftware" /><feedburner:info uri="curtisonsoftware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>How to Install PHP Extensions in Mac OS X Lion</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/Je3Jegq4igc/</link>
		<comments>http://software.curtisfarnham.com/2011/10/30/how-to-install-php-extensions-in-mac-os-x-lion/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 12:58:20 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=299</guid>
		<description><![CDATA[Upgrading to Mac OS X Lion caused my existing PHP configuration to be wiped out, so I had to figure out how to install a handful of PHP extensions again. Various tutorials on the web say to download this and that, compile it from scratch, yada yada. I&#8217;m pretty lazy, so I went looking for how to do it with ...]]></description>
			<content:encoded><![CDATA[<p>Upgrading to Mac OS X Lion caused my existing PHP configuration to be wiped out, so I had to figure out how to install a handful of PHP extensions again.  Various tutorials on the web say to download this and that, compile it from scratch, yada yada.  I&#8217;m pretty lazy, so I went looking for how to do it with minimal <code>./configure --enable-this --enable-that &#038;&#038; make &#038;&#038; make install</code> commands.</p>
<h3>PECL</h3>
<p>Some extensions are available in PECL.  Try that first.  For example, with the GeoIP extension:</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> pecl <span style="color: #c20cb9; font-weight: bold;">install</span> geoip</pre>
</div>
</div>
<p>Almost there!  Skip to the end of this post for one last set of commands to activate it.</p>
<h3>PHP Source + phpize</h3>
<p>A harder one for me, for example, was <code>mcrypt</code>.  Fortunately the version of PHP that comes default in OS X doesn&#8217;t change that often.  (I&#8217;ve been using PHP with my MacBook Pro running Snow Leopard since April 2010 and the only time PHP was updated was when I upgraded to OS X Lion.)  This means you can download the exact same version of PHP that OS X comes with and use it as a base for installing more extensions.</p>
<p>First, download PHP.  OS X Lion comes with <a href="http://us.php.net/get/php-5.3.6.tar.bz2/from/a/mirror" target="_blank">version 5.3.6</a>.  Then put it in a safe spot that you can remember if you need to come back to it.  I put mine in <code>/usr/src/</code>.</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xjvf</span> ~<span style="color: #000000; font-weight: bold;">/</span>Downloads<span style="color: #000000; font-weight: bold;">/</span>php-5.3.6.tar.bz2</pre>
</div>
</div>
<p>Now when you need to install a new extension, here are the basic steps to take:</p>
<ol>
<li>Make sure your system has any dependencies that the extension needs.  MacPorts is really handy for this.  For example, with <code>mcrypt</code>, I just had to run the following:
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> port <span style="color: #c20cb9; font-weight: bold;">install</span> mcrypt</pre>
</div>
</div>
</li>
<li>Now go to the PHP directory you created above and run a simple set of commands:
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>php-5.3.6<span style="color: #000000; font-weight: bold;">/</span>ext<span style="color: #000000; font-weight: bold;">/</span>mcrypt
<span style="color: #c20cb9; font-weight: bold;">sudo</span> phpize
<span style="color: #c20cb9; font-weight: bold;">sudo</span> .<span style="color: #000000; font-weight: bold;">/</span>configure
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre>
</div>
</div>
</li>
</ol>
<h3>Wrap-up</h3>
<p>Now that you&#8217;ve got your extension compiled, one way or another, you need to update your <code>/etc/php.ini</code> to activate it.  Here&#8217;s how:</p>
<ol>
<li>First, open up your <code>/etc/php.ini</code> and scroll down to where the dynamic extensions are configured.  This section starts at about line 920 for me.</li>
<li>Add a line, <code>extension=mcrypt.so</code></li>
<li>Restart Apache with:
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> apachectl graceful</pre>
</div>
</div>
</li>
</ol>
<p>That&#8217;s it!  This should do it for installing most PHP extensions in Mac OS X Lion.  Just substitute the extension names I used above (<code>geoip</code> and <code>mcrypt</code>) with the names of whatever extensions you need.</p>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/Je3Jegq4igc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/30/how-to-install-php-extensions-in-mac-os-x-lion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/30/how-to-install-php-extensions-in-mac-os-x-lion/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-install-php-extensions-in-mac-os-x-lion</feedburner:origLink></item>
		<item>
		<title>Quote: Any Fool Can Write Code…</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/mdvb13VIPU8/</link>
		<comments>http://software.curtisfarnham.com/2011/10/24/quote-any-fool-can-write-code/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 01:06:03 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=291</guid>
		<description><![CDATA[I came across a quote just now. It makes great point! Any fool can write code that a computer can understand. Good programmers write code that humans can understand. ~Martin Fowler I&#8217;ve been a programmer for 10+ years now, and I can say it&#8217;s pretty easy to quickly hammer out a subroutine that works. That is, if all you want ...]]></description>
			<content:encoded><![CDATA[<p>I came across a quote just now. It makes great point!</p>
<blockquote><p>Any fool can write code that a computer can understand. Good programmers write code that humans can understand. ~Martin Fowler</p></blockquote>
<p>I&#8217;ve been a programmer for 10+ years now, and I can say it&#8217;s pretty easy to quickly hammer out a subroutine that <em>works</em>.  That is, if all you want is something that runs today.  And if you don&#8217;t care about testing.  But how to write software that&#8217;s easily readable by someone else is a different game all together.  I&#8217;d say this is the very reason why Object Oriented Programming even exists.  Human-readable code is one aspect of programming that separates the men from the boys, the artists from everybody else.  For all but the most short-lived scripts, sooner or later your code <em>will</em> be read and maintained by someone else.  It saves loads of time to write your code in a clear manner initially than to cut corners and leave a nightmare for the poor guy who takes over later.</p>
<p>With my own code, that poor guy is often myself!  If it&#8217;s been more than 3 to 6 months since I touched my own code, I&#8217;ve forgotten so much of what I wrote that it might as well have been written by someone else.</p>
<p>How to write beautiful code, Mr. Curtis?  Inline comments?  Docblock comments?  That&#8217;s a start.  But there&#8217;s more to it than that.  Truly beautiful code doesn&#8217;t need comments.  It is easy enough to read by someone who is fluent in the language but not necessarily a ninja.  Variables, functions, classes, and methods are named so that a human can read the name and instantly know what it&#8217;s there for.  (Yes, this means those names might need to be longer than you&#8217;re used to.)  The usage of tabs and spaces is consistent and orderly.  Long subroutines are broken down into meaningful chunks that don&#8217;t require a lot of scrolling from top to bottom in a text editor.</p>
<p>It&#8217;s harder than you might think.</p>
<p>On a related note, I would adapt this quote slightly.</p>
<blockquote><p>Any fool can write a user interface that a computer can understand. Good programmers write user interfaces that humans can understand.</p></blockquote>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/mdvb13VIPU8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/24/quote-any-fool-can-write-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/24/quote-any-fool-can-write-code/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=quote-any-fool-can-write-code</feedburner:origLink></item>
		<item>
		<title>Dealing With OSX Lion Damaged Disk Error</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/MWgpPP9YMXE/</link>
		<comments>http://software.curtisfarnham.com/2011/10/17/dealing-with-osx-lion-damaged-disk-error/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 18:18:50 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=284</guid>
		<description><![CDATA[After upgrading my MacBook Pro to the latest OSX Lion last Friday, I proceeded with the same upgrade on my wife&#8217;s MacBook. But this time I faced a new problem: Mac OS X Lion couldn&#8217;t be installed, because the disk Macintosh HD is damaged and can&#8217;t be repaired. Here&#8217;s a screenshot of the error dialog (shamelessly ripped from a post ...]]></description>
			<content:encoded><![CDATA[<p>After upgrading my MacBook Pro to the latest OSX Lion last Friday, I proceeded with the same upgrade on my wife&#8217;s MacBook. But this time I faced a new problem:</p>
<blockquote><p>Mac OS X Lion couldn&#8217;t be installed, because the disk Macintosh HD is damaged and can&#8217;t be repaired.</p></blockquote>
<p>Here&#8217;s a screenshot of the error dialog (shamelessly ripped from <a href="http://apple.stackexchange.com/questions/17930/how-can-i-fix-an-install-failed-error-while-installing-lion" target="_blank">a post at Stack Exchange&#8217;s Apple site</a> because I forgot to take one of my own.)</p>
<p><a href="http://software.curtisfarnham.com/wp-content/uploads/2011/10/install-failed-smaller.png"><img class="aligncenter size-medium wp-image-288" title="OSX Lion Install Failed" src="http://software.curtisfarnham.com/wp-content/uploads/2011/10/install-failed-smaller-300x226.png" alt="" width="300" height="226" /></a></p>
<p>&#8220;Oh, no!&#8221; I thought. &#8220;Great! My wife&#8217;s computer will be stuck with Snow Leopard forever. Maybe I should sell it and get her a MacBook Air instead.&#8221;</p>
<p>Turns out this ominous warning is a bit misleading. I was able to get around it by using <em>Applications -&gt; Utilities -&gt; Disk Utility</em> to fix the disk permissions. After that, I restarted the upgrade and it proceeded flawlessly. I didn&#8217;t even need a Snow Leopard installation disc like many other blog posts are recommending.</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/MWgpPP9YMXE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/17/dealing-with-osx-lion-damaged-disk-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/17/dealing-with-osx-lion-damaged-disk-error/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=dealing-with-osx-lion-damaged-disk-error</feedburner:origLink></item>
		<item>
		<title>Tip: Adding Custom Folders to Mac OSX $PATH Variable</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/qAsOLb_ElDU/</link>
		<comments>http://software.curtisfarnham.com/2011/10/15/tip-adding-custom-folders-to-mac-osx-path-variable/#comments</comments>
		<pubDate>Sat, 15 Oct 2011 23:30:17 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=269</guid>
		<description><![CDATA[Here&#8217;s a tip for customizing the command line&#8217;s $PATH environment variable in Mac OSX. Put a file containing your extra path(s) in /etc/paths.d/. I just added one such file so my Git installation could work again: $ echo /usr/local/git/bin &#62; /etc/paths.d/51-git To test it out, open a new tab in Terminal.app and echo the path (split across two lines for ...]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a tip for customizing the command line&#8217;s <code>$PATH</code> environment variable in Mac OSX.  Put a file containing your extra path(s) in <code>/etc/paths.d/</code>.  I just added one such file so my Git installation could work again:</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>git<span style="color: #000000; font-weight: bold;">/</span>bin <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>paths.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">51</span>-git</pre>
</div>
</div>
<p>To test it out, open a new tab in Terminal.app and echo the path (split across two lines for clarity.  Nnote the Git path at the end.)</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$PATH</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>mysql<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>opt<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>sbin
:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>X11<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>git<span style="color: #000000; font-weight: bold;">/</span>bin</pre>
</div>
</div>
<p>Beautiful!  This avoids having to add a custom <code>~/.bashrc</code> or <code>~/.profile</code>.  It works in OSX Lion and OSX Snow Leopard.  I&#8217;m not sure about earlier releases.  (Anyone care to chime in on that?)</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/qAsOLb_ElDU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/15/tip-adding-custom-folders-to-mac-osx-path-variable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/15/tip-adding-custom-folders-to-mac-osx-path-variable/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tip-adding-custom-folders-to-mac-osx-path-variable</feedburner:origLink></item>
		<item>
		<title>Tip with MacPorts on OSX Lion: Upgrade XCode Too!</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/kDtOez5vTkk/</link>
		<comments>http://software.curtisfarnham.com/2011/10/15/tip-with-macports-on-osx-lion-upgrade-xcode-too/#comments</comments>
		<pubDate>Sat, 15 Oct 2011 23:19:42 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=266</guid>
		<description><![CDATA[After upgrading my MacBook Pro to OSX Lion yesterday, I tried using git to commit some changes to one of my codebases. But somehow the path to Git had been blown away by the upgrade. I found my Git installation in /usr/local/git/, but in the process I decided to do an update of my MacPorts install base. That gave me ...]]></description>
			<content:encoded><![CDATA[<p>After <a href="http://software.curtisfarnham.com/2011/10/14/upgrading-from-osx-snow-leopard-to-lion/">upgrading my MacBook Pro to OSX Lion</a> yesterday, I tried using <code>git</code> to commit some changes to one of my codebases.  But somehow the path to Git had been blown away by the upgrade.  I found my Git installation in <code>/usr/local/git/</code>, but in the process I decided to do an update of my MacPorts install base.  That gave me a strange error:</p>
<div class="wp_syntax">
<div class="code">
<pre class="text" style="font-family:monospace;">Error: /opt/local/bin/port: port selfupdate failed: Error installing new MacPorts base: shell command failed (see log for details)</pre>
</div>
</div>
<p>I wasn&#8217;t sure what log file it was referring to, so I tried the lazy geek&#8217;s way and just downloaded a new MacPorts DMG and tried to install it.  I was promptly greeted with another error message:</p>
<div class="wp_syntax">
<div class="code">
<pre class="text" style="font-family:monospace;">&lt;strong&gt;MacPorts-2.0.0 can't be installed on this computer.&lt;/strong&gt;
&nbsp;
Xcode is not installed, or was installed with UNIX Development (10.5+) or Command Line Support (10.4) deselected.</pre>
</div>
</div>
<p>Oh.  That&#8217;s right.  I need to upgrade Xcode too.  I could have guessed that.  Sigh.  I&#8217;m not looking forward to the 4 GB download that this will require!</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/kDtOez5vTkk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/15/tip-with-macports-on-osx-lion-upgrade-xcode-too/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/15/tip-with-macports-on-osx-lion-upgrade-xcode-too/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tip-with-macports-on-osx-lion-upgrade-xcode-too</feedburner:origLink></item>
		<item>
		<title>Pixelmator: Native Gimp for Mac OSX?</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/LD0VqgxkLdo/</link>
		<comments>http://software.curtisfarnham.com/2011/10/14/pixelmator-native-gimp-for-mac-osx/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 23:08:55 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=260</guid>
		<description><![CDATA[Since migrating from Linux to Mac a couple years ago, I&#8217;ve been my cheap self and persisted with using Gimp for Mac instead of going with one of the native Mac image manipulation apps. It worked, although my biggest complaint has been having to click twice between each of its windows and toolbars, due to differences in windowing systems between ...]]></description>
			<content:encoded><![CDATA[<p>Since migrating from Linux to Mac a couple years ago, I&#8217;ve been my cheap self and persisted with using <a href="http://www.gimp.org/macintosh/" target="_blank">Gimp for Mac</a> instead of going with one of the native Mac image manipulation apps.  It worked, although my biggest complaint has been having to click twice between each of its windows and toolbars, due to differences in windowing systems between the two operating systems.</p>
<p>So I took a cue from a good friend and fellow web monkey and bought <a href="http://www.pixelmator.com/" target="_blank">Pixelmator</a>.  It seems to be without question the most popular and capable of the lightweight apps in the App Store.  Only <a href="http://www.adobe.com/products/photoshop-elements.html" target="_blank">Photoshop Elements</a> is more popular (but over twice the cost.)</p>
<p>My first impression: It&#8217;s a native Mac implementation of Gimp!  I was expecting something&#8230; different.  Well, at least it&#8217;s a lot snappier and doesn&#8217;t require clicking twice when switching between windows.</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/LD0VqgxkLdo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/14/pixelmator-native-gimp-for-mac-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/14/pixelmator-native-gimp-for-mac-osx/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pixelmator-native-gimp-for-mac-osx</feedburner:origLink></item>
		<item>
		<title>Upgrading from OSX Snow Leopard to Lion</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/UDZ7P1QILRE/</link>
		<comments>http://software.curtisfarnham.com/2011/10/14/upgrading-from-osx-snow-leopard-to-lion/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 22:48:42 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=247</guid>
		<description><![CDATA[I&#8217;ve been anxiously awaiting the day when I would upgrade my MacBook Pro from OSX Snow Leopard to OSX Lion. I hadn&#8217;t gotten to it yet because I&#8217;ve been so busy with everything else. But I also wanted to wait for the early adopters to find the bugs and let Apple fix them. What got me to upgrade finally was ...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been anxiously awaiting the day when I would upgrade my MacBook Pro from <a href="http://www.apple.com/macosx/" target="_blank">OSX</a> Snow Leopard to OSX Lion. I hadn&#8217;t gotten to it yet because I&#8217;ve been so busy with everything else. But I also wanted to wait for the early adopters to find the bugs and let Apple fix them.</p>
<p>What got me to upgrade finally was hitting an apparent snag in my efforts earlier today to <a href="http://software.curtisfarnham.com/2011/10/14/upgraded-to-ios-5-and-icloud/">upgrade my iPhone to iOS 5 and migrate my MobileMe account to iCloud</a>. When my iPhone finally rebooted and I got through the migration popups and all, I noticed my Contacts weren&#8217;t there. Uh-oh! I&#8217;ve got quite a lot of them.</p>
<p>Upon further research, I realized my MacBook Pro wouldn&#8217;t be able to take advantage of all the iCloud glory without being upgraded to Lion first. At least, not initially. So I took the plunge.</p>
<h3>The Upgrade Process</h3>
<p>Like my iPhone upgrade process, this too was a little rocky. I upgraded via the App Store icon on my dock. My first press of the Buy App button resulted in a dialog asking me to log in with my Apple ID. I did that and then&#8230; nothing. Huh? So I pressed Buy App again and it worked. Then I realized this was going to be a huge download. It&#8217;s well over 3 GB in size.</p>
<p>A while later it finished downloading and did the install process. No problems there, thankfully. But when my machine rebooted and I logged into my desktop, it went into super-slow churning mode which took <em>forever</em> to complete. Maybe 20 or 30 minutes. I&#8217;m not sure what took it so long, but the display was jerky, all the buttons and mouse gestures and icons were slow to respond, and the pinwheel mouse icon came and went a lot. Part of it may have been that it had to convert my email archives to a new format, and I have tens of thousands of messages in my archives spanning 3 different IMAP accounts. I also tried to get Address Book and iCal all set up at the same time. Both of those might have contributed to the churning. Once it finished doing whatever it was doing, the system became fully responsive again.</p>
<p>The Address Book app showed all my old contacts when I first opened it. But at one point it went blank and acted like they&#8217;d all been erased. I closed the app and did something else for a couple minutes. When it came back, my contacts were all there. Whew!</p>
<p>As for my iCal, I noticed when I opened it that all my calendars were showing in duplicate. I finally figured out that I had to go to the Preferences -&gt; Accounts pane and remove my old MobileMe account. My calendars had all been copied from MobileMe to iCloud earlier today, hence the duplication.</p>
<h3>First Impressions of OSX Lion</h3>
<p>The first difference I noticed was the login screen upon boot up. It&#8217;s been substantially reworked. I think this will be easier for me than the one in Slow Leopard because I have several login accounts and I had to scroll up and down to see them all. In Lion, they&#8217;re shown as icons in a row. Nice.</p>
<p>The next difference I noticed is that vertical scrolling is backwards from what I&#8217;m used to. Now, the direction I move my fingers on the trackpad is the same direction the window will scroll. In Snow Leopard, it was opposite. Good thing it&#8217;s controllable in System Preferences. But I&#8217;m sticking with the new way for now, just to give it a shot.</p>
<p>The window styling for Address Book and iCal have been significantly overhauled. I couldn&#8217;t help but wonder if Apple took some styling cues from the iPad here. But I don&#8217;t use an iPad so I can&#8217;t say for sure.</p>
<p>There are many other tweaks, some of which I&#8217;m sure I haven&#8217;t found yet. Unfortunately I don&#8217;t have time to give a thorough overview of everything I see.</p>
<p>I&#8217;m glad I finally got this upgrade out of the way. It&#8217;s good to have the latest and greatest again.  How about you?  Have you upgraded yet?  Plan to soon?</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/UDZ7P1QILRE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/14/upgrading-from-osx-snow-leopard-to-lion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/14/upgrading-from-osx-snow-leopard-to-lion/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=upgrading-from-osx-snow-leopard-to-lion</feedburner:origLink></item>
		<item>
		<title>Upgraded to iOS 5 and iCloud</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/-bDHYY7ABgA/</link>
		<comments>http://software.curtisfarnham.com/2011/10/14/upgraded-to-ios-5-and-icloud/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 18:28:34 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[icloud]]></category>
		<category><![CDATA[ios]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=237</guid>
		<description><![CDATA[Today I upgraded my iPhone 4 to iOS 5 and my MobileMe account to iCloud. A friend was telling me yesterday that some ISP&#8217;s in London were sustaining a huge mysterious spike in traffic. Then they realized everyone was trying to upgrade their iPhones. Ha ha. I&#8217;ve also seen reports that around half of people&#8217;s upgrade attempts are failing right ...]]></description>
			<content:encoded><![CDATA[<p>Today I upgraded my iPhone 4 to iOS 5 and my MobileMe account to iCloud.  A friend was telling me yesterday that some ISP&#8217;s in London were sustaining a huge mysterious spike in traffic.  Then they realized everyone was trying to upgrade their iPhones. Ha ha.  I&#8217;ve also seen reports that around half of people&#8217;s upgrade attempts are failing right now due to system overloading.</p>
<p>My first attempt at upgrading failed too.  It was Wednesday of this week, the same day iOS 5 was released.  I should have known not to try it just then.  After I backed up my phone in iTunes, I then tried to proceed with the iOS upgrade.  It made its own backup again (sigh&#8230; 13 GB takes a long time to copy over USB 2.0) and when I returned to my computer a half hour later, there was nothing in iTunes&#8217; status bar or on my phone to indicate it was still in progress.  So I thought it had completed.  But when I checked my iPhone&#8217;s Settings app, it indicated I was still on iOS 4.2.  What!?!  I was out of time and couldn&#8217;t get back to it until this morning.</p>
<p>As nice as Apple&#8217;s products are, the upgrade process was a bumpy ride.  It gave me an error partway through (can&#8217;t remember now what it said) and then told me it was restoring my phone to factory settings.  Yikes!  I let it continue since I wasn&#8217;t sure what else to do.  Half an hour later it had completed restoring my phone and my latest backup.  But in the process&#8230; surprise!  It actually did upgrade to iOS 5.</p>
<p>No doubt Apple is receiving all sorts of reports like this, and it has multiple teams of engineers scrambling to address these problems.</p>
<p>I then upgraded my MobileMe account to iCloud, as my phone prompted me to do.  There were all sorts of popups an dialogs to work through when my phone first booted up after the upgrade.  No errors, just an unexpected amount of busy work getting it set up.</p>
<p>Funny, I had a dream last night that I was taking a tour of Apple and I actually met Steve Jobs.  (Apparently my sub-conscious brain hasn&#8217;t yet gotten the memo that he passed away last week.)  I was in some kind of on-site museum of Apple products and I overheard him say he needed to hire someone for a certain job.  &#8220;Ooh, maybe that could be me!&#8221;  And then the dream ended.  I wonder what it&#8217;s like to work there.</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/-bDHYY7ABgA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/14/upgraded-to-ios-5-and-icloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/14/upgraded-to-ios-5-and-icloud/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=upgraded-to-ios-5-and-icloud</feedburner:origLink></item>
		<item>
		<title>Application Design: Start with the UI First</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/iIucl_f51j8/</link>
		<comments>http://software.curtisfarnham.com/2011/10/12/application-design-start-with-the-ui-first/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 05:46:56 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ui design]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=229</guid>
		<description><![CDATA[For the last couple of years I&#8217;ve had the privilege of developing software for a major US Government institution. They have a backend data storage system that goes by a certain name, and a separate thin client frontend that many of their staff use which goes by a very different sounding name. So it&#8217;s funny to me when I hear ...]]></description>
			<content:encoded><![CDATA[<p>For the last couple of years I&#8217;ve had the privilege of developing software for a major US Government institution.  They have a backend data storage system that goes by a certain name, and a separate thin client frontend that many of their staff use which goes by a very different sounding name.  So it&#8217;s funny to me when I hear their staff using these two names interchangeably.  They just don&#8217;t get that the two are vastly different systems with vastly different technologies and roles.</p>
<p>After seeing this, it hit me.  To the uninitiated, the frontend user interface <em>is</em> the application.  That&#8217;s all the user cares about.  It&#8217;s all they will ever see or know about my software.  So if I want people to like my software enough to use it, shouldn&#8217;t I spend a good amount of time getting it right?  The late Steve Jobs said it this way:</p>
<blockquote><p>Design is a funny word. Some people think design means how it looks. But of course, if you dig deeper, it&#8217;s really how it works.</p></blockquote>
<p>We all know how important the user interface was to him.  I think it&#8217;s THE reason Apple products have taken off over the last decade.</p>
<p>How about using this idea to drive the design of the whole application?  Call it Interface Driven Development.  If you Google it, surprisingly there isn&#8217;t a lot of discussion on this topic.</p>
<p>It makes a lot of sense to me.  I tend to work on complex applications (and what app isn&#8217;t at some level?)  But my brain just isn&#8217;t sophisticated enough to picture a fully functional UI solely in my head and back that out all the way down to the database schema ahead of time.  I&#8217;ve got to write some code and then pause and think about it before I can go farther.  Lather, rinse, repeat.</p>
<p>If I start with designing the database schema first, I always end up creating columns or even whole tables that I don&#8217;t need by the time the application is released.  What a waste.  That&#8217;s backwards.  But if I start with the UI, I&#8217;ll know exactly what I need by the time I&#8217;m ready to build the backend.  In the process, I spend more time figuring out what my end user really needs.</p>
<p>Try it next time.  I think you&#8217;ll like it.</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/iIucl_f51j8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/12/application-design-start-with-the-ui-first/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/12/application-design-start-with-the-ui-first/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=application-design-start-with-the-ui-first</feedburner:origLink></item>
		<item>
		<title>What Customer Service Is Not</title>
		<link>http://feedproxy.google.com/~r/CurtisOnSoftware/~3/WHZz011sQtg/</link>
		<comments>http://software.curtisfarnham.com/2011/10/10/what-customer-service-is-not/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 23:18:49 +0000</pubDate>
		<dc:creator>Curtis</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[customer service]]></category>

		<guid isPermaLink="false">http://software.curtisfarnham.com/?p=214</guid>
		<description><![CDATA[My main income stream as a freelance developer is due to end early in 2012, so my wife and I have decided to stockpile cash so we can withstand any gaps in income that may ensue. (I&#8217;ve got several options for future work, but I just don&#8217;t know which is going to pan out yet.) So I stopped by ING ...]]></description>
			<content:encoded><![CDATA[<p>My main income stream as a freelance developer is due to end early in 2012, so my wife and I have decided to stockpile cash so we can withstand any gaps in income that may ensue.  (I&#8217;ve got several options for future work, but I just don&#8217;t know which is going to pan out yet.)</p>
<p>So I stopped by ING Direct&#8217;s <a href="http://home.ingdirect.com/products/products.asp?s=OrangeSavingsAccount" target="_blank">Orange Savings page</a> and noticed that their posted rate of return looked a little dated.  It was from 8 months ago.  I assumed the worst, that ING&#8217;s rate had gone down since then, which was why they stuck with the older data.  Or I thought perhaps they had just forgotten to update it.  So I ended up going elsewhere with my savings.</p>
<p>Later, I thought It&#8217;d be nice and give ING some feedback and constructive criticism on why they lost my business.  So I sent them the following message.</p>
<div class="wp_syntax">
<div class="code">
<pre class="text" style="font-family:monospace;">Hello,
&nbsp;
I've been in the market recently for opening an online savings account. I
noticed your ad page for Orange savings has outdated data. The 1% APY it
advertises is from back in February of this year. It is disappointing to
me that you are not stating your current rate. I would have opened an
account with you, but I opted for ___________ instead, because their data
was current (and still 1%.) I hope I am wrong, but having such outdated
data in a market like this seems to imply that your current rates are
lower. You may be losing your more scrutinizing customers this way, if your
rates indeed are still 1%.
&nbsp;
What are your current rates, by the way?
&nbsp;
Thanks,
Curtis</pre>
</div>
</div>
<p>I was a little surprised when I actually got a response.  But it was not the kind of response I had hoped for.  Far from it.</p>
<div class="wp_syntax">
<div class="code">
<pre class="text" style="font-family:monospace;">Hi Curtis,
&nbsp;
The Orange Savings Account is currently earning 1.00% APY.
&nbsp;
We base the Orange Savings Account rate on market conditions - it is a
variable rate that can fluctuate. With an Orange Savings Account, interest
accrues daily, compounds monthly and is credited to your available balance
at the end of the month.
&nbsp;
The Orange Savings Account offers a level of flexibility, freedom, and
security you simply won't find at other banks. And because your account
is FDIC insured, your account is secure.
&nbsp;
There is no minimum balance required to open your Orange Savings Account,
 and you don't have to keep a specific balance in your account to qualify
 for a high interest rate. No matter how much you have on deposit, you
will earn the current interest rate. Plus, we won't burden you with hidden
 fees or service charges - period. So, you earn high interest on every
penny you deposit.
&nbsp;
You don't have to switch your bank. Simply activate your Orange Savings
Account today and start earning interest that will actually amount to
something.
&nbsp;
Opening an Orange Savings Account is quick and convenient. Just follow
these steps:
&nbsp;
-Visit ingdirect.com.
-Click 'Open an Account.'
-Click 'Orange Savings Account.'
-Click 'Open Now.'
&nbsp;
Note: If you are an existing Customer, be sure to sign in before
clicking 'Open an Account.'
&nbsp;
Thanks,
_______</pre>
</div>
</div>
<p>Hmmm.  Something&#8217;s wrong here.  ING&#8217;s representative answered my question all right, but that wasn&#8217;t even the point of my email.  In my original message, I said I had already made my decision and moved on.  But in his response, I get what reads like cut-and-paste standard marketing shpiel encouraging me to open an account.  (Honestly it was a little offensive to see that.)  And there was hardly any acknowledgement of my complaint.</p>
<p>Being a glutton for punishment, I replied with a little clarification.</p>
<div class="wp_syntax">
<div class="code">
<pre class="text" style="font-family:monospace;">Dear ______,
&nbsp;
Thank you for your reply. However, I'm not sure my message got through.
I understand market fluctuations and all that. I was simply trying to
tell you that having such an old date on your website was a turnoff that
led me to go elsewhere with my business. Take it for what you will, but
I think you're losing business by not posting current rates. By &quot;current&quot;,
I mean within the last month or two.
&nbsp;
Thanks,
Curtis</pre>
</div>
</div>
<p>I got a reply once more, but this time from a different person.</p>
<div class="wp_syntax">
<div class="code">
<pre class="text" style="font-family:monospace;">Hi Curtis,
&nbsp;
Please note, the date on the website isn't old or outdated because it
still reflects the current rate - The rate is 1% APY. The effective
date of an interest rate only changes when the rate changes.  If anything,
the older date on the website reflects the stability of our rates.
&nbsp;
Thanks,
______</pre>
</div>
</div>
<p>Pardon me, but I thought I was talking to the customer <em>service</em> department.</p>
<p>Were my comments over the top?  Was I out of line?  Did I fail to communicate my concern?  I was trying to give them perspective from the customer&#8217;s eyes.  But they never once acknowledged that they understood the problem (as I saw it.)  Instead, I got standard advertising copy shoved in my face, and I was all but explicitly told that my expectations were wrong and &#8220;here, let us correct them for you.&#8221;</p>
<p>Ladies and gentlemen, this is not customer service.  In my 10+ years of software development, I&#8217;ve had to do quite a lot of customer service (in my industry, it&#8217;s called <em>technical support</em>).  I&#8217;ve learned quite a lot in the process.  If someone takes the time to tell you something they think is a problem with your software (or website or product or whatever), even if their expectations were a little off, ING did not demonstrate the way to handle it.  Here&#8217;s something along the lines of what they should have said:</p>
<div class="wp_syntax">
<div class="code">
<pre class="text" style="font-family:monospace;">Dear Curtis,
&nbsp;
I'm very sorry to see that you've already committed your savings to
________ bank.  Would you be willing to reconsider?  Our rates are
actually still at 1%.  Here's why we think our offering is more
competitive.  [etc. etc. etc.]
&nbsp;
We haven't updated the rate on our web page because it is still current.
But perhaps we need to find a better way of communicating that.  I'll
forward your message on to my team.  Thanks for your feedback.
&nbsp;
Sincerely,
__________</pre>
</div>
</div>
<p>This would have made all the difference.</p>
<p>Customer service is about interpersonal relationships.  1) Listening and 2) responding with empathy, are the first keys.  Telling the customer they&#8217;re wrong is never a way to get anywhere.  Neither is giving them irrelevant ad copy which they didn&#8217;t ask for.</p>
<img src="http://feeds.feedburner.com/~r/CurtisOnSoftware/~4/WHZz011sQtg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.curtisfarnham.com/2011/10/10/what-customer-service-is-not/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.curtisfarnham.com/2011/10/10/what-customer-service-is-not/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=what-customer-service-is-not</feedburner:origLink></item>
	</channel>
</rss>

