James Stanley


The writing is bad and the stories are not very interesting.

Tagged: all | software | 3dprinting | electronics | cpu | science | bitcoin | cnc | puzzle | metalwork | smsprivacy | chess | futurology | keyboard | wigwag | cryptography | cybercrime | lawnmower | magic | philosophy | protohackers | banglejs | clocks | ipfs | pikon | rc2014 | steganography | tor | ricochet

How to read from a TCP socket (but were too afraid to ask)
Sat 10 February 2024
You can get surprisingly far, before it bites you, with only a fuzzy and incorrect understanding of how you should read from a TCP socket. I see this often in (failing) Protohackers solutions. Once you are over the initial hurdle of reading enough documentation to actually get a TCP session connected, there are 2 key things you need to understand: Read more

We're not in a simulation
Fri 2 February 2024
In this post I'm going to make the case that IF (big if) the universe can be simulated, then actually running the simulation has no effect on the contents of the universe. Either the universe can be simulated, in which case we exist within an abstract mathematical structure independent of any actual simulation, or the universe can not be simulated, in which case we trivially do not live inside a simulation. Read more

The watch project
Thu 23 November 2023
My quest at the moment is to try to make a mechanical watch. Specifically I want to make the movement. I'm not interested in buying a bunch of parts and assembling a watch. I'm also not interested in cloning a standard movement, I have my own design in mind. Read more

Interesting features of John Harrison's sea clocks
Sun 12 November 2023
I recently got to see John Harrison's sea clocks at the Royal Observatory at Greenwich. I recommend visiting if you get the chance. This post is about some of the interesting things I observed. Read more

Incongruous technologies redux
Sun 5 November 2023
Good news: I have worked out why my incongruous technologies are incongruous: it's because of software! Read more

A self-aligning Boggle board
Wed 25 October 2023
Earlier this year Charlie challenged me to make a Boggle board that always leaves the letters upright, and this week I have succeeded. Read more

The Douzieme gauge
Mon 2 October 2023
In this post I'm going to explain what a Douzieme gauge is, show you how I made one myself, and propose some alternative designs for higher precision. Read more

Five interesting things from the Science Museum
Wed 23 August 2023
I enjoyed a quick visit to the Science Museum at the weekend, and here are a few of the interesting things I saw. Read more

Designing a Bangle.js commute timer
Wed 16 August 2023
I work in an office occasionally, and there is a particular point on my commute where I always check the clock so I can tell how I'm doing for time. If it's 8.30 I'm likely to be on time, before 8.30 I'm doing well, after that I might be late. But why stop at checking my delta time at a single waypoint? Why not store a GPS trace of a reference commute and continuously compute the delta time, like you get in time trial mode in racing games? Read more

The Egyptian coin box
Sat 5 August 2023
I have invented a new magic trick. It involves a very thin wooden box with 5 locations for coins inside, each labelled with one of the 5 bodily senses. A spectator places a coin inside, without telling the magician where it is. The magician then makes a show of listening to the box, sniffing the box, etc., and successfully determines where the coin was placed. Read more

dnstweak: quick local DNS spoofing tool
Tue 11 July 2023
I spent most of today writing dnstweak, a program that temporarily inserts itself as the local DNS resolver (by writing to /etc/resolv.conf) and spoofs responses to selected DNS requests. Read more

Exploiting an insecure cipher in the wild
Thu 6 July 2023
I found that the topology_hiding module for OpenSIPS encodes data using an insecure cipher, such that it can be decoded without knowing the key, leaking both the plaintext and the key. Read more

Incongruous technologies
Sun 2 July 2023
Take saws, for example. We have saws for cutting wood, saws for cutting metals, saws optimised for cutting curved shapes, electric saws, computer-controlled saws, and so on. Saws are pretty well explored. Saws are general-purpose. You probably won't discover a new use for saws. Read more

Triangle strip encoding
Thu 22 June 2023
Triangle Strip Encoding is a method of encoding an arbitrary bitstream as a strip of triangles. I made it because I wanted an abstract-looking triangle pattern for a ring, but I wanted the triangles to mean something. Read more

Did I receive fraudulent DMCA takedowns?
Wed 21 June 2023
I received 3 DMCA takedown emails today, covering 7350 URLs on my hardbin.com IPFS gateway. The URLs were allegedly serving infringing copies of books. The strange part is that of those 7350 URLs, during the time for which I have nginx logs, none of them have ever been accessed, and of the ones that I checked, none even worked. Does this mean the DMCA takedown notices were fraudulent? Read more

Book Review: Bloodhounds (includes spoilers)
Wed 31 May 2023
Bloodhounds by Peter Lovesey is a locked room murder mystery. It has reasonably good reviews, and is set in Bath in the 90s, which is why I read it. I enjoyed most of the book, and I liked that I knew most of the places the book talks about. However, the plot has a fatal flaw, which is what has prompted me to write this post. Major spoilers lie ahead. Read more

Taxonomy of locked room murders
Wed 24 May 2023
In fiction, a locked room murder is a murder where the body is discovered in a place from which it would seem impossible for the murderer to have escaped undetected. For example, in a room that is locked from the inside, or a room that was watched by a security guard the entire time, or a room where the only exits were covered by CCTV. (We could imagine an accompanying taxonomy of locked rooms). There are really only a few ways such a murder could have been carried out. This post contains spoilers for some Jonathan Creek episodes. Read more

The crank position sensor works
Sat 6 May 2023
I have now used the 3d-printed light gate as a crank position sensor on the Wig-Wag, and the first impression is that it works well. Read more

A quick 3d-printed light gate
Thu 4 May 2023
I need to affix a rotary encoder to my oscillating steam engine to measure the crank rotation, so that I can plot pressure-volume diagrams from the real engine to compare to the simulation. Rather than buy a rotary encoder, I decided to make a light gate and slotted disc myself. I haven't done the slotted disc yet, but it will be a pretty trivial 3d print. Read more

Revisiting oscillating engine loss calibration
Mon 1 May 2023
Since my Wig-Wag has run in a bit now, I have revisited the loss calibration. Read more

Coriolis fountain
Sat 29 April 2023
I have an idea for a cool-looking water fountain. It's based on the coriolis force, which is where an object travelling in a straight line appears to be travelling in a curved line when viewed from a rotating reference frame. Read more

The KRC-2 regenerative receiver kit: a review
Tue 25 April 2023
I recently learnt about regenerative radio receivers. They reintroduce some of the output of an amplifying transistor back into the input, to get more gain. It's a step up from crystal radios, and not as complex as superheterodynes. I bought a KRC-2 kit and this post is my review. Read more

More inlet pressure measurements
Tue 18 April 2023
I'm not completely sure what has changed, but I'm now getting more convincing-looking inlet pressure data. Read more

Measuring Wig-Wag inlet pressure fluctuations
Mon 17 April 2023
I have connected an electronic pressure sensor near the inlet of my Wig-Wag so that I can test the hypothesis that the actual pressure available at the inlet changes throughout the cycle of the engine. Read more

Calibrating losses in the oscillating engine simulator
Thu 13 April 2023
The biggest unknown variable in the oscillating engine simulator is the amount of friction loss that an engine is likely to experience. To calibrate the simulation I have measured the speed of my engine at various supply pressures and then simulated the same conditions, adjusting the simulated loss until the speed matches. Read more

My Wig-Wag
Sat 8 April 2023
I have finished building the Wig-Wag engine that I mentioned in my post about the simulator, and it runs! Great success. Read more

Oscillating Engine Simulator
Sun 19 March 2023
I've been working on an oscillating engine simulator. It's a type of steam engine where instead of valve gear, the cylinder swings back and forth, exposing a hole in the cylinder to an inlet port for the power stroke, and to an exhaust port for the exhaust stroke. Very simple. (I've also been working on building one, in the form of a Wig-Wag, but I haven't got very far with that). Read more

My mini lathe stand
Sat 25 February 2023
I'm working through the book Lathework: a complete course, and it is suggested that benchtop lathes really need to be bolted to something sturdy in order to do accurate work, because they lack the required rigidity. Bolting to a plywood workbench is not enough, because to make the lathe turn parallel you need to adjust the mounting to take the twist out of the ways, which means the stand needs to be broadly as strong as the lathe bed otherwise you will twist the stand instead of the bed. Read more

Prime Combination: Solution
Sat 11 February 2023
One solution to the Prime Combination puzzle is 00001 -> 00002 -> 00003 -> 00013 -> 09013 -> 99013 -> 99023 -> 99923 -> 99823 -> 99833 -> 09833 -> 09733 -> 00733 -> 10733 -> 10723. Read more

Prime Combination
Sun 5 February 2023
You come across a 5-digit combination padlock. The combination is 10723. The padlock is currently showing 00001. If the combination is ever set to a number that is not prime, it resets to 00001 immediately, so every intermediate state from 00001 to 10723 also must be prime. How do you input the combination? Read more

Optimal eccentric-weighted coins
Thu 12 January 2023
If you wanted to make a hole in a coin so that the centre of mass is moved as far away from the original centre as possible, how big a hole would you make and where would you put it? Read more

Problems with Protohackers
Fri 18 November 2022
This is a list of things wrong with Protohackers, and my thoughts on what to do about them. Read more

Classifying minds
Tue 25 October 2022
Trying to learn about the mind by analysing the brain is like trying to learn about software by analysing the computer. The only reason anybody thinks neuroscience is related to minds is because we're not familiar with minds that aren't made out of brains. But brains are just the mechanism that evolution landed on, they're not fundamental. Our planes don't fly the same way birds do, and attempts to discover principles of flight by analysing birds were not successful. Flight is actually much simpler than birds! Maybe the principles of consciousness are much simpler than brains. Read more

Alternative revolutions
Mon 3 October 2022
You can use the profile of an object that has rotational symmetry, but revolve it around a different axis, to produce a different object that has the same profile. It feels like there's a puzzle idea in there somewhere, but I can't work out the best way to turn it into an actual puzzle, so if you have any ideas please let me know. Read more

