Who Gives This Software to be Web?

When my sister got married, I gave her away.  But the pastor who officiated wanted to retain something of the tradition of parents performing that act, so when I walked my sister up to him, he asked me, “who gives this woman to be wed?”

And I responded “her father, her mother, and I do, sir.”

For some reason I’m reminded of this story whenever I think about the three informal personas that guide my hacking.

Persona #1: My Mother

My mother is a novice computer user.  She doesn’t use keyboard shortcuts, and she doesn’t use menus much either.  Nor bookmarks, except for the couple I added to her Bookmarks Toolbar once.  She also doesn’t quite get the difference between a URL and a search, so she goes to URLs by searching for them on Google.  She has never installed an add-on.

My mother doesn’t care how or why her computer does what it does, and she doesn’t want to bother learning how to use it better.  She just wants it to do what she wants.

Persona #2: My Partner

My wife Judy, on the other hand, is a power user.  She uses some keyboard shortcuts, and she uses a lot of bookmarks (organizing them into multiple categorized folders).  She knows the difference between URLs and search terms.  She groks HTML.  And she has installed a couple of add-ons.

Judy takes the time to learn how to use her computer well, not because she wants to, but because she uses her computer a lot, and learning how to use it better helps her get her work done.  She too doesn’t care why her computer does what it does, she just wants it to work well for her.

Persona #3: Me

I’m a programmer.  I spend more time computing than I do sleeping.  So, like Judy, I invest time into making my computing environment as efficient and effective as possible, learning bunches of keyboard shortcuts, installing dozens of extensions, setting up multiple desktops, etc.

But I’m also fascinated with computers and how they work, and I like to modify apps to do more or do it better.  So factors such as extensibility matter to me in a way they will never (directly) matter to most other people, although others will benefit from the extensions I and other programmers create.

He-Fox and the Masters of its Universe

I think software like Firefox can and should serve multiple audiences well, including the people I mention above, which comprise three basic categories of computer users.  Not every feature will appeal to every group, and we might use even common features in very different ways, but Firefox should be able to provide a great experience for all three kinds of users.

When I work on Firefox and other apps, I try to keep these people in mind as proxies for Firefox’s actual userbase and provide the appropriate experience for each one. So when considering who benefits from the work I do, I can say “my mother, my partner, and I do, sir.”


persistent, site-specific prefs prototype

I’ve been investigating options for improving user control over content, including persisting user decisions about appearance and behavior and overriding global preferences on a site-specific basis.

To test some ideas about how to do these things, I put together a prototype that implements a basic service for persisting site-specific preferences to a profile database.

The prototype also includes some experimental UI in the form of a sidebar into which controls for twiddling site-specific preferences can be placed. The sidebar currently contains one such control: a slider that sets the text zoom value (i.e. what View > Text Size > Increase/Decrease/Normal sets).

I’ve bundled up the prototype into an extension called (boringly) Content Preferences for Firefox 2 and up and posted it to addons. While it undergoes review on that site, the eager among you can get it from my web site: Install Content Preferences.

It should go without saying that this is early, rough alpha code, and you should exercise all due caution when testing it. To try it out, do the normal install and restart thing, then select View > Sidebar > Content Preferences.

Your feedback is welcomed.

Some voluminous notes for the compulsive informaddicts among you:

View > Text Size Impact

Once you install the extension, the View > Text Size menu items and their keyboard shortcuts also become site-specific and profile-persistent (i.e. lasts as long as your profile does). So even if you never open the sidebar, you still get the benefits of the extension with the existing text zoom UI.

If you uninstall the extension, that UI goes back to the way it was before (i.e. tab-specific and tab-persistent). No permanent harm done (AFAICT, YMMV, etc.).

The Slider

The sidebar slider’s magnification range is 1-400%, which is somewhat smaller than the View > Text Size commands’ range of 1-2000%, but the smaller range seemed more usable. The slider will follow any changes you make via View > Text Size as far as it can, then it’ll sit there lonely at the end of its range until you come back to it.

What is a Site?

A “site,” for the purposes of this early prototype, is the set of pages hosted at the exact same domain name (f.e. everything on en-us.www.mozilla.com).

