Topic
  1. Part I: INTRODUCTION
    1. Introduction to Media Computation
      1. ❑ What is computer science?
        1. ❑ It's about recipes, and computer scientists study different kinds of recipes (argument from slides)
        2. ❑ Programming languages are different ways to express recipes
      2. ❑ Why should normal people learn it?
        1. ❑ The communication argument goes here
    2. Introduction to Programming
      1. ❑ Much of computer science, and all of programming, is all about naming
        1. ❑ You name media in files, and can also name them in memory
          1. ❑ Why files? Because files are spaces on disks which are huge. You can have acres there.
          2. ❑ Programs live in memory, which is more like an apartment building. You can bring things from your country home into your apartment building, but only in bits and pieces -- won't fit otherwise.
          3. ❑ You can bring them in and name them
        2. ❑ Bring in a picture and name it
          1. ❑ getAFileName()
          2. ❑ makeSound, makePicture
          3. ❑ show, play
        3. ❑ We can also name the recipe for bringing a particular media element into memory and playing or showing it
          1. ❑ def some function for doing just that.
      2. ❑ KEY IDEA: Everything can be named
    3. What does a computer know REALLY
      1. ❑ KEY IDEA: Everything is an encoding on top of numbers
        1. ❑ Basically, computers only understand numbers
          1. ❑ Sequences of numbers from 0 to 255, to be exact
        2. ❑ But we can create standard definitions and agreements on how to interpret those numbers
          1. ❑ When you save an "A" in a file, your word processor actually stores the number 65. It agrees to INTERPRET that 65 as an A. (DEMO)
          2. ❑ Look at an A on the screen. It's actually a series of lit and unlit dots on the screen. We can represent a "graphical" A as a series of binary numbers that correspond to the dots on the screen.
        3. ❑ We can encode more complicated things by relying upon increasingly sophisticated encodings
          1. ❑ Complicated things like sounds, pictures, and movies (DEMO)
      2. ❑ The way we handle media is by making codes from pictures/sound to numbers in various structures/units
        1. ❑ Like deciding to work in tablespoons or metric tons, in tables or columns
  2. Part 2: SOUND
    1. The Encoding of Sounds
      1. ❑ A sound is a series of samples
        1. ❑ How sounds work
      2. ❑ Introducing the loop
    2. Manipulating Sounds
      1. ❑ Changing the volume of sounds
      2. ❑ Rearranging sounds
      3. ❑ Changing the frequency of a sound
    3. Creating sounds
      1. ❑ Summing sounds
      2. ❑ Creating frequencies to sum
  3. Part 3: Debugging
    1. Computers only do what you tell them to do: What did you tell them to do?
      1. ❑ Flow of execution
      2. ❑ Flow of data
      3. ❑ show_vars
      4. ❑ Printing out where you are
    2. Programs that make decisions and that repeat
      1. ❑ Expanding a program into a linear list
  4. Part 3: PICTURES
    1. The Encoding of Pictures
      1. ❑ Pixels in two-dimensions
      2. ❑ RGB values
    2. Manipulating Pictures
      1. ❑ Changing RGB values alone
        1. ❑ Simple filters
        2. ❑ Converting to grayscale
      2. ❑ Changing RGB values between two or more pictures
        1. ❑ Background subtraction
        2. ❑ Bluescreening
      3. ❑ Changing RGB values between own pixels
        1. ❑ "Painting" or averaging
    3. Creating pictures
      1. ❑ Drawing on a picture
      2. ❑ Putting text on a picture
      3. ❑ Compositing images to make new images
    4. Creating pictures for manipulating pictures
      1. ❑ Creating a mask
      2. ❑ Using a mask to grayscale something that you're inserting via bluescreening
  5. Part 4: FILES
    1. The Encoding of Files
      1. ❑ Trees
    2. Manipulating files
      1. ❑ Doing something to whole sets of files
        1. ❑ Walking directories
      2. ❑ Doing things to individual files
        1. ❑ Having to face your OWN encodings!
        2. ❑ Reading values from files
    3. Moving files
      1. ❑ On your disk
      2. ❑ Via FTP
      3. ❑ Making decisions
    4. Making files from files
      1. ❑ Compression
  6. Part 5: TEXT
    1. The Encoding of Text
      1. ❑ ASCII
      2. ❑ HTML
    2. Manipulating and Creating Text
      1. ❑ Chopping up existing text
      2. ❑ Generating text
  7. Part 6: MOVIES
    1. The Encoding of Movies
      1. ❑ MPEG
      2. ❑ Series of frames
    2. Manipulating Movies
      1. ❑ It's easy: Make them frames!
      2. ❑ Adding something to every frame: Titles, characters
    3. Creating Movies
      1. ❑ Animations
      2. ❑ Morphing
  8. Part 7: MAPPING MEDIA
    1. Putting text and numbers into databases
    2. Generating text: Creating HTML
    3. Generating graphs: Mapping numbers into graphs
  9. Part 8: Can't we do this any faster?
    1. Introduce ImageMagick
    2. Why is ImageMagick faster?
      1. ❑ How computers work
      2. ❑ Why machine language is faster: No encoding
        1. ❑ How do we get there? Compilers
    3. How fast can we get?
      1. ❑ O(n) and complexity
        1. ❑ How some recipes can't be written
        2. ❑ How some recipes can never finish (in our lifetimes
  10. Part 9: Can't we do this any easier?
    1. Functional decomposition
      1. ❑ Making up a drawImage() function to make image composition easier
      2. ❑ How we think about functional decomposition?
      3. ❑ Using functions for more map/apply
    2. Recursion: Using functions to do everything
      1. ❑ Different ways of thinking about recursion
    3. Objects: Lifting the lid on our media
      1. ❑ Pixels have pieces and understand different things
      2. ❑ Pictures and sounds both understand writeTo()
      3. ❑ Dot notation
  11. Part 10: Other ways of writing recipes
    1. JavaScript: Orchestrating lots of things
      1. ❑ But really only manipulating text
    2. Java: Get below the encodings