Archive for the ‘Firefox’ Category

Ubiquity Tutorial: Turn Bookmarklets Into Commands

Thursday, October 16th, 2008

Bookmarklets are clickable actions (technically a link containing some Javascript) that can be added to the bookmarks bar of your browser. They’re a good way of getting control of the web back into users hands, by allowing them to add whatever new functionality they want to the websites they visit.

The main problem with bookmarklets is that they don’t provide a scalable solution for accessing their functionality. You can only have so many buttons on the toolbar before they become an unusable outbreak of pimples that clutter the browser’s interface.

With a new utility function in Ubiquity, it’s now trivial to turn any bookmarklet into a Ubiquity command. Here’s a short video tutorial on how to do it:

Here’s the source code for the command in the video. The bookmarklet comes from here.


CmdUtils.makeBookmarkletCommand({
name: "Embed Flickr Photo",
url: "javascript:(function(){if(window.page_p)window.open('http://www.elsewhere.org/mbedr/?p='+window.page_p.id);%20else%20alert('No%20Flickr%20photo%20found.');})()"
})

If you’ve got any favorite bookmarklets or great bookmarklet-based commands, put ‘em in the comments.

Firefox 3.1 New Tab Specification

Wednesday, October 15th, 2008

Taking into account all of the feedback from the New Tab concept post, we’ve been working on the behavior for the streamlined New Tab in Firefox 3.1. The esteemed Asaf Romano is leading the development charge.

Adding a new search mechanism was the most contentious issue from the original proposal, so it’s been removed from the specification. The other main pieces of feedback we got were (a) that the page needs to load super fast, and (b) that it shouldn’t be visually distracting. Summing up the requirements into four themes we get:

Polite. The page must be super-fast to load, shouldn’t be distracting, or get in your way.

Quick access. Provide a fast way to open the pages you start navigation tasks with or for reclaiming closed tabs and windows. This is especially useful for heavy mouse users.

Streamline. New tabs are opened to start a new task. If we have a good idea of what that task is (like mapping an address selected on the last tab), we should simply and streamline that task in a polite way.

No configuration. Never force the user to set up or fidget with a feature before they use it.

New Tab Screen

There are three parts to the new tab screen. A quick-access strip along the bottom, a set of contextual actions in the upper left, and a tab and window recovery link in the upper right.

New Tab For FF 3.1

Note that the graphics here schematic — the icons and exact styling isn’t right. We are looking for help here, so feel free to jump in by mocking something up, putting it on Flickr, tagging it “mozconcept”, and blogging about it. Adding a comment here wouldn’t hurt either.

Let’s take the parts one at a time.

Quick-access Strip

It may seem slightly strange the quick-access strip is along the bottom of the window. It’s there in order to be polite and not distract you if you’ve got your mind on opening a new tab and just entering a url. The bottom of the window not in your foveal vision, so if you are looking at the URL bar, you won’t notice the strip. It’s the best of both worlds: the cleanliness of a blank page, and the convenience of speed dial.

The quick-access strip is determined by frecency — the same metric that the Awesome Bar uses — with one twist. Instead of raw frecency over all sites visited, we are only considering those sites that start history “strands”. That is, we are using the most frecent sites that you actually begin browsing from. The versatile Places feature of Firefox 3 makes this possible.

The quick-access strip itself is made up of a thumbnail, title, favicon, and the last couple entries from the page’s RSS feed. It’s the last which is most interesting. Without the user ever having to know what RSS is, they still get the benefits of content syndication. For example, both Gmail and Yahoo! Mail provide RSS feeds, so you’ll automatically get to see your latest emails — without hassle or setup. Pretty good for a zero configuration interface. (Thanks to Ambient News for the inspiration for including RSS).

To enhance uncluttered-look, everything on the page is in grayscale and slightly faded. When the mouse gets near the strip, the colors fade back to being resaturated. These effects are possible by Robert O’Callahan and Vladimir Vukićević’s awesome work on SVG effects for HTML content, which is new in Firefox 3.1.

Contextual Actions

