memx - Get process’ memory usage (Linux)


I shared a simple piece of code for getting a process’ memory usage in Linux. It’s called memx. It’s Linux-specific only as it reads the proportional set size (PSS) data from either /proc/{pid}/smaps_rollup (if present) or /proc/{pid}/smaps file. I’ve used this piece of code many times at work. We use memory-mapped files extensively in some of our services and this is how we get more accurate results. Very useful in debugging OOMKilled events in k8s.

Golang · Linux · Memory · Process · Tech · Usage

1 minute

The DIVS model


I posted a blog introducing the DIVS model, the process we use at Alphaus, the startup I work for. Check it out here.

Agile · Development · Process · Startup · Tech

1 minute

oomkill-watch - A tool to watch OOMKilled events in k8s


I recently uploaded a tool to GitHub that wraps the kubectl get events -w command for watching OOMKilled events in Kubernetes. It’s called oomkill-watch. You can check out the code here. You might find this useful.

Events · Golang · K8s · Kubectl · Oomkilled · Tech · Watch

1 minute

CTO Diaries #4: On not shipping your org chart


You’ve probably heard of the warning “Don’t ship the org chart” common among product development circles. I always thought of this as synonymous to Conway’s Law which states that organizations design systems that mirror their own communication structure. In my experience, I’ve come to believe that this is true. Whether you like it or not, it is an eventuality. At some point I thought that to be an effective solutions architect, you have to be an “org architect”.

Conways-Law · Cto · Cto-Diaries · Diaries · Tech

3 minutes

Announcing our new product, OCTO


We just recently announced the public beta of our new product, OCTO. If you’re interested, you can join our waiting list at

Alphaus · Octo · Product · Release · Tech

1 minute

Retries with backoff in distributed systems


In a distributed system, where multiple processes communicate with each other over a network, failures are inevitable. Network partitions, hardware failures, and software bugs can all cause a request to fail. Retries with backoff are a critical technique to help mitigate these failures. Retries refer to the act of retrying a failed request. When a request fails, the client can retry the request, hoping that it will succeed the next time around.

Backoff · Distributed-Systems · Retries · Retry · Tech

3 minutes

Alphaus Blue API


Hey there, I just posted a blog about gRPC here. If gRPC and grpc-gateway is right up your alley, you might find it interesting.

Alphaus · Blog · Engineering · Tech · Technical

1 minute

Attempt to replace hedge’s member tracking with hashicorp/memberlist


I recently came across the hashicorp/memberlist library while browsing GitHub and I thought it would be a good replacement for hedge’s internal member tracking logic. It seems to be widely used (thus more battle-tested) as well. I was quite excited as I always thought that hedge’s equivalent logic is too barebones and untested outside of our use cases. It works just fine for its current intended purpose but I’ve been hesitating to build on top of it until I can really say that it’s stable enough.

Distributed-Computing · Hedge · K8s · Kubernetes · Memberlist · Tech

2 minutes

Alphaus engineering blog launched


Hey there, I wanted to let you know that Alphaus, the startup I work for, has recently launched a new engineering blog. If you’re interested in checking it out, please go to We will be posting updates about our products and sharing some insights and experiences from a technical point of view. So if that sounds like something you’d be interested in, feel free to take a look. Thanks for your support!

Alphaus · Blog · Engineering · Tech · Technical

1 minute

Using Homebrew for distributing Go apps (part 2)


For personal reference: This is a followup on a previous post that is a bit more manual. This is a little bit easier. a) Create your own Homebrew tap Create a new GitHub public repository with a prefix homebrew-, i.e. homebrew-tap. This will host all the apps that you want to distribute via your tap. Users will install your apps using the following commands: No need to include the 'homebrew-' prefix $ brew tap flowerinthenight/tap $ brew install <toolname> # Or one-liner $ brew install flowerinthenight/tap/<toolname> b) Let’s use Github Actions to setup goreleaser First, add a .

Go · Golang · Goreleaser · Homebrew · Ruby · Tech

1 minute

Restore default branch from tag while preserving history


Fore self reference: To restore default branch from a tag while preserving history, do: $ git checkout tags/v1.2.3 -b v1.2.3 $ git diff main > /tmp/diff.patch $ git checkout main $ cat /tmp/diff.patch | git apply $ git commit -am "Rolled back to v1.2.3" $ git push origin main

Git · History · Tech

1 minute

CTO Diaries #3: On choosing technology stacks


When it comes to tech stack selection, in general, I always approach it in terms of tradeoffs. And when it comes to understanding tradeoffs; what you gain vs what you lose, I think experience plays a big part. In my 18+ years of experience building systems, I’ve been bitten enough times that I view most of them with a fair bit of cynicism. I wouldn’t really say that experience definitely makes me better at it; I still have my own biases and experience doesn’t really ‘fix’ the illogical side of me being a human being with emotions.

Cto · Cto-Diaries · Diaries · Startup · Tech

5 minutes

Authenticating Go AWS SDK v2 using external id


For self reference: Sample code as to how to authenticate aws-sdk-go-v2 using external ids:

Assume · Aws · External-Id · Golang · Roles · Sdk · Tech · V2

1 minute

Authenticating Go AWS SDK using external id


For self reference: Sample code as to how to authenticate aws-sdk-go using external ids:

Assume · Aws · External-Id · Golang · Roles · Sdk · Tech

1 minute

How I set up my Samba file server


I installed Samba to my Ubuntu Server (which is an old ThinkPad laptop that has been gathering dust in my closet for ages): sudo apt-get install samba I have three 3-TB HDDs that I planned to use as my main server storage; one main server, and the other two for backup. All of these HDDs are in ext4 format. Then I created a new directory under /media where I will mount my main server storage:


1 minute

How I setup git for my WordPress installation in BlueHost


I’m not sure if this is the “proper” way to do it. Well, it sort of works for me at the moment so I thought I’ll share it here. I did use FTP at first (using FileZilla) but I didnt really like the workflow. Host: BlueHost shared account Client: Windows 10 Prerequisites SSH/Shell Access should be enabled. I enabled this from my cPanel -> SSH/Shell Access menu. Server/Host side SSH to BlueHost host.

Bluehost · Git · Tech · Wordpress

2 minutes

SSH from a Windows client to a Linux server


At the moment, I’m still in the process of setting up my home network server. I’ll be taking notes about my progress here so this might be a series of related posts. I’m using an Ubuntu 14.04 Server (headless). Client is a Windows 10 machine. The simple way Server side Install ssh. How to do this depends on what distro you are using. For Ubuntu, you can do an apt-get install ssh.

Ssh · Tech

2 minutes