Final group project
Proposal due: 2023-11-15 at 23:59
Status report due: 2023-12-06 at 23:59
Report due: 2023-12-20 at 09:00
Presentations: 2023-12-20 09:00–11:00
The project consists of a proposal, a status update, implementation, final report, and presentation.
The specific project is up to each group. However, it must involve a significant amount of effort—more than one or two people could do. All partners are expected to contribute to the implementation, the write-ups, and the presentation. Division of labor within each part is expected and good!
Any group member who does not participate in every part of the project will fail the course. No exceptions without prior approval from Prof. Checkoway.
The GitHub Classroom link for the final project is here. Do not create a team or accept the assignment until after you have formed a group.
The programming portion of the project must be (mostly) written in Rust and must use one or more crates from crates.io. Otherwise, the specific project you choose is up to you.
Collaboration and coordination between group members must happen on GitHub. This means regular commits from all group members are expected. I strongly recommend you learn about pull requests and use them along with code review of each commit before it gets pushed to master. Using GitHub issues to track bugs that need to be fixed or features that need to be implemented is a great idea and is encouraged.
Some project suggestions include
- Program a microcontroller (like an Arduino) to use some sensors and lights/actuators to do something (you can test with a simulator)
- Implement a game using a game engine like Amethyst or Fyrox.
- Use the Rust bindings for OpenCV to do something with computer vision
- Implement some machine learning algorithms (like k-means or k-nearest neighbors) and run them on some interesting datasets and do some visualization or use existing implementations of ML algorithms
- Build a website in Rust via WebAssembly.
- Make some interactive art (audio and video)
Previous projects have included games, scenes in virtual reality, programs communicating over a network.
A written proposal (750-word maximum) is the first step.
You should provide the following information
- What are you doing?
- How are you doing it?
- What do you need to learn to do it?
- A proposed schedule with milestones (the status update will discuss the milestones so you might want to track these on GitHub.
You should provide this information in narrative form (i.e., don’t just submit a list of questions and answers). You should use this as an opportunity to practice technical writing.
The proposal will be submitted via Blackboard by a single group member.
A maximum 750-word status update is due several weeks into the project. The report should summarize the project, including any changes in direction or scope from the proposal and why those changes were made.
The update should also provide a revised schedule with milestones. If you’re on-track, you should say so. If you’re not, explain how your revised schedule differs from the original schedule.
It’s completely fine to drop features if you find that you were overly ambitious in the proposal. Just explain how doing so will let you complete the project successfully.
The status update will be submitted via Blackboard by a single group member.
A maximum 1500–2000-word final report is due before presentations begin. This should include a standalone description of your project. You should describe what you accomplished and what you weren’t able to accomplish. Explain what the most challenging aspect of the project is. What was the most fun part?
Include anything else you think I should know.
The final report will be submitted via Blackboard by a single group member.
During the scheduled final exam time, you will give a seven minute presentation on the project. This includes five minutes of talking (among the four of you) and two minutes of answering audience questions. Every group member must speak.
If you’re able to do so, I strongly encourage you to give a demonstration of your project.
You should tell the class who you are, what you did, and how you did it. You can tell us what didn’t work or was almost working if you would like. If you do a demonstration, you should show off some cool features.
Public speaking is very hard. This is a low-stakes way to get some practice at it in a supportive environment.