Project 3
Due Date
For this assignment, you can work in a group of 1 or 2, but no larger.
The short assignment is due on Wednesday, November 28, 2001, at 11:59pm
(one minute before midnight). You will turn it in as a text email message to
murphy@cs.rochester.edu
The rest of the assignment is due on ??, at 11:59pm. As before, turnin a
directory with the turnin script (/u/cs290e/bin/TURN_IN
).
Project Description
This final project is of your choice. You have much latitude in this
assignment, but you must clear your project with the prof before beginning.
The first step is to decide what kind of a project you would like to do. Do
you want to do something with physical mobility or logical mobility or both?
Do you want to use Lime or muCode, both, or neither? Do you want to play
around with some different devices (e.g., a couple of Compaq iPaqs, a laptop,
an 802.11 card, the apple airports throughout the cs department, the two
Orinoco AP-1000s in the CS department).
You need to make sure you project has a strong component of
\textit{mobility}. In other words, it is not something that is just
"distributed", but you handle some of the difficulty issues of mobility that
we have been talking about during the semester. The following are a few
starter ideas. None of them are complete, and you are not required to choose
something from this list.
- Build a compelling application on top of Lime. You've seen the puzzle
and RedRover in class. If you look in the examples directory of Lime, you can
also see a chat application. Someone built mobile checkers, but it has not
yet been posted online. Is there another demonstrative example which would be
interesting? Can you build a napster-like file sharing system on top of Lime?
The Center for Future Health provides an interesting environment where there
might be a lot of devices with wireless interfaces. They might be sensors to
tell body temperature, or a small camera, or a remote control device, or
things in the kitchen, or a sensor telling what times a pill bottle has been
opened, or a pressure pad telling if someone is standing on it, etc. Just
about anything you can dream up that is health oriented might be in a CFH
home. So, with all these devices, what interesting applications can you
build? As the person moves around the home, can you remind them of things?
Can you gather information and cache it locally so that you can access it
later (like a grocery list)?
- Build a useful utility on top of Lime. In the Lime examples directory is
a very simple utility which allows you to easily do a probe operation (e.g.,
inp, rdp, ing, rdg) across multiple hosts. While you were building your Lime
application, were there any utilities you thought would be useful? Can you
build a utility that could cache certain patterns of tuples from the tuple
spaces of the other agents encountered? What is a useful interface to this
kind of utility?
- Using the wireless base stations in the cs department and a laptop with
an 802.11 card, build an application which shows you on a map where you are
standing.
- Take several devices with 802.11 cards in ad hoc mode and design and
build a very simple, non-reliable, UDP-like, DSR-like, ad hoc routing protocol
to get a message multiple hops in this network. You will have to make a lot
of simplifying assumptions to get this to work, but I think it can be done.
- Build a simple Mobile IP system which would allow forwarding of packets
to a foreign network. Be careful if you do this to think about ways "around"
the firewall issues...in other words, you cannot just open a socket to a
foreign agent on a different network.
- Build a compelling application using muCode. We have talked about the
stock market example in class. You could build a simple server and bunch of
mobile agents that interact with one another and move among servers. Think
about any inter-agent communication which may be useful, think about any
communication back to the client that starts the stock market agent, think
about any communication/events which would be useful between the stock market
"server" and the agents.
- A Compaq iPaq is a simple handheld device with limited memory. Build an
application which dynamically loads the classes of an applicaiton based on how
frequently they have been requsted and, in order to make room for the new
classes, delete classes that have not been used. A simple example would be a
calculator with different classes for doing different calculations. If you
don't have the matrix multiplication class, you could download it if you have
space and a network connection, or you queue up the request until you have a
network connection.
Short Assignment
Send a description of your project proposal to murphy@cs.rochester.edu.
You will get feedback, so be as detailed as possible, and motivate why this is
a good final project for this class: what makes it challenging and
interesting. If you are working in a pair, only turn in this assignment one
time, indicating the names of the partners clearly at the top of the message.
Also include both email addresses so that comments can be sent to both
participants.
Resources
Hints
- First, do not start at the last minute. If you have never done
multi-threaded programming, you will have some reading to do. If you
have never done communication between two hosts, you will have some
reading to do. You can handle it, but realize that it will take some
learning and some thinking.
- Do not start by coding madly, building a large, monolithic system. Design
your project carefully, so that your development is incremental. Test as
you go. As questions if you get stuck. Talk with others, but do not copy
code!
- If you want to discuss your design before beginning, come talk to either
the TA or prof. If you get stuck, send an email.
- While testing, do not overload the processors of the lab machines which
have displays. You should run additional processes on the cycle servers:
cycle1, cycle2, cycle3. If you do not know how to remotely log into
these machines and have the display show locally, just ask.