Copy-navigate-paste is a common interaction on the web that we can streamline. These patterns should sound drudgingly familiar: Select some text, open a new tab, and do a Web search/Wikipedia search; Select an address, open a new tab, go to a mapping service, paste it in; Select a single word, open a new tab, go to a dictionary, paste it in, …

These are all things we can turn into a single click with contextual actions on the New Tab page.

New Tab For FF 3.1 Actions

The actions only show up when they are apropos, based on what you selected in the previous tab. If you’ve selected an address and open a new tab, you’ll be presented with a single-click way to map it, etc.

Eventually, these contextual actions can be a modular extension point, or even be integrated from Ubiquity.

Update: A couple comments point out that there needs to be a way to change providers for the contextual actions. I forgot to include that in this write-up, but I’ll be adding it here soon.

Tab/Window Recovery

Clicking on the recover tabs and windows link slides the page over (iPhone style) to a set of thumbnails of recently closed tabs and windows.

New Tab For FF 3.1 Tab Recovery

Why is it on a separate screen? Because recovering an accidentally closed tab doesn’t happen so often that it warrants cluttering the new tab screen. The correct time to surface an affordance for quickly undoing an accidental close of a tab is just after a tab is closed, not on the new tab screen.

Slide animation between new tab screen and tab recovery screen

As an added benefit, this feature means we can remove the dialog box that asks users whether they want to restore a previous session or start anew upon Firefox start-up. That’s a question you normally don’t care about, and that has no easy way to undo a wrong choice. It’s removal, by providing a better mechanism on the new tab page, is a big win.

Contributors

The brainstorming behind this specification was a group effort. Many thanks to Asaf Romano, Alex Faaborg, Jenny Boriss, Mike Beltzner, Madhava Enros, and Vladimir Vukićević. Special thanks to Edward Lee for the AutoDial add-on, and Atul Varma for the Ambient News add-on.

Firefox & Google Chrome New Tabs

Monday, September 1st, 2008

A number of folks have pointed me to Scott McCloud’s comic debut of Google Chrome today. Scott is one of my personal sources for inspiration: I often peruse his books, looking for insights into creating awesome user experiences. I’m chuffed (and a bit jealous) that the Chrome team got to work with him.

There was a particular part of the comic that people kept referring me to: page 21, which talks about the experience for opening a new tab.

It’s interesting to see that the Chrome team has been exploring the same thoughts we’re talking about last month here in Mozilla Labs, with Contextual New-Tab Actions, Ambient News, and Auto Dial.

Here’s our video and Alex Faaborg’s mockup:

And here’s the comic page in question for Chrome:

It’s encouraging that there is such a confluence of design—although I felt an odd jolt of déjà vu the first time I read that panel. Let’s hear it for zero-configuration interfaces!

Ubiquity: Thank You

Monday, September 1st, 2008

Last Tuesday, the community working on Ubiquity was five people. Half of us had never met face-to-face, we spanned three continents, and had written a couple dozen commands. Today, our community is thousands strong with contributes in every time zone. Innovation is pouring in from all directions—we’ve had thousands of commands written for Ubiquity; commands that fundamentally enhance the functionality of the browser. In under a week, we have a roughly comparable number of Ubiquity commands as there are Firefox extensions. That’s an amazing achievement. It highlights the power of enabling innovation edges and empowering such a generative community.

Wow. Simply wow. And thank you, everyone in the community. We all deserve a giant glass of champagne.

Mozilla Labs is a shared space for exploring future user experiences of the open Web. We don’t just have community—we are the community. A number of folks have said that the Ubiquity-style interaction heralds the beginning of Web 3.0. While that’s a bit too buzz-wordy for our tastes, with over a hundred thousand users, we do have a critical mass; one that that begins to shift the web from being site-centric to being task-centric.

Update

This weekend, the community was able to push out Ubiquity 0.1.1. You’ll be updated automatically if you’ve already installed Ubiquity; otherwise, you can get the latest version here.

Expect some major upgrades to the the Herd—Ubiquity’s command finder and dashboard service soon.

Some Links To Awesomeness

