Research + Portfolio

Where things I've worked on get documented.


Shrinkr logo

A smart Python script that uses ffmpeg to convert all videos of a selected resolution and codec type into a set of output videos according to one or more transcoding profiles.

If the file has already been transcoded, it will not be done again, which is useful for large batches of video. You can run this script on a staging folder over and over again and it will pick up and transcode the new videos each time.

I wrote this script to help me transcode a bunch of 4K HEVC video files into faster, smaller proxy editing files using something like UT Video or MagicYUV.


Spice Shredder thumbnail
Spice Shredder

Take 1 part electric screwdriver + 1 part cheap IKEA spice grinder + 1 part 3D printer and create an electric spice shredder that can quickly pulverize a load of spices for that next curry you want to make.

Anyone with a 3D printer can print up the pieces needed to build this, the only extra piece needed is a 50mm adjustable pipe clamp.


mbed Memory Status output
mbed Memory Status

Sets up a high-water usage canary for the Interrupt Service Routine, main thread, and other thread stacks; as well as for the heap memory. Goes pretty deep into the undocumented operating-system interfaces.

I wrote this to debug memory issues I encountered, before newer versions of mbed OS made this type of functionality part of the mainline.


Your Life In Weeks thumbnail
Your Life In Weeks

Life is short. Experience this fact vis(cer|u)ally.


USB Serial Adapter shootout thumbnail
USB Serial Adapter Shootout

Not all USB Serial Adapters are equal.

After running into errors when programming an embedded microcontroller, it took me a bunch of time to determine that the issue was in the serial adapter chip hardware.

This was a comparison of the most widespread chips from FTDI, Prolific, Silicon Labs, and WinChipHead, which took a couple of weeks to complete.

2014 - 2015

Arduino Shell thumbnail

A command-line interface for Arduino with simple commands to control the GPIOs, read / write EEPROM, and read the ADC pins.

Intel Edison hackathon thumbnail
Hackathon: Intel Edison

This was one of the hackathons I took part in in 2015, in which I built a fun little temperature-based pump controller using the now-obsolete Intel Edison.

Discoverous thumbnail

A map of places to eat in Berlin.

I'd been working on this for a while, and haven't updated it in a while.

Google Maps has a lot more sophisticated tagging and editing of personal maps now, but when I first created this map, they didn't.


Scotland Yard Solver It's a solver for the board game Scotland Yard, which shows you the possible locations that can be occupied by the shadowy Mr. X, given a last known position and the moves played. Localization Spreadsheet JSONify Google Docs Spreadsheets are a relatively easy way to set up a translation table for localizing a website. The only problem: the ATOM, CSV, and RSS publishing functions don't escape strings properly, leading them to be essentially useless for data interchange. So I spent a little time putting together a Google App Script that can output a usable translation table in JSON format.


How Fair Are My Dice? Have you ever noticed how when you play board games, the numbers that come up on the dice are oftentimes pretty skewed away from the normal distribution? This is a small program to graph out the rolls of the dice compared to what should happen if you rolled them an infinite number of times.


Java Native Interface DLL Debugging Sometimes your JNI DLLs have bad code in them, it's a fact. Here is how you can connect to a live instance of your Java application and debug the native code using Microsoft's Visual Studio Express 2008 package and NetBeans. While this example focuses on locating crash code, setting breakpoints and stepping is also possible using the same technique. Privilege Deescalation Usually I set my Windows system up to have two users: one Administrator and one Limited User Account. Running as an LUA is a good thing, it means viruses and spyware have a harder time getting a foothold in your system. For those few times you need to run as an Administrator to grab drivers off the 'net or whatever, it's also good to make sure your browsers run as Limited Users too.


Stop All Services A quick JScript file that will stop as many services on Windows as it can. Handy for when you want to defragment your hard drive. Simple AC Monitor This is a small daemon I wrote while building up a server on an old laptop of mine. Since I usually switch off the AC power to the laptop before going to work, I needed an automatic way to turn it off without having to log in. Rather than cron job it or shell script it, I just hacked together this quick daemon.


