The November 2004 Blog
send me a comment

Annoying Styles Of Driving (Tuesday, Nov 30)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

George Carlin once said something to the effect of: "On the highway, anyone who drives slower than you is an asshole, and anyone who drives faster than you is a maniac."

Over the Thanksgiving holiday last week, we put in a lot of highway time as we travelled around, and I think I'd like to expand that list a little bit. Here's my list of annoying types of drivers.

Thanksgiving Recipes (Tuesday, Nov 23)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

For those of you who will be celebrating Thanksgiving on Thursday, here are some recipes you might enjoy (if you're looking for just one or two more side dishes to squeeze on the table):

Regarding the sausage stuffing, that's one of those really love-it-or-hate-it kind of dishes. Yes, it's unbelievably fattening, but the way I look at it I'm already eating about 5 pounds of food, so what's another 1,000 or so calories? Don't look at me like that. You know you want some too. And it tastes sooo good...

Now, I understand how you might not trust my Thanksgiving recipes if you saw my turkey pictures last year, but let me assure you that the charred bird was a cooking error, not the result of a bad recipe. And besides, that particular turkey ended up tasting pretty good after we scraped the skin away, thank you.

Really. It did. Trust me.

Bad Haircut (Monday, Nov 22)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

A couple of days ago, I was in the mall and I noticed that the haircut shop there was pretty empty. I figured that people just didn't tend to go to the mall to get haircuts, so that would be a good place to try. No lines, get in and out quickly, and maybe do some shopping.

So yesterday I went to said haircut place in the mall, and sure enough there were no lines and I got seated right away. Sadly, I realized a few minutes later that I was getting a Bad Haircut, and that was probably the reason for the lack of patronage. Here were my Bad Haircut clues:

In the end, I guess it doesn't look as bad as I thought it would. It's kind of choppy, and the cowlick on the back of my head is sticking up like a rooster, but no permanent damage. I'll probably need another "touch up" cut pretty soon, but my Mom always told me that the difference between a good haircut and a bad haircut is 2 weeks, and I'm sticking with that. At least there were no awkward eyebrow moments like the last time (by the way, have you seen Tom's sympathetic eyebrow picture? Fabulous. I might make that my desktop wallpaper this week...).

LS2J Examples (Friday, Nov 19)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

Here's something for your Notes Designer client to chew on: LS2J Examples Database

In Notes 6, Lotus introduced a feature called LS2J that allows you to call Java classes from LotusScript. I've never really had a chance to use LS2J before, so I decided to spend some time this week understanding it and trying to figure out some interesting reasons to use it. The result of my labor is a database with a few script libraries and agents. Here's what you'll find inside:

So there you go. Have a nice weekend.

UPDATE: Looks like Jens Bruntt has been pretty busy with LS2J recently too. He's posted an example of zipping files using LS2J, as well as an agent that makes thumbnail images.

I was trying to figure out why the LS2J zip agent sounded familiar, and I finally remembered that Andrew Pollack had mentioned it almost 3 months ago. Based on the comments from other people who are working with LS2J already, it looks like I'm might be playing catch-up trying to figure out how to use it.

Puakma Web Booster (Wednesday, Nov 17)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

Several weeks ago, Brendon Upson (of Puakma fame) let me try out a beta of his Web Booster product, and I thought it was pretty cool. Now that Web Booster is gold, you might want to take a look too.

On the surface, you can think of it as a reverse proxy for your web servers. Instead of hitting your web server(s) directly, you can set up Web Booster to be a front end, so the users are transparently hitting Web Booster instead of the web server. Simple enough, right? So why would you want to do that...?

Well, a couple of reasons come to mind:

That last piece (SSO between NT and Domino) is the coolest feature to me, but also the one I haven't had a chance to play around with much. In any case, lots of potential.

Anyway, I've been meaning to mention that all week. And no, I'm not getting any kickbacks for talking about the product -- I tried it, I liked it, and I wanted to tell you about it.

OpenLog 1.0 Is Ready (Thursday, Nov 11)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

I finally got around to finishing and releasing OpenLog version 1.0 over on the OpenNTF site. That kind of stuff is always a lot more work than I expect it to be. I'd write more about it here, but I'm tired and I'm going to bed right now.

If you're not familiar with my little OpenLog database project, the nutshell is that it provides a very easy way to log LotusScript and Java errors and events in your code. Lots more information than you're probably already logging. See my original announcement of the project for more detail, or just download the database and try it yourself.

Monkey Coffee (Monday, Nov 8)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

Here's something that I've heard of before, but never knew whether or not it was real. Confirmed at, there actually is such a thing as Kopi Luwak coffee.

Why would I doubt its existence? Well, apparently the coffee is made from coffee beans that have been eaten by and then excreted from an Indonisian monkey. Okay, so it's not a monkey, it's something called a Palm Civet, but that's really beside the point. What's important here is that the coffee beans have passed through the entire digestive system of an animal -- monkey, cat, raccoon, whatever -- and after they've been crapped out they're washed off, roasted, and ground up for a hot cup of java.


I was told that Raven's Brew Coffee used to have Kopi Luwak t-shirts that said "Good to the last dropping", but I didn't see them on the site anymore. Maybe Maxwell House got mad about the slogan...

Bitten By The Recycle Gremlin (Again) (Wednesday, Nov 3)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

The other day I noticed that there were a bunch of temporary-looking files in my Notes program directory. They were all named using a convention of "eo###tm" (like eo54477740tm, eo54477984tm, etc.), and the file sizes were all over the place -- everything from 20 KB or so, all the way up to 3 or 4 MB. I opened a few of them in a text editor and discovered that they were Word docs, PDFs, and other assorted file types.

It finally occurred to me that they were files that had been attached to e-mails. Hmm, what have I been doing with e-mail attachments recently...?

Ah yes, the Winmail.dat file conversions. To give you a clue about what was going on, try running this agent against a selected e-mail that has an attachment:

import lotus.domino.*;
import java.util.*;

public class JavaAgent extends AgentBase {

  public void NotesMain() {
    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      DocumentCollection dc = agentContext.getUnprocessedDocuments();
      Document doc = dc.getFirstDocument();

      RichTextItem body = (RichTextItem)doc.getFirstItem("Body");
      Vector v = body.getEmbeddedObjects();
      Enumeration e = v.elements();
      while (e.hasMoreElements()) {
        EmbeddedObject eo = (EmbeddedObject)e.nextElement();
        if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT) {
          InputStream is = eo.getInputStream();


    } catch(Exception e) {

Now take a look at your Notes program directory. Do you see any eo*tm files? I'm running Notes 6.51 on XP, and I do. One for each attachment I called getInputStream() against. The Notes Designer Help gives us a further clue as to what's going on:

EmbeddedObject.getInputStream creates a temporary file. The file is deleted when EmbeddedObject is recycled.

Well, I thought that my EmbeddedObject object up there would get recycled when the RichTextItem that contains it gets recycled, or at least when the Document gets recycled. Nope. Apparently not. As long as you have that eo.recycle(); line commented out, the recycling never seems to take place (or at least the temporary file never gets deleted). Since the file is in the Notes program directory instead of the Notes temp directory, it never gets cleaned up either, so you could really start building up those files over time.

I also found out that you have to explicitly close the InputStream before you recycle the EmbeddedObject too. For example, if the eo.recycle(); line is there but the is.close(); line is not, the temporary file remains there as well (which makes sense, because something else could be using it).

So that's your Lotus Notes recycling tip for the day: if you call EmbeddedObject.getInputStream(), make sure you close the stream and recycle the embedded object -- in that order -- when you're done with them.

I updated the Winmail.dat conversion agent to reflect this change as well (I just added one line of code). If you've been using that agent, you should probably add the call to recycle(), and manually clear out any temporary files that you may already have.

My Election Day Prayer (Tuesday, Nov 2)
[ permalink ] [ GoogleTrack ] [ e-mail me ] [ >> ]

Dear God,

Please grant me the wisdom to vote for the right guy, the tolerance to deal with people who are voting for the other guy, and the patience to accept a situation where my guy might not win.

Please allow my vote to be counted properly, and for any lawyer who tries to cause my legitimate vote to be disqualified, please send him or her on your Divine Bullet Train to Hell (which you would probably be doing anyway, but I'd just like to make a humble suggestion here).

And God, thank you for allowing me to live in a country where I am allowed to vote freely, and bless those who have given their lives and blood to fight for that privilege.