Sunday, December 19, 2010

Improved IRCTC Ticket Booking - Google Chrome Extension

*Note: This extension does not work anymore and I have stopped updating it. Please do not contact regards to this*

AutoIRCTC! - A Google Chrome extension that helps in speeding up the IRCTC ticket booking process.

Scripting has always interested me and being a reasonably active member of the internet community, i always tried to customize the road of web i travel to my likes and needs. This is one such script that i thought will be helpful if shared. So i have added minimal features to the script i have been using personally for quite a while now. It has really helped me speed up the ticket booking process.

Features include:
  • Automatic Login
  • Swap from and to stations in a single click
  • See all the trains availability in a single screen
  • Pre-fill the passenger details

Download: You can download the extension from here!

Instructions and Screenshots
  • Accept the warning and click on continue

  • Click on Install

  • After the installation is complete, You will see a confirmation like this:

  • Also, you can view AutoIRCTC in the list of extensions in chrome://extensions
  • Now, when you visit, you will see a small icon next to the bookmark star. Clicking on that icon will give you a pop up where you can configure your settings. If you leave the login credentials empty, then auto login will be disabled. Click on "Save Settings" after you have entered your details.
  • Now, when you reload your page, you will be automatically logged into IRCTC. And instantly, you will be able to notice the "Swap from and to" option under "Plan my travel". This button helps you to swap the from and to cities without making an unnecessary server request.
  • Enter your travel city and date. Now you will be able to see the availability of all trains matching your criteria in a single screen. Also, the page has been cleaned up to now show First class AC and First class (if you are making a first class booking, then disable the extension and go ahead as usual). The default class to check availability for can be changed by clicking the page icon near the bookmark star.
  • Now, in the passenger details form, you can see that it has been pre-filled with your data thereby avoiding your need to type your details every time (Note that pre-filling senior citizen is not supported in this version).
  • The quick book form too will be pre-filled with your data.
  • After these steps, proceed as usual for payment options and complete your ticket booking.

The purpose of this extension is to increase the ticket booking experience of a common man and it no way intended to be commercial. Using this extension does not guarantee your ticket booking. Its just a minor enhancement to the ugly IRCTC user-interface.

I am still a beginner to the world of Google Chrome extensions. So you are sure to find a lot of bugs. In case of any feedbacks/issues, please write to me at (please click to view the full address).


Tuesday, December 14, 2010

Why Computer Science should not be taught with Python!

Every Computer Science student begins his academic travel with the first stop being C. It is really a good language to begin with and it helps the student to grasp the fundamentals of how a computer program works. And (atleast in India) most of the Computer Science courses just revolve around C/C++ almost the entire of the curriculum. All the laboratory classes usually mandates the student to develop programs in C/C++ or Java in some cases.

Any student who has worked for a reasonable amount of time with a language like Python or Ruby will be against this system. He will be frustrated in writing tens of lines of C code when the same can be accomplished in very few lines in Python. I have a strong opinion that this should not be the case and undergraduate courses should insist on students using C/C++ as their primary language on the academic curriculum side.

C is a programming language that requires very verbose form of writing programs which will be highly helpful in learning and understanding the underlying concept thoroughly. Consider an example of quick sort. It is a single line of code in Python. But what does the student really understand out of that single line? Whereas when you write the same thing in C, it really forces you to understand the algorithm line-by-line, thereby making the student more knowledgeable about the actual working of the algorithm rather than just getting the thing done. Getting things done is top priority in an industry. But when it comes to academia, learning the underlying working is more important than getting things done.

Another good example would be writing a simple socket program. In python its a maximum of ten lines. Whereas in C you work very closely (almost with actual system calls) and hence you thoroughly understand the whole process of how a socket connection works.

More the abstraction, better the survival. This definitely holds good, but not when you are undertaking a course to become a computer engineer. Abstraction is good once you have completed the learning process. But when you are in the learning process, less abstraction is more helpful in making a student better.


Thursday, December 2, 2010

A flaw/feature in Google Chrome Extension design!

I am recently into customizing my road in the web with simple google chrome extensions to get and share content in the web the way i want. After having spent a good amount of time with the Google Chrome Extension Framework and their javascript API, i feel there is a flaw in the design of it. I still am not sure if this is a flaw or an intended feature.

Before describing the exact flaw, let me give a brief overview of things whose understanding is required to understand the flaw.

Browser Actions
Browser Actions are those using which your extension can do things along with the browser. Every browser can include a pop up page (yes the one which pops up when you click on the extension's icon on the top right corner). As of now, the only way to open up the pop up page is by clicking the icon. This point is important. Let me come back to it in a while.

Context Menus
Extensions can add custom context menus (the one that appears when you right click on something within the browser).

The flaw/feature
Now, as of writing this, there is no programmatic way of invoking the pop up page (other than clicking the icon manually as mentioned earlier). This makes sense because if a non-manual initiation of the pop up was allowed then it would be an irritation for users to see the pop up page annoyingly appear just when they install an extension.

Whereas, the restriction now enforced is a bit too strict. The restriction should look something like this, "The pop up page can be initiated only by a manual action", whereas the restriction that chrome enforces now looks like this, "The pop up page can be initiated only by clicking the pop up icon". This restriction is too much because, there are other manual actions than clicking the pop up icon, that might require an user interactive window for processing. For example, consider the case of a context menu. When a context menu is clicked, it completely makes sense for the extension to initiate the pop up with the context based content and enforce user interaction. This is simply *NOT* possible now.

Other options
Though the clean solution is not possible, there are one or two workarounds that i have found out to overcome this problem.

  • If the user-interaction required is really simple, then merely use the javascript prompt('') function from the background page.

  • You can always create a tab and make the user interaction

  • Use a floating div or a jquery modal window to enforce the user interaction (this can be done using the executeScript API function).


Wednesday, December 1, 2010

Android 2.1 USB Tethering in Ubuntu

The worst part about owning an android phone is to wait for updates from your hardware vendor (HTC in my case) to provide OS updates. I am still stuck with Eclair and eagerly awaiting froyo,while the N1 counterparts are eagerly awaiting gingerbread :-P.

Wifi tethering (using the phone as a wifi hotspot) is one of the key features of froyo. Since i don't have froyo, i have to go through a tedious process to setup wifi tethering in my eclair. So, i chose the easier option of USB tethering.

Before i even connected the USB cable, i browsed through the internet and found out there are various methods available for USB tethering. There were many tutorials on how to achieve this. I read all levels of tutorials from rooting the device to installing the SDK to installing a $30 app. Atlast i found a simple app, which could do the trick.

I connected the phone (running android 2.1) and the computer (running ubuntu 10.04 netbook remix) and selected "Enable mobile internet sharing" in the phone. Thats when the miracle happened. A small pop up notification appeared in the top corner saying "Connected to wired network auto usb0". I was surprised. I had just spent half an hour surfing through tutorials to make this work. All of a sudden out of nowhere it works out of the box on just connecting the cable. To ensure i just pinged my blog and it was working like a charm!

So its windows that requires all the crappy drivers and vendor software for USB tethering. In ubuntu it automatically established a LAN (PAN may be) and set the IP, gateways and DNS and works on the go without any manual effort (except for connecting the phone and computer of course ;-))

So for all who want to tether your phone's internet connection, please do not waste your time in reading tutorials and rooting your device. Just boot into linux and connect your phone :-)

P.S.: This post is through the tethered 3g connection :-D


Wednesday, November 24, 2010

Playing With Technology - Break Bob's Account!


In this edition of Playing With Technology, we have yet another simple challenge. Go ahead and enjoy it!


Bob is a famous underworld hacker. His systems are known to be of proven security. He has recently launched a public website to which only very few of his friends have access. He has an admin account where he manages all the user accounts. Your goal is to login into the admin account and find the secret key! Bob generally is too confident about is system's secureness and hence he chooses only passwords of length 4. Also, he enforces an hourly limit of 30 hits to his website. As with the previous hack, clues and hints can lie anywhere and everywhere!

Bob's Website:
Username: admin
Password Length: 4
Hourly Limit: 30 requests per hour!

Once you find the key, Post it as a comment in this post. I will approve all the comments once i reveal the answer and will aggregate all the correct responses along with the answer.


Friday, November 19, 2010

