I make life more livable through technology
From sweetening the sound in a theater room or automating a home for luxury and accessibility, to helping an accounts-receivable rep's day go just a little more smoothly, I write software and assemble hardware with the goal of making life better one bit at a time. The rest of the time I swim, enjoy the outdoors with friends, write music, or edit video.
See one of my latest videos
Follow a link below or keep scrolling to find out more
Recreational Ruby tools for graphics and geometry.
A library of simple Ruby tools for processing sound.
OS- and data-manipulation utility functions not otherwise categorizable
Mathematical functions shared by mb-sound, mb-geometry, and other personal projects
An unstable Ruby FFI interface for the JACK Audio Connection Kit
Experimental scripts for controlling Bluetooth Low Energy lights from Linux
A sample libevent-based network socket server that presents a simple command line interface to multiple connecting clients.
A sample tokio server that presents a simple command line interface to multiple connecting clients.
Toy code to interface with the iBIZ KeySync serial keyboard
Helping a friend learn about bitmapped graphics, C, and Git.
Linux driver for the MyHD ATSC tuner card and other TL880-based cards (incomplete/abandoned)
A program in PIC12 assembler that dims and flashes some LEDs.
Displays a pseudocolor ASCII-art radar-like view of Kinect depth data.
Displays an ASCII art Kinect depth image, or basic depth stats on a grid.
Displays some statistics on the Kinect sensor's depth data, including a depth histogram.
This is a fork of numo-pocketfft solely for opening PRs against the upstream repo.
A fork of libevent for making bug fixes and PRs.
Gdbinit for OS X, iOS and others - x86, x86_64 and ARM
A bunch of misc dot files
Unofficial fork of the edid-decode utility for making minor fixes
Kinematic Network Controller -- browser UI for Depth Camera Controllers
Browser-based UI for Nitrogen Logic Automation Controllers
EventMachine-based Ruby client for Nitrogen Logic Automation Controllers
Kinematic Network Daemon - Depth sensor backend server for Nitrogen Logic controllers
Nitrogen Logic C Utility Library
Client library and related utils to interface with KND (Nitrogen Logic's depth data server) from Ruby
Fast grayscale PNG compression using libpng
An EventMachine-based Ruby gem for controlling Philips Hue lights.
Ruby code for communicating with an xAP-based home automation network.
Click a company name for details.
Nitrogen Logic is my startup producing embedded software and hardware for home and commercial automation (AKA "Internet of Things"). Nitrogen Logic systems have been used in homes and businesses on three different continents.
The killer feature is the ability to use an old Kinect sensor for presence detection. You can program your lighting, sound, and video to respond to your location within a room.
This was my full time job from 2009 to 2013, and is currently still active in a maintenance/side project status. You can order an automation controller at NitrogenLogic.com.
Audio Interface Design
I do part-time software development and other consulting under the moniker Audio Interface Design.
Audio Interface Design usually focuses on software related to audio/video technologies, user interfaces for audio/video systems, and network protocol adapters. For sufficiently interesting projects, graphic design, Soundweb London DSP design, and other skills are also available.
The Audio Interface Design site has not been updated recently. Contact me directly for current information.
SoFi provides financial services to the modern consumer.
I was promoted to Staff Engineer while at SoFi. I helped my team iteratively improve our processes, developed core technology for the Relay product, and worked across teams to improve engineering at SoFi as a whole.
I left SoFi to pursue my latest YouTube video project.
Clara Lending builds technology to provide consumers with faster, cheaper mortgages, and ultimately to help them improve their overall finances. Clara was acquired by SoFi in January 2018.
My main focus at Clara has been improving the design of our tools and systems to improve reliability and developer productivity. In addition to direct feature work, I look for work that multiplies the value of the work of others. One example of such work has been designing the next iteration of our backend systems' database models, by identifying redundancy in tables, improving the separation of concerns between microservices, and converting database accesses to and from Scala with Slick and Ruby on Rails with ActiveRecord where appropriate.
Deseret Book is a historic publishing company serving a niche retail and worldwide ecommerce market.
I was a full-time full-stack Ruby and Rails developer working on Deseret Book's e-commerce systems, mostly doing backend development and integrating various internal systems. Some of my work has been released as Open Source on GitHub.
During a migration of their web site to Spree Commerce (now forked as Solidus), I was responsible for integrating Spree's inventory and order tracking systems with the order management and inventory systems from Oracle e-Business Suite. I developed a custom microframework for middleware development using Ruby and RabbitMQ to simplify the integration process. The integration also required me to improve and refactor custom Oracle PL/SQL code. My code has processed hundreds of thousands of orders to date.
When Spree was forked and Solidus was born, I studied our Spree codebase in detail and planned much of the work required to move from Spree to Solidus.
I also wrote frontend CSS and JS as needed. I developed much of a dynamically updating variant selection form which handles thousands of product permutations, and significantly upgraded the address selection UI by forking, renaming, and improving the spree_address_management Ruby Gem.
IMVirtual was a startup developing mobile apps for meeting transcription and executive task management. The primary app was called MeetingQ, which would allow users to record, annotate, and transcribe meetings. Another app provided an interface to human virtual assistants to help manage contacts, appointments, notes, etc. The MeetingQ app was in the process of entering public beta before the company ran out of funding in 2013.
I inherited an existing PHP codebase (app API and admin UI) as sole web developer. During my time at IMVirtual I designed and built an asynchronous audio and text processing system, implemented a phased beta rollout scheduler that would give users access to the MeetingQ app during their local business hours at a specified number of users per day, planned detailed OpenStack server allocations and costs over time based on projected user growth, and developed an HTML5 audio player that synchronized audio playback with a text marker for viewing audio-to-text transcriptions.
As part of the audio processing and transcription system, I researched the MP3 file format extensively. With that knowledge I developed a frame-accurate, robust MP3 slicing and splicing tool using Bash script and a collection of Open Source tools. This MP3 splicing tool was responsible for automatically slicing, assembling, and annotating batched audio transcription orders based on user requests. I designed a unique machine-generated label system that would allow automated splitting of text from batched transcription orders. The processing system, implemented in Ruby, was horizontally scalable across many servers and received jobs from the PHP API over ZeroMQ message queues.
Harman Music Group
I was an Engineering Apprentice at Harman Music Group, a former subsidiary of Harman International. At the time HMG was responsible for hardware, firmware, software, and DSP development for some of Harman's installed sound and music instrument brands. I was assigned to BSS Audio doing firmware development, hardware and software QA testing, and audio system design.