Web Apps in LISP?
EWW!

by @tolitius

Clojure

Thanks to..

@jeeconf

(50 minute journey to...)

basicsClojure Syntax, Clojure Web

core.async Gentle Intro and Async UI

Om Facebook React with Clojure Love

experience with Clojure? no experience with Clojure? no problem!

[clojure syntax]

Clojure Syntax

all immutable, of course

{:syntax clojure}

oh.. yea, and this little thing

it’s a ... function!

(the usual suspects of clojure web)

ringmodular http (e.g. Python's WSGI, Ruby's Rack)

compojuresimple routes (e.g. Ruby's Sinatra)

ClojureScriptClojure => Google Closure => JavaScript

there are many more..

(browser REPL)

_________________
/                  \
\/                  \/
REPL <==> YOU <==> Browser
        

(clojure web)

let’s see it!


lein new www app
(with-brepl)

(core.async)

this requires another talk

(core.async) Go Clojure, Go!

Go goroutines & channels vs. Clojure go macro & channels

(core.async) Getting more for less

vs.

(core.async UI)

Who cares?

JavaScript is
Single
threaded!

(core.async UI)

Reason about concurrency sequentially

(core.async UI)

How do we implement this in JavaScript?

(core.async UI)

let's reason sequentially

JavaScript:   There are many ways to manage callback hell...
core.async:   What is "callback hell"?

(core.async)

this requires another talk

(om)

MVC is great, let's simplify it to...

V

(om)

Facebook says... React + Om adds... Immutability

(Doom.. Dom.. om)

Doom3 Engine

(Doom.. Dom.. om)

Doom3 Engine Labeled

(Doom.. Dom.. ReactJS)

ReactJS Engine

(React: Rethinking best practices)

ReactJS Internals

(om)

virtual DOM / reactive / component / lifecycle / ...
grrr

let’s just see it!


lein new www app with-om

(om? {:can "time travel”})

"Коля, как ты попал в будущее?"
"immutability, baby!"

(om) Copy the Universe? Easy!

Persistent Data Structures

(om) Copy the Universe? Easy!

Functional Data Structures

(and Q A)

Anatoly Polinsky
@tolitius