March 2006 Archives

Looking for a new ThinkPad.

| No Comments | No TrackBacks

Ok, here's the new wishlist item: ThinkPad X60s

Cash in hand: $400. More to raise: $1400.

I wish I could go for something cheaper, but the battery life on this thing, especially with the extra battery pack, is just amazing. Two models ago, when new, I got an honest 8 hours. After a year and a half, it has died down to 5 hours. This new model has the same size batteries, and lower power consumption on the hard drive and CPU. The reviews have been awesome, just as they were with my poor old laptop :-|

Stop, Thief!

| No Comments | No TrackBacks

My laptop was stolen at about 4am-ish this past Friday. I'd been pulling all-nighters at the dining room table for weeks, and I'd just turned in at about 2am. The thief let himself in one of the doors, headed for a housemate's room, scoping it out with a flashlight and woke her up. At first she thought it was a housemate needing help or something, but then the thief bolted out of her room, grabbed whatever he could from the dining room, stuffed it in a backpack stolen from the living room, and left out the side door, taking a bike as a get-away vehicle. He also got two wallets and two sets of keys, but chose to steal a bike to get away. Major bummer! I'm starting a collection for the buy-a-new-laptop fund.

Sieve in DBMail: Check!

| No Comments | No TrackBacks

DBMail now has Sieve script support, starting with DBMail 2.1.4 and libSieve 2.1.10. A marathon two weeks of integration, three releases of libSieve, and two releases of the DBMail 2.1 development series, and it's together and working. And it was only on my todo list for two years. Probably the most interesting part of the experience was working on both sides of a library: maintaining the library and the downstream application consuming it. Even when it was tempting to Just Fix It (TM) when I came across a bug, most of the time these bugs were crashes caused by misunderstandings or garbage data flowing between the programs. Within a single program, you can just document that a function doesn't like garbage, refactor the function and its consumer, whatever. But when you've got a library intended for consumption in its own right -- and an [almost] frozen API -- Garbage In Garbage Out (TM) is a less than ideal situation. The better approach is to handle the garbage elegantly and return useful error messages, like this: Error: you gave me garbage but all you're going to get back is this lousy error message. And a t-shirt, I suppose ;-)

Tweets

Loading . . .

Categories