Advanced CircleCI docker testing

In a recent blog post I talked about automating the testing of an advanced GopherJS library using a combination of QUnit, Ginkgo and Agouti. That allowed me to run a complete integration test suite against my library by automatically spinning up browsers and pointing them at my Q...

Go slices are not dynamic arrays

Go's slices are cleverly designed. They provide the look-and-feel of truly dynamic arrays while being optimized for performance. However, not being aware of the slice mechanisms can bring you into trouble.

Learning From Failure and Success Through Postmortems

Grammarly is a Must-Have Tool for Bloggers

English is not my native language, and I always feel that my texts which I post here are hard to read.

Games based on Voice Recognition

Hi, folks! Last Saturday I was very inspired by Alexa skills using server-side Swift talk organized by Wizeline Vietnam team.

Garbage Collection in Git

To understand git garbage collector, we need to understand how branches work. Branches are just pointers to commits that move whenever a new commit is created.

The future of latency profiling in Go

Note: This article contains non-finalized ideas; we may end up not implementing any of this but ideally we should do work towards the direction explained here. Go is the language to write servers, Go is the language to write microservices. Yet, we haven’t done much in the p...

Go's work-stealing scheduler

Go scheduler’s job is to distribute runnable goroutines over multiple worker OS threads that runs on one or more processors. In multi-threaded computation, two paradigms have emerged in scheduling: work sharing and work stealing. Work-sharing: When a processor generates new...

Interface Semantics

Prelude If you want to put this post in some better context, I suggest reading the following series of posts, which lay out some other fundamental and relevant design principles: Language Mechanics On Stacks And Pointers Language Mechanics On Escape Analysis Language Mechanics O...

Chunking large messages with gRPC

One of the gotchas of using gRPC is that it was not designed to transport large messages in one chunk. The default max message size is slightly arbitrarily set at 4MB today, and while it is possible to configure, that kind of behaviour might lead to a slippery slope scenario of e...