# Class 12 - Notes

### Upcoming Schedule

Project 3 is due at the beginning of class on Friday, 26 February. Be forewarned that Project 3 is long and challenging! Don't wait to get started on it.

Udacity cs101 Lesson 6: How to Have Infinite Power is all about recursive definitions. If you are not yet comfortable with defining recursive functions (which I expect is true for everyone!), you may find it worthwhile do go through this lesson now.

## Apple vs. the FBI

Court Order (this is the document I showed excerpts from in class)

Tim Cook's Letter to Apple Customers, 16 February 2016. (Lots of distortions in this and over-statements about what the FBI actually requested.)

Nicholas Weaver, Not a Slippery Slope, but a Jump off the Cliff, LawFare Blog, 17 Wednesday 2016.

FBI's response: Justice Department Calls Apple’s Refusal to Unlock iPhone a ‘Marketing Strategy’, New York Times, 19 February 2016.

## Building Computers

By the end of the class, the only thing that you think is "magic" about how applications like Google and Facebook work is the physics that make a transistor work (there is, however, much that I hope you will still find magical about computing systems you use every day!).

We assume John Bardeen, Walter Brattain, and William Shockley got this right (back in 1947) since they got a Nobel Prize for it, and that there are two devices that behave like this:

Normal Control: `output = and(source, control)`

Inverted Control (with source wired to on): `output = not control`

Each input and output variable is a single bit, represented by a voltage using digital abstraction (voltages below a set threshold represent 0, and those above a set threshold represent 1.)

Digital Abstraction. Abstract the analog voltage over a wide range to either a 0 (all voltages below some threshold) or a 1 (all voltages above that threshold).

Using the digital abstract enables computers to compute reliably, even if the signals are noisy.

Truth Table: a table that defines a function by showing a mapping between inputs and outputs.

 A B and(A, B) 0 0 0 0 1 0 1 0 0 1 1 1

 A not(A) 0 1 1 0

How can we define `or` using only `and` and `not`?

How can we build a 2-bit adder using only transistors?