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.
Follow a link below or keep scrolling to find out more
Full-length scrolling support for the MITx 6.002x online textbook (unofficial).
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
Displays an ASCII art Kinect depth image, or basic depth stats on a grid.
Displays a pseudocolor ASCII-art radar-like view of Kinect depth data.
Displays some statistics on the Kinect sensor's depth data, including a depth histogram.
A program in PIC12 assembler that dims and flashes some LEDs.
Linux driver for the MyHD ATSC tuner card and other TL880-based cards (incomplete/abandoned)
Helping a friend learn about bitmapped graphics, C, and Git.
A bunch of misc dot files
Unofficial fork of the edid-decode utility for making minor fixes
Gdbinit for OS X, iOS and others - x86, x86_64 and ARM
a generic EPUB library for Ruby : supports EPUB 3
Spree is a complete open source e-commerce solution for Ruby on Rails.
Another way to participate in the Jan 18 blackout.
Pure Ruby one-shot and periodic timers
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.
Clara Lending builds technology to provide consumers with faster, cheaper mortgages, and ultimately to help them improve their overall finances.
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.