Monday, December 13, 2010

Unlocking the iPhone (and lessons learned)

Phone: iPhone 3GS

Started: iOS 4.1 / Baseband ??.??.?? / Jailbroken & not unlocked

Finished Product: iOS 3.1.3 / Baseband 6.15.0 / Jailbroken & unlocked running T-Mobile

Tools: iReb-4.0.x-4.1, redsn0w 0.9.6b, iTunes 9.2.1 & 10.1, ultrasn0w 1.2, TinyUmbrella, XP & 7

Picked up a iPhone 3GS on Craigslist for my dad in India this weekend. It was jailbroken on iOS 4.1 but not unlocked which meant it couldn't be used outside AT&T in the US. What started out as a quick hack to do the carrier unlock turned into a dedicated weekend project resulting in the phone being nearly bricked.


The Cult of saurik
For those who have never jailbroken an iPhone before (like me), it is a challenging and a very good learning experience. Unlike the first iPhones which needed a hardware unlock, today's jailbreak and unlock is just a software hack. All the tools that you need are available on Web (and free). Unless you have no idea what you're doing, there shouldn't be a need to pay someone to unlock one.


The basics: Jailbreaking is done to run any code on the iPhone, not just authorized software from Apple over iTunes. Unlocking an iPhone is the process by which you can run the phone on any carrier, not just AT&T (in the US). Jailbreaking affects the iOS by patching the phone firmware whereas unlocking is done by exploiting vulnerabilities in the baseband or the modem firmware. However, to unlock an iPhone it is necessary to first jailbreak it and install Cydia, the rogue app store. Once Cydia is setup, ultrasn0w can be downloaded to unlock the iPhone.

Current State: iOS 4.1 / Baseband ??.??.?? / Activated / Jailbroken & not unlocked


Rookie Mistakes & Panic Attack #1
After getting the iPhone home the I immediately noticed that it was jailbroken and running ultrasn0w but couldn't figure out why it wouldn't accept my T-Mobile SIM card. The reason, I found out later, is that ultrasn0w does not unlock all versions of the baseband. Figuring that jailbreaking again couldn't harm the phone, I downloaded redsn0w 0.9.6b and tried unlocking the phone. My source so far was just Youtube videos made by 13 year olds. I must've not done the process correctly as my iPhone went into recovery mode showing only the Apple logo on the screen.


Not knowing what happened, I googled this and it took me to a website which suggested that I reboot the phone and let iTunes restore it from recovery mode. Here's where I made my first mistake - letting iTunes download the latest version of iOS (4.2.1) and install that on the phone. Once that happened, the phone went into the unactivated state and would only accept an AT&T SIM to activate it.


Current State: iOS 4.2.1 / Baseband 5.14.04 / Un-activated


Saturday morning, I went to the AT&T store to see if I could get a pre-paid SIM to activate the phone. The rep informed me that pre-paid SIM could not be used to activate an iPhone and I'd need a new 2 year plan (which I believe is untrue). I decided to make the $25 investment on the pre-paid SIM as the last resort and see if could hacktivate the phone in any other way.


Here's where I learnt something very interesting. You can download all the versions of iPhone's firmware from Apple's website to be used by redsn0w to jailbreak your phone. But jailbreaking without activating the phone is useless. Also, once iOS 4.2.1 is setup on the phone, Apple will NOT allow you to downgrade to a lower version. To do that, you will need a software called TinyUmbrella which fools iTunes to authenticating locally instead of the downgrade getting rejected by Apple's servers. I could go on for hours about I had to resurrect an old machine running XP to use TinyUmbrella, but I will spare you that for now.


Even after downgrading to iOS 4.1, the phone would not activate without an official Apple SIM. After some additional research, I found a website with an activated version of iOS 3.1.3. To get this firmware on the iPhone, I needed to have TinyUmbrella for the Apple server caching and iTunes 9.2.1. It took a while but it worked! I had an activated & jailbroken iPhone running iOS 3.1.3. But Apple doesn't give up that easily. When I first upgraded to iOS 4.2.1 I must've unwittingly upgraded my baseband to 5.14.04 which is not unlockable by ultrasn0w.

Current State: iOS 3.1.3 / Baseband 5.14.04 / Activated but locked


