Serverless video trimmer & thumbnailer on GCP Functions

June 15th, 2019


A lot of services exist to dynamically crop, transform, and watermark images on-demand. Such a service doesn't quite exist yet for video-based content, so I worked on a serverless function on Google Cloud that can generate on-demand trimmed clips and thumbnails from an arbitrary length master video, with latencies under a few seconds. Read...

Reverse engineering a scoreboard data protocol (Nevco MPC-5)

March 3rd, 2017


I have decoded the Daktronics scoreboard signal in the past, but this time its a Nevco MPC-5 multipurpose controller. This was considerably more difficult to reverse engineer for several reasons, for one it runs a non-standard ~260KHz signal and is also over a coaxial cable. In the end, with some circuitry, I managed to successfully decode it and extract the clock information. Read...

Real-time scoreboard digit recognition (OCR) with a webcam

June 7th, 2016


Broadcasts and streams of sports matches require clear and accurate graphics of the game clock and current score. Having an all-in-one solution to read this data from the venue scoreboard is difficult, as protocols vary widely between vendors and scoreboard types. Using a regular webcam with optical character recognition, reading these numbers in realtime is easy, efficient, and flexible for any scoreboard type. Read...

JOURNAL: Lessons learned solo bike touring

December 11th, 2015


This past month I went on a bicycle tour along the central California coast from Monterey Bay to Santa Barbara. Having a week-long Thanksgiving break and nothing to do in Champaign, I decided to head out to warm California for an adventure. Seven days, 320 miles, and some incredible people met later, here are some things I learned and took out of the trip. Read...

Projection design for Les Misérables

December 7th, 2015


Visual projections were a key element of last year’s fall production of Les Miserables. Projected set pieces and animations were used to add another dimension throughout the show. With over 30 text, image, and animated elements between the two acts, most of the time there were projections visible on stage. Read...

Sealing methods for underwater enclosures

June 20th, 2015


As part of our ROV underwater robot design, weve gone through several iterations of waterproof enclosures meant for sealing electronics down to 10m deep water. I reckon the method we have right now is bulletproof for a few hundred meters of water as long as there are no cable connectors. Read...

Graphene based super capacitors

June 7th, 2015


Batteries are currently the limiting factor behind many electric powered devices, and battery technology has largely stagnated since the introduction of lithium-ion batteries. Improved batteries with faster charge rates and greater capacity has implications in consumer electronics, the automotive industry, and our reliance on fossil fuels. Read...

First time with the Sony FS7

June 1st, 2015


My school acquired a SONY FS7 camera for their film program and I was able to use it to cover a badminton tournament over a weekend. The camera and Metabones adapter came in the night before the tournament began so I was learning on the spot. Read...

3D Printed 15mm Film Rod Mounting Blocks

August 10th, 2014


Professional film cameras and accessories are often mounted on standard 15mm rails. This allows for much greater flexibility in adding parts because everything is made to work with the standardized rod system. Things like follow focuses and lens hoods are made to work with the rails. Read...

Quick 3D Printer Slicer Comparison

July 26th, 2014


Slic3r is the recommended slicer for reprap-style printers like mine, so I always stuck with that and never tried other ones. What I didn’t know was that a slicer could make a huge difference in print quality, even more so than properly calibrating the printer. Read...

Working Projections on QLab

July 25th, 2014


Our schools play last year was The Laramie Project, which was quite a bit different from other plays weve done in the past. For the play I worked on the projections, which consisted of scene imagery, archival footage, and live video from a camera on the stage. Read...

Building a Brushless Gimbal for GoPros

July 20th, 2014


As part of my aerial video tricopter project, I built a brushless gimbal for a GoPro camera. Video from a properly tuned brushless gimbal is pretty much indistinguishable from a tripod or crane in terms of stability. Read...

Control Boards for a Underwater ROV: Part 1

April 19th, 2014


For this year’s ROV, I designed the on-board control system that controls everything on the ROV. Every year our team redesigns both the electrical and mechanical systems for the entire machine from scratch, building and improving what we learned from the previous year. Read...

