Error correcting codes are combinatorial objects which have traditionally been used to enhance the transmission of data on unreliable media. They have experienced a phenomenal growth since their birth some fifty years ago. Today, everyday tasks such as listening to a CD, accessing the hard disk of an electronic device, talking on a wireless phone, or downloading files from the Internet are impossi ...