I went to the dentist and bought a pianola

I went to the dentist and ended up buying a pianola. A pianola (player piano) is an automatic piano that plays music from rolls of paper with holes cut in it, like a computer punch card. Most dentists do not sell pianolas and focus almost exclusively on dental health and plastic surgery but we found ourselves uncharacteristically early for our appointment so popped into a nearby charity shop and there I found it.

I wasn’t aware that I had always wanted to own a pianola until I learned they were completely air powered, kind of like a huge wooden stringed accordion. The manager of the charity shop urged me to “seize the day” and realise my one-minute-long dream because it was taking up a lot of space in her shop and nobody else wanted it. She was at least honest enough to tell me it took five men to move it in so it would be quite a job to get it home.

I called a piano moving company who sent just two men and a young lad whose job it was to open doors. The two men were admittedly very large – easily the combined volume of five smaller men, though costing me less to employ. They did an excellent job so barely two days after first seeing it, I had a pianola.

I looked around on ebay and Facebook to figure out how much money I should pay the charity shop for it but they’re basically free because they take up a lot of space and nobody else wants them. So, I just gave them £30. All in with the delivery costs it was around £150.

State of disrepair

I watched all twenty videos there are about pianola restoration on youtube to become a complete expert in pianola restoration and started taking it apart. The main problem is that most of the eighty-five+ rubber tubes have completely perished and fallen down into the keys, jamming them up too. Some of them have previously been replaced with clear vinyl tubes and those look ok. The eighty-five little key actuator bellows are seemingly in good condition. One or two of the eighty-five hammer mechanisms aren’t working quite right. And every one of the eighty-five keys are dirty. The eighty-five+ strings look ok – none of them broken or rusty. The whole thing is surprisingly tuned kind of well, just one tone down. Knowing little about pianos I’m going to assume that means it has been dropped only once since it was last tuned. The hammers have deep string grooves in them and everything is a bit dusty. No signs of it having been stored anywhere damp.

While researching other pianolas for sale, I actually found an old listing for this very one by the original owner – they’d failed to sell it and given it to the charity shop. I contacted her and learned that her grandad had bought it new over fifty years ago and they’d had some restoration work done on it about 25 years ago. It’s been kept indoors the whole time – never seen a damp cellar or garage! Amazing luck.

Looking inside I found a label showing its manufacture date as February 1938.

Anyway, I’ll post a bit more as I go along.

Northern Quarter Open Mic: Ethan

So I went to the Open Mic night at the Northern Quarter bar in Huddersfield last week for the first time and saw an act that was quite upsetting. Turned out to be just a guy doing his act but at the time I was actually kind of terrified. A unique experience. Meet Ethan.

Ethan is a gaunt, serious looking chap, wearing glasses, a long dark coat and a baseball cap. He keeps popping out for smokes all evening and generally seemed a bit jittery. Towards the end of the night he gets called up on stage.

His first song is a slow spoken word cover of “Fever” over a strange noisy electronic backing track, during which he paces nervously around the small stage. For his second song, he kneels down behind a small duffel bag, holding it open towards himself and staring into it.

Through the largish PA system blares an oppressively loud droning noisy low note. His words are distorted by the bass but from what I can make out this is a desperate man unable to care for his family, reaching the end of his tether. He’s been staring into his bag the whole time.

And suddenly I think: has this guy got a gun in his bag and is he going to shoot himself? The loud bass line is upsetting enough, booming against my chest, but now I’m actually a bit concerned. I’m near the open door and I start kind of planning an exit! My heart is racing!

The noise builds and builds and I’m wondering if I’m going to have a panic attack. Then at the peak, he quickly reaches into the bag and pulls out a white papier-mâché mask/helmet, puts it on his head and starts writhing around on the floor.

So Ethan is obviously a genius. But I think the fact I’ve never seen him before, so didn’t know what to expect, and that I was already nervous myself from having performed earlier meant his act landed just “perfectly” and I was quite terrified.

I spoke to him after and excitedly told him my experience but he barely allowed himself a smile. Was I ruining it by acknowledging it? Or was I just the weird one?

Bruce Schneier misrepresenting his credentials?

Bruce Schneier
I run the Bruce Schneier Facts website (inspired by my Bruce Schneier Facts comic strip from way back in 2008) and because of this I get some interesting emails. Sometimes it’s corrections to the often incomprehensibly complicated jokes. Sometimes it’s people angry at Bruce Schneier. More often than not, people just think I am Bruce Schneier, which is nice but he has a way better beard.

