This page contains everything you need to know about the term project that you are expected to complete within the 12 weeks of class.
I expect you to write a standalone UNIX application that performs some useful or entertaining task. It should make use of many (but probably not all) of the various system calls, libraries, and other UNIX SysV features.
You need to pick a project that will be the right size: it should be more simple than, say, "echo", but not as involved as, say "apache". Pick a project that makes you strech your skills and explore new areas, but don't bite off more than you can chew; make sure that it's a project you can accomplish in the space of 12 weeks.
A list of project ideas can be found right here.
Before you write a single line of code, you need to make a writeup of your project. (Think of this as a mini-"Specifications" document.) It should have three parts:
There are two reasons why you're doing this: (1) to help me grade your project and (2) to help you think about what your project should be and exactly what you'll have to do to get it working. Additionally, this writeup will help you make sure your making a program that's the right scope; if you can't come up with small list of features, it's probably too small.
Because a picture is worth a thousand words, here's an example of what I'm expecting to see:
Project Description ------------------- For my project, I am going to make a command-line ftp client called "myftp". It will allow a user to connect to remote ftp sites and upload / download files. Use Case -------- A user sits down at the command line and types "myftp". The program starts and the user is greeted with a myftp> prompt. At this point the user could type open ftp.remotesite.com. He would then be prompted for a username and password. After that, the user could type cd remotedir to change into a remote directory and get filename to download a file. When finished, the user types quit and is returned to the command line. Feature Breakdown ----------------- - Command line parsing using readline(). - Network connectivity, connecting to remote sites, resolving domain names, etc. - File uploads, including reading a local file and sending the contents to a remote server using the FTP protocol. - File downloads using the FTP protocol, including saving to the local directory.
An oft heard but seldom seen "best practices" idea is that of code reuse: not re-inventing the wheel, but starting with some base code. I'm going to give you a chance to do that with this project.
Let me clarify something: This is not a team project, every student is expected to do their own, individual work. You cannot copy code from another student.
What you can do is make use of the code you find in any open source project out there on the net. Source Forge and the GNU project would be some great places to look. Please note that if you're going to use the code from another open source project, you need to abide by the terms of the license. (This is not something I require of you, this is something the laws of the land require of you.)
Oh yes, and if you decide to just copy somebody else's code and try to pass it off as your own, that isn't going to work; I'll just give you a zero for the project (20% of your grade). You can glean ideas and borrow bits and pieces, but not somebody else's whole program.
If you don't know what other project you might look at for source code ideas, talk to me, I can probably suggest a place to look.
The project writeup is due the class period after the midterm. Print it out (should be a single page) and turn it in to me.
The project itself is due the class period after the midterm. You need not print out your code for this. Instead, I will sit down next to you and have you demo your app for me.