About Me

Anyone who knows me would tell you that I have a knack for creative innovation— I've always been driven to build cool stuff with a passion for improving both the process and the result. Past work and interests have exposed me to a broad spectrum of technologies and concepts in the realm of computer science and software development.

When I'm not in front of a computer screen, I like to spend my time doing outdoor activities like running, hiking, swimming, and skateboarding. I also enjoy cooking vegetarian meals, listening to podcasts, and discovering new music.

Skills & Knowledge

Languages and Platforms

I'm most comfortable on Linux/Unix/Darwin environments with LAMP and Javascript-based stacks.

Recent Languages

Past Languages

Concepts

Strongly familiar

Still learning

Personal Work

My personal projects include a wide variety of subjects that interest me or problems that I wanted to solve. Much of my personal work surrounds data and data processing. Anything from processing data from my car's on-board computer to scraping and analyzing data online. Here are a few examples of things I've done/do in my spare time.

Open Source Work

This section documents some of the major open source contributions I've made. For a more in-depth look, please visit my GitHub page.

Osmosis Star

Osmosis is a web scraping library I created for NodeJS. I created it to fill the need for a fast, versatile, and production-ready web scraping library with a dead-simple and highly composable API.

Motivation

This project was created with the intention of becoming the web scraping library for node. My process for the development of this project begins by brainstorming a definitive answer for the way things should work, rather than simply writing code to make things work.

Experience

Being my first open source project, I learned a lot while developing Osmosis. Very early on I learned how absolutely necessary unit testing is for maintaining the stability of any code base. To better ensure that no regressions are made in the future, I've written comprehensive unit tests for every feature in Osmosis.

Osmosis also helped me learn more about Git and the Git work flow, particularly the importance of having a sane Git model for every repository. During the early development of Osmosis, I switched to git-flow, which streamlined all aspects of the development cycle and helps to keep Osmosis in a sane, maintainable environment.

Libxmljs Star

Libxmljs is a project that provides native NodeJS bindings to libxml2, the popular XML/HTML parsing library.

Motivation

This project is used by Osmosis for fast and lightweight XML/HTML document parsing. Because Osmosis depends on it, I've come to be a major contributor maintaining, developing, and debugging this library.

Experience

In addition to learning a little bit more about how to maintain the quality and stability of open source code, contributing to this project has resulted in a deeper knowledge of NodeJS and V8 internals. Writing a native module in C++ has given me more insight into things like memory management and garbage collection.

For example, my first few contributions fixed many long-standing memory leak problems. The memory leaks were very noticeable and the existing memory management solution wasn't sufficient.

Additionally, I've contributed many new libxmljs API feature, helped to manage and fix any issues that have arisen, review and merge pull requests, and maintain portability across platforms, including the support of pre-built binaries for Windows users.

These days I'm the primary maintainer of the project. I've been working on a complete rewrite of the library, which includes features like:

  • Backwards compatible API abstractions rewritten in Typescript
  • Auto-generated Typescript definitions
  • Auto-generated bindings (using SWIG)
  • Auto-generated documentation (using jsdoc)
  • Support for multi-threaded parsing

Libxmljs-dom Star

Libxmljs-dom is a DOM wrapper I created for the libxmljs library.

Motivation

This project was created to enable a browser-like interaction with web pages using libxmljs objects. It's used by Osmosis for document parsing and searching as well as the ability to run embedded javascript code found on web pages.

The benefit of this project over other javascript DOM implementations is that it's based on native bindings and wrappers around native libxml objects. This makes document parsing, searching, and manipulation significantly faster than pure JS implementations. It allows interacting with enormous numbers of web documents with native speed, low overhead, and minimal resource consumption.

Experience

I've been told that creating a DOM implementation seems a bit ambitious. While that may be true, I knew the benefits of wrapping libxmljs, so I decided to go for it anyways.

Writing a DOM wrapper implementation for libxmljs has not only benefitted Osmosis, but has also given me a much deeper knowledge of the DOM API standards.

css2xpath Star

