Slide 1

Slide 1 text

ThinkinG - = outside The box

Slide 2

Slide 2 text

Hello, I'm Armin! I do Computers - with Python. Currently at Fireteam / Splash Damage. We do Internet for Pointy Shooty Games. c w

Slide 3

Slide 3 text

q t t j j d

Slide 4

Slide 4 text

the box is comfortable X

Slide 5

Slide 5 text

the comfort is dangerous l

Slide 6

Slide 6 text

the 9 dots puzzle 0 j 5 (and things of similar nature)

Slide 7

Slide 7 text

h - W < å ≥ h ≥ U using exactly 4 straight lines, without retracing or removing one's pen from the paper connect the dots j

Slide 8

Slide 8 text

h - W < å ≥ h ≥ U using exactly 4 straight lines, without retracing or removing one's pen from the paper connect the dots j

Slide 9

Slide 9 text

g i know it's cliché Ç

Slide 10

Slide 10 text

J the six thinking hats

Slide 11

Slide 11 text

J the six thinking hats This

Slide 12

Slide 12 text

the majority is always wrong: congratulations; you're now a cynical asshole 7 z “ ”

Slide 13

Slide 13 text

a change of environment 1 z m

Slide 14

Slide 14 text

c computer games

Slide 15

Slide 15 text

˚ 4 * this graph is not very scientific h ≥ Online

Slide 16

Slide 16 text

˚ 4 * this graph is not very scientific python!!!11 h ≥ Online

Slide 17

Slide 17 text

community influences your thinking . a - ∫ Î

Slide 18

Slide 18 text

C++ good; Scripting Languages Bad u

Slide 19

Slide 19 text

... if it takes you 30 minutes to do a one line change then you obviously would not want to have runtime type checks ... E

Slide 20

Slide 20 text

it's too easy to dismiss something on fringe or outdated experience alone

Slide 21

Slide 21 text

• never underestimate how much your environment/community influences you 1

Slide 22

Slide 22 text

• never underestimate how much your environment/community influences you 1 (unfortunately that also includes things like “the GIL is not a problem")

Slide 23

Slide 23 text

asking the right questions 2 j 5

Slide 24

Slide 24 text

the wrong questions are easy to spot on others a - ˚ 4

Slide 25

Slide 25 text

how do I do something after return render_template(...) if I don't want to register teardown_request for all requests. J

Slide 26

Slide 26 text

• he was looking for celery / message queue ©

Slide 27

Slide 27 text

• first expectation was that the user wanted to change the HTTP response 0

Slide 28

Slide 28 text

• teardown_request would not have worked anyways O

Slide 29

Slide 29 text

I don't want my user to wait while I do some processing on his data v “ ” better:

Slide 30

Slide 30 text

t j the box was Flask

Slide 31

Slide 31 text

how to ask the right questions2 - 5 B

Slide 32

Slide 32 text

• assume you already started out wrong • describe the •actual• problem =

Slide 33

Slide 33 text

How do I use Websockets with Flask? z “ ”

Slide 34

Slide 34 text

How do I notify my user about changes with low latency. 6 better: “ ”

Slide 35

Slide 35 text

5 question leaves room for the answer

Slide 36

Slide 36 text

(a) Server-sent events via WSGI (b) application <-> redis <-> persistent connection server Ô bit.ly/pypush

Slide 37

Slide 37 text

f Jump on IRC help out other people < >

Slide 38

Slide 38 text

questioning the right things 3 z m

Slide 39

Slide 39 text

the worst parts in my libraries are the ones where I took the design from elsewhere O

Slide 40

Slide 40 text

it's not because I know better ... ∆ Ò

Slide 41

Slide 41 text

• most things have some design behind • as people copy it, the original design gets obscured and forgotten • the original design might no longer apply 1

Slide 42

Slide 42 text

• starting something new? • question everything! ˝

Slide 43

Slide 43 text

not with the intention of proving existing design wrong; with the intention of understanding it. 9

Slide 44

Slide 44 text

9 paradigm shifts 4 F

Slide 45

Slide 45 text

Many times we don't even realize that things were an example of thinking outside the box. (a) "echo" -> Request/Response objects (b) Interactive Interpreters 9

Slide 46

Slide 46 text

That's also what makes it hard to find examples now ... 9

Slide 47

Slide 47 text

every idea is a rehash don't get too excited when you feel all "obviously ..." sometimes all that's necessary is transposing a concept from one industry to the other. 9

Slide 48

Slide 48 text

9 interesting examples 5 F

Slide 49

Slide 49 text

• Mill Processor: • Basic Block: One entry, one exit. • Break instruction bundles in half • Two decoders, one moves left from EBB entry point, one moves to the right =

Slide 50

Slide 50 text

• Mill Processor: • Basic Block: One entry, one exit. • Break instruction bundles in half • Two decoders, one moves left from EBB entry point, one moves to the right = two independent units, two separate caches

Slide 51

Slide 51 text

=a High-level Queues for Request Handling Stateful Frontend Servers Stateless Workers

Slide 52

Slide 52 text

• Sending around signed data • Cookies • Access/Refresh Tokens • Activation Links • Offers ˆ

Slide 53

Slide 53 text

• The Rust Programming Language • Memory ownership tracking 1 (and otherwise just steal from C++, C, Python, Ruby, Haskell and Scheme)

Slide 54

Slide 54 text

• Spotify's Native/Web Bridge • spawns HTTP server on localhost:XXXXX • provides OAuth bridge • JavaScript authenticates with local server, sends commands and retrieves updates. c

Slide 55

Slide 55 text

That's it; Now ask questions ? @mitsuhiko lucumr.pocoo.org/talks gittip.com/mitsuhiko y y y d

Slide 56

Slide 56 text

calibration slide -- 2 2 2 2 2 2 c