Seems like I keep getting more inquiries on picking programming as a career choice from the young'uns as I get older.

The most common question I have heard is “Are the prospects good for IT right now?”. Now I would like to cringe and show the other person my middle finger but being well versed in the arts of social jiu jitsu I hold my firm as I tell them(usually) why would they even ask me that if its their passion.

But I digress. Lets move on to the mudda.

Pros of being a programmer

  • Pretty sweet salary. Can live off comfortably even while working part time.
  • You can ideally find work anywhere in the world if you’re good enough.
  • The world is your digital oyster! Hack around IOT stuff, make a webapp to plan your schedule. Having an in-depth technical knowledge about IT stuff helps a lot nowadays.
  • Much more easier to become a programmer. Tons of (free)resources are available online.

Cons of being a programmer

  • Its unhealthy. Sitting in front of a computer every day for the rest of your life will eventually fuck up your back/arms/eyes etc.
  • The community which is friendly, is too PC. Make of that what you will.
  • Not a lot of good rolemodels in the industry.
  • You will need to invest a lot of time on a semi-regular basis just to catch up with the new stuff being created by the community.

Note: All this won’t apply if you don’t like programming.

function(comments) { {

If the code above is enough to send you running for the hills, programming is a bad career choice.

I am no expert on this topic. I am giving my wisdom on whatever experience I have gathered in the last five years. It will be interesting to see my thoughts on this topic about 2-4 years from now.

Lets talk about wordpress

Wordpress is a pain to develop for. The looping mechanism sucks, most template functions output html and there seems to be no consistency in naming functions.

This is where the broken glass theory shines. A lot of design decisions taken in developing PHP early on were complete crap not to mention the inconsisties in naming conventions. This design philosophy somewhat carried over onto wordpress.

Wordpress sucks, PHP sucks.

Now that we have got that out of our way, lets talk about making websites in wordpress.

After working for over six months at True, I have come up with a plan on making better websites with wordpress

  • Don’t use the default archive pages. Use a custom wp_query()
  • Use ACF. Worth every cent.
  • Use BackupBuddy for deployments
  • Make a new html template for every page. Namespace your page specific css with the classname generated by wordpress inside the body tage.
  • For advanced functionalities, use a custom post type. If you want a archive page, just make a new template and run a custom loop instead of relying on the default loop.

Based on these guidelines, I created a custom starter theme based on the _s theme.

If you haven’t tried out browserstack for browser testing, you’re missing out! They have improved by leaps and bounds since I first started using them. The interface is extremely smooth and the emulation devices are pretty snappy too.

Its been a long time since I’ve blogged. I went to New Zealand during New Year’s, visited Wilson’s Prom afterwards and overall had a blast during the summer. I actually feel sad that this will probably be the last heat spell of the summer.

I am not a big fan of cold weather. This could be because I come from a place where the average daytime temperature is 35+

Which is a shame because nine out of twelve months, Melbourne is pretty friggin cold.

Floating at the Mordialloc beach I calculated how many days could I enjoy like this. Two more weekends this summer plus around six on an average every summer. I reckon I’ll live to at least 50 and total comes out to 180.

Fuck, I already miss the summer.

I’ve made some major changes to this blog

  • Changed fonts to Karla.
  • Added photoset support via
  • Modified the particle effect and added a light blue overlay on top of the blog.
  • Made photoset posts extra wide on mobile and made the overall width of the blog to 82% for mobile devices.
  • Other minor changes.

Photoset is a great way to set images in tumblr. Just drag the images and they will adjust in a grid layout. Right now, I am posting old photos from my previous trips just because they look so fantastic on my blog.

MYOB sucks. Their database design is the worst, using Y and N in some places to denote boolean values. They also don’t have a sql database. It looks like some sort of a no-sql database cobbered together under 12 hours.

Also, they don’t support joins. Understandable as they don’t implement an sql database BUT the api they expose mimics an sql database. This leads to all sorts of inconsistencies and fuckups.

In the next couple of weeks lightgrid will go through a massive overhaul. There are some basic things lightgrid is missing which are present in other frameworks. Right now it seems like all frontend frameworks are comparing themselves against bootstrap.

Now I’ve never been a fan of bootstrap. It is clunky, bloated and packed with unnecessary styles. That being said, we made a decision at the agency I work at to remove all the unecessary includes from bootstrap. This is actually a good solution as the grid system bundled along with it is one of the best but the extra styles are unnecessary and add a lot of bloat.

Back to lightgrid, these are the things to implement now:

  • Make the grid system like bootstrap’s but remove the container requirement and use calc() for the gutter instead of padding
  • Use the newer normalize.css and hook up more configurable variables to it.
  • Research into a flexbox based grid system(won’t be released in the earliest 3.x.x release though)
  • Add better media queries(again, based on bootstrap’s breakpoints)

Almost forgot I joined True Agency in late august.

Its been fantastic working for them. Probably the biggest change is that I am working on wordpress and php after a long time and it doesn’t feel so bad using it.

Have you tried IFTTT?

Did you know they have a pretty kickass API called the maker channel?

For monashjobs, we wired up the API with facebook and twitter so whenever someone posts a job listing, it automatically created a new facebook post and tweet based on the job posting.

Now how awesome is that!

I participated in Unihack 2015 and made this.

We are still expanding upon it but the basic idea is to make every image on the internet taggable, a bit like how facebook does it

Currently it only supports images hosted on imgur but we are going to make changes to it(once I get some time heh)

Just looking back on how much PHP sucks and how badly designed cakephp is(the whole damn project, really)

At my university campus there are loads of free food events happening around. Unfortunately, I tend to miss most of them because of my lecture’s timings.

I always wondered how many are happening in a particular day because there are so many groups and societies who organize them. Unfortunately there is no central location where these events are posted.

So over the last week I created a nodejs app which collects the last 20 posts of these groups and pages using the facebook api and searches for keywords like ‘free’, ‘bbq’, ‘pizza’, ‘beer’, etc.

Here’s the tech behind it.

The architecture is a bit different behind this compared to my other side projects. The frontend is a pure html page on bitballoon and it gets the data via a rest api exposed by my nodejs server hosted on openshift.

First, it gets the posts and scans them for relevant keywords. Then it assigns a score of 0.5 to every keyword. Keywords like ‘free’ get a score of 1.

Then all the scores are added up and a a decreasing function is used. So 0.5 + 0.5 + 0.5 is not 1.5 but rather 1.0022

This is to combat keyword stuffing. It works surprisingly well too. The average score almost flatlines at about 1.6

Then I filter out posts who’s score is below 1. Then finally, I run another function to extract the time and location from the text and then all that data is saved in the mongodb database.

Turns out, there is a lot of room for improvement.

Strike 1

The first implementation was not bad. It did work but in the process, it caught a lot of unwanted junk.

The best analogy I can give is that of a fishing ship which catches sardines but also catches a lot of other non-edible fishes. Only problem being that sardines constitute less than 50% of the catch.

Take an example of this sample post:

There is FREE ENTRY for any University student to the Blue Diamond Stakes today.
Pre-drinks start at the Racecourse Hotel at 11:30 where you can drown all of your post-Beach Day blues..

It matched ‘free’ and ‘drinks’. Bam, strike #1

Strike 2

There was clearly a need to refine the algorithm. The scoring system needed a revamp.

So we have two scores. One is the score we get from the parser and the other one is the compare score which is a constant(1)

So : score > compare score (Which means the post is about free food)

I realized the compare score needs to be refined. Having a static value of 1 or even 1.5 doesn’t change anything. Using our previous analogy, it just makes our net smaller or larger. We need to refine our net.

This time I observed there is correlation between the length of post and the its actual score. So I made the compare score a dynamic value.

Now the formula to compute the compare score is like this:

var quantifier = 1;

quantifier + ((quantifier / 16) * postLength / 64);

This bring a value of slightly greater than 1 if the length of the post is short but brings up a bigger value(slightly exponential) if the post length is larger.

After putting this in production, it works like a charm. Now it filters out most of the useless posts.

Take a look at the app in production. I may have to pull it in the future.

An interesting UX problem I came across today. Wondering why I never recognized it.