Course Materials
![](images/Cuddling_with_multiple_devices.jpg)
Source: Flickr
Slides
- Information about the course
- Introduction to the course
- Introduction to mobile platforms
- Application basics
- Android NDK
- Design patterns
- Language basics
- OO Basics
- Approaches to UI specification
- App tips: switching UIs, managing orientation, saving state
- Accessing hardware: introduction, Android
- SQLite
- More about languages
- Multitasking
- Android: services
- Android: broadcast receivers
- Android: content providers
- Guidelines for UI design
- UI and Android
- Computational photography: image formation and optics
References: Stanford CS178-14 lecture 1 (slides 17-64), Stanford EE367 lecture 3 (slides 19-38).
Further materials: Stanford CS178-14 lecture 4 (slides 48-59, 65-69), Szeliski's book (Section 2.2). - Computational photography: image capturing
References: Stanford CS178-14 lecture 8 (skip slides 32-42), lecture 9 "Noise and ISO".
Further materials: Szeliski's book (Section 2.3). - Computational photography: image processing pipeline
Demosaicing: Stanford EE367 lecture 4 (slides 19-33).
Tone mapping: Stanford CS178-14 lecture 18 (slides 4-12).
White balancing: Stanford CS448A-10 lecture 6 (slides 26-34).
Denoising: Stanford EE367 lecture 4 (slides 36-51).
Sharpening: Stanford CS178-14 lecture 18 (slides 74-84).
Compression: Stanford EE367 lecture 4 (slides 59-66). - Computational photography: HDR imaging
Reference: Stanford CS448A-10 lecture 7 (slides 3-48).
Further materials: Debevec & Malik's paper, Reinhard & al's book, Szeliski's book (Section 10.2), Stanford CS178-14 lecture 6 "Exposure metering (AE)".
Slides are partly different from last year's slides.
Projects
- Standard projects
- Special projects. The document contains only summaries: students tackling a special project are required to submit a full specification to the instructor for approval
Code Samples
Code samples are available via a Git repository hosted by BitBucket.
Suggested Exercises
Language basics:
build a program that generates two matrices, prints them, sums
them, then prints the result. Fill the input matrices with random
doubles. Do the exercise in both Java and C++.
If you do not know how to generate random numbers, look at the
sample code in compilertests.tar.bz2.
OO basics: design
a class called Polygon
that handles polygons with an arbitrary number of sides. The class
should store the coordinates of all the vertices of the polygon:
the vertices are assumed to be on a plane, therefore two
coordinates are sufficient. The vertices are numbered and edges go
from vertex i to vertex i+1. The class should
provide methods to 1) get and set the number of vertices in the
polygon; 2) get and set the coordinates of the vertices; 3) get
the perimeter of the polygon. The class should also provide a
non-default constructor that receives the number of vertices when
an object is instantiated from the class. In the default
constructor you can assume that the polygon has an unmodifiable
number of sides of your choice or, if you want to tackle a
challenging exercise, you can use a data structure that allows you
to adjust the number of sides dynamically (an ArrayList
in Java, a vector
in C++). When Polygon
is complete, design a new class Triangle
derived from Polygon.
The new class should provide an additional method to get the area
of the triangle. Do the exercise in both Java and C++.
Application basics:
build a simple calculator application that operates on integer
numbers. The UI of the calculator should provide at least 16
buttons: 10 buttons for the digits from "0" to "9", 4 buttons for
the 4 basic operations ("+", "-", "×", "÷"), an "=" button to
calculate the result, and a "C" button that resets the calculator.
The UI should also provide a display that shows the numbers being
input and the results. Write your own code even
if pre-built solutions can be found online.
Guides
A Basic Understanding of Version Control
Created by tutor Edoardo Degli Innocenti for ESP1516.
- Slides (May 18th 2016)
An Introduction to OpenCV
Created by me, Carlo Fantozzi, for ESP1415. Covers OpenCV for Android. Last updated in 2016.
- Slides (April 29th 2016)
Android User Interface: Managing a List
Created by tutor Michele Schimd for ESP1213.
- Slides (Revision 2, June 4th 2013)
- Example: ListView (Eclipse project)
- Example: custom item view (Eclipse project)
- Example: ListFragment (Eclipse project)
Android: Using Intents
Created by Elena Fortini for ESP1415.
- Slides: taking pictures and sending emails (April 28th 2015)
- Example: taking pictures (Android Studio project)
- Example: sending emails (Android Studio project)
Design Patterns: Examples
Examples for design patterns Builder, Observer, and Singleton. Created by Alessandro Moretto for ESP1415.
- ZIP archive with examples and documentation (June 3rd 2015)
Further Presentations
Android Security
Created by Paolo Montesel for ESP1516.
- Slides (July 14th 2016)
An Introduction to Human-Machine Interaction
Created by tutor Edoardo Degli Innocenti for ESP1516.
- Slides (June 7th 2016)