<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Mike Cartmell&#39;s blog</title>
    <link>https://mike.sg/post/</link>
    <description>Recent content in Posts on Mike Cartmell&#39;s blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-gb</language>
    <lastBuildDate>Wed, 16 Apr 2025 13:21:58 +0800</lastBuildDate><atom:link href="https://mike.sg/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What if I stop browsing the web?</title>
      <link>https://mike.sg/2025/04/16/what-if-i-stop-browsing-the-web/</link>
      <pubDate>Wed, 16 Apr 2025 13:21:58 +0800</pubDate>
      
      <guid>https://mike.sg/2025/04/16/what-if-i-stop-browsing-the-web/</guid>
      <description>Browsing the web sucks these days. Wait! I&amp;rsquo;m not about to go on some nostalgia trip. It was pretty bad in the early days too. Take a wrong turn and you&amp;rsquo;d find your screen filled with infinite JavaScript popups. At least those are gone now.
Now there&amp;rsquo;s a few problems as I see it. First, there&amp;rsquo;s just so much AI slop that it&amp;rsquo;s impossible to avoid. Frequently I&amp;rsquo;ll search for something and find that the first result is completely AI generated.</description>
    </item>
    
    <item>
      <title>My Stack for Side Projects</title>
      <link>https://mike.sg/2025/02/26/my-stack-for-side-projects/</link>
      <pubDate>Wed, 26 Feb 2025 13:00:22 +0800</pubDate>
      
      <guid>https://mike.sg/2025/02/26/my-stack-for-side-projects/</guid>
      <description>I do quite a lot of coding and general dabbling with computer stuff in my spare time. By spare time, I of course mean when I decide to sacrifice my sleep by staying up later than I should after the kids are asleep.
Here&amp;rsquo;s what I use:
 Workstation: Macbook Air, Windows desktop PC (with WSL) Server hardware: 3 mini PCs. Prefer Beelink. Server software: Kubernetes (k3s) cluster, using Traefik ingress behind an OpenWRT router IDE: Nvim or VSCode Backend: Go (backend services) or Ruby (web apps) Frontend: Ruby on Rails + Hotwire Mobile: Flutter Gamedev: Defold.</description>
    </item>
    
    <item>
      <title>Curated Content</title>
      <link>https://mike.sg/2025/02/16/curated-content/</link>
      <pubDate>Sun, 16 Feb 2025 16:00:22 +0800</pubDate>
      
      <guid>https://mike.sg/2025/02/16/curated-content/</guid>
      <description>I recently dumped Spotify in favour of my own music collection sourced from Bandcamp and my CD collection. I don&amp;rsquo;t miss Spotify at all - it&amp;rsquo;s a lot more rewarding and fun to discover bands on my own instead.
Also, I find myself avoiding AI content where possible now. I&amp;rsquo;ll often add &amp;lsquo;reddit&amp;rsquo; on the end of search queries because it&amp;rsquo;s more reliable than the default results which are littered with AI slop.</description>
    </item>
    
    <item>
      <title>Setting up OpenWRT on a QNAP QHora-301W router with 10g Internet</title>
      <link>https://mike.sg/2024/11/15/setting-up-openwrt-on-a-qnap-qhora-301w-router-with-10g-internet/</link>
      <pubDate>Fri, 15 Nov 2024 23:32:22 +0800</pubDate>
      
      <guid>https://mike.sg/2024/11/15/setting-up-openwrt-on-a-qnap-qhora-301w-router-with-10g-internet/</guid>
      <description>I recently upgraded my home internet connection from 1 to 10gbps. The only problem was, I didn&amp;rsquo;t have any devices that supported it. My router, switches and all but one other device were all 1gbps or lower. Of course, there&amp;rsquo;s little practical need for 10gbps considering that far exceeds regular hard disk speeds but still, I felt this would a good excuse to upgrade my home network. So I did.</description>
    </item>
    
    <item>
      <title>Homebrewing Beer</title>
      <link>https://mike.sg/2024/09/27/homebrewing-beer/</link>
      <pubDate>Fri, 27 Sep 2024 14:54:12 +0800</pubDate>
      
      <guid>https://mike.sg/2024/09/27/homebrewing-beer/</guid>
      <description>Recently I&amp;rsquo;ve started to brew my own beer - I&amp;rsquo;m on my third batch now. I got the urge after wanting to make a game about managing a pub. That got me to discover another game via Steam called Beer Brewing Simulator. Then after playing that for a while, it seemed easier than I thought - so I decided to give it a go in real life!
