Posts

Atlas: Goodbye

First of all, I’d like to point out that I’m not saying Atlas is not a great product! If I would start a greenfield SaaS product next week, I would definitely still consider Atlas! The issues I’ll address in this article revolve around blind spots - whether they’re intentional I dare not say - in the free version of Atlas, particularly when the product is designed to work with multiple database management systems (DBMS).

Generate code with SQLC in Bazel - update to Bazel 9

As shown in my previous article when using sqlc in a hermetic way - i.e. you want to build sqlc from source instead of relying on some pre-built binary - it requires some adjustments because out of the box, the build will fail.

One of the biggest changes (from what I know so far) in Bazel 9 is that the cc toolchain is now extracted to its own rule (rules_cc). This means that the previous

Host static web sites on HCloud blob storage

This is a follow up on my original post Build & deploy a Hugo site with Gitea/Forgejo actions. Almost two years later, I wanted to write down some experiences I had so that I could remember why I am where I am now 😅

Recap

Back then I used Cloudflare pages to host my blog. There’s still nothing wrong with this approach! There are multiple reasons why I moved on from this approach:

Generate code with SQLC in Bazel

Bazel (checkout also their new docs) is a build system that advertises itself with

{ Fast, Correct } — Choose two

and that is absolutely correct, as long as we’re talking about execution time, not (necessarily) engineering time 😄

I’ve been trying to learn Bazel for a few months. To achieve this, I’m updating most of my projects to build with Bazel. In my spare time, I work on various small projects, mostly using Go. These range from command-line applications to server apps running in containers, and even a custom GitHub action for installing Hugo.

RBAC in Supabase with EntraID

Supabase is an awesome tool for building (CRUD) applications in no time. For those who are not familiar with Supabase, it is an open-source Firebase alternative with a focus on privacy and security. Compared to other tools, Supabase is focused on the Postgres database and provides a lot of features out of the box, like authentication, authorization, and real-time subscriptions. Also their tech stack appeals to me, as they are using Go, Rust, Elixir and (sadly) Node.js for all their services.1

Build & deploy a Hugo site with Gitea/Forgejo actions

I admit it. I like self-hosting. I like the idea of being able to control every aspect of my infrastructure. It was only consequent to also self-host my blog. This article describes my odyssey and why I ended up letting Cloudflare do the hosting.

In the beginning - there was a repository. As we all know, the repository is the truth. When the time came for deploying the blog, I already had a Kubernetes (K8s) cluster at hand so the obvious choice was to containerize the web page and host it there. I wrote a simple Dockerfile with a multi-stage build, just like this:

Libvirt & Podman: follow up for Podman 4.0 and netavark

This is a follow up post to “Joining libvirt VMs and Podman container in a common network”. Therefore I won’t cover all the basics again and how to configure libvirt because nothing’s changed on that side.

Podman 4.0

Podman 4.0 comes with a completely new network stack replacing the previous CNI stack:

There are great resources that explain the backgrounds of both tools and I don’t think I could describe it better than the folks implementing it :smile: so if you’re interested have a look at the aforementioned article or the release post.

Libvirt & Podman: network 'mesh'

Disclaimer: I tested all this with Podman 3.x even though Podman 4.0 is already announced but the CNI driver is still available with Podman 4.0 and as soon as I get my hands on 4.0 I’ll give Netavark a try, too!

When playing around with containers and VMs one might ask if it’s possible to bring VMs and containers into a common network segment. I see ‘why the hell would I need a VM anyway when already having containers’ or something similar I almost see on your face :stuck_out_tongue_winking_eye: