Try a secret new search engine


Well, I’m not sure about secret, but it sure is mysterious. showed up in my visitor logs, and visiting the site it looks like rather a nifty visual search interface. It’s got thumbnails of the top results, and automatically generated keywords sorted by type down the left side:


The interesting part is that most of the site is returning 404 or authorization errors, which makes me wonder if they might still be in stealth mode? Unfortunately email messages to their public address bounce, they’ve got a private domain registration so I can get any contact details from that, and Google searches don’t get me any more information, so I can’t check with them before mentioning it here.

They’re using snap for the thumbnails, and I’m not sure how they’re pulling out the tags. The keywords definitely look automatically generated, rather than user driven. I’d love to know more about their work, so if anyone has more details or a way to contact them, email me or add a comment.

Ratchetsoft responds

Joe Labbe of Ratchetsoft sent a very thoughtful reply to the previous article, here’s an extract that makes a good point:

The bottom line is the semantic problem becomes a bit more
manageable when you break it down into its two base components: access and
meaning. At RatchetSoft, I think we’ve gone a long way in solving the access
issue by creating a user-focused method for accessing content by leveraging
established accessibility standards (MSAA and MUIA).

To your point, the meaning issue is a bit more challenging. On that front, we
shift the semantic coding responsibility to the entity that actually reaps the
benefit of supplying the semantic metadata. So, if you are a user that wants to
add new features to existing application screens, you have a vested interest in
supplying metadata about those screens so they can be processed by external
services. If you are a publisher who has a financial interest in exposing data
in new ways to increase consumption of data, you have a strong motivation to semantically
coding your information.

That fairer matching between the person who puts in the work to mark the semantic information and who benefits feels like the key to making progress.

Can the semantic web evolve from the primordial soup of screen-scraping?


The promise of the semantic web is that it will allow your computer to understand the data on a web page, so you can search, analyze and display it in different forms. The top-down approach is to ask web-site creators to add information about the data on a page. I can’t see this ever working, it just takes too much time for almost no reward to the publisher.

The only other two alternatives are the status quo where data remains locked in silos or some method of understanding it without help from the publisher.

A generic term for reconstituting the underlying data from a user interface is screen-scraping, from the days when legacy data stores had to be converted by capturing their terminal output and parsing the text. Modern screen-scraping is a lot trickier now that user interfaces are more complex since there’s far more uninteresting visual presentation information that has to be waded through to get to the data you’re after.

In theory, screen-scraping gives you access to any data a person can see. In practice, it’s tricky and time-consuming to write a reliable and complete scraper because of the complexity and changeability of user interfaces. To produce the end-goal of an open, semantic web where data flows seamlessly from service to service, every application and site would need a dedicated scraper, and it’s hard to see where the engineering resources to do that would come from.

Where it does get interesting is that there could be a ratchet effect if a particular screen-scraping service became popular. Other sites might want to benefit from the extra users or features that it offered, and so start to conform to the general layout, or particular cues in the mark-up, that it uses to parse its supported sites. In turn, those might evolve towards de-facto standards, moving towards the end-goal of the top-down approach but with incremental benefits at every stage for the actors involved. This seems more feasible than the unrealistic expectation that people will expend effort on unproven standards in the eventual hope of seeing somebody do something with them.

Talking of ratchets leads me to a very neat piece of software called Ratchet-X. Though they never mention the words anywhere, they’re a platform for building screen-scrapers for both desktop and web apps. They have tools to help parse both Windows interfaces and HTML, and quite a few pre-built plugins for popular services like Salesforce. Screen-scrapers are defined using XML to specify the location and meaning of data within an interface, which holds out the promise that non-technical users could create their own for applications they use. This could be a big step in the evolution of scrapers.

I’m aware of how tricky writing a good scraper can be from my work parsing search results pages for Google Hot Keys, but I’m impressed by the work Ratchet have done to build a platform and SDK, rather than just a closed set of tools. I’ll be digging into it more deeply and hopefully chatting to the developers about how they see this moving forward. As always, stay tuned.

How to handle file dragging in a Firefox web app