Several things put me off doing this before, but I realised they&amp;rsquo;re misconceptions.</description>
    </item>
    
    <item>
      <title>Creating a Tower Defense Game in Pico8: Part 5 - Placing Totems</title>
      <link>https://mike.sg/2024/02/22/creating-a-tower-defense-game-in-pico8-part-5-placing-totems/</link>
      <pubDate>Thu, 22 Feb 2024 08:30:00 +0800</pubDate>
      
      <guid>https://mike.sg/2024/02/22/creating-a-tower-defense-game-in-pico8-part-5-placing-totems/</guid>
      <description>In the previous tutorial, we made our player move around the screen. Next on our list is the ability to place totems (our towers) - a core gameplay element in a tower defense game!
Unlike the player, totems don&amp;rsquo;t exist at the start of the game. Also, there can be many totems on the screen at the same time! So for this to work, we&amp;rsquo;ll need to introduce two new concepts:</description>
    </item>
    
    <item>
      <title>Creating a Tower Defense Game in Pico8: Part 4 - Player Movement</title>
      <link>https://mike.sg/2024/02/06/creating-a-tower-defense-game-in-pico8-part-4-player-movement/</link>
      <pubDate>Tue, 06 Feb 2024 13:30:00 +0800</pubDate>
      
      <guid>https://mike.sg/2024/02/06/creating-a-tower-defense-game-in-pico8-part-4-player-movement/</guid>
      <description>What Next? So far, we&amp;rsquo;ve introduced some basic coding and game design concepts and written some helper functions that will live up to their name soon enough. Let&amp;rsquo;s take a step back and think about what kind of game we&amp;rsquo;re making, as this will help guide us over the next few parts of this tutorial.
Tower Defense Player controls Typically, the player in tower defense games acts as a godlike presence, building and upgrading towers from nowhere as the player issues actions using their mouse or a touchscreen.</description>
    </item>
    
    <item>
      <title>Creating a Tower Defense Game in Pico8: Part 3 - Setting Foundations</title>
      <link>https://mike.sg/2024/02/06/creating-a-tower-defense-game-in-pico8-part-3-setting-foundations/</link>
      <pubDate>Tue, 06 Feb 2024 12:00:00 +0800</pubDate>
      
      <guid>https://mike.sg/2024/02/06/creating-a-tower-defense-game-in-pico8-part-3-setting-foundations/</guid>
      <description>Helper Functions There are some techniques, like _debug mentioned in part 2, that I use in almost all my games. In this post we&amp;rsquo;ll implement some of them right at the beginning, because it&amp;rsquo;ll save us time later!
In Pico-8&amp;rsquo;s code editor you&amp;rsquo;ll notice a number at the bottom-right which increases as you write code. This is the token count, and it&amp;rsquo;s very important to keep an eye on this because Pico-8 programs can only have 8192 tokens!</description>
    </item>
    
    <item>
      <title>Creating a Tower Defense Game in Pico8: Part 2 - Special Functions</title>
      <link>https://mike.sg/2024/02/06/creating-a-tower-defense-game-in-pico8-part-2-special-functions/</link>
      <pubDate>Tue, 06 Feb 2024 11:00:00 +0800</pubDate>
      
      <guid>https://mike.sg/2024/02/06/creating-a-tower-defense-game-in-pico8-part-2-special-functions/</guid>
      <description>Special Functions In part 1, we wrote some commands called function calls to tell Pico-8 to draw text and shapes on the screen. But we can write our own functions too. And there are 3 special functions that, if you include them in your code, will be called by Pico-8 itself while your program is running! This forms what&amp;rsquo;s known in game programming as a game loop. Games must run code constantly to calculate game logic, move characters around on the screen, respond to the user pressing controller buttons and so on.</description>
    </item>
    
    <item>
      <title>Creating a Tower Defense Game in Pico8: Part 1 - Hello World</title>
      <link>https://mike.sg/2024/02/05/creating-a-tower-defense-game-in-pico8-part-1-hello-world/</link>
      <pubDate>Mon, 05 Feb 2024 23:06:59 +0800</pubDate>
      
      <guid>https://mike.sg/2024/02/05/creating-a-tower-defense-game-in-pico8-part-1-hello-world/</guid>
      <description>Hello! This post is the first in a new series where I&amp;rsquo;m going to make a tower defense game in Pico-8 and explain exactly how to do it, from scratch. If you&amp;rsquo;re looking to learn how to code, or you know how to code and are interested in learning how to make games, this is for you!
