Savant Web Client

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.

Warcraft II Map Classification

Warcraft II GruntI started working with a new research group in the Cognitive Computing Lab under Ashwin Ram this semester. The project I am working on is concentrated on using Case Based Reasoning techniques to easily develop AI opponents in video games. We are using Wargus, an open-source mod which allows you to play Warcraft 2 using the open-source Stratagus game engine, as the platform for our CBR research.

My contribution to the project was to develop a map classification system for Warcraft 2 maps which would provide additional features for the CBR engine. The system is a joint project between my Pattern Recognition class professor Jim Rehg and the CCL researchers Santi Ontañón and Manish Mehta. It was also a good starter project for getting more familiar with the architecture of their system since I plan on continuing to work with the group for my senior research project.

Continue reading “Warcraft II Map Classification”

NetRisk Community

I wanted to provide an update on the web-based Risk game, NetRisk, that I developed during the summer of my freshmen year because a lot has been happening surrounding NetRisk recently. After I first released NetRisk I actually started getting some feedback from people who had downloaded it within a couple of months. A couple people submitted bug fixes, feature additions, and ideas and some people asked for help in setting up their own NetRisk installation. I managed to release two updated versions of NetRisk incorporating much of the feedback. It was very much a positive experience with the open source world but I never imagined it would come as far as it has in the last year. For my part, I haven’t touched the NetRisk code in a bit over a year as I have kept myself more than busy with school and other projects but a great group of guys has taken over the development of NetRisk.

Late in 2005, one of these guys contacted me and told me he was already working on some additions to NetRisk. Since he was doing more work on the project than I was I gave him my full support and made him an administrator on the NetRisk SourceForge project. Just two months ago he and his friends released NetRisk 1.9.5 and they have a very lively community around the project at the official NetRisk site, They have managed to implement almost all of the features I had planned for after my initial release and are continuing to improve the game to fit the needs of the new community that has grown up around the game.

Google Bookmarks Extension Mod

Every since I got a laptop I have felt the need for some synchronization tool to manage all my files and settings between my laptop and desktop. Though I have yet to find a good tool for synchronizing my files I did manage to find a near perfect bookmark synchronization tool. Rahul Jonna’s Firefox Google Bookmarks Menu extension is the tool that met almost all my needs. As an extension it is cross-platform and it is built into the browser. It works in a similar way to the default browser bookmarking system but it is always synchronized with a stable back-end server, Google Bookmarks, which provides a web interface for accessing the bookmarks in case you do not have the extension installed.

My only qualm with the extension was that it did not work exactly like the normal Firefox bookmarks whose functions I have come to depend on. So I decided to try my hand at extension writing and modify Jonna’s work to more closely imitate Firefox bookmarks. I ended up implementing additional keyboard shortcuts, Bookmark All Tabs, Open in Tabs and I fixed a bug or two I found with some of the existing functionality. The extension as I changed it works in exactly the same way as the Firefox bookmarks but with different shortcuts, slower execution when bookmarking many tabs and it has a separate menu labeled GBookmarks on the menubar. In using it I have found the separate menu to be useful as I still use the Firefox bookmarks for making temporary bookmarks I don’t want to synchronize.

Works with:   firefox_icon.png   Firefox 1.5 – 2.0 ALL
Install my extension modification:

extension_install.png   Firefox Google Bookmarks Menu 0.2.1

For more details on the original extension by Rahul Jonna see the official Firefox Google Bookmarks Menu page on the Firefox Add-ons site.

My extension no longer works since the Google bookmarking interface has changed and I no longer use Google bookmarks. Please use Rahul Jonna’s updated extension at the link above.

But wait, now comes the funny part, about a week after I finished this little mod, Google, who hosts the back-end for the mod, released their own very comprehensive solution to browser synchronization as a whole called Google Browser Sync. Not only does it synchronize your Firefox bookmarks menu but also your history, cookies and passwords plus it can restore your browsing sessions effectively replacing the SessionSaver extension. Talk about being outdone… but personally I still use my modification as I don’t feel the need to synchronize my history or cookies and as far as I can tell there is no web interface for accessing the bookmarks Google Browser Sync stores so there is no way to access your bookmarks if you don’t have the extension installed.


While co-oping at Georgia-Pacific last summer I found myself quite bored after work. During my first two semesters at Georgia Tech I think I became accustomed to the grueling pace of classes and having it stop so suddenly with the arrival of summer left me feeling bored. My brain was itching to do interesting and new things but it was my first semester as a co-op so they didn’t give me very challenging work. So I did what every good programmer does when bored; I picked up an O’Reilly book to learn a new programming language. I chose PHP because I had heard a lot of buzz about it and I had seen some really cool online applications built on PHP. Since I had the whole summer to learn PHP I decided I might as well come up with a reasonably large project to cut my teeth on and really help me grasp this new language. I brainstormed some ideas with a friend of mine and we agreed that a web-based version of the Risk board game would be awesome. We always enjoyed playing it but had problems finding other people to play with us and finding the large blocks of time necessary to finish a game in one sitting. So why not use the internet to enable anyone to play Risk anytime they wanted?

Continue reading “NetRisk”