Sunday, 31 August 2025

Web Tutorial: The new TeochewThunder SVG logo

Now that the logo for TeochewThunder has been changed, for this month's web tutorial, we will be examining the process behind the new SVG logo. This is basically a XML file that your web browser will display as an image. Today, not only am I going to show you how to produce it, I will show you the little hacks I employed along the way.

And the beauty of this is, you just need a text editor. The file will be saved with a .svg extension, and you can open it in your web browser.

We begin with the svg tag. The version and xmlns attributes are important here, for this to be rendered correctly by the browser.

logo2.svg
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">

</svg>  


We set width and height of the SVG.

logo2.svg
<svg version="1.1" width="210px" height="130px" xmlns="http://www.w3.org/2000/svg">

</svg>  


Now, we could just get right to drawing the SVG, but let's exercise some developer prudence. Let's create a grid of lines to aid us visually. These are a series of horizontal lines that run through the SVG, each spaced 10 pixels apart.

logo2.svg
<svg version="1.1" width="210px" height="130px" xmlns="http://www.w3.org/2000/svg">
  <line x1="0" x2="210" y1="10" y2="10" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="20" y2="20" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="30" y2="30" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="40" y2="40" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="50" y2="50" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="60" y2="60" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="70" y2="70" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="80" y2="80" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="90" y2="90" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="100" y2="100" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="110" y2="110" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="120" y2="120" stroke="grey" stroke-width="1"/>

</svg>  


This is being viewed at 300% scale.


Now for vertical lines.

logo2.svg
<svg version="1.1" width="210px" height="130px" xmlns="http://www.w3.org/2000/svg">
  <line x1="0" x2="210" y1="10" y2="10" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="20" y2="20" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="30" y2="30" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="40" y2="40" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="50" y2="50" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="60" y2="60" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="70" y2="70" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="80" y2="80" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="90" y2="90" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="100" y2="100" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="110" y2="110" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="120" y2="120" stroke="grey" stroke-width="1"/>

  <line x1="10" x2="10" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="20" x2="20" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="30" x2="30" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="40" x2="40" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="50" x2="50" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="60" x2="60" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="70" x2="70" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="80" x2="80" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="90" x2="90" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="100" x2="100" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="110" x2="110" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="120" x2="120" y1="0" y2="150" stroke="grey" stroke-width="1"/>
  <line x1="130" x2="130" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="140" x2="140" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="150" x2="150" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="160" x2="160" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="170" x2="170" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="180" x2="180" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="190" x2="190" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="200" x2="200" y1="0" y2="130" stroke="grey" stroke-width="1"/>

</svg>


Now we have a nice grid! Effectively what we have here are 10 pixel squares.


Start a path tag with an empty d attribute and set the fill attribute to the infamous TeochewThunder orange!
logo2.svg
<svg version="1.1" width="210px" height="130px" xmlns="http://www.w3.org/2000/svg">
  <line x1="0" x2="210" y1="10" y2="10" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="20" y2="20" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="30" y2="30" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="40" y2="40" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="50" y2="50" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="60" y2="60" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="70" y2="70" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="80" y2="80" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="90" y2="90" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="100" y2="100" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="110" y2="110" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="120" y2="120" stroke="grey" stroke-width="1"/>

  <line x1="10" x2="10" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="20" x2="20" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="30" x2="30" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="40" x2="40" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="50" x2="50" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="60" x2="60" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="70" x2="70" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="80" x2="80" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="90" x2="90" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="100" x2="100" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="110" x2="110" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="120" x2="120" y1="0" y2="150" stroke="grey" stroke-width="1"/>
  <line x1="130" x2="130" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="140" x2="140" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="150" x2="150" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="160" x2="160" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="170" x2="170" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="180" x2="180" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="190" x2="190" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="200" x2="200" y1="0" y2="130" stroke="grey" stroke-width="1"/>

  <path d="" fill="rgb(255, 150, 0)"
  />

</svg>