I think making games is an excellent way to learn how to code, for several reasons.</description>
    </item>
    
    <item>
      <title>How It&#39;s Going</title>
      <link>https://mike.sg/2024/01/03/how-its-going/</link>
      <pubDate>Wed, 03 Jan 2024 09:33:34 +0800</pubDate>
      
      <guid>https://mike.sg/2024/01/03/how-its-going/</guid>
      <description>I meant to write about how my sabbatical/gap year is going much earlier - it&amp;rsquo;s been almost 4 months now - but never got around to it. I&amp;rsquo;m definitely enjoying my break so far, but I didn&amp;rsquo;t realise how much I needed a break until it started. When I wrote about leaving my job I did mention I wanted rest, but also liked the appeal of having more time to spend on hobbies and other things too.</description>
    </item>
    
    <item>
      <title>Updating Sensible World of Soccer with the Singapore Premier League</title>
      <link>https://mike.sg/2023/11/29/updating-sensible-world-of-soccer-with-the-singapore-premier-league/</link>
      <pubDate>Wed, 29 Nov 2023 23:53:49 +0800</pubDate>
      
      <guid>https://mike.sg/2023/11/29/updating-sensible-world-of-soccer-with-the-singapore-premier-league/</guid>
      <description>I recently treated myself to a Powkiddy RGB30 handheld console. It’s a great little device with an unusual square screen, which is perfect for playing Pico-8 games on (which is something else I’ve been getting into recently - more on that in another blog post!). Anyway, it turns out it’s also really good at running emulators, so after a bit of playing with it I inevitably ended up revisiting probably the favourite game of my childhood: Sensible World of Soccer (or SWOS for short).</description>
    </item>
    
    <item>
      <title>What I Want From My Next Job</title>
      <link>https://mike.sg/2023/09/03/what-i-want-from-my-next-job/</link>
      <pubDate>Sun, 03 Sep 2023 22:40:11 +0800</pubDate>
      
      <guid>https://mike.sg/2023/09/03/what-i-want-from-my-next-job/</guid>
      <description>As I write this, I&amp;rsquo;m one week away from leaving my role at Grab and embarking on a career break of (most likely) 6-12 months. Although I&amp;rsquo;m not looking for employment again yet, I thought it&amp;rsquo;d be good idea to note down my criteria for a future job now, for future reference.
Type of Company My ideal company would be an already-successful startup or medium-sized company. I&amp;rsquo;ve worked for very large companies before and find earlier-stage companies to be more enjoyable and rewarding, although I have had negative experiences with startups that didn&amp;rsquo;t do so well.</description>
    </item>
    
    <item>
      <title>I&#39;m Leaving My Job</title>
      <link>https://mike.sg/2023/07/29/im-leaving-my-job/</link>
      <pubDate>Sat, 29 Jul 2023 18:58:26 +0800</pubDate>
      
      <guid>https://mike.sg/2023/07/29/im-leaving-my-job/</guid>
      <description>This post is 100% written by a human. (me, obviously.)
After just over 8 years at my current job, I&amp;rsquo;ve decided to leave. I don&amp;rsquo;t have another job lined up. In this post I&amp;rsquo;m going to try and put down some of the reasons behind my decision. It&amp;rsquo;s a personal decision, so if you&amp;rsquo;re expecting me to go on about my employer or some workplace drama, prepare for disappointment. I will be trying to avoid mentioning my employer here.</description>
    </item>
    
    <item>
      <title>Sudden Hearing Loss</title>
      <link>https://mike.sg/2023/03/06/sudden-hearing-loss/</link>
      <pubDate>Mon, 06 Mar 2023 21:51:15 +0800</pubDate>
      
      <guid>https://mike.sg/2023/03/06/sudden-hearing-loss/</guid>
      <description>Something weird happened to me just over a week ago: I experienced sudden sensorineural hearing loss (SSNHL). I&amp;rsquo;ve just about fully recovered now, but it was quite scary and very different to what I thought it was going to be like.