There has been too much awesomeness created by everyone in the community to highlight it all. I’ll call out just a spattering:

There is Lani Anglin-Rosales’s Top 35 Ubiquity Commands; Leslie Orchard’s walkthrough for creating a Delicious Ubiquity command; and Waleed Zuberi’s super-useful Ping.fm command. There’s Vladimir Prelovac’s open command, which shows how Ubiquity can be used to interact with the page’s current context; and, Robert Chen’s Xkcd command. Because, who doesn’t want the instant ability to insert obligatory Xkcd references. (Now, if it only let me insert the actually comic image instead of a link to one.)

Yatrik Solanki has done some wonderful design work and has turned us onto enabling skinning support for Ubiquity.

Abi Raja’s has made the excellent Keyscape which shows how Ubiquity can be used to write full-featured Firefox extensions. He’s also put out an amazing hack to enable command chaining. (Abi is one of the five original virtual team members.)

Finally, Skumleren.net has made some scientific ubiquity commands. I have a soft-spot in my heart for beautifully typeset equations. It’s my math and physics background, I’m sure. But it makes me knees weak. I’m looking forward to being able to plot from inside Ubiquity.

If others have contributions they’d like to call out, put them in the comments section or blog about them.

Firefox Mobile Design Session: Bookmarks

Sunday, August 24th, 2008

With over two thousand watches of the find-in-page session, and a lively discussion, the experiment into broadcasting our internal face-to-face meetings is a continuing success. It exceeded our expectations for participation and yield of quality dialogue; we’ll be trying to do more of these at Mozilla—not just for Mobile—in the future.

For the third installment of the Firefox Mobile design discussions, it’s bookmark time. Bookmarks have been a fundamental feature in the browser since Mosaic days. Do they have a place in Mobile? Are there better paradigms? How are they displayed? What’s the difference between a tab and a bookmark? Is it only a matter of one being in the device’s memory?

These are some of the questions are asked, and some of questions answered in this thrilling video installment of Firefox Mobile Design Sessions. We are looking forward to hearing your thoughts. PDF of the slides are again unavailable because the whiteboard software ate them. We’ll work to resolve that for future sessions.

Firefox 3.1 Proposal: Tabs in the Awesome Bar

Friday, August 22nd, 2008

At the end of my last post on tabs, I mentioned Madhava’s concept for putting tabs into the Awesome Bar.

It’s a scalable and elegant solution. It has the hallmark of a good interface: it’s almost invisible, with no training required to gain the benefits of the feature. In one fell swoop it solves the twin problem of (1) it being easier to open a new page than it is to find an existing tab (2) the cognitive overload (and Hick’s Law penalty) of being required to think about whether something is already open in a tab, or whether I need to open it in a new tab.

I simply type where I want to go, and Firefox does the right thing.

After getting some insightful comments from Jenny Boris, who has been leading the charge in good thinking about tabs, we think it’s a feature we should try to get into Firefox 3.1. In particular, she asked me to try my hand at some mockups.

Here are three ideas on a theme; my preference is for the last. Although not pictured well, matching tabs should be ranked above plain URLs.

In terms of interaction there is only one complication: What happens if you want to open a new tab to a location that’s already open in another tab?

There are two solutions. The first is to make explicit a behavior that already exists in Firefox; holding down option while selecting a URL from the location bar opens it in a new tab. That’s the type of solution I’ve included in the mockups.

The second solution, proposed by Alex Faaborg, is much more subtle. If the user has opened a new tab, and then entered a URL, they probably mean to start a new navigation task instead of switching. Note that this solution can be used in conjunction with the first. While we both like how unobtrusive this solution, we worry that it might make Firefox feel too “magic”, or unreliable — not knowing why your browser has done something is unsettling.

Luckily, this is an edge-case that won’t happen often and any of the solutions will work well enough to be quickly polished to perfection with user testing.

