Things I Learned
A collection of useful things I've learned. Quick notes and deeper write-ups.
Latest notes
- Oct 19, 2026
EmbeddingGemma 2 puts text, code, images, video and audio (or a mix) into one 768-dimension vector, from a 740M open model under Apache 2.0.
Continue reading
Image, video and audio tokens are spliced into the text sequence and run through one encoder, so a text query can find a video moment or a scanned PDF page without captioning or transcribing first.
- It's not the quality leader. Text is flat against v1; the gain is code (MTEB Code 68.8 to 78.7). Audio (49) and video (51) scores are modest. All numbers are Google's own.
- Every major vendor ships one-space multimodal embeddings now: Amazon Nova, Gemini Embedding 2, Voyage, Cohere, and the open Qwen3-VL-Embedding, which reports higher image and document scores but has no audio. Pick by constraint. EmbeddingGemma 2's niche is open weights plus audio.
- Matryoshka truncation isn't free: its MMEB score falls from 59.0 at 768 dimensions to 45.7 at 128.
- The interesting part is the system around the model. DigUp is local file search on it: one vector per photo, PDF page, video shot and 30 s of audio, each pointing back to its page or second, next to an FTS5 keyword index, because no embedding holds an invoice number exactly.
- DigUp fuses the two by turning cosine into a per-query z-score (how far a match stands out for this query), gating on it, and adding a word-coverage bonus. It beat reciprocal-rank fusion on their evals (R@1 0.88 vs 0.73) and can honestly say "nothing found". Small, author-run eval.
- It also pins llama.cpp, records the model version in the index, and checks every upgrade against stored reference vectors. Vectors from two runtimes don't mix, and nothing errors when they do.
- Oct 17, 2026
How the Claude Code team does code review. Claude writes ~90% of Claude Code, so nobody reads every diff.
Continue reading
They swapped "did a human read it?" for "which check, automated or human, should catch what could go wrong here?", and optimise for the least human time per change, with revert and incident rates as the guardrail. discuss
- The bit I missed on first read: review noise costs more when the author is an agent. A person waves off a nit in seconds; an agent fixes every one, which is a new commit and another full review. One PR ran 50+ rounds overnight, and ~59% of later findings were on code already there at round one. Fix: cap at three rounds, re-review only the new diff, flag the class of bug, never repeat a finding.
- The bot posts findings, never approvals. Human approvals (zero, one or two) are set by the change's risk, not by who wrote it. Whoever prompted the agent counts as a reviewer, and an approval covers one commit, so an agent's next push dismisses it.
- Their reviewer's eval is their own past incidents and reverts, run daily. Noise is measured by what authors did with each comment: fixed it, said it was wrong, intentional, or not worth it.
- Versus Ankit Jain's review layers I noted in April: this is the production version, with no spec-review layer and fast rollback under everything.
- Read the numbers carefully: the share of PRs reverted fell 40% while PR volume doubled, so the count of reverts still rose (~1.2x). Also: the authors sell the reviewer.
- Where I push back: "nobody needs a full mental model, ask Claude for an explainer of the slice you're changing." An explainer recovers what the code does, not why it was built that way, which is the comprehension debt Addy Osmani (a co-author here) wrote about. People should spend review on whether to ship it and on direction, not line-level correctness.
- How I read it: had Claude explain it against my notes, then quiz me. The question I got wrong taught me the most.
- Oct 13, 2026
Rich Hickey's "'AI' is Not a Tool" vs Huahai Yang's "AI Is a Tool. Using It Well Takes Skill.".
Continue reading
Hickey: a tool is something you wield, and wielding is where expertise comes from, so an LLM is automation you abdicate work to. Yang: a compiler also works unattended and is still a tool; the line is skilled use vs delegating without oversight. Arguing over the label is a dead end. What matters is which skill survives. discuss
- Hickey's best line: you are "only a software update from everything you've 'learned' being rendered obsolete." Model quirks and prompt recipes expire. Verification, choosing context and domain judgment carry over to the next model.
- Bainbridge's Ironies of Automation said it in 1983: automate the work and the operator is left monitoring, which needs the skill they stopped practicing. My rule: do the work, then ask the model. Don't ask the model instead.
- Best reply to "LLMs are slot machines" in the HN thread: a Las Vegas algorithm is random but always correct; only the runtime varies. Randomness plus a verifier gets you accuracy. Without the verifier you're just pulling the lever.
- Oct 11, 2026
Small on-device models are getting good enough to sit in front of the big ones.
Continue reading
Rampart from the National Design Studio redacts PII in the browser before a prompt reaches any LLM: regexes with checksum or structural checks for cards (Luhn), SSNs, emails, URLs and IPs, plus a fine-tuned MiniLM for names, phones, account numbers, government IDs and street addresses. discuss
- 14.7 MB Q4 ONNX (~15 MB with tokenizer), 98.4% private-term recall across seven Latin-script languages. p50 is 3.9 ms on WebGPU but 12.6 ms on the default WASM backend. OpenAI's Privacy Filter is ~2.8 GB; Presidio scores 65% on the same test set.
guard.protect()swaps PII for placeholders like[GIVEN_NAME_1], andguard.reveal()fills them back into the reply. The LLM never sees the name; the user still does.- Default-deny: every detected label is redacted except city, state and ZIP, so the assistant keeps coarse location without the street line.
- Know the gaps: names in non-Latin scripts recall ~14% (Hindi 6%, Arabic 5%), and it scores 86.4% on a hostile-input suite. The repo calls it harm reduction, not perfect protection.
- Same size class, different job: Cactus Whistle is 16.9 MB speech-to-text in seven languages, 11 ms to first token on an M4 Pro CPU (Whisper base: 145 MB, 73 ms). It loads into the same engine as Needle 3, their tool-calling model, so one call takes audio in and returns
set_lights(room="kitchen", on=false). Voice commands for home automation with no cloud round trip. - The pattern: a tiny specialist at the edge does one narrow job (redact, transcribe, route), and the big model only sees what it needs. Both sets of benchmarks are vendor-reported.
- Oct 10, 2026
Sebastian Raschka's history of text classifiers puts numbers on why Jev feels new.
Continue reading
On IMDb, bag-of-words + logistic regression gets 89.9%, a fine-tuned ModernBERT about 95%, and Jev 96.5% zero-shot for $0.65 across 25k reviews. Under the hood it is likely still a pretrained transformer with a one-number head that scores each answer option. The hard part is broad training data and calibrated probabilities. What changes is the cost of starting: no labelling, training or hosting per task. Specialists still win on huge volume, the last point of accuracy, or data that can't leave your network. Within a month OpenAI and Microsoft shipped the same yes/no, choice and score contract. discuss
- Oct 10, 2026
Microsoft eXecution Container (MXC) is an embeddable SDK for running untrusted commands under OS-enforced policies, not a hosted sandbox service. discuss
Continue reading
- Defaults: Seatbelt on macOS, Bubblewrap on Linux, ProcessContainer on Windows. SDKs for Node, Rust, and .NET.
- Restricts filesystem and network access. macOS hostname allowlists need a caller-managed proxy; not every backend is a VM.
- Useful boundary: sandbox the command where it executes, not just the agent's tool-composition script. Isolation limits damage; it does not make generated output trustworthy.
- Oct 9, 2026
Pi Pocket's subagent implementation gives each worker a retained conversation and uses durable tasks to deliver messages and report answers. Request IDs and recorded answer IDs prevent duplicate delivery and reporting after restart. The idea worth stealing: make the handoff durable, not just the worker. discuss
Articles
- Django cache backend using PostgreSQL UNLOGGED tablesideas · Jun 2026
- How Prompt Caching Worksllm · Jun 2026
- Review & Update Tag Taxonomyprompts · Jun 2026
- Hidden Gems: Community Editionzed · Jun 2026
- Vim motion tips for Zedzed · Jun 2026
- BM25 Ranking in PostgreSQL with pg_textsearchfts · Dec 2025
- actions/checkout may leak GitHub credentialsgithub · Dec 2024
- `setState` is Asynchronousreact · Nov 2023
- Navigating between terminalsvscode · Oct 2023