Wednesday, 9 September 2026

Fast & Furious 10 (4 Stars)


Dante Reyes is completely insane.

That's not meant as an insult to Jason Momoa's performance; it's probably the best thing about the film. Dante is the son of Hernan Reyes, the drug lord Dom and his crew brought down in Rio in "Fast Five". Dante witnessed his father's downfall and has spent twelve years planning his revenge. He doesn't simply want to kill Dom. That would be far too easy. He wants Dom to suffer, and he wants to destroy everything Dom loves along the way.

Dante's plan is so elaborate that Dom and his family are constantly several steps behind him. He manipulates the authorities, frames Dom's crew for a disaster in Rome, steals the surveillance technology known as God's Eye and eventually focuses his attention on Dom's young son, Little B. But Dante isn't interested in simply kidnapping the boy. Everything he does is part of a carefully constructed game in which Dom is forced to watch his family being destroyed one piece at a time.

And Dante enjoys every second of it.

The film eventually brings the two men back to Brazil, where Dante recreates the circumstances of his father's death. Dom manages to save Isabel, Elena's sister, but Dante escapes with God's Eye and uses it to track Little B. The chase eventually moves to Portugal, where Jakob attempts to protect his nephew. Jakob sacrifices himself, destroying a group of Dante's men and giving Dom the opportunity to rescue his son.

You'd think that would be the end of Dante's plan. It isn't even close.

Dom and Little B head towards an airfield, believing that Aimes, the head of the Agency, is going to help them escape. Instead, Dante reveals that Aimes has been working for him all along. Aimes shoots down the plane carrying Roman, Tej, Han and Ramsey, apparently killing them all. Dante then traps Dom and his son on a dam with two enormous tanker trucks racing towards them from opposite directions.

Dom does what Dom does. He drives his car off the side of the dam, races down the concrete slope and escapes the explosion. For a few seconds, it looks as though he's actually beaten Dante.

But, of course, Dante has thought of that too.

The entire dam has been rigged with explosives. Dom and Little B are now stranded at the bottom with no car and nowhere to go. Dante detonates the explosives and the film cuts to black.

That's the end of the film.

And then we wait.....


I'm perfectly happy to accept that "Fast & Furious 10" isn't meant to be a complete story. It was intended to launch the final chapters of the saga, and a cliff-hanger was always going to be part of the plan.

But there's a difference between ending a film on a cliff hanger and simply stopping halfway through the story.

When I saw "Fast & Furious 10" in the cinema, I gave it five stars. I assumed that the next film would follow fairly soon and that I'd get the answers to all those questions before too long. Three years later, I'm still waiting.

So now the ending doesn't have quite the same effect. Dom and Little B are apparently about to be blown to pieces. Roman, Tej, Han and Ramsey have apparently just been killed in a plane crash. Jakob has sacrificed himself. Dante has won. And we're expected to sit here for years wondering how everybody is going to survive.

Because we all know they're going to survive.

This is Fast & Furious. People come back from the dead in this franchise. Gisele, who was supposedly killed in "Fast & Furious 6", turns up alive in a submarine at the end of this very film.

So the cliff-hanger isn't even particularly suspenseful. It's just irritating.

I like "Fast & Furious 10". I like it a lot. Dante is a wonderfully deranged villain, the action is spectacular and the film is enormous fun. But that ending has now cost it something.

If "Fast & Furious 11" had arrived in 2024, I'd probably still be giving "Fast & Furious 10" five stars. But three years of waiting for the story to continue is a different matter.

A cliff-hanger is supposed to make you desperate to see the next film.

It isn't supposed to make you think the filmmakers have forgotten to finish the film.

Success Rate:  - 0.1

Order from Amazon.com
Order from Amazon.co.uk
Order from Amazon.de

Tuesday, 8 September 2026

Five Nights at Freddy's (4 Stars)


  • Mike Schmidt struggles to keep custody of his younger sister Abby.
  • Mike is haunted by the kidnapping of his younger brother Garrett.
  • Mike takes a night security job at Freddy Fazbear's Pizza.
  • The restaurant's animatronics come alive and attack intruders.
  • Abby befriends the supposedly murderous animatronics.
  • The animatronics are possessed by murdered children.
  • Mike dreams about Garrett and the murdered children.
  • Mike discovers that the murdered children were killed at Freddy's.
  • The policewoman Vanessa knows the truth about Freddy's and its history.
  • The children were murdered by the serial killer William Afton.
  • Afton is Vanessa's father and Garrett's kidnapper.
  • Afton murdered the children while wearing the Spring Bonnie suit.
  • Abby helps the murdered children realise that Afton betrayed them.
  • The children turn against Afton and drag him away.
  • Afton is trapped inside the Spring Bonnie suit.
  • Vanessa is seriously injured and falls into a coma.
  • Mike and Abby survive and remain together.

