Syllabus

Parsons The New School for Design
MFA Design + Technology
Creativity & Computation Lab
PGTE 5250; CRN 5187; Section A
Fall 2012
Tuesday, 3:50 – 6:30 pm, 6 East 16th Street, Rm 1202

Instructor: Liza Stark
Email: stare220[at]newschool.edu
Office hours: Thursdays, 6:30 – 7:45 pm by appointment
Class site: http://lizastark.com/cclabfall2012

Course Description
There are a variety of different tools that you can use to realize the concepts and projects you will create in MFA D+T. This course will give you a basic introduction to three toolsets (Processing, Arduino, and openFrameworks) with the objective of giving you a firm foundation in the basics of computation. By the end of this course, you will be fluent enough in the fundamentals of code to start speaking other programming languages with relative ease.

Imagination is at once the source of all hope and inspiration but also of frustration. To forget this is to court despair.

W.I.B. Beveridge, The Art of Scientific Investigation

CC Lab Commandments
Stick to these and thou shalt do no programming wrong:

  1. Remember design: not all tools are right for the job.
  2. Thou shalt post thy code for others to hack.
  3. Thou shalt NEVER use someone else’s code without citing them.***NOTE: We are a community that likes to share and we give due recognition to those we hack. Consistently not citing code will result in failure of the course. No exceptions.
  4. Thou shalt comment fanatically.
  5. Thou shalt prototype.
  6. Thou shalt make awesome things.
  7. Thou shalt help thy classmate if they do not understand something.
  8. Remember to break it down: debugging is all about making problems smaller.
  9. Thou shalt not enter into coding with fear or frustration. Take a break and get back to it.
  10. Remember mistakes: they can generate the best solution.

Recommended Reading
Form + Code by Casey Reas (http://formandcode.com/)
Programming Interactivity by Joshua Noble
Processing: A Programming Handbook for Visual Designers and Artists by Casey Reas and Ben Fry (HIGHLY recommended)
Arduino Cookbook by Michael Margolis (HIGHLY recommended)
Physical Computing by Dan O’Sullivan and Tom Igoe
Making Things Talk by Tom Igoe (This is more for anyone interested in communication and networks – unfortunately, we won’t have time to get into this stuff too deeply)

Recommended Resources
http://www.learningprocessing.com/
http://processing.org/learning/
http://processing101.noisepages.com/
http://arduino.cc/en/Tutorial/HomePage
http://www.arduino.cc/playground/
http://itp.nyu.edu/physcomp/Intro/HomePage
http://openframeworks.cc

***More resources will be posted to the blog regularly.
***Please post any that you come across and think would be helpful!!

Project Documentation

You may post the content of your assignments either to the class blog (lizastark.com/cclabfall2012) OR you may post the content on your own documentation blog and then post a link to on the classroom blog. Whichever you prefer is fine as long as you submit it.

Posts must include the following:

Code: Week 1 – 3 you post your Processing sketches to our classroom in OpenProcessing with a link to it in your blog post (. After Week 4 ALL code must be posted to Github with a link to it in your blog post.
***OpenProcessing Classroom: http://www.openprocessing.org/classroom/1892

Documentation: You should post appropriate visual documentation of your assignment, whether video of the project running or static images.

Writing: Each assignment will have a written reflection component. If there isn’t one explicitly mentioned, you should reflect on any challenges you encountered, what solutions you attempted, what you learned, what you would do to take the assignment further, etc.

Course Outline
Please check the class blog frequently and BEFORE you begin an assignment. Weekly assignments may change based on our pace and our consensus as a class.

WEEK 1 8/28


Course Overview
1) Welcome to CC Lab! + Short class survey
2) Presentation of Bootcamp projects
3) Discussion of gains / problem areas from Bootcamp
4) Intro to class syllabus and what will be expected from students.
5) Overview of different programming languages we will be learning.
6) Discussion of “creative computing” in general. Why code? How can learning a new tool enhance and support the creative process?

Assignment (due next class)
Here is your first assignment. Based on the feedback from the initial meme assignment, I decided to change it. Please see #5 below and let me know if there are any questions.

1) Install both Processing and Arduino on your personal machine if you haven’t already. Place order for Arduino starter kit from Sparkfun or Adafruit.
2) Post the project you presented on the class blog.
3) Write a short paragraph explaining what you hope to get out of this class based on today’s discussion.
4) Post documentation of your favorite work by other designers/artists that inspire you.
5) For this assignment, I want you to create an interactive story using the programming concepts below. You will be assessed based on how well you use them (I am looking for understanding, not complexity) and your concept. Upload to openProcessing and be prepared to present them next class. You must include all of the following:
1) Arrays + for loops (you must access your array using a for loop)
2) PImage + PFont
3) A function you created
4) Motion (acceleration and velocity)
**Extra points for collision detection
5) Interactivity (whether mousePressed, keyPressed, etc)

