December 30, 2010

Music players

A music player is useful only when we cannot sing for ourselves.

December 29, 2010

Are you a teacher?

If you are a teacher, I'd like to tell you this.  Give your students their own bricks and cement.  Let them do with it whatever they like.  They might even just throw them away and go looking for trees with the ax they borrowed from their friends.  Don't be upset about it.

If they do take the bricks and cement they are offered, don't give your building plan to them.  If you can, share with them your building plan and construct the buildings in front of their eyes.  But if you cannot do that, throw away your plan or just hide it from your students.

If you are a parent, substitute "kids" in place of "students" in these paragraphs.  Because parents are the first teachers of every kid.

December 28, 2010

What my 2010 has been like

I am marking 2010 as a great year in my life.  A lot of things happened.  There's a line in a Tamil song, "சிந்தாத கண்ணீர் இல்லை, சிரிப்புக்கும் பஞ்சம் இல்லை" (roughly translates to "loads of laughter and loads of tears").  I think these lines summarize my 2010 really well.

First, I'll list the non-positives since the list is short :)  I couldn't get together with an amazing person I wanted to live with; an already broken relationship with a friend has broken down almost completely, and naturally.  I am not sure if I can make enough money to pull off everything I have started.  I have left my parents -- my father at least -- in a not-so-happy state of mind.

Now for the positives.  I went through my second surgery, and I don't have a screwed up leg anymore ;-)  My brother Saravanan is someone I can call as my soul mate.  I have always liked to travel with him.  This year we went on two bike rides.  I designed t-shirts for myself and as gifts.  I finished reading two big novels: Crime and Punishment and Anna Karenina.  For a slow reader like me, it's really surprising I managed to finish both novels within a year.

I learned photography and managed to take some good pictures.  Went on my dream bike ride.  Contemplated a lot, philosophized a lot.  I have a feeling that I am a bit more mature now than I was in the beginning of 2010.

Best of all, I started working on fixing my long time gripe: Hyderabad.  I blindly chose a place and started working on a transfer.  Things are going pretty good, and I will be leaving Hyderabad in about two months.  I am so insanely happy I even thought about printing a t-shirt that says "I survived 5 years of Hyderabad".  So yeah... that's about it.  Looking forward to an even more interesting 2011.

PS: It's surprising to me that there's no mention about my work in this post... maybe I don't care so much about my work?

December 26, 2010

Quotes from Gladiator

Gladiator is one of my favourite movies.  I happened to see it once again a few days ago, and I collected some quotes as usual:
  • [People should know when they are conquered.]
    Would you, Quintus?  Would I?
  • At my signal unleash hell.
  • Brothers, what we do in life echoes in eternity.
  • Ah, there's always someone left to fight.
  • Your faults as a son is my failure as a father.
  • Don't die, they'll feed you to the lions.  They are worth more than we are!
  • Spaniard, why don't you fight?  We all have to fight.
  • He'll bring them death and they'll love him for it.
  • You have a great name.  He must kill your name before he kills you.
  • We mortals are but shadows and dust.

December 13, 2010

Swyping: first impressions

I tried Swype some time back.  After using it for a very short time, I gave up and went back to standard Android keyboard.  I have been trying Swype again for a few days now.  I can't say I'm happy with it although I haven't fully given up on it yet.

The biggest challenge for me in adapting to swyping (vs. typing) is the shift in the mental model of text input.  Instead of making letter mistakes I make word mistakes now, and that's not really a pleasant thing.  Has my text input accuracy improved?  Maybe, but I can't say I'm happy with it.  I have a feeling that I would be a lot happier with a physical  keyboard than this swyping business.  (Just now I had to make three attempts before I can get the word "keyboard" right.)

The built-in keyboard in Gingerbread is pretty good, when combined with autocomplete.  I think I will probably stick to the standard keyboard for long text inputs, and use Swype when I don't feel like expending the energy required for typing correctly on the soft keyboard.

Text input through soft keyboards is indeed a problem, but Swype doesn't provide a solution to it; instead, it introduces a new problem.  In my current view both problems are pretty much of the same magnitude.  Most likely, Swype will soon become irrelevant because Google is serious about improving their keyboard.

December 12, 2010

Quotes: Anna Karenina

After spending more than 6 months in reading, today I finished reading Anna Karenina.  I can very well see why Tolstoy is praised by so many people.  Anna Karenina was an amazing read.  I sure have to read it once again to make use of the novel in my own life.  I hope to read it again some time.  Some quotes from the novel, as usual:
  • Women with a shadow usually come to a bad end.
  • To know love, one must make mistakes and then correct them.
  • Alexey Alexandrovitch was standing face to face with life, with the possibility of his wife's loving someone other than himself, and this seemed to him very irrational and incomprehensible because it was life itself.
  • "I do my best, Konstantin Dmitrievitch, d'ye see, as I would for my own father.  I don't like bad work myself, nor would I let another man do it.  What's good for the master's good for us too.  To look out yonder now," said Vassily, pointing, "it does one's heart good."
  • A cigar is a sort of thing, not exactly a pleasure, but the crown and outward sign of pleasure.
  • The walls of home are a support.
  • Whatever our destiny is or may be, we have made it ourselves, and we do not complain of it.
  • There is a way out of every position.
  • God sends the cross and sends the strength to bear it.
  • If it's a good thing for you, it's a good thing for everyone.
  • No sort of activity is likely to be lasting if it is not founded on self-interest, that's a universal principle, a philosophical principle.
  • Hypocrisy in anything whatever may deceive the cleverest and most penetrating man, but the least wide-awake of children recognizes it, and is revolted by it, however ingeniously it may be disguised.
  • God gave the day, God gave the strength.  And the day and the strength were consecrated to labor, and that labor was its own reward.  For whom the labor?  What would be its fruits?  These were idle considerations -- beside the point.
  • Anything's better than lying and deceit.
  • To sleep well one ought to work, and to enjoy oneself one ought to work too.
  • Women are the chief stumbling block in a man's career.  It's hard to love a woman and do anything.  There's only one way of having love conveniently without its being a hindrance -- that's marriage.
  • What's the use of being dreary?
  • If one wants the result, one must admit the means.
  • There's less charm in life, when one thinks of death, but there's more peace.
  • Love those that hate you, but to love those one hates is impossible.
  • "I have heard it said that women love men even for their vices," Anna began suddenly, "but I hate him for his virtues."
  • I cannot paint a Christ that is not in my heart.
  • It is hard for anyone who is dissatisfied not to blame someone else, and especially the person nearest of all to him, for the ground of his dissatisfaction.
  • One may sit for several hours at a stretch with one's legs crossed in the same position, if one knows that there's nothing to prevent one's changing one's position; but if a man knows that he must remain sitting so with crossed legs, then cramps come on, the legs begin to twitch and to strain towards the spot to which one would like to draw them.
  • But one must call things by their names.
  • A wife is a care, but it's worse when she's not a wife.
  • It's awful to think that any outsider can shatter our happiness.
  • If one loves anyone, one loves the whole person, just as they are and not as one would like them to be.
  • I don't want to prove anything; I merely want to live, to do no one harm but myself.  I have the right to do that, haven't I?
  • In love there's no more nor less.  I love my daughter with one love, and her with another.
  • Energy rests upon love; and come as it will, there's no forcing it.
  • There are no conditions to which a man cannot become used, especially if he sees that all around him are living in the same way.
  • In order to carry through any undertaking in family life, there must necessarily be either complete division between the husband and wife, or loving agreement.  When the relations of a couple are vacillating and neither one thing nor the other, no sort of enterprise can be undertaken.  Many families remain for years in the same place, though both husband and wife are sick of it, simply because there is neither complete division nor agreement between them.
  • Respect was invented to cover the empty place where love should be.
  • Where love ends, hate begins.
  • Goodness is outside the chain of cause and effect.
  • I know nothing, nothing, and I can know nothing but what has been told to me and all men.

December 09, 2010

Rounding

