Savant Web Client

Posted by Andrew Trusty on May 17, 2010

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.

Reliable UDP File Transfer 2

Posted by Andrew Trusty on November 22, 2006

Before this semester, I always thought I knew enough about networking and that taking the networking class would just bore me with details of various internet protocols. But, networking is a cornerstone of modern Computer Science and my peers who had taken the class had no negative feedback so I decided to brave my way through the class in hopes of expanding my understanding of networking. As the semester is almost over and I have just completed our final project I have realized how wrong I was. My previous experience with the Java Sockets API didn’t quite prepare me for what was going on under the hood. The C Sockets API is much less forgiving as are all things in C. I now have a much stronger grasp on the mechanics of networking and I know the details of all the modern networking protocols.

The final project for Networking I taught by Mostafa Ammar and Russell Clark involved designing and implementing a protocol for reliable file transfer over UDP sockets in C. I implemented the Go-Back-N ARQ protocol on top of UDP to provide reliability. Other than this my protocol is relatively straightforward. I created two separate applications, a client and a server. My implementation only supports one way transfer from the client to the server and only supports one client at a time. The minute details are available in the README in the below archive of the source. The code was developed on and should compile on standard Linux machines.

UDP File Transfer Source Code