# Collection of software of varying ages I've written since the late 90s.
## audiotron
Database creator for the Turtle Beach AudioTron.
As far as I'm aware, this device is still the best music player for
digital media from network attached storage. Its support for
streaming was never good (and isn't up to modern standards), but all
you needed was a NAS with a bunch of music, and to point the device to
it, and you could play whatever you like on your stereo.
Since it has fairly old hardware and runs an ancient version of
Windows CE, indexing large collections could take forever.
`audiotron` here is a perl script that generates the database files
quickly so you can skip that.
## bombs

Missile Command -esque game. Written in perl and uses `Tk`. I wrote
this during my first deployment to Afghanistan way back in 2002.
Internet access was nil and all I had was a copy of ActiveState Perl
to keep me entertained. This was the result.
## cpphoto
Utility to rename and copy photos into a date-sorted hierarchy. I
dump photos from my "camera" into an incoming directory and run this
program against that, copying all the photos into a
sorted-by-month-and-year directory tree.
## CPUID
Incomplete and somewhat out of data micro-OS that boots and is
supposed to display CPUID information. The part that isn't complete
is the CPUID-display part, though there's a test program that works
pretty well. The actual OS part seems to work just fine, making this
of passing interest.
## decomp

Decompiler for x86 (32 bit only) I write around 2001 or so. Obviously
won't handle newer instructions (to include the 64 bit extensions).
## defwrite

Simple interface to generate differential equation files that can be
plugged into Matlab's solvers. I wrote this in the late 90s while
taking a differential equations course and seeing the other students
struggle with converting their equation into `.m` files that Matlab
could use. Got me an internship at The MathWorks.
## fileselect

A Win32-only replacement for the standard Tk::FileSelect widget. UNC
pathname navigation might need a little work. Currently implemented
as a subroutine, but it would be a trivial exercise to convert it to a
module.
## fluxbox
Replacement for `fluxbox-generate_menu`.
## gpx
Two utilities for wrangling GPX files.
### `gpxinfo.pl`
Print basic stats about a GPX file, like distance traveled and
elevation gain. Doesn't really do much smoothing or anything, so if
your accuracy wasn't good while recording, then the output won't be
accurate either.
### `gpx2kml.pl`
Generate a KML file from one or more GPX files. Makes it easy to view
your tracks on Google Earth (that's what I wrote it for).
## gtviewer

Very basic GeoTIFF viewer. Loads one file at a time, converts coordinates and such.
## Marmot
Experimental OS. Not complete, of course, but boots and runs just fine.
## matfun
Library for the HP48 (both S and G) that implements vectorized matrix
operations. I wrote this back in the late 90s when I couldn't afford
a computer to run Matlab, but had a calculator and wanted to do some
Matlab-like operations on it.
## matops
Domain-specific language that implements a vectorized mathematical
language as a perl module. I wrote this when I need to crunch a bunch
of numbers, but work wouldn't spring for a copy of Matlab (seems like
a bit of a theme). No optimization is done, so requires you to write
your code to reduce redundant operations (i.e. compute things once and
store into variables rather than relying on common-subexpression
elimination).
## mv
Memory viewer for the HP48.
## plot

Signal plotter and analyzer for Windows. I wrote this during my first
deployment to Afghanistan when I had a need to look at the spectra of
some signals.
## signature
Create a named pipe, `~/.signature` that delivers the output of
`fortune`. I wrote this in the late 90s when I still thought that (1)
email signatures were OK, and (2) having a random one would be neat.
## spacetweet
Program that runs on a raspberry pi, scrapes SpaceX tweets, and
displays the most recent few as well as the guessed next launch on an
attached Inky wHAT e-ink display. Helps me remain aware of when the
next launch is going to be so I don't miss it.
## tap

Basic program for interacting with a serial port. Kinda like `screen`
or `minicom` but less powerful. Written back in the 90s.
## update
What do you do when you don't have `make` or `rsync`, do have a C
compiler, are stuck on Windows, and want to copy files from one place
to another, but only when they've been updated? Well, write something
like this, of course.
## uu
UU and base64 encode/decode programs.
## xalarm

My alarm clock for a few years. Launches a window with "snooze" and
"off" buttons, and beeps annoyingly.
## XCPU
Toy CPU emulator, used to investigate what an assembly language might
be when limited to four bits for the opcode. Read
`instruction_set.txt` to get an idea. I didn't finish the
disassembler program (though the disassembly routine works, it's just
not plugged int) or build the "standard library", but you can write
and run programs with this -- it turns out that four bits for an
opcode is possible, though makes for tedious to write assembly
language programs. Things I'd do differently now: remove `halt` and
`nop` instructions, replacing them with a reworked `cpuop`
instruction. Add in exception/interrupt vectors. Don't hardcode
memory regions, but rather allow different regions to have different
attributes.
## xkill
Kinda like `xkill`, but for windows. Results can be hilarious the first few times.