|
WELCOME!
Welcome to my portfolio page. Here you can learn more about projects that I have
completed for my employers, classes, and own amusement. Feel free to e-mail me (my name at gmail)
if you have any questions.
View My Resume: docx pdf
View my github
Last Updated: 5/2024.
EMPLOYMENT
EXPERIENCES
Teamable (rebranded from TopFunnel) (February 2018 - Present)
Early engineer at recruiting automation startup with focus on backend, automation, and data.
Automation includes email finding, email sending, candidate sourcing, ATS syncing, candidate
enrichment, inbound applicants, system troubleshooting. Use LLMs to classify replies, summarize candidate fits for jobs, and script away annoying small inefficiencies. Primary contributor
toward reducing vendor costs for AWS, logs, monitoring, and APIs by 25% in a month. Ruby,
Rails, Postgres, BigQuery, SQL, LLMs, KNN similarity, OpenSearch, AWS, redis, Looker, JavaScript, ATS APIs, mapbox, chrome extensions, git, Python.
|
|
Freelancing (various) (August 2016 - Present)
Built a Ruby port of a universal API that supports many services, a Chrome extension to track browser activity, a portal frontend for managing teams and integration, scripts to update image paths, and improving a backend's integration with Shopify and BigCommerce storefronts. JS, Ruby, Rails, IronWorker, Postgres, MongoDB, HTML5, CSS3, OAuth2 clients (FE and BE).
|
|
Flexport (December 2015 - July 2016)
Helped build a platform for global trade. Added timezones support and built two factor authentication.
JS, ReactJS, Ruby, Rails, Postgres, git, webpack.
|
|
Lifehacker (May 2014 - December 2015)
I built Flix Plus for Lifehacker's readers to allow customizing Netflix by making new and existing Neflix userscripts available via a Chrome extension. It was the first extension to take advantage of Netflix's HTML5 player and the first to hide spoilers and remove post-play.
Code written in JavaScript, Python, node.js, CSS, Chrome extension API.
|
|
PacketTrap Networks / Quest Software (August 2007 - September 2011)
PacketTrap Networks was an early stage startup that created Windows-based tools for managing networks. They were acquired by Quest Software (QSFT) in December 2009. (Later (Summer 2012), Quest Software was purchased by Dell.)
My work at PacketTrap includes:
- Created customizable reporting/dashboard/webservice frameworks for serialized non-relational (i.e. NOSQL) data
- Developing Cisco configuration, syslog, and switch port mapper tools in C# for the company's pt360 Tool Suite and Perspective platform
- Creation of a scripting framework for downloading/uploading configuration, enabling SNMP, and other such tasks for Cisco, HP, Pix, and Linux (where applicable). I also created a common interface for using existing telnet and SSH libraries.
- Developing wizards to effectively enable SNMP and deploy agents within heterogeneous environments
- Writing code to automatically enable netflow/jflow/sflow for a device given an SNMP or telnet/SSH credential
- Writing/maintaining scripts to automate builds that work within a patching infrastructure
Code written in C#, ASP.NET in a Windows environment.
|
|
Digital Anarchy (contractor, August 2006 - May 2007)
While I worked there, Digital Anarchy created After Effects, Final Cut Pro, and Photoshop plug-ins for broadcast designers, 2D animators, and professional photographers.
I worked some to adapt the Data Animator product to create an initial release of Data Animator Lite. Work includes understanding and improving the maintainability of an outsourced codebase, stripping out non-Lite features, fixing bugs, adding some new features (random data generation and data morphing), and creating a new math-related chart type.
I also worked some to create a new wxWidgets GUI for Knoll Light Factory for Photoshop.
Code written in C++ using wxWidgets and After Effects and Photoshop plug-in architectures in a Windows/Mac environment.
|
|
BitTorrent, Inc. (contractor, March 2006-August 2006)
I joined BitTorrent, Inc as they were beginning to host for-pay content that could be downloaded using the BitTorrent protocol. Specifically, I developed a component that provided an internal interface for disk-related tasks (i.e. blacklisting/unblacklisting, uploading/changing content, setting/changing torrent metadata, etc.)
Code written in Python as an XML-RPC web service that used Twisted.
|
|
Stottler Henke Associates (intern, Summer 2004)
Stottler Henke Associates is a consulting company that specializes in projects that make use of artificial intelligence. I worked there as an intern.
My project at SHAI was to help build a decision support agent for the Navy. This involved writing path editing code (i.e. allow a user to draw a curve, sample points from it, and then allow splitting/merging/deleting curves and setting properties.) I also developed some heuristics related to their decision support system and implemented them as a finite state machine using their SimBionic product.
Code written in Java with Swing.
|
|
Analytical Mechanics Associates, Inc. (2002-2004)
AMA is a NASA contractor in Hampton, VA.
At AMA, we built an advanced engineering environment to help NASA decide which
space shuttle designs they should fund. Each space shuttle design is expressed as
a ~2 MB XML file filled with a component hierarchy and tens of thousands of
measurements.
The challenge in this project from a software perspective was writing plug-ins and
creating libraries to get the COTS tool (Phoenix Integration ModelCenter) to handle
models that are more complicated than the software was designed for.
I conceived of and developed a linking library that allows model links to be
logged, created via scripts, and changed as the model runs. I also conceived of/developed a
program to analyze each of our ModelCenter models and determine which dependencies are relevant
when we make changes to our XML file. This had a huge impact on the project, since we
were able to remove cruft from the XML document while minimizing its impact on
members of our distributed team. Also, during my first six weeks on the job (and this was my first post-college position), I successfully did most of the programming for a set of tools to automatically generate an initial XML file from existing datafiles and Excel-exported CSV files.
Since AMA is a contracting company, I often worked simultaneously on multiple projects. Highlights of other work include building a prototype for an OpenGL tool that allows
user-in-the-loop extrapolating of multidimensional datasets and creating an Excel Add-In (GASolver) that uses genetic algorithms to find optimal solutions for complex multivariate problems.
Most code was written in Java and C++.
|
|
University of Wisconsin-Extension Local
Government Center (1999-2002)
I wrote a software package for the University of Wisconsin-Extension called
Graphing Revenues, Expenditures, And Taxes (G.R.E.A.T.). The software provides
convenient access to revenue, expenditure, property value, and property tax data
for every city, town, village, and county in Wisconsin since 1987 by
generating charts in Excel. The software is used to educate local officials about
public finance.
Some of the program's features include:
- User can compare a municipality against groups of similar
municipalities, create customized calculations, and import updated
data
- Updates data, calculations, and comparison groups without losing user-defined
data
- Uses aggregations to integrate revenues/expenditures and property
value/property tax databases
- Program and database validated extensively
One thing that is unusual about this program is that it is very complete in terms of code maintainability, developer/customer documentation, thinking through use cases, a clean setup experience, data validation, etc.
When I spoke to my boss recently (Spring 2005), she remarked that the person who helps
her integrate the latest database with the program is very impressed with it and
even offered to maintain the software (which he normally avoids like the
plague) because everything is so well-organized. My boss has also heard positive feedback from each of the project's maintainers hired over the years. Click on the following link to
view the G.R.E.A.T. user documentation (and get a better idea of what the software is like).
More details...
|
|
JSM Tele-Page, Inc. (1991-2001, Dec 2004-June 2005)
JSM Tele-Page is a Wisconsin-based telecommunications company, which happens to be
owned by my parents. I wrote several programs to help manage its paging system and internal operations.
This software:
- Nightly checks the status of a couple hundred towers to find
problems before customers do
- Logs, monitors, and searches paging traffic
- Sends text messages to pagers via a modem, a network server, a web site, or
e-mail. This product (JSM JPage) is used internally to send half of the system's
traffic and is sold to customers.
- Semi-automatically creates invoices from the paging terminal database
I did most of this work in middle school, high school, and college. It taught me a lot about the importance of having an adaptive (i.e. don't just strictly follow some already established methodology) software development process and helped me to develop and exercise the kind of strong work ethic that one gets by thinking like an owner (since I was working closely with my parents).
Also, I learned the value of writing software that is easy to maintain (at least in business contexts where it makes sense), since I worked with some pieces of code for over a ten-year span.
|
|
SELECTED PROJECTS
MuteTab and Chromium tab-muting API (Fall 2010-February 2013, 2015-2016)
I created a Chrome extension to help users find which tab is making a noise in their browser. I also helped design/build a tab muting extension API in Chromium to support the extension. Extension was featured on the front page of Reddit, TechCrunch, Slashdot, Lifehacker, and Gizmodo; over 500,000 installations.
Extension written in JavaScript using Chrome extension API. API changes written in C++.
|
MuteTab
|
BART Backtracker (September 2014)
At TechCrunch SF hackathon (and a little time afterward to fix things up), I built a mobile-friendly HTML5 website that tells you how far you can backtrack within BART to get the best seat while not missing your train.
Uses node.js, BART real-time API, Bootstrap.
|
(No picture yet)
BART Backtracker |
hnuser (March-September 2014)
I am making use of Algolia's hnsearch API (which came out this year) to explore all of a user's past comments and stories on Hacker News and to track their karma over time and the breakdown between each kind. Code separated out into small npm modules (hnuserdownload, hnuserstats).
Uses node.js, express, jade, nvd3 (charts)
|
(No picture yet)
hnuser |
mute.fm (June 2012 - November 2013)
I built software that automatically mutes or pauses your background music when you play a video on desktop systems.
Featured on Lifehacker.
Written in C# and JavaScript using Awesomium.
|
mute.fm |
MMO Spacewar (April 2012)
When MMO Asteroids was released as a response to an April Fools joke and as a demo project for Firebase, I noted in a Hacker News thread that since the game did not have asteroids, it seemed more like Spacewar. Over the following week, I made a fork of the project to behave more like Spacewar. Through this, I also started forming a general open source library to handle game instances for HTML5/JavaScript games.
Written in JavaScript using Firebase as a database.
|
(No picture yet)
MMO Spacewar |
Splashback-like game (Summer 2010)
I created an iPhone version of a game I saw on Digg a few years back called Splashback.
Written in Objective C.
|
(No picture yet)
Source on github
|
Content-Based Routing (Spring
2005)
With Eric Hill and Mindy Preston, I implemented
an application-layer framework that efficiently
routes streaming XML-like traffic based on its content and user subscriptions. You can find our project writeup here; I wrote most of the value-based forwarder code and the initial version of the subscriber. This project is an implementation of a paper coauthored by our networking professor. (Update: in contemporary terms, this can be thought of as a simple implementation of Storm.) Written with C++, pthreads, Berkeley sockets, and XML on a Linux machine.
|
(No picture yet) |
Extended Channel Film Plug-in for PBRT (Spring/Summer
2005)
I have written a plug-in for Stanford Graphics' Physically Based Ray Tracer that allows writing depth, surface normals, surface parameterizations, and world coordinates to OpenEXR files. This has been made available to the PBRT community and can be found (with source) here. This started out as a portion of a project for my rendering class in the spring, but I rewrote it (in a cleaner, more extensible way) over the summer. Written in C++ with OpenEXR on both in both Linux and Windows.
|
(No picture yet)
|
Pac-Man-like Game (Spring 2004)
Over the period 2003-04, I built a few
2D games to try my hand at game design and understanding how to make a polished
game. I created a Tetris clone, a Pac-Man like game, and a two-player tile puzzle
game. My Pac-Man-like game features basic 2D collision detection, finite state
machines, and A* path-finding. The game uses AI for not only the ghosts, but for
Pac-Man as well. (The reason this is possible is that the game features two
Pac-Men racing to get the most coins before time runs out.) Written in C++ with OpenGL on a Windows machine.
More
details...
|
Download It (EXE, 680
KB)
|
Flocking Simulation (Spring
2002)
For the second project in my animation class, I
implemented Craig Reynolds' flocking simulation. The
simulation allows a group of objects to travel together without centralized
control. I wrote an OpenGL program to fine-tune the algorithm and then created a
plug-in for the algorithm in Maya. This software was used to animate fleeing rats
in the short animation Gertie, Interrupted. Written in C++ with OpenGL on a Windows machine.
Click on the below link to read the official documentation for this
software.
More
details...
|
Download It
(EXE, 230 KB)
|
Gertie, Interrupted (Spring
2002)
This is a three-minute animation that my group (Michael Freytag, Rachel Heck, Thien
Tran, and I) created as a final project in my computer animation class. The film
features Gertie the Dinosaur, the first character created primarily for the purpose
of animation. The goal of this project was for each group member to design a
technical piece and to integrate them into the animation pipeline. I wrote a Maya
plug-in to animate the rats as they escape the crushed house. I also modeled the
mountains and laid out the houses and trees that made up the world.
If you click on the link below, it will take you to the project website. If you
have problems watching the movie, you may need to install the DivX codec. (Get it here.)
More
details...
|
Watch It
(AVI, 63 MB)
|
Motion Capture Viewer (Spring
2002)
In my computer animation class, Chris Mizerak and I created a program to view and
edit motion capture data. The program allows displaying multiple animations,
editing the motion's path, and includes visuals such as shadows, a reflective
floor, and a spotlight that follows the motion. Click on the link below for a more
thorough list of features, accompanied with screenshots.
Note that to make use of this program, you will
need to find one or more BVH files, since the ones that we tested the program with were proprietary. I found one here, although I have not had a chance to see if this particular file parses okay (unfortunately, the program uses a large window and doesn't allow resizing it, so I can't run it on my laptop to test it.) Written in C++ and OpenGL on a Windows machine.
More
details...
|
Download It
(EXE, 220 KB)
|
Rules-Driven Simulation (Spring
2001)
I built this program with Michael Tesch in a Natural Language Processing and
Virtual Reality course. The idea is that semantic triples
(which originate from a natural language parser, the execution of prior rules, or
sensing the scene) can be used to control the movement of 3D meshes.
The program supports some general Boolean (and, or, not) and
geometric (follow, flee, spin, collides, etc.) relations
and includes a collection of OBJ meshes. If the program
was extended further, it could potentially be used to create simple rules-driven
games where rules can be changed on the fly via natural language
expressions. Written in cross-platform Linux/Solaris/Windows C++ with OpenGL mostly on a Linux machine.
|
|
Town Simulation (Fall
2000)
This was the final project in my introductory computer graphics class. The goal was
to simulate a large town and to bring it to life (kind of like a poor man's Grand
Theft Auto III). The professor wrote his own solution to the assignment that we
could build off of, but Bob Marinier and I decided to write our own from scratch. I
designed a system to manage the location, size, and the display of each object in
the world. One of the challenges in this project was that if you draw the entire
world, it results in a really low frame rate. We used techniques such as drawing
only cars, buildings, and trees that are near the camera, back-face culling, and
pre-computing cars' paths to speed up the program. Written in C++ and OpenGL on a Windows machine.
|
|
|