Slide 1

Slide 1 text

(Welcome!)

Slide 2

Slide 2 text

Josh Abernathy @joshaber

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

for a ReactiveCocoa Better World

Slide 6

Slide 6 text

for a Better World Better Code

Slide 7

Slide 7 text

Some rantings about code and an introduction to using ReactiveCocoa to solve all of the problems currently facing mankind—a phrase I only use somewhat facetiously because if software really is taking over the world then better software can, in a very real way , lead to a better world, assuming you’re not writing software for a doomsday device, in which case you should go ahead and write terrible software—but mostly focusing on writing reactive user interfaces because that’s nice and demoable.

Slide 8

Slide 8 text

PERSPECTIVE

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Bug-free (ish)

Slide 11

Slide 11 text

Bug-free (ish) Expressive

Slide 12

Slide 12 text

Bug-free (ish) Concise Expressive

Slide 13

Slide 13 text

PHILOSOPHY

Slide 14

Slide 14 text

“Out of the Tarpit”

Slide 15

Slide 15 text

Complexity is STATE

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

2 states

Slide 18

Slide 18 text

2 states 4 states

Slide 19

Slide 19 text

2 states 4 states 8 states

Slide 20

Slide 20 text

2 states 4 states 8 states 16 states

Slide 21

Slide 21 text

32 states ... 64 states ... 128 states ... gazillion states ...

Slide 22

Slide 22 text

Minimize state

Slide 23

Slide 23 text

Minimize state by deriving it

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

2 states

Slide 27

Slide 27 text

2 states 4 states

Slide 28

Slide 28 text

2 states 4 states 4 states

Slide 29

Slide 29 text

Complexity is CONTROL

Slide 30

Slide 30 text

Say what Not how

Slide 31

Slide 31 text

What and how

Slide 32

Slide 32 text

What

Slide 33

Slide 33 text

What and how

Slide 34

Slide 34 text

What

Slide 35

Slide 35 text

Complexity is the ENEMY

Slide 36

Slide 36 text

Is this complexity inherent to the problem?

Slide 37

Slide 37 text

i.e.,

Slide 38

Slide 38 text

Would a normal person think this is necessary?

Slide 39

Slide 39 text

ReactiveCocoa To The Rescue!

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

Declarative!

Slide 45

Slide 45 text

Minimal state! (we’ll see that more later)

Slide 46

Slide 46 text

PRAGMATISM

Slide 47

Slide 47 text

What is it?

Slide 48

Slide 48 text

It’s like a series of tubes...

Slide 49

Slide 49 text

A sequence of values over time.

Slide 50

Slide 50 text

A stream of things.

Slide 51

Slide 51 text

int a = 0; a = 1; ... a = 2;

Slide 52

Slide 52 text

0 value of a: 1 2

Slide 53

Slide 53 text

(We already do this with variables, we just pretend we don’t.)

Slide 54

Slide 54 text

a RACSubscribable b c

Slide 55

Slide 55 text

a RACSubscribable

Slide 56

Slide 56 text

RACSubscribable

Slide 57

Slide 57 text

a b c RACSubscriber

Slide 58

Slide 58 text

???

Slide 59

Slide 59 text

UI events

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

(20, 20)

Slide 62

Slide 62 text

(20, 20) (100, 0)

Slide 63

Slide 63 text

(20, 20) (100, 0) (120, 50)

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

h h

Slide 66

Slide 66 text

h hi h hi

Slide 67

Slide 67 text

h hi hi! h hi hi!

Slide 68

Slide 68 text

KVO

Slide 69

Slide 69 text

Async work

Slide 70

Slide 70 text

Network request

Slide 71

Slide 71 text

???

Slide 72

Slide 72 text

KVO property = UI events = Network request = Async work = ??? = Subscribables

Slide 73

Slide 73 text

So what?

Slide 74

Slide 74 text

Shared Vocabulary

Slide 75

Slide 75 text

Shared Toolset

Slide 76

Slide 76 text

+combineLatest:reduce: -select: -where: -distinctUntilChanged -throttle: ...and infinity more...

Slide 77

Slide 77 text

Composable

Slide 78

Slide 78 text

To the Xcode!

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

Bug-free (ish)

Slide 81

Slide 81 text

Bug-free (ish) Expressive

Slide 82

Slide 82 text

Bug-free (ish) Concise Expressive

Slide 83

Slide 83 text

Minimize state by deriving it

Slide 84

Slide 84 text

Say what Not how

Slide 85

Slide 85 text

github.com/github/ReactiveCocoa More Info: Reactive Extensions (Rx) @joshaber elm-lang.org Functional Reactive Programming

Slide 86

Slide 86 text

(Thanks!)