Familiar with:
C, C++, Perl, Python, Ruby, PHP, Javascript, Java, HTML/XHTML, CSS, Vim script, Bourne shell, Flickr API, Twitter API, Foursquare API
Can help with:
C#, Haskell, Tcl/Tk, LISP, Scheme, m4, Drupal, Apache, Evernote API, Google Spreadsheet API, Yahoo! Pipes, Prolog, x86 assembly language, PVM, SQL-DMO, SQL Server SMO, Exchange CDOEXM, Exchange EMS

Work Experience

Jan 2011 to present: Inc. - Software Engineer
Worked on systems software for monitoring and analyzing data from refrigeration, cogeneration, and heating systems at a number of university and corporate campuses. Work was primarily to support and enhance an existing Ruby and Java code base. Projects included:
Enhanced and deployed nightly backup scripts to pull data from a dozen remote databases to backup storage.
Tag filtering:
Added a module to the SCADA system to clamp or ignore out-of-range data from sensors and instruments.
GUI enhancements:
Added an option to the Java GUI to fill in missing timeseries data when exporting data to CSV format.
Market DAQ:
Wrote a data acquisition package to retrieve pricing, load, and demand data from PJM, New York, and New England ISOs. The software package stores the data in timeseries tables for the Java GUI, checks daily to ensure the data is complete, and calculates various statistics. (rolling averages, standard deviation, VIX, differences between day-ahead prediction and real-time data) The code was written in Ruby and JRuby.
Feb 2010: Freelance - Flickr/Blog mashup
Used Yahoo Pipes to construct a mashup of a blog RSS feed and thumbnail images from a Flickr photostream for a client.
Feb 1995 to Aug 2009: Syncsort Inc. - Software Engineer
Developed and maintained an enterprise backup software package at SyncSort. This software package ran under UNIX and Linux, Windows 2008/2003/2000/NT, and Novell Netware. The code was written mostly in C but with some C++ and C# modules. Projects were in the following areas:
Job/task control modules:
Wrote modules to sequence backup jobs and tasks across multiple clients and servers. Coordinated access to and optimized usage of backup devices while keeping within user-configured resource limits. Investigated and implemented several ways to increase backup concurrency to improve performance.
Microsoft Exchange support:
Used the Exchange backup API to support bulk-level Exchange database backup and restore. Originally wrote the code for Exchange 4.0 and updated it to work with Exchange 5.0, 5.5, 2000, 2003, and 2007. In Exchange 2000 and 2003, used CDOEXM to enumerate and manage storage groups and stores. In Exchange 2007, used PowerShell EMS (Exchange Management Shell) to enumerate and manage storage groups and stores. Also used Exchange MAPI (Messaging API) to support brick-level (folder and message-level) Exchange backup and restore.
SQL Server support:
Used Transact SQL and SQL Server VDI (Virtual Device Interface) to support SQL Server database backup and restore. Originally wrote the code for SQL Server 6.5 and updated it to work with SQL Server 7.0, 2000, 2005, and 2008. Used SQL-DMO to enumerate and manage databases and tables in SQL Server 7.0, 2000, and 2005. In SQL Server 2008, used SQL SMO (Server Management Objects) to enumerate and manage databases and tables.
Sharepoint 2001 support:
Implemented a COM interface that Sharepoint will invoke to transfer data to our backup module.
Windows registry support:
Used registry API to backup and restore the Windows registry.
Mar 2008 to Dec 2015: TwitVim Twitter client
Wrote a Twitter client that runs in the Vim editor. Added support for timeline display and interaction, Unicode, popular URL shorteners (e.g., TinyURL, UrlBorg, SnipURL), conversation threading, retweeting, hashtags, and lists. Added support for http I/O via cURL and the Perl, Python, Ruby, or Tcl interfaces in Vim. Added support for OAuth logins.
Project page
Source code
Feb 2011 to Feb 2016: Plain Square Open Source Project
This webapp is a successor to 4sqNoGPS. It is a lightweight Foursquare client for mobile web browsers and is intended to replace the Foursquare mobile website. Plain Square supports both geolocation, using device GPS and/or cellular/wi-fi position, and direct coordinate entry. Like 4sqNoGPS, Plain Square speeds up many operations by making the most common action single-click and takes the user through as few screens as possible. Plain Square uses OAuth version 2 to log in to Foursquare to avoid having to store user passwords. Plain Square supports version 2 of the Foursquare API. It is written in Python and designed for hosting on Google App Engine.
Source code
Sep 2010 to Jan 2011: 4sqNoGPS Open Source Project
This webapp is a Foursquare client for older phones that do not have GPS. It surpasses the feature set in Foursquare's own mobile website and allows manual input of coordinates. Input is optimized for handsets without full keyboards by allowing entry of coordinates using only digits. 4sqNoGPS expedites the check-in process by making the default action single-click and takes the user through as few screens as possible for all other actions. 4sqNoGPS uses OAuth to log in to Foursquare to avoid storing user passwords. It is written in Python and is designed to be hosted on Google App Engine.
Source code
1993 to Present: Perl Scripting experience
Scripted in Perl starting with Perl 4.0 in 1993 thru Perl 5.10 at present. Used Perl mostly after hours on a hobbyist basis but also sometimes at work for file management and text processing tasks.
10 Million Photos Flickr group stats:
Wrote a set of Perl scripts to generate weekly and overall stats for the Flickr 10 Million Photos group. These scripts store data in a local SQL database and only query Flickr incrementally on each run to keep Flickr API usage to a minimum. Uses Flickr API and SQLite. Published the code at:
PHP experience (3 years)
  • Limpidity webcomic site: Entire website was coded in PHP. In particular, comic strip navigation logic (links to next, previous, first, and last comic strips) was implemented in PHP.
  • Mobile notebook webapp: PHP-based webapp that allows the user to read, write, and search notes on a mobile phone. Notes were stored in a SQLite database and the PHP code generated XHTML-MP output for mobile browsers.
May 1993 to Dec 1994: Research group computer programmer
Developed, documented, and maintained a parallel software system to compute high dimensional integrals rapidly by sampling at Sobol points. This system was used for the purpose of valuing mortgage securities. Worked as part of a research group within the Columbia University Department of Computer Science. Used C and the PVM library.
Sep 1992 to Dec 1994: Columbia University - Teaching Assistant
Graded homework assignments, helped students with subject matter, and proctored examinations.


Fall 2004 to Fall 2006
IT courses at Capella University, including Wireless Web Design, Graphics and Multimedia, System Development, and Project Management.
Fall 1991 to Dec 1994
Bachelor of Science program, majoring in Computer Science, at the Columbia University School of Engineering and Applied Science. GPA: 3.8