Success Rate:  + 12.9

Order from Amazon.com
Order from Amazon.co.uk
Order from Amazon.de

Monday, 7 September 2026

Pearl (5 Stars)


Müde bin ich, geh zur Ruh,
Schließe beide Äuglein zu.
Vater, lass die Augen dein
Über meinem Bette sein.

Hab ich Unrecht heut getan,
Sieh es, lieber Gott, nicht an.
Deine Gnad und Christi Blut
Machen alle Schaden gut.

Kranken Herzen sende Ruh ,
Nasse Augen schließe zu.
Lass den Mond am Himmel stehn
Und die stille Welt besehn.



I am tired, I go to rest,
And close both my eyes.
Father, let your eyes
Be upon my bed.

If I have done wrong today,
Do not look upon it, dear God.
Your grace and Christ's blood
Make all harm right.

Send peace to sick hearts,
Close wet eyes.
Let the Moon stand in the sky
And watch over the silent world.


Success Rate:  + 8.1

Order from Amazon.com
Order from Amazon.co.uk
Order from Amazon.de

Sunday, 6 September 2026

Stoner (4 Stars)


"Stoner" has one of those stories behind it that's almost as interesting as the film itself. It was originally planned as Bruce Lee's next film after "Game of Death", with Lee and George Lazenby as the two leading stars. Lazenby was going to play the villain, while Bruce Lee would have played the character eventually played by Angela Mao. You read that correctly: Bruce Lee was supposed to play Angela Mao's part.

In July 1973, Bruce Lee died and the whole project had to be reworked. Lazenby's character was changed from villain to hero and Mao was brought in as his co-star. Lazenby was fresh from playing James Bond in "On Her Majesty's Secret Service", and "Stoner" was clearly designed to cash in on that. The trailer mentions James Bond at least half a dozen times, so there's no danger of missing the connection. Lazenby gets the smart suits, the women and the international action, although "Stoner" eventually becomes a very different sort of film.

Lazenby plays Australian police officer John Stoner, who becomes involved in an investigation into a new drug that is spreading through Hong Kong. Angela Mao plays another police officer from Taiwan investigating the same organisation, and the two eventually join forces against the criminals behind it. It's a fairly straightforward police thriller, although the story becomes increasingly bizarre as drugs, sexual exploitation and a mysterious cult enter the picture.

Lazenby is perfectly adequate in the lead, although he looks more like James Bond than Stoner for much of the film. It doesn't help that he's sporting an absolutely dreadful moustache for the first half of the film. Thankfully, he shaves it off and looks considerably better. Sammo Hung also makes an appearance, although I found it hard to concentrate on anything he was doing because of the enormous mole on his nose, complete with a single hair growing out of it. Once you've noticed it, you can't stop looking at it.

For most of the film I was hovering between three and three and a half stars, but Stoner saves its best for last. Angela Mao's final fight with Hwang In-shik is terrific. It's easily the highlight of the film, with Mao and In-shik throwing themselves into a spectacular martial-arts battle that finally delivers the sort of action I was hoping for. Angela Mao is excellent throughout, but this is where she gets to show what she can really do.

That final fight pushed Stoner up to four stars.




Saturday, 5 September 2026

Highlander (5 Stars)


After watching "Highlander" again, I find myself looking forward to the new version with considerable czriosity. I'm not going to review the 1986 film here. I've already seen it and I know what I think of it. This is about the film that's coming next, and there is now enough information about it to make it one of the more intriguing remakes on the horizon.

The new Highlander film has had a remarkably long journey to the screen. Henry Cavill was announced as the new Connor MacLeod back in 2021, but for years the project seemed to exist mostly in interviews, rumours and increasingly distant promises that filming was about to begin. There were several false starts before production finally got under way in 2026. Even then there was another setback when Cavill suffered an undisclosed injury during pre-production, pushing the start of filming back.

Now, however, it is an actual film. Cameras have been rolling in London and Scotland since February, with further filming taking place in Poland and Hong Kong. The Scottish locations include the Isle of Skye, Eilean Donan Castle and Glencoe, which is about as encouraging as it gets for a film called Highlander.

And the director is Chad Stahelski.

That could be either the best or the most worrying thing about the project.

Stahelski directed all four John Wick films, so there can be little doubt that the new Highlander will have spectacular action. He knows how to stage fights, shoot fights and, perhaps most importantly, make fights feel like something worth going to the cinema to see. Highlander is a property that lends itself naturally to elaborate sword fights, and putting the man responsible for John Wick behind the camera sounds like an obvious match.

The danger is equally obvious. The first footage shown at CinemaCon apparently looked very much like John Wick with swords. There were neon-lit locations, elaborate sword fights, motorcycle chases and a fight at a rave. The footage also suggested that the new film is considerably larger in scale than the original, with numerous immortals involved rather than concentrating almost entirely on the central conflict.

