Feeds:
Posts
Comments

It happened finally! Microsoft woke up to the reality of its worst nightmare. Google quietly announced that they will be coming out with an OS by 2010. The manner in which the announcement was made is another indication of the new world order – an entry in the company blog. There were no press events or a fancy launch party to mark the event. Yet, the world went into a tizzy as news of this announcement spread through the channels.  The common consensus is that Microsoft should be worried. Yes, they should be. Is this, however a sizeable threat to their product line? Lets face facts. We need Microsoft products. There are many reasons why anyone including Google are way behind Microsoft on desktop productivity. One, there is no product, free or hosted that is as good as Microsoft Office. Microsoft Powerpoint, in particular is the most used tool by corporate executives worldwide. Second, Google spreadsheet is a good replacement to Excel. It cannot, however be used for complex and long running computations. Another issue is the that of data privacy. I wouldn’t want my investment broker to hold my personal data on a Google spreadsheet however ‘good’ it may be. Third, and returning the specific case in point, Google chrome OS is targeted at Netbooks. For all the hype about the new age of life (only) on the internet, there are millions of people with real jobs and real computing needs well outside the scope of the internet. To this minority Microsoft Windows is still the most preferred platform.  Ask architects using CAD tools, doctors using imaging tools, and organizations using SAP and other ERP tools. Until these people are eradicated from the face of the Earth, Microsoft is in business.

I love to admit this. I am a BIG fan of 24. Have watched every episode from the night David Palmer was attacked as a senator. Season 7 is such a refreshing change from the monotony that had creeped in into the plots right from season 5. I definitely did not like the whole season involving Jack’s crazy family(father and brother). The worst move was to make Wayne Palmer the President. What were the directors thinking? David Palmer lent a character to the seat of the President that I strongly feel many of the issues he faced would make very good case studies in a management class. Wayne Palmer was to the presidency what David Beckham would be to football in the US league. A poster boy and nothing more.

Coming back to season 7, it was great to see Tony back though he could have had a shave and a clean face! What I cannot accept is the number of people Tony has shot and killed in an attempt to secure the canister. It is an exagerration beyond human comprehension for people who have seen Tony from season 1. I remember having a funny feeling about Tony in the first few episodes of season 1, but that went away as it was revealed as a girlfriend issue later on. To see an incendiary Tony breaks my heart. What could have made him turn around? No motivating factor can ever justify this twist in the plot!

Lets see how the next 4 episodes pan out.. Lord.. please protect my frahile heart! Let not Jack, Aaron Peirce or Chloe turn over to the dark side!

The Dark Knight

The Dark Knight

There has been recent work on revisiting the definitions of database design using normal forms.  For a long time now, the work of E.F. Codd has been the seminal work on defining the ‘goodness’ of a relational data model. Generations of data modellers have used the definitions of the third normal form and on rare occassions the Boyce Codd normal form to deliver database designs. These definitions are based on a fundamental concept called a functional dependency. A functional dependency is a way to express a contraint that actually exists on data. Some discussions treat the process of database normalization as the removal of functional dependencies. This is very misleading. We should not remove functional dependencies. They exist!

While the notion of functional dependencies and database normal forms have been sufficient for most business needs, it has long been felt that they do not adequately capture all contraints on the data. Furthermore,  newer data models like XML cannot use the same concepts even though they work on the same data. If they work on the same data, the same constraints exist!

A new approach attempts to use the concepts of information theory to redefine database normal forms while retaining their innate essence. What this means is that a relational will be in 3NF irrespective of whether we consider the traditional definition or the new definition based on information theory.

In information theory, a fundamental concept is that of entropy. Entropy is a measure of  uncertainity associated with a random variable. What does this mean to data? Shannon is a scientist who has contributed  a lot to the field of information theory. He asked this question: “What is the information I am missing if I dont know the value of a random variable?” or “What do I lose when I dont know who will win the toss?” This is measured by Shannon’s definition of entropy.

The same notion is extended to the ‘goodness’ of a design.  To use this approach We define our world in terms of data units. Data units will come together to form relations. Treat a data unit as a random variable. I now ask this question “If i remove the value of a data unit what information will i lose?”  Compare this with the notion of a functional dependency of the form name->phonenum. If there is one record of the form (sss,12344), for another record where name=ssss, I dont lose anything if i dont know the phone number as i can deduce that from the first record.  This measure of entropy is then used to define various normal forms. I will write tomorrow about the normal forms in detail.

