Back to Dave's Planet

Interesting things I've made, designed, or invented over the years. - I build the hardware to transmit extreme precision barometric pressure data to an Android device via Bluetooth. Then I mashed that data up with a Google Map and live GPS coordinates to create a map of the lift and sink in wherever area a glider pilot has explored, and adjusted the data to take the prevailing winds into account to track the thermals movements. Then I linked all these devices up to a live central database to share that information with dozens of gliders all flying in the same area at the same time. Booya, now everyone knows where the thermals are.

Darpa shredder challenge - turn a pile of shredded paper back into the original document

SSUBA Self Sustained Underwater Breathing Apparatus - interesting re-use of the normally wasted pressure of air exhaled at depth. Instead of just wasting the pressre of air exhaled at depth, use it to provide most of the drive needed to get fresh air back down.

Glider mounted tensiometer A very simple yet effective approach to measuring the tension on a full-size aircraft being winched into the air under thousands of pounds of line tension. This is much more difficult to do as a running-line tensiometer at the winch end, which also doesn't take into account the elasticity of a mile of rope. The approach in my design allows simple measurement of a static line where it attaches to the glider.

Voice forgery software. There are countless uses in film, radio, and audio books for being able to morph a speakers voice into that of another person. This is not simple voice changing where you make a voice sound different, it is a target forgery to make one person sound indistinguishable from the target. As a hobby project over the course of a year I tried numerous approaches that did not work until finally perfecting one that did, an interesting variaton on more traditional approaches that allows for a fully expressive forgery with minimal data sets.

Poker Player - in a game of complete information such as Chess it is a trivial programming challenge (though computationally impossible at runtime) to recursively find all outcomes of any move. Chess is a game of perfect knowledge, everything you need to know is on the board in front of you. Poker is fantastically harder to model because it is a game of incomplete knowledge. Does your opponent have the Ace? Is he bluffing? It is impossible, rigid, and uninteresting to lay down volume after volume of prefab rules to create a good poker agent. Another approach barely lets the agent know how to play poker at all, instead it collects databases of past players and past plays and profiles the current player and all their known hands and situations and calculates, for a series of actions on the agents part, what the percentage chances are the opponent will fold (folding equity) and what chances are that the agent will win the showdown (winning equity). It then plays the odds, keeping pots small so that statistics can win out over volatility. Perhaps one of the players does not have the courage to face a raise of 3 big blinds preflop except with great hands, the agent will exploit that weakness and make money off the folding equity. Perhaps another player is overly aggressive and won't fold to any bet, the agent will exploit that to make money off the winning equity. Most importantly the agent will adjust to each person individually and make the best mathematical play to extract chips from that player.

Chroma key removal - your everyday photographer is moving more toward green screen technology to do much of their day-to-day portrait work. The problem is that software available simply fades out any part of the image that is green tinted. There is always color bleed around the edges and through the hair, and the currently available software simply fades and feathers these important details away. Not the most optimal solution. Instead I have taken the approach of looking past the color-bleed to see what the original color probably was, randomly selecting colored pixels from a small grid. I combined the newly found color with the brightness of the tinted pixels and set the proper transparency based on the green content and restore much more detail than was previously available.

The Glass Eye - My photography web site, done entirely in Google Web Toolkit (GWT) backed by Ajax calls to simple PHP action handlers on the server. This site allows me to upload photos and forget about them. The user select the prints they want to buy, selects all cropping and printing features exactly as they want them, pays for the order via PayPal, and the order is converted to XML and transmitted to my vender for fulfillment. Not the most technically challenging thing I've tackled but one that I have a lot of fun with and which keeps me away from the drudgery of order fulfillment.

Printer Control Language (PCL) processing - by far the least sexy thing I've done but it pays the bills. My employer receives huge print streams from a national vender containing nearly a thousand different types of letters and mails out in excess of 50,000 letters a day. I was tasked with creating a process to modify this print stream, to copy, paste, insert, delete, move, gatemark, and modify all manner of content. I turned borrower account numbers into barcodes by loading a barcode font into the file. I caused all letters going to a single recipient to be commingled and combined into one envelope based on business rules of what were and were not allowed to go together. I loaded dozens of inserts into the print stream rather than allow them to be inserted manually. I created a complex XML based language to contain the desired rules and to manipulate dozens of command objects to do whatever tasks my employer required.

Modeling pressure waves as they pass through Serling accoustic engines: it's a work in progress but I did create this really fun graphic of pressure waves from scratch using Java code: Back to Dave's Planet