Saturday, 14 November 2026

Enough of trying to be enough!

Language can be contradictory. I had the occasion to encounter one such contradiction when an ex-classmate tried to sell me insurance. He said "No matter how much insurance you buy, it's never enough." He probably meant it sincerely, but it struck me as a profoundly ineffective sales pitch - if it'll never be enough, that makes me less eager to buy insurance, not more. After all, if I'll never achieve a goal, why put pressure on myself to achieve it?

Enough, already.

That brings me to a point that several life coaches I've heard on YouTube and the Clubhouse app, like to say - "you are enough". Which, ironically, while meaning the complete opposite of "you'll never be enough", achieves the same result. If you are enough, why do more?

Being enough

Back in the day, I never told myself I was enough. That would have been a big fat lie. I knew I wasn't enough. I constantly strived to learn more, hone my craft, do better, as a web developer. But at the same time, with the way tech was advancing, it was clear as day that I would never be enough. Therein lies the contradiction; why then, did I keep going?

Late into the night.

Another friend asked, "to what end?" Why did I keep signing up for Specialist Diplomas, or spend countless nights on code? My friend felt that I needed to have an end goal in mind. In effect, he was asking, "when will it be enough?"

The answer was "never". It will never be enough, because I will never be enough. And if I'm being honest, it's part of the fun.

Because being enough wasn't a goal I was trying to achieve by working on my skills. I wasn't putting up with an unpleasant task (like buying insurance, and I apologize in advance to the psychos who actually enjoy buying insurance) to reach a destination. I genuinely enjoyed working on my skills. Not having an end in sight did not bother me. In fact, since there was no end in sight, I could just enjoy the journey instead of fussing about the destination.... because there was no destination.

Basically, I was saying to that bright-eyed bushy-tailed kid in the mirror, "you are not enough, and you don't need to be."

Career skills

To illustrate, I have never learned Kubernetes even though doing so would make me an undeniably more complete developer. Kubernetes sounds oppressively boring. It sounds like the kind of thing people pick up out of professional obligation (and yes, I apologize in advance to the psychos who actually enjoy dealing with Kubernetes). The tech field is wide and varied enough that I could easily find something way more fun to get good at.

For example, I'm sure my employer would rather I get cybersecurity certification rather than a front-end one... but it's my time I'm using, my money I'm spending, my sweat that gets expended, thus ultimately this is about my happiness, not his. In fact, I would unsympathetically say that if any employer wants a developer with a cybersecurity cert, they should hire a developer with a cybersecurity cert. Instead of hiring a developer with a whole host of certs other than a cybersecurity one, and then gambling that this dev feels an inclination to get a cybersecurity cert. I understand cost savings, but it seems like a stupid hiring practice.

Transform, dammit!

It's like purchasing a Freightliner truck and then pitching a hissy fit because it doesn't transform into Optimus Prime, or even make an effort to.

Few employers will ever think you bring enough value for what you're paid, or admit that out loud even if they do. But that's for another time, another day.

Conclusion

I'm not saying this from a position of privilege. I don't earn six figures a year unless you count CPF (who does, really?), I earn enough to get by. Though I will concede that a guy whose main love is slinging code in the wee hours of the morning needs far less than someone who's consistently hitting the nightspots. No judgement there; you contribute more to Singapore's economy than I do, thank you for your service.

This isn't career advice. You don't always have to love your job. It's not humanly possible to always love your job. But I do love what I do, and it helps when my job, my colleagues, my employers, or some unholy combination of all of them at the same time, annoy me. It certainly makes the task of striving to be better, a lot less onerous than it could otherwise be.


Enough said,
T___T

Sunday, 8 November 2026

Web Tutorial: The Palindrome Detector

One of the fun little exercises that used to get thrown at us aspiring programmers, was a palindrome checker. In the console, we'd ask the user for a string, and then see if the string was a palindrome. Trite? Completely. But it brings me back. So screw it, we're doing that today.

What's a palindrome? Well, that's a string of text that's spelled the same backwards and forwards.

