This post provides a quick summary of the major things I’ve worked on in 2024. 
 
 Added support for Go 1.11–1.19 execution traces to the new Go trace parser. 
 Wrote honnef.co/go/safeish , a Go package containing helpers for unsafe
code. 
 Released Staticcheck 2024.1 , improving support for Go 1.22 and adding support
for Go 1.23. 
 Released Gotraceui 0.4.0…
Hugo lets us add aliases to pages. This is useful to, for example, transition from an old URL scheme without breaking
existing links. 
 Hugo achieves this by generating additional HTML files, which contain <meta> tags to specify the canonical URLs and to
redirect to them. 
 However, if you host your Hugo site on Netlify, you might want to use its _redirects file instead. This…
This article documents the entirety of my org-mode based workflows, from note-taking to generating a website. I’ll
mention all relevant packages, applications, and configuration. 
 
 The core of the workflows ¶ 
 
 My workflows are based around org-roam , a personal knowledge management system built atop org-mode. At its core,
org-roam implements an index of notes,…
The following are my thoughts on the Go Generics Draft. I will focus on the things that I disagree with or think are
missing. 
 
 Contracts are nice, but where is the operator overloading? ¶ 
 
 To me, the generics problem has always also been a problem of operator overloading. Consider the basic example of a Sum
