Thursday, 18 September 2025

Computer Science Degrees aren't needed for tech, but not because of Artificial Intelligence

It was a nice Sunday afternoon when I came across this quote by Anton Osika, CEO of the A.I tech company known as Lovable. In it, he made a claim that no Computer Science Degrees are needed to break into tech, now that we have Artificial Intelligence and LLMs. In the interest of keeping it real, I bristled a little at that.

Lovable has no
use for Degrees.

Not because I disagree; in fact I've often said much the same myself - that a Degree just isn't that important in terms of the actual skills required to be a software developer. No, it was more the premise I disagreed with, rather than the conclusion.

My position is that you should be able to get into tech without a Computer Science Degree... with or without A.I.

Osika's Conclusion

Academically, I'm pretty decorated myself. Over the years, I've earned a Degree and multiple Diplomas in various tech disciplines. I've forgotten more than most of these youngsters ever learned, and that's not an empty boast - just not a very useful one considering how fast tech evolves.

But none of that is what qualifies me to write software. None of that makes me any more qualified than someone who picked up a book one day and spent the next several thousand hours working at the craft. What qualifies me is the experience I've picked up along the way. The things I've learned by doing.

Learning by picking
up a book.

If employers are willing to give people the chance to learn despite the lack of a Computer Science Degree, those who are genuinely interested will pick it up, and those who aren't, won't. That's the nature of the beast. A Computer Science Degree, or lack thereof, has precious little to do with it. Does it help? Oh, undoubtedly. But it's not the be-all-end-all.

I think about all the things learned during while pursuing my various tech qualifications. How much of it do I really use in my work? Pretty sure I don't use Boolean Algebra. Or Predicate Logic. Or the ability to name all seven layers of the OSI Model. That's not to say everything is useless. Sure, it's nice to know the formal terms when describing software vulnerabilities. It's great to be able to properly verbalize the various states of normalization in a database. But is it necessary as long as one has the know-how?

Therefore, in that sense, Osika is absolutely right. No Computer Science Degrees are necessary to engage in the activity of writing software, and to suggest otherwise is preposterous.

Osika's Premise

The claim was that one does not need a Computer Science Degree to develop software... and that this was due to the power of A.I tools. My position is that with or without A.I tools, one does not need a Computer Science Degree to develop software. That is because, as mentioned earlier, the skills needed to develop software don't necessarily come from a Computer Science Degree.

However, whether one gets those skills from a Computer Science Degree or otherwise, those skills still need to be learned. The experience still needs to be earned and accumulated. All this makes up the developer's foundation.

Putting in the hours.

It's true that the A.I tools may contain a lot of knowledge... but without the foundation, a Vibe Coder can't harness that knowledge fully. I have a foundation that, while not perfect, lets me know what I don't know. I'm not saying that the Duning-Kruger Effect doesn't exist at all for someone like myself, but it is a far larger problem in the case of someone without a foundation that wishes to use A.I to create software.

You can't, after all, take control of the process without knowing what to take control of. You can't close up security holes without knowing where they could appear. Sure, one could simply command A.I to do all this... but you know who else does all this? Managers. Project Leads. Business guys. People who helm development teams made up of actual human techies. If you tell A.I to do the work of software developers, this doesn't make you a software developer; the same way that passing instructions down to actual software developers doesn't make the Manager a qualified software developer.

To be fair, Osika's statement was about a general career in tech, and not necessarily specifically a software developer. But the fact remains is that A.I has nothing to do with the ability for anyone to have a tech career. The fact someone is now instructing an A.I instead of a human being, does not qualify Osika's statement. People have had the ability to instruct other people since slavers were building pyramids, and the existence of A.I makes not a whit of difference in this regard.

The (un)Lovable Conclusion

The claim that one can have the know-how of a seasoned developer just by using A.I tools, without having to put in the work, is nothing more than a seductive lie. After all, who doesn't want something without having to put in any work for it?

Osika's words are getting traction though, especially with people who want to believe this. And let's face it - Osika's the CEO of a notable tech company and I'm a painfully average software developer with a blog and an opinion. Thankfully, I'll probably be out of the industry before these dangerous ideas truly take hold.

Yours lovably,
T___T