Personally, I don't see the John Wick influence as a problem. Highlander was always an unusual mixture of genres. There was sci-fi, fantasy, action, romance, historical drama and a fair amount of strange 1980's style. There is no reason why a new version shouldn't reinvent the action side of it. The important question is whether Stahelski remembers that the immortality story is what makes Highlander different from every other sword-fighting action film.

There is certainly plenty of mythology to work with.

Henry Cavill plays Connor MacLeod, as Christopher Lambert did in the original, but this time the character is apparently being treated much more explicitly as Scottish. The CinemaCon footage reportedly established that Connor was born in 1518, and Cavill maintains a Scottish accent throughout. That's already an interesting change from Lambert's famously difficult-to-place accent.

Cavill is also an obvious choice for the role. He's spent much of his career playing physically imposing characters who're required to carry large fantasy worlds on their shoulders. Superman and Geralt of Rivia have already given him plenty of experience with swords, armour and supernatural mythology, so Connor MacLeod doesn't seem like much of a stretch.

More importantly, Cavill has apparently been a fan of the property himself. He's been attached to this film for five years, through all the delays and uncertainty, which suggests that this isn't simply another franchise job for him. His first-look photographs certainly suggested that he's taking the role seriously. One showed him carrying a large sword and the other placed him in a much darker, more mysterious setting.

Then there's the cast.

Russell Crowe is playing Juan Sánchez-Villalobos Ramírez, the role originally played by Sean Connery. That's an inspired piece of casting. Crowe has the presence to play the character as a genuine warrior and mentor rather than simply turning up to deliver amusing lines and disappear again.

There's also something wonderfully appropriate about Crowe following Connery into the role. Connery's presence in the original gave the film a strange mixture of fantasy adventure and old-fashioned swashbuckling. Crowe is obviously a very different actor, but he has enough authority to make Ramirez feel like somebody who has been alive for centuries.

Dave Bautista is Kurgan.

That's another casting choice I'm very excited about. Clancy Brown's Kurgan remains one of the great screen villains of the 1980's, partly because Brown didn't play him like a conventional villain. He made him huge, brutal, funny, grotesque and occasionally almost childlike. Bautista has demonstrated repeatedly that he can do far more than play a big man who hits people, so I'm hoping the new Kurgan isn't simply a physically imposing version of the character.

Early footage reportedly suggests that Bautista's Kurgan is more restrained than Brown's. We've also seen glimpses of the character in a World War II setting, including a sequence in which he fights Connor while apparently serving as a Nazi.

That points towards another significant difference between the two films. The new Highlander seems determined to make much more extensive use of Connor's centuries of existence.

The original had a terrific basic idea: an immortal man has spent hundreds of years living among ordinary people while occasionally encountering others like himself. The new film appears to be expanding that concept considerably. Stahelski has talked about expanding the mythology, and the story moves from the early 1500's in the Scottish Highlands through the modern world and into Hong Kong.

That's potentially very exciting.

The Hong Kong element is particularly interesting. Highlander has always been a story that can move almost anywhere because its central characters have had centuries to travel around the world. A story about immortals shouldn't feel as though everybody has spent the last five hundred years hanging around the same few Scottish hills.

The international locations also give Stahelski an opportunity to make the film visually distinctive. Scotland provides the mythology and the historical foundation; modern cities provide the contemporary action. Poland and Hong Kong add yet more possibilities.

And then there's the Gathering.

The basic idea remains that immortals are drawn towards an eventual confrontation in which there can be only one survivor. According to the CinemaCon footage, Connor is forced to fight fellow immortals as the Gathering approaches, with the ultimate prize still at the heart of the story.

The difference is that the new film appears to be taking the concept much further. Reports from CinemaCon described dozens of immortals rather than simply a handful of principal characters. That's a potentially major expansion of the mythology.

It also raises a question.

How much Highlander is too much Highlander?

One of the things I like about the original is that the mythology is almost ridiculously simple. Immortals exist. They can be killed by decapitation. They fight one another. There can eventually be only one. That's enough.

The danger with expanding the mythology is that the filmmakers could start explaining everything.

I hope they don't.

There's something appealing about the mysterious quality of the original mythology. Why are these people immortal? Where exactly did they come from? Why does the Gathering happen? What is the Prize? Some questions are more interesting when they're surrounded by mystery.

On the other hand, this is also supposed to be the beginning of a new Highlander franchise. Amazon MGM and United Artists have the rights to the property, and there's been talk of developing the world beyond this film. That means the filmmakers have an incentive to establish a much larger mythology that can support future films or television.