Bricks and stones may break my iPhone ...
The only way out now was to upgrade to the iPad baseband 6.15.0. The iPhone dev team has big warnings about this - do not upgrade to this version yet as there is no way to come back to v5. Also, this voids the warranty on the phone (doesn't concern me). Still, there wouldn't be a good story to tell if I didn't do it. But somewhere along the process, everything froze and all I got was the iPhone back in the recovery mode. Restoring to iOS 3.1.3 firmware again, I realized that the iPad baseband did not get patched correctly and my Wi-Fi, bluetooth and cellular functions were all disabled. I was running a glorified iPod touch.


Current State: iOS 3.1.3 / Baseband **Broken**

Upgrading back to the factory 4.2.1 was not helpful. The phone would not even show the activation screen and stayed on the Apple logo. Now, I had a semi-bricked iPhone in my hands. iReb could not put the phone on DFU mode for some iTunes could not restore the phone even to the unactivated state. Rebooting everything helped but iOS could be restored to its original state.


Current State: Bricked?

Finally after some research, I found a custom 4.2.1 firmware which worked and brought the iPhone back to the activation screen. It still wouldn't show the IMEI number which meant that the baseband was still messed up. Next, jailbreaking using redsn0w and restoring the iPad baseband back to 6.15.0 (it worked this time) got me to the activation screen showing the IMEI number. The only thing that would hacktivate my iPhone at this point was downgrading to 3.1.3 which I did as outlined before. Finally, installing ultrasn0w unlocked the 6.15.0 baseband and voila! I had an iPhone 3GS running on T-Mobile.


Current State: iOS 3.1.3 / Baseband 6.15.0 / Jailbroken & unlocked running T-Mobile (Yay!)

For now, I'm going to stick with iOS 3.1.3. Hacktivated iOS 4.1 is supposed to have battery drain issues and I don't think my father will miss multi-tasking too much.


Lessons learnt:
1. Learn thy jargon. I'm usually pretty thorough about this but before I started toying with the iPhone, I had no idea that the firmware was different from the baseband. I did not know which which basebands could be restored by ultrasn0w. I also did not know that you could do a custom restore of the iOS by clicking Shift + Restore on iTunes. Had I known these things, the unlock process would have gone much smootly.

2. Trust the hackers. When the iPhone dev team advises you to not upgrade to the 6.15.0, DON'T UPGRADE TO 6.15.0. At the same time, I had no choice given that the phone had already upgraded to baseband 5.14.04 for which there is no known unlock.

3. Know thy tools. I was surprised to see that there are dozens of tools out there depending on what you want. iReb, limera1n, purplera1n, blackra1n, TinyUmbrella, redsn0w, ultrasn0w, sn0wbreeze ... the list goes on. Most of them are pretty easy to use.

4. Youtube is the new Google. There are dozens of videos on Youtube showing you how to unlock the iPhone. Produced by 13 year olds and wannabe R&B artists, they're the next best thing to iPhone forums.

Update (12/26/2010): Got Backgrounder from Cydia. Bye Bye iOS 4.1

Thursday, July 29, 2010

A first look at Ubuntu Netbook Edition 10.04

I had Ubuntu 8.04 LTS (Hardy Heron) installed on my Eee PC soon after I purchased it in 2008. Netbooks had just started appearing in the marketplace and Asus was a pioneer with the Eee 701 and then with the Eee 901. At that point Hardy Heron was not designed to be used on netbooks and I had a constant struggle between feature limitations of Linux vs the lack of responsiveness in Windows XP. There was talk of a netbook version of Linux and several vendors (Canonical, Intel) were various stages of development.

Cut to April 2010, Ubuntu is finally out with its 10.04 netbook edition. My frustration with my XP on my Eee PC is mounting on a daily basis and I use it primarily to remote to my Windows 7 HTPC box so that I can use it in my study. Watching Flash videos on Windows is a nightmare and multitasking is next to impossible. I am afraid to update Ubuntu 8.04 as the WiFi drivers break every time a major update is made. Having some spare time, I finally decided to make the switch to the new version of Ubuntu.

Try it before you buy use it!
One of my favorite things about Linux is the ability to try it without having to install it on your system. Ubuntu 10.04 (Lucid Lynx) has made it much easier to download the image to a Live CD / flash drive with complete instructions on their website. My first impressions with the Live CD were really good. The OS booted up in less than a minute. WiFi worked right out of the box and I was able to play around with some of the pre-installed applications.

Usability
One of the first things you will notice in the Netbook Edition is the menu bar which makes it very easy to navigate around to different sections of the OS. The mouse is a little difficult to use on the menu screen with a single click on a icon automatically opening up the application instead of highlighting it. All open applications are shown as icons in the top pane and the abundance of keyboard shortcuts makes it very easy to switch around between applications and the main menu.

Wifi Drivers
One big pain with the prior versions of Ubuntu was the lack of default WiFi drivers. Once Linux was installed you would have to manually download and install the drivers over an Ethernet connection. Though the MadWifi drivers worked quite well they would get uninstalled with every major update. The 10.04 drivers now work right out of the box as I mentioned before and I was easily able to connect to my WPA enabled router. Updates did not break the wireless drivers either.

Move over Firefox, Chrome is here
The default Firefox browser was one of my biggest gripes with Hardy Heron (and with 10.04). It was a great replacement for IE when it first came out in 2002/03 but over the years has turned slow and clunky consuming a lot of memory. I tried installing Google Chrome on 8.04 but the lack of latest updates which I refused to install because of the WiFi issue (see above) would result in Chrome crashing as soon as it started. Although Firefox is the default browser in Ubuntu, users can easily download Google Chrome and it works wonderfully in 10.04.

Chat, Mail & Social Networking
An integrated communication icon now allows users to setup new mail, chat and social networking accounts. Evolution is still carried over from previous versions of Linux but has a much easier setup procedure and I was able to quickly connect to my Gmail account via IMAP and synchronize my email. Empathy IM, the default messenger application, has a much slicker interface compared to Pidgin which I was using in 8.04 and supports Google Talk, Yahoo!, MSN and Facebook Messenger.

Skype – choppy sound?
Although I did not get a full chance to test Skype on 10.04, the sound quality was choppy while making a test call and I could not see the video of the other person although they could see me. Something to investigate and I believe should be fixable.

Flash
Steve Jobs is right about this one. Although it revolutionized Web content delivery for desktops, Flash is not meant for meant for small Internet devices. Flash is optional to install on Ubuntu but the responsiveness while watching Youtube videos on my netbook was much better than Windows, where I would have to wait until the whole video loaded before I could watch it.

Productivity Software
Since Oracle took over Sun, Openoffice has undergone quite a revolution. Openoffice 3.2 starts much faster, has a consistent look and feel and I believe will be a smoother transition for existing Windows users. Note: Much of this review was written on OpenOffice Writer.

Bridging the Geek / Novice Gap
One of the great things about Ubuntu is what it has done to bridge the geek / novice gap for Linux. Their design philosophy has made it much simpler for beginners to start using Linux and provided a much needed alternative to Windows. Personally, I believe the three major items that are needed to get Linux to mainstream are:
  • OS / Applications working right out of the box
  • OS does not need technical expertise to use
  • Large software ecosystem that is easy to get and use.
Ubuntu addresses the first point quite well. I have not had a chance to use it in different hardware but the advent of open source drivers has made it compatible across multiple platforms. The adoption of version numbers as opposed to code names (Gutsy Gibbon, Lucid Lynx) has given Ubuntu a more mainstream feel with users. On point two, Linux as a whole is still generally behind the curve. Ubuntu has made great strides on making Linux simpler to use but simple things like different terminology and the lack of “familiar” use and feel keeps new users away from it. Also the lack of pre-packaged applications due to the various flavors of Linux results in having to download the source and install it - which doesn’t sit well with novice users.

Other thoughts
If you need to connect to a Windows machine, rdesktop works quite well although I have not been able to get a working GUI version of it. Ubuntu 10.04 does not support Netflix either - or should it be the other way around? Overall, the new version is really usable and I would definitely recommend it for netbook users who want to make a switch.

Tuesday, December 30, 2008

Google News Blackberry Storm Blunder

Just saw this headline on the Google News ...

I mean c'mon - Blackberry Storm isn't even on the AT&T network! Unless the RIM engineers found a way to bring down those iPhone users.

I for one welcome our new outage causing overlords! :)

