Welcome!
In the Spring 2013 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 2013! Here is a link to Fall 2012'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 (Z) know at z@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 Monday night):
- Feb. 4, 2013 : project #1's plan and initial report due
- February 18, 2013: project #1 progress report due
- New March 11, 2013: project #1 progress report due
- March 25, 2013: project #1 final report and project demo due; Also, project #2 proposal due.
- May 3, 2013: project #2 final report and demo due
The class itself will meet on Mondays, 4:15-5:30 up to and including March 11th. We will
not meet on Mondays 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 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 (3/11) and for the final deliverable (3/25). 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 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
zsweedyk@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!
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 and complete your final project write-up by Friday, May 3th. Please make an appointment with me to schedule your final demo at least a week ahead of time.
- for non-seniors:
You have an extra week -- so, you should plan to show off your project and complete your write-up by
by Friday, May 10th. Please make an appointment with me at least a week ahead of time.
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
Slides and links