I'm not automatically opposed to that. In fact, Highlander is one of the franchises where expansion makes considerable sense. The original television series demonstrated that the concept could generate stories almost indefinitely. An immortal character is effectively a walking history book. You can put him in almost any period and almost anywhere in the world.

The question is whether the first film can stand on its own.

It certainly sounds as though there will be plenty of new characters. Karen Gillan is playing Heather MacLeod, while Djimon Hounsou is playing Sunda Kastagir. Marisa Abela, Max Zhang, Siobhán Cullen, Jeon Jong-seo, Nassim Lyes and Kevin McKidd are also involved, with Jeremy Irons among the cast as the leader of the Watchers. Drew McIntyre is also part of the ensemble as Angus MacLeod.

The Watchers are particularly interesting because they suggest that the new film is borrowing more heavily from the mythology that developed around Highlander after the original film. Jeremy Irons playing their leader also gives that part of the story a certain gravitas.

And Kevin McKidd is an especially nice bit of casting. He was reportedly considered for the lead when the project was being developed many years ago, long before Cavill was attached. Now he's actually in the film.

The production itself is also becoming increasingly impressive. The Scottish shoot isn't merely using Scotland as a convenient backdrop. The filmmakers have been filming in some of the locations that immediately make you think of Highlander: Skye, Eilean Donan and Glencoe. There have been road and location closures around the Highlands, and Cavill has been photographed in costume there.

That's important to me.

If you're going to remake Highlander, make it look like Highlander.

I don't want Scotland to be three minutes of establishing shots before the characters disappear into a CGI city. The photographs and reports from the production suggest that the Scottish landscape is going to be an important part of the film, particularly in the historical material. That's exactly what I'd hoped to see.

The first film's Scottish setting was one of the things that gave it its identity. The new film has the opportunity to make that landscape look extraordinary with modern cinematography and visual effects. It doesn't have to pretend that it's still 1986. In fact, it shouldn't. The original's special effects look dated, but the landscapes don't.

And that brings me back to the reason I'm writing about the remake now.

Having just watched "Highlander" again, I'm struck by how much potential there is in the basic concept. The original doesn't need to be replaced because it's become worthless. Quite the opposite. It remains a brilliant film despite the fact that some of its effects now look very much like effects from 1986.

That's precisely why the remake has to offer something more than improved effects.

Fortunately, it appears to be trying.

The combination of Henry Cavill, Chad Stahelski, Russell Crowe and Dave Bautista is enough to make me curious. The international locations make me curious. The decision to expand Connor's life beyond the original story makes me curious. The Scottish filming makes me particularly curious. And the footage shown at CinemaCon suggests that the filmmakers aren't treating the film as a museum piece.

It looks as though they're making a big, modern fantasy action film while retaining the basic Highlander mythology.

That could be exactly what the property needs.

There's one other encouraging detail. Amazon MGM is now making a substantial commitment to theatrical films rather than treating everything as material for streaming. The studio has explicitly said that it intends to release at least 15 films a year theatrically and described its strategy as making films that give audiences a reason to leave home and see them in cinemas. Highlander is part of that theatrical slate.

That's where this film belongs.

Highlander should be seen on a big screen. It needs the mountains, the swords, the castles, the cities and the action to have room to breathe. Stahelski's involvement makes that even more important.

There still isn't a firm release date. The studio has indicated that the film belongs in its 2027 slate, while earlier comments from Stahelski suggested 2027 or 2028 was the likely window. At the moment, the safest description is simply 2027.

So there's still a long way to go.

But for the first time, Highlander doesn't feel like a remake that's perpetually stuck in development hell. It's been filmed. We've seen footage. Cavill has been in Scotland wearing the costume. The cast is in place. The production has moved from London to Scotland, Poland and Hong Kong. We can finally start judging the film on what it actually is rather than what somebody says it might be.

And what it might be is quite exciting.

I certainly wouldn't want a carbon copy of the 1986 film. There's no point in making one. I've already got the original, and I like it.

Give me something new.

Give me Scotland. Give me centuries of history. Give me immortals who've lived long enough to have acquired stories of their own. Give me spectacular sword fights. Give me Henry Cavill as Connor MacLeod. Give me Russell Crowe as Ramirez. Give me Dave Bautista as the Kurgan. Give me Chad Stahelski directing the whole thing.

And, above all, give me a film that understands why there can be only one.







Success Rate:  - 1.5

Order from Amazon.com
Order from Amazon.co.uk
Order from Amazon.de

Klondike Annie (unrated)


When I watched this film I realised something was wrong with it. Some things didn't make sense. I found the explanation in Wikipedia: It was censorship. "Eight minutes of the film were deleted. The footage is presumably lost. In this lost footage is the scene in which The Frisco Doll stabs Chan Lo when he was going to stab her instead".

