Prompts as source code: a vision for the future of programming
Mon 4 November 2024
I'm going to present a vision for the future of programming in which programmers don't work with source code any
more. The idea is that prompts will be to source code as source code is to binaries. Read more
Bare minds
Sun 6 October 2024
Back in the Stone Age, humanity was just scraping by with not much more than our bare hands. Working
with AI has showed me that, all this time: we've just been scraping by with our bare minds.
If computers were meant to be bicycles for the mind, then AI is jetpacks for the mind. Read more
The free space equation
Sun 15 September 2024
The idea is: if you have some resource which is partially used, and you increase
the total capacity, how much does your free capacity grow in relation to your increase in total capacity?
ChatGPT couldn't give me a name for this idea, so I'm calling it the free space equation. Read more
Encyclopedia Mechanica
Tue 10 September 2024
I've been working on a new online encyclopedia project, and it is almost ready to rival Wikipedia.
It's called Encyclopedia Mechanica. Pages are created on-demand by an LLM
in response to user queries, so in a way we actually have more pages than Wikipedia already, albeit with more errors. Read more
I made an LLM-powered Colonel Blotto game
Sun 21 July 2024
Today I made a Colonel Blotto game where you play against GPT-4o,
and after each round you can chat with GPT-4o to get commentary/analysis/coaching. Play with it at blotto.incoherency.co.uk until
I run out of OpenAI credit. Read more
2014 Nissan Leaf: first impressions
Mon 8 July 2024
Browsing AutoTrader I found that secondhand
electric cars are now cheap enough to be a reasonable option. I took a punt on a 10-year-old Nissan
Leaf, and drove it to work today for the first time. This is my Nissan Leaf story. Read more
Secrets of the ChatGPT Linux system
Sun 16 June 2024
Have you noticed that ChatGPT sometimes writes out Python code and somehow executes it? How does that work? What
kind of environment is it using? Can we co-opt it for our own ends? Let's find out! Read more
My first microlighting experience
Sat 4 May 2024
Today I had my first microlighting lesson with Brad Wagenhauser of Great Western Airsports.
I booked it about 6 weeks ago, but it has been cancelled 7 times due to the weather.
I was beginning to think it would never happen, but today was the day. Read more
I'm building a fixed-gantry CNC machine out of composite kitchen worktop material
Sun 21 April 2024
Composite kitchen worktop material is a good choice for a CNC machine because it is very heavy and very flat.
It is a bad choice because it is quite soft. But mainly it is a very good choice because I already had the material and
it is therefore free. Read more
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
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?Read more
A: Set up your own exchange and sell them on there
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
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