Robert Hickman

Ocarina Making

My main focus between 2012 and 2020 has been making and playing ceramic ocarinas. I started doing this after working in computer programming making websites, wanting something that would lead to meeting more people.

I have developed ocarinas in many keys and developed them alongside learning to play. It lead to developing the ergonomics of the instrument.

Hostel booking system

I wrote a booking system for a local backpackers hostel. It has been updated progressively over time, most recently adding accounting features. It uses ideas borrowed from React.js and Rich Hicky's Clojure.

Pure Ocarinas website

This is the website of what has been my primary focus for the past 8 years. The ocarina is a musical instrument which is typically ceramic. The website and all content and images were created by me. It includes a large tutorial about playing the instrument that has also been published as a book.

The site was written from scratch with PHP with sparse use of JavaScript where needed. For example a number of interactive teaching aids. In total it is about 20,000 lines of PHP, javascript and CSS.

* Fast, based on plain code with little abstraction.

* Fully custom shopping cart with no user registration.

* Content versioning allowing content to be edited and published later.

* Content formatting using a custom markup language with an real AST based parser.

Books

I have written two books, Serious Ocarina Player and The Art of Ocarina Making.

Serious Ocarina Player is based on many years of research about playing the ocarina. When I picked up the instrument little guidance was available and I had to learn how to play by trial and error. While playing with other musicians I learned how to play better. And seeing other people frequently

making the same mistakes, I started documenting what I had learned on my website. That grew substantially over time, and I also published it as a book.

The Art of Ocarina Making came from a similar basis of learning how to make musical instruments. It was written to bring information from numerous sources and personal research into one place. The book was subsequently updated to add more information on ergonomics and tuning.

Simple HTTP File Sync - python

Writing my two books entailed working with a lot of images and I wrote this tool to help track changes to them. It has features including atomic commits, partial checkouts, and only one copy of each file is stored in a checkout.

This is implemented as a small command line python application. Server data storage is in the form of a directed graph similar to git. Client server authentication uses libsodium, and data can be encrypted in transit using TLS.

I wrote this tool after attempting to use pre-existing solutions for years, and none worked as desired. Subversion works reliably, but wastes too much storage due to keeping two copies of every file in a checkout. With decentralised

systems such as Git, that issues is even worse.

Others are mostly designed around a system where files are watched and changes synchronised automatically. Tools of this nature are inherently limited as most file systems in use today do not support snapshotting and atomic operations. That means that if files are changing the tool may pick up a partially written file. Due to that, I wanted something where commits are made manually.