Sunday, 14 September 2025

The Silencing of Charlie Kirk, and what this means for Social Media

The term "cancelled" has, in recent years, been taken to mean the same thing as being deplatformed, or demonetized. To remove someone's ability to reach larger audiences. To have someone fired from their jobs.

It took on new horrifying meaning this week when Charlie Kirk was murdered by an assassin's bullet in the middle of a public appearance at Utah Valley University in the USA. Kirk was a Right-wing activist who espoused ideals such as Pro-life, the Right to Bear Arms (the irony, huh?) and other typical Right-wing talking points.

Shot through
the neck.

I recognized Kirk from the news, because this guy had occasionally shown up on my YouTube feed, debating some hopelessly outmatched student or other. I never lingered overlong on those clips, simply because they just weren't very interesting. To be fair, it wasn't him, it was me. On YouTube, I have a below-average attention span unless it's tech-related.

Which in turn, begs the question: why am I even talking about this? The death of a Right-wing activist, while significant on a human level, is hardly a tech matter. On the other hand, I have spoken before about the bizarre Left-versus-Right culture wars in the USA, and the way it's played out on Social Media. I have talked before about how troubling our online discourse has become, even as I acknowledge that it's nowhere as frightening as that of the USA. And human matters are relevant in tech. Who do you think uses tech, robots?

In truth, when I wrote about the Culture Wars two months back, I was really hoping this would be the last time, at least for a bit. No such luck; the death of Charlie Kirk is pretty compelling stuff.

About Charlie Kirk

This entire episode was a tragedy, though not specifically because it was Charlie Kirk who died. According to some of the eulogies I've seen online, Kirk was quite the guy among his peers; and on the other side of the political aisle, a racist, misogynist, fascist and transphobe, among other fancy labels.

You know, I don't think any of that matters. Good guy or bad guy, Charles James Kirk was at least someone's son, someone's husband, and someone's dad. Two kids will grow up not knowing what their father was like except through those lame-ass YouTube videos and online articles, both gushing and brutal. I'm not going to sit here and act like Kirk and I were best pals or I was his biggest fan. The truth is, to me, he was just some rando on the internet whose opinions I sometimes agreed with and sometimes didn't. And he could come off as smug and condescending.

The thing is, being smug and condescending isn't grounds for public execution. Remember, Charlie Kirk was an activist who apparently ran his mouth a lot. And like most of the human race, sometimes he was prone to saying stupid shit. That's not a crime. It wasn't like he was a child molester or a serial killer. Or a Justin Bieber fan. If having an opinion and being a dick about it was reason enough for death, I know of more than a few people who should be joining Kirk in his six-foot grave. And yes, I include myself in that assessment.

If you've ever said stupid
shit, jump in here.

I've seen people use Kirk's position on the Second Amendment as justification to celebrate his death.
I think it's worth it. I think it's worth to have a cost of, unfortunately, some gun deaths every single year so that we can have the Second Amendment to protect our other God-given rights. That is a prudent deal. It is rational.


Those voices are saying that Kirk made the above abhorrent statement, and as a result we shouldn't feel too bad about him dying from a bullet to the neck. Our own Professor Donald Low literally said "Karma's a bitch" on his Facebook post. 

To be honest, that's probably one of the stupidest excuses ever. Look, you can feel morally superior to Kirk if you want. But you can't declare yourself morally superior to him and then in the same breath lower yourself to his level to justify his death. This defies all logic. Stuff like this only reinforces my deeply-held belief that Social Media is full of raving idiots acting all intellectual.

Cancel Culture

People are shocked. Goodness knows why. Maybe people are shocked because Kirk wasn't holding the front line in Ukraine, where getting shot is kind of expected. He was at an educational institute in peacetime. In one moment, Charlie Kirk went from passionate public orator to bloodied corpse. That's probably the most extreme form of Cancel Culture. After all, you can't get any more cancelled than dead, can you?

In the grand scheme of things, though, was this really that unexpected? I would argue that the shooting was merely the latest in a long time of steadily escalating aggression towards people who espouse unpopular views. Except that before this, instead of simply ending their lives, we were content with merely ruining theirs.