Sunday, September 28, 2008

Using Blackberry 8830 as a tethered modem over Bluetooth on Ubuntu

I was recently toying around trying to get my Blackberry 8830 to work as a tethered modem with my eee pc running Ubuntu 8.04 LTS. This was one of the last hurdles keeping me from switching over to Ubuntu on my eee pc completely. I had to switch over to Windows XP everytime I needed to connect to the Internet on the road. After searching high and low I found what I needed on the Ubuntu documentation website. The following is just a reproduction of the same with specific details for Sprint Blackberry 8830.

These are the details of what I have:

Device: Blackberry 8830 (World Edition)
Carrier: Sprint
Laptop: eee pc 900
OS: Ubuntu 8.04 LTS (Hardy Heron)

My laptop does not have built-in Bluetooth so I picked up one of those USB dongles.

The following is a one time setup before you can use your device as a tethered modem.

Before you get started, first make sure you have bluez-utils and ppp installed on your machine.

$sudo apt-get install bluez-utils ppp

Next, make sure your phone is discoverable and run the following:

$hcitool scan

This will give you something like:

Scanning ...
xx:xx:xx:xx:xx:xx your_device_name

where xx:xx:xx:xx:xx:xx is your device's mac address.

If you haven't paired your device with your laptop yet, do so using the following command,

$sudo hcitool cc xx:xx:xx:xx:xx:xx

On my machine this opened up the Bluetooth Preferences window where I was able to enter the shared passkey and pair the two devices.

Next, check your device to see on what channel Dial-Up Networking runs.

$sdptool search DUN xx:xx:xx:xx:xx:xx

This will return something like:

Inquiring ...
Searching for DUN on xx:xx:xx:xx:xx:xx ...
Service Name: Dialup Networking
Service RecHandle: 0x10002
Service Class ID List:
"Dialup Networking" (0x1103)
"Generic Networking" (0x1201)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 3
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100

As we can see from above the RFCOMM channel for this device is 3. This is what we use to modify our rfcomm.conf file as follows:

$sudo pico /etc/bluetooth/rfcomm.conf

and paste the following into the file.

rfcomm0 {
bind yes;
device xx:xx:xx:xx:xx:xx;
channel your-phone-rfcomm-channel;
comment "Bluetooth PPP Connection";
}

Save and close this file.

Running the following will create the rfcomm0 device:
$sudo /etc/init.d/bluetooth restart

Running rfcomm on your machine should show that it is connected to your Blackberry.

$rfcomm
rfcomm0:
xx:xx:xx:xx:xx:xx channel 3 closed

Next, we will configure PPP.

$sudo pico /etc/ppp/peers/BluetoothDialup

and paste in the following:

debug
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/BluetoothDialup"
usepeerdns
/dev/rfcomm0 115200
defaultroute
crtscts
lcp-echo-failure 0

Save and close this file.

Next, edit the chatscript file. I found that the Verizon file in the Ubuntu documentation worked just fine for Sprint too.

$ sudo pico /etc/chatscripts/BluetoothDialup

and paste in the following

# abortstring
ABORT 'NO CARRIER' ABORT 'ERROR' ABORT 'NO DIALTONE' ABORT 'BUSY' ABORT 'NO ANSWER'
# modeminit
'' ATZ
# ispnumber
OK-AT-OKL3 ATDT#777
# ispconnect
CONNECT \d\c

Save and close the above file.

pon and poff are two commands to start and stop ppp connections. You'll use these to enable and disable Dial-Up Networking on your Blackberry everytime.

$pon BluetoothDialup

You should see "Modem Mode Enabled" now on your Blackberry. Try pinging any public website and see if it responds.

To turn off Dial-Up Networking simply type

$poff

That's it. Enjoy your tethered Blackberry modem!

btw, if you need to use your Blackberry 8830 as a modem over Windows XP, the software can be downloaded from here.

Saturday, July 26, 2008

Estimating the value of pi

Here's something I learned recently and found quite interesting. A neat way to calculate the value of pi using estimation is to take a unit circle inside a square of side 2 units and take random shots on the surface of the square.

unit circle in square








Now, the ratio of the area between the circle and square can be given by,

pi*r^2/L^2 = hits/shots




Thus, we can estimate the value of pi as,

pi=4*hits/shots




Now, I wrote a little script in Python which does just that. I also put in the value of pi to 10 decimal places and wrote out the error produced. Initially, I didn't take a circle of unit radius but that just produced too much error:



import math;
import random;
import sys;


#calculate the value of pi using probability
maxtries = float(sys.argv[1]);


radius = 1.0;
side = 2.0 * radius;
tries = 0.0;
hits = 0.0;
pi = 3.1415926536;


while (tries < maxtries):
tries = tries + 1;
#get a point within the square


rx = random.random()*side;
ry = random.random()*side;


#distance from center of circle
dist = math.sqrt(math.pow(rx - radius, 2.0) + math.pow(ry - radius, 2.0));
if (dist <= radius): hits = hits + 1;


#estimated value of pi
piest = (hits*4/tries);
print "Radius: %d, Tries: %d, Hits: %d, pi: %1.10f, Error:%1.10f\n" % (radius, tries, hits, piest, piest - pi);





My output looks something like:

~$ python pi.py 10.0
Radius: 1, Tries: 10, Hits: 6, pi: 2.4000000000, Error:-0.7415926536

~$ python pi.py 100.0
Radius: 1, Tries: 100, Hits: 83, pi: 3.3200000000, Error:0.1784073464

~$ python pi.py 1000.0
Radius: 1, Tries: 1000, Hits: 790, pi: 3.1600000000, Error:0.0184073464

~$ python pi.py 10000.0
Radius: 1, Tries: 10000, Hits: 7822, pi: 3.1288000000, Error:-0.0127926536

~$ python pi.py 100000.0
Radius: 1, Tries: 100000, Hits: 78591, pi: 3.1436400000, Error:0.0020473464

~$ python pi.py 1000000.0
Radius: 1, Tries: 1000000, Hits: 786368, pi: 3.1454720000, Error:0.0038793464

