The Story of Max, a Real Programmer| incoherency.co.uk
The web program manifesto| incoherency.co.uk
Against exponential backoff| incoherency.co.uk
Conservation of tins of paint| incoherency.co.uk
I live here too.| jes's blog
This post is a quick brain dump of the things I'm currently thinking about for Isoform. I think the time is almost right for the world to have F-Rep CAD.| jes's blog
I've got into signed distance functions recently and am interested in their application to CAD software.| jes's blog
Hands up, how many times has this happened to you? There you are, minding your own business, designing some sick new parts for your 3d-printed hoverbike, you go to make a PolarPattern of 3 or 4 sweet ridges just to really finish it off and BOOM your hand slips and you accidentally ask for 3 million. FreeCAD hangs for the rest of the week and you feel your will to live slipping away. If only you could cancel the task and change 3 million to a smaller number!| jes's blog
AppImage packages an application and its dependencies into a single file. You can then just execute that single file, and it will extract everything into a temporary directory and hook everything up so that the application works. Very easy to use, very convenient. Unfortunately, it's not so straightforward to make an AppImage.| jes's blog
This evening I made a Timeline of Discovery, listing historical inventions, discoveries, events, etc. that I find personally interesting.| jes's blog
I made a Clock Gear Train Calculator this evening.| jes's blog
This post is a transcription, plus some commentary, of the Board of Longitude's 1767 document "The Principles of Mr. Harrison's Time-keeper", from scans on the University of Cambridge Digital Library.| jes's blog
I made an air engine with a diaphragm piston and a rotary valve. It was inspired by a video from Robert Murray-Smith, but improves on the design.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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!| jes's blog
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.| jes's blog
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.| jes's blog
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:| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
Good news: I have worked out why my incongruous technologies are incongruous: it's because of software!| jes's blog
Earlier this year Charlie challenged me to make a Boggle board that always leaves the letters upright, and this week I have succeeded.| jes's blog
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.| jes's blog
I enjoyed a quick visit to the Science Museum at the weekend, and here are a few of the interesting things I saw.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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?| jes's blog
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.| jes's blog
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 spo...| jes's blog
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.| jes's blog
Since my Wig-Wag has run in a bit now, I have revisited the loss calibration.| jes's blog
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.| jes's blog
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.| jes's blog
I'm not completely sure what has changed, but I'm now getting more convincing-looking inlet pressure data.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
One solution to the Prime Combination puzzle is 00001 -> 00002 -> 00003 -> 00013 -> 09013 -> 99013 -> 99023 -> 99923 -> 99823 -> 99833 -> 09833 -> 09733 -> 00733 -> 10733 -> 10723.| jes's blog
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?| jes's blog
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?| jes's blog
This is a list of things wrong with Protohackers, and my thoughts on what to do about them.| jes's blog
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 s...| jes's blog
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.| jes's blog
This post walks you through hosting a Go solution for the Protohackers Smoke Test problem using Fly.io for free hosting.| jes's blog
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"?| jes's blog
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!).| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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 d...| jes's blog
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.| jes's blog
In February 2018 I placed an order for a Librem 5. Today it finally arrived.| jes's blog
I've designed a new 2d packing puzzle. It's called "Six Fit" and you have to fit 6 pentominoes into a rectangular tray.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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 place...| jes's blog
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 a...| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
I made a loaded die with a tiny servo hidden inside that can move the weight around to change the distribution of roll probabilities.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
Today I ported the SCAMP emulator to the web, using emscripten to compile C to WebAssembly, and Xterm.js to provide the terminal emulator.| jes's blog
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...| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
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.| jes's blog
Tagged: all | software | 3dprinting | electronics | science | cnc | cpu | bitcoin | puzzle | cad | metalwork | ai | smsprivacy | philosophy | chess | futurology | clocks | keyboard | wigwag | cryptography | cybercrime | games | lawnmower | magic | protohackers | banglejs | ipfs | pikon | rc2014 | steganography | tor | ricochet| incoherency.co.uk
A compiler for SCAMP, and machine code profiling| incoherency.co.uk
SCAMP has booted up to the shell for the first time| incoherency.co.uk
Tagged: all | software | 3dprinting | electronics | science | cnc | cpu | bitcoin | puzzle | cad | metalwork | ai | smsprivacy | philosophy | chess | futurology | clocks | keyboard | wigwag | cryptography | cybercrime | games | lawnmower | magic | protohackers | banglejs | ipfs | pikon | rc2014 | steganography | tor | ricochet| incoherency.co.uk
Tagged: all | software | 3dprinting | electronics | science | cnc | cpu | bitcoin | puzzle | cad | metalwork | ai | smsprivacy | philosophy | chess | futurology | clocks | keyboard | wigwag | cryptography | cybercrime | games | lawnmower | magic | protohackers | banglejs | ipfs | pikon | rc2014 | steganography | tor | ricochet| incoherency.co.uk
Prompts as source code: a vision for the future of programming| incoherency.co.uk
Designing a Bangle.js commute timer| incoherency.co.uk