Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Single Page Webapps in ClojureScript with Pedestal
Search
Tero Parviainen
August 28, 2013
Technology
4
89k
Single Page Webapps in ClojureScript with Pedestal
Including a Clojure Cup status report.
Presented at ClojuTRE 2013, August 28 at Tampere, Finland.
Tero Parviainen
August 28, 2013
Tweet
Share
More Decks by Tero Parviainen
See All by Tero Parviainen
Hot Loading in Angular 2
teropa
0
88
Refactoring Angular Apps to Components (HelsinkiJS 11/15)
teropa
1
350
Immutable Java
teropa
4
7.8k
Clojure Cup Update
teropa
0
160
Vältä sulkeutuneen softan toimittajaloukut
teropa
2
310
Clojure: An Introduction
teropa
11
340
The Age of Our Mutant Overlords is Over
teropa
11
20k
Other Decks in Technology
See All in Technology
株式会社EventHub・エンジニア採用資料
eventhub
0
1.9k
インシデントレスポンスのライフサイクルを廻すポイントってなに / Pinpoints of Incidentresponse Lifecycle for Operation
sakaitakeshi
1
300
Tableau事例紹介 / Tableau Case Study of Eureka
kazuya_araki_tokyo
1
170
Janus
bkuhlmann
1
490
[2024年3月版] Databricksのシステムアーキテクチャ
databricksjapan
8
1.9k
Databricksを活用してDELISH KITCHENのレシピレコメンドを開発した話
furu8
0
250
プロデザ! BY リクルート vol.18_リクルートのリサーチ実践組織「リサーチブーストコミュニティ」
recruitengineers
PRO
3
240
SPI原点回帰論:事業課題とFour Keysの結節点を見出す実践的ソフトウェアプロセス改善 / DevOpsDays Tokyo 2024
visional_engineering_and_design
4
1.5k
コンテナセキュリティの基本と脅威への対策
kyohmizu
3
690
DevOpsDays History and my DevOps story
kawaguti
PRO
8
1.6k
NgRx Signal Store
rainerhahnekamp
0
110
長期間TiDBを使ってきた話 @ 私たちはなぜNewSQLを使うのかTiDB選定5社が語る選定理由と活用LT / Experiences with TiDB Over Time
chibiegg
2
700
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
258
12k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
115
18k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
KATA
mclloyd
14
12k
Practical Orchestrator
shlominoach
181
9.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
15
2.6k
GitHub's CSS Performance
jonrohan
1023
450k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Designing for humans not robots
tammielis
247
25k
What's in a price? How to price your products and services
michaelherold
237
11k
Happy Clients
brianwarren
91
6.4k
Transcript
Clojure and ClojureScript programming competition September 28-29 Signup opens September
7, 03:00 EEST clojurecup.com @clojurecup
@abedra @amitrathore @marick @cemerick @ibdknox @chrishouser @cgrand @lisperati @swannodette @deanwampler
@garybernhardt @hlship @weavejester @w01fe @antiheroine @nrrrdcore @lynaghk @michaelklishin @bmf @nathanmarz @neal4d @usabilitycounts@technomancy @samaaron @venkat_s
None
Help Needed • Monitoring, IRC ops, contestant support during the
competition. • May not participate in compo • Ping me at
[email protected]
Single Page Webapps in ClojureScript with Pedestal Tero Parviainen clojuTRE
2013
Tero Parviainen @teropa Freelance software maker. Clojure, Java, Ruby, JavaScript.
Web, Android, iOS, WP.
tinyurl.com/vertxbook September 2013 Packt Publishing
Webapps: A Personal History
Web Frameworks
AJAX
http://www.flickr.com/photos/andrec/109984452/
Google Web Toolkit
http://www.flickr.com/photos/seattlemunicipalarchives/8284074749/
Single-page
http://hipstergrammers.tumblr.com/
ClojureScript
http://www.flickr.com/photos/32820477@N02/3619048502/
Pedestal
The Hook (ns hello-world (:require [domina :as dom])) (def application-state
(atom 0)) (defn render [old-state new-state] (dom/destroy-children! (dom/by-id "content")) (dom/append! (dom/by-id "content") (str "<h1>" new-state " Hello Worlds</h1>"))) (add-watch application-state :app-watcher (fn [key reference old-state new-state] (render old-state new-state))) (defn receive-input [] (swap! application-state inc) (.setTimeout js/window #(receive-input) 3000)) (defn ^:export main [] (receive-input))
“If you have ever built a ClojureScript application, this is
the way you start.”
None
What Pedestal Is Pedestal Services Pedestal Applications Clojure ClojureScript Web
Services Tooling Browser Applications Tooling
What Pedestal Is Pedestal Applications ClojureScript Browser Applications Tooling
Three Models Google http://domain.com Web Page Title DERP ERP Human
Resources 90% Process Compliance 300Hz Big Data Synergy 20 clouds Data Model Application Model DOM
Data Model {:todos ["one" "two" "three"]}
Application Model {:main {:todos ["one" "two" "three"] :todo-count 3}}
Application Model [:node-create [] :map] [:node-create [:main] :map] [:node-create [:main
:todos] :map] [:value [:main :todos] nil ["one" "two" "three"]] [:node-create [:main :todo-count] :map] [:value [:main :todo-count] nil 3] Deltas
DOM <h2> 3 ToDos </h2> <ul> <li>one</li> <li>two</li> <li>three</li> </ul>
Verbs over Nouns Data Model Messages User actions HTTP responses
SSEs WebSocket input Timer events Transforms Transforms
Verbs over Nouns Application Model Data Model Transforms Data Flow
Verbs over Nouns DOM Application Model Render Google http://domain.com Web
Page Title DERP ERP Human Resources 90% Process Compliance 300Hz Big Data Synergy 20 clouds
Decoupling http://www.flickr.com/photos/marfis75/5983944342/
Models from Processes Data Model Messages User actions HTTP responses
SSEs WebSocket input Timer events Transforms Transforms Pure functions
Models from Processes Application Model Data Model Transforms Data Flow
Pure functions
Messages from Events Data Model Messages User actions HTTP responses
SSEs WebSocket input Timer events Transforms Transforms Simulated Simulated Simulated Simulated Simulated
App Model From DOM Data UI Application Model Render Google
http://domain.com Web Page Title :metrics :human-resources :compliance :big-data-synergy Automated {:amt 90 :unit “%”} {:amt 300 :unit “Hz”} {:amt 20 :unit “Clouds”}
Dispatch from Execution Messages Transforms Data Flow Data Model Application
Model Rendering DOM Input Queue App Model Queue
Dispatch from Execution Messages Transforms Data Flow Data Model Application
Model Rendering DOM Input Queue App Model Queue Foreground Background Web Worker
Code
Resources https://github.com/pedestal/app-tutorial/ http://pedestal.io/ twitter.com/teropa