Programming the web UI

on

I wanted to clarify the point I tried to make in my blog post about Bobo and LinkedIn’s use of faceted search. I ended that post with a confusing question about faceted search framework in Lucene, and was quickly reminded by Bob Carpenter and others that Solr provides that capability. My comment was poorly made.

My comment about facets was related to programming the interface rather than to retrieval algorithms. It seems to me that a good, interactive interface for faceted browsing is every bit as complicated to build as a  good engine for finding the facets in the first place. Lately I’ve been messing around with Javascript programming, and am getting frustrated by the seemingly unnecessary complexity of building web user interfaces that are both efficient and effective.

There are undoubtedly many excellent programmers out there who can build complex web interfaces gwt, Flex, or even in unadulterated Javascript. I am not one of them. I would love to devote my creative efforts to the design of interaction, but I am not so keen on building stuff from scratch. A library such as jQuery or YUI helps somewhat, but the primitives they provide still require quite a bit of manual (i.e., error-prone) assembly.

My latest experience is trying to get a web interface implemented using the GrailsUI plugin for (yes!) Grails. It does a nice job of hiding some of the wiring required to manage YUI widgets such as dialogs and tab sets, but it relies too much on round-tripping to the server. Re-sorting a list, for example, would still require the server to rebuild the entire page in most cases. While it’s possible to optimize that by returning HTML fragments, it doesn’t seem possible to return YUI elements in them as they don’t get initialized properly because the page isn’t reloaded. Thus the best way to put together an interactive interface still seems to be to code most of it in Javascript and just pass data to it.

So my comments about a faceted search interface framework is informed by this frustration. I would like to have a high-level way to describe routine interface features without delving unnecessarily into procedural minutia, but still retain the user experience that we’ve come to expect from modern web applications. I would like to program by exception — starting with existing code and specifying what I want done differently, rather than recreating the same stuff over and over.

Do such tools exist? Can they be combined easily with existing programming languages such as Java? Do they really simplify the specification of routine interface behavior, or do they just replace one formalism with another? I found that Grails works this way on the server side, reducing the amount of code that needs to be written, while still making it possible to descend into java when appropriate. But when it comes to web user interface, I don’t think we’re there yet.

2 Comments

  1. David Huynh’s design of the Exhibit framework (http://simile-widgets.org/exhibit/) was driven by many of the concerns you’ve raised above. It aims to make faceted browsing and certain types of visualization as straightforward as images or tables in a web page.

  2. I’ve played (with partial success) with David’s timeline widget. I liked the look and feel, but it seemed to me that my use case (plotting some data that was returned by the server) was poorly supported (or at least poorly documented). For example, I couldn’t figure out how to set the date range programmatically.

    The examples you referred to look interesting, and I may play around with it some more.

Comments are closed.