Friday, December 27, 2013

The Year 2K13 Was....

As we are at the verge of year 2K13, I asked a question to my inner self
How did it go?
From there on my mind started recalling events, that went past me in the journey.
The journey that made me an year older with handful of new experiences.
2K13 in my calendar is going to be one of the most unfogettable year in both the ways [Happiness & its counterpart].
All the waves into both work and life because of relocation from mumbai to bangalore [Oct 2012] were slowly settling down.
Had Durga to fill the void left in my work as a companion. Someone to discuss and share. And forgot to say, now we are a team ;)
Realized that I got promoted from Web Dev to R&D Engg.
Gave good support to my Super DAD who was taking care of our dream home which was under construction.
Bottom Line: Realized that there is a lot more to do than work in life and Patience rewards

Feb 22 - One of the important events in our family till then, was planned. Our House warming ceremony. My Dad's moment of pride.
Over all the odds, function ended with a note of happiness and pride. Had all my teachers who are the reason for who am now, friends and lots of relatives come home.
Gifted my father for the first time on his birthday after I started my earning. A nice TITAN wrist watch [Getting Goose Bumps even now].
First birthday of two of my nephews in the same month.
Hemanth Sagar Shifted to Bangalore from Mumbai. And now we are 3 heads up.
Bottom Line: Remembering people who had an impact in your growth in life is a respect you give back to them.

Housewarming Invite

Joined Music and Metals [Body Fitness Center] on March 12th.
Can't even say how much value it does add to me now. Never ever thought this could be such a good thing happening to me back then.
Although I Initially joined to reimburse Health and Fitness component at office, Now I swear I stopped reimbursing them.
All credits to Jibin [Trainer & Best Pal] who changed the meaning of workouts to fun and brought people together as a family.
Bottom Line: Passion drives people [Dedicated to Jibin]

April 26th - Marked 3rd anniversary and another year awaiting.
Home Construction was well in progress and heated up to reach the end.
And one of my roommates Deepan Chakravarthy got engaged. Best Surprising moment of the year ;)
Bottom Line: There is always a hidden random surprise awaits us [Dedicated to Deepan :D]

Practised for my first 10K marathon with my companion Durga. Would wish to revisit this post.
Thanks to Dr. Manimozhi & AIFO for giving us such an awesome opportunity.
May 19th - Finished the marathon in 1 Hr and 2 min.
May 20th - My first intern Apurv joined the team.
May 22nd - My sister, classmate and bestest friend Yogi's engagement.
May 22nd - Deepan's marriage.
May 25th - Completed Year 2
Visited Chennai to attend the marriage. Met my partner [Chandru] after almost 3 months.
It was a really nice re-union with Nizha, Kanmani [My Sister] and Chandru at Buhari.
Kushagra Shifted to Bangalore from Mumbai. And we are 4 heads up.
Volunteered LokSatta Party on the election day in Bangalore with Vignesh.
Bottom Line: Determination defines you and what you can.

Team AIFO and M&M after marathon

June 9th - Participated in Corporate relay 5K * 4 with Kushagra, Hemanth, Durga and our manager cum partner Chandru
It was good going with Apurv on his internship and as well at my work.
June 12-13 - Yogi's Marriage at Coimbatore. Couldn't even believe that a kutti friend [small] of mine was getting married. Ufffff.. 23 Yrs Gone..
Had a really nice long chat with Elempirai [Another School Friend of mine] on our way back to home. Almost we shared everything.
Bottom Line: Learning never stops

After Corporate Relay

Visited my beloved partner's home town for the first time in 5 yrs [Sankaran Kovil]. One very memorable trip.
Bike ride to coutrallam in continuously drizzling weather and Fun in the falls was the best out of all.
More than everything else, we celebrated my partner's birthday at his hometown [Fullfilled his childhood dream of cutting cake at his home :P]
Helped my partner to meet his fiancee for the first time [with Venky and Ramesh].
2 days of complete enjoyment made it for the whole month.
Bottom Line: Making your close ones happy is one of the richest feeling :)


