Spring Semester 2008

January 28, 2008 – May 2, 2008

Assignment 7: Exploring the Final Frontier

Out on: March 27, 2008
Due by: April 7, 2008, 11:00 am (before lecture)
Collaboration: Teams
Grading: Packaging 10%, Style 10%, Performance 10%, Design 20%, Functionality 50%

Overview

The seventh assignment for is all about starting your final project which will occupy you for the rest of the semester. Note that some parts of this assignment are not really about actual code. You'll see... :-)

This is a team assignment, and all of you should know which team you're in (I hope). Decide early on who is going to be responsible for submitting the assignment and when. Make sure to include all the relevant information (who is in the team?) in your README file! Decide on a schedule early on as well, nothing delays working in a team more than having to schedule meetings ad-hoc; compare your schedules and arrange to meet in advance! All members of a team will receive the same score for the project you submit together. After the assignment is over, each of you will be asked to evaluate the contribution your partners and yourself made to the assignment.

Problem 1: Team Website (20%)

Consider yourself a startup company with a plan to take over some segment of the computerized world. Your first task is to set up a website for your shiny new company; be sure to include the following:

Please make sure that your website validates as XHTML 1.1 (check the HTML for this page to see how to add a suitable link). Please put your website online somewhere and email us the URL as soon as possible! You still have to submit the HTML for your website when you submit the rest of your assignment!

Problem 2: Versioning and Automation (30%)

Aside from making a decent "public" impression with your website, your development environment should also be set up in a somewhat professional way. Here are some of the things you should do:

Note that documentation in some plain text format is easier to maintain in Subversion than opaque prorietary formats; we recommend plain ASCII text, troff or man page format, LaTeX, or DocBook. Also, cron can be a bit tricky to use. Remember that it works on a "per machine" basis, not on a "per account" basis. So don't change crontabs all over the place, and only have one person be responsible for setting this up. You must submit all your automation scripts and a short description of your automation setup when you turn in your project!

Problem 3: Basic Prototype (50%)

The most important part of this assignment is that you develop a first basic prototype of your project. What exactly that is depends on what your project is, but whatever the outcome of this assignment, it should run and it should fundamentally work. It might not have all the features you want, it might not be as fast as you would like, etc. but is has to work and it has to be recognizable as a first version of the final intended outcome.

So again, to make sure you get this: You must submit a working prototype! Explain what is there and what is still missing in your README file and you should be good.

Hints

There's really only one hint: Remember that you're going to maintain the code you produce for this assignment for a while. Aside from writing clean code, it may be a good idea to start documenting in a way that allows others to just read the documentation for a certain module, not the module itself. I recommend looking at doxygen for that.

Deliverables

Please turn in a gzip compressed tarball of your assignment; the filename should be the filename should be cs211-assign-7-teamcode.tar.gz with teamcode replaced by the code assigned to your team for your repository and your mailing list. The tarball should contain no derived files whatsoever (i.e. no executable files), but allow building all derived files. In particular, make sure you don't submit all those .svn folders from your repository! Include a README file that briefly explains what your programs do and contains any other notes you want us to check out before grading. We expect that your Makefile handles "the usual" targets like clean and test aside from all (which is the main way we will build your program). Include other "common" files such as INSTALL describing how to install your tool, CREDITS to pay your respects to the people whose code you're reusing, and LICENSE to describe copyright and distribution terms if you feel like it. You can look at any number of "famous" open source projects to see what kind of structure is appropriate; gif2png is a relatively small example, but you don't need everything in there. Aside from your code, what you really need is a README and a Makefile that works. :-)

Grading

For reference, here is a short explanation of the grading criteria. Packaging refers to the proper organization of the stuff you hand in, following the guidelines for Deliverables above. Style refers to C programming style, including things like consistent indentation, appropriate identifiers, useful comments, suitable documentation, etc. Simple, clean, readable code is what you should be aiming for. Performance refers to the amount of resources your program needs to produce the required results; this can include space, time, and other metrics. Design refers to proper modularization and the proper choice of algorithms and data structures; often this can be judged by asking "How hard would it be to add feature X?" and "How hard is it to replace algorithm X with algorithm Y?". Functionality refers to your programs being able to do what they should according to the specification given above; if the specification is ambiguous and you had to make a certain choice, defend that choice in your README file; if the specification is too general and you had to add certain restrictions, defend those in your README file as well.

If your programs cannot be built on ugradx.cs.jhu.edu you will get no points whatsoever. If your programs cannot be built without warnings using gcc -ansi -pedantic -Wall -Wextra -std=c99 -O we will take off 10% (except if you document a very good reason). If your programs cannot be built using make we will take off 10%. If your programs fail miserably even once, i.e. terminate with an exception of any kind or dump core, we will take off 10%. Finally, make sure to include your name and email address in every file you turn in!