Thursday, October 2, 2008

The Py-t(h)onic

Few weeks ago, out of sheer curiosity, I started to have a look at this new scripting-cum-object-oriented language capable of doing almost everything that C++ can do, and more. And I can't tell how mesmerized I am with this fantastic language. Thank god, I thought about giving Python a go. A whole new world has opened up for me. Because of the virtuosity of Python, now I am feeling very confident and capable of actually leveraging various ideas that I keep thinking about. Previously, with C++ it was a bit difficult because its core set of functionality is limited, and it's a pain to go searching for good third-party libraries for each and every aspect of desired functionality, may it be text processing, regexes, web-development, xml processing, or simply, connecting to - say - a mySQL database. Count the overhead of typing and thinking so much just for some small (maybe a PoC) snippet, and you subtly lose the all-important enthu to get it going.

With Python, it all becomes very much palpable. The language itself comes with tones of important 'batteries' of functionality, already included. You can do almost everything conceivable with Python, in a very small amount of time, and that too in a concise and goody-goody way in all aspects. Because of this, you tend to spend almost all your time on solutioning, rather than wasting it in that unnecessary wrestling-with-finer-aspects of the base language. If you are a C++ programmer, and have developed a huge liking for the language (like I have), and hence are adamant enough to even think about any other language (like I was), I would strongly recommend you to spend some time with Python. You won't regret it.

Here I don't intend to project Python as an alternative for C++ (haah!) as there will always remain a performance penalty in an interpreted language as compared to a compiled language (which happens to be closer to the system). But it also depends upon how many of our ideas are actually performance-centric. If you think a little performance gain (think quad-core) can be squandered in favor of an impressive line-up of features, Python is for you. Few of the features offered by Python are – very clean syntax, loads of functionality already included in the language, strong support for OOP paradigm, better portability. Python offers an all-in-one development platform which can be used to develop everything right from the lower-level database persistence mechanism to the web-based GUI. All this, in a very graceful way. That's one of its biggest advantages.

As you might already be aware, the new C++0x standard is coming up with a host of 'new' features for C++, like lambda functions, tuples, regex processing, multi-threading support etc. But if one has to compare, for Python, this is not new at all, it is already present in there, and is very easy to put to work. That is again one more advantage in using Python – no overhead involved for using heavy-duty functionality, with minimal error handling requirement. For example, if you want to use a dictionary in Python, all you have to do is –

Mydict = {<key1>:<value1>, <key2>:<value2>}

That's it. As simple as that. Now you can access the dictionary like a dynamic array in C/C++.

What is more, you can pack the punch in you code in a very concise manner, by clubbing a lot of functionality together. Take a look at following code –

While most of the code is easy to read and understand, for those finding it difficult to understand, let me state my intention behind writing this small snippet of code. Generally, in the unix world, most of the utilities expose their (powerful) functionality through command-line-arguments. Hence, processing these command-line-arguments is one of the most basic requirements, we can say, for a unix utility. Now neither C nor C++ offer any help in getting this done quickly. So what entails this requirement, is the head-ache of string processing, multilevel switches, and a lot of error handling. If you have worked in such a situation before, I am sure, you would empathize with me.

Now in that context, have a look at the python code snippet above. The program defines couple of functions to handle different command line args. Then it defines a dictionary with the command-line-arg and its corresponding handler as the key-value pair. After that, there is no switch, no string processing, nothing. All it does is, pass the 1st argument as a key to the dictionary, get the corresponding handler function, and call it. If required, pass on the remaining command-line-args (if any) to the handler function. All of this in one single statement! It is not only quick, it is elegant too, as you can see. If you come back to your code even after few months, you won't get lost in the quagmire of huge amount code that has very little to do with the actual intention of writing that program.

It is this utter simplicity and elegance offered by Python, that hooks you to this language.

I can tell you about one practical example at my workplace, where I could leverage Python to do an important job of analyzing a log file, very effectively, and that too very quickly.

I wanted to analyze a log file, generated by a time-profiler class which I had written to keep a watch on performance gain achieved through various tuning activities. The time-profiler utility logged method-name, number of records processed and the time taken for it all. Now since the number of calls were in the range of around 40K, visual analysis was not on the cards. So I had to write an utility which would find out the first five calls taking maximum amount of time and corresponding number of records processed, for a given method-name.

For this, I required to process the command line to understand which method is to be analyzed. Then I needed to read the log file, find out all the logs from the logfile which correspond to the given method-name and store the records-processed and time-taken figures with a one-to-one relationship. After that, one sort operation would be required to get the first five records, with maximum time-taken figures. After this sort, the one-to-one relation between the number-of-records-processed and time-taken shouldn't be lost at any cost.

