Portfolio

The Atlantic’s mobile website

Feb 2013

One of the more challenging projects I’ve had the opportunity to work on, from a UI perspective, was when I was called on to help relaunch The Atlantic’s mobile presence. I worked closely with The Atlantic’s head web designer to build a mobile site that was optimized for fast load time.

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, Summer 2012
Skills used
HTML + JS, Python + Django, Facebook API, BSDAPI

In the lead-up to the 2012 election I was contracted to build theoccupiedamendment.org, a website for promoting constitutional amendment H. J. Res 90—or “The OCCUPIED Amendment” (Outlawing Corporate Cash Undermining the Public Interest in our Elections and Democracy)—with two goals: to build popular support for the amendment, and to allow people interested in campaign-finance issues to subscribe to updates from the Deutch campaign. To that end the website hosts a socially-integrated “petition” that allowed visitors to sign and share the petition using their facebook accounts (see screenshot 2 below). To date there have been over 26,000 sign-ups to the petition.

Later I was asked to design and build a new campaign website for the Deutch campaign. Both tedforcongress.com and theoccupiedamendment.org were built in Django, though the latter allowed for full customization using the django 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. Though I cannot share the entire library, I have included as a sample the C++ file that implements an LCS algorithm to generate the delta operations.

Not included in this example, but part of my work on this project, was a compiled php extension I wrote that allows our web application to use the XyDiff API.

Ubiquity XForms, Contractor for webBackplane

Jul 2010 – Oct 2010
Skills used
Javascript

Design Editor, The Rutgers Review

Dec 2007
Skills used
Adobe Creative Suite

The Rutgers Review is a student-run arts and opinions journal at Rutgers University for which I managed layout and design. Though not web-based, this example spread demonstrates my ability to use the Adobe Creative suite, and particularly Adobe Indesign for print layout.

Shift requester, Rutgers University Campus Computing Facilities

Dec 2007
Skills used
HTML / JS, PHP, MySQL

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
Perl

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.