February 2009


This photo has nothing to do with the article.  I just thought the blog needs more pictures.

This photo has nothing to do with the article. I just thought the blog needs more pictures.

Last night was Labs Night, a kind of show-and-tell (with pizza) that we do here once a month, open to the public. We encourage people from outside Mozilla to attend and give presentations on their own projects.

Last night was especially rewarding because we had two such community presentations. One was from Edwin Khodabakchian of Feedly, a Firefox extension which “weaves your favorite content into a magazine-like start page”. The Feedly team has developed a set of Ubiquity commands to act as a command-line interface to Feedly, which is pretty cool.

The second was from Guillaume and Sebastian, the Paris-based creators of Play!, a Java web-application framework. Among other things, they demonstrated how they’d written a bridge between Play and Bespin so that they could edit source files in Bespin and see the results of the changes instantly on the same server.

So it just so happened that both projects presented had done cool things by building upon or integrating a Mozilla Labs project in some way. It’s extremely gratifying, not to mention flattering, to see our work used in this way. Because that’s what open source is all about (well, one of the things): The ability for all of us to build on each other’s code.

March 9, 2010 Update: This post is over a year old and extremely out of date! If you want the latest information about syncing your data between desktop and mobile Firefox, check out this post on the official Weave site instead.

The latest version of Weave now syncs your open tabs — and it can sync them between Firefox on the desktop and Fennec on a pocket-sized gadget.

“Syncing tabs”, by the way, doesn’t mean that we force all your browser instances to have the same set of tabs open. That’s not what anybody wants! Instead, it means that every browser has the ability to access the tabs that are open on other synced browsers, and to locally open copies of those tabs.

Here’s how it looks on Fennec. Keep in mind that this UI is a work in progress, and I’m well aware that it needs work, polish, and testing. But I’d like to let you see how it’s coming along and get your feedback on it.

fennec-weave-tabs-ui-0

On the left sidebar of Fennec, where your tabs appear, is a new Weave button. (This assumes that everyone recognizes “Rectangular Celtic knot” to mean “see my tabs from other computers”. Not a good assumption, so consider this a placeholder.)

fennec-weave-tabs-ui-1

Clicking the button slides the screen further to the left for a full-screen view of tabs from other computers. If you have more than two browsers being synced, each remote browser will have its own column here. Each column is identified with the client name. Eventually we’d like to display thumbnails of the tabs, but since we’re not syncing thumbnail data yet, we make do for now with titles and favicons.

fennec-weave-tabs-ui-2

A click on one of the remote tabs opens a local copy of it, which adds it to the tab bar, as you can see here.

Comments?

(Addendum: Here’s Madhava’s proposal for how the tab sync UI ought to work when it’s finished.)

(Addendum 2: Here’s the new and greatly improved version of the UI shown above.)

Over at his blog, Mitcho has some very sharp thoughts about localizing Ubiquity to verb-final languages such as Japanese.

I talked about similar localization issues several months ago, but Mitcho takes it further than I did. He says:

In a verb-final language, however, you enter the arguments first and then the verb, making this strategy of suggesting appropriate arguments impossible.

Instead of seeing this as a disadvantage, however, let’s see what verb-final order allows us to do.

That’s the spirit!

He goes on to talk about analyzing the arguments, which are entered first, and using them to suggest a verb. I think this is exactly the right idea.

I’ve just got one thing to add: Ubiquity already does some very rudimentary suggestion of verbs based on having the nouns first. This is how we handle the case where the user selects some text and then pops up the command line — we suggest verbs based on the noun types that produce a positive match to the selection. It’s very basic right now, and could be a lot better.

The good news is that we can take the algorithm that suggests verbs based on the selection, and apply it to Mitcho’s idea of suggestions in verb-final languages. Any improvements we make in one will be applicable to the other, and vice versa. Working on the noun-first suggestion algorithms helps everybody!

For the past few Thursdays we’ve been doing something called an “Open Design Lunch” at Moz. We’ll pick a design problem that somebody’s working on and brainstorm it informally while munching pizza and burritos. Asa has been broadcasting these events on air.mozilla.com.