Had I have implemented this in C++, I would have wasted a lot of time in writing a lot of code dealing with the nitty-gritty's of above mentioned things. Instead, I decided to give Python a try, even though I wasn't very much familiar with Python back then.

I came up with a working utility in almost half an hour doing everything mentioned above!!!

This became possible because, as I have been stating again and again, Python offers an impressive set of inbuilt functions and modules, which can effectively do away with the need to spend time on the basic needs. For example, I needn't spend much time on things like –

  1. Processing the command-line
  2. File reading and string processing to find out which lines belong to given method name
  3. Storing the time-taken and number-of-records-processed as key-value pairs in a dictionary (didn't require any STL manipulation overheads)
  4. Sorting the keys (time-taken) in descending order (didn't require any operator overloading)
  5. A LOT of error handling at every stage

Everything was intuitive and hence I was able to find out references for desired functionality, very quickly. I didn't need to spend a lot of time into reading the manuals to find the right method for the job, then check for type-compatibility (due to dynamic typing, another 'controversial' feature of Python) etc etc

That was when I realized, how productive one can get with this powerful language. Allowing the user to focus on the solution, rather than the underlying language, is the most celebrated feature of Python. And I would strongly suggest you taste (and test) it once.

Monday, August 18, 2008

Biking: A Visit to Torana Killa

How often does it happen that you plan an outing after a grueling week and the outing turns out to be an experience to be treasured for a long long time? Well, that is what I felt after I came back from my half-day bike tour en route Torana Fort, one of the jewels in the Maratha Empire setup by Shivaji Maharaj in his time.

These days i.e. after I got my bike, on every Saturday morning, I go out for a short outing somewhere nearby Pune. I have found that the rejuvenation that you get from such an outing is a perfect medicine to counter the stress that gets to us during the week's time. Especially for a software engineer. To bust the stress we usually splurge our hard-earned currency on things like shopping, movies, eating out etc etc. While I am not saying that these are wastages, I do believe that these things don't always bring with them the peace-of-mind, the happiness that we are seeking in the first place. They stop making any difference after a while. The 'gyan' part aside, all I am trying to say is if we are ready to spend a couple hundred bucks on petrol, there is a pleasant surprise awaiting us. All that you need to do is just feed your bike with enough juice to last for around 100 miles. There are a lot of scenic sites that will leave you spell-bound. The greenery, the fresh air, the silence, the solitude, the history (if you are inclined) of the places, the ghats, the passes, the roads less travelled, the laid-back and completely out of touch villages, the little children along the route and their antiques-due-to-ecstasy seeing a bike (which happens to be yours), the 'wow-factor' in their eyes and a big smile on their face ….. …. …. … it's just amazing. Whatever it is, it's very rejuvenating, and it goes to have a calming effect on you. Anyways, enough gyan.

So, I started for Torana fort on my bike on one fantastic Saturday morning of 9th August 2008. There was a slight and pleasant drizzle, not much wind, completely overcast, no sun. In short, a pleasant monsoon weather, perfect (IMHO) for a long bike ride. For the starters, you need to go to Sinhagad while going to Torana. From Sinhagad, take a right towards Khanapur and from Khanapur, there are two routes to go to Torana. Madhighat-Pabe pass-Pabe-Welhe-Torana Fort is one route. While the other one is to head straight to Panshet Dam and from their go to Welhe using the Kadhave Pass. I used the former route while going, and the later one while coming back.

1 Road leading to Khanapur - Near Sinhagad

After you take a left from Khanapur village, starts a very scenic ghaat called Madhhi-ghaat. It's a kind of dense forest on both sides of the road and the atmosphere is like - as if some big cat might pop-up from any side of the road – you know - just to say hi to you.

2 Madhhi ghaat starts ...

This road takes you to the top of the hill and you can find a spot there from where you can enjoy a breath-taking view of the valley down below. I parked my bike near a turn where I felt like there is a good spot out there. The drizzle was heavy now. I was in a hurry to get there and I was finding stones to hop on, I stepped on one and arrrggghhh … cow-dung (curbed the urge of using the BS word)… was what is was! Fresh at that. For next couple of minutes I cursed the eternity while simultaneously I was trying to get that thing off my floaters. Finally when I came back to 'senses', I found this amazing view into the valley below. Eventually I realized, I was actually standing on top of the hill.

3 A Dream home in a heaven like this would satiate one for a life-time

By now I was really missing my camera. I had to use my cell-phone based 2MP camera to capture this heavenly beauty.

I roamed around the hill for some more views and then started back towards Torana. Along the route, I found the roads to be in drivable but bad condition. Also there were no boards on few of the bifurcations. I lost my way a couple of times because of this and had to come all the way back from some totally unknown village which has only one small bridge as a link to the outside world. Check out the bridge in the picture below –

4 The lifeline for a village - only 1 bike can go in any one direction at a time!

The bridge was so narrow (and in a very bad condition) that only one bike could somehow manage to cross it in either direction at a time. The biker would be in constant fear of the bridge collapsing due to the weight and falling into the stream below.

Then started the Pabe ghaat leading to the Paabe khind. This portion being remote from the hustle-bustle of the Pune city, the traffic on the road was almost non-existent. Hardly a few bikers here and a few there. The area is full of huge mountains, and hence very scenic because of the greenery in the monsoon. So overall, the equation was - small roads, absolute silence except for the bird-chirping, huge mountains, nobody on the roads, zig-zag turns through the ghaats, splendid views on the valley side of the ghaat and the distant greens and mounds and mountains visible due to the height at which you are driving. Truly it's an experience to savor.

5 Huge hills draped in green - very poetic

6 Am I in Europe?

I let the view sink in and slowly reached the top of the hill near the pass – Pabe Pass.

7 Pabe Pass - bears a board indicating routes for the forts in the area

After the Pabe pass, starts the road down-hill to the Pabe village. This latter half of the ghaat is equally scenic and breath-taking as was the first. From Pabe village, there is a bifurcation. For Rajgad fort, you need to take left, while for Torana you should take right. So I took right, and in 15-20mins (because of the good roads and a hitch-hiker cum guide) I reached the base village of the majestic Torana fort – Velhe. As per the local guy who hiked a (free) ride on my bike from Pabe to Velhe, the Torana fort is very dangerous to trek during monsoons because of the very steep and slippery routes and other live dangers like abundance of snakes and scorpions. According to him, summer is the best time around the year for this trek. So I shelved my (non-existent and very weak if existent) plan of parking the bike somewhere and actually doing a trek uphill, till the summer. Interestingly, I hear from my friends, that they don't allow you to stay there on Torana fort in the night as the locals fear there are ghosts up there. Even the regular people from the village always climb down in the evening. This proposition makes the trek and the stay, even more adventurous.

8 The majestic Torana fort as seen from the road to the base-village of Velhe

So with a desire of trekking on the fort in the near future, I started my journey back towards home. While coming back, I decided to take a different route than the one that I took while coming. So rather than going through the Pabe pass, I started for the Kadhave pass which connects Velhe and Panshet dam and the surrounding villages. Again, the Kadhave pass is the route that Shivaji Maharaj took while starting out for a famous attack on Surat to win it and connect it to his empire. So being a historically inclined, it was an added turn-on for me to imagine and live the things, the way people would have lived four centuries ago.

Initially it looked like I am in for a majorly pleasing route back home. Initially I found a weird animal farm which hosted the Imus – some creatures that looked like an ostrich. I was seeing them for the first time in my life.

9 Imu Farm

Then next on my way back, I found a waterfall big and noisy and scary enough to give an adrenaline dose to my fatigued mind and body.

10 Big, very noisy and hence scary waterfall, that I met in the ghats while coming back

The noise, the size, and the force with which water was flowing really made me nervous at the thought of doing what they call as white water rafting. I really love and fancy being part of a team that is in to these kinds of adventure sports. It's really fearful to wrestle with that monstrous a force. It sets my heart pounding. But I subscribe to the school of thought where they say to face your fears and do the things that scares you a lot. That helps in building your guts. That makes you strong. I find this thinking, somewhat similar to the Chinese acupressure technique, in which they ask you to keep pinching that acupressure point in your body that hurts most when pinched. After incessant pinching, that point stops hurting anymore and your associated ailment goes away with it.

Anyway, I took some pics of the waterfall from different angles and again started my reverse journey. From here started my ordeal. Even through the surroundings were scenic and beautiful, I was driving for almost 4-5 hours now and my body had started talking. I was feeling a bit of travel fatigue. To make the matter worse, the road that I was driving on now, had started deteriorating very fast. It reached its pinnacle of being a pain-in-the-ass when the actual ghaat section started. To top it all, I lost my way and went deep into a pathetic road toward a village called Antroli. A board at a bifurcation had been set to show the wrong direction! The damn thing cost me almost half an hour of highly painful driving experience with my lower back going for a toss. I started for Paanshet dam again, this time of the correct route, but still the road condition was not at all good.

11 The pathetic road in the Kadhave Ghaat section

The road was very small, just enough for a couple of bikes to squeeze in somehow. Other surprising thing was, during my whole journey of around 20kms, I didn't meet a single bike, let alone a 4-wheeler, passing in either direction. Not even a passer-by was there treading that route! If your bike starts throwing tantrums mid-way, you are done. You don't have any other option but to beg your bike for mercy. If something happens to you, there is nobody to help you there; absolutely nobody. The place is completely deserted.

So after driving my bike through that scary route for almost an hour or so, at a miserable speed (because of the road conditions), I reached the Kadhave pass.

12 Kadhave Pass

From the other end of the pass, one can have an amazing view of the valley covering the Paanshet and Varasgaon dams and adjoining areas.

13 View of the Valley from the other end of Kadhave Pass

Apart from the view, there is a very little encouragement from here, as you can see that for the next 10-15kms you have to traverse a similar torturous route, which has been killing you till now.

With a lot of frustration and cursing, I somehow completed the punishment and once the route came back to being smooth, my bike was racing towards pune at a blinding speed of around 70-80kmph. I was consistently touching the nineties for small durations. The speed was again bringing back my spirits. The road was smooth, and heads were turning when my bike passed. So it had started getting pleasant again …. I was quickly forgetting the pain in the last leg of my journey and the blowing wind, raining skies, scenic ghaats, and the valleys and mountains laced with a lots of shades of greenery everywhere, were soothing the mind …. I was feeling very relaxed and rejuvenated …

Wednesday, August 6, 2008

Sex and the City

I have become a fan of Sarah Jessica Parker after I saw this movie. I haven't seen any of her other movies. Neither had I seen the original soap which aired on HBO by the same name. So the movie was a complete surprise for me … a pleasant one at that. Everything about this movie clicks. The movie doesn't have a 'strong' storyline viz-a-viz a Bond movie or a Batman movie. It's a story about four New York women, who happen to be close friends, and their intermingled lives; the lead story being that of Carrie Bradshaw (Sarah Jessica Parker) and her boyfriend (or manfriend as she calls him) Mr Big, and what happens in their lives when they decide to marry on Carrie's insistence as she wants to be a smart girl and have home for herself.

One can very much relate to the movie and it appears to be very realistic at many points. One would be when she throws her cellphone into the sea out of anger, and comes back to New York, the movie shows her disgusted about having a new New York extension for her new cell, as opposed to her older one which happens to be a central New York extension. Another would be when the marriage is over in a shocking manner, and she is at her friend's house, when it dawns on her that she no more has any clothes to wear apart from her wedding gown as she had moved into her new apartment (her after-wedding love-nest) and filled the (superb) closet (prepared for her by Big as promised) there with her clothes. Any other director wouldn't have given a damn about these 'trivial' things, but this is where this movie stands out.

Smart, humorous, touching dialogues is yet another reason one remains glued to the movie. The chemistry between Big and Carrie is very graceful. Add to that the scintillating smile of Sarah Jessica and the innocence that exudes from that effortless expression, and it becomes a treat to watch this movie.

The scenes that I liked a lot from the movie are when Carrie and Big are discussing about a possible marriage when Big says that he wants Carrie, and if marriage is the way that will make her happy then he won't mind it either. Or when in the final sequences, she goes to pick her $450 shoes from the apartment closet (because the new owners are due), finds Big standing there, runs into his arms narrating it as love taking over logic, and then explains to him the 'fun' part in their ordeal as – 'all the sorrows and agonies in their life started when they decided to live happily ever after!'

All in all, a fantastic movie. Must watch, especially for those who love watching romantic movies with scintillating dialogues and fantastic chemistry between lead characters.

Sunday, July 27, 2008

Hello World!

The customary first post …. Living up to the programming languages lingo and traditions …

A little bit about what this yet-another-blog is going to be about in future. I intend to (b)log my thoughts, my experiences etc etc though this platform. That also means, in case you decide to keep reading it, you will also need to put up with revs and rants and sarcasms and euphoria that I fall prey to, time and again. Also I must confess of my inclination towards using some gentlemanly, suave expletives (like the f-word). So in case you are a child, go away. Even though you are going to use to these words when you grow as old as me (or even before that, who knows), you are not expected to start this early. Go play with hamsters.

Coming back to the mainline, this is the first time I am blogging anything; so by no means I promise quality right from the word go. But will try to keep it interesting.

So stay tuned … if I may say so!

It is kinda weird to appeal to stay tuned to your blog, when you know you can't have a reader base initially, before probably getting few interesting posts under your belt. But hey, though it was weird, being weird is in vogue these days. In fact, being weird is probably the most essential thing for becoming a celebrity and hogging limelight …..…… Somebody said Rakhi Sawant? Ssshh … Bad boy!


 

Stay tuned then …. ;-)