As David Baron has pointed out, figuring out what constitutes a site is an important component of an endeavour like this, so future prototypes will experiment with TLD+1 (*.mozilla.com) sites, www-optional sites (www.mozilla.com == mozilla.com), and anything else that seems promising.

Perhaps multiple domains secured by certificates granted to the same organization should count as one site?

Fixing Font Size on the Web

Finally, I’m aware of multiple proposals for fixing the font size settings in Firefox so they’re easier to use and get things right more of the time. And I’m also aware that the more we can get stuff like font size right without making users configure it themselves, the better.

This prototype doesn’t constitute a proposal for dealing with font size, it’s more an experiment in how to improve usability with persistence and site-specificity. I picked on text zoom only because itty-bitty fonts seem to be among the commoner complaints about the web, and also because hacking into text zoom seemed like a good testbed.

Even if we solve text size issues some other way, there will be other uses for the core service this extension provides. For example, Dave Camp overheard me describing this experiment a couple days ago and mentioned that he’s been looking for a way for users to grant additional DOMStorage space to particular sites. A site-specific preference service sounds like just his ticket.


improving microsummary discoverability

For Firefox 3, in addition to investigating our feature set for control over your web experience (about which more soon), I’m also looking into useful usability and functionality improvements to Firefox’s support for microsummaries.

One glaring weakness is discoverability. In Firefox 2, it’s hard to know if a page you’re browsing has a microsummary, since you have to open the Add Bookmark dialog to find out, and you have to grok the significance of the drop-marker in the Name field.

Feeds, by comparison, are much more discoverable, since Firefox displays the feed icon in the location bar when a page provides a feed. Perhaps a similar mechanism would be useful for microsummaries.

To find out, I put together a prototype extension which displays an icon in the location bar when a web page has a microsummary.

When you click the icon, Firefox opens the Add Bookmark dialog and selects the microsummary as the “live title” for the bookmark.

Then just select the folder you want the bookmark to be created in (f.e. the Bookmarks Toolbar) and press the Add button to add a bookmark labeled with the microsummary for the page.

The extension is now available on addons.mozilla.org. Try it out with some of these sites and generators, and let me know what you think. Does the behavior make sense? What other behavior might we associate with the icon (f.e. drag-and-drop to the bookmarks toolbar)? What should happen when there are multiple microsummaries?


  1. The extension works in both Minefield and Firefox 2.0 and with both generated and site-provided microsummaries.
  2. The location bar icon is intentionally blank, since I have no idea what kind of graphic should represent microsummaries. I would have made it colorless, too, but then it would have been invisible.
  3. I named the extension something generic because I plan to prototype additional enhancements in future versions of it.
  4. Adding an icon to the location bar for every interesting piece of content, especially in the age of burgeoning microformats, probably won’t scale, so this may well be the wrong solution for the problem.

folks who made microsummaries happen

My primary responsibility for Firefox 2 was to implement support for microsummaries.  It was a large task, and I couldn’t have done it without significant assistance from a number of other folks.

Mike Connor and Mike Beltzner saw the potential early on and encouraged me to work on microsummaries for Firefox 2.  Both also helped in innumerable other ways, including code, user experience, and nomenclature reviews.

Mike Shaver provided invaluable early feedback, including coming up with the name “microsummary”.

Ben Goodger and Brett Wilson helped me navigate the treacherous waters of the bookmarks code (and the gentler shoals of Places) to get the architecture and integration points right.

I’m extremely appreciative of the many hours Boris Zbarsky spent working through complicated technical issues with me, particularly how to download and parse an HTML page in Firefox without any front-end impact.  Boris was incredibly helpful, and I’ve seen him do the same for many other developers.  He’s a real credit to the community.

Much props to Jonas Sicking, Dan Veditz, Darin Fisher, and David Baron for their thorough security review.

Eric Shepherd rocked the docs on many levels (writing, reviewing, organizing).

A veritable bevy of coders contributed patches: Dietrich Ayala, Simon Bünzli,  Regis Caspar, Justin Dolske, Kevin Gerich, Pam Greene, Adam Guthrie, Joey Minta, and Phil Ringnalda.

