CS2141 Project
Summer Semester, 2010
Proposal: Email by Friday, 25 June 2010 at 11:59PM
Due: Friday, 13 August 2010 at 11:59PM
The objective of this project is to have you implement a sizable programming
project. Rather than simply dictating 'you shall do X', I am instead
giving you the opportunity to pick a project that interests you, effectively
giving you credit for working on your own projects.
The largely open-ended nature of the project also necessitates a documentation
requirement, including both a proposal and a README file.
Requirements
You are free to propose basically any project you think would be
interesting, subject to the following requirements:
-
Major C/C++ Component
-
While you are free to use other langauges as part of your term project,
a significant portion of the project must be written in C or C++. (eg
a C++ program that integrates Lua for scripting or Perl for regex).
-
Utility
-
Your project must do something useful to someone. Put another way,
you should be able to find a (hypothetical) user for your program.
(This works especially well if you are the hypothetical user.)
-
Significance
-
Completing your project must require a significant amount of code and/or
thought. Implementing a single class is not going to cut it, unless it
is a particularly big and interesting class.
-
Legality
-
This probably goes without saying, but it must be legal for you to
develop your project and submit it to me for grading. This means that
you can't work on things that would be blocked by licensing issues.
-
Gradability
-
If at all possible, your project should be runnable from a lab machine.
This implies using libraries already installed on the lab machines,
supporting Linux, etc. However, I am willing to waive this requirement
if there is a good reason to not support the lab machines (eg working
with microcontrollers or implementing something for Windows or OS X).
Suggested Projects
These suggestions are intended to get you thinking, rather than providing
an exaustive list of projects. If something here grabs your fancy, go for
it, but don't think you have to pick something I suggest.
-
Gradebook Software
-
In the past, students were assigned the creation of a gradebook as their
term project. You may choose to accept this project "as is" and implement
your own gradebook. Note that choosing to implement the gradebook means
you have to satisfy all of the requirements on the gradebook page.
-
Data Management
-
Gradebooks are only one form of data management system. Software that
manages any sort of data (a checkbook, a CD collection, etc) can make
a good starting point for a project.
-
Game Development
-
While Tic-Tac-Toe is (probably) a bit too simple, there are all sorts of
games that can be reasonablely implemented for this project. You could
design a new program for playing Chess or Go, or invent a game of your
own. Both text-based and graphical implementations are fine.
-
Graphics or Image Manipulation
-
While C++ does not understand graphics or images on its own, there are
many libraries that add in support for them. Using those libraries to
do something interesting or fun is certainly an option.
-
Modification of an Open Source project
-
Your project may involve work on an open source project of your choice.
This could take the form of bug fixes or implementing new features. Per
the legality requirement above, you will be responsible for upholding
the license of the project, which may require submitting your code to
the project.
-
Embedded Computing
-
C/C++ is pretty much the defacto language for embedding computing. You
could exploit this fact to, say, build a robot or create a network
of smart lights. (Obviously, the code going on the micro need not
run on a lab machine.)
-
AI
-
You could implement an AI player for a game (one of your own devising,
or a bot for an existing game), or do something interesting with boids,
autonomous robots, language processing, etc. Note that having your AI
become Skynet, GLaDOS, or some other human-hostile entity will result
in a major penalty being applied to your grade.
Documentation
Given the open ended nature of this project, you will be required to
submit some documentation in addition to the normal code commenting.
Your documentation should be clear and easy to read, and should be in
paragraph form for the most part. Use of diagrams, lists, etc is
acceptible, where appropriate. You can assume that the reader/user knows
something about programming in C++ and using a modern computer, but
don't assume they know anything about your particular program (because
they won't).
I can look over your documentation for you, to make sure it is
sufficiently detailed and well written. You WILL be graded on
spelling, grammar, structure, clarity, etc, in addition to the content of
your documentation. Minor deficiencies will be overlooked, but you will
lose points if your mistakes interfere with readability.
Proposal (submit via email by 11:59 PM, 25 June)
You are required to submit a written proposal for your project. It should
be emailed to me by 11:59PM on 25 June, and should be either plain-text
(eg .txt) or a PDF. No OpenOffice, MS Office, or iWork files, please.
The proposal spells out what you intend to do for your project, and is
semi-binding. You will need a good reason to change your project
significantly once a proposal is accepted. Your proposal should include:
- A description of what your project will do. This should include major
functionality and some indication of why you feel the project is interesting.
Also include information about intended users, if this is not obvious.
- A breakdown of how you will go about implementing your project (eg in
which order you plan to implement features.)
- Details of what you will be submitting for grading. For the most part,
this is obvious (a working program doing X), but libraries or patches to
existing projects require additional thought.
- A listing of any hardware or software that will be required for
grading, above and beyond the resources available in lab. (eg
a microcontroller, a machine with a particular graphical environment, etc.)
- Any additional class topics you think would help you develop your
program. (eg a lecture on graphics libraries or interacting with the OS.)
I will review your proposal to verify that your project is a) large enough
to count as your term project and b) actually completable in the time
available. If this is not the case, I will suggest changes to your project
to make it more reasonable. I may also offer suggestions for how to go
about implementing your project. These comments will be returned to you
no later than 9 July, and will likely be returned prior to that.
README (due: 13 August, with the project)
You must write a detailed README file, to be submitted with your finished
project. The file must be a plain text file or PDF (no OpenOffice or the
like), and must be named README. This file will be a combination user
manual and developer specification, and must include, at the minimum:
- Detailed instructions for compiling your program. This must include
information about any non-standard libraries or environments required
for compilation.
- A complete set of instructions for using your program. Include
information about accessing all of your program's (major) features.
- If your program makes use of long-term storage (either flat files or
a database), include a specification for the format of the files.
NOTE No implementation testing will be performed on projects
submitted without a README, resulting in you receiving a maximum total
grade of 45 points on this assignment.
Code restrictions
Your project may be comprised of a single file, however, if functions or
additional classes are used, they should be in seperate files with their
own headers.
Unless there is a very good reason for this not to be the case, your
program must compile and run on the lab computers. To that end,
you may only use libraries already present on the lab computers, or which
you have written yourself unless you receive explicit permission to do
otherwise.
You must provide a means of compiling your project equivalent to creating
a Makefile with default, run, and clean rules.
Grading
Grading for this assignment is twofold. One quarter of your grade is
determined by the quality of your documentation. (Getting a proposal
sent back for modification doesn't actually count against you.) The
remainder of your grade depends on the quality of your implementation,
with points awarded for coding style and compilation.
Grade sheets for this program are here
If your project cannot be graded without additional resources (eg a
particular software environment or the presence of extra hardware),
you will have to arrange a time to demo your project for me. Projects
that cannot be turned in via submit will also require other arrangements.
Hopefully Helpful Hints
- Pick something that interests you. It's a lot easier to work on a
project you thing is cool.
- Start Early! This program will take more time than you would expect.
- Make sure you comment your code! Proper documentation and formatting
is an important part of your grade, and can make your life easier.