Reversing Sleeping Dogs with Ghidra and Claude
Sep 25, 2026Why I abandoned reverse engineering two years ago, why I refuse to use copy-pasted trainers, and how digging into Ghidra and Claude finally broke the entry barrier.
Technical notes on systems architecture, infrastructure, and the tradeoffs behind them.
Why I abandoned reverse engineering two years ago, why I refuse to use copy-pasted trainers, and how digging into Ghidra and Claude finally broke the entry barrier.
Escaping IntelliJ's auto-convert traps, surviving Jackson serialization breakages, and finishing a 4-year Java-to-Kotlin migration in 3 days with Claude Code.
Trimming 10k-line controllers, banishing three competing JSON libraries, and the soul-crushing battle against JSON strings escaped inside JSON payloads.
Cleaning up my 4-year-old CI/CD setup: ditching the delete-and-reupload cache hack, splitting checks cleanly, and getting release builds down to 6 seconds.
How I migrated gigabytes of in-database Base64 image payloads to Google Cloud Storage with zero downtime, shrinking database size by 54x and memory footprint by 89%.
How an innocent internal service using HTTP Basic Auth turned password hashing into an accidental denial of service that pinned my CPU at 100%.
From AI-generated carousels of Cloudflare postmortems to bragging about 20ms wins with zero observability: how LinkedIn replaced real systems engineering with performative theater.
Right after fixing the infamous conntrack -F bug, deployments started throwing 408s and 503s. Here is how conntrack took the fall for a desynchronized Redis buffer and a poisoned connection pool.
Strapi is hailed as an industry standard headless CMS, but local development is fundamentally broken. Here is how I tackled syncing code, DB dumps, and assets with hard links and diffs.
Chased duplication out of my Go assertion library and landed on Hamcrest's Matcher interface without going to look at it.
Splitting a bloated service into single-purpose Creator, Editor, and Finder objects, and realizing the domain object they used to protect doesn't actually exist anymore.
Getting a fixed IPv6-to-IPv4 mapping out of Jool's stateful NAT64 - which doesn't actually support one.
My laptop keyboard ghost-types the delete key, so I tear it apart to unplug it, learn the power button lives there too, and disable it via the registry instead.
A $5 shared vCPU, and a backend that only speaks IPv4 while a chunk of my users apparently don't.
Continuing the UDP load balancer saga by shopping for a VM
Going looking for a managed L4 load balancer that speaks UDP, coming away empty-handed from GCP, Cloudflare, and everyone else, and ending up less sure what "load balancer" even means.
MongoDB pushes schema failures from write time to read time, and that's a much bigger problem.
Working with Claude has changed how I revert, review, and think about abstraction and duplication.
A four-year debugging saga into why Redis pub/sub silently stopped working after every deployment — and how a flushed conntrack table was the real culprit.
Deciphering rate limiting without using the word rate limit.
Creating a minimalist, server-oriented Linux distribution based on Void Linux to escape the bloat of systemd and unnecessary firmware.
How a simple change from String.format to JDK 17's HexFormat removed a significant bottleneck in a high-throughput backend.
Can it design, or is it even good at pairing?
After spending quite some time with ai tools; here are my takes. How it helps and how it slows down;
A technical walkthrough of achieving zero-downtime deployments using iptables and conntrack for a performance-critical backend.
An optimization journey from identifying high-allocation hot paths with Async Profiler to leveraging ThreadLocal, and why Project Loom is forcing us to rethink these classic patterns.
Debugging silent failures in asynchronous Java code and understanding why ThreadPools might be swallowing your exceptions.
Exploring XDP, iptables, and nftables to build a high-performance UDP echo server in the Linux kernel.
Choosing the CMS for this blog