Back in 2014, I got an email from a lawyer on the other side of a patent case that Bruce Schneier was an expert on:



Do you know of any instances in which Bruce Schneier has misrepresented his credentials, publications, or accomplishments?

Any help would be appreciated.


Dickhead Laywer

I changed his name to protect his privacy. His real name is Knobhead Lawyer.

So the Bruce Schneier Facts database is a bit of a stupid place to dig up dirt. I’m not sure what he was looking for. So I emailed him back:

Hi Dick,

I once heard the claim that he could compute discrete logarithms in polynomial time with his fists. I’m no mathematician but I’m fairly
sure that is a misrepresentation.

Hope that helps,


He apparently didn’t get the joke and replied:

Thanks John.

May I ask why the Web site exists? I’m not a fan of Bruce Schneier’s, but it appears that he has profoundly offended someone to warrant the creation of the Web site. What is the back story?


And I replied once more:

Hi D,

It’s quite a long and painful story – one I’d rather not recount really. Suffice to say, he proved the infinitude of twin primes by enumeration –
which upset a lot of people.

Did you get any further with your research? It’d be good to bring this guy down a peg or two!


He never replied. I’d love to hear that he cited a Bruce Schneier fact in court though.

“Your honour, when Mr. Schneier, seen here in a cowboy hat armed with two uzi machine guns, claimed he knew Alice and Bob’s shared secret he was clearly misrepresenting his accomplishments”

Lily was our dog. She moved in at nine years old in March 2010 and died 12 February 2016. She had separation anxiety, which meant she was at our feet twenty-four hours a day (literally – she slept on the end of our bed). Luckily, it wasn’t too difficult for us to accommodate her – every single one of her 2,169 nights she slept in a bed with one or both of us. In any given week, she probably spent a maximum of 2 hours without us (though usually with a cat or two). She made us smile and laugh every single one of those days and I’m going to miss her dearly.

Louisa wrote something about her too, over on her blog.

Google Poetics: once in darkness

Google Poetics is a project to record the beautiful poetry that Google’s autocomplete feature sometimes writes.

Inspired by this recent example, I recorded a song the lyrics of which are entirely Google autocomplete suggestions.

Use Gmail for just outgoing email and replies

For my own privacy, I avoid using free mail services like Gmail and instead run my own mail server (hosted at Brightbox, a very trustworthy cloud server provider here in the UK ;). I do use one or two other Google services which means I have a Google account which means I do actually have a Gmail address. I also have an Android phone and that has the Gmail app preinstalled… by this point you can surely see that I should give up any pretense of privacy, but I prefer clinging onto it’s remaining delicate threads. It provides an illusion of dignity otherwise missing from the Internet.

Anyway, so I happen to have a pretty convenient email account available to me when I’m mobile whether I want it or not. I don’t want to connect it to my own IMAP server, but I don’t want to start sending mail from a Gmail address as it will end up in people’s address books and they’ll start sending new mail there instead.

So I’ve found a compromise: I’ve configured my Gmail account to let me send email from my personal email address (and set up the associated SPF DNS records too). And I’ve configured by own mail server to forward back any *replies* to my Gmail address. So whilst I’m out and about, I can *send emails using Gmail if I need to and read any replies to that email*. But new email direct to my personal address is never seen by Google.

I use maildrop, so my filtering rules are in the mailfilter language:

if ( ( /^In-Reply-To: .*mail.gmail.com/ || /^References: .*mail.gmail.com/ ) && hasaddr("john@johnleach.co.uk") )
cc "!mygmailaddress+reply@gmail.com"

Any emails that are replies to Gmail emails and are to (or cc) my personal email, get forwarded on to Gmail (to an alias I can use to avoid any forwarding loops).

I could also check the Message-ID header for gmail.com to detect new incoming email that had originated from a Gmail account anyway – the logic there is that Google have already seen it, so my privacy has already been invaded; I may as well get something out of the bargain. Worth noting that replies to my replies to incoming email from Gmail will hit my reply forwarding rule anyway.

Don’t tell your audience you’re ill-prepared

I sometimes hear conference speakers admit they only finished their slides minutes before their talk started. Or I see them the day before admitting that they still have to write the whole thing.

Whether you’re presenting at a huge national conference or a smaller local group, this is simply disrespectful to the people who take the time to be your audience.

The only reasonable explanation I have for why people do this is that they’re trying to manage expectations. Concerned it won’t go well they make as if it was a last minute job, even if it wasn’t. If it does turn out to be a disaster then, well, they didn’t try hard. If it’s a success, even better! They just threw a great talk together without any effort.

