{"id":2838,"date":"2010-02-11T07:42:23","date_gmt":"2010-02-11T15:42:23","guid":{"rendered":"http:\/\/palblog.fxpal.com\/?p=2838"},"modified":"2010-02-08T11:42:50","modified_gmt":"2010-02-08T19:42:50","slug":"programming-the-web-ui","status":"publish","type":"post","link":"https:\/\/blog.fxpal.net\/?p=2838","title":{"rendered":"Programming the web UI"},"content":{"rendered":"<p>I wanted to clarify the point I tried to make in <a title=\"Finding Facets | FXPAL Blog\" href=\"http:\/\/palblog.fxpal.com\/?p=2806\" target=\"_blank\">my blog post<\/a> about Bobo and LinkedIn&#8217;s use of faceted search. I ended that post with a confusing question about faceted search framework in Lucene, and was quickly reminded by <a title=\"Comment by Bob Carpenter on Finding facets | FXPAL Blog\" href=\"http:\/\/palblog.fxpal.com\/?p=2806#comment-18294\" target=\"_blank\">Bob Carpenter<\/a> and others that Solr provides that capability. My comment was poorly made.<\/p>\n<p>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\u00a0 good engine for finding the facets in the first place. Lately I&#8217;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.<\/p>\n<p><!--more-->There are undoubtedly many excellent programmers out there who can build complex web interfaces <a title=\"Google Web Toolkit\" href=\"http:\/\/code.google.com\/webtoolkit\/\" target=\"_blank\">gwt<\/a>, <a title=\"Adobe Flex 3 | Adobe\" href=\"http:\/\/www.adobe.com\/products\/flex\/\" target=\"_blank\">Flex<\/a>, 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 <a title=\"jQuery\" href=\"http:\/\/jquery.com\/\" target=\"_blank\">jQuery<\/a> or <a title=\"YUI Library | Yahoo! Developer Network\" href=\"http:\/\/developer.yahoo.com\/yui\/\" target=\"_blank\">YUI<\/a> helps somewhat, but the primitives they provide still require quite a bit of manual (i.e., error-prone) assembly.<\/p>\n<p>My latest experience is trying to get a web interface implemented using the <a title=\"GrailsUI Plugin\" href=\"http:\/\/www.grails.org\/plugin\/grails-ui\" target=\"_blank\">GrailsUI<\/a> plugin for (yes!) <a href=\"http:\/\/www.grails.org\/\" target=\"_blank\">Grails<\/a>. 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&#8217;s possible to optimize that by returning HTML fragments, it doesn&#8217;t seem possible to return YUI elements in them as they don&#8217;t get initialized properly because the page isn&#8217;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.<\/p>\n<p>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&#8217;ve come to expect from modern web applications. I would like to program by exception &#8212; starting with existing code and specifying what I want done differently, rather than recreating the same stuff over and over.<\/p>\n<p>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&#8217;t think we&#8217;re there yet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I wanted to clarify the point I tried to make in my blog post about Bobo and LinkedIn&#8217;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. [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24],"tags":[87,169,337],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=\/wp\/v2\/posts\/2838"}],"collection":[{"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2838"}],"version-history":[{"count":5,"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=\/wp\/v2\/posts\/2838\/revisions"}],"predecessor-version":[{"id":2975,"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=\/wp\/v2\/posts\/2838\/revisions\/2975"}],"wp:attachment":[{"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.fxpal.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}