At today’s Open Design Lunch I brought up the question of how bookmarks should be accessed in Fennec. Bookmark management on Fennec gets extra tricky when you have hundreds (or thousands) of bookmarks from your desktop computer getting synced onto your mobile phone; so this problem is closely related to the UI design of Weave. My previous attempts to design a bookmarks UI haven’t solved these problems to my satisfaction.

The conversation didn’t conclusively settle anything (of course) but it brought up a lot of good ideas that deserve further investigation. Here’s the video:

(Note: These videos use the cutting-edge <video> tag from HTML 5, so they may not work for you unless you have the latest version of Firefox or another standards-compliant browser.)

In the Mountain View building complex that houses the main Mozilla offices, there are many doors like this one.

In the Mountain View building complex that houses the main Mozilla offices, there are many doors like this one.

What's your natural reaction to a vertical door handle?  You grab it like this...

What's your natural reaction to a vertical door handle? You grab it like this...

...and pull it to open, right?

...and pull it to open, right?

But if the handle is on the inside of the door, then pulling does nothing.  EVERY SINGLE PERSON who I've seen encounter these doors has made this mistake.

But if you're on the inside of the door, then pulling does nothing. EVERY SINGLE PERSON who I've seen encounter these doors has made this mistake.

The other side of the building, a few meters away, has doors like this.

The other side of the building, a few meters away, has doors like this.

The outside handle is vertical, the inside one horizontal.

The outside handle is vertical, the inside one horizontal.

Without thinking, you put your hand on it like this, and push.  It opens!

When you're on the inside of the door, your natural reaction is to put your hand on it like this, and push.

The architects of the building had a perfect solution to the handle problem, so why did they use it on only half of the doors?

The architects of the building had a perfect solution to the handle problem, so why did they use it on only half of the doors?

Don Norman would not be amused.

Don Norman would not be amused.

Khoi Vinh has a good critique of our Ubiquity “marketing” strategy, here: Subtraction 7.1: Marketing in a Minute.

Quoth Khoi Vinh:

While I have great faith in Aza and his team’s talent, and while I’m pretty sure that the product itself is almost certainly worthwhile, I have to be honest: I have no idea what it does. As of this writing, I lack a clear understanding of its function or purpose. This is largely because, though I’ve come across references to it many times, the marketing hasn’t worked for me.

He’s got a point! The main Ubiquity project page does not clearly describe what Ubiquity does. When I try to block out my existing knowledge and read that page with fresh eyes, it sounds like some magical vaporware project that will be all things to all people, cure cancer, and make julienne fries.

(more…)

I was going to put up a picture of a VCR or a microwave with a digital clock blinking “12:00” — the classic example of user interface failure.

But my microwave doesn’t blink “12:00”. It blinks “66:66”, or sometimes “6:66”, like it’s possessed by the devil. I think it has a short-circuited 6 key, so it’s processing nonexistent presses of the 6 key at random times. Sometimes it beeps loudly in the middle of the night. I keep it unplugged most of the time just to keep it quiet.

But anyway, the impossible-to-set digital clock is the classic example of user interface failure — and by “classic” I mean it was considered a hilarious punchline back in 1987: People were always saying “I’m so bad with technology, I can’t figure out how to get my VCR to stop blinking 12:00”. Ha ha ha. And what’s with airline food?

But the real problem was not that people in the 80s (or today) were “bad with technology”, it’s that VCRs (and microwaves) presented a terrible interface that made setting a digital clock far more difficult than setting an analog clock, and for no good reason!

And that’s why this blog is called “Not The User’s Fault”.

emacs-dialog-box

The Aquamacs “Save File?” dialog box has a ridiculous surplus of buttons.

Readers: How many buttons does this dialog box really need? (Answer below the fold.)

(more…)

There should never be only a single person who knows how a module/package/program works. What if that person gets hit by a bus?

For the sake of ensuring that I’m not the only one who understands the Ubiquity parser, I’ve written a page of documentation about it on the Mozilla wiki. It explains the algorithms used, with lots of examples and links to particular functions in the source code.

There are still a few TODOs where I need to fill in some details, but I hope what’s there will be useful to someone. Let me know if there’s a particular feature/class/function that you’d like to see further documented or explained.