serialping.c A small program I put together to demonstrate the use of getopt_long(), the termios interface, and signal(). It's written in response to a real-world need and serves as a template for similar programs. (e.g. any program that takes parameters) "RAII in C" A short program to demonstrate resource allocation unwinding under exceptional conditions in C, one of the few instances where the goto construct makes sense. Kernel/User-Space Latency Measurer A set of two programs that measure latency under Linux between packet reception at the kernel level network stack and the delivery of a packet to the user space network client. Uses the SO_TIMESTAMP option from setsockopt() to force the kernel to timestamp an incoming packet's arrival time. Fixed-Point FIR Filter Considerations Just some notes and things to keep in mind, from the design of FIR filters for an Atmel AVR microcontroller. Make JavaScript Load Faster Switching on Apache's deflate compression is great, if you have access to httpd.conf. If not, here's another way you can get your JavaScript to load faster.


Discrete Fourier Transform
Fast Fourier Transform
Bit dumper.
access() call.


Radio Free America visualization
Radio Free America

A map of spectrum utilization from 54-806MHz.

Something I threw together to see how well our precious television spectrum is being used.


sh3 development icon
Embedded Linux Dev

Project page for the embedded Linux work I was doing on the LogicPD SH7727 (Renesas SH3) development board.

caldera icon


Calder-A is a bigger brother to Hellbender. Another "caseless" computer, this one in the style of Alexander Calder's mobiles, in other words, mobile computing. Reengineered into Extrovert, below.

extrovert icon

Extrovert Caseless

After deciding that Calder-A was just too unwieldy for normal use, and ultimately a bit ridiculous, I reworked the raw materials into a more compact and usable system. I call it Extrovert, because its guts are all on the outside.

MySQL Installer Built Using Nullsoft Install System

I created a new Win32 / Windows installer for the MySQL database software using Nullsoft's Install System. Copies of the server and the scripts used to generate the install files are posted here. Have a nice install!

