Final Independent Project

ASSIGNMENT OVERVIEW

In this assignment you’ll be working on an independent project of your own choosing, subject to the approval of the instructor. Some possible options that you might consider—either as actual topics of study or as inspiration for something similar—are listed below.

This assignment is worth 50 points and is due during your last week of class.

BACKGROUND

We’ve spent the year in this course investigating various aspects of computer science, computer programming, and technology. As a culminating project in here, you will be pursuing further study in one of the topic areas that we’ve covered, or investigating some aspect of computers and technology that you find particularly intriguing.

ASSIGNMENT SPECIFICATION

Pursue an independent study of some aspect of computer science, computer programming, or technology.

General Possibilities

More Specific Ideas

Examples of topics that you might consider focusing on include:

  1. Computer Game - Graphics Based
    Write a graphics-based computer game: Craps? Snake? Poker? Flappy Bird? Java supports graphical programs, or use Processing to write your code.
  2. Computer Game - Text Based
    There are lots of games that can be programmed without having to resort to developing graphics: Rogue? Mastermind? Poker? Use Java/Python to create a text-based game of your own design.
  3. Computer Utility - Graphics Based Write a utility: a graphical calculator, an encoder/decoder, an image processor, a simple graphical drawing program, etc.
  4. Computer Model/Simulation
    Write a Java/Python application that allows the user to simulation traffic flow through an intersection, elevators in a building, swarm behavior, etc.
  5. Website
    Learn about HTML and CSS in order to build a small (10-15 page) website, or investigate PHP/MySQL and create a dynamic site (perhaps one that implements a simple discussion board).
  6. Hardware
    Using an Arduino, Raspberry Pi, or some other hardware platform, build a stationary motion-tracker, a line-following robot, a numeric keypad lock, or an iPhone-based lock.
  7. Research: Server Virtualization
    Start an account at Linode or Amazon Web Services and start up a server that manages a simple webpage. Write a tutorial that guides someone through that process.
  8. Research:Study of Recursion
    Recursion can be a powerful tool for studying the behavior of certain functions, or even solving certain types of problems such as “The Towers of Hanoi.” Learn more about this subject, and build programs to demonstrate the process of recursion.
  9. Research: Diffie-Hellman key exchange, or RSA asymmetric encryption
    Research the Diffie-Hellman key exchange process and explain it. Write a program that illustrates the RSA asymmetric encryption process.

You may consider other options as well, subject to the approval of the instructor.

DELIVERABLES

Deliverables for this assignment vary depending on your chosen project.

You should keep a copy of your files in your home folder on the server—see additional comments on backup strategies below. To submit your assignment for grading, zip your deliverables as specified above and upload it to the directory /home/userID/forInstructor at crashwhite.polytechnic.org before the deadline.

ASSIGNMENT NOTES

GETTING STARTED

  1. Give some thought to what you want to do for your project, and submit your proposal on the spreadsheet online. I’ll be doing the same thing (doing an independent project, filling out the spreadsheet), so if there’s any question about what to do, copy me. :)
  2. Make a general game plan for what you plan on doing over in the time we have left. This might be a little difficult, especially if you’re taking on something that you’re not quite familiar with like learning to use a Java library. Make sure you budget a day or two for commenting and sprucing up your code—it's easier if you write JavaDocs as you go!—and a day for preparing your files for delivery and creating your PowerPoint presentation for the class. Those things take time, too.
  3. Based on your chosen project, outline the classes that you think you’ll need, as well as the methods those classes will require. Large-scale projects require consideration of the big picture—how are all those classes going to work together?—along with an attention to the detail work of implementing each class.
  4. As you come to better understand your problem,you will almost certainly find that you have to refine your project, including editing your classes, occasionally rewriting them entirely, or even throwing some of your original work out entirely. The ultimate goal is a robust program that works as intended, is easy for you to explain, and is easy for people reading your code to understand.
  5. If you’ve chosen a project that's appropriately difficult—and you should!—you might find yourself slipping behind self-imposed deadlines. In that case, you’ve got a few options:
    1. Accept that it’s crunch time and get busy—with enough time, you can solve any problem.
    2. Make appropriate modifications to your game plan and document them on the progress report spreadsheet.
    3. Keep going, and accept that your project is not going to be as successful as you’d hoped it would be. That happens sometimes.

SAMPLE PROJECTS (from past years)

EXAMPLE PROPOSALS

YOUR README.TXT FILE

A README.TXT file is type of documentation for your work. It is a plaintext file that accompanies your project, and identifies all sorts of salient information about the project.

Whenever you've started a New Project in BlueJ, you may have noticed that a generic README.TXT file is created in your project folder as part of that process, and that file does as good job of describing exactly what it is to be used for:

------------------------------------------------------------------------
This is the project README file. Here, you should describe your project.
Tell the reader (someone who does not know anything about this project)
all he/she needs to know. The comments should usually include at least:
------------------------------------------------------------------------
PROJECT TITLE:
PURPOSE OF PROJECT:
VERSION or DATE:

HOW TO START THIS PROJECT:
AUTHORS:
USER INSTRUCTIONS:

In addition to the information listed above, the README.TXT file often contains other information about the program:

In this project the README.TXT file will be a major component in your final project. The instructor needs to know this information for being able to evaluate the program, and may cite this information when exhibiting your work to others.

EVALUATION

To be determined