interaction design :: user experience :: mobile tech
Right after graduating with my bioinformatics 'degree' from Duke, I started working at the UCSF Computer Graphics Lab (CGL). The lab is one of the few at UCSF that do bioinformatics work - from visualization of large sets of genetic data, to modeling of molecular complexes. Most of my work at the Graphics Lab was on the Chimera Molecular Modeling System, a highly modular, highly extensible visualization package. Working in the lab was a very unique experience for me, as a relatively inexperienced programmer right out of my undergraduate degree; I was given full freedom to choose projects of interest to me, and to see them from conception to deployment.
All of the following were implemented in Python using the Tkinter UI toolkit, unless otherwise noted.
The Demo extension to Chimera enables users to create their own presentations that leverage the modeling capabilities of Chimera. A Demo consists of a series of explanatory panels that can be navigated through with Next and Back buttons. Each panel corresponds to a particular representation and orientation of the molecule(s) displayed in the main graphics screen; these representations are generated by the user with Chimera's native command language. Implementing this feature required creating an XML-based file format, and associated parsing modules. Users indicated that writing out a file by hand is too tedious, so I subsequently worked on a GUI tool that enables users to easily create and modify a Demo.
I also created a bug reporting infrastructure that automatically generates a report when the user encounters an exception, and gives them an opportunity to supply more information about what they were doing at the time of the error. Users can also voluntarily supply contact information, and even to attach a file if necessary. It was implemented by using Python's http libraries to post a message to a dedicated CGI script on the web This 'feature' led to a huge increase in the amount of feedback we received, and has ultimately led to a much more stable piece of software.
This extension enables users to create a movie of whatever occurs in Chimera's graphics screen (sample movie; 10M file, could take a minute or two to download), using a simple graphical interface. It worked by capturing a series of frames, then utilizing an integrated third party package to encode the frames into a variety of video formats. Incorporation of the third-party software was a challenge because it necessitated a framework for inter-process communication between the encoder and Chimera, in order to provide the user appropriate feedback as to the functioning of the encoder. I also utilized the model-view-controller paradigm to coordinate the encoder, the graphical interface, and a command-line interface. Movie Recorder was very gratefully received by our user population, and we have heard back from several people who have used the tool to make publication-quality movies for electronic scientific journals.
While the Chimera package supports a wide range of functionality, there are still many kinds of analyses that it cannot do. A vast body of data exists in web-accessible databases that contain results of these analyses. In order to enable our users to visualize this data, I created a communication framework to enable a web browser to 'talk' to Chimera through a dedicated MIME-type. This feature was developed in collaboration with another lab, that hosts the ModBase database of predicted structural models. Clicking on a link from a search result page causes Chimera to render specified data files in a desired representation. In implementing this feature, I learned a great deal about the intricacies of achieving cross-platform and cross-browser support, and even created a browser configuration wizard to automate the task of setting up a user's web browser to work with Chimera. The API to access the web data functionality is well documented and available as part of the Chimera documentation package. This capability has been used with other databases as well.