I drove back from Westport today. Somehow traffic seemed to be more of a problem than I recall from previous years. It took 4 hours. Thankfully, I had a good friend to talk to during the long slow trip.

I took my bicycle back with me, and I think it may truly be finished and ready to ride … just as the streets get salted and snowy and generally less than ideal for riding a beautiful vintage steel-frame road bike with unusual sentimental value.


My parents picked me up from my apartment, and we drove North towards Swampscott in a rainy mist. In the mist, every streetlamp cast a sodium vapor cone down to the street below.

Outside the city the mist grew heavier, until the glow permeated the low sky. The whole highway seemed a soundstage, its gray sheet steel roof cleverly concealed.

Some things are more beautiful in dark and rain.

A vision

Imagine a person, looking ordinary and dressed in street clothes, seated in front of a glossy black glass table. Perhaps it is a woman. She sits calmly, waiting to have a conversation with you. You sit down as well, and she places her hands on the table in front of her.

The table reacts, lighting up with the laser chromatic glow of a multi-touch surface. Ten circular outlines track the contact points of her fingers. Her fingertips slide across the teflon surface in a complex pattern, tracing a deliberate course through constantly evolving local color fields, and from a speaker below the surface you hear “Hey! How’ve you been!”. She smiles.

What I am imagining is a parametric human speech synthesizer. Most people don’t need help speaking, but for those with dysphonia the best we currently offer are text-based synthesizers controlled by a computer keyboard. That’s fine for basic communication, but it will never really sound natural. True speech is brimming with inflections and accents, created by endless subtle variations in pitch, timbre, volume, and timing. Written language alone does not approach the bandwidth of actual speech, not even using every character in the phonetic alphabet. It is only with the latest, or perhaps the next, generation of multi-touch surfaces that we finally have the ability to capture over a dozen different simultaneous degrees of freedom, which I think might be enough for decent speech control.

It turns out there’s a word for this class of device. What I’m describing could be called a 21st century Voder. The Voder was developed in the 1930s by Bell Labs, and had 15 keys, a wrist pad, and a foot pedal. With modern voice models and predictive text AI, we should be able to do far better.

I don’t expect a device of this sort to be built any time soon, although the fundamentals are pretty much in place. The market is too small, the equipment too expensive, and the learning curve too steep.

That’s too bad, because it would be totally sweet to watch in action.


I spent the weekend at Voicelab’s fall retreat, in sight of the ocean in Plymouth. Compared to some, this retreat was all business. We had four rehearsals in less than 48 hours, getting in shape for fall concert.

Our last rehearsal was spent huddled in a circle, standing on a large flat boulder just at the edge of the waves. It was a wonderful place.


I’ve been remiss in not mentioning that Voicelab will have our annual Fall/Winter Concert on Sunday, December 6th, at 4 PM, in Dudley House (technically Lehman Hall). Depending on the weather, we’ll also be singing on Friday, December 4th at 6 PM at Faneuil Hall.

This is an excellent opportunity to hear singing, if you enjoy that sort of thing.

The 500

A few years ago I joined a website called Movielens where you can rate movies on a 5 star scale. Today I rated my 500th movie. That’s about all the movies I’ve seen in my life, averaging 25 movies a year since my earliest movie memory (Tron).

The point of Movielens is to tell you what movies you should see, based on your ratings of the ones you’ve already seen. It works by comparing your ratings to those of the ~70,000 other users and identifying patterns. By determining which movies are liked by the same groups of people, and which other people have similar taste to you, the system can recommend movies that those people liked and you haven’t seen.

The site is a joy to use, free of charge and free of advertising. That’s because it’s actually operated by a statistical inference lab at the University of Minnesota, which uses it as a testbed for psychological algorithms research. I’m more than happy to help them out.

