I’ve made some major changes to this blog

  • Changed fonts to Karla.
  • Added photoset support via https://github.com/stylehatch/photoset-grid
  • 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.

Alright so today’s post starts with an introduction to getting started with openshift, so that I won’t forget how to set it up in the future.

Install ruby > install rhc > set git > create a new app via rhc or the openshift online console > If you haven’t already - setup rhc > Try git clone > if it doesn’t work - rhc sshkey (to generate new keys and upload them automatically) | Or - re-install git and do everything again.

Depending on your current setup, it should take from 10 minutes to 2 days of brain numbing madness.


There was a guy in the beginning. Let’s call him Herb.

Herb is your typical introverted geek who loves to code. He becomes shy in front of strangers and especially girls.

So place this guy in a testosterone filled environment and he goes back in his shell. And that is what exactly happened with him when he found himself in a nightclub on Friday night.

Enter Mark. This guy was a bit short and quite honestly, had nothing special about him. But oh boy was this guy loaded with pizzazz. This guy comes in an hour late but when he comes, holy shit do you see the ladies swooning on him.

And so Mark and Herb were talking in a quiet corner of the club when a sexy Russian walks past by. Mark apparently knows her and he introduces her to Herb. After she walks by, he asks Mark how did he know her to which he replies he doesn’t know her.

“Are you serious”

“Yeah man I have never seen her in my life”

“So why did she talk to you like you know her”

“Because I whispered to her ‘You look really sexy, have you ever been in an orgy?”

At this point, Herb had a wild crazy expression of a person who had just discovered water.

Mark was just grinning, looking at his newest disciple and promptly took him under his wing for the night.

Sometimes when designing new things, I need to go back and retrospect my past work.

That is when I came across this


And that is when I remembered I stopped blogging.

This calls for a new design. But this is more of a revitalization of the old blog theme.

The new redesign takes elements from the old theme and removes unnecessary clutter. The header font is still montserrat mainly because it complements georgia Merriweather so beautifully.

The most drastic yet minimal change would be the color scheme. In the past, I used to write down hex codes on a pad. Now after making colorbook, it has become an indispensable tool for designing color schemes. Also, since I started using LESS, managing different color codes and other random variables has become much easier.

Another tool I used is gulpjs. My whole workflow is automated to minify and automatically inline css inside html. 

The result : It is better than the old one while still retaining its style and simplicity.


Last night, I was at a pub with a good friend of mine. We were discussing what is the next best thing in tech. In a semi-drunken stupor, I replied that we are not going through a revolution with tech, only evolution.

Sounds really cheesy but here is what I have observed.

Mobile phones have been around since the 1980s. They aren’t going to go away anytime soon. But the way we interact with the device has changed. Earlier, we had hard physical buttons which has been replaced by touchscreens.

Maybe in the future we will have holograms and voice only interaction for some devices. But the medium will stay.

Just like this blog.