Course Project
Project overview
The goal of the project is for you to define how you spend your last few weeks of the term. You should implement some new idea, or expand further something we’ve done so far, in a way that interests you.
See below for project ideas. You can also brainstorm your own.
Scope
The scope of the project should be roughly two assignments. You can work with a partner, including submitting a single proposal.
Goals
The goals of the project are two-fold:
- Implement something that interests you.
- Practice code design, testing, and documentation.
Partners
You are allowed to work on the project with a partner, and for each deliverable, submit only one for the pair. This means that you can work together on the code, and do not need to type it up separately.
Deliverables
There are three deliverables for this project:
- Proposal, due Monday 5/13/24
- Code, due Monday 5/27/24
- Writeup, due Wednesday 5/29/24
Note that you can use one token on the proposal, although you really do want to get the project proposal okayed as soon as possible. You can use up to two tokens on the code, but that will make it a bigger time crunch to finish the writeup.
Tokens cannot be used on the writeup, as that is due on the last day of class, and assignments cannot extend into reading days.
Proposal
Your proposal should be similar to the online writeups for each assignment. You do not have to provide code, but describing the functions you’ll need to write and the class(es) you’ll need to design is necessary. If your project will have a UI, you should sketch it out (a picture of a pencil/paper sketch is fine). If it is text-based, you should give an example of the output. In both cases, you should describe the input to your program (a file of data, an image, user clicks, etc.).
You should submit the proposal as a .pdf
or .txt
file on Moodle by 10pm on Monday 5/13/24.
Code
Your program should be of the scope of two assignments, and include the following:
- Some form of user input (can be a file, an image, the user typing or clicking, etc.)
- Some form of output (a new file, a displayed image, an interactive UI, printed output, a plot, etc.)
- At least two new classes defined by you (this can include subclasses, which we’ll see in Week 8)
- At least four unit tests to test at least two functions
- Functions and classes should be well-used to divide the code up logically – if you have a function/method that is more than 10-20 lines of code, think about how you might simplify it
You should submit the code as a single .zip
file on Moodle by 10pm on Monday 5/27/24. Note that your code should work as-is, so if you need a file (e.g., graphics.py
), you need to include that in your .zip
file.
Writeup
You should provide a writeup for the final project, describing what you did, how to run/use your project, etc., as well as screenshots of your project in action.
You should submit the writeup as a .pdf
file on Moodle by 10pm on Wednesday 5/29/24.
Project ideas
Write a game
- Tic-Tac-Toe against a computer player
- Break Out
- Flappy Bird
- Ghost, a text-based game of word building (example: part 1 and part 2 and part 3)
Data analysis + visualization – find your own interesting dataset!
- Perform analysis on the dataset and plot the results, for example aggregating over months
- Perform Principal Component Analysis (PCA) given a set of data
Simulation
- Simulate a robot cleaning a room
- Simulate Conway’s Game of Life
- Simulate entropy (ask Tanya about the kids’ book that inspired this idea)
- Simulate a string of weights connected by a rope
- Simulate virus dynamics
Image processing
- Find the “most common colors” in an image, and recolor the image using this smaller color set
- Add the ability to “paint” an image by clicking on a pixel and using the color to modify nearby pixels
- Blur/sharpen an image based on user clicks
- Detect edges in an image
- See this page or play around with a free image manipulation program like GIMP for more ideas
Software engineering
- Choose something, like image processing, and measure runtimes of various functions; plot these runtimes as the image changes size
- Add error handling (for malicious user input) to the code for one of our previous assignments, and write test cases to check original and new functionality