Well, I'm a programmer. I also have more ideas than I have time to finish them. Lots of ideas — most never pan out. This page lists some of my projects, and you can download some of them. Unless otherwise noted, source code is available under Creative Commons CC-BY-SA licensing guidelines. You are free to use, distribute and modify my code, provided that you grant proper attribution.

My preference lies in a blend of C and C++, and PHP for web projects. I also have notable skill with Visual Basic, XML, and Java (6 and 7). I'm more than a little dangerous with Bash shell scripting, PERL, JavaScript, VBScript, HTML, and CSS. Basic experience with assembler, ASP, and ASP.Net. If you're particularly interested in reading about my experience, see My Computer-Related History section. It's a number of pages detailing how I got involved in computers and what sorts of things I've dabbled with along the way, though it is somewhat incomplete.

I prefer development of business applications and stuff just for fun. Network programming is a blast and I've come to really enjoy web-app development. I've dabbled in many fields and am at least a little interested by everything.

Regarding my development approach: I understand object oriented design but I also recognize that it's not always the best approach. A tool for every need and a need for every tool, right? Alright, enough talk.

Creative Commons License
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.

[ Browser Extension | C/C++ | Linux | Multiple Disciplines | PHP | SQL Server | Systems | Web (Complex) | Web (Simple) | Windows | Wood and Metal ]

Table of Contents

Browser Extension

A simple Chrome browser extension that facilitates researching words and automatically reminding the user at regular intervals to reinforce the new knowledge.



A set of three C++ template classes which work together to produce a rule-based one-dimensional atomic constructor class, capable of using any data type as atoms. The initial use for it was a natural-sounding language generator, for which I gave it a list of phonemes (atoms) and three simple rules for assembling them, and it produces "words" of varying lengths that are believable as babble fodder in a game. With a different set of phonemes and rules it could produce convincing babble for any spoken language. The template is even more flexible, allowing assembly of any sort of linear construct.

The templates are not highly optimized and not thoroughly tested to work under all situations. They are fairly simple, however, and very easy to use for this sort of purpose. Another way I intended to apply this was to generate a dynamic storyline.

This project is distributed under the terms of the GNU LGPL License, version 3.

Source (C++, BZ2)



A simple 2-minute bash script using perl to scan through files passed on the command line to detect which files contain Windows-style line endings (\r\n). Outputs the filename of any matching file.

Script (.sh, TAR)


Another simple bash script using perl to convert all windows-style line endings (\r\n) to unix-style line endings (\n) in files passed on the command line. Suitable for chaining with crlf_detect.sh:

e.g. $ crlf_detect.sh *.cpp *.h | xargs crlf_to_lf.sh

Script (.sh, TAR)

in progress

A quick and dirty menu-driven ESXi 5.x frontend to simplify a few common tasks that otherwise aren't possible from a Linux machine.  It uses SSH to access the ESXi host, along with either sshpass (preferred) or expect to automatically enter the password for the SSH session.  I've only tested it with ESXi 5.1 free version but it should work with any SSH-enabled ESXi 5.x host.

I made this because I like ESXi enough to use it at home in spite of the fact that VMware doesn't care enough about Linux users to provide us with a proper client to manage it.

Script v0.1 (.tar.gz, Bash script)

Regex Rename (rr)

A little perl script that performs a regular expression substitution on the names of files passed in. Useful for renaming a bunch of files by regex rules.

WARNING: It won't warn you if multiple files get the same new name, it'll just dutifully overwrite the old one with the new one.  This is potentially very dangerous!

Script (Perl, TAR)


Setpriority is a command-line interface to the setpriority() API in Linux. It allows you to set the scheduling priority of a process (as 'nice' does) that is already running (as 'nice' does not). Available only as a source tarball under the GPLv2 license.

Source (TAR.GZ)


  1. wget 'http://s3.jonathan.overholt.org/projects/45/setpriority-0.1.tar.gz'
  2. tar -xzf setpriority-0.1.tar.gz
  3. cd setpriority-0.1
  4. make

Multiple Disciplines

in progress

