Archive for 2017
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:
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.)
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.) By my count this would be my 5th visit to Singapore. That means Singapore now ties Hong Kong for my most visited foreign destination.
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.
I haven’t had much time to write recently. Been busy. (I’ll write about that some other time.) But I’ve kind of been posting regularly on this date for a while, so here we are. Ah, time. And the inexorable passage thereof. There’s some kind of big milestone for me in around three hundred and sixty-five more solar cycles. Well, I don’t personally consider it big, since that’s kind of arbitrary. But as people are wont to say, life begins… maybe I’ll save that for next year.
Last week the local gaming shop had the Steam Link on 70% discount so I figured I’d give it a try. We recently got a new TV at home, so I was eager to try out some Steam games on the big screen. If you’re too lazy to click the link above, the Steam Link is basically a set-top box that streams your gameplay to a TV via HDMI, allowing you to enjoy your steam games from the comfort of a couch.
Last weekend I watched Aureus Solito’s movie Pisay at the UP film center with a couple of friends (both of whom were my Pisay batchmates of course). For the uninitiated Pisay is the nickname for our beloved _Philippine Science High School. _It’s a system of government-run schools with a special focus on science and math subjects. There’s a highly-competitive entrance exam and we’ve always been told that students who make it in are considered the “cream of the crop.
Random thoughts while walking at night: The structure of government can be a bit analogous to the structure of a software development project. The Constitution is like the requirements for a project. It’s kind of high-level and (I believe) shouldn’t be too detailed. Supposedly the requirements are written by the client. For a country like the Philippines the client is “we the sovereign Filipino people”. Slight tangent: I used to know this guy who was one of those rabid “we need to amend the constitution” types and he asked me to review a “mathematical model to track the budget as a function of tax collection and monetary policy” that he wanted to include in a proposed new constitution.
Some time ago a friend from high school invited me to her daughter’s debut. And I had to proxy for her daughter’s ninong and maybe give a few words on what it means to become an adult. My first two reactions were (1) wow I’m so old one of my batchmates has an eighteen-year-old daughter; and (2) what the heck would I know about becoming an adult? (I guess (3) was “oh, it’s a debut, so it’s formal and I have to dress up?
"Grabe naman kasi ang ginagawa nyo sa pasahero" (This is too much for the passengers), she said. She was a short, old lady trying to get to the front of the bus so that she could disembark. But like most city buses in Metro Manila during rush hour, the bus was filledto the brim with people, many of them standing tightlypacked in the aisle, holding on to handrails on the bus ceiling or the nearby seats.
I don’t really play Magic regularly anymore; Last year I only played Standard because I was Q’ed for the WMCQs. But when there’s a local Grand Prix, oldies like me crawl out of the woodwork and try to believe we can still do well in a tournament with minimal prep. Grand Prix Manila 2017 was to be Standard format, held on June 2-4, 2017, at the SMX convention center. At the start of the year I already knew I would be playing in this year’s GP Manila, but since I hadn’t played Standard for well over a year, I didn’t really know what I would be playing.
So last April my friends and I took a second trip to Japan. This time we mostly stayed around Tokyo, while taking a few days off in-between to visit Fuji, Hakone and Nikko.I went to Fuji, but that’s not in Tokyo! I like Tokyo, so I’ll talk about Tokyo for now. I’ve only been here twice, but I could imagine myself living here for an extended period of time. It solves my top three problems with Metro Manila: overly hot weather, poor transportation options, and poor internet.
My first Persona game was Persona 4 Golden on the Vita – a fantastic game. After that I dived into Persona 3 Portable and eventually the spin-off games Persona 4 Arena (and Ultimax) and Persona Q on 3DS. So it was no surprise that one of the game releases I was most looking forward to this year would be the next numbered game in the series: Persona 5 on the Playstation 4.
I haven’t been blogging too much recently. I got busy for a while and had to skip a few weeks, and then general laziness prevented me from resuming a regular posting schedule. (Hopefully that ends now.) Most of the time my ranting was on social media, which got me thinking: Is writing on your own blog still useful in this day and age of social media? I’ve been blogging for a long time – my archives say 2002 – waaay before Facebook or even Twitter came around.
First, the spoiler-free summary (spoilers after this part): overall a very entertaining movie to sit down and watch popcorn and to enjoy the jokes and the space battles and the different colored lights and the tiny adorable tree creature GOTG’s humor was one of its strong points and for the 2nd movie, they push the comedy up a notch, perhaps a little too much in some places. Lots of funny gags and one-liners I felt like some of the character/background development stuff was pushed a bit too hard as well the movie’s plot also felt a bit thin and straightforward.
I recently attended a few training sessions for MarkLogicheld at an office in a nearby business center. Now, I'll forgive you for not knowing what MarkLogic is, as even I hadn't heard of it before six months ago. MarkLogic is (apparently) the leading Enterprise NoSQL provider. NoSQL is big and sexy right now because of the supposed advantages in handling big data, and large web companies like Google and Facebook use a lot of NoSQL in the backend.
A couple of years ago, two friends and I were being tourists in Barcelona. With its wide, spacious streets and strangely uniform city blocks, we walked around a lot. During one of our tourist days, we decided to eat some _paella_ on the way back to our AirBNB. Who comes to Barcelona and doesn’t eat paella right? We ended up walking for quite a while. Every time we came upon a new restaurant that served paella we would consider the price and the restaurant and would think, hey maybe we can find somewhere better or cheaper further along the way.
With The FFXIII trilogy not being particularly well-received and FFXIV being an MMO, Final Fantasy XV has been a long awaited as the next mainline single-player game in the much-acclaimed series. This review will have minor spoilers. Story FFXV follows the story of Noctis, prince of Lucis and his band of brothers (okay they’re not really brothers, but they might as well be). They’re supposed to be on a road trip to get Noctis married, but things happen along the way and eventually they have to figure out how to liberate their homeland from The Evil Empire.
Back in 2004, I signed up for the Google Code Jam for the first time. Unfortunately I didn’t make it past the qualifying round. I was a bit luckier in 2008 and 2010, making it to round 2 both times. In fact in 2008 as I recall I was one of only two participants from the Philippines who made it to round 2, which allowed me to jokingly brag about being the #2 programmer in the country.
I’m not a fan of scary movies. I don’t appreciate the idea of paying money to get surprised by jump scares or whatever. Back when I was a kid I remember my dad watching a Betamax copy of The Gate back home and me and my younger brother were watching with him and the movie seriously creeped me out. There was this one scene where a demonic eye manifested on the lead kid’s palm and that scene stuck with me for a while.
Recently, a developer needed to undergo a tech interview at US immigration:1 This may surprise some people I’ve worked with, but I didn’t have formal computer science training in school. I’m not actually a computer science major. Yet I’ve worked as a software developer for more than a decade now. Literally zero times have I needed to write a sorting function or balance a BST. I have a rudimentary understanding of some sorting algorithms (mostly just bubble sort and selection sort), and I have some idea of how to balance a BST.
4k XLocal tech blog YugaTech is doing a giveaway of a Sony X8000D Bravia 4K TV. To be honest I wasn’t sure about using this blog to participate in a promo, but I was already in the market for a new TV since our living room TV is already starting to have some problems. I checked out the product features of the Sony X8000D Bravia on their website. Some of the features stood out for me specifically:
At any point in time, what you are doing can be grouped into one of four buckets: Planning Executing a plan Reacting to something Relaxing (leisure time) Overthinkers tend to do too much of #1. The most efficient people probably spend most of their time in #2. People whose lives are chaotic do too much of #3. Almost all people don’t get enough #4. (I might be doing too much of #4~)
I’ve been hesitant to try Python 3.x because it’s not backward compatible with Python 2.x which I’ve been using for scripting since forever. But recently I found out that since Python 3.3, they’ve included a launcher in the Windows version that supports having both versions installed. You can use the launcher to specify the Python version to use at the command line (it defaults to whichever version was installed first):
We put people into boxes because it is convenient. It’s easier for our mental model of the world to say to yourself things like “This guy works with computers, maybe he can tell me how to fix my printer.” or “This person is from [school] and they are very arrogant.” or “You’re from [country]? You guys do [that country’s thing] right?” or ”This person is a supporter of [politician] so he must support all the things that politician does, even the things I hate.
I had been meaning to try writing a Twitter bot for a while now. I figured a trivia bot would be pretty easy to implement, so I spent some time a couple of weekends to rig one together. It’s (mostly) working now, the bot is active as triviastorm on Twitter, with a supporting webapp deployed on http://trivia.roytang.net/. The bot tweets out a trivia question once every hour. It will then award points to the first five people who gave the correct answer.
There’s this well-known idea that it takes ten thousand hours of practice to become an expert in something. But of course, it has to be ten thousand meaningful hours of practice. Meaningful here means that you are actually learning something from your practice. If you are repeating the same hour ten thousand times, that’s not worth very much. Instead, we should be actively learning while we practice. This means identifying our weak points and learning how we can improve.
After Hearthstone, I tried out a couple of other digital CCGs: Spellweaver and Eternal, but neither one hooked me. The one I enjoyed the most and did pick up to play regularly was Duelyst. So this review is written from the perspective of someone who has played both Magic the Gathering (MTG) and Hearthstone (HS). Hearthstone, Spellweaver and Eternal played like digital MTG with some advantages, as I outlined in the HS post linked above.
There are a few things that one should consider when using and integrating an open source library into your application: What are the licensing terms for the library? There are some liberal licenses that mostly let you do anything you want. The MIT license is an example of a very permissive license. Other licenses may provide a number of restrictions. Can you integrate with closed-source software? Can you distribute binaries without the source?
As of today, our country (The #Blessed Republic of the Philippines) is already at war with: Drugs Illegal gambling Communist rebels Some other things we might consider declaring war on (in no particular order): Poverty Ignorance Misinformation (sorry, “Alternative facts”) Abusive government officials Traffic Rights abuses Pollution High power rates Political dynasties Poor quality of local cinema offerings Politicians putting their names everywhere Internet trolls and bullies Lack of critical thinking Redundancy Overtime without overtime pay Government officials blatantly lying or pulling statistics out of thin air Slow and expensive internet The MRT breaking down Cruelty to animals Poor quality of local anti-piracy ads Jejespeak SMS spam Typhoons Taxis that don’t give exact change War Irony Spoilers Pineapples on pizza Poor grammar and/or spelling Hashtags Hypocrisy Multi-level marketing Working at “Edi sa puso mo” Redundancy Low effort blog posts that start out serious but end up trying a bit too hard to be funny People who don’t understand sarcasm People who stand in malls and shove fliers in your face Commenting on posts without reading the actual article Lists that end abruptly at weird numbers so you’re not sure if there’s more or what
Back when I was starting out as a software developer, webapps weren’t really a thing. Not as much as they are now anyway. My company provided training to new hires, but I didn’t get any web development training at the time, even though they already had a few web development projects in play at the time. Instead my initial training involved mostly development of so-called client-server software. This was software that was installed and run on the client machine but they would connect to a remote database server.
Old gamer rants follow. Gaming has changed a lot over the years. For one thing, there’s the internet now. If you got stuck in a game, you just head on over to GameFAQs or some other site and someone on the message boards will tell you how to get unstuck. Or you can even watch Youtube videos on how to do it! (Side note: I dislike having to watch Youtube videos to figure stuff out.
So after so many months of development you deployed your webapp to production and it’s up and running and everything is fine and you celebrate and your work is done right? Not really. Two days later you get an urgent support call in the middle of the night. (Your clients are halfway across the world.) They’re asking why the website is inaccessible. You check via your browser and sure enough there’s an error 500.
Signs you think about leaving your current job: The company culture has changed in ways you don’t like or recognize You are no longer proud of the work you do You are always feeling tired, even when you just got to work You more easily notice your coworkers’ screwups and are more easily annoyed at them You feel unappreciated for the work you do You feel like the company doesn’t listen to your inputs Many of your close friends in the company are unhappy and want to leave or are already leaving or have already left You no longer trust your boss to make good decisions about the company’s future You are always looking for more free time to pursue other pursuits It’s Monday and you’re already looking forward to Friday You hate your commute You start reading articles about signs you should think about leaving your job A lot of people feel trapped in their current job.
Hopefully by now most developers and project managers are well aware of the mythical man-month and Brooks’ Law: Adding manpower to a late software project makes it later The idea is that communications overhead scales up quickly as you add more people to a project. Oftentimes it is counter-intuitively not worthwhile to keep adding more people to try to catch up. Some implications of larger team/project size may not be immediately obvious.
At my old job I used to have this group of coworkers I had Friday lunch outs with. Inevitably, every Friday around noon someone would message the others asking “where are we eating?”. Now, there are a lot of good places to eat around the area and we’ve all been working there a while so most of the time we don’t care where we eat and we’d say we’ll decide when we get to the elevators.
Just a list I’ve been maintaining for a while: (Disclaimer: This list in no way implies that developers who don’t exhibit all of these attributes are terrible human beings who don’t deserve to live. But working with developers who exhibit many of these traits will probably result in a better experience over the course of your developer career.) Laziness, Impatience and Hubris – from the well-known (notorious?) Larry Wall quote Communicates well; is able to explain and communicate his ideas clearly, especially to nontechnical people; able to write good documentation Understands the concerns with scheduling and project management and communicates clearly with the team to avoid problems.
“If you know the enemy and know yourself, you need not fear the result of a hundred battles. If you know yourself but not the enemy, for every victory gained you will also suffer a defeat. If you know neither the enemy nor yourself, you will succumb in every battle.” ― Sun Tzu, The Art of War I was reading a forum thread recently about learning competitive Street Fighter.
So the other day I was reworking a Python script that I had been using for years on my home PC to manage and categorize some downloaded files for me. This time I wanted to add some smarter behavior to make it more able to figure out when to group files into folders without constantly needing manual intervention from me. To do this, I needed to persist some data between runs – so that the script remembers how it categorized previous files and is able to group similar files together.
“Democracy is the worst form of government, except for all the others.” ― Winston S. Churchill In the current world political climate, it seems that in many instances democracy and the related values (equality, human rights, and so on) are increasingly taking a back seat to populism and increasingly authoritarian leaderships. One sometimes has to consider whether authoritarian states would in fact be more effective in this day and age.
Random statistics from 2016: 74 blog posts (total of 769 currently on this site, some imported from as early as 2002. The record for a single year was 148 back in 2008, but that was back when I didn’t do social media much so even short posts made it to the blog, delicious bookmarks were auto-posted here, etc.) 50,135 words written for Nanowrimo 321 sketches submitted to r/sketchdaily Duolingo streak: 225 days Answers written on Quora: 427 Programming languages/frameworks learned: 4 Instagram posts: 390 Facebook activity: 218 statuses, 178 links, 164 photos, 31 videos.
In no particular order: Greet your loved ones and friends and anyone else you hold dear. Maybe even those you disagree with Ponder why people give so much significance to the transition between an arbitrarily-chosen pair of 24 hour periods Take stock and reflect on the past year Think about what you’d like to learn this year or how you want to improve Count your blessings for the past year and be grateful Change your passwords Buy a new toothbrush Make a New Year’s joke (“My New Year’s Resolution is 1440×900!