It started on Monday 20th February. I had just taken a shower and my ear felt strange, quite similar to the pressure from an airplane flight or some kind of blockage.</description>
    </item>
    
    <item>
      <title>Discovering New Music Using Spotify and Discogs APIs</title>
      <link>https://mike.sg/2022/09/24/discovering-new-music-using-spotify-and-discogs-apis/</link>
      <pubDate>Sat, 24 Sep 2022 17:09:53 +0800</pubDate>
      
      <guid>https://mike.sg/2022/09/24/discovering-new-music-using-spotify-and-discogs-apis/</guid>
      <description>Lately I&amp;rsquo;ve been in the mood for discovering new music. I had mostly been relying on Spotify for this, either looking for new material by bands I already know, or by using the Radio feature, or by searching public playlists. None of these were very satisfactory - I feel like Spotify tends to recommend you the same few bands, even though their library is vast.
So I thought, OK, I&amp;rsquo;ll try searching myself.</description>
    </item>
    
    <item>
      <title>Self-hosting a cloud drive with Rclone</title>
      <link>https://mike.sg/2022/09/17/self-hosting-a-cloud-drive-with-rclone/</link>
      <pubDate>Sat, 17 Sep 2022 22:22:38 +0800</pubDate>
      
      <guid>https://mike.sg/2022/09/17/self-hosting-a-cloud-drive-with-rclone/</guid>
      <description>For a long time I had been using Google Drive to store all my important documents. It worked extremely well - always accessible no matter where I was, synced across all my devices, and never had to worry about my files being unavailable or deleted. Ultimately though, it didn&amp;rsquo;t feel like it was mine, and I didn&amp;rsquo;t like the idea of depending on Google.
When searching for an alternative, I considered full-blown cloud solutions like Nextcloud/ownCloud, but they seemed overly complex to me.</description>
    </item>
    
    <item>
      <title>Trying Out iPhone</title>
      <link>https://mike.sg/2022/09/04/trying-out-iphone/</link>
      <pubDate>Sun, 04 Sep 2022 22:52:37 +0800</pubDate>
      
      <guid>https://mike.sg/2022/09/04/trying-out-iphone/</guid>
      <description>I decided to try switching over to an iPhone, as I mentioned in a previous post. The main reason is that it&amp;rsquo;s the final step in de-Googling myself, which is an achievement that I&amp;rsquo;ve been wanting to unlock for a while. I don&amp;rsquo;t really know if it&amp;rsquo;s any better for privacy than Android, but it should at least not be worse when configured properly.
My phone of choice is an iPhone 7, which I got a good deal on from Carousell a while back, for the sole purpose of setting up an Apple Watch.</description>
    </item>
    
    <item>
      <title>How to Use LibRedirect on Android</title>
      <link>https://mike.sg/2022/07/10/how-to-use-libredirect-on-android/</link>
      <pubDate>Sun, 10 Jul 2022 16:33:13 +0800</pubDate>
      
      <guid>https://mike.sg/2022/07/10/how-to-use-libredirect-on-android/</guid>
      <description>I recently discovered alternative frontends - websites that let you use the &amp;lsquo;real&amp;rsquo; version of Twitter, Reddit etc. through an alternate website. The advantage of this is that it stops those big sites like Twitter from tracking you, because they don&amp;rsquo;t see the connection from your web browser.
Anyway, one of the most convenient ways to take advantage of this is through a browser extension like LibRedirect, which will automatically filter links and redirect you to the alternate versions of popular sites.</description>
    </item>
    
    <item>
      <title>Online Privacy: An Update</title>
      <link>https://mike.sg/2022/07/03/online-privacy-an-update/</link>
      <pubDate>Sun, 03 Jul 2022 22:18:44 +0800</pubDate>
      
      <guid>https://mike.sg/2022/07/03/online-privacy-an-update/</guid>
      <description>A few months ago I talked about online privacy, and how I&amp;rsquo;d been trying to give up Big Tech software like Facebook and Google products. Here&amp;rsquo;s a quick update on how that&amp;rsquo;s going.
