Single Cell Portal
Released: March 1, 2017
This is largest, most ambitious (and complicated) project I've ever worked on. Still a Ruby on Rails app, but employing a whole range of additional technologies, such as Docker, nginx & Passenger, Google Compute Environment, and more JS widgets than I can count. Future plans will include a completely redesigned architecture employing a React.js front end, a Rails-based API + MongoDB instance deployed in Google App Engine, and an 'ingest service' to handle user-uploaded data that will leverage Google's Genomics API + Cloud Firestore for horizontally scalable ETL & search.
Released: March 17, 2015
GenePattern is a software analysis environment that allows researchers with limited computational skills to construct, run, reproduce and share bioinformatics workflows without the need to code or install complicated packages to their computer. I've been working with the GenePattern team for nearly 10 years as the web developer and "knowledge management" specialist (translation: when somebody can't figure out who to ask to do something, I'm the guy who ends up being tapped). The GenePattern website is similar to many of my other sites - a lightweight Bootstrap front-end (with more design input from DK Jang) with a series of scaffolds on the backend for CRUDing content. What set this site apart was the fact that I had already designed a Rails site for the GP team many years ago, and so we had to perform a large content migration from an existing database schema to the new implementation. A great exercise in refactoring and redeploying your own code. Luckily, since this was a project with a fair amount of lead time, I was able to deliver a much more streamlined and stable application that on the backend didn't change much in terms of the data model, which allowed for mass-migration of content in a fairly efficient manner.
Released: January 10, 2015
In the time before Facebook, Twitter, Soundcloud, etc., bands usually used their websites as giant repositories of content for their fands. Most still do, but I'm not a fan of reproducing content over and over again. The Chauncey website is simply an aggregator for all of our various endpoints where we already have content with a simple blogroll (and some home-grown endless pagination) - a one-page front end in front of a scaffold, wrapped in bootstrap.
To Love Once More
Released: November 24, 2014
Most often, necessity is the mother of invention - and toloveoncemore.com is no exception. In preparation for my band Chauncey's reunion show at the Rockwood Music Hall in December of 2014, we were frantically attempting to get our forthcoming EP pressed and delivered so we could hand them out to our fans in attendance. Predicatably, this didn't get finished in time for the show, so we needed another way for people to get access to the music without physical product. Thus was born this website - a single page representation of the album cover (many thanks to Eli Scheer for his fantastic design work) with the same html5 audio player by speakker that I used for the Circle Circle Star website.
GParc: The GenePattern Archive
Released: June 18, 2014
GParc is a small bootstrap-based front end for our public GenePattern module repository. Users can upload their own modules here, create online documentation, and browse and share their modules with other GenePattern users. This is a fairly simple app that has some fancy shenanigans going on in the background to handle uploading zipfiles to an ancient webservice that predates pretty much every web technology I know. Also, I rolled my own bottomless pagination as I couldn't find a good one that worked in Rails 4 and will_paginate. Rather proud of myself on that one.
Once again, big thanks to DK Jang for handling the front end look and feel.
Patricia Bistline: American Oil Painter
Released: April 21, 2014
About 12 years ago, the first website I ever made was for my mother. She's an oli painter/instructor and wanted a simple website to function as a gallery and informational portal for her students. The first incarnation was static html (with no CSS - all inline!) and over the years gradually grew into something more sophisticated. However, the major issue with the site was this: I had to update it every time she wanted to add a painting. It wasn't until much later that I decided I was tired or doing this and built her a fullly automated CMS in Rails + Bootstrap that truly was self-service. All she needed to do was upload an image and fill out a form and the application did the rest - auto-thumbnail generation, dynamic gallery generation, the whole bit. All it took was a few days over easter break and a LOT of hand holding in terms of teaching my mother how to use the site...
But at least I'll never have to crop another thumbnail again.
Released: January 27, 2014
My second analysis portal at the Broad, CLIME is an algorithm that partitions an input gene set of interest into distinct, evolutionarily conserved modules (ECMs), and then expands each module with genes sharing an inferred evolutionary history. What that means, I have no idea... but it sure was fun to work on.
Often we have situations where our own or affiliate labs develop an algorithm that they would like to distribute, and we are tasked with developing a system to allow users to leverage the power of said algorithm without having to bother about the intricacies of downloading, installing and maintaining the code to do so. For this, we find that using GenePattern as the analysis engine is the most effective platform. We can wrap the algorithm as a module inside GenePattern and launch "jobs" on a designated server and retrieve the results programmatically.
To acheive this, I first wrapped the CLIME algorithm (consisiting of a C++ binary and some shared data caches and library files) as a GenePattern module and installed it on a private GenePattern server inside the Broad firewall that was configured to use our LSF compute farm for scalability. I then wrote a custom Ruby REST client to upload input files and launch new jobs, check job status and download results locally to the CLIME portal. Since GenePattern handles delegation to LSF and provides a handy REST API for all necessary functions, this made the amount of coding that I needed to do comparatively small - a handful of calls was all that was needed. No need to create a queuing system - GenePattern does everything for us behind the scenes.
After that, the next major piece of functionality that was needed was the interactive HTML visualizer that parses the text output from CLIME and displays it in a manner that the user can visually comprehend. They already had a format for doing this, but the algorithm outputs PDFs along with the raw text output. What I ended up doing was converting the PDFs to PNGs on the fly via ImageMagick and then rendering the text output into a table using the same color coding algorithm from the source C++ (coverted into Ruby). I ended up using a fantastic jQuery library called panzoom for the zooming and panning functions to make the visualizer easier to use.
Project Achilles Data Portal
Released: April 26, 2013
The Project Achilles Data Portal is my first production data analysis portal that I've worked on. At the Broad Institute where I work, there are multiple data analysis portals that have been implemented using mostly Java-based technologies. However, when the decision to launch a new portal for the Project Achilles data was made, the short timescale made using the previous portal tech stack unattractive, so we opted to prototype a small, lightweight portal using Rails. I seconded on this project behind Ted Liefeld (Sr Principal Software Engineer, Cancer Program) and handled the majority of the Rails implementation while Ted handled the architetcural design of the portal, and DK Jang provided html and css templates.
This portal is unique in that it serves the majority of its static content (data and annotation files) from a mapped NFS storage volume that resides outside of the Rails root folder using Ruby's built-in send_file method. This afforded us a cheap method of data security along with "plug and play" style updates where data curators can drop new files into pre-existing directories without having to update metadata inside the portal itself. The app "searches" for content using unix-style directory globbing rather than database index searching, removing the need for a search engine gem like Thinking Sphinx.
Released: March 15, 2013
This was my first experience with Shopify, a ecommerce web framework based on the Liquid markup language. We purchased a theme (Providence, from themeforest) and then customized heavily to meet our needs. I'm particularly proud of the nav menu at the top that wraps around both sides the logo in the center without any z-index or absolute position shenanigans. Big thanks to the whole Tesselight team for all the great photos and content.
Price Hamilton Design Build
Released: May 1, 2012
An archival version of a website for Christine Price Hamilton, this time for a design-build firm that she owned. Functionally, this website is rather simple: a blog, an image/project gallery and generic html "pages", but what I'm most proud of is the front-end adaptation of a Wordpress theme from Elegant Themes (Chameleon, to be precise) that we purchased and I then adapted for use in Rails since the Wordpress installation would not meet all of our custom needs. This allowed us to prototype the site very quickly and maintain a professional look and feel at the same time.
Released: April 23, 2012
One of my more ambitious application designs to date. 15 controllers, 18 data models, and more custom functionality than I would have thought possible for an "informational" website. I made liberal use of CKEditor for content editing and used the Paperclip gem for uploading images and files through the integrated file browser. A very powerful combo that has become my standard operating procedure from now on. Thanks to DK Jang for the front end design - I handled the application design and implementation.
◦ ◦ ☆
Released: June 15, 2011