The concept is very interesting and it can be extended to XML data also. Pretty cool….

The original work can be founf here -> http://portal.acm.org/citation.cfm?id=1059519&dl=

Software development is very different from classroom projects. Everyone knows that! But, what is surprising is that a lot of software development is exploratory and if you are used to MSDN style documentation to help you with your software development, it aint’ going to happen! In my current project all (ALL) knowledge is stashed away by hurriedly written wiki pages. I personally like the concept of wiki pages. What I dont like is the freeform that this style of communication promotes without the need for any kind of structure to the documents. What typically happens is this- A software developer works on a feature for weeks and at the end of countless hours of medidation on the issue he decides to leave his footprint on a wiki page. The poor guy(or gal) is so tired by the end, that all he can manage for a clear footprint is a smudgy shuffle on the sand. If someone where to ask you how to walk, can you document the feature? you sould say, it is so SIMPLE!

The same is the case with software developers writing wiki pages. They have worked on the feature for soooo loooong that everything is so clear and simple. It is difficult for them to see it from an objective point of view and imagine a dumb new guy (like me) trying to understand the feature. The result is a cryptic and half useful document that cannot be understood without the author standing beside me and holding my hand.. Maybe software developers should write wiki pages only after one month after they have completed a feature. The gap in time will hopefully make them more like the rest of the world! Better still, wiki pages must be auto generated from code comments!!!!! (aka Java docs)

“You must have not only freedom from fear, but freedom from hope and expectation. Trust in My Wisdom. I do not make mistakes. Love My uncertainty, for it is not a mistake. It is My intent and Will. Remember nothing happens without My Will. Be still. Do not ask to understand. Do not want to understand. Relinquish the imperative that demands understanding.”

- Bhagavan Baba, Sanathana Sarathi, August, 1984

To learn to drive a car, you need to be comfortable with the concept of approximations.  Migrating from a decade of two wheeler riding to a car can be a scary experience. On a two wheeler, you are basically walking, albeit very very fast! Let me clarify: When you are walking, you have a clear 180 degree view of your world, you go where you see a gap big enough to fit you and you are tired after a long walk. Riding a two wheeler is exactly the same!

Get into the driver’s seat of a car and life is suddenly more complicated!

Fact No1:

What can be unnerving to a road hardened biker is the fact that you cannot see the tip of yout vehicle anymore! You can only approximate the boundaries of your vehicle. They say, you get comfortable with practice. True, but with practice you get good at approximations!

Fact No 2:

On a two wheeler, you stop at a signal and you put your foot down on the road. This keeps you stationary. Stop the car at a signal and shift the gear to neutral and you start moving backward! This happens when there is even a minor upward incline on the road. You are now left with no option than to use all your limbs to arrive at that magical equilibrium state where your car is stationary yet in gear and ready to move (forward!) once the signal becomes green.

Fact No 3:

On new gen cars, the accelerator adapts to the user. When we got our car, it was new and it did not have any pre conceived notions about us.  The default assumption was that I wanted to drive at 100kmph every single time. Touch the accelerator and it will decide to punce forward. It was even moving forward on a flat stretch of road when my foot was nowhere near the accelerator! After a long round of negotiations between me and my car, it has now decided to give me a break!

Other than all these minor issues, driving a car activates some parts of your feelings spectrum that seemed to be dormant till now. You get a sense of compartmentalization to life that can be liberating and binding at the same time! Paradoxical as the feeling may seem, it is true and I cannot explain it any better.  Somehow, unknown to us our vehicles become a part of our family and then  they are forced to share our quota of life!

This is a new relationship and as all relationships go, you can never get to know everything, right?

“Get the job done” – this is probably one of the most used and abused phrase in the work place especially in the life of a software programmer. In large organizations, a significant part of your work life is dependent on actually getting your work environmentnt setup correctly. Before you can get the job done, you need the following “done”

1) Have your version control system point to the correct source files

2) Get the correct debug build (not necessarily the daily build)

