On this page you'll find some of the software, hardware, and technical documentation that I've created.
Here are some tools that can be useful for GIS work:
Geo::Index (offsite link)
Perl module for creating in-memory geographic point indices. Once indexed, fast searches can be run. This module supports search by radius, by bounding box and by proximity.
This module is also available via CPAN (offsite link).
Python script to generate slippy map tiles from within QGIS. Similar in functionality to the QTiles plugin but faster and without the annoying rendering errors at tile edges.
Google/OSM to TMS tile renamer
Simple BASH script to rename map tiles from Google Maps/OpenStreetMap format to Tile Map Service format.
A set of commands for common GIS tasks using GDAL, OGR, and QGIS.
C++ functions to convert between UTM and WGS84. The code should also work fine under C99.
Here is some additional code that I've written:
Checksum tools (offsite link)
This is a collection of scripts that can:
Here is some of the Perl modules that I've written:
Geo::Index (offsite link)
Perl module for creating in-memory geographic point indices. Described under GIS, above.
Log::Selective (offsite link)
This module is a logger with adjustable verbosity for commandline programs. Different verbosity levels can have different colors and styles applied and specific functions or methods can get extra verbosity.
Additional functions are provided for displaying summaries of all warnings or errors encountered. Stack traces can been shown on demand or whenever there are warnings or errors.
Explains how to enable GPU acceleration for both rendering and video playback on Linux systems.
The focus is on Ubuntu and NVidia GPUs but it is applicable to all OS/GPU combinations.
OpenSCAD is a functional programming language for creating 3D solid models using constructive solid geometry.
These are OpenSCAD scripts that I've written that can be used to create highly-customizable 3D models suitable for printing.
(All links are offsite)
These can be used with smooth, flattend/D-shape, or knurled shaft potentiometers as well as board-mounted trimmers.
Supports all cell sizes listed in the published standard (IEC 60086-3).
Custom sizes can also be generated.
Adaptation of an off-the-shelf motion sensing LED light to instead control USB-connected lights.
Includes the parametric model and describes the required and optional circuit modifications.
Guide designed for cutting printed circuit boards with very high precision.
Highly-customizable Ikea-inspired vases.
Can be used to generate replacement or additional copies of a number of discontinued designs. Wholely-unique designs are also possible.
Set of angle gauge blocks for measuring small parts. Includes a bespoke storage case.
The size, angles, and number of gauges are customizable as is the case.
Protective cover for trowels/paint scrapers.
A simple modification to add Bluetooth output to a Garmin ForeTrex 101 GPS. I'm using this to provide location data to an Android tablet that doesn't have a built-in GPS.
I've written a few things for the Parallax Propeller microcontroller:
This is a schematic of the controller board for the Ikea DIODER LED lights.
Pulse width modulator circuits
Dimmer circuits for RGB and monochrome LED light strips along with sensors to turn the LEDs on when the room lights turn on or when a person enters the room.
24-channel LED driver with 8 bit per channel PWM (offsite link)
A microcontroller-based multi-channel dimmer.
This program provides an X-Windows driver for the original Tabby graphics tablet. Also included is reverse-engineered documentation of the Tabby serial protocol.
This document explains how to convert the boot disk of a Linux system to a bootable RAID-1 (mirrored) array using the native Linux drivers.
IFSwitch is a small utility that allows one to dynamically choose the network settings of a Linux system. It is designed primarily for laptop users who want to easily change their network address depending on whether they are at home, at work, etc.
ISpy is a simple network monitoring tool for Linux and Unix systems. It watches a user-defined set of ports and sends an email alert when any of the monitored ports changes status. I used this for monitoring before I started using Netsaint (offsite link).