Keyboard Fight

I have been doing some stuff with keyboards this week.

Almost 5 months ago I purchased a Logitech G15 gaming keyboard. You can read my review here. This was a very interesting idea, with some integrated features, such as an LCD and additional "macro" keys, which gave me high hopes for it. I purchased the board intending to use the macro features in World of Warcraft.

While I was pretty happy with it while I've had it, unfortunately the fancy bells and whistles did not make up for the fact that the basic feature of the keyboard - the key switches themselves - were the same cheap garbage you can find in a five dollar keyboard model. Despite looking nice out of the box, the paint rubbed off of frequently used keys such as "alt", "h", and the spacebar. The keys themselves now audibly squeak when I press them and some of them require more pressure than before.

I would like to say I collect keyboards. The truth is, I destroy keyboards. Every 6 months or so my keyboard starts to crap out, either losing multiple keys entirely (as with the Logitech DiNovo) or simply becoming too annoying to actually type with due to some built-in flaw (as with the Eluminex).

Originally I thought that my normal rate of destroying keyboards was highly abnormal; however, while reading an interesting review of a keyboard, I discovered that the normal rating of a rubber-dome key switch is about 1 million cycles. If you do some arithmetic on those statistics, it turns out that such a keyboard would only be rated (optimistically) at 220 12-hour days of 80wpm typing. I generally type at 120wpm, although not entirely without errors, so the MTBF for a keyboard for me would average around 150 days, or 5 months.

As I was saying, almost 5 months ago I purchased a keyboard. It doesn't work quite as well now as it did then.

I am lucky to have learned to type as one would learn to play piano: wrists straight, elevated. My form is certainly not perfect, but I follow this advice often enough that while it's good for my wrists, it only helps to accelerate the rate that I can annihilate normal keyboards.

Speaking of piano, I learned this weekend that a professional piano player might spend 1/3 as much time with their fingers touching their keys as I do mine, but they might easily spend $150,000 on such an instrument - and in fact, have more than one. Bolstered by this, and by recent successes at Divmod, I decided to celebrate by buying not one, but two keyboards, which I could actually add to a collection rather than tossing out as soon as my various projects have finished turning them into pulp.

The keyboards in question were the Unicomp EnduraPro USB 104-key with integrated "TrackPoint"-style mouse:
trackpoint
and the Déck Legend ("ToXiC" color):
gamer directional keys

In contrast to my previous review, both of these keyboards are bog-standard PC 104-key keyboards with only one special feature each: the Legend is backlit, and the EnduraPro has the integrated Trackpoint. There are no volume knobs, no "Internet Buttons", no integrated USB hubs, toggle switches or programmable keys.

Also, there are no 1/2¢ rubber dome switches which are going to wear out after another 5 months or feel like crap after 3.

So, on to the main event: keyboard feel. How do these keyboards compare? Either one is easily better than any other keyboard I've used in the last 5 years, with the possible exception of the Tactile Pro. Unfortunately, while the Tactile Pro had high-quality key switches, used an extremely cheap and shoddy key-matrix chip that made it drop keystrokes for people who type quickly. One of the first things that impressed me about the folks at Déck was that their ad-copy frequently mentions that you can type at 240 characters per second on their keyboards. "You cannot type this fast. Ever."

In terms of tactile feedback, the EnduraPro definitely has the edge. In fact, you could say they have the ultimate edge: the key switches activate at the exact moment of the "click" that the key makes, and similarly "click" again when the key is released. This makes it very easy to determine when you have pressed a key and when you haven't. I vaguely remember seeing an industrial design study that indicated that it is conclusively understood that this is, psychologically speaking at least, the best possible feedback that a keyboard can provide. (The impact on your wrist muscles and tendons is another matter...)

The Legend isn't quite so good: there is a definite "click" as your keys strike the bottom of the switch, however, the key activates about halfway down, not at the point of the click, so you end up doing more work and being slightly less sure of when the key has activated.

The EnduraPro's integrated mouse is also a nice feature. The trackpoint was pioneered by IBM in the mid-90s, and it was a good idea that never quite caught on. With USB, it's even more convenient as there is only one cable to worry about. I did end up using it a few times to shuffle my cursor out of the way or to click a link in a browser during some web development. It's not really usable as a primary mouse, but as a quick way to manipulate the mouse cursor without moving your hand, it's great. (Again: USB makes two mice on one machine easy.)