One of the things I miss most when moving from a desktop app to the web is the ability to drag and drop documents between programs. The default file open dialog within a form is definitely not an adequate substitute. The best you can manage with a plain web app is dragging elements within the same page.

To add the full functionality to a web application, you need to install some client-side code. In Firefox, the easiest way to do this is with an extension, though a signed JAR file containing the script is also a possibility. I haven’t tried to do it in IE yet, so that will have to wait for another post.

Here’s an example extension, with full source code and a test page demonstrating how to use it. To try it out:

  • Install draganddrop.xpi in Firefox
  • Load testpage.html
  • Try dragging some files onto the different text areas on the page

You should see an alert pop up with the file path and the element’s text when you do this. The extension adds a new event type to FireFox; "PeteDragDropEvent". When a file is dragged onto a web page, it sets the element underneath the mouse’s ‘dragdropfilepath’ attribute, and then fires the event on that element. If the element has called addEventListener for that event previously, then its defined handler function will be called, and the script can do what it needs to.

The main drawback is that you only get access to the local file path for the dragged object, and there’s not much an external web script can do with that. I’ll cover the options you have to do something interesting, like uploading a file to a server, in a future post.

This page was invaluable when I was developing the extension, it has a great discussion with examples of the mechanics of Firefox’s drag and drop events. One thing to watch out for if you reuse this extension for your own projects is that you don’t want to open up dragging-and-dropping for all pages. That would be a possible security problem if malicious sites lured users into dragging onto them. Instead you should do some URL white-listing to make sure only trusted locations are allowed, being careful to properly parse the address so that spoofing with @, etc, won’t fool the test.

Take a walk on the client-side


I’ve been following Mozilla’s Prism launch with a lot of interest. One comment that caught my eye was from  Ryan Stewart, who believes "that the desktop isn’t dead, and that a hybrid approach is a successful way to go". There’s a lot of opportunities for really useful services that need a client-side component, and that’s key to my strategy. It’s the reason I’ve worked on Java Applets, Firefox and Internet Explorer extensions and now an Outlook plugin.

Web-based apps have a lot of advantages over traditional desktop apps:
No install needed! It’s an incredible advantage to be able to go to a URL and instantly start using the service. The installation process is a big barrier to people even trying your app, since they’ve been trained to know it takes minutes, involves answering questions they may not know the answer to, and worrying about their configuration.
Complete safety. There’s no worries about viruses or spyware, the only information it has access to is what you type in.
Use anywhere. You can use the app from any machine in the world, regardless of OS or configuration.
Up-to-date and comprehensive information. Since the information you’re accessing is pulled live from a server, it can be updated instantly, along with the application itself.
Easy to develop. You have a lot fewer variables to worry about with a server-based app. You know exactly what hardware and software the main code is running on. Keeping the output HTML cross-platform is a couple of orders-of-magnitude easier than doing the same for executable code.

There are some obstacles that I think will prevent pure web-based services from taking over the app world:
A limiting sandbox. To achieve security, web-pages can only pull data from their own servers, and can’t use any of the information already on the user’s machine, or any other web-services the user is signed onto, without an explicit agreement with the provider. This effectively stovepipes all information, and is the reason I’ve entered my list of friends on at least a dozen different services. I don’t see this changing, because it would require a majority of the browser vendors to implement a more subtle security policy than the current blanket same-domain-policy. Loosening security like that doesn’t seem likely.
Poor UI. Google has done an astonishing job with their mail interface, but for power users the experience still doesn’t match Outlook or Apple Mail. Running within a web-browser makes it tough to offer a rich interface, and you can’t use the standard OS metaphors. This is where Prism is interesting, because XUL actually offers some of the UI that HTML is missing, like sliders.

What I think is really interesting is the idea of combining the strengths of the two approaches. To start off, there needs to be a pure web interface to build up enough interest and trust for people to download a client extension that offers more features. That extension can then offer some tools to the app, like cross-domain access and native UI, but still keeping the bulk of the application running on the server. That keeps the big advantages of SAAS, such as ease of development, and online access to information, but allows a whole range of applications that aren’t possible now.

Funhouse Photo User Count
: 1,975 total, 77 active.

Event Connector User Count: 89 total, 1 active.

Slinky companies and public transport

