October 2008

Alright, Internet, listen up!

Modal dialog boxes are bad UI. We knew that they were bad UI twenty years ago.

Do we really need to re-implement modal dialog boxes, inside web pages, in Javascript, in order to re-discover this fact?

I’m not going to name names. You know who you are. You’re on my list!

This blog post is a hands-on experiment. If you have Firefox 3, before you read any further, please go to this page and try out the demo.

(Unfortunately, the demo will only work in Firefox 3.0 and later, because it uses some cutting-edge features of the Canvas object that aren’t supported in Internet Explorer, Safari, or older versions of Firefox. I believe strongly in presenting web content in a cross-browser compatible way, but sometimes for feature demos, requiring Firefox is unavoidable. This is Mozilla labs, after all.)

Anyway, the demo presented two different styles of pop-up menus and asked you to repeatedly select the same menu item.

Which menu style made the task easier? Why do you think that was?


Several computer science students at the University of Toronto and Seneca have made it their class project for this semester to port Ubiquity to Thunderbird and make it run there. Thanks to their efforts so far, we now have the basic functionality operational, as you can see in the screenshot below:

Don’t get too excited yet. This is still in the early prototype phase. Currently the hotkey works, the parser works, the previews mostly work, and a few commands work when executed, but most don’t. The students have to turn in their project at the end of the 2008 fall semester, so if all goes well perhaps we’ll have a usable Thunderbird extension sometime in December.

But it’s not to early to start thinking about the possibilities, such as:

  • Using existing ubiquity commands, like map and translate and whatever your favorite third-party commands are, while reading and writing emails in Thunderbird.
  • Cross-application functionality: email commands activated from Firefox could execute using Thunderbird, while web-searching and social-networking commands used from Thunderbird could execute using Firefox.
  • Sharing of data sources for argument suggestions: for example, the “email” command could use your Thunderbird contact list to autocomplete the recipient’s address, no matter where the command is used from.
  • Brand-new Ubiquity commands for searching and sorting through your email, composing, redirecting, creating filters, and so on.
  • Allowing everybody in the world to create and share email commands, encouraging massive innovation to discover new ways of coping with the Never-Ending Email Flood.

I think ultimately we’re going to have a single cross-compatible XPI that can be installed both on Firefox and on Thunderbird, but for now we’ve made a temporary fork and are doing Ubiq-Tbird development in a separate repository at http://hg.toolness.com/ubiquity-thunderbird. If you want to get the source code and set it up to run in your copy of Thunderbird, a page of very rough documentation is here on the wiki.

Once Ubiquity is fully operational in Thunderbird, what would you like to be able to do with it? Do you have any ideas for commands that you’d especially like to have to help keep your inbox under control? Leave a comment and talk about what you’d like to see!

You can download the release candidate for Ubiquity 0.1.2 here:


Please give it a try and, if you find any serious bugs you think ought to be fixed before we release it for real, send an email to ubiquity-core@googlegroups.com.

Among other things, 0.1.2 contains a preliminary version of the parser-localization API we discussed in my previous post. I took the advice of my (overwhelmingly helpful!) commenters and, instead of trying to factor out some kind of declarative grammar description, I left a space for a quite open-ended function that takes the input, the list of known verbs, and the list of known nouns, and returns a list of partially-parsed sentences. I think it should be general enough to allow for the full range of weirdness that is present in natural languages, while factoring out the all the common-across-languages behavior that the parser core should be handling for you.

The API is described in detail in the parser localization API tutorial I wrote. If you’re at all interested, please give it a read and let me know how you think it could be improved or clarified. (If you’re very interested, you might even try using it to write a parser plugin; if you want to try, I’ll be happy to answer any questions you have.)

P.S. Here’s the complete release notes for 0.1.2.

P.P.S. We’ve been churning through release candidates rapidly over the past couple of days. We are now up to RC4. That link is the one you should use if you want to try out the latest and greatest.

Back in July, I was at the Mozilla summit in British Columbia, meeting with Mozillanoids from all over the world. The first question is always, “So what are you working on?”. When I explained the idea of Ubiquity to people, the most common reaction was “That’s cool, but it’s so… English-centric. How are you going to localize it?”