Last Day of Internship !! :-(

Today is the last day of my full time internship with my employer. Here is a small dedication to all my colleagues and friends who have made my past 7 months the happiest 7 months of my life. I will miss you all!

Last Day of Internship !! :-(


I came here hoping to learn,
Which I've done in excess..
I came here hoping to have fun,
Which I've done is excess..
I came here hoping to gain new friends,
Which I've done in excess..
For i never thought,
This place would be excessive of excesses !!


There’s one thing that i ought not forget to mention,
The daily lunch..
We discuss minutes together where to go for,
The daily lunch..
And mostly end up changing the decision,
In the lift..

Supriya, Biriyani Express, Mast Kalandar,
Saravana Bhavan, Just Orient..
These are the places that i’d never would forget..
Thanks for all the memories..

Carrom and Chess..

We aim at the black,
We aim at the white,
We aim at the red,
But all we hit is,
The one we never aimed..
Yet we never get bored..
We’ve had spectacular wins,
That even kieron pollard could not have done..
We’ve had spectacular losses,
That even a second grade child could have done..
This is the place where i learnt,
Even chess can be a team game..
It will be a sin,
If i don’t mention the place,
That gave all the laughter..


Though it may not be permanent..
Its really hard to say good bye,
To such an awesome place of work..
With tears in eyes, and lump in throat,
Adios.. Au revoir.. Farewell..
Life has really been Happier,
Thanks to Efficient Frontier !!


Wednesday, November 17, 2010

PWT Solution - Reach Alice's Website

Hey guys,

Thanks for the overwhelming response for the first PWT post. Here is the solution and explanation for "Reach Alice's Website" hack.

You can view the question here.

To give away the solution in a briefly, it is about "HTTP Referer field in the request". HTTP requests can have a field known as the "Referer" which will contain the URL of the point of origin of that particular request. By looking at the Referer, the current page can find out where that particular request came from. Since it is easily forgeable (like in this hack), referers are generally used only for statistical purposes and none of the application level logic will rely on this field.

So yeah, the solution is, just send a HTTP request with the "Referer" set as "" and you will get the key.

Here is a sample request without the Referer field set:

Here is a sample request with the Referer field set:

List of persons who completed this task

Please view their original comments to see how they did it.

Congrats to all of you !

The good response that i have got for this post will definitely keep me going about PWT! Thanks guys!


Monday, November 15, 2010

Playing with Technology (PWT) - Reach Alice's Website !

Hey folks,

This is my first series called "Playing with Technology (PWT)". I will post an interesting real time question related to some technology for you to play around with. It will involve anything and everything i am familiar with. You may have to write scripts, perform hacks, etc. There are no rewards involved. It is just to share the minimal knowledge i possess in the form of an interactive series.

PWT will kick off today with a very simple real time hack that i call as "Reach Alice's Website". Go ahead and enjoy the hack.


Alice (yes, our same good old friend Alice) owns a website. Recently, her website was acquired by Hackers World Inc. ( The CEO of Hackers World considers this acquisition as a very confidential one and decides that all traffic to Alice website should only come through Hackers World website. But the sad part is that, Hackers World website is accessible only to the employees of Hackers World. Your goal, being a hacker, is to somehow reach Alice's website through Hackers World website and acquire the secret key from there!

Alice's Website:
Hackers World Website:

Remember clues can be lying/hiding in anywhere!

Once you find the key, Post it as a comment in this post. I will approve all the comments once i reveal the answer and will aggregate all the correct responses along with the answer.

Update: The solution has been posted here


Friday, November 12, 2010

Madarasapattinam and Me !! :-)

I was sitting all alone in podanur railway station (podanur is to coimbatore is what tambaram/perambur is to chennai) awaiting my train to chennai. I had arrived an hour early than the scheduled time just to know that the train was late by half an hour, leaving me a solitude wait of one and half hours. I really liked the peaceful environment with gentle breeze flowering across my face. If I was like before, I would have just been irritated that i would have to wait alone for one and half hours. But then, I had all the feelings about the past awesome six months rushing up to me. And I was involuntarily forced to open my blog and start sharing them. As the title suggests, people who aren't interested in me lamenting about stuff I like and stuff I'm gonna miss, please feel free to press Ctrl+W (frankly I know that you don't really care if I miss velachery railway station or not)

Long story short

Past six months have been awesome and I have really been at the efficient frontier of my life. But sadly, everything has to come to an end. The internship is about to end in a few days and I already couldn't stop feeling bad about the things I'm gonna miss. On the whole, I will miss chennai, I will miss efficient frontier and I will miss everything that has been keeping me going for the past six months.

Madarasapattinam and Me !! :-)

Short story long

It just seems like yesterday that I stepped into the seventh floor of chamiers towers (well known as satyam building), but all of a sudden, six long months have passed in a jiffy. There have been many life cheering moments over the course of this internship.

I have had many wonderful moments. A bulleted list won't hurt after all:

  • The daily bike rides to office! (13 kms one way)

  • Breakfast at the near by mess!

  • Velachery Sangeethas T20 (the offer still continues as T30 - velachery folks, dont miss it!)

  • 5 working days = 5 different cuisines for lunch (Andhra, Punjab, China, Italy, Delhi, Tamilnadu)

  • Heavenly mini noon naps in bean bags!

  • Non-stop free flowing discussions about work!

  • Non-stop fun in the entertainment area (more on the upcoming post..)

  • Besant Nagar Beach with friends in the evening!

  • Dinner daily at some random shop!

  • Maintaining accounts (thinking before every swipe of the card and every rupee out of the wallet)

  • And of course the work!

  • Fighting online for tatkal tickets to and fro home for long weekends!

  • Listening to songs almost 8 hours a day

Another such lamenting is coming up soon!


Thursday, November 4, 2010

Festival of lights is here !! :-)

Hey folks,

The festival of lights is here. We are all gearing up to celebrate the death of narahasuran in a high fashioned manner after these many decades. I just want to take this time off and wish you all a very happy deepavali.

Festival of lights is here !! :-)

Here is a small one for all the rajinikanth dudes!

இனிய தீபாவளி நல்வாழ்த்துக்கள். இந்த தீபாவளி தினத்தை உங்கள் சுற்றார் மற்றும் உறவினர்களோடு கொண்டாடி மகிழுங்கள்.


Saturday, October 23, 2010

Doodle it up - My first google chrome extension !! :-)

Google is really a part and parcel of our daily life. It has become so inevitable to our daily lives. I have taken a bit of my time to quickly develop a simple Google Chrome Extension to customize your daily visits to google. Wouldn’t you love to see your own picture instead of the boring google logo everytime you open google’s homepage? Yes. This is exactly what this extension does.

Here are step-by-step instructions for installing the extension:

  • Download the extension from here

  • Install the extension by clicking "Continue"

  • Confirm the installation by clicking "Install"

  • You will see the confirmation message

  • Goto chrome://extensions and click on options under "Doodle it up" extension

  • In the page that opens up, enter the URL of the image and then click on Save Settings

  • Now, goto Google and Voila! you have your own image instead of the Google logo!

Please post your comments/suggestions as comments.


Friday, October 15, 2010

Happy Birthday APJ Sir !! :-)

Today is the 77th birthday of the people's president of India, Dr.A.P.J. Abdul Kalam. He is a dreamer and wants to see India as a developed nation by 2020.

You have really been a friend, philosopher and guide for the entire generation of youth in India. We love you sir!!


Happy Birthday APJ Sir !! :-)

Here are a few of his inspiring quotes:

  • As a child of God, I am greater than anything that can happen to me.

  • Be more dedicated to making solid achievements than in running after swift but synthetic happiness.

  • Climbing to the top demands strength, whether it is to the top of Mount Everest or to the top of your career.

  • Do we not realize that self respect comes with self reliance?

  • Educationists should build the capacities of the spirit of inquiry, creativity, entrepreneurial and moral leadership among students and become their role model.

  • English is necessary as at present original works of science are in English. I believe that in two decades times original works of science will start coming out in our languages. Then we can move over like the Japanese.

  • God, our Creator, has stored within our minds and personalities, great potential strength and ability. Prayer helps us tap and develop these powers.

  • Great dreams of great dreamers are always transcended.

  • I was willing to accept what I couldn't change.

  • If a country is to be corruption free and become a nation of beautiful minds, I strongly feel there are three key societal members who can make a difference. They are the father, the mother and the teacher.

  • If we are not free, no one will respect us.


Saturday, October 9, 2010

root - The king of kings - Question (Part 1)

After these many years of linux, i have finally found something that root cannot do but a non-root user can do! Yes, its true and it was difficult for myself to believe this in the first place. Its like the phrase, “I saw binary numbers floating in my dreams, wait a second, i think i saw a two!”.

I have always not liked the fact that root is the king of linux and he never respects anyone else. Of course we need a system administrator who should be able to control the entire system, but at the same time, using a system administrator account should not be considered as dangerous, as many of the linux distros warn me.

Consider a simple case, root executes rm -rf * from a directory that is owned by xxxxxx and permissions set to 700. root will be able to successfully do this as he has no limits (which is the cause of the danger). I feel that root should still respect the permissions and not be able to do this in one step. If he really knows that he wants to do it, first he should change the permissions of the file (say to 720) and then perform the rm. By this, it requires two mistakes to screw up, rather than one. But the point is, root should respect permissions and he should modify the permissions when he clearly knows what he is doing and must not be entitled to do anything arbitrarily.