~$ python pi.py 10000000.0
Radius: 1, Tries: 10000000, Hits: 7853556, pi: 3.1414224000, Error:-0.0001702536

~$ python pi.py 100000000.0
Radius: 1, Tries: 100000000, Hits: 78539696, pi: 3.1415878400, Error:-0.0000048136

~$ python pi.py 1000000000.0
Radius: 1, Tries: 1000000000, Hits: 785382068, pi: 3.1415282720, Error:-0.0000643816

The last observation is the most interesting. It ran for a few hours on my machine but did absolutely nothing to improve the error. In fact, the error actually increased!

Wednesday, July 23, 2008

glibc on Ubuntu

About 6 months back I worked on an interesting project for school where we were developing a checkpointing application. My goal was to port the software onto Ubuntu where it some reason would not work. I initially put a query on ubuntuforums.org to which I never replied and people have queried me on and off about whether I did get an answer to this issue. So before the project information gets deleted from my school wiki, I'm going to put the full problem statement and solution here.

Checkpointing is a technique for storing the state of a process in order to recover it at a later point. Checkpointing is used where there are long running processes, saving the state of scientific applications to execute different conditions from that state or cases where debugging of processes is required. The different approaches to checkpointing include:

a. Kernel Level Checkpointing
b. User Level Checkpointing
c. Application Level Checkpointing

In Kernel Level Checkpointing, the operating system is modified to support checkpointing for
applications. This is the most transparent but the least efficient of the approaches. Here, the operating system does not know anything about the application and simply dumps the memory into a file for later restart. An issue with this approach is that the changes required in the kernel to support checkpointing will be different for each OS. User level checkpointing allows the user to link the application to the checkpointing framework in order to make the application checkpointable. With application level checkpointing, the developer of the application implements checkpointing within the application itself as the person has detailed knowledge about the application. At the same time this approach has the least amount of transparency and it is very difficult to migrate the checkpointing approach from one application to another.

In DMTCP (Distributed MultiThreaded CheckPointing) we study a user-level checkpointing technique used to restart or migrate a process. DMTCP works at the socket level so it can checkpoint applications without requiring modification to either the operating system or the application. DMTCP operates using a checkpoint control process which sends messages to a checkpoint manager thread about each process. The manager then uses signals to gain control of other threads before checkpointing. Our term project will be to study DMTCP and to test it for different application and to extend DMTCP to applications using LAM/MPI.

The first problem that we tackled was to port mtcp to Ubuntu. We noticed a problem when we first tried to run dmtcp on Ubuntu 7.10. When trying to run just mtcp mtcp_restore used to give a segmentation fault.

After debugging through the code, we traced the problem to the mtcp_sys_munmap() call in mtcp_restatic.c. Looking at the memory maps gave us something like this:

08048000-080be000 r-xp 00000000 08:07 594167 /home/vsriram/dmtcp/mtcp/mtcp_restore
080be000-080c0000 rw-p 00075000 08:07 594167 /home/vsriram/dmtcp/mtcp/mtcp_restore
080c0000-080e3000 rw-p 080c0000 00:00 0 [heap]
4001e000-4002c000 rwxp 4001e000 00:00 0
bfa6d000-bfa83000 rw-p bfa6d000 00:00 0 [stack]
ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]

The problem occurred when unmapping the heap area of the memory. We figured that the error would be either with the Ubuntu Linux Kernel or with glibc. This is because mtcp works fine in other Linux distros like Suse or Red Hat and even Linux versions prior to 6.10. The only other calls were to the Linux Kernel and glibc libraries. The next steps were to put printk statements in the kernel and see where it gives an error or to compile a vanilla glibc and see if the error was still reproducing using the glibc libraries.

We first approached the problem by trying to re-compile glibc. glibc would not compile easily on Ubuntu and it gave an undefined reference errorwhich we could not resolve even by setting the CFLAGS environment variable to -fno-stack-protector. So, this approach was abandoned in favor of recompiling the kernel and putting printk statements in the kernel code. After doing this and recompiling the kernel, we noticed that the sys_munmap() system call returns without any issues. This meant that the problem lay outside the system call.

As no system calls (even printf) can be called after the return from the sys_munmap() sytem call we decided to put while(1); statements to see till what points the application would continue (or in this case hang) without breaking. While doing this we could go upto the highest_userspace_address() call in code. The first thought was that the function does not exist in the address any more and this was leading to a segmentation fault.

We then recompiled mtcp_restatic.c to an assembly file (by using gcc -S) and put the assembly code for the while(1); loop in the mtcp_restatic.s file and recompiled the assembly code to an object file. This was to see if the program counter could enter the highest_userspace_address() method.

Assembly code for while(1); loop is shown below:

.L170
jmp .L170

At this point we found that the error occurs during the reference to %gs:20 which is a segment register referencing a memory location which is in the heap. Googling this lead to an interesting webpage where they talked about stack protection in Ubuntu which might be cause of this issue.

We read about Stack smashing protection where canary values are placed between a buffer and control data on the stack to monitor buffer overflows. When the buffer overflows, the first data to be corrupted will be the canary, and a failed verification of the canary data is therefore an alert of an overflow, which can then be handled. The canary values are inserted in by gcc while compiling the code.

The assembly code below sets the canary value at the beginning of the function.

movl %gs:20, %eax
movl %eax, -8(%ebp)

The assembly code below checks if the value of the canary remained the same. This code is placed at the end of the function.

movl -8(%ebp), %edx
xorl %gs:20, %edx
je .L179
call __stack_chk_fail

After the canary checking assembly code was removed from the assembly code and compiled to object code, the highest_userspace_address function worked fine but it failed further on. This validated the hypothesis that the segmentation fault was because of the reference to the memory location in the heap which by then was already unmapped.

Adding -fno-stack-protector to gcc (in the Makefile) before compiling the entire mtcp code removes the default stack protection and mtcp works fine after that.

Saturday, March 29, 2008

Close encounters of the arranged kind

Well, at last time has come for me to take the path that billions have before me. Much as I fight it, I have been convinced by the elders that my time has come. And so the hunt begins for the perfect bride. But fundamental flaws exist in this search and the basic one is with the filters that my parents use to hunt for the right girl. In their mind the perfect bahu should be devotional, god fearing, family oriented - basically, the whole nine yards (of sari).

