Posts

My Cat vs. The Tissue Box – A Short Film

๐ŸŽฅ My Cat vs. The Tissue Box – A Short Film Every household has at least one object that shouldn't be interesting, and yet somehow becomes a recurring main character. In mine, it's the tissue box. This is the (entirely true, mildly dramatized) story of an ongoing rivalry. ๐ŸŽฌ Scene One: The Discovery It started, as these things always do, with a single tissue pulled halfway out of the box. I don't know what it is about a slightly protruding tissue that reads as a threat worth neutralizing, but apparently it does, because what followed was a full tactical assessment — ears forward, tail low, the works. ๐ŸŽฌ Scene Two: The Confrontation One paw. A single testing tap, as if to check whether the tissue box might retaliate. It did not. Confidence restored, the second paw joined in, and within about four seconds, the tissue was fully extracted, shredded, and declared victorious over. ๐ŸŽฌ Scene Three: Reinforcements The tissue box, now missing one tissue and several ounces ...

5 Times My Cat Had a Better Weekend Than Me

๐Ÿ“ธ 5 Times My Cat Had a Better Weekend Than Me I spent this weekend debugging a scheduled query that kept silently failing at 3am. My cat spent this weekend doing the following five things, each of which objectively sounds more relaxing than my weekend. 1. ๐Ÿ›‹️ The 6-Hour Sunbeam Nap She found the one patch of sunlight that moves across the living room floor over the course of the afternoon, and instead of moving when it moved, she just... stretched. Repeatedly. For six hours. I checked. 2. ๐Ÿฅก The Great Takeout Box Heist An empty takeout container, left unattended for exactly four seconds, became her personal fortress for the rest of the evening. She didn't eat anything from it — there was nothing left to eat — she simply wanted to sit inside a box slightly too small for her, looking extremely pleased about it. 3. ๐ŸชŸ Three Hours of Bird-Watching Television There's a tree outside my window that occasionally has birds in it. My cat can watch this tree, completely motion...

Celebrating CNY: Chaos, Culture & Cat Hair

๐ŸŽ‰ Celebrating CNY: Chaos, Culture & Cat Hair Chinese New Year in a multicultural neighbourhood is a genuinely wonderful kind of chaos — visits back to back, food appearing faster than it can be eaten, and this year, my cat deciding the reunion dinner table was prime real estate for a nap, right in the middle of the mandarin oranges. ๐Ÿงง The Visiting Marathon Growing up in Malaysia means CNY isn't just for one household — it's an open-door season. Neighbours visit neighbours, regardless of background, and everyone ends up with more cookies, more oranges, and more red packets (or giving out more, depending which side of adulthood you've landed on) than they know what to do with. ๐Ÿฑ Enter: The Cat My cat has exactly one opinion about CNY, and it's that the shiny red decorations are clearly toys, the gift-wrapped mandarin oranges are clearly also toys, and the brand new tablecloth is clearly the best napping surface in the house. I spent more time this year chas...

Prawn Masala & Memory Bites – Cooking from the Heart

๐Ÿค Prawn Masala & Memory Bites – Cooking from the Heart There are recipes you cook because they're quick, and there are recipes you cook because they bring someone back into the room with you, even if just for the time it takes the onions to soften. Prawn Masala is the second kind for me. ๐Ÿงก Where This Recipe Actually Comes From This wasn't a dish I learned from a cookbook or a video — it came from standing next to my mother in a small kitchen, being handed tasks too simple to mess up (peel this, stir that) while she did the parts that actually required judgment: how much chilli is "enough," when the masala has cooked down just right, when to add the prawns so they don't turn rubbery. Some of that judgment, I still haven't fully learned. I've made this dish dozens of times and I still find myself second-guessing the chilli amount every single time — which, if I'm honest, might be exactly the point. Some things in cooking (and maybe in genera...

Lion Dance in My Neighbourhood: How Tradition Lives On

๐Ÿงจ Lion Dance in My Neighbourhood: How Tradition Lives On Every year, right around the same week, I hear it before I see it — the drums. Not the polished, rehearsed kind you catch on TV during CNY specials, but the slightly uneven, very enthusiastic kind played by a troupe making their way street by street through the neighbourhood. ๐Ÿฅ The Sound Before the Sight There's a specific kind of anticipation that builds when you hear the drums getting closer. Doors open. Neighbours who otherwise only wave from their cars step out onto the street. Someone's kid is always the first to spot the lion's head bobbing above the fence line. ๐Ÿฆ More Than a Performance What gets me every year isn't really the acrobatics — though watching the lion climb and balance on those poles never stops being impressive. It's watching how seriously the younger members of the troupe take it. Some of them can't be older than 16, and they're carrying something that's been passed...

Understanding NULL in SQL

Understanding NULL in SQL: Common Pitfalls and How to Handle Them NULL is one of the first things every SQL learner meets and one of the last things fully understood. It doesn't mean zero, it doesn't mean empty string, and it doesn't behave like a normal value in comparisons — which is exactly where the bugs come from. ๐Ÿ“˜ What NULL Actually Means NULL represents the absence of a value — "unknown," not "empty." A NULL phone number isn't the same as an empty string phone number; one means "we don't have this data," the other means "we know it's blank." ๐Ÿงช Why NULL = NULL Doesn't Work SELECT * FROM customers WHERE phone = NULL; -- ❌ Always returns zero rows SELECT * FROM customers WHERE phone IS NULL; -- ✅ Correct NULL isn't equal to anything — not even another NULL. In three-valued SQL logic, any comparison involving NULL evaluates to "unknown," not true or false, so the row is excluded either wa...

How to Write a SQL UPSERT

How to Write a SQL UPSERT (Compared Across MySQL, PostgreSQL, and BigQuery) An "UPSERT" — update if a row exists, insert if it doesn't — is one of those operations every database supports, but with completely different syntax. If you've moved between databases, you've probably had to relearn this every time. Here's all three side by side. ๐Ÿ“˜ Why UPSERT Matters Without UPSERT, handling "insert or update" logic means checking for existence first, then branching — two round trips and a race condition risk under concurrent writes. UPSERT does it atomically, in one statement. ๐Ÿงช MySQL: INSERT ... ON DUPLICATE KEY UPDATE INSERT INTO inventory (product_id, quantity) VALUES (101, 50) ON DUPLICATE KEY UPDATE quantity = quantity + 50; Requires a UNIQUE or PRIMARY KEY constraint on product_id for MySQL to know what counts as a "duplicate." ๐Ÿงช PostgreSQL: INSERT ... ON CONFLICT DO UPDATE INSERT INTO inventory (product_id, quantity) VALUES ...