Slide 1

Slide 1 text

Learn How To Build Functional Reactive Applications with Elm, Node.js & Infinispan Galder Zamarreño @galderz blog.infinispan.org galder.zamarreno.com #devoxxma

Slide 2

Slide 2 text

Moi • @ • Infinispan developer & co-founder • Polyglot programmer • Functional programming #devoxxma @galderz

Slide 3

Slide 3 text

Objective Learn How To Build Functional Reactive Apps #devoxxma @galderz

Slide 4

Slide 4 text

Functional Reactive Apps Apps constructed using Functional Reactive Programming (FRP) principles #devoxxma @galderz

Slide 5

Slide 5 text

Defining FRP Functional Reactive Programming is Abstract #devoxxma @galderz

Slide 6

Slide 6 text

Defining FRP • What is FRP? • Definition • Why is FRP interesting? • Usefulness #devoxxma @galderz

Slide 7

Slide 7 text

What is FRP? Composable, declarative way of programming with values changing over time #devoxxma @galderz

Slide 8

Slide 8 text

Functional input => combinators => output #devoxxma @galderz

Slide 9

Slide 9 text

Functional + Reactive event + state => transform => state and/or event #devoxxma @galderz

Slide 10

Slide 10 text

Why is FRP interesting? Composability: easier to reason Asynchronous by default Efficiency++ #devoxxma @galderz

Slide 11

Slide 11 text

How to build FRP apps? #devoxxma @galderz HTTP TCP/IP

Slide 12

Slide 12 text

Elm #devoxxma @galderz HTTP TCP/IP statically compiled

Slide 13

Slide 13 text

Elm #devoxxma @galderz HTTP TCP/IP statically compiled building web user interfaces

Slide 14

Slide 14 text

Elm #devoxxma @galderz HTTP TCP/IP statically compiled building web user interfaces promotes FRP

Slide 15

Slide 15 text

Elm #devoxxma @galderz HTTP TCP/IP statically compiled building web user interfaces promotes FRP compiles to fast javascript

Slide 16

Slide 16 text

Elm #devoxxma @galderz HTTP TCP/IP statically compiled building web user interfaces promotes FRP compiles to fast javascript most helpful compiler

Slide 17

Slide 17 text

Elm #devoxxma @galderz HTTP TCP/IP statically compiled building web user interfaces promotes FRP compiles to fast javascript most helpful compiler no runtime exceptions

Slide 18

Slide 18 text

Node.js #devoxxma @galderz HTTP TCP/IP based on express.js

Slide 19

Slide 19 text

Node.js #devoxxma @galderz HTTP TCP/IP based on express.js FRP friend (async, events)

Slide 20

Slide 20 text

Node.js #devoxxma @galderz HTTP TCP/IP based on express.js FRP friend (async, events) stateless listens on port 3000

Slide 21

Slide 21 text

Node.js #devoxxma @galderz HTTP TCP/IP based on express.js FRP friend (async, events) stateless listens on port 3000 talks binary to data grid

Slide 22

Slide 22 text

Infinispan #devoxxma @galderz HTTP TCP/IP in- memory data grid

Slide 23

Slide 23 text

Infinispan #devoxxma @galderz HTTP TCP/IP in- memory data grid open source (ASL2)

Slide 24

Slide 24 text

Infinispan #devoxxma @galderz HTTP TCP/IP in- memory data grid open source (ASL2) 3 server node domain

Slide 25

Slide 25 text

Infinispan #devoxxma @galderz HTTP TCP/IP in- memory data grid open source (ASL2) 3 server node domain 2 copies redundant

Slide 26

Slide 26 text

Infinispan #devoxxma @galderz HTTP TCP/IP in- memory data grid open source (ASL2) 3 server node domain 2 copies redundant Java, Node.js, C/C++... clients

Slide 27

Slide 27 text

Infinispan #devoxxma @galderz HTTP TCP/IP in- memory data grid open source (ASL2) 3 server node domain 2 copies redundant Java, Node.js, C/C++... clients remote event listeners

Slide 28

Slide 28 text

Elm Architecture #devoxxma @galderz Elm Runtime Model Html + Msg (Click) update Msg (Click) + Model Cmd e.g. http call … Msg (Http Resp) + Model Model updated Model view … button click …

Slide 29

Slide 29 text

Demo: Fetch talks (1) #devoxxma @galderz GET /events

Slide 30

Slide 30 text

Demo: Fetch talks (2) #devoxxma @galderz GET /events iterate event 1 event 2 …

Slide 31

Slide 31 text

Demo: Fetch talks (3) #devoxxma @galderz GET /events iterate event 1 event 2 … JSON event[]

Slide 32

Slide 32 text

Demo: Fetch Talks #devoxxma

Slide 33

Slide 33 text

Demo: Insert talk (1) #devoxxma @galderz POST /events

Slide 34

Slide 34 text

Demo: Insert talk (1) #devoxxma @galderz POST /events putIfAbsent

Slide 35

Slide 35 text

Demo: Insert talk (1) #devoxxma @galderz POST /events putIfAbsent true/false created event

Slide 36

Slide 36 text

Demo: Insert talk (1) #devoxxma @galderz POST /events putIfAbsent true/false created event JSON true/false WS: JSON event WS: JSON event

Slide 37

Slide 37 text

Demo: Insert Talk #devoxxma

Slide 38

Slide 38 text

Objective Learn How To Build Functional Reactive Apps #devoxxma @galderz what is FRP

Slide 39

Slide 39 text

Objective Learn How To Build Functional Reactive Apps #devoxxma @galderz what is FRP why FRP is useful

Slide 40

Slide 40 text

Objective Learn How To Build Functional Reactive Apps #devoxxma @galderz what is FRP why FRP is useful how to build an FRP app

Slide 41

Slide 41 text

Objective Learn How To Build Functional Reactive Apps #devoxxma @galderz what is FRP why FRP is useful how to build an FRP app how to build an FRP app

Slide 42

Slide 42 text

Credits #devoxxma @galderz Approve by Aha-Soft from the Noun Project Window by Oleg Frolov from the Noun Project Server Error by Montu Yadav from the Noun Project Databases by Oliviu Stoian from the Noun Project

Slide 43

Slide 43 text

Demo Link github.com/galderz/ infinispan-events/tree/late16 #devoxxma @galderz

Slide 44

Slide 44 text

Merci #devoxxma @galderz • elm-lang.org • infinispan.org • redhat.com/en/ technologies/jboss- middleware/data-grid