Computer Science 15-112, Summer 2012
Term Project
Due: Thu 28-Jun-2012 at 10pm (no late submissions accepted)


See the 15-112 Spring 2012 Term Project Gallery!


This project is solo, in that every student must do their own independent project.  However, unlike other solo assignments, you may be richly collaborative in terms of helping each other, including viewing other students' code to help them debug, openly discussing designs and algorithms, etc.  Using resources wisely is an important aspect of this term project.  However, you still must conceive and understand your entire design and you must personally write every line of code that you submit for credit.

Also:  you may use any materials whatsoever, including source code, designs, images, text, sounds, or anything else, from any sources you may discover.  You just need to very clearly cite each such use, so it is very clear what is yours and what is not, and in the latter case where the materials came from.  And while you may include external materials, you will be graded solely on your original contributions.

Submit your project as a single zip file in Autolab.  Keep it under 10 megabytes.  This may require that your submitted version exclude some media that you include in the complete version on your own computer (and you may run the complete version in your grading session).  If your project is over 10 megabytes, then in addition to submitting the reduced-size version via Autolab, you must submit the complete version to your mentor by the project deadline in some other manner (Dropbox, flashdrive, CD, etc...).


Note:


Term Project

Your task is to design and implement a program of your choosing.  You must program in Python unless your chosen task essentially requires another language for some compelling reason (in this case you must also obtain written instructor permission to pursue such a non-Python project).  It may be graphical, text-based, or even file-based.  It may be a game, or a math or science application, or a baseball statistics package, or a productivity application (think Word or Excel, only very "lite" versions), or a shell script, or anything else you choose.  This is a wide open assignment, and you are expected to be creative in your approach to it.

Also:  you may use any materials, including any Python libraries (like VPython for 3d graphics, or PyGame for richer 2d game support, or PyMedia for multimedia, or NumPy and SciPy for scientific computing, etc, etc, etc).  You should understand that using such materials requires that you train yourself on their use (presumably through online materials).  CA's and instructors will try to assist as we can, but you should expect less direct support if you use libraries that we did not cover in class..

In fact, you may use anything (any code, any graphics, any sounds, anything at all) so long as you very clearly cite precisely where it came from and, if possible, who created it.  You will only be graded on the portions of your project that you created entirely on your own, but you are welcome to use other materials as appropriate.  Again, just be certain to make it abundantly clear what is yours and what is not.

Note:  you may reuse code you have previously written for this course or otherwise, but you must cite yourself in this case and such code will not count towards your project grade (it is the same as using code from any other source).  All your code for this project must be original code written by you explicitly for this project.

You have an extended period to finish this assignment, with no other assignments during the last 2-3 weeks.  You are expected to invest at least 25 total hours into this project in this time, and it is further expected that your project will clearly reflect the quantity and quality of design and craftsmanship that goes along with that much time on this task.  Naturally, some of you will exceed the 25-hour bar, but this is a minimum expectation for passing the term project.

What to submit

  1. The Project Zip File
    Submit a single zip file named termProject.zip containing all the files described below except your term project video, which will be handed in separately (as described above).
     
  2. Project Video
    In the file project-video.txt, include the URL of a web-hosted (say, in YouTube) short video (say, 1-to-3 minutes long) demonstrating your project.  Do not show every last feature.  Instead, show the most important features, the highlights, the parts that are distinctive.  You may just use a screen capture utility if you wish, along with a voiceover.  Or you may just use a webcam or other video camera (even a decent cell phone camera) and directly video your screen.  You do not need expert production value, and in particular you do not have to edit your video (and so you can have pauses, imperfect scene changes, and occasional verbal slips).  However, the video should be of sufficient quality, and should clearly demonstrate your project, such that we can use it as part of our grading process (though we will also run your code, and in fact you will also run it for us).  We may also place (excerpts from) some videos in a student term project gallery on the course website.  Also, critically, your video should meet your own standards so that you could reasonably place it in an online portfolio of your academic work, and submit it to a prospective employer as part of your CV.
     
  3. Project Source Files and Support Files
    Include all your project's .py files, along with all other files (.jpg, .midi, etc) that are required to build and run your project.  If you have more media than can fit in 10 megabytes, you will have to omit some of the media.  It is far preferable for your program to still run properly, for the most part, without the excluded media in this case.  If your project is over 10 megabytes, then in addition to submitting the reduced-size version via Autolab, you must submit the complete version to your mentor by the project deadline in some other manner (Dropbox, flashdrive, CD, etc...).
     
  4. Project Readme File
    Also, include a file named readme.txt that explains at a high level what your project is and how it should be installed and run.  If you use any 3rd party libraries, be sure to either include the library in your submission (preferred), or if this is impossible, to include very clear instructions on where and how to download and install the library.
     
  5. Design Documents
    In your top-level project directory, include a directory named "design", and in that directory place all your design documents.  At a minimum, this must include a paragraph or two describing the problem you are solving and the general approach your code takes to solve it.  After reading this, another programmer (or a CA!) should be able to make sense out of the module or modules you designed and the most important functions they contain.  Also, you should discuss your user interface (assuming you have one, as most of you will), explaining not just what your program looks like but why it does so.  For example, many of you started your projects by studying similar programs on the web -- you should list those here and explain what was good and bad about those programs and how they influenced your design.  You should also include any other supporting design documents you might have, such as storyboards or any other materials you made in the course of designing your project.
     
  6. A timesheet
    In your top-level project directory, include a file named "timesheet.txt".  In this file, keep track of the time you spend on the project.  There is no specific time requirement, and more time will not necessarily equate to a higher grade.  Again, though, it is expected that you should invest at least 25 hours to obtain a satisfactory grade.

How will you be graded?

  1. Well-Chosen Problem [5 pts]
    Projects should show a level of sophistication in keeping with your hard-won programming prowess.  They should be neither too simplistic nor too complex.  They should also be interesting, though we will take a broad view of this.
     
  2. Design [10 pts]
    Your design should include well-chosen functions, data structures, and algorithms, explained in a clear design document as noted above.
     
  3. Robust Operational Program [25 pts]
    Your program should work.  It should load and run with no exceptions.  It should not crash or hang, even in the face of undesired input.
     
  4. User Interface [25 pts]
    To the extent that it is appropriate for your particular project, you should have a polished user interface.  For projects without an end user experience, these points will be distributed across the other grading criteria.
     
     
  5. Style [5 pts]
    Your code should abide by all the style guidelines we have discussed in this course.  It should also include complete (but concise) test functions where appropriate!
      
  6. Presentation [5 pts]
    Both your video and your oral presentations should clearly highlight the most interesting and important aspects of your project.  And while we do not require expert video production value, your video still should be reasonably well done.  For example, the voiceover should be very clear, concise, and easy to understand.
     
  7. Effort [25 pts]
    Once again:  you are expected to invest at least 25 hours into this project, and it is further expected that your project will clearly reflect the quantity and quality of design and craftsmanship that goes along with that much time on this task.
     
  8. Bonus [0 to 10+ pts]
    For extraordinary work, we may award bonus points.   Please discuss more ambitious bonus attempts with the instructor prior to investing too much time into them!

Additional Grading Issues:

This is meant to be educational but also good fun.  Enjoy (and work hard)!!!


carpe diem   -   carpe diem   -   carpe diem   -   carpe diem   -   carpe diem   -   carpe diem   -   carpe diem   -   carpe diem   -   carpe diem