Author Archives: sandy

Coffee Boss day 1: Set up

So, this should be easy, right? I've used my [coffee_boss scales]( device to save a load of weight measurements into a couple of text files as csv. I want to show these values as a graph, and do some other things with them. I'm working on my home machine, which is Windows 10. I opened up Pycharm and checked a new project out of source control (

I create a new directory "viz" to do some visualisation stuff in. Inside, I create, and look at which I think is a good place to start. I've never done anything visual with python before, never used pandas, barely used numpy.

# Diversion 1:

Set up the environment. Oh right, lets switch to python3 - start on the right foot eh. Ok, that's in project settings, I remember that. (I haven't used Pycharm for anything for years.) Oh right, there's already loads of packages loaded in site-packages.

I want a fairly fresh Python environment so it's easier to debug problems if they happen. I'll create a virtualenv through pycharm's interface. Should I create the virtualenv somewhere near the coffee_boss project? I don't think that's a good idea because I don't want it to be checked into git. But I don't really want a random disconnected bundle of venvs either. I'm sure I already have a few of those floating around, with names that only made sense at the time.

So I'll do it anyway, create sandy_000/venv/coffee_boss. At least there's something concrete to connect it to this project.

# Back to work

Good, fresh environment. First line.

from pandas import read_csv

Ok, got the squiggles, that's good. Let's see if muscle memory serves me… what do my fingers do? Turns out alt+enter is still the combo for "solve the squiggles". Nice, I feel clever, all those years haven't abandoned me entirely. Alt+enter, then "install package pandas".

# Diversion 2: Update Pycharm

I've got an error: "AttributeError: module 'pip' has no attribute 'main'". Hm. Check that pip is the right version...

Google. This was a problem in 2018, when upgrading to v10.x of pip, maybe that's it. Ok, I'm on version 19.x, that's not it. 20 minutes of searching. Google. gives me the hint, and I notice that this is version Pycharm v2017.

I start up the Jetbrains toolbox and hit the button to upgrade Pycharm. I decide to uninstall an ancient version of Webstorm while I'm there. I didn't even know I had that installed.

# Diversion 3: Make this into a blogpost.

I decide to write this down. I had this idea about stepping through my process of getting something from idea to openshift and it's this kind of back-and-forth that reveals the dull complexity of trying to get anything done with programming. What a good idea. Just type it into an email in the first case.

I open the empty draft and instantly remember I hate swapping between tabs in firefox. And I hate having multiple instances of firefox open, I always end up finding the wrong window and duplicating tabs in both.

I just opened notepad++ instead. That's good too, I got up to here typed, and I'll just use markdown for code.

# So, back to work

So I've started and got this far. But hm. I'm writing this article in notepad++, and I want to paste in a picture of the squiggles. I use snipping tool to take it, but of course I can't paste it here. Man.

Diversion 4: Updating WordPress

Obviously, why don’t I just switch to writing this on my dev blog. Yes, good plan. Go to, it’s a wordpress site. Figure out my password and log in and start a new post. Good, now we’re getting somewhere.