Why do we round numbers?  Because of our inability to process data that's very detailed.  We chop off some details that we think are unimportant and we keep the rest.  We don't round only numbers; we round everything.  Books, for example.

We know that there are billions of books in the world.  And all of them are unique.  Every one of them is different from everything else.  Is that because every book uses unique words?  No.  Is that because every book uses unique phrases?  No.  Is that because every book uses unique sentences? No.  Is that because every book has unique paragraphs?  No.  Is that because every book has unique chapters?  Maybe not.  If you have ever tried writing a book, you'd know that what reaches the readers is only one version what you had written.  You would have written several books that share many chapters, and you published the one book that was the best among them all.  So, a book is unique only when you see it from cover to cover as a whole.

But how do we judge books?  Isn't it common to say "A few chapters in the middle are a little boring, but it's a pretty good book"?  Isn't it common to remember only a few parts of a book and forget everything else from it?  Isn't it common to skip a chapter in a book because it's way too boring?  Are we not rounding a book when we judge it by excluding certain parts from it?  Why do we always want to judge an incomplete thing than to simply not have an opinion about it?

Same applies to people.  A person is what they are, what they do, what happens to them from their birth to end.  I think knowing even oneself is extremely hard without rounding... let alone knowing others.  But how we have put everyone we know in buckets like "good person", "crazy dude", "smart chick", etc!

Colours


Really really really long time back, when there weren't many people on earth, there lived two men.  I don't know their names, but let's call them Ganesan and Murugan.  When electromagnetic ration (aka light) with a certain frequency between 540 and 610 THz passed through Ganesan's eyes, he saw a shade of this color: .  However, for the same radiation Murugan saw a shade of .  Likewise, Ganesan saw the light of a certain frequency between 610 and 670 THz as  but Murugan saw the same light as .

Ganesan saw plants and leaves in , and seas and sky in .  Murugan saw plants and leaves in  and seas and sky in .  They spoke to each other about how there's something visually similar between sea and sky and between leaves and plants.  They decided to call that similarity "colour".  They decided that they would call the "colour of leaves" green and the "colour of sky" blue.  Keeping that as the starting point, they identified and named plenty of other colours.  But never could they know that one person's green was another person's blue.

Fear stays silent while passion speaks

I saw Padmasree Warrior's keynote video a really long time ago, and quite liked it.




Some quotes I liked from the video:
  • Every transition brings with it personal growth.
  • It's easier to gain speed at a turn.
  • Opportunity is a mould that is waiting to be reshaped.
  • Leaders blur boundaries.
  • The best way to get recognition is to give it away.

Paradigm shift of computing industry

Eric Schmidt in Google's Chrome event:
We've gone from a point where we had reliable disks and unreliable networks to a world where we have reliable networks and the absense of a disk or an unreliable disk or we don't really care about the disk.
(Video available on YouTube)

December 08, 2010

Habits

Habits are like short circuits in the decision making process.

December 01, 2010

How I am saving time

I like reading books.  I usually read "heavy" books that take long to read.  To add to that I am a slow reader.  So if I start reading a book today, I will take months before I can finish it.  I bought a copy of Anna Karenina on May 22, 2010 (i.e. more than 6 months ago), and I still haven't finished reading it.

Some time back I realized that I don't get any time to read.  I didn't like that fact.  I started watching my daily activities and figured what all were taking my time.  The first thing was email.  Every random vendor was sending me promotions.  I spent about two weeks actively unsubscribing or creating filters to stop spam from interrupting me.

Next was staying away from Facebook.  There are two reasons why I don't use Facebook much.  First is that it doesn't have a useful search functionality.  If I post something on Facebook today, I cannot find that post 3 months later by searching.  The second reason is that there's too much of mindless stuff going on in Facebook.

Third one was cleaning up my Google Reader feeds.  I had subscribed to Jeyamohan's blog though I hardly read the posts he writes.  I can always go read directly from his site if I have time.  Likewise I unsubscribed from some Android forums that weren't of good use of my time.

The final thing was to unfollow some people on Twitter.  @adsahay is a friend, but he doesn't post any personal updates on Twitter.  @lavsmohan posts several tweets a day and most of them are boring.  (Her blog is pretty good, by the way; her blog is still on my Reader.)  Then a few other people from Tamil film industry.  They were mostly giving film news updates; that's not something I'd want to read everyday.  Unfollowing them all has made my Twitter timeline a lot slimmer.

All these have given me a good amount of spare time which I can use to write and read something I can feel good about.

November 29, 2010

Harsha Bogle's speech at IIMA

Harsha Bogle's excellent speech at IIM, Ahmedabad is available on the net.  It's pretty long, but it's worth watching it for the lessons he shares.  One request for those who understand Hindi: can you please translate what Harsha says at around 1 hour 16 minutes into the video?


Some quotes I collected from the speech:
  • Great teams become great because they excel in their preparation.
  • Take care of the runs, dollars will take care of themselves.
  • The moment going wrong falls into your possibility map, then you do go wrong.
  • For a purely selfish reason, if not for anything else, always surround yourself with people who are better than you.
  • You cannot marry someone who is marrying 22 hundreds.
  • Arrogance often comes in the way of excellence.  It's one of the biggest stumbling blocks on the path of excellence.
  • I was willing to be a non-striker.
  • In the world of excellence if your ego and anger are on your side, you don't need opponents.
  • Once you go beyond a certain level, ability or talent is the most useless virtue to possess.  It's what you do with that talent that matters.
  • The more mistakes you make, the more you know what not to do.  If you can be outstanding at knowing what not to do, then the road to what to do opens up before you, doesn't it?
  • I think excellence is more about humility, actually, even more than luck.  Because unless you are humble you'll never hang around, you'll never be willing to do what it takes for that opportunity to come.
  • Some of us never know how good we are.
