Ubiquity System Overview

9 10 2008

I have vaguely mapped out what I believe how Ubiquity works and interacts with all the various pieces. I may make some updates to this once I determine more information from Jono:

Ubiquity System
————————
There are 2 types of commands:
Built-in commands
User-created/Third party commands

Built in commands are hardcoded in js files and are stored along with the extension

User created commands are stored on web servers remotely.
These user created commands along with their source code are stored in a database that resides on the local hard drive within the Firefox profile. Should the user wish to add new commands, he/she visits a page that links to a javascript file specifically with the rel attribute set to “commands”. i.e. <link rel=”commands” src=”my_js_file” /> Ubiquity will search the webpage for this tag and asks if the user would like to subscribe and if they do so, it will add a create a new entry into the database, storing the URI, and source code. The commands are id’ed by the URI and subscribed commands never get deleted until manually told to do so.

Ubiquity goes through all the annotations and checks all the URIs for the tag.. it then attempts to update the source code in the database if needed. Commands are then loaded into a Command Manager object and using a Factory, the commands are created from the source code.

Thus if you close the web browser and reload, the commands still exist because of the annotations to the URI and source code stored in the database.
In terms of security, no security has yet been implemented so command source code has access to all areas of the web browser. There have been talks regarding a trust system but those are at a preliminary stage.





It works

9 10 2008

We have achieved our 2 week iteration goal of making Ubiquity run in Thunderbird with limited functionality.

Atul set up a Hg repository that we are using. So you can checkout the code and try it http://hg.toolness.com/ubiquity-thunderbird/

Usable commands: calc, translate, zoom, word-count

The steps that we took to get to this point:
1) Change manifest/install files to make Thunderbird see it as a correct extension.
2) Comment or change code that uses browser specific API (Preferences, Annotation Service) and objects like tabs, bookmarks.
3) Make commands statically instead of dymanically loaded for now cause dynamic loading depends on Annotation Service which is not available in Thunderbird.

To do and remaining bugs:
1) Provide Annotation Service replacement so that command feeds work.
2) Work on browser integration to let open web pages in default browser.
3) When popup is closed it can leave a trail on the UI. Might be an alpha Tbird bug.
4) Provide access to Tbird information (emails, contacts) to the commands.
5) Make it use the same base code as Firefox Ubiquity with only different files where it is necessary.
6) Write some Tbird specific commands.





Meeting with Bryan and Jono

17 09 2008

Thanks to Bryan and Jono for the meeting.

Here is the summary that I’ve written down:

  • Thunderbird is getting new search-centric UI soon. It’ll also have combined inbox and other folders from all mail accounts.
  • Tom Brown (TJ?) from Seneca wants to work on Tbird Ubiquity too.
  • We will be using Tbird trunk
  • Gloda – global sql database. API allows chaining of functions. Need to learn it and use calls to gloda for Tbird Ubiquity.
  • Tbird Ubiquity Usecases: 1) normalized searching (e.g. “find all messages from Bryan”) 2) convert message to calendar appointment 3) autotagging by plugin to gloda (data mining) – addresses, urls, images.
  • Need to get sidebar for gloda. Also new toolbar extention using gloda. Get some tbird addons as examples.
  • developer.mozilla.org should have windows Tbird build manual.
  • First ubiquity command idea: “write to person” with autocomplete of e-mails.
  • Need to figure how to split tbird and firefox commands in commandutils.js.
  • Will need to figure interprocess communication between Firefox and Tbird Ubiquity.







Follow

Get every new post delivered to your Inbox.