"Wow."
"Madam, I'm Adam."
"Able was I ere I saw Elba."

The rules are simple - all punctuations and spaces get removed for the purposes of evaluating the text. Anything below three valid characters doesn't count. Optionally, comparison may be case-insensitive.

I don't intend to stick to best practices for this. So my CSS naming choices might be dodgy and I'm not going to insist on good semantic HTML.

Let's get to it!
Here's some starting HTML. Have divs outlined in red.
<!DOCTYPE html>
<html>
  <head>
    <title>Palindrome Checker</title>

    <style>
      body
      {
        font-size: 16px;
        font-family: Verdana;
      }

      div { outline: 1px solid red; }
    </style>

    <script>

    </script>
  </head>

  <body>

  </body>
</html>


Add three divs.
<body>
    <div id="pnlString">

    </div>

    <div id="pnlOptions">

    </div>

    <div id="pnlOutput">

    </div>

</body>


This is the CSS. All of these divs are 800 pixels in width, centered via the margin property with a bit of spacing at the top. The text is also aligned center. For pnlOutput, we even have a grey dotted border.
<style>
body
{
    font-size: 16px;
    font-family: Verdana;
}

div { outline: 1px solid red; }

#pnlString
{
    width: 800px;
    margin: 50px auto 0 auto;
    text-align: center;
}

#pnlOutput
{
    width: 800px;
    height: auto;
    margin: 10px auto 0 auto;
    text-align: center;
    border: 3px dotted rgb(100, 100, 100);
    border-radius: 30px;
}

#pnlOptions
{
    width: 800px;
    margin: 0 auto 0 auto;
    text-align: center;
}

</style>


In pnlString, we want a label and checkbox. Have some examples of a palindrome in the placeholder attribute.
<div id="pnlString">
    <input id="txtString" placeholder="Enter text, e.g, Kayak" />
</div>


More CSS. We want txtString to look a certain way. Or rather, I do. It's all visual; let your taste define the look.
#pnlString
{
    width: 800px;
    margin: 50px auto 0 auto;
    text-align: center;
}

#txtString
{
    display: inline-block;
    width: 20em;
    height: 1.5em;
    font-size: 2em;
    font-face: "Courier New", monospace;
    text-align: center;
    border-radius: 10px;
    border: 4px solid rgb(200, 200, 200);
}


#pnlOutput
{
    width: 800px;
    height: auto;
    margin: 10px auto 0 auto;
    text-align: center;
    border: 3px dotted rgb(100, 100, 100);
    border-radius: 30px;
}


So far, this is what we have.


Add two divs in pnlOutput, ids pnlResult and pnlVerification. Have some default text in them.
<div id="pnlOutput">
  <div id="pnlResult">(no text yet)</div>
  <div id="pnlVerification">Enter some text above</div>   
   
</div>


Some CSS for these divs. They both take up full width of their parent, have a defined height and have text aligned center. I'll keep the text color for pnlResult a deep grey.
#pnlOutput
{
  width: 800px;
  height: auto;
  margin: 10px auto 0 auto;
  text-align: center;
  border: 3px dotted rgb(100, 100, 100);
  border-radius: 30px;
}

#pnlResult
{
  width: 100%;
  height: 1.5em;
  font-size: 2.5em;
  font-face: Georgia;
  text-align: center;
  color: rgb(100, 100, 100);
}

#pnlVerification
{
  width: 100%;
  height: 1.5em;
  text-align: center;
}


#pnlOptions
{
  width: 800px;
  margin: 0 auto 0 auto;
  text-align: center;
}


Thus, we have display text for statuses.


Add a checkbox and label. The checkbox should have an id.
<div id="pnlOptions">
  <label><input type="checkbox" id="cbIgnoreCase">Ignore Case</label>  
</div>


Here is CSS for the label. It's basically bolded text.
  #pnlOptions
  {
    width: 800px;
    margin: 0 auto 0 auto;
    text-align: center;
  }

  label
  {
    font-weight: bold;
  }

</style>


And this is the beginning state.


