Once you have acquired basic skills in working with computers,
the best way to sharpen those skills and to learn how to solve
problems using computers is by working on demanding projects
which draw on the skills that you have and which force you to
acquire new knowledge and skills.
There are two major types of projects: development projects and
research projects. Development projects are ones
in which you design and implement a solution to a problem
for which the tools and techniques needed for solution
are well understood before undertaking the project. Research
projects are ones in which you define new problems and
in which you discover or develop new tools
and techniques needed to find solutions. In Computer
Science the line between research and development
can be blurry, but the basic idea is that in
research we find or develop something truly novel,
while in development we refine things that are already
reasonably well understood. (See
www.epa.gov/ogd/recipient/glossary.htm.)
This course is oriented around projects. In the real world, when
you work on a real project, you have to do a lot of work to
figure out precisely what you will be doing and to
gather the resources you will need to accomplish your
tasks. Therefore, for many of the assignments in this
course you will not be told everything you need
to know to complete them. Search on the web. Talk
to your classmates and other people. Put a lot of time
and energy into the work on your projects.
You will have to do at least three major projects for this
semester, culminating in your portfolio project. The first two project
will be posted to your course web page. The first project
will be assigned to you. The second
project will be defined in consultation with the instructor in
the second half of this semester. The third project will be
entirely the responsibility of the students from concept
to implementation and will be your portfolio project.
All materials produced for projects in this course
must be made available on the web under open source
licenses, preferably the GPL. You will need a
good revision control system. You should use
Google code for the first 2 projects. You should use
Sourceforge for revision control for the portfolio
project.
Assignments
Return to this page often to find new assignments and clarifications
to old assignments. Except when explicitly told to do an assigment
by yourself, all assignments are to be done in cooperation with
your classmates and any other people you find helpful, but you are
responsible for understanding everything you present, and you are
to openly and fully credit all sources for anything you present
or submit.
All assignments are to be submitted as text-only email or posted on
the web and submitted by email containing the URL of the
assignment to:
with absolutely no attachments. Assignments will
in general not be accepted late.
No assignments will be accepted on paper. No assignments will be
accepted on diskettes or thumbdrives.
You may use a Google Sites or Google Blogger to post assignments on the web as a means
of submission. The grade for the assignment will be sent back to the email address from
which the assignment email was sent. In the case of group assignments in which multiple
students are involved, one student should be the sender of the email and the other
students should be listed both in the email "CC:" list and in the body of the
message.
Assignment #1. Assigned Friday, 1 February 2013, due Friday, 8 February 2013.
If you have not already done so, ensure that your computer has a C and C++ compiler. If you are using windows,
you will need MinGW, a unix-like subsystem for windows
that supports the gnu C compilers. See the silent YouTube video OBJC-101:
How to Install MinGW in Windows 7. If you are using a Mac, you will need
Xcode 4, and for a full
development environment, you will also want Fink
(see
How to install Linux applications in OS X -- a complete walkthrough)
and MacPorts (see
Introduction to MacPorts).
If you are using Linux, you should install a recent gcc package. Contact the instructor
if you need access to a Linux account remotely to compile.
If you have not aready done so, sign up for a
Google Gmail account.
If you have not already done so, sign up for a Skype
account and send your Skype ID and your Google Gmail address by email to the instructor.
If you have not already done so, sign up for Google Sites and
create your personal portfolio web page. If you are taking more than one CS course, you
must use
the same personal portfolio web page for all CS courses.
In addition to the web page you will use for your portfolio, create an additional
web page
to use to be able to post course assignments so you can send those URLs to the instuctor
instead of using email attachments.
If you have not already done so, sign up for
Google Blogger and create a blog to use as a public
notebook
for this course. Be sure to record your experiences in doing this entire assignment
in your blog.
Get you text books, and start your notebook.
Establish a sourceforge.net account for yourself.
Work out what you will need for a software development environment for this
course and be prepared to make a coherent, well-founded, detailed presentation
of what you propose to use. Be prepared to justify your choices. Post your
thoughts in your course blog. Email a summary of what you plan to the instructor.
Your skill-building assignment for this week is to learn to use command-line
development tools in addition to the GUI-based tools you all seem to know.
For this task you are to take the kit for CBFlib, available on sourceforge (
http://download.sf.net/cbflib/CBFlib_0.9.2.10.tar.gz)
in the cbflib project, and
convert it to use cmake (
http://www.ogre3d.org/tikiwiki/Getting%20started%20with%20CMake) and then use cmake
to generate a visual studio project of CBFlib, as well as an xcode project for OSX and
a new Makefile for Linux and then use that visual studio project, xcode project and the Makefile to
make a CBFlib libraries and apps for Windows, OSX and Linux. You may work with
classmates or other persons for this task, but one way or another you are to learn
to use cmake.
For your first major project, you are design and implement a single graphing calculator app
that will run on a desktop, laptop, tablet or smartphone doing sensible resizing and
adaptation to the presence or absence of a keyboard. The whole project is to be
sompleted in one calendar month. Your task for this week for this project is
to prepare the detailed requirements document, assemble an appropriate team,
identify appropriate stakeholders, get started on the system design document,
and assemble the appropriate resources you will need. Be sure to update your
blog with detailed notes on progress.
Assignment #2. Assigned Friday, 8 February 2013, due Friday, 15 February 2013.
Your skill-building with cmake continues. Find a source-kit package for
RasMol in the sourceforge openrasmol site, and convert that to use cmake.
Note the RasMol will need the CBFlib kit you made last time.
For your first major project, you are design and implement a single graphing calculator app
that will run on a desktop, laptop, tablet or smartphone doing sensible resizing and
adaptation to the presence or absence of a keyboard. The whole project is to be
completed in one calendar month (February). Your task for this week for this project is
to expand the detailed requirements document from last week into a complete
system design document, get approval from your stakeholders, allocate tasks among
team members and get a complete dummied or actual set of output screens ready
for review by the instructor, and as much of the real input as you can manaage.
Be sure to update your blog with detailed notes on progress.
Assignment #3. Assigned Friday, 15 February 2013, due Friday, 22 February 2013.
Additional, related tools, you will need for software development in addition to cmake
are m4, sed and the various shells, such as bash. You are to make the cmake kits
you made for cbflib and rasmol and write and test a user-firendly bash script using m4 and
sed that will allow you to customize both kits with new project names and install
directories. Yes, there are many other ways to do the same thing, but you are
to do it with a bash script using m4 and sed, so you will get to know bash, m4 and
sed.
Continue your preparation for smarkphone development by viewing (and doing) the videos 135-200
at
http://learnerstv.com/lectures.php?course=ltv461&cat=Computers
Also read 10 -- 13 of Mednieks et al on Programming Android.
Note: Yes, the pace of watching videos and reading is much faster than you are used to,
but it is not faster than the pace you will have to work at in the real world.
For your first major project, you are designing and implementing a single graphing calculator app
that will run on a desktop, laptop, tablet or smartphone doing sensible resizing and
adaptation to the presence or absence of a keyboard. The whole project is to be
completed in one calendar month (February). Your task for this week for this project is
to complete the detailed requirements document and the
system design document, create a 2-week development timeline for all ports of
your system design and get started on implementation. Note that you must
have the timeline fully specificied before writing the code. As you
write the code, you are to annotate the timeline with the actual times at
which various portions of the system get implemented and note the lags (delays)
and leads (early implementation). You must not retroactively correct your
timeline, just annotate it with reality, so you will learn to be more
accurate in the future in planning a project. Be sure to update your
blog with all of this material.
For your first major project, you are designing and implementing a single graphing calculator
app that will run on a desktop, laptop, tablet or smartphone doing sensible resizing and
adaptation to the presence or absence of a keyboard. The whole project is to be
completed in one calendar month (February). Your task for the second week for this project is
to execute the second week of your timeline, reporting all leads and lags on your blog
and by email to the instructor.
Do Quiz 4 on or before Monday, 4 March 2013. This is a
rescheduling from what was orginally planned to allow a little extra time
for you to get caught up and ready for the midterm.
Assignment #5. Assigned Monday, 4 March 2013, due Monday, 11 March 2013.
Catch up on the prior assignments you are behind on.
Read Chapters 6 -- 9 of the Novak text taking careful notes in your blog.
Read Chaptes 1-9 of the Neuburg taking careful notes in your blog. You will
not have specific reading assignments in the test of Neuburg, but you should use
is as a reference as needed.
You have been asked on Quiz 4 to propose your second major project to be
complete in March. Contact the instructor promptly to come to agreement on that
project so your can complete your user requirements document and preliminary
system design this week.
Midterm: Please take the midterm sometime
between Monday 11 March 2013 and 9 am Monday 18 March 2013.
Assignment #6. Assigned Monday, 18 March 2013, due Monday 1 April 2013.
Note that this assignment overlaps Spring from 25 -- 31 March.
Finish the Novak text, taking careful notes in your blog.
Propose your third and final project for this course. This one should become
your porfolio project. This one needs to be a very well-thought out multi-platform
project. Take a careful look at
http://stackoverflow.com/questions/6171128/ios-android-cross-platform-development
for an understanding of your options for cross-platform development. One possibility to
consider is Javascript+CSS in HTML5, but no solution is perfect. Note that you
are allowed (indeed are encouraged) to collaborate with others on this final
portfolio project, but you must clearly identify what will be your personal
original creative contribution to the project. No original creative contribution
-- no credit.
To help you focus, write a thoughtful, carefully researched essay proposing
and analyzing one specific cross development frsmework for your particular project,
post it in your blog and send the URL to the instructor.
Prepare a detailed, multi-project timeline for all the work you have left
to do to finish all the projects for this course. You are urged to target full
completion of all projects no later than Monday, 6 May 2013, so you have time
to deal with problems and still get ready for the final.
Assignment #7. Assigned Monday, 1 April 2013, due Monday 8 April 2013.
Prepare a solid 21 minute -- 21 slide presentation on the status of your
projects for this course, 7 minutes/7slides per project. In the 7 slides
for a given project you are to explain what the project is, what has been
done so far, and what the future holds. You are to prepare the presentation
honestly, but so as to sell both the project and yourself. Post the presentation
on your course web site and email the URL to the instructor.
Update your detailed, multi-project timeline for all the work you have left
to do to finish all the projects for this course. You are urged to target full
completion of all projects no later than Monday, 6 May 2013, so you have time
to deal with problems and still get ready for the final.
Assignment #8. Assigned Monday, 8 April 2013, due Monday 15 April 2013.
Update your solid 21 minute -- 21 slide presentation on the status of your
projects for this course, 7 minutes/7slides per project. In the 7 slides
for a given project you are to explain what the project is, what has been
done so far, and what the future holds. You are to prepare the presentation
honestly, but so as to sell both the project and yourself. Post the presentation
on your course web site and email the URL to the instructor.
Comparing your previous presentation to this one, summary the lags and leads
in all your projects and email the information to the instructor.
Update your detailed, multi-project timeline for all the work you have left
to do to finish all the projects for this course. You are urged to target full
completion of all projects no later than Monday, 6 May 2013, so you have time
to deal with problems and still get ready for the final.
Assignment #9. Assigned Monday, 15 April 2013, due Monday 22 April 2013.
Update your solid 21 minute -- 21 slide presentation on the status of your
projects for this course, 7 minutes/7slides per project. In the 7 slides
for a given project you are to explain what the project is, what has been
done so far, and what the future holds. You are to prepare the presentation
honestly, but so as to sell both the project and yourself. Post the presentation
on your course web site and email the URL to the instructor.
Comparing your previous presentation to this one, summary the lags and leads
in all your projects and email the information to the instructor.
Update your detailed, multi-project timeline for all the work you have left
to do to finish all the projects for this course. You are urged to target full
completion of all projects no later than Monday, 6 May 2013, so you have time
to deal with problems and still get ready for the final.
Assignment #10. Assigned Monday, 22 April 2013, due Monday 29 April 2013.
Update your solid 21 minute -- 21 slide presentation on the status of your
projects for this course, 7 minutes/7slides per project. In the 7 slides
for a given project you are to explain what the project is, what has been
done so far, and what the future holds. You are to prepare the presentation
honestly, but so as to sell both the project and yourself. Post the presentation
on your course web site and email the URL to the instructor.
Comparing your previous presentation to this one, summary the lags and leads
in all your projects and email the information to the instructor.
Update your detailed, multi-project timeline for all the work you have left
to do to finish all the projects for this course. You are urged to target full
completion of all projects no later than Monday, 6 May 2013, so you have time
to deal with problems and still get ready for the final.
Assignment #11. Assigned Monday, 29 April 2013, due Monday 6 May 2013.
All projects are now due.
Update your solid 21 minute -- 21 slide presentation on the status of your
projects for this course, 7 minutes/7slides per project. In the 7 slides
for a given project you are to explain what the project is, what has been
done so far, and what the future holds. You are to prepare the presentation
honestly, but so as to sell both the project and yourself. Post the presentation
on your course web site and email the URL to the instructor for grading.
Important Note: Except for the final itself, no quizzes or assignments
or project materials submitted after noon on Monday, 6 May 2013, will be considered
for grading for the Spring 2013 semester. This is the simple practical
consequence of the rapid approach of graduation, and the need to have grades
in in time for graduation.
Final: The Final for this course must be taken no later than 12 May 2013
under Skype supervision. However, the final itself is already posted, and you
may start preparing your answers now. Part of this final requires a discussion
of the questions with the instructor via Skype.
Unless you have already scheduled a different time with the instructor, you must be on
Skype between 8 and 10 pm on Thursday, 9 May. As just
noted, you may start working on the final now, preparing answers that you will submit and
discuss during the Skype session. You must be able to
discuss everything you submit in the exam with the instructor, so make certain that
you know and understand everything you write before you
submit it.
I am dealing with a family medical emergency, so alternate time slots to the Thursday
8 -- 10 pm Skype session will be very limited. Look at the questions and contact me via
email (yayahjb@gmail.com) immediately if you will not be able to make the Thursday window.
If you cannot work within this time frame, a space has been provided on the final to
request an incomplete, but you are advised to look at all the questions now
to gain an understanding of the work you will need to do to finish this course eventually.