Tuesday 27 March 2018

Ten Years of Facebook Habits

It was 2008 when an old school friend of mine introduced me to Facebook. At the time, Social Media wasn't exactly a new thing, but Facebook's spiffy interface was making it cool again.

Just about everyone seemed to be on it - ex-schoolmates, ex-colleagues, current colleagues, friends, relatives...

And thus I found myself creating an account and jumping into it with gusto. It's now 2018. It's been ten years of screwing around on this platform, and it's interesting to see what's gone on since then. In particular, I made quite a few observations about human nature, and made a healthy number of friends. There were also several Facebook-specific habits I picked up along the way and dropped as the years went by.

1. Year 2009

The first habit I dropped, relatively early, was regarding Facebook games. Now, at that time, Facebook games were hot and really good time-wasters - in fact, too good. My productivity went down a fair bit every time I was at a workstation. Sad to say, I didn't drop the habit of playing Facebook games in my first year. Hell, I might even have used my credit card to buy a few Facebook credits here and there. (I know, right?! Unbelievable.)

Paying for FB games!

What I did do, was stop inviting those on my Friends lists to participate in them. At some point, it occurred to me that I was being a nuisance. If people wanted to join, they'd do so on their own goddamn time.

That particular habit dropped, this led to...

2. Year 2010

...dropping Facebook games altogether. Those were fun, and I made quite a few friends along the way - not just people on my Friends List, we actually met up and hung out - but who had time to sit around and play Facebook games all day when there was shit to do? I was between jobs then, and this was not a productive use of my time.

Not a productive use of time.

Writing Notes was another practice I dropped pretty quick. At first, it seemed like a nice way to blog without actually needing to go to the trouble of setting up a blog... but after a while it started to feel pretty fucking pretentious.

3. Year 2011


Vanity. It was a full three years into Facebook that I stopped taking regular selfies. At that point, I think just about everyone on my Friends list knew what I looked like, and all the various permutations of my image over the last decade. Not being that much of a looker in real life kind made it all the more sweeter whenever I had a good picture of myself.

Look how pweety I am.

But really, what's the damn point? This isn't some kind of beauty contest. And even if it were, I'm woefully ill-equipped for it.

4. Year 2012

At this time, the 2011 Singapore General Elections, followed by the 2011 Presidential Elections, had come and gone. I'd made a fair number of friends (on all sides of the political fence) through political debate, but the year following it began feeling a little empty. I began to realize that people weren't actually interested in a political debate - all they really wanted to do was push an agenda. They weren't going online to explore all perspectives. Rather, they just wanted to shout down all dissenting opinions while railing at the Government for suppressing their Freedom of Speech.

Keyboard rage.

It was a mess. I decided to cut my losses and move on. Facebook was a hotbed of flame wars every hour. When I tried to be fair, invariably everyone thought I was "working for the other guy". And those who didn't, liked to accuse me of cowardice and "playing it safe" because I refused to take extreme stances. (I guess to people who don't have the intellectual capacity to appreciate nuanced positions, refusal to take extreme stances could be seen as cowardice.)

Besides, my parents were busy being paranoid over the Government targeting me for my less-than-complimentary posts about them. The things parents believe... but they're a product of their time and in their time, the political climate was based on fear. Who do I blame? The Government, naturally... but that's another topic for another time.

5. Year 2013

My Friends list had expanded beyond the boundaries of what I felt comfortable with. It was almost at two hundred - most of which I'd interacted online with or met offline at some point or other. I know, several people have almost a thousand, and two hundred is a pittance compared to that number. Still, this is my comfort level we're talking about, so please feel free to fuck off from my blog and brag about your humongous Friend List somewhere else.

Too many goddamn "friends".

I stopped sending people Friend Requests just because I liked something they'd said, or an argument they made. And then trimmed my Friend list down to people I had actually interacted with, relatives and actual friends. This meant that most of the "friends" I'd made through playing Facebook games, got the axe.

This year also heralded a marked decrease in passive-aggressive Facebook Status Updates. You know those cryptic Status Updates that throw shade at certain people but somehow never name names? They started off as ways to drop heavy hints - return my goddamn money, stop being a dick, you-pissed-me-off-but-I-don't-feel-like-confronting-you-directly, etc. But then the wrong people started calling me out for it, believing I was talking about them. Whereas the ones I was really talking about were either too dense, or just utterly shameless.

