All posts by roy

The Setup 2018 Edition

While browsing through my old blog posts, I found one about my setup from 2010. I figured it was a good time to do an update. I like doing posts like these because it provides an easy reference for me to look back and see what I was working with at a certain point in time.

What Hardware Do I Use?

Desktop. I bought a new desktop rig back in late 2015, here are the specs:

Case: Silverstone Precision 10SST-PS10B
Fan: 120mm internal aux fan
PSU: Cooler Master B600 V2 600W
CPU: Intel Core i5-4460
RAM: 2x DDR3 Kingston HyperX Fury 8gb 1600
Graphics: Asus GTX970 STRIX OC 4gb
SSD: Samsung 850Evo 250gb
HDD: Seagate 2tb
OS: Windows 8.1 OEM which I immediately upgraded to Windows 10 (upgrade was free at that time)

This cost significantly more than any desktop I had assembled before, but it’s worth it. Still going strong up to now. Can easily handle most programming tasks I throw at it, including the notoriously resource-hungry Android development process and of course Google Chrome. Pretty good for gaming as well, although I’m not really the “4k 120fps” kind of gamer.

I have two old monitors (a 19″ and a 21″) hooked up to this desktop (haven’t bothered buying a new monitor… it’s on my list).

Late last year I also impulse-bought a Razer Blackwidow Ultimate 2016, I’m mostly happy with it (it’s my first “real” mechanical keyboard”) Recently one of the keys has been acting up, being a bit unresponsive but it got better after I removed the keycaps and cleaned up a bit under there.

Moved the tower case under the desk to get a bit more desk space. Will see if this works

As you can see above, I also have a much wider desk now than the dinky old computer table in the old post.

Laptop. My only laptop currently is a work-issued Acer Aspire ES1-433-38DR. It’s nice and handy and workable, but it’s not even a year old and I’ve already had some issues with the laptop suddenly dying when it’s not plugged in. For this reason (and a few other reasons like being able to publish iOS apps), I’ve been considering getting a Macbook Pro. (The only thing holding me back is the ridiculous price!)


Gaming consoles. Gaming is one of my indulgences, so there’s a few:

  • I still have a PS3, but it’s no longer the original model from the old post. We had to buy a new one after some time because the original conked out. The PS3 is rarely used nowadays however. I still keep it around because I actually still have some backlog that I like to fantasize about finishing one day. *Shakes fist at Ni No Kuni*
  • I also have a WiiU that I purchased around 2012 or 2013 I think. My WiiU library isn’t huge, but it let me play 3 different Zelda games! I often think about getting a Switch, but I want to finish what remains of my WiiU library first. (Only Twilight Princess and Earthbound remain AFAIK)
  • I have a PS4, purchased in October 2014. My PS4 library is larger than my WiiU one, but these days I typically only play one game on either console at a time.
  • I also bought a Steam Link to stream gaming from my desktop. I use my Logitech F710 wireless controller with it. It’s great when I have platformers on Steam that I want to play.
  • Handhelds: I have both a PS Vita and a 3DS. Okay, actually I have two 3DSes, the other one is a 3DSXL. I rarely do handheld gaming anymore though, unless there’s a long ride or something. I do still tend to carry one of these whenever I go out with a bag. Just in case.


TV. Mid 2017 one of our 32-inch Samsung TVs in the house conked out with a bad display so we decided to buy a new one. We decided on a 43″ LG Smart TV. Super happy with this, the display is much better than the previous TV. IDK how it works, I think they have some sort of software optimization that makes things look better. It’s great for Netflix, Youtube, Gaming, etc.

Tablet. I have an 9.7″ iPad Pro that I bought late 2016. I also bought an Apple Pencil for it, my main intention was to have a tool for sketching. Pretty happy with it, even though it looks pretty battle-scarred by now as I’m not the most careful user.

Cellphone. Wow, I was still using the Nokia 5800 in that last post. I’ve gone through quite a few Android smartphones since then, mostly Samsung Galaxy models, with the most recent one being a secondhand S5. I always have problems with battery life (probably due to being on data all the time) so last December I decided to buy myself an ASUS Zenfone Max 4. It’s not as high-spec as the Samsung Galaxy line, but this has 10000mAH battery which means I can go all day without having to scrounge around for a charger. I haven’t used my Powerbank in a while!

Others. I have a 10,0050mAH Asus Zenpower powerbank that was way more useful before I got the Zenfone. (I just now realized they’re related brands). I also have a Fitbit Charge 2 for some reason. I find it more useful for tracking my walking than the mobile apps I used to use.