Yesterday, Brad posted an article talking about bubble times in Boulder, and quoted a great line from Bill Perry about how they spawned ‘slinky companies’ that "aren’t very useful but they are fun to watch as they tumble down the stairs".

Rick Segal had a post about why he took the train to work, and how people-watching there was a great reality check to a lot of the grand technology ideas he was presented with.

And via Execupundit, I came across a column discussing whether people were really dissatisfied with their jobs, or just liked to gripe and fantasize. One employee who’d been involved in two start-ups that didn’t take off said "Most dreams aren’t market researched."

These all seemed to speak to the tough balance between keeping your feet on the ground and your eyes on the stars. As Tom Evlin’s tagline goes, "Nothing great has ever been accomplished without irrational exuberance." I’ve been wrestling with how to avoid creating a slinky with technology that sounds neat enough to be funded, but will never amount to anything. To do that, I’ve focused on solving a painful problem, and validating both the widespread existence of the problem, and that people like my solution.

I’ve turned my ideas into concrete services, and got them into the wild as quickly as possible. Google Hot Keys has proved that it’s possible to robustly extract data from screen-scraping within both Firefox and IE, but its slow take-up suggests there isn’t a massive demand for a swankier search interface. Defrag Connector shows that being able to connect with friends before a conference is really popular, but the lack of interest so far in Event Connector from conference promoters I’ve contacted shows me it won’t just sell itself. Funhouse Photo’s lack of viral growth tells me that I need to provide a compelling reason for people to contact their friends about the app, and not just rely on offering them tools to do so.

I really believe in all of these projects, but I want to know how to take them forward by testing them against the real world. All my career, I’ve avoided grand projects that take years before they show results. I’ve been lucky enough that all of the dozen or so major applications I’ve worked on have shipped, none were cancelled. Part of that is down to my choice of working on services that have tangible benefits to users, and can be prototyped and iteratively tested against that user need from an early stage. Whether it’s formal market research, watching people on trains, or just releasing an early version and seeing what happens, you have to test against reality.

I’m happy to take the risk of failing, there’s a lot of factors I can’t control. What I can control is the risk of creating something useless!

Funhouse Photo User Count: 1,746 total, 70 active. Much the same as before, I haven’t made any changes yet.

Event Connector User Count: 73 total, 9 active. Still no conference takeup. I did experiment with a post to PodCamp Boston’s forum to see if I could reach guests directly, but I think the only way to get good distribution is through the organizers.

The way forward for search


Most of the focus on improving search is around the algorithms for producing the results. Even this article asking Is Search Broken? mentions that the holy grail is producing the right result with a single click.

I think that’s rubbish, for a few big reasons:

  • Most of my searches aren’t for one perfect page. There’s a lot of different types of searches. Usually there’s a set of pages that will each either answer my question fully on their own, will answer the question when read together, or will help me refine my search.
  • Search terms don’t provide enough information. There’s plenty of techniques to infer extra information from things known about the user, but they’re all guesses. In my experience, they can really get in the way since they can’t read minds, and block out results they think I’m not interested in. With the inherent fuzziness of search results, what’s really needed is a better way for me to do the final winnowing, interactively.
  • I don’t always know what I’m looking for! Often, I’m using search results as a way to learn more about a general area, or get an idea of what’s out there so I can focus my thinking. Since I don’t have a specific goal in mind, there is no single right answer.

Machine-powered algorithms are necessary, but once they’re good enough, they start giving you diminishing returns. What’s missing is support for the final user-powered step of rapidly sorting and eyeballing those search results. There’s a workflow that we all go through when searching, that involves clicking on a link, scrolling down through the page, clicking back, hunting for the next interesting link in the results. It makes no sense that there’s no good tools to speed up this process.

Google Hot Keys
is a start for addressing this, but there’s so much more that could be done. I want a visual representation of my search results that I can truly browse through, like an OS X dock full of pages. I want to be able to eliminate a page, and have all similar pages disappear from my results. I want context menus. I want my search results page to be easily accessible, even visible, as I browse through pages I’ve found. I want to be able to focus on pages that are in my browser history, or are linked to ones in my history, since I’ve implicitly voted those as trustworthy to me. I want to know which pages people clicked on most, and spent most time on.

