Dnsclay provides a standard DNS UPDATE/AXFR/NOTIFY interface for changing DNS records at your DNS operator that only provides API access through their custom web API. Need for an API When you register a domain name, the company you register it through typically sets up DNS...
There’s a new tool in town! It’s called ysco, and it provides managed automated updates for Go services, without requiring changes to the application. The launch party was at the Go Rotterdam meetup earlier this evening. Special thanks to the organizers for running a we...
For better or worse, I find myself typing more and more text in textarea/input elements in web apps these days. Especially now that I’m writing most emails in the mox webmail client. It was high time to enable vi editing mode in Firefox. One problem: Firefox doesn’t see...
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...
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...
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...
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...
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...
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...
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...
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”. F...
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...
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...
Ding has been released! Get it at https://github.com/mjl-/ding/ . You get code under an MIT-license, but binaries are provided for your convenience. I talked about ding last week at the Golang Amsterdam Meetup, https://www.meetup.com/golang-amsterdam/events/244621922/ . I wa...
Let’s see if you recognize these symptoms. Say you open a web application. It’s content vertically fits in the viewport. So there is no need for a scrollbar, and your browser doesn’t display it. Now you open another page in that web application. It is a long page, do...
I’m quite regularly surprised by websites all over the internet. Not just by crappy websites. Also beautiful, well designed websites. From big companies. The surprise (and annoyance at the same time) is this: Their sites and web apps have checkboxes, with an explanatory l...
Quick question. What do you think is the separator in a “Comma Separated Values” (CSV) file? If you are like me, or think in ways I can identify with, you just answered “comma”. If you are a software developer on the Microsoft Excel team, you apparently thought thi...
Understanding new information requires an overview of all relevant information. Laying out all the details can help. Like when you’re trying to understand a database schema, with lots of relations. It can help to see it on paper, you can point and write down notes. Thi...
Standard UI widgets in iOS look quite nice. It’s what most non-game apps use. UI programming has never been one of my strong suits. But writing UI’s for iOS has always seemed one step too low-level. Note: I’ve also done Android programming, with UI’s, and it also doe...
If you’ve done any JavaScript development, you’ve probably used jshint. It’s invaluable in pointing out all the weird stuff in JavaScript that you’re about to shoot yourself in the foot with. Also, you should really “use strict”. This is a statement/expression t...
Yesterday and today I was at a joint Gopher Gala meetup from the Golang Amsterdam meetup and theThingsNetwork at the Rockstart office in Amsterdam. Most people were playing around with Lorawan hardware (sending packets) and writing Go code. Exactly as planned! Do I wanted ...
Had a minor frustration today. One that I’ve had before. I wanted to connect a LoraWAN dev kit board to my MacOSX laptop. It has a serial-over-USB interface. That means you don’t need any extra cables or stuff to get started. Great! But you still need software to connec...
The short version: See https://godoc.org/bitbucket.org/mjl/httpvfs for a tiny library that makes it easy to use net/http’s FileServer() on a vfs.FileSystem from godoc. The longer version: I’ve been writing a few HTTP services in Go again. The “asset” library has bee...
Some more fun today. I had to set up some backups on a VPS. There are many backup tools around, but they all seem so complicated. And many don’t store to cloud storage providers, which is want I wanted to do. Was that a good enough excuse to write Go code? I hope so (;. ...
While programming some new tools, I needed to parse configuration files. Normally, I would read a file, remove all empty lines and lines starting with a “#”. Then tokenize each line and treat the tokens as commands. I could even treat them as actual commands with flags ...
I had some fun writing code to add assets to go binaries. I.e. arbitrary files the program needs at runtime, e.g. HTML templates or JS/CSS files. After too little research on existing solutions, I jumped in and wrote some code. Of course, it turns out this has been done be...
Just created a new package scgi , read the docs at godoc.org. It’s an SCGI server that works with package http . There is other go code available for serving scgi, but it seems to work outside of the http package, so tries to do too much. With this package, you change your...