What Software Do I Use?

OS. Windows 10 is mostly serviceable. I’d love to have a Linux setup as well, but it’s difficult to justify that as a primary OS when Windows has games! Instead I have a Linux Mint VM that I run on my desktop when I need to do Linux-y stuff.

Text Editor. These days any programming I do usually involves some combination of Python, JavaScript/Node or PHP, so the text editor is my weapon of choice. I tried Atom for a while, but it was a tad too slow for my tastes. I also tried Sublime Text, which is great and has everything I need but for some reason keeps nagging me to pay for it. Recently I installed VS Code, which has been pretty good so far so for now it’s my main editor.

Other Programming Stuff. For times that I need to dig into any Java stuff, I also still have an installation of Eclipse Mars on my machine. (I don’t miss Eclipse). I also have Unity3d installed on my desktop, as I still like to pretend I have time to work on one of my gamedev projects. For SSH, I used to use Putty, but lately I discovered the great “Bash on Ubuntu on Windows”. The name is a handful, but it makes doing Linux shell stuff like SSH and curl and whatever a lot easier.

Web Browser. Most of my work is web-related and I often use cloud resources, so the web browser is important. I recently switched from Google Chrome to Mozilla Firefox as my main browser, since the latest Firefox promised a bunch of speed improvements. TBH, I can’t quite tell the difference.

Office Suite. As mentioned above, I often use cloud resources, so it’s mostly GMail, Google Calendar, Google Drive and Google Docs/Sheets for my needs. I also have a local installation of LibreOffice because sometimes I have to open Excel files that are hundreds of megabytes large and Google Sheets refuses to import it. For cloud storage, my preference is Dropbox.

Note-taking. I’ve grown fond of Google Keep. It’s lightweight and handy enough for my usage, and the Android widget means I can use it to capture random thoughts and ideas throughout the day. On the iPad I also use NotesPlus if I happend to be in a meeting where I feel like writing notes down with the Apple Pencil.

Communications. Usually some combination of Slack + Skype for work-related stuff, although some clients prefer WeChat or WhatsApp so I have those too. For personal comms, it’s mostly Viber and FB Messenger and sometimes Discord.

Sketching. On my iPad I use and am a big fan of the Procreate app for digital sketches, which I think I even paid for a while back.

Odds and Ends. I have a bunch of other software utilities I often recommend. I use VLC Media Player for watching stuff on my desktop (doesn’t everybody?). I use Space Sniffer to check disk usage. Audacity for the rare instance that I have to do some kind of audio editing.

All the photos in this post are available as a Flickr dataset:

Let’s Encrypt!

(Image credit: r/ProgrammerHumor)

I’ve been meaning to add SSL to this blog ever since I first heard of Let’s Encrypt last year. Unfortunately, support on my otherwise awesome webhost was not yet first-class and seemed complicated at the time, so I kept putting it off. But recently I was testing something unrelated and found out that I needed to have SSL on my server in order for OAuth2 to work, so I grudgingly got to it.

Luckily I found out about a handy utility written in Ruby that does most of the stuff for me: letsencrypt-webfaction. It was surprisingly easy to setup, with only a single false start because I had a silly typo.

So now this site has SSL! Hooray!

Globe’s Fair Use Policy and the “Rotten Bananas”, four years later

Around four years ago (give or take a few days), one of my many Twitter interactions with Globe Telecom’s CS account went a little bit viral due to them trying to justify their Fair Use Policy by calling 3% of their users “rotten bananas”. Apparently I didn’t bother writing on the blog about it back then, so I thought I’d do it now.

View post on

The exchange went a tiny bit viral on social media, with friends telling me about people I don’t know sharing the image of the conversation on Facebook and Twitter. (I’m not sure if it was the exact same image above.). Even today, if you Google ‘Globe “rotten bananas”‘ you still get a few relevant hits.

I believe the CS account eventually deleted the offending tweets, I can only see my own tweets on the matter:

Today, Globe Telecom no longer offers any plans with “unlimited data”, as far as I know. I feel like I can claim some nontrivial responsibility in that decision, but it doesn’t seem like something to be proud of.

I myself had resisted shifting to a new plan for a while (so I can carry over my unlimited data), but eventually had to shift to a 3gb capped plan because I wanted to get my mom a new phone on the cheap. They do offer unlimited data for their new fiber home broadband plans, for around 30% higher monthly fees than the capped plans.

View post on

If you think about it, a 3gb bandwidth cap seems ridiculous in this day and age, but I’ve pretty much changed my behavior around it. I now very rarely watch Youtube or Facebook videos on the go for example. I prefer to watch stuff on the Desktop. (Phone screens are too tiny to appreciate most videos anyway.)

