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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
100
Refactoring Angular Apps to Components (HelsinkiJS 11/15)
teropa
1
430
Immutable Java
teropa
4
7.8k
Clojure Cup Update
teropa
0
180
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
社内でAWS BuilderCards体験会を立ち上げ、得られた気づき / 20260225 Masaki Okuda
shift_evolve
PRO
1
160
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
What's new in Go 1.26?
ciarana
2
280
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
6
1.9k
Agentic Software Modernization - Back to the Roots (Zürich Agentic Coding and Architectures, März 2026)
feststelltaste
0
120
入門DBSC
ynojima
0
130
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.1k
OSSで構築するIT基盤管理実践事例: NetBox・Snipe-IT・FreeRADIUS+PrivacyIDEA / Practical Case Studies of IT Infrastructure Management Using OSS
nttcom
0
180
Lookerの最新バージョンv26.2がやばい話
waiwai2111
1
150
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
71k
AIエンジニア Devin と歩む、自律型運用プロセスの構築
a2ito
0
630
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
95k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
Mind Mapping
helmedeiros
PRO
1
110
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
470
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
340
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
150
Testing 201, or: Great Expectations
jmmastey
46
8.1k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
760
A Tale of Four Properties
chriscoyier
162
24k
Leo the Paperboy
mayatellez
4
1.5k
Everyday Curiosity
cassininazir
0
150
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