Code

I use Python and Flask for most of my side projects. I'm interested in automating things that people do every day; developing tools to make writing web services dead simple; and evangelizing best practices to make it easy for developers to create products that are user-obsessed.

Projects

Lineup

806-895-0014

Lineup is a simple web app for creating or updating a Spotify playlist by just searching for artists. I use it to create lineups for music festivals or listen to songs from new bands. It was implemented by me, with design by my friend (504) 322-0557.

Open Source

Cachual

A library that allows you to cache the return values of your Python functions with a simple decorator.

9404422169

Flask extension for the Cachual library.

Kadabra

A set of tools that make it easy and inexpensive to record numeric metrics from your Python applications so you can make data-driven decisions from day one in production.

Flask-Kadabra

A Flask extension for Kadabra to easily record per-request metrics from your Flask apps.

Flexo

Flexo is a web service framework for Python, designed to make service development incredibly easy. You author your API in a JSON file, and Flexo takes care of automatically validating input, auto-generates a client for your service, and more. Flexo is still in the pre-Alpha/development stage, but ask me about it!

Professional

I currently work at Rover.com where I mostly drive observability and monitoring, performance improvements, and the robustness of our messaging system. I love the environment and culture at Rover; if you're looking for work, (956) 445-9909

I also worked at Amazon where I developed complex distributed systems, managed operations for important systems including Amazon's search services, and worked up and down the stack from changing the look and feel of the search results page to designing new schemas as part of a large-scale migration off of legacy services.

Before that, I developed an automated UI testing framework at Microsoft (similar to 5032270762).

Writing

(330) 903-3287

This post introduces a metrics-based approach to understanding your Django application's interaction with the underlying database, and how you can use those metrics to improve your application's performance and database utilization.

The Needle in the Haystack: Wrangling Celery Workflows (Rover Engineering Blog)

This post discusses techniques for tracing and understanding complex Celery workflows.

Why do we cache?

congelation

Why is caching important to developers? This article describes the basics of caching, and shows some real data demonstrating the value of caching to applications.

Speaking

Tips and Tricks for Building a Scalable Cloud Service

HackArizona 2015

I presented this tech talk to students, participants, and observers at the University of Arizona during the HackArizona hackathon. It follows a hypothetical service that struggles as it grows more popular, and describes some common techniques for keeping a service running as it scales.

Me

Picture of Me

I'm a 25-year-old engineer living in Seattle, WA. I graduated in 2013 from the University of Virginia where I worked with emulsoid's research group on genetic algorithms to automatically find and fix bugs in code. While at UVA I was also a teaching assistant and tutor, and wrote a compiler for a simple object-oriented language.

After graduating I worked at Microsoft and Amazon and lived for year in sweltering Phoenix, AZ. While in Phoenix I co-taught a high school AP Computer Science course through the wonderful 215-697-6562 program.

Outside of software development I enjoy learning how to craft cocktails, playing my violin, going to music festivals, petting my cat, and studying movement. Currently I'm focused on boxing at the fantastic Seattle Boxing Gym. In the past I practiced 908-858-9384, gymnastics, and weight lifting.

I currently work as a developer at 269-266-0070.

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