However, the Legend did have some advantages. For one thing, although it's not quite as quiet as the mush-fest boards that we're all used to using, it is a reasonable volume. This is important to me, since I do type in pretty close proximity to someone every day. Also, I spend almost as much time looking at my keyboard as I do touching it. Although I see it out of the corner of my eye (I don't have to hunt and peck for keys, obviously) it is a fixture of my world and I'd prefer that it didn't look awful.

Unfortunately Unicomp does not do so well in that regard either. The keys appear to be made from injection-molded plastic, and the artifacts of that process are clearly visible. In this picture you can see the molding seams leaking on the "2" and "4" keys:

injection molding seam on keypad

Considering the extremely high quality of most of the other parts that went into this keyboard, it's a shame that a few details like this can ruin the overall effect.

If the Unicomp model was short on style, though, the Déck has an overabundance of it. Right out of the box, the contours of its chassis reminded me of the best keyboard ever, the Apple Extended Keyboard II. It comes with a tool to re-arrange your key-caps, and I purchased it with the suggested additional caps; the keyboard comes with a skull and crossbones, but the expanded set contains keys with symbols including: the "wasd" (and "qe") keys with appropriate directional arrows, a target, a revolver's barrel, and a raised middle finger (presumably for the "fn" or "effin'" key for adjusting brightness):

dscn0031

I particularly appreciated the icons they gave me for my F9 key. Doesn't this just scream, "Run Trial"?

F9

The backlighting is just as serious as the key switches, too: as opposed to most illuminated keyboards with 2 (on and off) or, if you're lucky, 3 (on, dim, off) levels of brightness, the Legend has a whopping seven adjustable levels, ranging from "off" to "the surface of the sun". Here's one of the caps with the key off: no filters were applied to this or anything, it is actually bright enough to hurt your eyes if you look straight at it:

escape keycap removed

I also appreciate the inclusion of the key removal tool, because I'm sure I'm going to take it out when I need to clean this keyboard. This was made particularly stark because when the EnduraPro arrived, its spacebar was non-functional. I sent a mail to their support staff, and got a very prompt call back from an apologetic fellow who offered to replace it immediately if that was necessary, but asked me first to just try a simple repair: remove the spacebar and put it back.

While this was far from difficult, I ended up rummaging around for about 15 minutes with this support guy on the phone, looking for a screwdriver or something small enough I could jam under a key to pop it off. I couldn't really apply even pressure, and I was worried I would break the key. It came off just fine, but all I found was a ballpoint pen, and I ended up slightly scratching and drawing on the keys I removed, and wiping the ink off was another few minutes wasted. Replacing the keycaps on the Deck, by contrast, took about 5 minutes from start to finish, to replace about 15 keys. Luckily Déck's keys happen to be the same form factor as Unicomp's, so the key removal tool works on both keyboards :-).

In summary, both of these keyboards are a joy to use, feel pleasant to type on, and are a refreshing break from the sea of mediocrity plaguing keyboard manufacture today. While I do wish there were a good wireless keyboard with high-quality switches, the absence of other crazy special features is almost a relief. These are the sort of thing that anyone who types full-time ought to consider purchasing.

Obviously, most people will only need one or the other. If you care all about function and not about form, get the EnduraPro. It's the clear winner in the tactile battle, and the integrated pointer will save you a bunch of hand movement, especially if you only use the mouse occasionally.

However, if you care about style, or you have to worry about working with someone else in the same space, or you like the idea of "escape" being a little picture of a skull on your keyboard, the Legend is probably the board for you.

Since both of the latter conditions do apply to me, I will probably use the Déck as my primary keyboard. However, thanks to the magic of USB, I am leaving both plugged into my computer. If the mood seizes me, I can now always get some of that old-school Model M Clackety-Clack.

The Other Book

Hey, documentation-complainers! I know you're out there, and I know you read this blog. As you know, if you want to learn about Twisted, there is a book you can buy1.

However, thanks to JP's tireless adjustment of margins, there is now a book you can get for free as well. It's a nicely typeset version of the web-based documentation for Twisted's core, with a paginated table of contents, which you can print out and read on paper, if that's your thing. This book is 255 pages - and it only covers the core portions of Twisted.

At some point I'm going to try to put together an "extended mix" version of this book, that includes documentation of the less well-documented and stable parts of twisted. For now, though, I'll trust it'll take you all a little while to get through the first 250 pages :).


  1. Paid link. See disclosures

SANE vs. CUPS

Every so often, I have to print things, sign them, and then scan them.


Average time to print something using CUPS: 2.5 hours. I have to know where my printer is plugged in, edit some configuration files, and then fiddle with a GUI control panel, then a web UI. All these steps are necessary, because all of the functionality is not exposed through one of them. Sometimes, I also have to download a "PPD" file.


Average time to scan something using XSANE: 3 seconds. I plug in my scanner. I click on the picture of the scanner in my menu. I click "scan". It scans.


Congratulations, SANE team. You know how to write software.


Better luck next time, CUPS guys.

Another Prediction

I'm seeing a lot of noise in the blogodrome about REST these days. Ian Bicking says that continuation-based frameworks are doomed as they are workarounds for the web, based on the fact that that Bill de hÓra says REST has won some kind of epic battle against... what? I wasn't aware that REST was fighting a war against someone. In fact, I see no mention of what the war was against, or what the observable signs of the victory are. Is it a victory against WS-*? Over stateful web UIs?

It reminds me of another war, one that America "won" several years ago. The triumphant cries of "mission accomplished!" in the REST community ring hollow to me, although maybe this is just because I am personally working very hard to work around the web.

Don't get me wrong, the web is great and all, and REST is definitely a superior alternative to WS-*, if you want to do server-to-server information exchange. However, being better than WS-* is pretty easy; web services as they stand today are a nearly unmitigated disaster. I'm very happy to never have to work with them. The brief run-ins I've had with them (like the SOAP stuff in Universal Plug and Play) have been hellish nightmares.

Let's come at this whole "REST vs. rich applications" thing from another perspective.

I don't want to be writing software for the web. I'd much rather be writing a Python desktop application which makes its own socket connections, over its own protocol, and distributing that. It would provide a much richer experience. If I had total control of the user's desktop that's what I'd be doing. However, there are certain advantages that the web provides on a logistical level, unrelated to application architecture:
  • Python isn't secure, and many security-conscious users (those in our target market) won't just go installing new applications willy-nilly (javascript is hardly as secure as it should be either, but at least there is an expectation that it should be, and constant effort put towards improving it)
  • every computer has a web browser: often users have to use applications on computers they don't control
  • "downloading" a web-based application is zero-friction; it by definition cannot involve any complex setup or barrier-to-entry
  • web browsers have a very rich presentation layer which would be hard to re-implement in a native application, and schemes to access it through "native" APIs like PyXPCOM are, although higher-performance than generating HTML and Javascript strings, unfortunately unweildy and complex
  • Many networking situations don't allow anything but HTTP, for completely ridiculous political reasons. This is a stupid, social restriction, usually put in place for "security" reasons by people who don't really understand the security issues involved, but nevertheless it is a very common problem
  • finally, JavaScript might not be Python, but it is a highly dynamic language, and many of its flaws can be fixed (especially with a "real" language like Python on the server to help you out)

None of this has anything to do with the statefulness of the API, or the greatness of REST. Right now, it just makes more sense to write software for the browser than for any other client API, because the browser happens to be the most portable and most seamless deployment target.

These advantages also don't mean that the browser is free of problems. In addition to being a highly convenient deployment environment, the browser is at times an insanely bad development environment. None of the frustrations and difficulties encountered trying to work with the browser as a programming environment, nor the poor performance and poor usability that come from trying to treat it as a "regular" browser and doing all the work on the server, have given me a great deal of confidence in the generality and power of REST as a programming model or the web as a model for applications.

I don't care about application architecture per se - what I care about is an architecture for building usable, powerful applications which make it easy for the user to do what they want without a lot of waiting. That's hard any way you slice it, and by forcing everything your application does into tiny, stateless chunks, REST doesn't help that very much.

So, yes, Divmod Athena, like Seaside, is a giant workaround for the web, and it's turning out to be a pretty good one, at that. I'm pretty happy about that.

The Internet is a global, stateful, interconnected mesh of computers. It's an amazing achievement. The web is a historical accident, a hopefully brief one, which throws away much of the Internet's utility by forcing every networked application with a user interface into an almost-but-not-quite-too-narrow mold. Cookies have replaced authenticated connections, blobs of ever-changing unparseable HTML have replaced application-specific protocols, and dumb clients have replaced intelligent peers.

Here's my prediction. REST will continue to be useful as an architectural pattern for certain applications. However, it is in no way the only way to program "for the web". Workarounds for the web - like google mail, like Meebo, like YouOS, and like Divmod, will continue to be successful because they don't sacrifice the user's experience on the altar of architectural purity. There is no indication that they are going away any time soon.

Where does Divmod come from?

Early next week the Divmod Fan Club meets for the first time.

If you want to influence the direction of our future open source development, now's a good time to join. People on IRC have known about this for a while, but I don't think I've given it much attention publicly. Fans who join early are like low generation V:tM vampires - you can't decrease your "joined-on" date. Except, I guess, to continue the vampire analogy, you might be able to find a long-time fan and devour their soul. If you do that, let me know how it works out. I'm not too clear on the mechanics.

The Divmod Fan Club (DFC) is, for lack of a better description, a business-model experiment. Even after we are providing a commercial service, we feel that our open source contributions are of a pretty high value to the community. So, we're letting the community pay for it, to whatever extent that you all think it's worthwhile. We are still working on the incentive structure, but the basic idea for right now is:
  1. if you want support directly from Divmod team members, you really should be in the club, and
  2. fan club members can vote once a month on what we're doing. The aforementioned meeting is the first of those votes, which is why now's a good time to join.
However, it's also sort of like a fixture of most indie bands' business model: the "rep" program. It's an official way to collaborate and be involved in Divmod's success. (In a way, we are a bit more like an indie rock band than a software company.)

So, to answer the titular question: "Divmod is brought to you by the contributions of our listeners, this computer, and others like it."
where-does-divmod-come-from-DSCN9938

The quote for bronze membership is not a joke.