Now, to the actual topic. Here’s what a normal linux user would think is always true:

user@user$ marry me
fuck off!
user@user$ sudo marry me
with pleasure sir!

The point of the above statements is that, no matter what, root can always do anything and everything, unless i recently found one exception. I was able to run a command as non root but not as root.

user@user$ touch foo
user@user$ sudo touch foo
touch: Permission denied

Can anyone figure out how on earth could this happen ? (Yes it is really possible!). I’m posting this as two parts (Question and Answer). I will post the scenario i came up with along with the explanation how it is theoretically correct in the next part. If you know of such a scenario, please share it on comments :-)


Sunday, October 3, 2010

DBMS - The art that is taught as a science !!

Note: This post is not intended for a general crowd of audience. This post rambles on about something that the current college syllabi lack and suggests some changes to improve it. If you are interested in reading the previous sentence, then go on. Otherwise just close this tab and move on with your work instead of wasting time here :-)

We all know that database is a software that is used to store, organize, blah blah blah our data. Any person who is taking up a programme related to computer science would have learnt this definition for a short answer question in his/her database management systems course. After having worked with a database that grows by approximately 40000 rows a day, I now realise that the college level courses on DBMS could do much better than what they actually are doing now.


How the indian college DBMS courses work? Lets have a quick bulleted list of items that a student does during his DBMS course spanning one full semester.

  • Reads through the differences between File Management System (FMS) and DBMS

  • Reads about ACID properties and byhearts them for answering in the examination

  • Reads about various normal forms (and byhearts them for writing short answers in exam). Almost all the DBMS courses say that there are only 4 normal forms (1st, 2nd, 3rd and Boyce-Codd) and they always omit even the fact that there are actually 3 more normal forms (4th, 5th and the 6th)

  • Whiles away time with Entity Relationship (ER) diagrams which is the student's life saver in exams (as there is no such thing as THE right answer, anything that makes sense will fetch you marks)

  • Learns basic SQL and does a huge list of CRUD (Create, Read, Update, Delete) commands. The most complex query one writes here involves a query with another inner query

  • Argues over whether SQL should be pronounced letter by letter (like an abbreviation) or as SeQueL (like an acronym)

  • Reads about and byhearts various types of joins and remembers all of them for writing in the exam with a single example

  • Optionally, develops an information management system (famous ones include Library Management System, Airline Reservation System, etc.) at the end of the course, where the actual system will consist of nothing but data entry. This project will, of course, go into his/her resume during the interviews

  • Towards the fag end of the course, reads something about how the DBMS does some basic operations internally. Most of the students omit this as it is covered in the last few weeks of the semester when students are busy with some other work

The problem

The main problem lying around here is the difference between theory and practice. The beauty about DBMS is that everything that works out perfectly on theory performs worse in practice. For example, consider normalisation. In theory, and according to college syllabi, Boyce-Codd Normal Form is the best that a database could be designed. But in practice, it might kill the database if it mostly consists of reads (because of the increased number of costly joins even for simple reads).

Almost all the colleges teach DBMS in theory and they never consider the practical aspect. And yeah, developing an information management system over the period of the course does NOT count as practice. The information management systems which students develop as a part of their DBMS course hardly involves more than 10 rows per table. And most of the students develop it in the mindset of deceiving the faculty for marks rather than to actually learn DBMS which is the actual objective. DBMS is all about scalability and hence teaching DBMS in small scale is like teaching something that is totally illogical.

What can be done?

Again, let me make a bulleted list of points that i think can be done to bridge the theory to practice gap that is found in the DBMS courses. I am not an expert in DBMS and these are just my humble views on what i feel could be changed.

  • First major change to be done is to teach DBMS in the actual scale in which it is to be used. In the lab classes, don't let the students create their own tables and add 5 or 10 dummy records. Give them a preloaded table with ten lakh rows and make them query against that table. This will make them write better queries naturally as every query is going to take some time to spit out the output they want.

  • The above step also makes the student to learn about indexes. Indexes are one thing that is really useful in DBMS (i am in the process of writing an article about database indexes - will be posting it once its complete). None of the courses on DBMS really teach about the practical benefits of indexes. When a large table is given, students will have to define indexes and exploit them in their queries.

  • Instead of making students worry about JDBC, ODBC, etc. leave the frontend language to their choice and just lay constraints on the backend DBMS system. For example, don't force them to use Visual Basic, which makes a student focus more on learning ODBC and designing forms rather than designing databases.

  • Make the joins practical. Don't just teach the various types of joins for the sake of short answer questions. Make it such a way that the student is really comfortable with how exactly the different types of joins work.

  • And for god's sake stop teaching stuff about File Management Systems. We are in an era where there is a group that says even SQL and DBMS is not needed (For more about this google for NoSQL).

Closing thoughts

Database Management Systems are the arteries and veins of any corporate business. Hence, learning the complexity and scale involved in it is really inevitable and important. Making proper use of the DBMS course in colleges would be a real boost to the student's career. If the changes i suggested here are incorporated in a course, then that will definitely also save the time that a student spends on preparing DBMS for interviews.

To conclude, "In theory there is no difference between theory and practice. Whereas in practice, there is". DBMS is more of an art which is being taught in colleges as a science. If this change happens, quality of students being spit out of college every year will become better for sure.


Monday, September 27, 2010

Happy Birthday Google (12 years old) !! :-)

Today google celebrates its 12th birthday! Started in the year 1998 by two stanford guys in a garage, google has been the one thing that has transformed the whole world. Began as a search engine, today they work on almost all the cutting edge technology in the world (rather they invent most of the cutting edge technology).

Happy Birthday Google (12 years old) !! :-)

Google has really become an integral part of almost all of our lives. Google co-founder Sergey Brin's dream when he initially thought about google was to "download the entire internet in his computer" and thats what they have achieved today!

As some rightly say, "when a noun becomes a verb, technology has really matured" and thats exactly what google is.

Happy Birthday Google !! May you make the life of more and more software engineers easy day by day !! :-)

Do you have a google moment to share ? Do it in the comments :-)


Saturday, September 25, 2010

Bom Sabado - The orkut virus !!

If you are still one among those who give a damn about orkut, then this might be one thing that your really care about. Today, orkut has been hit by a vulnerability that is really a security threat for your account.

Bom Sabado - The orkut virus !!

The virus is called "Bom Sabado", meaning "Good Saturday" in portugese. This is yet another XSS attack, thereby making it the second XSS attack on a major website this week. Earlier this week, Twitter faced a similar attack. There is no official update from google yet on this issue.

What does it do?

When you open orkut and if you are affected by this virus (which could be possible if one of your friends are already affected), a piece of javascript will automatically run doing the following:

  • Makes your browser hang for a moment

  • Adds you to the attacker's communities (orkut equivalent of facebook fan pages) without your consent

  • Sends a scrap (orkut equivalent of facebook wall) to all your friends without your consent, with the text "Bom Sabado" and a piece of code that will do the same set of actions when your friend log in to his/her account

How to prevent this?

  • Unlike the twitter XSS attack, this is a severe one that steals your cookies and thereby impersonate your session. If you have logged in to orkut anytime today, clear your cookies and cache of your browser.

  • To be safe, change your google account password and security question. To do this, go to

  • Do not visit orkut until google officially says that they have fixed it. For updates, keep looking here

  • If your account seems to be behaving crazy or if its totally compromised, then see here for a solution.

  • Delete your orkut account and join facebook !

I badly want to use orkut now!

If you badly want to use it now, then you can use this minor hack to do that. The virus seems to be loading the malicious javascript code from and hence you can tweak this to point to something else in your hosts file.

Edit your hosts file (Windows - C:\windows\system32\drivers\etc\hosts; Linux - /etc/hosts) and add the following lines:

This tweak will make will to resolve to your own system and hence the javascript will fail to load. Note that you are at your own risk, i am not responsible if your account gets compromised even after you make this tweak !!

I will try to update this post once there are some official responses from google.


Random Thoughts !!

Today has been a really depressing day and i thought i will feel better if i write about something. Its really odd hours and i am wondering why i am sitting and typing something which, most likely, no one might even bother to read. But still, ever since i started writing my blog, it is one thing that i have been really obsessed with.

