This is an old version of the class. Please see the 2022 version instead.

Final Projects

Assigned: 11/9/2021; Due on various dates (see below)

Overview

This course has a final project, instead of a final exam. The final project will be in groups, preferably of 2 to 4 people. Note that If it is a hardship for anyone to do a project in a group, I am now allowing you to do the project alone if necessary, but I still recommend doing it in a group.

Project Schedule

   NOTE: Project turn-ins cannot be late!

Summary of Schedule of Deliverables Due Date
Initial Topic Ideas for Final Projects Entered into Piazza Friday, 11/12/21 at 3:05
Form Final Project Groups Tuesday, 11/16/21 at 11:59pm
One-page proposal for Projects Monday, 11/22/21 at 3:05 7:00pm on Canvas
Presentations for Final Projects Thursday, 12/2/2021 in class
Written Reports for Final Projects
Final Grades due: December 17, 2021 by 4 pm
12/10/2021 at 11:59pm

Topic Ideas

You have about 2 weeks for the project, and you have 2 to 4 people per group, so the project should be about 2 to 4 times harder than the regular homeworks. Here are some ideas:

  1. Build an interface builder tool, that allows the user to place controls and set their properties. This would be similar to the "Create your Own" editor, except the palette contains buttons, sliders, text fields, and other html input elements. There should be a "run" mode where the user can see how the controls work, as well as a "build" mode. Depending on the number of people, you might provide interesting ways to specify the layout for the controls, like using css properties instead of just at fixed locations.
  2. Build a prototyping tool, like Balsamiq, Axure, or Adobe XD. This is similar to an interface builder, but might not use any real controls, and just support changing pages as the behavior.
  3. Provide a gesture recognition library, so it is easy to add gestures to an interface. You might use one of Wobbrock's recognizers discussed in Lecture 16, like this one:
    • J.O. Wobbrock, AD Wilson, Y Li. "Gestures without libraries, toolkits or training: a $1 recognizer for user interface prototypes", In UIST '07, p. 159-168. ACM DL Ref
  4. Implement Stephen Oney's high-level input handlers, which make it easier to implement interfaces using swiping and other advanced gestures, as discussed in this article:
    • Stephen Oney, Rebecca Krosnick, Joel Brandt, Brad Myers. "Implementing Multi-Touch Gestures with Touch Groups and Cross Events," Proceedings SIGCHI '2019: Human Factors in Computing Systems. Glaskow, UK. May 4-9, 2019. ACM DL orlocal pdf(Best Paper Honorable Mention Award.)
  5. Implement a constraint system or data-bindings solver, that can adjust the position or values for web elements based on the positions or values of other elements, as discussed in lectures 17-18.
  6. Implement Amulet interactors, as discussed in lecture 6 (Input 2).
  7. Assuming it wasn't done as part of homework 5, add selective undo, selective repeat and scripting (selective repeat of a sequence of operations) to homework 5, in the style of the Topaz system:
    • Brad A. Myers. "Scripting Graphical Applications by Demonstration," Proceedings CHI'98: Human Factors in Computing Systems. Los Angeles, CA, April 18-23, 1998. pp. 534-541. ACM DL Reference and local pdf and video. (Topaz)
  8. Implement a state transition diagram editor and/or interpreter. For example, one could draw a diagram, and then go into run mode, and the user could perform the specified events and make sure that the events cause the right transitions, through highlighting of the diagram to show which states and transitions are used.
  9. Create a speech/conversational/chatbot system using a tool like Google's DialogFlow.
  10. Make the graphics editor in your homeworks more complete, with the features that a real editor would need, such as saving and loading, images, changing the objects' size, to-top and to-bottom, layout help (alignments), grouping, etc. (the specific features added can be negotiated).
  11. Implement an elaborate and complex web-based user interface for a web app that is quite different from the ones we did in class.
  12. Something of your own design....

Picking Topics and Forming Groups

A preliminary list of topic ideas is displayed above. You can pick one of these or propose your own topic. If you are unsure if your idea is appropriate, please discuss with the professor. It is OK if multiple groups pick the same project, as long as there are differences in their approaches.

You should fill in a copy of the form on the class Piazza page under the "project" folder before Friday, 11/12/21 at 3:05. If you already have a group formed for a project, you can just use one copy of the form with everyone's name listed. If you see someone else's post on Piazza that sounds like a fun project, please make a note of that in their discussion area that you would like to join it, and also fill out your own form listing your skills. Or else it is fine to enter your own project idea and try to find others interested in it. I will help to form the groups in class on November 12, if necessary.

Here is what the form asks for:


Your name:

Which project do you want to work on? Elaborate on one that is on the topics list (for example, including which specific item you want to do) in a sentence or two, or describe your idea in a few sentences.

Please indicate how strongly you want to work on this project. For example, whether you definitely want to work on it, or if you would be happy working on a different project in a related area.

Please describe your background and skills that might be relevant to your or other people's projects.

if you have in mind others to work on this project with you, please list them here:


Deliverables Details