.gitignore everything by default

We’ve all been there. You’re working on a project, making commits, and suddenly realize you’ve been committing .DS_Store files, node_modules, IDE configuration files, or other junk that shouldn’t be in your repository. Then comes the embarrassing cleanup: adding these files to .gitignore, removing them from the repository history, and hoping no one noticed.

Deploy Hugo static site to Hetzner

Recently I ditched my AWS account and moved my personal small projects to a Hetzner VPS, what a nice feeling tinkering with your own server again! As a part of this process I also had to change how I deploy this blog, so I thought I would share my setup in case anyone else is interested.

Auto-generated Reading List

I don’t know about you, but I love the RSS feed, and over the years, I’ve accumulated various blogs that I follow. However, it’s hard to keep track of them all, as I don’t use any RSS clients. So, I decided to create a GitHub Action that automatically generates and publishes a reading list from the RSS feeds of the blogs I follow.

Minesweeper with Raylib Go Bindings

I remember when I was in school and didn’t have yet a PC at home (probably year ~2000), I would visit my Mom’s office to play some videogames on her work PC :) It was some Pentium and didn’t have many games in the beginning, but Minesweeper was always there as it came with Windows installation. Great times btw!

My first Zig program - zigping

For me the best way to learn something new is to actually build something with it. Yes, there is some hype around Zig nowadays (Ghostty, Bun are build in Zig), but don’t listen to it, go try it out and see for yourself if it solves your problem or not.

Map with Expiration in Go

In some cases your application doesn’t need Redis, and internal in-memory map with locks and expiration will suffice.

For example you already know the size of the map and you don’t need to store a lot of data. Use cases could be IP rate limiting, or any other short-lived data.

My first experience with OCaml

Recently I’ve been motivated to learn more about functional programming and the name OCaml came up quite a few times. I have seen some praise about it from the people I follow on social media and decided to give it a try. I finally finished a small project in OCaml and would like to share my first impressions while the memory is still fresh.

Centrally Collecting Events from Go Microservices

In the beginning at Solsten our engineering team focused on building products, tools, services but we never had the time to measure what was going on in our platform (it was an early-stage startup). Even though we had a feeling of what was right or not thanks to our customers, the pain grew too strong and forced our department to allocate time in order to measure things.

An Ode to Logging

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Oh, log, a nerdy scribe,
In you, all errors hide.
To write it well - not an easy quest,
Let's see how we can do it best!

True hackers always start with print()
Don't judge! They've got no time this sprint.
But push to prod - a fatal flaw.
Use proper logger - that's the law!

Distinguish noise from fatal crash -
Use Info, Error, Warn, and Trace.
Put a clear level in each line,
To sift through data, neat design!

You log for humans, this is true...
But can a machine read it too?
Structure is key, JSON, timestamp...
Grafana tells you: "You're the champ!"

Events, like books, have start and end.
Use Spans to group them all, my friend.
Then take these Spans and build a tree,
We call it Trace, it's cool agree?

Redact your logs: remove emails,
addresses, PII details.
Or data breach is soon to come,
and trust me, it's not fun :(

In modern distributed world,
Do centralize your logs, my Lord.
Retention policy in place?
Or cloud bill you will embrace!

(No LLMs have been used to write this)

My first experience with Gleam Language

Over the past few months, I saw a growing amount of posts on X about the Gleam language (probably the X algorithm doing its thing), and decided to give it a try. I was not disappointed, with few exceptions.