Final Projects

Assigned: 11/15/2022; Due on various dates (see below)


This course has a final project. The final project will be in groups, preferably of 2 to 4 people.

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/18/22 at 3:05
Form Final Project Groups Tuesday, 11/22/22 at 11:59pm
One-page proposal for Projects Wednesday, 11/30/22 at 3:05pm on Canvas
Presentations for Final Projects Thursday, 12/8/2022 in class
Written Reports for Final Projects
Final Grades due: December 21, 2022 by 4 pm
Monday, 12/12/2022 at 11:59pm

Topic Ideas

You have about 3 weeks for the project, and you have 2 to 4 people per group, so the project should be about 3 to 6 times harder than the regular homeworks (where were about 2 weeks of work). 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 Figma, 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. Create a speech/conversational/chatbot system using a tool like Google's DialogFlow.
  4. 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).
  5. 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 20, 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
  6. 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.)
  7. 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 lecture 26.
  8. Implement Amulet interactors, as discussed in lecture 8 (Input 2).
  9. 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)
  10. 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.
  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/18/22 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 Tuesday, 11/22/22, 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