Skip to content

Cs184 Homework Hotline

This course is an introduction to the foundations of 3-dimensional computer graphics. Topics covered include 2D and 3D transformations, interactive 3D graphics programming with OpenGL, shading and lighting models, geometric modeling using Bezier and B-Spline curves, computer graphics rendering including ray tracing and global illumination, signal processing for anti-aliasing and texture mapping, and animation and inverse kinematics. There will be an emphasis on both the mathematical and geometric aspects of graphics, as well as the ability to write complete 3D graphics programs.

This course will hopefully be a fun one, but it will require considerable implementation and understanding. The required programming for some of the assignments will be challenging for most students. Debugging and working with graphical programs requires substantial work. The main advice is to START EARLY on all of the programming assignments and ask the instructor or GSIs if you run into any difficulties; we are always ready to help. If an assignment provides 2 or 3 weeks to do it, it usually means you need all 2 or 3 weeks, and cannot start a few days before the deadline. Most students should successfully complete the assignments, and find the course very rewarding and fun, with the ability to understand the theory behind and implement 3D graphics programs. Some students every year are able to use the course as a springboard to pursue graduate study in computer graphics, or to take up positions in the graphics industry.

This is the introductory graphics course. More advanced follow on courses are available. In particular, we strongly recommend those who do well in and/or enjoy this class to take CS 284b the next semester (do not worry about the fact that CS 284b is technically a graduate course; this course is ample preparation, and the grading is in fact usually easier in graduate classes). We also offer special topics CS 294 courses almost every semester.



Jingyi Li

Office Hours: Wednesdays 5pm - 6pm [411 Soda]

Sections: Mondays 4pm - 5pm

Cecilia Zhang

Office Hours: Tuesdays 5pm - 6pm [341A Soda]

Sections: Tuesdays 10am - 11am

Ting-Chun Wang

Office Hours: Thursdays 3pm - 4pm [341A Soda]

Sections: Wednesdays 12pm - 1pm

Times and Locations

  • Lecture: Mondays and Wednesdays 2:30pm-4:00pm in 306 Soda
  • Sections:
    • 101: Monday 4pm-5pm (Jingyi) in Dwinelle 105
    • 102: Tuesday 10am-11am (Cecilia) in Soda 320
    • 103: Wednesday 12pm-1pm (Ting-Chun) in Wurster 101
  • Midterm Exam: October 19 2:30pm-4pm in Soda 306
  • Final Exam: December 15 3pm-6pm room TBD


Your grade will be determined by your performance on a combination of homework assignments, programming projects, one midterm, and one final exam. The percentages assigned to each of these categories are:

  • Assignments 40%
  • Midterm exam 30%
  • Final exam 30%

Within each category, grading will be done using a point system. Each assignment, test question, and so on, will be worth some number of points. Your score in that category will simply be the number of points earned divided by the total possible.

Grading will be done on a curve. As a result if you, for example, score 10 points out of 70 on a homework, you should only be concerned if other people tended to score better than that. By the same token scoring 65 out of 70 should concern you if the rest of the class averaged 68. I try to gauge difficulty so that a very good performance is about 90%, but sometimes I underestimate or overestimate the difficulty of an exam or assignment. I also will adjust the curve upward or downward to account for the general performance of the class.

There will often be extra credit options on the assignments and tests. Points awarded for those get added in after the curve has been set... so they really are extra.


A data structures course (e.g. CS 61B), C/C++ programming ability, and knowledge of linear algebra, calculus, and trigonometry. The first two assignments should be easy. If you find them baffling, you may have a problem and should consult the instructor.


You will have a written assignment which will exercise your knowledge of the basic math you will need in this class. You may discuss problems with other students but all work for written assignments must be strictly your own. Please note that we were not able to hire psychic readers this semester: if your written assignments (or exam answers!) cannot be read they will not receive points. Written assignments should be turned in under Professor O'Brien's door. (527 Soda Hall)

It is your responsibility to arrange time to turn in written assignments before the deadline. Soda Hall is locked in the evenings, nevertheless most undergrads manage to figure out ways into the building using elite ninja skills. If you lack these abilities please make sure you come to turn in your assignment before the building locks up. Failing to turn your assignment in because you were locked out of the building will incur standard lateness penalties.

