<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>Rob Wilkerson</title>
    <subtitle>You'll Know When I Know</subtitle>
    <id>http://robwilkerson.org/feed</id>
    <updated>2008-10-06T14:21:54-04:00</updated>
    
    <link href="http://robwilkerson.org" />
    <generator uri="http://chyrp.net/" version="2.0">Chyrp</generator>
    <link rel="self" href="http://feeds.feedburner.com/robwilkerson" type="application/atom+xml" /><feedburner:emailServiceId>1537366</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><entry>
        <title type="html">1 in 4 Mammals at Risk of Extinction</title>
        <id>tag:robwilkerson.org,2008-10-06:/id/130/</id>
        <updated>2008-10-06T14:21:54-04:00</updated>
        <published>2008-10-06T14:21:54-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/413044268/index.html" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;That is a seriously terrifying statistic if it’s real.&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;While the new report estimated that one in four mammals is threatened with extinction, the actual numbers listed were 1,141 out of 5,487 species. That comes out to 20.8 percent, closer to one in five.&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;p&gt;Oh, never mind then. One in five is &lt;em&gt;much&lt;/em&gt; more acceptable.&lt;/p&gt;        </content>
    <feedburner:origLink>http://www.cnn.com/2008/TECH/science/10/06/endangered.mammals.ap/index.html?eref=rss_topstories</feedburner:origLink></entry>
    <entry>
        <title type="html">Rethinking the Taskbar</title>
        <id>tag:robwilkerson.org,2008-10-05:/id/127/</id>
        <updated>2008-10-05T18:50:06-04:00</updated>
        <published>2008-10-05T18:07:52-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/412253143/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;Over the last couple of weeks, I’ve noticed something about how I’ve organized my desktop: it no longer includes a taskbar.  And, although it’s one of those computing metaphors that been around forever and seems timeless, obvious and necessary, I don’t miss it at all.  In fact, I really like &lt;em&gt;not&lt;/em&gt; having it around.&lt;/p&gt;

	&lt;p&gt;The taskbar, as it exists by default (but with variances) in each of the three operating systems that people talk about when they talk about operating systems, exists to serve three primary purposes:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;Application launcher&lt;/li&gt;
		&lt;li&gt;Window manager&lt;/li&gt;
		&lt;li&gt;Notification area&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;What I’ve gradually realized is that the only capability I really need and use is the notification area.  The other two concerns are better handled, I think, in other ways.&lt;/p&gt;

	&lt;h2&gt;Application Launcher&lt;/h2&gt;

	&lt;p&gt;In the interest of full disclosure, I’ll admit that I keep this functionality around on my desktop, but only in the interest of fallback.  Except in the case of emergency, I used a third party key-based application launcher that is unobtrusive and more productive for me.  My choices: &lt;a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver"&gt;Quicksilver&lt;/a&gt; (Mac), &lt;a href="http://do.davebsd.com/"&gt;&lt;span class="caps"&gt;GNOME&lt;/span&gt; Do&lt;/a&gt; (Linux) and &lt;a href="http://launchy.net"&gt;Launchy&lt;/a&gt; (Windows).  &lt;/p&gt;

	&lt;p&gt;There’s no escaping the fact that a few key taps is easier and faster than wading through layers of nested menus.&lt;/p&gt;

	&lt;h2&gt;Window Manager&lt;/h2&gt;

	&lt;p&gt;The window manager is the visual metaphor that indicates which applications are running and/or which windows of a given application are open. On Mac, this is a function of the &lt;a href="http://support.apple.com/kb/HT2474?viewlocale=en_US"&gt;dock&lt;/a&gt;, on Linux it’s a panel accoutrement that can be added or removed like every other panel option and on Windows it’s that middle area of the taskbar between the Start button and the system tray (now called the notification area).  But why do we need it?&lt;/p&gt;

	&lt;p&gt;Once I noticed that I’d effectively removed it from my consciousness, I started thinking about why.  The fact is that I already know what windows are open when I need to know.  At any given time, only one window is, and can be, active.  If I need another application or window, I use the keyboard-based task switcher to access that application or window.  On a Mac, that’s &lt;span class="technical"&gt;Cmd+Tab&lt;/span&gt; to switch applications and &lt;span class="technical"&gt;Cmd+`&lt;/span&gt; to switch between windows of the active application.  On Windows and Linux, &lt;span class="technical"&gt;Alt+Tab&lt;/span&gt; does both.  In order to switch tasks, the task switcher includes a display of the other applications or windows that are open.&lt;/p&gt;

	&lt;p&gt;In my mind, the only time I need to know what other applications and windows are available to me are when I no longer want the one that’s currently active.  At that time, I’m using the task switcher anyway, so the constant visual cue on the taskbar is actually just visual clutter.&lt;/p&gt;

	&lt;h2&gt;Customizing the Desktop&lt;/h2&gt;

	&lt;p&gt;Unfortunately, removing the window manager and application launcher isn’t possible on Windows, but I no longer use Windows on a regular basis and it &lt;em&gt;is&lt;/em&gt; possible, at least superficially, on both Mac and Linux.&lt;/p&gt;

	&lt;h3&gt;Mac&lt;/h3&gt;

	&lt;p&gt;Mac separates the three purposes of the taskbar nicely for me.  The application launcher and window manager are contained within its &lt;a href="http://support.apple.com/kb/HT2474?viewlocale=en_US"&gt;dock&lt;/a&gt; while the notification area exists on the menu bar.  I can’t &lt;em&gt;remove&lt;/em&gt; the dock without doing some potentially detrimental system-level hacking, but I’ve set it to auto-hide and moved it to the left of my desktop where I’m less likely to hover over it and make it display.  Although it’s still around and available, I haven’t used the dock in a very long time.&lt;/p&gt;

	&lt;h3&gt;Linux&lt;/h3&gt;

	&lt;p&gt;Linux, or more accurately, the &lt;a href="http://gnome.org"&gt;Gnome desktop environment&lt;/a&gt; that I prefer, does an even better job of separating these concerns. Gnome uses a panel metaphor on which the user can place different functional components.  My desktop includes a single panel at the top of my screen that looks a lot like my Mac menu bar.  It contains my application launcher – as I’ve admitted, I do keep it around just in case – and my notification area, but no window manager.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/10/05/rethinking-the-taskbar/</feedburner:origLink></entry>
    <entry>
        <title type="html">Firefox Profile Sharing with Dropbox</title>
        <id>tag:robwilkerson.org,2008-10-05:/id/128/</id>
        <updated>2008-10-05T07:56:32-04:00</updated>
        <published>2008-10-05T07:56:32-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/411861550/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;Not too long ago, I wrote about keeping &lt;a href="http://robwilkerson.org/2008/09/24/synchronizing-firefox-through-dropbox/"&gt;Firefox sync’d across multiple machines&lt;/a&gt; using &lt;a href="http://getdropbox.com"&gt;Dropbox&lt;/a&gt;. Now that I’ve used that system for going on two weeks, I feel like I can report that there’s nothing to report.  By and large, things are running quite smoothly (since turning off Dropbox notifications). This morning, though, I did come across a gotcha that was a direct result of this profile sync’ing, so I thought I’d mention it and share the solution.  Or at least &lt;em&gt;a&lt;/em&gt; solution. There may be others.&lt;/p&gt;

	&lt;p&gt;This morning I tried to download something and couldn’t. I could click on it, I could even see the &lt;span class="technical"&gt;.part&lt;/span&gt; file appear in my downloads directory (&lt;span class="technical"&gt;~/Downloads&lt;/span&gt; for me), but that was it. &lt;a href="http://getfirefox.com"&gt;Firefox&lt;/a&gt; seemed to create the partial download file and then stop. There was no error, no indication of anything afoul, just an aborted – and orphaned – download.  My preferences all looked okay, so I rolled up my sleeves and ventured into &lt;span class="technical"&gt;about:config&lt;/span&gt;.&lt;/p&gt;

	&lt;p&gt;In &lt;span class="technical"&gt;about:config&lt;/span&gt;, I didn’t know what I was looking for so I did the obvious and typed “download” into the &lt;strong&gt;filter&lt;/strong&gt; textbox. The only thing that looked odd in any way was that I had a preference named &lt;span class="technical"&gt;browser.download.lastDir&lt;/span&gt; (this may not be &lt;em&gt;exactly&lt;/em&gt; right, after fixing the problem and before returning to write about it, the setting has disappeared) and the path it contained was a Windows path – the path to the downloads path I have set on the Windows box that shares this profile.  I reset that value and tried my download again. This time it worked exactly as expected.&lt;/p&gt;

	&lt;p&gt;My guess is that the presence of backslashes in Windows paths throws the Unix-based Mac a curve ball it doesn’t know how to handle. Perhaps it’s treating the backslash (\) as an escape character in this context, but I don’t know that.  I’m going to try turning off the download history retention on all of my machines to determine whether that makes any difference moving forward. I suspect it might.  To do that, just open up Firefox’s &lt;strong&gt;Preferences&lt;/strong&gt;, select the &lt;strong&gt;Privacy&lt;/strong&gt; tab and uncheck &lt;strong&gt;Remember what I’ve downloaded&lt;/strong&gt;.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/10/05/firefox-profile-sharing-with-dropbox/</feedburner:origLink></entry>
    <entry>
        <title type="html">Tie Goes to the Hockey Mom</title>
        <id>tag:robwilkerson.org,2008-10-03:/id/126/</id>
        <updated>2008-10-03T21:12:08-04:00</updated>
        <published>2008-10-03T14:05:31-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/410474419/index.html" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;The content may be debatable (so to speak), but what a great intro to the article.&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt; Who won last night’s vice presidential debate? The answer depends on which ticket you support. If you like Obama-Biden, then Joe Biden won.&lt;p&gt;If you prefer McCain-Palin, Sarah Palin did. That’s how you can tell a tie. That’s what this was. And since Biden was supposed to destroy Palin, and didn’t even come close, this was a good night for the Republican.&lt;/p&gt;&lt;/p&gt;
	&lt;/blockquote&gt;        </content>
    <feedburner:origLink>http://www.cnn.com/2008/POLITICS/10/03/navarrette.debate/index.html?eref=rss_topstories</feedburner:origLink></entry>
    <entry>
        <title type="html">Install "Non-Stable" PEAR Packages</title>
        <id>tag:robwilkerson.org,2008-10-03:/id/125/</id>
        <updated>2008-10-03T13:41:23-04:00</updated>
        <published>2008-10-03T13:39:12-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/410474420/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;Today I needed to install two &lt;acronym title="PHP Extension &amp; Application Repository"&gt;&lt;span class="caps"&gt;PEAR&lt;/span&gt;&lt;/acronym&gt; packages on my machine.  When I did, I got this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;me@mine [~] $ sudo pear install ole
Failed to download pear/ole within preferred state "stable", latest release is version 1.0.0RC1, stability "beta", use "channel://pear.php.net/ole-1.0.0RC1" to install
Cannot initialize 'channel://pear.php.net/ole', invalid or missing package file
Package "channel://pear.php.net/ole" is not valid
install failed&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;I’d seen this message before, but never at a time or place where it was important for me to dig in and figure out a way around it.  Today I needed to do just that and I found that there are two ways.&lt;/p&gt;

	&lt;h2&gt;Install &lt;em&gt;This&lt;/em&gt; Beta Package, This &lt;em&gt;One&lt;/em&gt; Time&lt;/h2&gt;

	&lt;p&gt;To do this, simply follow the instructions in the error message:&lt;/p&gt;

	&lt;p&gt;&lt;code&gt;$ sudo pear install channel://pear.php.net/ole-1.0.0RC1&lt;/code&gt;&lt;/p&gt;

	&lt;p&gt;By explicitly defining the channel from which to install the unstable package, &lt;acronym title="PHP Extension &amp; Application Repository"&gt;&lt;span class="caps"&gt;PEAR&lt;/span&gt;&lt;/acronym&gt; seems to assume that you know exactly what you’re doing and leaves you alone to do it.&lt;/p&gt;

	&lt;h2&gt;Allow Non-Stable Packages Without Complaining&lt;/h2&gt;

	&lt;p&gt;The ability to “tinker” with libraries is somewhat inherent to a development environment so this is the direction I chose to go.  I learned that &lt;acronym title="PHP Extension &amp; Application Repository"&gt;&lt;span class="caps"&gt;PEAR&lt;/span&gt;&lt;/acronym&gt; recognizes the following application states (though I’m not sure exactly how each is defined):&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;stable&lt;/li&gt;
		&lt;li&gt;beta&lt;/li&gt;
		&lt;li&gt;alpha&lt;/li&gt;
		&lt;li&gt;devel&lt;/li&gt;
		&lt;li&gt;snapshot&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;This information can be shown by running the &lt;span class="technical"&gt;pear&lt;/span&gt; executable’s &lt;span class="technical"&gt;config-help&lt;/span&gt; command:&lt;/p&gt;

	&lt;p&gt;&lt;code&gt;$ pear config-help preferred_state&lt;/code&gt;&lt;/p&gt;

	&lt;p&gt;I decided to lower my standards gradually in order to protect &lt;em&gt;some&lt;/em&gt; level of stability while still getting the functionality I needed.  I opted to lower my &lt;strong&gt;preferred_state&lt;/strong&gt; to &lt;strong&gt;beta&lt;/strong&gt;.&lt;/p&gt;

	&lt;p&gt;&lt;code&gt;$ pear config-set preferred_state beta&lt;/code&gt;&lt;/p&gt;

	&lt;p&gt;Now I can install beta packages normally (i.e. I no longer have to specify a channel) without all of the whining.  &lt;acronym title="PHP Extension &amp; Application Repository"&gt;&lt;span class="caps"&gt;PEAR&lt;/span&gt;&lt;/acronym&gt; doesn’t make this information as easy to find as I’d have liked, so maybe this will help someone else.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/10/03/install-non-stable-pear-packages/</feedburner:origLink></entry>
    <entry>
        <title type="html">Random Access Command Line History</title>
        <id>tag:robwilkerson.org,2008-10-01:/id/124/</id>
        <updated>2008-10-01T17:21:35-04:00</updated>
        <published>2008-10-01T14:41:08-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/408627293/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;This afternoon I found out that I knew something I didn’t know I knew (say what?).  &lt;/p&gt;

	&lt;p&gt;I was spending a lot of time opening and closing &lt;acronym title="Secure SHell"&gt;&lt;span class="caps"&gt;SSH&lt;/span&gt;&lt;/acronym&gt; sessions and some of those were connecting to an IP address that I couldn’t remember.  To assist my memory, I was grep’ing my history and then copying and pasting what I needed. At some point in the course of doing that, I had this memory of a way to re-issue a particular command from the history:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;me@mine [~] $ history | grep ssh
   13  ssh rob@rob
  297  ssh rob@rwilkerson
  298  ssh rob@rwilkerson1
  299  ssh rob@rwilkerson
  301  ssh rob@rwilkerson-old
  303  ssh rob@10.168.159.174
  432  ssh rob@10.168.159.184
  434  ssh rob@10.168.159.184
  465  history | grep ssh
  466  ssh rob@10.168.159.174
  467  history | grep ssh
  468  ssh rob@10.168.159.174
  501  history | grep ssh
me@mine [~] $ !468
ssh rob@10.168.159.174
rob@10.168.159.174's password:&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The first command displays the entire history buffer and pipes it through a &lt;span class="technical"&gt;grep&lt;/span&gt; for the &lt;span class="technical"&gt;ssh&lt;/span&gt; command.  The second executes the 468th command in the history buffer, in this case &lt;span class="technical"&gt;ssh rob@10.168.159.174&lt;/span&gt;, without having to retype it or even paste it. Now that I remember that I know how to do this, I suspect it’ll play a larger role in my terminal operations.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/10/01/random-access-command-line-history/</feedburner:origLink></entry>
    <entry>
        <title type="html">Stop Frequent Eclipse Crashes</title>
        <id>tag:robwilkerson.org,2008-10-01:/id/123/</id>
        <updated>2008-10-01T13:11:28-04:00</updated>
        <published>2008-10-01T13:11:28-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/408437295/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;I spent the better part of last weekend configuring my new work laptop to dual boot into Linux – 64 bit Ubuntu 8.04 (Hardy Heron) to be precise.  A critical component of my install is &lt;a href="http://eclipse.org"&gt;Eclipse&lt;/a&gt;.  To my aggravation, I found that when I was working Eclipse would crash with some meaningless error message about every 5-10 times I saved.  I saw the same error – and crash – when I tried to refresh the explorer or perform a Subversion update using Subversive.  For all intents and purposes, this made Eclipse unusable so I searched.  And searched. And searched. And…you get the idea.&lt;/p&gt;

	&lt;p&gt;Eventually I stumbled on to a &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6614100"&gt;&lt;span class="caps"&gt;JVM&lt;/span&gt; bug&lt;/a&gt; and a related &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=214092"&gt;Eclipse bug&lt;/a&gt; that, frankly, sounded only marginally like what I was seeing (and that’s probably being generous).  Nonetheless, desperation had set in and the &lt;span class="caps"&gt;JVM&lt;/span&gt; bug offered a workaround that was simple and would be easy to rollback so I decided to give it a shot.  It worked.&lt;/p&gt;

	&lt;p&gt;Sometimes it’s better to be lucky than good.  If the workaround had been more difficult I probably wouldn’t have tried it, but it was, I did and it may be worth trying for anyone who’s experiencing similar issues.  It’s as simple as adding the following lines to &lt;span class="technical"&gt;eclipse.ini&lt;/span&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-XX:CompileCommand=exclude,org/eclipse/core/internal/dtree/DataTreeNode,forwardDeltaWith
-XX:CompileCommand=exclude,org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding,&lt;init&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;These lines should be added in the &lt;span class="technical"&gt;-vmargs&lt;/span&gt; section. For what it’s worth, I’m running java version 1.6.0_06 and offer the usual disclaimer that &lt;acronym title="Your Mileage May Vary"&gt;&lt;span class="caps"&gt;YMMV&lt;/span&gt;&lt;/acronym&gt;.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/10/01/stop-frequent-eclipse-crashes/</feedburner:origLink></entry>
    <entry>
        <title type="html">Utility Gem: Microsoft Time Zone</title>
        <id>tag:robwilkerson.org,2008-09-29:/id/121/</id>
        <updated>2008-09-29T21:03:34-04:00</updated>
        <published>2008-09-29T20:49:53-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/406776075/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;&lt;img src="http://robwilkerson.org/_resources/hotlink/blog/ms-time-zone.png" style="margin-left:10px;" align="right" title="Microsoft Time Zone" alt="Microsoft Time Zone" /&gt; I work closely with a team in &lt;a href="http://robwilkerson.org/2008/05/12/welcome-to-bangalore-india/"&gt;Bangalore, India&lt;/a&gt; and I occasionally have to interact with our offices in other parts of the world.  As a result, I find it really handy to know what time it is in those areas of the world.  Linux, I’ve recently discovered, offers this functionality directly through its clock panel item.  For Mac, it’s available as an extra bundled with &lt;a href="http://robwilkerson.org/2008/06/11/utility-gem-istat-menus/"&gt;iStat Menus&lt;/a&gt; that is applied to the clock display on the menu bar. Windows offers, &lt;em&gt;by far&lt;/em&gt;, the most anemic time display with only the time visible and the date displayed only when the time hovered over.&lt;/p&gt;

	&lt;p&gt;I would like this utility better if it were created as a plugin to enhance the time display.  I’d like it even better if it also included a minimalistic calendar.  It does neither of those, but Microsoft’s &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=bff59fcf-3148-40b8-a286-fe7274f6e4d8&amp;displaylang=en"&gt;Time Zone&lt;/a&gt; utility does exactly what its name implies and does it in a way that’s not unattractive.  It’s worth a look for Windows users who need to know what time it is in other areas of the world.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/29/utility-gem-microsoft-time-zone/</feedburner:origLink></entry>
    <entry>
        <title type="html">Reinstalling Windows</title>
        <id>tag:robwilkerson.org,2008-09-27:/id/120/</id>
        <updated>2008-09-27T16:59:27-04:00</updated>
        <published>2008-09-26T18:40:29-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/404948001/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;When I landed my current job a year and a half ago or so, I was given a desktop machine to play with. A desktop machine with a whopping 512MB of memory. Although I was new and was somewhat reticent to rock the boat, it was &lt;strong&gt;512MB&lt;/strong&gt; so I &lt;em&gt;had&lt;/em&gt; to say something; I just couldn’t develop with that kind of horse-, um, anemic-hamster-power. So I said something and within a day or so I had 2GB. Much better.  &lt;/p&gt;

	&lt;p&gt;Feeling bold, I made another request.  Because I like my work, I do a fair amount of it at home.  A laptop would make that much easier.  It took a little longer, but I eventually got that, too.  At first blush, it was a nice one. A Dell Latitude D600 – the same model as my personal laptop at the time. I was pretty enthused. Then I booted it up and my enthusiasm waned.  Turns out that we buy some kind of business machine that has a woefully underpowered graphics card.  Don’t get me wrong, I’m not a gamer and I wasn’t disappointed because I woudn’t be able to rock the frame rates necessary to support online first person shooter games. I was disappointed because the maximum resolution of my card was 1024×768. Oh yeah, you heard me.  In the year 2007, I was getting a late model laptop that still only supported 1024×768 resolution. Max.&lt;/p&gt;

	&lt;p&gt;Since that time – about a year ago now – I’ve been begging, cajoling and greasing palms for something better.  In addition to working from home, I’ve been traveling a decent amount, sans external monitor, of course, and at the risk of sounding like a whiner, that kind of resolution is intolerable for development purposes (arguably for &lt;em&gt;any&lt;/em&gt; purpose).  Yesterday our &lt;span class="caps"&gt;MIS&lt;/span&gt; department hooked me up. A shiny, new Dell Latitude D820 with 2GB of memory and a wide screen with a maximum resolution of 1680×1050. So, so much better. I’m a happy camper.&lt;/p&gt;

	&lt;p&gt;While I plan on dual booting back into Linux, I wanted to get the Windows partition at least to a point where it’s usable and, for me, that means utilities.  &lt;/p&gt;

	&lt;p&gt;Since I get a lot of questions about what I use from folks who see me working, I thought I’d document the most indispensable utility applications I’ve found for Windows. Those little applications that do one thing (more or less) and do that thing &lt;em&gt;vastly&lt;/em&gt; better than the default handler, assuming a default handler even exists.&lt;/p&gt;

	&lt;h2&gt;&lt;a href="http://launchy.net"&gt;Launchy&lt;/a&gt;&lt;/h2&gt;

	&lt;p&gt;&lt;img src="/_resources/hotlink/blog/launchy.png" style="margin-left:10px;" align="right" title="Launchy" alt="Launchy" width="431" height="70" /&gt; My lifeline. Anything that keeps my hand off the mouse is, by its nature, good and Launchy keeps my hands off the mouse more than any other piece of software I can think of.  After installing (and launching) Launchy, I immediately tweak the preferences to my liking by clicking on the gear icon in the upper right corner of the interface (alternatively, if no gear icon is present, right click somewhere near the upper right corner) and selecting &lt;strong&gt;Options&lt;/strong&gt;.  I usually tell Launchy to add the following directories to its catalog:&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;&lt;span class="technical"&gt;c:\Program Files&lt;/span&gt; and the &lt;span class="technical"&gt;*.exe&lt;/span&gt; files it contains.&lt;/li&gt;
		&lt;li&gt;&lt;span class="technical"&gt;c:\WINDOWS\system32 and the %(technical)*.cpl&lt;/span&gt; files it uses (this gives me access to the items in the Control Panel).&lt;/li&gt;
		&lt;li&gt;&lt;span class="technical"&gt;c:\Documents and Settings\myusername\My Documents&lt;/span&gt;. Sometimes I keep stuff there and it’s handy to have this kind of access to it.&lt;/li&gt;
	&lt;/ul&gt;

	&lt;p&gt;I also ensure that the Weby plugin is checked. Weby won’t index Firefox 3 bookmarks automatically, but in a previous post &lt;a href="http://robwilkerson.org/2008/07/30/firefox-3-bookmarks-in-launchy/"&gt;I explained&lt;/a&gt; how to make it do so.&lt;/p&gt;

	&lt;p&gt;Did I mention that it’s free?&lt;/p&gt;

	&lt;h2&gt;&lt;a href="http://www.ntwind.com/software/taskswitchxp.html"&gt;TaskSwitchXP&lt;/a&gt;&lt;/h2&gt;

	&lt;p&gt;&lt;a href="/_resources/hotlink/blog/taskswitchxp.png"&gt;&lt;img src="/_resources/hotlink/blog/thumb/taskswitchxp.png" style="margin-left:10px;" align="right" title="TaskSwitchXP" alt="TaskSwitchXP" width="320" height="203" /&gt;&lt;/a&gt; If you’re fan of the &lt;span class="technical"&gt;Alt+Tab&lt;/span&gt; keystroke – and you should be – then this is for you.  TaskSwitchXP puts Windows’ default task switcher to shame.  It also adds the ability to minimize applications to the system tray by right clicking on the minimize button.  This keeps those applications from cluttering up the taskbar. I use this feature all the time for those applications I keep open all day, but use only occasionally. &lt;/p&gt;

	&lt;p&gt;TaskSwitchXP…also free.&lt;/p&gt;

	&lt;h2&gt;&lt;a href="http://ccollomb.free.fr"&gt;Unlocker&lt;/a&gt;&lt;/h2&gt;

	&lt;p&gt;Ever tried to delete or move a file only to have Windows indicate that it’s in use? Annoying, right?  Problem solved. Unlocker will present an interface that specifies what application has the file locked and offer the ability to unlock it and perform the action you requested in the first place.&lt;/p&gt;

	&lt;p&gt;Yep, Unlocker is free. Is there a pattern developing here?&lt;/p&gt;

	&lt;h2&gt;&lt;a href="http://keepass.info"&gt;KeePass&lt;/a&gt;&lt;/h2&gt;

	&lt;p&gt;&lt;a href="/_resources/hotlink/blog/keepass.png"&gt;&lt;img src="/_resources/hotlink/blog/thumb/keepass.png" style="margin-left:10px;" align="right" title="KeePass" alt="KeePass" width="320" height="229" /&gt;&lt;/a&gt; KeePass is an open source password manager and it’s very good.  There are ports for other platforms (Mac, Linux, mobile, etc.) and all use the same database format, so it’s a trivial thing to sync the same database across multiple systems and devices.&lt;/p&gt;

	&lt;p&gt;Being open source, KeePass is free, of course. It’s variants are also free.&lt;/p&gt;

	&lt;h2&gt;&lt;a href="http://www.foxitsoftware.com"&gt;Foxit Reader&lt;/a&gt;&lt;/h2&gt;

	&lt;p&gt;I find Adobe’s Acrobat Reader to be one of the single most annoying pieces of software ever created. I love the &lt;acronym title="Portable Document Format"&gt;&lt;span class="caps"&gt;PDF&lt;/span&gt;&lt;/acronym&gt; itself, but the software Adobe created to read it is absolutely abysmal. I spend more time waiting for it to load than I do actually reading the document.  On top of that there are the upgrades and updates. The &lt;em&gt;constant&lt;/em&gt; upgrades and updates.  And then there’s all the crap that they like to sneak into their upgrade packages. No, I don’t need the latest toolbar of the month, thank you.&lt;/p&gt;

	&lt;p&gt;Foxit Software’s reader is just want the doctor ordered. Lightweight, fast and not even a little bit annoying. Oh yeah, and free.  Brilliant.&lt;/p&gt;

	&lt;h2&gt;Honorable Mentions&lt;/h2&gt;

	&lt;p&gt;The following utilities may not make the first cut, but they’re definitely on the short list.&lt;/p&gt;

	&lt;h3&gt;&lt;a href="http://windirstat.info"&gt;WinDirStat&lt;/a&gt;&lt;/h3&gt;

	&lt;p&gt;I don’t need it often, but when I do, there’s no better way to visualize how much space on a drive any given directory is taking up.&lt;/p&gt;

	&lt;p&gt;Free.&lt;/p&gt;

	&lt;h3&gt;&lt;a href="http://ccleaner.com"&gt;CCleaner&lt;/a&gt;&lt;/h3&gt;

	&lt;p&gt;A great utility for reclaiming hard drive space.  Free.&lt;/p&gt;

	&lt;h3&gt;&lt;a href="http://winmerge.org"&gt;WinMerge&lt;/a&gt;&lt;/h3&gt;

	&lt;p&gt;Hands down the best visual diff tool I’ve ever seen for the Windows platform. Certainly the best &lt;em&gt;free&lt;/em&gt; diff tool.  For those who write code or edit configuration files in a Windows environment, this is a must have. It even integrates nicely with &lt;a href="http://tortoisesvn.tigris.org"&gt;TortoiseSVN&lt;/a&gt; for &lt;a href="http://subversion.tigris.org"&gt;Subversion&lt;/a&gt; users who need to perform diffs against a repository.&lt;/p&gt;

	&lt;p&gt;This only gets honorable mention status because I rarely develop in Windows and, when I do, am usually in &lt;a href="http://eclipse.org"&gt;Eclipse&lt;/a&gt; which has it’s own visual diff tool that’s pretty solid.&lt;/p&gt;

	&lt;p&gt;Free.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/26/reinstalling-windows/</feedburner:origLink></entry>
    <entry>
        <title type="html">Feed Problems</title>
        <id>tag:robwilkerson.org,2008-09-25:/id/119/</id>
        <updated>2008-09-25T09:54:33-04:00</updated>
        <published>2008-09-25T09:54:33-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402827809/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;It was pointed out to me this morning that my feed, currently run through Feedburner, wasn’t working properly. I created that problem when I upgraded my site software (the new version provides a different feed &lt;span class="caps"&gt;URI&lt;/span&gt;), so it seems that none of the posts I’ve written since the upgrade have been getting through to aggregators. I don’t know how that managed to elude my notice, but it did.  &lt;/p&gt;

	&lt;p&gt;Everything should be corrected now, so please check the site if you don’t see those posts appear in your reader.  There’s been a fair amount of activity – 10 posts, to be precise – in the last week or so including the posting of my Ant script and instructions for sync’ing Firefox across multiple machines using Dropbox.  Good stuff. Really.  You don’t want to miss it. :-)&lt;/p&gt;

	&lt;p&gt;Apologies for the inconvenience.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/25/feed-problems/</feedburner:origLink></entry>
    <entry>
        <title type="html">Synchronizing Firefox Through Dropbox</title>
        <id>tag:robwilkerson.org,2008-09-25:/id/118/</id>
        <updated>2008-09-25T20:44:14-04:00</updated>
        <published>2008-09-24T18:10:43-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804614/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;Having removed the &lt;a href="http://labs.mozilla.com/2007/12/introducing-weave/"&gt;Mozilla Weave&lt;/a&gt; extension from my &lt;a href="http://getfirefox.com"&gt;Firefox&lt;/a&gt; install (at least for now), I was again left searching for a synchronization solution. This time I wanted one that really worked for me.  I mentioned in &lt;a href="http://robwilkerson.org/2008/09/23/mozilla-weave-is-very-beta/"&gt;yesterday’s post&lt;/a&gt; that I might try using &lt;a href="http://getdropbox.com"&gt;Dropbox&lt;/a&gt; and, while I was speaking rather tongue-in-cheek at the time, I couldn’t think of any reason that it shouldn’t work so last night I tried it.&lt;/p&gt;

	&lt;p&gt;I used my Mac as the “master” machine, but given the way that Dropbox works, I don’t think that there’s any preference given to one machine over the other.  In this case, “master” just means that it’s the machine whose profile I copied to create the shared profile that other machines will tie into.  I’ve now referenced that profile on my Windows XP virtual machine at home and on my Linux machine at work and, though I haven’t thrown any hard tests at it, everything appears to be working fine so I thought I’d document the steps I took in case anyone else is interested in trying this.&lt;/p&gt;

	&lt;h2&gt;Create a New Profile on the Master Machine&lt;/h2&gt;

	&lt;p&gt;It would probably suffice to use an existing profile directly, but in the interest of having an escape plan, I’d recommend creating a new one.  This is really the only set of instructions that may vary across operating systems, so I’ve tried to provide links for systems other than Mac where such a link was readily available.&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;Quit Firefox (On Windows and Linux, close all open windows).&lt;/li&gt;
		&lt;li&gt;Create a new directory in the Dropbox directory for the shared profile.  I created mine as &lt;span class="technical"&gt;~/Dropbox/Application Support/firefox/profiles/wg3×0vhj.dropbox&lt;/span&gt;. The unintelligible name of the last directory simply follows the typical profile naming convention.  It may work just as well to name the last folder “foo”, but I wasn’t sure and it wasn’t worth the effort of attempting to deviate.&lt;/li&gt;
		&lt;li&gt;Create a new Firefox profile (&lt;a href="http://kb.mozillazine.org/Creating_a_new_Firefox_profile_on_Windows"&gt;Windows instructions&lt;/a&gt;).
	&lt;ol&gt;
		&lt;li&gt;Start the Firefox Profile Manager.  There is probably a better way, but not knowing it, I dropped into &lt;a href="http://iterm.sourceforge.net/index.shtml"&gt;iTerm&lt;/a&gt;:&lt;br /&gt;
&lt;span class="technical"&gt;$ /Applications/Firefox.app/Contents/MacOS/firefox -profilemanager&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Click the &lt;strong&gt;Create Profile…&lt;/strong&gt; button.&lt;/li&gt;
		&lt;li&gt;Enjoy the wizard process, but be sure to &lt;strong&gt;Choose Folder…&lt;/strong&gt; rather than accepting the default on the second panel.&lt;/li&gt;
		&lt;li&gt;Select the profile folder created in &lt;span class="technical"&gt;~/Dropbox&lt;/span&gt;.&lt;/li&gt;
		&lt;li&gt;Click &lt;strong&gt;Finish&lt;/strong&gt;.&lt;/li&gt;
	&lt;/ol&gt;&lt;/li&gt;
		&lt;li&gt;Set the new Dropbox profile as the default profile.&lt;/li&gt;
		&lt;li&gt;Start Firefox to create “instantiate” the new profile.&lt;/li&gt;
		&lt;li&gt;Quit Firefox.&lt;/li&gt;
		&lt;li&gt;The new Dropbox profile directory should now have content.  Delete that content (leave the profile directory itself).&lt;/li&gt;
		&lt;li&gt;Navigate to the directory of the existing profile to be shared.  My target profile was located in &lt;span class="technical"&gt;/Users/myusername/Library/Application Support/Firefox/Profiles/j3a1ovux.default&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Select &lt;em&gt;all&lt;/em&gt; of the files and directories in this directory and &lt;strong&gt;copy&lt;/strong&gt; them to the Dropbox profile directory.&lt;/li&gt;
		&lt;li&gt;Wait until Dropbox finishes synchronizing those changes. It could take a few minutes, so be patient.&lt;/li&gt;
		&lt;li&gt;Start Firefox.  The new profile should be executed.&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;The good news is that the hard part is now over.  All that’s left is to wire up the newly shared profile to other machines.&lt;/p&gt;

	&lt;h2&gt;Use the Shared Profile on Windows&lt;/h2&gt;

	&lt;p&gt;Once a profile has been created and shared (by creating it a Dropbox), other systems can tap into it pretty easily.  All it takes is a simple edit to Firefox’s &lt;span class="technical"&gt;profiles.ini&lt;/span&gt; file, the profiles configuration file. The first computer I wired up was my Windows virtual machine.&lt;/p&gt;

	&lt;p&gt;On Windows, the &lt;span class="technical"&gt;profiles.ini&lt;/span&gt; file is located in &lt;span class="technical"&gt;&lt;span class="caps"&gt;APPDATA&lt;/span&gt;\Mozilla\Firefox&lt;/span&gt;. On my machine, that expands to &lt;span class="technical"&gt;C:\Documents and Settings\myusername\Application Data\Mozilla\Firefox&lt;/span&gt;.&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;Close any open Firefox windows&lt;/li&gt;
		&lt;li&gt;Make hidden files and folders visible if they’re not already
	&lt;ol&gt;
		&lt;li&gt;Open &lt;strong&gt;Windows Explorer&lt;/strong&gt;&lt;/li&gt;
		&lt;li&gt;Select &lt;strong&gt;Tools &gt; Folder Options&lt;/strong&gt;&lt;/li&gt;
		&lt;li&gt;Select the &lt;strong&gt;View&lt;/strong&gt; tab&lt;/li&gt;
		&lt;li&gt;In the &lt;strong&gt;Hidden files and folders&lt;/strong&gt; group, click &lt;strong&gt;Show hidden files and folders&lt;/strong&gt;&lt;/li&gt;
	&lt;/ol&gt;&lt;/li&gt;
		&lt;li&gt;Open &lt;span class="technical"&gt;profiles.ini&lt;/span&gt; in a text editor&lt;/li&gt;
		&lt;li&gt;Add the following lines:&lt;/li&gt;
	&lt;/ol&gt;

&lt;pre&gt;&lt;code&gt;[Profile1]
Name=dropbox
IsRelative=0
Path=C:\Documents and Settings\myusername\My Documents\My Dropbox\Application Support\firefox\profiles\wg3x0vhj.dropbox
Default=1&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;A few changes will need to be made, of course.  First, if there is already more than one profile, the numeric value in &lt;span class="technical"&gt;Profile1&lt;/span&gt; will have to be changed to the next available integer.  Second, the &lt;span class="technical"&gt;Path&lt;/span&gt; value will probably need to change.&lt;/p&gt;

	&lt;p&gt;That’s it.  Windows is all wired up.  Restart Firefox.&lt;/p&gt;

	&lt;h2&gt;Use the Shared Profile on Linux&lt;/h2&gt;

	&lt;p&gt;Rinse, repeat.  As with Windows, all that needs to be done is a little wiring.  On Linux, the &lt;span class="technical"&gt;profiles.ini&lt;/span&gt; file is located in &lt;span class="technical"&gt;/home/myusername/.mozilla/firefox&lt;/span&gt;.  Just add the lines below and make the appropriate changes as outlined in the Windows instructions above.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[Profile1]
Name=dropbox
IsRelative=0
Path=/home/myusername/Dropbox/Application Support/firefox/profiles/wg3x0vhj.dropbox
Default=1&lt;/code&gt;&lt;/pre&gt;

	&lt;h2&gt;Caveats&lt;/h2&gt;

	&lt;p&gt;One thing that I noticed right away is that syncing profiles keeps Dropbox pretty busy.  That activity makes Dropbox very, very chatty if allowed to speak.  Almost immediately, I turned off Dropbox’s Growl support on the Mac and will soon be doing the same for those annoying status tray balloon notifications on Windows. So far, Linux has been pretty quiet.&lt;/p&gt;

	&lt;p&gt;On the whole, everything seems to be working exactly as I’d expect with the added benefit (maybe) of retaining sessions across multiple systems. I haven’t yet decided whether I like that unexpected twist.&lt;/p&gt;

	&lt;p class="update"&gt;Interestingly (or not), with respect to Dropbox’s chattiness, the only platform on which I &lt;em&gt;can’t&lt;/em&gt; disable notifications through a Dropbox preference is the on the one platform where notifications are the most intrusive and least simple to kill. That’s Windows, of course. Argh.&lt;/p&gt;

	&lt;p class="update"&gt;Later that same night…I installed the latest version of the Dropbox application for Windows and the preference is there. No more balloon notifications.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/24/synchronizing-firefox-through-dropbox/</feedburner:origLink></entry>
    <entry>
        <title type="html">Web Standards Losing Their Appeal</title>
        <id>tag:robwilkerson.org,2008-09-24:/id/116/</id>
        <updated>2008-09-24T12:34:50-04:00</updated>
        <published>2008-09-24T12:15:19-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804765/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;Okay, so maybe the title was a little dramatic, but it’s not entirely inaccurate.  I’ve had a draft of this post sitting in my queue for a long time now, but, while catching up on some feed reading, I ran into Molly Holzschlag’s &lt;a href="http://alistapart.com/articles/webstandards2008"&gt;similarly themed post&lt;/a&gt; on &lt;a href="http://alistapart.com"&gt;A List Apart&lt;/a&gt; and it prompted me to finish my own.&lt;/p&gt;

	&lt;p&gt;I’m a believer in standards.  In my own code, within my team, in the greater office environment and on the web as a whole.  I like being able to open another developer’s code and not feel like I’m lost for the first few minutes or hours. Standards facilitate that.  So when the first real standards began gaining traction, I was all over it.  Over the last year, though, my enthusiasm for what’s out there has faded.&lt;/p&gt;

	&lt;p&gt;I’m not talking about my enthusiasm for standards in general. I’m still a fan, in theory.  I’m talking about my enthusiasm for the current markup standards.  I’m not as close the inner-workings as Molly is.  In fact, I’m not close to them at all.  I’m a complete outside.  From where I sit:&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;Movement is so slow that it feels like it could be measured on a geologic timeline.&lt;/li&gt;
		&lt;li&gt;The message is too fragmented.&lt;/li&gt;
		&lt;li&gt;Probably owing to the first two, adoption is stagnating and interest in adoption is waning.&lt;/li&gt;
	&lt;/ul&gt;

	&lt;p&gt;I read not too long ago that one of the web standards wasn’t expected to become a fully-realized, official spec until something like 2021. Don’t quote me on that because I can’t find the original article, but even if it was 2012…seriously? By that time we’ll all have flying cars, a tinfoil wardrobe and capsule meals.  In the context of technology, that’s about 47 and a half lifetimes.  A standard that takes that long to realize will be standardizing something no one’s used in 10 years.  Talk about being marginalized.&lt;/p&gt;

	&lt;p&gt;More and more, it feels like picking a standard is a little like playing roulette.  Red or black? Odd or even? &lt;span class="caps"&gt;XHTML&lt;/span&gt; or HTML5?  Sure, at the end of the day the key is to pick one, but if everyone’s picking a different standard or even a different variation of the same standard is it &lt;em&gt;really&lt;/em&gt; a standard. Technically, maybe. Practically, I’m not so sure.&lt;/p&gt;

	&lt;p&gt;Browser adoption and adherence seems lackluster at best. No matter what standard I say I’m using, what standard I apply, if any, or how consistently I apply that standard, most browsers seem to render my code pretty well.  If it doesn’t matter to the end result then the degree to which it matters to the process is minimized.&lt;/p&gt;

	&lt;p&gt;Right now, at the moment of this writing, I guess I’d still consider myself pro-standards, but not anally so.  I use &lt;span class="caps"&gt;XHTML&lt;/span&gt; Strict, having chosen it because of its structured &lt;span class="caps"&gt;XML&lt;/span&gt; backbone, but these days I find that I have no burning desire to escape the use of an ampersand in my links just to see that lovely green bar appear on the W3C’s validation results. I’m going to use and stick with my chosen standard, but primarily (if not exclusively) for the purpose of keeping my code clean and structured. I don’t suspect that I’ll spend much time sweating the details until the details have more practical meaning.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/24/web-standards-losing-their-appeal/</feedburner:origLink></entry>
    <entry>
        <title type="html">Ant Build Templates: The Script</title>
        <id>tag:robwilkerson.org,2008-09-23:/id/117/</id>
        <updated>2008-09-23T21:07:13-04:00</updated>
        <published>2008-09-23T20:59:41-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804794/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;This is the sixth and final post in a series of posts meant to outline my &lt;a href="http://ant.apache.org"&gt;Ant&lt;/a&gt; build script template.  If you’re interested, it may be helpful to read the first five:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/09/ant-build-templates-prelude/"&gt;Prelude&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/10/ant-build-templates-environment/"&gt;Environment&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/13/ant-build-templates-process/"&gt;Process&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/15/ant-build-templates-why-two-files/"&gt;Why Two Files?&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/19/ant-build-templates-external-tasks/"&gt;External Tasks&lt;/a&gt;&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;It took entirely too long to get here, but here it is, the scripts themselves.  I was trying to decide what I should write to accompany these scripts, but the truth is, I’ve probably written too much already.  There may be some properties or tasks that could stand for some additional clarification, but I think both files are pretty well documented so I’m just going to set them loose on the world. Most questions are probably answered either in the script documentation itself or in one of the previous posts.&lt;/p&gt;

	&lt;p&gt;To use this script:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;Ensure that &lt;a href="http://ant.apache.org"&gt;Ant&lt;/a&gt; is &lt;a href="http://ant.apache.org/manual/install.html#installing"&gt;correctly installed&lt;/a&gt;. Yeah, I know it’s obvious, but if I didn’t say it you just &lt;em&gt;know&lt;/em&gt; I’d get questions.&lt;/li&gt;
		&lt;li&gt;Ensure that the required &lt;a href="http://robwilkerson.org/2008/09/19/ant-build-templates-external-tasks/"&gt;external tasks&lt;/a&gt; are installed.&lt;/li&gt;
		&lt;li&gt;Download &lt;a href="/_resources/hotlink/blog/build.properties.sample"&gt;build.properties.sample&lt;/a&gt; and &lt;a href="/_resources/hotlink/blog/build.xml"&gt;build.xml&lt;/a&gt; to any directory, but keep both files in the same directory.&lt;/li&gt;
		&lt;li&gt;Copy build.properties.sample to build.properties.&lt;/li&gt;
		&lt;li&gt;Modify the newly created build.properties file, as required.&lt;/li&gt;
		&lt;li&gt;Modify build.xml, as required.&lt;/li&gt;
		&lt;li&gt;Execute, execute, execute.&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;Feel free to ask questions or make suggestions either in the comments for this post or by using the &lt;a href="/contact"&gt;contact form&lt;/a&gt;.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/23/ant-build-templates-the-script/</feedburner:origLink></entry>
    <entry>
        <title type="html">Mozilla Weave is Very, Very Beta</title>
        <id>tag:robwilkerson.org,2008-09-23:/id/115/</id>
        <updated>2008-09-23T14:19:16-04:00</updated>
        <published>2008-09-23T07:47:51-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804819/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;With some degree of frequency, I use any number of computers and at least one of each platform.  Mac, Windows and the occasional Linux at home, Windows and Linux at work.  For the longest time, I’ve been looking for a reliable way of syncing up my &lt;a href="http://getfirefox.com"&gt;Firefox&lt;/a&gt; installs across all of those machines that didn’t involve &lt;acronym title="File Transfer Protocol"&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt;&lt;/acronym&gt;‘ing my profile directory all over the Internet or doing anything similarly ham-fisted.  When I first heard about Mozilla’s &lt;a href="http://labs.mozilla.com/2007/12/introducing-weave/"&gt;Weave&lt;/a&gt; project a few months ago, I jumped all over it.  Even if the beta would only sync my bookmarks, that would get me about 80% of what I really wanted; the other 20% being fully sync’d extensions.&lt;/p&gt;

	&lt;p&gt;I’m no stranger to beta software; I understand that it’s not perfect and I wouldn’t expect it to be.  Nonetheless, the fatal flaw with Weave as it exists right now is that bookmarks – the only thing I want sync’d other than extensions, which aren’t available in any form yet – aren’t actually &lt;em&gt;sync’d&lt;/em&gt;.  Bookmarks can be added, but not organized or deleted.&lt;/p&gt;

	&lt;p&gt;I love what Weave is after and am looking forward to that vision being realized, but it needs to be a bit more mature before it’s truly useful to me.  After a few months of trying, I’m going to have to break it off with Weave, at least until it grows up a little more.&lt;/p&gt;

	&lt;p&gt;I think I’m going to try letting &lt;a href="http://getdropbox.com"&gt;Dropbox&lt;/a&gt; do the work for me.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/23/mozilla-weave-is-very-beta/</feedburner:origLink></entry>
    <entry>
        <title type="html">Change Key Bindings in Pidgin</title>
        <id>tag:robwilkerson.org,2008-09-23:/id/114/</id>
        <updated>2008-09-23T07:38:31-04:00</updated>
        <published>2008-09-22T21:57:30-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804843/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;Today I was chatting with a colleague while booted into Linux. I specify my operating system because I only use &lt;a href="http://www.pidgin.im/"&gt;Pidgin&lt;/a&gt; on Linux and have been using it as a chat client for exactly as long as I’ve been using Linux as my full-time OS at work.  In other words, not very long at all. I don’t know most of the application’s nuances yet.  So you can imagine my surprise when, while chatting with my colleague, typing a lowercase “h” started launching the “New Instant Message” dialog window.  As far as I knew, I hadn’t done anything that could have &lt;em&gt;remotely&lt;/em&gt; caused that to happen.&lt;/p&gt;

	&lt;p&gt;Also, it turns out that I use the lowercase “h” a lot when typing (who knew?) so not being able to use it caused some real heartburn.  My colleague was understandably confused when he started seeing messages like this:&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;tHat’s wHat I was tHinking. tHis isn’t going to be mucH fun.&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;p&gt;Try explaining why you’re not using the lowercase “h” without having the &lt;em&gt;ability&lt;/em&gt; to use the lowercase “h”. Fun.&lt;/p&gt;

	&lt;p&gt;Having no idea what I did, I obviously had no idea what to do. I bounced X.  Nothing. I bounced the machine. Nothing. I asked my resident &lt;a href="http://sivel.net"&gt;Linux guru&lt;/a&gt;. Nothing. I had &lt;em&gt;no&lt;/em&gt; idea what I could have done; it was certainly nothing intentional.  Nor had I done anything consciously that I could point to and say, “it could have happened then.”  Eventually, having tried everything I could think of, I jumped into the #pidgin chat room on irc.freenode.net. The good folks there solved my problem within seconds.&lt;/p&gt;

	&lt;p&gt;What I learned is that Pidgin provides a very easy way to modify the keyboard shortcuts available in its menus. Maybe too easy.  To do so, open the menu, highlight the option and either hit the &lt;span class="technical"&gt;Backspace&lt;/span&gt; key to remove the shortcut key or press a new key or combination of keys to change the binding.  Knowing that, it’s a lot easier to understand how the binding could be changed accidentally and without actually realizing that it was changed.  In my case, all I had to do was:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;Open a conversation window&lt;/li&gt;
		&lt;li&gt;Hover over &lt;strong&gt;Conversation &gt; New Instant Message&lt;/strong&gt;&lt;/li&gt;
		&lt;li&gt;Hit &lt;span class="technical"&gt;Backspace&lt;/span&gt;&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;Problem solved.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/22/change-key-bindings-in-pidgin/</feedburner:origLink></entry>
    <entry>
        <title type="html">Evaluating Internet Explorer 8</title>
        <id>tag:robwilkerson.org,2008-09-21:/id/113/</id>
        <updated>2008-09-21T15:04:00-04:00</updated>
        <published>2008-09-21T15:04:00-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804867/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;I spent last Thursday at &lt;a href="http://en.oreilly.com/webexny2008/public/content/home"&gt;Web 2.0 Expo&lt;/a&gt; in New York and, though I was disappointed in the show as a whole, I did go to one interesting session. I went to see &lt;a href="http://blogs.msdn.com/petel/"&gt;Pete LePage&lt;/a&gt;, an Internet Explorer product manager, speak about &lt;a href="http://www.microsoft.com/windows/internet-explorer/beta/"&gt;Internet Explorer 8&lt;/a&gt;. Though I’ve long since given up on IE as my primary browser (even before moving away from Windows as anything more than an occasional-use operating system), it’s still an animal that I have to deal with as part of my daily life and I was looking forward to hearing about what to expect in the next version.&lt;/p&gt;

	&lt;p&gt;The presentation didn’t disappoint. Pete did a nice job of presenting a lot of features in very limited time and I found myself surprised, pleased and impressed at the effort the team has made to catch up in some areas and to innovate in others.  I have to admit that I liked what I saw and, being a trained professional, I was looking forward to trying it at home.  Today I finally got around to doing so and I wanted to write about my impressions.&lt;/p&gt;

	&lt;p&gt;I have none.  In spite of all of the good things that IE 8 seems to offer, it &lt;em&gt;still&lt;/em&gt; doesn’t offer the ability to install alongside IE 7. Full stop.&lt;/p&gt;

	&lt;p&gt;That’s it.  That’s the only impression I have.  I still need to access IE 7 on a regular basis for testing and I don’t have (or want) 12 separate licenses for Windows XP on which to test each browser version.  IE 8 has to go.  If it’s worth mentioning, maybe I’ll provide my impressions of the uninstall process. But I doubt it.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/21/evaluating-internet-explorer-8/</feedburner:origLink></entry>
    <entry>
        <title type="html">Sync MySQL Databases</title>
        <id>tag:robwilkerson.org,2008-09-20:/id/112/</id>
        <updated>2008-09-20T21:04:55-04:00</updated>
        <published>2008-09-20T12:24:24-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804891/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;I run three different environments for &lt;a href="http://robwilkerson.org"&gt;robwilkerson.org&lt;/a&gt;.  I have local development environment where I update &lt;a href="http://chyrp.net"&gt;Chyrp&lt;/a&gt;, the blogging software that runs the site, tweak parts of my theme and introduce new modules to the configuration.  I also have a staging environment where I ensure that changes made in dev look and work okay in an environment that closely resembles my final environment, production.&lt;/p&gt;

	&lt;p&gt;Something I’ve long wanted to do is to keep the staging and production MySQL databases sync’d up so that I can create an even closer resemblance between the environments and get a better feel for the impact of the changes I make as they move up the stack.  This morning I finally set about implementing this process.  The process itself is pretty straightforward and looks like this:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;Export the production database to a &lt;acronym title="Structured Query Language"&gt;&lt;span class="caps"&gt;SQL&lt;/span&gt;&lt;/acronym&gt; script&lt;/li&gt;
		&lt;li&gt;In the exported script, replace any references to the production database name with the staging database name&lt;/li&gt;
		&lt;li&gt;Execute the script against the staging database&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;The script to execute that process looks like this: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mysqldump -umyusername \
           -pmypassword \
           --opt \
           --no-create-db \
           --complete-insert \
           --databases production-db-name | \
sed s/production-db-name/staging-db-name/ | \
mysql -umyusername \
      -pmypassword \
      -D staging-db-name&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Finally, I created a cron job to run this command every night at midnight.  In my setup, the production and databases exist on the same host.  If they didn’t, I’d need to add the &lt;span class="technical"&gt;-h&lt;/span&gt; flag to at least one of the mysql commands.  Similarly, this command is executed on the same machine as those databases which eliminates the need for the &lt;span class="technical"&gt;-h&lt;/span&gt; flag on &lt;em&gt;either&lt;/em&gt; command.&lt;/p&gt;

	&lt;p&gt;I wrote this primarily to supplement my own memory, but I offer it to you at no cost.  I’m not a MySQL &lt;acronym title="DataBase Administrator"&gt;&lt;span class="caps"&gt;DBA&lt;/span&gt;&lt;/acronym&gt;, nor do I care to become one in the near future; if there’s an easier or better way, I’d love to hear about it.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/20/sync-mysql-databases/</feedburner:origLink></entry>
    <entry>
        <title type="html">Ant Build Templates: External Tasks</title>
        <id>tag:robwilkerson.org,2008-09-23:/id/111/</id>
        <updated>2008-09-23T17:26:23-04:00</updated>
        <published>2008-09-19T16:43:15-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804915/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;This is the fifth in a series of posts meant to outline my &lt;a href="http://ant.apache.org"&gt;Ant&lt;/a&gt; build script template.  If you’re interested, it may be helpful to read the first four:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/09/ant-build-templates-prelude/"&gt;Prelude&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/10/ant-build-templates-environment/"&gt;Environment&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/13/ant-build-templates-process/"&gt;Process&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://robwilkerson.org/2008/09/15/ant-build-templates-why-two-files/"&gt;Why Two Files?&lt;/a&gt;&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;So at this point in this thing that I’ll loosely call a series, I’ve talked a lot, but in the put-up-or-shut-up debate, I’m still leaning heavily towards the shut up side. Today I hope to move that needle, at least a little bit, in the other direction.&lt;/p&gt;

	&lt;p&gt;Ant is the cat’s meow. The bee’s knees, if you’d rather. But then, I probably don’t need to sell anyone on the fact that I’m a fan.  What Ant is not, though, is perfection. At least not without help. My build script requires three external task libraries to function properly.  Technically, it’s two external libraries and one external dependency for a native task library, but at least we’re starting to talk code.  First, a little information about the required tasks and then some information about making them work in the build script.&lt;/p&gt;

	&lt;h2&gt;&lt;a href="http://ant.apache.org/manual/OptionalTasks/sshexec.html" title="Secure SHell"&gt;&lt;span class="caps"&gt;SSH&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://ant.apache.org/manual/OptionalTasks/scp.html" title="Secure CoPy"&gt;&lt;span class="caps"&gt;SCP&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

	&lt;p&gt;Fundamental to any build that includes deployment is the ability to move resources from one server to another. Unless absolutely necessary, I prefer to use &lt;acronym title="Secure CoPy"&gt;&lt;span class="caps"&gt;SCP&lt;/span&gt;&lt;/acronym&gt; or, at the very least, &lt;acronym title="Secure File Transfer Protocol"&gt;&lt;span class="caps"&gt;SFTP&lt;/span&gt;&lt;/acronym&gt;.  Both of these are better than &lt;acronym title="File Transfer Protocol"&gt;&lt;span class="caps"&gt;FTP&lt;/span&gt;&lt;/acronym&gt;, but my infrastructure supports &lt;acronym title="Secure CoPy"&gt;&lt;span class="caps"&gt;SCP&lt;/span&gt;&lt;/acronym&gt;, so that’s what I use. My build template also requires &lt;acronym title="Secure SHell"&gt;&lt;span class="caps"&gt;SSH&lt;/span&gt;&lt;/acronym&gt;, the protocol on which &lt;acronym title="Secure CoPy"&gt;&lt;span class="caps"&gt;SCP&lt;/span&gt;&lt;/acronym&gt; is built, so there’s a nice two-for-the-price-of-one effect. Ant ships with &lt;acronym title="Secure SHell"&gt;&lt;span class="caps"&gt;SSH&lt;/span&gt;&lt;/acronym&gt; and &lt;acronym title="Secure CoPy"&gt;&lt;span class="caps"&gt;SCP&lt;/span&gt;&lt;/acronym&gt; tasks but, perhaps counter intuitively, not with the library required to actually execute those tasks, &lt;a href="http://www.jcraft.com/jsch/index.html"&gt;jsch&lt;/a&gt;, a pure Java implementation of the SSH2 protocol.&lt;/p&gt;

	&lt;p&gt;There’s &lt;a href="http://robwilkerson.instantspot.com/blog/2007/07/26/Secure-Copy-using-Ants-SCP-Task"&gt;more information&lt;/a&gt; in a post I wrote over a year ago, but be sure to download the 0.1.29 version even though it’s not current. I’ve tried every version between 0.1.30 and 0.1.33 and they don’t work. Versions above 0.1.33 may work, but I can vouch for the fact that 0.1.29 works so it may be worth sticking with that.&lt;/p&gt;

	&lt;h2&gt;&lt;a href="http://subclipse.tigris.org/svnant.html"&gt;SvnAnt&lt;/a&gt;&lt;/h2&gt;

	&lt;p&gt;For years now, I’ve been using &lt;a href="http://subversion.tigris.org"&gt;Subversion&lt;/a&gt; as my source control solution. I’m taking some early stabs at learning git, but I’m still primarily a Subversion user.  It’s not hard to figure out, I’m sure, that &lt;a href="http://subclipse.tigris.org/svnant.html"&gt;SvnAnt&lt;/a&gt; is a collection of Ant tasks for interacting with Subversion. This library supports the full range of commands available with Subversion (certainly every one that I need) in addition to the ability to connect using an installed &lt;span class="technical"&gt;svn&lt;/span&gt; executable or via JavaHL.&lt;/p&gt;

	&lt;h2&gt;&lt;a href="http://antelope.tigris.org/"&gt;AntelopeTasks&lt;/a&gt;&lt;/h2&gt;

	&lt;p&gt;Antelope is a very useful – so useful that I actually think of it as &lt;em&gt;critical&lt;/em&gt; – library of utility tasks designed to give Ant more power.  The library includes conditionals, try/catch, grep, string manipulation and several other handy tasks that are used throughout my build script.  Its capabilities are similar to those of &lt;a href="http://ant-contrib.sourceforge.net/"&gt;AntContrib&lt;/a&gt;, but I think that Antelope offers more functionality and more options.&lt;/p&gt;

	&lt;h2&gt;Including External Tasks&lt;/h2&gt;

	&lt;p&gt;There’s an easy way to run external tasks in a build script and a hard way. I actually prefer the hard way.  The easy way is to simply download the task library and extract its &lt;span class="technical"&gt;jar&lt;/span&gt; files anywhere in the system classpath. A typical approach would be to drop the &lt;span class="technical"&gt;jar&lt;/span&gt; files in the &lt;span class="technical"&gt;&lt;span class="caps"&gt;ANT&lt;/span&gt;_HOME/lib/&lt;/span&gt; directory.  The “hard” way is to extract the libraries anywhere at all and tell the script where they’re located.  Sort of a lazy loading technique, I suppose.  I prefer the latter method because it allows me to keep my external tasks, well, external.&lt;/p&gt;

	&lt;p&gt;I extract my external libraries to &lt;span class="technical"&gt;~/Library/ant/tasks/&lt;/span&gt; (again, let me state that this can be anywhere).  I then set a few variables in my &lt;a href="http://robwilkerson.org/2008/09/15/ant-build-templates-why-two-files/"&gt;build.properties&lt;/a&gt; file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;tasklib.dir=/Users/me/Library/ant/tasks
&lt;!--
   Libraries associated with the SvnAnt task
 --&gt;
tasklib.svnant.tasks=${tasklib.dir}/svnant-1.0.0/lib/svnant.jar
tasklib.svnant.adapter=${tasklib.dir}/svnant-1.0.0/lib/svnClientAdapter.jar
tasklib.svnant.javahl=${tasklib.dir}/svnant-1.0.0/lib/svnjavahl.jar
&lt;!-- 
   Antelope only has one library
 --&gt;
tasklib.antelope.tasks=${tasklib.dir}/AntelopeTasks_3.4.2/
AntelopeTasks_3.4.2.jar&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Note that any wrapping that occurred in this list of properties is a function of the limited display space on this site. Each property should appear on a single line in the properties file itself.  In this code, any line that does not begin with “tasklib” (and is not a comment) is wrapped from the line above.  I couldn’t think of a way to indicate that in the code without it being more, rather than less, confusing.&lt;/p&gt;

	&lt;p&gt;Once I have properties to indicate where my tasks reside, I can explicitly include them in my classpath and load the tasks by adding this code to my &lt;a href="http://robwilkerson.org/2008/09/15/ant-build-templates-why-two-files/"&gt;build.xml&lt;/a&gt; file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;!-- load properties set in the build.properties file --&gt;
&lt;property file="build.properties" /&gt;
&lt;!-- 
   add external library file paths to  the project classpath
 --&gt;
&lt;path id="project.classpath"&gt;
   &lt;pathelement location="${tasklib.svnant.tasks}" /&gt;
   &lt;pathelement location="${tasklib.svnant.adapter}" /&gt;
   &lt;pathelement location="${tasklib.svnant.javahl}" /&gt;
   &lt;pathelement location="${tasklib.antelope.tasks}" /&gt;
&lt;/path&gt;
&lt;!-- make the svn tasks available --&gt;
&lt;taskdef resource="svntask.properties"
         classpathref="project.classpath"
/&gt;
&lt;!-- make the antelope tasks available --&gt;
&lt;taskdef resource="ise/antelope/tasks/antlib.xml"
         classpathref="project.classpath"
/&gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;That covers SvnAnt and Antelope, but the jsch library still needs to go somewhere.  I treat that one a little differently, but the difference makes sense in my head.  Since jsch is an external library that fulfills a dependency for a native task, I just drop the library in my &lt;span class="technical"&gt;&lt;span class="caps"&gt;ANT&lt;/span&gt;_HOME/lib/&lt;/span&gt; directory.  There it gets picked up automatically.&lt;/p&gt;

	&lt;p&gt;Alternatively, if I plan to run builds &lt;em&gt;exclusively&lt;/em&gt; from within &lt;a href="http://eclipse.org"&gt;Eclipse&lt;/a&gt; (which is often the case), I might store it in &lt;span class="technical"&gt;~/Library/ant/lib/&lt;/span&gt; and tell Eclipse to find it there in its preferences.  To set that preference:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;Go to &lt;strong&gt;Preferences &gt; Ant &gt; Runtime&lt;/strong&gt;&lt;/li&gt;
		&lt;li&gt;Select the &lt;strong&gt;Classpath&lt;/strong&gt; tab&lt;/li&gt;
		&lt;li&gt;Highlight &lt;strong&gt;Global Entries&lt;/strong&gt;&lt;/li&gt;
		&lt;li&gt;Select &lt;strong&gt;Add External &lt;span class="caps"&gt;JAR&lt;/span&gt;s&lt;/strong&gt;&lt;/li&gt;
		&lt;li&gt;Navigate to jsch-0.1.29.jar, wherever its located&lt;/li&gt;
		&lt;li&gt;Click &lt;strong&gt;Open&lt;/strong&gt; in the file browser dialog&lt;/li&gt;
		&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt; in the Eclipse preferences dialog)&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;With external libraries in place and properly added to the classpath, previously unavailable or unusable tasks are now available for use. Up next: the unveiling.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/19/ant-build-templates-external-tasks/</feedburner:origLink></entry>
    <entry>
        <title type="html">Thinking in Subversion</title>
        <id>tag:robwilkerson.org,2008-09-17:/id/110/</id>
        <updated>2008-09-17T20:25:43-04:00</updated>
        <published>2008-09-17T20:25:43-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804941/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;I just spent more time than I should have needed to spend learning that &lt;span class="technical"&gt;svn revert&lt;/span&gt; is &lt;em&gt;so&lt;/em&gt; not the same thing as &lt;span class="technical"&gt;git revert&lt;/span&gt;.&lt;/p&gt;

	&lt;p&gt;I had modified a page in my working copy while trying to track down and understand the nature of an error.  Once I figured out what I needed, I wanted to get my working copy of that file back to where I started.  Having been a &lt;a href="http://subversion.tigris.org"&gt;Subversion&lt;/a&gt; user for so long, I immediately tried to &lt;span class="technical"&gt;revert&lt;/span&gt; those changes.  Wrong.  Then I tried &lt;span class="technical"&gt;git reset&lt;/span&gt; only to find that while it works on entire repositories, it doesn’t work on individual file paths. At a loss, I turned to &lt;a href="http://twitter.com/robwilkerson/statuses/925266005"&gt;Twitter&lt;/a&gt; and, once again, Twitter delivered.&lt;/p&gt;

	&lt;p&gt;Thanks to &lt;a href="http://twitter.com/benkutil/statuses/925269293"&gt;Ben Kutil&lt;/a&gt; and &lt;a href="http://twitter.com/bgreenlee"&gt;Brad Greenlee&lt;/a&gt;, I learned that &lt;span class="technical"&gt;git checkout&lt;/span&gt; is what I needed. That never even occurred to me and, honestly, I doubt I would have tried it even if it &lt;em&gt;had&lt;/em&gt; occurred to me. I’d have assumed it would throw an error. In the &lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt; paradigm, of course, it makes perfect sense that no error is thrown, but I’m still ascending that learning curve.  I’m still thinking in Subversion.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/17/thinking-in-subversion/</feedburner:origLink></entry>
    <entry>
        <title type="html">Never Mind</title>
        <id>tag:robwilkerson.org,2008-09-17:/id/109/</id>
        <updated>2008-09-17T07:42:43-04:00</updated>
        <published>2008-09-17T07:42:43-04:00</published>
        <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/robwilkerson/~3/402804965/" />
        <author>
            <name>Rob Wilkerson</name>
            <uri>http://robwilkerson.org</uri>
        </author>
        <content type="html">
            	&lt;p&gt;Remember that &lt;a href="http://robwilkerson.org/2008/09/14/any-designers-in-the-audience/"&gt;call for design help&lt;/a&gt;? Well, never mind.  Due to an underwhelming response of a massive nature and the hatred I was feeling for my previous look, I just went ahead and pushed the new look live.  It may not be &lt;em&gt;good&lt;/em&gt;, but it’s almost certain to be better.  To be fair, I did get one promise of design feedback in the near future (thanks, Javie), but I just couldn’t wait any longer.  Fret not designer-types, the offer is still open. I (like to) think I have a decent feel for layout and composition, but a lot of the details – to my eye, specifically around color and its application – are lost on me. I’m sure there’s still a lot of room for improvement and I’d be happy to learn where I can improve the design and appearance of this space.&lt;/p&gt;

	&lt;p&gt;I also want to thank &lt;a href="http://i.am.toogeneric.com"&gt;Alex Suraci&lt;/a&gt; again. I’ve been working with new code from the Chryp repository rather than the downloadable release candidate and, in the move to production, had a few problems.  Some of those were fairly serious and impacted the ability to navigate around the site.  I started the push last night around 7pm hoping things would go smoothly, but I should have known better.  The push uncovered bugs that could’ve been devastating to the availability and accessibility of &lt;a href="http://robwilkerson.org"&gt;robwilkerson.org&lt;/a&gt; except that I was able to reach Alex in the #Chyrp room on &lt;acronym title="Internet Relay Chat"&gt;&lt;span class="caps"&gt;IRC&lt;/span&gt;&lt;/acronym&gt;. He managed to fix the bugs (or point out workarounds) and push them up to the master repository from which I could then pull and update my own code. Without his help and quick response, it would have been a late night indeed.  Instead, I was relaxing in front of the TV by 9:30pm or so.&lt;/p&gt;

	&lt;p&gt;That’s not to say everything’s perfect. It’s not. I know of a few bugs that I need to fix or at least track down, but I could use your help, too.  Please let me know if you see anything that doesn’t look or feel quite right.  No detail is too small.&lt;/p&gt;        </content>
    <feedburner:origLink>http://robwilkerson.org/2008/09/17/never-mind/</feedburner:origLink></entry>
</feed>