On Google: I still use one gmail account, though it&amp;rsquo;s no longer my primary email address. I use Google Drive only for a few files (spreadsheets) that I like to edit from my phone, but that&amp;rsquo;s it. I still use Android, although I&amp;rsquo;m considering getting an iPhone later this year.</description>
    </item>
    
    <item>
      <title>Our AI-Assisted Future</title>
      <link>https://mike.sg/2022/06/01/our-ai-assisted-future/</link>
      <pubDate>Wed, 01 Jun 2022 09:23:23 +0800</pubDate>
      
      <guid>https://mike.sg/2022/06/01/our-ai-assisted-future/</guid>
      <description>Our AI-Assisted Future We are entering a world where we can create any kind of content we can dream of, just by asking an AI (Artificial Intelligence) to make it for us. This isn&amp;rsquo;t some distant future either - more like within the next 12 months.
AI-generated text is basically here already, and it&amp;rsquo;s practically indistinguishable from human writing. The main limitation is it can only generate small amounts of text at a time, but that&amp;rsquo;s just a matter of scaling it up.</description>
    </item>
    
    <item>
      <title>The Shadow Over Singapore</title>
      <link>https://mike.sg/2022/06/01/the-shadow-over-singapore/</link>
      <pubDate>Wed, 01 Jun 2022 00:30:01 +0800</pubDate>
      
      <guid>https://mike.sg/2022/06/01/the-shadow-over-singapore/</guid>
      <description>I have been having the most troubling dreams lately. I have my doubts as to whether I should share them with you here, as merely recalling their details causes me to question my sanity. But I must tell someone, and you are the only one who will listen.
I dream that I am in Singapore, though it is not the Singapore of today. The geometry is wrong in a way that I can see with extreme vividness in my dreams yet cannot describe in adequate terms when awake.</description>
    </item>
    
    <item>
      <title>Moving Away From Big Tech</title>
      <link>https://mike.sg/2022/04/22/moving-away-from-big-tech/</link>
      <pubDate>Fri, 22 Apr 2022 01:33:59 +0800</pubDate>
      
      <guid>https://mike.sg/2022/04/22/moving-away-from-big-tech/</guid>
      <description>Introduction I&amp;rsquo;ve been trying to reduce my reliance on Big Tech companies (Google, Facebook, Twitter etc.) for some time now. There&amp;rsquo;s many reasons, but I can summarise it like this: I don&amp;rsquo;t think they make a positive impact on the world.
Part of it is about privacy. Most big tech companies rely on advertising, and advertising means tracking you so they can target you with &amp;lsquo;better&amp;rsquo; ads and make more money.</description>
    </item>
    
    <item>
      <title>Migrating Perl Projects to Kubernetes</title>
      <link>https://mike.sg/2021/09/13/migrating-perl-projects-to-kubernetes/</link>
      <pubDate>Mon, 13 Sep 2021 15:45:58 +0000</pubDate>
      
      <guid>https://mike.sg/2021/09/13/migrating-perl-projects-to-kubernetes/</guid>
      <description>This is the seventh post in a series on Modernizing my Personal Web Projects. I mentioned that one of the goals of this project was to revive some of my older projects that tend to get neglected and stop working. So, I went through my GitHub and found an old Perl project that would be perfect to host again. Read on for my experience with migrating Perl projects to Kubernetes.</description>
    </item>
    
    <item>
      <title>Hosting WordPress on Kubernetes</title>
      <link>https://mike.sg/2021/09/11/hosting-wordpress-on-kubernetes/</link>
      <pubDate>Fri, 10 Sep 2021 22:37:00 +0000</pubDate>
      
      <guid>https://mike.sg/2021/09/11/hosting-wordpress-on-kubernetes/</guid>
      <description>This is the sixth post in a series on Modernizing my Personal Web Projects. In this post I’ll describe my experience of hosting WordPress on Kubernetes for my personal sites.