But when a speaker admits this kind of thing, all I hear is that they don’t care enough about my time to prepare and for some inexplicable reason, they’re terribly proud of themselves for it. Bragging about it almost.

Not all talks require major preparation but even the shortest and most basic require proper consideration.

Not everyone has time to prepare in-depth talks but if you know that’ll be a problem for you, perhaps you shouldn’t agree to speak in the first place.

If you do find yourself ill-prepared though, might I suggest that you don’t let your audience in on it.

Don’t be proud about wasting their time.

That just makes it worse.

Condenser microphones don’t like humidity

I bought a Behringer B5 condenser microphone a couple of years ago to record my acoustic guitar. Add in a second  dynamic mic I already owned and a little two channel USB preamp with phantom power and it sounded really nice.

Then after a few months the condenser mic started picking up some interference.  It was a weird kind of rumble but with a kind of radio tuning sound, and the odd pop and click.

I tried changing channels, switched power supplies and cables but nothing helped.

Finally I came across a forum post describing a similar problem with the cause being humidity. Apparently condenser mics don’t do well in humid conditions and my office is a little damp. I’d left my mic out of its case a couple of times in these conditions and it got damp. The silica gel packet that came in the case should have been a clue.

Anyway, I popped my mic in my electric oven set at 30C, left it for 30mins and now it’s as good as new! Phew.

GPS fail, Geofence madness, crash!

Another quadcopter crash today. I was just hovering in my garden and it randomly flew into a fence. All four (carbon fiber reinforced) propellers broken, two motor mounts bent and a leg snapped.

Looking at the telemetry logs (which I happen to have as I had my laptop connected at the time) it seems the GPS suddenly reported the position wrong by a couple of hundred metres and the geofencing feature kicked in and it tried to return to launch. More investigation needed though.

I think I might change the fail safe to just auto-land, rather than RTL.

I may also do a complete rebuild and see if I can take the opportunity to make my quadcopter lighter and bit more agile.


Actually, the GPS didn’t suddenly report a wrong position – and in fact, arducopter has protection against that exact kind of GPS glitch (it ignores sudden impossible increases in GPS position).

What actually happened is the GPS position slowly drifted away from where it really was, avoiding the arducopter glitch detection, until it went outside my configured geofence distance. At that point, it went into failsafe mode and tried to fly where it thought home was (RTL – return to land).

So, I’ve changed the failsafe mode from RTL to just “land” for now and am investigating the GPS problem (though I was at the bottom of my garden which has poor GPS reception).

Booting Thinkpad firmware updater from a USB key

I have a Lenovo Thinkpad T431s running Ubuntu. For those of us not running Windows, Lenovo provide a bootable CD image for their firmware updates. The Thinkpad T431s does not have a CD drive and the ISOs Lenovo provide will not boot from a USB key.

It’s trivial to provide images that can boot from a USB key, but Lenovo instead just assume you have an external USB drive because they’re dickheads; or incompetent. Or both. Let’s assume both!

Anyway, you can convert their images into something you can write to a USB key if you know the magic incantation.

You just need the geteltorito command, which is provided by the genisoimage package on Ubuntu.

The isoinfo command (in the same package) shows that the iso has an ElTorito virtual disk section, which you can’t see normally – it’ll just look like an empty CD if you mount it.

isoinfo -i fwsx04.iso -d

CD-ROM is in ISO 9660 format
System id: 
Volume id: FWSX04
Volume set id: 
Publisher id: 
Data preparer id: 
Application id: NERO BURNING ROM
Copyright File id: 
Abstract File id: 
Bibliographic File id: 
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 15542
El Torito VD version 1 found, boot catalog is in sector 20
Joliet with UCS level 3 found
NO Rock Ridge present
Eltorito validation header:
    Hid 1
    Arch 0 (x86)
    Key 55 AA
    Eltorito defaultboot header:
        Bootid 88 (bootable)
        Boot media 4 (Hard Disk Emulation)
        Load segment 7C0
        Sys type 6
        Nsect 1
        Bootoff 1B 27

And you can extract the ElTorito image like this:

geteltorito fwsx04.iso  > fwsx04.img

And then you can just write that image file direct to your USB key. In my case, my USB key shows up as /dev/sdb

dd if=fwsx04.img of=/dev/sdb

then you can shutdown and boot from the USB key and the firmware flashing utility will execute.

Or you could buy a Lenovo external DVD drive just for doing firmware updates; yeah thanks Lenovo.

