introducing computer programming with multimedia barb ericson institute for computing education...
TRANSCRIPT
Introducing Computer Introducing Computer Programming with Programming with
MultimediaMultimediaBarb EricsonBarb Ericson
Institute for Computing EducationInstitute for Computing Education
Georgia Institute of TechnologyGeorgia Institute of [email protected]@cc.gatech.edu
Computer Science CrisisComputer Science Crisis
• 40% drop in majors since 2001 Nationwide– Up to 60% drop in some places
• Percentage of women is down to about 12%– From a high of 30% in the 1980s
• Never attracted many African Americans, Hispanics, Native Americans
Why the Decline?Why the Decline?
• Dot com crash in 2001– Loss of jobs
• AP Exam switched from C++ to Java– Many schools quit teaching AP Computer Science
• Visual Basic changed– In .net to be object-oriented
• Perceptions of Computer Science– boring, antisocial, not creative, and just programming
Looming ShortageLooming Shortage
• Only a few jobs have gone overseas– About 2-3%
• We have recovered from the dot com crash– There are now more jobs in this area than in
2001
• Computing jobs are some of the fastest growing– US Dept of Labor predicts 45.93% growth
Reversing the TrendReversing the Trend
• We need to get more students interested in computer science– Not drive them away
• We need to appeal to a diverse group of students– Not just geeks
• All students need to have some understanding of computer science– Our society relies on technology
Our SolutionOur Solution
• Use multimedia projects to introduce computing concepts– Pictures, sounds, movies, text
• Use open-ended projects to encourage creativity– Create an image collage, create a sound
collage, create a movie
• Make computing social– Encourage students to show off their work
Choice of LanguagesChoice of Languages
• Python– Used by many companies: IL&M, Google, Nextel, etc.– Easier syntax than many languages– Can use to teach functional, procedural, or object-
oriented programming– Used as a scripting or extension language for many
applications– Growing in popularity
• Java– Popular language used for AP CS
Digitizing PicturesDigitizing Pictures
• We digitize pictures into lots of little dots
• Enough dots and it looks like a continuous whole to our eye
• Each picture element is referred to as a pixel– Each pixel knows its color– It also knows where it is in
its picture
Encoding Color: RGBEncoding Color: RGB
• In RGB, each color has three component colors:– Red, Green, and Blue
• In most computer-based models of RGB, a single byte (8 bits) is used for each– So a complete RGB color
is 24 bits, 8 bits of each– 0,0,0 is black– 255,255,255 is white– 255,0,0 is red
Make and Show a PictureMake and Show a Picture
Use pickAFile function To select a picture file(ends in .jpg)
Use makePicture(file) to create the picture
Use show(picture) todisplay the picture
Use MediaToolsUse MediaTools
• Click on MediaTools• Select the picture to
explore• Move the cursor while
holding down the left mouse button– To see x,y,r,g,b
• Click on zoom– To zoom in or out
Creating a Python FunctionCreating a Python Function
Define a function
Load the function
Try the function
Rules for Python FunctionsRules for Python Functions
• Use the keyword def to define a function– Followed by the
function name
• Use parentheses after the name– Name parameters
• End with a colon• Indent the body of the
function
def pickAndShow(): myFile = pickAFile() myPicture =
makePicture(myFile) show(myPicture)
Using a LoopUsing a Loop
def decreaseRed(picture):
for p in getPixels(picture):
value = getRed(p)
setRed(p,value * 0.5)
More Picture FunctionsMore Picture Functionsdef greyscale(picture): for p in getPixels(picture): redness=getRed(p) greenness=getGreen(p) blueness=getBlue(p) luminance=(redness+blueness+greenness)/3 setColor(p,
makeColor(luminance,luminance,luminance))
def negate(picture): for px in getPixels(picture): red=getRed(px) green=getGreen(px) blue=getBlue(px) negColor=makeColor(255-red,255-green,255-
blue) setColor(px,negColor)
How Sound Works:How Sound Works:
• Sounds are waves of air pressure– Sound comes in cycles– The frequency of a
wave is the number of cycles per second (cps), or Hertz
– The amplitude is the maximum height of the wave
Volume and PitchVolume and Pitch
• Our perception of volume is related (logarithmically) to changes in amplitude– If the amplitude doubles, it’s about a 3 decibel (dB)
change.
• Our perception of pitch is related (logarithmically) to changes in frequency– Higher frequencies are perceived as higher pitches– We can hear between 5 Hz and 20,000 Hz (20 kHz)– A above middle C is 440 Hz
Digitizing SoundDigitizing Sound
• We can estimate the sound curve– Analog-to-digital
conversion (ADC) will give us the amplitude at an instant as a number: a sample
– How many samples do we need?
• 2 x max frequency• CD quality is 44,100
samples per second
Digitizing sound in the computerDigitizing sound in the computer
• Each sample is stored as a number – 16 bits, 216 = 65,536 combinations– But we want both positive and negative values
• To indicate compressions and rarefactions.
• Each sample can be between -32,768 and 32,767
Working with SoundsWorking with Sounds
• We’ll use getSamples to get all the sample objects out of a sound– Use getSample to get the value from a Sample obj
• We can also get the value at any index with getSampleValueAt
• Sounds also know their length (getLength) and their sampling rate (getSamplingRate)
• Save a sound to a file using writeSoundTo(sound,”file.wav”)
Decreasing the volumeDecreasing the volume
def decreaseVolume(sound): for sample in getSamples(sound): value = getSample(sample) setSample(sample,value * 0.5)
This works just like decreaseRed, but decreasing the amplitude (volume) instead of the red color.
Multimedia Java CS1Multimedia Java CS1
• We use DrJava– A free and easy development environment– With an interactions pane
• We have created Java classes– For the students to use and modify
• World• Turtle • Picture• Sound• FileChooser
• Introduction to Java– Math operators, printing results, data types, casting,
relational operators, Strings, variables
• Introduction to Programming– Creating and naming objects
• Using a turtle and a world
– Creating new Turtle methods• Draw simple shapes• Using parameters
Java SyllabusJava Syllabus
Syllabus - ContinuedSyllabus - Continued
• Modifying Pictures using Loops– One-dimensional
arrays– Use for-each, while,
and for loops to– Increase/decrease
colors, fake a sunset, lighten and darken, create a negative, and grayscale
Java Negate MethodJava Negate Method
/** * Method to negate the picture */public void negate(){ Pixel[] pixelArray = this.getPixels(); Pixel pixelObj = null; int redValue, blueValue, greenValue = 0;
// loop through all the pixels for (int i = 0; i < pixelArray.length; i++)
Java Negate Method - ContJava Negate Method - Cont
{ // get the current pixel pixelObj = pixelArray[i];
// get the values redValue = pixelObj.getRed(); greenValue = pixelObj.getGreen(); blueValue = pixelObj.getBlue();
// set the pixel's color pixelObj.setColor( new Color(255 - redValue, 255 - greenValue, 255 - blueValue)); } }
Syllabus - ContinuedSyllabus - Continued
• Modifying Pixels in a Matrix– Two-dimensional
arrays– Nested loops– Copying, mirroring,
blending, rotation, scaling
Syllabus - ContinuedSyllabus - Continued
• Conditionally Modifying Pixels– Replacing a color,
reducing red-eye, edge detection, sepia-toned, posterize, highlight extremes, blurring, background subtractions, chromakey
Syllabus - ContinuedSyllabus - Continued
• Drawing on Pictures– Using existing Java
classes • Inheritance• Interfaces
– Drawing simple shapes, drawing text, general copy, general scale, shearing, gradient paint, general blending, clipping
Syllabus - ContinuedSyllabus - Continued
• Modifying all Samples in a Sound– 1D arrays– Loops– Conditional execution– Change volume,
normalizing a sound (make it as loud as possible), force to extremes
Syllabus - ContinuedSyllabus - Continued
• Modifying Samples using Ranges– Loops– Clipping, splicing,
reversing, mirroring
Syllabus - ContinuedSyllabus - Continued
• Combining and Creating Sounds– Class and private
methods– Composing
sounds, blending sounds, changing frequencies, and creating echoes
– MP3 and MIDI
Syllabus - ContinuedSyllabus - Continued
• Creating Classes– Defining a class– Overloading constructors– Creating and initializing an
array– Creating getters and setters– Creating a main method– Javadoc comments– Using Inheritance
ConfusedTurtleTurtle
Syllabus - ContinuedSyllabus - Continued• Creating and Modifying
Text– Reading from and writing
to files• Handling Exceptions
– Modifying programs– Getting text from networks– Creating random
sentences– Using text to shift between
media
Syllabus - ContinuedSyllabus - Continued• Making Text for the
Web– Throwing exceptions,
HashMap, Generics, and Iterators
– Create a web page from a directory
– Create a web page from other web pages
– Creating a web page from a database
Syllabus - ContinuedSyllabus - Continued
• Encoding, Manipulating, and Creating Movies– Frame-based
animations with simple shapes and text
– Special effects – fade out, fake sunset, and chromakey
Syllabus - ContinuedSyllabus - Continued
• Speed– What makes programs
fast?• Compilers and Interpreters• Searching• Algorithms that can’t be
written
– What makes computers fast?
• Clock rates, Storage, Display
Multimedia CS2 in JavaMultimedia CS2 in Java
• Driving question: “How did the wildebeests stampede in The Lion King?”
CS2 IdeasCS2 Ideas• Teach data structures using multimedia
– Stacks and queues for simulations– Linked lists of pictures
• Order in linked list is order in scene• Order in linked list is the layer the picture is in• Circular linked list for animation
– Linked lists of sounds• Weave and repeat musical phrases
– Trees of pictures• Scene graph
– Trees of sounds• Different traversal gives different result
Examples of Student WorkExamples of Student Work
Soup-Audio Collage
Canon- LinkedList of (MIDI) Music
ResultsResults
• Python CS1 is used for non-majors at Georgia Tech– Business students went from 49% to 88% pass rate– Similar results at Gainesville and U.Ill-Chicago
• Java CS1 is used in Georgia High Schools– Both in an introductory course and in Advanced
Placement courses– Also used at Dennison and Duke
• Java CS2 is used at Georgia Tech– Students are transferring into computer science
Why Media Computation?Why Media Computation?• Works on nearly all computers
– Unlike Alice which requires newer computers
• Low cost– Unlike LEGO Mindstorms or other robots
• Students can see (and hear) if their programs work• Computer Science concepts are introduced to solve
problems– Looping instead of changing thousands of pixels by hand
• Open-ended assignments allow students to be creative– Students can use their own media
• Students can publicly share their media artifacts with others
What’s on the CDWhat’s on the CD
• CS1-Python materials– Chapters from the Media Computation book in Python– Course slides– Free Jython Environment for Students (JES)– Instructor Resources
• CS1-Java materials– Chapters from the Media Computation book in Java– Course Slides– Java Classes
What’s on the CD - ContinuedWhat’s on the CD - Continued
• CS2-Java materials– Course notes– Course slides– Java Classes
• DrJava– Free Development environment for Java
• Mediasources– Royalty free pictures and sounds
Additional ResourcesAdditional Resources
• Web Site for Media Computation– http://coweb.cc.gatech.edu/mediaComp-plan
• CS1 Python Book– Introduction to Computing and Programming in
Python, A Multimedia Approach by Mark Guzdial, ISBN: 0131176552
• CS1 Java Book– Introduction to Computing and Programming with
Java, A Multimedia Approach by Mark Guzdial and Barbara Ericson, ISBN: 0131496980
• CS2 Java Book– Coming in 2007