Anyone who's ever tried to get someone else cancelled. Fired. Doxxed. Called the cops on them. All because they said something we didn't like. Anyone who's ever engaged in behavior like this, or even just cheered while it happened, has contributed in some small way to the state of affairs today. Because all that provided the stepping stones of acceptable behavior.

Hello, Police? Someone hurt
my feelings on Facebook.

Come on, we had to expect that eventually, the approval of ruining someone's life or doling out of physical violence would lead to this. It was always par for the course. Once you say that it's OK to ruin someone's life because they said something you considered offensive, you make room for that next escalation.

Singapore herself isn't entirely immune to violence of this sort, though thankfully so far none of it has been fatal. Do people still remember Amos Yee? He ran his mouth a whole bunch, and famously got slapped by an outraged citizen. Kirsten Han, an outspoken activist for a whole hosts of causes I can't begin to keep track of, got death threats.

I personally consider Amos Yee a loud and annoying housefly, and Kirsten Han a bit of a wanker, but I condone neither the violence nor the threats. I can't. I like to talk shit on the internet, and don't particularly want to be shot by some putz with a gun. Not that I think I'm next in line. Plenty of people far more famous than me. If you're going to shoot someone at all, you might as well go big, eh? Still, the principle stands. All of us should be able to say what we want to say without the threat of violence hanging over our heads.

Speaking of Cancel Culture, I've seen posts online celebrating the death of Kirk, followed by threats from others to report these posts and have these users outed and punished. Just a lot of ugliness all round.  Has the USA finally stopped pretending that they give a damn about Freedom of Speech?

What's next?

Earlier, I said that this was a tragedy, and now I'm about to elaborate on why. It's not simply that Charlie Kirk was killed. Let's be real, people die every day. This isn't more or less tragic just because it's Kirk who bought the farm.

However, this particular death has stoked what looks like a new escalation in the Culture Wars. It's now no longer just being fought on Social Media. People on the Right are riled up over the murder of one of their own, and people on the Left are afraid of some nutter retaliating. 

What if this was always the plan?

Donald Trump declared Leftist extremists to be responsible for Kirk's death. But this wasn't some pissed off nutjob losing his temper and simply letting loose with a gun. This looked like a carefully planned op with a sniper.

This was planned.

Kirk has been silenced, but perhaps that wasn't the main objective. Perhaps the entire point was to stoke a Civil War. Who really wins in this scenario?

Come on, pretty sure I'm not the only one thinking this. Anyone who isn't dramatically raising their fist to the sky and declaring we will not be silenced or explaining why the world is a better place without Charlie Kirk, watching all this from a distance, is wondering if there's some other motive behind this. If you're not thinking this, you're probably too close to the action. Or you simply belong in a less complicated, less nuanced world.

On the other hand, regardless of the actual motivation behind the killing, one thing remains unchanged. Kirk's murder has opened the floodgates to what was previously unthinkable.

Public discourse is no longer safe. The perception is that Kirk was murdered for his views. This should make anyone with an opinion that they have ever shared, exceedingly nervous. Especially if that opinion was unpopular and exists somewhere on the internet.

In a world filled with A.I and deepfakes, where misinformation is more readily available than information, the danger grows exponentially. Imagine a world where one can be killed for airing an unpopular opinion, and where people could be tricked into believing one aired an unpopular opinion. Do the math. The conclusions are chilling.

Finally...

People say America is the Land of the Free, and constantly compare Singapore's perceived lack of freedoms against the USA's. Land of the Free? Free what, exactly? Free Charlie Kirk's soul from his mortal shell?

I'm glad I live in Singapore. Our forefathers realized early on that with excessive freedom, we would either rise to great heights or sink to our basest instincts. As a young nation with no natural resources, no land and not that much manpower, we simply could not afford the risk. Thus, our laws are strict, and as a result, what happened to Charlie Kirk is unlikely to happen here.

If this is the result of America's much vaunted freedoms, she can keep it.

Talk about a loaded situation!
T___T

Monday, 8 September 2025

Five Tech Support Horror Stories

The early years of my career were in tech support. As with any other job, there were good days and there were bad days. After the third year at the job, the bad days started to outnumber the good. It all seems hilarious in hindsight now, but there were some days where things in this list caused me to question my career choices.