css2xpath is a javascript library I created to allow converting CSS selectors into XPath selectors.

Motivation

This project was created for Osmosis and libxmljs-dom to give them the ability to use CSS selectors with Libxmljs. Libxmljs uses libxml, which only uses XPath selectors for node selection.

The idea is not just to allow conversion of standard CSS selectors to valid XPath selectors. There are two important additional features that this library implements.

First, css2xpath implements common CSS selector extensions, such as those used by jQuery. Second, css2xpath allows combining CSS and XPath selectors in the same expression, giving you all the power of XPath selectors, with the simplicity and elegance of CSS selectors.

Experience

While creating this project I've learned a lot more about the CSS and XPath standards. This project has given me the opportunity to take a deep dive into CSS and XPath selector syntax and functionality.

agglo Star

agglo is a library I created for doing really fast and lightweight hierarchical agglomerative clustering in Javascript.

Motivation

This project was created so that I could quickly prototype and test machine learning models in javascript, even on large datasets.

The existing libraries for hierarchical clustering were either inefficient or had APIs, options, and outputs that demonstrated a lack of understanding on the concept.

This project was written using optimal javascript for this use-case and has several algorithmic optimizations over other implementations.

For example, agglo uses a linked-list to iterate and update the mutable "linkage" matrix, whereas other algorithms will traverse the entire array or use a computationally expensive array-slice.

This project also provides an API that makes it simple to implement an out-of-the-box clustering model, while still allowing full customization and integration into the clustering process.

Experience

While creating this project I've learned a lot about optimizing javascript code so that it runs well in different execution environments.

libhcluster Star

libhcluster is a C library I created for doing really fast and lightweight hierarchical agglomerative clustering.

Motivation

This project was created to provide a traditional C-style approach to building out comprehensive machine learning models using native code.

While there are other C/C++ machine learning libraries that provide agglomerative clustering functionalities, these implementations have several downsides.

For example, these implementations require the use of the parent library's formats and data structures, and are often unoptimized, while lacking flexibility or even understanding of the algorithm itself.

The project's goal was to create a more format/structure agnostic approach that could fit nicely into to any existing C/C++ codebase with a minimum knowledge, while still being really fast and memory efficient.

This implementation also has several algorithmic optimizations over existing algorithms.

For example, libhcluster uses a linked-list to iterate and update the mutable "linkage" matrix, whereas other algorithms will traverse the entire array or use a computationally expensive array-slice.

The implementation is also designed to use the smallest memory footprint possible for a full-fledged hierarchical agglomerative clustering API with complete customizability.

Experience

While creating this project I've become more familiar with memory management, callbacks in C, and C-style API standards.

htmlpress Star

htmlpress is a command line tool that converts static-HTML websites into Wordpress themes through the use of custom "data-" attributes.

Motivation

The motivation for this project was to simplify common Wordpress integrations into single "data-" attributes, allowing generic HTML/CSS UI components to be transformed into a fully functional Wordpress theme.

Currently, the primary use of this project is to enable a standardized way to build Wordpress themes using professional WYSIWYG tools like Webflow or Pinegrow.

Experience

While creating this project I've grown to further understand the difficulty in maintain backward compatibility and appropriate versioning between an API and command line tool.

symmetric (in development) Star

symmetric is a javascript runtime allowing seamless transfer of execution state in realtime between two javascript runtimes.

Motivation

This project initially started as an experimental proof-of-concept, prompted by the question "if the server and client both speak javascript, can't we write our app as single code base and have the execution switch endpoints as-needed?"

kudzu (in development) Star

kudzu is a lightweight and extensible javascript execution runtime written in javascript.

Motivation

The motivation for this project was to create a javascript runtime that could be used with Symmetric, another project of mine.

In order to be compatible with Symmetric, there were two primary requirements:

  1. to be able to pause and resume execution at any point
  2. to run in the browser (i.e. written in high-compatibility javascript)

While there are many other examples of javascript evaluators written in javascript that consume an ESTree-compatible AST, none if them suited the needs required.