Admittedly, the results are a little bit strange. For example, the top 5 recommendations for me right now are:

  1. Katsastus, a Finnish comedy from 1988
  2. RKO 281, a drama about the making of Citizen Kane (1999)
  3. Dear Zachary: A Letter to a Son About His Father, an emotional documentary (2008)
  4. Captains Courageous, a classic adventure movie from 1937
  5. Baby Face,a drama from 1933

All five movies have between 25 and 50 ratings. All five are, at the moment, little-known niche films. That means that those few people who saw them likely had to actively seek them out, and did so because they already liked something they knew about the film. Thus it is no surprise that they rated those movies highly, causing them to show up as recommendations for me. My top 100 results are full of foreign films, obscure documentaries, and black and white classics, most rated by only a few other people. I think this represents a weakness in the Movielens algorithm.

On the other hand, I tend to like foreign films and obscure documentaries, and I believe classics are usually classic for a reason. Maybe Movielens just has me all figured out.


Weblogs are hard. Sometimes nothing is happening, and there’s nothing to write. Sometimes everything is happening, and there’s no time to write!

In the last four days I’ve been fleeced by my car dealership on a brake job, seen a Star Trek movie, signed up for a conference in Utah, performed in a concert at Connecticut College, visited my parents, fixed my laptop power cord, repaired my gloves, raked leaves, attended a professional recital by an operatic soprano… and probably some other things too.

I’d love to tell you more, but I have a meeting less than nine hours.


On Tuesday evening I went to a “mixer” sponsored by the MIT Science Policy Initiative and the Technology and Policy Program. MIT, unsurprisingly, has a proliferation of programs, societies, and clubs on the topic of science and politics, and this was an attempt to get some of them together. A few friends of mine from Harvard decided they could use a reminder that there are some other people in this city who care about this stuff too, and so I went as a representative of the Harvard Society of Scientists.

It was a classic mixer, with attendant awkward introductions and searching for common ground, but overall a good start. There was a lot of enthusiasm in the room for making a real effort to influence US policy, especially on classic science policy topics like energy, the environment, and research funding.

I suspect that what we are doing here is nothing really new. Scientists have been giving advice to politicians for as long as there have been scientists. This is the next generation coming on-line.


I just wrote my first application for a conference. I’ve been making very good progress over the last week, just in time for the submission deadline for ISMRM 2010 (in May!). If accepted, I might get to put up a poster. Basically, it’s just like a high school science fair, except that the posters are flat and you’re in Stockholm.

It does make me feel like a scientist, though.

Old bugs fixed

In the process of testing Cortado on old operating systems, we discovered that using a recent compiler produced bytecode that wouldn’t run on Sun JDK 1.1. Instead, we got IllegalMonitorState exceptions in an infinite loop.

A little bit of searching made it clear that we weren’t the only ones who’d experienced this problem. There were reports going back to 2001 that Sun had introduced some sort of bug in their compiler in version 1.4. We verified that going back to an old compiler produced code that worked for us, again.

Today Greg Maxwell constructed a minimal test case and printed out the disassembled bytecode produced with old and new compilers. One difference stood out: the new compiler introduced a circular exception handler at the end of a synchronized block. I looked around, and sure enough, this behavior drew complaints when it first appeared over eight years ago.

Rather than attempt to convince the compiler authors that their code has a logical fallacy, or somehow fix ten-year-old versions of closed-source software, we instead decided to add a workaround into ProGuard, a bytecode post-processor that we are already using to shrink Cortado by 30% for faster downloads.

There’s an interesting question here as to what, exactly, the bug is. Is it a code generation bug, in which the compiler produces bytecode that will not run correctly on the Java 1.1 target? Or is it a JVM bug, exposed by newer compilers that make use of previously untested edge cases? This is a case of Software Development Relativity: the number of bugs is conserved, but their precise location depends on your reference frame.

Anyway, I think this is a nice short story about the power of an open development model. We found a bug somewhere in a complex system, and wound up putting a fix in the component whose maintainers, we hope, will be most receptive to it. When one avenue is cut off, open source finds another route.