Home Automation / Sprinkler Control
Coupled with some of my electronics projects, this allows me to control sprinkler valves. I run a kubernetes cluster at my home, and run a number of raspberry pi worker nodes with various pieces of home-automation on them. This particular project adds a sprinkler controller and scheduled jobs to trigger the sprinklers to run. The long-term goal for the project is to use TSDB data from rain/temperature sensors I have to augment the schedule of the jobs to reduce or increase watering frequency and duration to minimize water usage while mainting healthy plants around our house.
NTFS Punch Linux Kernel ModuleThis kernel module allowed Netkine to mount a disk image file residing on an NTFS filesystem that wasn't cleanly unmounted. When you hibernate Windows, or use "fast boot," Windows doesn't do a full flush and unmount of the filesystem. As a result, none of the Linux filesystem drivers will mount it read-write (as they shouldn't.) However, if the file you care about is a disk image, and has been fully allocated (not sparse) and wasn't being written to on the windows side (or you ensure you flush it before shutting down/hibernating) then the blocks on the disk are actually "safe." This kernel module will expose those blocks on the disk as another "virtual" block device that can be mounted read-write. Typically this file would contain a nested filesystem, such as ext4.
Computer Vision Object Detection
This little project is building a simple set of tools to post-process security video streams to look for objects that are "interesting." Other clips that have no interesting objects (e.g., just moving branches, falling rain, etc.) are then removed to reduce storage load, and to help find the interesting clips for later human viewing. This supports both CPUs or nvidia GPUs based on a conatiner.
Docker Machine KVM Driver
This was done during my tenure at Docker Inc., but was an opensource effort, so it's worth mentioning here. With my years of experience with virtualization tech between VMWare and Netkine, I was able to quickly build a driver for Docker Machine that works with KVM via libvirt. This driver became quite popular in the community.
This project is effectively dormant, and has been taken over by a forked commnuity effort, as Docker Inc. decided to defund Docker Machine work and advised me to stop actively working on it. Internally in Docker I developed a new replacement tool for Docker Machine called testkit which has a superior architecture to Docker Machine that facilitates efficiently spinning up clusters of VMs locally or on a cloud with support for AWS (spot or on-demand), Azure, GCE, or locally with KVM, VirtualBox, VMware, and Hyper-V. This effort is closed source so it isn't externally visible or usable. Testkit is relied upon heavily for Docker's internal CI/CD testing automation to validate every pull request and internal official build.