For example, most of them are outdated or missing implementation of vital javascript language functionality.

Experience

Since this project requires rewriting every javascript langauge feature (in javascript), I've learned a lot about javascript as a language.

Professional Work

Cosaic (October 2019 - Present)

Position: Software Engineer

During my time at Cosaic, I worked with the core development team to architect specifications and implement features for the Finsemble desktop application product.

Skills Acquired

Skills Refined


Vibethink (April 2017 - October 2019)

Position: Full-stack Web Developer

During my time at Vibethink, I worked with a small team to develop websites and web apps using various web technologies, frameworks, and CMS systems.

Skills Acquired

Skills Refined

Commercial Product Integrations

These are some of the commercial products I've built integrations for while working at Vibethink.

Internal / Development Operations

In a addition to planning and coordinating development strategy for new clients and projects, other day-to-day devops activities include:

Some devops projects that I've implemented:

Client Projects

American Board of Family Medicine (API integration)
  • System to synchronize ABFM student course events and data between Absorb LMS and UniversalHub in order to aid in the certification process.
CVille Best-of Poll (web app)
  • Real-time polling/voting system built with Vue/NodeJS
  • Poll data administration, export, and logging
Founder Playbook (website)
  • Website content synced from Markdown (.md) files hosted on GitHub
Froehling & Robertson Engineering (website)
  • Wordpress site with full Gutenberg integration
Global Press Journal (website)
  • Wordpress site with full Gutenberg integration
  • Integrate WordPress posts (and custom post content) with Apple News
Global Press Journal Publisher (web app)
  • Platform for journalists world-wide to contribute stories
  • System for managing the lifecycle of a news story
How2Recycle Member Portal (web app)
  • System to submit, review, and manage packaging label requests
  • System to track and analyze packaging materials statistics
Jaunt (website)
  • Fully ADA-compliant WordPress deployment
Kluge-Ruhe Museum Collections (website)
  • System to integrate site collections data with the existing Collections Management Software
Re:discovery Software (API)
  • Client-facing API wrapper around existing internal Microsoft Web Service endpoint
Refugee Investment Network (website)
  • Wordpress site with full Gutenberg integration
Sustainable Packaging Coalition (website)
  • Full-featured, custom event ticketing e-commerce system
  • Real-time event registration system
  • Configurable, hierarchical company membership system
  • Integration with and automation of Emma Email system
  • Rule/logic builder GUI for configuring business logic
UVA Environment Resilience Institute (website)
  • ADA compliant web practice requirements
  • Polymorphic hierarchical taxonomy filtering system
UVA Faculty and Employee Assistance Program (website)
  • ADA compliant web practice requirements
  • Wordpress site with full Gutenberg integration
UVA Licensing and Ventures Group (website)
  • Integration with UVA single sign-on
  • Craft CMS plugins for data export in various formats

Internal Projects

BatchFlow Resource Management (web app)
  • Organize, manage, and track resource usage and production processes in a recursive way.
  • Neo4j graph database with customizable, polymorphic Vue front-end
Webflow + htmlpress (integration)
  • Integrated the Webflow professional site building platform with my open-source static-HTML -> Wordpress theme conversion tool
  • Allows developers (and even designers) to completely build, edit, and update client sites using a professional WYSIWYG tool
  • Automatic and comprehensive integration with Wordpress and Gutenberg
VBTK Admin (wordpress plugin)
  • Private Wordpress plugin (and plugin update mechanism) for use across all WordPress installs
  • Maintains brand consistency across all clients
  • Implemented advanced error logging, capturing, and reporting to easily monitor and debug production site health across many installs
VBTK Blocks (wordpress plugin)
  • Implements custom react-based Gutenberg blocks for use across all sites
  • Implements custom style and functionality upgrades to the Gutenberg editor experience
VBTK DNS (nodejs service)
  • Built a workflow allowing DNS server configuration to be stored in JSON and managed on a Git repo
  • Automated build and deploy for DNS updates as well as integrated config testing