Conferences are back! After pandemic-ridden years that felt like an eternity, I was excited to return to FOSDEM, one of Europe's most prominent open-source conferences. Unfortunately, I realized too late that the event was happening and missed the opportunity to submit a talk. Still, I decided to attend in person. The conference was held in Brussels, just a short and convenient 1.5-hour flight from Prague.
The train connection from Brno to Prague has been notoriously unreliable in recent years, even on its best days. With a weather warning issued for Friday, I went very early to compensate for any potential delays or surprises. I managed to get some work done, arrived in Prague, and went to the airport. I set camp in the airport coffee shop and waited for my wife to pick me up.
My wife works for the česko.digital NGO. They facilitate skilled volunteering projects that help Czechia with digital transformation. She went to FOSDEM to participate in the community and law and policy tracks and meet other community members in person. I'm a loner, so I just planned to attend talks.
Saturday
FOSDEM is tough for tech enthusiasts who like to explore a variety of topics. It consists of multiple mini-conferences (known as DevRooms) rather than one large event. Each DevRoom has different slot lengths and break times, making it difficult to switch between them. It's best to find a DevRoom of interest and stay there for an extended period. On Saturday, I spent most of my time in the Go Devroom.
Here is a list of talks I attended, along with my notes, links, and scribbles. Taking notes is not my strong suit, so I decided not to turn this into a coherent paragraph of English. Otherwise, it would have stayed on my computer and never been seen again. Apologies.
The State of Go
Speaker: Maartje Eyskens
- Walk through the changes in 1.19 and 1.20. The walkthrough was speedy, and I could have taken better notes.
- Structured logging proposal for the future (replace logrus etc.)
“Of course it’s impossible to not break kubernetes somehow”
(on Go history of breaking backward compatibility)
Interesting Links
Recipes for Reducing Cognitive Load
Speaker: Federico Paolinelli
Federico is a Red Hatter working on Telco Network (MetalLB)
- Line of Sight: Happy path indented to the left, weird cases are shifted right. Guard clauses, early returns etc.
- Good package names
- Something about errors, did not pay attention
- Pure functions - a note about side effects but also side “inputs” via environmental variables
- Function arguments
- boolean arguments making the functions modal: at least provide names with aliases
- functional arguments (see Functional options for friendly APIs)
- “Reading like a newspaper”: order matters, main package file
- Asynchronous functions: ideally have a synchronous function that does logic (testable etc) and
Overall, a nice talk. Somewhat basic (many blog posts like this) but well delivered.
Building a CI pipeline with Dagger in Go
Speaker: Márk Sági-Kazár
“Senior YAML engineer” from Cisco. Speaker asked who else is a YAML engineer. I proudly raised my hand. I heard great things about Dagger CI but never saw it in action, so I was curious.
Portable CI pipelines, written in a language of choice, so you have a power of a language to express advanced concepts, instead of learning a YAML DSL (Hello Prow! Hello ci-operator!). Live demo… that failed.
Debugging concurrency programs in Go
Speaker: Andrii Soldatenko
Many books on Go and many books on concurrency but only a few on debugging in concurrent programming.
Interesting Links
- xiegeo/coloredgoroutine: colored goroutines
- dlsniper/debugger: debugger middleware
- Visualizing Concurrency in Go
- Profiler labels in Go
- sasha-s/go-deadlock: online deadlock detection in go
What's new in Delve / Tracing Go programs with eBPF
Speaker: Derek Parker
Derek Parker is also a RedHatter.
Delve now has an eBPF tracing backend. eBPF is much faster than ptrace
(the “traditional” debugging syscall). eBPF was a “Berkeley Packet Filter,” but it kinda exploded, and now it is a universal tracing cool thing in the kernel (the ability to run sandboxed programs in the kernel).
DNF5: the new era in RPM software management
Speakers: Nicola Sella, Jan Kolárik and Aleš Matěj
I zoned out a bit here and used the opportunity to rest after my lunch sandwich.
Learning From the Big Failures To Improve FOSS Advocacy and Adoption
Speaker: Bradley M. Kuhn
I had half an hour of free time before Reconciliation Pattern, Control Theory, and Cluster API: The Holy Trinity, so I decided to see half of this and then leave. I decided to stay; this was a pretty good “soft talk” about open source past, state, and direction, taken from a firm, but not blind, ideological standpoint.
Five Steps to Make Your Go Code Faster & More Efficient
Speaker: Bartek Plotka
Bartek is an author of Efficent Go: Data-Driven Performance Optimization. He also did a small context giveaway, but I was not lucky enough to leave with a book.
Compactor runs, uses 23GB of memory, OOMs. Rinse and repeat.
Usual answers
- Solution 1: “tune configuration”.
--use-less-memory --use-less-cpu-please
- Solution 2: vertical scale-up and give it MOAR RAM
- Solution 3: horizontal scale-up (break into little things and scale them). Nope because complexity.
Usual culprit [source]
Ultimate solution: optimize algorithm and code
Previously we were all into optimization, but eventually called that out (”premature optimization,” right?) and maybe went too far into being lazy
- TFBO: Test Fix Benchmark Optimize: Have tests that keep you in an unbroken state. Benchmark, improve performance while passing tests.
- Understand current efficiency level: Set hypotheses about what you expect to see in the benchmarks.
- Understand your efficiency requirements: Set a target.
- Focus on the Hot Path: Do Profiling.
- Try optimizing that part and repeat.
Lesson taken: I should learn the Go profiling toolset better. I know it is there, but I do not routinely use it.
It was a well-delivered scientific-method procedure of optimization, really enjoyed it.
Interesting links
Headscale: How we are using integration testing to reimplement Tailscale
Speakers: Kristoffer Dalby and Juan Font Alonso
I was not really interested in this thing, but there was nothing that interesting at the time, and I wanted to stay in the Go room. Some funny memes and slides, but I do not know the domain. Otherwise, it was just a simple “we developed without tests for a while, started breaking things, started testing, and now things are better.”
Our Mad Journey of Building a Vector Database in Go
Speaker: Etienne Dilocker
“Optimizing the hell out of serving raw data from disk to somewhere.”
Is Go Object-Oriented? A Case of Public Opinion
Speaker: Ronna Steinberg
A “trial” about the question. I would vote yes before it. I voted yes at the end. Good fun talk.
Perspectives from the Open Source Developer
Speaker: Hilary Carter
This was a closing main track talk for the day, and I was tired, so I did not pay too much attention.
Sunday
I started the day with some Rust and spent the rest of the day in the Monitoring and Observability DevRoom. Most of the talks I attended were about OpenTelemetry and were very Grafana Labs-heavy. I knew Grafana and, to a less extent, Loki, and I had never seen Tempo (distributed tracing) and Phlare (profiling), and Mimir (backend for metrics, more backend-y than Prometheus?).
As usual, I took worse notes than I did on the first day.
Reimplementing the Coreutils in a modern language (Rust)
Speaker: Sylvestre Ledru
Application Monitoring with Grafana and OpenTelemetry
Speaker: Fabian Stäber
grafana/tempo: Grafana Tempo is a high volume, minimal dependency distributed tracing backend.
The OpenTelemetry standard is built on “spans” and defines three types of spans: server, internal and client. Traces in Tempo have labels (like metrics have) and are searchable.
Practical introduction to OpenTelemetry tracing
Speaker: Nicolas Frankel
There are options to “autoinstrument” applications with OpenTelemetry without any code changes: this is trivial for Java and Python (instrumented via runtime) and slightly more work (but not much) in Rust.
Exploring the power of OpenTelemetry on Kubernetes
Speakers: Pavol Loffay and Benedikt Bongartz
Adopting continuous-profiling: Understand how your code utilizes cpu/memory
Speaker: Christian Simon
Loki: Logging, but make it cloud native
Speakers: Kaviraj Kanagaraj and Owen Diehl
Continuous Documentation for Your Code
Speaker: Anastasiia Tymoshchuk
Closing words
It was nice to return to an in-person conference; virtual events are efficient, but the experience they provide is limited. Of course, there are annoying things like stale air, ambient noise during talks, and room entry crowds. But the freedom to participate in different activities with varying intensity and smoothly transfer between them is unique to in-person events. You run into friends and ex-colleagues. Have a small talk with a stranger while waiting in a queue. Enjoy a beer, coffee, or a piece of junk food. Or hunch over a laptop near an AC socket and do some work.
Returning to a conference after the pandemic felt a bit like attending for the first time: “oh, this is how it works...”. It was refreshing and encouraging. So I am all hyped for more, and I am already thinking about what to submit for DevConf.cz in June.
Top comments (1)
Thanks for the excellent overview, Petr! i still need to write about my experience :)