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
- 2024‑09‑29:
A p-adic representation of the rational numbers for fast easy arithmetic. (1979)
- 2024‑09‑24:
A few secure random bytes in PostgreSQL without pgcrypto.
- 2024‑09‑19:
Digital signatures and how to avoid them.
- 2024‑09‑16:
Ante: A low-level functional language with algebraic effects and safe shared mutability.
- 2024‑09‑04:
LSP: the good, the bad, and the ugly.
- 2024‑09‑01:
A simple generic parallelism idiom and C++17 specifics.
- 2024‑09‑01:
CHERIoT: a study in CHERI for RISC-V microcontrollers.
- 2024‑08‑29:
Compiling JavaScript to Wasm: partial evaluation, weval, and the first Futamura projection.
- 2024‑08‑29:
Time-series compression algorithms, explained.
- 2024‑08‑27:
Should scientific fraud and research misconduct be illegal?
- 2024‑08‑25:
Linux pipes are slow.
- 2024‑08‑24:
Geometric search trees.
- 2024‑08‑23:
We need visual programming. No, not like that.
- 2024‑08‑23:
Ted Dunning on histograms vs quantile sketches.
- 2024‑08‑18:
The door problem: what does a game designer do?
- 2024‑08‑14:
The medieval 'New England': a forgotten Anglo-Saxon colony on the north-eastern Black Sea coast.
- 2024‑08‑14:
Round in circles and back again: Max Roberts updated London Underground concentric circles and spokes map.
- 2024‑08‑11:
Rosie pattern language: modern text pattern matching to replace regex.
- 2024‑08‑10:
Confusion attacks: exploiting hidden semantic ambiguity in Apache httpd.
- 2024‑08‑08:
A better light source for scanning color negative film.
- 2024‑08‑07:
A trilingual inscription at Behistun near Persepolis led to the decipherment of cuneiform.
- 2024‑08‑07:
Situated software.
- 2024‑08‑04:
Helmut Schmidt Future Prize acceptance speech by Meredith Whittaker.
- 2024‑08‑03:
Primitive recursive functions for the working programmer.
- 2024‑08‑02:
Another variable-length integer encoding.
- 2024‑07‑31:
Where does the name "algebraic data type" come from?
- 2024‑07‑30:
Quint: An executable specification language with delightful tooling based on the temporal logic of actions (TLA).
- 2024‑07‑30:
Calculating the cost of a Google Deepmind paper, or, how to burn $10,000,000 on an arXiv preprint.
- 2024‑07‑27:
Unsafe read beyond of death: optimized short string SIMD load.
- 2024‑07‑27:
Counting bytes faster with SIMD, interleaving, and prefetching.
- 2024‑07‑26:
CompilerFax: phone a compiler, fax it some code, it faxes back the results.
- 2024‑07‑26:
Meta-Thunderbolt-Inception
- 2024‑07‑26:
Rosemary Grant on the Galapagos finches: “Evolution happens much quicker than Darwin thought”.
- 2024‑07‑25:
An extensive benchmark of C and C++ hash tables.
- 2024‑07‑21:
How not to use box shadows.
- 2024‑07‑19:
Concerns about passkeys.
- 2024‑07‑19:
NSCopyObject, the griefer that keeps on griefing.
- 2024‑07‑18:
Hash-based bisect debugging in compilers and runtimes.
- 2024‑07‑18:
Why Polars rewrote its Arrow string data type.
- 2024‑07‑16:
How the Stream Deck rose from the ashes of the legendary Optimus Maximus keyboard.
- 2024‑07‑15:
Pull requests via `git push`.
- 2024‑07‑15:
Objective tests for aphantasia.
- 2024‑07‑13:
git-pr: A new git collaboration service.
- 2024‑07‑12:
Nine rules for successful power meetings.
- 2024‑07‑12:
Beating the cache with value speculation.
- 2024‑07‑12:
That afternoon headache is a sign of stale air.
- 2024‑07‑12:
Are you sure you want to use mmap() in your database management system?
- 2024‑07‑11:
Hash maps that don’t hate you.
- 2024‑07‑11:
First contact with SQLite.
- 2024‑07‑10:
Towards reproducible rebuilds of Debian packages.
- 2024‑07‑09:
Is prefix of string in table? A journey into SIMD string processing.
- 2024‑07‑08:
On understanding data abstraction, revisited.
- 2024‑07‑06:
Properly property testing concurrent data structures.
- 2024‑07‑04:
xsum: exactly-rounded summation of floating point values.
- 2024‑07‑03:
The sad state of property-based testing libraries.
- 2024‑07‑02:
BusyBeaver(5) is now proved to be 47,176,870.
- 2024‑06‑29:
POSIX 2024 changes.
- 2024‑06‑29:
A eulogy for DevOps.
- 2024‑06‑26:
Profiling with ctrl-C.
- 2024‑06‑25:
Sans I/O when the rubber meets the road.
- 2024‑06‑24:
ChocoPy: a subset of Python 3 for teaching compiler construction.
- 2024‑06‑23:
Why is AVX 512 useful for the RPCS3 PlayStation 3 emulator?
- 2024‑06‑22:
Optimizing SQLite for servers.
- 2024‑06‑22:
The simple essence of algebraic subtyping: principal type inference with subtyping made easy.
- 2024‑06‑21:
1/25-scale Cray C90 wristwatch.
- 2024‑06‑20:
How to use the new counted_by attribute in C and Linux.
- 2024‑06‑20:
Public JavaScript CDNs are useless and dangerous.
- 2024‑06‑19:
Demystifying Rust's ? operator and Try trait.
- 2024‑06‑18:
Avoiding Emacs bankruptcy.
- 2024‑06‑18:
Equality has more than one meaning in mathematics.
- 2024‑06‑17:
Zig-style generics are not well-suited for most languages.
- 2024‑06‑16:
MicroMac, a 128k Macintosh emulated on an RP2040.
- 2024‑06‑16:
There are only three frequencies: never, sometimes, always.
- 2024‑06‑16:
Stupid TLS facts: session resumption.
- 2024‑06‑13:
Whose CIDR is it anyway? Scanning all of whois and rdap.
- 2024‑06‑12:
Bamboo can be as invasive as Japanese knotweed.
- 2024‑06‑12:
Inside Mexico’s anti-avocado militias.
- 2024‑06‑09:
Using HDMI EMI for fast wireless data transfer.
- 2024‑06‑09:
A (draft) taxonomy of SIMD usage.
- 2024‑06‑08:
Towards federated key transparency.
- 2024‑06‑08:
Compilers are (too) smart: a failed popcount optimization.
- 2024‑06‑07:
What is PID 0?
- 2024‑06‑07:
Leveraging Zig's allocators.
- 2024‑06‑07:
Tom7’s BoVeX typesetter with AI-assisted justified text.
- 2024‑06‑07:
Speeding up rustc by being lazy.
- 2024‑06‑06:
lelwel: a resilient LL(1) parser generator for Rust.
- 2024‑06‑06:
let rand = main as usize;
- 2024‑06‑06:
First steps with DHCPv6-PD on OpenBSD.
- 2024‑06‑06:
Propagating bounds through bitwise operations in abstract interpretation.
- 2024‑06‑04:
Simple proofs with Z3Py.
- 2024‑06‑04:
Why do electronic components have such odd values? Renard numbers and ISO 3.
- 2024‑06‑04:
Cloning-based context-sensitive pointer alias analysis using binary decision diagrams in bddbddb.
- 2024‑06‑04:
bddbddb: using Datalog with binary decision diagrams for program analysis.
- 2024‑06‑04:
Bit-twiddling abstract addition with unknown bits.
- 2024‑06‑04:
LL and LR in context: why parsing tools are hard.
- 2024‑06‑04:
automemcpy: a framework for automatic generation of fundamental memory operations.
- 2024‑06‑02:
Tiny Tapeout: an educational project to get your designs manufactured on a real chip.
- 2024‑06‑02:
Tock: an embedded operating system in Rust.
- 2024‑06‑02:
The borrow checker within Rust.
- 2024‑06‑01:
X is justifiably slow?
- 2024‑06‑01:
Electromagnetic linear clock.
- 2024‑05‑31:
The greatest clock (and map) ever made.
- 2024‑05‑30:
Why, after 6 years, I’m over GraphQL.
- 2024‑05‑29:
Recycling steel with cement in an arc furnace could produce zero-emissions concrete.
- 2024‑05‑29:
Why rejecting invalid XML in the browser is a bad idea.
- 2024‑05‑28:
A study of MAC address randomization in mobile devices and when it fails.
- 2024‑05‑28:
Surveilling the masses with Wi-Fi-based positioning systems.
- 2024‑05‑28:
I’ve womansplained him to death.
- 2024‑05‑28:
The Cephes mathematical library.
- 2024‑05‑28:
IPv6 link-local stunts: ping ff02::1 etc.
- 2024‑05‑28:
Programming pearls: Bumper sticker computer science.
- 2024‑05‑28:
Why software projects take longer than you think: a statistical model.
- 2024‑05‑28:
Doing is normally distributed, learning is log-normal.
- 2024‑05‑26:
Statically typed functional programming with Python 3.12.
- 2024‑05‑26:
RuSSH: a Rust SSH client and server library.
- 2024‑05‑26:
Taming floating-point sums with Rust.
- 2024‑05‑21:
vu128: Efficient variable-length integers
- 2024‑05‑21:
Rust's iterators optimize nicely—and contain a footgun.
- 2024‑05‑19:
I am too old to create a popular programming language.
- 2024‑05‑19:
Compilers for free with weval, a wasm partial evaluator.
- 2024‑05‑19:
VirusTotal YARA has been rewritten in Rust as YARA-X.
- 2024‑05‑18:
Fix your video game’s timestep!
- 2024‑05‑18:
Fixing iterative damping interpolation in video games.
- 2024‑05‑18:
TCP performance and the Mathis equation.
- 2024‑05‑17:
Golang disables Nagle’s algorithm, making it evil on shitty networks.
- 2024‑05‑17:
A transport protocol's view of Starlink.
- 2024‑05‑17:
What even is a pidfd anyway?
- 2024‑05‑16:
History of the Italian electrical system.
- 2024‑05‑16:
A look at the Mojo language for bioinformatics.
- 2024‑05‑16:
Strings in Julia vs Rust: you probably don't need to validate UTF-8.
- 2024‑05‑16:
D3 in depth.
- 2024‑05‑16:
Understanding misunderstandings in C source code using IOCCC winners.
- 2024‑05‑16:
Ebury is alive but unseen: 400k Linux servers compromised by the Windigo group.
- 2024‑05‑16:
Some notes on Rust, mutable aliasing, and formal verification.
- 2024‑05‑15:
A tale of two sieves.
- 2024‑05‑15:
The creator of Magic: The Gathering knows exactly where it all went wrong.
- 2024‑05‑14:
Optimizing the Roc parser/compiler with data-oriented design.
- 2024‑05‑14:
A triad of factors that explain the nature of software.
- 2024‑05‑13:
Submitting a Linux kernel patch with b4.
- 2024‑05‑13:
Exploring GNU C extensions in the Linux kernel.
- 2024‑05‑13:
Parsing JSON is a minefield.
- 2024‑05‑12:
Functional semantics in imperative clothing in the Roc programming language.
- 2024‑05‑12:
Can we make bicycle manufacturing sustainable again?
- 2024‑05‑12:
Emoji history: the missing years.
- 2024‑05‑12:
Breaking DKIM and BIMI in 2024 using the Debian OpenSSL bug CVE-2008-0166.
- 2024‑05‑11:
In Rust, methods should be object safe.
- 2024‑05‑11:
Why the CORDIC algorithm lives rent-free in my head.
- 2024‑05‑11:
Thread: the wireless tech we can't use or teach.
- 2024‑05‑09:
It's always TCP_NODELAY. Every damn time.
- 2024‑05‑09:
Rust through the ages.
- 2024‑05‑09:
The await event horizon in JavaScript.
- 2024‑05‑08:
B612: the Airbus cockpit display font.
- 2024‑05‑06:
Decoding UTF8 with the pext parallel extract instruction.
- 2024‑05‑06:
The C++ iceberg.
- 2024‑05‑05:
An extended subtweet on power-over, vs power-with or power-to.
- 2024‑05‑05:
The Italian streets that don't exist on any map.
- 2024‑05‑05:
How to build a $20 billion semiconductor fab.
- 2024‑05‑05:
Bit-stealing made legal: compilation for custom memory representations of algebraic data types.
- 2024‑05‑05:
TypeID: type-safe, K-sortable, globally unique identifiers.
- 2024‑05‑05:
Understanding Stein's paradox in higher-dimensional statistics.
- 2024‑05‑03:
ECDH-OMR: elliptic curve Diffie-Hellman oblivious message retrieval.
- 2024‑05‑02:
Piccolo: a stackless Lua interpreter in Rust.
- 2024‑05‑02:
Unwind considered harmful?
- 2024‑05‑02:
PaperWM.spoon: tiled scrollable window manager for Hammerspoon on MacOS.
- 2024‑05‑01:
It's time to stop recommending Clean Code.
- 2024‑04‑30:
Rink: an open source unit-aware calculator.
- 2024‑04‑30:
iRRAM: exact arithmetic in C++.
- 2024‑04‑30:
PostgreSQL supported platforms over time.
- 2024‑04‑30:
Bytecode VMs in surprising places.
- 2024‑04‑30:
PowerShell monad manifesto.
- 2024‑04‑30:
State of the terminal.
- 2024‑04‑29:
So, you want to write an unsafe crate in Rust?
- 2024‑04‑29:
The space bar stabilizer problem.
- 2024‑04‑28:
The invention of the integrated circuit recorded in Jean Hoerni's patent notebook.
- 2024‑04‑28:
Building an IBM 3270 terminal controller.
- 2024‑04‑27:
Tasks are the wrong abstraction for async Rust.
- 2024‑04‑26:
Captain Zilog crushed! The story of the Z8000.
- 2024‑04‑26:
Passkeys: a shattered dream.
- 2024‑04‑25:
The weird world of Windows file paths.
- 2024‑04‑24:
How web bloat impacts users with slow devices.
- 2024‑04‑24:
So you want to learn to break ciphers?
- 2024‑04‑24:
Digitized continuous magnetic recordings of the Carrington event from Greenwich and Kew.
- 2024‑04‑23:
No one buys books.
- 2024‑04‑19:
A history of parsers of the Ruby programming language.
- 2024‑04‑19:
Raw flux streams and obscure formats: Further work around imaging 5.25-inch floppy disks.
- 2024‑04‑18:
A domino computer.
- 2024‑04‑17:
Feathers are one of evolution’s cleverest inventions.
- 2024‑04‑17:
Will we have a negative leap second?
- 2024‑04‑17:
The hardest problem in web design: centering things.
- 2024‑04‑16:
Some useful types for database-using Rust web apps.
- 2024‑04‑16:
Etak Navigator: how they made a mapping computer in the 1980s.
- 2024‑04‑15:
Five little languages and how they grew: Dennis Ritchie’s talk at HOPL on the history of C.
- 2024‑04‑14:
Sandboxing all the things with Flatpak and BubbleBox.
- 2024‑04‑11:
A simple derivation of sin and cos by stacking triangles.
- 2024‑04‑10:
BatBadBut: You can't securely execute commands on Windows.
- 2024‑04‑09:
Halbach magnetic array.
- 2024‑04‑09:
The link between abortion and crime.
- 2024‑04‑09:
path.join considered harmful, or openat() all the things.
- 2024‑04‑09:
An introduction to jump threading optimizations in gcc.
- 2024‑04‑09:
The server chose violence: error handling in the Hubris embedded OS.
- 2024‑04‑05:
The state of time in Rust: leaps and bounds.
- 2024‑04‑05:
Features I wish PostgreSQL had as a developer.
- 2024‑04‑05:
The case against self-closing tags in HTML.
- 2024‑04‑04:
HTTP/2 CONTINUATION flood denial of service vulnerability.
- 2024‑04‑04:
Putting an xz backdoor payload in a valid RSA key.
- 2024‑04‑03:
Diff modulo base, for comparing rebased branches.
- 2024‑04‑03:
Multiple cursors for emacs.
- 2024‑04‑01:
The Wi-Fi only works when it's raining?!
- 2024‑04‑01:
When concurrency matters: behaviour-oriented concurrency.
- 2024‑04‑01:
The muscular imagination of Iain M. Banks: a future you might actually want to live in.
- 2024‑03‑31:
A kinematically coupled piezo nanometer-resolution microscope focus stage.
- 2024‑03‑31:
Countering trusting trust.
- 2024‑03‑31:
A systematic analysis of the Juniper Dual EC DRBG backdoor.
- 2024‑03‑30:
Basic things to support your software project.
- 2024‑03‑30:
The "not rocket science" rule of continuous integration (and the story of monotone and bors).
- 2024‑03‑29:
A new provisioning tool built with mgmt.
- 2024‑03‑28:
TCP is an underspecified two-node consensus algorithm and what that means for your proxies.
- 2024‑03‑28:
Binary Fuse Filters: fast and smaller than xor filters.
- 2024‑03‑26:
Preventing cross-service UDP loops in QUIC.
- 2024‑03‑25:
Interval parsing grammars for file format parsing.
- 2024‑03‑21:
Progressing towards the redefinition of the second based on an optical frequency standard.
- 2024‑03‑19:
The invention of fuzz testing.
- 2024‑03‑15:
JESK56: a diodeless keyboard matrix derived using graph theory.
- 2024‑03‑13:
Mu-Ency: the encyclopedia of the Mandelbrot set.
- 2024‑03‑12:
Identifying software: supply chain security with GNU Guix.
- 2024‑03‑12:
yet-another-cad-viewer: display OCP/CadQuery/Build123d models in a web browser.
- 2024‑03‑11:
Staged generic programming.
- 2024‑03‑10:
Do Be Do Be Do, or, Frank: a strict functional programming language with algebraic effects.
- 2024‑03‑09:
Call-by-push-value: decomposing call-by-value and call-by-name.
- 2024‑03‑09:
Call-by-push-value. (1999)
- 2024‑03‑09:
I'm betting on call-by-push-value.
- 2024‑03‑09:
The SuperC parsing framework.
- 2024‑03‑07:
CAP twelve years later: how the "rules" have changed.
- 2024‑03‑06:
Conway’s Law: the only unbreakable law.
- 2024‑03‑05:
Behind F1's velvet curtain.
- 2024‑03‑04:
The hunt for the missing graph data type.
- 2024‑03‑04:
Migrating from Emacs lsp-mode to Eglot.
- 2024‑03‑04:
Motion blur all the way down.
- 2024‑03‑03:
The case against geometric algebra.
- 2024‑03‑03:
50 years ago: the new Cambridge University Press printing house.
- 2024‑02‑26:
What is the "God Mode" folder in Windows 10, and how do I enable it?
- 2024‑02‑25:
Beware of -ffast-math and -Ofast.
- 2024‑02‑22:
A security kernel based on the lambda calculus.
- 2024‑02‑14:
Thomas Rokicki’s survey of algorithms for Conway’s Game of Life.
- 2024‑02‑13:
Conway's Game of Life is omniperiodic.
- 2024‑02‑07:
jj init : an introduction to the jujutsu version control system.
- 2024‑02‑06:
RCL: A reasonable configuration language.
- 2024‑02‑03:
Pkl: a programming language for configuration.
- 2024‑01‑29:
__VA_OPT__ minutiae.
- 2024‑01‑29:
Recursive macros with C++20 __VA_OPT__.
- 2024‑01‑17:
Passing nothing is surprisingly difficult: empty slices in C, C++, and Rust.
- 2024‑01‑15:
MULTIPLY: the Francis Hookham collection of hand held electronic calculators.
- 2024‑01‑15:
When random isn't.
- 2024‑01‑14:
QMK and keyboards.
- 2024‑01‑08:
niri: A scrollable-tiling Wayland compositor.
- 2024‑01‑08:
How to stop Linux threads cleanly.
- 2024‑01‑06:
Vectrex reborn: How a chance encounter gave new life to a dead console.
- 2024‑01‑04:
Golang: what we got right, what we got wrong.
- 2024‑01‑04:
An overview of the Starlark programming language.
- 2024‑01‑03:
Spatial Shell: a window layout assistant for i3 and sway.
- 2024‑01‑03:
newm-atha: a touchpad and touchscreen centric wayland compositor.
- 2024‑01‑02:
A CAP tradeoff in Kubernetes.