Skip to content

Work it out

One of my resolutions this year was to work out more. As a Googler I’m inclined to be data-driven, so I decided to track my exercise throughout the year. I made a Google Calendar and every time I went rock climbing, worked out at the gym, hiked, or went to karate back at MIT, I added an event. I slapped together a little Python program using the Calendar APIs to summarize my exercise so far. I’m not yet reaching my goals of working out six days a week, but March has been a big improvement over February, which was an improvement over January (and I spent much of January traveling).

And with yesterday’s announcement of Google App Engine (as well as support for App Engine’s URL fetcher in the GData client posted this morning), I ported my script from a command-line client to a webapp: dave glasser’s exercises. Follow along and make fun of me if I don’t go to the gym enough!

(One little detail is that I’ve written workout-specific description parsers: Gym parses out the length or number of repetitions of various exercises (some of which have multiple phrasings), and Rock Climbing figures out if I’ve gone bouldering or top-roping.)

Future plans:

  • actual HTML output
  • filtering and statistics based on dates
  • make the special parsing be based on data, not hardcoded
  • let other people use the tool to view their own exercise calendars

Host me

I’ve grown sick of upgrading WordPress every time yet another security hole is found (let alone after actually being hacked). Fortunately, Dreamhost now offers a hosted WordPress installation; now my blog will be upgraded by people whose job it is to pay attention to WordPress releases, not by me. Sure, I lose on customization, but I have better things to do than delete Viagra spam from footer.php.

The hosted-WordPress only works on entire domains, so the blog has moved from to A bit of mod_rewrite fun seems to make my old URLs keep working, at least. Perhaps you need to update your feed subscriptions.

And just for the hell of it, here’s a new theme.

Leopard install failed!

Install Failed: Mac OS X could not be installed on your computer.

The Installer could not validate the contents of the ‘EpsonPrinterDrivers’ package. Contact the software manufacturer for assistance.

Anyone else seeing this?

I’m seeing this forum thread, but that’s about it. (And that sounds like bad downloads… but this was a disc from Amazon.)

Oh, well, trying again… at least it wasn’t my work computer…

Foot-powered Gmail with Kinesis

In January, I switched to using Kinesis Contoured keyboards. The main reason I started using them was that I was fearing RSI, and since switching typing has been much more comfortable and efficient.

Recently, though, I started taking advantage of another side of Kinesis. Kinesis sells foot pedals which plug into their keyboards; their USB Advantage Pro model comes with one for free, and you can buy more.

As far as I know, most people who use the Kinesis footswitch use it for a modifier key like SHIFT or CTRL, or as an enabler for the embedded numeric keypad, in order to save their hands from painful chording.

Not me. I have my left footswitch set up to type “k” and my right footswitch types a space.

Why? Well, I use Gmail, both for my personal account and for work. I generally read my incoming mail (especially in my work account, where I try to get every thread marked as read) by just clicking on the oldest unread thread, scrolling down in the thread with my spacebar, and going to the next newest thread with the “k” key. I don’t delete or archive, and use labels minimally. Anything that needs a response I either respond to instantly or start (hit “s”) and come back to it later.

So generally, when skimming my email, I’m just hitting “k” and “space”. And I can do it with my feet. That’s right: I can skim through my entire inbox while drinking coffee, or leaning back with my hands behind my head. And it’s as good as it can get for my wrists: complete abstinence.

(One little note: I’ve turned off key repeat for k and space in X Windows, so that I can just leave my foot down instead of quickly tapping, by inserting /usr/bin/xset -r 45; /usr/bin/xset -r 65 into my .xsession. I found those numbers by looking at the keycode field in xev.)

Backwards-compatibility testing for Subversion 1.5

The Subversion team has been hard at work on version 1.5 for over a year. Subversion 1.5 contains several large features with both client and server components; the most obvious are merge tracking and sparse checkouts. It is important that we ensure that we stick to Subversion’s backwards compatibility guidelines: for example, we need to make sure that:

  • the server code to simulate svn co -N from old clients works
  • the client code to ignore extra server output from old servers with svn co --depth=files works.

We can test old-client/new-server behavior over ra_svn like so (testing the DAV ra methods is a little more involved):

1.4.x-checkout$ svnserve-trunk -d -r `pwd`/subversion/tests/cmdline &
1.4.x-checkout$ make svncheck

Currently, the 1.4.x branch code passes these tests against the current trunk over all RA backends!

The situation isn’t quite as rosy for new-client/old-server; that’s because the current trunk tests expect the server they are run against to support all trunk features. To make it work at all, you need to explicitly tell the test suite that the server is 1.4.x (among other things, this makes the test suite svnadmin create repositories with the --pre-1.5-compatible option):

