<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://cbrgm.net/</link><description>Recent content on</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 10 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://cbrgm.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Recap: Architecture Advice Process - Tech Talk by Eric Doernenburg</title><link>https://cbrgm.net/recap-architecture-advice-process-tech-talk-by-eric-doernenburg/</link><pubDate>Wed, 10 Dec 2025 00:00:00 +0000</pubDate><guid>https://cbrgm.net/recap-architecture-advice-process-tech-talk-by-eric-doernenburg/</guid><description>&lt;p>We recently had Eric Doernenburg from ThoughtWorks at our MOIA office for a tech talk on the Architecture Advice Process. Good timing because I&amp;rsquo;ve been thinking about how we make architectural decisions in our platform engineering team and where the friction points are.&lt;/p>
&lt;p>The talk started with a familiar scenario: development teams need architectural decisions, but they go through a central architecture board. Initially it works fine, but as it scales the architect&amp;rsquo;s inbox piles up. They start sending standard documents instead of custom responses, teams wait in queues, urgent issues can&amp;rsquo;t jump ahead. Worse, the feedback loop breaks completely. When teams implement decisions and learn what works in practice, that knowledge stays siloed. It never makes it back to the architect.&lt;/p></description></item><item><title>Recap: Attending GopherCon UK in London</title><link>https://cbrgm.net/recap-attending-gophercon-uk-in-london/</link><pubDate>Thu, 15 Aug 2024 00:00:00 +0000</pubDate><guid>https://cbrgm.net/recap-attending-gophercon-uk-in-london/</guid><description>&lt;p>Just got back from GopherCon UK 2024 in London (August 14-17) at The Brewery on Chiswell Street. First time back in London since 2015, and the city has definitely changed — much more hectic and crowded than I remember.&lt;/p>
&lt;h2 id="exploring-london">Exploring London&lt;/h2>
&lt;p>Arrived a day early to get some sightseeing in. Walked along the Thames past Tower Bridge, Parliament, and Big Ben. The weather was surprisingly good for London in August, so I kept going all the way to Buckingham Palace and took the tube back from Green Park to Bethnal Green where my hotel was.&lt;/p></description></item><item><title>Recap: Attending GrafanaCon 2024 in Amsterdam</title><link>https://cbrgm.net/recap-attending-grafanacon-2024-in-amsterdam/</link><pubDate>Fri, 12 Apr 2024 00:00:00 +0000</pubDate><guid>https://cbrgm.net/recap-attending-grafanacon-2024-in-amsterdam/</guid><description>&lt;p>Went to GrafanaCon 2024 in Amsterdam, July 7-10. First time attending in person after years of watching remotely. My colleague and I took the train from Hamburg — direct connection, easy trip.&lt;/p>
&lt;p>We arrived Monday evening, checked in, and went out for food and beer.&lt;/p>
&lt;h3 id="the-conference">The conference&lt;/h3>
&lt;p>The venue was the Muziekgebouw on Piet Heinkade, right on the water. About 300-400 attendees, which felt like a good size — small enough to actually talk to people.&lt;/p></description></item><item><title>Talk: Introduction into Go Profiling: Tools</title><link>https://cbrgm.net/talk-introduction-into-go-profiling-tools/</link><pubDate>Sun, 15 Jan 2023 00:00:00 +0000</pubDate><guid>https://cbrgm.net/talk-introduction-into-go-profiling-tools/</guid><description>&lt;p>This is a written version of a talk I gave on profiling in Go — what tools exist, how to use them, and how to read the output.&lt;/p>
&lt;h2 id="what-profiling-is-and-isnt">What profiling is (and isn&amp;rsquo;t)&lt;/h2>
&lt;p>If you&amp;rsquo;re already doing observability (logs, metrics, traces), profiling fills in the gap: it tells you &lt;em>where&lt;/em> your application spends CPU time, allocates memory, or blocks on locks. It&amp;rsquo;s the difference between knowing your service is slow and knowing &lt;em>why&lt;/em> it&amp;rsquo;s slow.&lt;/p></description></item><item><title>Personal: 2022 Year in a Review</title><link>https://cbrgm.net/personal-2022-year-in-a-review/</link><pubDate>Tue, 20 Dec 2022 00:00:00 +0000</pubDate><guid>https://cbrgm.net/personal-2022-year-in-a-review/</guid><description>&lt;h2 id="work">Work&lt;/h2>
&lt;p>Still at &lt;a href="https://moia.io/en">MOIA&lt;/a>, now on the Developer Experience team. Earlier this year we split the Platform Engineering team into Infrastructure and Developer Experience. After years of infrastructure work, I&amp;rsquo;ve enjoyed shifting toward software development while keeping one foot in infra.&lt;/p>
&lt;p>The biggest lesson from this role: you have to actually talk to other dev teams to find out what&amp;rsquo;s broken. We started running structured interviews with development teams to identify pain points, and it&amp;rsquo;s been one of the best things we&amp;rsquo;ve done. DevEx is still young at MOIA, but the interview process has given us real signal about where to focus.&lt;/p></description></item><item><title>Talk: DevFest Hamburg 2022 Workshop Recap</title><link>https://cbrgm.net/talk-devfest-hamburg-2022-workshop-recap/</link><pubDate>Sat, 05 Nov 2022 00:00:00 +0000</pubDate><guid>https://cbrgm.net/talk-devfest-hamburg-2022-workshop-recap/</guid><description>&lt;p>I led a beginner Go workshop at DevFest Hamburg 2022. About three hours, from zero to a working HTTP server.&lt;/p>
&lt;p>&lt;img src="https://gist.github.com/assets/24737434/ace0dd6e-141a-43ed-886f-9198165db8cc" alt="image">&lt;/p>
&lt;h2 id="setup">Setup&lt;/h2>
&lt;p>Participants could run Go locally, in the &lt;a href="https://play.golang.org/">Go Playground&lt;/a>, or via the &lt;a href="https://hub.docker.com/_/golang">Go Docker image&lt;/a>.&lt;/p>
&lt;h2 id="what-we-covered">What we covered&lt;/h2>
&lt;p>&lt;strong>First 45 minutes&lt;/strong> —&amp;gt; the basics: constants, variables, loops, conditions, types, functions, and package management.&lt;/p>
&lt;p>&lt;strong>Second 45 minutes&lt;/strong> —&amp;gt; zero values, pointers, arrays, slices, maps, structs, &lt;code>defer&lt;/code>, and concurrency.&lt;/p>
&lt;p>&lt;strong>Final session&lt;/strong> — hands-on with Go modules and the Go tool. Participants built their first applications, from &amp;ldquo;Hello World&amp;rdquo; to a simple HTTP server, and wrote tests.&lt;/p></description></item><item><title>Talk: Code Generation with Go - GDG Hamburg Meetup</title><link>https://cbrgm.net/talk-code-generation-with-go-gdg-hamburg-meetup/</link><pubDate>Sun, 17 Jul 2022 00:00:00 +0000</pubDate><guid>https://cbrgm.net/talk-code-generation-with-go-gdg-hamburg-meetup/</guid><description>&lt;p>In June 2022, I gave a 20-minute talk at the GDG Hamburg Meetup about code generation in Go using templates.&lt;/p>
&lt;p>&lt;img src="https://gist.github.com/assets/24737434/d41b562d-bf24-4d72-af9e-3525a243d185" alt="image">&lt;/p>
&lt;p>The idea is simple: programs are better at repetitive tasks than we are. If you&amp;rsquo;re writing the same boilerplate over and over, a generator can do it faster and more consistently.&lt;/p>
&lt;p>The basic model:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>[INPUT] --&amp;gt; [GENERATOR] --&amp;gt; [OUTPUT]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We looked at tools most Go developers already know — &lt;code>go generate&lt;/code>, &lt;code>stringer&lt;/code>, &lt;code>openapi-generator&lt;/code>, the Protobuf compiler — plus things like &lt;code>hugo&lt;/code> and &lt;code>helm&lt;/code> that generate static sites and Kubernetes manifests from templates.&lt;/p></description></item><item><title>Recap: KubeCon Europe 2022 - Back to In-Person Events</title><link>https://cbrgm.net/recap-kubecon-europe-2022-back-to-in-person-events/</link><pubDate>Wed, 15 Jun 2022 00:00:00 +0000</pubDate><guid>https://cbrgm.net/recap-kubecon-europe-2022-back-to-in-person-events/</guid><description>&lt;p>Just got back from KubeCon Europe 2022 in Valencia, Spain. First major in-person event after the pandemic, and it was good to be back. Here&amp;rsquo;s what stood out.&lt;/p>
&lt;h2 id="getting-there">Getting there&lt;/h2>
&lt;p>Traveling to Valencia came with some COVID-related concerns, but reconnecting with the Kubernetes community made it worthwhile. KubeCon was my first major Kubernetes event years ago, so I was curious to see how things have evolved.&lt;/p>
&lt;p>The event was held at Valencia Fairgrounds with record attendance. Valencia&amp;rsquo;s public transport (bus, train, tram) made getting around straightforward even without a metro.&lt;/p></description></item><item><title>Streamlining CI/CD with GitHub Actions Matrix Builds for Sequential Deployments</title><link>https://cbrgm.net/streamlining-ci/cd-with-github-actions-matrix-builds-for-sequential-deployments/</link><pubDate>Sun, 15 May 2022 00:00:00 +0000</pubDate><guid>https://cbrgm.net/streamlining-ci/cd-with-github-actions-matrix-builds-for-sequential-deployments/</guid><description>&lt;p>GitHub Actions matrix builds are usually about running things in parallel — test across multiple OS versions, Node versions, whatever. But you can also use them to run things sequentially, which turns out to be a clean way to handle multi-stage deployments.&lt;/p>
&lt;h2 id="the-trick-max-parallel-1">The trick: max-parallel 1&lt;/h2>
&lt;p>Say you&amp;rsquo;re deploying to development, integration, and production, and the steps are identical across stages. Instead of copy-pasting the same job three times, use a matrix with &lt;code>max-parallel: 1&lt;/code>:&lt;/p></description></item><item><title>So you want i3wm on MacOS?</title><link>https://cbrgm.net/so-you-want-i3wm-on-macos/</link><pubDate>Tue, 15 Jun 2021 00:00:00 +0000</pubDate><guid>https://cbrgm.net/so-you-want-i3wm-on-macos/</guid><description>&lt;p>I recently got a Macbook from my new employer and had to leave my Linux setup behind. 2021 was the first time in my life I owned an Apple product. MacOS is fine, but switching my workflow was painful.&lt;/p>
&lt;p>I&amp;rsquo;d been using &lt;a href="https://i3wm.org/">i3&lt;/a> under Linux for years and couldn&amp;rsquo;t imagine working without it. A colleague (thanks Marcel aka &lt;a href="https://github.com/snowiow">@snowiow&lt;/a>!) had gone through the same thing and pointed me in the right direction. The result covers about 90% of what I loved about i3.&lt;/p></description></item><item><title>Personal: Beeing diagnosed with GBS (DE)</title><link>https://cbrgm.net/personal-beeing-diagnosed-with-gbs-de/</link><pubDate>Wed, 03 Mar 2021 00:00:00 +0000</pubDate><guid>https://cbrgm.net/personal-beeing-diagnosed-with-gbs-de/</guid><description>&lt;p>Für mich ist 2020 ein verrücktes Jahr. Nicht wegen der Corona Krise, sondern wegen der Autoimmunerkrankung Guillain-Barré-Syndrom (kurz GBS), welche im März diesen Jahres bei mir diagnostiziert worden ist. In diesem Blogartikel geht es (ausnahmsweise) nicht um Technik, sondern ich möchte hier über einen persönlichen Krankheitsverlauf berichten und wie es ist, zwei Monate ans Bett gefesselt zu sein. Gleichzeitig möchte ich Betroffenen und Angehörigen Mut machen, die mit einer GBS Diagnose selbst oder im Angehörigenkreis konfrontiert sind.&lt;/p></description></item><item><title>Personal: Beeing diagnosed with GBS (EN)</title><link>https://cbrgm.net/personal-beeing-diagnosed-with-gbs-en/</link><pubDate>Wed, 03 Mar 2021 00:00:00 +0000</pubDate><guid>https://cbrgm.net/personal-beeing-diagnosed-with-gbs-en/</guid><description>&lt;p>For me 2020 is a crazy year. Not because of the corona crisis, but because of the autoimmune disease Guillain-Barré syndrome (GBS), which was diagnosed in March this year. This blog article is (exceptionally) not about technology, but I would like to report about a personal disease course and how it feels to be bedridden for two months. At the same time I would like to encourage those affected and their relatives who are confronted with a GBS diagnosis themselves or within their loved ones.&lt;/p></description></item><item><title>Personal Notes on 'Practical Vim' (2nd Edition)</title><link>https://cbrgm.net/personal-notes-on-practical-vim-2nd-edition/</link><pubDate>Mon, 15 Jun 2020 00:00:00 +0000</pubDate><guid>https://cbrgm.net/personal-notes-on-practical-vim-2nd-edition/</guid><description>&lt;p>I went through &amp;ldquo;Practical Vim - Second Edition&amp;rdquo; by Drew Neil and wrote down the parts I keep coming back to. Mostly for my own reference, but maybe useful to someone else.&lt;/p>
&lt;p>&lt;img src="https://gist.github.com/assets/24737434/ec8f1af1-3f81-430a-9f25-41ea3be5e615" alt="image">&lt;/p>
&lt;h3 id="navigation">Navigation&lt;/h3>
&lt;ul>
&lt;li>&lt;code>H&lt;/code>, &lt;code>M&lt;/code>, &lt;code>L&lt;/code>: jump to the top, middle, and bottom of the screen.&lt;/li>
&lt;/ul>
&lt;h3 id="buffers">Buffers&lt;/h3>
&lt;ul>
&lt;li>&lt;code>:ls&lt;/code> lists open buffers. &lt;code>%&lt;/code> marks the active one.&lt;/li>
&lt;li>&lt;code>:bnext&lt;/code>, &lt;code>:bprevious&lt;/code>, &lt;code>:bfirst&lt;/code>, &lt;code>:blast&lt;/code> move between them.&lt;/li>
&lt;/ul>
&lt;p>Mappings I use (from Tim Pope&amp;rsquo;s unimpaired.vim):&lt;/p></description></item><item><title>Talk: Security for Container Workloads: Key Takeaways from ContainerDays 2019</title><link>https://cbrgm.net/talk-security-for-container-workloads-key-takeaways-from-containerdays-2019/</link><pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate><guid>https://cbrgm.net/talk-security-for-container-workloads-key-takeaways-from-containerdays-2019/</guid><description>&lt;p>I gave a talk at ContainerDays 2019 about securing container workloads. You can watch the full thing &lt;a href="https://www.youtube.com/watch?v=X6L00lo9Vv4">here&lt;/a>.&lt;/p>
&lt;p>The basic problem: containers share a kernel. If something goes wrong in one container, the host kernel is right there. This matters especially if you&amp;rsquo;re a PaaS or serverless provider running other people&amp;rsquo;s code.&lt;/p>
&lt;p>The talk walks through known vulnerabilities and past container escapes, then looks at four technologies that take different approaches to the isolation problem:&lt;/p></description></item><item><title>Talk: Go Workshop at HAW Hamburg: A Quick Recap</title><link>https://cbrgm.net/talk-go-workshop-at-haw-hamburg-a-quick-recap/</link><pubDate>Wed, 06 Feb 2019 00:00:00 +0000</pubDate><guid>https://cbrgm.net/talk-go-workshop-at-haw-hamburg-a-quick-recap/</guid><description>&lt;p>Just wrapped up a Go workshop at HAW Hamburg. Here&amp;rsquo;s a quick overview of what we covered and some useful resources.&lt;/p>
&lt;h2 id="setup">Setup&lt;/h2>
&lt;p>First thing was getting everyone able to run Go code regardless of their local setup. Participants could either use the Go Playground online or the Go Docker Image to avoid local installations.&lt;/p>
&lt;h2 id="content-overview">Content Overview&lt;/h2>
&lt;p>We started with the fundamentals - variables, loops, and functions. Nothing fancy, just hands-on examples to build a solid foundation.&lt;/p></description></item><item><title>Install encrypted Arch Linux with LVM on EFI</title><link>https://cbrgm.net/install-encrypted-arch-linux-with-lvm-on-efi/</link><pubDate>Mon, 03 Dec 2018 16:03:58 +0100</pubDate><guid>https://cbrgm.net/install-encrypted-arch-linux-with-lvm-on-efi/</guid><description>&lt;p>I recently switched to Arch Linux and I am very satisfied with this decision. Enclosed I would like to provide you with a setup summary how to install Arch Linux with the Logical Volume Manager (LVM) and an encrypted home partition.&lt;/p>
&lt;h2 id="usb-flash-installation-media">USB flash installation media&lt;/h2>
&lt;p>First of all, download the latest arch image from &lt;a href="https://www.archlinux.org/download/">here&lt;/a>.&lt;/p>
&lt;p>On Linux run the following command, replacing /dev/sdx with your drive, e.g. /dev/sdb. (Do not append a partition number, so do not use something like /dev/sdb1):&lt;/p></description></item><item><title>My Raspberry Pi Kubernetes Cluster (with Ansible)</title><link>https://cbrgm.net/my-raspberry-pi-kubernetes-cluster-with-ansible/</link><pubDate>Sun, 03 Jun 2018 00:00:00 +0000</pubDate><guid>https://cbrgm.net/my-raspberry-pi-kubernetes-cluster-with-ansible/</guid><description>&lt;p>Kubernetes was 2017&amp;rsquo;s buzzwords in container orchestration and still is. The only problem is that you can&amp;rsquo;t try out Kubernetes so easily, because some resources are needed. There are already some projects like Minikube, which deal with this problem and create a local playground, but such a cluster is something more tangible with real hardware in my opinion. Therefore, the Raspberry Pi is the perfect opportunity to gain experience in orchestration with Kubernetes and was reason enough for me to deal with the topic!&lt;/p></description></item><item><title>Procedual Map Generation with Java (Part 2)</title><link>https://cbrgm.net/procedual-map-generation-with-java-part-2/</link><pubDate>Thu, 03 Aug 2017 00:00:00 +0000</pubDate><guid>https://cbrgm.net/procedual-map-generation-with-java-part-2/</guid><description>&lt;p>Here comes part two of my procedual world generation with Java series. Today I&amp;rsquo;d like to introduce you to an generation algorithm called Simplex Noise, which is very common for terrain generation in games.&lt;/p>
&lt;p>Simplex Noise? Never heard! That&amp;rsquo;s okay. It was exactly the same as when I started to inform myself about the topic. The idea behind it is very simple. As a basis for our process-generated world, we need high-altitude data, which we assign to a terrain type in a second step according to their value. One way of generating these altitudes is to use a black-and-white image, each pixel being assigned a brightness value between 0 (black) to 255 (white). The brighter a pixel on the image, the higher this coordinate is in our generated world.&lt;/p></description></item><item><title>Procedual Map Generation with Java (Part 1)</title><link>https://cbrgm.net/procedual-map-generation-with-java-part-1/</link><pubDate>Mon, 03 Jul 2017 00:00:00 +0000</pubDate><guid>https://cbrgm.net/procedual-map-generation-with-java-part-1/</guid><description>&lt;p>Today I must make you a confession. I play computer games. But instead of just enjoying it and seeing it as a kind of competition, I&amp;rsquo;m interested in the implementation of the features that make a game playable.&lt;/p>
&lt;p>A special feature that is used in many games today is the creation of randomly generated content using algorithms. Whether it&amp;rsquo;s randomly created items, landscaping objects like trees or rock formations, all are now used in modern games like No Man&amp;rsquo;s Sky, Star Citizen, Minecraft and many more to give the player a constantly new player experience.&lt;/p></description></item><item><title>About</title><link>https://cbrgm.net/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cbrgm.net/about/</guid><description>&lt;h1 id="hey-im-chris-">Hey, I’m Chris 👋&lt;/h1>
&lt;img src="https://gist.github.com/user-attachments/assets/755ffc1a-a44d-494d-8dc5-b4ebcf575a2c" alt="avatar" style="float: right; max-width: 100px; max-height: 100px; margin-left: 10px;">
&lt;p>I’m a Software Engineer passionate about distributed systems and developer productivity tools. My professional focus centers on observability, reliability, maintainability, and performance. Outside of work, I contribute to open source projects. Check out my &lt;a href="https://github.com/cbrgm">GitHub account&lt;/a> to see what I’m up to.&lt;/p>
&lt;p>At MOIA, I’m part of the Developer Experience Team as the Platform Owner, building scalable systems with AWS and Kubernetes to empower our developer community. Before MOIA, my journey included experience across industry and academia, always focused on impactful, practical technology solutions.&lt;/p></description></item></channel></rss>