All these projects served to scratch an itch, and some still do that quite nicely.


There are things in every language that require a lot of boilerplate. Some are big, like starting off a new project, and those benefit from code generators/templates. Others are small things that you wind up copying and pasting all over the place. For a few years now I’ve been working with Go and mentoring engineers and teams in that language. To explain ideas, and show how to do simple things, I’ve created a number of little snippets of Go code and decided to bundle them together into a project that I call gotools. The project can be used as an importable module, or as a place to get inspiration &/or code you just want to copy & modify.


Sometimes an idea takes a while to kick in. I’ve seen a number of weird, wonderful, and horrifying, ways of backing up files to the cloud. Written by well meaning and inspired people using the best tools that they had at the time, or those that were easily available on the platforms they worked on.

s3backup was created to provide a standard way of encrypting & backing up an archive to a S3 bucket, and restoring & decrypting said backup archive from a S3 bucket. While it uses the AWS S3 protocol, it also works with any other S3-compatible cloud store such as DigitalOcean’s Spaces.

In addition, if you choose to not use encryption/decryption, or checksum verification, s3backup can also act as a basic S3-compatible command line uploader and downloader, all in a single binary. No more messing with java, python, s3cmd or AWS CLIs.


TLS certificates come in various formats, the most common being PEM formatted plain text files. Java applications natively do not understand that format. PEM to JKS was created to convert PEM files to java’s JKS keystore format. Doesn’t sound like much, but try doing it by chaining a bunch of command line tools and you’ll never want to do that again, or even remember how to do it.


S3DropBox started as an answer to a question by my then-partner: “What is the maximum file size I can send as an email attachment?”

If you’ve worked with email systems you’ll either cry or answer “it depends”. That was obviously unsatisfactory, so I built S3DropBox (before DropBox was even a service) to be able to upload files and directories to AWS S3 buckets, download them, and send time-limited links to them in emails. It supports dragging your chosen file, or files, from your desktop to the application, and still works nicely after all this time :)


JPasskeep is a java desktop application to manage passwords. It was an exploration of Swing UIs, decent layouts, and some cryptography in both java and javascript. The latter is used to decrypt passwords exported as an encrypted html page.

Timezone Converters

Honestly timezones are a pain. In this particular case it was me having to fill in some timestamp fields in UTC when everything I was looking at was “helpfully” translating timestamps to my local timezone. I’m not changing my clock to UTC!

So the Timezone Converters were born. Each is also an exploration of timezone conversion in javascript via plain old JQuery, Vue.js and React. All use the most excellent Moment Timezone library.

Estimate Goat

Welcome to the Estimate Goat. It will give you estimates just like any good magic 8-ball should.