Thrift Packaging

My latest project at work is Cassandra, a distributed, eventually consistent, column oriented data store. It's somewhere between Dynamo (Cassandra's original author worked on Dynamo), and Google's BigTable. It was developed as an internal application at Facebook, later open sourced, and is now an Apache incubator project.

The external interface to Cassandra is thrift-based. Thrift is a framework for creating network services, services that communicate using a compact binary data format. It's similar to Google's Protocol Buffers, but with more of a focus on RPC, and greater language coverage, (much greater actually). The bottom line, any application that uses Cassandra for structured data storage is going to need Thrift. So, I filed an ITP (Intent To Package) and have started work on packaging it for Debian.

Thrift is an interesting project to package as it has an architecture specific application (C++), 6 architecture specific and 5 architecture independent libraries, and covers 12 different languages. That's right, 12.

I'm still somewhat undecided on a game plan; the options I've considered so far are:

  1. Convince upstream to split their source tree and distribute all of these libraries separately, allowing them to be packaged by people with the skills and/or motivation for each.
  2. Split the source myself and package the bits that are most important to me.
  3. One source package based on the official upstream release, with binary packages for each of the components that I need/am comfortable maintaining. Folks interested in the parts not packaged could step up to the plate and contribute their time.
  4. Best-effort packaging of most/all of the libraries upstream ships with the proviso that for any I'm not comfortable seeing in a release, and for which no one has stepped forward for, they would be removed prior to Squeeze.

I've already taken a stab at #1 and it didn't seem promising. #2 is an option I still consider on the table but I'm a little concerned that it could lead to a mess. #3 and #4 really boil down to the same thing, collaborating with others to package as much as possible while maintaining the standards everyone expects from Debian. I guess I'm currently leaning toward some variation of #3 or #4, probably through the use of collab-maint or a dedicated Alioth project.

For the time being, my efforts can be tracked in Git here, so drop me a line if you're interested in joining the fun!

NP: Sand and Mercury, The Gathering

Brain Rewiring

A co-worker of mine uses one of the stranger keyboards I've seen, a Kinesis Advantage.

Kinesis Advantage Keyboard

He picked it up his after a bout with tendinitis and was sold on it. He was kind enough to let me borrow his spare for about a week so I could try it out. It's been an interesting week. :)

The Advantage differs from conventional keyboards in a number of ways, the ones I think most relevant are:

  • The separation of the left and right sides of the keyboard, done to keep you from pivoting your hands side-to-side at the wrist as you type. A lot of keyboards address this by creating a break in the middle and angling the two sides outward (everyone has seen the MS Naturals), but not having to turn your arms inward feels more comfortable/natural to me.
  • Keys that are arranged into a concave surface as opposed to a flat one. This might seem strange, but the curvature lines up well with the arc your finger tips travel in, and positions the keys within closer reach of one another.
  • The keys are also arranged on a vertical axis to one another, as opposed to being staggered. So for example the C key is directly below D, not below and to the right. Moving your fingers from their keys on the home row to the corresponding keys above and below is a much more natural movement.
  • Key layout is different as well. You're expected to do quite a bit more with your thumbs. The Backspace, Delete, Home, End, and Control and Alt keys are positioned within reach of your left thumb, your right works Space, Enter, Page Up and Down, in addition to another Control key, and a Windows key (which I remap to Alt). This really makes sense if you think about, why waste two perfectly good fingers on the same key, when you could put them to use and eliminate all of that reaching.
  • The keys have outstanding tactile feedback, in addition to an audible feedback (something between a faint click and a beep emitted by a speaker somewhere inside). I find this feedback helpful in maintaining a light touch on the keys since I often catch myself banging keys pretty hard on normal keyboards.

I'm not going to lie though, it does take some getting used to. The biggest problem I had was Space vs. Backspace, which are the right-most thumb key, and left-most thumb key respectively. Prior to all of this I heavily favored my left thumb for striking the space bar, and muscle memory is a bitch when it causes you to Backspace when you meant Space.

Other points of frustration were the tilde/back-tick key (located bottom-left instead of top-left), and the left and right bracket/brace keys (located bottom-right). These keys are used a lot in a shell or when coding, which probably made the pain even more pronounced for someone like me.

I managed to force myself to use nothing else for several days, at which point I felt I was doing quite well. I still had the occasional problem here and there, but it seemed like I was well on my way to normalcy. Then I tried using the built-in keyboard on my laptop. Wow. Epic fail. It took a few more days and plenty of patience before I was able to move back and forth (and truth be told it's still a little awkward).

So was it worth it? Yeah, I think so. I've had RSI troubles of my own and a week of typing on this keyboard has felt pretty good. I've ordered one of my own to use at work, and I'll probably grab a second one for home.