RSSAmplifier

Blog

kinbiko.com

Recent content on kinbiko.com

kinbiko.comRSS feed ↗34 posts

Latest posts

Installing Rockbox on an iPod Classic 7G with iFlash from Linux: a sector size odyssey

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…

4-4-6-2 Meditation

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.

Incidents and Blame

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:…

Managers and Incidents

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…

Naive Musings on AI

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…

Writing More, Publishing More

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…

How I Write Go

Tips and tricks around writing Go after 8 years.

Go Workshop

Beginner workshop introducing the syntax and key ideas of the Go programming language.

Docker Deep Dive

This talk introduces Docker to beginners with lots of practical demos, introduces best practices for experienced users, and discusses the internals for advanced users.

Profitable Go Tests

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.

Commandline Foo

Some tips and tricks to make you love working on the command-line.

Cross Cultural Teams

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.

Automating your CV

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…

Auto-merging Dependabot PRs

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…

(Go) Error messages should be boring

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…

Rewriting my Neovim .vimrc in Lua

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.…

How Iota works in Go

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,…

Hiding Directories in Finder

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…

Testing Tips for Intermediate Gophers: Coverage

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…

Function Types in Go

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…

mokku -- How I built a Go Mocking framework in 5 days

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.…

Testing Tips for Beginner Gophers

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…

jsonassert -- A test utility for comparing and verifying JSON

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…

Feature-oriented package structures and the default access modifier

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 Dependency Injection Patterns -- The good, the bad, and the ugly

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:…

Git and GitHub Workshop

This event is for beginners, and covers fundamental Git concepts from scratch.

10 Basic Shell Commands Every Beginner Should Know

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…

My Shiniest Vim Gems

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…

Modern Approaches to Dealing with Legacy Code (x-post)

I wrote an article on how to manage your legacy systems using modern tools and techniques on my work blog. Please check it out .

Sentiment Analysis Workshop

Learn some basics of sentiment analysis in Python, using both rule-based sentiment analysis and ML based sentiment analysis.

Calendar

Opportunities

Roger Guldbrandsen

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…

Utils