Retinal Projection

Blinded by the Light

Sunnyvale, CA - April 2012
I built a virtual retinal display using an off the shelf Microvision laser projector, low cost optics, and a 3D printed frame. The resulting direct image is bright but well within safe operating power.
The Mona Lisa

Semi-Automatic Paintbrush

Sunnyvale, CA - December 2011
Using an infrared camera, an InkShield, an ink cartridge with an infrared LED stuck to it, and your arm, you can copy great works of art, or just any old picture. The Semi-Automatic Paintbrush brings electronic automation to painting and organic style to printing.

Augmented Reality for 3D Printing

Sunnyvale, CA - October 2011
I wrote an augmented reality viewer to allow for previewing and handling of STL models of 3D printable objects without having to commit them to plastic. The model is rendered using a GLSL shader for the sake of speed and quality.


Sunnyvale, CA - October 2011
To enable easy visual comparison of derivative 3D objects on websites, I forked the WebGL based Thingiview.js. Thingidiff compares two STL or OBJ files and displays shared, added, and removed faces between the objects in different colors much like how syntax highlighted text editors present code diffs.

Snow Globe

Sunnyvale, CA - August 2011

Earth in Snow Globe Inspired by the virtual Earth in Neal Stephenson's Snow Crash, Snow Globe is an 8" diameter spherical display built from a laser projector, a fisheye lens, and a frosted glass globe. Using OpenGL shaders, a mediocre laptop can transform NOAA's high resolution Science On a Sphere datasets live to the globe. Acting as a PREDICT client, the globe can also track the positions of Earth orbiting satellites in real time.

Maker Ant Farm

San Mateo, CA - June 2011

For the 2011 Bay Area Maker Faire, Will Nowak and I built an exhibit at which visitors could have Minecraft character copies of themselves automatically generated by standing in front of a Kinect. The scanned in visitors populated our Minecraft server as wandering bots.

Physical Keygen

Sunnyvale, CA - May 2011

3D Printed House Key Physical Keygen is a set of parametric CAD scripts to generate printable functioning models of household keys from key codes. Given the weaknesses of the corresponding locks to picking and bumping, the project served as a demonstration of the usefulness of home 3D printing rather than as a security disclosure. Later, I created versions of the scripts for more secure disc detainer locks.

Gestural Printing

Sunnyvale, CA - April 2011

Gestural Printing uses Kinect based hand tracking for manual 3D printer extruder movement and control. It is likely to be the least practical method of additive manufacturing ever realized.


Sunnyvale, CA - March 2011

Thumbs Up In response to a similar project done without a program or source released, I wrote an open source take on generating printable objects from Kinect point cloud captures. The script allows for interactive thresholding, segmenting, and hole filling followed by automatic meshing, cleaning, scaling, and merging onto objects like coins and cubes.

3D Printing

Sunnyvale, CA - Fall 2010 to Fall 2011

While my reasoning for building a RepRap 3D printer was to rapid prototype parts for the assorted projects elsewhere on this page, I ended up equally interested in the possibilities of the printer itself. I designed an AC powered, microcontroller switched, heated build platform to efficiently improve print quality. I also developed a process for generating visually appealing time lapses triggered by the printer.

Camera and Projector

Interactive Camera-Projector Homography

Sunnyvale, CA - September 2010
Rather than having to recall the linear algebra behind the eight point algorithm every time I wanted to map camera input to projector output, I wrote an interactive calibration script. Using an infrared beacon, the homography calculation process is reduced to four button presses.

Projecting Virtual Reality

Sunnyvale, CA - May 2010

Projecting Virtual Reality Mounting a laser projector and an inertial measurement unit to a Wii Remote gun peripheral, I built a virtual reality setup in which the yaw, pitch, and roll movements of the gun mapped 1:1 to the virtual world. The narrow field of view makes for a harrowing experience ideal for the horror genre but merely claustrophobic for the first person shooter that I modified to use the setup.

Microvision SHOWWX Setup

Evil Eye