I know this post will not make any sense as i just wanted to get over time and scribble something. Here are some random thoughts that i have had about my blog ever since i have started writing it.

  • I first started writing the blog inspired by one of my college senior varunkumar. You can visit his awesome blog here

  • At the first thought, there were a few questions within me that will naturally arise to anyone who wants to start a blog. At first, i answered these questions myself as follows:

    • What will i write about ? - Some personal stuff and some technical stuff and hence i decided the description of this blog to be “From geekiest to craziest”

    • Who will read my blog ? - I thought of targetting my twitter/facebook followers initially and since then, i have been updating about my blog posts in facebook and twitter.

    • What do i get out of writing a blog ? - I did not know the answer for this initially. But now, i have figured out that every time you keep the last full stop on your post, you feel the immense pleasure of being able to convey something that people will really read ( and also that you have written something that google will really show in its search results !! )

  • The name of my blog, as many might not understand it. “Je L’ai Dit” means “I Said It” in french. I have described about this in the “who am i” page of this blog. Anyways, its just a small denotion that whatever the content of my blog is, i am totally responsible for creating it.

  • My blog is powered by wordpress and i use the theme InSense.

  • My bad (or good) luck, google started denying adsense for sub-domains a week before is started my blog. Adsense terms now states that you can apply for adsense only with a top level domain and not a subdomain.

  • As many might have not known, my blog has an alias URL

As i said earlier, this post really does not makes much of sense, but it really has helped me to get my mind of out other things and given me a peace of mind. I really love my blog and i really love writing. Thanks to all you guys who have been keeping my blog going.

P.S.: I am not posting a status update on facebook/twitter about this post as it doesn't make sense.


Thursday, September 23, 2010

Twitter onMouseOver Saga - XSS and much more !!

There cannot be a better time for me to write about XSS as the famous twitter recently came across with an XSS vulnerability that was exploited by many all around the world by forcing users to redirect to some illegal site or post/retweet stuff without their consent, etc. What the hell was wrong with twitter ? Why did all this happen ? In this article, i have tried to answer these questions.

Twitter onMouseOver Saga - XSS and much more !!

First let us be clear with the terminology. XSS stands for Cross Site Scripting (It is not called CSS because CSS already refers to Cascading Style Sheets). XSS is a way of injecting malicious code into a web page so that the users are troubled, user data is stolen, etc. If you don’t understand what that means, read along, you’ll understand it by the end of this article.

Before going into XSS, let me give a brief introduction about what Client Side Scripting is. Client side scripting (I don’t want to abbreviate this as it will again end up as CSS!) is nothing but a piece of code that gets executed within your web browser. When you open a website, the website is rendered as HTML along with some Client Side Scripts. For example, you click on a piece of text and a pop up appears saying “hello world”, then it is a simple script that has been run within your browser. An example of a client side scripting is JavaScript.

JavaScript can do things like redirecting the user to another website, accessing personal data (in the form of cookies, etc.) and much more. Twitter gets data from the user (in the form of status updates) and displays them in your timeline. Since client side scripts are nothing but pieces of code embedded along with HTML, the displaying part of twitter has to be clever enough to distinguish scripts and escape them (a simple example of escaping is to replace > with &gt; and < with &lt; as that will avoid the browser from misinterpreting data posted by user as an HTML tag - another simple example would be using printf(“\\n”) in C to literally print \n in the screen and not a new line).

Similarly, JavaScript code has to be escaped properly before being displayed or else there is a possibility that the browser will misinterpret the data posted by the user as JavaScript and start executing it which might cause potential damage. If the escaping is not done properly, then the attacker (usually the person who is always one step ahead of the developer) will be clever enough to exploit that display method to inject malicious JavaScript code to cause damage. Such an improper display mechanism is known as a XSS vulnerability and the attacks exploiting XSS vulnerabilities are known as XSS attacks. Twitter faced one such attack two days back.

Now to better understand how XSS attacks are performed, lets call our friends Alice, Bob and Oscar for help. So the following sequence of steps explain how an XSS attack is performed:

  • Bob hosts a website (in this case where users are allowed to make posts

  • Bob's website has an XSS vulnerability (in this case the javascript onMouseOver function vulnerability)

  • Alice and Oscar are users of Bob's website and Alice can view updates posted by Oscar (in twitter lingo, Alice is following Oscar)

  • Oscar spots the XSS vulnerability in Bob's website and decides to exploit it. So he makes a post that exploits the vulnerability (in our case redirect the user to some illegal website when he moves the mouse over the post)

  • Alice eagerly opens Bob's website and is redirected to a totally unexpected website as she accidentally moved the mouse over Oscar's post (to be worse, while her mom is watching from behind ;-))

  • There is also a possibility that Oscar can exploit the vulnerability and steal Alice's session information (cookies) and impersonate Alice

  • Thus, Alice is screwed (as always) !!

It is really bad that a website in the scale of twitter had such a vulnerability. But after all, no product is perfect. An official blog post from twitter said that this bug was created as a result of fixing some other issue. I personally feel that a company like twitter cannot afford to give such a lame excuse for it could have caused many celebrities profiles to have posted spam tweets and much more damage. Nevertheless, sites like twitter, facebook, etc. are the primary target for attackers these days and hence security precautions always has to be the number one priority.

Read more about this on twitter's official blog here.


Monday, September 20, 2010

Experience in Express Avenue Mall :-)

I came to express avenue mall with my friend santy for a second show movie at Escape Cinemas (Inidhu inidhu at screen weave - 10.00 PM show). I'm writing this post as we came a bit early to the mall, we entered the arena around half an hour early than the scheduled start of the movie. This is the first time I am seeing a cinema hall totally empty before a show. We clicked a few pics of the brand new escape theatre interiors.

Experience in Express Avenue Mall :-)

A few quick facts that I've known/observed about Chennai's newest mall.

  • Express Avenue mall claims that it is the biggest mall in southern Asia (though I'm not sure about how true is it as I've heard that ambiance mall in gurgaon is bigger).

  • As with any other mall in chennai, all the shops are heftily overpriced and as a result whole of the weekend crowd bombards the relatively inexpensive food court (as food is costly almost everywhere in chennai these days) which creates a moor market like atmosphere in here.

  • Almost all the adult girls come with a pair and many gangs of guys can be seen. So, if you are a single guy and you came here looking for girls, clearly your are in the wrong place.

  • Weirdly, this place doesn't have much places to sit and spend time (even very limited sitting places available seem to be occupied always) and hence this is not a place to come when you're tired.

  • If you are planning for a gathering here and its the first time you're visiting, then make sure to define a good meeting point, as even the mall security doesn't seem to know the gate numbers properly.

  • Don't forget to note the area code and the color code of where you park your bike or else you are sure to spend a solid time searching it. And I think the same holds for cars too.

Overall, this is a good place to visit once in a while. Especially, it is good to visit here on a weekday to avoid the crowd. Chennai atlast has a mall that has international standards (really!!).

Visited Express Avenue Mall before ? Share your thoughts about it on comments.

P.S.: This is another post that is keyed in using swype. :-)


Saturday, September 18, 2010

Swype - The next generation of text inputs !! :-)

People following me in twitter, facebook or my blog would have known that i recently joined the android community with the purchase of my htc wildfire. Ever since I bought my phone, there is this one thing that I'm madly in love with. It is supposed to be the next generation of input system for touch screens. With a simple tagline "Why type when you can swype", it is really one of the most amazing technologies I have ever seen in my life.

When I first got my phone, being the first time of using a touch phone, I was really happy about the basic touch input that is built in with android as it had a really nice auto corrector and I just needed to key in the text very very approximately. But the moment I installed and started using swype I never turned back. In this article I will be sharing an overview about what swype is, how to get swype for various smartphones and a few alternatives to swype.

What is swype ?

Swype is the most recent innovative technology for text inputs in touch screen based systems. Just like we have the T9 input system for traditional mobile phones, swype is for mobile phones with touch screens. In T9, there are either 3 or 4 characters assigned to a single numeric key and to key in text, you just have to press the correct combination of numbers associated with those particular characters and voila you have the text you wanted keyed in very easily. If there are multiple words possible for a particular combination then you choose the right word you wanted by either pressing the "*" key (in traditional nokia phones), or by pressing the down arrow (in sony ericsson and irritating motorola) or by pressing the "0" key (in the unconventional samsung phones). Once gotten used to, you will feel that T9 is the best way to key in texts in a mobile phone. It is indeed true and people even type without seeing the screen like we do in computers.

Swype is a similar technology for touch screen mobiles. In swype, instead of tapping each and every character in the qwerty virtual keypad shown in the mobile, you just have to elegantly trace through the path of the word you intend to type. Similar to T9, if there are multiple words in the path you traced, swype offers you the list of possible words for you to drag it into the input. You can be very approximate in your path trace yet swype recognizes your word almost perfectly all the times. Though it might sound simple and not very appealing at first, on using it you will realize that almost 90% of the words you type in have unique paths and hence, unlike T9, you very rarely will come across the ambiguous word choosing pop up.