Me, I'm a much simpler person. All I ask for is someone who is independent, ambitious, intelligent, talented, reliable, with good taste, reasonable, full of imagination, adapting, sensitive, physically fit, loyal, modest, charming, popular, hard working, honest, empathetic, spontaneous, affectionate, musically inclined and having a good sense of humor.*

This leads to my parents filters being misaligned with mine. As I shall explain using the following diagram,

And thus the girls that my parents select do not fall into my criteria.

Anyhoo, my parents became serious and tried to hook me up with this girl from Chennai. Four years younger to me, she was just out of college and had been working with a software company for the past few months. My mom made some mumbling excuses on why she had to travel to someplace south of Chennai to see a few temples that were high on her list and used that trip to just "casually" meet with the girl and her parents. Deciding that the girl was good match for me they soon sent me her email address. With that, I sent her a sobering mail writing a bit about myself, what I do, my hobbies etc. The next day, I got a reply back from her - "About me, what can I say? :))))))))". As I say to anyone who asks - smiley, smiley, smiley, smiley, smiley, smiley, smiley, smiley.

Not that I have anything against someone full of innocence and a sense of hope and a outlook towards life. Five years after graduating from college working full time, I've been marinated to near perfection with a generous coating of sarcasm and skepticism. I felt like Groucho Marx with a can of herbicide just waiting to spray it on a blooming flower on a spring morning.

Even then I decided to take the next big step and talk to her.
From the getgo, things were not well. Her polished Tamil was far different from the Mumbaiya one I'm used to at home. On the other hand, she didn't speak a word of Hindi. Five minutes into the conversation, I realized how much the culture from two cities can separate people - even those with similar backgrounds. At some point when I was describing to her my hiking activities, she asked me if I had a big "gang" over there. For a few moments there, I had a J.D.-like daydream, with me and my friends dressed up in biker leather outfits with chains and baseball bats. I wound up talking to her mother a little bit later and after what I thought was end of the conversation kept the phone definitely deciding against the marriage alliance. I called up my mother and explained her the reasons why it wouldn't work and though she was disappointed there wasn't much I could do about it.

Five minutes after I finished that conversation, I checked my messages and lo and behold there was an email from her - "hey why u kept the phone?" My stomach churned for a minute. Do I reply to her? Would that mean I haven't said a no? And what do I say to her? "Oh, I'm sorry, I thought our conversation was quite finished." "Sorry, you're chucked." "Next ...". As I said, Groucho Marx and and a can of industrial strength herbicide ...

Someone, someday should publish a book on arranged marriage etiquette. Maybe I will for all the Gen-X ones who will get trapped into arranged marriages - once I go through with it. And no, that was NOT an argument against arranged marriages. I have heard both the pros and cons of arranged marriages and the jury is still out on it.

For True Love,

Ramudu

*OK, I totally picked that up from a horoscope website. For someone with the above talents, she would have birthdays in all the 12 signs. I also really wanted to put in "has precise sense of judgment and expects complete fairness" but have no idea what a person with that characteristic would be like. And on a extreme tangent, did you know that empathic also means "
Having the capability to share the emotions of another through psychic means." That's a great quality to have. Girls, call me ...

Friday, February 15, 2008

A tale of two nail clippers

So, I was in need of a new nail cutter. My old one just disintegrated into pieces when I was using it a couple of weeks after I came back from India. And of all things I did get from India, the one thing I did forgot to buy was a 20 rupee nail cutter.

What's the big deal, you ask? Just head out to the nearest store and buy one. The problem was, I just didn't know where I could get one - if I could get a nail cutter here at all. In the land of the free (and the home of the brave) where electric toothbrushes and power razors were the norm, I didn't know whether anyone actually used a good ol' fashioned nail cutter. In my mind, everyone here owned a box type electric device - something like the electric pencil sharpener - where you could put your finger in and it would neatly trim your nails. Probably in the higher end models the device would wax and clean the nail plates, apply nail polish if you were a woman and say a little thank you at the end. Yes, I do let my imagination run wild once in a while.

Much to my misery I realized that I hadn't seen one Hollywood movie with a scene in which one of the characters was shown cutting their nails. I jogged through my memory to remember movies with scenes taking place in beauty salons. After running through the likes of Legally Blonde where I hoped for some hint towards the trimmed and neat fingernails of Americans, I wasn't one bit closer to getting a solution. I'm guessing its some sort of Hollywood conspiracy against the nail cutter manufactures - probably didn't give a good deal for product placement.

By this time I was sneaking into friends bathrooms during dinner invites to their place looking for nail cutters and using them without their consent. I'd spend so much time in their bathrooms that I'd shady looks when I came out. The nail biting finish of Super Bowl XLII helped for a few days. But I still hadn't found a permanent solution.

I wasn't daring enough to walk into a CVS Pharmacy and ask for a nail cutter. God knows whether the sales rep would understand what I was asking for. This is a country where a "cool drink" turns into soda, a "giant wheel" becomes a "Ferris Wheel", college becomes a school and you don't pass out of it - you graduate from it. So I shudder to think what a nail cutter would be called? Damn these cultural differences! Also, every time I head into a CVS asking for something I get wierded out looks from the rep that I've stopped going there altogether.

Finally, one weekend I mustered the courage to ask my cousin if there were nail cutters available in the US where I could get one and what it was called here. At first he just sat there staring at me for a few seconds. When he finally did reply that "nail clippers", as they were called here, were available at any pharmacy he had a look of incredulousness on his face - I guess it was the most dumbest question anyone had asked him.

The next day I sneaked into a CVS and quietly headed towards the beauty section before any of their overly helpful staff could come near me. And there it was! A nail clipper just like the ones from home. In a true showing of American capitalism the nail clippers, which were probably sourced for less than a dollar, were priced
obscenely at $3.99 - on sale! But what the hell ... I bought two just in case someone actually does invent the electric nail clipper and they stop carrying the good ol' ones!

Case closed.

P.S. I should have just Googled nail cutters or nail clippers and would have probably saved myself a lot of trouble - but I guess it wouldn't be this funny. I voluntarily renounce my title of Google King that was given to me by my friends after I "proved by search" that 1 + 1 = 2.

