Projects
CS290F Fall 2006 - UCSB Computer Science - Thorsten von Eicken
Contents |
Handouts
- Project 1, start Mon 10/2, due Mon 10/16
- Project 2, start Wed 10/11, due Mon 10/30
- Project 3, start Wed 10/25, due Wed 11/15
- Project 4, start Mon 11/15, due Thu 12/14
Project description pages
Movies & Music
- BaDTunes - Brett Stone-Gross & Dominic Metzger
- Music store with custom playlists for purchase, data from Rhapsody and Yahoo!.
- Fattube - Anders Smestad (& Cagdas Gerede)
- Really cool playlists for YouTube.
- DVDTrader - Elliot Barlas & Mark Wiley
- Online DVD collection and sharing system.
- Online DVD Store - Nagy Mostafa & Lamia Youseff
- A website for selling movie DVDs on with users reviews, and ratings. The DVD catalog is populated from Amazon's e-commerce service.
- VideoWeb - Fred Tu & Gargi Shah
- Keep lists of your favorite videos, then view, rate, and comment.
- Movie Swap - Mark McCartin-Lim & Muath Alkhala
- Trade movies you own with other users.
Books and Restaurants
- BukManiac - Neha Mittal & Tushar Ranka
- Online book store with reviews and ratings.
- HotSpots - Kyo Lee & Eugene Dvortsov
- Rank and review your favorite restaurants, bars and night clubs in several cities in California. The restaurant list is populated from Yahoo! Local.
- Reviewlicious - Yuemin Yu & Bita Mazloom
- Out with bogus reviews! Review, Rate & be Ranked.
Stores
- GameZone - Roopa Kannan & Keshava P Subramanya
- Online PC game store with data from Yahoo!.
- Electronics4u - Harsha Alagud & Sumanth Jagannath
- Online store with electronics items and accessories. Rate items and get recommendations.
Other
- Biblioful - Vika Felmetsger & Marco Cova
- Manage your bibliographies online.
- Fishbowl - Ashish Sharma & Alon Levi
- One stop job search, data from indeed.com.
- FindMe - Aram Melkoumian & Phil Wittrock
- Track me and my friends on a map.
- BlogSense - Wei Zhang (& Panuakdet Suwannatat)
- A blogging site with links to related blogs.
Project overview
The overall course project is split into 4 parts, named project 1 through project 4. The goal is to gain hands-on experience in building and deploying a scalable web service on the internet. The four projects have the following goals:
- Project 1 consists of retrieving data from a web service, such as Google maps, Amazon books, Yahoo local, Flickr, that you will be working with in projects 2 through 4. The infrastructure for Project 1 is Ruby with appropriate REST or SOAP plug-ins to access the web service, and mysql (or postgresql) for data storage. For example, if you were to build a computer science bookstore as your overall project you could retrieve the descriptions for all books available on amazon in that category.
- Project 2 consists of building a very, very simple web site around the data you have retrieved in project 1. This web site should primarily display the items you have collected and offer some crude editing capabilities. In the case of the bookstore example you could have two pages, one to list title and author of all the books and a second to show the details of an individual book. The infrastructure for project 2 will be the same as for project 1 augmented by the Rails framework and possibly hostiong your site on Amazon's Elastic Compute Cloud.
- Project 3 consists of building an transactional web site around the data. You will need some notion of users accounts, logging in, keeping track of (http-) session data, and performing some form of atomic transactions. Again, for the bookstore example, users could create an account, log in, browse books, add individual ones to their shopping cart (session data), and check-out (atomic transaction against inventory).
- Project 4 take the application, scales it to multiple front-end servers, and load tests it for a large number of users and of items. Session data will need to be distributed. Transactions will need to remain atomic. The database may need to be replicated and/or partitioned.
Project requirements
The exact project is open for creativity. All projects must be executed in teams of two. (Remember 2 != 3 and 2 != 1 .) In addition, all projects must have the following characteristics:
- there must be data on the site that users not only view but also modify (e.g. edit, bid on, or purchase)
- there must be the notion of users that have a userid and password, as well as some per-user state (account, preferences, etc.)
- there must be some http session data that follows each user around as he/she is browsing the site
- there must be some hard atomic transactions, such as buying the last copy of a book[1], winning an auction, or acquiring an edit lock on a wiki page
- there must be a "pile of data" that you can acquire off the web, so you can easily grow the data set without entering it yourself.
- you must dynamically incorporate data from a web service (typically a 3rd party service), such as Gogle Maps, Yahoo! Local, Amazon Books, etc.
- it must be written in Ruby on Rails using a SQL database for storage (preferably mysql or postreSQL)
- your site must run on a "production" host (or set of hosts) on the internet that we designate, presumably on Amazon EC2 if accounts become available
For example, you could have a computer science bookstore. You acquire the catalog information off Amazon and make-up the inventory quantities at random. Users can create an account, log in, browse books, view book details. They can then add books to their shopping cart and check-out. They can further view their account history/status.
Project nice-to-have's
- draw on additional web services resources dynamically, for example, augment the book information with live data from Amazon's book reviews
- store auxiliary data on Amazon S3
- compare the scalability/performance of various components, such as the web server, load balancer, session storage cache, etc.
- add redundancy to your database set-up, using mysql replication, for example; or improve it scalability by reading from mysql replication slave servers
Where is Web 2.0?
The astute reader will have noticed the lack of Javascript/AJAX, which to a large degree defines "Web 2.0". This is somewhat on purpose because (painful) experience shows that while incorporating AJAX into Ruby on Rails applications is "easy", it still takes a lot of time to get far enough up on the learning curve so that it actually is "quick to do". The standard scaffold is not designed with AJAX in mind and there doesn't seem to exist a simple AJAX-ready scaffold. So it takes a while to figure out how to split up pages into the right set of partials to enable AJAX and it also takes some time to grok all the pieces one needs to produce javascript from RoR.
With respect to "Scalable Internet Services" AJAX is really largely an orthogonal issue. Its use has some impact on the type and number of requests to be processed, but that's beyond the scope of this course. So the bottom line is that the use of AJAX is discouraged in this (very short) course. But nobody is prevented from AXAJifying their project after the course :-).
- ↑ in the real world this wouldn't require true atomicity since it's common practice to tell someone "oops we goofed, we don't actually have the book in stock, it will take a few days and we'll have it to you", but for the sake of the project this can be decreed to require a transaction.
