Work

Note: Some clients have a strict non-disclosure agreement in place, thereby preventing any sharing of information in more detail.

Reservations by Parkmobile

A service for reserving paid parking spots for short-term, long-term, and event parking. It once housed a full application, including white-label UI, REST API for third-party integration, and payment processor. Later it downsized the responsibilities to just managing inventory (parking spot availability for given duration) and became the inventory management system for a global SOA.

Prior to joining the global SOA, partners included notable names as the National Football League for Super Bowl XLIX.

Reservations platform screenshot

Platform

  • Ruby 2.2
  • Rails 3.x
  • Phusion Passenger
  • Percona DB (MySQL-compliant store with improved distributive properties)
  • 6+ Ubuntu servers on AWS EC2, sitting behind AWS Elastic Load Balancer with TLS termination

Features

  • Repeatable deployment system via Capistrano, Git, and Passenger with instant rollback
  • Over 70% automated test coverage
  • High availability spread over 6+ servers
  • Minimal level of PCI accreditation due to tokenization strategy with payment processor

Obstacles

  • Automated tests largely data-driven, resulting in edge-cases being discovered regularly
  • Full automated test suite took as few as 45 minutes
  • Memory leaks with unknown source, requiring restarting web server and application on each server as often as every hour, in a rolling fashion

Food Court by Campus Special (later Chegg Deals)

A now-defunct application, playing middle-man for online food orders. In its prime, Food Court competed in the order relaying space with companies such as GrubHub, EatStreet, and Eat24, averaging over $100,000 in transactions every week.

Food Court
                screenshot

Campus Special's main business involved selling advertising space to businesses in collegiate areas, even expanding out to advertising for apartment complexes. Some of these advertisements were posted to the Food Court website in "Deals" and "Apartments" sections, respectively.

Platform

  • Bootstrap UI elements
  • LAMP stack on AWS EC2 (classic)
  • PHP 5.3.x
  • Ubuntu (later Amazon Linux)
  • Memcached via EC2 (later, via AWS Elasicache)
  • HAProxy (later AWS Elastic Load Balancer) with TLS termination

Features

  • Custom, built-in search engine using Porter-Stemmer algorithm
  • Higher availability data from SQL via Memcache query caching
  • Facebook single sign-on for both customers and restauranteurs
  • Separate administration panels and permissions for restauranteurs and system administrators
  • Automatic translation of purchase, commission, and refund deltas into archived NACHA format for remittance
  • Stored and displayed complex menu sizes and available customizations (pizza: left-half, right-half, whole)
  • Stored and displayed complex combo specials (e.g., $10 off any appetizer when ordering entrée after 10pm)
  • Promo code system, with configurable discount coming from Campus Special or restauranteur, max numer of uses, and expiration
Food Court
                screenshot

Obstacles

  • No templating system, intermixing controller-type logic into the view
  • No job queue system, only cron with a max-execution timeout. Often resulted in double-execution of jobs and problems with data consistency
  • Over 2 million lines of undocumented PHP code
  • Rampant and unpredictable use of super globals reaching from a deeply-nested function's scope into undocumented global variables
  • No automated tests or manual testing script
  • No reasonable way to emulate production on local development, requiring a git commit in order to test correctness of fix

ETL by Armada

Veritix logo

Pipe data from Veritix ticketing system (via their XML API) into Salesforce for analysis of ticket sales. Includes custom mapping of data across multiple Salesforce objects, atomic updates, and logging of successes and failures for later review.

Platform

  • Heroku / Dokku (docs written for both)
  • Ruby
  • OAuth2.0
  • SOQL (Salesforce)

Features

  • Instructions for hosting on Heroku or Dokku
  • Real-time streaming of errors to Heroku / Dokku logging framework
  • Log entries summarizing successes and failures on each poll
  • Adapter pattern for pairing Salesforce with Veritix environments, using the exact same data transformations

Obstacles

  • OAuth2.0 refresh token workflow requires a separate web application for capturing an initial token
  • OAuth token eventually expires, so for long-running programs it needs to be refreshed periodically

[undisclosed]

Chrome extension

A browser extension commissioned to scrape data from hardware inventory system A, query hardware inventory system B with that data, and inject the content from B back into the web interface of A.

Platform

  • Chrome (v45+)
  • Internet Explorer 10

Features

  • Modular JavaScript with swappable adapters for platform-specific implementations
  • Polyfills for backporting ES6 features, such as Promises
  • Build system in GulpJS in order to streamline the following:
    • Minify and concatenate CSS
    • Minify and concatenate JavaScript
    • Swap in platform-specific implementations for use with shared code
    • Collect and structure Chrome extension artifacts into a ZIP archive, for easy upload to the Chrome Webstore
    • Collect and structure IE extension artifacts for deployment to internal CDN

Obstacles

  • A necessary CORS header was missing from the HTTP API response, making in-browser communication impossible without using a browser extension. (more info)

About

I am a developer with a focus on openness: open source, open information, open honesty. Being a polyglot, I choose the right tool for the job. Often this leads me toward Ruby, JavaScript, open web standards, and one of many GNU/Linux operating systems.

Communication is difficult, no matter the organization. That super-secret project you work on that your coworker isn't allowed to know about doesn't encourage collaboration; neither does the cryptic wall of code without so much as a comment for documentation. These may seem necessary, but in my experience, they mark an unsustainable, “good enough” internal standard.

Audio cord

My career goal is to squash that “good enough” standard, facilitating an open flow of information within an organization from point A to point B. I look for ways to streamline communication and to make the original intent of the code, documentation, or whatever else I work with be indisputably obvious.

Would you like to join me in this effort? Connect with me and let's see what impact we can have.

Also, check out some of my awesome work.

Contact

For most purposes, you can reach me at .

Elements

Text

This is bold and this is strong. This is italic and this is emphasized. This is superscript text and this is subscript text. This is underlined and this is code: for (;;) { ... }. Finally, this is a link.


Heading Level 2

Heading Level 3

Heading Level 4

Heading Level 5
Heading Level 6

Blockquote

Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.

Preformatted

i = 0;

while (!deck.isInOrder()) {
    print 'Iteration ' + i;
    deck.shuffle();
    i++;
}

print 'It took ' + i + ' iterations to sort the deck.';

Lists

Unordered

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Alternate

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Ordered

  1. Dolor pulvinar etiam.
  2. Etiam vel felis viverra.
  3. Felis enim feugiat.
  4. Dolor pulvinar etiam.
  5. Etiam vel felis lorem.
  6. Felis enim et feugiat.

Icons

Actions

Table

Default

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Alternate

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Buttons

  • Disabled
  • Disabled

Form