Run checkPalindrome() when text changes. And when the checkbox is clicked.
<div id="pnlString">
  <input id="txtString" oninput="checkPalindrome();" placeholder="Enter text, e.g, Kayak" />
</div>

<div id="pnlOptions">
  <label><input type="checkbox" id="cbIgnoreCase" onclick="checkPalindrome();">Ignore Case</label>  
</div>


As we create checkPalindrome(), let's create two more functions - setResult() and setVerification(). They are used to populate the divs with information. Also create isPalindrome(). All these functions will be called by checkPalindrome().
<script>
  function checkPalindrome()
  {

  }

  function isPalindrome()
  {

  }

  function setResult()
  {

  }

  function setVerification()
  {

  }

</script>


setResult() is probably the easiest. We give it a parameter, str. pnlResult's content will be set with str.
function setResult(str)
{
  document.getElementById("pnlResult").innerHTML = str;

  return;

}


setVerification() has two parameters; str - just like in setResult() and colorCode, which has a default value. We begin with a return statement at the end.
function setVerification(str, colorCode = "default")
{
  return;
}


Then we have an object, colors. It has four properties, each one with a corresponding color string as a value.
function setVerification(str, colorCode = "default")
{
  let colors =
  {
    "default": "black",
    "success": "green",
    "failure": "red",
    "pending": "grey"
  };


  return;
}


We set pnlVerification as the DOM element pnlVerification. Then we set its color property by referencing the colors object with the value of colorCode, and set the content using str.
function setVerification(str, colorCode = "default")
{
  let colors =
  {
    "default": "black",
    "success": "green",
    "failure": "red",
    "pending": "grey"
  };

  let pnlVerification = document.getElementById("pnlVerification");
  pnlVerification.style.color = colors[colorCode];
  pnlVerification.innerHTML = str;


  return;
}


isPalindrome() has a parameter, str. Its job is to determine if str is a palindrome. For this, we declare arr as an array of all letters of str. We use the Spread operator for this.
function isPalindrome(str)
{
  let arr = [...str];
}


We return a Boolean value, determined by reversing arr and turning it back into a string using the join() method (with an empty string as the argument) and then comparing the result to str.
function isPalindrome(str)
{
  let arr = [...str];
  return (arr.reverse().join("") == str);
}


Now we're finally going to work on checkPalindrome(). We start by declaring txtString as the DOM element by the same id. We then declare processed, and use it to store the value of the sanitized value of txtString, by stripping out anything that isn't an alphabetical character.
function checkPalindrome()
{
  let txtString = document.getElementById("txtString");
  let processed = txtString.value.replace(/[^a-zA-Z]/g, "");


  return;
}


And if processed turns out to have zero usable characters, reset to factory settings.
function checkPalindrome()
{
  let txtString = document.getElementById("txtString");
  let processed = txtString.value.replace(/[^a-zA-Z]/g, "");

  if (processed.length == 0)
  {
    setResult("(no text yet)");
    setVerification("Enter some text above", "default");
  }


  return;
}


Now that's out of the way, we should, regardless, make processed visible by using it as an argument in setResult(). Then we'll have an If-else block to check if processed has 1 character or less. In that case, we'll set the text to "Inconclusive..." with a different color code. If later processed turns out to have zero characters, it will be handled by the If block at the bottom.
function checkPalindrome()
{
  let txtString = document.getElementById("txtString");
  let processed = txtString.value.replace(/[^a-zA-Z]/g, "");

  setResult(processed);

  if (processed.length <= 1)
  {
    setVerification("Inconclusive...", "pending");
  }
  else
  {

  }


  if (processed.length == 0)
  {
    setResult("(no text yet)");
    setVerification("Enter some text above", "default");
  }

  return;
}


