This document discusses source coding and Shannon's source coding theorem. It begins with an introduction to Shannon's theorem by Dr. Mulugeta Atlabachew. It then provides an example showing how Shannon's theorem can be used to compress data from tossing a dice 1,000,000 times. The document goes on to discuss types of source coding including lossless and lossy coding. It also covers Huffman coding and how it can be used to create optimal prefix codes based on symbol probabilities. Adaptive Huffman coding is also summarized which allows building the code during transmission.