• How to avoid awkward silences (at video game themed comedy karaoke nights)

    An image of a man performing video-game themed karaoke
    Maraoke, yesterday.

    For the last few years I’ve been helping to run a sort of karaoke night called Maraoke, monthly-ish in London but also at video games events around the world. Maraoke works basically the same as karaoke – you pick a song you know from the list, we call you up to sing, you sing along to a backing track using synchronised lyrics – but with the twist that the lyrics aren’t the ones you remember, because they have been ‘modded’ to make dumb jokes about video games (and tangentially related matters).

    An example of Maraoke lyrics

    The absolute worst part of the night for me is the moment just before each song starts: I’m usually running the laptop that powers all the video and audio, so I’m the person pressing the play button. And invariably when I do there is a pause of indeterminate length – ideally slight, too often not that slight, before the song actually starts, during which I curse whoever built this piece of shit software, i.e. me.

    The ‘software’ is a couple of browser windows connecting to a website I built: one window plays the music and shows the words to sing along to, the other lets you queue up the songs. A web-based system makes lots of sense in some ways – it’s easier to maintain the library of songs if they’re all in one place that can be accessed by anyone with a log in, easier to get the night back on track if someone e.g. steals the laptop1, and also I (at least vaguely) knew how to do that at the point when we decided we needed a new system.

    The key problem this introduces is that you need a reliable internet connection to use it, which is more of an ask in 2024 than you might think/hope and it’s impossible to know what that’s going to be like ahead of time. Hence the indeterminate pause. When the ‘play’ button is hit in the control window, the following things happen:

    1. The play window sends a message out to the display window saying ‘play a song with this ID’.
    2. The display window downloads the song lyrics from the Maraoke server.
    3. The display window tells the audio element on the page to start downloading the backing track.
    4. When it has enough of the audio that the browser thinks it will be able to download the rest in time to play it all the way through, the display window plays the song and starts the animation sequence that shows the lyrics at the correct time.

    So the gap between hitting play and a song starting is necessarily determined by ‘how long it takes to download the audio’ – but if there is a long gap after you do hit play, it’s unclear whether one of steps 1-4 has broken down entirely, or whether you are on the final step but the browser is just taking a long time to fetch enough of the audio because everyone else in the bar is using the WiFi for ‘TikToking’.

    Here’s an example of what I mean – on the left you can see the lyric window, on the right the control window – the video starts as I click the play button. This song in particular has a custom background video that’s also being loaded in at the same time as the audio and lyrics, so there’s even more data required.

    In Chrome’s DevTools you can simulate crappy internet connections but I forgot to turn that function on and it turns out my home internet connection is rubbish enough to make the point: there are about 10 seconds between hitting play and getting the Maraoke logo – i.e. the song starts2. That’s a lot of time for the audience to be staring at a possibly already nervous singer, while the rest of the Maraoke team stare at me and I stare at, or give the finger to, the computer.

    Generally my ‘‘solution’ to this is just to bring the laptop with the development version of the software on, which has all the files on it already, so the downloads become effectively instantaneous. But this obviously eliminates a lot of the advantages of having it run in a web browser, means I have to remember to download any new songs onto my local version, and if I want to install a local version on anyone else’s machine it often requires e.g. caring about ‘Windows Subsystem for Linux’ and you only get one life don’t you.

    The reality is that in the vast majority of cases we will have some kind of internet access, and even if it is slow, we don’t need a huge amount of data – the lyrics data is a few kilobytes, a backing track is a few megabytes big, even for songs with custom video you’re talking 50 MB-ish, not a lot these days. But what we need is to have that data *before* we hit play (and, ideally, to know that we have that data).

    Web browsers cache files (so if you visit a page a second time the browser doesn’t necessarily need to bother loading *everything* again) – so my thought was that there could be a way to tell them what to cache beforehand, and it turns out modern browsers have a specific way of doing this – a CacheStorage interface that allows you to request a file and store it in the cache.

    caches.open("nameOfCacheGoesHere").then((cache) =>

    You can also check whether or not a given file is in the cache and retrieve it if it is:

    caches.match("someExcitingFile.mp3").then((response) => doSomethingCleverWith(response))
    The Maraoke queue, before caching
    A queue, yesterday

    The Maraoke system already allows for songs to be queued up in advance, so it’s easy enough to tell the browser window to request the queue, check what the next song is and what files it requires, loop through those files and put each into the cache, then move on to the next song in the queue.

    On the control side of things we can again iterate through the queue, check whether the necessary files are in the cache, and indicate against the on-screen queue that a song has everything ‘ready to play’, like so:

    The Maraoke queue, after caching
    NDA actually stands for no-one dies alone. It’s not a cult, promise.

    (The white dot means it has data, the slightly faded out ones mean the song wants data but doesn’t have it yet. Songs with a second dot have video or other media assets to download as well as the sounds and the words.)

    This is all very good and clever and I was very pleased with myself until I checked the network tab of Chrome’s DevTools – this shows every file the browser is requesting for a given page. And when the browser loaded the new audio into the page’s audio element, instead of using the cached version it was just requesting the file from the server again, making the entire endeavour completely pointless.

    The reason for this, I think, is that there are a couple of different ways for a browser to request a file – when I’m caching the audio file it downloads the whole thing and shoves it in the cache, but when it requests the file an audio element it wants to be able to use the data it’s downloading before the download has complete (so you can play the start of the song even if the end hasn’t been downloaded yet), so requests it in chunks. Which is probably why it doesn’t bother to check the cache? Either that or it just hates me.

    But you can work around this: when you check if a file exists in the cache, it actually returns a Response as though you’d requested the file, so instead of just giving the audio player a URL and hoping for the best, you can check if the file exists in the cache, and if it does, retrieve the data and tell the audioPlayer to use that instead.

    caches.match("someExcitingFile.mp3").then(response => {
    //If the cache tells you it has a copy of the file, return the response as a blob (a Binary Large Object, basically a big lump of data). If the file doesn't exist, return nothing.
      if (response) {
        return response.blob()
      } else {
        return null
    }).then(blob => {
    //If at the end of the previous step you got a blob, give the blob a URL and tell the audioPlayer to look at that URL, otherwise tell it to look at the original URL for the file.
      if (blob) {
        audioPlayer.src = window.URL.createObjectURL(blob)
      } else {
        audioPlayer.src = url

    Does this work? Well, if we turn on caching and check the same song as before on the same dire internet connection, let’s see:

    From 10 seconds to less than a second. No more waiting to sing about which of the Pokémon you most want to have sex with!

    Maraoke lyrics about having sex with Pokémon
    1. Not a hypothetical, LOL. ↩︎
    2. Shortly after this clip finished it stuttered slightly, indicating the browser had actually underestimated how crap the connection was and had to pause to load more of the media. ↩︎
  • Why do London buses keep disappearing? (And how I’m trying to find them again).

    A Bus, disappearing. (Badly) edited version of photo from Bus Routes in London Wiki/JamieAmoah

    Here’s an annoying thing that happens to me fairly regularly: I’m waiting at the bus stop for a bus. I pull out my phone to check when the bus is coming. It tells me the bus is coming in 9 minutes. I check again, it says it’s coming in 8 minutes. Then I check *again*, and the bus has vanished.

    Admittedly, there are worse problems than this in the world, and typically a few minutes later it reappears on the TfL Go app1, shortly before physically appearing in front of me. But this is not a great “user experience”, especially if I get to the bus stop in the period where the bus has ‘vanished’, or if I’m actually not at the bus stop but sat at home trying to minimise the amount of time waiting at the bus stop in the cold and now having to figure out which buses do or don’t plausibly exist.

    But hey, you kids today don’t know you’re born: who remembers when to get a bus in suburban London you would just stand at the stop for somewhere between 5 and 65 minutes in the hope that one would eventually turn up? Who remembers when the bus man brought round the bus once a week? Who remembers dying after getting run over by a REAL bus? We loved it!

    Still, having survived into the exciting age of apps, and Transport for London having gone to all the bother of making sure you can find out when the bus is coming, it is a bit annoying that the system seems to constantly break. And what’s weird is I am pretty sure this a new problem, or at least one I’m experiencing more often, with the same buses at the same stops. So what’s going on?

    The answer, possibly, is that the exciting new technology that powers all this stuff is not now very exciting or new. When you open an app to check when the bus is going to come, what that app is doing is accessing TfL’s own system, which has a big list of predicted arrival times for different buses at different stops. Ultimately this derives from the iBus, or rather, the iBuses – an onboard computer aboard every bus in London that does various important cyber-things, including transmitting the position of the bus back to TfL so they can update the predicted arrival times at the remaining stops on the route. But iBus is now quite an old system – it first introduced back in 2006, which is a long time ago in real terms, but even longer in technological ones.

    A TfL press release from 2009 announcing that iBus had been fitted to every bus in the city boasts that the system uses technology “including satellite tracking and GPRS data transfer”. GPRS (sometimes called 2.5G) was what we used to use in the old days to browse a very crappy version of the internet on very crappy mobile phones, which was impressive then. Who remembers when the GPRS man used to bring the GPRS? Well, actually this might be the problem: maybe the GPRS man doesn’t come around as often as he used to.

    Replying to a query on TfL’s online Tech Forum, James Evans, Digital Service Performance Manager at TfL explained that, as of January 2023, their working theory was that:

    coverage on 2G has been degraded across London by the cellular networks so that 4G & 5G services can be provisioned on existing towers

    TfL Tech Forum

    Which makes sense – the companies that run the mobile phone networks intend to stop supporting both 2G and 3G services by 2033 – though they have ostensibly given Ofcom a special pinky promise that they won’t break anything before then, it seems plausible that in reality there would an increasing number of issues with systems relying on these services. What is presumably happening with the disappearing buses is that when a vehicle passes into a 2G blackspot, iBus fails to phone home its location and so no update is passed to the arrival predictions service.

    What I don’t quite understand is why this necessarily results in the bus completely disappearing. What I would do, if I were to design such a system, would be to keep track of the last known predictions – if a bus ‘disappears’ for a few minutes it seems unlikely that the predicted arrival time is going to be that far out.

    I mean, if you spend too much time on your own and have sort of lost it you could actually put this into practice, write a script that checks TfL’s publicly accessible arrivals data a few times a minute, dumps this data into a database, then check the data to see not only the most recent arrival data, but the predictions for any buses that were in previous sets of arrival data retrieved within the last few minutes. For example.

    Some buses, yesterday.

    This is what I knocked up – a little webpage that shows you the arrivals due at a given stop, how much time remains until the predicted arrival, and when the server it connects to last saw information about a given bus2 – so even when it’s gone from the TfL data, I can still see when it will probably arrive.

    So why doesn’t TfL’s own app do this?3 I don’t want to be one of those twats who has spent 5 minutes thinking about a thing and thinks he’s outwitted those who worked for years on a thing.

    For one thing, when they built the arrivals prediction system maybe it seemed genuinely unlikely that you’d lose GPRS coverage – and some of the stops I have the problems are in slightly leafier more spread out parts of London, so the coverage problems may well be getting worse here faster than anywhere else.

    And you’ve also got the problem that the bus could genuinely have “disappeared” – it could have broken down, got into an accident, or terminated early for arcane service regulation reasons. Who the hell knows what happens if a bus goes onto a sudden diversion? Is it worse to promise a bus that doesn’t turn up or deliver one that hasn’t been promised? I can see why you would want to minimise the former – and whereas I can write myself a website that gives me enough to assess the probability a bus is ‘real’, this is a slightly complex idea to communicate to a user who hasn’t spent too much time thinking about buses.

    A practical explanation might well be that TfL is simply waiting for iBus2, a replacement for the existing systems, the procurement of which is a ongoing concern – though one that’s been delayed to the point where the contract with the existing iBus provider has been extended to at least 2027. Which must be causing some anxiety if the network that system relies on is continuing to fall to bits…

    Anyway, if you’re hoping this is the bit where I announce that I’m taking my work on this public and launching my own exciting bus app, well, um, sorry, no. There are presumably 678 things wrong with what I’ve done that I haven’t noticed yet! You’ll just yell at me when it breaks! I’d have to make ‘an icon’! If you want know where the missing buses go to you’ll have to make your own stupid app.4

    1. Other apps are available, but seem to show the same slightly unhelpful information. ↩︎
    2. It turns out updating the amount of data necessary quickly enough that you can get useful information back out of it is *quite hard* and if you know what an SQL query is you would either be impressed or horrified at the weird janky solution I cobbled together from various different Stack Overflow answers. ↩︎
    3. For all I know it actually does, but chooses not show data older than a given time that’s too short to help my specific situation. ↩︎
    4. Or pay me a million quid, maybe I’ll do it then. ↩︎
  • #89: 211 (2018)

    My name is Ed, and I, like all of you, watch a Nicolas Cage film every week, pick six numbers from within that film, then play the National Lottery with those numbers.

    This week: a film whose title is a number! Surely a good sign, even if it is too long a number to be of use when playing the National Lottery where you can only go up to 59. Film-titling idiots

    As an exercise, watching everything Nic Cage has ever done as of 2018 is a lot more trying than it was when I was watching everything Nic Cage had ever done as of, say, 1997. He was making films that, even when they weren’t always good, you could sort of generally understand why they existed. And there was money involved: you could recognise at least one of the other actors! Plus he wasn’t making 15 of them a year!

    Anyway, here’s 211, starring Nic Cage and ‘Dwayne Cameron’ from ‘Power Rangers Operation Overdrive’ as cops trying to stop a bank robbery, loosely based on real bank robbery North Hollywood Shootout, which possibly involved shooting. 211, by the way, is the California police code for ‘a robbery is happening’ – the film isn’t set in California, so this doesn’t make any sense, but a) they never bother explaining the title within the film itself anyway and b) that is the least of our problems!

    It’s a bit of a thing now where Cage will do these films that he is barely in, knocking off all his scenes in a day or two just so the producers can trying and flog it on the promise of a ‘Hollywood star’ (but are there seriously people who watch these who aren’t doing a podcast or trying to win the lottery or whatever?). I had my concerns that this was what 211 was going to be, as we start out with a Cage-free ten-minute scene of extremely low-rent action involving a 4 man team of evil mercenaries, cast as if to suggest that this whole film is the vehicle for an appalling rock band.

    In fact, they are: the son of Nicolas Cage, Weston Cage Coppola (quite funny to call yourself that when the whole point of your dad changing his name was so people didn’t think he was relying on family connections), the son of Quantum Leap creator, Donald P. Bellisario, and two other guys with dads not famous enough to determine whether nepotism was involved.

    Anyway, the film immediately cuts to a black high school kid being beaten up by racist bullies in a toilet, then to a cop finding out that his wife is pregnant, then to a bank manager getting ready for work, as though you’ve sat on the remote and everything on all the channels is a different very cheap-looking film made by the same not very good director. (York Alec Shackleton’s IMDB bio starts with a long paragraph about his snowboarding career, which is always a good sign I reckon. Sample line from his Wikipedia page: “Shackleton quickly landed a lead role in I Know What You Did Last Winter and received high marks from both critics and audiences[citation needed]” Hmm.)

    Anyway, eventually it turns out that a) this all does fit together and b) Nicolas Cage is properly in this, as the father-to-be cop’s partner, and father-in-law, with hilarious consequences! The story is that the Kasabian mercenaries are going to break into the local bank to steal some money they think they’re owed and only THE POLICE can stop them, with the help of the aforementioned high schooler who has been punished for beating up the bullies by being sent to spend a day riding around in the back of a police car, which, hang on, don’t they sometimes need that part of the police car?

    But also there are about 46 other characters that the film insists we keep track of for no readily available reason – the kid’s mum, who is a local surgeon (I WONDER IF THIS WILL BECOME RELEVANT), Nic Cage’s character’s daughter who keeps looking at baby toys so we remember THE STAKES, the people in the bank, a male and female pair of cops who ‘do banter’, various other police including THE CHIEF, a SWAT team, and an Interpol agent who has followed the baddies from wherever it was they were shooting at at the start and forgets to do anything of of any consequence.

    There is nothing, I suppose, conceptually wrong with the idea of showing these events from lots of different perspectives, but in practice it’s just sort of dully hyperactive – there’s never enough time to even notionally get invested in any of the characters, so the film doesn’t leave itself enough room to do the usual sleight of hand. Halfway into the film, the unfortunate high schooler is wailing as he’s cradling a dying police officer: but in terms of screentime we’ve only actually seen them together for about three minutes because it was more important to find out what someone else’s cousin had for breakfast, so the effect is just ludicrous.

    If there is something interesting in this film, it’s that I don’t even know what it’s failing to be – is it just a really inept attempt at a ‘commercial’ action movie or is it actually supposed to be a sort of high concept piece about our intertwining lives maaaan?

    Nicolas Cage is sad, doesn’t like kids with their cell phones, and then learns to be happy, and that cell phones can also take pictures of your family. The film is only 86 minutes long. That is all I have to report.


    7 – There were seven months between Cage’s dead wife’s diagnosis and her being dead of whatever she was diagnosed with. Upside: she didn’t have to be in the film!

    16 – The Interpol agent leaves the interstate to the town where the bank is at Exit 16, according to her GPS.

    23 – Nicolas Cage’s police car is police car 23. 23 is an Illuminatus secret symbol or something isn’t it? Imagine being obsessed with finding meaning in hidden numbers everywhere. Morons.

    32 – “This reminds me of that extraction we did in Kabul.” “How many killings did you get?” “Thirty-two.” “That’s right. The legend.”

    33 – Part of the evil bank-robbing involves blowing up a cafe at 1033 Cranberry Boulevard.

    36 – There’s 1.36 million dollars in the bank safe, which doesn’t seem like a lot of dollars when it’s split four ways and presumably is supposed to last quite a long time unless you’re going to knock off banks every few years?


    Lottery draw: 2604

    Date: Saturday 5 December, 2020

    Jackpot: £4,109,513

    Draw machine: Arthur

    Ball set: 5

    Balls drawn: 13,38,47,51,52,59

    Bonus ball: 18

    Numbers selected: 7,16,23,32,33,36

    Matching balls: 0

    Numbers selected (lucky dip): N/A

    Matching balls (lucky dip): N/A

    Winnings: £0 (£0 to date)

    Total Profit/Loss: £-176

    For fuck’s sake. I was going to say maybe I should rob a bank but then realised I have definitely already said that after failing to win the lottery with numbers from another rubbish Nic Cage bank heist movie – Trapped In Paradise? Stolen? Nic Cage, please make a bank heist movie that isn’t shite and WE WILL ALL BE WINNERS.


    Only two decades late, he finally gets to play Superman, in, er, Teen Titans Go! To The Movies.

  • #88: Looking Glass (2018)

    My name is Ed and I watch Nicolas Cage films and pick numbers out of them and use them to play the National Lottery because I’m normal.

    It’s obvious what I get out of a film like Looking Glass: the potential of winning millions of pounds! And presumably Nic Cage and everyone else involved get ‘some money’ for ‘relatively little work’, i.e. the (non-lottery winner’s) dream. But unless there’s a scheme to support Hollywood professionals who are not quite good enough to make real films, neither of these really explain the impulse that at minimum one person with access to money had to make this film happen.

    It starts very vaguely promisingly with Nic Cage and Robin Tunney on the road to an as yet unspecified destination – it almost looks like an actual film, and the presence of Tunney put me in mind of Selma Blair’s appearance in the not awful Mom & Dad from a few weeks ago. 90s starlets are back (if you only watch terrible straight to streaming films)!

    They arrive at a motel which it turns out they’ve bought to help them get over the death of their child??? And then it turns out one of the rooms has a one-way mirror that you can use to spy on whoever’s staying in there? With hilarious consequences!

    There is at least something in this premise, but that the thing is the real-life story of Gerald Foos, a motel owner who adapted the ventilation system in order to spy on his guests. This had been the subject of a book and documentary (Voyeur) not long before the release of this film, and hmmmmm.

    Now, having said that, there’s obviously nothing wrong with making films partly inspired by reality, because that’s obviously: all films. And there’s actually something in doing a sort of Gerald Foos/Rear Window mash-up in which a motel-owning voyeur witnesses a murder (Foos claims he in fact DID witness a murder but no-one’s ever been able to find any other evidence that this happened ).

    But Cage’s character isn’t a Foos analogue – instead the idea is that they’ve bought the motel from a guy who is, and have to figure out what a pervert mirror, a definitely not suspicious policeman played by Buffy the Vampire Slayer’s lamest boyfriend and generally mysterious goings-on add up to. Which just turns out to be the Rear Window thing but done in an incredibly oblique way.

    This image has an empty alt attribute; its file name is Screenshot-2020-12-05-at-16.29.39-1-1024x575.png

    It’s so clunky that it’s tempting to think that they started this as a straight-forward ‘voyeur sees a murder’ thing, or even a direct adaptation of ‘real’ events, but then got scared about being sued or realised they couldn’t get the rights to the Foos story and had to hurriedly rewrite it. But if you’re making a low-budget Nic Cage vehicle in 2018 there may be more prosaic explanations for it not being very good.

    (Why is this film called Looking Glass? Is it a pointless allusion to Alice Through The Looking Glass? Is it a redundant pun because the film is about some glass you can look through? Did they for some reason think that’s what a one-way mirror is called? Wait, is it called that? What if this film is fine and there’s something wrong with me? It’s probably okay. Just keep buying the lottery tickets and don’t think too hard about it. Think about the yacht.)

    But it does make you wonder – Nic Cage as motel pervert has some potential in terms of a fun performance – instead we get Nic Cage as a bereaved dad who gets sort of perfunctorily interested in being a motel pervert in a way that film doesn’t seem have the time or the energy to explore beyond very basic plot mechanics.

    If you told me they quickly improvised this film using sets built for something else I would fully believe you, because there’s an aimlessness about the whole thing, like everyone just wants to get it over with having fulfilled whatever the minimum contractual requirements were. I sort of hope there WAS some bizarre behind the scenes backstory that forced a hurried rewrite because at least that would be there was something vaguely interesting about this film. Which I don’t recommend you watch!


    4 – Near the start, we see a brief flashback to Nic Cage’s dead kid blowing out a cake. I counted four candles. I couldn’t be bothered to go back and check this and have a horrible feeling I’m wrong so if I only get 5 numbers I am going to be FURIOUS.

    5 – An actress called Rebecca Beckham is credited as playing Tommy’s Girl #5, which I guess is at least slightly better than Prostitute #5.

    6 – The first guest at the newly reopened motel stays in room number 6.

    10 – The one-way mirror thing is installed in room 10. Room 10 was where Gerald Foos says he witnessed a murder, which does suggest this was pretty directly inspired by his story.

    22 – Riley (yes, he was lamest one) from Buffy’s cop car has P922 written on the side of it.

    35 – It costs 35 dollars a night to stay in the dodgy sex motel. Would I buy a motel that’s almost entirely used for shagging as a way to get over the death of my child? I guess I can’t say I definitely wouldn’t? At least I’ve learned something about myself today.


    Lottery draw: 2602

    Date: Saturday 28 November, 2020

    Jackpot: £12,032,594

    Draw machine: Merlin

    Ball set: 8

    Balls drawn: 9,27,35,45,46,47

    Bonus ball: 31

    Numbers selected: 4,5,6,10,22,35

    Matching balls: 1

    Numbers selected (lucky dip): N/A

    Matching balls (lucky dip): N/A

    Winnings: £0 (£0 to date)

    Total Profit/Loss: £-174

    ONE NUMBER. My zero streak is finally over! BACK IN THE GAME.

    I just need to get five more of those Big Boys and I will WIN THE LOTTERY!


    211. I hope it’s about the bus that goes from Hammersmith to Waterloo.

  • #87: Mandy (2018)

    My name is Ed and I’ve been playing the lottery by using numbers from Nicolas Cage films, because I believe some kind of magical force will travel out of the films into the real universe and cause me to win millions of pounds. Over the last 5 weeks I have matched precisely zero numbers (including the bonus ball), which may not seem very promising, but is in itself a statistically unlikely thing to happen – there’s a less than 1% chance of it happening 5 times in a row. So I continue, in the hope that something even more improbable will take place.

    If you’ve heard of any one film (well, excluding animations, which we will inevitably get to) Nicolas Cage has made in the past 5 years, it’s probably Mandy, which had the makings of a cult classic from the moment the trailer hit the World Wide Web.

    Director Panos Cosmatos’s debut, the immaculately-styled retro/art/science fiction/horror film Beyond the Black Rainbow, had impressed chin-stroking weirdo film nerds back in 2010, and the idea of dropping an ax-wielding Nicolas Cage into the middle of his follow up had immediate appeal, especially for those of us otherwise suffering through the likes of USS Indianapolis: Men of Courage and Inconceivable.

    The first half of the film introduces us to Mandy, an artist, and Red (Cage), her logger boyfriend, living a peaceful existence in a cabin near the ‘Shadow Woods’, which is rendered substantially less peaceful by a Manson-esque cult leader becoming obsessed by Mandy, kidnapping her with the help of a gang of possibly demonic LSD-fuelled bikers, then burning her alive in front of a helpless Red.

    The second half of the film sees Red on a single-minded, drug-fueled mission of revenge to taking down the bikers and the cult through a variety of hellish, hallucinatory battles involving the aforementioned specially-forged ax, a crossbow, and two chainsaws. Inevitably!

    Mandy (the film) is fairly incredible to look at – Mandy (the artist) is seen painting the sort of lurid mythical art found on the covers of fantasy novels or heavy metal album covers, and this feels like an attempt to directly translate that to film. And on some level it works – at almost any given moment there’s something fun to look at happening on the screen (albeit sometimes ‘fun’ meaning ‘viscerally horrible interaction barbed wire and human skin’).

    And while ‘man on mission of revenge’ is basically Cage’s default setting these days, this at least an imaginative take on it, and his performance of a man losing grip on reality as fast as reality loses its grip on him is dead on the money.

    So why don’t I like this more? There’s just something slightly detached in the film-making, I think – it can get you in the head, and in the guts, but it bounces off the heart. Take the duelling chainsaws sequence – it’s a funny idea, a great visual gag: Red’s about to take out a cultist with a chainsaw when the cultist reveals his own (ludicrously oversized) chainsaw. But once the gag’s delivered, the actual fight that follows feels a bit perfunctory, something to get out the way so they can set up another tableau.

    I feel a bit like a contrarian saying this as there’s a lot to like about it and I get why it’s one of Cage’s best-reviewed films for about two decades, but there’s just something missing for me. It’s almost like it’s designed to work primarily as a set of interesting stills, with the motion between them an afterthought.

    Still, take those images and set them into cardboard wheels and you’ve got the best set of View-Master discs EVER.


    3 – The bloke who made that Too Many Cooks spoof sitcom opening titles video that went viral that one time contributed a pretend advert which is seen on a telly at one point. It is for a cheese called Cheddar Goblin, which we are told was voted number 1 three years in a row.

    5 – There are 5 demonic and/or drug-crazed bikers in the gang, according to the script. To be honest, I lost track of whether they all made it into the finished film.

    13 – Red and Mandy live near Crystal Lake, which is a reference to the Friday the 13th series. Cage has said his performance in the second half of the film drew on Jason Vorhees. Is it notable that 1983, when Mandy is set, was the only year from 1980 to 1986 in which a Friday the 13th film wasn’t released? Who knows!

    20 – The film opens with the quote “When I die, bury me deep. Lay two speakers at my feet, put some headphones on my head, and rock ‘n’ roll me when I’m dead.” This quote is attributed to one Douglas Roberts, who apparently said it just before being put to death for murder on 20th April 2005.

    44 – Red wears a shirt with the number 44 printed on it. Someone on IMDB thinks this a reference to an unfinished Mark Twain story in which a character called either No. 44 or Satan (nephew of his more infamous uncle, apparently) uses his “heavenly powers to expose the futility of mankind’s existence”.

    59 – Jeremiah Sand, the cult leader, is 59 years old according to the script. They originally approached Cage to play the role but he requested the part of Red instead. Which does sort of suggest that he is deliberately going after these ‘man out for revenge’ roles deliberately rather than having to do whatever dross he’s offered. The real shame is that they didn’t just get him to play both parts.


    Lottery draw: 2600

    Date: Saturday 21 November, 2020

    Jackpot: £7,743,072

    Draw machine: Arthur

    Ball set: 7

    Balls drawn: 23,32,37,49,54,57

    Bonus ball: 47

    Numbers selected: 3,5,13,20,44,59

    Matching balls: 0

    Numbers selected (lucky dip): N/A

    Matching balls (lucky dip): N/A

    Winnings: £0 (£0 to date)

    Total Profit/Loss: £-172

    NO MATCHES. FOR THE SIXTH TIME. There is only a 1 in 275 chance of this happening. Actually, I’ve just checked and the last 3 films I did before I stopped last time in 2017 also had no matches, so that’s actually NINE times in a row, and there’s only a 1 in 4500 chance of that happening. Either I don’t understand how probability works or SOMETHING OMINOUS is happening.


    Looking Glass. It’s about PERVERTS.

  • #86: Dark (2017)

    My name is Ed and I watch films in which Nicolas Cage appears, write down numbers from them, and then play the UK National Lottery, which I will eventually win because of this.

    When you decide you’re going to watch everything Nicolas Cage has ever been in to try and win the lottery, you have to set some parameters – for example, I have included TV stuff, but only when it’s substantial and he’s at least partly character (so I didn’t include his legendary appearance on Wogan, but did include the episode of Saturday Night Live he hosted). With films, I haven’t typically concerned myself with alternate cuts – I didn’t try to win the lottery by watching The Wicker Man AND the Director’s Cut of The Wicker Man. That would be insane.

    But I’m making an exception for Dark, which is, debatably, the director’s cut of Dying Of The Light, a 2014 film which ended up being disowned by writer/director Paul Schrader (and almost everyone else involved) after the distributor decided it wasn’t quite boring enough for a straight to streaming Nic Cage film and massaged anything of any interest at all out of the final product. It didn’t win me the lottery, either.

    Schrader was never given the chance to do an official director’s cut, so created his own, ‘released’ only in the sense that it can be seen at university film archives he donated copies to, and something I have definitely never heard of called The Pirate Bay. It’s listed separately on IMDB and Schrader considers it a distinct entity, so on that basis I have deemed it worthy of entry into the canon of Nicolas Cage films you can play the lottery with.

    In case you haven’t seen the justifiably panned and forgotten original, it concerns Evan Lake (Cage), a CIA agent who wants to take revenge on the terrorist who tortured him 20 years ago – but his time is running out because that torture has left him with progressively worsening brain damage-induced dementia. Imagine if the Mission Impossible films had no budget and replaced 98% of the action sequences with depressing sequences of Tom Cruise talking about his frontal lobe injuries and you’re more or less there.

    While Dark is practically just the same material recut, there’s a (partly necessary) jankyness about it which entirely fits a story about a man whose brain is disintegrating – jumpier editing, a rougher soundtrack, sudden switches to versions of a scene seemingly filmed as it was being played back on a monitor – it’s bordering on being an art installation piece. The film collapses entirely into a lurid audiovisual distortion partway through the final scene – it’s all meaningless, maaaan.

    Does it save the film? I mean, if for some reason your children are going to be shot unless you watch a version of Dying Of The Light, sure, pick Dark, on the raw level at which films are pictures and noises it is more interesting. But the original footage is just fundamentally not very good – no-one but Cage gets anything to do whatsoever, and even he struggles to spark anything out of such relentlessly downbeat material. Still, I do want to put on an art exhibition of weird alternate edits of Nicolas Cage movies now, and I do need some funding for that, so I’d better buy a lottery ticket!


    20 – The bad terrorist Muhammad Banir has been dead for 20 years. SPOILERS: he has not been dead for 20 years at all!

    23 – There’s a car chase involving a Romanian police car with the number plate SC23BAR.

    30 – A NAUGHTY doctor charges 30,000 Euros to treat a terrorist’s disease.

    45 – Cage’s character repeatedly does a counting exercise where he counts back from 45 by subtracting 7 each time (45, 38, 31 etc). I misunderstood this totally when picking the lottery numbers for Dying Of The Light and picked the wrong numbers because of it but I’ve just checked and I wouldn’t have won anything anyway, which is good because I’m not sure I could have come back from that, mentally.

    54 – At some point a phone call is made to someone in Kenya – the number starts 254. 2 indicates the international code for a country in Africa, the 54 indicates Kenya.

    57 – Evan Lake’s grave (SPOILERS) indicates that he was born in 1957.


    Lottery draw: 2598

    Date: Saturday 14 November, 2020

    Jackpot: £4,128,919

    Draw machine: Arthur

    Ball set: 6

    Balls drawn: 25,37,39,44,50,56

    Bonus ball: 13

    Numbers selected: 20,23,30,45,54,57

    Matching balls: 0

    Numbers selected (lucky dip): N/A

    Matching balls (lucky dip): N/A

    Winnings: £0 (£0 to date)

    Total Profit/Loss: £-170

    No matches. AGAIN. I’ve been doing this for FIVE WEEKS and haven’t matched a single ball. Is it possible that following Cage into the ways of the Nouveau Shamanic isn’t the way to win the lottery?

    Here’s the thing – since the UK lottery changed so that it uses 59 balls, in each draw you have a greater than 50% chance of matching at least one ball. There’s actually only a 3.4% chance of playing the lottery 5 times in a row and getting nothing. I also failed to match any of the bonus balls, and the chances of THAT happening is just 0.93%.

    Which must PROVE that trying to win the lottery by watching Nicolas Cage movies CAN cause very unlikely things to happen, even if they’re not currently the things that I want to happen. Let’s see where this goes.


    It’s that one film that your boyfriend wouldn’t stop banging on about in 2018: Mandy!

  • #85: The Humanity Bureau (2017)

    My name is Ed and an oppressive government regime is threatening to deport me to a non-existent place unless I watch every Nicolas Cage film and win the lottery using numbers from within that film.

    I was trying to figure out why the title The Humanity Bureau is suggestive of one of the various mostly terrible films adapted from a Philip K Dick short story and it turns out it’s just because there was one called The Adjustment Bureau which I think I have seen but could tell you nothing about that you couldn’t deduce from the poster. Anyway, The Humanity Bureau (which has nothing to do with Dick) is even shitter than that!

    It is THE FUTURE and because of CLIMATE CHANGE and WARS and AGENDAS America has to send Nicolas Cage of The Humanity Bureau to deport anyone deemed not be contributing anything to the economy, but it’s okay because he’s deporting them to ‘New Eden’ which is definitely a real place and not a cover for something more sinister. One day he’s asked to deport a SINGLE MOTHER which leads to him turning his back on the Bureau in order for there to be a plot.

    Most of the film takes place in a depressing washed-out brown wasteland, and yes okay that does make sense given it’s supposed to be set in the aftermath of an environmental apocalypse, but it’s also just a depressing washed-out brown wasteland of a film. There’s visibly no money involved whatsoever which means every twist and turn has to be told rather than shown – on top of which, everything that happens is either incredibly obvious or incredibly uninteresting. For something that’s notionally an action movie, the ‘high octane’ peaks look a lot like Nicolas Cage driving a car slightly fast while a man in an eyepatch shakes his fist.

    Cage turns in a perfunctory performance which will be unrevealing to anyone who has watched any of the other 43 rubbish low budget thrillers he’d made this century. I hope he bought something nice.

    To be fair he probably put more thought into his performance than anyone else contributed to the film. Throughout it’s made constantly clear how scarce water is to the point that clean water is basically a currency now, then at the end there’s just loads of snow everywhere and no-one seems that bothered and do they not know what snow is? Do I not know what snow is?

    I just can’t get my head around the number of people who would have had to decide that this script was worth making. Was it good before they had to cut out all the scenes that would have cost more than 10 quid to shoot? Does the little kid in this have very rich parents who paid for him to be in a ‘real Hollywood film’ for his birthday? Did I just hit my head on something and have a very dull hallucination?

    The grimmest suspicion of all is that actually, everyone involved thought this was a powerful look at where things were headed thanks to DONALD J CHUMP (there’s even an annoying line about it being ‘easier to build fear than build a wall’) or whatever. And well, he did lose the election, so I guess everyone did learn an important lesson from this film. Thanks The Humanity Bureau!

    In order to say something nice, I will give the faintest of faint praise to Vicellous Shannon, who plays the villain’s inexplicable comedic sidekick, not because anything actually entertaining happens in his scenes, but just because the role is so incongruous with the rest of the film that it becomes inadvertently amusing. See also Nicolas Cage’s character being called Noah Kross which I really hope is supposed to be ‘clever’.


    2 – Noah Kross apparently once came 2nd place in the National Fly Fishing Competition.

    4 – Noah Kross carries a Beretta PX4. This hasn’t yet been listed on the Internet Movie Firearms Database: what the fuck guys?

    7 – 7 million people have been killed in New Eden. To be honest I was disappointed that it was only a death camp because I was really rooting for a Soylent Green rip-off.

    11 – Lucas, the little boy, is 11 years old.

    16 – Subsection 16 is the part of the relevant law that deals with deportation to New Eden.

    41 – The first person we see Noah Kross trying to deport is the subject of casefile 56672941.


    Lottery draw: 2596

    Date: Saturday 7 November, 2020

    Jackpot: £20,000,000

    Draw machine: Merlin

    Ball set: 5

    Balls drawn: 3,33,45,50,52,56

    Bonus ball: 44

    Numbers selected: 2,4,7,11,16,41

    Matching balls: 0

    Numbers selected (lucky dip): N/A

    Matching balls (lucky dip): N/A

    Winnings: £0 (£0 to date)

    Total Profit/Loss: £-168

    Oh well, off to New Eden with me then!


    Dark, Paul Schrader’s unofficial director’s cut version of 2014’s Dying of the Light, because it has its own IMDB entry and why not make life harder for myself than I strictly speaking need to?

  • #84: Mom and Dad (2017)

    My name is Ed, and each week I play the lottery using numbers I’ve divined out of a different Nicolas Cage film. The first two weeks of starting to do this again have not inspired confidence that this is a worthwhile activity – not only did I get 0 matching numbers, but both films were complete crap. Nevertheless: Mom and Dad.

    There’s a high concept here: one day every parent suddenly gets an inexplicable urge to murder their children – what happens next? I was slightly concerned because this is the sort of premise that’s fuelled much low budget, borderline unwatchable, at best limply ‘ironic’ shite and well, we are talking about a recently made Nicolas Cage film. But what I hadn’t clocked was that director Brian Taylor is the Taylor formerly of Neveldine/Taylor: though their Cage-starring effort Ghost Rider: Spirit Of Vengeance was not great, they were also responsible for the perhaps the definitive high concept film franchise, Crank (an action movie in which the main character must continually produce adrenaline or die).

    While this doesn’t quite reach the 8-year-old kid on 38 packets of Skittles sugar high-intensity highs of Crank, there’s a lot to like about the slick, pacy comic book execution of this. I mean at this point my bar is low enough that ‘visible care about what’s on the screen’ seems like an achievement but this really does hammer home that these low budget affairs don’t have to be total garbage and the money isn’t the issue (astoundingly this – going by IMDB, anyway – actually cost $5 million less than Inconceivable).

    Cage is no brainer casting: repressed suburban dad finally losing his mind and becoming a homicidal maniac is the kind of thing he was born to play, and though he’s not exactly stretching himself and it never feels as truly unhinged as you might hope, it’s a still a fun performance. It’s a good cast all round really and I found myself wondering why Selma Blair isn’t in more stuff these days – her ‘stressed mom trying to kill her children as though it’s just another of the endless chores of parenting’ is as good as anything Cage is doing.

    The film wisely avoids bothering with a full explanation for why any of this is happening and sticks to teasing out the implications of premise – the ‘gag’ here is really that the determination to murder the children is only dialling up the feelings the parents have anyway – underlined early on with one abusive alcoholic father where the sole difference appears to be that the attempt to kill his son is no longer just a byproduct of his violent rages. This is broad stuff, but running with the logic of the idea works for the film and, just as you start to wonder where the hell all this is going, pays off with a very funny third act twist for the finale.

    But the cynical, resentful version of parenting here feels a bit obvious – too pat to be really cutting. Hacky standup comedy as horror movie. It doesn’t miss the mark so much as it aims for slightly too big a mark to make sure everyone gets it, and ultimately ends up ringing a little bit hollow.

    Still, for what it is, it’s a lot of fun, at 83 minutes it’s practically a short film by 2020 standards, and it isn’t Inconceivable.


    12 – At the school, some students are told to go to Chapter 12 of their textbooks.

    13 – There’s a scene involving the building and destruction of a pool table and I think Cage at some point holds the number 13 ball – I think they put numbers on the balls in America to help them pick lottery numbers – up to the camera. Or it rolls past the camera? Or something? I can’t read my notes and couldn’t find it with a quick scroll through the film but I’ve picked it now.

    20 – Back at the school, at one point we hear that there are 20 minutes left of a test “and the score’s pretty important to your future”. So obviously I took that as a sign.

    24 – The family’s live at number 224.

    45 – The dad’s family-orientated career decisions necessitated a drop of income from $145,000 to $45,000. Which seems like the wrong way around to do things because apparently you have to buy children loads of stuff like shoes and hats?

    50 – 50% of piglet fatalities are caused by the mother attacking or crushing them, we’re told. Judging by the National Animal Disease Information Service this is technically true but mostly it’s them being accidentally because pigs are quite clumsy rather than porcicidal rage. Would I watch a film where Nicolas Cage keeps rolling over and accidentally crushing his children to death? Probably.


    Lottery draw: 2594

    Date: Saturday 31 October, 2020

    Jackpot: £2,305,915

    Draw machine: Merlin

    Ball set: 4

    Balls drawn: 1,6,16,34,49,59

    Bonus ball: 35

    Numbers selected: 12,13,20,24,45,50

    Matching balls: 0

    Numbers selected (lucky dip): N/A

    Matching balls (lucky dip): N/A

    Winnings: £0 (£0 to date)

    Total Profit/Loss: £-166

    I am so angry about this that it is a good job that I don’t have any children who I secretly resent for forcing me to try and win the lottery in order to pay for their expensive Fortnites and Tik Toks!!!!


    His FIFTH film of 2017: The Humanity Bureau. I hope it is about one of those old-fashioned foldy-outy desks!

  • Podcast appearance: Caged In

    As well as trying to win the lottery by watching Nicolas Cage films I also have a secret goal of trying to be on every single Nicolas Cage-related podcast, and a couple of weeks ago got to have an extensive chat about both Cage, the experience of trying to watch all his films, and in particular the experience of watching the not very good film Inconceivable with Petros of the Caged In podcast. You can listen and find links to it on various podcast platforms here.

  • #82: Vengeance – A Love Story (2017)

    My name is Ed, and I used to watch Nicolas Cage films in what turned out to be a futile attempt to win the lottery.

    Cage claims to have used a method he calls the nouveau shamanic to channel mystical energy into his screen performances, and my theory was that by picking numbers based on these performances, that I could somehow channel this energy into positive outcomes for myself, i.e. winning millions of pounds on the UK National Lottery. It didn’t work, but shortly after I stopped doing this twice weekly, Donald Trump became the President of the United States of America. Does this mean anything?

    Currently, it is 2020. Nicolas Cage has somehow made SEVENTEEN films since I last did this, and as it stands everything is so bad that it does not seem likely that attempting to invoke the nouveau shamanic again can make things worse.

    I suspect Vengeance – A Love Story started as a bit of a prestige project – it’s based off a novella by Joyce Carol Oates, and at one point was going to star Samuel L Jackson, with either Uma Thurman or Heather Graham. Somewhere along the line things went slightly wrong and we ended up with this straight to DVD effort starring Nicolas Cage. Who was at one point going to direct it as well, but presumably realised it would have got in the way of attempting to appear in 43 other films that year.

    The first ominous sign is the font the opening credits are in – I don’t know what font it is, and I don’t want to shame it: it’s not a bad font, or a stupid font. But it is a very ‘this was a default in the editing software’ font. Almost professional enough looking to be used in a real film. Almost.

    ‘Vengeance’ is in some ways fairly straightforward adaptation of the source material, but the adjustment to the original title (‘Rape – A Love Story’), is reflected in the slightly timid, melodramatic approach to the story, which is that of Teena, a young mother who is gang-raped, her daughter, who witnesses it, and their struggle to get justice when the legal system seems to be failing them.

    While the lead performances are, for what they are, fine, much of the rest of the cast appears to have been directed to play to ‘cartoon villain’ level: everyone (especially the double evil cat-murdering perpetrator played by an actor who might as well change his name by deed poll to ‘Budget Jared Leto’, and the ‘even Eric Roberts is busy for this’ money-hungry defence lawyer who inexplicably rides in and out of town on a gigantic silver motorbike) is so gleeful about stacking the deck against Teena that it verges on self-parody, as if it’s going for a knowing, ‘See, this is what STUPID LIBERALS think small towns are like!’ effect.

    We never have to be in any doubt about what needs to happen – hey, it’s right there in the title – and who’s just walked in, it’s Nicolas Cage!

    Cage’s presence in the film, as police detective John Dromoor, has an odd effect – in terms of run time the bulk of the story remains that of the mother and daughter, but his presence causes the film to swerve from Lifetime movie to pound shop thriller as he metes out perfunctory vigilante justice as we the audience all cheer and wave our big foam fingers.

    This mildly threatens to derail things, but it never actually gets interestingly bad. His subdued performance has its moments – for some reason I was taken with his deadpan statement to the kid that his favourite cartoon character is Daffy Duck – but given how silly much of the rest of what’s going on is, there’s no reason he couldn’t do some classic ‘losing his shit’ as he takes his vengeance. It’s almost as if he’s trying to respect something from the original book that no-one else in the film seems that bothered about. But the unfortunate result is that the king of tonally uneven movies had abdicated his throne when he’s most needed.


    3 – The detective served in the army for 3 years which included the Gulf War. Cage is a bit old for the role as written in the original book, so while the passage of time between publication and filming does still make this a plausible detail, it does push it into boringly familiar dad (or at least ersatz father figure) defends his family territory.

    4 – The ‘inciting incident’ takes place after a 4th of July party. There was a 4th of July party in Arsenal, but I don’t think it was the same 4th of July party.

    6 – Teena is treated for her injuries in Intensive Care Unit 6.

    12 – The daughter is 12 years old. Unless she is 10, or possibly 11: the film seems weirdly hazy on this, though it’s not always exactly clear how much time is supposed to have passed between scenes.

    20 – Budget Jared Leto bets Teena’s sort of boyfriend 20 dollars that a man will lose a boxing matching. He doesn’t lose the boxing match, and then Budget Jared Leto gets shot in the head by Nicolas Cage. Owned!

    24 – The last villain to be dispatched is lured to room 24 of a motel. He’s lured by a phone call (that we hear) from a woman claiming to be an old school friend, but when he arrives he gets Caged to death. Who is that woman? It’s a credited role so isn’t supposed to be anyone else we’ve met pretending, unless I missed something. Did Detective Dromoor hire an actress? Was there a cut sequence where he auditions people for their convincing phone manner? Or did I just zone out while trying to find numbers in the background of shots and start missing key chunks of dialogue?

    I think I will win something this time. I think it will be a sign that watching all the films Nicolas Cage has made since I stopped doing this is the right thing to do.


    Lottery draw: 2590

    Date: Saturday 17 October, 2020

    Jackpot: £3,800,000

    Draw machine: Arthur

    Ball set: 2

    Balls drawn: 26,32,38,41,49,51

    Bonus ball: 46

    Numbers selected: 3,4,6,12,20,24

    Matching balls: 0

    Numbers selected (lucky dip): N/A

    Matching balls (lucky dip): N/A

    Winnings: £0 (£0 to date)

    Total Profit/Loss: £-162

    Ah, well. Clearly a test of my commitment. Anyway, I am only going to do the Saturday lottery this time, so see you in a week for another definite solid gold classic that will definitely will me the lottery: Inconceivable, starring Nicolas Cage.