Who can enjoy swyping ?

  • Android
    • Swype comes as a default input method along side touch input in many android devices.

    • If it doesn't come preloaded in your android device, then you can get the official swype beta from The official beta is closed now but you can download it through someone who has already registered with the beta was open (yes, it is legal to get any number of copies with a single registration! - and don't contact me as I didn't register when the beta was open).

    • If you didn't register for the official beta when it was open and don't know anyone who did, then this is the option for you. Download the apk file from some other source and install it in your device (which is what I've done in my phone). I am not posting any direct links here owing to legal reasons. It is available easily in Find out the type of display your device has (VGA, QVGA, HVGA, etc.), download the appropriate version and install it.

  • Windows mobile
    • Few devices with windows mobile comes with swype preinstalled. I am not familiar about other options of getting swype for windows mobile.

  • Symbian
    • Swype has partnered with symbian and recently released a public beta for S60 5th edition based symbian phones (nokia 5800, 5230, 5233, N97, N97 Mini to name a few). You can download and install swype for symbian from Nokia Beta Labs. All the installation instructions are also briefed in that page.

    • One drawback i faced with swyping in symbian is that, most of the symbian devices have less sensitive resistive touch screens when compared to their capacitive counterparts in android devices. Although, it is convenient to swype with nails in the symbian devices which is not possible with the capacitive based android devices.

When is swyping easy ?

  • When you are just done with a call and your phone is slightly wet out of your cheeks

  • When have completely dry hands after a long rest of hands (e.g. after a sleep)

When is swyping not so easy ?

  • When you have just washed your hands and wiped it dry using a kerchief/tissue

  • When your hands are wet of course

  • If your fingers are a little bit bigger, then you may have to switch orientation every time you key in text

Alternatives to swype

Every emerging technology is never unique these days. There are always multiple implementations of a single technology and swype is no exception. Here are a few alternatives if swype that I have tried out.

  • Dasur SlideIT Keyboard

    • This is the best alternative for swype I have seen so far. I was using this before I could figure out swype installation in my device.

    • One feature that it had and swype lacks is shortcuts. You can store tiny shortcuts for frequently used lengthy words.

    • The dictionary is no where close to swype's preloaded dictionary of 60000 words. Although, many language packs are additionally available for free.

    • It is available for all major smartphone platforms (android, symbian, windows mobile and even for windows ce). It can be downloaded from the official market of your smartphone ( android market, ovi store, etc. ).

    • For more details visit here.

  • T-Swipe Pro

    • This is a swype alternative that is available only for android devices as far as i have explored.

    • It is a stable piece of software that is terribly slow in recognizing what you swipe.

    • The trial version shows you irritating pop ups asking you to register for full version which is definitely not worth upgrading to.

    • If you badly want to swipe and both swype and slide it key board doesn't work in your device ( which is a very rare case ), then this may be your final destination. I am damn sure you need the patience of handling a tortoise to use this.

To conclude, Swype is definitely one of the major breakthroughs in mobile technology and I am pretty sure that soon enough, swype will be the de facto standard for text input in touch screens. Hoping to see more and more OEM installed swype devices soon.

This article has been composed entirely in a mobile device using the following input systems:
  • This note is keyed in using the traditional touch input system for android

  • The section about SlideIT Keyboard was keyed in using SlideIT Keyboard itself

  • The section about T-Swipe Pro was keyed in using T-Swipe Pro itself

  • The rest of this article was keyed in using none other than swype itself :-)

P.S.: Thanks to AK Notepad.


Thursday, September 16, 2010

SMS - Talk through mobile from facebook !! :-)

Various application layer protocols always impressed me. Especially HTTP, as my understanding about it has been pretty good. There has been one thing that i have been doing pretty good, site scrapping.

What is site scrapping? Defining it is very simple. It is the process of extracting some information from a website that has complex interface (with flash, ads, etc.) and using that information for our own purposes. Though scrapping many websites (especially government ones) may be illegal.

Here is one such application that i have developed. This application is purely a brain child of the HTTP i have understood. It provides an interface to the famous Free SMS Gateways in India 160by2 and way2sms through a facebook application. It has been one of the dead works that remained uncared for a long time. Now that i have a decent amount of online presence, i have refined it and trying to popularize it through my blog (should i call it blogvertise ?).

Using this application is simple. Register yourself at Way2SMS or at 160by2. Goto Add your account here and you are good to go. Though this application is not a big feat, it just provides a simple and clean interface (exposed as a facebook app) for the ad clustered interfaces of the famous free sms gateways in India.

Here are a few screenshots:

SMS - Talk through mobile from facebook !! :-)
SMS - Talk through mobile from facebook !! :-)
SMS - Talk through mobile from facebook !! :-)

Share your opinions/suggestions in the application's wall here or in comments.


Wednesday, September 8, 2010

Else vs Elseif - A note about validations

Its 10'o clock when i'm writing this one (as opposed to the 7’o clock of the previous post). Today had been a productive day too with a lot of work done in a good pace. Today i had an arguement/discussion(FYI, arguEment is when you argue on a topic and argument is the one you pass to the functions in your program) with my colleague on a very very simple issue. It started when i was explaining about a piece of code i had written.

Going forward in this post, i am describing this problem and the discussion as a general article and not as a discussion.

To tell about the problem briefly, whenever we use a set of if else statements, should the last in the set be an else or an elseif ? Sounds simple right. Assume that we do these ifs in a system level program which on breaking with an irrelevant error is critical. The main points to be considered when approaching this problem are code readability and whether the code breaks (the code should not break the flow of the program by doing something unwanted). Again there definitely has to be a trade off between these two otherwise this would not be a topic to rampant an article about.

Consider a simple example of an if condition. If a boolean is true you perform an action and if the boolean is false you perform some other action.

Case 1 - if..else..:
In this case, there is an else at the end. So the code will look like this:

if a == True then return 1 else return 0

First of all, this code will always perform some action (but not necessarily the correct action). The problem with this code is that the second part is very loose. Even if the variable a has something other than False and True it will still be returning 0 which may not always be the expected behavior. Though it may seem that this option is never safe, at times it is. This type of modules will generally be some internal system code, at which point you may most likely not worry about things like input validation. So if your variable can have five possible states and you have two different action based on those states, in this approach you will be writing a piece of code like this:

if state == ‘state1’ or state == ‘state2’ then return 1 else return 0

Remember there are totally 5 possible values that state variable can take. Our objective here is to return 1 of the variable is in state1 or state2 and return 0 otherwise. This is exactly what we have wrote in this if..else.. sequence here. Is this the clean way of doing this ? Yes and No. When we are sure that we have done input validations on a high level layer and that the state variable may contain no erroneous value other than the expected 5 values, then this code will definitely suffice. If not, then we may have to rethink this since it will return 0 for not only the expected 3 values of that state variable, but for every other erroneous case too.

Case 2 - if..elseif..:
In this case, there is an elseif at the end. So the code will look like this:

if a == True then return 1 elseif a == False then return 0

Here, though we are in an internal system level module, we just put a little extra effort and add an else if constraint which makes the code stronger. Also, in the case of the 5 state example, in this case we will be listing out all the 5 possible values of the state variable verbosely and thereby in future you need not look up anywhere else for the possible values the variable can take (thus enhancing code readability). I always felt it was a good practice to consider all the validations in all layers of code as that would really help if we decide to bypass a layer for some reason.

It is very similar to doing the validations on both on the client side (using javascript) and on the server side (using a server side script like php) in a website. We do this because there is a possibility of bypassing the client side layer and invalid inputs may come to the server side and we don’t want it to break because of validations not being present on the server side.

Here, even though the variable is just a booelan, it is better to always have the most constrained form of the conditions so that with little effort you might be saving a big amount of code change when you decide to bypass a layer in the future.

The actual problem's statement now changes to this, when you have your entire system architectured into different layers (like user interface, application logic, backend, etc.) should you do validations upon entering each layer or is validation is enough in the top most layer alone ? The answer is again a yes and no. The only big point to consider before making such a decision is if you want to bypass a layer in the future then you have to change the code so that the validations are done appropriately.

Even otherwise, my opinion is that it is always a good practice to perform the validations on all the layers as there is a possibility of an input being corrupted (when a layer passes it on to the next layer or some such). This is how big a simple else vs else-if problem can lead to. When you write code that is not just going to be owned by you, it is always good to think of such issues before you write each and every single line.

This may seem like the dumbest article you have ever read. But to me, it has taught a good lession about where and where not to validate data.

Comments are welcome as always. :-)


Monday, September 6, 2010

Infamous common problem !! :-)

I have had a productive day so far today. Its 7'o clock in the evening when i am writing this and i really feel like i have learnt a lot of new things today. I had a really long discussion regarding work with my team lead and he bought up an interesting point that i thought is worth sharing. I was wondering why noone had not put this formally yet (may be somewhere in the DBMS course).

