The Ranting Neel

Support World AIDS Day

Wednesday, January 17, 2007

Interaction with Upper Management

In my company, it isn't everyday that you get a chance to interact with upper level managers over a significant period of time. We had that chance this past week; for the past two-three days, our managers had come down to our little city with the express purpose of listening to us talk about stuff, and also to give us the "gyan" on the direction of future releases of our product. It was very illuminating in many aspects, and while it would be impossible to compress the entire period of interactions we had into one blog, I decided I'd start from the end, and detail the last meeting we had.

The topic we picked up today was "what makes a world-class team?". While I feel that there were times when we got a little side-tracked, it was an interesting exercise in thought. I mean, the one thing which I have observed is that the higher you go, the more the propensity to using slogans and catchwords, buzzwords, etc. as opposed to clearly defined statements. Well, while we did start out a little with a lot of buzzwords ("bolvachan" is what I think the typical Puneri would put it :-D) I found to my satisfaction that the more we talked, it became increasingly clear that we had begun to narrow down and focus our thoughts on what exactly makes up a World Class Organisation.

Well, one of the items of discussion that came up were Personal Growth. I personally regretted the term used, to me, it represents a BROAD range of topics. When I talk about "personal growth" I could be referring to anything from, say, increased monetary compensation, to increased responsibilities at work, to being asked to undertake new activities which require a steep learning curve, I mean, it could be how tall I grew in the last three months!!! You see... very general.

Well, the point of the meeting was that once we came up with these "pointers to being a World Class Team" we'd have to spend time grading ourselves on each "pointer". Well, when the time came for "personal growth", I found myself (to the surprise of quite a few colleagues of mine, and myself as well, to be honest) raising my hand and expressing the opinion that we have some way to go.

I find it increasingly clear that I was justified in having reservations about the usage of the term "personal growth". The reason there was surprise expressed by my peers is because (and this is my opinion of what they think) the general consensus is that I have consistently been getting important and challenging stuff to do at the workplace.

You know what the worst part is? They are absolutely right. And what's even worse (if such a term could be applied) is that when I expressed the opinion that "personal growth" was lacking, was that I wasn't disputing the "consensus" at all. Yes, I have had a LOT of really good work to do here. At the risk of sounding petty, I had more... monetary concerns.

If I may belabor the point, while I understand that the level of responsibility you are given, and the opportunity to work with new technologies and increasing your knowledge of your field are, in itself, an indication of your progress within the company, a consistent approach to compensation would definitely go a LONG way towards ensuring an employee's loyalty. To me, money isn't the yardstick by which I judge success, however, money is a very good spur to higher achievements! I mean, wouldn't the expectation of a high salary be just what you need to find the enthusiasm to come to the office every day? I do know that its what keeps ME going. Plus, a guy needs to get beyond starvation wages at some point in his career, doesn't he :-p ?

I'll try my best to share some more experiences of the time spent this week. Watch this space.

Monday, January 08, 2007

The Aussies take on Bollywood :-)

Want to see a really weird song :-)? Here you go, here's a song jointly sung by Asha Bhonsle and, hold your breath, Brett Lee!

Tuesday, January 02, 2007

A Good Year :-)

Got a letter of congratulations from my manager. That's when I finally realized that I'd managed to finish one year in BMC.


Its been a trip, no doubt about it. I've had many ups and downs, but I have to admit, i've never been bored.

I started off in QA testing (Quality Assurance), which is a really vital function, but I really wanted to see if I could put my programming skills to the test.
Well, I'm on my way now, and I'm loving every minute of software development.

I don't know yet if I'm the best at it, but I do know that I love the work, the long hours, all of it! I mean, I finally get the reason Lee Iaccoca (former
president of Ford and Chrysler) decided to switch to marketing/sales from engineering early in his career. For me, software development is where the action is!

When I started out, I was just one more engineering graduate out of the many that litter this city. We're sort of like locusts, there's that many of us :-p.

It wasn't very easy searching for a good job. More than that,you cannot believe how tough it is to know that you were born
to be good at something, to have that really rare gift of really liking what you do. Knowing that, given the chance, you'd give it
your best shot.

Well, BMC Software did that for me. It gave me a shot. And I haven't always scored, but I've always been in the game.

And I don't think that's too bad now, is it?

Monday, January 01, 2007

Have A Little Patience - Take That