Too much effort. Besides, it was lame. Habit dropped.

6. Year 2014

Even though I didn't comment much on the Singapore Government anymore, I was still saying stuff I didn't want my family (my mother, in particular) knowing about. The fact that I smoked like a chimney. Mad dashes in the rain. My non-traditional stance towards traditional Asian values, whatever they may be. I didn't want them to see my posts, and I didn't want them commenting on my Status updates, which could sometimes irritate me mightily. My sister was the only one who didn't annoy me, but since she was under the category "family", Facebook handily hid my posts from her too.

Family filtered out.

Basically I stopped sharing these salacious little details about my life with people I truly gave a shit about.

The rest of the people on my Friends list? If they didn't like something I posted, they had the option of Unfriending, Unfollowing, or Blocking me. At worst, they could write on my Wall and make fools of themselves whining about my whining. Who gave a flying fuck about them, really?

7. Year 2015

This was the year I actively cut trimmed my Friends list and stopped indiscriminately accepting Friend requests from people who I had only interacted online with. Some claimed that they sent me Friend Requests because they liked the way I posted. My gratitude for the compliment notwithstanding, I decided to exercise a little discipline and save my sanity in the process.

Yay! I won a Facebook
argument!

This was also the year I stopped responding to flame bait. By this time, I was beginning to realize just how little of a shit I gave. People would make inflammatory remarks on my Wall after being triggered by something I said, and I would reply out of courtesy. But that was as far as things went. At some point, it would be obvious that they were only spoiling for a fight and indulging them was a time-wasting activity. Worse, it was beneath me. What's the value of a Facebook win? Zero. And honestly, if you disagree, if your self-esteem is somehow affected from some perceived victory over the Internet, perhaps your problems run far deeper than you suspect.

8. Year 2016

You don't get to change anyone's mind online. I learned after a few years on sites like Quora. It was fun trying to get people to see a different perspective and appreciate some nuance, but people get take it too damn personal when their beliefs are challenged. Too much effort for too little value. Not only did I stop engaging in political debate, I stopped engaging in debate, period.

Gym selfie!

There was a time I did the watery version of Gym Selfies and posted Status Updates whenever I went to swim. It wasn't really meant to showcase what a healthy lifestyle I'm living; honestly I'm under no illusion that I'm any sort of Iron Man Competition candidate. I just posted updates because I felt like it. But people take it how they want to take it, and there may have been a wee bit of projection on their part.

So yeah, I stopped that practice. Not that I give a rat's ass what the the critics thought - I'd simply run out of new and original shit to write about doing laps in a pool.

9. Year 2017


Being woke and virtue-signalling - there was a time I felt this need to comment on current affairs and show the world I wasn't just a (barely) pretty face. It all changed in 2017.

This year was the year Donald Trump won the US Presidential Elections, and the sheer outcry online confronted me with how foolish this exercise was. Suddenly everybody had an opinion. Suddenly everybody wanted to vilify Trump. When I looked at Trump, I didn't just see a lousy President. No, I saw a huge (and easy) target for people to wank on as they intellectually masturbated their way to woke-dom.

Seriously, folks. I know Trump is a terrible President. Everyone and his dog knows Trump is a terrible President. You constantly harping on the fact that he is a terrible President doesn't make you look clever and informed. It makes you look desperate to appear clever and informed.

I get it. People want to feel like they matter. They want to feel like jumping on the anti-Trump bandwagon contributes to making the world a better place. Here's the thing, sunshine - talking is easy. Actually doing shit about the world's problems is hard, and often goes unsung.  And all the people were showing me, via negative example, just how lame I'd been the past couple years. All around me were people trying too damn hard to show others that they had substance, like Facebook is just one huge self-promotional branding exercise. Boy, was I over that.

LGBT

I still believe the LGBT crowd should feel free to marry whoever they want. I still believe that women should be taken seriously in tech, and that racism has no place in an enlightened society. I also believe that there's absolutely no need to constantly remind everyone of what I believe, as though that made me morally superior or something.

With the realization that Facebook just isn't meant to be taken all that seriously, I started weaning myself off deep meaningful posts. Instead, I'd make silly jokes and puns, post pictures of irrelevant crap and pretty much take the piss.

