An Open Letter To The Go Team About Try

“Once a language gets complex enough, programming in it is more like carving out a subset from an infinite sea of features, most of which we’ll never learn. Once a language feels infinite, the costs of adding further features to it are no longer apparent". - [Mark Miller...

Generating Waveform Data - audio representation

Audio visualization is a fascinating topic. We often take it for granted, but sound isn’t visible and only exists over time. In the case of a video stream, you can pick a frame/image and you have a snapshot of the video at this specific time. But you can’t do that wit...

Faster Docker builds using go modules

Quick tip to improve the docker build speed using go modules. Normally, I would do something like this: FROM golang as builder ENV GO111MODULE=on WORKDIR /code ADD . . RUN go build -o /app main.go FROM gcr.io/distroless/base EXPOSE 8080 WORKDIR / COPY --from=builder /app /usr/b...

High availability with nats-streaming-server (clustering)

I wanted to set up a high available nats-streaming-server cluster, but couldn’t find a “quick” guide on how to do it. In this post I’ll try to write something that would have helped me earlier. First things first, we have 2 kinds of HA setups for nats-str...

PODCAST: Hiring and job interviews

Using PostgreSQL JSONB with Go

PostgreSQL provides two JSON-related data types that you can use — JSON and JSONB. The principal differences are: JSON stores an exact copy of the JSON input. JSONB stores a binary representation of the JSON input. This makes it slower to insert but faster to query. It...

Garbage Collection In Go : Part II - GC Traces

Prelude This is the second post in a three part series that will provide an understanding of the mechanics and semantics behind the garbage collector in Go. This post focuses on how to generate GC traces and interpret them. Index of the three part series: Garbage Collection In Go...

Building Desktop App in Go using Wails

This post is a text version of packagemain #6: Building Desktop App in Go using Wails video. As we all know, Go is mostly used to build APIs, web backends, CLI tools. But what’s interesting is that Go can be used in places we were not expecting to see it.

Garbage Collection In Go : Part I - Semantics

Prelude This is the first post in a three part series that will provide an understanding of the mechanics and semantics behind the garbage collector in Go. This post focuses on the foundation material on the collector’s semantics. Index of the three part series: Garbage Col...

Concurrency Trap #2: Incomplete Work

Introduction In my first post on Goroutine Leaks, I mentioned that concurrency is a useful tool but it comes with certain traps that don’t exist in synchronous programs. To continue with this theme, I will introduce a new trap called incomplete work. Incomplete work occurs...