CS 3210 - UNIX Sytem Programming - Term Project

This page contains everything you need to know about the term project that you are expected to complete within the 12 weeks of class.

What Am I Supposed To Code?

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.

Project Writeup

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:

  1. The first should be titled "Description" and contain a paragraph describing in English what the program is and what it does
  2. The second part should be titled "Use Case" and contain a description of how a user might normally use the application and test the major features. When the time comes for me to grade your project, I will sit and watch you perform the use case you have described on your application.
  3. The third (and last) part should be titled "Feature Breakdown" and is a deliniation of each major area of functionality supported by the program.

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.

Example of Project Writeup

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.

Code Reuse

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.

When is all this stuff due?

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.