Coding for Optical Channels