[mv 12:40 PM 3/27/2009: This stuff is ancient, and I've removed the binaries, but left the notes on what I did for my own sake.]

Zero Length Directory Mirror JScript [.js file]

[usage] [original/replica]

This script takes an input directory and recursively replicates it with zero-length directory and file entries to a specified output directory.

What this was used for:

Rather than running the compress/decompress cycle on real data while building-testing an installer, it is much easier if all the input files are simply zeroed out, making compression instantaneous.

Warbiking Icon


While I was in Washington, DC, I had the opportunity to do a little Warbiking. The density of Wi-Fi in Washington is excellent.

PortMonitor/G: a graphical network port watcher.

PortMonitor/G: A graphical network port watcher.

This is a program I wrote to familiarize myself with the winpcap packet capture library, thread programming concepts, and the SDL multimedia library.


Toshiba Portege Battery Swap

I bought a new used laptop recently (12.19.2002) and the battery that came with it was Dead On Arrival (DOA). Luckily, I had an extra battery pack sitting around from my old laptop, and I correctly predicted that the actual lithium cells would be identical. So I ended up just swapping the dead cells for live ones. Here is the surgery in pictures.

Infared (IR) Netting

Just a couple of screenshots from an infared file transfer between my two laptops, in case anyone wants to know just what they look like. Nothing really special.

Euphemistic Safeway Map Thumbnail

Euphemistic Safeway Map

Washington, DC has numerous Safeway grocery stores that residents have lovingly nicknamed such things as: Social Safeway, Soviet Safeway, Sixties Safeway, and so on. Just for kicks, I decided to plot them out on a map.

FCC ITFS Antenna Map Thumbnail

FCC ITFS Antenna Map

Lately, I've been working on the visualization of geographic coordinate data from FCC license databases. Unfortunately, professional GIS packages cost on the order of $1,000+ and I don't have that kind of money. So I wrote my own package.

The heavy lifting is done using PHP and the GD graphics library extension, with data sourced from a MySQL database stored on my laptop.

Way Out West Trip Thumbnail

Way Out West GPS Data

When I originally wrote the GIS analysis package, I ended up with a fairly flexible framework which I tweaked to process more diverse datasets, such as the GPS data I gathered on my trip out West last summer.

Spectrum Data Analysis

Radio Spectrum Measurements

Results from electromagnetic / radio spectrum measurements taken June 10, 2003 in cooperation with the New America Foundation and the Shared Spectrum Company.

"Dupont Circle Spectrum Utilization During Peak Hours"
[pdf] [mp4, 26MB]

A Collaborative Effort of The New America Foundation and The Shared Spectrum Company, this is a short memo describing measurements of the electromagnetic spectrum between 30MHz and 3GHz. What we found out was that ~62% of the radio spectrum is unutilized during peak hours in the urban area around NAF's headquarters. [2003-07-16]

Also included is a snippet of video from the presentation we made at the New America Foundation on June 20, 2003.

"Issue Brief #12: Unlicensed Sharing of Broadcast Spectrum"
by Max Vilimpoc and J. H. Snider
[pdf] [NAF pdf]

A short (4pg) Issue Brief I put together with J. H. Snider, a Senior Research Fellow with the Spectrum Policy Program at the New America Foundation. In it, we discuss the potential for a transition of the broadcast television spectrum towards greater unlicensed use. [2003-07-16]

"Why Washington Matters in the Silicon Valley"

My first published article, appearing in the August/September 2003 issue of IEEE Potentials magazine. In it, I discuss the importance of public policy and why engineers need to participate in the political decisionmaking process.


Wireless Telemetry + Car, Argus 682


Created as part of our senior capstone curriculum at Ohio State, the Argus Project represented the packaging of many distinct skills into a compact, computer-operated, remote-controlled truck.

Ultimately, our team fit two wireless transmitters, two microcontrollers, and a host of sensors into every available space on the truck.

Available sensor data included: acceleration, GPS coordinates, velocity, and motor/battery temperature.

Additionally, our system had ability to control lights on the truck including: headlights, brake lights, reversing lights, turn signals, and fog lights.

Presentation: High Intensity Focused Ultrasound

Created by Craig Bennetts, Shefali Patel, and I for a course in medical imaging. This presentation details the process by which High Intensity Focused Ultrasound energy can be used to treat prostate cancer and other tissue by inducing ablation and localised necrosis of cancer tissue.

The Digital Millennium Copyright Act: Questions and Critical Observations Slideshow
[html] [pdf] [powerpoint]

DMCA: Observations and Critical Questions Final Report

Here is a presentation I created for the Washington Internship for Students of Engineering (WISE) as part of my summer 2002 research project. I discuss a few of the problems currently faced under the current system of copyright.

Appended is a copy of the final report I wrote for the WISE program. (It was once mirrored at the WISE program website.)

Reply Comments to the FCC in the Matter of Additional Spectrum for Unlicensed Devices Below 900MHz and in the 3GHz Band
(ET Docket No. 02-380)
[jpg1] [jpg2] [jpg3] [jpg4]
[FCC pdf mirror]

There were numerous comments in this docket that supported or dissented the use of GPS + database-backed interference mitigation for unlicensed devices (a user-side solution). A better idea would be to shift some responsibility for interference mitigation onto licensed television broadcasters (a server-side solution).

Two methods should be considered: (1) adding a geolocation signal to NTSC analog television broadcasts, by tucking data into the Vertical Blanking Interval (VBI), and (2) adding a geolocation signal to an ATSC digital television broadcast, by tucking location data into the Field Synchronization Segment.

Adding a geolocation signal that uniquely identifies television towers is a good idea that mandates an appropriate level of spectrum management and stewardship on licensed broadcasters, as already is expected of end users. The proposal also offers a great public service, making for a geolocation system similar to GPS, with potentially more robust results for urban users.


Privatization, Government, and Economics [pdf] [html]

The essay "Privatization, Government, and Econonmics" which I wrote for the John Glenn Institute Essay Competition in 2001 at OSU, which took the first place prize.


The Net Effect on Popular Participation in Government
[pdf] [html] draft [ jpg1 | jpg2 | jpg3 | jpg4 | jpg5 ]

Here's my essay "The Net Effect on Popular Participation in Government" which I wrote for the John Glenn Institute Essay Competition for 2000 at OSU. This paper took second place.

Newly added to the collection are 5 JPEGs representing the draft work that I did while writing the essay. It's pretty esoteric, but might give some insight into my thought processes.


Hellbender Archive thumbnail

Hellbender Archive

The Hellbender Archive is a small "caseless" computer I built using 12" threaded steel rebar and custom cut wood supports. It's getting up there in age, but it runs Linux + Apache + PHP and SSH pretty handily and it also handles the video capture for my webcam. While I was travelling in Mexico, I remitted close to a gigabyte worth of photographs to it over the course of three months. Its security has never been compromised.

© 1999-2019 Max Vilimpoc