3D Matrix Math for CSS Using Sylvester

July 26th, 2013


So recently Ive been working on more CSS-based transformations and graphics. One of the problems with the current implementation of transform in webkit is that there is no way to individually assign values with JavaScript, making multi-dimensional animations impossible. Read...

3D Printed iPhone Lightning Dock

July 19th, 2013


Apple did not release an official dock for any lightning-capable devices, leaving it for third-party manufacturers to make them. The one I came up with is visually similar to the Lightning Dock, but modified to work with the limitations of the 3D printer. Read...

Decoding the Daktronics Omnisport 2000

January 8th, 2013


The Daktronics Omnisport 2000 timing console has three RS232 serial ports: one for the meet manager, one for a venus scoreboard, and another to connect to the PC control software. Read...

Repairing a Daktronics 7-Segment Scoreboard

January 4th, 2013


Over several years of constant operation, many of the LEDs on a swimming scoreboard at my school have reached end-of-life and died. Repairing it involved removing over 800 individual LEDs and a lot of soldering through conformal coating. Read...

Reddit Sort Bookmarklets for Game Threads

October 16th, 2012


The default reddit sort functions apply to all posts you view, and that can get annoying when you are switching between the front-page and smaller, time-sensitive threads like game-chats. These bookmarklets only apply the sorting to the current thread. Read...

Eagle Library for Custom Footprints

August 2nd, 2012


This library contains parts that I have used in my projects. Most of them are rather specific and obscure components (like the MBI5026), but im going to post it anyway because it might save someone else time. Read...


July 26th, 2012


GIFcapture is a little python script I wrote that captures anything on your screen to a .gif animation. It utilizes the Python Imaging Library for screen capturing and and the image2gif module by Almar Klein. Read...

New Computer Build for $700

July 17th, 2012


Over the summer I built a new PC to replace my aging Acer. The specs on my old computer were as follows: AMD Athlon 64 x2 CPU (90nm!) 2GB RAM Nvidia 6750 LE 120GB Seagate HDD. Read...

Remote Weather Data Logger

June 16th, 2012


The goal is to make a remote data logger capable of continously collecting environmental data for at least a year. Self sustained - no external tethered power source allowed. collected data will include time, sun luminance, humidity, temperature, and barometric pressure. Read...

Laser Cut Project Boxes and T-Slot Joints

June 10th, 2012


Creating a three dimensional object from a flat sheet of material is the idea behind cutting boxes on laser cutters. IKEA does this with their flatpack furniture, which is assembled together by the user. Read...

Replicating and Printing an Object in CAD

June 9th, 2012


My DIY slider needs a standard 1/4 inch bolt to mount, but the one on my tripod was too short so I took some measurements and printed another plate. The plate is a quick-release clamp-on type, which is relatively small and easy to print. Read...

100 Micron Resolution on a 3D Printer

June 6th, 2012


Printing in 0.1mm resolution with a 0.35mm stock nozzle is not difficult, but very time-consuming. This is how I printed with 100 micron resolution on a MakerGear Mosaic. Read...

Unboxing the Mosaic 3D Printer

June 2nd, 2012


The MakerGear Mosaic is one of many DIY 3d printers available. A lot of 3d printers are at the sub-$1000 mark now, making them very affordable for hobbyists like myself. The big name in 3d printing is the MakerBot, but the print size was too small for me so I went with the Mosaic. Read...

Portable Audio Amp

June 2nd, 2012


I wanted something louder than a mini-external speaker, so I disassembled my old speakers and put it into a project box with a battery power supply. In addition to the portable battery mod, I added RCA jacks that could be used as inputs or pass-through connectors. Read...

Turing Alarm: A Mathematical Alarm Clock

April 12th, 2012


The arduino turing alarm is an adaptation of Nick Johnsons PIC-based one. At the time, I found that the PIC chip he used was a little too advanced for me, so I decided to use the Arduino microcontroller. All credits for the idea goes to Nick. Read...