Benjamin Sago / ogham / cairnrefinery / etc…

My Projects

If I had to sum up my development style, I would say I like making cohesive, colourful, command-line applications. Here are some of the applications and websites I’ve written.

Throughout the entire time I’ve spent on these projects, I’ve enjoyed being able to design and configure every part of the technological stack, from the servers and infrastructure they run on to the design and content of the sites themselves. You won’t find WordPress here!

dog

dog is a command-line DNS client. The DNS engine it uses is entirely custom-made by me, after reading a lot of DNS RFCs.

When you start hosting your own websites, you also have to start debugging your own problems. I used to use dig, the ‘standard’ DNS client, but I wasn’t fully happy with it — I wanted something more like HTTPie, something that just tells me the information I need to know, without any clutter. dog is that tool, at least for me.

dog is open-source, with the source code available on GitHub.

Tools used:

The dog binary is written in Rust, and its website is powered by Ruby and Sinatra.

https://bsago.b-cdn.net/a/work/A screenshot of dog’s home page.

exa

exa is a modern replacement for the venerable ls command-line program. It was a project I wrote to learn Rust, and it just grew and grew.

exa got very popular! It’s by far the most well-known thing I’ve created. Currently it has over 10,000 stars on GitHub.

Furthermore, the ansi_term library, which I originally wrote for exa before spinning it out into an independent product, has been downloaded over 13 million times.

exa is open-source, with the source code available on GitHub.

Tools used:

exa is written in Rust. The website is powered by Ruby and Sinatra, with Nomad and Redis working in the back-end.

https://bsago.b-cdn.net/a/work/A screenshot of exa’s home page.

RFCs.io

I think it’s an extremely good thing for humanity that the complete set of specifications and network protocols used to create the Internet are free for anyone to view and implement — the only trouble is that there are so many of them!

RFCs.io is a website I built while researching the DNS specifications for dog. As I was implementing its custom DNS engine, I had to keep track of which specifications were in use, which were obsolete, and which were newly-created. This ended up proving so useful that I turned my notes into a public website, with support for many other procotols, in the hope that others find it as useful as I did.

As a reference site, RFCs.io has a deliberately spartan design. It loads quickly, with no distractions getting in the way of what you’re looking for.

Tools used:

Nothing but HTML and CSS.

https://bsago.b-cdn.net/a/work/A screenshot of rfcs’s home page.

What-the-Format

What-The-Format is a code decipher-er. If you give it a format, such as a phone number, car numberplate, or networking identifier, it will detect the format or code being used and tell you the meanings of each particular field.

It started after a haphazard attempt at selling my phone online. Over the years, I’ve added many more codes that I’ve found in reference manuals, on the corners of signs, and in all sorts of random places in public.

Under the hood, this is my first attempt at an application that’s made up as a bunch of services. The parser, website, and terminal renderer are all implemented as separate processes that communicate using a common interface, with a front-end service that ties them all together. I’ve enjoyed being able to push an update to only one limited part of the site, knowing that my deployment will affect as little of it as possible — and if something does go wrong, the orchestrator will detect the fault and automatically roll everything back.

Tools used:

The website and front-end service are both written in Ruby with Sinatra. The back-end services are written in Rust, using Rocket as the HTTP engine. Docker, Consul, and Nomad are all used to power the back-end service infrastructure.

https://bsago.b-cdn.net/a/work/A screenshot of What-The-Format’s home page.
Home page