Programming assignments must compile and run on the instructional machines. It is your responsibility to make sure that they do. The first time you have a compile/run problem the grader has the option of allowing you to correct the problem. After the first time, the assignment may not be graded.

Test your programs on the instructional machines. In the past people have turned in programs that worked on their own machine and only verified that it compiled on the instructional machines. Variations in compiler and library versions then caused bugs that were benign on their home machine to manifest as runtime errors on the instructional machines. They lost points.

Programing assignments other than Assignments #0 and #1 may be done in pairs or alone. If you work in a pair you only need to hand in one copy of any documentation required, but make sure that you indicate clearly who was included in the pair and how the task was divided up. If you work in a pair make sure that you think carefully about how you are going to divide up the programming effort between you so that you can coordinate your efforts without too much conflict.

When you work in a group for the programing assignments, it is your responsibility to pick a good partner. Everyone in a group gets the same score. Please don't waste time by telling me that your partner was a slacker and that there should be some adjustment made to your scores.

Instructions for turning in each assignment will be included with each of the assignments and may vary over the semester. Read them carefully. Those instructions override anything contained in this document.

Most assignments will be due 11:59pm on a Friday. If it's turned in before 11:59pm on Sunday that will count as one "day" late and be penalized 5%. Each additional 24 hour period will double the penalty. Example: Turned in by Friday is full points, Saturday or Sunday -5%, Monday -10%, Tuesday -20%, Wednesday -40%, Thursday -80%, after that the assignment can no longer be submitted for points. If you have some special circumstance that would prevent you from turning an assignment in on time, you must discuss the issue with me at least one week before the deadline.

Unless you are specifically told to do so, do not email your assignments to the instructor, TAs, or grader! It's really, really annoying. Assignments submitted by email will be deleted unread and ungraded, and we will think poorly of you.


This course has a reputation for somewhat demanding project work. You will have to write a lot of code and the algorithms you'll need to implement are complex. You have been warned, no whining allowed.

Academic Honesty

I am generally happy for people to use code or ideas that they did not create themselves, but you must clearly declare what you have used from others and what was original from you. If you don't tell us anything, then we'll assume that you are presenting work as your own work.

Presenting other peoples' work as your own is academic dishonesty. Collective responsibility applies: if you work in a pair, both of you will be held responsible for the resulting project.

Students who engage in dishonest activities with intent to alter their grade will receive an 'F' in the course and then be reported to the University. Do not bother asking me to give you a second chance as it is a waste of time.

Under no circumstances should you submit materials obtained from a prior student in the class.


You are responsible for reading the discussion group on Piazza. The URL to access this group All bug announcements and fixes for assignments and lectures will be distributed there. Please post using your real name.

Routine communication about the course should be sent to or posted to the discussion group. If the issue is not private/personal then it is preferred you post to the discussion group. E-mail sent to the TA's or professor may be reposted on to the newsgroup in redacted form.

If you have some issue that will prevent you from meeting an assignment deadline, or from sitting for an exam, you must let the professor know about it beforehand. I am happy to accommodate religious, medical, or family obligations (within reason). If some real emergency arises at the last minute that precludes prior communication, then be prepared to provide supporting documentation.

Class Website

