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
Fault Tolerant UX
Search
Dan Gebhardt
March 04, 2015
Programming
980
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Fault Tolerant UX
Talk from EmberConf 2015.
Dan Gebhardt
March 04, 2015
More Decks by Dan Gebhardt
See All by Dan Gebhardt
An Introduction to the JSON:API Specification
dgeb
5
850
Worker power!
dgeb
0
520
Modern Ember
dgeb
0
170
The Future of Data in Ember
dgeb
0
470
Give Apps Online Superpowers by Optimizing them for Offline
dgeb
2
230
Overview of Orbit.js
dgeb
0
130
Introducing Ember Engines
dgeb
4
3.7k
Introducing JSON API
dgeb
5
770
Ambitious Data Flows with Ember.js and Orbit.js
dgeb
10
1.7k
Other Decks in Programming
See All in Programming
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.2k
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
210
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
220
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
180
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
320
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
910
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
130
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
580
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
150
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
260
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.5k
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
470
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Code Review Best Practice
trishagee
74
20k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
780
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
240
Optimising Largest Contentful Paint
csswizardry
37
3.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
170
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Transcript
FA U LT T O L E R A N
T U X D A N G E B H A R D T @ d g e b
None
None
& > < > a > z in r O
m D > 30 3
None
None
None
None
None
None
None
None
None
None
None
None
<html /> J AVA S C R I P T
None
None
None
< M A R K U P / >
None
None
None
None
FA U LT T O L E R A N
C E U X F I R S T
FA U LT T O L E R A N
T U X = = T R A N S A C T I O N A L U X
T R A N S A C T I O
N A L U X • Atomic • Consistent • Isolated • Durable
AT O M I C “ A L L O
R N O T H I N G ”
None
C O N S I S T E N T
M O V E S B E T W E E N VA L I D S TAT E S
None
None
I S O L AT E D A L L
O W S C O N C U R R E N T C H A N G E S
None
D U R A B L E C H A
N G E S P E R S I S T
None
A p p l i c a t i o
n s M U S T N O T V i o l a t e t h e R u l e s o f Tr a n s a c t i o n a l U X O R E L S E
FA U LT T O L E R A N
T U X = = F O R G I V I N G U X
A p p l i c a t i o
n s S H O U L D Tr y t o P ro v i d e a F o rg i v i n g U X ~ p l e a s e ~
T R A N S I T I O N
A L P E R S I S T E N C E
None
U N D O / R E D O
None
O F F L I N E S U P
P O RT
[ Offline ] Ember ToDos
A S Y N C H R O N O
U S ( N O N - B L O C K I N G ) I N T E R FA C E
Syncing… Ember ToDos
E N G I N E E R I N
G FA U LT T O L E R A N C E
E M B E R P R O V I
D E S S I M P L E , E L E G A N T PAT T E R N S F O R B U I L D I N G A C O N S I S T E N T U X
E M B E R D ATA P R O
V I D E S S I M P L E , E L E G A N T PAT T E R N S F O R B U I L D I N G A C O N S I S T E N T + D U R A B L E U X
E M B E R D ATA Atomic Consistent Isolated
Durable = R E Q U I R E S C U S T O M I Z AT I O N Transitional Persistence Undo / Redo Offline Support Asynchronous Interfaces
R E T H I N K A S S
U M P T I O N S A N D P R I M I T I V E S
DISPARATE SOURCES
DISPARATE DATA
COMMON INTERFACES
NORMALIZED DATA
EVENTED CONNECTIONS
PROMISIFIED METHODS doThing
A S TA N D A L O N E
L I B R A RY F O R C O O R D I N AT I N G A C C E S S T O D ATA S O U R C E S A N D K E E P I N G T H E I R C O N T E N T S S Y N C H R O N I Z E D .
PRIMARY INTERFACES { } REQUESTABLE TRANSFORMABLE
REQUESTABLE find add remove update patch findLink addLink removeLink findLinked
TRANSFORMABLE transform(operation)
NORMALIZED DATA JSON Patch transformations: [{"op":"remove",! "path":["planet","f82eed41-3e63-4061-953f-23f74192dcdd"]}! {"op":"add",! "path":["planet","107dc357-7df5-422f-b9d7-817244716e86"],! “value”:{“name”:”Mercury",!
"id":"107dc357-7df5-422f-b9d7-817244716e86"}}]!
CONNECTORS { } REQUEST TRANSFORM
SYNCHRONOUS EVENT HANDLING 1 2 3 4 5 6
1 2 3 4 5 6 7 ??? P P
= Promise SYNCHRONOUS EVENT HANDLING
PROMISE-AWARE EVENTS 1 2 3 4 5 6 7 8
P P P P P = Promise Async Blocking
PROMISE-AWARE EVENTS 1 2 3 ??? 4 5 6 7
P = Promise P P Async Non-Blocking
COMMON LIBRARY
{ } MEMORY JSON API LOCAL STORAGE + MORE +
ORBIT COMMON LIB SOURCES
{ } MODELS KEYS RELATIONSHIPS + MORE + ORBIT COMMON
LIB SCHEMA
+ = ember-orbit
EO.Store all filter retrieve ! find add remove patch findLink
addLink removeLink { } { } Synchronous Asynchronous ember-orbit
Star = EO.Model.extend({! name: attr('string'),! planets: hasMany('planet', {inverse: 'sun'})! });!
! Planet = EO.Model.extend({! name: attr('string'),! classification: attr('string'),! sun: hasOne('star', {inverse: 'planets'})! }); EO.Model ember-orbit
URLS DRIVE APPLICATION STATE
SOURCES DRIVE MODEL STATE ember-orbit
A P P L I C AT I O N
PAT T E R N S
CLIENT-FIRST DEVELOPMENT
PLUGGABLE SOURCES
DATA SYNCHRONIZATION
EDITING CONTEXTS
UNDO / REDO
Twitter: @orbitjs IRC: #orbitjs Github: https://github.com/orbitjs Soon: orbitjs.com
T H A N K S ! @ d g
e b