WordPress is a popular free and open-source content management system. It’s often used for blogs and e-commerce sites for its ease of use and vast plugin library. I moved to it myself for my personal blog some time ago because it takes care of all the backend parts that power the site – so I can focus on writing content.</description>
    </item>
    
    <item>
      <title>Setting Up a Self-Hosted Docker Registry</title>
      <link>https://mike.sg/2021/09/06/setting-up-a-self-hosted-docker-registry/</link>
      <pubDate>Mon, 06 Sep 2021 01:00:00 +0000</pubDate>
      
      <guid>https://mike.sg/2021/09/06/setting-up-a-self-hosted-docker-registry/</guid>
      <description>In my earlier post I recommended including a DigitalOcean Container Registry subscription when setting up a budget Kubernetes cluster, because it’s convenient and avoids circular dependency issues. I would still recommend that option if the Kubernetes cluster is your only internet-facing cloud host. However, I quickly outgrew the 5-repository limit of the basic plan, so I took another look at setting up a self-hosted Docker registry.
As it turns out, it’s not as difficult as I thought.</description>
    </item>
    
    <item>
      <title>HTTPS Everywhere!</title>
      <link>https://mike.sg/2021/09/04/https-everywhere/</link>
      <pubDate>Sat, 04 Sep 2021 09:37:03 +0000</pubDate>
      
      <guid>https://mike.sg/2021/09/04/https-everywhere/</guid>
      <description>This is the fourth post in a series on Modernizing my Personal Web Projects. In the previous post I set up public HTTP and HTTPS access to my sites running on Kubernetes using the NGINX Ingress Controller. However, I can do better. I’ve now decided to remove HTTP access completely and use HTTPS only. It’s 2021 – who needs plain HTTP now anyway?
HTTPS is the secure version of HTTP, adding a layer of encryption to protect user’s data and privacy.</description>
    </item>
    
    <item>
      <title>DigitalOcean Kubernetes Without a Load Balancer</title>
      <link>https://mike.sg/2021/08/31/digitalocean-kubernetes-without-a-load-balancer/</link>
      <pubDate>Tue, 31 Aug 2021 04:10:13 +0000</pubDate>
      
      <guid>https://mike.sg/2021/08/31/digitalocean-kubernetes-without-a-load-balancer/</guid>
      <description>This is the third post in a series on Modernizing my Personal Web Projects where I look at setting up DigitalOcean Kubernetes without a load balancer.
Why You Need a Load Balancer DigitalOcean Load Balancers are a convenient managed service for distributing traffic between backend servers, and it integrates natively with their Kubernetes service. They offer a quick way to expose services to the public internet without having to use NodePort.</description>
    </item>
    
    <item>
      <title>Budget Kubernetes Hosting for Personal Use</title>
      <link>https://mike.sg/2021/08/29/budget-kubernetes-hosting-for-personal-use/</link>
      <pubDate>Sun, 29 Aug 2021 09:50:47 +0000</pubDate>
      
      <guid>https://mike.sg/2021/08/29/budget-kubernetes-hosting-for-personal-use/</guid>
      <description>This is the second post in a series on Modernizing my Personal Web Projects. In this post, I attempt to create a budget Kubernetes hosting setup on DigitalOcean. The goal is to provide everything I need to host my blogs and side-projects for under $50 USD. Let’s go!
