CSC 220.010CPVL - Object Oriented Multimedia Programming, Fall 2021, TuTh 12-1:20 PM, Old Main 158.
CSC 220.020CPVL - Object Oriented Multimedia Programming, Fall 2021, TuTh 1:30-2:50 PM, Old Main 158.

Tuesday December 7 we will not have our regular class time.
Instead I am requesting attendance at the CSC355 Software Engineering II presentations in MSU (SUB) 218:
Faculty and students are cordially invited to attend Demo Day F21.
It will be in person this year, with social distancing.
8:30AM - 12:30PM - student presentations
1:30PM - 3:30PM - poster session
Zoom will be available for the student presentations
Professor Donna DeMarco

Office Hours Monday 2-4, Wednesday 4-6 (Zoom only), Thursday 10-11 or by appt.
We will distance 6 feet in my office, so plan to attend office hours online.
Office hours Zoom: https://kutztown.zoom.us/j/94322223872
Links for CSC220 Zoom room and student instructions for using Zoom.
The Zoom link for our course is on the course D2L page Content tab.

Our final exam times are Tuesday Dec 14, 8-10 AM for the noon class and Thursday December 16, 11-1 for the 1:30 class.
     There is no final exam and assignments are due December 10.
     I will be in the room & on course Zoom session at the start of those exam times, attendance optional.
 
Dr. Dale E. Parson


First day handout (syllabus that is specific to this semester).
PLEASE FILL OUT & EMAIL ME THIS FORM THE FIRST WEEK OF CLASS.



RESOURCES & HANDOUTS


CSC120 Recap Demos for month 1 of CSC220, Fall 2021

Link to the Fall 2020 course.
Why Love Generative Art? is extremely well written, comprehensive, and worth reading.


Shiffman's textbook's website including Examples and Exercises that will familiarize you with Processing.
Software setup instructions:
    1. On your Windows U:\ drive, create a new folder called Processing.
        U:\ is available anywhere on campus and does not auto-delete files.
        Do not store files on your PC desktop. They will be gone after you log out.
    2. Use the Windows Explorer to create folder U:\Processing.
    3. Every time you start Processing, go to Preferences and change the Sketchbook location to U:\Processing.
        You must create folder U:\Processing the first time you want to use it.
        To run Processing, find Processing under S:\ComputerScience on your PC.
    5. All of your practice and assignment sketches must reside under U:\Processing.
    6. If you Download & Install Processing on your home machine, use the latest version Processing 3.x, currently 3.5.
        I don't usually upgrade the version mid-semester, in the interest of stability, unless I need a specific bug fix.

The official Processing website has many examples and library documentation.
Here is the Library Reference. Keep this handy at all times!
The Reas & Fry book, Second Edition.
We will occasionally import classes from the Java class library, which comes with all standard Java installations.


Java class library https://docs.oracle.com/javase/8/docs/api/javax/sound/midi/package-summary.html
    and https://docs.oracle.com/javase/8/docs/api/javax/sound/midi/ShortMessage.html
MIDI Fanatic's Technical Brainwashing Center is the best site for MIDI specifications.
        Follow Technical Docs and Programming -> The MIDI Specification from that page.
My slides on MIDI and PCM (Pulse Code Modulation) Digital Audio.

MY HANDOUTS

We'll use my solution to spring 2018 csc120cpvl assignment 3 as an intro to interfaces & classes.
Review of interface inheritance & implementation inheritance.
Spring 2014 Java slides on exceptions
Spring 2014 Java slides on generics
    Sketches that illustrate java.util containers:
        ShapePaintEcho2021SentientAV.f21.zip and PaintDomeServer2018B_010.f21.zip

MATERIALS FOR LATE NOVEMBER CLIENT-SERVER, MODEL-VIEW-CONTROLLER CLASSES
Slides on Distributed MVC
CSC220F19MIDIassn3parson.zip
CSC220F19MIDIassn4ServerParson.zip
CSC220F19Androidassn4ClientParson.zip
CSC480S20MIDIassn1ServerParson.zip
CSC480S20Androidassn1bClientParson.zip

ASSIGNMENTS



ASSIGNMENT 0: Stay Safe & Protect Your Neighbors in Fall 2021
    "Simulated Contact Tracing of COVID-19 Propagation at Kutztown University for Fall 2020" best PACISE 2021 faculty paper
        Slides for the updated talk. Fall 2021 update. Python R0 calculator.
            Simulation code at S:\ComputerScience\Parson\Processing3\CovidUFall2021V1MIDI

KU Mask Adherence Process

ASSIGNMENT 1
is due by 11:59 PM Friday September 24 via D2L assignment dropbox. There will be 1 lab session.

ASSIGNMENT 2
is due by 11:59 PM Sunday October 10 via D2L assignment dropbox. There will be 1 lab session.
    Here is the starting point handout code.
    Here is a simple 3D demo sketch and also a helper sketch for designing your PShape.

ASSIGNMENT 3 Musical Instrument Digital Interface (MIDI) due via D2L Assignment 3 November 5.
    Here is the handout code that you must PARTIALLY COPY along with its MIDI tab code.
    Assignment 3 background:
        My slides on MIDI and PCM (Pulse Code Modulation) Digital Audio.
        Java class library https://docs.oracle.com/javase/8/docs/api/javax/sound/midi/package-summary.html
            and https://docs.oracle.com/javase/8/docs/api/javax/sound/midi/ShortMessage.html
        MIDI Fanatic's Technical Brainwashing Center is the best site for MIDI specifications.
            Follow Technical Docs and Programming -> The MIDI Specification from that page.
        ConcentricCirclesIntervals speeded that up by creating nested circles in a GROUP PShape.
            MIDI tab for ConcentricCirclesIntervals; this is a Processing TAB.
            Use ConcentricCirclesIntervals to figure out your PATCHES and CONTROLLER effects.
            http://midi.teragonaudio.com/tech/midispec.htm documents the controller effects.