If there's 2 or more characters, we check if processed is a palindrome using the isPalindome() function, then use setVerification() accordingly.
function checkPalindrome()
{
  let txtString = document.getElementById("txtString");
  let processed = txtString.value.replace(/[^a-zA-Z]/g, "");

  setResult(processed);

  if (processed.length <= 1)
  {
    setVerification("Inconclusive...", "pending");
  }
  else
  {
    if (isPalindrome(processed))
    {
      setVerification("This is a Palindrome!", "success");
    }
    else
    {
      setVerification("This is not a Palindrome!", "failure");
    }

  }

  if (processed.length == 0)
  {
    setResult("(no text yet)");
    setVerification("Enter some text above", "default");
  }

  return;
}


But what about the checkbox?

Well, glad you asked. Declare cbIgnoreCase as the checkbox.
function checkPalindrome()
{
  let txtString = document.getElementById("txtString");
  let processed = txtString.value.replace(/[^a-zA-Z]/g, "");
  let cbIgnoreCase = document.getElementById("cbIgnoreCase");

  setResult(processed);

  if (processed.length <= 1)
  {
    setVerification("Inconclusive...", "pending");
  }
  else
  {
    if (isPalindrome(processed))
    {
      setVerification("This is a Palindrome!", "success");
    }
    else
    {
      setVerification("This is not a Palindrome!", "failure");
    }
  }

  if (processed.length == 0)
  {
    setResult("(no text yet)");
    setVerification("Enter some text above", "default");
  }

  return;
}


Now we see if cbIgnoreCase is checked. If so, we set processed to be all in lowercase. Which means that when it's eventually run through isPalindrome(), it will be treated as though it's in all lowercase regardless of what case txtString is in.
function checkPalindrome()
{
  let txtString = document.getElementById("txtString");
  let processed = txtString.value.replace(/[^a-zA-Z]/g, "");
  let cbIgnoreCase = document.getElementById("cbIgnoreCase");

  if (cbIgnoreCase.checked) processed = processed.toLowerCase();
  setResult(processed);

  if (processed.length <= 1)
  {
    setVerification("Inconclusive...", "pending");
  }
  else
  {
    if (isPalindrome(processed))
    {
      setVerification("This is a Palindrome!", "success");
    }
    else
    {
      setVerification("This is not a Palindrome!", "failure");
    }
  }

  if (processed.length == 0)
  {
    setResult("(no text yet)");
    setVerification("Enter some text above", "default");
  }

  return;
}


Time to test!

Remove the red outlines.
div { outline: 0px solid red; }


We'll use "kayak". Start by adding a "k". It should read as "inconclusive", because there's only 1 character.


Add "a". Now the interface is sure; this is not a palindrome.


Add "12345". The script screens all these out, so the string to be compared is still "ka".


Now add "yaK". Note the capitalization. So the resultant string is "kayaK".


If you click on the checkbox, now the resultant string is "kayak". It's a palindrome!

Are you Wow-ed yet?

This wasn't flashy, but boy did I feel like a young programmer again! Simple enough to hand-code, small enough to digest!


xoxox,
T___T

Tuesday, 3 November 2026

AI Doomsday Scenario: Truth or Hogwash? (Part 2/2)

There's an AI whistleblower, Jacob Coxon, who says we have ten years before disaster strikes. One of his ex-colleagues at Anthropic, Evan Hubinger, said it could be by the end of this decade. Be still, my heart.

Do I believe them? Yes, in the same way I believe I could one day start an AI company that will leave them in the dust. I'll call it Teochew Thunder Labs. TTL for short, how's that for a tech pun?

Jacob Coxon

Jacob Coxon resigned from his position at Anthropic, after which he proceeded to give this interview at CNN.



In it, he said.
"So two months ago, OpenAI agents - AIs - hacked into third party infrastructure entirely of their own accord. And this was like a concentrated hacking spree that they carried out of their own volition. And I think that if you extrapolate into the future the level of capabilities of these AIs with the same independent volition, they could cause extreme havoc, for example hacking critical infrastructure, building extinction-level bioweapons. There's a lot of ways that AI could actuate itself into the world."


I'm really tired of people throwing the word "extrapolate" around like this four-syllable long word is supposed to just magically make everything sound more scientific. He basically went from "hacking spree" to "building extinction-level bioweapons".

