Projects, Talks, Etc.


A Node module and command line tool to calculate an exponential moving average from a stream.

If everyone would

A Twitter bot that retweets tweets containing the phrase "if everyone would". Source. Openshift for hosting. Firebase for persistance.

What's my UA?

See what your user-agent detection library really thinks! Results from three top ua detection libs:

Hosted on Openshift.

Node on the Road

In August 2014, I was a presenter and panelist when Node on the Road visited Washington, DC.

Conversations and Connections

In April 2014, I discusssed my experience co-curating Call + Response during the "Let's Make Stuff Together: Collaboration in Writing" panel at the 2014 Conversations and Connections conference.

Towards 100% Uptime with Node

I gave a talk at the December 2013 Nova Node meetup called "Towards 100% Uptime with Node.js". It explained how to keep Node apps running all the time by sensibly handling uncaught exceptions, using domains to contain errors, managing processes with the cluster module, and gracefully terminating TCP connections when necessary.

The Little Schemer

In the spring of 2013, I read the classic functional programming book The Little Schemer. I did the exercises and learned a lot from them -- highly recommended!

Zero to Node

I gave a talk at the November 2012 Nova Node meetup titled Zero to Node: A Case Study of Deploying Node in Production. It was about my experience building a text-to-speech service powered by Node.js during my first month at SpanishDict, covering topics such as:

  • Node.js basics.
  • How to structure an Express app.
  • Learning to think asynchronously, using events, streams, and pipes.
  • Writing a Chef cookbook to deploy a Node app to Amazon Web Services.
  • Monitoring an application for high performance.


Visularity is a web app for visualizing semantic similarity that I wrote as a demo for a talk I gave at the May 2012 DC Python Meetup. When provided with data representing a large corpus of documents (for example, Wikipedia articles), Visularity will cluster words that appear in the corpus by how close they are in meaning. This is accomplished through a technique called latent semantic analysis, implemented via Gensim, a Python topic modelling library. For clustering, I used scipy and scikit-learn, and for visualization, I used d3.js. To make it all work in realtime, I used hookbox.

An Introduction to Gensim

I gave a talk at the May 2012 DC Python meetup titled An Introduction to Gensim: Topic Modelling for Humans. It discussed Gensim, a Python library, a free Python framework for topic modelling and semantic similarity using latent semantic analysis/indexing and other statistical techniques as efficiently (computer-wise) and painlessly (human-wise) as possible.

In Spring 2012, I developed a web app (fancy name for a website with some additional functionality) called that presents a new story every day, drawn automagically from literary journals across the internet. (Contact me if you'd like your journal to be included.) I used Django, third-party Django apps including Zinnia and South, and a lot of JQuery. I retired the site a few years ago, but the source is available on github.


During the first half of 2011, I worked on a web app that tracks literary reading series in cities. It's called Readsr and was created with Django and various third-party apps and libraries. I retired the site a few years ago.

Other Web Projects

At any given time, I'm probably working on several web development projects. The best way to see what I'm up to is visit my github profile.

2011 DC Young Artist Grant

I was awarded a 2011 DC Young Artist Grant. I am immensely grateful to the DC Commission on the Arts and Humanities for this honor. My grant activities included:

  • Leading student writing workshops at 826DC to further the development of DC's young writers.

  • Giving readings of my work for the DC community, including at the lowercase, a monthly reading series at Big Bear Cafe in DC's Bloomingdale neighborhood that is sponsored by 826DC.

  • Submitting my stories to a number of writing contests at respected literary journals.

  • Attending the Association of Writing Programs 2011 conference in Washington, DC.

  • Attending a writer's retreat at Doe Branch Ink near Marshall, North Carolina, in spring 2011.

Call + Response

Call + Response is an art show pairing writers and artists. My friend Kira and I startaed it and co-curated the first three installments, which were shown at Hamiltonian Art Gallery in Washington, DC.

  1. The first Call + Response ran from January 23 to February 13, 2010.
  2. The second, Call + Response: Textures, ran from April 16 to April 28, 2011.
  3. The third Call + Response ran from June 2-16, 2012.

I am not involved anymore, but Kira continues to create awesome new installments of Call + Response!


826DC is a youth writing center that I helped found. At various times during its existence I've been a board member (when it was initially incorporated as Capitol Letters Writing Center), maintained its website, thought of products and written copy for the Museum of Unnatural History (including all the copy for the Species Identification Chart pictured below), and led and TAed many workshops, including some of the ones that led to Get Used to the Seats and The Way We See It. Most recently, in November 2010, I led a workshop series for middle schoolers called Caught in the Act, and I served as Secretary of the Board up through February 2011.

Museum of Unnatural History Species Identification Flowchart


The Beatles' Yesterday is one of the most covered songs in history. In college, I mashed up a bunch of the covers to produce this agglomeration.