RefDB user interfaces

One of the major obstacles that prevented RefDB's world domination :-) was the lack of a graphical user interface (GUI). While command-line tools clearly have an edge in terms of automating tasks or in terms of doing really snazzy tricks, a simple GUI is considered the hallmark of a user-friendly program. This is considered the way to attract new users, but how to get there?

Obviously you can use a top-down approach using one of the popular toolkits, like GTK or QT. You start by creating a shiny interface, and add code until your interface will do what it is supposed to do. The mode of interaction dictates the implementation. Data storage is most likely done through direct access to a database engine. But how easy is it to integrate this program into say, an XML editor? Most likely not at all. Instead, you'll work with two windows, exchanging data one at a time through the clipboard. If you want to support batch operations, you'll most likely have to integrate some sort of interpreter into your program, thus further adding bloat.
Another appealing solution is to move entirely to the web. Toolkits like Ruby on Rails make it extremely easy to add application logic to a simple database interface. This would certainly allow to build a great web-based reference and notes management tool, but then again, what about batch operation, automation, and integration into editors or document processors?
When I designed RefDB, I figured there must be a way to eat your cake and still have it. The solution was to break the application down into building blocks. Most of the application logic is implemented in refdbd, which will talk through a port to programs implemented basically in any language, running basically on any operating system. The primary clients are refdba, refdbc, and refdbd. All of them can run in batch mode, which makes them easy to integrate into scripts, and in an interactive mode. Later I added a Perl module which natively implements the client/server dialog and offers a simple interface for Perl programmers. But how does this make a GUI?
There are quite a few possibilities, and only a few have been used so far. The first approach was to let the clients double as CGI applications. While this approach worked and resulted in the first RefDB web interface, it was also hard to maintain and a bit kludgy. The current web interface was contributed by Tom Bartolucci. It calls refdba and refdbc to do the dirt work and uses PHP to provide a functional interface.
Another option (unfortunately no one went down this path so far) is to write an application in Perl, using the RefDB Perl module, and add an interface using either the GTK or the TK interface. This would make a nice and portable GUI application.
From my point of view, the most convincing approach so far is refdb-mode, originally developed by Michael Smith. Emacs is an excellent SGML (think PSGML) and XML (think nxml-mode) editor, and it seems more than logical to integrate reference and note management (which also involves text editing) and document processing into the same tool. refdb-mode does just this. It also uses the command-line tools like refdba, refdbc, and refdbnd in the background. You can edit your document and seamlessly run queries to find reference that you want to cite. You can put one or more citations into the kill ring, and yank them into your document. refdb-mode offers the correct syntax for both DocBook and TEI. When you're done writing you can transform the document. refdb-mode will create an appropriate bibliography. Finally you can invoke an appropriate viewer to admire the results.
If you're interested, watch two Flash demos that show off a couple of the tricks that refdb-mode has up its sleeves.


Noch keine Kommentare

Mein Kommentar

Dieser Artikel ist geschlossen. Keine Kommentare mehr möglich.