Tony Finch – link log
2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025
- 2023‑12‑30:
Git commit signing is kinda wack.
- 2023‑12‑27:
A national evil: how iodized salt banished the curse of the goitre from Switzerland.
- 2023‑12‑26:
What is a parser mismatch vulnerability?
- 2023‑12‑26:
Lotus 1-2-3 for Linux.
- 2023‑12‑26:
Reptar: an Intel x86 microcode bug.
- 2023‑12‑21:
How to find secure hash collisions.
- 2023‑12‑16:
Why aren't we SIEVE-ing? A new cache eviction algorithm.
- 2023‑12‑15:
Forcy McForceFace: building a keyboard switch force tester out of an old 3D printer.
- 2023‑12‑13:
Unauthenticated Bluetooth keystroke-injection in Android, Linux, macOS, and iOS.
- 2023‑12‑11:
Compiling to categories.
- 2023‑12‑11:
Cutting out continuations.
- 2023‑12‑10:
Lambda to SKI, semantically.
- 2023‑12‑08:
A brief history of keyboard encoding.
- 2023‑12‑05:
A branchless quicksort partition algorithm.
- 2023‑12‑05:
Stop stealing sheep, and find out how typography works.
- 2023‑12‑04:
You don't need JavaScript for that.
- 2023‑11‑29:
Why is Rust slower to read a file than Python?
- 2023‑11‑29:
Destructing trees safely and cheaply.
- 2023‑11‑28:
It's About Time! Accurate clocks in distributed systems.
- 2023‑11‑27:
The largest number representable in 64 bits.
- 2023‑11‑24:
FullControl: unconstrained gcode design for 3D printers.
- 2023‑11‑23:
Wasmtime and Cranelift in 2023.
- 2023‑11‑23:
Commercial flights driven off course by GPS spoofing attacks.
- 2023‑11‑22:
Why does the moon change size when you snipe it in GTA?
- 2023‑11‑21:
How I (kind of) killed Mercurial at Mozilla.
- 2023‑11‑21:
Lessons from METAFONT.
- 2023‑11‑21:
Drawing diagrams for TeX with MetaPost.
- 2023‑11‑20:
A close encounter with false sharing in Rust.
- 2023‑11‑20:
Friends don't let friends make bad graphs.
- 2023‑11‑20:
setenv() is not thread safe and C doesn't want to fix it.
- 2023‑11‑19:
Checking Rust crate semver stability in the presence of doc(hidden) items.
- 2023‑11‑17:
Oops! We Automated Bullshit.
- 2023‑11‑17:
Why you need a "WTF notebook".
- 2023‑11‑16:
Can your static type system handle linear algebra?
- 2023‑11‑16:
C++ std::source_location is broken.
- 2023‑11‑16:
We don’t do DST at this company.
- 2023‑11‑16:
A subtle Python SIGPIPE bug.
- 2023‑11‑15:
Popcount walks: next, previous, toward and nearest.
- 2023‑11‑14:
Let’s be real about dependencies.
- 2023‑11‑14:
Replacing HLS/DASH with Media over QUIC.
- 2023‑11‑13:
37 is the median value for the second prime factor of an integer.
- 2023‑11‑12:
A quick look at register allocation with destination-driven code generation.
- 2023‑11‑12:
Space Invaders street art mosaics.
- 2023‑11‑09:
Interesting JavaScript bugs caught by no-constant-binary-expression in ESLint.
- 2023‑11‑08:
Surprising facts about new CSS selectors.
- 2023‑11‑07:
Reducing Raspberry Pi 5's power consumption by 140x.
- 2023‑11‑07:
Can solar and wind power Britain? An update of David MacKay’s numbers.
- 2023‑11‑07:
Jezebel and the question of women’s anger.
- 2023‑11‑05:
A proposed fix for C/C++ relaxed atomics in practice.
- 2023‑11‑03:
Avoiding fallback and cold paths.
- 2023‑10‑26:
Technical documentation for Citus distributed PostgreSQL.
- 2023‑10‑23:
Y2038: why Steam started picking a random font.
- 2023‑10‑23:
Protomaps: an open source map of the world, deployable as a single static file.
- 2023‑10‑21:
The not-so-glamourous origins of standard railway track gauge.
- 2023‑10‑21:
Analyzing data 180,000x faster with Rust.
- 2023‑10‑20:
How to mitigate the Hetzner/Linode XMPP.ru MitM attack.
- 2023‑10‑20:
TLS MITM attack against a Russian XMPP / Jabber service.
- 2023‑10‑20:
ANSI terminal security in 2023 and finding 10 CVEs.
- 2023‑10‑20:
Mandelbrot deep zoom theory and practice.
- 2023‑10‑19:
Stop your (business rules) engines!
- 2023‑10‑19:
The road to hell is paved with good intentions and C++ modules.
- 2023‑10‑17:
Higher quality random floats.
- 2023‑10‑15:
Faster compile times from simpler dependency graphs in Rust.
- 2023‑10‑14:
Open Props: sub-atomic CSS.
- 2023‑10‑13:
Thumb calendar.
- 2023‑10‑13:
Conical Slicing: A different angle of 3D printing.
- 2023‑10‑10:
Text showdown: gap buffers vs ropes.
- 2023‑10‑10:
ECC RAM on AMD Ryzen 7000 desktop CPUs.
- 2023‑10‑09:
UK postal address oddities.
- 2023‑10‑05:
ROCkN: Providing GPS-quality timing accuracy with portable optical atomic clocks.
- 2023‑10‑05:
Report ITU-R TF.2511-0 (10/2022): Content and structure of time signals to be disseminated by radiocommunication systems and various aspects of current and potential future reference time scales, including their impacts and applications in radiocommunication.
- 2023‑10‑05:
The Terminal Escapes: Engineering unexpected execution from command line interfaces.
- 2023‑10‑03:
The 300% production problem.
- 2023‑10‑03:
x86 amd64 SIMD instruction list: SSE to AVX512.
- 2023‑10‑03:
Arm64 SIMD instruction list: SVE instructions.
- 2023‑10‑02:
32 MiB working set on a 64 GiB machine.
- 2023‑10‑02:
The Marvin attack: Bleichenbacher returns, again.
- 2023‑09‑29:
Who really invented the alphabet?
- 2023‑09‑29:
A plot of all objects in the universe.
- 2023‑09‑27:
ARM LDM and STM are Turing complete.
- 2023‑09‑25:
The invisible problem with editing text on phones.
- 2023‑09‑24:
Introducing geometric algebra to software developers: a computational thinking approach.
- 2023‑09‑23:
Polonius revisited, part 1.
- 2023‑09‑21:
Speeding up the JavaScript ecosystem: polyfills gone rogue.
- 2023‑09‑19:
Making Gaussian Splats smaller.
- 2023‑09‑19:
mlego: DIY mechanical keyboards using LEGO enclosures.
- 2023‑09‑19:
EPDiy: an ESP32-based driver board for e-Paper / E-ink displays.
- 2023‑09‑18:
Oglaf search index.
- 2023‑09‑18:
Resilient LL parsing tutorial.
- 2023‑09‑14:
Pagefind and URL search parameters.
- 2023‑09‑13:
George Gorton Machine Co engraver typefaces.
- 2023‑09‑12:
Hacking the Book8088 for better accuracy.
- 2023‑09‑12:
What’s the smallest variety of CHERI?
- 2023‑09‑11:
HDMI ISA graphics card for vintage PCs by improving the Graphics Gremlin.
- 2023‑09‑11:
Pure Wasm Life 2: optimizing webassembly and canvas with WebGL.
- 2023‑09‑11:
The Carrington Event of 1859 disrupted telegraph lines. A “Miyake Event” would be far worse.
- 2023‑09‑10:
Adding Wi-Fi to the Macintosh Portable.
- 2023‑09‑09:
Black-box concurrent data structures for NUMA architectures.
- 2023‑09‑09:
Good performance is not just big O.
- 2023‑09‑02:
Spoofing certificates with MD5 collisions in 2022.
- 2023‑09‑01:
A deep dive into Single Pair Ethernet.
- 2023‑08‑31:
Ad-hoc polymorphism erodes type-safety.
- 2023‑08‑31:
Co-dfns versus BQN's implementation.
- 2023‑08‑31:
The mystery of the Bloomfield bridge.
- 2023‑08‑29:
Grave flaws in BGP error handling.
- 2023‑08‑26:
I made a Typewriter out of Drums!
- 2023‑08‑24:
FreeBSD on Firecracker.
- 2023‑08‑23:
ROMRAM: using QSPI RAM with RP2040's SSI in read-write mode.
- 2023‑08‑23:
USB HID device class definition.
- 2023‑08‑23:
USB HID usage tables.
- 2023‑08‑22:
Building and customizing a Kyria wireless ergonomic keyboard.
- 2023‑08‑21:
Designing a PCB for the RP2040 Microcontroller | Microcontroller Tutorials
- 2023‑08‑21:
Normal incidents.
- 2023‑08‑18:
PolymurHash: a 64 bit universal hash function.
- 2023‑08‑13:
Symmetry in Chaos.
- 2023‑08‑13:
Virtualizing uxn.
- 2023‑08‑07:
Reverse Z in 3D graphics (and why it’s so awesome).
- 2023‑08‑06:
Why does libvirt support only 14 hot-plugged PCIe devices on x86-64?
- 2023‑08‑04:
The physics of readable code.
- 2023‑08‑02:
Why Python is terrible.
- 2023‑08‑02:
Akin's laws of spacecraft design.
- 2023‑08‑02:
MIT engineers create an energy-storing supercapacitor from cement and carbon black.
- 2023‑07‑31:
The Fibonacci matrix.
- 2023‑07‑31:
What John von Neumann really did at Los Alamos.
- 2023‑07‑30:
Workarounds for C11 _Generic().
- 2023‑07‑29:
LPython: novel, fast, retargetable Python compiler.
- 2023‑07‑27:
The mind grenade, 50 years on.
- 2023‑07‑22:
Managing kitchen fruit flies with a Little Shop of Horrors.
- 2023‑07‑22:
Linear-time parser combinators.
- 2023‑07‑21:
HP-1973: an HP calculator emulator.
- 2023‑07‑19:
Local async executors should be the default in Rust.
- 2023‑07‑17:
Appreciating RFC 8927 JSON type definition.
- 2023‑07‑16:
Penrose: create beautiful diagrams by typing notation in plain text.
- 2023‑07‑11:
salty: Ed25519 for ARM microcontrollers.
- 2023‑06‑26:
Ideal dimensions for PCB breakaway tabs.
- 2023‑06‑24:
No vehicles in the park: a game about content moderation.
- 2023‑06‑22:
57 different scripts descended from Egyptian hieroglyphs.
- 2023‑06‑09:
Monongahela: a design for a balanced ternary computer.
- 2023‑06‑06:
Wiio's laws of human communication
- 2023‑06‑04:
BRR: A new line drawing method for the cycle savvy.
- 2023‑06‑04:
Calculating position from raw GPS data.
- 2023‑05‑31:
Hacking my “smart” toothbrush.
- 2023‑05‑30:
Futex-likes on non-Linux systems.
- 2023‑05‑29:
ITU News Magazine: The future of Coordinated Universal Time.
- 2023‑05‑29:
SectorC: A C Compiler in 512 bytes.
- 2023‑05‑28:
Bcrypt at 25: a retrospective on password security.
- 2023‑05‑23:
Unpacking 5 billion varints in only 4 billion CPU cycles.
- 2023‑05‑22:
Wrench: an embedded interpreter.
- 2023‑05‑19:
bilge: a bit fiddling proc macro for Rust.
- 2023‑05‑17:
Logs said it was DNS, it looked like DNS, it had to be DNS, it wasn't DNS.
- 2023‑05‑14:
rxv6: a Rust rewrite of MIT’S xv6 teaching OS.
- 2023‑05‑13:
Building a baseline JIT for Lua automatically.
- 2023‑05‑12:
PS-HTTP: a web server written in PostScript.
- 2023‑05‑11:
Building an anycast secondary DNS service.
- 2023‑05‑11:
Building the Micro Mirror free software CDN.
- 2023‑05‑10:
Semantics and scheduling for machine knitting compilers.
- 2023‑05‑08:
On custom-width integer types.
- 2023‑05‑07:
Mysteries of the Griffin iMate and the Apple Extended Keyboard II.
- 2023‑05‑07:
The tale of -mrtd in GCC and Clang.
- 2023‑05‑07:
Prolly trees: Merklizing the key/value store for fun and profit.
- 2023‑05‑07:
On numbering hegemonies and namespace monopolies.
- 2023‑05‑05:
Science Fiction Movie Lettering
- 2023‑05‑03:
I want to talk about WebGPU.
- 2023‑05‑02:
Flattening ASTs with arena allocation.
- 2023‑05‑01:
A mirror for Rust: compile-time reflection.
- 2023‑05‑01:
First clean water, now clean air.
- 2023‑05‑01:
Perfect hashing for strings with PEXT.
- 2023‑04‑30:
Basics of space flight: orbital mechanics.
- 2023‑04‑29:
gefs: a good enough filesystem for Plan 9.
- 2023‑04‑26:
You could have invented futexes.
- 2023‑04‑22:
The magic of DC-DC voltage conversion.
- 2023‑04‑22:
Escheresque parquet deformations of an aperiodic monotile.
- 2023‑04‑21:
n2: an alternative ninja implemrntation in Rust.
- 2023‑04‑16:
The time Bell Labs brought the Statue of Liberty under its roof (literally).
- 2023‑04‑16:
Registration desk process engineering at a furry convention.
- 2023‑04‑13:
Mac keyboard layout configuration with hidutil.
- 2023‑04‑10:
Night of the living brain fog, or how I hacked my sleep apnea better thanks to open source software.
- 2023‑04‑10:
Can you trust a compiler to optimize (even vectorize) your code?
- 2023‑04‑10:
nsss: a secure NSS-like implementation for static linking.
- 2023‑04‑10:
Using RP2040 PIO to drive a poorly-designed display.
- 2023‑04‑09:
Modular errors in Rust.
- 2023‑04‑08:
Database “sharding” came from Ultima Online?
- 2023‑04‑07:
The longest straight line in Great Britain (without crossing a public road).
- 2023‑04‑06:
CAN Injection: keyless car theft.
- 2023‑03‑30:
Mozilla XUL layout is gone from Firefox.
- 2023‑03‑15:
Infra-red in-situ (IRIS) inspection of silicon.
- 2023‑03‑15:
No more DSLs: Implement and deploy a distributed system with a single program.
- 2023‑03‑14:
Generating aerial imagery with your iPhone’s LiDAR sensor.
- 2023‑03‑12:
How we knew space is a vacuum.
- 2023‑03‑10:
\Device\Afd: what makes async Rust and libuv work on Windows.
- 2023‑03‑09:
The Quest for Netflix on Asahi Linux.
- 2023‑03‑08:
The linguistic registers of Rust.
- 2023‑03‑08:
Historical notes on computer word and byte sizes.
- 2023‑03‑08:
How Discord stores trillions of messages.
- 2023‑03‑07:
How UC Davis medical school became remarkably diverse.
- 2023‑03‑07:
I made React Native JSON.parse() 2x faster.
- 2023‑03‑03:
Atkinson hyperlegible font.
- 2023‑02‑28:
HOTscript: higher-order TypeScript, a library for type-level madness.
- 2023‑02‑05:
Where is the most densely populated square kilometre in the UK?
- 2023‑02‑03:
Weird things I learned while writing an x86 emulator.
- 2023‑01‑31:
Adding comments to your static blog with Mastodon.
- 2023‑01‑30:
Coloring for colorblindness.
- 2023‑01‑29:
The 12-bit rainbow palette.
- 2023‑01‑29:
Elektročas HH3: the most accurate pendulum clock on the planet.
- 2023‑01‑28:
C needs a new type qualifier: it’s time for null pointer safety.
- 2023‑01‑27:
Netheads vs. bellheads redux: the strange victory of SIP over the telephone network.
- 2023‑01‑27:
Reverse engineering the original Lytro lightfield camera.
- 2023‑01‑26:
What time is it on the Moon?
- 2023‑01‑25:
Do not taunt happy fun branch predictor.
- 2023‑01‑24:
Bounded flexible arrays in C.
- 2023‑01‑19:
Huge pages are a good idea.
- 2023‑01‑18:
XLR V3: Guinness world record holder for fastest quadcopter drone.
- 2023‑01‑17:
BetterDisplay: extra configuration options for macOS.
- 2023‑01‑08:
User-level implementations of RCU (read copy update).
- 2023‑01‑08:
The DIY scientist, the olympian, and the mutated gene.
- 2023‑01‑08:
Production Twitter on one machine?
- 2023‑01‑05:
Reflecting on transducers in Scheme.
- 2023‑01‑01:
How to get Xfinity Stream to work on Linux: a tale of Widevine, Chrome OS, and a patched glibc.
- 2023‑01‑01:
Better binary search in Haskell.