I interned with the Mozilla Labs team as a software engineer for the summer of 2009. It was a thoroughly enjoyable experience that I will never forget. The technical experience I gained, along with the fascinating people I met, made for one of the most fulfilling summers I’ve had. Here is a brief overview of the work I did within the Mozilla Labs team, along with the opportunities and challenges it presented to me.
Within Mozilla Labs, I worked primarily on the Ubiquity project. Ubiquity is a natural-language command line interface to the web. Ubiquity allows the user to gain access to web services and perform tasks by entering commands in a very intuitive manner. In its current form, Ubiquity is a Firefox Add-on. The user can input a command into Ubiquity using natural-language, and Ubiquity will give suggestions on what the user is trying to do based on their input. The user can then pick the suggestion which matches the action they are intending to perform, and Ubiquity will execute that action for them.
Ubiquity is worked on by a small team of Mozilla employees and community contributors. We iterate through new versions of the product quickly, and the team is always full of enthusiasm towards what’s next. When I started my internship I was immediately given access to commit code to the Ubiquity repository, and I even got to fix a bug on my first day! Over the course of the summer I added several new features to Ubiquity, while also improving existing features and leading discussions on future additions.
Perhaps the most challenging addition to Ubiquity that I worked on was asynchronous noun types. In order for Ubiquity to provide the user with accurate suggested commands based on their input, it’s necessary for Ubiquity to have some mechanism for understanding what kind of “thing” a users input might represent. It could be a street address, type of food, name of an open tab, time of the day, etc. These are known as noun types.
To figure out what kind of noun type an input may be, Ubiquity runs a series of checks against all the possible noun types and returns the results. Some of these checks involve making queries to web services, like checking Google maps to see if an input may be a street address. Since some of these checks may take several seconds to return, we don’t want Ubiquity to have to wait for them to return before giving some suggestions. Therefore, I made the noun type checking mechanism capable of working asynchronously, such that Ubiquity will display suggestions based on the noun type classifications it has verified so far.
Then as new results come in, the suggested commands are updated asynchronously. It was challenging to implement this in a way such that it could be easily utilized by 3rd party developers who write their own noun types. I went through several different implementation structures before creating the one which is currently used in Ubiquity. The other Ubiquity developers were great for bouncing ideas off of about both high level design decisions as well as implementation details.
Ubiquity was an exciting and intellectually stimulating project to work on. I am grateful that Mozilla provided me with this outstanding summer internship opportunity.

