This course teaches the principles of constructing and implementing user interfaces. Some attention is paid to issues of design and usability, but CS 449 provides more complete treatment of these topics.


This course provides an introduction to contemporary user interfaces, including the basics of human-computer interaction, the user interface design/evaluation process, and the architectures within which user interfaces are developed. Students implement and evaluate portions of typical user interfaces in a series of programming assignments.

Recommended Text

Building Interactive Systems, by Dan R. Olsen Jr. (Available at DC Library)

Design of Everyday Things, by Don Norman

Designing with the Mind in Mind, by Jeff Johnson


All announcements, questions, and answers are on Piazza.

We'll be using an online tool named Piazza for all announcements, as well as questions and answers about the course material and assignments. You should have received an invitation email (or will shortly); when you register, please use an identifier that clearly indicates who you are for the purposes of the course.


(all email addresses are


Mike Terry (mterry@)
Sections 01, 04
Office Hours in DC 2118: Thursdays, 11:30 AM - 12:30 PM

Edith Law (edithlaw@)
Section 02, 03
Office Hours in DC 3138: Wednesdays, 1:00 PM - 2:30 PM

Teaching Assistants

Jeff Avery (j2avery@)
Office Hours: Wednesdays, 3:00 PM - 4:00 PM (DC 3591)

Anastasia Kuzminykh (akuzminy@)
Office Hours: Mondays, 11:00 AM - 12:00 PM (DC 3591)

Qifan Li (q73li@)
Office Hours: Tuesdays, 11:30 AM - 12:30 PM (DC 3591)

Mingyu Liu (m83liu@)
Office Hours: Fridays, 1:00 PM - 2:00 PM (DC 3591)

Ivens Portugal (iportugal@)
Office Hours: Thursdays, 2:00 PM - 3:00 PM (DC 2507)

Yunjia Sun (y277sun@)
Office Hours: Wednesdays, 9:00 AM - 10:00 AM (DC 3591)

Jingjie Zheng (j49zheng@)
Office Hours : Tuesdays, 9:00 - 10:00 AM (DC 3591)

Office Hours

Mon11:00 AM - 12:00 PMAnastasiaDC 3591
Tues9:00 AM - 10:00 AMJingjieDC 3591
11:30 AM - 12:30 PMQifanDC 3591
Wed9:00 AM - 10:00 AMYunjiaDC 3591
1:00 PM - 2:30 PMEdithDC 3122
3:00 PM - 4:00 PMJeffDC 3591
Thurs11:30 AM - 12:30 PMMichaelDC 2118
2:00 PM - 3:00 PMIvesDC 2507
Fri1:00 PM - 2:00 PMMingDC 3591


There are four assignments, each worth 10%, a midterm worth 20% (see schedule for date and location), and a final exam worth 40%. Final course grades will be calculated as follows:

   assignments = .10*(A01 + A02 + A03 + A04)/.40
   exams = (.20*Midterm + .40*Final)/.60
   normal = .60 * exams + .40 * assignments
   if assignments < .50 or exams < .50
       grade = min(.47, exams, normal) * 100 
       grade = normal * 100 

Note: to pass the course you must pass the weighted average of the assignments and the weighted average of the exams.


Assignments are meant to provide meaningful, engaging experiences in constructing interfaces while giving you the opportunity to create applications you will want to share with others. There's lots of room for creativity in assignments and each will have a component for going above and beyond the basic assignment specification.

The assignments in this course require a significant amount of time. Do not underestimate the time it takes to code interactive applications. Due dates are posted in the course schedule.

There are four assignments that will be posted here as they become available.

Starter code is provided and is added to your SVN repository before assignments are handed out. Make sure to 'svn update' before you start!

Assignment Policies

  1. Assignments are in web programming languages (HTML, CSS, javascript, python)
  2. Due dates are Monday 5:00 PM. Assignments submitted after this deadline will not be accepted, and will receive a grade of zero.
  3. Submission must be via the Subversion (SVN) repository.. Detailed instructions are below.
  4. Assignments are your individual work:
    • You can use code examples provided in class and on on the resources page.
    • You should NOT be doing general Internet searches for specific solutions.
    • If you're not sure, ask the instructor or TA.
  5. After assignments are graded, a detailed marks file will be checked into each students private repository containing the marks for that assignment.

Subversion (SVN)

We will be using Subversion to submit all of the assignments for this course. Subversion (typically shortened to SVN) is a version control system, which stores files and a history of all of the changes to those files. The server holds the canonical version: changes are made locally, and "committed" to the server after they've been tested, integrated etc.

The links below provide some basic information on setting up and using SVN. For detailed information, see Version Control with Subversion.


Working with Subversion typically involves this workflow:

You can push as many changes are you like over time (and it's a good practice, since everytime you save changes to the server, you've created a checkpoint).


SVN commands all have the form "svn [command]". Type "svn help [command]" from the shell or command-line to get detailed help (e.g. "svn help commit"). You can also download a printable Subversion Cheat Sheet.

Commonly-used commands include the following:

svn checkout Checkout the latest version from the repository, creating a local copy.
svn update Get the latest version from the server, and merge it into your local copy. Typically required when multiple people are submitting changes to the same repository.
svn add Flag a file that doesn't exist in the repository, so that it's added during the next "svn commit".
svn commit Commit changes to the repository. Files that have been flagged with "svn add" will be added as well.
svn status Show you the status of the local files (i.e. if you have changes outstanding, that need to be committed).
svn log Show a history of changes that have been committed to the repository.

Setup Step 1: SVN Client Installation

To use Subversion, you need to install client software on your computer. Linux has a set of command-line tools pre-installed, but Mac and Windows users will need to install client software. Here are some recommended packages, by platform:
Windows Command-line
Mac Command-line Included in the OS (type "svn" at the command-line)
SvnX SvnX GUI (Open Source)
Versions Versions Subversion Client (paid)
Linux Command-line Included in the OS (type "svn" at the command-line)

Setup Step 2: Checkout Repository

Once the client software is installed, you need to checkout the repository to your local machine:

svn checkout svn:// .

Replace the "userid" in the URL above with your WatIam userid, shortened to eight characters. Note that the '.' at the end of the command above means "current directory" and should not be omitted.

You will be asked for a userid and password to proceed with checkout; use the ones we sent you via email. Most client software will store your username and password, so that you don't have to retype it with every command.

Also note that after you checkout your working copy, you will not need to specify the host and port information again during "svn add" or "svn commit" commands.

Setup Step 3: VPN Setup

You have to have a VPN setup in order to access SVN from off-campus. You will need to connect to the campus VPN anytime you perform a SVN operation (like, for example, submitting your assignment). Instructions can be found here: Once the Cisco VPN sofware is installed, connect using the VPN URL ( and your UW credentials.

For further assistance, please contact staff during office hours.


Academic Integrity

In order to maintain a culture of academic integrity, members of the University of Waterloo community are expected to promote honesty, trust, fairness, respect and responsibility. See Academic Integrity Guidelines for more information.


A student who believes that a decision affecting some aspect of his/her university life has been unfair or unreasonable may have grounds for initiating a grievance. Read Policy 70, Student Petitions and Grievances, Section 4. When in doubt please be certain to contact the department's administrative assistant who will provide further assistance.


A student is expected to know what constitutes academic integrity, to avoid committing an academic offence, and to take responsibility for his/her actions (see Academic Integrity Guidelines). A student who is unsure whether an action constitutes an offence, or who needs help in learning how to avoid offences (e.g., plagiarism, cheating) or about 'rules' for group work/collaboration should seek guidance from the course instructor, academic advisor, or the undergraduate Associate Dean. For information on categories of offences and types of penalties, students should refer to Policy 71, Student Discipline. For typical penalties check Guidelines for the Assessment of Penalties


A decision made or penalty imposed under Policy 70 (Student Petitions and Grievances) (other than a petition) or Policy 71 (Student Discipline) may be appealed if there is a ground. A student who believes he/she has a ground for an appeal should refer to Policy 72 (Student Appeals)

Students with Disabilities

AccessAbility Services, located in Needles Hall, Room 1132, collaborates with all academic departments to arrange appropriate accommodations for students with disabilities without compromising the academic integrity of the curriculum. If you require academic accommodations to lessen the impact of your disability, please register with them at the beginning of each academic term.