Tangible Computing
1. Table of Contents


0   Title Page          14   Interrupts
1   Table of Contents          14.1      How does the outside world get my attention?
2   The Course, aka CMPUT 296/297, CMPUT 114/115          14.2      The process for servicing an interrupt
2.1      Introduction to the Scaled Up Pilot          14.3      Pitfalls
2.2      IMPORTANT NOTE TO THE STUDENT          14.4      Examples of Timer Interrupts
2.3      The Story So Far - 2012-09-24          14.5      External Interrupts and Switch Debouncing
3   Bits, Bytes, and Modular Artithmetic          14.6      Subtle Issues
3.1      The Natural Numbers Are All You Have          14.7      Code examples
3.2      The Division Algorithm          15   Queues
3.3      Greatest Common Divisor          15.1      What is a Queue?
3.4      Modular Arithmetic          15.2      Implementing a queue in C using arrays
3.5      Binary Representations          15.3      Implementing a queue in C using linked lists
3.6      Hexadecimal Notation          15.4      A Queue Implementation That is More Modular
3.7      General Base-B Positional Representations          16   Hash Tables
3.8      Arduino Bit Code          16.1      What is a hash table?
4   Signed, Unsigned, Byte, Normal, and Long, LED Bit Arithmetic          16.2      Implementing a Hash Table with Collision Lists
4.1      Part 1: Counting Bits          17   Python
4.2      Part 2: LED Bit Display          17.1      The Python Language and Way
4.3      Tasks          17.2      What does assignment mean?
5    Logical Operations on Bits          17.3      Our First Python Examples
5.1      Basic Logic Operations          17.4      Object Oriented Notions
5.2      DeMorgan's Laws          17.5      A simple example object
5.3      Logic and Bit Operations          17.6      Converting the hash table into a dictionary
5.4      Bit Shifting          17.7      Lists and References
5.5      Bit Manipulation          17.8      Lists that contain themselves
6   Strings and Arrays          18   Graph Theory
6.1      Internal Representation          18.1      Basic Notion of a Graph
6.2      String Example          18.2      Graph Notions
6.3      Arrays          18.3      Exercise: An Example of A Graph Algorithm
7   Diffie-Hellman Key Exchange          18.4      Spanning Trees
7.1      Talking Arduinos          18.5      Min-Cost Spanning Trees
7.2      Diffie-Hellman Key Exchange          18.6      Shortest Paths
7.3      Implementing Diffie-Hellman on the Arduino          18.7      Min-Cost Paths
7.4      Thinking like a Computer Scientist: Modular Exponentiation          18.8      The Digraph Class
7.5      Starter Program          18.9      Displaying Graphs and Digraphs with Graphviz
7.6      Procedures          19   Object-Oriented Class Design Principles
7.7      Algorithm Design          19.1      Separation of Concerns
7.8      Algorithm Analysis          19.2      Abstraction
7.9      A Better Algorithm          19.3      Acessors
8    Reasoning About Programs          19.4      Law of Demeter
8.1      Properties, Assertions, and Invariants          19.5      Styles of Reuse
9   Using the Adafruit LCD display          19.6      Inheritance as Reuse
9.1       Recommended Wiring Order          19.7      Liskov's Principle of Substitution
9.2      Hello World: Graphics Test          19.8      Is-a vs Has-a
10   Memory          19.9      Slicing
10.1      Where is stuff stored?          19.10      Polymorphism and Virtual Functions
10.2      How does a program use memory?          19.11      Containers
10.3      General Notation and Properties of Pointers          19.12      Behaviour Restriction
10.4      Big Endian and Little Endian          19.13      Foundation Classes
10.5      The Stack and Heap          19.14      Class Refactoring
10.6      Block Variables          20   Binary trees
10.7      Procedure/Function Calls and the Stack          20.1      Binary Trees
10.8      Passing Arguments by Value to Procedures and Functions          20.2      Binary Tree Implementations
10.9      Utilities for Managing Memory          20.3      Algorithms over Binary Trees
10.10      Other examples for your viewing pleasure          21   Dynamic Programming
11   Data Structures          21.1      Recursive decomposition of problems
11.1      Arrays and Address Arithmetic          21.2      Floyd-Warshall All-Pairs Min-Cost Paths
11.2      Dynamically Allocated Arrays          22   How to Read a Program
11.3      Dynamically Allocating a Singleton          23   Installation Instructions
11.4      Making composite data structures          23.1      Ubuntu Virtual Machine
11.5      Reading and Writing to the SD card          23.2      Ubuntu Linux
12   Sorting and Big O notation          23.3      OSX
12.1      Selection Sort          23.4      Windows XP and 7
12.2      Big O Notation          24   The AVR Tool Chain
12.3      Merge Sort          24.1      Overview
12.4      Quick Sort          24.2      Software Abstraction Layers
12.5      Stable Sorting          24.3      Makefiles for the Arduino Environment
12.6      Animated Sorting Algorithms          24.4      Makefiles in General
12.7      The Sorting Library          24.5      Makefiles For Collections Of Files
13   Searching          25   Git
13.1      Bruteforce Search          25.1      Version Control
13.2      Binary Search          25.2      The Various Git Repository Models
13.3      A Typical Binary Search Pattern          25.3      Using Git on gpu.srv.ualberta.ca with AFS
13.4      Performance of Binary Search          25.4      Using Git
13.5      Other Applications of Binary Search          25.5      Installing Git
13.6      The Searching Library          26   Revision Log
13.7      Combining Sorting and Searching          27   End of Document





1. Table of Contents
Tangible Computing / Version 3.20 2013-03-25