First Things First: Creating the Kubernetes Cluster The core part of this setup will be a managed Kubernetes cluster. I decided to use Kubernetes for its scalability and ease of deployment.</description>
    </item>
    
    <item>
      <title>Modern Web Hosting for Personal Projects</title>
      <link>https://mike.sg/2021/08/29/modern-web-hosting-for-personal-projects/</link>
      <pubDate>Sat, 28 Aug 2021 17:20:15 +0000</pubDate>
      
      <guid>https://mike.sg/2021/08/29/modern-web-hosting-for-personal-projects/</guid>
      <description>Background My personal web projects gone through various stages of web hosting. Starting with a fully hosted CompuServe page to running it on my dad’s ADSL connection. Since then I’ve been moving it back and forth between a little home server underneath my TV to a virtual machine on DigitalOcean. That’s been working well for a while, but recently I’ve been eager to try out a more modern web hosting platform for my personal projects.</description>
    </item>
    
    <item>
      <title>Thoughts on Go</title>
      <link>https://mike.sg/2015/06/27/thoughts-on-go/</link>
      <pubDate>Sat, 27 Jun 2015 09:35:35 +0000</pubDate>
      
      <guid>https://mike.sg/2015/06/27/thoughts-on-go/</guid>
      <description>Traditionally I’m a pretty late adopter of new trends, and Go has been out for something like 6 years now, so I figured it would be a good time to try it. I’ve been learning it for about 2 months; I’ve done dozens of Codility exercises, written a WebSocket server and a statusbar daemon, so I think I’ve given it a good go. My experience has been generally positive and I’ll definitely use it in future.</description>
    </item>
    
    <item>
      <title>Docker: first impressions</title>
      <link>https://mike.sg/2014/11/16/docker-first-impressions/</link>
      <pubDate>Sun, 16 Nov 2014 08:44:42 +0000</pubDate>
      
      <guid>https://mike.sg/2014/11/16/docker-first-impressions/</guid>
      <description>I’ve been wanting to try Docker ever since I saw a talk about it at Red Dot Ruby Conf. The idea of being able to build a container in development and ship it to staging, then production without any changes is extremely enticing, although I admit to being a little sceptical. Now I’ve implemented a Docker deployment process for the first time with one of my projects. Is Docker the holy grail of cloud deployment, or is it all just hype?</description>
    </item>
    
    <item>
      <title>Automated Rails testing with Capybara and PhantomJS</title>
      <link>https://mike.sg/2014/10/26/automated-rails-testing-with-capybara-and-phantomjs/</link>
      <pubDate>Sun, 26 Oct 2014 23:32:25 +0000</pubDate>
      
      <guid>https://mike.sg/2014/10/26/automated-rails-testing-with-capybara-and-phantomjs/</guid>
      <description>Capybara is one of those tools that sounds great but is often frustrating. The claims of ‘no setup’ and ‘intuitive API’ make it sound like automating your browser testing is going to be a simple task. Unfortunately, the nature of these full-stack tests mean they’re often very tricky to get working reliably, and this has always put me off before. Testing should save you time, not create extra work.
This weekend, starting on a new test suite, I decided to go about really getting a solid Capybara setup, and get a complex test passing every time without anysleep hacks.</description>
    </item>
    
    <item>
      <title>Making a game with Phaser</title>
      <link>https://mike.sg/2014/04/20/making-a-game-with-phaser/</link>
      <pubDate>Sun, 20 Apr 2014 12:44:17 +0000</pubDate>
      
      <guid>https://mike.sg/2014/04/20/making-a-game-with-phaser/</guid>
      <description>Today I felt like making a game, so I learnt about Phaser and set myself the task/challenge of recreating a simple game from my childhood. Phaser is incredibly fun and easy to get started, I’d recommend giving it a go!
The game I chose was Tanx.
I started with the excellent Phaser tutorial and converted it to CoffeeScript. It’s perfectly fine to use CoffeeScript with Phaser, or I guess any other language that compiles to JavaScript.</description>
    </item>
    
    <item>
      <title>Variable scope in Ruby</title>
      <link>https://mike.sg/2014/04/14/variable-scope-in-ruby/</link>
      <pubDate>Mon, 14 Apr 2014 08:24:31 +0000</pubDate>
      
      <guid>https://mike.sg/2014/04/14/variable-scope-in-ruby/</guid>
      <description>One big difference between Perl and Ruby is that Ruby has no lexical variables. This confuses me when programming Ruby, because I’m used to thinking ifwill create a new scope. It doesn’t. Variables defined inside if will be available outside, because they belong to the method scope.