I had some questions about the Furniture drone. I gave each Furniture & Paddle
object its own MIDI channel in the constructor call, set the
PROGRAM_CHANGE only in the first call to display(), and
used the following code in Furnitute.display() after finding a droney
instrument for the constructor's MIDIprogram argument.

if ((getMilliseconds()-lastOnNoteTime) > (1000*16)) {
    int chorus = 93 ;
    sendMIDI(ShortMessage.CONTROL_CHANGE, channel, chorus, 127);
    sendMIDI(ShortMessage.NOTE_ON, channel, drone, 96);
    lastOnNoteTime = getMilliseconds() ;
}

/* CSC220 & CSC480 students fall 2021
   IF YOU HAVE BEEN HAVING PROBLEMS WITH THE CALL TO initMIDI()
   TIMING OUT AND BLOWING UP PROCESSING WITH THIS ERROR:
    RuntimeException: Waited 5000ms for: <a750231, 4b2fd0f>[count 2, qsz 0, owner
   THEN GO INTO THE MIDI TAB AND REPLACE THE CODE THAT STARTS LIKE THIS:

// MIDI VARIABLES, see http://faculty.kutztown.edu/parson/spring2017/MidiKBSpring2016Parson.txt
final int midiDeviceIndex = 0 ;  // setup() checks for number of devices. Use one for output.

   DOWN THROUGH THE BOTTOM OF THE MIDI TAB INCLUDING THE sendMIDI() FUNCTION WITH THE
   CODE IN THIS FILE. IF IT HAS BEEN WORKING FOR YOU, DON'T CHANGE THIS MIDI TAB CODE.
   CSC220 students be careful not to remove the getMilliseconds() function from the MIDI tab.
*/

ASSIGNMENT 4 is a completely reworked 3D Recursive Sketch due via D2L Assignment 4 November 23.
    Here is the handout code that serves as your starting point.
    NOTE: I made changes to keyPressed(), keyReleased(), and
moveCameraRotateWorldKeys()
        to work around Windows problems in handling CONTROL- key commands.
        We will go over these changes at the start of the 11/4 class.


Assignment 5 is a very basic maze construction program, due by the end of Friday December 10.
    Here is the starting code.
    STUDENTS: I updated handout code 12/1 to work around a Processing bug that one student
        ran into fall 2020 and one student found today. It affects some but not all Processing installations.
        My add starts at the top of the draw() function and affects nothing else. Please add this to the top of draw():
boolean firstTime = true ; // ADDED 12/8 see start of draw() function below
void draw() {
  if (firstTime) {
    // Added 12/8 because of a bug in at least one Processing installation.
    // This was already done in setup(), but at least one student's
    // Processing system is only displaying the rect(...) from setup
    // in a quick flash. Displaying it the first time in draw() fixes
    // the problem for that student, so:
    rectMode(CORNER);
    fill(wallColor);
    stroke(0);
    rect(WallSize, WallSize, width-WallSize*2, height-WallSize*2);
    noStroke();
    firstTime = false ;
  }
  /* STUDENT 30% of project: (THIS RESUMES THE HANDOUT CODE COMMENTS.)


 
ZOOM VIDEO ARCHIVE

August 31 went over first day handout & overview of the course.
September 2 Worked through the first 4 demos (A-D) in the CSC120 Recap Demo.
September 7 Worked through demos D-F in
the CSC120 Recap Demo.
September 9 Worked through demos G-H and went over Assignment 1 above. 9/14 will be a work session.
September 14 Work session on Assignment 1 including "How to get started?"
September 16 spent going over this demo 3D sketch.
September 21 going over more 3D code leading up to Assignment 2 posted above with this code.
September 23 going over Assignment 2 handout above.
September 28 work session with Q&A for Assignment 2.
September 30 went over assn2 PShape requirement including this improvised sketch for work out vertices of a cube.
October 5 Went over speedup via PShapes, and MIDI in ConcentricCirclesIntervals above.
October 7 looked at another MIDI sketch, at using ConcentricCircles, & enhancing collision recovery in assn2.
October 14 NO CLASS, CSC480 sketch that uses tint(255, alpha) to fade one image out & next image in in cycles.
October 19 Went over Assignment 3 handout & code.
October 26 Started going over recursive graphical sketch.
October 28 Finished going over past 3D recursive code.
November 2 Went over some Assignment 3 issues based on office hour Q&A, started Assignment 4 overview.
November 4 A little on Assignment 4 then work session Q&A on Assignment 3.
November 9 Go over Assignment 4 in detail.
November 11 Q&A on Assignment 4.
November 16 Went over CSC220 portion of Client-Server, Model-View-Controller materials above.
November 18 Assignment 5 handout and also rotate[XY] and nesting in Assignment 4 in some order.
November 23 Work session Q&A about Assignment 4 due tonight. Short recording.
November 30 Applying java.util Map, Set, and List derived classes to Processing sketches per Review materials.
December 2 Q&A about Assignment 5.
December 9 Work session, Q&A about Assignment 5.