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
Adaptive and evolvable apps
Search
Ben Longden
May 08, 2015
Technology
430
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Adaptive and evolvable apps
Ben Longden
May 08, 2015
More Decks by Ben Longden
See All by Ben Longden
Spryker, an architecture for the web
blongden
0
340
Building better clients
blongden
0
72
Silex, the micro-framework
blongden
3
640
Other Decks in Technology
See All in Technology
[RSJ26] Flow as Flow: Modeling Robot Velocity Fields as Probability Velocity Fields
keio_smilab
PRO
0
180
Data Hubグループ 紹介資料
sansan33
PRO
0
3.2k
最新技術に積極チャレンジ!EKS共通基盤のこれまでとこれから
daitak
0
290
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
170
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
170
[RSJ26] AnoleVLA: Lightweight Vision-Language-Action Model with Deep State Space Models for Mobile Manipulation
keio_smilab
PRO
0
120
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
2
1.7k
Digitization部 紹介資料
sansan33
PRO
2
7.8k
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
1
840
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
150
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
1
1.2k
はじめてのDatabricks:技術者向けワークショップ / beginner-workshop
databricksjapan
PRO
0
110
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
My Coaching Mixtape
mlcsv
0
300
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
30 Presentation Tips
portentint
PRO
1
380
Into the Great Unknown - MozCon
thekraken
41
2.7k
Building Adaptive Systems
keathley
44
3.2k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
260
How to train your dragon (web standard)
notwaldorf
97
6.8k
The Curse of the Amulet
leimatthew05
2
14k
Transcript
Adap%ve(and(evolvable(applica%ons Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 1
What%is%hypermedia? Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 2
What%does%it%look%like? Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 3
How$can$I$make$use$of$it$in$my$ apps? Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 4
There%are%two%types%of%API%client Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 5
Machine(driven Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 6
Human&driven Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 7
Consider)the)web)browser Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 8
The$data Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 9
What%the%client%should%do%next Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 10
Hypermedia*is*defined*by*the* presence*of*applica5on*control* informa5on*embedded*within,*or*as* a*layer*above,*the*presenta5on*of* informa5on —"Roy"Fielding Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 11
<a href=“http://example.org/next”>next</a> Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 12
<form method=“GET” action=“http://example.org/search”> Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 13
<img src=“http://example.org/thing.gif” title=“thing”> Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 14
A"browser"is"designed"so"that"its" hypermedia"affordances"are" controlled"by"humans Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 15
What%about%when%the%consumer%is%a% smartphone/web%applica4on? Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 16
Hypermedia*Applica.on*Language { "_links": { "self": { "href": "/orders/1" }, "next":
{ "href": "/orders/2" } }, "_embedded": { "items": [ { "_links": { "self": { "href": "/items/1" } } "price": "10" } ] }, "total": "10" } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 17
HAL$contains$two$types$of$link$affordance Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 18
Outbound(naviga-onal { "_links": { "self": { "href": "http://example.org/thing/2" }, "prev":
{ "href": "http://example.org/thing/1" }, "next": { "href": "http://example.org/thing/3" } } } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 19
Embedded { "_embedded": { "things": [ { ... } ]
} } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 20
This%allows%the%message%to%contain% both%the%data%and%the%context Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 21
Less$logic$in$the$client Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 22
weluse/hyperagent Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 23
{ "_links": { "self": { "href": "http://example.org/thing/2" }, "prev": {
"href": "http://example.org/thing/1" }, "next": { "href": "http://example.org/thing/3" } } } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 24
root.links['next'].fetch().then(function (thing) { // do something with the 'next' item
}); Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 25
Clients(can(adapt(to(change Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 26
The$server$can$evolve$independently$ from$the$client Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 27
URLs Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 28
Avoid&assembling&URLs var link = 'http://example.org/thing/' + id; Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 29
Use$a$link$template$on$the$home$if$you$need$to$convert$an$id$to$a$URL { "_links": { "self": { "href": "/" }, "thing":
{ "href": "http://example.org/thing/{id}", "templated": "true" } } } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 30
Link%templates%with%hyperagent var link = root.link('thing', { id: id }); Adap%ve(and(evolvable(applica%ons(0(Ben(Longden
31
RFC6570()(URI(Templates Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 32
JSON%Schema Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 33
{ "title": "Example Schema", "type": "object", "properties": { "firstName": {
"type": "string" }, "lastName": { "type": "string" }, "age": { "description": "Age in years", "type": "integer", "minimum": 0 } }, "required": ["firstName", "lastName"] } Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 34
JSON%Form (or$Angular$Schema$Form) Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 35
Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 36
Three%good%things Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 37
• Hypermedia • Link.templates • JSON.Schema Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 38
One$goal Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 39
Put$control$back$on$the$server Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 40
React&to&change&in&a&posi.ve&way Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 41
Ben$Longden CTO$Inviqa @blongden Adap%ve(and(evolvable(applica%ons(0(Ben(Longden 42