The censored footage has been lost. Nothing can be done about it. What I don't like is the way the film is presented on the Blu-ray. There could have been an introduction warning that an important scene is missing. Even better, there could have been a text page inserted explaining what happened in place of the missing footage. Instead of this, a mutilated version of the film has been sold. It's disgraceful.

I recommend strongly against watching this film.

Friday, 4 September 2026

Goin' To Town (3 Stars)


Mae West: delicious.

"Goin' to Town": not so much.





Thursday, 3 September 2026

Crazy Samurai Musashi (4 Stars)


"Crazy Samurai Musashi" is a fight rather than a story. There's not much plot, but that's hardly the point; Tak Sakaguchi spends most of the film fighting his way through one opponent after another.

The choreography suffers from the decision to film the main fight in a single take. The sheer length makes the action less impressive than it might have been with more conventional editing; as another reviewer has pointed out, there's not a single decapitation or severed arm. The fight is often said to last 77 minutes, but on my Blu-ray the uninterrupted sequence runs for 74 minutes and 43 seconds. That's still one hell of a fight!


The film has been released with different titles. I'll stick to "Crazy Samurai Musashi", which is written on the film's title screen. 

Order from Amazon.com
Order from Amazon.co.uk

Wednesday, 2 September 2026

The Angry River (4 Stars)


Don't get too excited when you see Jackie Chan's name in the credits. As in all his early films, it was a very minor non-speaking role. If you blink you'll miss him.

"The Angry River" is a good film, although I didn't enjoy it as much as "Hapkido". It's Angela Mao's first film, and it's very different from the martial-arts films she would make afterwards.

Mao plays Lan Feng, whose father is poisoned by the villainous King Hell, and the only cure is a rare herb found in a remote mountain region. Lan Feng sets off to find it, encountering various dangers along the way. When she finally obtains the herb, she's temporarily deprived of her martial-arts abilities, but after returning home and discovering that her father has died, she takes the herb herself and regains her fighting skills.

Unfortunately, I didn't find the fights as impressive as those in Mao's later films. Even after she has regained her abilities, the action doesn't have the speed and impact of "Hapkido" or "Lady Whirlwind". That's understandable, since "The Angry River" was her first film and is much more of a traditional wuxia fantasy than the hard-hitting martial-arts films she would soon become known for.

It's also an historically important film. "The Angry River" was the first film made by Golden Harvest, although "The Invincible Eight" was released first. The cast and crew include several people who would become major figures in Hong Kong cinema, including Sammo Hung, Jackie Chan and Lam Ching-ying, while the action choreography was by the highly influential Han Ying-chieh.

Watching it now, it's fascinating to see Golden Harvest and Angela Mao right at the beginning of their careers. Only a few months after "The Angry River", Golden Harvest would release "The Big Boss", and Hong Kong cinema would change dramatically.


The film also has some wonderfully old-fashioned fantasy effects. I was particularly amused by the monster on the mountain. There's no mistaking that it's a man in a rubber costume, but somehow that only makes the scene more entertaining. It's the sort of thing that adds to the charm of an early-1970's wuxia film rather than spoiling it.

So "The Angry River" isn't my favourite Angela Mao film, but it's an enjoyable piece of Hong Kong cinema history and an interesting glimpse of both Mao and Golden Harvest before they became famous.

Tuesday, 1 September 2026

Alphabetical List of Posts




After having passed its beta test, this is the new version of my code for creating an alphabetical list of blog posts. It's not just a modified version, it's completely new code written by AI. I'm impressed. The old app needed 36 seconds to list my 6348 posts. The new app only needs 6 seconds. I've now removed the page with the old code that I posted in 2015. I strongly recommend that everyone should update.

Unlike the old version, no configuration is required. Copy the code into a stand-alone blogspot page, and away you go.

The code is free to copy and use. All I ask is that you leave a comment telling me the address of your blog and how many posts you currently have. I'm particularly interested in hearing from bloggers who have more posts than me.



Addendum on 3. September 2026

It's been pointed out to me that if a post has no title it's missing from the list. This is deliberate. The code is for sorting posts, and if a post has no title there's nothing to sort. Please remember to give all of your posts titles!





<!-- Blogger Alphabetical Post Index - Version 2.14
     Paste this into the HTML view of a Blogger Page.

     Version 2.14:
     - Based on the working Version 2.11 retrieval method.
     - Shows publication date before each post title.
     - Sorts alphabetically by title.
     - If titles are identical, older posts come first.
     - Uses Blogger's lightweight JSONP summary feed.
     - Requests 100 posts at a time using fixed start-index positions.
     - Loads 5 batches in parallel for speed.
     - No API key, blog ID or blog URL is required.
-->

<div id="alphabetical-post-index">
  <p id="api-status">Loading posts... 0 found</p>
  <ul id="api-post-list"></ul>
</div>

<style>
#alphabetical-post-index {
  width: 100%;
}

