Overview
As part of your course experience, you are to work on a term project related to computer networks. Your project should involve a significant programming component and you are very welcome to incorporate elements of research and/or experimentation in it.
Details
- You may work alone or in a team of two or three.
- The choice of topics is up to you but I must approve it first
(see the next bullet). A list of possible ideas to get you started
is given below.
- Similarly, the choice of programming language/environment is up
to you. While we will be using Python as the main programming tool
for most of this course, you may choose to use something else,
like Java (e.g. if you want to develop something with a GUI,
although Python also has GUI libraries), or C (if you want really
fast code with low-level control of the hardware/software
environment).
- You must turn in a proposal of one to two pages by the due date
specified below. The proposal should include what you want to do,
how you are going to pursue the project (plan), and the expected
result/product(s).
- About two-thirds of the way through the semester you must submit
a progress report and partial implementation for evaluation. (See
'Checkpoint' deadline below)
- Each individual/team will present the project in the last couple
of days of class. The presentation should include a project
demonstration.
- You must stick to the following schedule of deadlines:
- Proposal - February 6, 2007
- Checkpoint - March 29, 2007
- Completed project - April 24, 2007
- Class presentations - April 26, 2007
Topic Suggestions
- Develop an Internet, true peer-to-peer, instant messaging program (using a protocol you develop or an existing one, e.g. Jabber, JXTA, Chord), maybe with features like encryption.
- Peer-to-peer calendar program (again, research Jabber, JXTA, other existing frameworks which may give you something to start with).
- Collaborative text editor (maybe P2P-based)
- Develop a network-based game (using a client/server or p2p paradigm). The game itself can be a simple text-based game (see for example, http://www.nethack.org/), but there should be some interesting network-related features.
- A number of algorithms exist that are highly parallel in nature. For example, a merge sort could potentially sort each half in parallel (i.e., at the same time), and when both halves are sorted they can be merged together. If you have multiple computers available the parallel parts can be farmed out by the "client" computer to each of the "server" computers; the servers would then transmit the results back to the client. For this project you'll choose an appropriate parallel algorithm, develop a protocol for client/server communication, and implement this using a networking protocol (e.g., UDP). You should also experiment with the system to determine how the performance of the parallel algorithm is affected by various parameters, such as the number of server machines, the size of the parallel tasks, delay in the network, etc. (idea adopted from Brian Howard, DePauw University).
- Develop an experiment (such as the previous listed one) and deploy it on a framework like PlanetLab
- Implement and analyze the performance of some network protocol/software
- Web cache/proxy server (research Internet Cache Protocol? or adaptive web caching; look at http://dijjer.org/)
- Network file locator
- Some sort of network analysis/maintenance/security tool
- Research and experiment with/extend ePost
- Develop/port Pastry in Python