Solving Protohackers with Fly.io
Sat 24 September 2022
This post walks you through hosting a Go solution for the Protohackers Smoke Test problem using Fly.io for free hosting. Read more

Nightdrive
Fri 16 September 2022
I've made a JavaScript simulation of driving at night time on the motorway. It's hard to classify what it is. It's not a video, because it's generated dynamically. It's not a game, because you just watch. It's not a screensaver, because it's not the 90s. Maybe it's a "demo"? Read more

Protohackers problem 2 retrospective
Sun 11 September 2022
I released Protohackers problem 2 on Thursday evening. The problem asks you to implement a server that stores timestamped price data and lets clients query the mean price over custom time ranges. (This post contains potential spoilers for the problem; if you have not solved it yet, and you would like to solve it, then to avoid disappointment you should not read this until after you've solved it!). Read more

How small can you make text with a drag engraver?
Mon 5 September 2022
A drag engraver is a very sharp spring-loaded tool that you can hold in a CNC spindle and drag over a piece of metal to engrave fine lines. Read more

The future of virtual reality
Sat 3 September 2022
I know very little about artificial intelligence. Mainly I just like to argue that machines can be sentient, because I don't see the difference between a computer and a brain. But I think the new prompt-driven AI stuff is incredibly powerful, and I don't think we're that many steps away from being able to create fully-immersive virtual worlds that can be summoned at will from free-form English-language prompts. Read more

Protohackers problem 1 retrospective
Sat 27 August 2022
I released Protohackers problem 1 on Thursday evening. The problem asks you to implement a server that accepts JSON-encoded requests, tests numbers for primality, and gives JSON-encoded responses. (This post contains spoilers for the problem; if you have not solved it yet, and you would like to solve it, then to avoid disappointment you should not read this until after you've solved it!). Read more

Protohackers: a new server programming challenge
Tue 23 August 2022
For the last couple of weeks I've been working on Protohackers, which is a programming challenge where you have to implement a server for a network protocol, and your server is automatically checked to see if it works properly. It's a bit like Advent of Code, but for networking instead of algorithms. Read more

A SLANG interpreter for SCAMP
Wed 10 August 2022
I made the interpreter by ripping the parser out of the compiler, making it produce an AST instead of assembly code, and writing a recursive evaluator for the AST. It was way less work than writing the Lisp interpreter, and it runs programs about 100x faster than the Lisp interpreter. Read more

A Lisp interpreter for SCAMP
Wed 3 August 2022
Lisp has been the most recent step in my search for the ultimate SCAMP programming environment. Unfortunately what I have so far is so slow that it's probably another dead-end. It's about 300x slower than compiled SLANG code. Read more

Cheating at chess with a computer for my shoes
Sat 30 July 2022
I have come up with a new way to win at chess: I have connected up a Raspberry Pi Zero in my pocket to some buttons and vibration motors in my shoes, so that I can surreptitiously communicate with a chess engine running on the Pi. The project is called "Sockfish" because it's a way to operate Stockfish with your socks. Read more

Do I really want a lambda calculus cyberdeck?
Wed 13 July 2022
A cyberdeck is an inconvenient portable computing device, often with a retro sci-fi aesthetic. Lambda calculus is an inconvenient mathematical model of computing. A lambda calculus cyberdeck, therefore, is an inconvenient device for inconvenient computing. Read more

Eldood: what Doodle used to be
Fri 1 July 2022
I have made Eldood as a replacement for Doodle, because Doodle is now shit. If you used to like Doodle but have grown frustrated with it, try Eldood. Read more

Consciousness is computable
Mon 20 June 2022
At first I thought it was quite surprising that consciousness can exist in the first place. It doesn't seem to be the same sort of thing as anything else that exists. But there's an enormous selection bias here: every possible universe in which consciousness can not exist does not contain anybody wondering why it doesn't exist. The only time you can even ask the question is when it already exists. So in that sense it's not at all surprising that consciousness exists, it is in fact guaranteed! Read more

The ultimate SCAMP development environment
Wed 15 June 2022
I've been thinking about what I want the SCAMP development workflow to look like for this year's Advent of Code. At first I was planning to do it in FORTH, but I've tried to get into FORTH several times and haven't got on with it. I like the simple REPL of FORTH but I very much do not like the language. So the plan is to come up with a way to make a REPL for SLANG. Read more

Toolmaker's Clamp
Tue 14 June 2022
I have managed to make the toolmaker's clamp that I mentioned last time. It is made out of mild steel, which is soft for a machinist's tool, but harder than wood, plastic, and aluminium, which are what I'm normally limited to. Since I made it, it belongs to me, and a clamp is a type of tool, I suppose this is both a toolmaker's clamp and a clampmaker's tool. Read more

Progress on the CNC mini mill
Thu 9 June 2022
I've made a bit of progress on the CNC mini mill project, and have made some cuts, although currently it's still not in full working order. Read more

FreeCAD vs SolveSpace
Tue 24 May 2022
I've been a happy FreeCAD user for about 5 years. Occasionally I read comments on Hacker News from people who are raving about SolveSpace. I have briefly looked at SolveSpace before and didn't really get it. It seemed so obviously inferior as not to be worth looking at. I assumed that all the SolveSpace users were just not willing to put in the work to understand FreeCAD, and they only thought SolveSpace was good because they didn't know how good FreeCAD is. But it occurred to me that I was doing exactly the same thing to SolveSpace: I assumed it was worse than FreeCAD mainly because I couldn't be bothered to put in the work to understand it. So this evening I finally gave it a proper try and noted down my observations. Read more

CNC milling machine project
Sat 7 May 2022
I recently picked up an unfinished CNC milling machine project on eBay. All the mechanical work is done, and almost all of the electronics is supplied, it's mostly just wiring and software still to do, which for me are the easiest parts. Read more

Meshmill: open source 3D CAM
Tue 3 May 2022
For the last couple of weeks I've been working on Meshmill. It's a new 3D CAM program for Linux. Read more

Using the weird rotary axis
Thu 24 March 2022
I've been playing with my weird rotary axis for a couple of weeks now. It's a rotary axis mounted on the gantry, with the rotation of the chuck geared off a toothed rack on the table. I've had a few questions about the practicalities of using it, so this is some of what I've learnt. Read more

Librem 5: first impressions
Mon 21 March 2022
In February 2018 I placed an order for a Librem 5. Today it finally arrived. Read more

Packing puzzle: Six Fit
Thu 17 March 2022
I've designed a new 2d packing puzzle. It's called "Six Fit" and you have to fit 6 pentominoes into a rectangular tray. Read more

A weird rotary axis for my CNC machine
Thu 10 March 2022
I've built a weird rotary axis for my CNC machine. Rather than a "4th axis" driven by its own motor, this one is geared off the motion of the gantry. It's still only a 3-axis machine, and there are no electronics changes at all. As the gantry drives back and forth, a toothed rack on the table causes a matching gear to rotate. The gear holds a chuck, which holds the work piece, so that when the gantry moves the work piece rotates. Read more

Party Puzzling: themed puzzle sets for special occasions
Thu 24 February 2022
Emma and I are now selling themed puzzle sets for use as entertaining party favours for events like weddings, and stag and hen parties. The idea is that you'd buy enough to give one to every attendee, and people who want to can try to solve it, and regardless they can take it home afterwards. There's also a competitive element: each puzzle has a QR code inside which the successful player can scan to add their name, and solve time, to the event's private online leaderboard. Read more

An Arduino-based USB interface to the Psion Organiser II
Sat 5 February 2022
I built a hacky USB interface to the Psion Organiser II that lets you send messages to it over USB serial via an Arduino Nano. It involves the organiser executing machine code stored in a string in its BASIC-like language, and it totally abuses the CPU's bus design. But it's simple and it works. Read more

Waypointer Moto: motorcyle navigation for Bangle.js
Thu 27 January 2022
I have made a Bangle.js app for motorcycle navigation. It's called "Waypointer Moto" which is a bit of a mouthful but it doesn't matter. Instead of telling you exactly which roads to use to reach your destination, it just points an arrow directly at your destination and tells you the straight-line distance. It tells you where you're trying to end up, but leaves the route-finding and exploring of the environment up to the user. The idea is that you end up riding new roads and discovering places you would never normally come across. It's a middle ground between riding around at random, and following a route dictated by a satnav. Read more

Measuring motorcycle lean angle with a single accelerometer
Mon 10 January 2022
The naive method of measuring motorcycle lean angle with accelerometers is to put a 2-axis accelerometer on the bike and measure the angle between the x acceleration and the y acceleration. This only works at a standstill. When the bike is moving, the measured angle would be 0. The purpose of the lean angle is to position the resultant acceleration vector so that it points from the centre of mass to the contact patch of the tyres, otherwise you will fall over. So how can we measure the lean angle? Read more

Advent of Code on my homemade CPU
Fri 31 December 2021
This year I've built a 16-bit CPU, along with custom operating system and programming language. It runs at 1 MHz and has 64 KWords of memory. This December I used it to do Advent of Code. Read more

Bubble packing puzzle
Tue 23 November 2021
I designed a new puzzle this morning, it's a relatively simple packing puzzle where you have to fit 21 circle-ish pieces into a case. Read more

Lightweight and robust quadcopter guards
Tue 16 November 2021
I recently built a small quadcopter and have been flying it around the house. Predictably, I have been crashing into the walls a lot. I wanted to put some rotor guards on to stop the propellers from scratching things, and I have come up with a 3d-printable rotor guard design that I think is quite elegant. Read more

I made an adjustable loaded die
Tue 2 November 2021
I made a loaded die with a tiny servo hidden inside that can move the weight around to change the distribution of roll probabilities. Read more

Fixing my tablesaw tilt mechanism
Fri 1 October 2021
I have a Lumberjack TS254SE tablesaw. It's not a high-end tablesaw, but it was relatively cheap and it works well enough. Except for the blade tilt mechanism. Read more

Towards a high-resolution grid of tiny electromagnets
Tue 21 September 2021
I'd like to build a high-resolution grid of tiny electromagnets. It would work a lot like an LED matrix display, except instead of the pixels emitting light, they emit magnetic fields. I have made a small proof-of-concept, but I need help to learn more physics to improve the strength of the field and the density of the pixels. Read more

Choozi for Bangle.js
Tue 14 September 2021
Do you know Chwazi? It is an Android app that chooses a person at random. Everyone puts in their finger and it selects one at random to highlight. It's useful for example if you're playing a board game and need to select a person at random. Read more

Approximating Lenna with a neural net
Wed 8 September 2021
Last night, inspired by a comment on HN about creating images with randomised neural nets by mapping inputs (x,y) to outputs (r,g,b), I spent some time trying to train a small neural net to approximate Lenna, the famous image processing test input. The outputs are quite interesting to look at, but don't approximate Lenna very well. But I don't know anything about machine learning, so I think you could do much better than I managed. Read more

The case for SCAMP
Thu 2 September 2021
All of the SCAMP hardware is now mounted properly inside the case, with no Arduino or breadboard required. I'm now well into the "long tail" of tasks on this project, where it takes increasingly large amounts of time to produce increasingly small improvements. Read more

Play with SCAMP from the comfort of your browser
Mon 9 August 2021
Today I ported the SCAMP emulator to the web, using emscripten to compile C to WebAssembly, and Xterm.js to provide the terminal emulator. Read more

Porting Hamurabi to SCAMP
Fri 6 August 2021
That's right! 1968's most exciting video game release is coming to 2021's most disappointing CPU architecture. Hamurabi is a single-player text-based game in which you play the leader of ancient Sumeria for 10 years. Each year, you decide how much land to buy or sell, how much food to feed to the population, and how much land to plant with seeds. Occasionally a plague comes along and kills half the population, or rats eat some of the harvest. Land values, harvest yields, and immigration rates fluctuate unpredictably. At the end of the 10 years (if you haven't been forcibly removed from office already) your performance is evaluated. Read more

Book Review: Every Tool's a Hammer
Mon 28 June 2021
I recently read Every Tool's a Hammer by Adam Savage. I am somewhat hesitant to call this post a "review" because it's much closer to a selection of quotations from the book presented without comment. But I think the book is good. And I have enjoyed some of this year's book reviews on Astral Codex Ten. And if I say this is a review then it's a review. Read more

SCAMP update
Thu 24 June 2021
I've made a bit more progress on my SCAMP CPU. I/O performance is improved significantly since last time, the CompactFlash card now lives on a PCB instead of a breadboard, I'm using a real (ish) serial console instead of an FTDI cable, and I have a more permanent power supply instead of the bench power supply. Read more

SCAMP works at 1 MHz
Sat 29 May 2021
Thanks to Rory's suggestion of CD4504 TTL-to-CMOS level shifters, last night I finally succeeded in moving the CompactFlash glue logic out of the Arduino and into physical hardware. Read more

A short pendulum with a long period
Sat 8 May 2021
The period of a pendulum is proportional to the square root of its length: to double the period, the pendulum needs to become 4x as long. But actually physics has no idea how long your pendulum is, the thing that really matters is the radius of the arc that the centre of mass travels through. There's no inherent reason that we wouldn't be able to increase the radius of this arc without increasing the height of the pendulum. Read more

A method and apparatus for polishing shafts
Sat 1 May 2021
I have invented a new tool. From time to time, I expect you, like me, need to sand down the outside of a piece of round bar. I expect you, like me, chuck the round bar in a drill or a lathe, spin it up, and then hold sandpaper against it to sand it. This works fine when you are able to spin the round bar, but sometimes the bar is already connected to something big or inconvenient and you are not able to spin it, and you are left wondering what to do. Read more

SCAMP has booted up to the shell for the first time
Sun 25 April 2021
I reached another good milestone on SCAMP this week: the physical hardware booted all the way up to the shell. Granted, it only happened once, and I couldn't type any input once it got there. But it suggests that there are no fundamental problems with the hardware design that will prevent the computer from working, which I am very happy about. Read more

The kilo editor
Sat 3 April 2021
Thanks to the excellent Build Your Own Text Editor tutorial, SCAMP/os now has an editor. It's pretty bare-bones, but perfect for what I need. Read more

SCAMP is alive
Sun 21 March 2021
I have reached a good milestone on the SCAMP hardware: it can now execute code! It runs all the way through the test program correctly. Read more

Bangle.js open source hackable smart watch: first impressions
Wed 17 March 2021
Bangle.js is an open source hackable smart watch running the Espruino JavaScript interpreter. It includes BLE (Bluetooth Low Energy), heartrate monitor, temperature sensor, 3-axis accelerometer, GPS, compass, and touchscreen (ish), and is designed to be easy to program. Read more

Front panels for SCAMP
Sun 28 February 2021
I've put together the memory card for the SCAMP CPU, including the front panel with LEDs to show the bus contents and address register. Read more

The SCAMP kernel
Sat 27 February 2021
You might think it's a bit early to be working on an operating system, given that I don't have a CPU to run it on. Maybe you're right. But working on software is easy and working on hardware is time-consuming, so here we are. Read more

A compiler for SCAMP, and machine code profiling
Fri 19 February 2021
I've been working on a compiler for the SCAMP CPU. It compiles a language I'm calling "SLANG" (which just stands for "SCAMP Language" pending a better backronym) into SCAMP assembly language. Read more

How to use an AT28C16 EEPROM with an Arduino Uno without a port expander
Wed 17 February 2021
The AT28C16 EEPROM stores 2048 bytes, which means to access it all you need to control 11 address lines and 8 data lines. You also need to operate "chip enable" (pull low to enable the AT28C16), "output enable" (pull low to enable output), and "write enable" (pull low to enable writing). That means in total you need to control 22 pins, but the Arduino Uno only has 12 general-purpose digital IO pins. Problem. Fortunately, there are some tricks that make it workable. Read more

My second attempt at milling a PCB
Mon 15 February 2021
The day after my first attempt at milling a PCB, my new tooling arrived (a 1 mm drill bit and a 10° engraving tool), so I had another go at making a PCB. Read more

My first attempt at milling a PCB
Fri 12 February 2021
I'm going to get most of the PCBs for SCAMP made by JLCPCB, but I'd like to try to mill the backplane on the CNC machine because it is both large (expensive at JLCPCB) and simple (single-sided, no vias, easy to make). Yesterday some small pieces of copper-clad board arrived and today I had a first attempt to see what would go wrong. Read more

Making a start on the SCAMP ALU cards
Sat 6 February 2021
I'm pretty happy with the CPU design now and am ready to proceed to making it physically exist. I am still finding the odd microcode bug, but these can be fixed at any time. I'm at least not finding any architecture-level bugs. Read more

Designing the instruction set for my TTL CPU
Sun 31 January 2021
I (believe I) am making good progress on designing the TTL CPU. Most of the actual CPU design is relatively stable now, and bug discoveries in the hardware design are infrequent, so now I get to move up a level and work on the instruction set. After that, it's just the bootloader, operating system, and application software. Oh, and the small matter of the physical hardware assembly... Read more

Progress on my TTL CPU design
Sun 24 January 2021
I want to make a CPU out of physical 74xx TTL chips. I have now implemented most of the parts using a subset of Verilog that maps directly to TTL chips, and I wanted to write a bit about the design. Read more

I want to cast some rings
Thu 21 January 2021
Emma and I are getting married later this year, which means we need to acquire some wedding rings. I initially wanted to get rings made of some exotic alloy like Inconel, but now I think I'd like to cast them myself out of gold, which means I need to learn how to cast rings. If you know how to cast rings, perhaps you can help me learn. Read more

Adventures in CPU design
Fri 15 January 2021
On Graham's recommendation, I recently bought an iCE40 FPGA and have been learning a bit about how to use it. The iCE40 is good to get because there is good open-source tooling that supports it. I was originally going to get the iCEstick evaluation board, but there are other alternatives available more cheaply and with more logic elements. I ended up getting an iceFun and have found it to be quite easy to use. The example projects are helpful. Read more

Someone copied Stegoseed and deleted my name from it
Sun 3 January 2021
I searched DuckDuckGo for "stegoseed" earlier and was surprised to find that the top result was not my stegoseed project, but was something else that seemed to do a similar thing: Read more

I wrote a semi-literate brainfuck compiler for CP/M
Tue 29 December 2020
Literate Programming is "a programming paradigm introduced by Donald Knuth in which a computer program is given an explanation of its logic in a natural language". It's something I've wanted to have a go at for a while but never got around to. Yesterday, for fun, I wrote a brainfuck compiler for the RC2014 and it seemed like a good fit for Literate Programming because it's short enough to get my feet wet but has enough detail that there is some interesting stuff to explain. Read more

How to copy files to/from the RC2014 using XMODEM
Mon 28 December 2020
Every time I get the RC2014 out and try to copy files to/from it, I have to relearn how to do it, so I thought it best to document what I have found to be the easiest way. Read more

My Advent of Code Story
Sat 26 December 2020
4.40am. The alarm wakes me up, but I was pretty much awake already. I get out of bed, put on my dressing gown, make a cup of tea, and sit down at the computer. I warm up my fingers with a few rounds of 10fastfingers. I open up vim and type out my template: #!/usr/bin/perl, use strict; use warnings; while (<>) { chomp; }. I drink a sip of the tea and wait for the clock to tick down. 4:59:40. Almost time. My heart races. 4:59:55. I hover the mouse cursor over the number 22. 4:59:58. Why is time passing so slowly? The wait is agonising. 5:00:00. Finally. I click the left mouse button and off we go. Day 22 part 1: Crab Combat. The next 4 minutes and 58 seconds pass in a furious blur of reading, thinking, and typing. I submit my answer. 158th place. Gah, close. On to part 2. More reading, thinking, coding, debugging, until at 5:22:55 I submit my part 2 answer. 139th place. 0 points. Better luck next time. I browse Hacker News and /r/adventofcode for half an hour while the adrenaline wears off, and then go back to bed. Read more

All the gears, no ideas: an escape room puzzle
Fri 18 December 2020
I designed a puzzle for an escape room. The company ended up not wanting to pay for it, but I thought the puzzle was interesting enough to be worth making for myself anyway. Read more

I made some aluminium keycaps
Sat 28 November 2020
I've made some aluminium keycaps on the CNC machine. I couldn't work out how to do the CAM in FreeCAD (although I think I have now roughly figured it out), so I instead wrote a program to render depth maps of STL files so that I could generate toolpaths with my pngcam program (github). Read more

Sawing my dining table in half
Thu 19 November 2020
I liked my dining table, but it was a bit longer than necessary. It occurred to me that I could cut it in half, so that's what I did. Read more

Seasonal.css: Give your website a seasonal colour scheme
Fri 6 November 2020
I've been working on a project that gives a CSS colour scheme that varies based on the day of the year, with a vague attempt to match the colour to the season. In case you're wondering why my blog has a new purple colour scheme (at time of writing): this is why. Have another look tomorrow if you want to see the same content in an imperceptibly-different purple. Read more

CNC toolpath generation from heightmaps
Sat 24 October 2020
I've been struggling with generating complex toolpaths in FreeCAD and thought that an easy approach would be to render a heightmap of the part, and then generating a toolpath from that should be easy. I understand that this is already a recognised technique, although I could not find an open source tool that would do it for me. Most of the heightmap-related stuff I found on DuckDuckGo was to do with auto-levelling the bed. And, anyway, it's a relatively simple idea and a fun challenge, so I did it myself. Read more

First steps into CNC machining
Mon 5 October 2020
I have bought a "6040" CNC router, and have been getting to grips with how to use it. This journey started with converting the machine to Grbl because I'm not interested in running proprietary software. Once Grbl was all working correctly, I clamped a small piece of plywood to the bed, fitted a 2mm end mill and made my first cuts, manually "jogging" the tool position using the buttons in the UGS interface. Read more

How to convert a 6040 CNC machine to Grbl
Wed 30 September 2020
The 6040 CNC machine comes in 2 flavours: parallel port and USB. I don't have a parallel port on the laptop I was intending to operate it with, so I chose the USB option. This is possibly a "mistake" as the USB option uses a proprietary USB interface board which is only compatible with Mach3 and therefore only compatible with Windows. But now that I've got it set up with Grbl, I think I prefer this system to what I would have with a parallel port controlled by LinuxCNC. Read more

I made an optical inline fuel sensor
Mon 28 September 2020
We could automatically detect whether the racing mower is about to run out of fuel by shining a light through a section of clear fuel hose with a sensor on the other side. The idea is that when the fuel has disappeared the received light intensity will change, and we can detect this with a microcontroller. We can then turn on an LED on the dashboard to alert the driver so that he makes a pit stop instead of spluttering to a halt at the opposite end of the track. Read more

Miscellaneous thoughts on making stuff
Tue 15 September 2020
This is just a selection of points related to manufacturing that are grouped into one post for no other reason than that I don't have enough on each one individually, but wanted to write about them before I forget. Read more

Progress on my Godot racing game for Oculus Quest
Wed 19 August 2020
I've made some decent progress on the Oculus Quest racing game. I think it is already the most realistic driving simulator for the Quest, but that's not a very high bar as there are not any real competitors. Read more

How to import Assetto Corsa race tracks into Godot
Thu 13 August 2020
Assetto Corsa is a car racing game with emphasis on realism. It's basically what I'm trying to do for the Oculus Quest, except it doesn't run on the Oculus Quest. What it does have is a thriving community of freely-available cars and tracks on assettocorsa.club. It is these free tracks that we'll be looking at importing into Godot. Read more

I made a mechanical keyboard with 3d-printed switches
Fri 7 August 2020
The keyboard is done! This is basically the result of what I've been working on for the past 2 months, which has involved 3 iterations of testing machines, over 100 printed switches, and now finally a keyboard that I can type on. Unfortunately it is not a very good keyboard, but you can't win them all. Read more

I'm working on a VR car racing game for Oculus Quest
Sun 26 July 2020
I've been playing a bit of Mini Motor Racing X on the Oculus Quest recently. It's good. The experience of driving a car in virtual reality is amazing, but this particular game is too much "game" and not enough "simulator" for my taste. I've always preferred Gran Turismo to Mario Kart, for example. Unfortunately, the Quest is quite an unusual platform, and none of the popular racing games are available for it. I recently discovered that the open source game engine Godot has Oculus Quest support, so I'd like to make a basic car racing simulator for Oculus Quest. Read more

Another new switch tester, test results, and thoughts on the keyboard design
Wed 15 July 2020
Just an update on the keyboard switch project. I've built the new 10-way testing machine, ran a (somewhat inconclusive) test to work out the best thickness for the leaf springs, and thought a bit on how I'm going to design the actual keyboard. Read more

Secrets of the Hanayama Cast Marble
Wed 8 July 2020
Cast Marble is a mechanical puzzle sold by Hanayama. It was invented by Bram Cohen (who you may recognise as the inventor of BitTorrent) and Oskar van Deventer, who has an interesting YouTube channel where he regularly posts new puzzle designs. Read more

I made a macro keypad with 3d-printed switches
Mon 6 July 2020
Latest on the 3d-printed keyboard switch project: I've reached a switch design that I think is probably reliable enough, and I've put 3 of them together to form a macro keypad just to see how it all goes together before I commit to a full keyboard. I don't have a number for how many presses the switch lasts, other than to say that the motor on the testing machine stopped working before the switch did (after about 250,000 presses). Read more

Making a game with 24a2
Sun 28 June 2020
24a2 is an "ultra-minimalist" game engine. It was posted on Hacker News this morning and I found it so interesting that I decided to take a day off from breaking keyboard switches and make a tiny game instead. Read more

Keyboard switch progress & test results
Thu 25 June 2020
Status on the 3d-printable keyboard switch is that the latest test managed 110,000 presses before failure, on the spinning cam tester. Read more

A better automatic keyboard switch tester
Sat 20 June 2020
Since breaking the last switch, I re-printed the same design in PETG to see if it would last any longer, and it did! It reached over 100,000 presses under the gentle testing regime without showing any failures, a big improvement over failing at 13,907. Read more

I broke my first 3D-printed keyboard switch
Tue 16 June 2020
Overnight I did my first test of a homemade keyboard switch on the automatic tester. The spring in the switch broke after 13907 presses. That makes Martin our competition winner, with a guess of 10000. Read more

Automatic keyboard switch tester
Sun 14 June 2020
I'm working on designing an open source 3D-printable keyboard switch at the moment, with a view to eventually making my own mechanical keyboard using minimal off-the-shelf components (just an Arduino, wire, and diodes, with homemade parts for switches, keycaps, and case). I have not made a keyboard yet, but yesterday I made a device to test how many presses a switch can withstand before it stops working. Read more

Thoughts on laser level design
Mon 1 June 2020
A laser level is a device that projects a laser beam on to a wall or similar, to help you position things level to the ground. Read more

How to run a Cloud Desktop on any VPS, with SPICE
Thu 21 May 2020
SPICE is the graphical protocol used by QEMU since 2013. If you've started a VM with QEMU, including with virt-manager or Gnome Boxes, then chances are you have used SPICE. It seems to be the same concept as VNC but more efficient. Read more

An easy way to package Perl programs
Sat 16 May 2020
The right way to package Perl programs is with RPM, or DEB, or on CPAN with ExtUtils::MakeMaker or similar. But this is a hassle. Read more

Zero-downtime Docker container deployments with nginx
Thu 14 May 2020
Docker doesn't let you reassign port mappings while containers are running. That means if you want to deploy a new version of your application, you need to stop the old one and then start the new one, and there is a brief period of downtime in between. I wrote Ngindock to solve this problem. Read more

Autopatzer: my automatic chess board
Wed 6 May 2020
My automatic chess board (the "Autopatzer") has reached the point where last night I was able to play its first online game against a real person using lichess's Boards API. Read more

YubiKey SSH authentication: the easy way
Fri 1 May 2020
I bought a YubiKey quite a while ago, with the intention of using it for SSH authentication, but never got to the point of actually using it because I found it too hard to set up. Today I had another go and managed to get it working using the "PIV" mode. Read more

Automatic chess board design
Sat 14 March 2020
Lichess has recently released a Boards API, allowing anybody to interface a physical chess board with lichess in order to play online games using an automatic board. I previously thought about implementing my Strange Chess Clock using an automatic board, but never got round to it. With lichess now supporting online play with an automatic board, it's hard to justify not making one! Read more

My first combat robot tournament
Mon 3 February 2020
At the weekend, I took Wedge of Glory to an antweight combat robot tournament in Hinckley called Ant Freeze 7. Read more

I built an antweight combat robot
Mon 27 January 2020
If you've ever seen Robot Wars or BattleBots, you'll know what a combat robot is. An antweight combat robot is the same concept, except it has to weigh no more than 150g and fit inside a 4-inch cube. I've built one, called "Wedge of Glory", and have my first competition this weekend! Read more

My DIY Cryptosteel Capsule
Mon 20 January 2020
Bitcoin wallets give you a mnemonic seed to write down and keep safe. This is usually 12 to 24 words from the BIP39 word list. But if you write it on paper, it is easily damaged by flood or fire. An improvement is "Cryptosteel"-type devices, which allow you to record the mnemonic seed in metal, such that it is recoverable in the event of flood or fire. I built one myself. Read more

Chassis Design with Finite Element Analysis in FreeCAD
Tue 7 January 2020
Finite Element Analysis is a way to calculate the stresses and strains on an object in various load conditions. The object is modelled as a series of "finite elements" (in our case triangles), and then we specify the locations of points that can't move (fixed points), and the locations, magnitudes, and directions of forces that are present. Read more

My RC2014 Web Server
Tue 10 December 2019
I wrote a web server for my RC2014. It runs from CP/M, which has no built-in concept of networking, so I had to implement every layer of the networking stack, which in this case is SLIP, IP, TCP, and HTTP. It totals about 1200 lines of C, all of which was written on the RC2014 in the ZDE 1.6 text editor, and compiled with the Hi-Tech C compiler. Read more

Design and Implementation of a Z80 Computer Front Panel
Tue 12 November 2019
I designed and built a front panel for my RC2014. It allows you to view and alter the contents of memory, read and write to IO devices, and single-step through instructions. The RC2014 backplane basically just puts the Z80 CPU pins directly on the bus, so the same panel would work unmodified against almost any Z80-based computer, as long as you broke out the bus onto the 60-pin ribbon cable. Read more

The RC2014 Z80 Microcomputer
Mon 21 October 2019
I recently came across the RC2014. It is a simple computer sold in kit form, and using a Zilog Z80 CPU. Read more

My Arduino-based industrial process controller
Sun 1 September 2019
For my 3d metal printing project, I need the sintering furnace to stick to a pre-defined temperature profile. Unfortunately, the controller that my furnace came with only allows you to set a constant temperature. It maintains a constant temperature very well, but the operator frequently has to manually update the temperature in order to stick to the defined profile. Read more

Home 3d metal printing: first results
Mon 12 August 2019
A couple of weeks ago I learnt about an interesting 3d metal printing process, from a company selling it for $100k USD, and speculated that it might be DIY-able for much less. Well I now have some promising first results. Read more

The 2019 BLMRA 12 hour lawnmower race
Fri 9 August 2019
We raced at the BLMRA 12 hour again this year. Read more

An interesting 3d metal printing process (help wanted)
Sun 28 July 2019
I recently learnt about the Markforged Metal-X 3d printer from a post on 3DP Reviews. It costs $100k USD, and can print metal objects. As far as I can tell, it is essentially an ordinary FDM printer, with a special filament that contains a high percentage of metal powder held together with a "binder". After printing, the part is washed in a solvent to remove most of the binder, and finally it is heated in a furnace to sinter the metal powder together. Read more

How to make a rev limiter with an Arduino
Mon 22 July 2019
My racing mower has a tendency to over-rev on long straights. To avoid damaging the engine, we have been lifting off the throttle, but a more reliable solution would be an electronic rev limiter. I did buy a commercial rev limiter made by AccuSpark, but was unable to fit it to my mower because the AccuSpark unit needs access to both sides of the ignition coil, and my ignition coil is inaccessible, inside a black box with all the other ignition electronics. So my solution was to make a rev limiter with an Arduino. Read more

My first chess tournament
Mon 24 June 2019
At the weekend, Bristol Grammar School played host to the June 2019 Bristol Chess Congress, the "13th Steve Boniface Memorial". It's a 5-round Swiss tournament, with 3 sections: open (for international rated players), major (players with ECF grade under 160), and minor (ECF grade under 120). Having never played in a rated tournament before, I don't have an ECF grade at all, so I was obviously in the minor section. Read more

A Strange Chess Clock
Thu 2 May 2019
A chess clock is a device that has 2 countdown timers, used to place a limit on each player's thinking time in a chess game. White's clock is counting down while it's white's turn. After white plays his move, he hits the clock, and his clock pauses, and black's clock now counts down. Once black has played a move, he hits the clock, and white's clock resumes counting down, and so on. Read more

How to win at Scotland Yard
Thu 4 April 2019
I've been playing Scotland Yard recently. It's a board game in which one player plays as "Mr. X", and the other players are all detectives, played on a map of London. Mr. X moves in secret, and his goal is to evade capture for 24 turns, while the detectives' goal is to capture him before 24 turns are up. It's a brilliant game. Read more

Puzzle Drawers
Sun 17 March 2019
For the last ~3 weeks I've been working on a chest of drawers. This is no ordinary chest of drawers, they are puzzle drawers. The idea is that the puzzler is presented with one of the drawers already open, and the goal is to manipulate the chest into a configuration where all of the drawers are closed. With a typical chest of drawers, this would be easy: just close the drawer that is open. In the puzzle drawers, there are 3d-printed internal mechanisms linking the drawers together. Read more

The Wheatstone Cryptograph
Fri 15 February 2019
A few weeks ago I came up with an idea for a simple encryption device, then found that it had already been invented by Sir Charles Wheatstone around the 1860s. I ended up designing and 3d printing a replica of Wheatstone's cryptograph. Read more

Telescope tracking with software auto-guiding
Wed 23 January 2019
The Earth rotates around its axis at a rate of ~360°/day, or ~15°/hr (it's actually slightly slower than this because "1 day" is the amount of time it takes for the sun to come around again, but we are also moving around the sun, so we don't need to rotate a full 360° per day). When zoomed in with a field-of-view only 0.25° wide, objects that are not very close to the North star appear to move quite quickly across the frame. For this reason, my telescope control software continually updates the coordinates that it wants to point at, in order to keep the scope pointed at the same part of the sky. Read more

Imaging the Orion nebula with the PiKon telescope
Tue 8 January 2019
On Friday night I took some photographs of the Orion nebula with my motorised PiKon telescope from my back garden. There is lots of light pollution around, but this is the final image I got: Read more

Towards a Better Pythagorean Cup
Fri 4 January 2019
There was an article on Hacker News the other day by David Richeson entitled Make Your Own Pythagorean Cup. A Pythagorean cup is a cup with a built-in siphon. Supposedly invented by Pythagoras, the cup functions just like an ordinary cup as long as it is only filled to a certain level. If anyone gets greedy and tries to take too much wine, the level rises above the top of the siphon, which causes the siphon to self-start, and the greedy person is punished by having the entire contents of the cup dumped into their lap. Read more

First Light in the PiKon telescope
Sun 16 December 2018
On Thursday night I had an opportunity to try out my motorised PiKon telescope for the first time. Emma and I drove to a cemetery that is about 5 minutes away. It is not an ideal astronomy spot, but it is better than our back garden as it is a bit further from trees, tall buildings, and street lights. Read more

Flat Earth and the Coriolis Force
Sun 9 December 2018
I've been learning about "flat-Earthers" recently. They're a fascinating group of people who genuinely believe that the Earth is flat and that governments, scientists, and industry are in on a big conspiracy to trick everyone into thinking the Earth is round. Read more

My PiKon telescope hardware
Mon 3 December 2018
Since the last post I've been working on the hardware of my telescope. I think the hardware is basically done, I just have a bit more software to write, and then need to wait for a convenient and cloud-free night in which to try it out. Read more

Ramblings About a Computerised Telescope
Mon 19 November 2018
The PiKon telescope is a brilliant design for a cheap but powerful telescope using 3d printed parts and a Raspberry Pi. It is a Newtonian reflector telescope, designed to be mounted and aimed with an ordinary camera tripod, and then the Raspberry Pi camera is used to capture images. It uses a relatively inexpensive concave "spherical" mirror for the primary mirror, and has no secondary mirror: the Pi camera is small enough that it is simply mounted in the centre of the tube and captures light where the secondary mirror would normally be placed. Read more

Deanonymising a Tor hidden service with traffic correlation
Thu 18 October 2018
We've all heard that Tor hidden services can be traced to an IP address by an attacker who has sufficient visibility into global internet traffic, by correlating traffic sent to/from the hidden service with traffic sent to/from real IP addresses. But how easy is it in practice? How much data do you need? And how good do you need to be at statistics? I decided to find out. Read more

How to use Ricochet IM on Tails
Sat 13 October 2018
I've been using Tails (a privacy-focused Linux distro) as my day-to-day operating system recently, and I was disappointed to find that Ricochet IM does not work out-of-the-box. Read more

Hiding messages in chess games
Tue 9 October 2018
I designed a steganography system that encodes data as a chess game. A convenient way to communicate chess games is PGN, but any means of communicating the moves of the game would work, as the information is encoded conceptually in the moves themselves, rather than taking advantage of any redundancy in the PGN format. Read more

Someone used my IPFS gateway for phishing
Thu 4 October 2018
At 02:43 this morning, I received an abuse complaint email. It was sent by PhishLabs to DigitalOcean, and DigitalOcean forwarded it to me. Read more

How Ricochet IM works
Tue 18 September 2018
Ricochet is instant messaging software that communicates over Tor, authenticates peers by their Tor onion address, and communicates directly peer-to-peer (via Tor hidden services) without any centralised servers involved. Read more

Please don't block Europe
Thu 13 September 2018
Yesterday the EU approved a "Copyright Directive", which includes a tax on linking to other websites, and mandatory upload filters on all user-submitted content, to prevent copyright infringement. Read more

How to install Ubuntu 18.04 LTS on a Lenovo Ideacentre 310s
Wed 12 September 2018
Yesterday I was asked to install Ubuntu on a Lenovo Ideacentre 310s. I expected this to be quite easy but it was not. Read more

Spelunking the Web Servers of the Lightning Network
Wed 29 August 2018
I've finally got around to playing with Bitcoin's Lightning Network over the past couple of days. I managed to buy one of the "I got Lightning working and all I got was this sticker" stickers from BlockStream's Lightning store, and I'm in the process of adding Lightning payment support to SMS Privacy. Read more

A 4x4 chess puzzle
Tue 28 August 2018
Playing Isopath a lot recently led to a broader interest in board games, which led to me playing a lot of go, and particularly chess (you can add me on lichess, but I'm not very good). I had a look at some single-player variants of chess and played "Hippodrome" a few times but found it very easy, however it gave me an idea for another possibility. Read more

We entered the BLMRA 12 hour lawnmower race again
Sat 11 August 2018
After last year's poor show at the 12 hour, we did some much-needed work on the mower and had another go. Read more

I tried to make a vinyl record on the lathe
Thu 9 August 2018
In order to produce sound, a record player needle needs to ride in a track that has a tiny physical model of the waveform of the sound. Read more

What's inside an HSBC SecureKey?
Thu 12 July 2018
You've probably seen an HSBC SecureKey. It's a 2-factor authentication device for online banking. I was given one because the previous owner had started using the bank's smartphone app and no longer needed the SecureKey. It looks like this: Read more

Introduction to Isopath
Sat 30 June 2018
Isopath is a game invented by YouTube user pocket83. The game was initially presented in this video where pocket83 shows how he made the board and tiles, and then explains the game rules from 15:45 onwards. Isopath is a zero-sum, turn-based, deterministc, perfect-information game, which puts it in the same class as games like chess, draughts, go, noughts-and-crosses, etc. Read more

My homemade ebike control panel
Fri 1 June 2018
I wrote before about dismantling the control panel from my ebike to find out how it works, and had some ideas for an improved design. Read more

A Rock-Paper-Scissors AI that is too good
Fri 25 May 2018
Yesterday I had an idea for a simple Rock-Paper-Scissors AI based on Markov chains. The "state" would be what the opponent played in the last N rounds, and would be used to predict the probability that the opponent would play Rock, Paper, or Scissors next. The AI would choose what to play, to beat what the opponent is expected to play, weighted by the expected probability for each possible action. Read more

Reverse engineering an ebike 3-mode PAS LED panel
Fri 11 May 2018
I bought an electric bicycle recently. It is an incredible machine, and I think everyone should get one. The thing I never liked about cycling is how tired you get going up hills, and the electric bicycle solves this problem without taking away any of the fun parts of cycling. A truly incredible machine. Read more

What would the total computing power of the entire world in 1970 cost today?
Sun 29 April 2018
Some dubious mathematics and lots of guesswork. Maybe the conclusion is within a few orders of magnitude of correct... Read more

How I cracked the Bitcoin keys in Andy Bauch's Lego artwork
Sat 24 March 2018
Yesterday I read an article about a series of art pieces created by Andy Bauch with $10,000 of cryptocurrency hidden in them. Each of the pieces is assembled out of lego bricks. Read more

How to find out if your data gets stolen (URL Canary)
Fri 23 March 2018
In February I started working on a new project called URL Canary. The premise is that it helps you create custom URLs that you can store next to your private data (database backups, git repositories, executive inboxes, etc.). Then, if your data gets compromised and the attacker makes the mistake of visiting your oh-so-enticingly-named URL, you'll receive an email alert, you'll know your data has been stolen, and you can take remedial measures. Read more

SaaS profit is market inefficiency, and it will end
Tue 20 March 2018
I don't think the profitability of "software as a service" businesses is going to last, in the long term (on a timescale looking at, say, 100 years from now). I wrote before about machine-owned enterprises competing the profit out of SaaS, but even before that happens, humans ought to be able to compete most of the profit out of it. Read more

How to run SSH and HTTP on the same port
Mon 26 February 2018
Last month I ran a small puzzle in which, after having picked up an SSH key in one of the rounds, a subsequent round involved connecting to a (supposed) web server using an SSH client. It's quite a neat trick so I thought it deserved sharing. Read more

A visual demonstration of the perils of key reuse in a one-time pad
Sat 17 February 2018
I was playing with applying one-time pad encryption to images recently, and stumbled across some interesting visualisations that I want to share. Read more

I designed a trick chess piece with hidden compartments
Sun 4 February 2018
It's quite easy to model a traditional chess piece (apart from a knight) using CAD software. You basically just have to draw a sketch of the outline and revolve it around its centre. I modelled, and 3d printed, a Queen that includes some hidden compartments for storing small bits of paper, e.g. containing passwords or Bitcoin keys. Read more

Magnetic cubes puzzle: In practice
Mon 22 January 2018
I've put together a physical version of the magnetic cubes puzzle and have spent a good few hours playing with it. (You don't need to have read that post in order for this one to make sense, but it might help, and it's certainly worth having a look at the table that labels the different cube configurations). I haven't yet managed to solve it without consulting a computer. Read more

Magnetic cubes puzzle: In theory
Sat 20 January 2018
I had an idea for a puzzle. Imagine 27 small cubes. Put a magnet on each face of each cube, with variation as to whether North or South is facing outwards. Now try to assemble the cubes into a 3x3x3 "cube of cubes". Read more

How to get your Bitcoins out of Xapo without running their app on your phone
Mon 15 January 2018
Xapo is a company that offered a Bitcoin Visa debit card. You'd top up your account with Bitcoins, and you can then spend them, using the card, anywhere that takes Visa payments. This is super convenient for anyone who earns income in Bitcoin. Read more

Knives: they cut, and they don't ask no fucking questions. Yet.
Wed 27 December 2017
I recently watched Captain Disillusion's video Miss Ping Debunk in which he explains how an old knife-throwing video was made, and why, and by whom. It's a good video. It also has a joke advert in the middle: Read more

How to control a digital speedometer
Tue 12 December 2017
As part of my YX140 scooter project (now finished) I discovered that the scooter's speedometer is controlled digitally. There was a sensor in the original engine which generated pulses to signal the speed of rotation of the gearbox output shaft. The new engine has no such sensor, so I had to do a little electronics to make the speedo work. Read more

Is mega.co.nz censored by every major search engine?
Sun 10 December 2017
I was watching Vice's video on Kim Dotcom today, and ended up typing "mega" into DuckDuckGo to see what it came up with. Read more

Finding unsecured S3 buckets using Passive DNS
Sat 2 December 2017
There was a post on Hacker News yesterday about a tool called bucket-stream that looks at certificate transparency logs and uses them to find corresponding Amazon S3 bucket names. Read more

Machines as first-class citizens
Tue 21 November 2017
Throughout history, various groups have been subject to various prejudices which restricted their ability to act freely in otherwise-free societies. Obvious examples include Jewish people, black people, and gay people. Read more

New project: YX140 engine in a Honda Innova scooter
Thu 16 November 2017
At the weekend I picked up a Honda Innova 125i scooter for £550: Read more

Someone Created a Tor Hidden Service to Phish my Tor Hidden Service
Fri 13 October 2017
SMS Privacy is available as a Tor hidden service, and it turns out ~10% of users actually use it that way. This post details what I found when somebody created a phishing site of my Tor hidden service. Read more

On Gumtree, "Bitcoin" is a dirty word
Sun 1 October 2017
I tried to list a sofa bed on Gumtree today. I went through the usual rigmarole of dusting the item off, taking some photos, uploading the photos to Gumtree, and writing a compelling description that would hook in the buyers and secure me great riches. Read more

Solving the Matchsticks Game
Wed 20 September 2017
I was on holiday in Iceland last week, and while we were away, Charlie introduced me to the "Matchsticks" game. We played a few rounds and it got me thinking about how to solve it. I couldn't find any information about the game online so I'm sharing what I've learnt... Read more

Google Trends portfolio: selling Ripple
Thu 7 September 2017
Another update on the Google Trends portfolio. Read more

Google Trends portfolio: buying Monero
Thu 31 August 2017
Just a quick update on the Google Trends portfolio. Read more

Using Google Trends data to speculate on cryptocurrencies
Sun 27 August 2017
I did a little analysis this evening to try to find cryptocurrencies that are under-valued relative to Bitcoin, based on Google Trends data, with the intention of buying whatever is under-valued and waiting for it to go up. I found some possibilities and I spent some money. Read more

I tried to do the BLMRA 12 hour lawnmower race
Wed 16 August 2017
Earlier this year I bought a ride-on lawnmower to go lawnmower racing. I talked Feroz Salam and James Nicholls into driving it with me, and Matt Game and my Dad into helping in the pits, and we entered the BLMRA 12 hour endurance race. Read more

I found a security vulnerability in SMS Privacy this morning
Mon 7 August 2017
I woke up this morning to find an email from my SMS Privacy server informing me about an error: Read more

The only time Hacker News is this interested in Bitcoin is when there's a bubble forming
Sun 30 July 2017
You might have got the impression that there are a lot of Bitcoin-related posts on Hacker News lately. With SegWit set to activate in the next few weeks, and Bitcoin Cash likely to fork off on the 1st of August, I took a look at Hacker News' relationship with Bitcoin over the past years. Read more

BTC-e, Alexander Vinnik, and the missing MtGox Bitcoins
Wed 26 July 2017

Q: How do you launder the Bitcoins you stole from MtGox?
A: Set up your own exchange and sell them on there
Read more

I tried to buy a thing off a dark net market, and the FBI stole my money
Tue 25 July 2017
I'm interested in online privacy and freedom, and I've wanted to make a purchase on a dark net market for quite a while. On the 26th of June I took the plunge. I'd heard AlphaBay was a popular market so (for the full experience) I loaded up Tails Linux in a virtual machine and navigated to the AlphaBay site. Read more

Why Bitcoin has to succeed
Tue 11 July 2017
Some people want to transition to a cashless society. If that happens (and governments, at least, appear very keen to make that happen), we'll all be left with no way to pay each other without going through a third party payments company (banks, Visa, PayPal, etc.). This means people have no way to pay each other without asking permission from such a company, and being subject to censorship and surveillance at best, and the risk of the funds being stolen at worst. Read more

Double-check Bitcoin addresses when pasting (Bitcoin TX Generator malware)
Sun 9 July 2017
Back in April I wrote about the Large Bitcoin Collider and how it is probably malware. Well, now there's another (even more blatant) piece of malware being spread via reddit. Read more

How to create 3d-printed stencils for spray-painting
Mon 3 July 2017
I wanted to make some custom spray-painting stencils. I've done it before by printing on paper and cutting out the shapes, but found it to be laborious and time-consuming. Also the stencils don't last for more than a couple of uses before the paper gets too soggy. Read more

Someone cloned my website and is using it to scam people
Fri 16 June 2017
I was looking on the DuckDuckGo search results for "anonymous bitcoin sms" today, just to see what was out there. My SMS Privacy was the top result, as expected. But the second result was new to me: Read more

Hardbin: The World's Most Secure Encrypted Pastebin
Fri 19 May 2017
Over the past week I've been working on hardbin. Hardbin is an encrypted pastebin, with the decryption key passed in the URL fragment, and the code and data served securely with IPFS. (IPFS is a distributed content-addressable storage system that is web-compatible; it's basically bittorrent for the web). Read more

I made a Base58 encoding/decoding tool
Sat 13 May 2017
Base58 encoding allows arbitrary data to be encoded using only alphanumeric characters. It is analogous to base64 except base58 does not map neatly on to bytes (4 base64 characters is 3 bytes), and base58 does not include any non-alphanumeric characters. Read more

How to use bitaddress.org securely (spoiler: use IPFS)
Wed 10 May 2017
Bitaddress.org is a single-page web app for generating Bitcoin paper wallets. It's a great tool, and runs entirely client-side so (in theory) you can audit the code and don't have to trust that the server is not stealing your keys. Read more

I've been playing with IPFS
Tue 9 May 2017
There was an article on Hacker News yesterday about Uncensorable Wikipedia on IPFS. I read it with great interest (I recommend you read it too) and ended up going down a huge rabbit hole of learning about IPFS. Read more

I semi-deanonymised some MetaMask users, and they were absolutely loaded
Tue 2 May 2017
Yesterday, I published a post about drive-by identification of MetaMask users (and submitted it to /r/ethereum on reddit). The post included an implementation (now disabled) of an attack that could associate website visitors' IP addresses with their Ethereum accounts, with no user interaction required. This is what I found. Read more

Drive-by identification of MetaMask users
Mon 1 May 2017
MetaMask is a Chrome plugin that turns an ordinary Chrome browser into a Dapp browser. A Dapp is a web app that is augmented to use the browser's local web3 object to access the Ethereum blockchain. Compared to Mist, another Dapp browser, MetaMask streamlines the user interface by not requiring users to "Connect" an account before using it in a Dapp. Read more

eBay don't understand why people dodge their fees
Sun 30 April 2017
I've been selling some stuff on eBay recently, and I had a pretty crap experience with one particular item. Read more

Is the Large Bitcoin Collider malware?
Tue 18 April 2017
Yesterday, /u/SopaXorzTaker submitted a post to r/Bitcoin suggesting the Large Bitcoin Collider (a.k.a. "LBC", not to be confused with Local Bitcoins) is probably malicious. He did a great service to the community by doing so. Read more

I made a Rhyming Dictionary
Mon 17 April 2017
Some friends and I were trying to come up with rhymes for "mowing", to help us think of a witty name for a lawnmower racing team. This seemed like a job for a machine, so I looked online for something that might help. Read more

I started accepting 0-conf Bitcoin payments, and it was great
Wed 29 March 2017
Customers of SMS Privacy have been frustrated with long confirmation times for Bitcoin payments. Even though I only required 1 confirmation, it can still take a long time for that first confirmation if the transaction was accidentally sent with a fee that is too low. Instead of sending money and being able to use the service immediately, customers sometimes had to wait hours. This is immensely frustrating for a legitimate customer: you've sent the money, you're not trying to steal anything, why do you have to wait? Read more

On the inevitability of the machine-owned enterprise
Wed 22 March 2017
A machine-owned enterprise is one in which none of the profits go to any human, and none of the work is performed by any human. The entirety of the business is owned and operated completely autonomously. Read more

I don't know how many soldiers are taking drugs, and neither do you
Fri 3 March 2017
I read a story, in some online comment section, about a clever trick the US Army used to work out how many soldiers were taking drugs. It went something like this: Read more

SMS Privacy was attacked last night
Sat 25 February 2017
This morning I checked on the list of SMS Privacy user accounts, as I do every morning, and found that quite a large number had been created overnight, between 22:48 and 23:10 GMT on 24th of Feb 2017. Most of them had names like: Read more

Steganographic Bitcoin seeds: Hiding cash in plain sight
Wed 22 February 2017
I made a tool, stegoseed, to generate sentences which steganographically encode Bitcoin wallet seeds, and to decode such sentences to retrieve wallet seeds. It comes with an example BIP39 seed to play with. Read more

Precautions for generating Bitcoin QR codes
Wed 15 February 2017
A couple of people have been asking me to add QR codes to the payment page on SMS Privacy. I'd been putting it off for a while because I didn't want to do it in a way that opens up avenues for exploitation. Read more

Encrypted email is still a pain in 2017
Mon 13 February 2017
Today I sent an email to somebody who specified that he "prefers GPG mail". I didn't have any GPG set up, so I just sent a normal email, which worked perfectly well. But it made me look in to GPG, and this is what I learnt... Read more

I bought an extremely cheap 3d printer and it's great
Wed 25 January 2017
I had a look on eBay last week to see what sort of price 3d printers are going for these days, and was surprised to find some on offer for £150. At that price it's obviously not going to be very good, but should be fun anyway. Read more

Why minimum wage is bad, illegal immigrants are good, and ticket scalping is fine
Tue 17 January 2017
At first glance these three topics might seem unrelated, but the same basic argument of supply and demand applies in each case. Read more

The Game Theory Case for Bitcoin
Thu 5 January 2017
During a period of only 4 hours today, the value of Bitcoin dropped by more than 30% (8888 CNY down to 6000 CNY). This sparked some discussion at work about what it is that makes Bitcoin worth anything in the first place. Read more

Secrets of the Medtronic MyCareLink Patient Monitor
Sun 4 December 2016
I have acquired a "Medtronic MyCareLink Patient Monitor 24950" and have been playing with it a little this weekend. It looks like this: Read more

Please stop making popup menu bars
Fri 2 December 2016
There is a trend on the web at the moment to make menu bars that disappear when you scroll down, and reappear when you scroll up. This article encourages everybody to do it because "menus aren't pretty" and screen space is at a premium on mobile devices. Read more

How (and why) to accept Bitcoin payments yourself (without running a full node)
Fri 11 November 2016
Accepting Bitcoin payments for an online service can be daunting at first (I worked out how to do it, for SMS Privacy, a couple of months ago). What I describe is not the only way to accept Bitcoin payments - it's not even the best way to accept Bitcoin payments - but it works for me. And it might work for you, too. Read more

Bitcoin debit cards: Xapo vs Cryptopay
Mon 31 October 2016
I've written before about my Cryptopay Bitcoin debit card. A number of people on reddit recommended some other company's offerings that hadn't come up in my searches. Xapo was most recommended, so I bought a Xapo card shortly after and have been using it on-and-off ever since. Read more

I made a hidden bookcase door
Fri 21 October 2016
Ever since Emma and I moved into this house, I've been talking about making a hidden bookcase door. Well I've done it now. Read more

SMS Privacy month 1 review
Mon 10 October 2016
It's a month since I launched SMS Privacy, a web service offering anonymous phone numbers paid in Bitcoin. This is what's happened over the last month... Read more

SMS Privacy now provides anonymous voicemail
Mon 19 September 2016
One of the use cases that inspired me to create SMS Privacy is signing up for accounts for online services without having to link that to a real-world identity. Unfortunately, it turned out that my API provider is blocking the verification codes that many of these services send, in an effort to prevent people from abusing their API to automate the bulk creation of accounts. Read more

What is the most interesting thing live streaming right now?
Sat 17 September 2016
I had an idea for an interesting project: it would simply show whatever is the most interesting live stream available at the current moment. It ought to update the stream dynamically whenever a new more interesting stream becomes available. Read more

The SMS Privacy conversion funnel
Mon 12 September 2016
I'm a big fan of Patrick McKenzie's blog. If you're interested in small-time software business it's worth working through his greatest hits page. A powerful idea I learnt from his site is the conversion funnel: all the visitors to your site pour into the top, they then pass through several filter layers, and some proportion of them pop out at the bottom as paying customers. To get more paying customers you either need to put more users in the top, or get a higher proportion of them to pop out at the bottom. Read more

How to buy phone numbers anonymously
Sat 10 September 2016
Over the last week or so I've been working on a project that allows anyone to buy phone numbers using Bitcoin anonymously, and use them to send and receive SMS. I think this is an important piece of the puzzle of allowing people to interact with the world anonymously, as a large number of services use SMS for account verification or 2-factor-authentication. Being able to buy phone numbers anonymously allows you to create new identities more easily. Read more

What if we could assume new identities at will?
Sun 21 August 2016
I've been thinking a lot about privacy and anonymity recently. It's reasonably possible to create a new online identity, with no links to your real-world identity, as long as you don't need to buy anything and you're careful. Use Tor, get an email address from SIGAINT, and you can sign up for accounts on a lot of other services and speak your mind freely. Read more

Living with a Bitcoin debit card
Sat 30 July 2016
My new project produces profit in Bitcoin. I wanted a way to be able to spend the Bitcoin without having to: Read more

Perl's Digest::SHA::hmac_sha256_base64 is wrong
Wed 6 July 2016
I spent nearly 2 hours today struggling to authenticate with an API that uses base64 SHA256 HMAC's, only to find that the hmac_sha256_base64 implementation appears to be wrong. Read more

On the design of a herb jar lid
Mon 27 June 2016
My herb jar lid has two operating modes: one has small holes which allow you to shake the herb out slowly, and the other is a single large hole which allows you to shake the herb out quickly. Read more

I delivered an Oak Mirror to a lady
Fri 27 May 2016
My latest business venture is Bristol Oak Mirrors. The website is crap but the idea is I make oak-framed mirrors and sell them. Read more

How to copy Wordpress theme customisations to a child theme
Mon 23 May 2016
I've been working with Wordpress a little lately. I learnt that you're supposed to create a child theme in order to make modifications to it, but I'd already modified the theme settings (colours, etc.) using the Wordpress 'Customise' tool and couldn't see how to copy these settings to the child theme. Read more

How to defeat naive image steganography
Wed 27 April 2016
As a teenager, I wrote a C program to do image steganography. It hid the secret image in the least significant bits of the cover image. I also made a PHP web interface to it, which now sees about 3,000 users per month. So I've made a better version, it gives previews of the input images, doesn't upload the images to my server (privacy, yo), and is faster. Read more

Stockfighter Review (no spoilers)
Fri 22 April 2016
I've been playing Stockfighter this week. Read more

How (and why) to make your software faster
Fri 15 April 2016
Have you ever been bothered by how slowly your webapp loads, but never profiled it? Much like test-driven development and A/B tests, performance profiling almost always throws up surprises and big wins, and yet most people never bother to do it. If you have anything that runs too slowly, you should profile it today, you will find improvements to make. Read more

Going Solo
Fri 8 April 2016
Today marks the last day of the "full-time job" stage of my career! For the foreseeable future, I'll be working part-time for Netcraft. I will also be trying to find work freelancing (hire me!), and trying to make more money from my other projects (e.g. ads on the Countdown Solver, and selling SMS Travel Map subscriptions). Read more

How to peek all of the jobs in a Beanstalk tube
Wed 30 March 2016
This problem came up at work today. There was a Beanstalk tube with a few hundred jobs in it, getting processed slowly. A particular input didn't seem to be getting processed, and I wanted to know if it existed in the tube and simply hadn't come out yet, or was missing entirely. Read more

I delivered 2 sofas for Vincent
Sun 27 March 2016
My phone rang early yesterday morning, while I was still basically asleep. A mobile number I did not recognise. I answered. It was "Vincent". He asked me if I was free to deliver 2 sofas from Bristol to Weston-Super-Mare. I groggily suggested 50 quid, with no idea how long it would take, and Vincent said he would be in touch. I don't know where these people get my number from as I haven't had an ad for over 6 months... Read more

How to interrupt a regex in Perl
Wed 23 March 2016
Since 5.8.0, Perl's "safe signals" defers the delivery of signals when a custom signal handler is in use, until it is at a safe point to handle them. This means you can not simply use alarm() to interrupt a long-running regex. Read more

How to use GNU screen for ad-hoc cluster management
Fri 11 March 2016
If you have a cluster of machines, you can use GNU screen to run a management process on them all, monitor the output, and manually take over and repair any issues that come up on any individual machine. Read more

I tried to go pit biking
Sun 28 February 2016
Tormarton pit bike track was finally open yesterday so I took my pit bike there. Read more

I made a video of driving my van
Thu 25 February 2016
I had an idea for a video series, where I put a camera in the passenger seat of my van while I'm going places, and you listen to my anecdotes and watch me driving, etc. Read more

I tried to change the glow plugs in my van
Sat 20 February 2016
My van has been tricky to start on cold mornings lately so I decided to try to replace the glow plugs. I replaced 3 of the glow plugs. (There are 4). Read more

I bought a pit bike
Fri 1 January 2016
I picked up a pit bike on Wednesday evening. It is basically an off-road mini moto. It cost £250 and is a non-runner. Also the clutch lever is missing, the brake lever falls outwards on its own, the chain is rusty, the tyres are worn out, there's lots of rust, one of the plastic panels is missing, the air filter is missing, the wiring has obviously been mucked about with, and the front brake did not work. Read more

I rode my motorbike off road and made a video
Sun 29 November 2015
Lately I've been a bit interested in Green laning on my motorbike. Read more

I made a gong
Wed 11 November 2015
Some colleagues at work somehow quickly became obsessed with gongs. So I made a gong. From brass. Read more

I made a puzzle game
Sun 1 November 2015
This evening I had an idea for a small puzzle game and implemented it. Read more

If you serve javascript with a 404 status does it still get executed?
Wed 7 October 2015
This topic came up at work today when we noticed a Javascript file was missing. Does the browser still try to execute the 404 page that gets returned? And if not, would it if the Content-Type were set appropriately? Read more

I made a knife out of a file
Sun 28 June 2015
Since making a little knife out of a hacksaw blade a few weeks ago, I've been working on a bigger knife made from a file. Read more

Logrotate race condition with copytruncate
Thu 11 June 2015
The logrotate tool has a mode called copytruncate which copies the log file and truncates the original, rather than renaming the original, so that the daemon doesn't need to reopen the log file. Read more

I made a little knife
Sun 31 May 2015
I made a knife today. Just a little one, out of an old hacksaw blade. Only half a hacksaw blade, I used the other half to make a gasket scraper (not pictured). Read more

I made a plymetal heart decoration
Sun 26 April 2015
This evening I had an idea for making an effect like plywood, but out of metals (hence "plymetal"). I tried it out to make a little heart decoration and it worked great, although I did a poor job. Read more

I painted my van wheels
Sat 11 April 2015
My van has steel wheels and they were pretty rusty so I decided to paint them. Read more

How to close a running process's socket
Thu 9 April 2015
I had a problem this morning of a process that was stuck waiting for an HTTP fetch to complete, and had been stuck for 8 hours. Obviously the fetch had not been successful, and additionally some sort of timeout had broken, but I wanted the process to continue executing for the time being. What to do? Read more

I drove a truck and bought a car
Mon 23 March 2015
Yesterday me and Emma went to pick up a Nissan Micra I bought off eBay for £375. We currently have no intention of taxing or insuring the car as she needs to learn to drive first, and I didn't feel comfortable driving the car all the way back with no tax or insurance. Read more

Digital Ocean Private Networking is not Private
Thu 5 March 2015
Digital Ocean offer a "Private Networking" option which, to many people, sounds like it is accessible only to other droplets created by the same Digital Ocean account. Read more

I built a campervan
Thu 26 February 2015
I took today off work to work on the interior of my van. I intend to use the van as a camper van, but my main priority is that it can still be used as a normal van. I don't go in for these camper van designs that leave no usable space (e.g. to carry a motorbike, or a secondhand sofa). Martin gave me a futon, which is brilliant - it is basically an instant camper van as it provides seating and bedding in one. Read more

I am back on the bike
Sun 15 February 2015
I ride a 1989 Honda VFR750F. It's a brilliant bike, but has had very tatty fairings due to being knocked over several times. Read more

I built an oak chest
Sun 8 February 2015
Since the start of the year I've been spending some time at weekends building an oak storage chest. Read more

How to make driftwood sink
Tue 3 February 2015
I went to the seaside on Sunday and picked up some driftwood to put in my fish tank. Read more

I bought some fish
Sat 31 January 2015
On Thursday I bought 3 fish. The biggest one is a barb, and I can't remember what the other two are. Read more

I made a ring out of a coin
Tue 27 January 2015
Around the start of this month I made a ring for Emma. Read more

I drove in the snow
Sat 27 December 2014
Yesterday I drove my new van up North to visit Emma. Halfway through it started to snow. Read more

SMS Travel Map
Sat 6 December 2014
As I mentioned before, I built an SMS-updating coordinate-tracking system to use on the Mongol Rally so that everyone left behind could keep track of our progress. Read more

Stories from the Mongol Rally: Mongolian Black Market Pickpocket
Wed 19 November 2014
After completing the rally, and during our time as regular tourists in Ulaanbaatar, we visited a large market known as the "black market". Read more

Stories from the Mongol Rally: Kazakhstan Policeman Selfie
Tue 18 November 2014
Within about half an hour of getting into Kazakhstan, we were pulled over by the filth. We were travelling with an American team, 3FLP, by this point. Read more

Stories from the Mongol Rally: the Georgian Diesel Incident
Mon 17 November 2014
Shortly after we got into Georgia, we pulled into a petrol station to fuel up the car. The writing in this country uses these Georgian squiggles so it is impossible to even pronounce the words. Fortunately, most of the pumps in this petrol station also had writing in Latin, and we determined that the green pumps (like in Europe) pump petrol. So far, so good. Read more

Counter creator
Sun 16 November 2014
A while ago Feroz created an online counter for the number of times I've said something that could be considered racist. The idea is that whenever I put my foot in it, somebody clicks the button and the count increases. Read more

I made a brass box
Thu 6 November 2014
At the weekend I decided to use up the brass sheet I had lying around and construct a box. Read more

I ran out of fuel in my van
Sat 1 November 2014
Yesterday, on my way into work, I glanced at my fuel gauge and noticed that it was extremely low. Thinking to myself, "wow! I've never seen it that low before", I made a mental note to fill up on the way home. Read more

I helped a French child fix a stolen moped
Thu 16 October 2014
While Feroz and I were driving my van around France, we came across a child with a moped at the side of the road in some woods. He appeared to have broken down and we decided to help him. We pulled over and asked if he spoke English. He did not. Read more

West Country Place Name Generator
Fri 18 July 2014
I've recently written a West Country Place Name Generator. Read more

Yurt Lush Live Tracking
Sun 29 June 2014
In about 3 weeks' time I'm setting off on the Mongol Rally as one half of team Yurt Lush. Read more

Hungman
Wed 11 December 2013
I've made a hangman solver, currently called Hungman. The user interface is bad but most of the idea is there. Read more

NFC Tag
Sun 6 October 2013
Idea: NFC tag game. Whenever possible, bump your phone at someone else's to make them "it". Then they have to do it, and periodically there is some sort of punishment for the person who is "it". Like it vibrates to pretend there's a text message. Read more

Beer
Mon 23 September 2013
I've been brewing some more beer recently. Read more

Xory
Tue 10 September 2013
My latest project: Xory. I started this on Friday afternoon and now consider it releasable. Read more

Mazda MX-5
Wed 28 August 2013
Today I almost bought a Mazda MX-5. Read more

The Glowstick Debacle
Thu 15 August 2013
This is a story about how I tried to make some money on eBay, and ended up losing a bunch instead. Read more

8 out of 10 Countdown viewers
Sun 11 August 2013
I added more fine-grained analytics to my Countdown Solver recently, and I noticed something interesting today. Here are the most-solved letter sets from Friday (note the last three): Read more

Polynomial interpolator
Sat 10 August 2013
Here's what the web needs: a simple-to-use polynomial interpolation tool. Read more

Phone posting setback
Thu 8 August 2013
Yet another setback in the phone posting project. Read more