Now that we have a grid to work off, it should be easier. We start at (0, 0). Use "M" to move the cursor to (100, 0) - which is 10 squares to the right and 1 square down. Then use "l" to move 90 pixels back (9 squares) and no squares vertically. Then use "l" again to move 40 pixels (4 squares down. Add a "Z" to signify a return to the origin, and you'll get this triangle!

logo2.svg
<path d="M 100 10
  l -90 0
  l 0 40 Z
"
  fill="rgb(255, 150, 0)"
/>



The first "T" is taking shape, and we are moving right to the underlined part.

logo2.svg
<path d="M 100 10
  l -90 0
  l 0 40
  l 30 0
  l 0 70
  l 120 0
Z"
  fill="rgb(255, 150, 0)"
/>



Now we're taking care of the jagged part of the "lightning bolt". For this, we move the line to the right and up, then horizontally left, then right and up again.

logo2.svg
<path d="M 100 10
  l -90 0
  l 0 40
  l 30 0
  l 0 70
  l 120 0
  l 15 -50
  l -10 0
  l 5 -20
Z"
  fill="rgb(255, 150, 0)"
/>



A few horizontal and vertical strokes later, we're almost done with the horizontal crosspiece of the second "T", and on course to complete the first "T".

logo2.svg
<path d="M 100 10
  l -90 0
  l 0 40
  l 30 0
  l 0 70
  l 120 0
  l 15 -50
  l -10 0
  l 5 -20
  l 30 0
  l 0 -40
  l -90 0
  l 0 40
Z"
  fill="rgb(255, 150, 0)"
/>



This is where you do a little bit of trial and error, mirroring the slanting of the "lightning bolt", but in reverse.

logo2.svg
<path d="M 100 10
  l -90 0
  l 0 40
  l 30 0
  l 0 70
  l 120 0
  l 15 -50
  l -10 0
  l 5 -20
  l 30 0
  l 0 -40
  l -90 0
  l 0 40
  l 30 0
  l -5 40
  l 15 0
  l 0 20
Z"
  fill="rgb(255, 150, 0)"
/>



That's actually the hardest part - the rest is all horizontal and vertical strokes.

logo2.svg
<path d="M 100 10
  l -90 0
  l 0 40
  l 30 0
  l 0 70
  l 120 0
  l 15 -50
  l -10 0
  l 5 -20
  l 30 0
  l 0 -40
  l -90 0
  l 0 40
  l 30 0
  l -5 40
  l 15 0
  l 0 20
  l -80 0
  l 0 -60
  l 30 0
Z"
  fill="rgb(255, 150, 0)"
/>



What we do now is remove all the grid lines...
<svg version="1.1" width="210px" height="130px" xmlns="http://www.w3.org/2000/svg">
  <!---
  <line x1="0" x2="210" y1="10" y2="10" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="20" y2="20" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="30" y2="30" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="40" y2="40" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="50" y2="50" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="60" y2="60" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="70" y2="70" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="80" y2="80" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="90" y2="90" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="100" y2="100" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="110" y2="110" stroke="grey" stroke-width="1"/>
  <line x1="0" x2="210" y1="120" y2="120" stroke="grey" stroke-width="1"/>

  <line x1="10" x2="10" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="20" x2="20" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="30" x2="30" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="40" x2="40" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="50" x2="50" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="60" x2="60" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="70" x2="70" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="80" x2="80" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="90" x2="90" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="100" x2="100" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="110" x2="110" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="120" x2="120" y1="0" y2="150" stroke="grey" stroke-width="1"/>
  <line x1="130" x2="130" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="140" x2="140" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="150" x2="150" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="160" x2="160" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="170" x2="170" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="180" x2="180" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="190" x2="190" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  <line x1="200" x2="200" y1="0" y2="130" stroke="grey" stroke-width="1"/>
  -->

  <path d="M 100 10
    l -90 0
    l 0 40
    l 30 0
    l 0 70
    l 120 0
    l 15 -50
    l -10 0
    l 5 -20
    l 30 0
    l 0 -40
    l -90 0
    l 0 40
    l 30 0
    l -5 40
    l 15 0
    l 0 20
    l -80 0
    l 0 -60
    l 30 0Z"
    fill="rgb(255, 150, 0)"
  />
</svg>


And here's your (or rather, my) SVG in its final glory!


Now let's test this with HTML. Create this file wth a black background (or any color, really, other than orange).

tt_logo.html
<!DOCTYPE html>
<html>
  <head>
    <title>New T___T Logo</title>
  </head>

  <body style="background-color:black">

  </body>
</html>


And add in the SVG file that we created, but in different sizes, for testing.

tt_logo.html
<!DOCTYPE html>
<html>
  <head>
    <title>New T___T Logo</title>
  </head>

  <body style="background-color:black">
    <img src="logo2.svg" />
    <img src="logo2.svg" width="300" />
    <img src="logo2.svg" width="100" />

  </body>
</html>


Here, you can see the "S" part of SVG - "scalable", that is. No matter how big or small it is the logo remains crisp and sharp!


Final words

I like this new logo, and I thought the process of making it could be a good learning experience. The original will always have a place in my heart due to the lighthearted moments it was inspired from. But perhaps it's time for this blog to grow up, just a bit.

Ta___Ta for now!
T___T

Monday, 25 August 2025

The TeochewThunder Logo Change

TeochewThunder's logo has changed. You heard it here first! Well, duh.

More than ten years have passed since I first started TeochewThunder. Back then, the logo looked like this.


I was going for something whacky in my favorite color, orange. Thus, the crying-face emoji "T___T" became my goto. And I used some super-basic text art creator (was it MS Word? I really can't recall) to put that cheeky bend on it.

The time has come for a slight change. I still want that "T___T", but I want the second "T" to look like a lightning bolt! Teochew "Thunder", right?


I'd been thinking about a brand renewal for a while now, but never quite got round to it. Mostly because while the first logo was a complete rush job and very casually done, it really grew on me the last decade. Especially when I saw it in browsers or on my mobile.

The Favicon in browser.

The Favicon in mobile.

The end result was that I kept putting off the task of creating a new logo, and implementing the change. Why fix it if it ain't broke, amirite?

That one final push

As it turned out, the choice was made for me. My trusty faithful Lenovo died, and with it the source file for the logo. This meant that if I ever wanted a fresh copy to resize or whatnot, I would have to work off existing exported images. Not exactly ideal.

Thus, I bit the bullet. This time, I created an SVG. This meant that as long as I had the formula for the SVG, I could recreate it from anywhere. All I had to do was save it to my GitHub account, and I was good for eternity. And also, being an SVG, it could be scaled up and down infinitely with no loss in quality.

New Favicon in browser.

New Favicon in mobile.

The rest of the month was spent replacing the logo everywhere I found it. I replaced it on GitHub, Trello, and on the signoffs of my blogposts. And of course, the Favicon. However, I'm too fond of the old logo to totally let it go. What I'm going to do is leave it as legacy, but use the new logo for all other content moving forward.

Keep Thundering On!

When I first learned how to make SVGs, it wasn't with this express purpose in mind. But I'm glad I invested that time and effort.

Stay iconic,
T___T

Thursday, 21 August 2025

Film Review: Black Mirror Series Six (Part 3/3)

This next one might just be my favorite of the entire bunch. It's called Beyond The Sea.

The Premise

Stanfield and Ross are two astronauts who live on a space station. They are able to visit their families by means of a technology that can transport their consciousness to avatars (called "Replicas") on Earth. Tragedy strikes as the family of one astronaut is murdered...

The Characters

Aaron Paul delivers a surprisingly nuanced performance as Cliff Stanfield, a taciturn and emotionally distant husband and father. My only experience with Paul on-screen is as Jesse Pinkman in Breaking Bad. This is Aaron Paul's second time in Black Mirror, having had a cameo voice-over in the episode USS Callister. Here, he has a dual role, sometimes acting as Cliff, and sometimes acting as David.

Former teen heartthrob Josh Hartnett takes on the role of the charming family man David Ross, Stanfield's colleague. And let me just say that Hartnett is severely underrated as an actor. From his early roles in 40 Days and 40 Nights and Pearl Harbor, I had him pegged as the Pretty Boy. But recently I saw him in Trap. And now this. Hartnett had me liking Ross, feeling sad for Ross, disliking Ross, hating Ross, and finally being utterly fucking terrified of Ross.

Kate Mara as Lana Stanfield, Cliff Stanfield's wife. I've only ever seen Kate Mara in House of Cards and the ill-fated Fantastic Four. At first, the role felt like one anyone could have done, but after Lisa Stanfield reveals the fact that her loyalty to her husband runs far deeper than the audience was led to believe, Kate Mara utterly sold me on her performance. Marvellous stuff.

Auden Thornton as Jessica Ross. This is really a thankless role. Thornton gets groped by Hartnett and then has to look tearful and terrified in another scene, and that's it for her.

Daniel Bell as Cliff's son Henry Stanfield. He's a meek, quiet kid with almost zero personality. The audience is led to believe that Cliff oppressed it out of him, but there are times we do see Cliff doing dad-stuff with his son, so I'm not really sure what they were going for here.

Rory Culkin has a small but memorable role as Kappa. All glowery menace and unhinged dialog.

Marama Corlett, Siân Davis and Ioachim Ciobanu as Theta, Sigma, Epsilon. I'm not sure I can tell them apart, really. They're just there as Kappa's insane sidekicks.

The Mood

It's a serene futuristic setup when in space, but when back on Earth, it's retro-style picket fences. That's because for some reason, this episode takes place in a reimagined past. This episode is long and takes a while to get to the meat of the story from the setup, so for the most part, it's quiet, somewhat sad in places, and interspersed with scenes of horrific violence.

What I liked

The beginning parts where they threw little hints that David and Cliff were... unusual. From the fans at the cinema theater to Cliff saying Grace but not actually eating with his family.

The shot of the spaceship is pretty neat, gotta say.


And also the design of their sleeping quarters.


Whatever it was I was expecting when they cut Ross open... it wasn't this. Honestly, I was expecting a metal skeleton of some kind. Not this... gel?! Mind blown. Points for originality!


That twist at the end... oof. I really thought Ross was going to murder Stanfield or something, but no, I was totally blindsided. In fact, the entire episode subverted my expectations again and again.

The characters and the dialogue are pretty well-done. It wasn't just the work of the actors that made these characters shine; it was the way they were -written-. Cliff and David weren't just good or bad guys, they were relatable, flawed men who loved sincerely and deeply. As they went back-and-forth, my sympathies shifted from David, to Cliff, then to David again. I know none of the characters actually deserved what they eventually got, but at some points they let the worst parts of themselves come through, with tragic results.

Also some of the details were pretty nice. Like when Cliff searches David's quarters and we see all the stuff his kids left for him.




What I didn't

You'd think that with these high stakes, the company would send more than the mimimum headcount out in space. It makes no kind of sense. Two people leaves very little wriggle room for accidents, mishaps and the like. This is an extended trip in space, not a buddy cop patrol beat. What's worse, the two-man thing was actually a major plot point, which drive many of the characters' decisions. Too bad it didn't make sense in the first place.

This episode went on a little long, but it's a minor quibble and one I'm inclined to forgive, all things considered.

Conclusion

Possibly the strongest episode so far, despite its flaws. That twist hit like a gut punch. The story played me like a fiddle from start to finish. And that ending was really the fucked-up finish to end all fucked-up finishes.

My Rating

9 / 10

Thoughts on Black Mirror Series Six so far

As with previous seasons, this one has been a mixed bag. Mostly positive, though. Even the one episode, Loch Henry, that I didn't like that much, was pretty good. And I didn't dislike it, just didn't think it belonged in Black Mirror. But honestly, these first three episodes are a huge improvement over Series Five.

So far, Series Six isn't Awful!
T___T

Tuesday, 19 August 2025

Film Review: Black Mirror Series Six (Part 2/3)

Now for the next episode, Loch Henry!

The Premise

This next episode is Loch Henry. It takes place in a quaint English countryside, always a win in my book. A well-publicized series of murders happened here a long time ago, and a young couple starts to make a documentary about it.

The Characters

Samuel Blenkin as Davis McArdle. I last saw him in The Continental. In here, he was thin, awkward, and just kind of meek. The entire performance was so-so, really. Except at the parts where he interacted with Monica Dolan, where the actor teared up a bit. I thought those were great.

Myha'la Herrold as Pia Koreshi. The role seemed a little bland. Not sure if that was the way it was written, or just the way Herrold played it.

Daniel Portman almost steals the show as Stuart King. Loud, brash, goofy, Stuart King is the buddy we all wish we had, the one we get up to crazy shenanigans with and owns a bar so he can get you free drinks. Also, his sarcasm is a delight to watch.

John Hannah plays Start's drunken dad Richard King. As a teenager, I first watched Hannah in Sliding Doors, and then in The Mummy trilogy. Guy's a hoot, and they hit peak perfection with this casting call. As Richard King, Hannah is equal parts cranky and morose, and anguished. He makes an entire meal out of this, but without detracting from the story too much.

Monica Dolan is mother Janet McCardle. This is Dolan's second role in the Black Mirror series, the first being a rather more forgettable outing as a Chief Inspector in the dreadfully tedious episode Smithereens. She does considerably better this time round playing an anxious and awkward mother who's really an enthusiastic accomplice to several murders.

Gregor Firth as Kenneth McCardle. A jovial lawman who turns out to be a perverted serial murderer. It was a somewhat believable turn, given we hadn't seen all that much of Kenneth McArdle so far.

Ellie White makes a couple appearances playing Kate Cezar, who runs Historik Productions and appears to be the boss of Davis and Pia. There's a little bit of an opportunistic vibe about her, which I guess we all associate with publishing houses.

Tom Crowhurst as Iain Adair. The part called for a mad-looking guy and Crowhurst delivered without being too obvious about it.

The Mood

It's a misty countryside and I could just about feel the cold air on my face and the rustic warmth of the bar. The tension goes up a few notches in the final act, but for the most part, it's a slow-burn kind of vibe. When Davis begins the narration of the case of the missing couple Simon and Dawn Challis, that's where a hint of it begins.


Later on, when a horrified Pia is watching a real sex murder on camera while the scene cuts back to Janet preparing food with a very lethal-looking knife, the accompanying music ratches up the tension like you wouldn't believe!

What I liked

The cast is small and tight - no one's wasted in their roles.

As mentioned before, the environment they shot this in was breathtaking in its natural beauty. Huge plus, if you ask me. And there's just something about Stuart's bar that charmed my socks off.


While I'm not a big fan of the twist itself, how it was implemented I have no complaints with. Pia accidentally overwriting a tape with incriminating evidence, and seeing just a hint of it at the end... great stuff! Makes me nostalgic for the days of old.



That last lingering shot of Janet's suicide note and the photos she left behind. So terrible, and so sad!

What I didn't

The premise is hardly original, and neither is the twist. (See 2003's Gothika for something similar) If someone as clueless as myself saw it coming a mile away...

This is supposed to be a Black Mirror episode but I see nothing about tech or media (unless you count VHS tapes).

Pia's death seemed kind of overkill, narrative-wise. I don't see what it adds to the story.

It occurs to me that Davis and Pia are the sixth (or more?) example of an interracial couple I've seen so far in Black Mirror. When it first appeared in Fifteen Million Merits and White Bear, I was all for it. Several episodes over multiple seasons later, it's gotten a bit gratuitous. Hang The DJ, San Junipero, White Christmas, Black Museum... the list goes on. Even the preceding Joan Is Awful! (Both Joan's relationship with Krish and the random couple whose wedding she interrupts) Normally, I'm pretty oblivious to this, so if even I noticed it... seriously, it feels like somebody is trying just a bit too hard.

I don't think Stuart would have called Davis to crow about the booming business in the bar. I mean, FFS, Davis lost both his girl and his mother in one go, and it turns out his parents were murderous psychopaths. I feel like Stuart can be insensitive, but surely he's not such a dick?

Conclusion

It's not that I didn't like this episode. I just didn't think it belongs in Black Mirror. There are episodes that don't have a tech angle such as Hated In the Nation or Smithereens, but still have a Media angle. This has neither. Running out of ideas?!

My Rating

7.5

Next

Beyond The Sea

Sunday, 17 August 2025

Film Review: Black Mirror Series Six (Part 1/3)

Series Six of Black Mirror is here, and what a ride it's going to be. Mind you, not always for the right reasons. You see, there was just something really underwhelming about this iteration of Black Mirror, even considering its predecessor, Black Mirror Series Five.


But you know what, I'm getting ahead of myself here. Let's give Black Mirror Series Six a fair shake and go through an episode-by-episode review before I sum up my general thoughts, eh?

Warning - many spoilers ahead...

You know the drill by now. Black Mirror is chock-full of shocking scenes and even more shocking language. And I'm going to spoil the ever-loving heck out of this one, so strap in, son!

We'll start with the first episode, Joan is Awful.

The Premise

Joan notices that a new series has premiered on her streaming service, Streamberry. To her horror, it's a series about her everyday life and mirrors everything up to and including the point where she's watching the series. Soon, everyone around her has a view into her private business now that it's available as public TV...

The Characters

Anne Murphy takes on the roles of Joan Tait and herself. Murphy really dials it up to eleven with the panic attack mid-way through the show.

Salma Hayek, similarly, takes on the roles of Joan Tait and herself. I believe that Salma Hayek needs no introduction, having graced the feverish dreams of teenage boys like myself in her 1996 hit From Dusk Till Dawn. Even having last seen her in a comedic role in The Hitman's Bodyguard, I was blown away by how willing Hayek was to ham it up. She looked like she was really having fun here.

Michael Cera as Beppe, the nerdy tech who explains everything to Joan, and by extension, the audience. He did well, I was so engaged.

Avi Nash as Krish. I've only seen this guy in The Walking Dead and I didn't know he could be this dramatic! Hats off!

Himesh Patek as Krish. Looking way more serious than Nash in that role!

Rob Dalney as Mac. Gave off instant douchebag fuckboy vibes. Dalney was effortlessly smarmy in the role.

Ben Barnes as Mac. I remember him as Jigsaw from Punisher. He makes a very limited appearance here and only really needs to look pretty.

Ayo Edebiri as Sandy. What we mostly see of her is at the scene where she gets canned. I thought she did a pretty good job representing the stages of grief with what little time she had. Denial ("I thought we were friends"), anger("You're a coward, Joan!"), bargaining("Please don't do this. Please. Not now!")...

Lolly Adefope as Joan's lawyer. I really liked the dialog here. Adefope delivers the entire "you're screwed" explanation with such creative flair.

Wunmi Mosaku as lawyer. Didn't I see her in Playtest? Well, the role here is basically regurgitating everything that Adefope already said as the lawyer, so it's not all that interesting.

Jared Goldtein as Eric. Dude delivers is lines. I love that he's gay but not over-the-top with it. Didn't even realize the character was gay until that scene with his boyfriend!

Jaboukie Young-White as Eric. I whooped when I saw this. I watch a lot of The Daily Show, that's why.

Kayla Lorette makes a brief appearance as the actual Joan Tait. Would have been hilarious and deeply ironic if they'd used a really big name for this role, but I guess that would have been a really expensive gag.

Leila Farzad plays Streamberry CEO Mona Javadi. She comes across as a massive asshole, which is great. Because this episode really needs something other than a faceless quantum computer to be the villain.

Danielle Vitalis as Fatima Klaas, the journalist who's interviewing Mona Javadi. She plays this role straight, looking both concerned and alarmed at the implications of what Javadi is showing her. In a sense, she's a conduit for the audience.


Luke Beattie is Brutus the security guard. This dude sure didn't look like a "Brutus". Sure, it was a bit part, but musclebound meatheads are everywhere, the show producers really could have done better.


Rich Fulcher as Gainsborough, Salma Hawek's lawyer. He's meek and befuddled, but he can't do shit, so I kind of felt for the character there as he got chewed out by Salma Hayek.

The Mood

The atmosphere is bright and the vibes are light even as disaster after disaster occurs. This episode is more of a comedy adventure than a tragedy, and it shows.

What I liked

The concept of Streamberry (looking uncannily close to Black Mirror's current platform Netflix) is deliciously on the nose. And also, the title design for this episode is so apt!


When Joan and Krish are going through Streamberry's shows for the first time, we're seeing references to other Black Mirror episodes. So cheeky!

The twist at the end gave rise to so many questions. Like, if everything that happens in the series is a mirror of what went on in "real life", did the real Joan Tait actually defecate in a Church?! Holy shit. Literally!

Now, I normally don't like a huge cast, but in this case it was absolutely justified. The big names such as Salma Hayek and Cate Blanchett (in the role and non-speaking cameo respectively) just added layers of context. Plus, it just tickled me.

What I didn't

After Joan's lawyer explains how Streamberry knows everything in real-time due to her phone eavesdropping on her, Joan still goes ahead and has sex with Mac (or attempts to) without taking the proper precautions?! Um...

While I loved having Salma Hayek in the cast, it just didn't make sense that this basically meant that the role of Joan Tait was race-swopped. Which in itself wasn't that big a deal, until I noticed that this was the only role where it happened. Consistency, people!


I was not really buying that quamputer design as this mega-processor. I'm supposed to believe that this is the machine behind those huge virtual worlds, the AI generation and stuff?!

Conclusion

This entire episode is a goofy and sometimes gaudy spectacle. There's never any sense of high stakes - even as horrible things keep happening to our protagonist, they're played more for laughs. And that's not a criticism - it's perfect for this episode. Twists are aplenty. It's a wacky fun time for all, even without the typical Black Mirror tragic ending.

My Rating

8.5 / 10

Next

Loch Henry