Although most of the programming work I've done is owned by the companies I've worked for. There are some personal projects that I've released.
I am a firm believer in Larry Wall's three programming virtues:
- Impatience
- Laziness
- Hubris
In the interest of laziness, I spend a lot of time writing little tools to make my life easier. Here's a list of the various software projects that I've written and placed on the web. Hopefully some of them will solve a problem you have or help on one of your projects.
Recent Programming Projects
Projects that are either new, or I am continuing to work on.
- Timelog
-
The latest incarnation of the
timelogcommand line tool for tracking time. - QuikDecision
- The latest incarnation of the quick decision program that started as an exercise on the PalmOS (see below). This one is a website built in Rust. I still need to put the code for this on-line.
- GuideLines
- One of my wife's hobbies is calligraphy. I created this little tool to generate guidelines for different calligraphy hands.
- nzliteral
-
I'm a fan of the
NonZerotypes in Rust. Unfortunately, one annoyance involves literalNonZerovalues. At the point that aNonZeroliteral is created, it would be obvious at compile-time if the literal value is 0 or not. That means we should be able to create theNonZerovalue without needing tounwrap(). I made this crate to supply a macro making this use-case easier. - stringtypes
- One of Rust's best features is really lightweight types, thanks to the NewType pattern. I was finding the need for some String types that supported some strong validation. This crate uses the parse don't validate pattern to guarantee any string types created are valid for the defined type.
Older Programming Projects
Projects that I worked on and released in the past, but haven't touched in a while.
- ThinAir
- The ThinAir pseudo-random number generator class library is a large collection of PRNGs coded as classes with a common interface. This code does not use all of the state-of-the-art C++ features. Mostly because no compiler I had supported those features at the time the code was written.
- Web Site Description Library
- The Web Site Description Language (WSDL) was the subject of my master's thesis in computer science. Unfortunately, about the time I submitted my thesis to be published, a group of companies released a new standard. The Web Services Description Language (WSDL) serves a completely different purpose and has nothing to do with this code.
- HTTPtest
- This is an automatic regression test system designed for use in testing any system that uses the HTTP request/response protocol.
- httpGrab
- This Perl script started as a simple exercise to learn the LWP module. It has grown into a relatively powerful tool for testing and interacting with web servers.
- The Win32 Synchronization Classes
- This is a set of C++ classes I wrote to wrap the Win32 synchronization primitives. The code includes both thin wrappers and higher level tools built using the primitives.
- PilotFORTH Code
- This is a large collection of random library code I wrote for the PilotFORTH development system.
- QuickDecision
- QuickDecision is a small PalmOS application that uses the built in pseudo-random number generator to help you make decisions. The program was built partly as a joke and partly as an excuse to learn to program for the PalmOS.
SVG Projects
Scalable Vector Graphics (SVG) is an XML-based vector image format. It has been incorporated into HTML 5, and is supported by all modern browsers.
3D Printing Designs
In 2011, I got my first 3D printer. Although I spent quite a bit of time printing other people's designs, I soon began making my own. My tool of choice has been OpenSCAD.
- Printables Designs
- Most of my designs have been moved to Printables.com.
- Thingiverse Designs (deprecated)
- When I first started printing, Thingiverse was the go-to spot for designs. Since most of my designs have been copied to Printables, I'm no longer depending on Thingiverse.
- Designs on github
- In some cases, I have released the repositories for some of my designs on GitHub.
Specific Designs of Interest
Some of my designs are a bit more interesting (in my opinion) than others. These are direct pointers to some that I'm particularly proud of (for one reason or another).
- T-Slot HexNut Holder
- My first functional design from 2011. Hold M3 nuts in place while building a Thing-O-Matic. That printer was built in plywood and used these hex nuts and screws in a kind of t-shaped or cross-shaped hole. I had a lot of problems with the nuts falling out as I tried to assemble and disassemble the kit. This was my solution.
- Calligraphy Ink Stirrer
- My wife is a calligrapher among her many skills. For some of her commissions, she mixes her own ink. She had been stirring the ink in small containers with a toothpick. We talked about a design with little wings that would do a better job. This was the result.
- Starfury Model
- My first complicated model (from 2011) was an attempt at designing an Aurora-class Star Fury from Babylon 5. This design is pretty crude and not how I would design it if I ever tried again. But, it was a complicated, multi-part model designed in OpenSCAD.
- Framework Expansion Card Holders
- After getting a Framework laptop, I realized that I needed a container to hold extra expansion cards. This project was my answer.
- Calligraphy Tools for Gridfinity
- After spending some time with the Gridfinity system, I had the idea of making Dinky Dip holders and pen holders for the gridfinity system.
- Flowers in OpenSCAD
- In 2014, I had been working in OpenSCAD for a few years and decided to try to design a more organic shape using the tool. I knew that the tool was not a good fit for organic shapes like flowers, but I decided to try anyway. My first attempt was a pretty simple tulip design. The rose-v2 was somewhat more ambitious.