What a leap!

This is what sensible folks like to call "a leap in logic". Which is all well and good if we're just telling fairytales. But we're not.

Even if I grant him that story about the hacking incident, the rest of it just reads like he's throwing scary words at us and just expecting us to accept it. Unless you lead such boring lives that you would latch on to a narrative that sounds like it came out of a cheesy 80s sci-fi movie, it's really hard to take at face value.

On one hand, the narrative from Anthropic appears to be "our tech is scary and we should be regulated. Our competitors should be regulated as well." On the other hand, the narrative also appears to be "our tech is scary, but that also means it's so powerful that you would be mad not to invest in us.". Here's another thing that sensible folk like to say - "having your cake and eating it".

Evan Hubinger

Another guy from Anthropic, Evan Hubinger, said that there's above a 10% chance humanity will end by the end of the decade. Now where have I heard this before? Oh yes, countless other end-of-the-world predictions we've all somehow lived past.

I don't know, "end of the decade" and "10% chance" is a pretty specific claim. How about some matching specificity in other areas? How's it gonna come about? It's probably not going to be a direct Point A to Point B scenario, such as some idiot pressing the Fire All Nukes button. We don't need Artificial Intelligence for that; we have genuine stupidity in ample supply.

Fire the nukes.

What are the specific points of failure that would need to happen, for AI to eventually arrive at the need to eradicate humanity? How was the 10% number arrived at? Hubinger is a safety researcher at Anthropic; why's he talking like some random schmuck?

Well, when they said AI will be our doom, I really hope they actually meant AI, and not LLMs. Because meeting my end at the digital hands of a steroided up Autocomplete would be the most embarrassing death ever. "Here's your nuclear ending. Would you like me to add a dash of irony to the scenario we just activated?"

So what?

I've been dunking a lot on Coxon and Hubinger. It might be unfair. They could be completely sincere despite everything around them smelling like week-old fish. There's certainly been a lot of suspicion thrown Coxon's way on Reddit and Quora, not that I would necessarily rate those forums as authorities.

This isn't even about them being right or wrong. Let's assume they're right.

Look at it this way. From the moment we emerged from the womb, we've been doomed to die. Dying isn't this huge tragedy. The average internet rando reading this hasn't really done anything with their life that their absence would be a great loss to the world. And yes, objectively I include myself in that scathing assessment.

Our days are numbered!

In recent years, I've had to send off many of my peers who were my age or maybe a couple years older. I figure I'm already ahead. Dying in ten years? It's a bonus. I had a friend who died of cardiac arrest at the age of 48. He certainly didn't have a warning. Not everyone has the luxury of knowing their own expiration date. Therefore, we should appreciate the fact that we've been given a ten year head start, and start living our best lives.

Oh, what's that? They're talking about extinction of the human race and not just me dying personally? Fair enough, but if you're gonna be dead anyway, why do you care and what do you intend to do about it? And if you can do something about it, why are you wasting your time here reading my crap?

Conclusion

All this happened in September, and I'm only writing about it in November. Why?

I am one hell of a procrastinator. It was my annual blogging break. I'm entitled to one. A bunch of tech bros going all Chicken Little, does not constitute an emergency on my part.

Sounding the alarm.

Everyone and their dog seems to have been tripping over themselves to release some kind of statement. That's certainly their prerogative. I simply don't see the urgency. Even if me posting earlier would have changed anything at all, if AI is truly as powerful as they seem to think it is, it would be already too late. I'm no superintelligence and even I have the sense to act dumb and remain undetected long before these humans saw fit to raise any kind of alarm.

Would you like some fries with your Doomsday nothing-burger?
T___T

Sunday, 1 November 2026

AI Doomsday Scenario: Truth or Hogwash? (Part 1/2)

The month of September in 2026 was almost completely dominated by one headline, in the world of tech, that is. Drumroll...

The Artificial Intelligence Doomsday Scenario.

Sam Altman, Dario Amodei and Elon Musk - all CEOs of AI tech companies, all came out to warn us that AI tech is dangerous and could result in wiping out all of humanity, and called for regulatory measures. And I find all this less than convincing. 

