views:

843

answers:

5

I know there are a number of questions about senior project ideas but I am specifically looking for a project that involves Unix system programming in C or (preferably) C++. I have the book which I used for one quarter but haven't had a chance to use since. I want to find a project that will give me as much experience with Unix system calls as possible.

My ideas so far:

  • Packet analyzer
  • Web server

Also, I would like to create a GUI for the application. Since it will be written in C or C++, I am leaning towards Qt4 since I would like to be able to run it on Mac OS X. I would appreciate recommendations in this area as well.

EDIT: As suggested by some answers, it does not have to have a GUI. That was just an idea. Although I can't think of many project ideas that don't involve one.

A: 

I was going to say a shell, but then you want to go with a GUI... have you written a shell? also threaded applications?

Web server is probably going to be easier than a Packet analyser (if you're starting from scratch).

Calyth
I have written a shell for class, but not a threaded app. I am looking for a challenge, and the web server idea seems a little dull.
titaniumdecoy
Packet Analyser would be a challenge for sure, because you're gonna have to put the NIC in promiscuous mode and listen to everything. The GUI is always going to be a pain...
Calyth
A: 

There have been many questions on senior design projects, you should look at those.

If you are doing it on a Mac, why not have fun and write a monitoring program that runs on an IPhone that will monitor the network traffic under MacOS, does something similar to the top function on Unix (not certain if top is on BSD or just Linux/Solaris).

I forgot, your GUI would be on the IPhone.

James Black
The iPhone can only run one app at a time (at least that is all Apple allows). Targeting the iPhone is an interesting idea but I'm not sure how it would be any more useful than the same app on the mac.
titaniumdecoy
I think it would just be an interesting project, so that people can remotely monitor their home computers.
James Black
+3  A: 

I would lean away from a gui.

It's a lot of work to learn gui programming and the framework.
It takes a lot longer to get the gui looking good than it does to do the algorithms.
It's hard to test.
It doesn't really 'count' as CS so your prof is not going to be impressed by pretty colors.

For a project you need something with a good theory behind it - some analyzable algorithm - just writing some large software that does something useful isn't really the point.

But back to your original question:
Packet analyzer - yes but so what? You print some packets out like ethereal. What are you going to do that's more interesting than writing a network version of "ls"

Web server - do you have any ideas for something that existing web servers don't do? Is there some interesting corner of the http protocol that Apache/IIS doesn't make use of?

Martin Beckett
"just writing some large software that does something useful isn't really the point." That about sums up why college was worthless.
corymathews
Very true - but I'm just trying to help the kid. Writing a sort function and proving it's O(log n) is an A+, writing Linux is a C-
Martin Beckett
Not that I've ever written a senior programming project, but couldn't one write something useful and *also* perform analysis on certain parts (or all) of it?
Andrew Song
Yes - but sticking a pretty gui on it is a lot of work for no return.
Martin Beckett
I think most senior projects are web-based or use Java Swing for GUIs.
titaniumdecoy
Pharaun
A: 

If you really want to explore system calls, find a interesting way to deal with processes, files, networking and threads. I agree with the other comments that urge you to downplay the GUI. You'll get better system programming experience by creating a process that runs as a daemon and is controlled via a command-line interface.

For instance, consider coding a central process dispatcher that distributes binary executables to other systems according to their current system load. The dispatcher then consolidates the results to the user who submitted the job.

For an implementation environment, I'd suggest a couple of VirtualBox Linux or BSD instances to demonstrate the proof of concept.

Tim Clemons