Some projects I've been working on recently.

I’m currently working on the following, all of which I’ll post about as things progress.

  • Drawing package for points, lines, circles, discs, anti-aliasing etc.
  • Server for multiple static sites on a single port with zero-config https.
  • Function server for Go functions, like AWS Lambda or Azure Functions.
  • Microsite/content/article/blog server - multiple sites on a single port.

Further details follow. For general details on what I do, see my About Me page.


Drawing package for points, lines, circles, discs, anti-aliasing etc

This is a simple Go package for drawing on a 2D surface. It includes primitives and PNG export, and will also support sprites and related higher-level constructs.

  • Create surface, clear surface, with transparency
  • Plot point, horizontal line, and vertical line
  • Non-aliased line with fast integer routines
  • Anti-aliased line and plot
  • Rectangle outline, filled rectangle
  • Circle outline, filled circle
  • Polygon outline, antialiased polygon outline
  • Pre-calculated color gradient, weighted color on a scale
  • Write as a PNG stream
  • Some predefined colors and some functionality shows timings

More details are available in the drawing package repository.

Server for multiple static sites on a single port with zero-config https

Written in Go, this is a very simple yet very powerful web server.

  • No installation needed - single file to deply.
  • No configuration needed - a simple list of your website locations is enough.
  • All your sites on a single port on a single server for easy management.
  • Run on port 443 and HTTPS is automatic, including fetching, caching and renewing.

A function server for running Go functions

A little like AWS Lambda or Azure Functions, this is a self-hosted function server.

  • Drop the server onto a virtual machine or container. This is the only machine you’ll need for your entire infrastructure if you scale vertically. Given Go’s frugality and performance, a single average server should be up to the whole job for most people.
  • Deploy standalone Go Scopes in source form. The server will auomatically build them into a form it can use. A scope might be Billing, News etc and can contain multiple functions.
  • Exposed functions within each scope are made available by the server at endpoints like /fn/News/GetLatestNews.
  • Any number of scopes with any number of functions combine to create a whole infrastructure.
  • Function CPU time tracking is under way for stats purposes.
  • Any Go packages in the server’s Go cache are available for use in scope functions.
  • Support for functions in other languages and for service discovery is incoming. Also, support for network deploy of scripts is under consideration; currently you need to drop a scope’s Go source files into a server folder manually or via CI/CD.
  • This is not yet open source as it is in a state of extreme flux.

Small Sites - a server for multiple content sites (like this one)

  • Extremely simple to create content for, using Markdown content (other file types are supported) in a folder structure that defines your site’s structure.
  • Very fast rendering alongside a great cacheing system means high throughput without needing a proxy or other server in front.
  • A single binary file distributable gives the easiest deployment around.
  • Any number of sites served simultaneously on the same port and automatically routed via the host header.
  • More information on Small Sites is available here.