(Don’t want to spoil the tension, but you can tell this bit worked eventually.

Copy the snipped image, … paste it. Paste it. PASTE IT. It’s not pasting. Doesn’t wordpress allow pasting into posts? I’m sure it used to. Oh, the installation is three years old. Maybe it just needs an update – I think I remember doing that on my other site recently.

So abandon that post and click “Get v5.2.3”. It says it can do it automatically. I know it says take a backup first… Well nothing has changed recently on this machine, so I’m sure the last backup is ok.

Downloading. Now unpacking the update… That’s taking a long time. Open a new tab. It’s not in maintenance mode. I wonder if I can see the logs somewhere? What version even is this one? It tells me this could be updated, but is it a minor or major bump? What should I expect?

Ok, this is v4.something. Try to start the update again. Hm update already in progress… Gosh I’m going to have to look at the logs. Lets go to, that’s my hosting company. Oh.

This wordpress installation was installed through “softaculous”. That’s got a way to do upgrades outside of the wordpress UI. Try that. Great, the install to 5.1.2 seemed to go ok… It says. How did I check the version again? This is awful. Oh right, under the big W. It still says it’s at 4.9.11.

Why isn’t it upgrading. Ok, in the file manager I can see that the upgrade bundle has been downloaded, and unpacked. What happens next? Can I do it manually?

Google. Found which describes my issue. It points me to some plugins – “fix another update in progress” in particular. That wasn’t the error I had… But try it. Ok, manual install it is. Make a backup and remove the files, and copy across the new ones. Ok, test it, that’s trying to setup a fresh installation… I’ll copy wp-config.php and the wp-content directory over too. It works. showed how to update. It was pretty easy.

Now, were was I. That’s taken an hour and a half. Dave has just sent a message on steamchat asking if I’m ready for some rocket league while we’re waiting for Andy to come online. I haven’t even had my dinner yet! The dishes from lunch are still waiting in the kitchen! I had hotdogs for lunch. I’m not really hungry.

Oh right, just before I do that, let’s just see if I can paste inline images into a new post.

Oh yeah, it was all worth it.

Back to work

Copy and paste the doc from notepad into wordpress. Oh I’ll do a clever thing where I show how the text started in notepad and do some stuff to indicate diversions.

This is getting long. Got to make dinner. I started this just before four, it’s half eight now and I’ve got one line of code written. And that doesn’t even work. I think this is a two-parter.

Getting to grips with ESP32

I’m tinkering with the ESP32 board. There isn’t a loader that works with the Arduino IDE’s board manager yet, and I had a basic problem installing the board files following the instructions at It says to put the files into [sketch folder]/hardware/espressif/esp32, but because my sketch folder is in my Documents/arduino, weird permissions blocked me from doing it.

I moved the files into C:\dev\arduino-1.8.4\hardware\espressif instead and it worked fine there. confirmed that there was no special magic involved in where it goes.

There’s a load of warning during compilation, but they seem to be in places that make no difference, because it worked, good stuff.


Used SD_Test.ino from the ESP32 examples.

And it worked. This isn’t the connection I expected: I thought the MISO on the SD card would be connected to the MOSI on the ESP32. This isn’t how SPI works, and I’m conflating MISO and MOSI with DIN and DOUT.

DIN and DOUT are implicitly directional. The OUT of a device is naturally the IN of another device. So while it might make sense on a board to have an OUT marked, it’s not possible to have a conductor which is called OUT at one end, but looks like IN at the other.

Master In, Slave Out is a buss that might be common to multiple SPI devices. There is only one master with one input, so that doesn’t change, no matter how many devices there are added.

SPI uses the chip select pin to put other devices into a high-impedence state that means that effectively the SPI bus is only connected to one device at a time. There is another form (referenced in the forum post above) where SPI devices are daisy-chained. That’s not for me.

New settings for 3d printer

My hot end connector burnt out:
Extruder heater burnt out

And my LCD was behaving extremely oddly after that, so I bit the bullet and just got a whole new electronics package: RUMBA plus full graphic LCD, from

Had to compile new Marlin for it, so had to remember all the stuff that I did to get the last one running ok.

Calibrating e-steps:

  1. Write down the current e-steps value
  2. G92 E0 to zero the extruder position
  3. G1 E50 to extrude 50mm of material
  4. Measure how much was extended
  5. Divide 50 by actual amount extruded
  6. Multiply e-steps by that value
  7. M92 E<the value> to set the new e-steps value, or use the LCD

For example:

  1. Current e-steps is 114
  2. G92 E0 and then G1 E50
  3. Machine extended 57.4mm
  4. 50 / 57.4 = 0.87108
  5. 114 * 0.87108 = 99.30314
  6. M92 E99.303

Easy. I forget this every single time and have to scratting around to find the article that helps me do it. I even forgot that I’d written it up on this blog, three years ago, then I stumbled across that now, and didn’t find it helpful.

Other truths:

  • X and Y steps per mm: 81
  • Z-steps per mm: 3980

And remember to do a M500 to save it to EEPROM afterwards. And make sure that


is uncommented, so as to allow EEPROMing. So:

M92 X81 Y81 Z3980 E99.303


Bose Soundlink Mini II vs Mass Fidelity Core


I asked for a Bose Soundlink Mini II for Christmas, because I wanted a way of getting music audible while I work, screen printing on vacuum tables. The vacuum is noisy. I figured a small speaker I could put right next to me would be better than blasting the proper stereo from the other end of the room.

It’s great for that, it’s close to me, I can hear even with the vacuum on, and it doesn’t have to be so loud that it’s offensive to other users of the print room. Problem solved.

For my studio (sounds fancy, it’s just a little room full of boxes), I wasn’t loving it though. Because I have coveted the Mass Fidelity Core since it got kickstarted, and I received a bit of a windfall, I pulled the trigger on that, and it arrived a week or two ago.

My existing machine is a Creative D80 bluetooth speaker, so we aren’t talking audiophile gear here. Nevertheless, I was surprised by how a machine four times as expensive compared, and a machine ten times as expensive.

There are plenty of reviews of the Soundlink and the Core, so I’ll not describe what they’re like in terms of specs, but I will give my reactions and feelings on build and finish.

Bose Soundlink Mini II is a tiny, solid piece of engineering, beautifully finished. It weighs about 700 grams, but seems heavier. The metal case of it is smooth where it should be smooth, and has sharp edges where it should be sharp. The metal grille makes it very grabbable, and inspires confidence. I was happy just to grab it and shove it in a bag, without fear of clicking fabric, or poking a driver.


It comes with a charging dock. The Soundlink Mini II has a big rubber foot, that means it doesn’t easily slide into place on the dock. You’ve got to wiggle it a bit until it seats properly. That’s literally the only problem I can find with the build on this machine, it’s really a nice piece of kit.

Unpacking is a pleasant experience. The USB charger has got a couple of international prongs to slide into it. Neat.

The Mass Fidelity Core is not as tiny as the Soundlink, and twice as heavy – though it doesn’t seem so. Holding both out in front of me, I struggled to sense a great difference in weight, despite the huge difference. It seems solid enough, and the polished metal is a beautiful element. I wish there was a bit more special up top though – it’s a bit of a bland top. Shiny black plastic – I’ve seen it before.


Unpacking looked good to begin with: The box has a colour sleeve, over a rather beautiful stepped, sturdy board box. Inside are two sections, with high density black foam precisely cut out to cradle the Core, and another little cupboard at the side for the accessories. It seemed a little over-dressed to me, and my Core had clearly been unpacked and re-packed up before – cardboard tabs were bent and delaminated. A bit of the protective film had already been peeled back through handling.

The precision of the packaging made the untidy contents seem more problematic.

The Core comes with a little infrared remote, the power supply, and a handful of international figure 8 leads for it, and a stereo RCA-to-3.5mm jack cable.


The size of this means it isn’t going to be slung into a shoulder bag, even with the odd little tote that accompanies it – it’s a weird sort of shape, and just too large for me to pick up with one hand. I do have small hands though.

The power button is on the back rather than the top.


Physically it’s a little underwhelming, and there was some marring on the moulding at the back. I can’t tell if it’s damage or just a slightly duff mould, either way it’s cosmetic only, but just reflects a little less attention. If the rest of the unit wasn’t so sharp and sleek, then I wouldn’t even have noticed.


Frustratingly, neither of these devices are anywhere near as reliable as my Creative D80, that just connected instantly as soon as I wake my laptop, and stays on, rock solid. It’s never dropped. The D80 is mains powered (and old), I wonder if it’s something to do with power saving.

Both the Soundlink and the Core lost their connections once or twice over the course of a day’s use. With the Core, any silence of longer than about six seconds makes sound fade back in, when it next occurs. This is most obvious when changing the volume in Windows, using the slider – the sounds that plays misses it’s attack. In the scheme of things, not that strange, but just a bit curious. I guess this is a power saving thing, and it doesn’t happen with a wired connection.


This is tricky, these are very different beasts.

The Soundlink is focussed, bassy, powerful. It has a flattened, compressed punch that is unsubtle but effective. It is very directional, and falls off very quickly as you move away from the unit.

The Core is polite, detailed, expansive. The soundstage is quite amazingly expressed, and I’ve never had the layout and composition of the musicians suggested to me so openly before.


I listened to a couple of different tracks to compare them.

First off, Nigo‘s Ape Sounds. The Soundlink expresses this with a wonderful focus and punch, round bass, a full, convincing sound. The Core showed it diffused, a bit neutered. Compared to the Soundlink, the Core sounds oddly phased, a bit like turning on “surround sound” on some hifi systems. Not the best.

Inception OST, We built our own world and Radical Notion contain passages that I was surprised to be able to “see” quite deeply into on the Core, it was obvious that there were different physical instruments playing different sections. The layering was clear. On the Soundlink, it all just blurred into “strings”, and the difference between the violins and the cellos was lost.

The Soundlink really has punch, and expresses bass that the Core only eludes to, but it does sound a bit muddy down there.

The track Mombasa has a repetitive bass drum signature, that sounds insistent and solid, processed on the Soundlink, enjoyable. On the Core, it sounds like a real drum, in a room, quite surprising.

There’s a brilliant brass break at around 1:25 on that track, and I was expecting it to really show the best of the power that the Soundlink could deliver, but it actually sounded compacted and processed, a bit of a dirge. The Core lacked the oomph, but expressed the part open, rasping, tearing. A much more interesting piece to hear.

Avril 14th by Aphex Twin is a fairly low-fi simple piano ditty, and was actually pretty hard to differentiate on these speakers. The Core edged out as being more realistic, sounding more like an upright piano. The Soundlink more like a toy piano.

The Way by DJ Taktix was a sub-bass test. Weirdly, I could hear the very low tones on the Core, but just not loudly. On the Soundlink, the bass rolled and boomed carelessly, certainly a lot more perceivable than on the Core, and powerful bass is part of the joy of this kind of record. It flapped a bit, loosely expressed.

I was surprised to find with the Core, separation was obvious, clear even on something as unsubtle as bloodclot jungle techno that I always assumed was just a thrilling hot mess of splats and breaks. The Soundlink presented is as such, a solid scribble of energy. The Core again neutered the track, showing it almost too unforgivingly, maybe highlighting the track’s lack of sophistication a little too clearly.

Max Richter‘s Sleep was a surprise. I found I much preferred the simpler presentation that the Soundlink gave this album. There’s a conviction and a seductiveness in it, sipping a more concentrated soup. The unsubtlety of it worked well with the droning, solumnabulatory sound, allowing it to sound warmer, more complete, less interesting.

With the Core, I found it open and layered rather than sonorous and suggestive, but not any more engaging.

Listening summary

The killer feature of the Core is the ability to present a wide, expansive sound stage with one pretty dinky speaker. It does it, quite amazingly well. When it plays, the source of the music is very indistinct, but the actual sound itself is crystal, chiming, rareified. It invites deep inspection of layered orchestral sounds, and is realistic. Instruments sounds like pieces of wood and cork and strings, and brass, blown, plucked, bowed and hammered, in a room. Rather than recordings, or something from the radio.


On the down side, that realism is a problem for acoustically simple music – particularly bass music (which is a lot of what I like) where the Core’s expansive presentation sucks quite a lot of power out of it, makes it sound neutered, or hollow. Unmoving I listened to quite a few jungle tracks I love, and just felt “so what?”. An empty performance.

The Soundlink is tiny, and has bass. It presents a much more simple picture, not muffled exactly, but just flattened. The highs are just as high, and the lows are just as low, but there doesn’t seem to be much range in between. This gives a powerful, directed sound that is fun and bouncy, and plays bass music (and probably rock and pop) pretty well. It doesn’t travel far.


Bulk upload for Music Magpie and Ziffit

I’ve got a stack of CDs, but it occurred to me that I no longer even have a CD player. I decided to move them on using Music Magpie or one of those we-buy-your-old-stuff services. I didn’t expect to make a pile of cash out of it, but wanted to clear the space, dematerialise a bit, and didn’t want to just throw perfectly good CDs away.


I used barcode2file on my android phone to zap all the barcodes. About 300 items, including a few DVDs.

I looked at:

  • Music Magpie (
  • Ziffit (
  • We Buy Books (

And wanted to compare the prices I’d get from each. Of those, only We Buy Books has a bulk upload option that can take 50 item codes at a time. Even with hundreds of items, that’s easy enough to do manually.

Music Magpie and Ziffit only have a slow one-by-one interface that you wouldn’t ever want to use twice, so I recorded a little selenium script in the Selenium IDE (Firefox), and embellished the Python that came out with the ability to loop through my list of barcodes and record the results.


The code I used is in this gist:

The scripts are probably pretty fragile, and is “just enough” to work. It’s slow too. Successful submissions are written into a tab-separated file.

  1. Upload the entire barcodes list into each service
  2. Tabulate the results in a spreadsheet to give the highest price for each item, and which service will pay it
  3. For each service, produce a list of it’s “winning” items
  4. Upload the sublist into the service, saving the results
  5. Manually, log into each service and complete the trade


We Buy Books give the best prices on average, per item, but also rejected the most items. We Buy Books also gave the widest range of prices; for the items that they did not win, their price was often very low (2p vs 20p from other services for a particular item).

Service Total value Items accepted Average value Bids won Winning bids value Highest bidder
webuybooks £151.00 200 £0.75 74 £73.04 27%
music magpie £184.34 270 £0.68 138 £108.23 49%
ziffit £134.73 246 £0.55 67 £37.22 24%
combined £218.74 £0.66

Comparable items that received bids from all three services:

Where all three services offered bids (178 fairly comparable items), the prices are much higher, which might indicate an element of competition, but given that these things are so hard to compare, I’m not sure this is a factor.

Service Total value Items accepted Average value Bids won Winning bids value Highest bidder
webuybooks £66.97 62 £1.08 62 £66.97 35%
music magpie £71.28 79 £0.90 79 £71.28 44%
ziffit £31.40 37 £0.85 37 £31.40 21%

Average prices are higher. Music Magpie was still the highest bidder most often, but the margin between We Buy Books and Music Magpie has narrowed quite a bit.


Pretty inconclusive. I can’t see a particular pattern that would make me say “Use service xyz always”. If I had less time to do these, and then sort through all the items a second time putting them into different boxes, I’d go with Music Magpie, because although they don’t always give the best prices, they accept a wider selection of items.

With time, a combination approach is most thrifty, and that’s what I did, and it resulted in about 16% extra cash.

What I didn’t do was any kind of breakdown of the types of items: DVDs, CDs, genres etc.

300 items x £10 original price = £3,000.

(Incidentally, £3000 / 20 years of buying media = £150 per year, and I’m paying £95.88 per year to google to host my records now. I suppose the difference is that I have no piles of plastic to show for my money any more. That makes me a bit sad, but also a bit happy.)

Sold for £218.74. That’s about a 7% return of cash value. Over a couple of weekends, it took me about four or five hours to scan, process and box the items. 5 hours x £20 per hour wage = £100 wage for that time, and £118.74 money back.

Well, at least they aren’t just going in landfill.


Delete a bunch of mongo databases at once

I know this is knucklehead stuff, but I never trust myself to do it without 10 minutes of practice beforehand:

var dbs = db.getMongo().getDBNames()
var prefix_to_drop = 'testdb_';

for (var i in dbs) {
  db = db.getMongo().getDB(dbs[i]);
  if (db._name.lastIndexOf(prefix_to_drop,0) === 0) {
  print("Dropping " + db._name);

I use this when I’ve been breaking tests, and the database cleanup is getting skipped. And I end up with 150 test databases lying around.

Calibrating e-steps

Every time I have to do this, I forget what to do, and have a frustrating time. Because it’s simple.

G91 – Sets the printer into relative mode. This is so that issuing:

G1 E10 – actually moves 10mm. I do this twice in row for each measurement. The first one compensates for the inaccuracy of the previous measurement.

I could issue a G92 to zero everything instead of doing the G1 twice, but I don’t.

Then M92 E800 to set esteps per mm to 800. Mark on the filament 10mm on the ruler, then send G1 E10, and see how far the mark is from the 0mm mark on the ruler. Once it’s as accurate as can be at 10mm, do a couple at 50mm or 100mm to check the accuracy better.

I just got a new extruder.


  • Mini extruder with NEMA14, E3D hotend: e-steps per mm: 700
  • Bulldog Lite with bowden, E3D hotend: e-steps per mm: 114


New 3D printer

I’m building up a new 3D printer, a Mendel Prusa i3.  I ordered a mechanical pack from Greg Colbourn on the eMaker site that included all of the hardware, rods, nuts and bolts, bearings, motors and a set of flat parts in 6mm plywood.  I got a RAMPS electronics pack from the now-ubiquitous reprapdiscount, and was impressed by it.  It included hall-effect endstops and a neat LCD display, and a MK2A PCB heatbed.  I also got a 30A, 12V power supply.

I sanded down the plywood and finished it with some oil (and very handsome it is too) and printed off a set of Prusa i3 parts on my little eMaker Huxley in some nice silver ABS.  I think perhaps the Huxley has detected that it is fabricating the parts for its replacement, and is acting up a bit so a couple of the parts are a bit curled, but fortunately the design of the i3 parts is such that the squareness or flatness does not rely on a good bond to the bed.  Good work.

The mechanical parts went together with a minimum of fettling but I had to print some holders for the LM8UU bearings on the y axis.  These are designed to be simply zip-tied into some slots on the y-carriage, but I found that y-carriage itself collides with the y-axis motor at the far end of it’s travel.  Not by much, but a little, and enough to raise the bed a touch, so I modified the Y bearing holders from the i3-mini variant of the machine and that raises it a mm or so.  Bit of a pain because the hole spacing is so tight, but it works.

I like the three-point heatbed fixing / suspension system on my eMaker Huxley, so I went for the same thing on  this machine.  RepRapPro sell parts separately, so I got the aluminium heat spreader and the MDF insulator from them, along with the spring mounting hardware to go with it.  Of course, this system doesn’t use the four outer corner bolts like the i3 is set up, so I printed some extra pieces that bolt onto the y-carriage.  I lose some z build height, but it’ll do until I get an adapted y-carriage cut.

One of the most troublesome points of failure in my eMaker machine is the termination of the power electronics.  The Sanguinololu board isn’t great for the heatbed because the traces are pretty slim and I think the power handling is close to its rated limits.  That, together with _just slightly too little wire_ for the moving parts has meant that the cable to the heat bed has burnt out a couple of times.  I was determined to make a better job of the wiring this time around to avoid the froth of cabling that surrounds the Huxley.

To this end, I finally got some bootlace ferrules and made up a high-power wiring loom with with ferrules on one end (for screwing into the screw terminals on the RAMPS board), and fork or ring terminals crimped on the other end.  The fork terminals go into the screw-down terminals on the power supply, and the ring terminals are bolted into holes on the PCB heatbed.  I had to drill the holes out a little for that, but there is plenty of contact between the washers on the bolts and the traces on the bed, so it’ll be ok, and it has the benefit of being completely solder-free, and everything is disassembleable and replaceable.  This will make it less brittle, and more reliable.  I don’t know why more people don’t do this.  Soldering trailing wires onto moving PCBs is a really bad idea but this seems to be accepted practice on repraps.

Hot end is a lovely E3D, all-metal device.  Haven’t used it in anger yet, but it builds easily, heats up fast and squirts hot plastic out, and that’s what I look for in a hot end.  It came with a cartridge heater rather than a resistor.  I like it.

Finally is an extruder.  After being used to a bowden extruder on the Huxley, it seems weird to expect to fit a massive NEMA-17-toting extruder on the x-carriage itself, so I’m planning to eventually go with a bowden arrangement again.  It just seems more civilised.  However, E3D are out of stock of the bowden kit, so that’ll have to be a later development.  In the meantime, I’ve got the hardware for an MGS (metal gear system) extruder, and am printing up the RP parts for it right now.  The small gear on my old eMaker, Wade’s-style extruder has always worried me, and has always been deformed.  I just don’t like it, so I was pleased to see a metal system around.  I wonder if a direct-drive is better again, but I’m happy to wait to try that.



JMyron – unsatisfied link is now satisfied

I was putting JMyron on a new machine, to use in Processing on Windows 8, and kept getting this:

Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: C:\Program Files\processing-1.0.4\libraries\JMyron\library\JMyron.dll: Can't find dependent libraries
     at java.lang.ClassLoader$NativeLibrary.load(Native Method)

Well, I used Process Monitor to see what was going on, and spotted a load of failed attempts to open MSVCP71.dll during sketch startup.  I tracked down a copy of that C library (msvcp71.dll and msvcr.dll), dropped them into my system32 dir and hay bingo, works.  Process monitor is ace.

I had already installed the C++ 2010 redist.  I guess JMyron needs some extra sugar.


Installing OS over PXE on machine without USB/optical drive

I got a little second-hand Dell D430 laptop to use for my upcoming polargraph show. I’m actually really impressed, it’s a dinky little thing.  No optical drive however, and installing an OS from a USB memory stick didn’t seem to work.  So I’ve done it over the network, and it even seems to work.

PXE (Pre execution environment) is the method, and this is a way of booting over LAN.  Hit F12 on the POST screen and then boot from NIC.  There needs to be a server on the network with TFTP running on it, to dish up the necessary files.  This is hard, but there is a nice little app called SERVA that handles the TFTP/DHCP stuff, because I don’t know how to.  Anyway, I followed the instructions on this site and windows 8 is winging it’s way onto my new old machine.


I initially tried putting the windows 8 disk in and symlinking to it instead of copying the files into the TFTP source folder.  That worked up to a point, but the installation failed.  I think it is because SERVA needs to add some files to the windows installation to customise it for this method, and obviously that can’t work if it’s read-only (on a CD).   So actually copy them over, or at least make sure they are somewhere that is writable.