10. Year 2018

And finally, this was the year I stopped using Facebook Mobile. I may still check my Facebook every other night, but at least it's not a few times a day. And the truth is, I barely miss it. I mean, I used Facebook while it was within easy reach. But now that it's not, I find myself occupied with other things. Facebook has been a great distraction, but in recent years, it's not been a valuable distraction. Too much nonsense going on online. Facebook has become a place for really insecure people to hang out and collect Likes for personal validation.

Collecting Likes.

Hey, I'm not judging (much). People need what they need. If Facebook Likes and Shares hold actual emotional value for them, who am I to say otherwise? You do you, boy and girls.

What a load off!

Not being bound to Facebook has been a strangely liberating experience. I highly recommend it. Suddenly I have all the time in the world to do other stuff. That is a trend that needs to continue. Also, my mobile data usage and battery life have improved tremendously. That's not a small thing, all considered.

The recent Facebook privacy debacle could not have come at a better time.

Hope you Liked this...
T___T

Thursday 22 March 2018

No bonus? No problemo.

Having left my fair share of companies over the years and spoken to numerous ex-colleagues who were planning to do the same, I've noticed a common refrain.

"Get your bonus, then leave."

At one of the companies that I left, my then-supervisor advised the same thing when I tendered my resignation one month before the annual bonus was to be declared. Apparently our CEO had given the standing order that staff who left during this period would not be entitled to the annual bonus that would be declared next month. No, not even a pro-rata amount. I was prepared for that. Knowing what a cheap bastard our CEO was, the annual bonus wouldn't amount to much anyway, I argued. My colleagues disagreed. The company had landed a substantial amount of moolah from selling off one of their subsidiary departments to another firm, and they were holding out hope that some of that wealth would trickle down to them.

In the end, when the annual bonus was declared, the most generous bonus given out amounted to an entire month's wages. The average was two weeks. There was much disappointment. I was bemused that experienced professionals who had invested so many years of their lives in the workforce, could be so naive.

The boss makes money from a sale, and you expect him to share? Really?!

As far as the boss is concerned, that's his money. He'll give you as much as it will take to keep you around a bit longer, and not a cent more. And fortunately for him, his company was full of hopelessly optimistic suckers.

If I had stayed behind and put up with another couple months' worth of his crap for a pathetic two weeks' worth of my equally pathetic salary, I would have been a damn fool. Especially when another company - with higher wages, a higher standard of work and hopefully less bullshit - was urgently looking for developers.

HAHAHAHAHA
suckers

So yes, I had the last laugh. And I laughed long and loud.

And if there was any doubt whatsoever that getting out of there was a smart move, the company in question just got fined by MOM for not paying CPF. And most of its staff have quit because they were being owed wages for months. Damn, I know I said the CEO was a cheap bastard, but this is a whole new level of douchebaggery, right there.

Why the promise of a bonus holds so much power

Some will argue that a bonus is extra money, no matter the amount. I can certainly understand why older staff hold that mentality - more money equals more security. At that age, there are fewer opportunities out there waiting. No harm in biding their time. What I don't understand is young people, in their mid-thirties or younger, many unmarried with no kids, who hesitate to leave due to the nebulous concept of an annual bonus. Especially when that annual bonus is by no means guaranteed.

Some will argue that it's your money - you worked for it, you're entitled to it. There's even this huge song and dance about how the Annual Wage Supplement is actually your money.

Nuh-uh. If you were entitled to it, it would be mandatory by law, which is obviously not the case. If you're entitled to an annual bonus, there wouldn't be the question of waiting to get your bonus before leaving, would there? The fact that you need to wait till you get your bonus for fear of it being forfeited if you should tender your resignation beforehand, is already an indication that the decision is out of your hands.

If you leave, you will still be paid your wages because you're entitled to those legally. The bonus is something else entirely. I know emotionally, it feels like your money, but this being the real world, your feelings have no bearing on the cold hard truth.

Am I belaboring the point, or has it sunk in by now? The bonus. Is. Not. Your. Fucking. Money. Deal with it!

Some companies hold employees to ransom with the threat of withholding a forthcoming bonus if these employees leave. I don't blame the companies or the bosses - any leverage is good leverage. If I had to blame anyone, it would be employees who allow themselves to be held to ransom.

