Due Sunday, December 18, 2011 11:59PM
Note: this page is in draft form, revisions will occur as issues arise
The goal of the final project is to demonstrate your knowledge of Open Source tools. This is an open-ended assignment, so your grade will be determined based on the two key factors: how ambitious the project you choose is, and how well the project works.
In assignment 3, we wrote a command line tool to create and vote on surveys, and in assignment 4, we put together a web-based interface to this system to allow voting. For the final project, we will adapt this into a full featured web-based application. There are a wide variety of features that could be supported, and it is up to you how far you want to go. First, some requirements for this project:
- It must be written in Python and deployed with App Engine.
- It must be developed using git, with regular code commits.
Here are some suggested baseline ideas:
- The system should handle multiple users and associate surveys and votes with a logged in user.
- Users should be able to create and edit a survey via the web.
- Users should be able to vote on a survey via the web.
- Users should be able to view the results of a survey on the web.
- Users should be able to browse other users' surveys.
- Keep track of who voted on each survey and don't let a user vote for the same answer twice.
This set of functionality is enough to get you a satisfactory grade (B) on the project. To get an A, you will want to come up with some additional functionality on your own. Here are some examples of ideas (by no means should you do all of these!):
- Allow a user to change their answers in a survey.
- Support images as answer choices in a survey.
- Support sections and perhaps subsections in a survey.
- Support user comments.
- Implement an administrative interface for a special "super user" that can be used to change surveys for any user in the system.
- Set up a model of friends and sharing and let people set permissions for who can vote on or view a survey.
- Search capability to find surveys that match supplied keywords.
- Support for expiration time in surveys.
- Show surveys by popularity, meaning how many votes have been cast weighted towards more recent events
Note that you do not need to maintain data compatibility with the previous assignments, nor do you need to port any data over from the previous directory structure. You will be storing your surveys and answers with Google App Engine. App Engine provides a built-in object store which you should use.
To learn more about App Engine, please be sure to read the following web pages:
There are bound to be lots of questions. To address the major ones:
- How do I know if I've done an acceptable project?
I expect the size of this project to be about 1.5 times the size of a homework. It should take you between 2 and 3 weeks. If you want feedback about an idea, you can submit it to the TA (be as specific as possible). Or even better, come by my office hours before class on a Wednesday.
- Can I do a group project?
Although group projects are often a logistical nightmare, you can work in groups provided: (1) You do a project that is n times bigger if you have n people; and (2) Each person in the group accepts that their grade on the project will be affected either positively or negatively by the other group members.
- Can I write the project on my home computer?
You may develop the project anywhere you want. You can download the SDK for App Engine from the links listed above. You can also download GIT here. Be sure to hand in the .git repository and make sure you have tested your app before submitting.
- Can I use third-party software packages?
You may use any third party software so long as it is freely available. You must document in your developer guide what packages you use, if any.
- This project sounds stupid.
That's not really a question. But you are welcome to pick your own project. If you want to do so, mail me to check if it's acceptable.
All projects must include documentation. The documentation must include two documents:
- A user guide to your program, which describes how to use the program
- A developers guide that explains how the project is designed and coded.
Via the homework submission system, submit (1) your git repository, (2) your user guide, (3) your developer guide, and (4) the project URL we can visit to try your project. The git repository should be created as a compressed tar archive of your .git directory, and should include no other files. To create, you can do the following:
tar -cvf project.git .git
# now submit project.git.gz
If you do not have gar, you can use zip:
zip -r project .git
# now submit project.zip
Do not use other formats/methods.