Last night was the monthly Mozilla Labs open house for July. Atul, Aza and I gave a presentation about our ongoing project, working title Ubiquity.
What is Ubiquity? It’s a Firefox extension which gives you an easy way to create, share, and use commands — tiny snippets of Javascript that do cool stuff with the Web. Commands can act on web content that you select with a mouse, or on information detected in a page in a microformat, or on arguments that you type in. A command that you create can be shared with others simply by giving them the URL to a Javascript file. Commands will be exposed in multiple ways: You’ll be able to choose a command from the context-menu (the one that pops up when you right-click on web content), but also, for more involved use-cases, there will be a linguistic UI that lets you type what you want to do. We’re still in the very early stage of development, but those are our plans, in a nutshell. Atul gives a much better explanation than I can.
Because I’m thinking of Ubiquity in terms of a natural language UI, I’m calling the commands “verbs” and the content that verbs act upon “nouns”. More about this in my next post.
At our presentation last night, we showed off several useful verbs that we’ve already implemented. Ubiquity can take content you’ve selected on a page and email it to someone, pictures and formatting included. It can translate text to another language, right in the page; it can define selected words for you, map an address (and insert the resulting map into the page for you, if you like), google for things or look for them in other search engines, etc. Obviously, all of this is stuff that you can already do on the web thanks to various web applications. But normally, you would have to do an annoying dance: Select stuff on the page you’re on, copy it, open a new tab, type in a URL, find the appropriate input box on that page, paste into it, and hit a “go” button. In some use-cases you’d then have to copy the results, go back to your original page, and paste them in. Ubiquity lets you do all of this in one step and without leaving the page you’re on.
It’s no coincidence that these example commands are similar to ones we had (or wanted to have) in Enso. But Ubiquity is going to be way better than Enso. It is turning out to be many, many times faster and easier to develop a command system on the Mozilla platform than it was to do it on the Win32 platform. Plus this way we get cross-operating-system-ness for free. And the fact that it’s tightly browser-integrated and web-centric lets it do cool things that Enso just couldn’t do.
But the biggest win is that, while creating new Enso commands and publishing them was theoretically possible, it was rather difficult and obscure. In contrast, Ubiquity makes it super-duper easy to create and share verbs. We demonstrated both parts of this last night: how to create a new command with a few lines of Javascript, and how a third-party command can be added to Ubiquity simply by surfing to the page with the Javscript on it and bookmarking the page with the “ubiquity” tag.
If you are someone who thinks about web security at all, the idea of giving people arbitrary javascript to execute should be setting off alarm bells in your head right about now. There are, indeed, huge scary security issues that we have to deal with before Ubiquity can become a usable project. Atul talked about these last night, and his ideas for dealing with them; he has a very thoughtful blog post on the subject.
Ubiquity is getting some good feedback already. It’s even been noticed by ReadWriteWeb who wrote an enthusiastic article about it. (I notice happily that the article picks up on my “verb” terminology.)
We’re getting ready to give another presentation about Ubiquity to a much larger audience at the Mozilla summit next week. But if you want to try it out, you don’t have to wait until then. You can download it right now. You just have to have hg (aka Mercurial) installed:
hg clone http://hg.toolness.com/ubiquity-firefox
In an upcoming post, I’ll talk about the behavior I’ve been working on with Ubiquity’s linguistic UI, and compare it to the list of requirements I laid out last time. I’ll explain how it works in the places where it measures up to the requirements, and ask for your ideas for the places where it still falls short. See you then!
*****
P.S. I really dislike the name Ubiquity! (Even though I think I’m the one who suggested it in the first place…) It’s too Latinate and abstract and polysyllabic, like an S.A.T. word. I hope we can replace it with a simpler, more fun name for production. Because the idea of verbs is so central to the project, yesterday somebody proposed just calling it “verbs”. As in, “Hey dude, I just made a new Verb, it’s on my page, go install Mozilla Verbs so you can try it out.” I like it. But I’m open to other suggestions.
July 25, 2008 at 9:05 pm
Very, very interesting stuff. I’ve long been thinking to build a firefox plugin that would allow me to run Javascript commands in a loaded page, which gives a lot of opportunities to perform interesting things. I was thinking of course from the perspective of a developer – but Ubiquity definitely has potential for widespread use.
I’m very curios now to see how it turns out.
For a name – how about browser speak?
July 25, 2008 at 11:45 pm
Hi Jono,
I’ve been thinking a little more about Ubiquity. Some of these thoughts are probably completely obvious to you, but just in case!
—– Adding verb definitions
The tagging function is great.
Might it also be worth having all Ubiquity verbs on the web formatted with a particular comment that Ubiquity can understand, a-la-Greasemonkey? So, all the user has to do is bookmark the page – Ubiquity could understand automatically that the page it’s looking at is a script, and file / tag it appropriately.
Going one step further, why not just click on the link, and have that added to the repository? There would be no need for a yes/no dialog box – it can be added (or not) with respect to Atul’s idea of social trust, and visual confirmation can come from a short throbber, and then a fading overlay (e.g. Growl) to confirm completion.
—– Misspellings
As it gets more popular (as I hope it would!) would you integrate spelling corrections? I’m trying to imagine my mum using this, and she’s not the best typist.
—– Configuring undefined verbs
Ubiquity would need to understand how to interact with each web app that it might need to, e.g. Google Maps, Yahoo Search and so on. However, there will always be nichey ones it might not be able to understand, e.g. Powerset. The hard part is then how to get the user to install a script that might be on the Powerset site, which would include the functions they need. As you mentioned last night, they could type “use powerset” and Ubiquity would understand that.
So, how would Ubiquity get the “powerset” definition?
One option: Mozilla maintains a master list of verb -> URL mappings, so when an unknown verb is used, Ubiquity can query the list and download the correct verb definition. The problem here is that multiple people could submit definitions for the same verb, and it’s difficult to know which one is canonical. Second, I imagine people would abuse misspellings (e.g. “use googel” might become a valid definition if someone submits it.)
Another option: They could go to the relevant website and try to find the relevant verb definition js file – however, that’s kinda manual.
The final option: don’t allow custom verb definitions to be easily available inside Ubiquity. However, that seems kind of mean 🙂
I don’t have great solution for this one – just something to think about as it (hopefully) starts to get adopted.
Shahid
July 27, 2008 at 8:22 am
Looks cool. I was just wondering, what happens to earlier projects planned ? Like The coop. Don’t see much progress there.
July 28, 2008 at 10:20 am
[…] had a small demo at the third edition of Labs Night (which was held on Thursday, Jono gives a more detailed account). As we get closer to unrolling both the Weave web client and the OAuth API, I’m looking to […]
August 3, 2008 at 6:43 am
Mozilla Verbs is a perfect name, actually. Goes right alongside Google Gears!
August 17, 2008 at 12:36 am
+1 for “Mozilla Verbs”
November 18, 2008 at 4:53 am
Mozilla Verbs is probably better than Ubiquity.
Ubiquity is conceptually similar to QuickSilver on Mac (I’ve never used it myself, I use DoMercury, similar tool but for Windows) May be some name association with QS ? (I think it would increase the geek quotient)
February 6, 2009 at 5:46 pm
perhaps a nice presentation to get people’s attention?????
and is it integreted in the browser enviroment, like a layer, perhaps you know autocad from autodesk, you have different layers for architect, electricity etc. etc. end all together you have the house ore bilding end you could render it……etc. etc.
and is the system openarchitectual, so a video coouldd be a add-on form any kind of streaming?????
April 1, 2010 at 10:41 pm
[…] had a small demo at the third edition of Labs Night (which was held on Thursday, Jono gives a more detailed account). As we get closer to unrolling both the Weave web client and the OAuth API, I’m looking to […]