Avoid quadcopter crashes with throttle failsafe

I crashed my quadcopter last week due to flying out of range of my transmitter, causing my quadcopter to drop out of the sky. This happened because I hadn’t calibrated my throttle failsafe properly.

This is for my Spektrum DX8 transmitter and AR8000 receiver, but it’ll be the same for most Spektrum devices (and the theory is most likely the same for any transmitter/receiver)

The theory

The theory is simple: Your receiver records your transmitter’s throttle position when you first bind them together. From then on, if the receiver loses contact with the transmitter, it defaults to outputting that throttle setting to your flight controller.

So usually, you’d make sure your throttle is down when you bind. So then, if you’re flying along at high throttle and go out of range, the receiver will just throttle down (and your quadcopter will drop out of the sky like a potato without a parachute).

Most flight controllers (mine is an APM 2.5 running ArduCopter 3.1.1) are able to land (or return to the launch point) automatically, but it needs to be able to differentiate between losing signal and you just throttling down (maybe you’re doing a stunt, or testing Newton’s law of universal gravitation).

The trick is, to have your transmitter output a lower throttle setting than the lowest stick position when you bind it to the receiver. That will allow your flight controller to tell the difference between you throttling down, and your receiver going into failsafe mode.

Throttle down low

There are a couple of ways to get your DX8 transmitter to go lower than the lowest throttle tick position but the simplest I found was setting the throttle travel setting temporarily:

  1. power on your DX8
  2. click the roller on the right to bring up the function list
  3. select “Servo Setup”
  4. select “Travel” and “Throttle” (actually the defaults)
  5. change the left hand “100%” up to the highest it’ll go (for my DX8 that was 150%)
  6. click the back button to get back out to the menu
  7. power off your DX8



Now, your lowest throttle stick position is outputting a value of something like 920 to your flight controller. Now you go through the binding procedure. As a reminder:

  1. power transmitter and receiver off
  2. connect your bind adaptor to the bind plug on your receiver
  3. power on your receiver
  4. power on your transmitter whilst holding down the bind button (make sure your throttle is down!)
  5. wait for bind to complete
  6. power everything off and remove bind plug from receiver
  7. power everything back on, make sure binding worked.

Now you go back into the “Server Setup” menu on your transmitter and reset the travel back down to 100%, so your lowest throttle stick position is back to normal (around 1100).

So now, your lowest throttle stick position outputs something like 1100 to your flight controller, but if you power off your transmitter it will drop to something around 920.

Configure your flight controller

Now you can configure your flight controller to land, RTL or quantum leap or whatever when it can detect that it is out of range. On my ArduCopter, the defaults were all good (anything below 975 detected as failsafe) – I just had to enable failsafe.

Animal Abolitionism and Rationality

I was listening to a Philosophy Bites interview with Gary Francione about animal abolitionism. Animal abolitionists argue that animal welfare reform is nonsense and animals should not be regarded as things to be owned and used. He’s very compelling and his apparently clear reasoning is quite convincing.

During the podcast Francione explained the philosophy of Peter Singer, considered the founder of the animal rights movement. Singer essentially argues animals don’t understand death therefore they don’t suffer knowing it’s coming so killing them is not causing suffering.

Francione doesn’t agree and counters by arguing that the animal would obviously prefer to live rather than be killed.

At a first look, this seems to be clear reasoning but in actual fact it’s a bit of a switcheroo. Singer says it is ok to kill animals because they cannot reason about their own death. Francione says that if they could reason about their own death, they’d prefer to live, so killing them is morally wrong. But Singer’s argument would not apply to an animal that could reason about its own death!

By instilling the animal with the power of reason, Francione transforms it into an animal that Singer would not support the killing of anyway. Singer’s argument only applies to animals that cannot reason in that way!

So we should eat meat?

It’s important for me to make clear that I think Francione’s argument for veganism is probably stronger than Singer’s argument for eating meat (or at least stronger than my own understanding of Singer’s argument at this stage). Beyond the theory,  it’s not really possible to avoid unnecessary suffering to an animal during the meat production process. And any suffering at all is arguably unnecessary, since most people do not need to eat meat to survive. It’s not quite this simple, but I think Francione is broadly right.

I still eat meat though. I’m generally quite careful about the source of my meat, and often eat vegetarian wherever I can’t be sure of the source but I’m still not really convinced I should be eating meat.

Yet I still do eat meat. It’s easy to say humans are rational beings and how that separates us from other animals, but how many of us actually live rationally? Clearly I don’t!