Going off on a slight tangent, our home broadband is now on a 50gb Globe fiber plan. Yes, I actually doubled-down on Globe despite all my problems with their customer service. In fact, even the migration of our Bayantel line over to Globe fiber was not without incident. Sadly, there is very little choice for high-speed coverage in our area. (I’m not inclined to try PLDT since I have a number of friends who also have poor customer service experience with them, and Converge isn’t available in our area.). We’ve only had the fiber service for a little more than a month, but it’s reasonably good so far. Some occasional slowdowns, but generally downloads are a lot faster. We have a bandwidth cap, but it’s at 600gb and there’s a mobile app that lets me monitor it. During the first month we only used less than 400gb, so I guess the cap is okay for now.

I think overall we still have some of the worst internet service in the region. The poor quality of internet service in the Philippines has been one of my all-time pet peeves about living in this country. Hopefully the promised third telco player to be introduced brings us some improvements in terms of higher bandwidth caps and speeds and better prices.

Trying out 3d Modelling with Blender

I decided to try learning some 3d modeling. For the past couple of weeks I’ve been following this beginner Blender tutorial where I had to make donuts. (Link to the tutorial series on Youtube.) Here’s my output!

(click for full size)

This image took around 40 minutes to render. I had to do 2000 samples per tile which is why it was so slow. I was getting too much noise/graininess at lower sampling rates.

I didn’t follow the tutorial exactly. My plate is square and made of glass for one thing. The chocobutternut donut wasn’t part of the tutorial, I just wanted to try it (obviously did not turn out too well and all those orange particles on the donut probably really slowed down the render lol). I also didn’t bother too much with the stuff in the last two videos of the series which involved adjusting the lighting and other stuff to make the image prettier (wasn’t really interested). I actually also tried to model a fork (not in the tutorial), but I couldn’t get the tines right and gave up.

A long time ago I read an interview in an old PC gaming mag about how they implemented Age of Empires and there was an image of a 3d mesh of a knight on horseback and I remember thinking “That looks really complicated, I’ll probably never be able to do something like that.”

And now that I’ve tried this tutorial, I have to agree with that initial assessment – any complex modelling would surely try my patience. But I was also pleasantly surprised with how advanced Blender is – I sort of imagined that you had to position and adjust all the mesh nodes/vertices/faces by hand a lot, but actually there’s a ton of functions to make some common operations simpler (but it’s still a lot of work).

One complaint is that Blender’s user interface is very obtuse and daunting though – I don’t usually do video tutorials but I doubt I could have figured this stuff out on my own. Though I suppose it can’t be helped given the sheer complexity of the task involved.

I’m probably not going into any sort of significant 3d modelling or 3d artwork soon (like I said, not enough patience), but it was good to give it a try so at least I have a passing knowledge of some of the concepts involved.


New Year’s Resolution: Do at least one personally productive thing per day

I’m not super big on New Year’s Resolutions anymore. (I seldom even do the 1920×1440 joke these days.) I mean, I’m all about productivity and improvement and changing for the better, but I’ve found that very specific resolutions don’t often work for me. Mostly because I have very little focus (obviously something that an be improved).

So my tendency now is to stick to general, high level resolutions (like the above) that don’t go into anything too specific. And so this year I decided on something like that. My NYR for this year is: Do at least one personally productive thing per day.

By personally, I mean something outside of work, something I do for myself. By productive, I mean something that helps me improve or grow or live a better life in some manner. And this excludes any manner of consumption (reading, eating, watching TV, browsing reddit, playing games, etc)

So yes, it’s still kind of vague, but my intent is to minimize or even completely avoid those days where I just totally laze out the entire day and not do anything outside of what I needed to do for work. Not that there’s anything wrong with that – chilling out is important too – but I felt like maybe I had a bit too many of those days last year.

Some examples of things which I think will qualify for this resolution:

  1. Writing a blog post. (Hooray, I already got one done today!)
  2. Doing some work on one of my many secret projects that I never get going or never get finished. There’s a lot of these to choose from. It helps a bit with my lack of focus – I can do other projects if I’m not in the mood for the previous one I was working on. If you’re curious, this typically means some kind of writing or programming project.
  3. Some art thing. I did get back into drawing and sketching in 2016 and kinda tapered off in 2017, hopefully I can get back on track.
  4. Learning something new. Arguably reading or being on the internet always lets me learn something new, but let’s say this means dedicating some focused time to a learning activity.
  5. Throwing out or deleting stuff I don’t need anymore. Not all growth comes from expansion; we also need to throw out old stuff we don’t need anymore to make room for the new.
  6. Reorganizing/Cleaning up/Optimizing. This is pretty broad, but basically anything that streamlines some aspect of my life or makes it easier.