#api-status {
  margin: 0 0 1em 0;
}

#api-post-list {
  margin: 0;
  padding-left: 1.5em;
}

#api-post-list li {
  margin: 0.2em 0;
}

#api-post-list .post-date {
  display: inline-block;
  margin-right: 0.8em;
  white-space: nowrap;
  color: #777;
}

#api-post-list a {
  text-decoration: none;
}

#api-post-list a:hover {
  text-decoration: underline;
}
</style>

<script>
(function () {
  "use strict";

  const BATCH_SIZE = 100;
  const PARALLEL_REQUESTS = 5;
  const RETRIES = 2;

  const status = document.getElementById("api-status");
  const list = document.getElementById("api-post-list");

  const postsByUrl = new Map();

  let callbackCounter = 0;

  function blogRoot() {
    return window.location.protocol + "//" + window.location.host + "/";
  }

  function updateProgress() {
    status.textContent =
      "Loading posts... " +
      postsByUrl.size.toLocaleString("en-GB") +
      " found";
  }

  function canonicaliseUrl(url) {
    try {
      const u = new URL(url, blogRoot());
      u.hash = "";

      if (u.host === window.location.host) {
        u.protocol = window.location.protocol;
      }

      return u.href;
    } catch (error) {
      return url;
    }
  }

  function formatDate(dateString) {
    if (!dateString) {
      return "";
    }

    const date = new Date(dateString);

    if (Number.isNaN(date.getTime())) {
      return "";
    }

    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, "0");
    const day = String(date.getDate()).padStart(2, "0");

    return year + "-" + month + "-" + day;
  }

  function jsonp(url) {
    return new Promise(function (resolve, reject) {
      callbackCounter++;

      const callbackName =
        "__alphabeticalIndexCallback" + callbackCounter;

      const script = document.createElement("script");
      let finished = false;

      const timer = setTimeout(function () {
        if (finished) {
          return;
        }

        finished = true;
        cleanup();
        reject(new Error("Blogger feed request timed out."));
      }, 15000);

      function cleanup() {
        clearTimeout(timer);

        try {
          delete window[callbackName];
        } catch (error) {
          window[callbackName] = undefined;
        }

        if (script.parentNode) {
          script.parentNode.removeChild(script);
        }
      }

      window[callbackName] = function (data) {
        if (finished) {
          return;
        }

        finished = true;
        cleanup();
        resolve(data);
      };

      script.onerror = function () {
        if (finished) {
          return;
        }

        finished = true;
        cleanup();
        reject(new Error("Blogger feed request failed."));
      };

      script.src =
        url +
        (url.indexOf("?") >= 0 ? "&" : "?") +
        "callback=" +
        encodeURIComponent(callbackName);

      script.async = true;
      document.body.appendChild(script);
    });
  }

  async function jsonpWithRetry(url) {
    let lastError = null;

    for (let attempt = 0; attempt <= RETRIES; attempt++) {
      try {
        return await jsonp(url);
      } catch (error) {
        lastError = error;

        if (attempt < RETRIES) {
          await new Promise(function (resolve) {
            setTimeout(resolve, 300 * (attempt + 1));
          });
        }
      }
    }

    throw lastError;
  }

  function feedUrl(startIndex) {
    return (
      blogRoot() +
      "feeds/posts/summary" +
      "?alt=json" +
      "&start-index=" + startIndex +
      "&max-results=" + BATCH_SIZE
    );
  }

  function getAlternateLink(entry) {
    if (!entry.link) {
      return "";
    }

    for (const link of entry.link) {
      if (link.rel === "alternate") {
        return canonicaliseUrl(link.href);
      }
    }

    return "";
  }

  function addEntries(data) {
    if (!data || !data.feed) {
      throw new Error("Blogger returned an invalid feed.");
    }

    const entries = data.feed.entry || [];

    for (const entry of entries) {
      const title =
        entry.title &&
        typeof entry.title.$t === "string"
          ? entry.title.$t.trim()
          : "";

      const url = getAlternateLink(entry);

      const published =
        entry.published &&
        entry.published.$t
          ? entry.published.$t
          : "";

      if (!title || !url) {
        continue;
      }

      if (!postsByUrl.has(url)) {
        postsByUrl.set(url, {
          title: title,
          url: url,
          published: published
        });
      }
    }

    updateProgress();

    return entries.length;
  }

  function getTotalResults(data) {
    try {
      return Number(
        data.feed["openSearch$totalResults"].$t
      ) || 0;
    } catch (error) {
      return 0;
    }
  }

  async function loadBatch(startIndex) {
    const data =
      await jsonpWithRetry(feedUrl(startIndex));

    addEntries(data);

    return data;
  }

  async function worker(queue, failures) {
    while (queue.length) {
      const startIndex = queue.shift();

      try {
        await loadBatch(startIndex);
      } catch (error) {
        console.warn(
          "Feed batch failed at start-index",
          startIndex,
          error
        );

        failures.push(startIndex);
      }
    }
  }

  function comparePosts(a, b) {
    const result = a.title.localeCompare(
      b.title,
      "en",
      {
        sensitivity: "base",
        numeric: true
      }
    );

    if (result !== 0) {
      return result;
    }

    return new Date(a.published) - new Date(b.published);
  }

  function renderPosts() {
    const posts =
      Array.from(postsByUrl.values());

    posts.sort(comparePosts);

    const fragment =
      document.createDocumentFragment();

    for (const post of posts) {
      const li =
        document.createElement("li");

      const date =
        document.createElement("span");

      date.className = "post-date";
      date.textContent =
        formatDate(post.published);

      const link =
        document.createElement("a");

      link.href = post.url;
      link.textContent = post.title;

      li.appendChild(date);
      li.appendChild(link);
      fragment.appendChild(li);
    }

    list.replaceChildren(fragment);

    status.textContent =
      posts.length.toLocaleString("en-GB") +
      " published posts";
  }

  async function start() {
    const firstData =
      await loadBatch(1);

    const totalResults =
      getTotalResults(firstData);

    if (!totalResults) {
      throw new Error(
        "Blogger did not report the total number of posts."
      );
    }

    const queue = [];

    for (
      let startIndex = 1 + BATCH_SIZE;
      startIndex <= totalResults;
      startIndex += BATCH_SIZE
    ) {
      queue.push(startIndex);
    }

    const failures = [];
    const workers = [];

    const workerCount = Math.min(
      PARALLEL_REQUESTS,
      queue.length
    );

    for (let i = 0; i < workerCount; i++) {
      workers.push(
        worker(queue, failures)
      );
    }

    await Promise.all(workers);

    if (failures.length > 0) {
      const retryList = failures.slice();
      failures.length = 0;

      for (const startIndex of retryList) {
        try {
          await loadBatch(startIndex);
        } catch (error) {
          failures.push(startIndex);
        }
      }
    }

    renderPosts();

    if (failures.length > 0) {
      status.textContent =
        postsByUrl.size.toLocaleString("en-GB") +
        " posts found; " +
        failures.length.toLocaleString("en-GB") +
        " feed batch" +
        (failures.length === 1 ? "" : "es") +
        " couldn't be read.";
    }
  }

  start().catch(function (error) {
    console.error(
      "Alphabetical Post Index:",
      error
    );

    status.textContent =
      "Loading stopped after " +
      postsByUrl.size.toLocaleString("en-GB") +
      " posts.";

    status.style.fontWeight = "bold";
  });
})();
</script>


