2019-01-31

GoDays 2019 in Berlin

So, GoDays 2019 took place in Berlin at the Factory Görlitzer Park.
The venue
On the day before the actual conference there were some workshops. I decided to attend Using and extending the Kubernetes API programmatically with Go held by Stefan Schimanski and Michael Hausenblas. It covered Kubernetes API basics, CRDs, controllers and different ways of implementing a controller (client-go, kubebuilder, Operator SDK).

On the evening, the GDG Berlin Golang and the Women Who Go Berlin meetup groups organized a joined pre-conference meetup with the following talks:
At the pre-conference meetup
Now on to the actual conference. 
The main stage ...
... and the cinema
A nice view over Görlitzer Park and Kreuzberg
I attended the following talks:
  • The Importance of Beginners (keynote) by Natalie Pistunovich: The Go community is still growing heavily, Go itself is evolving and constantly changing. We should embrace new members and their new ideas and look out for good integration and collaboration. This is a recording of her talk at GopherCon 2018.
  • Designing for failure by Italo Vietro: A nice walkthrough of different techniques to build resilient systems - health checks (e.g. go-health), load shedding, circuit breakers (e.g. hystrix-go), retry logic, rate limiters, bulkheads (e.g. separate thread pools for separate remote target systems to mitigate resource exhaustion), outlier server host detection, outbox pattern, service mesh (e.g. Istio), observability, distributed tracing (e.g. OpenCensus).
  • Golang race detection by Neven Miculinic: Race conditions caused famous bugs (e.g. Dirty COW and even worse Therac-25). The Go tools know the -race flag, which activates the ThreadSanitizer - this comes with some costs: e.g. 2x to 20x runtime slowdown and 5x to 10x memory overhead ... so, nothing to let enabled on productions systems. Neven explained quite detailed the role of read and write barriers to fill utility data structures in order to detect race conditions, and some common mistakes that lead to race conditions: e.g. global counters used in goroutines (solution: use atomic or mutex) and goroutines in loops referencing the run variable (solution: pass the run variable as argument to the goroutine).
  • 1's and 0's: Golang and WebAssembly by Guus van Weelden: WebAssembly support is still experimental in Go (no native DOM APIs, no multithreading, large binary file size, performance issues, missing support of some core libraries etc.). But it is expected that projects will gradually migrate from GopherJS to WebAssembly.
  • Lightning talks:
  • Building Resilient Services in Go by Aditya Mukerjee: All about observability: what and how to monitor (RED: Rate, Errors, Duration), structured logging (e.g. Logrus), context added to errors, metrics (but avoid exploding metric cardinality), request tracing (e.g. by passing around request IDs). Veneur offers it all.
  • Creating Kubernetes clusters on-demand using Go by Marko Mudrinić: If you ever want to provision your Kubernetes cluster using Go code - either locally (kind) or in the cloud (kubicorn). Both are still alpha.
  • Diversity, actually by Ronna Steinberg (keynote): The Go community is unfortunately not that different compared to other tech communities - lots of groups (e.g. women) are underrepresented. For example, job postings not aiming (explicitly or implicitly) for the "typical" white male fulltime senior tech rock star could result in a more diverse staff. Express openness to offer opportunities.
Let's come to an end - it was a nice conference
Note: I will update this post whenever I get hold of a missing link to the slides, recordings etc. of an aforementioned talk.

2019-01-20

Hinter Airbus

Blick auf das Estesperrwerk

Blick an Airbus vorbei über die Elbe nach Blankenese

Obstbäume so weit das Auge reicht

Naturschutzgebiet Finkenwerder Süderelbe