It is one of the most recurring scenario in a software engineer's life that he may have to perform an action and print a log message corresponding to that action. The question is, how to keep these two operations atomic. Ok, now for those who are not familiar with the term, atomic operation is one that follows the "all" or "nothing" principle. A good example would be, if i transfer 1 crore to you, it involves two separate processes: 1) Debit 1 crore from my account and 2) Credit 1 crore to your account. This operation definitely have to be atomic as doing just one of them and not the other will make the bank go bankrupt. So thats an atomic operation (I wonder why it is called so as atoms themselves are divisible into 3 sub particles!!).

So whats with this action and log message you were talking about? Yes, coming to that, usually we perform an action (say increasing 1000 rupees in one's account balance) and to indicate that we have done this operation we write a message (probably somewhere to a log file) saying that we have increased the account balance 1000 rupees (and possibly include the timestamp). In this case, the presence of the message in the log file indicates that one's account balance has been increased by 1000 rupees. If that message isn't there in the file, then it means that we haven't increased 1000 rupees in the account.

Lets say that this operation (of increasing 1000 rupees in one's account) is to be done strictly once. No matter how many requests come, the operation has to be performed only once. A layman or a newbie programmer might think, ah, this is simple, i just have to look at the log file and if the message does not exist then i have to increase the balance by 1000 or else i should print an error message. This is what most of the people do without analyzing the possibily that the first part of the operation (increasing the balance) might have completed successfully and the second part of the operation (writing that in the log file) might have failed (due to some reason) in which case the operation might be performed more than once on receiving successive requests which can really result in a nightmare if the singleton-ness of the execution is really critical.

Since nothing is ideally (100%) atomic, it is impossible to achieve the exact singleton-ness of execution. It can be ensured that an operation is carried out no more than one time and it can also be ensured that an operation is carried out atleast once but not both (It is sort of equivalent to saying, <=1 and >=1 is possible but =1 is never possible).

Here I make a comparison of two different approaches to tackle this problem.

Approach 1 (Action First - Log Next):
Action(Completely) -> Log

This is the default approach that many people take without realising the seriousness of this problem. As i mentioned earlier, here there is a possibility that the action might be complete but the logging might fail, resulting in possibly multiple executions of the operation. Since this approach performs the action first, no matter how heavy the action is, the logging is done only after the entire action is complete. So in case of a heavy action (where only certain part of the code is singleton critical whereas the rest of the code can be run multiple times without any problem. Whereas it is not possible to separate the action into singleton critical and non-singleton critical parts in this approach, as the entire action is carried out first followed by the logging. According to me, this is one major drawback of this approach. This method gives the guarantee that the action is executed atleast once.

Approach 2 (Log First - Action Next):
Preparatory Action(Need not be singleton) -> Log -> Action (Singleton)

This is the approach that many people don't even know the existence of. Why not log first and action next? As i already said, now we can divide the action into two parts - singleton critical part and the non-singleton critical part. Now the execution goes like this, 1) non-singleton critical part of the action (lets call it "preparatory action" as it can afford to run multiple times). 2) Log the message and 3) singleton critical part of the action. So what is better about this approach? First of all, as i said earlier, this does not solve the problem completely. This approach gives the guarentee that the action is executed atmost once, which is slightly an expected behavior than the previous approach. Moreover, we are making the action lighter by splitting it into two parts. Even if the split isn't possible (there is no non-singleton critical section in the action), this approach still guarantees that the action is executed no more than once.

This is a simple yet powerful fact. It is never possible to make (as of now and as far as i understand) an action ideally atomic (meaning, executed exactly once). Post your thoughts on comments :-)

P.S.: The basic idea of these two approaches is my colleague's and i have portrayed that in my own words with my own examples.


Sunday, September 5, 2010

Happy Teacher's Day :-)

I take this moment, thanking all my teachers from my primary, elementary, secondary, higher secondary and college to have made me who i am now. I will always remain thankful to all of you in my life. Thanks for making my life better.

Happy Teacher's Day :-)

I have always had the feeling that having a good teacher makes things umpteen times easier and better. Luckily enough, i have all the sweetest the most caring teachers ever (i am not listing any specific names as that would make this post veryyy long).

As our ancestors have rightly mentioned its "மாதா, பிதா, குரு, தெய்வம்".


Google Chrome's Second Birthday !! :-)

Google chrome celebrated its second birthday two days back. Its been exactly two years before I read the official post in google blog stating that it is going to launch an open source web browser. I was surprised and was very excited to try it out at that time. Ever since then, i have been using only google chrome for all my primary internet work. And as a trademark google product, it has shown very rapid scale of development and it has matured a lot since the first release.

Along with its second birthday, google chrome version 6 has been released on the same day. The first thing i liked about google chrome release is the comic strip that they released along with it which beautifully explains the internals of google chrome in such a way that from tom, dick and harry to gnu, kde and dll guys can understand. If you have missed the comic strip, you can have a look at it here.

Google chrome currently holds 7.52% of the total market share of web browsers (Source). Surely it is very less when compared to Internet Explorer (60.4%) and Mozilla Firefox(22.93%) whereas chrome is relatively new and has had just two years when compared to Opera which, after 10+ years in the market, holds just 2.37% of the share. The key to chrome's success was that it always focussed on speed and simplicity. Apart from that the HTML5 support is being top notch. Since the project was started almost when HTML5 started to evolve, it is easy for chrome to easily adapt to HTML5 rather than other browsers whose code roots dates back years.

Google Chrome's Second Birthday

Here is an excerpt from chrome's official blog on its second birthday:
"Since Chrome’s first beta launch for Windows, we’ve brought our Mac and Linux versions up to speed, and continued to make the browser faster, simpler, and safer across all three platforms. We’ve also introduced a boatload of features, including a more customizable New Tab page, browser themes, side-by-side view, password manager, better privacy controls, built-in Adobe Flash Player, Autofill, automatic translation, HTML5 capabilities and synchronization of various settings such as bookmarks, themes, extensions and browser preferences—just to name a few. Finally, there are now more than 6,000 extensions in our gallery to enhance your browsing experience."

It is really amazing how big a product can get in a matter of two years. To me, when you are a company as big as google, i don't think there is any such thing as a small scale product release. Everything you do is in the scale of billions and trillions. Google Chrome has made my road in the web much better.

Here are some useful extensions that i have been using:

  • Google Mail Checker - Google Chrome version of Gmail Notifier

  • Google Similar Pages - A beta tool that suggests you pages similar to the current page

  • Google Translate - A really awesome plugin that suggests you and translates if a page is in a non-english language

  • TabJump - An intelligent way to group and navigate between your tabs

  • TinEye Reverse Image Search - More about this here

  • Chrome Bird - A twitter extension

Share your two year memories with Chrome on comments :-)


Thursday, September 2, 2010

A Plant that lives on Facebook !! :-)

I recently came to know this plant that relies on facebook for its life. We all would have learnt in our secondary school that plants live with carbon-di-oxide and photosynthesis. But now, here is an innovation that connects the virtual and the physical worlds.

With the basic theme as, plants don't just grow with the things that we have learnt in our high school botany. Coming under the category of living things, they also require love, care and attention to grow. Connecting the offline and the online worlds has always been something i wanted to do and this is a project that has made me look at it with an awe.

This project, named Meet Eater, has been running since May and currently (September 2, 2010) has 3041 likes (including mine). This has been developed by John Bashkim belonging to the University of Queensland, Australia. The plant grows based upon the human interaction with it using facebook. It gets it nutrients when people become friends with it, write in its wall, etc. It even replies back to your posts (of course by a backstage human controlling its profile).

A plant that lives on facebook !! :-)

This is how Bashkim describes the plant:
"Meet Eater is a plant, but not one we're used to. This plant is watered upon the receipt of physical interaction, when it makes friends on Facebook and when people write on its wall. Behind this project is the idea that by introducing both physical and virtual levels of interaction the plant is able to make the move from being an object to being a creature. A creature you can become friends with on the Internet no less."

The facebook page has a link to view the live cam, where you can see the beautiful innovation in action. The Meet Eater garden is situated in the State Library of Queensland.

The facebook page also says:
"Meet Eater is rigged up with a system to register physical contact and social media interaction. Watering is triggered by human contact and nutrients are delivered when you start hanging out with it on Facebook."

A plant that lives on facebook !! :-)

So, go hang out with Meet Eater and thereby help it grow. Here is a link to the facebook page of Meet Eater.

Note: Thanks to mashable and allfacebook for the pictures.


Monday, August 23, 2010

Collection of Funny One Liners !! :-)

