Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
99
Refactoring Angular Apps to Components (HelsinkiJS 11/15)
teropa
1
410
Immutable Java
teropa
4
7.8k
Clojure Cup Update
teropa
0
170
Vältä sulkeutuneen softan toimittajaloukut
teropa
2
330
Clojure: An Introduction
teropa
11
380
The Age of Our Mutant Overlords is Over
teropa
11
20k
Other Decks in Technology
See All in Technology
Reinforcement Fine-tuning 基礎〜実践まで
ch6noota
0
170
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
140
[CMU-DB-2025FALL] Apache Fluss - A Streaming Storage for Real-Time Lakehouse
jark
0
110
AI活用によるPRレビュー改善の歩み ― 社内全体に広がる学びと実践
lycorptech_jp
PRO
1
200
日本Rubyの会の構造と実行とあと何か / hokurikurk01
takahashim
4
1k
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
800
Haskell を武器にして挑む競技プログラミング ─ 操作的思考から意味モデル思考へ
naoya
6
1.4k
AWS re:Invent 2025で見たGrafana最新機能の紹介
hamadakoji
0
340
学習データって増やせばいいんですか?
ftakahashi
2
310
OCI Oracle Database Services新機能アップデート(2025/09-2025/11)
oracle4engineer
PRO
1
110
チーリンについて
hirotomotaguchi
6
1.9k
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
7
600
Featured
See All Featured
Practical Orchestrator
shlominoach
190
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
GraphQLとの向き合い方2022年版
quramy
50
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Visualization
eitanlees
150
16k
The Pragmatic Product Professional
lauravandoore
37
7.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
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