3) Get in touch with one key architect who knows the entire product (imp in large distributed teams)

4) Get tools for : file compare, process explorer, a light weight file editor(apart from your dev env). Visual Studio developers can gawk

5) Information you need may be spread across corporate wiki pages and sites. Learn how to bookmark and more importantly learn how to look for information. Ask people who have been in the team for some time to share their books marks.

After you have done all of the above, you are now ready to ‘Get the Job Done’

First off, I am back to blogging after a long break!

I have been trying Mozilla Thunderbird for offical email for the past  100 days. My verdict – inadequate.

The search feature in Thumderbird is pretty bad. I was finding it very difficult to extract mails based on anything other than keyword searches in the subject field. That said, these are the features where thunderbird can do with a lot of development:

1) Rich editor. The message compostion features are rather rudimentary

2) Better color schemes: One look at Outlook 2007 and Thundebird and you know the difference!

3) Tighter integration with calendar, reminders etc..

Having said all this, Thunderbird is still a very good open source alternative for an email client.

In the past I considered the configuration of a wireless router to be a cumbersome and complicated task. I recently discovered that it is not that complicated when you get down to actually doing it. Here are things I need to remember if I ever have to do it again.

A wireless router would be simple if it is true to what is says – ‘Wireless’. Most wireless routers have a few ethernet ports to which computers can connect directly. The ethernet ports on the router are of two types – WAN and LAN. There will be just one WAN port and a few (4 usually) LAN ports. The WAN port is to connect the router to an existing network. The LAN ports create a new virtual network. Clients cannow connect to the ‘outside’ network through the router by directly connecting to the LAN port via cable (in this case the router functions as a regular ethernet switch) or though a wireless connection.  All traffic from the new network that are bound to nodes outside this network will be routed through the WAN port.

Usually when we configure an ethernet interface, we need to provide IP address details like IP address, subnet mask, default gateway and DNS.  The typical wireless router has two ethernet interfaces – the WAN and the LAN and hence we must provide details for both. The addressing scheme for the WAN interface will depend on the adressing scheme used by the network to which the wireless router is connecting. The addressing scheme of the LAN interface usually begins with 192.168 as it is a private network and the IP addresses must fall within the non-public IP range recommended by ICANN. The LAN interface can also be configured to issue IP addresses to clients connecting via the LAN interface or via wireless though DHCP.  All traffic from the private network will be routed as traffic orginating from the ethernet address of the WAN port. This is called NAT or network address translation.  Similarly all traffic bound for a particular node on the private network from outside the network will first arrive at the WAN port and will be routed to the correct node by the router. NAT is at workagain.  Lets look at an example.

You want to connect to an existing network and use a wireless router to extend the connection.  You need IP details for the WAN. Lets say the IP address is 10.0.1.23, subnet mask is 255.255.255.0 and gateway is 10.0.1.1. The DNS addresses can be obtained from the service provider in the case of internet connections. So in effect, you are going to connect a number of clients to the network using a single IP – 10.0.1.23. However, each of the clients need an individual address to make them unique on the network. This is the purpose of NAT and the LAN interface.  You can configure the LAN interface with a private address range. In this case we choose 192.168.10.1. If you use static routing you need to set the IP address details on each client. The IP address will be anything between 192.168.10.2 to 192.168.10.254 and the default gateway will be 192.168.10.1

Depending on the scenario, the installation can be a bit more complex. In the case of ISPs, you may need to add PPPOe dialers etc.. Will write about it in another post.

I found this poem on a web site dedicated to inspirational content this morning.  Planning to make a poster out of it very soon…

Giving Your Best 
by Author Unknown

It’s the hand we clasp with an honest grasp

That gives a hearty thrill;
It’s the good we pour into others’ lives
That comes back our own to fill.
It’s the dregs we drain from another’s cup
That makes our own seem sweet;
And the hours we give to another’s need
That makes our life complete.

It’s the burdens we help another bear
That makes our own seem light.
It’s the anger seen for another’s feet
That shows us the path to right.
It’s the good we do each passing day,
With a heart sincere and true;
In giving the world your very best
It’s best will return to you.

Source: http://www.wow4u.com/poems/index.html

Older Posts »