Thursday, December 27, 2007

Been a long time since they rock n' rolled

I'm a little late in writing this and most news stories about the concert have already disappeared off the Internet search engines. But this story will never grow stale in the hearts and minds of their purest fans. After all, 11 million people around the world applied for a mere 20,000 tickets. That is one yardstick to remind the world of the greatest rock n' roll band that ever played.

I'm not going to hide my unabashed adulation for Led Zeppelin, so let this serve as a warning - this article is written with extreme prejudice! But one has to admit - when Jason Bonham, son of the erstwhile drummer John Bonham, bows down to Jones, Page and Plant during the concert as if to say "I'm not worthy", there is an aura of aweness that is created around the band.

For some, this reunion was long overdue. One does not build the Sistine Chapel of music to fade out into nothingness. And when they did come back to give remembrance to the man who brought them to limelight, it got them the whole world's attention. Well before the concert there was speculation about their individual abilities. Page's broken finger brought in more rumors as to whether their live performance could rival those of their glory days. After all, their last gig twenty something years back created bitter tensions among the band members factioning Page and Plant against Jones.

But this concert dispelled all such rumors. When Page pulls out a violin bow for the solo of "Dazed and Confused", there is a certain mystical property attached to the scene. Any doubt of Robert Plant's ability to hit the high notes were quashed when the band played "Since I've Been Loving You". John Paul Jones once again showed himself as the band's most versatile player while on the clavinet in "Trampled Underfoot". Bonham showed his worthiness amongst his elders while hammering at the drums.

When Plant screamed "We did it, Ahmet!" after the most anticipated song in the playlist "Stairway to Heaven", he did not just evoke the emotions of the band but of all their fans around the world. They are a rare coalition of individual talent, likes of which come maybe once in many lifetimes.

Now that the O2 gig is over, the calls are for a reunion tour. Maybe they will come back again or maybe this one concert will serve to remind of their everlasting greatness. But as Kurt Cobain said, "It's better to burn out than to fade away..."

Monday, November 26, 2007

PLAYING TO PEOPLE'S HEARTS

I had a little time after dropping my cousin off at the Battery Park waterfront to see the Statue of Liberty so I decided to do a little sightseeing myself, considering how little of New York I know. After touring inside Castle Clinton, I walked around to see some of the street performers in the park. There I met a wonderful violin player named Dave. As people walked by, Dave would ask where they came from and whip out a little tune on his violin depending on their country of origin. And he seemed to know it all - from India's Jana Gana Mana to China's March of the Volunteers. People happily sang to his tune and some were very generous in their offerings to Dave.

As the crowds thinned out a little after of one ferry docked I asked Dave if I could take a picture of him playing the violin. He enquired as to whether I was from the Philippines and when I told him I was an Indian, he quickly played the Indian national anthem as I took his photograph.

Later, he sat down and told me that he was from Trinidad and explained that he had several jobs in the United States until his love for playing the violin got him performing in New York. As he carefully removed coins from his violin case so they wouldn't get lodged inside the sounding board of the violin, he explained that performing in New York had become very difficult after 9/11. Now, he had to get a city permit and pay taxes and could get evicted if he didn't divvy up.

Asked whether people were always generous in their contributions as he played their country's music, Dave explained that people mostly liked it but a few were offended. He told me about an elderly Indian gentleman who had told him earlier that day that the national anthem was reserved for only certain special occasions and should not be played by the likes of him to make money!

When I asked him about the jobs he held before becoming a street performer he mentioned that he was a security guard in Texas. All was well until one day, after worsening crime rates, he was given a gun by the security company. "Guns kill people!", Dave said, and after refusing to handle a gun he quit his job and headed to New York.

As the winter sun started to set, Dave started packing his equipment, saying he would have stayed on longer if it were summer. There were more ferries till later in the day during summer and consequently more crowds. As we said our good byes I told him I'd certainly try to come and see him play again the next time I was around the area.

It was a different experience talking to Dave and I don't think I've ever sat down and talked so long with a street performer. They are usually small part of our lives and we don't remember them as much as the big ticket attractions. But it was fun to watch him play to people's hearts and to see the pride that comes out of people when they hear their national song being played.

Saturday, November 10, 2007

My friend

I have a friend.

A friend who relishes his dark and melancholic existence. He has all the things need in the world, yet he desires for something - not a material thing - which pushes him into this darker life.

How can I describe my friend? He is not the sharpest of the lot but not too dull either. Yet, he wants to be smart and intelligent like the people he reads about everyday. Those who accomplish so much in their lives, some younger than him, and achieve so much fame and fortune.

Music makes my friend sad. Not that he does not like music, no, he loves music. Music is a big part of his life. Yet listening to the melodious of tunes makes him somber. Oddly, he finds this gloominess quite uplifting. My friend is not a musician though. Not that he has any talent be one. He has seen and read about musicians achieving so much success in their career only to be destroyed by adulating fans who leave them for the next big act. Their lives spiraling down a moral decay into a vortex out of which they can never come back. Artists who, after falling from their glory days, seek solace in alcohol and drugs to overcome their depression to ultimately find their untimely end from the barrel end of a shotgun. No, my friend is characterized by more of a thoughtful sadness, one which he thinks will follow him to the last throes of his life.

My friend has friends. Not too many of them. He enjoys their company and they his. But at the same time he keeps his distance from them. Never can anything too personal come between them. His deepest thoughts are his own and they are too sacred to be shared with even the closest of his acquaintances.

This is the story of my friend. I just thought you'd like to know.

Are you my friend?

Thursday, October 25, 2007

.net license files

I've been working on an issue with getting licenses to work with Janus Systems Controls and have the controls work when my application is deployed. When assemblies requiring licenses are deployed, you have to create a .license file using a License Compiler and then embed the same into your application using the Assembly Linker. Thankfully Visual Studio does all this for you when you are using assemblies requiring licenses. This is done by creating the licenses.licx file (which resides under the Properties folder) and then embedding the .license file in the output of the project.

The issue that I had was when I migrated my code from one development machine to another the licx files were not copied over and therefore there were no licenses embedded with the new application output. Since I had Janus Controls installed on my development machine I did not face any issues but when the application was deployed the end users would get an unauthorized application error whenever a form using one of Janus controls was shown.