function: 
 contract Addable(t T) {
 t +…
Over the last year, Slack, the communication tool for teams, has been becoming popular in the open source community,
replacing alternatives such as IRC and Gitter. This was – rightly so – surprising to the people behind Slack. After all,
Slack is designed for companies. This is evident in the lack of features that open communities would want, and the
presence of features and design…
A common misconception among Go developers is that stripping Go binaries – that is using the strip(1) Unix utility –
is unsupported and leads to broken programs. This misconception is perpetuated on mailing lists and other forums without
providing actual proof for why it is supposedly unsafe. 
 This article will try to explain how this misconception came to be and why it is not a real…
Kubernetes provides a way of scheduling and managing resources such as containers, storage and load balancers in a
highly automatic and easy fashion. It’s a prime example of Infrastructure as Code . 
 Let’s Encrypt , by its use of the ACME protocol , provides a simple and automatic way of obtaining TLS certificates that
are trusted by all major browser vendors, completely…
Today I had to merge a bunch of existing git repositories into a new monorepo . I had the following requirements: 
 
 The entire history of each repository had to stay intact. This includes the requirement that git log -- somefile 
works without needing any workarounds. 
 Each repository $repo should be merged into $repo in the monorepo. 
 Being able to merge new changes…
(Click here to skip the flavor text and go straight to the commands.) 
 Most people appreciate the fact that Go programs compile statically, as it makes deploying Go programs a lot easier.
Unfortunately, they aren’t always statically compiled. 
 Using cgo, either in a 3rd party package or in the standard library, usually requires linking to a libc. Both net and
 os/user are…
Go is an amazing language, but not just because of its language features, but also because of its ecosystem and how easy
it is to write tools that operate on Go code. 
 While languages and frameworks like Java and .NET have popular IDEs (e.g. Eclipse and Visual Studio) that can do
formatting, refactoring, code generation etc, the Go ecosystem focuses on small standalone tools and…
It’s 2014, we’ve survived Christmas and New Year’s Eve and the Go team has begun work on the next release. And thus the
 What’s happening in Go tip series has started again. 
 For this iteration of the series, there will be some small adjustments. The main change will be the lack of a strict
weekly cycle. There might be multiple articles a week, or none. This is…
One of Go’s strengths is its built-in support for cross-compilation. Setting up and using cross-compilers in Go is
completely painless and mainly involves setting some environment variables. 
 There is, however, one drawback to cross-compiling Go programs: It’s not possible to use cgo. Cgo is used for writing
bindings to C libraries so that they can be used directly in Go.…

 Go 1.2 Release Candidate 1 released ¶ 
 
 This week’s article will be very short. Why? Because the first release candidate of Go 1.2 has been released! And
because that release includes a list of all changes – many of which I have covered before as well as all the ones I
haven’t yet – there is little point to reiterating them all again here. 
 Go check out the…
This week we’ll concentrate on changes to go vet and gofmt , two important parts of Go’s tooling, as well as some
changes to cgo, some of which are especially important to users of OS X. 
 
 What’s happening ¶ 
 
 
 Improved go vet 
 Improved gofmt 
 Changes to cgo 
 
 
 Improved go vet ¶ 
 
 Relevant CLs: CL 12936046 , CL…
Welcome back to yet another update on Go tip. We’ll be looking at another batch of smaller changes from all over the
place; there’s something for everyone. 
 And if you’re waiting for some juicier changes, let me just say that they’re on my radar, but I am reserving them for
the finale. Well, really for the big hole that the feature freeze will cause. 
…
Welcome back to another week of Go tip. This time we’ll mostly be focusing on smaller changes and API improvements.
Enjoy! 
 
 What’s happening ¶ 
 
 In this week’s article we will be looking at: 
 
 Go becoming a better citizen 
 Support for encoding GIF images 
 User-extensible compression methods for archive/zip 
 Easier hashing with MD5…
Last week I published the first article in an ongoing series on changes in Go tip. It was met with a lot of positive
feedback, so here’s the second article. Thank you for your support and I hope you enjoy this article just as much as the
previous one. 
 
 What’s happening ¶ 
 
 This time we’ll be looking at: 
 
 A new slicing syntax 
…
This is the first part of an ongoing series on changes and developments in Go tip, i.e. the development branch of Go. 
 In this series I intend to look at noteworthy recent CLs 1 and proposals and comment on their significance and
impact. For CLs, I will be concentrating on those that have either been already committed or that have been rejected, if
they had been of significance. For…
Back in Mach I demonstrated various ways in which go-mode can help you write Go more efficiently. 
 Today I want to post a quick follow-up, showing two new ways to improve your performance. One is a very handy 3rd party
package, while the other is a direct addition to go-mode. 
 
 go-eldoc.el ¶ 
 
 go-eldoc.el by Syohei Yoshida implements ElDoc functionality for go-mode.…
Using the right tools plays a big role in getting your job done efficiently. In the case of programming Go, most of your
time will be spent in an editor. It is therefore key that your editor doesn’t get in your way and, optimally, assists
you wherever it can. 
 In this article, I will talk about go-mode for Emacs, its history and features, as well as useful extensions to it.
A well known design decision in the Go programming language is the absence of implicit type conversions. An int is
always an int and not an int32 and certainly not a float . And a net.IP is not a []byte … or is it? 
 Knowing only the “no implicit type conversions” principle, the following code should not compile: 
 package main

import (
 "fmt"
…
One not well documented aspect of Go is how it handles string encodings, or how strings are actually treated internally.
This article tries to shed some light on basic aspects of that, to get you started. 
 
 It’s all UTF-8, right? ¶ 
 
 A source of confusion is the fact that Go source code has to be encoded in UTF-8, meaning that string literals,
variable/function…
A couple of days ago I released Cinch 2.0 – version 2.0 of the most-used IRC library written in Ruby. The purpose of
this article, however, is not to talk about all the new features and improvements in Cinch (check the changelog if
you’re curious) but why it breaks backwards compatibility and how that’s not a bad thing. 
 The Ruby community basically has two main camps:…
I’ve been running a RAID 6 with four active disks for quite some time now, and performance always seemed adequate,
achieving about 230MB/s read and 90MB/s write (obviously in rather artifical tests using dd; actual file operations
might vary). 
 Now it occured to me, that encrypting my data might actually be a good idea, so I looked into cryptsetup for adding
encryption on…
This is part three of a series of me describing my new experiences with electronics. 
 First of all, sorry for the late third article, but ever since I received my Arduino I was really busy playing around
with it. 
 Quite a bit has happened since my last article and I will try to catch up as quickly as possible. One thing that
happened is that I had to order quite a bit more tools…
This is part two of a series of me describing my new experiences with electronics. 
 As I said in my last post, I want to start with simple hardware. The reasons for this should be pretty obvious: neither
do I have a concrete idea for a project, nor am I certain that I’ll stay interested for long enough. Consequently, I
don’t want to spend too much money. 
 A rough…
This is part one of a series of me describing my new experiences with electronics. 
 
 Introduction ¶ 
 
 I’ve never really been interested in electronics (i.e. circuits, microcontrollers etc). Sure, I understand, on a basic
level, how most of the gadgets and computers that I own work, but I wouldn’t be able to build anything myself or explain
what e.g. a diode…
Disappointed with SelectionMemory and not willing to pay $5
for SelectionMemory2 (not mentioning the bad interface it has), I went
to write my own plugin for saving and restoring selections. 
 The main benefits compared to other solutions are: 
 
 It is free 
 It has no artificial limit with regard to how many selections can be saved 
 It is driven via the context menu…

 Introduction ¶ 
 
 Some time ago, I started reading Where Good Ideas Come From: The Natural History of Innovation and one thing it
mentions is an application called “DEVONthink”. DEVONthink is an application you’d use for storing all kind of documents
(RSS feeds, emails, notes, articles) and the by far most interesting feature is its ability to recommend…

 What screen is ¶ 
 
 If you’re reading this article, you probably already know what GNU Screen is: the most well-known terminal multiplexer
in the world of Unix. If that doesn’t ring any bells, I recommend reading the Wikipedia article about GNU Screen before
continuing with this article. 
 
 An Alternative ¶ 
 
 There are, however, also some other…
A lot of time (3 months, actually) has passed since I’ve last blogged about Ruby and available IRC frameworks for
writing bots . Back then I planned to fork Isaac or Cinch, in order to add proper abstraction and object-orientation to
them. Well, I did fork Isaac, realized that it was, in all honesty, quite a mess and instead wrote my own framework,
mostly from scratch. I did,…
Recently I’ve been looking for a small framework for writing IRC bots in Ruby. Admittedly, I have been successfully
running a bot based on Butler for quite some time now, but I have always been looking for a more lightweight
solution, which does not come with a predefined plugin or authentication structure. 
 Now there are probably three major players in the field of IRC bots,…
Given the following initial code… 
 class Dog
 def initialize(name)
 @name = name
 end

 def bark
 puts "woof"
 end
end

charlie = Dog.new("Charlie")
lucas = Dog.new("Lucas")
 
 … one might want to teach one of the dogs a new trick, while the others shouldn’t automatically learn it. One possible
solution could look like the…
There is one thing that either we, the helping people, or those that
search for help with their code don’t get, and that’s what
kind of answers are to be expected. 
 Every too often I see people joining certain channels, in particular
#ruby and #ruby-lang, asking questions about why their code
doesn’t work or how to implement feature XY. And of course…

 Background ¶ 
 
 The subdomain I use belongs to a friend, who isn’t able to set A or CNAME entries, so he uses lighttpd + mod_proxy to
redirect it to my server. 
 
 The Problem ¶ 
 
 And that’s where the problems started. Because of the proxy, the HTTP REMOTE_ADDR isn’t the one of the visitor anymore
but the one of the proxy, which in turns…
Today we were faced with an interesting question in #ruby-lang: 
 
 <Judofyr> is there a way to find out if it’s safe to call “super”?
<Judofyr&> aka. it’s defined on the superclass 
 
 After some ugly solutions (like self.class.ancestors.any? and super rescue nil ) apeiros came up with a nicer one: 
 
 <apeiros_> super if defined? super 
 
…
Today I read the first volume of Smalltalk Best Practice Patterns, or to be precise, a draft I found on Google. While I
am a Ruby programmer and never even touched Smalltalk in my life, it is an undeniable fact that Ruby and Smalltalk have
many things in common, or to put it in another way, that Ruby (or any real OO language really) was inspired by
Smalltalk. 
 The book is, like…