For some time I've wanted a greenhouse for several purposes.  First, growing some of my own food sounds fun and rewarding.  Second, and perhaps more importantly, this gives me a testbed for some of my monitoring and automation experiments.  I've enjoyed building it and I enjoy working in it regularly.

Build PhotosGreenhouse Website



A simple, fast, flexible method of templating PHP-based web projects.

SQL Server


This will allow you to configure automated notifications to operators when a SQL Agent job exceeds a configurable run-time threshold.


Microswift Storage Cloud

A series of experiments aiming to produce a very durable, low power, distributed object storage system for on-site deployment.

Web (Complex)

CheckIt! is a website designed to make decision trees and provide an easy way to run through these decision trees. It's useful for making troubleshooting assistants, choose your own adventure stories, or even just some funny flowcharts.

An project management webapp to facilitate management of my many personal projects.  It is based on WAF and utilizes Apache, PHP, and MySQL on the backend; HTTP and AJAX for communication; and JavaScript and HTML5 on the front-end.


Tasker lets system administrators script common functions and delegate permission to those scripts through a simple web interface.

Web Application Framework — a PHP-based framework for developing web applications quickly. The framework provides authentication, authorization, database, and templating services as well as a variety of plugin modules for more specialized applications such as blogs and image galleries.

Web (Simple)


A basic cut-list generator I wrote for a project. Give it a list of board lengths that you need and a list of lengths that are available to buy and the app will tell you how many boards you need to buy and how to cut them to get what you need.

It's not incredibly smart but I left room to improve it later. It did the job I needed and there doesn't seem to be something else out there to serve this need.



Simple utility maps out the used space on a drive (or directory) and displays the tree to you. Useful to track down where those last couple gigs of free space went.

It's a very lightweight app but be aware that it automatically (sorry) installs a context menu extension at startup to enable you to run it on folders and drives.

Download (ZIP) | Source (Microsoft C, Visual Studio 6, ZIP)


A set of project wizard plugins for Microsoft Visual C++ 6.0. They're called "Real Win32 Application" and "Real Win32 Console Application", and both generate very basic project skeletons without any MFC stuff in them at all. Download the setup program, run it, and press install. Then the new wizards will be available in Visual Studio.

Download (ZIP)

This probably won't be useful to anybody any longer, as it's so old. It was an early, successful attempt at extending a programming environment to streamline my workflow.

Wood and Metal

A Nightstand for Rob
in progress

After putting it off for over five years, I've finally gotten around to building a custom nightstand for my friend Rob. I'm aiming to compliment the style of his existing bedroom furniture while working in some useful hidden gadgets and the like.

[Build Photos]

Conductor's baton case

I made a conductor's baton case at a friend's request. I thought it came out pretty good. I couldn't find any cases on the market using this design, so I really have no basis for comparison. It's made to fit her baton pretty closely, with small allowances for expansion and whatnot.

Wood: curly maple, walnut, and purple heart on the ends
Finish: natural tone Danish Oil and Minwax paste finishing wax

Photos on Google+

Desk 2013

I designed a built a new desk in 2013 to accommodate both my girlfriend and myself.  I wanted to maximize the amount of work space on the desk so I built it to fit the room, but there were some constraints that I had to work around.  I embraced the necessary asymmetry by shaping it like a puzzle piece from the top and kept up the curves by adding arches in the substructure.  I fabricated some custom brackets from steel stock and shortened some screws to attach the top to the substructure.

Build Photos

DVD Shelves v1

Shelves made of wood but with a somewhat modern design, meant to be wall-hung and house DVD and Bluray cases. I opted not to build from these plans in favor of a larger design in version 2 (below), though I may build one or two of these to augment the storage provided by v2.

Plans (PDF)

DVD Shelves v2

These shelves hang in my living room with the TV in the large negative space at the bottom and speakers wall-mounted on either side. It provides about 10 linear feet of DVD-height shelf space. They're an incremental revision on the v1 design but with the same basic aesthetics.

Plans (PDF)

TV/Stereo Stand

Plans for the shelves sitting below my (wall-hung) TV to accommodate my home theater equipment.

Plans (PDF)