Make America Kittens Again

Leave a comment
fuckwittery / geek / journalism / kitten block

It’s been a weird week.

Back in February, someone* asked if I could do a Trump version of my UKIP blocking plugin. About five small code changes later, I had one in the Chrome store:

Since then it’s been ticking along, used by only a couple of hundred people including me, and gaining a few users each day.

And then, out of nowhere, I got an email about it, and then a message on Facebook. I found out it was in The Metro. Then I found out it was on Bored Panda, and the Daily Dot.  It chalked up my first, and probably only, appearance in Glamour (and via Glamour, Teen Vogue). Soon all the big repost-y blogs were on it – Business Insider (er, business?), Mashable, and everyone’s favourite content-aggregation-turbine, the Huffington Post. It went international: Le Figaro somehow managed to turn it into a video item, here it is in the news in Iran (where a few outlets ran it), and in Japan. And meanwhile, on YouTube:

The result of this: currently around 34,000 users (update – now well over 40k), and over 50GB of traffic per day to the kitten images (which, as of v1.0.1 I’ve moved onto Amazon S3). I make that, give or take, 200,000 kittens per day (KPD). And someone – I have no idea who – set up a shop selling horribly ugly MAKA merchandise. I got a few really nice emails from people who liked the extension, while a few people online got really mad at it. So it goes.

Also, from a news point of view, a few things struck me: many, many reports listed the extension as “new”, which of course it isn’t. One, which I won’t name, misspelled “president”. Of all the sites that covered it, only one got in touch to ask me why I made it. And it’s really hard to work out why the whole thing suddenly took off like this – as far as I can tell, the Daily Dot got there first, and then it was effectively reblogged out from there, but I may be wrong.

If you’d like to try the extension, it’s available here, and the code is on Github.

* I’m embarrassed to say I can’t remember who – sorry!


Lumos Helmet Review

Leave a comment
geek / reviews

I’ve been cycling to work in London, a few times each week and 16km each way, since 2012. For about half the year, that means riding through the dark, and so I’ve become the proud owner of a large number of LED bike lights. As well as lights front and back, I’ve taken to wearing both front (a Lezyne spotlight-type) and back (an old CatEye held on with plastic tags) lights on my bike helmet in order to present a larger shape to cars coming up quickly.

In July 2015 I heard, via press release, about a forthcoming Kickstarter for the Lumos Helmet – a bike helmet with integrated lights, including a brake signal and turn indicators. I backed it, and last week the finished product arrived. As the company is now taking more orders, I thought I’d jot down a few thoughts based on my experience so far – and then update this at the end of winter with a proper conclusion based on several months of use.

Anyhow, here it is, charging up:


There’s a photo with the lights on at the top of the post, and I’ve put a video of the lights in use further down.

My first impressions are generally positive. The helmet looks and feels well made, and the harness – which has a tightening wheel at the back – is reasonably comfortable.  It feels a bit odd to me right now, but that’s probably because I’ve used the same old helmet (a Giro Savant) for five years. One thing I’ve noticed is that on the Giro there’s a lock at the point where the straps divide on each side (the middle of the Y shape, if you see what I mean), but on the Lumos there isn’t – this makes forward/back adjustment a bit more fiddly.

With a battery and electronics inside, the helmet weighs a bit more than usual – I make it around 450g compared to 250g for my Giro. It’s early days, but at the moment I notice that I’m wearing it – this might well pass.

The indicators are activated by a small remote. Here it is on my commuting bike:


The buttons are good – clicky and thumb-sized – and flash when active. The unit attaches exactly as a Garmin GPS does – rubber bands hold a small base in place on the bike, and the device twists into that. If you’re using flat handlbars you could probably fit the whole thing under one thumb, or there’s an alternative mount:


.. shown here on my kid-carrying bike with the actual remote removed. Both the remote and the helmet charge using the same USB cable, and an app allows you to check the battery on each. You can also receive alerts:

Lumos helmet alert

(click for full size) which are handy, although the charge percentage does sometimes vary (turn it off at 75, it comes back on at >90). My daily commute – 45mins each way with the lights flashing – seems to drain about 30% of the helmet battery, and put barely a dent in the remote’s charge.

The lighting has three modes: solid light, slow flashing and fast flashing, which cycle by tapping the power button. A long press turns the helmet off. The indicators are push for on, push again for off, and there’s a fairly loud beep from the helmet when they are activated, so you know the remote control signal has been received.

Here’s a quick video to show the lights in use and the various modes:

Sorry about the rustling; it’s unusual to shoot videos wearing full Gore-tex cycling gear. One thing to note is that the automatic brake light feature, as promised by the Kickstarter, is currently “beta” and disabled by default – I haven’t enabled it, as there’s no way for me to tell if it’s working properly or not, and for now I’m quite happy with the bright, flashing rear light.

As for a verdict: well, I don’t think it’s possible to properly judge the Lumos until I’ve used it for at least a few months of winter, and through some torrential rain – I will update this review when that’s the case. For the moment: it feels well made, seems to work as it should, and the remote in particular is better than I’d hoped. At the current price of $179 (about £140) it feels a little bit expensive; although my usual helmet costs £40 and you could easily spend the same again on lights, that’s still another £60 or so to add the indicators and convenience.

If you do want to buy one, the code XUDVLC should get you $25 off until the end of December 2016 – it also gets me $25 credit, although I don’t think I’m likely to need a second in the near future.

iPhone SE Review

Leave a comment
geek / reviews

I recently traded in my somewhat worn iPhone 5S for the newer SE. Before buying I read a load of reviews, none of which answered the three questions I had. So, after about a month’s use, here they are:

1) Is it noticeably quicker than the iPhone 5S?

Yes, but only in a few apps. Safari’s quicker to render some pages. Pokemon Go runs beautifully, when it was a bit laggy on the 5S.

2) Is the camera actually any better?

Yes, it autofocuses much more quickly. Good for snapping moving cats / wriggling babies.

3) Is the device itself distinguishable from a 5S in any way?

It has “SE” on the back, and that’s about it. It feels as solid, too – I’ve already dented the case, with no ill-effects.

So there you go.

Relationship of applicant to intended passport holder – what if it’s me?

Leave a comment
fuckwittery / other
Screen Shot 2016-05-23 at 08.35.47

The new online service for renewing a UK passport is pretty simple – until you get to the form above. If you’re filling in the form for yourself, there’s no guidance on what to do with the “Relationship of applicant to intended passport holder” section – should you leave it blank, or write in “self”, or something else?

Apparently, the answer is that either works:

.. and I can confirm, as I did it myself: leaving this box blank works just fine.

What the Robot Reporter learned from 10,000 news tweets

Leave a comment
fuckwittery / geek / journalism / Uncategorized

In January 2015 I put together a simple twitterbot called Robot Reporter. The idea was to see if I could keep track of breaking news by monitoring Twitter for the journalists who use it as a way to find images of newsworthy events.

It works a little like this. Something happens, and a user photographs it:

A journalist spots that tweet, and requests permission to use the image:

The Robot Reporter picks it up, and retweets the original – on a good Twitter client, anyone following the robot can see the original tweet content and media:

It looks for new items every couple of minutes. And, despite a few hitches along the way (see below), it’s proved pretty effective – breaking news stories from the English-speaking world very often appear in my feed before I’ve spotted them elsewhere (even if, as has happened a few times, they’re taking place just down the street in London).

I’d always meant to do a bit of an analysis on what kind of news was picked up, as I thought it would be interesting to see in which cases media organisations source images and video this way. To that end, as well as republishing each tweet, I stored a copy of its text in a database for future reference. It took a while to get around to (I work for a small business, and have a small person to look after at home), but having passed 10,000 tweets I finally managed to run some reports.

Here’s what I learned.

What the Robot Reported

I wanted to perform a rough analysis of what events were most commonly published by the robot. To that end, each tweet was broken down into words. @-names and URLs were discarded, along with punctuation, words of two characters or less (which are unlikely to be lexical) and a few words (and, the, are, etc) that I knew would crop up frequently while providing no insight. The incidence of all the other words was tallied in a (big) database table.

With 10,220 tweets analysed, and after the filtering noted above, the script processed 66,030 words of which 17,953 were unique.

Fire and Emergency

The biggest result was no real surprise. Even a quick glance at the robot’s feed on any given day tends to show at least one thing burning, and “fire” was by far the most common word reported (1,123 instances).

Also common were “police” (254) and “car” (253), “street” (179), “people” (172),  “house” (156) and “accident” (120) – all items that probably related to the everyday crime and emergency incidents that make up most local news – but none of them came anywhere close to the interest in fires.

Crime and Mortality

When it comes to crime, there’s a depressingly high number of “shooting” (52) related words – far more than “stabbing” (12) – six “shooter” or “shooters” and seven instances of “lockdown”.

The last 16 months saw several bombings and “bomb”-related incidents (including the discovery of unexploded munitions, etc), resulting in 62 entries. There were also 70 “explosion”s – not all of which were acts of terrorism or crime.