August 10th - First away trip at Music and Metals team to Chunchi Falls & Mekadatu. So, much fun it was. Took my partner with me. Made him visit Bangalore from Chennai.
Visited home town for a 4 days long weekend. Spent some good time off from home with my family.
Falls in the back drop

September 9th - We entered our dream home. It was complete by then. All credits to my Dad. Almost 2yrs of his life was spent on it.
September 17th - Completed one year in bangalore :)
September 29th - After a complete year being in bangalore finally I met my closest buddy Selva only for the Second time :o
We watched a movie [Onaiyum Aatukutiyum] and did swimming at BAC
Bottom Line: True friends don't complaint. Coz they know you :D [Dedicated to Selva]

Two mentees Vedant and Vivek joined hands with us in Bangalore for
We rocked the Directi Annual Bash :)
Got Promoted as Senior R&D Engg. Promotion Number 2 in 2 yrs :) Awesome place to work with. Recognition of good work at its best.
Bottom Line: Keep focused and Keep moving. There is lot more heights to reach :)

Directi Annual Party

Nov 2nd - Diwali Diwali Diwali... First Diwali at our new home :)
Yogi visited our home with her hubby for the first time after marriage.
Nov 15th - My Cousin Sister gave birth to Shruthika :) Happy Moment.
My first dream come true. My Bike. I said MY BIKE. Got my Yamaha FZS delivered just a day before my birthday :)
Nov 17th - One of the best birthday celebration till date. 12 o'clock cake cut on road with Jibin Akash and Balaji. Long drive. And meeting with special friends ;)
Bottom Line: Full filling your own dreams adds more meaning to your life :)

My B'day Celeb at M&M

The month which will stay in my heart forever for two extremely opposite feelings.
Dec 5th - Left bangalore to Sankaran Kovil to attend my partner, friend, brother and gem of a person in my life's wedding.
Dec 6th - First ritual [Panthakaal Naduvathu] & Dress Purchase [Usshhhsabba]
Dec 11th - Engagement
Dec 12th - Marriage
Spent one full week with my beloved partner and witnessed one new relation joining hands with him in his life thereafter :)
Went back home. Spent sometime with my family. My Sister scored 8.8 in her 7th Semester [Way higher than me] and made me happier than ever.
The much need break of the year came to an end. Packed and back to bangalore.
Dec 18th - Flew to mumbai for two weeks trip in Mumbai DevCenter
Dec 19th - One of My uncles [He was almost my dad] passed away in an accident. So, flew back to bangalore on an emergency
Dec 20th - The uncle's aunt [She was almost my mother] decided to joins hands with uncle in heaven. Worst way to end an year.
Witnessed an awesome relation that existed in real continued to be so in heaven in just two days.
The best love story I had ever seen in real. Some claimed that it was a foolish act but it was truely an act of proving togetheredness.
They were so close to each other that one can't exist without the other. Hope their wishes will always be with me from heaven.
Only Two people in my life who never knew what selfishness and jealousy was. We lost them.
Two different events in subsequent weeks. Nothing to say but there's a lot to realize.
Bottom Line: This moment is not permanent. Loss is a part of life. Accept and go on.
Everybody needs some spl care at some point in life, just spot it and help them to come out with glory [Dedicated to my sister :)].

Partner's Marriage

Although the year 2013 went ahead in a very much positive note from the beginning with small small obstacles financially and relation wise.
In the end it left me with terrible and unmatchable loss of my second parents.
More & More responsibilities over me. Time to become a man :)
With their wishes let the forthcoming year be another milestone in my career and rejuvenate my family members from the loss.
The year 2K13 was not all about work or the other way round even. There was a perfect balance in everything. Should thank my team at work and my family who helped me make this happen. Special thanks to My Dad, Roomies, Chandru, Durga and Jibin.

Friday, June 28, 2013

GRUNT- The JavaScript Task Runner

