For the theory requirement of my Master’s degree, I took Topics in Computational Biology: Analysis of High Throughput Sequencing Data with Michael Brudno. Since my last encounter with biology was in high school, I spent most of the time for this course reading Wikipedia and other sites to fill in my knowledge gaps before I could even make sense of the assigned papers. It was actually refreshing to delve into a field so different from Computer Science. I was especially intrigued by the idea of DNA as the programming language of life (though I don’t think I’d want to program DNA until there is something at least as abstract as an assembly language and the hardware to automatically run it).
As my final project for the course, I built a web-based genome browser called the Savant Web Client which is based on the recently released Savant Desktop Genome Browser built by Marc Fiume and Vanessa Williams of the Computational Biology Lab at University of Toronto.
The goal of my final project was to show that a web-based genome browser could look just as good and perform just as fast as a desktop based genome browser. I did this by replicating the main functionality of the Savant desktop genome browser in the Savant Web Client. Also, the Savant team didn’t have anyone concentrating on the HCI aspects of Savant, so I also took time to tweak and add to the user interface as I rebuilt it for the web. My project write-up for the Savant Web Client explains everything in more detail and explains how to download and use the GPL’ed source code.
What I enjoyed most about creating the Savant Web Client, and the real reason I chose to do it, was the chance to play with some of the newest web technologies. In fact, my choice of APIs restricted me to targeting only the Google Chrome web browser. The Savant Web Client is powered by web sockets, the canvas element, ProcessingJS, jQuery, YUI, and the client/server jWebSocket libraries. Only the use of web sockets requires the client to run on Google Chrome. The jWebSocket libraries do seem to support methods of simulating web sockets on other browsers though I didn’t attempt to use them.
In my opinion, the coolest parts of the Savant Web Client are the login screen and the live collaboration. On the login screen, I put together a wicked 3D double helix visualization by combining ProcessingJS and JS3D. I definitely spent more time on it than I should have given the project but I’ve always had a tendency to over-engineer splash screens and intro pages.
The live collaboration of the Savant Web Client is a product of the publish/subscribe model of web socket communication I used. Currently, a Savant Web Client server only gives clients access to one genome and interval track. So everyone who connects is looking at the same genome and interval track and every time one client pans or zooms, every other client sees their views pan and zoom as well. I didn’t build in any chat or other collaborative tools but you can easily imagine the client being expanded to support a more comprehensive form of collaborative live genome analysis (something none of the other genome browsers support as far as I know).
You can read more about the Savant Web Client and download the source if you view the Savant Web Client project writeup.