Across the whole database, 20 entries listed people “killed”, and 28 “dead”. Either could be referring to one or multiple people. There were 3 instances of “murder”.

Peace and Love

There were 68 instances of “love”, 25 of “lovely”, 50 of “happy”, and 3 of “yay”. 69 people said “thanks”.

Weather Events

As you might have expected, the robot recorded a lot of interest in the weather. Snow leads the way at 159 (along with “snowing” (28) and a million variants – I like “snowzilla” and “snowmageddon”), followed by “storm” (119) and “hail” (97).  There were 31 rainbows, but only one “magicalrainbow” and one “doublerainbow” (and one “rainbowbagel”). Oh, and while we’re on uncontrollable natural events: 13 tweets including “earthquake”, but 109 for “flooding” and 36 for “flood”.

If you total up all the variants of the most common weather event words you get:

Apparently rain isn’t really worth tweeting about (33 instances).

Waiting in Line

And people like to tweet while they wait: 129 entries were American-English speakers (presumably complaining) about a “line” or “lines”, while here on rainy-misery-island we recorded 15 instances of “queue” and one “verybritishqueue”.


For my fellow SE-Londoners: 5 mentions of Lewisham, 2 of Eltham, 1 of Hither Green – and 13 of Catford (for comparison: Brooklyn got 16).


Lurking in the low-incidence words: balhamgiantfoot (see below), “mctrainface” (first name “trainy”) and probably many more. Oh, and 3 instances of “wtf” itself.

View the Data

Obviously this is just a very brief overview of the data – there’s probably much more to be found. If you want to have a look, I’ve put a snapshot of the word incidence data, as it stood on 15 May 2015, here – if you find anything interesting in there, please let me know.

What Went Wrong?

For a project that started life on a whim, I’m pretty happy with how The Robot Reporter turned out – it’s proved interesting to watch. But that’s not to say that it hasn’t been without its problems. In particular:

Linking to Sources

The original bot posted the content of the source tweet (credited), rather than a link to it. This meant that the media showed more reliably in all clients, but also – after a couple of months – got my API key blocked by Twitter for a ToS violation. A dumb mistake, but easily fixed, and the current version is in compliance.

A Reporter with no Ethics

More importantly, I learned the hard way that the bot was only as good as the journalists it followed. When really horrible events occurred, some journalists would request publication rights for images that were, frankly, horrific – the kind of thing that, as a journalist, I’d assumed nobody would think of publishing. And, because the bot has no ability to make an editorial judgement of its own, it would republish them too.

The first time this happened, I just stopped the whole thing while I worked out what to do. The current software has a kind of safety switch built in – in the event of something terrible happening, I can suspend publication from a web interface. While this switch is active all news-y tweets are logged, but not published.

What Next?

As of today, the Robot Reporter has been keeping busy for 16 months, and has reported around 10,200 tweets. I’ve recently moved the database over to Heroku Postgres (boring tech section below, if you’re interested), allowing me to tweak it more easily, and updated the code for the first time in ages, so it should be good to keep running into 2017 at least.

Over the next 12 months, I think it’d be interesting to monitor the journalists working on Twitter as well as their sources. The bot will keep tweeting as it is, but I plan to capture the tweets requesting publication rights as well as their sources – in six months or so we’ll see if this has turned up anything interesting.

In the meantime, you can follow the robot here.

Postscript: Boring Tech Stuff

For anyone interested in how TRR works, here’s an overview. It’s one script, of about 100 lines of PHP, running on a Heroku web dyno (hobby class). It uses the TwitterOAuth library to search and publish to Twitter.

The main “report” script is called every few minutes via a CRON job on one of my servers. It looks for tweets with a certain pattern – asking for permission to reproduce a photo or video – and then filters them to include only tweets that are replies. If the tweet to which a particular request is replying contains media, it’s a candidate for publication.

Similarly, a new “index” script is triggered regularly, processing a maximum of ten tweets at a time into words – so the word indexing may lag behind a little in really busy periods, but soon catches up. I should really rewrite this as a worker dyno task.

A database table holds a history of tweets it has published (tweet id and text), and there’s also a record of the last tweet ID its search turned up, to avoid duplication. This was originally a MySQL database on Appfog v1, but it’s now in Heroku Postgres. The “killswitch”, which can stop publication if necessary, is a Heroku config variable.

Running the whole thing costs about £10 each month. I’m still not entirely sure why I’m doing it, other than that it’s kindof interesting.