I was recently going through some bugzilla quips. I am sharing a few of them which i liked. (Yes it is a few, because the collection was really hugeeeeee).

  • In order to understand recursion, one must first understand recursion.

  • Once you get a B.S., you think you know everything. Once you get an M.S., you realize you know nothing. Once you get a Ph.D., you realize -no one- knows anything.

  • If Java had true garbage collection, most programs would delete themselves upon execution.

  • To iterate is human, to recurse divine.

  • The "Gnome ate my boyfriend! Help!" bug:

  • Perl - The only language that looks the same before and after RSA encryption.

  • Vi is a subset of evil.

  • PHP is a minor evil perpetrated and created by incompetent amateurs, whereas Perl is a great and insidious evil perpetrated by skilled but perverted professionals.

  • Java is to JavaScript what Car is to Carpet.

  • If at first you don't succeed, call it version 1.0

  • To err is to human, but to forgive is not the company's policy

  • The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.

  • Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.

  • Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.

  • Walking on water and developing software from a specification are easy if both are frozen.

  • Banks will loan you money, if you can prove you don't need it.

  • Smart people listen to the opinions of others and those with opinions listen to smart people

  • Forgiveness is a wonderful idea, until you have something to forgive.

  • Laziness is nothing more than the habit of resting before you get tired.

  • I never discriminate, I hate people equally!

  • Even a mosquito doesn't get a slap on the back until it starts to work

  • Reality continues to ruin my life!

  • In theory, there is no difference between theory and practice. But in practice, there is.

  • Every generalization has an exception.

  • If you can't do it right now, don't do it wrong now, do it right later.

  • Light travels faster than sound, no wonder you find people seeming bright until you hear them speak.

  • If I'm not back in five minutes... Wait longer!

  • All programmers are optimists

  • There's no such thing as 'early.' There's only 'on time' and 'late'

  • Which port mysql runs on? USB Port - one of the interview candidates replied.

  • The difference between B tree and B+ tree is the presence of Positive (+) symbol - Answer given by a student during interview

  • There are three kinds of lies: lies, damned lies, and statistics

  • Don't tell them we failed. Tell them we decided to temporarily postpone our success.

  • In order to make an apple pie from scratch, you must first create the universe.

  • There are two types of engineers: the type that writes code and the type that documents that code.

  • Life is 10 times faster with NOJAVA=1

  • Yeah, but law of physics- The computer is fine, liquid spills on it... computer is not fine.

  • When we drink, we get drunk. When we get drunk, we fall asleep. When we fall asleep, we commit no sin. When we commit no sin, we go to heaven. Sooooo, let's all get drunk and go to heaven!

  • Everybody should believe in something. I believe I'll have another drink.

  • Computers make extremely fast.... meticulously accurate.... ..... ..... mistakes!

  • The Queue Principle: The longer you wait in line, the greater the likelihood that you are standing in the wrong line.

  • There are two ways to write error-free programs; only the third one works.

  • For any problem there is a solution that is simple, quick, and ultimately worse than the problem.

  • Everything is okay in the end. If it's not okay, then it's not the end.

  • If it doesn't run, try the --do-it

  • Life can only be understood backwards; but it can only be lived going forward.

  • Even a stopped clock shows correct time twice a day.

  • The major difference between a thing that might go wrong and a thing that cannot possibly go wrong is that when a thing that cannot possibly go wrong goes wrong it usually turns out to be impossible to get at or repair.

  • "To be is to do"-Socrates; "To do is to be"-Plato; "Do Be Do Be Do Scooby Dooby Do"


Sunday, August 15, 2010

Happy independence day !! :-)

Today is the day, that will make every Indian feel proud. Wishing you all a very happy independence day !! :-)

Happy independence day !! :-)

அங்கும் அங்கும் இங்கும் இங்கும் சுற்றி சுற்றி திரிந்தேன்,
சின்ன சின்ன பறவைப்போல் திசை எங்கும் பறந்தேன்,
வெய்யிலிலும் மழையிலும் விட்டு விட்டு அலைந்தேன்,
முகவரி எது என்று முகம் துலைத்தேன்...
மனம் பித்தாய் போனதே...
உன்னை கண்கள் தேடுதே...
தொட கைகள் நீளுதே, இதயம் இதயம் துடிக்கின்றதே...
எங்கும் உன்போல் வாசம் இல்லை ஆதலால் உன் மடி தேடினேன்...
தாய் மண்ணே வணக்கம்...

வந்தே மாதரம்...வந்தே மாதரம்...

Happy independence day !! :-)

வண்ண வண்ண கனவுகள் கருவுக்குள் வளர்த்தாய்,
வந்து மண்ணில் பிறந்ததும் மலர்களாய் தொடுத்தாய்...
அந்த பக்கம் இந்த பக்கம் கடல்களை கொடுத்தாய்,
நந்தவனம் நட்டுவைக்க நதி கொடுத்தாய்..
உந்தன் மார்போடு அணைத்தாய், என்னை ஆளாகி வளர்த்தாய்...
சுக வாழ்வொன்று கொடுத்தாய், பச்சை வயல்களை நீ பரிசளித்தாய்...
பொங்கும் இன்பம் எங்கும் தந்தாய், கண்களும் நன்றியால் பொங்குதே...

வந்தே மாதரம்...வந்தே மாதரம்...

தாயே உன் பெயர் சொல்லும் போதே இதயத்தில் மின் அலை பாயுமே,
இனிவரும் காலம் இளைஞனின் காலம் உன் கடல் மெல்லிசை பாடுமே,
தாய் அவள் போல் ஒரு ஜீவன் இல்லை, அவள் காலடி போர் சொர்க்கம் வேறு இல்லை
தாய் மண்ணை போல் ஒரு பூமி இல்லை, பாரதம் எங்களின் சுவாசமே...

தாய் மண்ணே வணக்கம்...தாய் மண்ணே வணக்கம்...

வந்தே மாதரம்...வந்தே மாதரம்...

Jai Hind :-)


Friday, August 13, 2010

My new HTC Wildfire - Stepping into Android world !! :-)

Those who are following me in twitter/buzz might be knowing that i recently joined the Android community with the purchase of HTC Wildfire. It is one of the most recent phones from HTC released in India. As a matter of fact, i am really happy to see HTC building its base strongly in India (there are already 3 to 4 service centres in chennai alone and one in coimbatore too!). I wanted to buy an Android phone inspired by the adventures with android (nexus one) by varunkumar.

Ok, here i go with my first review of the brand new HTC Wildfire.


  • Capacitive touch screen 240x320 QVGA

  • Android 2.1 with HTC Sense UI

  • 512 MB ROM

  • 384 MB RAM

  • microSD slot (2GB included) - expandable upto 32 GB

  • 3G upto 7.2 MBPS, Wi-Fi IEEE 802.11, GPRS, EDGE, Bluetooth v2.1

  • Internal GPS Antenna

  • 5 Megapixel Camers

  • G-Sensor, Proximity Sensor, Digital compass


  • Look and feel: The phone looks really sleek with a good amount of screen space (with both landscape and portrait orientations obviously).

  • Touchpad Input: This was something i was worrying before i bought this phone, as i have never used a touch pad based phone before. But now i know my worries were totally stupid, the capacitive touch screen in HTC Wildfire is really very good and much better than their resistive equivalents in the recent nokia phones. (N97 users, no offence, but the touchpad here is much better than N97). And yeah, life gets 100 times better with swype installed. We are really in the next generation of text inputs. Waiting to see how swype can change touch based netbooks. (For those who don't know what swype is, look here).

  • Sound Clarity: The sound clarity has been decent as far as i have experimented. (I am not an expert in playing around with the equalizer fields of a music player). To my needs, which are, hearing songs, loud ringtone, it works much more than fine.

  • Sensors: This is one feature that i never expected to be toooooo good. The sensors in the phone are realtime awesome. First is the orientation sensor which works much better than my previous mobile (n79). Even when i am lying down in a bed, the orientation sensor works perfectly. And as HTC says, another major sensor added to wildfire is, when you get a call, the phone automatically reduces the volume when you pick the phone up in your hands. Also, if you just invert the position of the phone, it stops the ringing tone. Another good sensor available is, when you are talking over phone, (with the phone close to your cheeks), the backlight automatically goes off. And it goes on at the instance you get it out of the talking position. On the whole, sensors really stand out in Wildfire

  • Camera Clarity: Again, as far as i have experimented, camera clarity has been quite good. HTC Wildfire comes with a 5 MP camera with autofocus. I will update this area after my friend bala experiments the camera features. The flash makes pictures taken at night also pretty clear.

  • Sync with Google Accounts: I would say Android is really a trademark google's approach for mobile phones as they have shown it with the amount of integration that can be done between your android phone and google account. You can sync everything from contacts and emails to even docs. Google latitude and buzz integration are pretty good too. Even with my slow speed gprs internet, i receive mails just like smses in my wildfire.

  • Context Aware Notifications: I learnt this during my schooling. When we right click somewhere in windows, we will get a pop up menu. But the contents of the menu will vary depending upon where you right click and hence it was called as a "Context Sensitive Menu". Similarly, the notifications in Android are all highly Context Aware (e.g. location information are always opened by google maps and not by the internal browser). And many helpful notifications to save battery power are also really good.

  • Friends Stream: Again this is one of the features that HTC is using in its marketing campaign for Wildfire. It is really a usefull application that connects you with your twitter, facebook and flikr friends. And yeah how can i forget to mention about the contact syncing done by wildfire. Since i had all the contacts in phone memory in my previous phone, i was planning to transfer it to my new one. Thats when i found that wildfire has already picked up many of the phone numbers of my friends from facebook and twitter. Wow! It saved atleast and hour to two of my time :-) And i don't need to update my contact book anymore, my phone does it for me.

  • Innovative Caller ID: Instead of just the boring caller name and caller photo, Wildfire shows the callers facebook status, birthday, etc. This works nicely even with my slow speed gprs connection (probably some caching is done somewhere!).


  • Battery Backup: Since the phone is almost always connected to internet (via gprs), battery power doesn't last for more than 24 hours. I feel this is okay for people like me who don't have trips often and get ample amount of time to charge it. Anyways, this definitely needs scope of improvement especially if HTC is going to market Wildfire as a business phone.

  • Heating Up: Almost all the gadgets have this problem these days. Wildfire gets heated up a bit too much while charging. Unlike my previous phone, it doesn't get heated up when using gprs/wifi extensively.