Grunt helps developers automate the task of javascript deployment.
In our development cycle, every javascript deployment used to be
1. Code
2. Minify
3. Upload
We were missing out two important phases which ensures code quality and reliability
1. Lint
2. Testing
As our code became larger and larger, as anyother dev we also considered a refactor.
The refactor resulted in splitting our large code base to manageable modules.
Now, Deployment has to go through
1. Unit test independent modules
2. Merge Modules to a shippable target
3. Lint
4. Minify
5. Deploy
Ooops... Nice but how?
It's true that developers love things automated, and so we were. We arrived at a one stop solution GRUNT.

This blog post is a Let Them Know Types. As, I felt that the instructions on grunt setup is kind of scattered :)
To hav a better introduction with the hero, you should meet him at his place
Grunt has two parts:
1. Using it
2. Customizing it

How to start using it?
Grunt 0.4.x requires Node.js version >= 0.8.0. Install it from here
Read a bit on npm [Node Pacakge Manager] in case you are not aware of here
$ npm install -g grunt-cli
What is grunt-cli?
grunt-cli is a utility, that makes sure that it runs the grunt version installed locally to the project.
This helps developers having different versions of grunt across projects.
Installing grunt-cli adds "grunt" command to your system path

$ mkdir firstGruntProject
$ cd !$
$ grunt
grunt-cli: The grunt command line interface. (v0.1.9)

Fatal error: Unable to find local grunt.

If you're seeing this message, either a Gruntfile wasn't found or grunt
hasn't been installed locally to your project.

What does this mean?
Basically to begin with a grunt task runner project, there are 3 important requirments.
1. Local grunt module
2. GruntConfig.js //Task runner's configuration
3. package.json

The above error states that we haven't got the local grunt module setup in our project home.
Before doing that, lets set up a very basic grunt project.

Is there any easy way to generate basic grunt config file?
Yes, check out Project Scaffolding
There is a very handy utility "grunt-init", which accepts a TEMPLATE to create a sample GruntConfig file or Grunt Plugin.
A Template is kind of config file for automation of config or plugin creation.

Sample Template for simple grunt project can be downloaded Grunt Git repo
Once setup of template is done, install grunt-init globally
$ git clone ~/.grunt-init/gruntfile
$ npm install -g grunt-init
$ cd firstGruntProject
$ grunt-init ~/.grunt-init/gruntfile
You will get a list of Yes or No's. Answer them and you are almost done to set up a grunt project

We need a local grunt installation. It is as simple as that [npm install grunt@version]
$ npm install grunt
You can notice the absence of "-g" param for grunt install.
This gives you an option of having multiple grunt versions across your projects. grunt-cli is the util which makes this possible.

Lets try grunt now..
$ grunt
Loading "Gruntfile.js" tasks...ERROR
>> Error: Unable to read "package.json" file (Error code: ENOENT).
Ooops, Most of the gruntfile templates create a project specific package.json. But not in this sample template.
So, Lets create our own using npm init command
$ npm init

Ok, Is there a limitation on where the command should be run from?
You can run "grunt" command from anywhere inside your project.
"grunt" command is kind of nodejs require().
"grunt-cli" util takes care of locating the locally installed grunt module and load it with Gruntfile.js

Once all this is done. Executing grunt should be as smooth as a cake provided there are no errors in the tasks and their internal confs.

Now how to install some packages I need?
It is as simple as installing node packages
$npm install package@version --save-dev
**save-dev option rewrites package.json automagically.

How do I specify package specific configs?
Mostly all modules have their wiki on how should you pass configs.
Check this to get some more idea.

Grunt provides lots and lots of apis. Check them out here
I love grunt.option and grunt.file the most :)

This is one part of the best parts. Grunt makes it possible for people to write their own tasks or plugins. We'll handle that in a separate blog post :)

Monday, May 20, 2013

A Run for World without Leprosy - Run to remember

And My First 10K Marathon [TCS World 10K] - A run for world without leprosy

Was yet another usual day to work post my work out session @Music&Metals. Reached my workstation and booted my ubuntu to start with the proceedings of the day. The moment I logged in to my user, my mouse pointer rushed towards the Chrome Icon in unity launcher. Guess what? It's just to see if there are any updates in my FB home. And there it was, nice red color icon over the world of FB. It was a post from Dr. Manimozhi Natarajan, in our Gym's [Music & Metals] closed group. Urged to read what it is about, and it was an invite to all fiddles in M&M to participate in a 10K Marathon for a cause which was about to happen two week from then. And there you go.. I was realizing my wish to go for a long distance run coming true. And a pause [Ooops].

