Home   About Me   Blog  


1. How to propagate Golang context without cancellation.(23 Aug 2023)
Sometimes you need to propagate a context's values without also propagating its cancellation. In what situations would you run into such a need? How do you do that? What solutions exists in the ecosystem? Is this something that Go itself should solve? Let's find out together in this post.

2. The complete guide to OpenTelemetry in Golang.(17 Feb 2023)
This guide should take you from zero to production in instrumenting, collecting, and exporting telemetry data(metrics, logs, & traces) in a secure and scalable manner.

3. Don't use a different interface in tests.(05 May 2022)
Your test code should not be using a different interface implementation compared to your non test code.
Using different implementations(sometimes called 'mocking') is one of the best ways to lie to yourself that you are testing your code whereas you really aren't.
This article articulates why, including code examples.

4. Logging without losing money or context.(26 May 2020)
In order to minimize logging costs, conventional wisdom asks that you filter logs by severity and/or implement sampling.
This article articulates why that may be a bad idea, it then proposes an alternative that loses you neither money nor context and then finally it presents a proto-type implementation of that alternative.

5. Build a Go package that annotates errors with stack traces.(18 November 2019)
This article assumes that you have come to the conclusion that you need stacktraces in your errors.
We are going to build a package that can annotate any errors - including the ones created by the stdlib errors package - with stack traces.

6. Understand how celery works by building a clone.(15 July 2019)
How do Celery, Resque, Sidekiq, among other background task processors work?
In this blogpost, we figure that out while building our own background task processor one step at a time.

7. Storing application logs in an SQL database.(23 November 2018)
It's almost unheard of, these days, to store application logs in a structured datastore.
In this blogpost I propose and implement a logging pipeline that involves storing logs in PostgreSQL(timescaleDB)

8. How to use any programming language on AWS lambda.(01 October 2018)
Sometimes you may have a usecase for AWS lambda but the programming language that you are using is not natively supported by AWS lambda.
But you can still use your favorite programming language with AWS lambda even if it is not natively supported.
In this article, we explore how to do that.

9. An early peek at Go modules.(20 July 2018)
In this article, we add versioning to a go package while working outside of GOPATH.
We take a peek into the future of developing in Go, we stumble and we rise.

10. Migrating a python application to AWS lambda as is; without code change.(02 June 2018)
In this article, we will go through an example of how to migrate a python application to AWS lambda.
We will not make any code changes(or re-architect it) to our app in order to migrate it.

11. Exploring consensus via python.(24 Mar 2018)
How do you get different computers that are part of a larger cluster to agree on what the value of something is?
We try and answer that question.
We also learn about, CASPaxos, the consensus protocol.

12. Go Garbage collector and Large maps with pointers.(25 Jan 2018)
I'm left wondering, shouldn't the Go runtime then not do it for me/you by default?
Anytime the runtime sees a map that is larger than X and the keys to that map contains pointers,
the runtime inlines(for lack of a better term) that map into one whose keys are ints(or whatever) and does the string->ints hashing for you without you even noticing.