CPSC 441, Fall 2014
About the Final Project
As you know, this course will have a final project
instead of a final exam. The project is due at the
regularly scheduled final exam period: Thursday,
December 18, at 8:30 AM. During the final exam period,
each student will present his or her final project. The
presentations should be rather formal and should be between
fifteen and twenty minutes long. There are several possible
types of projects, and the nature of your presentation will
depend in part on the type of project that you do.
This is meant to be an individual project, but I will consider
proposals for team projects with two or three people. Each person
on a team will still be responsible for a full fifteen to twenty minute
presentation, so a team project will have to be fairly substantial.
You should discuss your ideas with me and submit a proposal sometime
within the next three weeks. We should not have two people (or teams) working
on the same project, so you should move to claim your preferred topic
quickly. If two people propose the same topic, the first to propose it
can do it, and the other will have to find something else.
I will ask for progress reports sometime in the
following three weeks and again sometime soon after Thanksgiving break.
Here are some guidelines and ideas, but you are certainly not restricted
to the projects listed here...
- Research Paper: Write a paper about some aspect of networking.
The paper would probably be ten to fifteen pages, and should include
notes and bibliography. Wikipedia is not a sufficient source! Some possible
topics are:
- Network security; how networks are attacked and possible defenses. For example, could look at
hacking into servers or at Denial-of-Service attacks.
- Encryption and how it is used on the net. Could look at HTTPS, VPNs, SSH, encrypted email, etc.
- Cloud computing. How it's implemented and what it means.
- The Network Neutrality debate.
- The IPv4 to IPv6 transition.
- Hadoop. Investigate how it is used for massive distributed computation. Who uses it and why?
(You might be able to do this as a shorter paper with a project. It is possible to run Hadoop
programs on a single computer for development and testing.)
- Video and audio streaming. How do they work, and what are their implications for the network.
- A paper inspired by a popular book such as The Victorian Internet, by Tom Standage, or Tubes,
by Andrew Blum. However, the paper should be more than just history; it should go into some
technical details.
- Paper and Project: You might write a shorter paper, combined with a programming or network
configuration project. For example,
- Install a web cache using the open-source squid proxy server. Set up some web browsers to
use it. Report on what it is, how it works, and whether it is effective.
- Cloud computing in the Amazon cloud (Amazon EC2). Use the free tier services to set up some
servers and/or do some computation, and report on what can be done there and how it works.
- Content distribution networks. Find out what they are and how to use them. See if you
can use one to distribute your own files. (This could also be a pure research paper.)
- Firewalls. Set up and configure a firewall using Linux and write a report about how the firewall
is used and what can be done with one. This might be done on a virtual server.
- Set up a server using node.js. Node.js is a server-side JavaScript framework that has become
popular for writing specialized network servers. Do some programming with it and write a report.
- Investigate "mesh networks" and see if you can set up a small mesh network. Write a report
explaining what mesh networks are and how they work.
- Programming Project: Write a non-trivial networking program or API. In this case, your
presentation could discuss the design and specification, the programming details, and the use of
your product.
- Write a much more sophisticated web server than the one you did for Lab 3. For example, make
it much more configurable with configuration files. Make it handle a wider variety of headers.
Implement a POST command that makes it possible to run server-side programs.
- Write a framework for distributed computation in Java. Create "compute nodes" that can accept
"Runnables" over the network, run them, and ship the result back to the source. Try to keep the
framework general. Use a network of compute nodes to perform some example computations.
- Write a networked multi-player game of some sort. It would be best if you could specify
the API clearly enough that other people can write clients for your game, including clients
written in other programming languages.
- Invent your own protocol and write a server in Java or node.js. Write something that you can
sell to someone like Google or Microsoft. Be the next Twitter or SnapChat. People younger
than you have done it.