Final project dates and guidelines
Because seniors need to be finished before the other classes, there
are two sets of deadlines:
- for seniors:
Please plan to show off your project by Friday, May 4th. I'll be
around all F afternoon (as well as today and Th.)
In addition, please plan to have a write-up of your final project
complete by Sunday, May 6.
- for non-seniors:
You have an extra week -- so, you should plan to show off your project
by Friday, May 11th. I'll be around all next week except Monday.
In addition, please plan to have a write-up of your final project
complete by Sunday, May 13th.
In your final write-up, which does not need to be more than a page,
you should include a short paragraph on each of these:
- a reminder about the goals of your project
- your progress on it and how it went
- difficulties you found and how you dealt with them
- features you'd work on next if there were more time
- lessons learned/things you'd do differently in the future
Updates 2/28/12
CS 189's second progress report is not due until Tuesday night March 6th, and its
final report and demo will be due Tuesday night March 20th (the Tuesday after spring break).
(A more detailed guide to what should appear in that progress report appears below.)
Also, as has always been part of the schedule, there is no meeting on 2/28. However, we (unexpectedly)
have a CS colloquium on machine learning/applied algorithms in Pryne on that day. As with previous
Tuesday talks, attendance is worth a small amount of credit (+2) in CS 189. There won't be a sign-up sheet
on 2/28, but it will count if you note that you went to the talk in the progress report due 3/6.
Good luck with everything you're juggling this week!
Welcome!
In the Spring 2012 term, CS 189 Programming practicum is running
differently from the self-contained, algorithmic problem-solving of
previous terms. If you're looking for that kind of practice, join us again
in the Fall of 2012! Here is a link to Fall 2011's
page.
Course structure
This term, CS 189 will ask you to design two half-term projects or one full-term project
that will give you a chance to learn a new technology, library, API, or domain. The idea is that
you pursue in a scheduled, deliberate, and reflective way a software undertaking that is new,
e.g.,
- You've always wanted to learn Ruby on Rails or Django or Drupal or (insert web templating
framework here)... so, think of a feasibly-sized application, and dive in!
- You want to build a web application from scratch to become more familiar with some or
all of the component (raw) technologies: HTML, CSS, Javascript, SQL, ... . This course
would certainly encourage it: see the default option, below.
- You'd like to learn how to use the OpenCV computer vision library or the Qt UI library or
any other large open-source libraries, perhaps for game-development, that
require "some getting used to."
- You have a hardware project that requires programming and would like a structured,
scheduled way to approach it.
Of course, there are many other projects CS 189 can support -- these are just some possibilities.
The projects must have a demonstratable deliverable, must involve technologies new to you, and
should require on the order of 3-5 hours per week, including the write-ups of your progress.
Thus, I hope CS 189 helps you see these kinds of projects through to completion --
recognizing that "completion" is relative.
Concerns? Questions? Suggestions? Let me (Zach Dodds) know at dodds@cs.hmc.edu!
No ideas?
I'm happy to chat about possible project ideas. In addition, there
are default projects that, at least, I'm interested in and that you'd be welcome to pursue if you
don't have anything in particular in mind. Both involve web technologies:
- The default first project would be to learn HTML5, CSS, and (mostly) Javascript to create a client-side Jotto-playing application that
- accepts and stores a hidden word
- accepts guesses against that hidden word and scores the guesses
- uses a dictionary to suggest possible remaining words (I have 8181 five-letter words if
you'd like...)
- will compute the entropy, i.e., the expected information, to be gained by guessing any
particular word at a certain stage of the game
- looks good!
- has any extra features of your choosing...
- The default second project would be to learn server-side web programming
(though CGI and AJAX calls to Python, in all likelihood) by building an auto-grading system
that we might be able to integrate into the CS 5 submission system in the future. It would
- allow another person (presumably a grader or instructor) to upload a file of desired
input/output tests (the format could be up to you -- the more user-friendly, the better!)
- allow a student to upload a Python assignment file to be tested
- provide "immediate" feedback about how many and which tests the assignment file pased
- ideally, some of the tests could be visible (the student would know the tests, their
code's output and the correct output) and some would be hidden (the score would be reported,
but not the tests or correct output
- it should time out after a designated amount of time
- it should make sure that the Python code run does not "mess with" the submission system or
other files
Deliverables
According to the following schedule, there will be a project update due (by 11:59pm on Tuesday night):
- January 31, 2012: project #1's plan and initial report due
- February 14, 2012: project #1 progress report due
- New March 6, 2012: project #1 progress report due
- March 20, 2012: project #1 final report and project demo due; Also, project #2 proposal due.
- May 4, 2012: project #2 final report and demo due
The class itself will meet on Tuesdays, 4:15-5:30 up to and including March 20th. We will
not meet on Tuesdays after that.
New
For the mid-project updates, please include the following pieces. A short write-up might be 2-3 paragraphs
with a screenshot of the project to date. A more thorough write-up would be twice that length, perhaps with some additional
media or explanations, if it fits the project:
- A description of your progress since the last update (about a paragraph or two). You should
note in particular any obstacles that got in the way and how you dealt with them. These can be
small (details of a particular technology or language) or large (something simply ended up
not working), and the remedies might be straightforward (enough work worked!), creative (you
redefined the bug as a feature), accepting (took another approach altogether) or something
else entirely. The big picture is that your path may be one of interest to someone else
in the future, and it will help to point out what happened along the way.
- Describe how well your project works currently, and explain in at least a few sentences
what you would like to do for the next update or the other plans you have for the near term.
If possible, include a link to your project and/or a screenshot or other media that shows
it in its current state.
- Include some reflection on the project and its technologies;
also, be sure to note the time you've spent on the project since the last update.
For the project #1 plan and initial report, please include in your
write-up at least the following items. Each of the four large items below should be a paragraph or so:
- Describe your overall project idea(s) for this first half of the term. If
appropriate, include any additional context, motivation, or connections this
project might make with others. The description can be succinct, e.g., a
website that reads bar codes, but then please expand in a bit more detail
the interactions you imagine. Alternatively, the description might be a purely
technical one, e.g., I'm going to learn three image-processing API calls
per week from the OpenCV library. In a case like this, elaborate what
those might be and the small applications you plan to build to show off those
calls.
- Describe your progress so far, along with what you've done successfully
-- and perhaps unsuccessfully -- to make progress! Are the technologies all
working? Do you have a Hello-World!-type example working? Are there
sticking points that are likely to be resolved (or others unlikely to be
resolved). Basically, this paragraph should make it clear that you'll be able
to make progress. Otherwise, choose a different project/technology!
- Note how much time you've spent so far in the last two weeks. (Obviously,
this won't take a paragraph!) If applicable, mention how you're budgeting time
for the project. The goal is to keep CS 189 in the 3-4 hours per week range.
- Describe your plan for the next two weeks and beyond. More detail is
better here, even if the detail serves to motivate your thinking about your
next steps.
- In addition, include a description of your objectives for the third
report (2/28) and for the final deliverable (3/9). These need not be at the
same level of detail as your plan for the next two weeks, but it does not
hurt to think ahead -- even if, in the end, your plans change.
- Be sure to link this write-up to the CS 189 google doc noted below.
For each deliverable, your team should create a link from this Programming
Practicum Google doc to your write-up. Feel free to use your own Google doc or Google site.
Unlike the above Google
doc, feel free to make yours private (as long as you share among your team and with
zdodds@gmail.com). If you're working on web
technologies of any sort, you might simply use your own CS webspace and those technologies
to host your write-up page!
Here is another link to the Programming Practicum Google doc
Slides and links