trunk-checkout$ svnserve-1.4.x -d -r `pwd`/subversion/tests/cmdline &
trunk-checkout$ make svncheck SERVER_MINOR_VERSION=4

Unfortunately these tests don’t yet all pass; there may be some actual compatibility bugs hidden there, but they also expect features that require a trunk server to work. My next plan for working on Subversion (which is now part of my day job!) is to figure out which failing tests should just be skipped against old servers and tweak the test list to skip them; I’ve already done that for the commit tests which use the new –with-revprop option to commit commands; in the test_list at the bottom, you can see a bunch of lines like:

SkipUnless(mkdir_with_revprop, server_has_revprop_commit),

These use the value of the server minor version specified on the command line to skip tests that shouldn’t work with old servers.

The currently failing tests are:

FAIL: 7: commit with conflicting dirprops
FAIL: 16: test sensitive log on a single revision
FAIL: 18: test 'svn log -g' on a non-branching revision
FAIL: 45: target inherits mergeinfo from nearest ancestor
FAIL: 48: merge works when target has copied children
FAIL: 50: merge to path with switched children
FAIL: 52: mergeinfo can have empty rev ranges
FAIL: 66: merge -rold(before rename):head renamed dir
FAIL: 10: test 'svn blame -g'
FAIL: 11: don't look for merged files out of range
FAIL: 13: blame target not in HEAD
FAIL: 10: test authz for aliases
FAIL: 13: authz issue #2712
FAIL: 4: update depth-empty wc shouldn't receive file mod
FAIL: 5: update depth-immediates wc gets top file mod only
FAIL: 10: bring a dir into a depth-immediates working copy
FAIL: 12: depth-empty working copy ignores a deletion
FAIL: 13: depth-immediates working copy ignores a deletion
FAIL: 15: gradually update an empty wc to depth=infinity
FAIL: 19: diff at various depths in non-infinity wc
FAIL: 21: depth-1 working copy receives a new directory
FAIL: 23: upgrade a depth=empty wc from above


It is finally over. My adviser has signed my thesis. I’ve learned a lot in the past two years in the Program Analysis Group, about program analysis, testing, the JVM, academic writing, frustration, and elation. I have a much stronger understanding of the concepts behind my project, and ideas for better alternatives. I’m disappointed that the culmination of my thesis project is not an excellent tool which I can recommend for wide use, but I do not regret the work I have done. Here is the MEng Thesis Final Draft; and here is amock itself.

Today I complete my five years at MIT; tomorrow I fly out west. After a week at Burning Man and a week renovating my new warehouse living space, I will start at Google in the build tools group, working full time on Subversion. After a year of needing to treat Subversion as a guilty distraction from research, I am incredibly excited about making it my full-time job.

faked out

So Fake Steve has been revealed. And the author, Dan Lyons, apparently has a blog called Floating Point. For the record, this blog has been around since May 2006, vs October 2006 for his. On the other hand, his actually contains content and probably has multiple readers.

roughly drafted

After two weeks of nonstop writing, I have a mostly-complete MEng Thesis Rough Draft! (“Mostly” refers to the fact that the experimental sections are really “proposed experiments” and not “experimental results” right now; that’s what the next month is for…)

amock presentation

It’s been a while since I’ve updated about my thesis project, amock. Fortunately, that doesn’t mean I haven’t been working on it. In fact, it’s in pretty solid shape, and I’ve been focusing on writing the thesis itself (goal: full rough draft by Friday).

I presented about amock at group meeting today; here are the amock PAG talk.

underlining all links

A recent trend in web design is to turn off underlining for links, relying purely on the color changes to tip off readers that they’re links. While I agree that this often makes for a more attractive page, many designers end up choosing colors for link text that are difficult for colorblind folks like myself to tell apart from the surrounding text.

After being frustrated by this for years, I finally came up with a solution: use a user style sheet to keep underlines on for all links.

First, install the Firefox extension Stylish. (There are ways to use user style sheets without Stylish on Firefox, and on other browsers, but Stylish gives a nice user interface for managing them.) Restart; there’ll be a new icon in the status bar at the bottom of your browser window. Select “Manage Styles…” from the menu that pops up from it, and write a new style containing

:link, :visited { text-decoration: underline ! important }

Reload the page, and voila: all links are underlined!

(While all I did was install an extension somebody else wrote and copy-and-paste a line from this list of useful user styles, I was surprised to not find anything about this when Googling various phrases involving “colorblind”, “color blind”, “colourblind”, “colour blind”, etc. Hopefully this post can help future color-deficient folks solve this problem.)