This subject has already been treated quite interestingly in this topic. You will find useful information here :