My hunch is that adding tabs to the awesome bar will drastically simplify the day-to-day hunt-and-peck for tabs with a minimal change to Firefox. It’s a huge win. Another benefit is that it can work seamlessly with Weave in the future—which will be especially useful for calling up information that you were just looking at on your desktop, on your mobile device. What does everyone else think? This feature is still in fledgling mockup stage—although we hope to move it forward quickly. Madhava proposed a couple other sketch ideas for how a tab-awesome bar integration could look. We’d love other sketches if you think there are other directions to explore.

Firefox Mobile Design Session: In-page Find

Saturday, August 16th, 2008

This is the second installment in the ongoing experiment to open the face-to-face design meetings we have at Mozilla. This design meeting centered around in-page find for Fennec (Firefox Mobile). This feature is as invaluable tool on the desktop, letting you home in quickly on the information you’re looking for once a search engine has got you to the right page. It’s incremental nature means you never have to type a key more than you need. Conspicuously missing from mobile Safari, incremental in-page find on mobile may prove to be even more of a killer feature than on it’s desktop counterpart.

We’ve tried to learn from the feedback to the last video (which, at the time of writing, has almost 350 views!—I was expected a number that could be counted on two hands). We changed the format of our white-boarding to be more like slides: Each board contains a title with its purpose, and has more focused content.

Video is a low information density medium, so for this video we are trying Viddler which allows viewers to make in-line comments to increase its time-information density. The hope is that you guys can annotate, call out interesting sections, or providing feedback on ideas discussed. (Thanks to Patrick and Ian for suggesting this change).

Also, feel free to comment on particular design decisions, or give your own, in the comments here. My favorite feature to come out of this session was the idea of pre-filling your in-page find with the search term, if you had just come from a search engine. When looking for a particular piece of information, the work flow is often (1) search engine the term to get to a potential page, (2) in-page find for the same term to see if the information exists. By defaulting to the search term, it halves the amount of typing (more if you have to check multiple pages), without burdening the user if the guess is wrong.

Here’s the video:

Sharing Streamable Functionality

Wednesday, July 23rd, 2008

Question: How do people share on the net?

Answer: They use services like Del.icio.us, Facebook, and Twitter. They IM, Email, and RSS. They advertise, search engine optimize, and chain letter. But it all comes down to communicating URLs.

Now, that might seem to be a trivial conclusion. And it is—the URL is the unit of location for the Web. But as we began to think about how to share new functionality for the browser (read Ubiquity commands, as well as the broader spectrum of Firefox add-ons), we realized that the basic URL was again going to be the key to sharing.

Question: How is functionality shared now?

Answer: Via one-time software downloads. New versions of Firefox are downloads (albeit often transparent ones) and add-ons are available as static XPIs. There is something largely last-decade about requiring restarts to add a new feature to your browsing experience. It’s ironic that the entire Web is on a push model, yet the browser—the most fundamental tool of interacting with the Web—is on a pull model.

Functionality is not shared via URLs, but it should be. Security concerns aside (we are starting to think about them), it’s a corner-stone of streamable browser functionality.

Question: What should functionality look like?

Answer: Like the rest of the Web. The closer new browser functionality can be packaged to look like standard HTML and JS, the larger and more diverse a community will create it. XUL and the desktop paradigm for extension development, while powerful, has a high cost of adoption. Right now we have a short tail of browser functionality with thousands of add-ons. There should be millions. We can get to that long tail using a more web-like model for functionality development&tools that are accessible to hobbyists and tinkerers, but that scales to professionals.

Bookmarking Functionality

Given that functionality implementations should look webby (think microformats) and be sharable by sharing URLs, it makes some sense that to add a piece of functionality, you should just be able to bookmark it.

In Ubiquity, you can do just that. We still haven’t defined a Ubiquity microformat, so right now functionality is simply a Javascript file. To nab it’s functionality, you bookmark it and tag it “ubiquity”.

Immediately, your browser has new functionality. Streamable functionality.

Using bookmarking solves a lot of user experience problems for passing around functionality: It doesn’t introduce a yet another new thing to learn, it enables no-action syncing between computers with Weave, and it lets you bookmark RSS feeds for aggregating interested meta-sets of commands. It also makes semantic sense: You bookmark content that you find and like, so you should be able to bookmark functionality you find and like.