The class website is hosted at Copies of the lecture slides will be posted there a day or two before each class (or at least that's my goal). You can also find supplemental materials there that may be useful.

Dire Warning

Teaching a class to people who sit quietly is boring for the instructor. People who participate tend to learn more. So I would like to encourage class participation. If people appear to be interested and willing to participate then great... if not then I reserve the right to start giving really annoying little quizzes every class.

Text Books


  • P. Shirley, S. Marschner, et. al. Fundamentals of Computer Graphics (Third Edition)

Other Useful Textbooks:

  • J. Foley, A. van Dam, S. Feiner, J. Hughes. Computer Graphics: Principles and Practice
  • A. Watt. 3D Computer Graphics
  • D. Hearn, M. Baker. Computer Graphics with OpenGL
See the class webpage (and Google) for other useful resources.

CS184 - Introduction to Mobile Application Development (using Android)

Fall 2017

This home page and the CS184 Piazza forum will be used as centers of communication for the class. Homework submission will occur through the CS184 GauchoSpace Make sure you are enrolled!

While the webpage provides you with up-to-date information about assignments and what is currently going on in class, homeworks will be submitted via GauchoSpace, and the Piazza Forum serves as an open forum: questions, answers, suggestions, etc.

General Information

Course Description

This course provides an introduction to developing applications for the Android mobile ecosystem.

Over the past 20 years, the use of information technology has undergone a clear transition from stationary office and desktop computing to mobile computing. This development was accompanied by the emergence of networked and social computing. The Sales of smartphones and tablet computers have by far outpaced the sales of conventional desktop PCs for years now. The way the young generation today obtains computer literacy has changed: Apps and cloud computing have replaced desktop computing in many cases. Computing has shifted from office or home office work to an anywhere-and-anytime activity.

This course aims to prepare students for this extraordinary shift in commercial and societal focus. The possibilities of mobile device software development are endless. In this introductory course, we get your curiosity started and prepare you for more advanced app development.

Students will apply their gained knowledge in a series of practical assignments using the Android ecosystem that highlight selected portions of the software design cycle, as well as familiarize them with sound programming practices and effective tools and techniques to create successful applications. The course will also touch upon novel interaction concepts that go beyond what we normally see in today's mobile apps.

Course Requirements and Grading

This class teaches the theory and practice of effective software design for Android. You will learn about principles, procedures, and programming approaches. You will create, iterate, and evaluate interaction designs.

As this is only the second time this course is offered, the exact course requirements will emerge over the first week, once the instructor has been able to form an idea about students' backgrounds and expectations.

There will definitely be a series of design and implementation assignments that lead up to individual or group class projects. There _may_ be one exam (in week 8 or 9). We will continuously assign reading and tutorial material from online resources, which is supposed to help your design efforts and to stimulate class participation. Here is how your final grade will be determined:  

  • Exam (if held, then 30-40%)
  • Up to 6 (likely 5) one to two - week homework assignments (tentatively 60%; if there is an exam then 40%)
  • Final project implementation, documentation, and presentation (tentatively 40%; if there is an exam, then 25%)
  • Class participation and activities [presentations on side topics, links and answers on Piazza, demos, etc.] will be noted and can positively influence your grade

In case you disagree with any grade, submit your grievance in writing (email or paper)to the grader responsible, explaining and documenting your case.

Lateness Policy

All assignments are due at midnight on the scheduled due date. To make the deadlines more manageable, each student will be allowed four "late days" during the quarter for which lateness will not be penalized. Late days may be applied to all assignments, including design sketches and programming assignments, but not the final project! Your  late days may be used as you see fit -- one or multiple per assignment -- but once you used a late day it's good and gone, you cannot reapply it to another assignment. Anything turned in after 12:00:00am until midnight the next day is one day late. Every day thereafter that an assignment is late, including weekends and holidays, counts as an additional late day.

Absolutely no late work will be accepted after the deadline if you have used up all your late days. If you're not done on time you must turn in what you have to receive partial credit. There will be no exceptions from this rule. Please make sure you understand this policy.

When making use of your late days, the online submission provides the timestamp that counts. 

Academic Misconduct

We will strictly enforce UCSB's academic misconduct policies. We use electronic tools to detect plagiarism among submitted homework solutions and sources from the internet. Read these guidelines before beginning each programming assignment. Any form of  plagiarism, collusion, or cheating will result in an "F" in this course and may result in suspension from UCSB for two quarters. When in doubt about any forms of receiving help on your assignments, ask us!

Open Door Policy

I would like the course to be informative and enjoyable. Let us know what you find just, good and interesting about the course. Let us know sooner if you feel something could be improved. See us, send an e-mail, or leave us a note.

Class Materials

See the handout column in the class schedule!


Other Sources


Class Schedule


/ Dis

TopicsHandout HW
HW due
 1C1MonOct 2


Introduction, Motivation,
Class Requirements, Policies

Android: Overview, Historic Context, Discussion

S0: Java Review

H1: Android Studio (AS) Tour Chapter

S1: Slides: Android Intro

Student Questionnaire 
D1WedOct 4 

Hand out
Nexus Tablets

Hello Android
Android Studio


H2: AS Designer Chapter
H3: Interactive UI Design in AS
H4: Programmatical UI Creation in AS

S2: Slides: Hello Android

HW1Student Questionnaire
C2FriOct 6H1, H2

HW 1 Q&A

Activity Life Cycle 
Overview: Views / Layouts
(Virtual Machines)

S3: Activity Lifecycle

BM1: Slides: Virtual Machines
2C3MonOct 9H3, H4

State Saving


Constraint Layout

H5: Android Event Handling Chapter

H6: Activity States and State Saving

S4: StatePreferences

S5: Layouts
S6: Constraint Layout

D2WedOct 11H5, H6


Event Handling

2D Graphics (canvas, paint)

S7: 2D Graphics

H7: Views/Layout Chapters

H8: ConstraintLayout Chapters

H9: Touch and Multi-Touch

C4FriOct 13H7, H8, H9


Color Array

AppBar (Toolbar)

S8: ActionBar/AppBar/Toolbar

H10: App Bar, Overflow Menus

3C5MonOct 16H10


2D Graphics <cont.>
(animation, threads)


S9: Fragments

H11: Fragment Chapters

D3WedOct 18H11


Demo of HW3 components

S10: Speech to Text and Text to Speech

S11: Mediaplayer

C6FriOct 20 


4C7MonOct 23 


Internet Resource Retrieval

Quarter Project

S12: Intents  
D4WedOct 25 


S13: Lists  
C8FriOct 27 

Permission Handling

S14: Storage/Permissions
S15: Camera Access
5C9MonOct 30 




S16: SQLite Database Support

H12: SQLite Database Chapters

Android SQLite Tutorial

Project Idea
D5WedNov 1H12

Project Discussion

S17: HW4 Discussion  
C10FriNov 3 

Non-SQL Databases Firebase

S18: Remote Databases / Firebase

H13: Notification Chapters

H14: Firebase Chapters

6C11MonNov 6H13, H14

Firebase (cont.)

Google Maps


S19: Google Maps

H15: Google Maps Chapter

 TueNov. 7   


D6WedNov 8H15


HW5 Discussion


S19: Notifications  
 FriNov 10No classVeteran's Day

7C12MonNov 13 

GPS / Location Sensors



D7WedNov 15 


Useful Libraries
Demos (RESTful APIs and libraries)

C13FriNov 17 

Android vs. IOS

C14MonNov 20 


Cross-platform Development



S20: Cross-Platform Development  
C15WedNov 22 


Design Patterns I

Augmented Reality
(incl. example code & demo)

 FriNov 24No class

Thanksgiving Break

9C16MonNov 27 


Design Patterns

Model View Controller

S21: Services  
D9WedNov 29 


Android Design Patterns

Multi-Window Support

S22: Design Patterns  
C17FriDec 1 


10C18MonDec 4 

Behind the Scenes:


S23: Gradle  
D10WedDec 6 

Help with
- and Feedback on -
Final Projects

C19FriDec 8 


The Future of Android






Dec 114-7pm
 WedDec 20 
Project Materials Due




  • For Wed, Oct 4: If you haven't filled in a Student Info Form during lecture 1, please fill it in and email or hand it in!

  • HW assignment 1 is due Wednesday, Oct 11, 23:59:59. Use Gauchospace to submit your solutions ! 
  • HW assignment 2 is due Friday, Oct 20, 23:59:59. Use Gauchospace to submit your solutions ! 
  • HW assignment 3 is due Friday, Oct 27, 23:59:59. Use Gauchospace to submit your solutions ! 
  • HW assignment 4 is due Tuesday, Nov 7, 23:59:59. Use Gauchospace to submit your solutions ! 
  • HW assignment 5 is due Friday, Nov. 17, 23:59:59. Use Gauchospace to submit your solutions ! 

  • Quarter Project idea is due Monday, Oct 30th, 23:59:59. Use Gauchospace to submit your document! Everyone needs to submit, but if you have already formed a group, members can submit the same document!  

  • You final Quarter Project materials are now due Wednesday, Dec. 20th, 23:59:59. Use Gauchospace to submit your materials. Only one submission is needed per group. Please coordinate which team member will do this submission.

For questions, please contact the instructor and/or TA