About Me

Anyone would tell you that technology and innovation is in my nature…

My parents would tell you that I spent most of my time as a teenager learning and creating at my keyboard. My high school might say I was a little too curious when, at age 16, I hacked into their computer network.

I've grown a lot since then and even more since around 11 years old when I first began honing my craft. I caught on pretty quickly and my interests took me on a journey to deeply understand a broad spectrum of computing skills and concepts.

My desire to build and create is the driving force behind a habitual tendency to improve. Being self-taught, I would let my ideas lead the way as the gaps in my knowledge were filled through experience.

Personal Values

A diverse background is important to me. With it, good decisions become intuitive, problems become familiar, and innovation becomes a direct correlation with creativity and willpower.

A broad perspective has allowed me to evolve into the person I am today— not only armed with practical technical knowledge, but with a clear understanding of how each piece fits together and why.

A good philosophy, and as a result, a positive outlook and mature viewpoint, has benefitted countless aspects of my career— both technical and otherwise.

A lot of experience, in real life and through my involvement with open-source communities and open-minded workplaces, has proudly cultivated in me a fluid mindset with zen-like patience.

Attitude

In the workplace, whether I'm helping a coworker through a problem or explaining a complex technical concept to a client, I'm a professional, but not before I'm a person.

I like to keep things friendly, fun and inclusive, and while it's often time for seriousness, life's too short to be dark spirited, keep cliques, or hold grudges.

Interests

Out of the workplace, I like to keep a mind open to new ideas, a hand out to those in need, and a thumbs-up to fun experiences.

While many of my personal hobbies involve building and creating, I regularly enjoy getting out into nature, skateboarding, thrifting, travelling, and live music.

Skills & Knowledge

Languages and Platforms

Throughout my career, I've primarily used Linux/Unix/Darwin environments with LAMP and Javascript-based stacks.

Recent Languages

Past Languages

Future 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 the popular XML parsing library libxml.

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. Developing a sufficient memory management system wasn't a simple patch.

First off, it had to work nicely with both V8's garbage collector and libxml's memory management system. Secondly, it had to work every time. It had to work for any imaginable usage pattern of the libxmljs API. A solution was created to handle all of the many edge cases caused by the interaction of the APIs while still maintaining optimal performance and memory consumption.

Since the memory leak issue, I've contributed many new libxmljs API features. I've helped to manage and fix any issues that have arisen as well as review and merge pull requests. I've helped to maintain the project's portability across platforms, including the support of pre-built binaries for Windows users.

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?"

The motivation

Experience

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

Vibethink (April 2017 - Present)

Position: Full-stack Web Developer

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