Project Ideas

The descriptions are relatively sketchy and the details given are not hard requirements but meant to get you thinking about possibilities. Each project can be done by one or more students. If you have specific interests in the general area, we can probably create a project around these interests.

It would be satisfying if the project you do could turn into code people actually use. This implies picking an application for which there is no commercial alternative, ruling out, for instance, a wikipedia or a collaborative Google-like spreadsheet or a Writely-like word processor. In fact, these three systems can be the basis for picking projects. These tools allow us to create shared information asynchronously or synchronously. What does this information consist of? Traditional documents? Proably not, as people would want to use traditional tools such as Word, Excel or TeX for information that is edit-intensive. Often the shared information consists of small lists such as shared shopping lists. These tools, however, cannot do arbitrary computations on these lists. For instance, it is not possible for the tool to put an item in every grocery-shopping list. Thus, one can create a whole range of custom applications to support collaborative tasks that do not require much editing. To get actual use, you may want to pick a task performed in the department such as scheduling quals, supporting advising, giving teaching awards, organizing and conducting study groups, scheduling picnics and other parties, and scheduling recurrent games.

Why not change existing single-user applications to support collaboration? As a rule that is difficult, because software does not extend as well as advertised. A previous student has however extended Open Office word processor and spreadsheet to support rudimentary collaboration. It is possible to extend this system. Also, it is possible to extend the Eclipse programming environment, which seems to very amendable to extension. You can look into other open source software to make collaborative.

Creating a usable application is difficult, collaborative applications are even harder because they are distributed. You are encouraged to use two infrastructures developed by my research group which, given Java objects, automatically create user-interfaces of them and support (synchronous and asynchronous) sharing of them. Using these systems will give you familiar with collaboration infrastructures and relieve you from the implementing tedious details. They are fairly robust at this point and I am willing to fix any bugs you find. These infrastructures do not support all aspects of collaboration in particular, collaborative undo and locking. You can implement these features manually in your application if you have time. I am also happy to work with you in extending the infrastructure to support the missing features, in case you are more interested in infrastructures rather than specific applications.

The intellectual challenge in your project will be to (a) survey alternative systems developed elsewhere, (b) develop, implement, and possibly evaluate a design that improves on the state of the art, (c) and write a paper and give a talk on the