Unfortunately, Janus Systems is an obscure little organization having no real support for their controls (most of the world has moved to Infragistics), but I did get some help from a co-worker. Here are the troubleshooting steps for all those who face the same issue that I did:

If you have problems with licenses it can be because of the following reasons:

a) The Original Licensed Setup is not installed in your machine at the time you compile the application.

b) The BIN folder in your solution contains a copy of the TRIAL version of the dlls instead of using the LICENSED version of the controls. To solve this problem you need to delete the OBJ and BIN folders of the project and do a full rebuild in a machine where the Trial Setup was removed and the LICENSED setup is installed.

c) The name of your exe contains spaces in it or you have renamed the exe after compiled.

d) There is no licenses.licx referenced in your project (note: The CustomBuild action for the file must be set as Embedded Resource)

e) One of the controls that you try to deploy is not listed in the licenses.licx file of your project at the time you compile your solution. If this is the case all you have to do is to edit the file using notepad and add the appropriate controls.

The points noted above are not limited to Janus. These are troubleshooting steps for any application requiring licenses.

If it is an issue with the licenses.licx file for Janus, the following entries are required in the same (if you are using Janus Controls v2):

Janus.Windows.ButtonBar.ButtonBar, Janus.Windows.ButtonBar.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.CalendarCombo.CalendarCombo, Janus.Windows.CalendarCombo.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIButton, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UICheckBox, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIColorButton, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIColorPicker, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIComboBox, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIFontPicker, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIGroupBox, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIProgressBar, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIRadioButton, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.ExplorerBar.ExplorerBar, Janus.Windows.ExplorerBar.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.EditBox, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.IntegerUpDown, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.MaskedEditBox, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.MaskEdit, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.MultiColumnCombo, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.NumericEditBox, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.NumericEdit, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.ValueListUpDown, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.GridEX, Janus.Windows.GridEX.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.Schedule.Calendar, Janus.Windows.Schedule.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.Schedule.Schedule, Janus.Windows.Schedule.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.CommandBars.UICommandManager, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.Dock.UIPager, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.Dock.UIPanelManager, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.StatusBar.UIStatusBar, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.Tab.UITab, Janus.Windows.UI.v2, Version=2.0.1131.0, Culture=neutral, PublicKeyToken=21d5517571b185bf

For v3, here are the entries required in the licenses.licx file:

Janus.Windows.ButtonBar.ButtonBar, Janus.Windows.ButtonBar.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.CalendarCombo.CalendarCombo, Janus.Windows.CalendarCombo.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIButton, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UICheckBox, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIColorButton, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIColorPicker, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIComboBox, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIFontPicker, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIGroupBox, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIProgressBar, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UIRadioButton, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.EditControls.UITrackBar, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.ExplorerBar.ExplorerBar, Janus.Windows.ExplorerBar.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.CheckedComboBox, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.EditBox, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.IntegerUpDown, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.MaskedEditBox, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.MaskEdit, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.MultiColumnCombo, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.NumericEditBox, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.NumericEdit, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.EditControls.ValueListUpDown, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.GridEX.GridEX, Janus.Windows.GridEX.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.Schedule.Calendar, Janus.Windows.Schedule.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.Schedule.Schedule, Janus.Windows.Schedule.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.TimeLine.TimeLine, Janus.Windows.TimeLine.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.CommandBars.UICommandManager, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.Dock.UIPager, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.Dock.UIPanelManager, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.StatusBar.UIStatusBar, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.UI.Tab.UITab, Janus.Windows.UI.v3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf

For v3.5 replace all of the above Version=3.0.0.0 with Version=3.5.0.0 and add the following:

Janus.Windows.Ribbon.Ribbon, Janus.Windows.Ribbon.v3, Version=3.5.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.Ribbon.OfficeFormAdorner, Janus.Windows.Ribbon.v3, Version=3.5.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf
Janus.Windows.Ribbon.RibbonStatusBar, Janus.Windows.Ribbon.v3, Version=3.5.0.0, Culture=neutral, PublicKeyToken=21d5517571b185bf

Now, make sure the bin and obj files of the project file are clean and then recompile. You should be all set!

Saturday, March 03, 2007

My theory on life

This is from my old Orkut 'About Me'.

Life ... is like the scene from the movie 'Swordfish' where Hugh Jackman has to hack into the NSA in 60 seconds while getting a b*** j** from a hot blonde and with a gun pointed to his head. Sometimes in life you're Hugh Jackman, getting it but certainly not savoring the moment. Sometimes you're the blonde giving it - just doing what you gotta do (but which is really demeaning) and yet thinking, "I'm going to tell ALL my friends that I gave Hugh Jackman a blow job!". Sometimes you're the guy with the gun thinking, "Man, that could've been me on the hot seat." because he knows no matter what happens, Hugh Jackman's not going to get his brains blown out. Somtimes you're the computer, which if it had a mind of its own, would be thinking, "Damn Hugh Jackman! I do all the grunt work here and what do I get? USB cables shoved inside me!!!" And finally, sometimes you're the guy in the theater eating popcorn going, "I paid $10 to watch this crap??!!!!"

Tuesday, October 31, 2006

Depressing times are back again!

