Thursday, 3 August 2023

The Real Reason Behind Political Resignation

The month of July in 2023 was a busy period for Singapore politics. There was a hot mic incident, a corruption scandal and not one, but two extramarital affairs uncovered. It's the latter that I will be covering today, after I've had a while to mull over what happened. My friends from Malaysia, in particular, have been having a field day remarking that Singapore politics has become, for once, more dramatic than Malaysian politics.

Till death do us part?

The first couple were members of the People's Action Party (PAP) and the second couple were from opposition party Worker's Party (WP). All four have resigned from their roles since.

This being Singapore, while not as ridiculously extreme as the USA (not yet, at least) taking sides was par for the course. On Social Media, I saw plenty of amusingly vapid comments from party fanboys trying to defend their side while decrying the other side for pretty much the same thing. Gotta love partisan politics. eh?

While I'm of the opinion that comments on Social Media are largely made by people trying desperately to sound clever and failing miserably, some of these comments are worth dissecting, if only as an exercise in cold, hard logic.

The Issue of Competence

One common refrain was that these people should not have stepped down because having an extramarital affair is not illegal and does not affect their competence.

That is correct. The fact that they betrayed their marriage vows has no legal relevance. They were elevated to their positions due to intelligence, experience and professional qualifications. Extramarital affairs do not make them suddenly unintelligent (there's an off-color joke to be made about blood rushing from the brain to other parts of the body that would result in temporary stupidity, but I shall not go there) and incompetent.


Liking avocado on toast?

My job as a software developer demands that I solve business problems with tech. Whether or not I am a choirboy or a foul-mouthed, immoral SOB does not change the fact that I can do my job, and I can do it well. I don't suddenly become incapable of writing code just because I cheat on my wife, or like eating avocado on toast, or like scratching my bum in public. One is my professional life, and one is my personal life. These are separate matters.

But precisely because these are separate matters, it should not even be part of the discussion. It's a mystery to me why people keep on harping about how the affairs don't affect their ability to do their job. Of course they don't, and that's exactly why them stepping down had nothing to do with competence.

The Moral Component

Another common refrain was that of morality. It's hard to argue that an extramarital affair isn't immoral. What's more contentious is whether morality should be a factor in whether or not politicians step down from their role. Arguing that a politicians should have to resign because their conduct was not in keeping with your morals, is a slippery slope. How far do you want to take it? They can't be in office if they don't have believe in the same God you do? Or support the same sports team you do? Or generally believe in the same things you do?

Must our public servants
share your faith?

I would also venture to say that anyone looking towards politicians, of all people, to be their moral standard, may as well depend on monkeys to predict the weather. Thus, you can probably tell that I have very little regard for the argument that their conduct was immoral and that warranted their expulsion from politics.

Actually Good Reasons to Resign

We've covered why the issues of competence and morality are irrelevant. What, then, is relevant?

Well, let's say I'm an extremely stellar software developer (I'm not, but this is for argument's sake) who can bend machines to my will and make tech wizardry happen. Without question, I am professionally qualified for my job. But what if my behavior publicly and dramatically contradicts my company's brand or mission statement? If that were the case, I would be seen as a liability, and no amount of expertise in my field would save me from the axe.

While Singapore is largely a meritocracy, suitability for a position does not consist of only professional competence. You would not, for instance, ask a Muslim to peddle grilled pork even if he or she might be an exceptionally good cook.

Mmm, pork.

Similarly, Tan Chuan Jin, as Speaker of the House, was expected to conduct himself with impartiality during Parliamentary debates between PAP and WP. Such impartiality is called into question if the Speaker has an affair with one member of one side.

Cheng Li Hui, Leon Perera and Nicole Seah, on their part, rode on platforms such as family values, transparency and accountability on the way to success in the last General Elections. None of which will have aged well in the light of these scandals.

It's also worth mentioning that extramarital affairs, for the most part, are secret affairs. They're not something people are necessarily proud of. Thus, for politicians, or indeed, anyone in a position of power, to voluntarily put themselves in a position that they could be compromised via blackmail, is beyond the pale.

That is why they all had to go. They had become liabilities.

Final words

We all have biases and our personal feelings. However, where national interests are concerned, those feelings should be put aside. And when arguing for one side against the other, it's especially important that these are intelligent and logical arguments.

But this being Social Media, my expectations remain low.

By affair means or foul,
T___T

Friday, 28 July 2023

App Review: Two Dots

Today, I want to review a game that I started playing at the beginning of this year. Its title is Two Dots and in addition to being extremely engaging, it is fun and well-crafted. This game was created by Playdots, Inc, and huge kudos to the creative team!


Two Dots is a puzzle game that doesn't require quick fingers or uncanny reflexes - just patience and perhaps a bit of luck. I had great fun obsessively playing it and trying out all the features. In the process, I took a whole bunch of screenshots and will gladly spam you with them in a bit.

The Premise

Two Dots is played as a board with several differently colored dots in a grid. There may be features on the board that react when something happens, and special dots that require a specific event to happen before activating.

You play by connecting dots of the same color. Connecting a closed loop of dots results in a special explosion which may in turn trigger some other effect.


Each game has targets to meet. You may need to accumulate a certain number of dots in a certain color, fill up an entire screen with water tiles or eliminate all fire tiles. Or any other number of criteria, in any combination.


In every game, you have a certain number of moves to use, and once you run out of moves, the game is over.



There are hundreds of levels, and it will be a long time before you run out of stuff to play.

The Aesthetics

Two Dots is both an adorable and beautiful game - there's no better way to put it. It's cartoony, colorful, and the animations are both awesome and very addictive. If it's one thing that Two Dots does not lack, it's aesthetics. For sure.

The Experience

I could spend hours just making stuff explode and zip and pop in there, and spoiler alert, I have! Calling it "fun" can be a bit of an understatement.


This game is not ultra-sexy in that sense, but that's what is amazing about it. A child could play it, an adult could play it, and both would still have fun.

The Interface

It's basically tap, drag and release, to connect dots. And once in a while, you may use special bonuses and apply them to any dot on the board. That takes an extra tap or two, but other than that, that's it! Beautifully simple!

Connecting a closed loop of dots (they call it "forming squares", which isn't geometrically accurate) causes all dots in that color on the board, to "explode".

What I liked

No time-based requirement. You can take the entire day to make a move, and there would be no penalty for your indecision. That said, that kind of defeats the entire purpose of playing this game. It's not a chess match. Suffice to say, there's no pressure to make a move right away, which is great. Less on the reflexes, more on the thinking.  


Color-blind features. This is very considerate. I approve!


Preview feature. Sometimes you just need to see the possible ramifications of your moves, and this game obligingly provides that. You just try the intended move without lifting your finger at the end, and the app lets you see the immediate outcomes.


The achievements in this game are pretty creative. I got quite a kick out of seeing these.


Treasure Hunt is nice, though a bit simplistic.




The Flip is great. I really like the concept. You complete a row or column, and you get bonuses. You complete an entire grid, and you get cool prizes!


While most of the special tiles are pretty cool, there are some that are my absolute favorites. The crystals, for one - the sound effects when they get activated are so awesome.


The water tile stages rank among my favorite.


The flower tiles are really beautiful once you activate them. Look at the way the petals burst! So poetic!


Mushroom tiles are so random and chaotic and I utterly love them.


The bird tiles are cute and make nice sound effects.


Meteors have a special place in my heart. You let them touch the bottom row, and they clear the entire column!


Sunstrike tiles are very useful and fun to play. Absolutely love the stages that feature them. Once you build them, you release them at a spot and kaboom!

What I didn't

Sometimes when an event expires while you were in the middle of playing it, and you turn off the game and come back, the game attempts to resume where you left off. That's certainly useful, except that when the event has expired, a glitch occurs. Probably a simple thing to fix.



Arcade mode. It's cute, that's for sure, but it gets old real fast having to replay from Stage 1 after failing a stage.

The music was charming at first, but quickly got annoying. Thankfully there was an option to turn it off.



Crabs and monkeys. I hate the damn things. Not in real life - I adore crabs (as food) and monkeys are lovable, but in this game, they are such a nuisance.


Fire tiles can be annoying too. They just spread and you can waste a lot of precious moves putting them out.


And the circuit tiles... they're a mixed bag. Sometimes they're easy and sometimes they are hellishly hard and not in a fun way.

Conclusion

Two Dots is not edgy. In fact, it's almost painfully kid-friendly. But the cool thing about it is that it doesn't need to be edgy. It's got a solid gaming mechanism and the graphics to back it up. And ultimately, that's pretty much all it needs.

My Rating

9.5 / 10

Two good to miss!
T___T


Monday, 24 July 2023

It's Not Personal

Employers reprimanding employees is nothing new. In my long and storied career, I've encountered quite a few instances. Some of them were incidental - I merely happened to be there while an unfortunate employee was receiving it, and some of them were even directed at me. Hey, it happens. You screw up, you get chewed out (or get fired), hopefully you learn something, life goes on.

Chewed out.

My accumulated experience in the software industry has not stopped me from screwing up (though hopefully, my mistakes are less amateurish than they used to be) and consequently, getting put on blast. However, I have noticed a certain trend. Some employers, younger ones in particular, seem to feel the need to preface their criticism with something positive, like some kind of compliment sandwich.

"I want to assure you that this is not personal."

"First of all, the work you've put into this is undeniable."

"I'm not trying to make things difficult for you, but..."

What's going on?

Why do some employers feel this need to soften the blow with something? Are they maybe afraid of (gasp!) hurting the feelings of those they are criticizing?

In particular, I really don't know what is it with this hurry to reassure me that it's "not personal". Why would this be personal? Are these employers laboring under the delusion that people work for them because they like them? I'm sorry to be the one to burst that bubble, but people work for you because the work is tolerable (and in some cases, even enjoyable), they're at least adequate at the task, and they get paid enough to justify spending their time at it. And in the case of some younger employees, because the company's goals align with theirs or some rubbish principle like that. No one has any personal feelings towards you or your company, so that bit about your criticism being "not personal" is superfluous. And a little insulting.


Stop treating me
like a kid.

You know what some of my employers say when they want to criticize my work?

"Yo man, this is half-fucked work. I can't accept this."

"You used a nested For to do this? That's sloppy!"

"Wow, watching you struggle at this is painful."

Now that is treating me like an adult professional. That is not treating me like some fragile child who needs that emotional cushion.

That's not to say employers should verbally abuse their employees, but come on, let's not swing too far in the opposite direction. If criticism is called for, let's hear it and get to the point. You should not need to say "it's not personal" because that goes without saying. And if your criticism does spring from some personal place (and yes, I've encountered those too), then "it's not personal" is a lie and you're fooling no one. Either way, get rid of it.

My first day in the military

Singapore has a law of military conscription. Rewind back a couple decades and it was my first day in Boot Camp, y'know, having been born with a penis and all. I had heard horror stories about how tough, how inhumane army life was, and I was steeling myself for the inevitable shock.

And I was shocked. Just not for the reasons I imagined. Sure, we got yelled at. We got hectored. Hazed. Verbally eviscerated. And you know what most of us were thinking while it happened?

"Bitch, please. You think you're scary? I have an Asian mom!"

This is scary.

I'm not sure, dear reader, how it was during your generation. But in my time, Asian parents were constantly critical, had unrealistic expectations and consequently, were always disappointed. Avoiding their wrath was considered a win, nevermind actually obtaining their approval. So when it came to verbal abuse, military life really wasn't anything to write home about.

Not that it stopped us from making up horror stories just to impress the ladies and the gullible youths, eh?

My point is, it's possible that all that conditioning we were put through, may have contributed to how we receive criticism in the workplace today.

One last (personal) note!

I'm not saying to grow a thicker skin. Sometimes employers do go too far, and their (supposedly) constructive criticism gets distinctively personal despite their reassurances that it's not.

But it's up to you how personally you want to take it. They should not be the ones telling you that it's not personal. We are the ones who should be reminding ourselves. Emotional detachment - it's severely underrated.

Yes, this is not personal.
T___T

Wednesday, 19 July 2023

Let's Unpack The CSS Box

Everything in HTML rendering is boxes. Everything you see on a web page can be imagined inside a box. Paragraphs of text? Boxes. Headers? Boxes. Buttons, lists, images? Boxes, boxes, boxes. These boxes are then arranged inside bigger boxes as part of your layout.

Everything is boxes!

Let that sink in, and then read on as we ruminate on the CSS Box Model. If we think of everything as boxes, then we really need to understand the properties of those boxes.

For the purposes of these examples today, we will use the ubiquitous div tag, though most other elements can be used in a pinch. I chose the div tag because it's relatively uncomplicated. The div tag adds as the content placeholder which has an orange background. For contrast, we use a p tag for the content, with a beige background.
<div style="height:200px;width:200px;background-color:rgb(255,200,0)">
  <p style="background-color:rgb(255,200,100);">This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.</p>
</div>


You see that the light beige box lines up with the orange box at the top, with no spacing at the sides. The content fits the placeholder with no space to spare. That is the default.

This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.



Padding

This is a spacing that is applied on the interior of the element, causing a space between its contents and its perimeter.
<div style="height:200px;width:200px;background-color:rgb(255,200,0);padding:50px">
  <p style="background-color:rgb(255,200,100);">This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.</p>
</div>


Now you see that the light beige paragraph remains the same size, but the size of the orange box has increased! That's due to padding - the padding occurs on the interior of the div, and this has the effect of stretching the width and/or height of the div. So if the height of the div is 200 pixels and the top and bottom both have 50 pixels padding applied, then the total effective height of the orange div is now (200 + 50 + 50) = 300 pixels.

This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.



Border

This is in effect the thickness of the perimeter of an element.
<div style="height:200px;width:200px;background-color:rgb(255,200,0);border:50px solid rgb(200,100,0)">
  <p style="background-color:rgb(255,200,100);">This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.</p>
</div>


Now you see that the beige paragraph remains the same size, and the size of the orange box looks the same, but now there's a thick brown perimeter around the box. The border property is applied on the outside of the div, and this also has the effect of stretching the width and/or height of the div. So if the height of the div is 200 pixels and the top and bottom both have 50 pixels border applied, then the total effective height of the orange div is now (200 + 50 + 50) = 300 pixels.

This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.



Margin

This is the space around the perimeter of the element.

<div style="height:200px;width:200px;background-color:rgb(255,200,0);margin:50px">
  <p style="background-color:rgb(255,200,100);">This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.</p>
</div>


You can see that the size of neither the content or the container have changed, but now there's a 50 pixel space around the perimeter of the container. You could even think of it as the perimeter's perimeter! Except that the margin property is always transparent.

This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.



Putting it all together

This is probably overkill at this point, but it's still worth going into. Let's see what happens when we put them all together.

<div style="height:200px;width:200px;background-color:rgb(255,200,0);padding:50px;border:50px solid rgb(200,100,0);margin:50px">
  <p style="background-color:rgb(255,200,100);">This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.</p>
</div>


You see the empty space of 50 pixels around the box, then the 50 pixel brown border, followed by the 50 pixel margin of the orange box! The beige paragraph shows the original width of the box. So in effect, all this combines to affect the height and width of the box.

This is a wall of text used for testing the CSS Box Model. The text within should flow in accordance to the dimensions of this HTML element.



The takeaway

The CSS Box Model affects not just divs, but all HTML elements. Knowing how padding, margins and borders affect width and height can help eliminate any confusion as to why your elements are not lining up properly.

May the Force be width you!
T___T

Sunday, 16 July 2023

Meta's new platform: Threads or Threat?

I've never wanted a Twitter account. Back in the day, the thought of maintaining yet another extension of my online identity held little appeal, especially when all I could seemingly expect in return was yet another platform of celebrities airing opinions that they seemed to think I should care about, or non-celebs making those proclamations as though they were celebs. And, of course, thread after thread of shmucks with too much time on their hands people trying desperately to sound cleverer than the next guy, or just outright hurling verbal abuse when they thought they could get away with it.

Heck, if that was what I was after, I already had Facebook for that.


Thus, last week, when I saw an Instagram notification that told me some of my friends had already started posting on Meta's spanking brand new Social Media platform Threads, I was momentarily tempted to just hop on the bandwagon. Momentarily. Until I did a little homework and it turned out that Threads was basically a spiritual clone of Twitter less a few features.

Now, if I already had zero desire to have a Twitter account whether or not Elon Musk was in charge, why would I want Threads?

The case for Threads

The ad-free experience? Come on, now. We all know that once Threads hits a certain critical mass in terms of user base, Mark Zuckerberg is going to monetize the hell out of it. It's just business.

More moderation, less toxicity? Sure, right now Threads is a nice friendly place with content moderation. However, once enough users join this platform, the same thing is going to happen that happens everywhere - the name-calling, the endless virtue-signalling, the constant pseudo-intellectual bullshit. People are trash, and they don't stop being trash even if you intend to implement a level of censorship that would cause China to sigh with approval.

Censored!

It's also tempting to sign up for Threads just to spite Elon Musk, though in all honesty, a lot of that is his own fault. This techbro billionaire basically paints a target on himself every time he gets online to spout some outrageously trollish bullshit. He's a billionaire and the average Keyboard Warrior can't even begin to touch him... but they can affect his bottom line and dent his ego by going over to his competitor now that he has one. I like to think I'm above these levels of pettiness, though the simple fact is that my laziness precludes me from it.

Competition is good for the market, generally. Threads represents just that. Some might say we already have way too many Social Media platforms. I say that's only the case if one intends to sign up for all of them. As someone whose fortunes aren't being intrinsically tied to public recognition - such as, say, actors and artistes and influencers - I have the privilege of not giving a shit, one which I intend to exercise with extreme prejudice.

But back to the issue of competition. It's important to keep these guys in check. And if the world's governments can't, perhaps these competing platforms will keep each other in check. Think about it - even without a monopoly, platforms like Facebook, Twitter and the like were abusing data confidentiality and unevenly applying moderation policies. How much bolder would they get if they had a monopoly? That, my friends, is entirely unthinkable.

The case against Threads

I don't actually have anything against Threads specifically. At least, not any more than I have against Twitter and all the platforms that attempt to imitate it. It just doesn't offer me any value that would entice me to partake; I have no ambitions to become an influencer of any sort, and I certainly don't think my opinions require a Twitter-like soapbox to air them from.

Why, Zuck?!

But sure, let's take a look at the data that Threads wants to collect. That's quite a list: location, personal, health financial, web browsing... check out the screenshot, or check it out yourself on your App Store. Even by the standards of Social Media, this seems excessive. Now, being a complete nobody, I'm personally not all that concerned about data privacy. People who feel differently about the issue may beg the question: why in the ever-loving Zuck do you need all that data, Mark? Sure, these are mostly optional. But still, it's a little concerning.

There's also the issue of your Instagram account being tied to your Threads account. Apparently, once you install Threads, you can't delete your Threads account without also deleting your Instagram account, which just feels really tyrannical. I expect them to fix this at some point, though.

Lastly, there's the buzz that Threads lacks certain features that Twitter has, such as Trends and Spaces. But let's not kid ourselves, all people really need is a platform to air their opinions, exchange news of dubious veracity and argue with complete strangers. You don't need those extra features for that.

So... Threads or Threat?

Whatever one may think of Meta or Mark Zuckerberg, the move to create Threads and attract the Instagram user base was nothing short of brilliant. Already, Threads has unsurpassed rapidity of user growth and avoided (sort of) the growing pains of most other Social Media platforms. It came at an crucial time when Elon Musk seems to be struggling as Twitter's owner, and his increasingly unpopular decisions have left Twitter's user base crying out for an alternative.

Will Threads be Twitter's death blow? I sure hope not. Not that I'm a fan of either Mark Zuckerberg or Elon Musk, but the last thing we need in the Social Media arena is a monopoly. The existence of a flailing Twitter has given rise to the creation of Threads, and the existence of Threads should in turn hold Musk's feet to the fire. Already, we have news of an impending lawsuit. Good times!

Thread carefully, Elon Musk!
T___T