During the previous year, I had actually wanted to pursue many of these things all at once – I wanted to be able to do daily sketching AND writing AND cleaning up AND side projects, etc. Didn’t really work out, so this year we lower our standards a bit. Just one of those things per day.

One of the challenges would be finding the time to be personally productive even during those days when I’m mentally tired out from work stuff – you know, the kind of day where you get home and you just kinda wanna sit in a chair and not think about stuff too hard. Hopefully I don’t get too many of those days, but hopefully the resolution inspires me to do even one small thing during the difficult days.

My 2017 in numbers

Happy new year! Last year I posted some year-end statistics. That seems like a good way to recap the year, so let’s do it again. Random statistics from 2017:

  • 45 blog posts (including this one; total of 818 currently on this site according to wp-admin, though that number doesn’t add up to last year’s stats; down 34 posts from last year, an indicator of increased busyness)
  • 0 words written for Nanowrimo (hopefully I can have another go next year)
  • 59 sketches submitted to r/sketchdaily (a far cry from last year’s 321, yet another indicator of busyness)
  • Duolingo streak: 0 days. But I did manage to start the Japanese track and do it in parallel with the Spanish track. Will pick this up again in January.
  • Answers written on Quora: 17. Down by 410 lol. I started writing answers on Quora last year a bit out of boredom but my interest kinda tapered out. I still answer on occasion.
  • Programming languages/frameworks learned: I’ll say 5. I did projects with Node.JS and React Native. I was also involved in a non-trivial PHP project for a while, so I’ll count that as well (my previous exposure to PHP was only small scale.) Not really a PL or FW, but I also learned usage of MarkLogic NoSQL database which also gave me an opportunity to learn XQuery. Maybe I’ll write a more detailed post about these later on
  • Other countries visited: 2 (Japan and Singapore). Probably 0 next year.
  • MTG GPs attended: 2 (Manila and Singapore). Did not do too well this year. Probably 0 next year.
  • Instagram posts: 121 (Down 269. Mostly due to lack of sketchdaily)
  • Facebook activity: 192 statuses, 269 links, 245 photos, 53 videos. You can generate your own report at Wolfram Alpha
  • New facebook friends: 9 (down 30)
  • Baptisms attended: 1 (down 3)
  • Weddings attended: 1 (down 1)
  • Wakes attended: 2 (up 1; T_T)
  • Games purchased (not including any I got for free for some reason): 67 (!) (up 48! Most of that is due to a humble bundle I got that had 30 games; (3 PS4 retail, 1 Wii U retail, 21 Steam, 1 from a GOG Pinata, 41 from Humble Bundle; maybe I should scale back a bit lol)
  • Games “finished” (story/campaign completed OR achievement complete): 8 (FFXV, KH2, P5, BotW, One Piece:PW3, Stardew Valley, Persona Q, Ori and the Blind Forest). I’m also like 95% through FF12 Zodiac Age, but I’m trying to do as much stuff I can before finishing it.
  • Best Eternal Rank: Master (363)
  • Average points per turn in Words with Friends: 27 (up from 26.5)
  • Books read: 9 D: (Down 21 from last year; year target was 52). Here’s the list. Need to read moar
  • Things watched on Netflix: 720 (Down 160 from last year! Another indicator of busyness?)
  • Quiz nights attended: 19 (we won 3 times)
  • Uber trips: 64 (up 42 from last year!)
  • Minutes spent outside walking or running: 21,573 (down around 200 minutes from last year; slightly above 59 minutes per day). This is based on Google Fit statistics. Hopefully next year I can use the Fitbit instead.
  • Donuts eaten: 12 (a 200% increase over last year!)
  • Times I won the lotto: 0 (I kind of regret putting this number last year, as now I can’t remove it without looking suspicious)
  • Bears defeated in single combat: 0

(Since I started working again last year I thought about logging my hours/income here as well, but that seemed like a bad idea.)

Looking forward to better numbers in 2018!

My Coding Approach

I was thinking about my typical approach to coding. When writing a new feature, I tend to implement in the direction of where the data flows, starting from the user interface then to the backend and back to the frontend and wherever else that goes. I will build incrementally, using debugging tools or console printouts to ensure that each step is working correctly.

As an example, here’s how I did a recent web-based function:

  1. The user needs to see a new button on the screen, so I add the HTML for that button and just have the click handler be an alert confirming the button has been clicked.
  2. The button needs to open a modal dialog. I write the HTML for the modal dialog, then add the code to the button to launch the modal.
  3. On load, the modal dialog needs to fetch some data from the server. I write the Javascript to make the ajax call on launch of the modal.
  4. On the backend, I map the URL route used by the above ajax call to a controller method. The controller method simply outputs a debug message to the console. I refresh the page on the front end, click the button to launch the modal and verify on my server’s console that the controller method has been called.
  5. I modify the controller method to call a method on the relevant model. I write the stub method on the model with a dummy return value, which the controller method then outputs to the console. I verify the entire flow again.
  6. I write the retrieval logic in the controller method. I verify the entire flow again, using server console output to verify the correct data is being returned to the controller.
  7. I have the controller write the returned data to the response as JSON. I go back to the frontend and modify the success handler of the ajax call to log the response to the Javascript console. At this point, I also update the error handler to do whatever is appropriate. I verify the entire flow again, this time confirming that the correct data is displayed in the browser console.
  8. The user needs to see the data from the response, so I write the Javascript and HTML to render the response inside the modal dialog. I verify the entire flow again, this time confirming that the correct data is shown in the modal dialog.

I’m not sure if this is the best approach, but it works for me. It feels incremental, systematic, methodical, and easy to see where things go wrong (which they inevitably do). As kind of an upside, I also strangely feel compelled to not stop until I have working complete flow. Of course the downside is that if I have to stop at any point, I now have a nonworking UI component, but at least that’s a clear indicator of where I need to pick up next time.

I realize that a lot of modern software engineering advocates recommend some kind of test-driven approach. I imagine with such an approach start with the smallest iota of functionality, write a test for it, then write the actual code, then work outwards from there, building more complexity on top. So for the example above, maybe I should have started with the retrieval logic on the backend then work my way outwards from there.

I do that sometimes but I find that as a full-stack engineer my natural tendency is work my way across a new feature in this manner – from user interface to backend and back. Combined with the difficulty of writing code to test UI/HTML/JavaScript, this means I rarely get into the mindset of test-driven development. It’s not something I ever got used to. Maybe someday a switch will click and I will get it and my mind will be blown.

My approach does have some benefits though, in that I’m defining the interfaces first before diving into the guts of the logic. In that sense it’s kind of “test-driven” except all my testing is manual.

I do think having such a systematic, incremental method of implementation is a good skill for the junior programmer to learn though. My experience is that many younger programmers (especially those fresh out of college) tend to write huge chunks of code/logic/functionality then get surprised when the very first thing breaks down.

Recently when sitting down with a junior to help them walk through some problem I often show them how I debug problems this way. I trace the entire flow from start to end, adding debug messages as I go, to help identify at which step the process goes awry. I also try to describe my proposed approach for complex new functions this way. I’ll prototype a small part of it from frontend to backend, writing debug messages all the way, and it conveniently leaves the junior with a template for writing the rest of the functionality. (Although I am as of yet unable to attest to the efficacy of this approach)

I’ve been writing code for a long time, and while I wasn’t self-aware enough back when I started out to document how I was writing software, I like to think I’ve improved a lot since then. And for sure there’s still a lot to learn. Maybe some years from now I’ll look back on this blog post and chuckle about how naive I was and write a new blog post detailing an even better approach.

Grand Prix Singapore 2017 Tournament Report

I had booked the Singapore trip earlier in the year, since I almost always attend Grand Prixs in Singapore as its an easy trip and gives a good opportunity to visit friends. Unfortunately, I ended up not having time to prepare for the tournament itself. Fortunately, it was a limited event rather than constructed, so I figured maybe I could wing it and still do well. (Spoiler: I could not.)

Prior to the trip, my prep for the sealed format had consisted of a single pool at my prerelease and reading a few articles online the night before the trip. I went there on Day 0/Friday to try a last chance trial, but didn’t get past the first round due to a “I’m still testing” mentality that meant poor mulligans and not reading the cards and tilting and scooping before figuring out there was an alternative.

Later that night, we opened 6 different sealed pools and tried out a few different builds to get a feel for the format. I liked the B/W vampires archetype best, and felt that the format was aggressive and wanted to avoid dinosaur decks which would have too many high-end drops. (Spoilers: Dinosaur decks would be my undoing). I knew I wanted to open cards like Bishop’s Soldier, Mark of the Vampire, Walk the Plank, Vanquish the Weak, Ixalan’s Binding and so on.

We ended our night prep with a few simple guidelines for the next day:

  1. Read the cards
  2. Mulligan well
  3. Think before scooping
  4. Life is unfair

Main event time: Amazingly, the judges had pre-registered all the sealed pools. I was happy to note as I opened my pool that I had opened many of the cards I wanted to see. I had a secondary R/G dino list that seemed workable but lacking a few playables. I just went with B/W aggro since that’s what I was confident with. Here’s the build I went with:

Here’s a blurry image if you like that sort of thing:

I was pretty happy with the pool and thought I could do well. The deck looked good, if a bit lacking in two drops. To the swiss!

First 3 rounds: WIN. Aggro deck works as expected. Feels good to get a good GP start.

Round 4: LOSS vs B/W. The guy I fought here eventually finished Day 1 undefeated, so I guess he had a pretty good pool anyway. I was saddened by the early loss, but there was still much to give.

Round 5: Win. Hooray, we are back on track. Or so I thought.

Round 6: Loss vs B/G dinosaurs and removal. Ok, guy had a really solid pool and I tilted a bit, that’s fine. 7-2 for Day one was still doable and a perfectly decent finish.

Round 7: Loss vs R/G dinos. Ugh. Now I see the problem with not having enough two drops. Not able to push through enough early damage means the opponent stabilizes. Mana problems at 16 lands doesn’t help either. No more losses to give after this one.

Round 8: Loss vs R/G dinos again. Similar story as the last round. I message my friend who had gone home earlier. “Good news! I don’t have to come in early tomorrow!” Sigh.

Round 9: Playing just for fun now. Aaand I lose a very close game 3 to another B/W deck.

Oh well, that’s Ixalan limited for me then. The next set drops early January so I’m not playing this format again. The good news is, even if you scrub out on day one, there’s always Chaos Sealed to look forward to on Day Two!

Chaos Sealed

Chaos Sealed was pricey since we get two Masters boosters this time. Here are the ones I pulled:

Yup, everyone got an Unstable. And yup, I sadly got a Coldsnap. I built a red/blue deck with green and black splashes. Mostly just fliers and tempo and removal. Most expensive pull was a Verdant Catacombs from the MM2017. I did use a few Unstable cards, just removal and some solid creatures. None of that contraption silliness, though I did have the opportunity to lose to one later on. I also had a foil Terminate that happened to be by the GP artist so I managed to get it signed.

I won the first 3 rounds on the back of my fliers, then lost round 4 to a mildly annoying Chinese person, then did an ID with the 5th round opponent. Got enough points for like 5/6ths of an Ixalan box. I actually wanted to get a GP shirt, but they were out of XXXLs. At least I managed to win something for the weekend so it wasn’t a total wash.

I’m a bit sad about not performing well in both GPs I attended this year, and as always it makes me think about quitting competitive Magic completely. It requires a lot of time and effort to keep up and be familiar with the metagame. In fact, I had already decided to skip the Standard GP in Singapore next June. (This will be the first GP Singapore that I would have missed since 2010). I’ll probably stick to Modern mostly for the near future.

Singapore 2017

  1. I took a 5-day trip to Singapore last weekend, mostly to play in the Grand Prix, but the opportunity to get away from the country for a while was appreciated. These are some notes and anecdotes from the trip. (Not about the GP itself, that’s a separate post on its own.)
  2. By my count this would be my 5th visit to Singapore. That means Singapore now ties Hong Kong for my most visited foreign destination. My last HK visit was back in 2009, there was no overlap.
  3. Normally when flying out I prefer to check luggage so that I’m not carrying much on the plane. This time I decided to go the opposite route. I hadn’t prepaid for any checked baggage so I tightly packed 5 days worth of clothes into a single backpack for hand carry. It was 0.2kg over the limit, but the lady at the check-in counter didn’t bother to check.
  4. My flight was 5am from Manila to Singapore, mostly so I wouldn’t run afoul of the horrible December traffic on the way to the airport. This plan would have worked better had I not also decided to watch The Last Jedi on it’s first night, mere hours before the flight. That meant I was quite sleepy while waiting at the airport. I’m not one of those people who can sleep alone at the airport – I’m worried about people touching my stuff.
  5. The plane I was getting on was one of those smaller ones with six seats to a row and a single aisle in between. I’d ridden in one of these before, but this was the first time I managed to take a look at how tiny the plane was from the window at the boarding gate. It was barely bigger than an EDSA city bus. I’ve flown many times and I understand the physics, but I’m still amazed that basically a big chunk of metal carries us across the skies by momentum.
  6. Tall people problem no. 37: practically impossible to get a decent sleep on these budget airlines with their little to no legroom and seat backs too short. I managed to get a few  pockets of sleep but nothing continuous as I had to keep adjusting my neck every so often. The flight was three and a half hours, fitbit says I managed to get around 1 hour of sleep.
  7. I met up with a friend at Changi’s new terminal 4. This terminal was new enough that my flight itinerary still said terminal 2. I would be crashing at my friend’s place for the trip. I think I’d stayed at their place twice before.
  8. We took a long train ride to Tiong Bahru where we had a Mos Burger for brunch before taking a bus back to their place. When I originally booked the trip, I assumed I would have free time Thursday to wander about a bit, since the MTG event starts Friday. However, due to lack of sleep I ended up just taking an afternoon nap and mostly lazing around for the rest of the day.
  9. Internet in Singapore is of course much better and faster than in Manila. But it’s a bit less tourist-friendly than say, Tokyo, where every Metro station and 7-11 had free wifi the wandering traveller could use. My friend lent me a mifi to use for the stay, but luckily there was free wifi at both our transition point at Tiong Bahru plaza and at the Singapore Expo where the event was being held.
  10. I had turned off my mobile data prior to boarding the plane to avoid exorbitant roaming charges. Despite that, I managed to accidentally pocket dial someone back home. I’ll find out how much that costs in my next bill.
  11. Aside from the internet, the other thing I like about visiting foreign cities is the public transit. Buses and trains were pretty much the same as I had noted in previous visits, except that they had managed to add a new train line since I was last here, giving us a secondary route to the expo. Basically while Manila’s MRT had been continuously breaking down over the past three years, Singapore managed to add a new line and there’s even another one in construction already. Stark contrast.
  12. Singapore doesn’t have as many train lines yet as HK or London though, and the place I was staying with was out of reach of the train lines, so I still had to transition to buses often. My friend lent me an EZLink card I could use to pay for buses and trains. A robust public transit infrastructure including buses and trains, with predictable schedules and routes you could track online, and a universal payment scheme – some of my modest hopes for Metro Manila.
  13. I’m not much of a foodie, so I don’t really go to other countries to experience their food, so nothing too special to note in that regard. However, I found out that in Singapore, Burger King doesn’t have the 4-cheese whopper (!). Later during the MTG event I spoke with an American dude who works for BK in Singapore and he mentioned that even though the 4CW is a best seller in the Philippines, it didn’t do too well in Singapore. Their best seller is the mushroom swiss whopper thing. (Yuck mushrooms!)
  14. This my first time in Singapore in December, and I think also the first time I’ve experienced rain here. It was a bit heavy while I was at the expo on Friday, I had to wander around Tiong Bahru Plaza a bit on the way back, to give the rain time to settle. Of course I had no umbrella, as I believed I was not allowed to bring one on a plane.
  15. There were book and IT sales at the expo during the weekend I was there. I thought about buying some Marvel trades. They were selling for 10 for S$50, but I would never have been able to fit those in my backpack for the trip home. The electronics and laptops still seemed expensive, even for a sale.
  16. Well, Singapore is an expensive city in general. Meals typically cost 2-3 times what they would back home in Manila. When I’m in a foreign country, I try to avoid doing the conversion math all the time for meals – I went here knowing how much it costs to live here after all. I do the conversion when browsing around for stuff to buy for back home. The conversion rate of around 37php to 1SGD wasn’t convenient, but luckily my friend was a math major and told me to just divide by 8 and multiply by 300. Intuitively it didn’t seem like it would be easier, but it actually was.
  17. Another thing that strikes me whenever I’m wandering about in Singapore is the diversity. On the train, there’s always a smattering of Chinese, Indians, Filipinos, White people, etc. With the recent rise in worldwide news of people expressing hatred towards people who are not of the same descent, it’s refreshing to be in such an environment.
  18. My flight home was just before 7pm on the Monday after the Grand Prix. That meant I had the day to kill, as it were. Packing when quickly (since I didn’t bring much). Spent some time wandering around a mall in the Orchard Road area. Malls in Singapore are a lot more… high end than malls in the Philippines. More like Podium and less like SM Megamall. Browsed through comics in Kinokinuya for a bit (and decided they were too expensive), then headed back to Tiong Bahru for a late lunch and then back to Changi.
  19. Sadly, I had forgotten to web check-in for my flight. Because of travel anxiety, I’m often well-prepared for flying out, but have no similar best practices for flying back. They didn’t have any of those automated check-in kiosks available either, so I had to queue with a whole bunch of OFWs. The annoying thing about OFWs flying back is that they’re often a bit older people who have a ton of luggage and hence take forever at the check-in counter. Some will even argue or haggle over how much they’re allowed to bring. One lady in front of me said she wasn’t even aware there was a limit to check-in baggage. @_@
  20. When it was my time to check-in, I was done in around a minute. The lady behind the counter asked to weigh my hand carry bag, luckily I had somehow shaved off some weight and it was at a comfortable 0.5kg under the limit.
  21. For outgoing immigration at Singapore, if you had your biometrics taken on your way in, you can just do automated immigration. You just scan your passport and boarding pass and your fingerprint and you’re good to go. Neat. The last time I was here, outgoing immigration gave me a scolding for losing the small piece of cardboard that was once part of the card I filled up on the way in. I didn’t need it this time.
  22. Terminal 4 seems much smaller than terminal 2. It’s still large and spacious and kind of like a mall though. I didn’t have much time to browse around, other than buying some bakkwa for people back home. There was an arcade area where I could play Marvel vs Capcom 2, but I was too lazy for that. And of course, there’s ample places to charge, which was nice.
  23. The plane for the flight home was bigger than the one coming on, one of those with 3 sets of 3 seats per row, with two aisles. Amazingly, I had the same seatmates as I did on the flight coming in. They were a young couple that I guess were on their honeymoon or something (they had wedding rings on). We didn’t really talk or anything, just the “Oo nga!” when I noted the coincidence.
  24. I wasn’t really sleepy during this flight, so I spent some time drafting this blog post instead. I also managed to win some kind of Cebu Pacific pouch thing off one of those trivia games that they sometimes have. I managed to answer the incredibly challenging question “Where did the child see mommy kissing Santa Claus?”
  25. Flight landed around 10:45 without incident. This schedule I booked had the same rationale as for my outgoing flight: I wanted to avoid Metro Manila traffic. However even this late wasn’t enough, and I failed many times to get an Uber or a Grab. Reluctantly I queued for a regular taxi. Fighting through Metro Manila traffic, I finally managed to get home a bit past 1am, despite my cab driver being obviously sleepy. Our cab also got sideswiped along the way, with some severe damage on the front headlights and bumper.
  26. The trip is in the books. Aside from doing poorly at the GP itself, it was pretty good. Good to get away for a bit and see old friends and hang out. It felt a bit weirdly casual too, like I randomly popped in to Singapore for no reason. The weekend went quickly, and so back to the grind.


I had been looking into a software performance problem for a few hours now and had decided to call it quits for the day. I turned off the lights and climbed into bed, hoping to get to sleep early for a change. I hadn’t been in bed five minutes when I thought about something I hadn’t tried yet. I picked up the tablet that was beside my bed and did a few google searches and soon I was back on my desktop trying out some parameters I hadn’t tried yet.

Ideally one practices some sort of compartmentalization. There should be a clear boundary between work and non-work and you can set work aside as needed. It’s something I’m really bad at, as seen in the example above.

It’s something that needs a certain kind of discipline, and we all know discipline isn’t my strong point. Working from home and with everything in the cloud and accessible online makes that discipline even more important. And even more difficult! It’s a lot easier to create separation when your work stuff is only accessible from the office.

My tendency for multitasking probably doesn’t help either. Even when I’m playing a video game or out on a walk, I can still get distracted by notifications on my phone. I’m used to it and I expect it and I don’t really want to disconnect – so maybe I’m kind of asking for it too.

The other day I was supposed to take a day off from work and was planning to chill all day and maybe work on some personal projects. Still I ended up replying to a few emails and discussing some stuff on slack even while I was playing Persona 5. It wasn’t much work time but still drove home that I was so bad at compartmentalization.

Software development is also like any other professions that involves creative problem solving. It’s hard to set aside the problems you’re trying to solve. You can’t just suddenly quit on a problem at a certain time. They tend to keep spinning around in your head and will pop back into mind at random. And once a new idea or solution does come to you, one might think it wise to just write it down and pursue it later, but then you risk losing flow. Flow is a valuable commodity in professions like mine, so you kind of want to ride along with it when it decides to come.

Supposedly you should be setting aside specific times of the day for when you hunker down to work. That way your mind gets conditioned that “this is work time”. And it makes it easier for you to create that separation between work time and nonwork time. And hopefully flow comes to you at the proper time instead of randomly while pooping. That’s not always easy though, and not always viable due to scheduling concerns. But it should be a step in the right direction. Hopefully it’s not too late to learn that kind of discipline.