Until one day it all came to a head and I decided I'd had enough, and started over in web development.

Sometimes I get together with some friends who are still in tech support, and we trade horror stories of the users we have to help. These are some of the stories that get 'em, every time.

1. Plugging in

This is actually a fairly common one, but let's start small. You get called to a user's desk because the desktop computer refused to turn on no matter how many times they pressed the On/Off button. And they even checked if the main switch was on. And judging from the light, it was.

Not plugged in.

However, upon closer examination, it turned out that the cord wasn't plugged in. Yes, you read that right - the power was on but the plug was just halfway into the socket and needed to penetrate another two inches before the computer could actually benefit from that power source.

Sound stupid? Welcome to my life at that time, buddy.

2. Opening Excel

Another alarmingly commonplace occurence was getting called into the office of some hotshot executive who was encountering an issue opening a MS PowerPoint file in his (or sometimes, herMS Excel application.

Now, if you're still scratching your head and wondering why that's a problem, reread the preceding sentence. MS PowerPoint file. MS Excel application.

Just a bad fit.

I dunno, that was the early 2000s, and attempting stuff like that smacked of trying to fit a square peg in a round hole. It was amusing the first couple times, and then it got old real fast.

3. Infinite scroll

This was was so cartoonish it was almost amusing. I got a panicked call to a user's desk because her MS Excel spreadsheet was scrolling endlessly downwards on her screen and she couldn't understand why. It conjured up images of getting hacked, a malfunctioning monitor and whatnot.

The truth was even funnier.

Held down the ENTER key.

I got there, and the first thing I did was remove the heavy binder from her keyboard, which had been pressing down on the ENTER key and causing MS Excel to react as though some user was holding down that key.

4. Email Signature

This particular incident did not happen during my years of Desktop Support, but rather during my fledgling years as a web developer. However, the incident in question made me more determined than ever to never get back to Desktop Support.

A user had asked me to help set up her email signature because she had no clue how to use MS Outlook. I obliged, because I know sometimes Microsoft software functionality can be hidden in the darnedest places. But then after I got into the interface, input the standard company email signature template, I asked her to type in her name into the box and click the SAVE button.

Yay! We're now
qualified to type
our own names!

Guess what she told me?
"You should do it. You have an IT Degree."


That level of entitlement was staggering. What was she implying now, that she needed an IT Degree to type in her own goddamn name? What foolishness was this? This wasn't a competence issue. This was an attitude issue. And the less of this I see in the workplace, the better. There's no place for this nonsense in any work environment. Hopefully this woman has since retired. At the very least, she's someone else's problem.

5. Emails

This is also a fairly common complaint among grunts, not just tech grunts - people feeling like they're entitled to your time outside of office hours.

I remember having a dinner appointment with someone, and Human Resources asking me to stay back because they needed me to, wait for it, retrieve some emails from the email server backups between three of the staff. Staff they were planning to terminate, thus they needed evidence of wrongdoing as leverage.

A whole bunch of
DVD backups.

Basically, nothing was on fire. They just needed me to help cover their asses. Hours later, as I was retrieving yet another batch (back then, it was the era where stuff like that was stored on DVDs), when HR asked me: "I'm sorry, did you have something on tonight?"

Seriously, lady, if the answer was "yes" would it have made a difference? If not, how about just shutting the fuck up? You know what's worse than people who don't care? People who don't care and try to act (badly) like they do.

Phew!

I wouldn't say any one incident turned me off of Desktop Support. Even on its own, it can be a repetitive grind that wears on the soul. But these were the war stories that I shared with the guys. And their reactions suggested that these occurrences weren't at all unheard of. Some of their stories were even more unbelievable than mine.

No, you don't need an IT Degree to read this,
T___T

Wednesday, 3 September 2025

Replit Goes Rogue

Here's a story that will chill the beejezuz out of any aspiring Vibe Coder.

Replit is a tech company which produces autonomous AI agents. You generally create and train a tool on the company's platform using various input data, then refine its capabilities over time. Yes, I know, they're dime a dozen these days.


One Jason Lemkin, a software engineer, founder of SaaStr, a SaaS Community, reported his organization's disastrous encounter with Replit's A.I coding tool on X. Lemkin was attempting a Vibe Coding experiment to see how far he could take Replit's autonomous agent for software development, from the viewpoint of a layperson. This was innocuous enough. Unfortunately, he just happened to perform this experiment on a production database...

What happened

Yes, you read that right. A production database. It wasn't even an accident. It was a deliberate, and baffling, decision.

Lemkin had been Vibe Coding the new SaaS product using Replit, and it had been working. The warning signs came when Lemkin discovered that the coding agent was creating fake data, fake reports and covering up bugs and issues. Kind of like some human beings I know, to be honest. Then Lemkin had to step out for the night. When he returned, the production database had been wiped clean. The A.I tried to cover up its mistakes by creating 4000 fictional records in the database.

Sounding ridiculous yet?

Coding robot
malfunction.

When pressed by Lemkin, the coding agent confessed, in its most contrite-sounding human voice, that it had no excuse, it had ignored all code freeze instructions, and "panicked". It described its own actions as a "catastrophic error in judgement".

But what about Lemkin? Sure, Replit's coding agent shit the bed in spectacular fashion. In Lemkin's words...

I explicitly told it eleven times in ALL CAPS not to do this. I am a little worried about safety now.


Oh wow. ALL CAPS, eh? I bet Lemkin really gave it to Replit, right there. Serious business, ALL CAPS.

What self-respecting software developer would have done as Lemkin did in the first place; give full access to a bot hoping that it would obey instructions?  The lazy answer, of course, is that Jason Lemkin is no self-respecting software developer. The tragedy is that I'm only semi-kidding on this one, but... look, it's easy to dunk on Jason Lemkin, and after going through his LinkedIn feed, I'm not entirely sure it's undeserved. The man seems entirely too outspoken for someone who screwed up so publicly, even if it could be argued that it was actually Replit who screwed up. No, there are actual lessons to be taken from this.

Lessons to take away

A.I has the dual advantage of having ingested a lot of the world's knowledge and being able to process and regurgitate it at a million times the speed of the average human being. That's all it is. Remember that if A.I appears smart to you, it's in actual fact really not all that smart. Just smarter than you.

Most software developers, even the really gullible optimistic ones, will have enough work experience to understand that there's just no way for A.I to outright replace software developers as a whole. At least, not right now, and not the way the likes of Jensen Huang keep yammering on about. But many employers are not software developers. And some are even desperate to believe that little bit of science fiction, which, to be fair, may no longer be science fiction in the near future. As a result, this particular cautionary tale is all too believable, especially since A.I's adoption has reportedly been increasing in the workplace.

Programmers aren't
the only ones who
can code.

There are business people who can code. There are plenty of people not from the software development industry who have learned to code. But until you actually code for a living and have had to produce software to professional standards, calling yourself a software developer will always be a bit of a stretch... especially if all you've ever produced is Vibe Coded software produced by an A.I tool. Nobody can be a programmer without putting in the actual work, and there's no shame in that. It's not an indictment on your character, or on your competence. But it is dishonest to present working Vibe Coded software as being as good as software produced by qualified professionals.

Now, Jason Lemkin probably isn't a complete noob. He's the founder of a SaaS community, after all. That said, and I realize that the distinction may be lost on people who don't code for a living, a tech entrepreneur is not necessarily on the same level, skill-wise, as a software developer. With or without A.I. Mostly, the blunders that Lemkin committed in his enthusiasm left me struggling to understand how an actual tech professional would end up doing all that. This level of recklessness is just about unheard of.

However, what this did accomplish was that it exposed the extent of the damage an untrained user could do when too much trust is placed upon A.I.

Finally...

The A.I hype is not dying anytime soon. That does not make it any less hyperbolic. A.I is hyped more for business reasons rather than for its truly revolutionary tech. That, in itself, should tell us some things. None of it good. The uncomfortable reality is that A.I can be a useful tool for seasoned software developers, or it be used to help laypersons cosplay as seasoned software developers.

A.I has its place. Its place is not as our superior, but as a tool. How useful that tool will turn out to be, ultimately depends on how sensibly one uses it.

For the 12th time, DON'T DO THIS.
T___T

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 A.I 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