Funhouse Photo User Count: 731 total, 86 active. Much the same story as yesterday, I want to make some changes to freshen it up, but I won’t have time for at least a few days.

The joy of localization


One of the under-appreciated trends of the last few years is the internationalization of the web. Looking through today’s logs for GoogleHotKeys, I see India, Australia, Brazil, Portugal, Russia, Poland, the Czech Republic, Romania, Hungary, and a few more top-level-domains I don’t even recognize. In total, these usually outnumber the plain-old US hits.

The localization in GHK is rudimentary, I don’t even have the help translated yet, but it does recognize and work with around 80 different localized Google search sites (including the Dominican Republic in the next release, thanks Omar). But it’s still doubled my user-base!

Now I just need to figure out how to properly translate and encode the right characters to support Chinese…

Funhouse Photo User Count: 306, 114 active. This is pretty much in line with growth over the last few days, with the number of active users remaining steady at around 40% (since the active count is against the previous day’s total).

GoogleHotKeys version 1.01 released


I’ve just uploaded the latest version of GoogleHotKeys for both IE and Firefox. The main site links to the site for Firefox, and that may take a day or two to be updated. You can download it directly here until then. Changes include:

  • Pressing N takes you to the next page of search results
  • I’ve disabled the arrow keys from moving you between highlighting terms, since that sometimes was unhelpful
  • Fixed a few assorted bugs, such as the IE version forgetting which link was selected when you returned to a results page, and FF not correctly ignoring the Desktop search link in results pages.

It went very smoothly, apart from the final step of persuading WIX to create an upgrade installer for the IE addon. I assumed that this would just involve updating the version number, but it turned out to be a bit of a rabbit hole. I ended up cheating, and changing the installer GUID, which will result in some duplicate files on disk for upgraders, and a duplicate entry in add/remove programs, but seems to work.

Facebook app statistics


One of the things I really like about having an app on Facebook is that I can easily see how many people are using it. This may sound trivial, but for my Firefox and IE extensions, I’m stuck trying to estimate usage based on downloads. Now I’m on the main Firefox add-on site, I can get stats on downloads from there, but they’re a bit opaque:

It’s good to see I’m approaching 4000 downloads in the past few weeks, but until recently that total had stayed at 867 for a long time. And that per-week total has always shown 1. So I’m not convinced they’re very up-to-date, though I’m pretty sure they aren’t over-counting downloads, just slow in showing them.

As an aside, these stats indicate that focusing my message really paid off. PeteSearch had only around 200 downloads after several weeks, on the same site.

For my IE plugin, I have to go off my web site logs. I’ve used some of the built-in traffic-monitoring tools, but they all seem geared towards overall site statistics rather than the particular measure I want: "How many people with agents you recognize (eg not robots) downloaded this file over a particular period of time? How many since the beginning of time, and were they repeat customers (ie upgrading)?"

What I end up doing is just looking at the raw latest visitors log, and getting a qualitative impression of downloads. What I see is that Firefox users outnumber IE by at least ten to one. There are several possible explanations for this:

  • My promotion’s been a lot more effective in the Firefox market.
  • People who are early-adopters interested in something like GoogleHotKeys are also more likely to have adopted Firefox.
  • IE users don’t have much of an add-on selection, so they’re unused to installing extensions, and are probably more wary of the security risks.

Even once you know the download totals, unless you build in an unpopular phoning-home capability, it’s hard to know how many people are actually using it. I have a help link added to every Google page that users are free to click on, so that is at least an existence proof for usage; if I see it showing up, I know somebody’s gone ahead and installed it.

Facebook gives both the developer and the rest of the world a simple and up-to-date view of how many people are using an app. This should help me understand what’s working and what isn’t, and learn from my customers very quickly. It’s also a good motivating score-card!

To provide some edutainment, I’ll include the current number of Funhouse Photo users in every post, along with a short explanation of anything that’s happened to explain them. Here’s the first report:

5 users – This includes my sister! I’ve sent out links to a few people to test it, but it’s not in the directory, and I haven’t tried to promote it in any other ways yet, since there’s still some bugs to iron out.