Won't You Be My Neighbor

I don't get out much.

Still, there are some strange things in my neighborhood. Simply on my way to the mall there are a surprising number of oddities. For example, there is a building next to the Museum of Science that I like to think of as the Dungeon of Science.

dscn9714

From the amount of ivy on that building, I have to guess that "Unauthorized Persons KEEP OUT" sign was placed there a good 6 decades ago; as they were constructing the Museum of Good Science, they had to have a place to trap all the Bad Science so that it wouldn't get out. There could be more mundane explanations, of course; it could just be where they keep the vampire.

If we continue along to the other side of the river, we come to this:

Pillar of Souls

In the game Eternal Darkness, there is a point at which the villain must construct what he terms the "Pillar of Flesh", a grisly monument made of concrete and still-living people, designed to focus the evil energies required to bring his dark god forth to this world. You know, to raze it down to its component atoms and re-make it in its own image, etc. So, imagine my surprise when I discovered I live right next to a miniature; let's call it a "Pillar of Souls", since clearly whole bodies aren't trapped in there. You can see that most of the folks involved are smiling for the camera:

00001

but there are a few who let their true feelings slip through:

00001 00001

Seriously, there is no inscription anywhere on this monument, nor any plaque in the area to explain what it is supposed to represent. Why would you make a sculpture of a group of people's heads smashed together in various states of dismay and/or amusement and then put that on a footpath near a mall? Why, I ask you? I note that it is pointed towards the sky - perhaps some kind of spectral battery for a weapon that shoots ghosts at the sun?

I am not an expert but I do not think that shooting ghosts at the sun would do anything, and if it did, it would not be a thing that is good for anyone.

I am weak (Review of Saitek "Eclipse" Keyboard)

This isn't an essay I've had in mind for any time, but the photo is kind of neat, and it happened today.

I have managed to avoid purchasing a keyboard for almost a year now. Apparently this is too long:

dscn9730

Today briefly before lunch, the "Alt" key on my Bluetooth DiNovo finally gave up the ghost. It's still under warranty, but I was in the middle of hacking with Emacs, and you can't really do that without a meta key. I really do destroy keyboards at an unbelieveable rate. As a backup, I purchased a somewhat sturdier and cheaper board; the Saitek Eclipse PC Keyboard.

While it doesn't meet any of my normal criterea for a good keyboard, i.e. it doesn't use mechanical keyswitches and it's not slim form-factor, something about this keyboard just exudes quality. This wasn't a dramatic or somehow amazing keyboard like the Tactile Pro, but it is a quietly comfortable and definitely high-quality keyboard. It's a bit paradoxical - I generally hate membrane keyboards with a lot of travel, but this one seems to be quite comfortable. The keys are a good size, the incline is comfortable, and I seem to be able to break 140wpm consistently in the hard drills at the end of gtypist. It has exactly the keys I need: no funky spatter of random "internet" function buttons that don't work with Linux anyway. All the keys are in exactly the right place; they didn't pull any weird tricks like expanding the Delete key, moving around the backslash or backquote, or sliding the Alt somewhere other than under the thumb. The nominal Control keys are nice and wide, when you need to use them, and the Caps Lock isn't castrated to make it useless as a Control.

But of course, these are all just mistakes they didn't make. It feels nice, and I don't know why. The only concrete difference I can really put my finger on (no pun intended) is the lack of "squeak". Perhaps there is a better word for this, but I have only tested this concept experientially - here's what I mean.

Try this with a normal $5 keyboard: push hard on one of the keys, then slide your finger back and forth. You will notice that it squeaks when you wiggle your finger back and forth, sending vibrations up your arm. I always take this as a sign of the quality of the construction of the keyboard, because the squeak is coming from bits of plastic rubbing against each other which are never really supposed to touch. On really awful keyboards this is bad enough that you can feel the squeak while typing; on others there is just the occasional hint of it.

While this particular feature isn't a deal-breaker for me (even the DiNovo has a tiny bit of squeak) it is definitely a good sign that the Eclipse doesn't have it. I'm enjoying typing on it immensely so far. Its first day it saw a prodigious amount of use, as I was preparing for a rather intense deadline :).

Twenty Megabytes

Today I'm playing with Flickr to see what the buzz is about (and of course, to get some ideas for Divmod's photo-sharing features). I often think of blog narratives that involve photos. I'm going to post a few samples of ideas that I've had for months, but just haven't found a moment to upload.

I maxed out my upload ratio on my first night: 20M of photos goes really quickly.

By the way, I uploaded all the photos with FlickrUploadr, an unofficial GTK+ tool to upload photos written, inevitably, in Python.

what we need more of is surveys

I made some science

metaclasses: like candy for sociopaths

If you've ever tried to use __slots__, you might have noticed that it comes with a pleasant side-effect: it makes it impossible to assign extra, garbage attributes to your objects. While normally not a serious problem, objects with extra, unintentional crud stuck to them can make object databases hell to work with as you struggle to figure out where it came from or why it is in your database but not in memory. Therefore, this semantic feature is handy in addition to reducing the memory footprint of objects if you have large numbers of them lying around.

If you've noticed this, you've also probably noticed that it is damn near impossible to use __slots__ because you have no control over what slots are used from your base classes.

Here is a solution to this problem that I have been working on for a while: SlotMachine. While it breaks isinstance - you weren't using isinstance anyway, right? - it does do the sane thing that you would expect a cooperative __slots__ implementation to do; you can subclass from random other classes (provided that you properly specify all their attributes as slots on your object) and other SlotMachines, and even other objects that define __slots__, without giving up the explicit specification of attributes or the ability to inherit from things.

I'll add some more comments to that file later tomorrow, I think.