26
Numerry Visualisation made easy @adrienhaxaire

Functional rotterdam-20-09-16

Embed Size (px)

Citation preview

Page 1: Functional rotterdam-20-09-16

NumerryVisualisation made easy

@adrienhaxaire

Page 2: Functional rotterdam-20-09-16

Motivations

Page 3: Functional rotterdam-20-09-16

Motivation: Learn functional programming

1. Want to keep improving myself

2. Already know procedural and object oriented programming

3. Emacs Lisp

Page 4: Functional rotterdam-20-09-16

Motivation: Learn modern web development

1. Researcher in geoengineering turned scientific developer

2. Web development is the norm

3. Front end, UI/UX

4. Full stack

Page 5: Functional rotterdam-20-09-16

Motivation: Personal pain point

Page 6: Functional rotterdam-20-09-16

Motivation: Personal pain point

1. Many existing tools, yet all for desktop (except Sage)

2. Ease of use: text file, drag and drop, from the repl

3. Sharing

Page 7: Functional rotterdam-20-09-16

Yay! I have found a

nice side project!

Page 8: Functional rotterdam-20-09-16

Stack

Page 9: Functional rotterdam-20-09-16

Stack: backend

Page 11: Functional rotterdam-20-09-16

Stack: backend

Page 12: Functional rotterdam-20-09-16

Stack: backend

Page 13: Functional rotterdam-20-09-16

Stack: Frontend

Page 15: Functional rotterdam-20-09-16

Design

Page 16: Functional rotterdam-20-09-16

Constraint: language agnostic

1. Should work with any language

2. Or no language at all: drag and drop & terminal

3. Incentive for clients in many languages

4. Avoid trapping myself into the idioms of a language -> standards

Page 17: Functional rotterdam-20-09-16

Constraint: language agnostic

Not a Single Page Application

Page 18: Functional rotterdam-20-09-16

Constraint: open source

1. Can be installed, not an app only

2. Users! How to handle authentication, security?

3. Data: local, global, replication?

Page 19: Functional rotterdam-20-09-16

System

Page 20: Functional rotterdam-20-09-16

Code

Page 21: Functional rotterdam-20-09-16

core.cljStart the websocket server

Page 22: Functional rotterdam-20-09-16

Update from RethinkDB

Define the websocket

Page 23: Functional rotterdam-20-09-16

RethinkDB’s changefeed

Async or not, optional argument

Page 24: Functional rotterdam-20-09-16

Ugly but works for now!

Page 25: Functional rotterdam-20-09-16

yes, hard-coded for debug

plot.js:46026 Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.

Page 26: Functional rotterdam-20-09-16

Recap

1. Found a nice project to burn my spare time in happiness

2. Full package: Clojure, RethinkDB, ClojureScript, Reagent

3. Advices/help welcome!

4. Links: Github, blog posts, Twitter