It's not that I disagree that regulation is needed. It's overdue, even. But the timing is... interesting. It just seems awfully convenient that this comes at a time where OpenAI and Anthropic are trying to IPO (OpenAI's plans seem to have been curtailed at this time of writing), and China is producing cheaper comparable models and giving away the services for free. These three wouldn't be trying to cripple competition via regulation, would they?

Here's the problem, tech CEOs. People with an IQ higher than the average box of rocks, don't just want to listen to your dramatic fantasies. We want to be given a plausible framework for how this could happen. Who do you think you're talking to, superstitious villagers doing a rain dance?

We're too old for bedtime stories. Show us the math. You said AI will being about the end of the world. That's a big statement. Go on, walk us through it.

Dangerous things.

Any idiot can tell me that AI is potentially dangerous. I could be a terrible driver, and even worse marksman, and still be able to tell you that cars and guns can be lethal. "AI has the capability to do great harm" isn't exactly an Earth-shattering revelation. You're major decision-makers in famous tech companies. I expect more.

Only Amodei has even made the attempt. It still sounds like science-fiction, but to be fair, it's more than either Altman or Musk have given us. Though, come to think of it, wasn't Musk the same guy who said AI should compile binaries instead of generating code? You know what, I think we'll do just fine without his input.

Amodei also called for curbs on selling chips to China.

The China issue

I would caution against putting China in this position. Remember Huawei back in 2018? USA put them in a situation where they'd have to create their own OS instead of leveraging off Android. How'd that turn out? I'll tell you how it turned out - Huawei came up with HarmonyOS and have now conquered the China market.

China has the raw materials and the energy resources. They're also known as the world's fastest builders, a reputation cemented during the COVID crisis. And also the world's foremost manufacturers, a reputation cemented long before the COVID crisis. If, on top of their capabilities and resources, they're given the motivation, do these US companies think things will go well for them? Take note of the words "capability" and "motivation" - they'll be relevant again very soon.

Building fast!

Also, speaking of Huawei, they're actually working really hard to become an alternative to Nvidia, with their work on the Ascend series chip. So if anyone thought the HarmonyOS analogy was weak, here's a fact for you: Huawei has already started building chips, not just mobile OS. And they appear to have accelerated their plans. 

Jensen Huang takes the opposite stance

Jensen Huang, CEO of Nvidia, the firm selling GPUs to the various players, has come out to say that "there's a 0% chance of that happening by 2030", "scaring people is unnecessary, it is irresponsible" and "not grounded in science". 


That elicited a chuckle. I'm a great admirer of Jensen Huang with his distinguished grey hair, suave leather jacket and impressive ability to ooze sincerity while spewing complete horseshit. Guy basically just wants to sell more chips. It's not wrong. It's literally his job. I'm just laying out the obvious incentive.

All of these people are saying things I agree with - more regulation, apocalypse unlikely - albeit for eyebrow-raising (and very self-serving) premises. I'm not saying that they're lying to our faces, exactly... but when the timing is this convenient and the incentives this obvious, we're entitled to examine the claims. Scratch that; we're obligated to.

It strikes me that both those claiming a doomsday scenario (Altman, Amodei, Musk) and those claiming otherwise (Huang) haven't really supplied any kind of reasoning chain as to why it will or won't happen. It's cute to watch them both play this game.

What do I mean by "reasoning chain"?

Here's an example. Amodei has cited the recursive self-improvement of AI and the recent cybersecurity breaches known as OAI-HF as scaled-down examples of what could happen. He's supplied the capability.

However, he's missing the propensity - what are the tendencies of AI, and what would motivate it to use those capabilities against us? Does AI eventually discover that human farts are a great source of fuel and decide to farm us? There you go - capability and motivation. These are important.

After capability and propensity, we then look at opportunity. What are the mistakes we would have to make, in order for a highly-capable, properly-motivated AI to get its opening?

No chain.

Without these three parts, there is no chain. Sorry, Amodei. Maybe you should have gotten Claude to help you with that.

One last obvious thing I want to point out. Altman says we should slow down AI development. OK. What's he waiting for, permission? Does he need a signature somewhere for him to proceed? He's literally the CEO of OpenAI.

Is he waiting for everyone else to slow down at the same time? China, too? Well, I guess we're all screwed, then.

Next

Jacob Coxon and the ten-year warning.

Thursday, 8 October 2026

TeochewThunder: Year Twelve (Part 2/2)

In terms of views, I wouldn't say 2026 was a worse year for this blog. If anything, it performed better than 2025 and on par with 2024, so far anyway.

And as I noted earlier, there were quite a few posts from His Teochewness that showed open contempt for... well, shit, whoever happened to be pissing me off at the time. And because some of these were from way back years ago and I'd had time to properly ruminate over why I got pissed off, the language is arguably a lot less intense but heaps more damaging than if I'd gone in red hot. Because, then, I wasn't wildly throwing haymakers; I was landing kidney shots and throat jabs.

High Performers

These were the ones that got the most attention. And honestly, I'm heartened that they weren't even the most controversial ones. They mostly centered around my home exploration of Singapore. Of course, my Black Mirror Film Reviews have always been disproportionately popular.

Lots of attention.

- A Software Developer's Vacation in... Singapore
- Film Review: Black Mirror Series Seven
- Film Review: Black Mirror Series Seven, Redux
- A Software Developer's Vacation In Singapore: Coast-to-Coast Trail Edition

The one sole standout was Finding Your Purpose Professionally, which involved me dunking on both older and younger workers alike, because they annoy me in equal measure, for different reasons.

Surprise standouts

These are next in line to be mentioned because they got a pretty big audience as well. Some of the attention was expected because I courted it with every F-bomb and verbal strike. (Making the contact tracing effort mandatory, redux and Hiring remote foreigners? Slow your roll, hotshot and The Case against Hunger, Enthusiasm and Other Useless Buzzwords).

This one, Ten Reasons To Keep Treating Job Interviews As Target Practice, in particular, was inflammatory, but I also like to think it was helpful.

The same can't be said of Musk's Macrohard is as silly as it sounds. I didn't intend for it to be helpful. Elon Musk said something stupid (something staggeringly foolish that offended me as a programmer) and I called him out on it. 

Then there were technical pieces like Five Image File Formats For The Web and More ways to declare colors in CSS! and I really couldn't tell you why they turned out as well as the foul-mouthed ones. And then there's Named Versus Positional Notation in Functions and Methods. One of the popular ones. I mean, it's such riveting stuff, right?

Good amounts of attention.

Working has different goals from working out and JavaScript's non-existent relationship to Java and Bolt CEO's dangerous logic for axing his entire HR Team were more philosophical than rude. And yet... boom!

The Case of the Awkward Tech Interviewee was another war story which I didn't think was all that compelling, but I guess reality proved me wrong, there.

Duds

Obviously there were times I was disappointed with the turnout because I really felt my effort deserved more. This could have been down to any number of reasons, chief of which is that my writing just isn't as compelling as I gave it credit for.

For example, Seriously, why try to cook Sam Altman? is a post I thought was great. It had one of my favorite targets in my crosshairs and in it I savaged both Altman and his would-be assassin. No bites. Or just fewer than I imagined I'd get.

Very little attention.

Artificial Intelligence and Its Effect on Entry-level Hiring was another one I put a fair bit of heart into. Perhaps it needs more time to gestate, having just been released last month.

Five Funny Tech CEO Nicknames was another one I thought would be a sure hit. No such luck. It seems a guy can't even rely on making fun of CEOs any more, to get eyeballs.

Onward to Year 13!

This really wasn't a bad blogging year at all. If next year is anywhere as good, I'd consider myself blessed.

I make all these critiques of my blogposts while understanding that I'm really nobody in the big picture and attention isn't something I'm entitled to, even if by some miracle I could handle it.

XII-ding expectations,
T___T