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
990
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
860
Worker power!
dgeb
0
530
Modern Ember
dgeb
0
180
The Future of Data in Ember
dgeb
0
480
Give Apps Online Superpowers by Optimizing them for Offline
dgeb
2
230
Overview of Orbit.js
dgeb
0
140
Introducing Ember Engines
dgeb
4
3.7k
Introducing JSON API
dgeb
5
790
Ambitious Data Flows with Ember.js and Orbit.js
dgeb
10
1.7k
Other Decks in Programming
See All in Programming
Cloudflare is Agents
chimame
0
180
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
560
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
400
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
270
初めての模倣学習とVLA
natsutan
0
310
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
730
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
660
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
420
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
260
FastAPI の並行処理モデルを完全に理解する
hoto17296
8
3.1k
Deep dive into the select statement (GopherCon UK)
jespino
0
150
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
2
240
Featured
See All Featured
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
290
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
420
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
First, design no harm
axbom
PRO
2
1.3k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
500
Crafting Experiences
bethany
1
270
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
Code Reviewing Like a Champion
maltzj
528
40k
So, you think you're a good person
axbom
PRO
2
2.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
310
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