Sunnyvale, CA - April 2010
As a far too early Halloween decoration, I built a face tracking eyeball using OpenCV. It was during this project that I learned the wonderful optical properties of both laser picoprojectors and bathroom globe light fixtures.
Traffic Sign Status Indicator

Walk This Way

Sunnyvale, CA - February 2010
Taking advantage of the amazing electronics surplus stores in the Bay Area, I connected an Arduino and some relays to a pedestrian walk/don't walk sign for use as a large computer controlled boolean status indicator.
SpacePoint Fusion

Easy Absolute Orientation

Sunnyvale, CA - February 2010
In preparation for later projects, I wrote a Python library to interface the PNI SpacePoint Fusion inertial measurement unit, reading in quaternion and accelerometer data.
Sleep remaining indicator

Sleep Remaining Indicator

Sunnyvale, CA - January 2010
The Sleep Remaining Indicator is minimal alarm clock, containing neither an alarm nor a clock. It is a reverse progress bar represented by a laser line projected onto a ceiling, stating in the simplest possible way how much time there is left to sleep in the night.
HMC5843 and Arduino

HMC5843 Magnetometer Library

Sunnyvale, CA - November 2009
As part of an effort to build an inertial measurement unit, I wrote an easy to use Arduino library to interface the Honeywell HMC5843 magnetometer.
XBee Trigger

XBee Remote Trigger

Pittsburgh, PA - May 2009
With the CHDK firmware loaded onto my digital camera enabling a hardware remote trigger, I wired up an XBee radio and wrote a script to allow for wireless shutter control from a computer.

Wireless Multimeter

Pittsburgh, PA - May 2009
Donnie Cober and I undertook this project for the Electrical and Computer Engineering Department's Build 18, a sort of informal hacking event. Reusing some leftovers from the Magic Wands project, we built an Arduino based voltmeter that streams data over an XBee to a computer running a Python plotting script.

Magic Wands

Pittsburgh, PA - Spring 2009

Magic Wands As an Embedded Systems Design project with Adeola Bannis, Claire Mitchell, and Ethan Goldblum, we attempted to solve the problem of keeping amusement park visitors amused while waiting in line. We prototyped wand shaped game controllers with which users could participate in multiplayer games using accelerometer input, button presses, and infrared LED tracking. We developed a central server storing Wand locations and scores and networked client games like trivia, collaborative music making, and eight player Pong.


ChromaDepth GLSL

Pittsburgh, PA - March 2009
I stumbled upon the Wikipedia entry for ChromaDepth shortly after completing a Computer Graphics course at Carnegie Mellon and realized it was a perfect use case for OpenGL shaders. I wrote a shader program that colors objects with hues representing their depths while retaining their textures by modifying saturation and value, making them appear to pop out of or into the screen when wearing ChromaDepth 3D glasses.


Pittsburgh, PA - December 2008
RocketPong was an entry for a Game Creation Society one button game competition that I eventually turned into a zero button voice activated game. I later made it an eight player crowd based game for the Magic Wand project.

Augmenting Reality with Reality

Pittsburgh, PA - December 2008

My Computational Photography final project was a jumble of hacked together libraries for the purpose of turning real life objects into virtual objects and then inserting them back elsewhere in reality. I used my Pygame module to capture images of objects, voxel carved them with Koen van de Sande's Voxel Coloring Framework, and placed them back using using ARToolkit.

Camera Module for Pygame

Republic of Palau - Summer 2008

Rubik\'s Cube As a Google Summer of Code project under One Laptop Per Child, I wrote a camera interface module for Pygame. While originally scoped to make it easier to use the webcam on the little green laptop, the module supports most webcams on Linux. The project makes grabbing camera input and using some basic computer vision algorithms as simple as writing a few lines of Python.

AC Adapter Art

AC Adapter Art

Pittsburgh, PA - March 2008
While not my first project, this is the one that made me realize I had a particular itch to scratch. I modified the Colors Sugar Activity to accept brush input via movement of a physical object tracked by the computer's built in webcam. The power adapter included with the OLPC laptop makes the perfect uniquely hued object to track.