The bookmark method works in the current prototype (running it requires pulling it from the HG repository). If you build some commands/verbs and want to share them, it is as simple as just posting a file online. If you do, tell us about them on the wiki.

Mobile Firefox and Designing Without Modal Overlays

Friday, July 18th, 2008

In the concept video I recently did for laying out the interface paradigms for Firefox Mobile, I listed five guiding principals.

  1. Touch it with your finger
  2. Large targets are good
  3. Visual Momentum and Physics are compelling
  4. Typing is difficult
  5. Content is king

It’s these principals that inform the design of new features long after the original design as been coded, released, and iterated on. In discussions with the perspicacious Mike Beltzner, another design principal emerged.

 6. Use modal overlays sparingly, if at all.

To be sure we are on the same page—I’m may be partaking in the dangerous hobby of coining new terminology—an overlay is simply a content area that sits in front of the content beneath it. The aspect that makes a modal overlay modal is that when it is up, the content “beneath” the overlay cannot be acted upon until the overlay is dismissed. Although a modal overlay may be visually transparent, it is never interaction transparent: you must always take action, like clicking “okay”, before continuing with your workflow. While I’m living dangerously, I’ll toss one more phrase into the mix: a state-forgetting modal overlay is an overlay whose state is reset every time it is summoned. That is, any work you do in the overlay is lost when you dismiss it.

Some examples of modal overlays are dialog/monologue boxes, ever-so-Web-2.0 Lightboxes, and the bookmarks interface for Mobile Safari. Some examples of overlays that aren’t modal are transparent messages and the OS X’s on-screen display for volume. The former have a number of interaction pitfalls that the latter do not share.

What’s wrong with modal overlays? In a word, they are modal: You are either interacting with the content or the overlay. Modal overlays don’t allow you to refer back and forth between two sources of information, or move fluidly between two actions. The second problem with modal overlays are that they are disconnected and disjoint from other overlays—knowing how to access one doesn’t yield a physical sense of how to access another one; they do not scale to give a unified, cohesive interface.

Let’s take a look at a plausible interface to illustrate the point; an implementation of search-and-replace using a Lightbox.

At first glance, this seems like a friendly, Web 2.0 way of doing things: it affords the opportunity for large typography and an uncluttered screen. While using a Lightbox is Web 2.0, it isn’t necessarily friendly. In fact, it has a fairly clunky workflow, for anything but the most basic case. Imagine you want to replace all instances of the text “insightfully thought” with “perspicaciously reckoned”, both of which exist in the text, although separated by a couple pages. You copy the first term, summon the Lightbox-based modal overlay, and paste it into the “replace” field. The next logical step is to scroll through the content to find “perspicaciously reckoned”, copy it, and put it into the “with” field. Unfortunately, because the search-and-replace form is in a modal overlay, you first have to dismiss the overlay before interacting with your content, then call it up again when you are done. It’s a slow, unwieldy feedback loop. On top of that, there isn’t a great way to indicate the changes in the text without somehow hiding the overlay.

Let’s take another example, this time from the real-world. At Humanized, we wrote a review of Mint.com’s thoughtful interface. One of the thing’s I liked about Mint’s interface—that I called “stunning”—was the unafraid use of text to create a huge, easily scanned list of possible categories that enabled filing a particular expense quickly. The problem, which I didn’t talk about then, was that they used a Lightbox. It feels heavy and slow at a visceral level. For example, when you are categorizing the expense type of a purchase, Lightbox’s modal nature keeps your from examining surrounding expenses that might help you to contextualize and categorize the purchase in question. Further, because it is a state-forgetting overlay, anything you enter into the create-your-own-category input is lost as soon as you consult another expense. Not good.

Lightboxes are tempting to use as a turn-key solution—we unfortunately use them in Songza—but there are better solutions, which I’ll come to in the next section.