Money can always be earned, but you can never get time back. Time that could have been spent furthering your career. In all fairness, I acknowledge that different people have different concerns. Some people work purely for the money, not a career. They take no pride in what they do, only in how much they earn. That is their primary and overriding concern. And if that's the case, nothing I say will ever help them understand why I don't want to wait.

To each his own, amigos.

Living without a bonus

Despite not having received a bonus in years, lack of it has not bothered me. It makes no sense to slog year after year, waiting for the one lump sum of cash that you can use to, what? Pay off outstanding bills? Go on a holiday? Buy nice things?

Here's a tip: live within your means, and don't count on your boss giving you money he isn't legally obligated to.

Live in such a way that you can afford to show the promised bonus your middle finger and ride off into the sunset. This is your life, your career; and the promise of an extra month's worth of wages should not hold you back. Promises are easy to make. Keeping them? Not so much.

I once spent six years of my youth in a job I hated, just because of the promise of annual bonuses and an unhealthy dependency on booze money. I can never get my youth back. What I can do, is to never again be this stupid.

Now that's a promise.

$ee you again soon,
T___T

Monday 19 March 2018

Web Tutorial: The Pie Chart, Safari Edition

Safari, Safari, how do I detest thee? Probably not as much as I hate Internet Explorer, but Safari just needs to keep this up and it'll be a really strong contender. That aside, today we'll be revisiting The Pie Chart we did back in January. It never ran on Safari, and we'll fix that today. Before we begin, let's see what the current code produces on Safari.

Holy cow, that won't do at all. The old rounded corner div with overflow trimmed off trick, just doesn't work here.


We're just going to have to overlay the damn thing. First, shift the graph_container div downwards a hundred pixels, like so.
            #graph_container
            {
                height: 400px;
                width: 400px;
                margin: 100px auto 0 auto;
            }


Easy does it...


Now just after the graph_container div, add a div with an id of safari_wrapper. Then put a div inside that with an id of safari_mask.
        <div id="graph_container">
            <div id="label_wrapper">
                <div id="label_quad_wrapper">

                </div>
            </div>

            <div id="pie_container">
                <div id="quad_wrapper_left" class="quad_wrapper">

                </div>

                <div id="quad_wrapper_right" class="quad_wrapper">

                </div>
            </div>
        </div>

        <div id="safari_wrapper">
            <div id="safari_mask">

            </div>
        </div>

        <div id="legend_container">

        </div>


Now we'll style safari_wrapper. It'll go right over graph_container, so it should have the exact height. But we want it to fit the full width of the screen. And since it's an overlay, the position property needs to be set to absolute. We'll generously give it a z-index of 2500 to ensure it goes right over everything. Making sure top and left properties are 0 will place the overlay in the top left corner of the screen.

And then we temporarily set the background color to a translucent orange so you can see what's going on.
            #quad_wrapper_left .pie_quad
            {
                margin-left: 100%;
            }

            #safari_wrapper
            {
                height: 400px;
                width: 100%;
                top: 0px;
                left: 0px;
                position: absolute;
                z-index: 2500;
                background-color: rgba(255,100,0,0.5);
            }

            #label_wrapper
            {
                height: 100%;
                width: 100%;
                margin-right: -100%;
                float: left;
                position: relative;
                z-index: 2000;
            }


Oh wait, it doesn't fit exactly over graph_container. That's because we shifted graph_container downwards by 100 pixels, remember? No biggie. All is going as planned.


Let's style safari_mask next. We give it a lovely cyan border for now. Width and height are the same as graph_container. The margin property has been set to align the div horizontally center of its parent, safari_wrapper. The border-radius property at 50% makes it circular.
            #safari_wrapper
            {
                height: 400px;
                width: 100%;
                top: 0px;
                left: 0px;
                position: absolute;
                z-index: 2500;
                background-color: rgba(255,100,0,0.5);
            }

            #safari_mask
            {
                height: 400px;
                width: 400px;
                margin: 0 auto 0 auto;
                position: relative;
                border-radius: 50%;
                border: 1px solid #00FFFF;
            }

            #label_wrapper
            {
                height: 100%;
                width: 100%;
                margin-right: -100%;
                float: left;
                position: relative;
                z-index: 2000;
            }


