July 20, 2011

RecallMonkey Brings Simple Search to Firefox History

Where was that page you were just looking at a few days ago? If you're a Firefox user, answering that question just got a lot simpler. Yes, the browser offers simple bookmarking and niceties like bookmark folders and multi-browser sync — and yes, there are hundreds of add-ons to help you categorize, tag, export, import, and file your links in every conceivable way. But all too often, re-finding that page you just took a casual look at is still easier to do with a Web search engine — and that's the premise behind RecallMonkey, which gives you a search-engine-like interface to your own browsing history.

Monkeying with Search Theory

In earlier times, primitive Firefox users trying to claw their way back to a particular page from their history had but one way to do it: open up the "Show History" pane (Control-Shift-H on Linux), and sift through page after page of URLs. There was a simple pattern-matching search box, but the results it returned were inflexible (no fuzzy matching or complex queries), and there was no search-within-results option with which to drill further in. In desperate moments, later Firefox users had another option: start typing words into the Location Bar (a.k.a. "Awesomebar") and wait patiently while the browser churned up a few page titles that vaguely matched ... most of the time. No one was happy with either option.

RecallMonkey takes the Web search experience as its cue. It is a product of Mozilla's Mozilla Labs R&D group, and specifically an outgrowth of Prospector, an experiment to make browsing friendlier by making better use of data about your browsing session — what sites you visit, when you visit them, what you bookmark or tag and what you don't.

The basic idea of RecallMonkey is that in place of the History window with its static, sorted list of URLs you've visited, you can access a live-updating, JavaScript-powered search engine that mines that same history, but in a more natural way. Like Google and the other major Web search engines, RecallMonkey's results start with a search term, but allow you to exclude or prioritize particular domains, narrow the time range displayed, and highlight URLs you have bookmarked. The search is not limited to exact matches, either, taking a page from the popular search engine services and offering some degree of "fuzzy" matching.

Just to be clear, RecallMonkey does not present you with different items than Firefox's static History view component or Awesomebar — it just uses a ranking algorithm and the aforementioned utilities to give you a better chance of finding what you're after than does a simple keyword-based match. It also runs within the browser window, so you can even pin it as an "app tab" and have it at your fingertips all day long.

Testing It

Aside from the feature set itself, another nice thing about RecallMonkey is that it is written entirely in Mozilla's new, lightweight Add-ons SDK — meaning the complete experience is handled in HTML, CSS, and JavaScript. That means wider compatibility with different versions of the browser, a faster development cycle for the engineers at Mozilla Labs, and vastly simplified installation.

RecallMonkeyYou do still need to visit the RecallMonkey add-on page to download and install the extension. The current release supports all versions of Firefox since the 4.0 release. However, because RecallMonkey is not written in XUL, chrome, or other hefty extension mechanisms, there is no need to restart Firefox. You can start using the extension immediately after the Add-ons wizard says it is finished.

At least, that's the theory. The one wrinkle worth looking out for is that RecallMonkey adds an item to the browser's History menu, and this menu item may not appear immediately. It will be present when you next re-launch Firefox, though. But you can still fire up RecallMonkey with the keyboard shortcut Ctrl-Shift-M. This opens a new tab, loading a distinctive resource:// URI.

What you get is a search box across the top and four refinement tools down the left hand side. Search queries are live, with results updated as you type. The list is sorted — although I cannot find any in-depth documentation of the algorithm, it seems to weight frequently-visited pages higher, and try to mix in results from multiple domains. Only one screen-ful is loaded at a time; as you scroll down additional hits load on-demand.

For now, the refinement tools include a time selector with five options (Last 24 Hours, Last Week, Last Month, Last Year, and All Time), a "Prioritize Bookmarks" check-box, and tiny little arrows and X's next to each result. Clicking the X excises the entry's domain from the results and adds it to an "Excluded Sites" list on the left. Clicking the arrow adds the domain to the "Prioritized Sites" list.

It seems that both of these site-based features are limited to the base URL, which is useful but has its weaknesses. I'm hopeful that further refinements will let me differentiate between (for example) search results originating from www.google.com/search? and Google Reader pages originating from www.google.com/reader/view/. It does not appear that there are any special operators (such as using the plus sign to require an exact match for a particular term), but double quotes do seem to be interpreted as a phrase search.

In any particular search, the prioritize and exclude filters help you hone your results quite quickly. The live-updating list is fast, and to my eye the fuzzy matching (however it is done) does not produce any significant number of head-scratching "false positives." I'd rather see an actual description of the search algorithm than have to figure it out on my own, but then again this is a Labs release, not a finished product.

Insert Your Own "Planet of the Apes" Joke Here

Speaking of which, as convenient as RecallMonkey is, you can never forget that Mozilla Labs tools are, ultimately, experimental. There are risks, and producing bullet-proof code is not the goal — learning is. RecallMonkey's functionality might be one of those experiments that (like the Internet) proves so useful that it quickly outgrows the lab and engulfs the world. On the other hand, it might be more like any of the more numerous experiments that escape from the lab, and wreak widespread havoc on the world ultimately being destroyed (see any number of old Sci-Fi movies for reference).

After my own tests, I definitely lean towards the "useful" outcome, but even so the present-day extension comes with some caveats. After using RecallMonkey for a few days continuously (keeping it open in a tab), I found Firefox's in-page content to be slower and highly prone to spontaneous crashes. No such trouble was found when closing RecallMonkey in between uses. I obviously cannot prove that RecallMonkey was the culprit (in part because I use about a dozen extensions — not even Mozilla Labs can guarantee that independent extensions do not interfere with each other), but it seems like the most likely source. Because the XUL UI was unaffected, page content's poor responsiveness is more likely to be due to the JavaScript engine than anything else, and RecallMonkey is a JavaScript-driven extension. Your mileage may vary.

Still, when used with restraint, RecallMonkey offers a noticeably nicer experience than the default session history interface. This is also the first Add-ons SDK extension I have tested, and I was impressed by that feature as well — enough so that I have started looking into the SDK itself.

I hope RecallMonkey is here to stay, although it desperately needs documentation of the search matching heuristics, a few more search operators, and to properly set its page background color rather than just assume we all use white. The alternative is to go back to using the History pane, or worse yet, to count on Awesomebar's unpredictable black-box matching. Neither one gives you much power to shape the search process, however, and giving users the power is what open source — and Firefox — are all about.

Click Here!