Let’s go closer to home for the next example. Bookmarking. Firefox UX designer Madhava Enros did excellent work on many of the early UI prototypes for Firefox Mobile. In Proposal 8, which experimented with Songza-esque pie menus, you can see a lot of the thinking that directly informed the current design of the location bar. It also used a modal, state-forgetting overlay for bookmarking. This meant that you couldn’t both be bookmarking a page and interacting with the page at the same time—and worse, if you started to delve into your hierarchy of bookmark folders to file the page away, and wanted to refer back to the page before saving the bookmark, you’d have to start all over again.

Solutions

Now that we’ve explored the problems with modal overlays, it’s time to look at solutions. In particular, on the solution meant to replace modal overlays that might require complex interactions—which means that transparent messages don’t cut it. I’ll talk about two solutions in this post, but I am sure that there are other solutions out there. I’d love to hear ideas in the comments.

The Tray

The first solution is arrived at by simply not having an overlay be modal, with a bit of animation for polish. The overlay appears as a tray anchored to the edge of the content area. The tray must not force interaction, meaning that the tray can be ignored, and the content perused as if the tray didn’t exist. The only down side to not interacting with/dismissing a tray is that it eats up some screen real estate.

In the browsing world, Firefox uses the tray method to defeat the annoying-as-a-blackberry-pip-stuck-in-your-molars dialog box that asked if you wanted to save your password (and worse, it asked before you knew if you had typed it right!).

Because a tray overlay isn’t modal, you can answer the question in your own time. The tray is a great way to make user-dependent decision asynchronous. In fact, almost all user-dependent questions that are in situ with your browsing experience are done via the tray-style prompts. Take, for example, the prospective geolocation prompt. Coincidentally, the conviction of never using a modal overlay/dialog box in Firefox meant changing the W3C geolocation specification. Ironically, if you drag a tray is extended to take up the entire screen it becomes a modal overlay again. Further examples of trays in action can be found in Algorithm Ink’s browsing and editing functions.

As a final example, there is extensive use of tray-style interaction in Adobe Lightroom, generally docked on the left and right side of the screen. It’s a well-placed implementation, allowing quick access to a range of manipulations that don’t get in the way of moving around the image.

The Slide

The second solution isn’t an overlay at all, instead it uses scrolling or sliding. By placing the new area next to the original content it’s easy to understand how to move between the two areas. It’s also easy to extend the metaphor across numerous additions — new features get a new physical location. This is the technique demonstrated in the concept video, where the browser controls are located to the left of the web page content.

Using sliding as an overlay substitute mechanism (when we aren’t using slow-to-use scrollbars) is a fast way of moving between content in a non-modal way that also takes advantage of visual momentum and spatial memory.

Let’s take a look at how the slide mechanism can extend the browsing controls for Fennec. Here’s a schematic view of accessing the add-on manager and preferences:

Notice that once we’ve introduce the slide, we’ve opened up the possibility for a scalable way to expand ad infinitum. It’s a good way of coping with the limited screen size of mobile.

End Game

I’ve only started to think about solutions to the modal overlay problem. The tray and the slide are two passable solutions—I’m sure there are even better solutions waiting to be discovered. Quasimodal overlays, for instance. Let me know if you find/think of any.

Community is Global

Wednesday, July 16th, 2008

Last week I traveled to Rome. I gave two talks. One was to a large audience of C-level execs from Fortune 100 companies in a over-the-top hotel; the other was to a small group of Mozilla Italia community members in a charming local pub. The difference was striking. The quality of dialogue and the intensity of passion in the later blew away the former. It was eye opening. I feel privileged to be able to take part in such a community.

All credit goes to Giacomo Magnini for putting together a wonderful event on super-short notice. It’s hard to visualize nearly a quarter billion people using Firefox. However, I gained some perspective by being shown that no matter where I travel, there will be people who not only use Firefox, but are passionately generative in the community. It’s simply breathtaking. It’s fitting, therefore, that Labs—which is chartered to accelerate the open design process—had it’s second Labs night outside the United States. The Mozilla community is a global phenomena.

Head over to Giacomo’s summary of the event, which includes a blurry video of the presentation.

P.S., I’m still in a state of delighted shock that they served me Nutella Pizza. Wow.