Monday, 31 August 2026

Lady Whirlwind (4 Stars)


I watched "Lady Whirlwind" tonight, having watched "Hapkido" yesterday. They're both Angela Mao films from 1972, although "Lady Whirlwind" was actually made first. The two films are also connected by the fact that Angela Mao, Sammo Hung and Hwang In-shik learned hapkido (the fighting style) while making it, before going on to make "Hapkido" (the film).

I didn't enjoy "Lady Whirlwind" as much as "Hapkido". The biggest problem for me is the story. There's a lot of confusion surrounding Tien's search for Shih-Hao. We eventually learn that Shih-Hao had abandoned Tien's pregnant sister, but his explanation is simply that circumstances forced him to leave her. What those circumstances were is never properly explained. It seems likely that Tung Ku was involved, but the film leaves us to work that out for ourselves.

I'm also not sure why Tien goes to the casino looking for Shih-Hao. She seems to believe that the casino owner and Tung Ku are hiding him, but the film never makes it clear why she thinks this. It's the sort of thing that probably made sense to the filmmakers, but they're unable to explain it to the viewer.

Fortunately, the fight scenes are good enough to make up for the film's shortcomings. There's plenty of action and some excellent martial-arts choreography. Angela Mao is good, although her fighting skills aren't as prominently displayed as they are in "Hapkido". Hwang In-shik and Sammo Hung also add plenty to the action.

So "Lady Whirlwind" works better for me as a martial-arts film than as a story. The action makes it worth watching, but I found the plot much less satisfying than "Hapkido".

Sunday, 30 August 2026

Hapkido (5 Stars)


Last week I bought two box sets of films starring Angela Mao. Six films, and I have to start somewhere, so "Hapkido" is a wonderful place to start. I'm working my way through the films, and after seeing this one I'm already looking forward to the other five.

The film introduces us to three capable martial artists, Kao Chang (Carter Wong), Fan Wei (Sammo Hung) and Ying (Angela Mao). They're all good fighters, but Ying is clearly the best, and that's established right at the beginning during the training sequence. It's a nice touch, because the later fights live up to what we've already been shown. Angela Mao is excellent, and the action is terrific throughout.