You may notice that the circle is a little thin, and it's not aligned with the chart. No problemo.


How much did we adjust graph_container's position by? 100 pixels? Let's give safari_mask a 100 pixel thick border!
            #safari_mask
            {
                height: 400px;
                width: 400px;
                margin: 0 auto 0 auto;
                position: relative;
                border-radius: 50%;
                border: 100px solid #00FFFF;
            }


Now isn't that just all sorts of nice?


Get rid of the background color.
            #safari_wrapper
            {
                height: 400px;
                width: 100%;
                top: 0px;
                left: 0px;
                position: absolute;
                z-index: 2500;
                /*background-color: rgba(255,100,0,0.5);*/
            }


Ah, we're getting there.


Make the border of safari_mask white!
            #safari_mask
            {
                height: 400px;
                width: 400px;
                margin: 0 auto 0 auto;
                position: relative;
                border-radius: 50%;
                border: 100px solid #FFFFFF;
            }


And we're golden!


Cheap tricks!

Yeah I know. This ain't the most elegant solution in the world. What can I say? Fuck Safari.

Now, wasn't that ins-pie-ring? Heh heh.
T___T

Wednesday 14 March 2018

Your AJAX Starter Kit, jQuery edition (Part 2/2)

As you may imagine, jQuery code, while technically still JavaScript, has a different syntax. We use the AJAX call like this, but fill in values for the properties. The properties listed here are:

url - the URL of the back end code. We'll be using "ajax_backend.php" for this property.
type - whether your query is GET or POST. For this, we'll use a POST.
data - a JSON object holding the data we are passing to the URL. In the example below, we'll use the key-value pair of the property user and the value StrUser.
success - a function to run when the call is successful. You no longer have to check status codes and what-have-you. How awesome is that?