Yes, ladies and gentlemen, its that time of the year again when the lights go out at 5 in the evening. Last Saturday, we turned the clocks back an hour (fall back, spring forward). While the holiday season begins now here in America - Halloween, followed by Thanksgiving in about 20 days and Christmas a month later, this time of the year just depresses me out (I'm like Marvin the Paranoid Android). By the time I get out of office in the evening, it is pitch dark. Why, oh why, do they have to push the clocks back? Coming from a tropical country it just feels so unnatural for it to be totally dark at 5 in the evening...

Friday, October 27, 2006

Indians and American politics

I was in my network class last Monday where the professor, an Indian, was teaching us about a paradox in network theory. So he goes, "This example is little counter-intuitive and some of you may not be able to grasp it immediately. Can someone give me more examples like this?", when a student, an American, blurted out, "The war in Iraq!". There was uncomfortable silence for a second before the class started laughing and professor with us. But we see could the discomfort in his face. He paused for a second neither asserting nor denying the statement before continuing, "Let me give you a more non-political example."

While the remark made by the student was definitely not on a serious tone, the professors refusal to even acknowledge the comment got me thinking - why are Indians so uncomfortable talking in public about American politics? This was not a one time incident. In my previous job, the manual which we had to go through before coming to the client location says - while you may talk with the client regarding non-business related topics refrain from talking to them about politics and other such sensitive issues.

Before coming to the United States, this made a lot of sense to me. Clearly, you don't want to jeapordize the relationship with the client by expressing an opinion which may hurt them. But it is after coming here that I've realized how much Americans value the idea of free speech. I had a manager whose step-son is currently serving in Iraq. She once told me, "Jared was always brave. After 9/11 he thought of nothing but signing up with the Marines. Though I respect what he does, I don't believe in this war (in Iraq) and what the President (Bush) is doing to this country." I just nodded and said nothing.

There have been other cases too. The person who used to sit next to my cubicle at my old job is a liberal and is always talking about hot button issues and how the Republicans are ruining this country. He and his neighbor, a Briton, were always having heated debates on American politics. While I and a few other Indians listened in sometimes, we never contributed our thoughts to these discussions.

Some may think that the reason behind this is that Indians don't know much about American politics, but that again is clearly not the case. I listen to talk radio all the time and know others who do too. I know as well anybody else the current candidates for the Massachusetts governor race and what these candidates stand for. We all are updated on a daily basis on the war in Iraq and can't escape it as it shows up on every television news channel. We know all about the scandals that happen in Washington and what the opinion polls say about who is going win the mid-term elections in November. But why is it that we are afraid to talk in public about what we know?

I know that many Indians do talk amongst themselves about American politics. I was at my cousin's place for lunch once when we had a very lively discussion about the Massachusetts governor race and the candidates. But we don't show the same level of enthusiasm while talking about this with Americans. Why? On the contrary, Americans are very interested about knowing how the Indian political system works, the parties, about India-Pakistan relations and such. They even speak out their mind on these things if they have any knowledge of it. After the recent bombings in Mumbai, everyone in my office came to me and others from Mumbai to talk about it and try to understand (from our limited knowledge) how it happened and who might be behind it.

My neighbor (whom I mentioned before) from my old job always used to tell me that it is important that I express my opinion about issues here as what happens affects me directly as I live here. I am not a citizen but I do pay taxes to both the state and federal government - and a lot of it :(. And the US Constitution guarantees me the freedom of speech and expression.

Yet...

Thursday, October 26, 2006

Microsoft sends a cake to Firefox team




Saw this on Slashdot today and thought it was pretty funny. You should reads the comments that people wrote there. I especially liked this one:

Has anyone actually verified that the cake is in fact from Microsoft?

I can hear the phones ringing....

Mozilla secretary: Mozilla- home of Firefox and Thunderbird, how many I help you?
Microsoft secretary: This is Ursula from Microsoft's browsers division- we didn't send a cake...
*phone drops*
****DON'T EAT THE CAKE!****

Or perhaps upon closer inspection, there were flakes of white powder on the bottom of the cardboard...


Saturday, October 21, 2006

Tribute to Ashutosh Kendurkar

Ashutosh Kendurkar, or 'Ashu' as he generally known is a friend of mine and an wonderful amateur photographer. I die for the close up photos that he takes during our treks (one good reason to take him to such treks) which make some really amazing wallpapers. Below are a few beautiful shots that you can download and enjoy.





Tuesday, October 10, 2006

What you ought to do when you don't get cellphone reception!


I always crack up laughing when I see this photograph. It was from our whitewater rafting trip to Maine where we made Sharad get on top of the SUV so that we could get in touch with the other party.

Saturday, October 07, 2006

Maiden Boston

Went for Iron Maiden's concert at Boston Univeristy last night. They've started touring for their new album "A Matter of Life and Death" and this was a part of the North American leg of their tour.

I've been planning this since September but never went out to get the tickets. By the time I did go out to get the tickets, they were all sold out. So Ankur & I decided to go to the stadium and see if there would be anybody trying to sell off their tickets there. But on Friday morning - the day of the concert, I found a guy on Craigslist who wanted to sell his two tickets for $40 each - ten bucks BELOW face value!! I drove to 20 miles, got the tickets - which were e-tickets which means he could've duped me by selling them to others. Thankfully that didn't happen - may Eddie bless Sean Delaney from BC Law! Dude, thank you!

I usually like to put blog entries with photographs but couldn't do that this time as there were no cameras allowed inside. By the time we reached the gates, it was 7:40 and the opening act by Bullet for my Valentine had started. I'd didn't think of them much anyway.

Iron Maiden started at around 8:30 PM. T
hey started out with songs with AMOLAD and played the whole thing non stop. Then they played Fear of the Dark (to which the whole stadium sung along with them) and Iron Maiden (have no idea why they chose this song) and went offstage.

They came back when the whole stadium called for an encore and played 2 Minutes to Midnight, The Evil That Men Do and finished off on a high note with Hallowed Be Thy Name - a total thrill ride!

Bruce Dickinson's onstage performance was absolutely fantastic. He kept the crowd entertained with his antics - jumping around, running around the set and of course with his standard line, "Scream for me, Boston. Scream for me." Dave Murray went crazy with his guitar and started throwing it around (in the air) around the end of the show.

The set that was prepared was
unbelievably great. Since AMOLAD is a war themed album, they had a huge stage tank (about 20 feet in size) in the back of the stage with a gun and a turret (which rotated) out of which eddie came out in the end with lighted eyes and stuff. Halfway through 2 Minutes to Midnight a 10 foot tall eddie came out dressed in WWII (or was that WWI?) fatigues and with a machine gun (sure there was a guy with stilts inside it), pretends to shoot everybody on stage and goes back.

The crowd was also an extremely enthusiastic lot - a LOT of old timers. Half were drunk and the other half were high . There was a couple making out heavy duty right in front of me - imagine, making out in a Maiden concert with all the noise and din - couldn't figure out how they managed to do it. Now, I've seen it all!

On Fear of the Dark, i jumped up on my seat and started headbanging due to which i lost my balance completely and fell on my friend right behind me. Thankfully, he caught me else there would have been a domino effect in our row.

Still recovering from a sore throat and neck...