My only slight criticism is the introduction of Ying's Head Brother about twenty minutes before the end. By that stage the film has already established its main characters and story, so bringing in an important new character so late feels rather awkward.

That's a minor blemish, though. Hapkido is an exciting, beautifully staged martial-arts film and, for me, it's almost perfect.


Who likes lobby cards? I miss them.



Look at the following poster. I'm amused by the tagline, "Don't let your girlfriend see this film". At first I thought it meant that she'd be jealous if I sat for 90 minutes ogling the beautiful Angela Mao. But it's probably a warning that my girlfriend would follow Angela's example and beat me up. Maybe both.


Saturday, 29 August 2026

Becoming Led Zeppelin (5 Stars)


I wrote about "Becoming Led Zeppelin" when I saw it in the cinema last year. I don't have much more to say about the film itself. But there was one thing I didn't put into my original review: while I was sitting in the cinema watching it, I realised that it was the best documentary I'd ever seen.

That's not because of the subject matter. Obviously, I'm interested in Led Zeppelin, but it's the way the story is told that makes this documentary so good.

Most documentaries are watched by people who are already interested in the subject, so the people watching them will already be familiar with the details being presented. "Becoming Led Zeppelin" is different. It's genuinely informative. I'm a Led Zeppelin fan, yet it still told me things I didn't know.

I knew that Jimmy Page had played with the Yardbirds, for example, but I didn't know that Page, Robert Plant, John Paul Jones and John Bonham had gone on tour together in 1968 as the Yardbirds. They could have recorded their first album together as the sixth Yardbirds album, but they wanted to make a new start.

I also found the story of their early popularity fascinating. They were playing to sold-out concerts in America, then flying back to England where hardly anybody knew them. It took at least a year for their popularity to pick up in England.

The documentary ends with Led Zeppelin playing at London's Royal Albert Hall on 9th January 1970. This was when they'd truly made it big. This was when they became Led Zeppelin.

Is this really the best documentary ever made?

That's what I thought last year, and it's what I still think today.


One last point. On Wikipedia it's written "Led Zeppelin evolved from a previous band, the Yardbirds, and were originally named the New Yardbirds".

This is incorrect. They were never officially named the New Yardbirds. They were the Yardbirds, as proved by the contract shown above. It can also be verified by the posters for the various stages of their Scandinavian tour. "New Yardbirds" is a nickname that wasn't given to them until after they changed their name to Led Zeppelin.

Don't believe everything you read in Wikipedia.

Order from Amazon.com
Order from Amazon.co.uk
Order from Amazon.de

Friday, 28 August 2026

13 Assassins (4½ Stars)


This was the second time I watched Takashi Miike's "13 Assassins". I didn't particularly enjoy it the first time. I found the first hour boring, but this time I paid much closer attention to what was being discussed and, as a result, I got it. That made a considerable difference.

The problem is that the film spends a lot of time introducing the first twelve assassins without really introducing them as characters. We get to know Shinzaemon, his nephew and Koyata, the hunter who later joins them, but most of the others remain almost completely interchangeable. They're named, but we don't learn enough about them to become emotionally attached to them. When some of them die during the battle, I didn't feel anything.

Koyata is the exception. I liked him a lot. He's such a contrast to the other samurai, and his unusual background makes him one of the most memorable characters in the film.

But then we get to the battle.

And what a battle it is!


Once the fighting starts, "13 Assassins" becomes an entirely different film. The action is spectacular, brutal and remarkably inventive, but it's also enormous fun. Despite the battle going on for what seems like an eternity, it absolutely flew by for me. I was enjoying it so much that I wouldn't have minded if it had gone on even longer.

There's also something strange about Naritsugu's attitude towards the battle. Having spent the film as the man everyone wants to kill, he seems to relish the final confrontation, even though he knows he'll die. When Shinzaemon finally kills him, Naritsugu thanks him for it. It reminds me of Friedrich Dürrenmatt's "Romulus der Große", in which the Roman emperor is waiting for the approaching German army because he wants his corrupt empire to come to an end, only to discover that the man who arrives to conquer him doesn't want to conquer anything either. The situations are different, but there's a similar irony in both men finally encountering the destruction they've been expecting.

That's what makes "13 Assassins" such an interesting film. The first hour still feels too long, but once the battle begins Miike more than makes up for the slow build-up. It's an astonishing piece of filmmaking, and by the time it was over I was left wishing there had been even more of it.

Miike has made some genuine masterpieces, including "First Love" and "Lesson of Evil", but "13 Assassins" doesn't quite reach that level. However, the second viewing certainly improved my opinion of it.

Order from Amazon.com
Order from Amazon.co.uk
Order from Amazon.de