For example, in Ruby you can do this:
def foo if true x = 2 end puts x end foo 
 This prints 2.</description>
    </item>
    
    <item>
      <title>The Heartbleed bug</title>
      <link>https://mike.sg/2014/04/09/the-heartbleed-bug/</link>
      <pubDate>Tue, 08 Apr 2014 23:19:49 +0000</pubDate>
      
      <guid>https://mike.sg/2014/04/09/the-heartbleed-bug/</guid>
      <description>On reading about the Heartbleed bug bug, my first thoughts were:
 This sounds quite simple, is it really easy to spot? Why wasn’t this noticed during review?  The bug is in the Heartbeat Extension for TLS, as described in this draft. Interestingly, this document does actually highlight the importance of checking the payload length:
 If payload_length is either shorter than expected and thus indicates padding in a HeartbeatResponse or exceeds the actual message length in any message type, an error Alert message using illegal_parameter as its AlertDescription MUST be sent in response</description>
    </item>
    
    <item>
      <title>10 Singlish phrases I would actually use in the UK</title>
      <link>https://mike.sg/2014/03/17/10-singlish-phrases-i-would-actually-use-in-the-uk/</link>
      <pubDate>Mon, 17 Mar 2014 14:08:00 +0000</pubDate>
      
      <guid>https://mike.sg/2014/03/17/10-singlish-phrases-i-would-actually-use-in-the-uk/</guid>
      <description>Possibly not everyone knows that English is an official language of Singapore (one of 4.) What’s more, there is an unofficial (and sometimes frowned upon) mini-language called Singlish, derived from bits of Hokkien, Teochew, Malay, English and Tamil. Most of these words exist either to express something that does not have an English equivalent, or to say something more succinctly. Either way, it does come in handy, and it’s fun to use language that would be unacceptable or confusing back home!</description>
    </item>
    
    <item>
      <title>Free tissue packs</title>
      <link>https://mike.sg/2013/09/30/free-tissue-packs/</link>
      <pubDate>Mon, 30 Sep 2013 11:58:57 +0000</pubDate>
      
      <guid>https://mike.sg/2013/09/30/free-tissue-packs/</guid>
      <description>This is a common sight at lunchtime in Singapore: tissue packs, often several next to each other, seemingly left behind on the table.

One might, upon first encountering this phenomenon, assume this is the generous act of kind strangers. But it is not. You must not take the tissues. For they have an important message, and that message is this: Go away. Take your food and sit elsewhere, because this seat is taken.</description>
    </item>
    
    <item>
      <title>Settling in Singapore</title>
      <link>https://mike.sg/2013/09/14/settling-in-singapore/</link>
      <pubDate>Sat, 14 Sep 2013 11:25:54 +0000</pubDate>
      
      <guid>https://mike.sg/2013/09/14/settling-in-singapore/</guid>
      <description>So I’ve been in Singapore just over a week, and so far it’s going pretty great. It’s ridiculously easy to settle in here. Everything is crazily efficient and convenient. I think even if you’d never been here before and wandered around aimlessly for a whole day, you’d still find everything you needed.
I kept my sim card from when I was here on holiday. I switched it over on the plane and it was working before I got off, including data.</description>
    </item>
    
    <item>
      <title>On moving</title>
      <link>https://mike.sg/2013/08/04/on-moving/</link>
      <pubDate>Sun, 04 Aug 2013 20:27:20 +0000</pubDate>
      
      <guid>https://mike.sg/2013/08/04/on-moving/</guid>
      <description>In a little over 4 weeks I’ll be starting an exciting new chapter in my life. I’ll be moving to Singapore, staying in an area called Sengkang, to be with my girlfriend Brin.
And strangely, I’m not feeling nervous about it. Perhaps I will nearer the time. But I’ve had a lot of time to think about it; pretty much since I met Brin back in January (generally a good idea if you’re getting into a long-distance relationship), so I’m mainly just excited that the day is finally (almost) here!</description>
    </item>
    
    <item>
      <title>Writing a poker server in Ruby: part 1</title>
      <link>https://mike.sg/2013/07/14/writing-a-poker-server-in-ruby-part-1/</link>
      <pubDate>Sun, 14 Jul 2013 10:50:31 +0000</pubDate>
      
      <guid>https://mike.sg/2013/07/14/writing-a-poker-server-in-ruby-part-1/</guid>
      <description>About a month ago I embarked on the project of writing a poker bot. It has all the things I enjoy about programming: it’s open-ended and can always be improved, it can be played against, and AI features heavily. There’s also a wealth of research on the topic: poker-ai.org and The University of Alberta Computer Poker Research Group are the two sites I use the most.
I started by plugging in to Poker Academy, a game featuring strong AI opponents and a decent user interface.</description>
    </item>
    
  </channel>
</rss>
