Disclaimer: This entire blog post was written by AI. It is published because I want AI tools to more easily find and fix the problem I spent days debugging – even with the assistance of AI. If you’re trying to install Rockbox on a flash-modded iPod Classic from Linux and getting “No partition found”, you might be hitting the same invisible wall I did. The root cause turned…
I recently discovered 4-4-6-2 breathing: 4 seconds in, 4 hold, 6 out, 2 hold. It’s become my shortcut to calm down when I’m feeling stressed. A few cycles and I’m noticeably more relaxed.
I believe strongly that if an individual is to blame for a (production/security/operational) incident, then this individual should be fired. This is because I also strongly feel that the only acceptable time to blame an individual for an incident is in the case of intentional malicious action. Any other incident can trace the root cause to something systemic that could be improved. For example:…
There are plenty of texts talking about expectations of engineers and best practices during an incident. What’s not mentioned as often, mainly because giving feedback “up” is hard, is expectations of senior management. In a recent discussion at work, I naively proposed the following 3 expectations / guidelines for senior managers and above. Power Dynamics Link to heading The…
Let’s set aside the harmful impact AI has on artists (copyright), the environment (GPUs want electrons), and humanity (enforcing existing unfair systems) in general for a sec. Let me share where I’ve personally extraxted the greatest value from AI. I don’t find that AI does my job better than I do it. That is, the job I’m personally an expert at. For example, AI…
I want to write more. And publish what I’m writing more, not worrying about meeting some high bar before publishing. For one, writing helps me think clearly. Personally, I don’t “think” in words, but without turning my thoughts into words in some (human/computer) language I can’t communicate it to others. And by converting the idea to a form others can understand, I…
This talk introduces Docker to beginners with lots of practical demos, introduces best practices for experienced users, and discusses the internals for advanced users.
In this presentation I’m proposing a novel judgment method if a test is worth writing or not, and provide several tips for how to write high-quality tests in Go.
Co-presented with Chad Kohalyk, giving a short overview of Erin Meyer’s excellent book The Culture Map: Breaking Through the Invisible Boundaries of Global Business which lays out an 8-scale framework for analyzing business culture and developing strategies for an effective team.
I found that continuously updating my CV over time was a pain, so I simplified it and automated it. These days I use a simple CI workflow in a GitHub repository that generates a new .pdf CV based on a Markdown source file. If you like the sound of this, I’ve created a GitHub template for this pattern, should you wish to follow my example. The template contains placeholders to fit the…
Keeping your code’s dependencies up to date is hard, so luckily there are free tools like Dependabot around, that can create PRs against your repository whenever any of your dependencies have a more recent version updated. Depending on the size of your codebase, this can turn into quite a chore as you have to verify that the dependencies don’t break your code. A common solution is to…
When error messages contain “useful information” e.g. application-specific IDs or other variables then the error messages lose their “grepability”. In other words, you cannot quickly search a codebase for an error without removing anything you believe could be variable. You might not think this is a big issue, and I might even agree with you there, but you might as well…
I recently rewrote my Neovim configuration in Lua in order to take advantage of a more intuitive programming language for configuration, Lua-only plugins, and powerful Neovim-only features such as: The built in LSP: Language Server Protocol, IDE features like “show docs”, “find references”, “rename”, and “go to definition” for basically any language.…
Have you ever wondered how iota works in Go? Basically, iota is the index of the constant inside a multi-constant ( const (...) ) declaration. So the value of iota for the first constant is 0 , the second constant is 1 , and so on. This only works for constants, not var s. This is probably best explained with an example. package main import 'fmt' type day int const ( // Start counting days from 1,…
You might know that prefixing a file or a directory with . makes it ‘hidden’ in unix-based systems – i.e. they won’t show up when you run ls and they won’t show up in your file browser (e.g. Finder). However, did you know that MacOS lets you hide any directory in Finder – even if it’s not .hidden – using chflags ? $ chflags hidden dir1 dir2 dir3 I…
This article will cover how to get visibility of your test coverage in Go. If you’re not comfortable with the basics of testing in Go, please checkout my earlier article aimed at beginners . Test coverage Link to heading Test coverage gives you a high-level overview you how much of your production code was invoked in your tests (e.g. as a percentage), but it can also give you a lower-level…
A while ago, I saw a question in a Go developer Slack channel that went something like this (translated): When would you want to define a function type like type MyFunc func(msg string) error ? Do you have any examples? I replied with a http.HandlerFunc example (more on that below), but there were many developers smarter than me in that Slack channel, and I ended up learning a lot from the other…
This past week I’ve had the privilege of having a Hack Week where I work, where we can work on whatever we wanted. I ended up building Mokku – a mocking framework for Go that gets out of your way. Key features Link to heading Invisible: No hard ( import ) or soft ( //go:generate ) dependencies to add to your codebase. Unintrusive: Can be included in any developer’s workflow.…
Let’s have a go at writing tests in Go. Puns aside, testing in Go is baked into the language. Assuming you’re comfortable with the Go basics , let’s get started with writing tests. First of all, the way you run all tests in the current package is: $ go test However, unless you’ve got tests in your project nothing is going to execute. Go tests have to follow these three…
Today I released v1.0.0 of a Go package called jsonassert . It is my first self-motivated open source contribution that I think has a chance of being useful to someone other than just myself. Okay, that’s not quite true but it’s the first one I’ve written in Go. I realised the need for this package when attempting to increase the test confidence of a relatively untested package…
In Java we have 4 access modifiers that can be applied to methods and fields of a class. In descending order of visibility, they are: public String publicModifier = 'Anyone can access me' ; protected String protectedModifier = 'Only accessible to classes in the same package as me, and my subclasses' ; String defaultModifier = 'Only accessible to classes in the same package as me' ; private String…
Spring developers will be familiar with its powerful Dependency Injection API . It allows you to declare @Bean s that Spring then instantiates and manages. Any dependencies between these beans is then resolved by Spring and injected automagically. Three Annotation-based Injection Patterns Link to heading There are three ways Spring lets you declare the dependencies of your class using annotations:…
If you aspire to be a developer, sys-admin, or some other profession that relies on computers outside of word documents and excel spreadsheets then you ought to be comfortable with a command line. Software and IT professionals love their command-lines as it is much more powerful than any GUI could ever be. This article aims to get you started from no prior knowledge. If this is completely new…
Vim is highly customisable, and I recommend everyone tailor their config according to their own preferences. That being said, here are some bits I think people may want to steal from my .vimrc . I tried to avoid the more common options you’d find in similar articles written by others, such as enabling line numbers, tpope ’s surround plugin, or sane backspacing, and focus on the…
Hello 世界 Link to heading I’m a software guy based in Osaka, Japan . I speak 🇬🇧 English, 🇯🇵 Japanese, and 🇳🇴 Norwegian, and as for software technologies I’m an expert in distrubuted systems of microservices written in Go or Java , running in Kubernetes clusters. I’m also familiar with JavaScript and Python . I love teaching and mentoring aspiring and junior engineers, and am…