Projects

First Mini-Assignment


In this first assignment, follow these steps:
  • Register on the Apple iPhone Developer Website.
  • Download the Buddy Tracker application from the wiki and compile it on one of the Mac minis in the DARTS Lab.
  • Run the code in the emulator.
  • Load the code on the iPod Touch labelled with your netid and execute it. Register yourself with BuddyTracker and link yourself as "buddy" with the TA (nyadav). When you activate BuddyTracker on the iPod Touch labelled with "nyadav", you should see yourself and nyadav on the map. Try to start a chat with nyadav and text messages back and forth between your device and the nyadav device.
  • Inspect the code of BuddyTracker and try to identify where the GUI (graphical user interface) is defined (e.g., the Google Maps parts, the input for the registration, the chat interface, etc.), where the communication with the centralized server "snoopy.cse.nd.edu" takes place, and where the location information is obtained and used to display users on the map.
  • Deliverables: None. This assignment is meant to get you started with the programming environment and to see the features of BuddyTracker.
  • Due Date: Complete this assignment by noon on 9/11/09.

Second Mini-Assignment


In this second assignment, we will begin to modify BuddyTracker to offer a new application/feature. This feature, called GeoNotes, allows a user to "drop" messages and notifications, which can be "picked up" by other users at a later point. Imagine a note to your friend that says "If you happen to come by here today before 5pm, could you walk into the library and pick up the textbook for Ubiquitous Computing for me?" Or a note that says "To all my friends who happen to walk by here, go into Starbucks and mention my name, they will give you 15% off!" Only users who are intended to receive this note AND pass by where this note has been dropped will receive the note. The application will have the following features:
  • A user chooses the GeoNotes option in BuddyTracker.
  • A new "window" asks the user for the note, an expiration date for the note, a range, and the recipients.
  • This note is transmitted to the server and stored until the expiration date.
  • Any user passing this location (within the indicated range) before the expiration date will get the note from the server with the next location update.
For this assignment, we will focus only on the GUI part, i.e., you need to implement the part where the user selects the GeoNotes option and inputs the indicated parameters. The date should be at least at a granularity of hours and the range in meters or yards. The recipient selection should allow at least one concrete friend or the option "all" (i.e., any of your friends passing by would get this note). Note that you should not get your own notes. For now, store these parameters (together with location where the note was dropped) in a data structure that will be sent to the server later (in the next assignment). If additional features are implemented (e.g., one can select several specific users from a list or a user can cancel a previously dropped note, etc.), extra credit can be earned.
Deliverables: The GUI must be demonstrated to the TA before the assignment deadline. The source code must be placed into your directory on the wiki. A writeup of at most 2 pages must also be placed onto the wiki (accepted formats: ps, pdf, doc). The writeup must describe the assignment, a description how to use the new feature (e.g., you can include screenshots), a description of any extra features implemented, and a description of any open and unresolved issues in your implementation.
Notes: Do not forget to include error checks, e.g., an expiration date in the past should not be accepted by your GUI. If you work on a team, make sure to indicate that clearly in your writeup.
Due Date: Complete this assignment by noon on 9/25/09. Note that the next assignment may be given out before this one is due, so do not procrastinate!

Third Mini-Assignment


In the third part of the first project, you will complete the GeoNotes application by adding the communication component to your code. After your new interface collected all required information, you must send this information to the server computer in a single message that has the following structure.

struct geoNote {
  char *senderid;
  char *note;
  int minute_validity;
  float latitude;
  float longitude;
  float range;
  char *ipaddress;
  char *recipientid;
  char *optionalfield;
};

Your application will send a message containing exactly this information to the server (snoopy). Whenever your iPod updates snoopy with its location and snoopy detects a GeoNote that is relevant to you (i.e., you are a recipient, the note is not expired, and you are within the correct range of where the note was created), your iPod will receive the note in the exact same format as above. You do not have to implement the snoopy portion of this project, the TA will do this. However, your BuddyTracker application has to display a note (or list of notes) whenever a note (or notes) arrive. Your GUI should be able to handle multiple incoming notes. The recipient field contains the specific recipient or the string "all" if all of your buddies may receive this note. In case you implemented additional features in the previous assignment (for extra credit), you can add these features to your message in the optional field (e.g., any additional information you requested from the user when typing in the note). Should your application support lists of recipients, you can use the string "list" in the recipient ID field, with a list of recipients following in the optional field (where recipients are separated by an empty space in the string). Make sure that your entries do not exceed the limits for the fields of the message. To implemment this project, become familiar with the XCode networking part in BuddyTracker. You should use the same networking tools and approaches that are used for communication between the iPod and the server.
Deliverables: The entire application must be demonstrated to the TA and instructor (similar to the previous assignment). The source code must be placed into your directory on the wiki. A writeup of at most 2 pages must also be placed onto the wiki (accepted formats: ps, pdf, doc). The writeup must describe the assignment, a description how to use the new feature (e.g., you can include screenshots), a description of any extra features implemented, and a description of any open and unresolved issues in your implementation.
Notes: Do not forget to include error checks, e.g., message entries should not exceed the field lengths of the message. If you work on a team, make sure to indicate that clearly in your writeup.
Due Date: Complete this assignment by midnight 10/15/09. During that week, you will have to arrange a meeting with the TA and instructor to demonstrate your project.

Project: Proposal


For Graduates: A 2-page project proposal is due 9/21 (to be submitted via the wiki). Students are highly encouraged to discuss possible projects with the instructor (via email or in person) before submitting the project proposal. Students have to work alone, but their chosen project can be related to their ongoing research if a relationship to pervasive computing can be shown.
For Undergraduates: Prepare a 1-page project proposal (which is due October 12) describing your proposed final project for this course. There are very few constraints or requirements, so that you can be as creative as you want. You can continue the BuddyTracker work and extend/enhance it by adding new features or you can propose something completely different if the resources are available. Generally, we can easily provide access to resources such as smart phones (iPod/iPhone, Android, Windows, Linux), Linux-based embedded computers, Linux-based robots, laptops (Windows/Linux), wireless communication devices/routers (Linux), sensors such as GPS, accelerometers, cameras, etc. But other equipment can also be obtained if feasible. One key requirement for your project is that it uses mobile/wireless/handheld/sensing equipment (e.g., the iPod Touch) and it is networked. That means that your application must communicate with other remote devices, e.g., sensors (a wireless camera), mobile/handheld devices (e.g., as in BuddyTracker), or a database/server (also as in BuddyTracker with the snoopy server).
The project proposal must be submitted via the wiki by October 12 (midnight). If you would like to discuss ideas with the instructor before this deadline (in person or via email), please feel free to do so.

Project: Design Document

TBD

Project: First Progress Report

TBD

Project: Second Progress Report

TBD

Project: Final Report

TBD

Project: Final Presentation and Demonstration

TBD