In my previous trip to our Mumbai Dev Center, I got to know that 4 of our team mates are participating in a 4*5Km relay and they are practicing for weeks to do well on the race day. I being with no practice in running and willing to complete 10K with ease?? Got to be kidding!! What next? I need practice!!, that too without a break [13 more days and you are at the start line]. I know me well, I'll give up very soon on things like these [after all I'm a human with laziness]. So, I badly wanted a partner who can give me a push whenever I get that feeling to stop.

And there he is!! here comes my savior - Durga Prasad. My one and only companion in Bangalore team who also is interested in stuffs like this. I didn't resist to ask him for his wish. And he accepted without taking a moment to think. Just in 10 min after entering the office we got to leave to submit our application to AMICI [AIFO India's Center] and confirm our participation to Dr. Manimozhi. Dr. was so excited that he got such a quick response from his gym pals and it was like attending Kaun Banega Crorepati while filling down our application form.

Dr. : Are you sure you wanna run 10K
We : Yes
Dr. : Odiduveengla pa? [Will you be able to finish?]
We : Yes
Dr. : Kashtamachae.. Idhukku munnadi odirukeengla? [Difficult it is. Have you got some experience?]
We : No, but we'll practice
Dr. : So, I'm locking yes.
We : Yes
Dr. : Computer Ji Lock Yes :P

The next tough moment was, when they didn't accept the registration fee from us. They said that the organization will sponsor us. Oops now we have no other go. We didn't want to feel guilty for making someone pay our fee and in response we fail to make the finish line. So, the responsibility had been kept heavy on our shoulders.

The next morning @5:30 my wake up alarm rang. I didn't wait for that 5 more min after an alarm, which gives you the best sleep in your life. Woke up immediately, prepared myself for the first day run. Meeting at Durga's place [near Leela palace] and completing the onward journey to inner ring road [3.76 Km] was the plan for day 1. Everything went fine till we realized that its time to start. We started our longest run till then [3.76Km, at least in my life]. We had to stop at 2 places just because we couldn't continue running. Terrified now. 12 more days, 7 more Kms without stop [Oops !!!]. We started preparing our mind now that we could make it. We just took the positives that happened on that day to get over the fear of failure :)
Day 2: Same plan. 3.76 Km. Very glad news. We didn't stop :) Was so happy on that day. Our mind accepted the challenge and it was ready.
Day 3: 4Km. Successful, No stop.
Day 4: 6 Km with no stops but walking on every uphill [Good enough in first try] and we made it.
Day 5 to 8: Thanks to CSK Match & weekends :P Both of us had plan to visit our home town and we had no other go, but to discontinue our practice [I continued my workouts, on Day 5 & 6]. Anyways Durga managed to continue it at his home town [Good job].
Day 9: 7.8 Km no stop [300m of walking alone]. I was not in this world when we reached that Domlur Flyover without a stop on our run towards home. We never believed that we would be able to make it.
Day 10: Once again 7.8Km with no stop. Target achieved.
Day 11: Drop in plan as we were very tired of 2 days of long distance running.
Day 12: Just 4Km but fast running. Did at a better pace. But learnt what not to do on the race day [Don't start fast, if so you'll want to stop fast].
Day 13: Rest for the race day.
Day 14: I reached the finish line in 1hr 2Min and my partner finished in 1hr 4min. Oh my goodness!!! We got medals :) Felt so happy that we made it and our practice made our lives easier.

