The joy of discovery

This morning, I ran up a trail that I hadn't explored before, and I discovered the Walnut Creek Open Space. The really neat part about it is that it's up in the hills, so there are plenty of spots for a nice view of the valley. In some ways it's a shame that the sun comes up so late these days, because it's really hard to take nice pictures without a tripod with the light that I have when running. (And it helps that I managed to forget to try and take a few at a higher ISO than 80. =)

Photo meme

Because Brett did it, I've been infected with the photo meme.

Instructions: Take a picture of yourself right now. Don't change your clothes, don't fix your hair - just take a picture. Post that picture with NO editing. Post these instructions with the picture.

Morning Sun

When I finished my run this morning, I noticed that the sun was shining
directly down Sunnyvale Ave, so I stopped and took a couple of pictures.
I couldn't decide which one of these two were the best, so I'm posting
both of them.

Good Morning Chilly Mt. Diablo

On my run this morning, I ran back to the hill I had previously found a nice view of Mt. Diablo. This time, I had my camera, so I was able to take some non-cameraphone shots. The sun wasn't quite over the mountain yet, and it was a bit chilly, so we have Mt. Diablo rising out of the fog in the valley. I tried to take a shot of the moon, which was in the western sky, but I failed to get a decent picture of that.

Network Manager is a flaming pile of crap

Note: This was originally written at least a month ago, and somehow, It never got posted. I started up Evolution this morning after not using it for a while, and apparently it had this unsent message in it's queue. I guess my network setup wasn't working very well at all when I wrote this.

I've generally been annoyed that Network Manager in Ubuntu doesn't give you the option to save a dynamic DNS configuration when you save a network configuration that uses DHCP. Also, I'm unhappy that Network Manager doesn't save the Gnome proxy configuration as part of the configuration. But these are minor gripes. I have recently found out that while Network Manager will let me configure my wireless for a static IP, the resulting configuration will not actually work. At all. I can get associated with the access point, and the routes and other network configuration looks fine to me, but I simply cannot send or receive anything. (And in troubleshooting this, I found that Network Manager doesn't save your WPA password between invocations (when you have a static setup), so if you do something like change the configured IP address, you need to remember to also re-enter the WPA password, otherwise, it will happily forget it.)

Anyways, I ended up having to figure out wpa_supplicant (which is surprisingly straightforward), and reconnect to the access point manually. Now things work, but with the general amount of polish Ubuntu has been showing lately, I really didn't expect to find something this integral to the system as this unfinished. It just makes me sad. I've seen some reports that Network Manager 0.7 fixes the static IP issues, and that's coming in Intrepid Ibex.

Anyways, that's enough pointless complaining. I'm going to do something productive. And perhaps after I move, I'll find enough free time to see if I can help fix some of these problems with Network Manager, because it really is my biggest pain point in Ubuntu these days.

Logitech Alto Notebook Stands

I just discovered these thanks to this ArsTechnica article. They have to be the neatest laptop stands I've seen (not that I've ever really looked for a laptop stand), and the ones with the built in keyboards seem especially nice, assuming that the keyboards don't suck. Oddly enough for something that's basically a USB hub and a keyboard, all of these claim that they require windows, however, Apple sells an Alto stand, and a quick Googling shows at least one person has it working in Linux. I'll bet Logitech is just being lazy with the OS requirements. Maybe I'll get one when I figure out where I'm going to put a desk in our current place.

Timeout::Error in Ruby (Warning, language rant!)

There are bad design decisions, and there are horrible design decisions. The exception class Timeout::Error in Ruby's stdlib is one of those horrible things.

Ok, let me start from the beginning. In Ruby, the standard way to catch any recoverable error in your program is to catch StandardError. Anything that doesn't inherit from StandardError is generally the type of thing that you want to have crash your program. Now, Ruby has a library for having an exception thrown after a timeout. (We'll ignore for a second that this library is implemented in a provably unsafe manner as far as threads are concerned.) You just call the timeout method, and pass a number of seconds and a block. If the block doesn't terminate after the number to seconds, it is forcibly terminated, and the Timeout::Error exception is called. This would be all hunky dory except that Timeout::Error isn't a subclass of StandardError, it's a subclass of Interrupt. "So," one may say, "why even use this thing at all?" Well, because you kinda have to. Want to do something with HTTP? Well, the standard HTTP library happily uses the timeout library to do it's timeouts. And as a result, so does pretty much every other library that has to do something with HTTP. So you're going along in your nice, happy application, when you suddenly find out that even though you're rescuing StandardError so that a network failure doesn't bring down your application, well, that isn't quite true: the minute a network timeout happens, your entire application comes crashing down. The only answer I can find on the internet is that one should always just rescue Timeout::Error when doing anything that might call the timeout library. (rant from a developer that found this way before I did)

What I don't get is how this is still in the standard library. Why not do the obvious thing and just make Timeout::Error a subclass of StandardError? (Of course, the aforementioned problems with the timeout library should be fixed, but I can see that taking a long time) While I forsook Perl in favor of Ruby because of Perl's many gotchas, at least Perl's evil tends to be in my code, not hidden deep in a library that I'm using. And I still miss Perl's copious, usually well written documentation. (Even CPAN modules tend to be rather well documented)

Sometimes, the land of Python seems like it might be nice... (The grass is always greener on the other side, and there is always something hidden in the grass waiting to bite you.)

(I also have a whole rant about the stupidity of Java's properties object inheriting from Hashtable, but that's a lot less insidious.)

(Yet Another Parenthesized note: maybe I just need to go back to my warm, fuzzy, Perl security blanket.)

Banana Chase 5k Results

I ran the Banana Chase 5k yesterday, and I did much much better than I would have expected. I finished in 24:01 - that's a 7:45 minute mile average. And I must say that it was better organized than any of the other races I've been to: RhodyCo really puts on a good event, and all of their events are for a good cause. I'd be doing the Bridge to Bridge 12k, but I'm going to be out of town that weekend.

The official pictures haven't been posted yet, but Mara took a picture of me coming into the finish. (And completely losing all my form in my sprint to the end.) Yeah, it's a bit blurry. That's 'cuz I'm so speedy. ;)