As a software developer, I like to really understand the tools I use every day to feel more in control and aware. I’ve been using APT for a long time to handle updates, dependencies, and installations on my Debian-based systems, but I’ve never looked into how it actually works. Learning about things like how it uses GPG keys to check repositories or manages software sources could come in handy for tasks like setting up Docker containers or solving issues with software updates.
I’m a backend dev based in Toronto, mostly working with Kotlin, Java, and PHP. These days I’m at Betr building live betting systems that need to handle a lot of data very fast.
It took 3 master’s degrees and a few years in sales to get here, but engineering is where I’m supposed to be. I genuinely love this craft — the problem solving, the performance tuning, the elegance of a system that just works. The winding road wasn’t wasted though; time spent in sales left me with something most devs don’t have: a feel for what actually matters to the person on the other side.
Outside of work I read too many tech books, occasionally write here, and play beach volleyball.
Diving into PHP: the fun of custom extensions

Inspired by a chapter on compiling from source in How Linux Works, I decided to practice a bit by building a PHP extension. Compiling programs from source is a valuable skill, and what better way to practice than by extending everybody’s favourite language, PHP? This post explores creating a simple PHP extension to add a function that wraps a string in a decorative border and experiment with creating a new class.
Debugging connections with strace and packet analysis
Debugging TCP Connections: Tools and Techniques
This post explores tools and techniques for debugging TCP connection management, focusing on strace, tshark (Wireshark’s CLI counterpart), ss, and comparisons with alternatives like tcpdump and netstat. We’ll analyze single-threaded and multi-threaded servers, as well as a Vert.x-based server-sent events (SSE) setup, to understand TCP behavior, system calls, and packet exchanges. The code and configurations are available in the following repositories:
- Webserver project: github.com/lzag/webserver/tree/strace
- SSE server and client: github.com/lzag/sse-tcp-server, github.com/lzag/sse-tcp-client
Tools Overview
strace
strace is a powerful tool for tracing system calls made by a program. It’s invaluable for debugging TCP connections by revealing how a server interacts with the kernel, including socket binding, polling, and data transfer. Its output can be overwhelming without filters, so here are key options for effective use: