Friday, April 18, 2008

It is snowing.

Which wouldn't be unusual in and of itself except (a) it's mid-April, and (b) this is Seattle.

We're supposed to have our first open water swim in a couple weeks. I'm beginning to wonder about this.

Maker Faire

Anyone reading this going to Maker Faire at the San Mateo Fairgrounds next month?

After two years of wanting to go but doing nothing about it, I'm finally plunking down the money to fly down and go. I'm usually reluctant to spend money on trips like this for myself without some other attached event (e.g., someone else is going, is getting married, etc.). I don't really know why I'm that way; I just am.

I'll be there on Saturday, May 3rd. If you'll be there, get my contact info and come say hi!

Sunday, April 13, 2008

I spent my weekend mostly naked.

Probably more information than you wanted to know. But I was at the PNA/NW Zone swim meet, so I had an excuse this time. This was my first ever swim meet that I've actually swum in (I've spent others timing and running the computer).

The King County Aquatic Center is nice. The competition pool is an LCM (long course (50) meter), dividable into various arrangements; for this meet, it was divided into two SCY (short course (25) yard) pools. It's 9 feet deep throughout -- no worrying about hitting your head turning in the shallow end -- and has waveless gutters. You could warm up during the meet in the dive tank -- 25 yards square and 17.5 feet deep. When you jump into it, you feel like you're just going to float forever downward.

Anyway, I did the 1000 and 1650 ("swimmer's mile") freestyle events, and a relay event where I swam another 50 freestyle. I learned that I'm faster than I think I am, but still nowhere near as fast as I'd like to be. I managed a 15:13 in the 1000 (vs. expected 18:00), and 25:08 for 1650 (expected 29:00). However, I know that I was faster here than I am in my normal pool -- all those niceties plus the adrenaline rush add up.

Tuesday, April 8, 2008

A decent web framework?

I've been playing with a combination of CherryPy, Genshi, and Dojo to put together a website for a friend. So far, I've been quite pleased.

CherryPy is the request router -- it's responsible for cracking open the HTTP message and deciding how to process it. I have a few nits about it -- mainly documentation related -- but getting a webserver set up which did something along the lines of, "Route everything through Genshi except this path, which you should serve from the filesystem," was very straightforward.

Genshi is the first page framework which evoked a response from me of, "Hm, this could work," instead of, "God, I feel like I'm going to throw up." It uses an interesting approach: you write everything in XML and embed the programmatic constructs in the attributes. The rendering phase takes care of the transformation to HTML (or text, or ). For example, here's how you might render a table full of sliders for every integer or floating-point parameter:
<tr py:for="param in parameters">
<td py:if="param.valueType in ('int', 'float')">
<div dojoType="dijit.form.HorizontalSlider"
onChange="onNumericSliderChange('${name}')" />

I'm used to the frameworks which require you to escape any code. Genshi lets you do that, if you absolutely insist upon it:
for param in parameters:
if param.valuetype in ('int', 'float'):
?><div dojoType="dijit.form.HorizontalSlider"
onChange="onNumericSliderChange('${name}')" />

Dojo is a set of widgets. Not quite Google Web Toolkit, but it's simple and gets the job done.

Friday, April 4, 2008

SpamAssassin's multiple personality disorder

SpamAssassin has become a bit overly aggressive in its filtering as of late. A few of my friends' e-mails are getting sucked up in there, so I've had to monitor it a bit more closely.

Today, however, I found this gem in there. Clearly, it was conflicted as to whether the e-mail was spam or not, though ultimately it decided it was (and was correct in this determination). What amazes me is that, even with 12.3 positive points subtracted, this e-mail still scores as spam.
Content analysis details:   (8.6 points, 5.0 required)

pts rule name description
---- ---------------------- --------------------------------------------------
1.0 NO_REAL_NAME From: does not include a real name
0.1 FORGED_RCVD_HELO Received: contains a forged HELO
0.1 HTML_90_100 BODY: Message is 90% to 100% HTML
0.0 HTML_MESSAGE BODY: HTML included in message
0.5 BAYES_99 BODY: Bayesian spam probability is 99 to 100%
[score: 1.0000]
0.0 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
-4.3 RCVD_IN_BSP_TRUSTED RBL: Sender is in Bonded Sender Program (trusted
[Return Path SenderScore Certified (formerly]
[Bonded Sender) - ]
1.6 URIBL_SBL Contains an URL listed in the SBL blocklist
3.8 URIBL_AB_SURBL Contains an URL listed in the AB SURBL blocklist
4.1 URIBL_JP_SURBL Contains an URL listed in the JP SURBL blocklist
2.1 URIBL_WS_SURBL Contains an URL listed in the WS SURBL blocklist
3.0 URIBL_OB_SURBL Contains an URL listed in the OB SURBL blocklist
4.5 URIBL_SC_SURBL Contains an URL listed in the SC SURBL blocklist
0.0 MIME_HTML_ONLY_MULTI Multipart message only has text/html MIME parts
-8.0 AWL AWL: From: address is in the auto white-list

Office/cubicle location

I've decided that it's not the size of the office which matters; it's the location. While I wouldn't pass up a posh corner window office on the penthouse floor, that's not what I'm thinking of. I need an office deep within a maze of twisty passages, all alike. The effort required to find me would place a high premium on interrupting me, and hopefully I could get more done.

Then again, maybe this will ensure that I only get determined idiots bugging me. Hm.

Tamara and I went down to Sacramento to visit a friend for an extended weekend. It was fabulous -- we spent a few days at her family's cabin in the Sierras, got together with a bunch of college buddies in the Bay Area, and otherwise just hung out.

Remember that fitness challenge I was doing in February? Well, the results have been posted; I came in second in my age group again. The guy who beat me won't beat me next year, though -- if only because I'll move up to the next age group. :-)