WEEK 2 9/4


Back to Basics: Boot and Beyond
1) Speed review of Bootcamp material/key concepts based on class survey.
2) Using trigonometry to draw lines and shapes
a) Transformations, push/pop matrix

Assignment (due next class)
1) Create a cool animation using the trig concepts you learned today. Conceptually, you can (a) reflect on the passage of time across space or (b) further develop your interactive narrative from last week’s assignment.
2) Write a few sentences reflecting on your project. What themes were you dealing with? How did you execute it? What might you do differently next time?

WEEK 3 9/11


High Class: Object-oriented Programming
1) Finish up from last class:
a) Color and manipulating pixels
b) 3D shapes (depending on how far we get)

2) What is OOP?
a) What is a class? What is an object?
b) How do I make one?
c) Why are objects useful?

Assignment (due next class)
1) Code assignment – you can do (a) OR (b):
(a) Make a stamp and create a collage-type artwork with it using OOP. Think Sol LeWitt instruction-based works, or other works involving pattern and repetition. Bonus points for interactivity.

(b) A theme/concept of your own choosing, but you must write at least two classes and create an array of at least one class.

2) Write an instruction set for how people should use your tool. Get creative!
3) Order Ardunio supplies posted on the class blog if you haven’t already!

As an aside, while you are doing this assignment and wrapping your brains around classes, remember how we built up to creating a class and an object last class. We started with a sketch, then function, then super basic class, then added some more complexity (e.g. movement), and finally got to arrays. I strongly encourage you to take this approach, especially if you are encountering any difficulty…or even if you’re not. It’s good practice and will help you reflect on how you are structuring your code.

WEEK 4 9/18


No Books Here: (Public) Libraries
1) Let’s be OPEN: Public code and code-sharing.
a) Github overview
2) What is a library? Why are they helpful? Where can I find them? How do I use them?

Assignment (due next class)
1) Find a contributed library that you think is interesting. Download and install it. Take an example sketch and significantly modify it (this means doing much more than changing the color, for example).
2) You must write and include a class in your sketch.
3) Finish setting up Git via terminal/command line and register for an account on Github. Watch Caitlin’s video (the link is in the slides) and practice adding, committing, and pushing to Github. You must post the above sketch onto Github and provide a link to it in your post.
4) BRING YOUR ARDUINO SUPPLIES NEXT WEEK!!!

WEEK 5 9/25


NO CLASS!
And no excuses for not finishing last week’s assignment :)

WEEK 6 10/2


Electrifying!
What is electricity?
What are voltage, resistance, and current? How are they related?
What is a breadboard?
What is a switch?
How do you build a circuit?

Assignment (due next class)
1) Build two circuits using THREE LEDs minimum and a switch. One should be in parallel and one should be in series.
2) Calculate the voltage, resistance, and current for each.
3) (Hand)draw the schematic for each.
4) Write a few sentences reflecting on last class. What was exciting? What was confusing? What needs more clarification? What was difficult? I will use these to guide next class, so it totally behooves you to meditate on this for a second.

For #2 and 3:
We obviously didn’t review the last two much in class. This was intentional. Hit the interwebs for answers. Also, I want to see HAND DRAWN pictures on the blog with the schematics and equations worked out. If you prefer Illustrator or another program, that’s fine too, but I want to see all of your work.

WEEK 7 10/9


Gettin’ Physical: Arduino
What is a microcontroller?
How do you program it?
What do digital and analog mean?
How do I debug my sketches and circuits?

Assignment (due next class)
1) Create a fortune telling device OR (I repeat OR – you have a choice here) an animal using at least 3 LEDs and analog or digital input. The LEDs should have at least two states.
BONUS: Use PWM or animate the LEDs.
2) Write a short paragraph about the design decisions you made. What behavior did you choose for the output and why? For example, did you want to simulate an animal breathing or talking? Did you want to create a sensation of anxiety for the person being told their fortune?
3) Document at least one person using or interacting with your creation on video.

WEEK 8 10/16


Common Sensing: Input and Output
What is a sensor? What are different types of sensors? How do you use them to control the behavior of an output?
What are different types of outputs or actuators that I can use?
How do I make a timer? What is this millis() thing?

Assignment (due next class)
1) Create a Rube Goldberg machine using at least two different actuators and two different inputs. Think feedback loops and cybernetics.
2) Write a few sentences about the idea behind your machine and why you chose that input and output. Because it was easier does not count as an answer. :)
WEEK 9 10/23


