Waffles, Fries, Beer and Developers; Notes from FOSDEM 2023
Tags: community, conferences, opensource
Published: 2023-02-09 01:09:56

Conferences are back! After pandemic-ridden years that felt like an eternity, I was excited to return to [FOSDEM](https://fosdem.org/2023/), 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](https://en.cesko.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](https://fosdem.org/2023/schedule/event/gostateofgo/)

**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

- [Russ Cox: Updating the Go Memory Model](https://research.swtch.com/gomm)

### [Recipes for Reducing Cognitive Load ](https://fosdem.org/2023/schedule/event/goreducecognitive/)

**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](https://dave.cheney.net/2014/10/17/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](https://fosdem.org/2023/schedule/event/gocidagger/)

**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](https://dagger.io/) 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](https://fosdem.org/2023/schedule/event/godebugconcurrency/)

**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](https://github.com/xiegeo/coloredgoroutine)
- [dlsniper/debugger: debugger middleware](https://github.com/dlsniper/debugger)
- [Visualizing Concurrency in Go](https://divan.dev/posts/go_concurrency_visualize/)
- [Profiler labels in Go](https://rakyll.org/profiler-labels/)
- [sasha-s/go-deadlock: online deadlock detection in go](https://github.com/sasha-s/go-deadlock)

### [What's new in Delve / Tracing Go programs with eBPF](https://fosdem.org/2023/schedule/event/godelve/)

**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](https://fosdem.org/2023/schedule/event/dnf5/)

**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](https://fosdem.org/2023/schedule/event/learning_to_improve/)

**Speaker:** Bradley M. Kuhn

I had half an hour of free time before [Reconciliation Pattern, Control Theory, and Cluster API: The Holy Trinity](https://fosdem.org/2023/schedule/event/goreconciliation/), 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](https://fosdem.org/2023/schedule/event/gofivestepsefficient/) 

**Speaker:** Bartek Plotka

Bartek is an author of [Efficent Go: Data-Driven Performance Optimization](https://www.oreilly.com/library/view/efficient-go/9781098105709/). 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

1. Solution 1: “tune configuration”. `--use-less-memory --use-less-cpu-please`
2. Solution 2: vertical scale-up and give it MOAR RAM
3. Solution 3: horizontal scale-up (break into little things and scale them). Nope because complexity.

#### Usual culprit [[source](https://www.reddit.com/r/ProgrammerHumor/comments/jtnrlk/everyone_loves_pointers_right/)]

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nh8692nkg0wr44j9k1mc.gif)

#### 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

1. TFBO: Test Fix Benchmark Optimize: Have tests that keep you in an unbroken state. Benchmark, improve performance while passing tests.
2. Understand current efficiency level: Set hypotheses about what you expect to see in the benchmarks.
3. Understand your efficiency requirements: Set a target.
4. Focus on the Hot Path: Do Profiling.
5. 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

- [benchstat](https://pkg.go.dev/golang.org/x/perf/cmd/benchstat)

### [Headscale: How we are using integration testing to reimplement Tailscale](https://fosdem.org/2023/schedule/event/goheadscale/)

**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](https://fosdem.org/2023/schedule/event/gobuildingdatabase/) 

**Speaker:** Etienne Dilocker

“Optimizing the hell out of serving raw data from disk to somewhere.” 

### [Is Go Object-Oriented? A Case of Public Opinion](https://fosdem.org/2023/schedule/event/goisoo/)

**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](https://fosdem.org/2023/schedule/event/developer_experience/) 

**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](https://github.com/grafana/grafana) and, to a less extent, [Loki](https://github.com/grafana/loki), and I had never seen [Tempo](https://github.com/grafana/tempo) (distributed tracing) and [Phlare](https://github.com/grafana/phlare) (profiling), and [Mimir](https://github.com/grafana/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)](https://fosdem.org/2023/schedule/event/rust_coreutils/)

**Speaker:** Sylvestre Ledru

### [Application Monitoring with Grafana and OpenTelemetry](https://fosdem.org/2023/schedule/event/apm/)

**Speaker:** Fabian Stäber

[grafana/tempo: Grafana Tempo is a high volume, minimal dependency distributed tracing backend. ](https://github.com/grafana/tempo)

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](https://fosdem.org/2023/schedule/event/tracing/)

**Speaker:** Nicolas Frankel

There are options to “autoinstrument” applications with [OpenTelemetry](https://opentelemetry.io/) 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] (https://fosdem.org/2023/schedule/event/kubernetes/)

**Speakers:** Pavol Loffay and Benedikt Bongartz

### [Adopting continuous-profiling: Understand how your code utilizes cpu/memory](https://fosdem.org/2023/schedule/event/profiling/)

**Speaker:** Christian Simon

- [grafana/phlare: 🔥 horizontally-scalable, highly-available, multi-tenant continuous profiling aggregation system](https://github.com/grafana/phlare)

### [Loki: Logging, but make it cloud native](https://fosdem.org/2023/schedule/event/loki/)

**Speakers:** Kaviraj Kanagaraj and Owen Diehl

- [grafana/loki: Like Prometheus, but for logs.](https://github.com/grafana/loki)

### [Continuous Documentation for Your Code](https://fosdem.org/2023/schedule/event/python_continuous_documentation/)

**Speaker:** Anastasiia Tymoshchuk

- [How to start with Continuous Documentation in Python](https://atymo.me/blog/python_documentation.html)

## 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](https://www.devconf.info/cz/) in June.