Words
Thoughts on code, music, and everything in between.
Making a Voice Login: The Backend, Part 2
ECAPA-TDNN embeddings, cosine similarity, the median aggregation, the hand-picked threshold, and how sessions and rate limits hold the door.
Making a Voice Login: The Backend
Turning an untrusted browser blob into a clean 16 kHz mono speech sample: ffprobe, ffmpeg, Silero VAD, hull trimming, and the failure modes in between.
Making a Voice Login: The Idea
Why I built VoiceID, a passwordless voice login, and how the frontend records your voice. MIME negotiation, the never-sent prompts, and staged registration.
Making a Programming Language
A step-by-step guide to building your own programming language in TypeScript, covering lexing, parsing, evaluation, variables, math, arrays, and more.
Making a Language: The Lexer
Building the lexer for Spark, turning source code into tokens with line/column tracking, comments, and escape sequences.
Making a Language: The Parser
Building a recursive descent parser with precedence climbing for Spark's expressions, statements, and control flow.
Making a Language: The Evaluator
Building Spark's evaluator, covering environments, closures, operator overloading, return signals, and error reporting.
Making a Language: Using Spark
Tying everything together, the run function, complete Spark examples, and exercises for extending the language.