Skip to navigation
guest@gods.dev: ~/blog
~/blog
$ ls -la ~/blog
— 85 article(s), 0 regrets
2026/
-rw-r--r--
2026-07-29
The Annotated Reverse: watch a video header decrypt in your browser
-rw-r--r--
2026-07-26
Scraping at scale: what 19k stars taught me about async APIs
-rw-r--r--
2026-07-26
Reversing WeChat Channels: XOR, Isaac64, and a WASM module that didn't want to be read
-rw-r--r--
2026-07-26
Running Whisper as a service: a producer-consumer model for multi-GPU ASR
-rw-r--r--
2026-07-25
Building gods.dev: a terminal that pretends to be a homepage
-rw-r--r--
2026-07-01
faster-whisper in Production: The Rough Edges
-rw-r--r--
2026-06-17
Device Fingerprinting: How Sites Know It's You
-rw-r--r--
2026-05-03
Streaming ASR Without Melting the GPU
-rw-r--r--
2026-04-11
SSRF in the Wild: The Request Your Server Shouldn't Make
-rw-r--r--
2026-03-20
A Producer/Consumer Queue Behind an ASR API
-rw-r--r--
2026-02-21
Hiding Data in Plain Sight with Zero-Width Characters
-rw-r--r--
2026-01-22
The Tax of a Popular Repo
2025/
-rw-r--r--
2025-12-24
The MP4 Container for Reverse Engineers
-rw-r--r--
2025-11-26
Background Tasks: When 'await' Isn't Enough
-rw-r--r--
2025-10-08
Timing Attacks and the constant-time Fix
-rw-r--r--
2025-09-27
Known Plaintext Is a Superpower
-rw-r--r--
2025-08-15
The Shape of an Async Scraper That Doesn't Fall Over
-rw-r--r--
2025-08-02
An Async Mental Model That Sticks
-rw-r--r--
2025-06-09
From Jupyter Notebook to Real Service
-rw-r--r--
2025-05-21
Backoff, Jitter, and Not Getting Banned
-rw-r--r--
2025-04-20
Reproducible Builds and Trusting What You Ship
-rw-r--r--
2025-03-26
Rate Limiting Your Own Endpoints
-rw-r--r--
2025-02-12
VAD: The Unsung Hero of a Good Transcript
-rw-r--r--
2025-01-29
Your First Frida Hook: Reading What an Android App Hides
2024/
-rw-r--r--
2024-12-23
Signing the Unsignable: Reconstructing a Request Signer
-rw-r--r--
2024-11-15
mitmproxy Everywhere: Seeing What Apps Actually Send
-rw-r--r--
2024-10-12
Redis Patterns Beyond a Cache
-rw-r--r--
2024-09-15
Finding a Memory Leak in a Long-Running Service
-rw-r--r--
2024-08-17
The GIL in Practice, Not Theory
-rw-r--r--
2024-08-02
The Ethics of Scraping, From Someone Who Does It
-rw-r--r--
2024-06-22
Porting a WASM Routine to Python, Byte for Byte
-rw-r--r--
2024-06-06
The Tools I Reach For
-rw-r--r--
2024-04-21
Debugging CUDA Out-of-Memory Like a Detective
-rw-r--r--
2024-04-08
Rotating Proxies Without Rotating Your Sanity
-rw-r--r--
2024-03-10
Password Hashing: Argon2, and Why Not MD5
-rw-r--r--
2024-01-22
Testing Async Code Without Flakes
2023/
-rw-r--r--
2023-12-26
Docker Multi-Stage Builds That Stay Small
-rw-r--r--
2023-11-18
Entropy First: Telling Encryption From Obfuscation in Five Minutes
-rw-r--r--
2023-11-08
Validate at the Boundary: pydantic Where It Counts
-rw-r--r--
2023-10-13
XOR Is Not Encryption (and Why That Matters)
-rw-r--r--
2023-08-22
The Headers That Fingerprint You
-rw-r--r--
2023-08-01
Reading Code vs Running It
-rw-r--r--
2023-06-24
Retry Semantics: Idempotency, Deadlines, Poison Messages
-rw-r--r--
2023-06-10
A Tour of JavaScript Obfuscation (and De-obfuscation)
-rw-r--r--
2023-05-14
Reading WASM Disassembly: A Field Guide
-rw-r--r--
2023-04-15
Deploying Real Services on a Hobby Budget
-rw-r--r--
2023-02-27
Structured Logging You'll Actually Read at 3AM
-rw-r--r--
2023-01-26
Whisper vs faster-whisper: What Actually Changes
-rw-r--r--
2023-01-07
jadx vs Ghidra for Android: When to Reach for Which
2022/
-rw-r--r--
2022-12-12
A CTF Writeup: From Noise to Flag
-rw-r--r--
2022-10-26
Backpressure: The Word That Saves Your Queue
-rw-r--r--
2022-10-11
Hooking JNI: When the Logic Lives in native.so
-rw-r--r--
2022-08-24
A Distributed Crawler with Redis as the Spine
-rw-r--r--
2022-07-26
Frida vs Xposed: Two Ways to Bend an App
-rw-r--r--
2022-07-19
Captchas, Consent, and Where I Draw the Line
-rw-r--r--
2022-06-21
alg:none — The JWT Bug That Won't Die
-rw-r--r--
2022-05-10
async with: Context Managers That Clean Up After You
-rw-r--r--
2022-04-21
GPU Batching for an ASR API
-rw-r--r--
2022-03-04
Learning Reverse Engineering From Zero
-rw-r--r--
2022-02-03
Pagination, Cursors, and the Lies APIs Tell
-rw-r--r--
2022-01-14
Unpacking a Packed APK: Dumping DEX from Memory
2021/
-rw-r--r--
2021-12-11
Why I Reverse Engineer
-rw-r--r--
2021-11-03
Type Hints That Earn Their Keep
-rw-r--r--
2021-10-06
a_bogus, End to End
-rw-r--r--
2021-09-08
A Caching Layer That Pays for Itself
-rw-r--r--
2021-08-17
httpx vs aiohttp: Picking an Async HTTP Client
-rw-r--r--
2021-07-12
Reading Smali Without Losing Your Mind
-rw-r--r--
2021-06-18
Spotting a PRNG in the Wild: Isaac64's Fingerprints
-rw-r--r--
2021-05-21
FastAPI Patterns I Keep Coming Back To
-rw-r--r--
2021-04-09
int8 Quantization: Cheaper Inference, Honest Tradeoffs
-rw-r--r--
2021-03-19
Bypassing SSL Pinning on Android, Three Ways
-rw-r--r--
2021-02-10
Five Async Pitfalls That Bit Me
-rw-r--r--
2021-01-20
When You Have to Render: Playwright for JS-Heavy Sites
2020/
-rw-r--r--
2020-12-27
Debugging Is Hypothesis Testing
-rw-r--r--
2020-11-28
Deduplication at Scale: Bloom Filters and Beyond
-rw-r--r--
2020-10-14
Generators vs Async Generators, Concretely
-rw-r--r--
2020-09-12
Monitoring a Scraper Fleet Before It Monitors You
-rw-r--r--
2020-08-30
Profiling Python Before You Guess
-rw-r--r--
2020-08-01
'Encrypted' Is a Claim, Not a Fact
-rw-r--r--
2020-06-25
How to Read a JWT (and What It Confesses)
-rw-r--r--
2020-05-09
Root Detection Is a Suggestion
-rw-r--r--
2020-04-29
Staying Legal in Reverse Engineering
-rw-r--r--
2020-03-21
Reverse Engineering a WebSocket Protocol
-rw-r--r--
2020-03-01
Reversing an Undocumented Protobuf Wire Format
-rw-r--r--
2020-01-28
The One Line That Blocks Your Event Loop