Intro I’m trying something new on this blog: Tiny Bytes. Instead of waiting until I have enough material for a long post, these are short write-ups about small ideas that I found useful. Today’s bite is inspired by TigerBeetle: asserting your Docker builds. Normally, we build an image, push it somewhere, deploy it, and only then find out something is wrong. Maybe a symlink points to…
Intro Does your company have technical debt spanning multiple teams. Has been lingering for many quarters? Is it still on nobody’s roadmap despite many rounds of lobbying? Do you consider it a low hanging fruit within your reach? Then consider yourself lucky, Bobby and I have a perfect solution. But before we get into the good stuff, a business announcement from our favorite…
Intro: Fixing those CVE’s The manager walks in the room, face red. Behind him, the head of software security fumbling with his laptop like he has seen a ghost. Manager: Okay, everyone – listen up. As of today, we’ve started scanning our codebases and docker images for CVEs… and we already found over a thousand." Bobby starts muttering “We’re doomed our security…
Intro: Debugging integration tests Integration tests are very crucial to detect if our components still work as expected. But when they start failing then debugging integration test failures, especially in distributed systems, often presents significant challenges. Normally a test runner like jenkins will generate a static report formatted with JUNIT XML, Nunit etc which require a separate…
Intro I’ve recently started reading “Writing an Interpreter in Go” as part of my journey to sharpen my programming skills. The main goal is actually to redo the book but in different languages like zig and rust. At the time of writing, I was working on the lexer component and decided to explore performance optimizations Since A lexer is a state machine which essentially splits…
Today i want to share a story about how i ended up writing a simple process tracer for linux. Using eBPF in go to fix a github actions which i actually didn’t need. We will go over each piece and hopefully you will learn something form it. Todays characters are ‘Boris The Boss’ the part of me which keeps my distractions in check, and Bobby the curious sidekick which doesn’t…
Bashing Bash Bash a cryptic, unwieldy language that for some bizarre reason became the standard on many linux machine. This post will be a bit different than my usual posts. Today, its’ Bash vs my sanity, with our favorite naïve junior developer, Bobby, he will take the driving seat in discovering the wasteland of shell scripting. We will hope just like in mad max, to reach the other side of…
Aligning the Local development with the CI environment. Introduction In my development career, I’ve spent countless hours troubleshooting a failing CI pipeline. Through this experience, I’ve learned that even if you don’t use shell scripts to write your CI pipeline, you still need to install various build tools and their environments. For instance, when working with Scala , you…
Intro Mixing up the values passed to functions and structs are a common mistake in many programming languages. This happens even more often with languages that have dynamic type system. Here is a trivial example which illustrates this problem: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 type User struct { UserName string Email string Password string } func NewUser ( UserName string , Email string…