And many other folks made microsummaries better by contributing bug reports, suggestions, microsummary generators, integration into blogging tools, and prototypes of future enhancements/add-ons.

Thank you, everyone!

(And apologies to those whose contributions I forgot to mention.)


content filtering, manipulation, and control in Firefox 3

Over in mozilla.dev.planning, Deb has posted an article about Firefox’s newly updated Feature Brainstorming list.

For the next version of Firefox, I’m going to take a particularly close look at the application’s feature set for content filtering, manipulation, and control.

I’ll look at the functionality Firefox currently provides, try to figure out what it should be providing (based on a variety of metrics), and identify a discrete set of changes (new features, enhancements, and even removal of existing code) which can provide evolutionary and/or breakthrough improvements to this area in the Firefox 3 timeframe.

I have a few ideas, which I’ve added to the brainstorming list; and others have added many more; but there are bound to be great ideas we haven’t yet captured.  So if you have some, please contribute them to the list!


a bunch of microsummaries news

I’ve been remiss in not blogging lately about much cool microsummary news.  To make up for it, here’s a bunch all at once:

First off, Markdown Monkey, Deprec4ted, and NeoAddict have all created microsummaries for their web sites (the latter as a generator).

Also, I’ve added two new example generators, one that shows you flight status via FlightStats (prompted by a request from Seth Bindernagel) and another, adapted from a generator by Samuel Sidler, that shows you a web site’s traffic ranking on Alexa.

Petr Tomasek has put together some microsummary generators (mostly for Czech sites).

And Dietrich Ayala, author of the way-cool Bugzilla Search generator, wrote an XSL stylesheet that transforms a generator into an HTML page containing a link for installing that generator (i.e. the generator displays its own install page).

I’ve added his stylesheet to all the example generators, so if you happen to load one of those generator files directly, you’ll see something better than plain XML (unless you’re looking for plain XML, that is, in which case you’ll see something worse than plain XML, and View -> Page Source will become your friend).

Finally, I wrote a tutorial on creating regular expressions for a microsummary generator to help folks without existing RegExp fu learn to write expressions to match the URLs of sites they want their generators to handle.


microsummaries talk at OSCON

I’ll be giving a talk on Microsummaries at the upcoming O’Reilly Open Source Convention (OSCON) on Thursday, July 27, from 11:35am – 12:20pm in the Portland 251 room.  The talk will include an overview of microsummaries, a demonstration of their functionality in the upcoming Firefox 2 (including generators for popular web sites and sightings in the wild), a lightning tutorial on building a generator (à la this one), and discussion about future enhancements to benefit web sites and users.

It should be a fun and informative session, so please drop by if you’re attending OSCON.  And if you’re still just thinking about attending, note that Benjamin Smedberg will also be talking about building apps with XULRunner, Mitchell Baker will be on a panel discussing open source projects and money, and Mark Hammond will be presenting on Python in Mozilla.

Other Mozilla folks are also attending, and there’ll be a BOF, a booth, a screening, and probably other exciting events and get-togethers, so it’s a great opportunity to meet Mozillans and learn more about the project.  Check it out.


microsummaries beyond bookmarks

Folks at my XTech talk on microsummaries in May seemed excited by the new feature, and in discussion they pointed out a number of potential applications for microsummaries technology, including:

  1. Simplifying web pages for blind users who have to walk DOM trees via screen readers to access page content.  One idea is to establish a repository of site-specific XSLT stylesheets that remove unnecessary content (f.e. redundant navigation) from pages, tag important content, and make other modifications to optimize navigability via screen readers.
  2. Reorganizing web pages for mobile users with screen size and navigation constraints.  A common problem on mobile devices is that users have to scroll past screenfuls of navigation to get to the content of a page, since the navigation appears before the content in the page.  Here again we might establish a repository of XSLT stylesheets that move navigation to the ends of pages and do other transforms to make the pages display better on small screens.
  3. Creating widgets that provide specific information or help you do particular tasks, à la Yahoo! Widgets, Opera Widgets, and Apple’s Dashboard.  XSL transforms probably aren’t sufficient here but could be a component in an overall solution.

These are all great ideas, and I’ll be keeping their use cases in mind as I refine microsummaries functionality in Firefox.