Mozilla Labs Ubiquity : mashup while you browse


Recommended Posts

http://labs.mozilla.com/2008/08/introducing-ubiquity/

Ubiquity is a Firefox extension with a similar feel to Launchy or Executor - the "type and find" desktop applications, but it runs within the browser and is more of social networking enhancement than a simple launcher.

You can highlight a locality you have typed in an email, type "map" and you will have a map to paste in your message.

You can translate on-page; search amazon, google, wikipedia, yahoo, youtube, etc.; digg and twitter; lookup and insert yelp review; get the weather; syntax highlight any code you find; and a lot more.

Concept seems to be very useful but i really doubt users will find it easy to use, or else it will became one more geeky stuff :)

That was my worry as well to begin with, but using it I realized that it was extremely intuitive so I'm not gonna write it off as something for "geeks only" just yet.

This is brilliant. The basic functions should be easy enough for even non-geeky users "email to contact", looking up word definitions, weather info etc. work very nicely. As a Gmail addict I have been in love with the "email to" command since the beginning.

Edited by macel
what a geek may think is intuitive may well not be simply because of learned behaviour.

The thing is, there's only so much you can before you have to start breaking certain user interface traditions in order to innovate. It doesn't seem to hard though, and will indeed feel more intuitive to do once they do it a few times (well, as in, once they get used to it, they'll just do it naturally instead of making it seem like a chore).

This is the code for my gmail ubiquity command. To install it just ubiquity "command-editor" then copy and paste the code into the text box on the page that appears and it should just work!

Just typing "gmail" will show you the 5 newest unread emails in your inbox.

If you then type a number up to 20 after gmail it will show you the 5 unread emails after that e.g. 6 will show you emails 6-11.

You can also look at emails with different labels e.g. "label work" or filter results by a contact or email e.g. "email [email protected]".

Clicking on the subject line of the email previews will take you that email.

pressing enter will take you to your inbox or whatever label you are currently looking at.

Note: You have to be logged into gmail for this to work, but you don't need to be on the gmail website.

noun_email_type = new CmdUtils.NounType("type",
  ["unread", "inbox", "starred", "chats", "sent", "drafts", "all", "spam", "trash"]);

CmdUtils.CreateCommand({
  name: "gmail",
  contributors: "Ross Brown",
  description: "Lets you look at your gmail",
  help: "Lets you look at new emails in your gmail account using the gmail atom feed.",
  takes: {StartNumber: noun_arb_text},
  modifiers: {label: noun_arb_text ,type: noun_email_type ,contact: noun_type_contact ,email: noun_arb_text},

  preview: function(pblock, mn, mods) {
    pblock.innerHTML = "Fetching mail";
    if(mods.label.text!=null && mods.label.text!=undefined) {
      var url = "http://mail.google.com/mail/feed/atom/" + mods.label.text;
    } else if(mods.type.text!=null && mods.type.text!=undefined) {
      var url = "http://mail.google.com/mail/feed/atom/" + mods.type.text;
    } else {
      var url = "http://mail.google.com/mail/feed/atom/";
    }

    var EmailSearch = false;
    if(mods.contact.text!=null && mods.contact.text!=undefined) {
      var SearchEmail = mods.contact.text;
      EmailSearch = true;
    } else if(mods.email.text!=null && mods.email.text!=undefined) {
      var SearchEmail = mods.email.text;
      EmailSearch = true;
    }

    jQuery.ajax({
      url: url,
      type: "GET",
      dataType: "xml",
      timeout: 1000,
      error: function(){
         pblock.innerHTML = "Error: Could not get mail";
      },
      success: function(xml){
          var emailNo = 1;
          var intMn = parseInt(mn.text);
          if (isNaN(intMn)) {
            var emailMin = 1;
          } else {
            var emailMin = intMn;
          }
          var emailMax = emailMin + 5;

          pblock.innerHTML = "<style> .title {font-size: 90%;} .subject {font-size: 75%;} .summary {font-size: 60%; font-style: italic;} .info {font-size: 60%;}</style>";

          var searchTitle = jQuery(xml).find('tagline').text();
          if(EmailSearch) {searchTitle += " From: " + SearchEmail;}

          pblock.innerHTML += "<div class='title'>" + searchTitle + " (Showing " + emailMin + "-" + (emailMax-1) + " of " + jQuery(xml).find('fullcount').text() + " messages)</div>";

          jQuery(xml).find('entry').each(function(){
            email = jQuery(this).find('email').text();
            if(EmailSearch!=true || email.indexOf(SearchEmail)!=-1) {
              if(emailMin <= emailNo && emailNo < emailMax) {
                subject = jQuery(this).find('title').text();
                link = jQuery(this).find('link').attr('href');
                name = jQuery(this).find('name').text();
                summary = jQuery(this).find('summary').text();
                modified = jQuery(this).find('modified').text();
                modified = modified.replace("T", " ");
                modified = modified.replace("Z", "");
                modified = modified.replace(/-/g, "/");

                pblock.innerHTML += "<p><a href='" + link + "'><div class='subject'>" + subject + "</div>";
                //For some reason the </a> tag acts like <p> here//ail
                pblock.innerHTML += "<div class='info'>From: " + name + " (<a href='mailto:" + email + "'>" + email + ") - " + modified + "</div>";
                pblock.innerHTML += "<div class='summary'>" + summary + "</div>";
                pblock.innerHTML += "</p>";
              }
              emailNo++;
            }
          });
      }
    });
  },
  execute: function(mn, mods) {
    if(mods.label.text!=null && mods.label.text!=undefined && mods.label.text!="") {
      Utils.openUrlInBrowser("http://mail.google.com/mail/#label/" + mods.label.text);
    } else if(mods.type.text!=null && mods.type.text!=undefined) {
      Utils.openUrlInBrowser("http://mail.google.com/mail/#" + mods.type.text);
    } else {
      Utils.openUrlInBrowser("http://mail.google.com/mail/");
    }
  }
});

Maybe a toolbar button / drop down menu with a list of common tasks would make it more user friendly?

If you ubiquity "command-list" or navigate to "chrome://ubiquity/content/cmdlist.html" there is a list of all the available commands you have for ubiquity.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • "just $100 per TB"? Just? Are we trying to make this seem like the new normal? Kinda weird to make it sound like that is not a ridiculously expensive asking price.
    • The reviews you refer to mean nothing. Where there is no journalism there is no reason to call the gaming media's opinion pieces "reviews". For GP games there is indeed a metric for success - increasing subscriptions. Which turns in revenue. The only circumstance in which subs do not rise when great is being released is a Game Pass system where the company is close to fully saturated with customers in a subscription. However, in that case as the theory goes you spend aplenty in all kind of games - from shady live service cash cows and customer offending agitprop crap in purple colours to robust and entertaining single player games. And keep a solid level of profitability. Ignoring the simply innocuous but mid games MGS has released primarily of the second kind.
    • Report: Microsoft to use AWS to help GitHub deal with a major surge in demand by Pradeep Viswanathan Thanks to the surge of coding AI agents, GitHub's usage has skyrocketed over the past 12 months. To meet this demand, GitHub started with a plan in October 2025 to increase capacity by 10x. However, by early this year, the company realized that it needed 30x scale. This rapid growth has caused severe strain on the platform's reliability, resulting in several small outages over the past few months. In April, GitHub published a long blog post explaining the steps it is taking to resolve these reliability issues. In the post, the company also confirmed that it is working toward a multi-cloud architecture for better resilience. Today, Business Insider reported that GitHub is turning to Amazon Web Services to help deal with a major surge in AI-driven coding activity. It is important to note that GitHub is still in the process of moving completely to the Azure cloud. The current plan is to move the platform fully to Azure by 2027 so that it can scale better as per developer demand. Therefore, the current decision to utilize AWS might be part of a short-term plan to meet immediate demand. A Microsoft spokesperson confirmed that GitHub is using multiple cloud providers with the following statement: For Microsoft, the decision highlights the operational pressure behind the AI boom. GitHub has to stay reliable for developers at a time when rivals such as Codex, Cursor, Claude Code, and other AI coding tools are gaining attention. And the decision to use AWS for computing capacity seems practical given the circumstances.
    • It's growing on me, however, your right, it make better usability sense if the tabs were bellow the address bar.
    • Qwen 3.6 is better value per dollar, and you can run it locally for free.
  • Recent Achievements

    • Collaborator
      vjlex earned a badge
      Collaborator
    • Reacting Well
      Dys Topia earned a badge
      Reacting Well
    • Conversation Starter
      NovaEdgeX earned a badge
      Conversation Starter
    • One Year In
      Console General earned a badge
      One Year In
    • Week One Done
      Twozo Technologies earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      517
    2. 2
      +Edouard
      182
    3. 3
      PsYcHoKiLLa
      106
    4. 4
      Steven P.
      88
    5. 5
      ATLien_0
      68
  • Tell a friend

    Love Neowin? Tell a friend!