Until I Find You

John Irving, Random House, 2005

Typical John Irving, falling well within in his usual quirky spectrum of too-wierd-for-words and brilliant. A melancholy (until the last 150 pages or so) story about a young man, his missing-in-action father (a tattooed organist), and his mom (a tattoo artist and a … no, wait, that would give away too much). The main character feels very much like Owen Meany to me, although this book didn’t have that same feeling of building toward Owen Meany’s climactic ending. His story has three distinct parts, each of which has a distinct feeling: quirky initially, drifting and kind of an aimless sadness, and ending on a high note of hilarity and closure. To be honest, I struggled to make it through the later portion of that central part; the first half of the story, on the other hand, flew by, and the last 150 pages were a treat and went very quickly.

If you liked “A Prayer for Owen Meany” and/or “A Widow for One Year”, you will probably would enjoy this one, too (although I would place this book a notch below each of those two, which I consider to be his best so far).

Cleaner RSS Feeds in TiddlyWiki

After playing a bit with TiddlyWiki, I decided that I wanted a cleaner RSS feed from it. It has always bothered me a little that any tiddler I changed always ended up in the RSS stream that TW generates, even tiddlers that a “normal” reader of a TW-based site wouldn’t (and probably shouldn’t) care about. So I tweaked the generateRss() function from version 1.2.35 (look for it down around line 2500 of the TW source) to provide some control over which tiddlers end up being included.

My hacked version of the generateRss() function (below) differs only in the section that generates the “body” of the RSS feed. If each tiddler is tagged specifically for RSS inclusion OR is tagged for neither exclusion from the TW lists nor from the RSS stream, it is included in the RSS stream. This logic is based on case-insensitive checking for the presence of the includRSS, excludeLists, excludeRSS tags on the tiddler. I have submitted this tweak to Jeremy Ruston, the author and maintainer of TW, for incorporation into TW.

function generateRss()
{
  var s = [];

  var d = new Date();
  var u = store.getTiddlerText("SiteUrl",null);
  // Assemble the header
  s.push("< " + "?xml version=\"1.0\"?" + ">");
  s.push("<rss version=\"2.0\">");
  s.push("<channel>");
  s.push("<title>" + store.getTiddlerText("SiteTitle","").htmlEncode() + 
    "</title>");
  if(u)
    s.push("<link>" + u.htmlEncode() + "</link>");
  s.push("<description>" + store.getTiddlerText("SiteSubtitle","").htmlEncode() + 
    "</description>");
  s.push("<language>en-us</language>");
  s.push("<copyright>Copyright " + d.getFullYear() + " " + 
    config.options.txtUserName.htmlEncode() + "</copyright>");
  s.push("<pubdate>" + d.toGMTString() + "</pubdate>");
  s.push("<lastbuilddate>" + d.toGMTString() + "</lastbuilddate>");
  s.push("<docs>http://blogs.law.harvard.edu/tech/rss</docs>");
  s.push("<generator>TiddlyWiki " + version.major + "." + 
    version.minor + "." + version.revision + "</generator>");
  // The body
  var tiddlers = store.getTiddlers("modified");
  var n = 0; // Count of tiddlers included in RSS
  var t = tiddlers.length - 1; // Tiddler index
  while ((n < config.numRssItems) && (t >= 0))
  {
    var tTags = tiddlers[t].getTags().toLowerCase();
    // If this tiddler is flagged specifically for inclusion OR this tiddler
    // is not specifically flagged for exclusion (either by the "excludeLists"
    // or "excludeRSS" tag)...
    if ((tTags.indexOf("includerss") >= 0) || 
       ((tTags.indexOf("excludelists") == -1) && 
       (tTags.indexOf("excluderss") == -1)))
    {
      s.push(tiddlers[t].saveToRss(u)); // Generate the RSS entry for this tiddler
      n++; // Increment the count of tiddlers in the feed
    }
    t--;    // Next tiddler...
  }
  // And footer
  s.push("</channel>");
  s.push("</rss>");
  // Save it all
  return s.join("\n");
}

More TiddlyWiki

I have been using a TiddlyWiki to keep track of a bunch of loosely-organized information and statistics about the junior high school boys soccer teams that I am coaching this Fall. Using Alan Hecht’s WebView plugin, I decided to publish it for the players on the team (and their parents), so that they can keep track of what’s going on and coming up.

I have been using TW for several weeks now, both at home and at work (see my earlier post) to keep track of a variety of different things. The more I use it, the more I am impressed!

Zero Free Time

Soccer has started back up again for the Fall season. I am coaching a team of junior high school boys — that would be ages 13, 14, 15 or grades 7, 8, 9 — and heading up the program there at the same junior high school. As a result, my free time has dropped to something very close to zero through somewhere near the end of October.

We’ve already lost our first player to injury. He broke his wrist at a school dance on Friday evening. Rumor has it he was trying to do one of those “run up the wall and launch yourself into a backflip” moves. Apparently, he didn’t land on his feet…

I can’t wait to hear the rest of this story…

I haven’t had much time to do any reading lately, either. I have struggled to make it through a couple of Clive Cussler books, and have given up. They are, in my opinion, just not worth bothering with — I had high hopes for them after seeing a movie recently that was based on one of the books. The movie was fluff, but very enjoyable fluff. Not so the books.

The one bright side, from a reading perspective, is that we are almost finished with the latest Harry Potter book. Our tradition is that we read each of the books in this series aloud as a family. It makes for much slower going, but is very enjoyable and a different way to experience them. We will probably finish it this evening…

Time Sinks

Over the past few weeks, I have been playing with a couple of different window managers on one or more of my Linux boxes for reasons that are diametrically opposed. I want a desktop that is easy to use, stable, responsive, easily configured and customizable, reasonably polished in appearance, and is (again, reasonably) consistent across all of the applications that I really care about.

Fluxbox: I used to run Fluxbox on my Mandrake boxes, primarily because of its very low overhead and speed. I hadn’t played with it in nearly a year (since switching to Ubuntu). Still very fast, very customizable, lots of themes available (and those themes are very easy to tweak). The one piece that it seems to be missing (and this probably says more about my own idiosyncracies than any real shortcomings of the project) is support for SVG icons. It does support icons on its menus, but until it provides SVG support, those menus will never look good for anyone (like me) who can’t design decent icons at small (e.g., 24×24) sizes.

Enlightenment: I looked briefly at Enlightenment DR16 a while back, but couldn’t ever really find a way to get DR17 running at that point. I recently came across several posts on the Ubuntu forums about DR17, and in fact someone has established a repository that put me in a position of being able to very easily get E DR17 installed and running via synaptic. Impressive, heavy on the eye candy, and very usable at this point. It’s drawback (and, again, this is probably more about me than the project): I can’t figure out how to configure nearly anything there — the menus, the applications available on the iBar at the bottom of the screen.

At this point, however, I am back to my Gnome desktop. Why? It just works, looks good, and is consistent across applications (at least the ones I use and care about). I have enough horsepower on all of the boxes I am currently using for Linux that Gnome is responsive enough to be satisfactory. I found myself spending so much time tweaking, twiddling, and looking for help, that I wasn’t getting anything done, and ultimately, I need my desktop to help me get work done. It needs to be a means to an end, not an end in and of itself (at least for now).