Overall, a really good Android phone to buy especially in a relatively expensive mobile phone market like India.

P.S.: Expect a few android from me apps soon ;-)


Wednesday, August 11, 2010

Linux X Server - Awesome Abstraction !! :-)

Before you start reading this, a headnote, this article is targetted for people familiar with linux. Though i have tried to keep it as simple as possible, some parts of this article may seem greek and latin to those who are not familiar about linux.

To start with, as the title suggests i am gonna talk about the Linux X windowing system. Before starting, there have always been so many things about linux that have been controversial (like Vi vs Emacs and Linux vs GNU/Linux to name some - people who are not familiar with all these, just ignore and read on). Linux has always been (atleast according to me) distinct in its way of organizing itself so that the users can extract maximum output of it. Adopting strictly to the basic open source principle of "choice". Briefing it in a nutshell, linux and its companions have always adhered to the goal of providing the maximum choice for its users (best example is the number of linux distributions out there (ubuntu, fedora, suse, etc)).

The linux way of architecturing a product or its feature is in such a way that it can be extracted to the fullest. I am going to write about one of the best examples of such an architecture that linux has built over years, the X Windowing System. So, what the hell is it ? If you are a linux user, you are most likely to be using the X right now. If you have seen linux before, then you have probably seen X. Before talking about the architecture of the X windowing system, let me give a brief introduction about it.

Gedit running in windows via putty

The X windowing system is the basic graphical user interface in linux. The X protocol specifies the way the windows are displayed on the screen. So whats the big deal about it? All the operating systems have some such thing that is used to display stuff on the screen. Yeah, thats true. But the way X does it is significantly different and i shall say, the designer of X is a real out-of-the-box thinker.

If you or me were designing such a system that is used to display stuff on the screen, all we would have done is make a level of abstraction over all the processes that requires display and just draw whatever is requested by the processes simply on the screen. X does just this. But how it has layered itself is what stands out.

First some terminologies. The programs which require to display something are known as the X Servers. The entity that actually interacts with the screen and draws stuff on the screen is known as the X Client. People generally tend to confuse this with the client-server model whereas this is actually client-server model with the roles reversed. In general, the guy who provides service will be called the server whereas here the guy who requests service is called server. (I still could not figure out why this terminology is followed).

The X server and client communicate via sockets. This is where X stands out. Since they communicate via sockets, yeah you guessed it right, it does not matter where the client and server runs (whether on the same machine or not). The TCP/IP stack of the OS takes care of the abstraction in how the requests and responses reach the client and server. So, the client can be any running application (even on a computer without a monitor attached to it) and the server can be any computer (of course with a monitor attached to it). As long as the client and server can communicate with each other via a network, it is possible to access both the computers using a single monitor.

Though this might sound fairly trivial today thanks to a bunch of remote GUI software available in the market, this is something that has been so well thought on those days when X was designed. It is when i see such wonderful designs i realise my college HOD's phrase "More the abstraction, Better the survival".

This article may even be a piece of junk. But i just could not resist blogging about such an awesome design.

P.S.: Seriously, you can scold me openly. :-)


Sunday, August 1, 2010

Happy Friendship Day (Poem) !! :-)

Friends have always been a part and parcel of my day to day life. Today being world friendship day, i wish you all my friends a very happy day. I am where i am because of all your support. I thank all of you from the bottom of my heart for have being with me all the time.

Happy Friendship Day (Poem) !! :-)

Here I go, dedicate this rubbish poem (really??) which i have written, to all my friends !! HAPPY FRIENDSHIP DAY :-)


Somewhere i was born,
Somewhere i was christined,
But was it God's grace,
Or was it fate's good face,
Or my favoured fortune,
That i met you...

Somewhere i was brought up,
Something i was doing,
And When i met you,
I forgot the whole milky way,
And just turned up in your way,
Which made us the happiest in the galaxy...

When i was jumping in joy,
Your uttered, "I'm with you"...
When i was in weeping in sorrow,
Your sweet voice said, "I'm still with you"...

Who are you to me?
I don't find thy words in this langua,
That suits you the bestest...

I have kept you in my heart,
Tell me if it hurts,
When i breathe,
I'm ready to halt thy...

The earth is so small,
The world has shrunk,
But never our friendship did!!!
The way we move it through our hearts,
Made others say wow with an awe...

Our hearts know nothing,
But only purity,
And trustworthy,
And also thinking sweetly...
As we count the hours, minutes and seconds,
Our feelings move in a healthy way...
For we are the HaPpIeSt FeLLoWs...


Thursday, July 29, 2010

Isn't This Life !! :-)

Okay guys, here we go. Get ready to hear some lamenting. This was a poem that i wrote after a series of bad incidents in my life. Hope you like reading it :-)

All (2 year) friends who behaved in a way, so that I was able to scribble something...

I came here as a alien...
Though I didn't really know you,
You made my world here brand pure...
You were my friend...

When I didn't know what to do...
You were with me,
Making me to find out myself...
You were my friend...

When I imagined about life without you...
You just whispered,
"Shut up dear, I'm with you"...
For you were my friend...

We were tearing the world apart,
Captivating all we wanted to,
Beating all the odds together,
And having fun round the clock...
You were my BEST friend...

I never knew, that I upset you,
Suspect I'm a fool to weep and help...
Was it my mistake?

When it came to heart and heartache,
You ought to have uttered genuinely,
Which you no way did...
Was it my mistake?

Not daring to speak at my face...
You wore the damn mask,
Which was the cause...
Was it my mistake?

And now...!!!:-(
What had happened to you???
No Heart, No Memories???
My emotions slowly fading away...

Think of the memories which we have had…
How can you ever be without me…?
Guess you are heartless and feelingless…
My emotions slowly fading away...

Slowly and steadily day by day,
My care for you is being reverted...
And my feelings getting averted…
For the reason that,
"My emotions slowly fading away"...

Not to spread the talking with your friends about me,
But Hiding past, just let it rest in peace...
Forget Me...

But not you sponge these tears,
Till your memories run sapless...
Forget Me...

Not to leave the days isolated,
And not to point out anything to you,
But to try and wipe out the actuality that we had all...
And thus to let me slip well out of your soul,
Forget Me...

Cause I'm repressed to forget and forgive,
So just enact as if we not ever met...
I ask you only one thing now,
And that is to...
Forget Me...

Hope life will be the best for you,
When I'm gone...
So please please please,
Forget Me...

Its not so poor, I'm not so worried...
I've crossed the distress,
And I'm lively once again...
I'm the HaPpY FeLLoW...

Don't imagine that I'm weeping all time,
There is no cause to worry...
And I'm really okie now...
For I'm the HaPpY FeLLoW...

I'm not gonna look back any more...
Wherever you are,
Still your happiness is mine too...
I'm now the HaPpIeSt FeLLoW...

FINAL LOOK (With a smile on the face)...
And now when I turn back...
All I can do is,
Just give a smile to my face and to my lips...
It's all part of life...

I'm really a brainless,
That I took crores of toiling seconds,
To understand that...
"Its all part of life"...

Verses of Frost flashing in my mind,
And Miles to go before I sleep...
And Miles to go before I sleep...

Do you really want to know who scribbled all such rubbish...??
It's me...My name is ViGnEsH....And I'm the HaPpY FeLLoW...