Engineering3 min read
I built a tiny neural audio codec. Then I listened to the results.A trained nonlinear encoder, vector-quantized codebook and decoder are interesting. An idealized low bitrate is not the same thing as good reconstructed speech.
Field notes / Journal / Build notes
I write about things I've built, debugged and investigated: the decision that mattered, the failure that changed it, and the evidence that held up. There's some life outside code too. New here? Start here.
Want new posts in your inbox? Email updates or RSS.
Engineering3 min read
I built a tiny neural audio codec. Then I listened to the results.A trained nonlinear encoder, vector-quantized codebook and decoder are interesting. An idealized low bitrate is not the same thing as good reconstructed speech.
Engineering6 min read
Audio ML engineering: what the numbers actually meanI built five small speech and audio implementations and measured their behavior. ASR errors, turn detection, codecs, prosody and classifier ablations each have different ways to mislead you.
Engineering3 min read
Mobile voice agents: keep the backend in chargeHow I connected Swift and Kotlin clients to agent workflows, built Core ML and TensorFlow Lite integration boundaries, and kept authorization on the backend.
Engineering6 min read
Voice agents are distributed systems with microphonesBuilding an agent that talks is the easy demo. The harder work is authenticated tools, retries, evaluation, telemetry, CRM synchronization and the people who have to operate it.
Engineering3 min read
Retry storms: when resilience multiplies a failureRetry logic looks harmless in isolation. When a gateway, application service and SDK each apply their own retry policy, a single failed operation can multiply into a dependency outage. That interaction is the starting point for my retry-storm analysis.
Engineering2 min read
AEAD design review: ciphertext still needs an identity and contextAn encrypted database value can be perfectly unreadable to an attacker and still end up in the wrong record. If a service moves ciphertext between tenants without binding the record's context, the system may de
Engineering2 min read
ROS 2 node lifecycles: when a robot is allowed to become activeWhen a robotics node starts, I don't want "the process launched" to be confused with "the robot is ready to move." The ROS 2 managed-node design makes this difference explicit with lifecycle states. That's a be
Engineering2 min read
Stuxnet: malware crossed from Windows into industrial controlI traced Stuxnet as a boundary-crossing problem: from Windows software into industrial control commands. Calling it sophisticated Windows malware misses the physical-system risk. The attack path targeted software used to supervise and program indust
Engineering2 min read
Raspberry Robin: the USB worm and what came afterwardRaspberry Robin showed why incident timelines need separate columns for initial access and what attackers do later. Microsoft's October 2022 research described a USB-propagating worm that was connected to a bro
Engineering2 min read
Melissa: a document macro virus and an email outageMelissa demonstrates why I include document and user-interaction boundaries in propagation analysis, not only remotely exploitable network services. In March 1999, a Microsoft Word document with a malicious macro relied on someone o
Engineering2 min read
Mirai: what default passwords did to the IoTIn my analysis of Mirai, the failure starts with a simple hardware assumption: devices that ship with weak or default remote-management credentials will eventually be found by automated scanners. In 2016, many cameras, recorders and routers were ex
Engineering2 min read
NotPetya and the poisoned accounting software updateThe starting point I emphasized in my NotPetya review is a trusted enterprise distribution path: the update path for Ukrainian accounting software M.E.Doc. It then moved laterally and disrupted organizations well beyond its initial target geography.
Engineering2 min read
WannaCry: the worm, the patch window and the SMB boundaryIn my review of WannaCry's propagation path, the network boundary matters as much as the payload. The May 2017 outbreak combined ransomware with self-propagation across vulnerable Windows SMB services.
Engineering2 min read
Android toll fraud: when the app can intercept consentThe trust failure I examined in Android toll-fraud reporting is the confirmation step: an OTP does not protect a purchase if malicious software on the same device can intercept or submit it. Microsoft documented Android toll-fraud workflows in which malware tried to subscribe victim
Engineering2 min read
Joker / Bread and the Android billing fraud problemIn reviewing the Joker/Bread campaigns, I focused on the separation between an app doing its advertised job and subscription activity the owner never authorized. Google's 2020 report on Bread—often called Joker—documented that exact billing-fraud problem. The family kept adapting as defenses a
Engineering2 min read
Triada: the Android firmware supply-chain backdoorTriada challenges an app-centric mobile threat model in an important way. Google's Android security team described a malware family that moved from rooting attempts into compromised system images. The malicious cod
Engineering2 min read
FluBot: Android banking malware that spread by textThe entry point I focused on in FluBot was the delivery-text lure, because the later banking and contact-abuse behavior depended on the permissions granted after that initial deception. But FluBot used exactly that: convince someone to follow a delivery or voicemail lure, install a malicious Android application, and grant it un
Engineering3 min read
Idempotency under 100 competing requests: a reproducible in-process experimentI scheduled 100 calls against one in-process idempotency key. The side-effect callback ran once; a real crash or a second worker is still untested.
Engineering2 min read
Refresh-token rotation under concurrent replay: 200 scheduled callersI sent 200 scheduled refresh attempts through one local token family. Only one issued a successor; multiple workers would need a different test.
Engineering3 min read
Reproducing a one-time challenge replay race with 200 contendersI tried consuming one action-bound challenge 200 times. My single-process guard accepted one call and rejected 199; shared-store races remain untested.
Engineering3 min read
Android Play Integrity request binding and backend verdict policyWhat requestHash protects, what the server must verify, and why an integrity verdict is not a substitute for authorization.
Engineering3 min read
Authentication telemetry without leaking tokens or recovery secretsDesign privacy-conscious auth decision logs that help explain failures without recording the credentials that caused them.
Engineering4 min read
Device integrity is not authorization: an App Attest and Play Integrity decision modelA valid App Attest or Play Integrity result cannot authorize a user. I walk through the server decisions separately and test them with synthetic inputs.
Engineering4 min read
Idempotency when HTTP timeouts lie about server-side effectsA timeout does not undo a committed write. Model retries, duplicate operations and correctly scoped idempotency keys.
Engineering3 min read
Kotlin coroutine cancellation and lifecycle boundaries on AndroidAvoid orphaned jobs and stale UI state by understanding cooperative cancellation, scopes, and background work.
Engineering3 min read
Object-level API authorization: why a valid JWT is not enoughPractical tests for broken object-level authorization in authenticated mobile and backend APIs.
Engineering4 min read
Mobile session recovery as an explicit state machineModel sign-in, refresh rotation, expiry, step-up recovery, and revocation without creating a hidden authentication bypass.
Engineering4 min read
Swift concurrency cancellation is cooperative, not an automatic rollbackHow Task.checkCancellation, child tasks, stale results, and server-side effects interact in an iOS app.
Journal2 min read
A place for work, life, and everything in betweenWhy this corner of the internet isn't going to be only about code.
Build Note12 min read
Hardening iOS Device Trust Signals Against Hostile ClientsA practical look at building and evaluating device trust signals under jailbreaks, instrumentation, replay, and tampered clients, with emphasis on server-side verification and failure-aware design.
Prefer a feed? Subscribe via RSS.
The shape of the boundary is easier to reason about than the policy layered on top of it.
Client-side hints are useful, but replay resistance only becomes real once the server can verify freshness.
Logs and metrics are only useful when the system has a clear place to land after something goes wrong.