CS601 Semester Project: Web EMail Server

Spring 2009

Note: I reserve the right to make changes to this description up until the project is formally assigned.

In this project you will build a web site that acts as a web-based email client server like hotmail, but with some nice additions. You will be required to submit functionality and design documents to complement your project as well as status reports every two weeks.

To give you an idea what an extremely successful project looks like, here are the videos Jean Bovet made of his project:

The completed project is due last day of class but you will do interim releases roughly every three weeks during the semester. For these releases, you can demo in front of the class if you want, but in general you will demo your project for the instructor and the TA.

Goals

My goal with this project is to have you produce something interesting and useful that makes you learn about the following:

Features

There are three levels of completion: "required", "B", and "A". Note: You must complete the required level to pass the entire class!

CS601 students: To get an "A" you must go significantly beyond the "B" level and will be judged in comparison to other students' projects.

Be advised that I will adjust your grade according to the quality of your project's functionality. For example, if you have a buggy or bizarre POP implementation, I will mark it down.

You are to write all functionality--you cannot take James or other POP code from the web. I want you to specifically implement POP and SMTP protocols, for example. That said, once you demonstrate SMTP and POP to me working with your code, you may use java.mail in order to handle attachments etc...

Any code you cut/paste must be attributed to the source. Naturally, you may do "research" on the web by looking at other projects, but you must actually implement all code yourself.

Please discuss all external library use with me before you use them. You may, but are not required to, use StringTemplate for web page generation. You may use plain servlets or JSP.

CS601 students

Required Functionality

B Functionality

A Functionality

I can suggest using Lucene search engine instead of the linear walk, add ability to send/receive attachments, add spell checking, and spam filtering. You are not limited to these features of course.

CS342 Students

Required Functionality

B Functionality

A Functionality

I can suggest using Lucene search engine instead of the linear walk, add ability to send/receive attachments, add spell checking, and spam filtering. You are not limited to these features of course.

Notes

All of the features in the various levels are deliberately ill-specified. Part of your evaluation will be how well you listen in class to the instructor and the other teams concerning feature definition. You are responsible for listening and recording people's ideas and comments. If you have questions, you are encouraged to discuss feature definitions (not actual implementations) with other teammates and you are encouraged to discuss the project with the instructor or TA. Again, you are responsible for defining the features more precisely.

Guidelines

Release Schedule

Releases: Nov 4, Nov 18, Dec 9

Submission

To grade your project, I will evaluate your work with you demonstrating it during/after class every 2 weeks. I will normally ask you to walk me through the code so I can get an idea of your programming style. I will look more deeply into your code if you want me to.

You must demonstrate your software running under linux (though you may use a PC browser to access the server). In other words, you will need to be able to compile and run your software with Jetty web server on linux. I will not accept software that only runs on a PC nor one whose database is on a PC. For those developing this under Windows, be advised that this is a bad idea: students who do so invariably have problems with file names, newlines, etc... You should always develop an application using the environment under which it will be deployed.

You must also submit in printed form at each release a well-written summary of your system features, system design, and database schema. You will update this document as your system progresses. How well and how thoroughly you write this up is a nontrivial part of your grade for the project. If you must, have a native English speaker proofread your summary document and make suggestions. Each report must include a page or two that describes briefly what features from the various levels you have completed and which additional features you have.

Every release, we will allocate a class period for release evaluation. With so many projects, we sometimes cannot fit them all in the class period so some students may need to sign up to demo their project for me or the TA outside of class.

Grading

If you complete the features from the required level only, you will get a C for the project. If you complete the B level, you will get a B naturally. In order to get an A, projects will be judged in comparison to other projects (CS601 only). All students will be trying to build extra features furiously to get into the A range--only a subset (at instructor discretion) of these students will get an A so there is some risk just like real life--you might finish B level work and then do some your extra work only to find it isn't sufficient for A level (when judged against other projects).

The authors of the best 2 projects in the class will be excused from exam II.

You must complete the required level to pass the entire class.

The evaluation of "quality" is necessarily a subjective measure, but I will do my best to quantify what I'm looking for and rate you all according to the same measure. Each feature will be rated at each release (if it is complete).

By definition, there is no late project--your last working release will be considered in lieu of any unfinished project. Missing a release in order to achieve a better result at the next release is acceptable, but remember missing all releases to turn in a finished project in December will yield a poor score.

The TA and instructor will review your work for 10 or 15 minutes at each release.

At each release, we will rank all projects and email it around. A grade will only be assigned at the final release.