Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves...

59
understanding clo ure through data James Reeves @weavejester boolean·knot j

Transcript of Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves...

Page 1: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

understanding clo urethrough data

James Reeves @weavejester

boolean·knot

j

Page 2: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

disclaimerI'll be telling a few lies

Page 3: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

disclaimerI'll be telling a few lies

simplifications

Page 4: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

clo urej

Page 5: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

a functional programming language

a lisp (more on that later)

Page 6: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

officially targets Java (Clojure).NET (ClojureCLR)

javascript (ClojureScript)

Page 7: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

first released in September 2007 by Rich Hickey

Page 8: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

let's start with edn

Page 9: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

extensible data notation

Page 10: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

edn ⊆ clojure

json ⊆ javascript

Page 11: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

json edn

3.14159 3.14159

"hello world" "hello world"

[1, 2, 3, 4] [1 2 3 4]

{"name": "alice"} {"name" "alice"}

true true

null nil

numbers

strings

vectors

maps

booleans

nil

Page 12: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

json

[1 2 3]array ordered, random access

collections

Page 13: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

edn

[1 2 3]

(1 2 3)

#{1 2 3}

vector

list

set

ordered, random access

ordered

unordered, distinct

collections

Page 14: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

json

"name"string text data and identifier

identifiers

Page 15: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

edn

"name"

:name

name

string

keyword

symbol

text data

references itself

references something else

identifiers

Page 16: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

example

{:name "Alice" :sex :female :job cryptographer}

universal definition

might reference job description, benefits, etc

Page 17: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

namespaces

mammal.canine/dog:status/ready

Page 18: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

tags

"f81d4fae-7dec-11d0-a765-00a0c91e6bf6"

"1985-04-12T23:20:50.52Z"#inst

#uuid

Page 19: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

tags

#color/rgb "e8a433"

#color/rgb [232 164 51]

Page 20: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

what's the connection to clojure?

Page 21: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

clojure = edn + eval

Page 22: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

evaluationmost data evaluates to itself

"foo" "foo"

123 123

eval

[1 2 3] [1 2 3]

{:x 1} {:x 1}

Page 23: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

evaluationsymbols evaluate to a bound value

pi 3.14159eval

message "Hello World"

Page 24: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

evaluationlists evaluate based on their first element

(+ 1 1) 2eval

(and true false) false

Page 25: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

evaluationfunctions evaluate their arguments

(+ (* 3 3) (* 4 4))

⇒ (+ 9 16)

⇒ 25

Page 26: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

evaluationmacros evaluate their return value

(postfix (9 16 +))

⇒ (+ 9 16)

⇒ 25

Page 27: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

homoiconic

Page 28: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

homo · iconicthe same representation

Page 29: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

homo · iconicwriting code with data

Page 30: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

clojure data♥

Page 31: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

why such a close relationship?

Page 32: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

macros allow us to add new syntax through libraries

core.async core.logic

core.typed

async programming logic programming static typing

Page 33: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

but is that the only reason?

Page 34: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

“Simple Made Easy”

Page 35: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

simple complex

why?

Page 36: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

simple complex

Page 37: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

complexity ≠ cardinality

Page 38: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

complexity = interlacingcoupling

connections

Page 39: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

how do we usually deal with complexity?

Page 40: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

{ }

mutable state

Page 41: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

{ }

mutable state

Page 42: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

{ }

object

encapsulates state

Page 43: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

object

Page 44: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

methods

Page 45: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

encapsulation isolates complexity

Page 46: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

defensive strategy

Page 47: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

what would an offensive strategy look like?

Page 48: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

can something have zero complexity?

Page 49: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

immutable values

Page 50: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

mutable state needed for

1. performance

2. communication across threads

Page 51: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

{ }

object

Page 52: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

do we need encapsulation?

Page 53: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

walls are expensive

Page 54: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

{ }

Page 55: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

can we do that?

Page 56: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

in distributed environments we often work with immutable values

Page 57: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

are there any immediate benefits?

Page 58: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

free API

getters

setters serialisationtransversal

transformations

equality

diffing

merging deserialisation

lensing auditing concurrency

Page 59: Clojure Through Data - Boolean Knot€¦ · understanding clojure through data James Reeves @weavejester boolean·knot

end

questions?