jes's blog
AI Test User
The Story of Max, a Real Programmer
The web program manifesto
Against exponential backoff
Conservation of tins of paint
You never ask how I'm doing
Building blocks for F-Rep CAD
Thoughts on Signed Distance Functions for CAD
How to abort calculations in OpenCascade
The world's stupidest AppImage
Timeline of Discovery
Clock Gear Train Calculator
The Principles of Mr. Harrison's Time-keeper
My diaphragm piston air engine with rotary valve
Prompts as source code: a vision for the future of programming
Bare minds
The free space equation
Encyclopedia Mechanica
I made an LLM-powered Colonel Blotto game
2014 Nissan Leaf: first impressions
Secrets of the ChatGPT Linux system
My first microlighting experience
I'm building a fixed-gantry CNC machine out of composite kitchen worktop material
How to read from a TCP socket (but were too afraid to ask)
We're not in a simulation
The watch project
Interesting features of John Harrison's sea clocks
Incongruous technologies redux
A self-aligning Boggle board
The Douzieme gauge
Five interesting things from the Science Museum
Designing a Bangle.js commute timer
The Egyptian coin box
dnstweak: quick local DNS spoofing tool
Exploiting an insecure cipher in the wild
Incongruous technologies
Triangle strip encoding
Did I receive fraudulent DMCA takedowns?
Book Review: Bloodhounds (includes spoilers)
Taxonomy of locked room murders
The crank position sensor works
A quick 3d-printed light gate
Revisiting oscillating engine loss calibration
Coriolis fountain
The KRC-2 regenerative receiver kit: a review
More inlet pressure measurements
Measuring Wig-Wag inlet pressure fluctuations
Calibrating losses in the oscillating engine simulator
My Wig-Wag
Oscillating Engine Simulator
My mini lathe stand
Prime Combination: Solution
Prime Combination
Optimal eccentric-weighted coins
Problems with Protohackers
Classifying minds
Alternative revolutions
Solving Protohackers with Fly.io
Nightdrive
Protohackers problem 2 retrospective
How small can you make text with a drag engraver?
The future of virtual reality
Protohackers problem 1 retrospective
Protohackers: a new server programming challenge
A SLANG interpreter for SCAMP
A Lisp interpreter for SCAMP
Cheating at chess with a computer for my shoes
Do I really want a lambda calculus cyberdeck?
Eldood: what Doodle used to be
Consciousness is computable
The ultimate SCAMP development environment
Toolmaker's Clamp
Progress on the CNC mini mill
FreeCAD vs SolveSpace
CNC milling machine project
Meshmill: open source 3D CAM
Using the weird rotary axis
Librem 5: first impressions
Packing puzzle: Six Fit
A weird rotary axis for my CNC machine
Party Puzzling: themed puzzle sets for special occasions
An Arduino-based USB interface to the Psion Organiser II
Waypointer Moto: motorcyle navigation for Bangle.js
Measuring motorcycle lean angle with a single accelerometer
Advent of Code on my homemade CPU
Bubble packing puzzle
Lightweight and robust quadcopter guards
I made an adjustable loaded die
Fixing my tablesaw tilt mechanism
Towards a high-resolution grid of tiny electromagnets
Choozi for Bangle.js
Approximating Lenna with a neural net
The case for SCAMP
Play with SCAMP from the comfort of your browser
Porting Hamurabi to SCAMP
Book Review: Every Tool's a Hammer
SCAMP update
A short pendulum with a long period
A method and apparatus for polishing shafts
SCAMP has booted up to the shell for the first time
The kilo editor
SCAMP is alive
Bangle.js open source hackable smart watch: first impressions
Front panels for SCAMP
The SCAMP kernel
A compiler for SCAMP, and machine code profiling
How to use an AT28C16 EEPROM with an Arduino Uno without a port expander
My second attempt at milling a PCB
My first attempt at milling a PCB
Making a start on the SCAMP ALU cards
Designing the instruction set for my TTL CPU
Progress on my TTL CPU design
I want to cast some rings
Adventures in CPU design
Someone copied Stegoseed and deleted my name from it
I wrote a semi-literate brainfuck compiler for CP/M
How to copy files to/from the RC2014 using XMODEM
My Advent of Code Story
All the gears, no ideas: an escape room puzzle
I made some aluminium keycaps
Sawing my dining table in half
Seasonal.css: Give your website a seasonal colour scheme
CNC toolpath generation from heightmaps
First steps into CNC machining
How to convert a 6040 CNC machine to Grbl
I made an optical inline fuel sensor
Miscellaneous thoughts on making stuff
Progress on my Godot racing game for Oculus Quest
How to import Assetto Corsa race tracks into Godot
I made a mechanical keyboard with 3d-printed switches
I'm working on a VR car racing game for Oculus Quest
Another new switch tester, test results, and thoughts on the keyboard design
Secrets of the Hanayama Cast Marble
I made a macro keypad with 3d-printed switches
Making a game with 24a2
Keyboard switch progress & test results
A better automatic keyboard switch tester
I broke my first 3D-printed keyboard switch
Automatic keyboard switch tester
Thoughts on laser level design
How to run a Cloud Desktop on any VPS, with SPICE
An easy way to package Perl programs
Zero-downtime Docker container deployments with nginx
Autopatzer: my automatic chess board
YubiKey SSH authentication: the easy way
Automatic chess board design
My first combat robot tournament
I built an antweight combat robot
My DIY Cryptosteel Capsule
Chassis Design with Finite Element Analysis in FreeCAD
My RC2014 Web Server
Design and Implementation of a Z80 Computer Front Panel
The RC2014 Z80 Microcomputer
My Arduino-based industrial process controller
Home 3d metal printing: first results
The 2019 BLMRA 12 hour lawnmower race
An interesting 3d metal printing process (help wanted)
How to make a rev limiter with an Arduino
My first chess tournament
A Strange Chess Clock
How to win at Scotland Yard
Puzzle Drawers
The Wheatstone Cryptograph
Telescope tracking with software auto-guiding
Imaging the Orion nebula with the PiKon telescope
Towards a Better Pythagorean Cup
First Light in the PiKon telescope
Flat Earth and the Coriolis Force
My PiKon telescope hardware
Ramblings About a Computerised Telescope
Deanonymising a Tor hidden service with traffic correlation
How to use Ricochet IM on Tails
Hiding messages in chess games
Someone used my IPFS gateway for phishing
How Ricochet IM works
Please don't block Europe
How to install Ubuntu 18.04 LTS on a Lenovo Ideacentre 310s
Spelunking the Web Servers of the Lightning Network
A 4x4 chess puzzle
We entered the BLMRA 12 hour lawnmower race again
I tried to make a vinyl record on the lathe
What's inside an HSBC SecureKey?
Introduction to Isopath
My homemade ebike control panel
A Rock-Paper-Scissors AI that is too good
Reverse engineering an ebike 3-mode PAS LED panel
What would the total computing power of the entire world in 1970 cost today?
How I cracked the Bitcoin keys in Andy Bauch's Lego artwork
How to find out if your data gets stolen (URL Canary)
SaaS profit is market inefficiency, and it will end
How to run SSH and HTTP on the same port
A visual demonstration of the perils of key reuse in a one-time pad
I designed a trick chess piece with hidden compartments
Magnetic cubes puzzle: In practice
Magnetic cubes puzzle: In theory
How to get your Bitcoins out of Xapo without running their app on your phone
Knives: they cut, and they don't ask no fucking questions. Yet.
How to control a digital speedometer
Is mega.co.nz censored by every major search engine?
Finding unsecured S3 buckets using Passive DNS
Machines as first-class citizens
New project: YX140 engine in a Honda Innova scooter
Someone Created a Tor Hidden Service to Phish my Tor Hidden Service
On Gumtree, "Bitcoin" is a dirty word
Solving the Matchsticks Game
Google Trends portfolio: selling Ripple
Google Trends portfolio: buying Monero
Using Google Trends data to speculate on cryptocurrencies
I tried to do the BLMRA 12 hour lawnmower race
I found a security vulnerability in SMS Privacy this morning
The only time Hacker News is this interested in Bitcoin is when there's a bubble forming
BTC-e, Alexander Vinnik, and the missing MtGox Bitcoins
I tried to buy a thing off a dark net market, and the FBI stole my money
Why Bitcoin has to succeed
Double-check Bitcoin addresses when pasting (Bitcoin TX Generator malware)
How to create 3d-printed stencils for spray-painting
Someone cloned my website and is using it to scam people
Hardbin: The World's Most Secure Encrypted Pastebin
I made a Base58 encoding/decoding tool
How to use bitaddress.org securely (spoiler: use IPFS)
I've been playing with IPFS
I semi-deanonymised some MetaMask users, and they were absolutely loaded
Drive-by identification of MetaMask users
eBay don't understand why people dodge their fees
Is the Large Bitcoin Collider malware?
I made a Rhyming Dictionary
I started accepting 0-conf Bitcoin payments, and it was great
On the inevitability of the machine-owned enterprise
I don't know how many soldiers are taking drugs, and neither do you
SMS Privacy was attacked last night
Steganographic Bitcoin seeds: Hiding cash in plain sight
Precautions for generating Bitcoin QR codes
Encrypted email is still a pain in 2017
I bought an extremely cheap 3d printer and it's great
Why minimum wage is bad, illegal immigrants are good, and ticket scalping is fine
The Game Theory Case for Bitcoin
Secrets of the Medtronic MyCareLink Patient Monitor
Please stop making popup menu bars
How (and why) to accept Bitcoin payments yourself (without running a full node)
Bitcoin debit cards: Xapo vs Cryptopay
I made a hidden bookcase door
SMS Privacy month 1 review
SMS Privacy now provides anonymous voicemail
What is the most interesting thing live streaming right now?
The SMS Privacy conversion funnel
How to buy phone numbers anonymously
What if we could assume new identities at will?
Living with a Bitcoin debit card
Perl's Digest::SHA::hmac_sha256_base64 is wrong
On the design of a herb jar lid
I delivered an Oak Mirror to a lady
How to copy Wordpress theme customisations to a child theme
How to defeat naive image steganography
Stockfighter Review (no spoilers)
How (and why) to make your software faster
Going Solo
How to peek all of the jobs in a Beanstalk tube
I delivered 2 sofas for Vincent
How to interrupt a regex in Perl
How to use GNU screen for ad-hoc cluster management
I tried to go pit biking
I made a video of driving my van
I tried to change the glow plugs in my van
I bought a pit bike
I rode my motorbike off road and made a video
I made a gong
I made a puzzle game
If you serve javascript with a 404 status does it still get executed?
I made a knife out of a file
Logrotate race condition with copytruncate
I made a little knife
I made a plymetal heart decoration
I painted my van wheels
How to close a running process's socket
I drove a truck and bought a car
Digital Ocean Private Networking is not Private
I built a campervan
I am back on the bike
I built an oak chest
How to make driftwood sink
I bought some fish
I made a ring out of a coin
I drove in the snow
SMS Travel Map
Stories from the Mongol Rally: Mongolian Black Market Pickpocket
Stories from the Mongol Rally: Kazakhstan Policeman Selfie
Stories from the Mongol Rally: the Georgian Diesel Incident
Counter creator
I made a brass box
I ran out of fuel in my van
I helped a French child fix a stolen moped
West Country Place Name Generator
Yurt Lush Live Tracking
Hungman
NFC Tag
Beer
Xory
Mazda MX-5
The Glowstick Debacle
8 out of 10 Countdown viewers
Polynomial interpolator
Phone posting setback