Embedded video doesn't show up on certain sites like Google Buzz.  Here's a link to the video page: http://goo.gl/1w46V.

    November 28, 2010

    What does this mean?

    It was an accident.  For the 3rd time in Hyderabad, someone rear-ended my bike.  This time the scene was a little messier.  My bike hit the car ahead of me after it was rear-ended.  A glass piece broke in the car.

    The deal here is that I fell on the ground so it was obvious to the car guy that I must have been the one who hit him.  The guy who helped me get up was the one who hit me, it seems.  I knew it only after he told me that.  He helped me get off the road so I'm pretty sure he didn't lose his balance after he hit me.

    Now, the car guy says I and the other motorcyclist should pay him for the damage.  He was asking us a few thousand rupees, which neither of us were willing to pay.  So we went to the police, who made me pay him 1500.  (I don't know how much the other guy paid.)
    When I handed my share to the car guy, he started arguing with me that I was paying a lot lesser than I owe.  He started telling me how generous he has been: "You both together pay me 4.8k, and I, who doesn't have to take any responsibility whatsoever, will pay the remaining 1k from my pocket."

    My opinion is that since this is an accident everyone takes equal responsibility, like grown ups.  So I told him he has as much responsibility as I do.  He didn't like that.  Anyway, I digress.

    The other biker told the police officer that he is earning only 6k per month so he cannot pay pretty much anything for the loss.  I thought about it.  What if the biker had decided to take off after the accident?  I would have told this car guy that it wasn't my fault, but being the dumb thing unreasonable man he is he wouldn't have believed me.  I would have thrown the money on his face and walked away.

    The biker, like a responsible adult stayed on the accident spot even though he could have simply gone off and no one would have known anything.  He was harassed by the police and he had to pay money for the loss.  Why did he do that?  Police, who should have filed a case and made the insurance companies pay for the loss threatened this guy and made him pay from his pocket.  I didn't have the balls to talk to the police and tell them to involve insurance companies in the scene.

    Maybe life is not a courtroom.  Maybe you cannot accuse only one party for what happens.  Maybe there's no point in talking about right and wrong.  But what does the incident today mean?  What am I to write on my notebook about this incident?  Only thing I can say is that it was not very pleasant.

    November 24, 2010

    Changes

    If every moment is about change, and life is one stream of changes, maybe changing is all that matters.  Maybe I should be a lot more willing to change, ignoring my habits and dogmas.

    November 21, 2010

    Someone changed the rules behind my back

    At a certain point, how well you do your work ceases to matter.  It's like, you have finished level one and you're ready for level two.  Level two is played with different rules.  What helped you pass first level -- doing your job well -- still remains important, but that's not going to help you pass the second level.  Finding good opportunities is the key in second level.  Engaging yourself in 'critical' assignments is an important thing you should do to keep your place in the game.

    Also, no one tells you when you are promoted to the next level.

    November 19, 2010

    Teacher

    A teacher is blessed because he can influence hundreds, if not thousands of people's lives.  He can inspire them to bring out the best in them.  The same is his curse.  Several students leave their schools hating most of their teachers.  There will be students whom he'd have inspired in a positive way.  But he is oblivious to most, if not all achievements of those students.

    November 18, 2010

    Unspoken words

    Unhealthiness of a relationship is probably measured in number of unspoken words.

    November 15, 2010

    Chrome freezes

    Does Chrome freeze periodically on your computer?  Have you installed Google Mail Checker extension?  If you have, uninstall that extension and the chronic freezes will go away.

    (Why does this happen?  Is there an alternative to using this extension?  I have no idea.  But removing that extension seems to solve the problem.)

    November 13, 2010

    One more observation on addictions

    When we are addicted to a habit, we start to see the addiction as a solution to all of our problems.  For instance, someone addicted to alcohol might drink whenever they get upset.  The urge to drink alcohol is one thing... drinking alcohol would help overcome that urge.  But drinking when upset is a completely different thing.  Alcohol seems like a real solution to the problem -- we start to believe that drinking is going to make us feel better.  But we'll remain upset no matter how much we drink.  (Well, until we pass out.)  Refusing to drink unless there's an urge is one more thing that can help us live with alcohol addiction.  (Of course, alcohol is just an example; this can be applied to any addiction.)

    November 12, 2010

    Moments

    Every moment is unique.  It makes you feel in a way that's completely unique.  Sure, you could be reliving a memory several times over and over again, but isn't the experience different every single time?  And moments are like bubbles... they live for a very short time.  Once a bubble pops, it's gone forever.  (I just lost a moment like that... it popped right in front of my eyes.  I am trying to remember its colours, but I can't.  I'll know it when I see that bubble again, if at all... but I can't tell you now how it looked.)

    November 08, 2010

    Finding Indic language content on Google search

    Have you used Google's Indic transliteration?  Google has taken transliteration from here and put it on its search box.  And that makes a much pleasant search experience since finding regional language content is very simple.  We don't even have to type the search query in the regional language.

    Set your Google interface language to Tamil and search for [vairamuthu], you'd get a result page like this:


    It works for all Indic languages.  Here's a screenshot of the Hindi interface:

    How I use Synergy

    Have you heard of Synergy?  This is a cool application that allows you to share one physical keyboard and mouse across multiple computers you use.  I have been using Synergy for years, and I'm going to share my Synergy setup in this post.

    Basic setup is done by writing a configuration file on the server machine as shown in Synergy manual.  In addition to letting you share keyboard and mouse, Synergy does another sweet thing: it synchronizes clipboards on all the connected machines.  What this means is that you can copy some text on one computer and paste it on another!  I love this feature.  But one thing I was not comfortable with: all Synergy communication over the network is done in plaintext.  Every day I would be sending a lot of information over the wire without even being aware of it!  URLs, email addresses, code snippets, and so on.  I don't like it.

    Any TCP/IP connection can be encrypted (without the app having to support encryption) using SSH tunnels.  Synergy site has some information about using tunnels to secure Synergy traffic.  Using that setup requires typing a password to establish the tunnel every time I start synergyc, the Synergy client program.  I don't like that either.

    First thing I did was to set up public key/private key authentication to the server computer -- one on which I run synergys, and run ssh-agent on the client computer -- one on which I run synergyc.  (Mark A. Hershberger has written a detailed guide for doing this.)  This would let me log into the server from the client without having to  type a password.  Then, I wrote a Python script that would set up an SSH tunnel and start Synergy client.  Now, instead of running synergyc command I run my synergyc.py script, and everything works as expected.

    The script sets up a tunnel and starts the client.  My first version, which I wrote a few years ago, was very naive.  For example, it would freak out when the client loses connection to the server, and I will have to manually restart the client.  Now the script is much improved and works pretty well for my usage.  The script is available on GitHub.  Feel free to use it, review the code, send patches, send feedback/bug report, etc.  (Remember to change SERVER_HOST_NAME in the script to your server's host name before using the script though :)

    Hyderabad... it gets on my nerves again

    This post is a rant.

    I spend about an hour in Hyderabad traffic almost everyday.  That ensures that I keep disliking this city.  People here don't seem to understand right of way, and that pisses me off.  My mind goes "dude, why don't you just let me go?"  From the little I have seen, they are just ignorant of right of way and it all becomes someone else's problem.  The traffic is equally bad, if not worse, when it's raining or dark.

    And the traffic cops... oh my goodness!  They don't even care if someone is driving on the wrong side of the road.  Several times they have encouraged me to go past a junction when the signal is red!  One thing they do well is sit on your pillion, direct you to the close by ATM to get some bribe because you are not wearing a helmet or your bike doesn't have an AP registration number.  (Oh sure, you can drive with a TG number plate.)  Disgusting is the word!

    November 06, 2010

    Gratitude

    I got off the rickshaw, paid the fare and said "Thank you bhaiya!"  As I was walking towards the restaurant, I started thinking.

    Well, I am thanking this rickshaw driver because he took me to this place.  Shouldn't I be thanking the government and all labourers for paving and maintaining these roads?  Shouldn't I be thanking every single employee of Bajaj for making the rickshaw?  Shouldn't I be thanking the petrol pumps for making motor vehicles practically feasible?  Shouldn't I be thanking my employer for paying me enough to make rickshaw rides affordable to me?  Shouldn't I be thanking all my teachers -- everyone who has taught me in my entire life -- for making me eligible for getting this job?  Shouldn't I be thanking my family for all the hardships they went through to give me the quality education I got?  Shouldn't I be thanking the doctor who treated my broken leg so I can now walk around independently?  Shouldn't I be thanking my laundryman for washing my clothes on time so I could come out with good clothes?

    Shouldn't I be thanking the entire universe for every nanosecond of my existence?

    The story of my running behind a bitch

    I woke up late this morning and didn't go anywhere out till evening.  By around 5 in the evening, out of an inexplicable urge I left my house.  Unlike my usual self, I took a rickshaw.  Went to City Center and and had potato wedges and coffee at McDonalds.  I got out and started walking back home.

    A little distance after crossing Mehdipatnam bus stand, I saw a (female) dog running in the opposite direction.  It went past me 2 metres, turned around, and started following me.  At a safe 0.5 to 1 metre distance the dog was now following me.  Every now and then it would come close to me so that I'd notice it.  It kept on coming with me till the Food World signal, which is about a kilometre from the bus stand.  I knew the dog is looking for food, and I didn't want to go without giving it anything.  I mean, it had followed me for a kilometre!  But there was a problem.

    There were no shops on the side of the road we were in.  I had to cross the road to find anything to feed the dog.  I was pretty sure the dog won't cross the road with me.  So I decided that I would cross the road and see if the dog was still in sight.  If I could see it I'd buy something for it; otherwise I'd just go home.  So, I crossed the road -- which took longer than I would have liked -- and looked back.  The dog had stayed behind like I had thought.  It had moved a bit, but it was still there and I could see it.  So I went ahead and bought a pack of some cheap biscuit.  I crossed the road again to get back to the dog.

    The dog had moved further and now it was a good 50 metres away from me.  "Well, I have bought the biscuits already, now I have no choice but to follow the dog," I told myself and started walking towards it.  The dog was moving slowly towards the bus stand, i.e. the direction opposite to my house.  I would have walked for about 45 seconds when I noticed these three lads walking before me.  One of them decided to amuse himself by throwing a stone at the dog I was chasing.  The stone didn't hit the dog, but the dog started running fast to save itself from being attacked.

    "Oh shit," I said to myself and started walking fast.  The dog was very far now -- maybe 150 metres away from me, and it was running!  I started to walk fast, but I couldn't keep up with the running dog.  By the time I was near it, the dog had reached the bus stand already!  I was only a metre away from the dog, and I had to make it pay attention to me.  I threw a biscuit at it.  Scared, the dog moved away.  It stopped some 3 metres from me and stared at me to see what I was up to.  I took another biscuit and offered it.  It came near me cautiously and ate the biscuit off my hand.  Then I showed her the biscuit that I had thrown first.  She ate that too.  After it had eaten two biscuits, I unwrapped and kept the whole pack down on the floor.  It started eating, and I started walking back home.  This is what I had in mind then... "Bitch... it made me walk two extra kilometres!" :)

    October 26, 2010

    Speed

    Your speed determines, in addition to how soon you will be done, the problem space you're going to be working in.

    (cross-posted on Twitter)

    Living on the cloud


    This is why I'm excited about Chrome OS.  Right now on my computer, 11 out of 13 open windows are browser windows.  5 out of 8 quick launch shortcuts are to web apps, 2 out of the remaining 3 shortcuts are to web browsers.  A big chunk of my life is already on the web :)

    October 17, 2010

    Time

    Lack of time is hardly a problem for most of us.  On the contrary, abundance of time is a real problem.

    October 16, 2010

    Type to switch windows on KDE

    Two primary reasons why I use a Linux computer: 1. command line shell, and 2. KDE.  KDE has so many neat features and so customizable, I just can't go back to Windows or OS X's GUI.

    A couple days back I stumbled upon a KDE 4 feature.  Looks like KDE would let us use the Run dialog box (which is activated by pressing Alt+F2 from any application) to switch between open windows.  I am the kind that has a lot of windows open all the time.  Sometimes it might be easier/faster to type few letters of a window title to switch to it, and this feature does exactly the same.


    I type "mail" on the Run dialog box and the options I have include commands available on the system (the "mail" command), apps like KMail, my quick launch shortcuts (Gmail, manki.in and Mail), and currently open Gmail Inbox.  While this feature really is super cool, it would be even better if individual Chrome tabs are searchable like this.  Well, that will also happen some day :)

    October 11, 2010

    Truths and myths

    Only those who once believed that 100 was the largest possible number later grew up to understand infinity.

    (cross posted on Twitter)

    Uncertainties

    There are few things we know we certainly want.  A few other things we know we certainly don't want.  The few things that we partially want can be a real pain.  Thinking about it, probably these uncertain things usually make us go through immense pain.  If we can figure out a way to handle those uncertainties better, life would be a lot easier.

    Context

    Context is everything.  You can be a happy person or an unhappy person depending on where you position yourself.  And also, like they say, be careful what you wish for.

    October 02, 2010

    Code coverage


    If you have written automated tests for computer programs, you are very likely to be familiar with code coverage.  Almost everyone agrees that 100% code coverage from your tests doesn't mean that your code doesn't have any bugs.  I have been told this by experts, and I accepted it as such all this while.  Suddenly a few days back I could come up with an example where the test coverage is indeed 100%, and yet one bug goes unnoticed.

    This example is an extremely simple case (you can even call it stupid) and the bug is on your face.  But in real systems bugs may not be so apparent.  Here is the code we are testing:

    package in.manki.samples;
    
    public class Coverage {
      public long factorial(int n) {
        long f = 0L;
        if (n > 3) {
          f = 1L;
        }
        for (int i = 1; i <= n; ++i) {
          f *= i;
        }
        return f;
      }
    }

    And here is the first version of the automated test:

    package in.manki.samples;
    
    import junit.framework.TestCase;
    
    public class CoverageTest extends TestCase {
      public void testFactorial() {
        assertEquals(120L, new Coverage().factorial(5));
      }
    }

    The test passes and Emma says I have 100% code coverage:

    [class, %] [method, %] [block, %] [line, %] [name]
    100% (2/2) 36%  (12/33)! 17%  (91/549)! 23%  (34/150)! junit.runner
    71%  (5/7)! 40%  (41/102)! 35%  (442/1272)! 38%  (123.8/324)! junit.framework
    100% (2/2) 56%  (20/36)! 47%  (247/530)! 48%  (63.2/131)! junit.textui
    100% (2/2) 100% (4/4) 100% (35/35) 100% (10/10) in.manki.samples

    Adding the following test would expose the bug, but if we simply go by coverage numbers we would deceive ourselves that the code is thoroughly tested.

    package in.manki.samples;
    
    import junit.framework.TestCase;
    
    public class CoverageTest extends TestCase {
      public void testFactorial() {
        assertEquals(120L, new Coverage().factorial(5));
      }
      public void test2Factorial() {
        assertEquals(2L, new Coverage().factorial(2));
      }
    }

    Google's Testing Blog has a very good post on code coverage; it's worth reading it if you haven't already.

    Why social?

    I was 12 or 13 when Badsha was released.  A few weeks after the movie release, I went to Tirunelveli with my father.  We were there for some work, which got over by afternoon.  Before returning to Kovilpatti (where we were living then) my father and I went to watch a movie.

    "Shall we go watch Sadhi Leelavathi?" my father asked me.  But I wanted to watch Badsha.  Not because I liked Rajini Kanth.  In fact, I have never liked him.  Even as a kid I liked Kamal Hassan more than Rajini Kanth.  My father of course knew better and we went to Sadhi Leelavathi.  The movie was hilarious, but I was probably the only person who didn't laugh in the theater.  When I saw Sadhi Leelavathi later on, after I was over with being pissed with my father for not taking me to Badsha, I really loved it.  But on that day, I wanted to watch Badsha first because all my friends had seen that movie and they were all talking about it in the class.

    Likewise, I haven't seen many movies in IMDB's top 250 list.  But today I watched Loins of Punjab because my friend Chenthil suggested it (and loved the movie, by the way).  Only now I understand why "social" is such a buzzword and every company wants to make their products more social.  Earlier maybe social wasn't possible, or no one thought about it.  Now, we don't care much what Experts Opinions are, but we want to what our Friends Opinions are.  I must say I am liking this change.

    September 24, 2010

    September 23, 2010

    Learning

    I read this in an Osho's book.  Someone asks Osho how one should seek their guru.  He replies, "You don't have to go looking for your guru, but the guru has to look for you.  When the disciple is ready, the guru appears."

    Now what I think is, when one is ready to learn -- when one is receptive to lessons -- he finds his lessons from pretty much anything.  Guru and disciple are not two different entities, but the disciple has his guru in himself.  Guru, and his teachings, all come from within the disciple.  And that's why learning is always an intimate and personal experience.

    Customizing Gmail's Priority Inbox

    Gmail's Priority Inbox feature divides your inbox into three sections by default: Important and unread, Starred, and Everything else.  This works for most people, but I am one of the people for whom it doesn't quite work.


    In this post I am going to say how I changed Priority Inbox to suit my needs.  I should first say how I have organized my Gmail mailbox.  If there's a mail that I might need in the future but only occasionally, I star that mail.  Some of my starred mails have the license key for software I bought, links to my Internet domain's control panel, etc.  I don't need these information often, but when I do need them, I find it hard to locate them by searching.

    There's another set of mails that make my "to-do list".  I add a mail to my to-do list by applying "pending" label to it.  Let's say I receive a bill for my Internet connection, and I am planning to pay it only a few days later.  I'd mark it as "pending" so I can get back to it later.  Once I have made the payment, pending label is removed from that mail.

    Before Priority Inbox, I was using Multiple Inboxes Gmail labs feature to show my "pending" mails above my inbox.  If I can somehow make the "Starred" section of my Priority Inbox view to show my "pending" mails, I will get my old inbox view back.  This is how I did that:
    I clicked on the title of the Starred section, and choose "More options..." item.


    This showed me all my labels.  I selected "pending " from the menu.


    That's it.  Now my Starred section has been replaced with more useful "pending" section.


    There are more ways to customize your priority inbox.  Open Settings > Priority Inbox in your Gmail and explore the options available there.

    September 19, 2010

    Bad things

    Doing so-called bad things is arguably better than doing nothing.

    Slow poison

    I have a good friend who likes to call himself "slow poison".  After I met him, I have thought about the idea of slow poison quite a few times.  I can now say I have experienced such a thing at least twice in my life.  But they're not negative as poison, they're very positive.

    1. The movie Adaptation.  I first saw the movie, and I didn't really like it much.  Somehow I didn't want to accept that and told myself that it was an okay movie.  But later, different scenes from the movie came to my mind every now and then, and I started liking those scenes.  Bit by bit the movie grew on me, and a few days ago I saw the movie once over again.  I am thinking I will see it again after some time.

    2. My long bike ride, Pilgrimage 2010.  As soon as I was back it was just another ride/vacation for me.  Nothing remarkable.  But every now and then I get a glimpse of how that trip has changed me.  Then I called it a pilgrimage just for the kicks.  But in retrospect, I think that was indeed a real pilgrimage.  And this pilgrim wants more and more such pilgrimages in life!

    Accidents happen

    What do you think about shouting at someone in Tamil, knowing well that he doesn't understand a word of what you're saying?  I really think it's pointless.  Although that's just what I did today.

    About 6 hours back, I was on the road going on my bike to see a friend.  A city bus decided to stop for whatsoever reason, so the Santro following that bus had to stop suddenly too.  I was behind the Santro and I was impressed that I had avoided hitting the car by literally an inch.  Just when I was thinking "not bad," something happened and my bike fell on the road.  I turn back and see a truck.  That truck must have hit my bike from behind.

    I scream and curse the guy, all in Tamil.  In the back of my mind I knew this guy won't understand a bit of what I am saying, and I kinda convinced myself that he isn't hearing anything of what I shout.  After a round of shouting I decide to get the bike up and see if there's any damage.  But the truck has to move a little for me to do that.  I extend my arm fully and shout "பின்னால போ" ("get back") and he immediately goes a little back.

    I pick the bike up, put it on the side stand, and look around it.  There isn't any visible damage.  And the driver and the other man in sitting in the truck are looking very apologetic.  There isn't anything productive to do there.  So I start the bike and just go.

    This is almost nothing.  Just one blow from behind, that too on the bike, not on me.  When I was doing all the shouting and checking the bike I didn't hear the song that was playing.  I mean, not "listen", I just didn't hear it!  My body was shaking for another few minutes, which I noticed only after getting off the bike after reaching the place I was going to.  I wonder how it would have been to the guy who got hit directly by my bike about 3 years ago!  It was fully his mistake and all that, but I really do feel sorry for hitting that guy.  Whosoever you are, where you are now, dude, I am really sorry, and I apologise for hitting you from behind.

    September 13, 2010

    Things I've discovered about myself - 2

    • I hate it when friends don’t trust me.
    • I don’t like it much when others complain about things that I’m indifferent to.
    • I sometimes make typos while writing my own name.
    • I like to show off.
    • I’m claustrophobic.
    • I don’t like air-conditioning.
    • I like doing things that involve physical labour.
    • I like movies, but I like it better when someone I trust chooses movies for me.
    • I don’t experiment by trying out different food.  I’m conservative in that way.
    • Although I sometimes try insane combinations.  Like mixing pineapple and mango pickle.  Or mixing chocolate and curd.
    • I have the ability to, and I sometimes do, manipulate people.

    September 12, 2010

    Blessing in disguise

    Nov 23, 2008: I meet with an accident and break my leg.
    Jan 1, 2009: I get back to my regular life, though I still depend on a walker to move around.
    Feb 28, 2009: I go to Warangal with a couple of friends.  Of course, I carry a crutch with me.

    Since then, the frequency of my travel has increased.  The way I look at life has changed.  The intensity with which I live has increased.

    It's amazing how all bad things have some good in them and all good things have some bad in them.

    Confession of an optimist

    I wanted to get married, so started looking for someone I can live with.  People advised me that I should instead look for someone I cannot live without.  That sounded right, and I started looking for someone such.  It's been 45 years since then, and I'm still single!

    September 10, 2010

    Random Thoughts: Togetherness

    If you believe that someone else's love and togetherness is going to bring happiness and meaning to your own life, you are bound to be miserable, no matter if you do or don't attain that person's love.

    September 08, 2010

    Random Thoughts: Final conversation

    Often, when someone calls a person for having a final conversation, it just means they really don't want that to be the final conversation.

    September 01, 2010

    Random Thoughts: Acceptance

    How often have we heard the idea of accepting someone else as what they are, with their positives and negatives!  But in reality, how many of us accept ourselves as what we are, with our own positives and negatives?

    Some tips for long motorcycle rides

    It's been a while since I am back from Pilgrimage 2010, and since then I have been wanting to write down some tips that I found to be useful.  Some of them, I learned from my friends; some of them I learned myself.
    • Add bike maintenance to your plan.  If your ride is long enough to require bike maintenance, factor that into your plan.  After reaching Manali, both our bikes needed some maintenance to be done.  Like, cleaning and lubricating the chain, changing the engine oil, etc.  Luckily we had allocated one day at Manali for resting.  We used that day for getting the bikes done up.
    • Pack in small small plastic bags.  I had kept all my shirts and inner wears in one plastic bag, my jeans, track pants, etc. in another bag, chargers and other electronics in another bag, and so on.  This way they have a good internal arrangement, and they won't get wet if it rains.  Our saddle bags are supposedly water-proof, but without the plastic bags it would have been a really bad scene.
    • Take only what you really need.  For a 3 weeks bike ride I carried 5 t-shirts and 1 pair of jeans.  When a close friend advised us to carry one pair of jeans it seemed ridiculous at first.  But if we are going to be wearing our riding gears all day long, what's the point of carrying regular clothes?
    • Don't carry tools that you don't know how to use.  Or tools that you can find at a mechanic's.  This is pretty much the same as the previous one.  We found a "list of tools to carry" online and we bought them all enthusiastically.  Including a heavy foot pump!  After a good friend's advice we decided not to carry the pump and several other tools and spares we had.  It turned out that we didn't need any of those tools.
    • Add buffer days to your plan.  Keeping a reasonable number of days as buffer would be useful if something unplanned comes up.  If everything goes well, you can always think of something to do in those extra days.  (I had two spare days after the trip.  I visited Taj Mahal in one day, and returned early and rested in the other spare day.)
    • Remember it's a vacation.  This may not be applicable to everyone, but I like this one enough to add to the list :)  Our 3rd day in Leh, we woke up at 8 in the morning.  Both I and my brother were tired.  I had said the previous day that we should either go to Hunder next day or do white water rafting.  But we were too tired to anything, so we decided to sleep more and relax rather than forcing ourselves to go visit places.  I mean, if we don't allow ourselves to relax and rest, what's the point of taking a vacation?!

    August 30, 2010

    Random Thoughts: Dance

    Some dance to remember.  Some dance to forget.  Some forget to dance.

    PS: I already posted this on Twitter, but this one is so close to my heart I want a place for this in my blog :)

    August 29, 2010

    Self-help

    I summarize many self-help books into one sentence: "you are responsible".  Now, I think I can summarize many books and movies into this sentence: "if the door you want to enter is locked tight, don't keep banging at it."

    August 23, 2010

    De-stressing your bike's engine

    What would you do if your bike's pick up has reduced noticeably and the engine feels a little too stressed after it's just back from the mechanic's?  Sometimes mechanics tune things slightly wrong, and here are a couple of things you can try to fix the bike yourself:

    Reduce the idle speed of the engine if it's too fast.  Recommended idle speed for your bike, how to change the idle speed, etc. vary for each bike.  For Honda Unicorn, the recommended idle speed is 1400 ± 100 rpm.  You can adjust the idle speed by adjusting the knob shown in the picture.  One thing to keep in mind while adjusting idle speed is that, you should ride the bike for 2 or 3 kilometers to warm the engine up before setting the idle speed.



    Loosen the clutch cable if it's too tight.  But how do you know if the clutch is too tight?  A few symptoms I know of are:
    • The bike's pick up is slower than usual.
    • The engine stresses more than usual even at slow speeds.
    • When you have to use the clutch very frequently -- for example in stop-and-go traffic -- because the clutch is too tight your fingers become sore quicker.
    You can loosen the clutch by adjusting the nut shown in the picture.  One good thing about this nut is that you don't need a spanner (or wrench) to adjust it; you can simply use your fingers.

    August 22, 2010

    Open vs. closed systems

    Many web sites (or apps) now have a mobile interface.  If they detect that you are using a mobile browser, they automatically redirect you to a mobile-friendly version of the site.  Every time I notice a site do this, I think "how nice it would be if my blog also had a mobile version that loaded fast on mobile phones!"

    From the little I know, it's very simple to do that on a WordPress blog.  But Blogger hosts my blog.  I have no choice but to wait for Blogger to act on this.  I sometimes (very infrequently) think of moving my blog to Google App Engine so I can have all the power I might need for customizing it.  But then, maintaining a blog is a lot of work, and that's one of the primary reasons I use Blogger.

    August 20, 2010

    Review and clean up your Twitter connections

    I like trying out new tools and apps.  One thing I like about Twitter is that there are plenty of Twitter clients out there.  We have a lot of choice in choosing a client that suits our needs and preferences. I keep trying various Twitter clients every now and then.

    Now, a small detour about how you'd authorize a Twitter client to access your account.  There are two ways a third party Twitter client would ask for access to your account: 1. by providing your user name and password to the client, and 2. by using OAuth.  Option 2 is a lot more secure than option 1 because when you are giving away your password to a person or a program, that person or program has unlimited access to your account.  By "unlimited" I mean they can do anything whatsoever including changing your password and even deleting your account permanently!  But if you authorize a client via OAuth, it has limited access to your account, so it cannot do much harm.  (But sadly, many Twitter clients don't support OAuth yet!)

    The best part about OAuth is that when you stop using an app, you can revoke the permissions you gave to that app.  (You can do that from Twitter Connections settings.)  If you had shared your password with an evil person or app, your only choice is to change the password.

    Today I was casually going through my Twitter settings and found that I had authorized many third party clients to tweet on my behalf.  I had stopped using most of those clients, but I didn't know that these permissions are persistent (i.e. authorizations persist even after we uninstall the clients).



    Leaving only the clients that I use currently, I revoked access to all other clients.  You also go ahead to Twitter Connections and remove unwanted apps from there.

    PS: Facebook scene is probably worse since you would have unknowingly authorized many Facebook apps.  See my previous post to learn more.

    August 19, 2010

    Random Thoughts: Choices

    We make choices all the time.  But never can we know if a choice we once made was the best we could have or not.  We just live the choices we make.

    August 16, 2010

    Random Thoughts: Horse riding

    One who rides two horses will lose balance later, if not now.  When you must ride two horses, harness them to a chariot.

    Random Thoughts: Self

    • Proving to the world is proving to self.
    • Being angry is being angry with oneself.

    Random Thoughts: Emotions

    Emotions (always?) stem from unknowns.

    Random Thoughts: Bitterness

    If you happen to bite something bitter, just swallow it.  Or spit it out.  Don't keep it in your mouth forever.

    August 11, 2010

    A respect hungry mind

    I am one of those people who want/need/expect to be respected.  From my conversations with my friends in the past I know that I use the word "respect" to mean something very different than what many people think.  I'll first make an attempt to explain how I define respect.  Respect is respecting as a human being; treating as a living thing; believing that a person is important; believing that what they say is important (at least for that person).

    I get really pissed when people don't respect me.  I expect all my friends to respect me.  Especially when the relationship is not going great.  I messaged a friend last night and haven't gotten any response whatsoever till now.  And that's eating my head since morning.  Our relationship never was smooth and it's rough as I write this.  (Although that friend might think otherwise.)  So, in this relationship my expectation to be respected is a little high and that person just doesn't stand up to it.

    A part of my mind says only I am to be blamed if I am not happy.  Another part of my mind wants to call that friend and say how bad I feel.  And the first part tells the second part that I just shouldn't be bothered about this whole thing and move on with things that matter.  After all, spending one's energy on hopeless things doesn't make any sense at all.

    One important thing is to learn how to respond to that friend next time when I face her and how much value I really give to that friendship.  Maybe I am valuing that friendship a little too much now.

    August 09, 2010

    Pilgrimage 2010: Manali-Leh highway

    People we met casually asked us what our plans were like.  Everyone was surprised that we are taking the Manali route while returning from Leh too.  (There are two routes to Leh from Delhi: one via Srinagar and another via Manali.  Manali route is harder and more scenic than the Srinagar route.  People usually enter Leh through one route and leave by other.)  "You want to do that route again?", "You would save time if you go via Srinagar", "Don't you want to see Kargil/Tiger Hills/Dal Lake/etc." were the typical reactions of people.

    On our way to Leh from Manali we had faced a lot of difficulties.  It was raining in Pang, a place where it usually never rains because of its high altitude.  We had to stop at Pang for a night and because of the altitude neither of us could sleep well.  I even experienced a very mild AMS.  Because of the mild AMS, I had to walk out of our tent in rain to throw up.  (I still remember some local lady telling me Kahaan jaate ho?  Gir jaaoge! meaning "Where are you going?  You will fall!")

    The next day's ride was even worse.  Around 11 in the morning Saravanan signals me to stop.  We both stop and he says both his hands are completely unresponsive.  "Take your helmet off and breath well", I tell him.  But his fingers just wouldn't let him do anything.  I take his gloves off, help him take the helmet off.  We both eat something we had, and drink some water.  We keep our hands on the hot engines and the exhausts of the bikes.  We did this all while it was raining!  After a few minutes Saravanan feels a little better and I tell him that we'd ride to some place where we get food.  A place where we can sit and relax without getting wet.  We stopped at the first tea shop we saw and ate hot Maggi, drank tea before we continued.

    After all this, we both didn't want another Pang in that trip.  That's one reason why we didn't spend the night in Pangong lake -- "no high altitude nights any more", we had decided though neither of us had explicitly said that.  This made both of us hesitate a little to take the same route back.  For various reasons I firmly decided that we will take the same route, and Saravanan agreed too, albeit with hesitation.  (I kept telling myself this quote from The Matrix: "The real test for any choice is having to make the same choice again, knowing full well what it might cost.")

    It didn't rain on our way back.  That made the ride a lot easier.  We had been expecting the worst experience of our life, but the reality was way different.  We saw how good those roads were.  (All this while "There are no roads at all" was our impression about that route!)  Because we wanted to reach Manali as early as possible I had decided that I won't stop to take pictures.  So my focus was only on the roads.  And on the sceneries around.  This time I saw everything in a new light.  I saw the beauty and breathtaking views of the terrains, as if I was seeing them for the first time.  It was a much pleasant experience riding back.

    Yesterday evening Saravanan told me: "Riding back on the same route was probably one of the best decisions we made."  We would have missed such a beauty if we had taken the Srinagar route, and worse, the image of Manali-Leh route in our minds would have been of a "roadless difficult terrain that's beautiful here and there".  But in reality, that route is one of the most beautiful things I have seen in my life.  I'm glad I didn't fall for the Srinagar route's "new terrain" bait :-)

    See Pilgrimage 2010 for some background on what "Pilgrimage 2010" is.

    Pilgrimage 2010: tents

    You find tents everywhere.  Hotels, restaurants, living place for people, and whatnot.  One thing I really like about the tents is that they’re so temporary.  The tent probably didn’t exist a couple months back.  In a few months, when the people leave that place (migrating to someplace where winter isn’t too harsh), the tent will go with them too.  Everything inside the tent, the tent itself with all its supporting polls would be loaded in a pick up and within days you won’t find a trace that there was a restaurant that fed so many passersby.  This impermenance is intriguing and I kinda like it.  In a way I want my life to be like that too.

    See Pilgrimage 2010 for some background on what "Pilgrimage 2010" is.

    August 08, 2010

    Pilgrimage 2010: tidbits

    • Packing for a 21-day trip is way different from packing for a 2-day trip.
    • India is vast.  It took us 10 days of riding (plus one day of rest) to reach Leh from Hyderabad.  We felt like tiny ants climbing their fastest on a tall mountain.
    • Maharashtra is beautiful.
    • Monsoons are probably the best time to ride in India.  As long as you have proper rain gear.
    • Nexus One is a pretty good phone to carry while traveling.
    • I love Vodafone.  (I like the name Hutch though.)  It just works wherever I go.  When other two phones we carried (BSNL and AirTel) were completely dead in Kashmir, my Vodafone worked just fine.
    • One way traffic is boring.  I'd choose old two-way highways any day.
    • It's amazing how well one can drive while sleeping.
    • I have wanted to be a cab driver for a while.  Now I think I'd rather be a truck driver.
    • I like trucks for their enormous size and beauty.
    • I like roads; I find them beautiful.
    • Traveling aimlessly and having time to spare lets you think free.  We should note that Pirsig wrote both his books while he was traveling.
    • On some national highway it was written that a good driver is seldom hurt.  I agree.

    Pilgrimage 2010

    I have always wanted to do this.  Take a map of India, draw a long line on it, and say "I am going to travel this route."  17th of July, I started on one such trip.  I covered 4842km on my bike (plus about 2200km using public transport, which is not of much importance).

    On the bike, I covered about 13 national highways and more than 20 state highways.  I would have approximately burned 105 to 110 litres of petrol.  Here's the rough route map of my travel, excluding public transport.  (Click on the picture to see it in the original size, or see the route on Google Maps.)  With me was my brother Saravanan, who took his bike from my native place Kovilpatti.  His trip is 1100km longer than mine.


    I couldn't believe myself when we started on 17th morning.  We kept riding.  As days went by we saw new terrains and new people.  Yet it was all only like a dream; I couldn't believe it was really happening.  Now, everything is over and I shall be at work tomorrow doing whatever I usually do; yet it still feels like a dream.

    PS: Pictures I took during this trip are available as a Picasa web album.

    July 01, 2010

    Android tips #2

    Some more Android features you might not be aware of.  My Nexus One has been updated to Android 2.2/Froyo, and I discovered a few of these features recently. So these features might be 2.2-specific.
    • You probably know that the Google Search widget on the home screen can search the contents of your phone too, from Android 2.2 onwards.  But did you know that you don't really need the Search widget to be on your home screen to use search?  You can simply press your phone's Search soft key when you are on the home screen, and that would bring the search UI of the widget (even if the widget is not present anywhere in any of your home screens).
    • You can type a phone number and dial it directly from your phone's search interface (either from Google Search widget or by pressing Search soft key when in home screen).  You can also type a phone number and create a new contact with that phone number from the search UI itself.
    • This is a feature I know I will be using very often, but I know it's not for everyone.  You can press and drag upwards on the soft keyboard to reveal two rows at the top that have numbers and few special characters.  Will be handy when having to type one symbol or a digit in the middle of a phrase.
    See also: Android tips.

    June 27, 2010

    This day

    Last month I was talking to my director at work, and I told him how much I hated Hyderabad and how badly I wanted to leave the city for good.  He said, among other things, that only when things are not going well at work the city gets to you and you want to move out.  That hit me hard, and I started thinking about it.

    Now I should say I am really happy with my work as such, and my life in general.  Last night I was sleepy by 9.30pm but suddenly got some idea and sat down to build something that a friend of mine can use in her blog.  That made me sit till midnight or so.  Woke up early this morning.  Tweaked the code I had written last night; spoke to the friend; got some feedback; planned something big for what we were doing.

    Then randomly I decided to go to office.  Went to office; helped another friend in his project; did some office work too while I was at it; went out to meet some friends; spent some time out; and now I am home, typing this.  Surprisingly, I was calm and driving responsibly on the road.  My blood pressure didn't rise when the car before me was just too slow.  I didn't cut anyone off in my urge to go past everyone.  I didn't swear much.  When people cut me off I did get irritated, but I didn't go mad like I do nowadays.

    Life is suddenly good.

    June 21, 2010

    Android tips

    I see that many Android users have difficulty in discovering features that are available in their devices.  In this post I am going to share some commonly unknown features/functionality of Android software.
    1. This is a question I have been asked several times by my friends who use Android.  How would you delete or forward a single message in an SMS conversation?  Long press is the answer.  Long press the message you want to delete or forward and you will get a menu that will let you do it.
    2. Android's built-in SMS app will not autocomplete phone numbers of your contacts that are not marked as "mobile".  Not everyone has correctly categorized phone numbers in their contact list, and it could be a pain.  There are two ways to solve it: 1. correctly classify mobile phone numbers as mobile numbers in your contact list; this can be hard to do.  2. Use a third-party app like Handcent SMS for messaging.  Handcent SMS lets you configure if you want to see non-mobile numbers while composing SMS.
    3. Let's say you have a phone without a physical keyboard.  You are in some UI where there is no text entry field, but you want to type something.  For example, imagine you are seeing your contacts list, and you want to find a contact by typing the contact's name.  (It's faster than scrolling and finding it.)  What you can do is long press Menu button, and that will bring the soft keyboard.  Now type the first few letters of the contact to filter the contact list.
    4. You know that all your Google Talk chat history is available in Gmail.  But did you know that you can search your chat log from within Android's Google Talk app itself?  When you are in Google Talk app, press the Search button and enter your search query.  This will show all chats that match your search query.  Opening a result would show you the chat log in the same way Gmail does.  You can even reply to that chat by email or chat from there itself.  This can be extended to other apps too.  Any app's search functionality can be activated by pressing Search key when you are in that app.  You press Search button when in home screen, it brings the regular Google search (or phone search in 2.2/Froyo and above).  You press Search button when in Gmail app, it brings the Gmail search box.
    See also: Android tips #2.

      June 20, 2010

      Apple products: why I don't want them?

      I watched the video where Steve Jobs was introducing the "multitasking" feature of iOS.  I think it's a clever way of doing multitasking.  Apple's principle seems to be not providing features for the sake of adding features; but to enhance the functionality of the device.  Also, Apple seems to focus on doing things right, rather than doing things first.

      What do I think of this as a user?  Let's think about one feature: copy-paste.  I agree that copy-paste is not a great experience on Android.  I have never used any iOS device, so I can't compare Android and iOS.  But I am inclined to believe that iOS does it much better than Android.

      Apple took the time to think about how to do copy-paste right, and they introduced it only in version 3 of their OS.  Had I owned a first generation iPhone, not having the ability to copy-paste on my phone would be a severe limitation to me.  Likewise, iOS devices don't do over-the-air syncing yet.  Maybe Apple will implement it in the "right way" at some point, and they might even prove that Android's way of syncing is inferior to what they can do.

      But it all doesn't mean much to me.  I think of myself as an advanced user who can figure things out when something is not working.  Even if it's a little sloppy, I want my features right now; I can't wait for my device manufacturer to think hard and get it Just Right.

      (I have more reasons for not wanting Apple products; this is just one in the list.)

      Running

      Living is running.

      You can run in the streets, smiling at people you see.  You can run in the beaches, listening to the waves.  You can run in the mountains, ascending towards the sky.  And you can also run on a treadmill in an air-conditioned room.

      June 16, 2010

      Random Thoughts: You

      You are what you see in others.

      June 13, 2010

      Random thoughts: Overcoming addictions

      When we're addicted to something, our addiction can use up (or waste, if you like that word better) a big chunk of our time and money.  On the other hand, addictions are the ones that let us stay sane.  Many people would go crazy if they weren't allowed to do what they were addicted to.

      Getting rid of addictions is not easy.  In fact, it can be one of the hardest things one would accomplish in life.  Let's say I'm trying to overcome my addiction for smoking.  Not smoking is not really the hard part.  Handling the vacuum that results from the 'non-smoking' is relatively very hard.  Addicts have designed their every day around their addiction.  They unconsciously or consciously allocate a portion of their days for their addiction.  When they quit, they have quite a bit of free time with nothing to do.  It's extremely easy to embrace their addiction back to fill that void.

      Many people say that you should say positive things and think positive things, and that being positive is good in general.  If I extend that to handling addictions, I can think of an approach.  Rather than saying "I don't want to do that," try saying "I want to do this".  Rather than spending your energy on "I don't want to smoke," focus on something like "I want to paint".  Now you are setting yourself up in a new environment where you have lesser time to smoke.  You're focusing on spending your time creatively.  That should be a lot easier than simply wanting to throw something away without any clue about what would you'd replace it with.

      June 10, 2010

      The world and me

      I have been saying this to myself for quite some time now.  Must be at least a few years.  Still I have difficulty keeping this in mind.  Very often I forget this and start to worry about unnecessary things.  Now I am going to say that to myself again, loud and clear: the world doesn't revolve around me!

      June 08, 2010

      Android task killers

      I think, if Android Market was like iPhone App Store, none of the task killer apps would have been allowed in Market.  Here's why.

      As I am writing this, a search for [task killer] in Android Market finds 88 apps.  All these task killers come in different sizes and colours and varieties; yet their primary function is one thing: kill the apps that are running in the background.  One of the first documents one would read when they learn Android development is Application Fundamentals page of Android Developer Guide.  It says:
      [An activity] is stopped if it is completely obscured by another activity. It still retains all state and member information. However, it is no longer visible to the user so its window is hidden and it will often be killed by the system when memory is needed elsewhere.
      This means that Android keeps an app in background because the user might switch back to that app in some time.  This work flow would be familiar to you.  You are reading an email in the Gmail app and you receive an SMS.  You open the SMS from the notification bar and reply to it.  When you are done with the SMS you press Back key of your phone and you are back in Gmail, in exactly the place where you left.  You can continue to do what you were doing in Gmail.  To make this possible, Android keeps Gmail app's state in memory.

      Let's say you don't come back to Gmail, but you open a game and start playing.  And let's assume this game needs a lot of memory.  Now Android would kill the Gmail app automatically and reclaim the memory used by Gmail.  It's given to the game you just started.

      Android keeps recent apps in memory that would otherwise be left empty and kills apps and reclaims memory exactly when it is required.  This lets you get back to the state in which you left an app so you can continue whatever you were doing.

      All these task killers do is kill the background apps immediately discounting the possibility that you might want to go back to the same app.  If you are thinking task killers make your phone faster, think again.  They are actually making you slow.

      June 01, 2010

      Buzz feed widget for your blog

      Google Buzz has a JavaScript API that lets you do several things with Buzz.  What I needed was a widget on my blog that would show my recent Buzz activity.  I spent a few hours and hacked up one myself.  Thought of sharing the code with others. (This code doesn't come with any sort of expressed or implied warranty. You can do with this code whatsoever you like.)

      The widget shows your 6 recent activities on Buzz.  It links to your Google Buzz profile at the bottom.  For each post, it adds a link to the Buzz item and shows number of likes and comments.  This was my feed at the time of posting:

      You can use this form to quickly add the widget to your blog:

      Buzz User ID What's my user id?
      Number of activities to show

      For now, I am sharing the code here.  I should build some simple UI where you would specify the parameters like no. of items to show, your Buzz user id, etc. and get the code customized for you automatically.  I should also upload the code to someplace prominent, maybe Google Code.  But I would take some time before I do all this.

      If you are adding this widget to your blog, don't forget to replace all occurrences of BUZZ_USER_ID with your own Buzz user id.  If you want to add this to your Blogger blog, but you are not sure how to do it, About.com has an article showing how to add any such widget to Blogger.  This is all HTML, JavaScript, and CSS.  So, you should be able to toss this code into any blog or web page and it should work.


      If you don't use Blogger, you can use the following code to get the widget on your blog.  (Don't forget to replace all occurrences of BUZZ_USER_ID with your own Buzz user id.)

      <style type="text/css">
      #buzz-widget {
        width: 95%;
        padding: 2px;
      }
      #buzz-header {
        text-align: center;
      }
      #buzz-footer {
        text-align: right;
      }
      #buzz-footer a {
        text-decoration: none;
        font-weight: bold;
      }
      .buzz-feed {
        padding: 0;
        margin: 0;
      }
      .buzz-feed .buzz-entry {
        list-style-type: none;
        text-indent: 3px;
        border-bottom: 1px dotted gray;
        padding: 0.5em 0 0.5em 0;
        background-image: none;
      }
      img.buzz-icon {
        vertical-align: text-bottom;
        width: 16px;
        height: 16px;
      }
      </style>
      
      <div id="buzz-widget">
      <div id="buzz-feed"></div>
      <div id="buzz-footer"><img src="http://goo.gl/TmmA" class="buzz-icon" /> <a href="http://www.google.com/profiles/BUZZ_USER_ID">View all buzz &raquo;</a></div>
      </div>
      <script type="text/javascript">
      function getVerb(verb) {
        verbs = {
          'post': 'Posted',
          'share': 'Shared'
        };
        return verbs[verb] || 'Posted';
      }
      
      function normalizeTitle(title) {
        var MAX_LEN = 30;
        if (title.length > MAX_LEN) {
          return title.substr(0, MAX_LEN - 3) + '...';
        } else {
          return title;
        }
      }
      
      function getAttachmentHtml(attachments) {
        for (var i = 0; i < attachments.length; ++i) {
          var atch = attachments[i];
          if (atch.type == 'photo' || atch.type == 'video') {
            return '<img src="' + atch.links.preview[0].href + '">';
          }
        }
        return '';
      }
      
      function getItemHtml(item) {
        var html = getVerb(item.verbs[0]);
        var linkUrl = '';
        if (item.links.alternate[0]) {
          linkUrl = item.links.alternate[0].href;
          html += ' <a href="' + linkUrl + '">' +
              normalizeTitle(item.title) + '</a>';
        } else {
          html += normalizeTitle(item.title);
        }
        html += ' on ' + item.source.title;
        if (item.object.attachments) {
          var attachmentHtml = getAttachmentHtml(item.object.attachments);
          if (attachmentHtml) {
            if (linkUrl) {
              html += '<br><a href="' + linkUrl + '">' + attachmentHtml + '</a>';
            } else {
              html += '<br>' + attachmentHtml;
            }
          }
        }
        
        var numComments = item.links.replies[0].count;
        if (numComments > 0) {
          html += '<br><img src="http://goo.gl/Y4eU" class="buzz-icon"> ' +
              numComments + (numComments > 1 ? ' comments' : ' comment') + '&nbsp;&nbsp;';
        }
        
        var numLikes = item.links.liked[0].count;
        if (numLikes > 0) {
          if (numComments > 0) {
            html += '&nbsp;&nbsp;'
          } else {
            html += '<br>';
          }
          html += '<img src="http://goo.gl/0l9D" class="buzz-icon"> ' +
              numLikes + (numLikes > 1 ? ' likes' : ' like');
        }
        return html;
      }
      
      function showFeed(response) {
        var entries = [];
        var items = response.data.items;
        for (var i = 0; i < items.length; ++i) {
          entries.push(getItemHtml(items[i]));
        }
        document.getElementById('buzz-feed').innerHTML =
            '<ul class="buzz-feed"><li class="buzz-entry">' +
            entries.join('</li><li class="buzz-entry">') +
            '</ul>';
      }
      </script>
      <script type="text/javascript"
          src="https://www.googleapis.com/buzz/v1/activities/BUZZ_USER_ID/@public?alt=json&max-results=6&callback=showFeed">
      </script>