Hadn't heard from this band for years... then I see this song playing on Zee Cafe in "Best of 2006". I'd recommend that people listen to it... its pretty good! Very James Blunt-like :-)!

Sunday, December 31, 2006

Wishing Everyone A Happy New Year!

Saturday, December 30, 2006

A nice quote

"You can't make an omelette without breaking some eggs" - Stalin.

Nuff said.

Tuesday, December 26, 2006

An implementation of "inheritance" in C

Warning. Technical post coming up, non-geeks might want to look away :-)
I'll confess. The idea isn't mine, the concept behind it I got from looking over some code by a guy called Arthur Van Hoff. For those unfamiliar with the giants of the Java programming language, Arthur Van Hoff was one of THE original writers of the Java compiler.He's been responsible for cleaning up a lot of the implementation behind Java, in addition to contributing significantly to the Java Applet API. And later, he founded a company called Marimba, which was taken over by BMC Software, and this is the product line that I'm working on right now.

Anyway, the background was given to illustrate a point: Arthur Van Hoff was an eminent kick-ass programmer of his time, and I've had the good fortune of looking at a lot of the code he wrote for a device management solution provided by Marimba.

Anyways, without going too much into (what is potentially) sensitive information, suffice it to say that old Arthur was writing up some implementation in C, and decided that he'd like to introduce a little OOPS into a language which, quite frankly, wasn't very suited for it. And the way he accomplished it really caught my attention.

As mentioned before, what I'm going to post is not gonna be anywhere NEAR production code :-D. Instead, I thought I'd provide some general guidelines, and a specific example.

So how DO we go about this?
I mean, we've got no classes, hence no concept of base class-derived class relationship, so kinda tough to go with something straight forward.

Well, with a little tricks around "structs" and function pointers, you can actually accomplish quite a lot.

Now say, I want to simulate a class containing two virtual functions, one of the functions returning an int, and taking as arguments two int variables. The other one returning a char, and taking as arguments two char variables. Well, we all know there's no "class", and there's certainly no "virtual" in C. Lets try something else:

typedef int (*XCALIBER)(int,int);
typedef char (*YCALIBER)(char,char);
struct s {
XCALIBER xptr;
YCALIBER yptr;
};

What I have here is a struct, containing two function pointers, which would point to the exact same functions I described above.

Now lets say I have this:
>
struct d {
struct s *ptr;
struct s *next;
};


Which is basically another struct, which contains two pointers of the same type as my "psuedo-class" struct s.

Here's where I try to put together an "inheritance" mechanism.
Suppose I decide that THESE are the implementations of the "virtual" functions:
>
int func3(int p,int q) {
printf("%d %d",q,p);
return q;
}

char func4(char z,char l) {
printf("%c %c",l,z);
return l;
}



And I define a function, whose main job is to take my "base class", and stick an instance of a "derived class" to it:

>
void addderivedobject(struct d *baseptr,struct s *derptr) {
while(baseptr->ptr!=NULL) {
baseptr->ptr = baseptr->next;
}
/* add new functionality */
baseptr->ptr = derptr;
baseptr->next = NULL;
}



Now, I do this:
>
struct d *baseptr = new struct d;
baseptr->ptr = NULL;
baseptr->next = NULL;
struct s *der1ptr = new struct s;
der1ptr->xptr = &func3;
der1ptr->yptr = &func4;
addderivedobject(baseptr,der1ptr);



I'll admit it looks weird, after all, in true virtual function demonstrations, you'd only be instantiating an object of a derived class, and you'd just declare a base class pointer to point to it, whereas I'm allocating memory for both "objects". Worse, whoever heard of "new" being used in C to allocate memory :-) (which is what I've done)? But I hope I can get my point across here. What I do is create an "object" of my "derived class" (represented by the pointer "der1ptr"), have the struct members point to the actual functions, and then "add" my derived class to the "base class" represented by the pointer "baseptr".

Now, if I were to make the following function calls:
>
baseptr->ptr->xptr(3,4);
baseptr->ptr->yptr('a','b');


What you would see happening is that I used by "base class" pointer being used to call functions implemented in my "derived class".

Anytime you'd want to use your "base class" pointer to call other functions, you would simply have to create another "derived class", have its members point to different functions, and then "add" the object of the "derived class" to baseptr.

I'll admit: this is still a work in progress. Especially since I told myself I wouldn't take another look at similar code again until I was really stuck :-). But I find it challenging to attempt something in a program