Stock Firefox on Ubuntu

Having played with the betas and the pre-release candidates of Mozilla Firefox on several of my Windows-based computers, I was very anxious to get the new v1.5 up and running as soon as it was released in late November. As the release date crept closer, the traffic on the Ubuntu forums indicated that a quick backport of the Mozilla release for the inclusion in the Ubuntu repositories wasn’t likely. Luckily for me, though, a kind soul on the forums posted a slick How-To with instructions on getting the stock Mozilla build installed and running on Ubuntu. Worked like a charm…

And the results? Highly non-scientific, I realize, but this new version is screaming fast compared to the Ubuntu-included v1.07 that is available in the repositories. I don’t know (and, frankly, don’t care) how much of that is v1.5 vs. v1.07 and how much might be the stock Mozilla vs. the distro-specific build (I have seen grumblings in the Ubuntu forums that the distro version may be something of a pig). Either way, it feels much snappier, loads pages quicker, and works without any problems so far!

Update: I also have switched to running a stock Mozilla Thunderbird (currently at 1.5rc2), based on a similar How-To, and have had no problems.

BlueDragon on Ubuntu (Revisited)

Having recently upgraded most of my boxes to Ubuntu 5.10, I needed to get NewAtlanta’s BlueDragon CFML server re-installed. The good news is that the steps from my earlier post worked verbatim (aside from finding a couple of tweaks to the post where I clearly mis-typed a portion of a step or two). The good news is that I now have BD6.2 running against the stock Ubuntu Apache 2.0.54, and MySQL 4.0.24. I have gone back and tweaked just a couple of items in those instructions to clear up those mistakes.

Tango: Learning to Dance

Well, OK. Not really that kind of dance…

The new look here at we3geeks is a WordPress theme that I have been working on (or more correctly, off and on) for the past couple of months. Called “Tango” (hence the dance comment), it is based in large part on the colors, presentation, and icons of the Tango Desktop Project’s work. It is definitely still a work in progress, and my intent is to continue to clean it up and make it work (and look!) better in the coming weeks. It has taken what seems like forever to get it even to this point, where I could roll it out, in part due to an almost complete lack of time to play with it, and because this is my first (admittedly feeble) attempt at putting together a WordPress theme.

There are still a fair number of rough bits (e.g., I know that the layout is kind of dorked up in IE) that I need to work through and clean up. Keep watching.

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");
}