Suggested Final Projects

 
  The projects below are only suggested projects. You are free to choose your development platform, actual details etc. In fact, you are required to submit a one page write up on 31st March, on what project you have chosen, what you plan to implement, what API you will be exporting etc. It is up to you to define the project more clearly, and be innovative/creative on how much they want to do. Multiple groups can independently choose to work on the same project.  

1

Use the GPS device given to you to track your movement on a map of the campus on your PDA as you move. In addition, you could also attempt some location based (visual) queries, e.g. Can you point me to building "X" on the map? How do I get to a certain building (highlight the path to get there)? Where is the nearest cafeteria? etc.

 
2 Design and implement a telephone/pager service using PDAs. You should be able to look up a directory service to find out how to get to a certain person (the telephone number), be able to dial (and the other end beeps) someone, establish a connection with that person if he/she answers and be able to talk in real-time, or leave page messages if they do not answer. You can also try to implement services such as 3-way calling, call forwarding,
etc.
 
3 Online chat rooms are quite popular on the internet today. We want to develop adhoc, location-aware chat rooms. For instance, when you come into a specific area, you should be able to find out what chat rooms are present there, be able to query to find out what a chat room is about, be able to join a chat room (with authentication if necessary), converse with others (similar to how we do it on the internet today), and dynamically leave. Chat rooms may not exist once everyone leaves that area, and can get formed as people move there. You can also try to add more interesting services (beyond what is available on the internet today) such as: find the person who is identity "X" in the chat room, in the physical
room (for instance, using triangulation).
 
4 Application Aware Program migration: Suppose you are playing a game on a PDA, and someone needs to borrow your PDA, or you are running out of batteries. So you want to continue playing (or resume) from where you left off, on another PDA. This project will be to take an already existing code for a simple game, and modify its sources, so that you can ask the program to save and transport/migrate itself to another nearby PDA.  
5 Fairness Guarantees: Suppose tow people are playing a game of Battleships. And it is likely that both people have access to the sources for the game, and either could have modified the game to enable him to cheat. For example, a person could have added a patch to enable him to change the positions of his ships in the middle of the game! And since the two people are not logging on to a central server and playing the game on that server, but running a client instead(on their respective PDAs) which connects to the other person's PDA and plays the game, I dont have the guarantee  that the other person is not cheating/lying etc. Come up with a simple mechanism (using public and private key encryption etc) so that at the beginning of the game, a snapshot of the state is sent from one PDA to another, and at the end, using the initial snapshot, and the moves made, the whole game is either validated or invalidated. A challenge here is that the second player(the one who ercieves the snapshot) should not be able to generate the current board position, but only if the current position is legal or not! Choose any game and any paradigm.  
6 Secure data sharing over PDAs. Each PDA user can declare some of its files sharable and can indicate which users (PDAs) can access what part of her/his shared data. As the requests come, depending on the source of the request and the data requested, the access may or may not be granted. You can use public/private keys to make sure that right PDAs access right data.  
7 A multi-user chess game. The players will be divided into two groups (blacks and whites). The moves will be decided on the base server. Each user can suggest the next move for his/her group. The code on the server will take the suggestions, and using a selection algorithm, will select one of them (the best one!) and makes the move. Any algorithm can be used as long as it is reasonable.