Project
Project
Final
Project
Overview.
The
climax
of
this
course
is
its
final
project.
The
final
project
is
your
opportunity
to
take
your
newfound
savvy
with
programming
out
for
a
spin
and
develop
your
very
own
piece
of
software.
So
long
as
your
project
draws
upon
this
courses
lessons,
the
nature
of
your
project
is
entirely
up
to
you,
albeit
subject
to
the
staffs
approval.
You
may
implement
your
project
in
any
language(s)
as
long
as
the
staff
approves.
You
are
welcome
to
utilize
infrastructure
other
than
the
CS50
Appliance,
provided
the
staff
ultimately
has
access
to
any
hardware
and
software
that
your
project
requires.
All
that
we
ask
is
that
you
build
something
of
interest
to
you,
that
you
solve
an
actual
problem,
that
you
impact
campus,
or
that
you
change
the
world.
Strive
to
create
something
that
outlives
this
course.
Inasmuch
as
software
development
is
rarely
a
one-person
effort,
you
are
allowed
an
opportunity
to
collaborate
with
one
or
two
classmates
for
this
final
project.
Needless
to
say,
it
is
expected
that
every
student
in
any
such
group
contribute
equally
to
the
design
and
implementation
of
that
groups
project.
Moreover,
it
is
expected
that
the
scope
of
a
two-
or
three-person
groups
project
be,
respectively,
twice
or
thrice
that
of
a
typical
one-person
project.
A
one-person
project,
mind
you,
should
entail
more
time
and
effort
than
is
required
by
each
of
the
courses
problem
sets.
If
at
a
loss
for
ideas,
turn
to
the
below
(and
your
teaching
fellow)
for
inspiration!
APIs
https://manual.cs50.net/APIs
https://apps.cs50.net/discuss/threads/172/all/1
http://fair.cs50.net/2011/fall/?kiosk
Seminars
https://manual.cs50.net/Seminars
0 < 6
Academic
Honesty.
All
work
that
you
do
toward
fulfillment
of
this
courses
expectations
must
be
your
own
unless
collaboration
is
explicitly
allowed
in
writing
by
the
courses
instructor.
Collaboration
in
the
completion
of
problem
sets
is
not
permitted
unless
otherwise
stated
by
some
problem
sets
specification.
Viewing
or
copying
another
individuals
work
(even
if
left
by
a
printer,
stored
in
an
executable
directory,
or
posted
online)
or
lifting
material
from
a
book,
website,
or
other
sourceeven
in
partand
presenting
it
as
your
own
constitutes
academic
dishonesty,
as
does
showing
or
giving
your
work,
even
in
part,
to
another
student
or
soliciting
the
work
of
another
individual.
Similarly
is
dual
submission
academic
dishonesty:
you
may
not
submit
the
same
or
similar
work
to
this
course
that
you
have
submitted
or
will
submit
to
another.
Nor
may
you
provide
or
make
available
solutions
to
problem
sets
to
individuals
who
take
or
may
take
this
course
in
the
future.
Moreover,
submission
of
any
work
that
you
intend
to
use
outside
of
the
course
(e.g.,
for
a
job)
must
be
approved
by
the
courses
instructor
or
preceptor.
You
are
welcome
to
discuss
the
courses
material
with
others
in
order
to
better
understand
it.
You
may
even
discuss
problem
sets
with
classmates,
but
you
may
not
share
code.
In
other
words,
you
may
communicate
with
classmates
in
English,
but
you
may
not
communicate
in,
say,
C.
If
in
doubt
as
to
the
appropriateness
of
some
discussion,
contact
the
courses
instructor
or
preceptor.
You
may
turn
to
the
Web
for
instruction
beyond
the
courses
lectures
and
sections,
for
references,
and
for
solutions
to
technical
difficulties,
but
not
for
outright
solutions
to
problems
on
problem
sets
or
your
own
final
project.
However,
failure
to
cite
(as
with
comments)
the
origin
of
any
code
or
technique
that
you
do
discover
outside
of
the
courses
lectures
and
sections
(even
while
respecting
these
constraints)
and
then
integrate
into
your
own
work
may
be
considered
academic
dishonesty.
All
forms
of
academic
dishonesty
are
dealt
with
harshly.
If
the
course
refers
some
matter
to
the
Administrative
Board
and
the
outcome
for
some
student
is
Admonish,
Probation,
Requirement
to
Withdraw,
or
Recommendation
to
Dismiss,
the
course
reserves
the
right
to
impose
local
sanctions
on
top
of
that
outcome
for
that
student
that
may
include,
but
not
be
limited
to,
a
failing
grade
for
work
submitted
or
for
the
course
itself.
Fine
Print.
Your
pre-proposal,
proposal,
and
status
report
will
be
evaluated
on
the
bases
of,
at
least,
clarity
and
thoroughness.
Your
implementation
will
be
evaluated
along
four
axes
primarily:
Scope.
To
what
extent
does
your
code
implement
the
features
required
by
our
specification?
Correctness.
To
what
extent
is
your
code
consistent
with
our
specifications
and
free
of
bugs?
Design.
To
what
extent
is
your
code
written
well
(i.e.,
clearly,
efficiently,
elegantly,
and/or
logically)?
Style.
To
what
extent
is
your
code
readable
(i.e.,
commented
and
indented
with
variables
aptly
named)?
All
students,
whether
taking
the
course
Pass/Fail
or
for
a
letter
grade,
must
ordinarily
submit
this
final
project
to
be
eligible
for
a
passing
grade
(i.e.,
Pass
or
A
to
D)
unless
granted
an
exception
in
writing
by
the
courses
instructor
or
preceptor.
No
late
days
may
be
spent
on
this
final
project.
1
<
6
Schedule.
A
schedule
appears
below.
The
pages
that
follow
elaborate
on
these
dates.
Pre-Proposal
due
by
noon
on
Mon
11/5
CS50
Hackathon
from
8:00pm
on
Wed
12/5
until
7:00am
on
Thu
12/6
CS50 Fair from 11:00am until 4:30pm on Mon 12/10 Extensions on the final project are not granted, except in cases of emergency. Technical difficulties are not considered emergencies. Problem sets late days cannot be spent on the final project. Lateness of submissions is determined down to the minute by submissions timestamps. Submitting more than seven minutes late is equivalent to not submitting at all. Pre-Proposal Intended to promote early thought, the pre-proposal is your opportunity to bounce one or more ideas off of your teaching fellow. Quite simply, by this pre-proposals deadline, send an email to your teaching fellow, CCing [email protected], describing one or more ideas that you have for your final project. Short, casual emails are fine, but do explain the motivation behind each of your ideas (i.e., why it interests you). Treat this requirement as an opportunity for counsel. Certainly include any questions or concerns that you have in this email. The subject line of your email should be Pre-Proposal. If, incidentally, you have an idea for a final project that you think someone should do (if not you), post it at https://apps.cs50.net/discuss/threads/172/all/1! And if youd like to solicit one or two collaborators, do post there as well.
2 < 6
Proposal
The
proposal
is
your
opportunity
to
receive
approval
and
counsel
from
your
teaching
fellow
before
you
proceed
to
design.
Submitting
a
proposal
amounts
to
answering
a
few
questions
about
your
idea.
Once
you
have
a
project
in
mind,
submit
your
proposal
at
the
URL
below.1
http://www.cs50.net/projects/proposal/
Your
teaching
fellow
will
either
approve
your
proposal
or
require
modifications
on
your
part
for
subsequent
approval.
Your
proposal,
even
if
approved,
is
not
binding;
you
may
alter
your
plan
at
any
point,
provided
you
obtain
the
staffs
approval
for
any
modifications.
Projects
submitted
without
approval
may
not
receive
credit.
After
submitting
your
proposal,
a
teaching
fellow
other
than
your
own
may
be
appointed
your
advisor
and
grader
for
the
remainder
of
the
final
project,
depending
on
your
proposals
nature.
Status
Report
Not
only
is
the
status
report
intended
to
keep
the
staff
apprised
of
your
progress,
it
is
an
opportunity
to
keep
yourself
on
track.
Submitting
a
status
report
amounts
to
answering
a
few
questions
about
your
project.
Your
answers
will
also
influence
the
setup
of
the
CS50
Fair.
Submit
your
status
report
at
the
URL
below.2
http://www.cs50.net/projects/report/
CS50 Hackathon From 8:00pm on Wed 12/5 until 7:00am on Thu 12/6 is the CS50 Hackathon, an epic all-nighter during which you can dive into your final projects implementation alongside classmates and staff. If you choose to partake, youll be asked to propose three milestones for yourself that evening: a good one that you intend to achieve no matter what; a better one that you think you can achieve; and a best one that you hope to achieve. Dinner will be served at 8:00pm, second dinner will be served at 1:00am, and those still standing at 5:00am will be treated to breakfast at IHOP. Additional details on the Hackathons logistics will be announced via email and the course's home page the week before the Hackathon.
If collaborating with one or two classmates, only one of you needs to submit a proposal. If you are not the one submitting, though, let your teaching fellow know via email the name and email of the collaborator who submitted on your behalf. 2 If collaborating with one or two classmates, you each should submit a status report.
3 < 6
Implementation
Ultimately
due
are
implementation
and
documentation
of
your
final
project.3
Your
submission
thereof
must
include
all
of
the
below.
i.
Documentation
for
your
project
in
the
form
of
a
file
called
documentation.html,
documentation.pdf,
documentation.php,
or
documentation.txt.
This
documentation
is
to
be
a
users
manual
for
your
project.
Though
the
structure
of
your
documentation
is
entirely
up
to
you,
it
should
be
incredibly
clear
to
the
staff
how
and
where,
if
applicable,
to
compile,
configure,
and
use
your
project.
Your
documentation
should
be
at
least
several
paragraphs
in
length.
It
should
not
be
necessary
for
us
to
contact
you
with
questions
regarding
your
project
after
its
submission.
Hold
our
hand
with
this
documentation;
be
sure
to
answer
in
your
documentation
any
questions
that
you
think
we
might
have
while
testing
your
work.
ii.
A
design
document
for
your
project
in
the
form
of
a
file
called
design.html,
design.pdf,
design.php,
or
design.txt
that
discusses,
technically,
how
you
implemented
your
project
and
why
you
made
the
design
decisions
you
did.
Your
design
document
should
be
at
least
several
paragraphs
in
length.
Whereas
your
documentation
is
meant
to
be
a
users
manual,
consider
your
design
document
your
opportunity
to
give
the
staff
a
technical
tour
of
your
project
underneath
its
hood.
iii.
Any
and
all
files
required
to
run
your
software
(even
if
intended
for
some
machine
other
than
the
CS50
Appliance),
including
source
code
as
well
as,
if
applicable,
configuration
files,
Makefiles,
sample
inputs,
and
so
forth.4
Needless
to
say,
all
source
code
should
be
thoroughly
commented.
If
your
project
uses
a
MySQL
database,
be
sure
to
export
it
to
a
file
(e.g.,
project.sql),
as
with
phpMyAdmins
Export
tab,
and
include
that
file
in
the
directory
that
you
submit.
iv.
A
short
video
(that's
no
more
than
2
minutes
in
length)
in
which
you
present
your
project
to
the
world,
as
with
slides,
screenshots,
voiceover,
and/or
live
action.
Your
video
should
somehow
include
your
projects
title,
your
name
and
year,
your
dorm/house
and
concentration,
and
any
other
details
that
youd
like
to
convey
to
viewers.
See
http://cs171.org/projects/presentations.html
for
CS171's
tips
on
how
to
make
a
"screencast,"
though
you're
welcome
to
use
an
actual
camera.
Upload
your
video
to
YouTube
and
take
note
of
its
URL.
In
order
to
submit
your
implementation,
you
must
first
execute
a
command
in
the
appliance
and
then
submit
a
(brief)
form
online.
Open
a
terminal
window
(as
via
Menu
>
Programming
>
Terminal
or
within
gedit)
then
execute
update50
3 4
If you have collaborated with one or two other students, each of you should submit via this same process. If your project requires (for execution and testing) hardware or software other than that offered by the CS50 Appliance, be sure that the TF advising you is aware of and has approved your projects needs well in advance of your submission.
4 < 6
to
ensure
you
have
the
latest
release
of
the
appliance.
Then
execute
submit50 /path/to/project
where
/path/to/project
is
the
path
to
your
project's
directory,
and
then
follow
the
on-screen
instructions.
You
may
re-submit
as
many
times
as
youd
like;
well
grade
your
most
recent
submission.
But
take
care
not
to
submit
after
the
implementation's
deadline,
lest
you
risk
rejection
entirely.
Finally,
head
to
the
URL
below
where
a
form
awaits.
https://www.cs50.net/projects/implementation/
Note that you'll be asked for your video's URL. CS50 Fair The CS50 Fair is an epic display of final projects, your opportunity to showcase your work not only to us but also to others on campus. You will be expected to bring to the Fair a laptop with which to demonstrate your project.5 Plan to tell attendees what you have done and why you have done it. And perhaps have in mind a few anecdotes about lessons you learned, roadblocks you hit, or the like. The Fair will take place in the atrium of Northwest Science Labs at 52 Oxford Street. Additional details on the Fairs logistics will be announced via email and the course's home page the week before the Fair.
If you don't own a laptop, not a problem; just see if you can borrow a friends or share a classmates.
5 < 6