Theory and Practice of Error Control Codes