CS 106 Winter 2018
Assignment 09: Project
Question 1 Project
As a final assignment of the term, we would like to give you the opportunity to explore the many new ideas and tools you learned in CS 106 to create something of your own. This mini-project is very open-ended: you can basically choose any theme or concept you want, as long as it uses a sufficient number of CS 106 ideas. The rules are spelled more fully below.
The project runs for a bit over two weeks: from March 19th (right after the A08 deadline) until the end of April 4th (the last day of winter lectures, though there will be no CS 106 lectures or labs that day). There will be no extensions. The project is worth double the weight of a regular assignment. And while we will drop your lowest assignment mark at the end of the term, this assignment is not eligible for dropping: it will be counted, even if it's your lowest assignment mark.
The Menu
We'd like to see some breadth in the libraries, tools, and ideas you use in the project. To that end, we offer you a "menu" of topics from the term that you can choose from. Below you will find nine course-related topics. Your project must use five of them.
Input and Output: Reading and displaying images and vector illustrations; writing images, vector illustrations, or text.
Advanced Shapes: beginShape(), vertex(), endShape(), PVector and polar coordinates.
User Interfaces: Direct manipulation; ControlP5.
Geometric Context: pushMatrix(), popMatrix(), translate(), rotate(), scale(); hierarchical modelling.
Recursion: Drawing fractals or other self-similar geometric shapes.
Randomness and Noise: random(), randomSeed(), noise(); generative art and design.
Data Processing: Reading text, parsing text, finding patterns, regular expressions, processing information in tables or JSON, getting data from online APIs, data visualization.
You are also permitted to use the two additional options below. But please consider carefully before committing to them: they are more complicated, and therefore more risky. They will also help you less on the final exam, because they involve material we won't cover there. We encourage you to attempt these only if you're confident you know what you're doing.
Advanced Language Features: Write a non-trivial class; use Java libraries or language features not covered in the course.
Other Libraries: Make use of a Processing library not formally covered in class. Obvious candidates include 3D (PeasyCam, built-in 3D support), physics (Fisica, Box2D), video and webcams, computer vision (OpenCV), Sound, natural language processing (RiTa), Music (tactu5, MidiBus).
You can choose any combination of five features that suit your project idea. Of course you can use more than five if you need to, but it's not required.
For each of the features you're using, you'll be marked for both correctness (whether you're able to make the feature work as intended) and effectiveness (whether the feature is making a useful, non-trivial contribution to your project). The effectiveness mark is a bit of a judgment call, but we will be generous. The goal is to make sure you do something interesting with your feature. For example, adding a single line reading save(); to your sketch, saving a screenshot of your sketch window, would not be considered effective use of Input and Output.
It's important that we'll be able to run your sketch when you submit it. Please ensure that it's self-contained (for example, it doesn't rely on local files on your hard drive). Don't rely on unusual hardware (no Arduinos, no Myo armbands, no Leap Motion, etc.).
The Write-Up
Because we don't know what you're going to give us, you'll need to describe it to us. In the same folder as your sketch, you must include a write-up describing your project. The write-up can be a plain text file or a PDF, and must include the following sections:
Description: What is your project? What does it do? What was your inspiration? (One paragraph is enough for this.)
Instructions: Explain how to run your sketch, and how to use its features. The length of this section depends on how complex your sketch's user interface is.
Features: List which of the features from the menu above you used in your sketch. For each one, give one or two sentences explaining how you used that feature.
Your write-up will also be graded for correctness and effectiveness. It needs to explain the content and features of your project correctly, and it should make it easy for the course staff to understand how to use your sketch.
Call your write-up readme.txt or readme.pdf.
Submission
When you are ready to submit, please follow these steps.
If necessary, review the Code Style Guide and use Processing's built-in auto format tool. You do not need to use the precise coding style outlined in the guide, but whatever style you use, your code must be clear, concise, consistent, and commented.
If necessary, review the How To Submit document for a reminder on how to submit to LEARN.
Make sure to include a comment at the top of all source files containing your name and student ID number.
Create a zip file called A09.zip containing the entire A09 folder and all its subfolders. The A09 folder should probably contain a single sketch with a suitably chosen name. That sketch folder should contain your write-up (readme.txt or readme.pdf). Of course you can also have a data/ folder in the sketch as needed.
Upload A09.zip to LEARN. Remember that you can (and should!) submit as many times as you like. That way, if there's a catastrophe, you and the course staff will still have access to a recent version of your code.
If LEARN isn't working, and only if LEARN isn't working, please email your ZIP file to the course account (see the course home page for the address). In this case, you must mail your ZIP file before the deadline. Please use this only for emergencies, not "just in case". Submissions received after the deadline may receive feedback, but their marks will not count.