Problem Set 9: Making A Dynamic Web Application
- Ideas and Team Requests
- Project Descriptions
- Design Review
- Presentations and Reports
- Peer Evaluations and other Surveys
For this problem set, you will work in assigned teams (you may request teams, see below). Unlike in previous problem sets, you should divide work among your group members in the most efficient way. It is not necessary for everyone in the group to work together on all parts of the assignment, but every student should contribute equally to the work. All students should also contribute to the overall design of your site.
You are encouraged to discuss this assignment with other students in the class and ask and provide help in useful ways. You are also encouraged to seek help from people outside the class on the content, use and implementation of your site.
You may consult any outside resources you wish including books, papers, web sites and people. You may use the code from the example sites in any way you see fit. You may also incorporate any open source code you find into your project so long as you follow the licensing rules for that code, include its copyright information and credit its authors. If you use resources other than the class materials, indicate what you used along with your answer.
- Learn to build a software project from start to finish.
- Gain experience making web applications.
- Make a useful and interesting web site. I hope all groups will produce web sites that will continue to be used and developed after the course ends.
- Ideas and Team Requests: 20 November (email by noon)
- Design Review Scheduling: 20 November (after class)
- Project Descriptions: 27 November (email by 11:59pm)
- Design Review Meeting: as scheduled
- Presentation Requests: 4 December (email by 11:59pm)
- Presentation (optional): 6 December (send zip file before Noon)
- or Report Due: 11 December (Noon)
- Peer Evaluations Due: with Project or Presentation
Your site should be as accessible to all web users. That means it should be obvious to any visitor what your site is for and how to use it. You site should be designed so it works well even for for visitors who have slow network connections (that is, its function should not depend on unnecessarily large images) or small monitors with poor color contrast. You should even strive to make your site accessible to the blind (that is, it should be possible to use your site using a text-only browser) or to users with iPhones or similar PDAs.
- Bored in C'ville
- Cavalier Daily News Discussion
- Club Baseball — news, scores, schedules, stats, and rosters
- Crossing Words — puzzle-generating website
- Flash Card Builder for Pictoral Languages
- Get Rich Casino
- Hoo Knows Where To Live — easy-to-compare housing options
- HoosGotIt — Your University Trading Service
- Hoos Trading Books — student-run bookstore
- Hoos Where? — alumni connection site
- Marching Band
- Meet a Hoo
- Online Collaborative Scheduling System
- Test Your Cognitive Abilities
- The Adventure Nexus — interest and hobby networking site
- University of Virginia's Pre-Medical Applicants
- UVA Community Forum
- Virginia Women's Chorus Forum
- What Wahoos Watch
- 2010 — Recipe Database
- 2010 — Flashy Music Site
- 2010 — Simple Music Site
- 2010 — Pokemon Game
- 2010 — Residential Advisors (part 2)
- 2010 — Space Shooter Video Game
- 2010 — Telephone Game with Pictures
- 2010 — King's Dominion Amusement Park
- 2010 — Hoo's Clubs
- 2010 — Up For Swaps
- 2009 — Interactive Real-Time Chat Room
- 2009 — Surveys (e.g., Which Major Best Suits You?)
- 2009 — Cool or Tool (i.e., FML)
- 2009 — Simulated Stock Market Game
- 2009 — Robo Rhymes (i.e., Real and Created Song Lyrics)
Another approach for finding ideas is to consider websites that you enjoy using. Could you make something similar to eBay, Flickr, Craigslist, Blogger, IMDb, or Facebook?
How Much Work: Challenging Computation
|Team Size||# Challenging Computations|
|2||2 + (1 Extension)|
|4||3 + (1 Extension)|
|6||4 + (1 Extension)|
- Recipe Database.
- Not Enough: Your website allows people to upload recipes, rate recipes, and find all recipes that use a given ingredient. (This is too close to PS8: upload restaurants, rate restaurants, sort restaurants by cuisine type, etc.)
- 1 Challenging Computation: Your website allows people to
upload recipes, and each recipe has a list of ingredients. People
can then go to the website and list the ingredients they have in
their kitchen currently, and you'll list all meals for which they
already have all of the ingredients.
- Extension: Find all meals for which they are only missing one ingredient, or find sets of three meals (each set has one breakfast, one lunch, one dinner) that could be made.
- 1 Challenging Computation: Your website allows people to
upload recipes, but each recipe has a list of ingredients with
associated values (like "price" or "calories"). People can visit
your website and give a maximum budget ("amount in wallet" or
"calorie diet limit") and you'll list all recipe combinations
they could make within that budget (e.g., "with that money you
could make Chicken Dish #1 and Cake #3").
- Extension: As above, when listing combinations list on breakfast, one lunch and one dinner.
- Bar Crawl.
- Not Enough: Your website allows people to upload bars, rate bars, and find all bars that serve a certain kind of drink. (This is too close to PS8: upload restaurants, rate restaurants, sort restaurants by cuisine type, etc.)
- 1 Challenging Computation: Your website allows people to select a number of listed bars and finds the shortest path that visits all of them. (You can use the Google Maps API to find the shortest path between any two bars. How could you chain that to find the shortest path that visits all of them?)
- 1 Challenging Computation: Your website allows people to upload bars and indicate some drinks and drink prices for each bar (e.g., "wine, $5" "beer, $3" at Bar #1, but "wine, $7" at Bar #2). People can visit your website and list how much money they have. You output a way for them to visit as few bars as possible but have as many different types of drinks as possible.
- 1 Challenging Computation: As before, but this time the visitors list the drinks they want to have and you output both the "minimal walking" tour that gets all those drinks and also the "minimal money" tour that gets all those drinks (those two answers are likely to be different).
- Message Board.
- Not Enough: Your website allows people to upload stories (or pictures, etc.), rate stories, and find all of the top-rated stories. (This is too close to PS8.)
- 1 Challenging Computation: Your website recommends
news stories from among those you haven't seen yet by finding
other people who have liked the same stories you have and then
finding other stories they have liked.
(This is basically how Amazon's "you might also
like" and Pandora's "try this music" gizmos work.)
- Extension: Your website also recommends new friends to you by finding friends who have liked the same stories you have and disliked the same stories you have. (This same idea works for a "take this survey to find out which major you should choose" site or a dating site, etc.)
- FourSquare / Humans-v-Zombies Site.
- Not Enough: Your website allows peopel to indicate locations (e.g., "by the Rotunda", "on the Corner") and indicate their presence at those locations. Visitors can see who has spent the longest at each location, or get a current map of all people now. (This is too close to PS8.)
- 1 Challenging Computation: Not only can visitors log time at a location, but visitors can request that the site find for them the closest location where they would have to the least amount of time to become the mayor of that location (find some way to combine or limit time and distance).
- 1 Challenging Computation: Not only can visitors indicate whether they are humans or zombies, but visitors can request that the site find for them the closest that is far from all zombies (if human) or the path they should take from location to location to catch the most humans in the shortest time (if zombie).
- Auction/Swap Site.
- Not Enough: Your website allows peopel to upload items for sale, give them prices, rate sellers, find all items for sale under five dollars. (This is too close to PS8.)
- 1 Challenging Computation: Your website implements a full auction, as in PS5. You can only bid on items that exist, bids must be strictly increasing, you must have enough money, and after a time period the item is "purchased" by the highest bidder.
- 1 Challenging Computation: People put various items up for swap and various wishlists (e.g., "have textbook", "have lamp", "want bike") and your website automatically figures out the set of swaps that make everyone the most happy (e.g., "Alice gives the lamp to Bob in exchange for the Bike, then Claire gives ...").
- Volunteer Coordination.
- Not Enough: Your website allows people to upload volunteer opportunities (or houses on fire) as well to indicate people who are volunteers (or firefighters), each a particular set of skills (e.g., trash collection, ambulance driver). You can view and sort all of the people and opportunities. (This is too close to PS8.)
- 1 Challenging Computation: In addition, each volunteer opportunity (or fire, or whatever) has a list of skills needed to handle it (e.g., needs "cleanup", "cooking", "management") and each person has a set of skills. Your website finds the optimal way to allocate volunteers to tasks so that the most tasks are handled.
- Extension: Each volunteer activity has a "payout" or "benefit". Rather than just serving the greatest number of activities, your website maximizes societal benefit.
- Extension: Each volunteer activity has a location and a duration. A person cannot be in two places at once. Your website gives each volunteer a schedule of places to be so that the most opportunities are served. (Bonus: People do not travel at the speed of light, but instead take time to get there.)
- PS1 Challenging Computation. Visitors to your website can upload tile photos and big photos (or they upload URLs to such images), and you create photomosaics for them.
- PS2 Challenging Computation. Visitors to your website can upload essays they have written or "gotten from friends", and you detect cheating by finding which essays are too close (i.e., have the greatest alignment).
- PS3 Challenging Computation. Visitors to your website can upload grammar fragments, color choices, backdrops, etc., and you make l-system fractals when are displayed in a gallery and voted upon.
- PS4 Challenging Computation. You make a website where people can upload text that has been encrypted with a Ceaser Cipher (etc.) and you automatically decrypt it (Google for many examples of such websites). The more cryptography you handle, the more this counts for.
- PS5 Challenging Computation. See "auction site" above.
- PS6 Challenging Computation. You make a multi-player website where people can explore an interactive world and "run into each other" at locations. (Or you make a "Fantasy Football" / "Pokemon Battle" sort of site where visitors have budgets, buy players / pokemon, and then the stats change over time accord to some rules.)
- PS7 Challenging Computation. You make a website like the Udacity interface, in which people watch a video and then enter some Python code to answer quiz questions. You interpret their code and see if they got things right or not, etc.
(Reminder: Nothing prevents you from doing part of your website in Python and part of it in Java! Use the best tool for the job.)
(Reminder: Nothing prevents you from combining ideas or changing the themes. For example, your King's Dominion Visit Planner site might help people coordinate carpools to the amusement park (like "volunteer coordination" above) and then help people find the shortest path to visit every different type of ride once they get there (like "bar crawl" above).)
Making A Pretty Website
In order to increase the chances I honor your request, your email should not only list the team members but should give a brief description of the web site you have agreed as a group to build. Students who do not request teams will be arbitrarily grouped into teams or three or four.
The size of your team may be between one and fifty students, but the impressiveness of the web site you intend to build should scale as the square root of the number of people on your team (e.g., a team of four students should build something twice as impressive as a team of one student working alone). If you have a large team, you will need to figure out carefully how to divide your project into smaller, independent pieces. The ideal team size in most cases will be three or four students. More than that, and you spend too much time on management issues. Less than that, and it is hard to build a sufficiently interesting web application.
- The name of your team. You can keep your assigned name, or select a new one.
- A list of your team members by UVA ID (e.g., mst3k). CC'ing them on the email is not enough. You must list all team members in the description document.
- The dynamic web site you propose to build. It should make it clear what a visitor to your web site will be able to do. This should be at least two paragraphs long.
- A plan for how you will build it. The plan should include all of these
- What work will be done. Notably, this should include all programming: what key functions will be written? What will their input and output be?
- How the work will be divided among your team members.
- A schedule: who will do what when. Each team member should commit to a minimum of 20 hours outside of class to work on the project; stronger projects will require more time. Be sure to include support in your schedule for half-way milestones and slipped deadlines.
- A testing strategy. It is important to have a strategy that will allow you to start testing pieces as you develop your site. Expecting different pieces of functionality written by different team members to magically work together at the last minute is a recipe for disaster.
- A suggested grading contract. Complete this sentence: "We believe we will deserve an A on this project if we can demonstrate ..." We may not agree to your contract suggestion, but it will give us a chance to tell you if your expectations are very different from ours. The suggested clause should be more than "if we do all the work described above" — you must make it clear to me which course concepts will be involved in your project and where they will be involved. An A-grade project typically involves the strong use of at least two key course concepts and the weak use of at least one other. Projects should not just be PS8 but with new content (e.g., course reviews instead of restaurant reviews).
- A list of questions you have. These questions should clearly identify anything you will need to do to build your site that you don't know how to do yet.
- The team member sending the document must CC every other member of the team.
- Your document should be in plain text format, HTML or PDF — but not DOC or DOCX. You will lose points if you turn in a DOC or DOCX file.
At the design review, you will describe your ideas for what your site will do and how you will build it. You will also be expected to show your progress so far. We will discuss the questions on your Proposal document and how you are dividing the work among your team.
The design review does not need to be a formal presentation, but you should prepare for it to make it as useful as possible. In particular, you should come to the design review knowing what you think the toughest problem for your project will be and having some preliminary ideas how to solve it.
Presentations and Reports
In the assigned room from 5pm to at most 8pm (see calendar above), teams that qualify for the presentation option will have an opportunity to present and demonstrate their web sites. The time for each presentation will be alloted depending on the number of qualifying teams (but will probably be about five minutes per team). To be eligible to present your site, you must send me an email containing a zip file containing all the files for your site by the appropriate day (see calendar above). The subject of the email should be "PS9 Team N", where N is your team name. You should also send me usernames and logins for your site: I will have them available in another window for copy-and-paste when you give the presentation. You can change your site between when you send the email and when you do the presentation, but you should be very wary. Your presentation should include the following elements:
- You should introduce your team and indicate everyone on it. (Your entire team must be present.)
- You should briefly describe the theme or purpose of your site.
- You should demonstrate all of the key functionality of your site.
- You should make explicit any major portions of your site that demonstrate key course concepts (e.g., "the whole site is a database-backed dynamic web site written in Python, but we also have this auction part over here ...").
- You should make explicit any course concepts that you covered more minorly (e.g., testing, object-oriented class hierarchies, list filtering).
- You should indicate the role of each team member. That is, you should explain who did what.
- You should indicate what was difficult and what was easy.
- Each team member must speak for at least thirty seconds. All team members must stand up at the front during the entire presentation. Beyond that, you can divide up the speaking and mouse-clicking duties any way you like.
- Speakers should speak loudly and clearly while making eye contact with the audience.
- You may do anything else you like (e.g., pass out fliers, call for audience participation) as long as you stay under the time limit. I will email the time limit once it has been determined.
- I may ask your team a question or two at the end.
- You will have a generic computer with a browser (e.g., Firefox) open to your website.
- There may be some slop in the schedule. If your team would be interested in having extra time if extra time were to become available, please indicate that in your email.
- See above for YouTube videos of presentations from past years.
Teams that do not do a presentation instead submit a final project report containing:
- a short text description of your site
- the URL for your project site
- a URL to a zip file containing all the files in your project site
Minor extra credit (+2 points on PS9) will be offered to students who attend the (optional) Presentation Day to see the presentations.
- Introduction. What is the theme or purpose of your website? Briefly, how does it work? Who would benefit from it? Why is it better than, or equal to, what is currently available? Sell me on your idea.
- Use Cases. Walk through indicative usage patterns for your website. What do you expect a user to do? For each one, include screenshots showing all of the steps. You should include enough screenshots to show off all of your hard work. If you want to draw attention to a particular portion of the screenshot, mark up the screenshot (e.g., as the red circles in the PS8 screenshots). For most groups there will be at least two such use cases: one for each CS 1120 concept. Notably, you should document everything a user could do on your site: if you don't document it, I won't know about it and won't give you credit for it.
- Implementation and Concepts. Describe the computing, coding, or stylistic work that produced your final website. Which concepts and topics from the course have you incorporated into your website? Include code listings for non-trivial new code that you wrote. For example, you need not list changes to constants.py or other minor cosmetic changes. You should, however, list any new database interactions, or any code that shows course concepts (e.g., recursion, list filtering, auction logic, etc.). If your code sits in the middle of existing PS8 code, do not bother showing the PS8 code. If PS8 code sits in the middle of your code, gray it out or bold your code or somesuch. In any event, it should be clear what was your work and what was already there. Code you list should be documented. In addition, every piece of code you list must also be described in English in the report. If your code does not work perfectly, so state, and describe what should happen and how you would solve it.
- Project Management. Describe your meeting frequency and structure. How was the work divided up? Who was responsible for what? How were the tests devised? Does your project pass all of your tests? How did you integrate separate pieces written by separate people? About how long did each person work on each task?
- Conclusion. Are you pleased with the result? What worked well and what worked poorly? What was easy? What was harder than you thought? Did you stick to your initial schedule? If you were going to do it over again, what would you change? What advice would you give to people doing CS 1120 projects in the future? Recalling your grading contract from your Project Description, what grade do you feel you deserve?
Your report should be a turned in as a PDF file. You will lose points if you turn in a DOC or DOCX file.
You must submit an evaluation of every member of your group, including yourself.
Group work can be tricky. For just one example of potential pitfalls, check out this recent journal article on gender biases in interpersonal communication. If your group has friction, please let me know and we can try to work things out.
Final Checklist: Presentation
- Give your presentation on the appropriate day, as per the directions above
- Complete a Peer Evaluation Survey for each member of your group (including yourself) by the end of that same day.
- Complete a PS9 Final Turn In by the end of that same day.
- You're done.
Final Checklist: Report
- Email me the PDF of your report by Noon on the appropriate day.
- Complete a Peer Evaluation Survey for each member of your group (including yourself) by Noon on that same day.
- Complete a PS9 Final Turn In by Noon on that same day.
- You're done.
- In a week or two, if you're done with your website, you might go to https://dbm2.itc.virginia.edu/selfservice/selfservice.sucgi/drop_database and delete (drop) your database to save space for subsequent students.
Recommended Reading and Browsing
- Google Maps Mania — see this for some ideas for maps-related projects
- Envisioning a Site That Won't Be Featured in suck.com from Philip and Alex's Guide to Web Publishing by Philip Greenspun.
- www.useit.com — Jakob Nielsen's web usability site (how well does his site satisfy his own usability guidelines?) You should make sure your site does not make any of these Top Ten Mistakes in Web Design or Top 10 New Mistakes of Web Design.
- Other sites on the web. Visit them and judge critically how well
they work. Are there interface ideas you can adopt for your site? Are
there mistakes they made that you should be sure to avoid? Can you find
what you are looking for quickly? Would the site work with a slow
connection and no images?
- http://www.virginia.edu — Try this one without images for find out how much UVa's web developers care about blind people and people from developing countries with slow Internet access. With Internet Explorer, you can do this by selecting "Tools | Internet Options" then from the "Advanced" tab, under "Multimedia" uncheck the box for "Show Pictures").
- http://www.cs.virginia.edu — Can you guess which two popular sites were used as a basis for our design? Is it easy to find which Computer Science courses you should take next year?