Group Project

An important part of the course will be a group project involving the design and implementation of a database application. The evaluation of this project will be based on correctness, implementation design with respect to the concepts learned in class, creativity, and depth.

The Group Project will be a web-based application with a database backend - a so-called three-tier application. We will use the Ruby scripting language and its built-in web server (WEBrick), the Postgres DBMS on the Ed Lab, and the Rails model-view-controller framework for web applications.

Social Tagging

All projects will be based on a common type of application that I'll call a "Social Tagging" website. Examples of such applications include sites that you may be familiar with such as del.icio.us, http://flickr.com/, and http://citeulike.org. Other sites like http://www.technorati.com/tags have jumped on the tags bandwagon. The intriguing aspect of these applications is the emergent behavior that arises when many people use the system. Read wikipedia articles on folksonomies and social bookmarking for some good discussions and links.

All of these applications have several common components that you should implement:

  • User Features
    • adding items of interest (publicly, no security to hide items)
    • user-specific, i.e. an account allows for personal collections
    • tags - free text words that can be used to arbitrarily classify items
    • social context, i.e. the application facilitates sharing and exploring items
  • Implementation Features
    • Web-based application (relatively simple HTML frontends)
    • Database-driven backends. Almost every user action is based on the content of the database and results in another database query or modification.

Your Project

Your group will implement such a social tagging application. It is your decision what exactly you implement. One of the interesting parts of the project is that you may choose to improve on an existing type of application (e.g. better bookmark management, visualization) or develop a new application for a new type of item (e.g. music files, beer).

A minimal project would be a de.licio.us "lite" that provided

  • a form interface that a user could paste in a URL along with username and tags
  • a hyperlink-based exploration of the database by username, URL, and tag

This would be too minimal to receive a favorable grade, but is a good example of what you might want to implement to get things off the ground.

A much more ambitious project might be, for example, a music library site that added many of the fancy tricks of an app like http://citeulike.org/. Users are authorized by a permanent cookie. A javascript bookmarklet creates a pop-up in which a user types tags describing the current page. If the page is one of several known music sites (e.g. allmusic, amazon, cdnow, etc.) then the server can "screen scrape" the referenced URL, extract the music information, and insert structured music information into a database (avoiding duplicates). Users could browse their music, follow tags to find similar artists, learn about new artists by subscribing to a tag- or user-specific RSS feed, discover what were the most popular artists, leave a one-line comment about an artist, etc. In order to meet performance demands, you might implement some or all of the data in a custom backend designed system.

Your project will probably be somewhere between these two examples.

Regardless, each one of these actions involves an interaction with the database. A significant part of your project will be in the design of the schema for the application, the specification of "use case" queries, the implementation of efficient SQL or other means to interact with the database and embedding these database actions into your backend code (e.g. using JDBC from a servlet), and some reasonable experiments with database size to report on performance.

Hopefully, this will be a fun project topic for everyone and at the end of the semester we'll be able to discuss implementation issues that are common for all of our projects and enjoy the creativity of different groups.

Links for Inspiration

More examples

There are, generally speaking, two directions that one could take: improving the features of an existing social tagging application or develop a new type of social tagging site.

With respect to improvements, here are some simple ideas:

  • Add a database-driven "stemming" for tags (e.g. sport = Sports = sporting)
  • A data entry form for a Delicious-like site that shows you tags that others have used for the site that you're about to bookmark.
  • A display of active users, those who post frequently. What does "frequently" mean in terms of your database schema.
  • A literature recommendation service for a Citeulike-type site in which new articles are suggested based on commonalities between citations (common tags, so-called "co-occurrences" of tags, common words in titles and abstracts).
  • Implement a Google Suggest interface that completes tag words as they are typed. Implement a custom database backend, for example, an index or tree, to allow for fast completion of prefixes. (More info on how Google uses the XMLHttpRequest in Javascript can be found at http://serversideguy.blogspot.com/2004/12/google-suggest-dissected.html.)

With respect to new types of sites:

  • A music site
  • Sports enthusiasts
  • Collectors

You get the idea.