REPL Driven
Mobile Development
with Clojure(script)
Srihari Sriraman | nilenso
Slide 2
Slide 2 text
No content
Slide 3
Slide 3 text
when did you become an expert
in building mobile applications?
last night, ofc
Slide 4
Slide 4 text
I have leapfrogged
Slide 5
Slide 5 text
Why I am speaking about this
Using cljsrn, we built the
same app as a native team
faster, and better.
Slide 6
Slide 6 text
The things I will talk about
Why
REPL Driven Development
CLJSRN
Non tech factors
Slide 7
Slide 7 text
Parlance
Slide 8
Slide 8 text
REPL
Https://en.wikipedia.org/wiki/
Read–eval–print_loop
Read, Eval, Print, Loop
“interactive computer programming
environment that takes single expressions,
evaluates them,
and returns the result to the user.
Lisp
http://lisp-lang.org/
LISt Processor
Second oldest HLL
Homoiconic
Slide 11
Slide 11 text
Lisp
http://lisp-lang.org/
LISt Processor
Second oldest HLL
Homoiconic
Slide 12
Slide 12 text
Clojure
https://clojure.org/
Clojure is a dialect of Lisp
that runs on the JVM
Slide 13
Slide 13 text
Clojure
https://clojure.org/
Clojure is a dialect of Lisp
Runs on the JVM
Rich Hickey
Slide 14
Slide 14 text
Clojure(script)
http://clojurescript.org/
ClojureScript is a compiler
for Clojure that targets JavaScript
David Nolen
Slide 15
Slide 15 text
Clojure(script)
http://clojurescript.org/
ClojureScript is a compiler
for Clojure that targets JavaScript
David Nolen
Slide 16
Slide 16 text
CLJSRN
http://cljsrn.org
ClojureScript is a compiler
for Clojure that targets JavaScript.
A framework for building native
apps using React
Slide 17
Slide 17 text
Feedback
Slide 18
Slide 18 text
Bret Victor - Inventing on Principle
https://vimeo.com/36579366
“Most of my time is spent in code,
working in a text editor blindly, without an
immediate connection to what I'm trying to make."
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
No content
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
Bret Victor - Inventing on Principle
https://vimeo.com/36579366
“Creators need an immediate connection
to what they create”
Slide 26
Slide 26 text
Stephen Wolfram – Inside the Wolfram Language
https://www.youtube.com/watch?v=EjCWdsrVcBM
Slide 27
Slide 27 text
Ron Garret - Lisping at JPL
http://www.flownet.com/gat/jpl-lisp.html
“Debugging a program running on a $100M piece
of hardware that is 100 million miles away is an
interesting experience. Having a read-eval-print
loop running on the spacecraft proved invaluable
in finding and fixing the problem.”
Slide 28
Slide 28 text
Sam Aaron –Programming Music with Overtone - Sam Aaron
https://www.youtube.com/watch?v=imoWGsipe4k
Zach Oakes –Making Games at Runtime with Clojure
https://www.youtube.com/watch?v=0GzzFeS5cMc
Me – Making machines that make music
https://www.youtube.com/watch?v=ZvSSeuzN_b4
Clojure land
Slide 29
Slide 29 text
REPL Driven
Development
Slide 30
Slide 30 text
Clojurescript
Clojure Compiler Javascript
Google Closure Compiler
Optimized Javascript RN flow
How cljsrn gets to a mobile
Slide 31
Slide 31 text
Demo
Slide 32
Slide 32 text
What is a REPL?
More than a Shell
Interact with running program
Define and modify behaviour
Read and write access to program’s state
In the editor
Slide 33
Slide 33 text
Why use a REPL?
Why Clojure REPL?
Why CLJS?
Slide 34
Slide 34 text
Why use a REPL?
Feedback
Explore and internalise the problem
Incremental development of the solution
Faster than TDD
Debuggability
Slide 35
Slide 35 text
Why use a Clojure REPL?
60y of LISP
Functions and Data structures, mostly
Read, Eval, and Print are overridable functions
Access to runtime: Reflections as data
Namespaces, vars
Slide 36
Slide 36 text
Why clojurescript?
Expressive, Simple
Seamless JS Interop
Immutable data structures by default
Google closure
Slide 37
Slide 37 text
Expressive, Simple
Javascript
Clojurescript
Slide 38
Slide 38 text
Why clojurescript?
Expressive, Simple
Seamless JS Interop
Immutable data structures by default
Google closure
Slide 39
Slide 39 text
Seamless JS interop
Slide 40
Slide 40 text
Why clojurescript?
Expressive, Simple
Seamless JS Interop
Immutable data structures by default
Google closure
Slide 41
Slide 41 text
Why clojurescript?
Expressive, Simple
Seamless JS Interop
Immutable data structures by default
Google closure