Talking: Serial communication and protocols
How can I make my computer talk to Arduino? And vice versa?
How can Processing and Arduino talk to each other?

Assignment (due next class)
1) Option A: Iterate on your Rube Goldberg machine to include Processing.
Option B: Create a realtime data visualization in Processing using sensor input.
2) Prepare for a midterm project workshopping session that will take place during the second half of class. Bring your concept, prototypes, and problems!
WEEK 10 10/30


Production Mode!
1) Make it look pretty: How do I actually turn this into an aesthetic object or product? What can I use instead of the breadboard and/or wires?
2) Midterm workshopping session: Present concept + prototypes. Work in small groups to receive feedback.

Assignment (due next class)
Finish your midterm projects and prepare to present them for outside critics. We will discuss guidelines in more depth closer to the date.
WEEK 11 11/6


Midterm presentations!
//No stress – just feedback!

Assignment (due next class)
1) Install openFrameworks and get one example working.
2) Write a reflection of your midterm critique. Was the critics’ feedback useful? Why or why not? How would you change the project in the next iteration?
WEEK 12 11/13


Intro to openFrameworks
1) Programming Languages as “Dialects”:
a) Discuss the basic differences between C and Java-based languages.
b) What do different languages do differently, and how do we choose what tool to use?
2) openFrameworks:
a) What is openFrameworks?
b) How does the file structure work?
c) Why do I need to review classes?
d) How do I debug?

Assignment (due next class)
1) Port a previous assignment from Processing to openFrameworks. It should have one function and one class.
2) Find an example from the oF examples folder and make it your own. Focus on aesthetics and interaction.
WEEK 13 11/20


NO CLASS!

Assignment (due next class)
TBD
WEEK 14 11/27


Adding More On: Interactivity and Addons in openFrameworks

Assignment (due next class)
TBD
WEEK 15 12/4


Keepin it Real: oF + Arduino
1) How do we communicate between oF and Arduino?

Assignment (due next class)
TBD

WEEK 16 12/11


Production Mode!

Assignment (due next class)
Finish your projects and prepare your presentation!

WEEK 17 12/18


Final Presentations!



 

Learning Outcomes
By the successful completion of this course, students will be able to:
1. Understand the underlying concepts of logic, procedure, and objects as they apply to computer code and design.
2. Use code structures to express visual, multimedia, and interactive ideas.
3. With a working knowledge of syntax and structure in the Processing environment, build a foundation in programming that can be applied to other languages.
4. Prototype your own ideas and be able to comfortably collaborate with other designers and developers in digital media.
5. Illustrate ability to use code in the design process in a meaningful way.
6. Render interaction on screen or in physical form, using electronic circuitry and embedded computing

Final Grade Calculation
Participation /Attendance 25%
Weekly Assignments 50%
Midterm 10%
Final 15%
TOTAL         100%

Participation/Attendance includes attending class (on time!), working on/completing the in class assignment, contributing to class discussions, and giving feedback to your peers. Each class you will receive a 3, 2, 1, or 0 based on the above.

Weekly Assignments are worth 10 points each. To receive a full 10 points, you should complete the ENTIRE assignment and turn it in on time. Points will be deducted if it is late or incomplete. Incomplete includes not commenting your work.

Code assignments do not have to be entirely successful when turned in, but they must be accompanied by documentation of what you expected to happen, what occurred, and what attempts you made to resolve the issue. Outline specific questions about what you do not understand. Post questions and concerns as early as possible, and be prepared to revise work for the following week.

Rubrics for the Midterm and Final will be discussed and decided upon as a class closer to the due date.

Materials and Supplies
Required, course-approved Arduino supplies (to be detailed separately)

Attendance
This class will conform to New School attendance policy. Only three absences are allowed without special permission from the instructor; any more and you will be dropped from the class with a failing grade. Two late arrivals or two early departures will count as one absence. You will also find this a very difficult class to miss even once; extra effort will be required to catch up. When in doubt, communicate with me as early as possible about any special circumstances.

Plagiarism
Sharing code and collaborating on solutions is actively encouraged in this class. We’re working with software that is able to evolve and remain free because of contributions from a community – including direct contribution of source code, detailed bug reports, documentation, example code, help on the forums, and so on. You will be able to contribute in this way. Likewise, sharing will extend to the work you do in class. You are actively encouraged to share code solutions with your colleagues.

The definition of “plagiarism” is not sharing, but doing so without proper attribution – in simple terms, passing off someone else’s work as your own. “Free software” or “open source software” is still based on ownership and requires attribution. Appropriating work without attribution is plagiarism and will never be tolerated. Take the opportunity not only to avoid this case, but to aggressively provide links to work on which your work is based, whether online or by your colleagues. See also the official policy outlined in your student handbook.

Leave a Reply