Morgan Schwartz
office: Nugent 560, Room A
tel: 1-212-774-4865
email: mschwartz AT mmm DOT edu
web: http://sodacity.net/courses/
FALL 2009
Section 02 Monday, 7:15 pm - 9:55 pm
Nugent 556
Software is embedded in many objects that we use on a quotidian basis. These range from the more obvious (computers, cell phones) to the often imperceptible (elevators, toasters, toys). Software as such has social implications: software designers play a large role in crafting both our virtual worlds and our interactions in the physical world. In this course you will learn basic computer programming concepts that can be applied to a wide range of programming languages. You will collaboratively experiment with these languages to create your own software projects. Through critical readings and case-studies of mainstream software applications you will gain greater understanding of the social, political and technological forces at work in software development.
Note - previous experience with computer programming is NOT necessary.
Students will:
materials:
USB Flash Drive (256MB or bigger) - OR - portable Hard Drive
software:
Download and install the free Processing programming environment to your computer.
texts:
all required readings will be available online or handed out in class
attitude:
Your enthusiasm, curiosity and willingness to learn.
optional technical texts:
Processing.org is an invaluable online resource. There are also many good books available on computer programming and software design in general and Processing specifically. Please feel free to speak with me directly if you'd like to explore some additional texts.
optional history/theory texts:
A large amount of class time will be dedicated to group critiques, knowledge sharing, in-class assignments and class discussion. I encourage you to take an active role in contributing to make our class a fun and dynamic place to be.
You will have 8 homework assignments to complete. Also, by the end of each class period, you will create and turn in a new computer program. In the spirit of a sketchbook, your code needn’t be perfect (or even have to entirely work) - but should reflect an attempt to utilize the concepts presented in class that day.
In groups of 2 students, choose one:
Your final project will be a novel software design. You will prepare a technical and conceptual proposal for a new piece of software as well as a small prototype or component of this project realized in code. The emphasis will be on the conceptual design which must be thorough and well-conceived. The prototype does not need to be a fully functional piece of software, but should demonstrate a grasp of basic computer programming principles and best practices. You will demo this prototype for the class. You will work collaboratively in design teams on this project.
Electrical:
Water/liquids are a excellent conductors. You can be shocked if you are touching water that touches electricity. Be careful with drinks around the computers!
Carpal Tunnel
Computer keyboarding, typing and use of the mouse are among many common activities that have been identified as contributing to repetitive stress induced carpal tunnel syndrome.
Eye Strain
Staring at a glowing monitor for extended periods of time can cause headaches, eyestrain and problems with your eyesight. Remember to take frequent short breaks by looking away from the monitor and focusing on something in the distance, or close your eyes for a moment. Your eyes need a break!
Attendance will be taken in each class. You are allowed one unexcused (no questions asked) absence, after which your final grade will drop substantially with each absence. In the event that an extraordinary circumstance will require you to miss a class, please let me know ahead of time, by calling me, or by email.
Students with disabilities who require reasonable accommodations or academic adjustments for this course must either enroll in the Program for Academic Access or register with the Office of Student Support Services. For any accommodation, the instructor must be presented with either a letter from the Assistant Director of the Program for Academic Access or an Accommodations Card from the Office of Student Support Services during the first week of classes.
MMC fosters an academic community where students and faculty work together to create a learning experience that imparts knowledge and forms character. To achieve this, the College requires all members of the community to adhere to the policy of Academic Honesty that can be found in the Student Handbook, the College Catalogue and on the College website.
In-class:
Due:
In-class:
Read for today:
Due:
In-class:
Read for today:
Due:
4 Lines - Part 2 - Complete Part 2 of the in-class exercise from last week
in-class exercise: bounce
In-class:
Read for today:
Due:
In-class:
Read for today:
TBA
Due:
In-class:
Read for today:
Due:
In-class:
Read for today:
In-class:
Read for today:
* "Chapter 10 – People and Prototypes" from Designing Interactions by Bill Moggridge [PDF]
Due:
In-class:
Read for today:
Due:
In-class:
Due:
In-class:
In-class:
Due:
In-class:
Due:
Attachment | Size |
---|---|
Gillian-Crampton-Smith_What-is-Interaction-Design.pdf.pdf | 1.03 MB |
John-Maeda_The-Laws-of-Simplicity.pdf | 1.88 MB |
Bill-Moggridge_Larry-Tesler.pdf | 1.82 MB |
Bill-Moggridge_Bill-Verplank.pdf | 1.14 MB |
A series of exercises for learning computer programming with Processing
Using the following five items, write instructions for making a peanut butter and jelly sandwich:
save your instructions as a text file:
yourLastName_peanutButter.txt (mine would be schwartz_peanutButter)
Sample file: Hello, World!
Copy and paste the code from the sample file into a new processing sketch. Manipulate the file to do the following things:
Try to make an interesting composition given your limited set of tools.
Export and save your sketch in your student folder on the server with the folder name:
yourLastName_helloWorld (for me it would be schwartz_helloWorld)
Save your file as:
yourLastName_observationalAlgorithm
note: - you may only use horizontal, vertical, or diagonal lines
Part 1:
Part 2:
1. Replicate your sketch from Part 1 but use a for structure to automate your code.
2. Save it as yourLastName_oneLineFor
If time permits:)
Part 3:
// create an image variable
PImage img;
// load the image (it must be in your sketch's data folder
img = loadImage("someimage.jpg");
// tint (gray, alpha) or tint (val,val,val,alpha) tint(255,0,0,50);
// display the image image(name, x, y, width, height)
image(img,0,0);
example and code for: bouncing growing line
code for: bouncing bowie
example and code: simple drawing tool
code for: drawing bowie
Try to break up your project into specific user stories - you should have at least 2 (but more might be necessary). The idea is to think about your software design in terms of specific requirements and to create a user story about each one. These can simply be typed into a text document and included in your processing project folder.
here's the basic format:
1. statement in the form "As a [user role], I want to [goal], so I can [reason]."
2. brief discussion/explanation of the requirement (including a diagram/sketch if necessary)
3. confirmation - how will you know if the feature is working
for example
1. As a [user], I want to [press/release the mouse], so I can [start/stop drawing]
2. Discussion - the tool should only draw when the mouse button is pressed down, when the user releases the button, drawing should stop
3. Confirmation
1. success: user presses the mouse and drawing starts, user releases the mouse and drawing stops
2. failure: drawing continues if user is not pressing the mouse button
// set an image variable
PImage arrow;
// set a speed variable
float speed;
void setup() {
// set your display size(400,400);
// load the image
arrow = loadImage("arrow.png");
}
void draw() {
// draw with points
//point(mouseX, mouseY);
// calculate speed
speed = abs(mouseX-pmouseX);
// control the stroke weight strokeWeight(speed);
// draw with lines
//line(mouseX, mouseY,pmouseX,pmouseY);
// draw with an image
image(arrow,mouseX,mouseY,speed,speed);
}
Create a typing program to display a different image for each letter on the keyboard.
capture keyboard input
int x = 100;
int y = 100;
PFont font;
void setup() {
size(500,300);
smooth();
strokeWeight(4);
font = loadFont("Arial-Black-48.vlw");
textFont(font); }
void draw () {
background(204);
if (keyCode == UP) {
y--;
}
line (20,y,100,y);
text(key,28,75);
}
create simple mouse buttons
void setup() {
size(500,300);
noStroke(); }
void draw() {
background(204);
if ((mouseX <= width/2) && (mouseY <= height/2)) {
fill(0);
rect(0,0,width/2,height/2); // upper left
} else if ((mouseX <= width/2) && (mouseY > height/2)) {
fill(255,0,0);
rect(0,height/2,width/2,height/2); // upper right
} else if ((mouseX > width/2) && (mouseY < height/2)) {
fill(0,255,0);
rect(width/2,0,width/2,height/2); // lower left
} else {
fill(0,0,255);
rect(width/2,height/2,width/2,height/2); // lower left
}
}
capture mouse input
void setup () {
smooth();
size(300,300);
noStroke(); }
void draw() {
background(222);
float x = mouseX;
float y = mouseY;
float ix = width - mouseX;
float iy = width - mouseY;
if (mousePressed) {
cursor(CROSS); // ARROW, CROSS, HAND, MOVE, TEXT, WAIT
ellipse(ix,iy,20,20); }
}
Create a clock that communicates the passage of time through graphical quantity or imagery rather than numerical symbols.
basic clock:
int s,m,h;
String time;
PFont myfont;
int x = 65;
int y = 60;
void setup() {
size(300,100);
myfont = loadFont("Garamond-48.vlw"); textFont(myfont);
}
void draw() { background(0);
s = second();
m = minute();
h = hour();
time = h + ":" + m + ":" + s;
text(time,x,y);
}
line clock:
void setup() {
size(100,100); stroke(255);
}
void draw () {
background(0);
float s = map(second(),0,60,0,100);
float m = map(minute(),0,60,0,100);
float h = map(hour(),0,60,0,100);
line (s,0,s,33);
line (m,34,m,66);
line (h,67,h,100);
}
In groups of 2 students, choose one:
note - You must work in groups of 2 or 3.
Software design is all around us. It governs large systems like financial markets and also subtle experiences such as how we select a song on an MP3 player. Software affects us in countless ways everyday. It is our responsibility to participate in envisioning its future.
Imagine: you have been provided with 10 gazillion dollars of venture capital and a crack team of engineers and computer programmers who can make anything you design.
The Challenge: develop a novel software design. You will prepare a technical and conceptual proposal for a new piece of software as well as a small prototype or component of this project realized in code. The emphasis will be on the conceptual design which must be thorough and well-conceived. The prototype does not need to be a fully functional piece of software, but should demonstrate a grasp of basic computer programming principles and best practices. You will demo this prototype for the class. You will work collaboratively in design teams on this project.
Any idea is welcome - you just have to make your case.
Project Proposal – due November 23
In this section, write a few paragraphs that describe what the project or software will do. What is the problem it is trying to solve? Why does it need to exist? Who will use it? By answering these questions, you establish the scope of your design.
Design Document – Rough Draft due November 30
How did the idea for this software come about? What is the problem it is trying to solve? Why does it need to exist? Who will use it?
Specifically address:
Competitive Analysis - Assess current alternatives/options. What are their strengths and weaknesses? How does your idea fit into the current landscape? You should case study at least 2 other software products in this section.
What is the look and feel for this project? How can specific design decisions make this software appealing and usable to your target audience?
What is a suitable development platform for your project? What kinds of existing technologies can you leverage (open-source code, hardware)? What kinds of new software/hardware needs to be developed to realize your project? You should present your research on the pros and cons of at least 2 different technologies that could be used in developing your project.
A use case is a description of how users will perform tasks with your software. Who can do what?
A use case includes two main parts:
Each use case captures:
You should write at least two use cases for your software. You should write each a use case as a mini-narrative.
A prototype is a draft version of your software. Prototypes allow you to explore your ideas before investing time and money into development. A prototype can be anything from drawings on paper (low-fidelity), click-through of a few images or pages, or fully functioning software (high-fidelity).
You will create 2 prototypes: a UI prototype and a software prototype.
UI Prototype
This can be done with photoshop/illustrator to create a series of pages that will simulate how a user will interact with your creation. You can think of this as a storyboard or flowchart. The storyboard should represent important UI features (menus, buttons, etc) and demonstrate the ways that a user can interact with your software. These can be presented as a series of PowerPoint slides or in the form of a simple website. For your rough draft, this can be in the form of sketches on paper.
Software Prototype
You will determine a suitable aspect of your project and attempt to prototype it in Processing. I’ll work with each group individually to determine the appropriate part of your project to implement. Please turn in the code for this part of the project. This is not due for the rough draft.
Presentation & Final Design Document – due Last Class
A 10 minute presentation in the form of Power Point or a webpage/blog. Please turn in either a copy burned to CD or a URL.
The presentation should incorporate the following:
!!! your device/service does not have to completely work - but you need to explain how it would work.