There are more properties. You can look up the link provided in the first part of this post, or you could just go check out a simpler listing at this URL... (https://www.w3schools.com/jquery/ajax_ajax.asp)

<!DOCTYPE html>
<html>
    <head>
        <title>AJAX Starter Kit, jQuery Edition</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script>
            $(document).ready
            (
                function()
                {
                    ajax_frontend("Teochew Thunder");
                }
            );

            function ajax_frontend(strUser)
            {
                $.ajax
                (
                    {
                        url: "ajax_backend.php",
                        type: "post",
                        data:
                        {
                            "user": strUser
                        },
                        success: function(result)
                        {
                            $("#ajax_placeholder").html(result);
                        },
                    }
                )
            }
        </script>
    </head>

    <body>
        <div id="ajax_placeholder" style="border:1px solid #000000;width:200px;height:100px;">

        </div>
    </body>
</html>


Now you'll see stuff running as it should.


Why should we use this instead of the non-jQuery version?

Honestly, I'd say use whatever you like. Both ought to work. The days of jQuery spazzing out on you because certain browsers support different versions and all that jazz, should largely have been left behind.

jQuery AJAX is a lot less verbose and more cross-browser compliant. Being less verbose basically means there's less code to write, which in turn means there's less code to screw up. This ultimately translates to code being more maintainable.

And, this will be a valuable tool in your arsenal - nothing to sniff at.

Lastly, you get to avoid what we call "callback hell", where we try to time the results of asynchronous calls within asynchronous calls. Ever tried it? It's a nightmare. But now we get to do away with all of that. If you want to run a separate AJAX call after ajax_frontend() runs successfully, for example, just run it in the success property. No more nested callback madness!

This deserves a separate blogpost all on its own, but in the meantime, do enjoy your AJAX!

Async, therefore I am.
T___T

Monday 12 March 2018

Your AJAX Starter Kit, jQuery edition (Part 1/2)

About a couple years back, I posted a useful little AJAX Starter Kit. This is late to the party, but it's time to revisit the AJAX Starter Kit... in jQuery.

I know, I know, I've pontificated a lot in the past about not resorting to jQuery for no good reason, and my stance hasn't changed much. And I still don't think learning jQuery without first knowing a healthy amount of JavaScript, is at all a good idea. That said, jQuery isn't exactly new to the game and it's an established enough part of the web development landscape that doing a jQuery edition of the AJAX Starter Kit is a sound idea. Besides, I don't have to like jQuery in order to fairly and objectively point out its usefulness.

Really, check it out here. (http://api.jquery.com/jquery.ajax/)

Let's get cracking...

First, of course, let's list down all the components required.

- A HTML document with a reference to a jQuery source file
- A back-end script for producing said content. (Example will be in PHP)
- JavaScript to combine the HTML with the back-end script.

Note that the required components are almost identical to those in the previous edition, except that the first component has a reference to a jQuery source file.

Here's the front-end code. Note the reference to the jQuery file in Google's API repository. If you don't want to depend on a connection to Google, just download the file and reference it locally. We're doing things the jQuery way now, so instead of an onload event in the body tag, we use the ready() method in the document object.

ajax_test_jquery.html
<!DOCTYPE html>
<html>
    <head>
        <title>AJAX Starter Kit, jQuery Edition</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script>
            $(document).ready
            (
                function()
                {
                    ajax_frontend("Teochew Thunder");
                }
            );

            function ajax_frontend(strUser)
            {

            }
        </script>
    </head>

    <body>
        <div id="ajax_placeholder" style="border:1px solid #000000;width:200px;height:100px;">

        </div>
    </body>
</html>


All we'll be getting when we run the code in a browser, is this.

Now for the back-end...

This code is identical to what we used for the non-jQuery version.

ajax_backend.php
<?php
if (isset($_POST["user"]))
{
    echo  $_POST["user"] . " says ";
}
echo "Hello, world!";
?>


As with the last time, this is what we get from running the back end code in the browser. Honest, nothing different here!




Next

Some jQuery to bring these components together.

Thursday 8 March 2018

App Review: Father And Son

Time to get your arty face on!

The app I'm reviewing today is Father And Son, an interactive journey through time. That sounds awfully dramatic, but that's kind of what they attempted here. There are some games that will keep you busy for months, or at least weeks. Father And Son is not that kind of game, and it's not meant to be. It's not even a ten-minute time-waster. It's basically a short, artistically done interactive tale.

Even the font is great!

You get to be in the
museum in the game!

This game was published by Museo Archeologico Nazionale di Napoli. Assuming your Italian is as crap as mine, it roughly translates to National Archeological Museum of Naples. A museum publishing a game?! I know, right? Still, stranger things have happened.


The Premise

Your character in the game is the titular "son", whose father has just died. This game brings him to Naples, where he explores the art that was his father's life.

The Aesthetics

Aesthetics are just about everything in a game, or even in apps generally. It's one of the first things you notice. As aesthetics go, Father And Son is one of the most beautiful games ever made for mobile. For real, I think they won an award or something.

Gorgeous.

The graphics - sprites, background, the works - are digitized paintings. In fact, the whole damn game looks like a gallery! The sound effects and music are nothing to sniff at either, going from whimsical and calm to rousing at the credits. It's like they hired an entire orchestra just for this! I approve. Father And Son obviously set great store by presentation, and on this alone, it scores massive points.

The Experience

This is where things start getting a bit draggy. Other than move left and right, and look at stuff, you don't really get to do much in this game. Sure, there are groovy sequences where you can move back and forth between scenes in time. It's all very artistic, definitely... one just wishes there was more content.

Move left, move right, draw stuff...

The Interface

Father And Son manages to do even this elegantly. Action icons (hand-drawn, no less) appear when your avatar is near something he can interact with, and fade away when he moves off. Moving left and right is just a simple matter of tapping (and holding) on either side of the screen.

Nice and neat.


What I liked

Graphics and sound. I've gushed enough about it. Moving on.

Elegant interface. Seriously, many apps could stand to pick up a thing or two from Father And Son's very minimalist and uncluttered, yet intuitive user interface.

A scene back in ancient Egypt.

Another scene back in ancient Egypt.

The travelling back-and-forth in time via flashback at the user's discretion, is actually a great idea. Too bad they managed to do so little with it.

Nice Easter Eggs, in the form of unlockable content, that can be uncovered if your phone's location is anywhere near the Museo Archeologico Nazionale di Napoli. That's pretty neat!

What I didn't

This is a very short game. It'll take you a couple hours to finish, tops.

Family drama.

Subject matter is kind of mawkish. Basically, the son blames the father for neglecting his family, takes a few days to explore his father's life when the father dies, and at the end of the game, writes him a letter either sympathizing with him or condemning him.

Uninspiring dialogue.

Nothing to write home about.


Dialogue choices aren't that interesting, and don't affect the game at all. No, seriously. You can generally choose between two personalities when selecting your dialogue (polite or cynical) and at some point one tends to wonder why the game creators even bothered.

In fact, the game is very linear despite the nifty time-switch thing they implemented.

Pretty street... now try
walking along it.

There are scenes that require you to walk from one end of a very long stretch to the other. For the first one, they included a motorbike for the avatar to use, but you don't get so lucky later on. And once you get over how gorgeous the scenery is, all this virtual walking starts to grate on the nerves. It gets repetitive and tiresome.

Conclusion

This is a very beautiful game (there, I said it again) but as far as gameplay goes, it's not much of a game at all. Father And Son has some pretty good ideas; unfortunately they're let down by the discernible lack of content. That said, it's certainly short enough that no one can ever accuse it of wearing out its welcome.

My Rating

6 / 10

Son-sational effort!
T___T

Saturday 3 March 2018

Good Days, Bad Days

In web development, you have good days, and you have bad days.

You know the good days - everything seems to fall into place beautifully. Your code works, your solutions run like a dream, everything happens exactly as you planned. Sometimes better.  Even the bugs that come up are easy to solve. You achieve a lot in just a few short hours.

And the bad days? The opposite happens. Nothing you try seems to gain any ground. You make elementary mistakes, some of which keep you tearing your hair out for the better part of the day. Very little gets done, and whatever you do manage to get done, you eventually have to undo.

What I'm about to say may seem controversial, but here it is: the bad days are just as important as the good days. In fact, I'm going to go even further: without bad days, there are no good days. In fact, sometimes the bad days are more important than the good days.

Why do I say that? Well, it certainly isn't just due to comparison. Obviously, if every day was "good", it would seem less good if there were no bad days to contrast them with.


Web dev is like a maze.

You see, during those days when nothing seems to work, you're actually achieving something really important. You are slowly but surely eliminating all the ways that don't work, through painstaking experience. Think of development as a maze. There are tons of possible pathways to your final goal, but along the way, there are also many, many dead ends. By sussing out all those dead ends via process of elimination, you ensure that the next time you come across a similar situation, you remember not to try that again. By making mistakes and learning from them, you ensure that you don't make those mistakes again, ever.

Therefore, when a "good" day arrives, it is actually a culmination of all your bad days. It is the natural consequence of you having already determined that there are a thousand ways that don't work, and finally hitting on one way that does work.

The thing about mistakes...

Making mistakes is valuable. It gives you experience.

System work funny because you forgot to add break statements to your switch cases? No problem, don't do it again.

Get stuck in an infinite While loops because you forgot to include an exit clause? Been there, done that.

Layout go haywire because you didn't include that doctype declaration? Live and learn, pal.

That, of course, assumes that you learn from mistakes. I know people who need to learn the same lesson multiple times before it sticks. This is why I wrote the Spot The Bug series. I find that documenting these things down not only cements the experience, it helps me to avoid repeating them.

My bad week

Recently, I had a really bad week. As weeks went, it was terrible.  At school, I did badly at my live presentation. At work, I was tearing my hair out over a bug I couldn't reproduce accurately. Things were breaking all over the place. The Manager was choosing this moment to talk to us like we were children. My confidence was at an all-time low.

Know what I did when the weekend arrived? No, I didn't put in extra hours in the office. I didn't even sit around feeling miserable. Instead, I swam laps. Over and over. Got as much sleep as I could. Did things I enjoyed.

On Monday, when I got back to work, it was like a miracle happened. Suddenly, all the cryptic error messages were making sense. When bugs surfaced, I knew where they came from and how to squash them. I closed ticket after ticket. Damn, I was on a roll.

What happened? Nothing. The code was exactly at the state in which I'd left it. The break merely forced me to take my mind off how much I sucked, and the next time I needed to code, it was with fresh eyes.

All in all

All I'm saying is, when you have a bad day, don't get discouraged. It is one of the many building blocks to having a truly awesome coding day.

Have a good (or bad) day!
T___T