Vote of Thanks:
1. AIFO India [AMICI]: For giving me an opportunity to make our run meaningful and trusting us on our words :) Have decided to represent them in further marathons I might run in my life :) [Too Sentimental huh? :P] Also for the Reebok Tee I got on our pre-event gathering :P [Mr. Jose, Mr. Patrick, Dr. Mani, Mr. Jayanth, Dr. Prasad, Mr. Nyjil and other members of AIFO India]
2. Dr. Manimozhi: Everything just happened was just because of him :) Will accompany you in your dream 10K run :P
3. Jibin Kumar: For Music Metals and making the event memorable with a good bunch [10 - 5.7K runners] of participants. Anddd for the Briyani treat [with Supra] to celebrate the success @nandhini ;) :)

And Some Happy Moments:

This post might be tooooo much for just a marathon finish.. But First - always is special and it is good to register the moment :)
If your mind believes, your body assists with an ease :) Push.. Push.. Push..
Our Next Target: On June 9th..

Wednesday, February 6, 2013

Headless Chrome/Firefox Selenium Java in Amazon EC2

Setting up chrome/firefox in linux based x86_64 EC2 instance
In this post we'll see how to setup chrome/firefox in EC2 instance.
Further we'll discuss the way to setup chromedriver with selenium [java] in EC2 instance aswell.
Why is that difficult?
Linux based EC2 instances lack gtk+, which is a must to launch any GUI enabled applications.

How to solve?
Compile gtk+ from source.
This gist by joekiller has the complete dependency tree resolved for installing gtk+ for x86_64 machines.
Line 77 Basically installs firefox from its tarball. You can comment it out incase if you don't wish to.
Incase Line 42 fails. Do a wget for direct tarball from here, instead the complex recursive wget.
For Ex:
So, All done?
Nopes, Now we can't run either of the browsers as we lack X11 server which does graphics operations & screen outputing.
As our environment is headless we can't go for real X11 server as well [lack of hardware units to do screen outputing].

How do we solve this?
We need Xvfb setup in our instance.
$ yum install Xvfb
$ Xvfb :1 -screen 0 1280x768x24 & 
#starts Xvfb in display ":1"
Should start a X virtual frame buffer (Xvfb) which performs all graphics operation in memory.

All set?
Not really :P Still we haven't configured the instance to use display ":1" for graphics operations.
We can do it by
$ export DISPLAY=:1
Executing the above will remain for the session that user has logged in [similar to standard linux terminal session].
You can even edit the bashrc profile. But it might need a instance restart to take effect [Not very sure].

Problem 2:
Setting up chromedriver[java] isn't a tough task incase you landed in here first :D

Install chrome binary from the source or add the source urls of centos to amzn repo and do a yum install
Note: Chrome will refuse to start as root. So make sure your java process will be running as non root profile.
[root@xyz chrome]$ google-chrome 
Xlib:  extension "RANDR" missing on display ":1.0".
[9706:9706:0206/] Startup refusing to run as root.
Setting up the display is necessary to make chrome to use Xvfb for graphics operations
$ vim /usr/bin/google-chrome
#add export DISPLAY=:1 to the beginning of the script
Download the appropriate driver from
Locate it in a directory which can be accessed without root permissions

See the sample tutorial @Chrome Selenium Binding
Below I'm highlighting the important config code from the same link.
service = new ChromeDriverService.Builder()
        .usingChromeDriverExecutable(new File("path/to/my/chromedriver")) //location of the driver you downloaded
Start the java process [non-root] you might see some c errors. Ignore them unless your process contiues to run.
Monitor the status of chromedriver.log [In our system it is located in /opt directory].
Make sure there are no "Connection Refused" or "ShutDown" messages.
These errors will eventually throw an exception at java main thread as TimedOutException.
Then main thread will exit.

As a whole
$ wget ""
#remember to comment line 77 incase u don't need firefox
$ chmod 777
$ sh
#above command will take atleast 30 min
$ yum install Xvfb
$ Xvfb :1 -screen 0 1280x768x24 &
#install google-chrome via yum [add source urls to repo] or from source
$ google-chrome
#make sure the command doesn't exit till you force it to [no gtk fatal errors or permission issues]
$ which google-chrome
$ /usr/bin/google-chrome
$ vim /usr/bin/google-chrome
# add export DISPLAY=:1
# run the java code it should work
If you face any issues leave a comment will see if I could help.
Hope this helps :)