mjl blog

March 21st 2024

Cross-referencing code & specs for maintainability

You’re implementing a network protocol. You read the specs, make a mental model and a design to fulfill the requirements, do some prototyping, check against existing software implementing the protocol, then continue with the details until the implementation is finished. Yo...

January 24th 2024

A year of mox

A lot has happened for mox in the past year. And despite good intentions, I haven’t written a blog posts about any of it!

Wait, what is mox?

A modern, secure, all-in-one mail server. The goal is to make it easy to run your own mail server. So you can stay in control of y...

March 24th 2020

Server-sent events (SSE) disconnects when clicking download link

I’m a fan of server-sent events, or SSE. They are a very lightweight option to send streaming updates from a webserver to a client. I’m using it in ding, a modest build server for small teams. Ding sends updates about a build (e.g. the build output log, build failure/suc...

March 19th 2020

Sconf: simple configuration files

I used to write config files for my admittedly small/simple services in JSON. Mostly because they are reasonably easy to read/write as human, and everyone and their programming language can handle it.

It isn’t great though. Not new information, we know this. Still, a quic...

March 19th 2020

Goreleases: package for installing go toolchains

Through the golang issue tracker I recently stumbled upon the JSON-mode of Go download page: https://golang.org/dl/?mode=json&include=all.

Quite useful for build server software that wants to allow builds (of your software) with new Go releases quickly (and automatedly), bu...

July 27th 2018

Experiences with Go modules

Go 1.11beta2 is out. And it includes the new Go modules support, what started as vgo. Go beta’s are delightfully easy to try out:

go get golang.org/dl/go1.11beta2
go1.11beta2 download

I wanted to use it. See how it feels. And… it works pretty good! I even started usin...

April 17th 2018

Announcing duit: developer ui toolkit

Hi! In this blog post I’m announcing duit, which is a

  • pure go (*)
  • cross-platform
  • MIT-licensed
  • UI toolkit
  • for developers

It is pure Go – no C code or external library involved. The asterisk represents the runtime dependence on a helper tool. It provides duit with cros...

Full post 6 comments
November 27th 2017

Running accountless for fun and ...

Want to see your software break? Run it in an way that is slightly different than usual. For example under a UID that doesn’t have a system account.

I’ve been using Ding to build software. Both Go software and Java software. Resulting in three instances of “fun”.


November 26th 2017

Ding with privilege separation

Ding v0.1.0 has been released just now. Biggest change? Privilege separation. Get it at https://github.com/mjl-/ding.

Ding runs builds under a unique user id (uid), so builds can’t interfere with each other. It already did before this new release. But it was a kludge to s...

November 25th 2017

xcode license nonsense wasting time

A good chunk of the day went into debugging hanging builds in Ding, a new build server. Turns out it wasn’t dings fault.

I had just added privilege separation to Ding. Unfortunately, builds were now hanging… I checked and double check the code. Tested different configur...

Full post 1 comment

Older posts:

Announcing Ding: build server for developers
Layout glitches when switching between short & long pages
Small annoyances on the web: Checkboxes without a label
Comma or Tab in a Comma Separated Values file?
Printing a database schema on paper
Hiding UIView's in iOS
Use the function form of "use strict"
theThingsNetwork LoRaWan messages on a map
Terminals and unix tools
Serving a godoc vfs.FileSystem with http.FileServer
Backups on Google Cloud Storage, with Go
Tokenizing lines with (quoted) strings in Go
Including files in go binaries
Scgi server for go