Channel Coding Techniques For Communication Over Networks And Over Channels With Memory