Maps for “The Tragedy of the American Military”

Dec 2014
Skills used
d3, PostGIS, QGIS

Maps for “The Case for Reparations”

Jun 2014
Skills used
Tilemill, Leaflet, PostGIS, QGIS

Autograph, The Atlantic

Sep 2011 – present
Skills used
Python + Django, MongoDB, Java

In September of 2011 The Atlantic launched a new sister-site—The Atlantic Cities—aimed at exploring urban issues and stories about life in cities for the people who research, manage, and live in them. One of the editorial goals of Cities is to place an emphasis on telling stories using a variety of media, from charts and maps to photos and video. To that end I was asked to revisit a prototype of a chart-building tool I had built and demoed several months prior for turning excel spreadsheets into interactive charts using the Highcharts javascript library.

That fall I turned my prototype into “Autograph,” a Django application for managing datasets, performing basic regression analysis, and building customized charts. While Autograph itself is not open-source several of its components are, including py4j-highcharts, a Java application that renders and rasterizes charts server-side for building previews and thumbnails. py4j-highcharts uses py4j, a library for bridging python and Java applications, to be able to take advantage of Java libraries such as Rhino and Batik.

Ted Deutch for Congress website, contract

Dec 2011
Skills used
HTML + JS, Python + Django, Facebook API, BSDAPI

In the lead-up to the 2012 election I was contracted to design and build a new campaign website for Ted Deutch's re-election campaign in Florida’s 21st congressional district. The result, tedforcongress.com, is built in Django and allows campaign staff to update the site content, add pages, and even edit the site’s templates from the admin.

Bloom, The National Foreign Language Center

Dec 2009 – Sep 2010
Skills used
HTML + JS, XForms, PHP, Zend Framework, IBM DB2, XQuery

From December of 2009 to September 2010 I was the lead programmer on Bloom, a web-based CMS designed to meet the National Foreign Language Center's need for a flexible and modular authoring environment for creating language-related activities.

At the time I left, Bloom provided for the entry and storage of authentic source materials in 46 languages. These source materials, or "assets," are solicited from consultants across the globe who are charged with finding and uploading high-quality text and audio content. These "assets" are then sent through a rigorous QA process before eventually being used to create activities for language instruction and language proficiency assessment.

XyDiff C++ library and php_xydiff

Feb 2010
Skills used
C, C++

One need that arose in the planning stages of Bloom was the ability to version content and display annotated changes, since some projects had been using Microsoft Word's “track changes” feature for this purpose. Most of our data was structured, and thus naturally stored in xml. In the process of researching structured difference algorithms, I came across the C++ library XyDiff, which generates, and can then apply, "delta" files for two xml documents.

Unfortunately, the software had not been maintained since 2004, so I had to track down the occasional null pointer and fix any other bugs that were encountered in testing. XyDiff also lacked the ability to difference text nodes on a character-by-character basis. To this end, I implement something akin to diff that adds an additional set of deltas for adding, deleting, and replacing substrings within a DOMText node. I have included as a sample the C++ file that implements an LCS algorithm to generate the delta operations. The full repository can be viewed on github.

As part of my work with XyDiff, I also created a compiled php extension which bridges php's DOM classes with XyDiff's shared library. This project, php_xydiff, can also be viewed on github.

Ubiquity XForms, Contractor for webBackplane

Jul 2010 – Oct 2010
Skills used

Shift requester, Rutgers University Campus Computing Facilities

Dec 2007
Skills used

While serving as the student systems programmer for the Rutgers University Campus Computing Facilities, I developed and saw to completion a new calendar interface for lab managers and employees to view and request coverage for shifts. The desire to have an interface that could clearly display the information while still remaining aesthetically pleasing was a significant design challenge. I had to create a shift sorting display algorithm that met the specific layout demands of the managerial staff. This required me to borrow on my theoretical understanding of algorithms and data structures while still remaining grounded in the practicalities of writing readable code in PHP 4.

Mail-latency check Nagios plugin for Rutgers University

Nov 2007
Skills used

This is a simple Nagios plugin written in Perl that measures the difference between email delivery and arrival times, logs the results, outputs a message to STDOUT, and ends with the appropriate exit code. It was the first non-freelance project I had worked on.