SlideShare a Scribd company logo
1 of 142
Download to read offline
The Past, Present and
Future of Real-Time
Apps &
Communications
FOWA Boston 2015
1 / 97
@leggetter
Real-Time FOWA
2 / 97
@leggetter
5 talks on Real-Time
Real-Time FOWA
2 / 97
@leggetter
5 talks on Real-Time 4 talks on IoT
Real-Time FOWA
2 / 97
@leggetter
5 talks on Real-Time 4 talks on IoT
Real-Time FOWA
21 talks at FOWA 2105
2 / 97
@leggetter
5 talks on Real-Time 4 talks on IoT
Real-Time FOWA
21 talks at FOWA 2105
Over 40%talks on Real-Time
2 / 97
@leggetter
PHIL @LEGGETTER
Head of Developer Relations
4 / 97
@leggetter
5 / 97
@leggetter
Realtime Web Apps (Past)
“The World Wide Web (www) is an information
space where documents and other web resources
are identified by URLs, interlinked by hypertext
links, and can be accessed via the Internet
6 / 97
@leggetter
Realtime Web Apps
7 / 97
@leggetter
Realtime Web Apps
↓
s/Web/Internet
7 / 97
@leggetter
Realtime Web Apps
↓
s/Web/Internet
↓
Realtime Internet Apps
7 / 97
@leggetter
When do we need Realtime?
8 / 97
@leggetter
Data
Is there a timely nature to the data?
9 / 97
@leggetter
User Experience
Is there a timely nature to the experience?
10 / 97
@leggetter
Realtime is required when there's a Need or
Demand for:
Up to date information
Interaction to maintain engagement (UX)
11 / 97
@leggetter
These aren't new Needs or Demands
But...
12 / 97
@leggetter
These aren't new Needs or Demands
But...
The Internet
12 / 97
@leggetter
13 / 97
@leggetter
14 / 97
@leggetter
15 / 97
@leggetter
HTTP was better. But many wanted more.
16 / 97
@leggetter
17 / 97
@leggetter
18 / 97
@leggetter
19 / 97
@leggetter
HTTP wasn't enough!
HTTP - request/response paradigm
Keeping persistent HTTP connections alive
No cross-browser XMLHttpRequest
2 connection limit
No browser cross origin support
General cross browser incompatibilities
20 / 97
@leggetter
Hacks & Tricks
Java Applets
Flash
HTTP Hacks
21 / 97
@leggetter
Then Real-Time Went Mainstream
22 / 97
@leggetter
Social
23 / 97
@leggetter
Technology Advancements
Memory & CPU speed and cost
The cloud
Browser standardisation & enhancements
Any client can use the standards
24 / 97
@leggetter
25 / 97
@leggetter
MASSIVE Increase in Internet Usage
26 / 97
@leggetter
Internet Usage (per day)
200 billion emails
27 / 97
@leggetter
Internet Usage (per day)
200 billion emails
7 million blog posts written†
500 million tweets
27 / 97
@leggetter
Internet Usage (per day)
200 billion emails
7 million blog posts written†
500 million tweets
55 million Facebook status updates
5 billion Google+ +1's
60 million Instagram photos posted
2 billion minutes spent on Skype
33 million hours of Netflix watched
200 million hours of YouTube watched
27 / 97
@leggetter
28 / 97
@leggetter
Realtime Apps in 2015
29 / 97
@leggetter
Realtime Apps in 2015 (Present)
Real-time Use Cases
30 / 97
@leggetter
Realtime Apps in 2015 (Present)
Real-time Use Cases
Application Communication Patterns
30 / 97
@leggetter
Signalling
31 / 97
@leggetter
0:00 32 / 97
@leggetter
Internet ^5 Machine
talky.io
33 / 97
@leggetter
Communication Pattern:
Simple Messaging
34 / 97
@leggetter
Client
var ws = new WebSocket('ws://localhost/');
35 / 97
@leggetter
Client
var ws = new WebSocket('ws://localhost/');
ws.onmessage = function(evt) {
var data = JSON.parse(evt.data);
35 / 97
@leggetter
Client
var ws = new WebSocket('ws://localhost/');
ws.onmessage = function(evt) {
var data = JSON.parse(evt.data);
if(data.action) {
// ^5
}
35 / 97
@leggetter
Client
var ws = new WebSocket('ws://localhost/');
ws.onmessage = function(evt) {
var data = JSON.parse(evt.data);
if(data.action) {
// ^5
}
else if(data.peerId) {
var connectTo = data.peerId;
}
};
35 / 97
@leggetter
Client
var ws = new WebSocket('ws://localhost/');
ws.onmessage = function(evt) {
var data = JSON.parse(evt.data);
if(data.action) {
// ^5
}
else if(data.peerId) {
var connectTo = data.peerId;
}
};
Server
// server
server.on('connection', function(socket){
35 / 97
@leggetter
Client
var ws = new WebSocket('ws://localhost/');
ws.onmessage = function(evt) {
var data = JSON.parse(evt.data);
if(data.action) {
// ^5
}
else if(data.peerId) {
var connectTo = data.peerId;
}
};
Server
// server
server.on('connection', function(socket){
socket.send(JSON.stringify({action: 'high-5'}));
});
35 / 97
@leggetter
36 / 97
@leggetter
Notifications
37 / 97
@leggetter
Communication Pattern:
Publish-Subscribe (PubSub)
38 / 97
@leggetter
Client
var client = new Client('http://localhost:8000/');
39 / 97
@leggetter
Client
var client = new Client('http://localhost:8000/');
client.subscribe('news', function(data) {
39 / 97
@leggetter
Client
var client = new Client('http://localhost:8000/');
client.subscribe('news', function(data) {
console.log(data.headline);
});
39 / 97
@leggetter
Client
var client = new Client('http://localhost:8000/');
client.subscribe('news', function(data) {
console.log(data.headline);
});
Server
server.publish('news', {headline: 'Pusher Rocks!'});
39 / 97
@leggetter
40 / 97
@leggetter
Activity Streams
41 / 97
@leggetter
Communication Pattern
Evented PubSub
42 / 97
@leggetter
Client
var pusher = new Pusher(APP_KEY);
var channel = pusher.subscribe('status');
43 / 97
@leggetter
Client
var pusher = new Pusher(APP_KEY);
var channel = pusher.subscribe('status');
channel.bind('created', function(data) {
// Add activity to UI
});
43 / 97
@leggetter
Client
var pusher = new Pusher(APP_KEY);
var channel = pusher.subscribe('status');
channel.bind('created', function(data) {
// Add activity to UI
});
channel.bind('updated', function(data) {
// Update activity
});
channel.bind('deleted', function(data) {
// Remove activity
});
43 / 97
@leggetter
Client
var pusher = new Pusher(APP_KEY);
var channel = pusher.subscribe('status');
channel.bind('created', function(data) {
// Add activity to UI
});
channel.bind('updated', function(data) {
// Update activity
});
channel.bind('deleted', function(data) {
// Remove activity
});
Server
pusher.trigger('status', 'created', {text: 'PubSub Rocks!', id: 1});
43 / 97
@leggetter
Client
var pusher = new Pusher(APP_KEY);
var channel = pusher.subscribe('status');
channel.bind('created', function(data) {
// Add activity to UI
});
channel.bind('updated', function(data) {
// Update activity
});
channel.bind('deleted', function(data) {
// Remove activity
});
Server
pusher.trigger('status', 'created', {text: 'PubSub Rocks!', id: 1});
pusher.trigger('status', 'updated', {text: 'Evented PubSub Rocks!', id: 1});
pusher.trigger('status', 'deleted', {id: 1});
43 / 97
@leggetter
Data Visualizations
44 / 97
@leggetter
45 / 97
@leggetter
46 / 97
Chat
@leggetter
47 / 97
@leggetter
PubSub vs. Evented PubSub
48 / 97
@leggetter
49 / 97
@leggetter
50 / 97
@leggetter
PubSub
client.subscribe('devexp-channel', function(data) {
if(data.eventType === 'chat-message') {
addMessage(data.message);
}
51 / 97
@leggetter
PubSub
client.subscribe('devexp-channel', function(data) {
if(data.eventType === 'chat-message') {
addMessage(data.message);
}
else if(data.eventType === 'channel-purposed-changed') {
updateRoomTitle(data.purpose);
}
else if(/* and so on */) {
}
})
51 / 97
@leggetter
PubSub
client.subscribe('devexp-channel', function(data) {
if(data.eventType === 'chat-message') {
addMessage(data.message);
}
else if(data.eventType === 'channel-purposed-changed') {
updateRoomTitle(data.purpose);
}
else if(/* and so on */) {
}
})
Evented PubSub
var channel = pusher.subscribe('devexp-channel');
channel.bind('chat-message', addMessage);
channel.bind('channel-purposed-changed', updateChannelPurpose);
51 / 97
@leggetter
PubSub
client.subscribe('devexp-channel', function(data) {
if(data.eventType === 'chat-message') {
addMessage(data.message);
}
else if(data.eventType === 'channel-purposed-changed') {
updateRoomTitle(data.purpose);
}
else if(/* and so on */) {
}
})
Evented PubSub
var channel = pusher.subscribe('devexp-channel');
channel.bind('chat-message', addMessage);
channel.bind('channel-purposed-changed', updateChannelPurpose);
channel.bind('current-topic-changed', updateChannelTopic);
channel.bind('user-online', userOnline);
channel.bind('user-offline', userOffline);
51 / 97
@leggetter
52 / 97
@leggetter
Real-Time Location Tracking
53 / 97
@leggetter
Multi-User Collaboration
54 / 97
@leggetter
55 / 97
@leggetter
Multiplayer Games / Art
56 / 97
@leggetter
Communication Pattern
Data Synchronisation (DataSync)
57 / 97
@leggetter
Client
var sync = new DataSync();
var ref = sync.get('document-1');
58 / 97
@leggetter
Client
var sync = new DataSync();
var ref = sync.get('document-1');
ref.on(function(val) {
console.log(val)
});
58 / 97
@leggetter
Client
var sync = new DataSync();
var ref = sync.get('document-1');
ref.on(function(val) {
console.log(val)
});
ref.put({text: 'Hello, DataSync!'}).key('unique-key');
58 / 97
@leggetter
Client
var sync = new DataSync();
var ref = sync.get('document-1');
ref.on(function(val) {
console.log(val)
});
ref.put({text: 'Hello, DataSync!'}).key('unique-key');
ref.path('unique-key').set(null);
58 / 97
@leggetter
Client
var sync = new DataSync();
var ref = sync.get('document-1');
ref.on(function(val) {
console.log(val)
});
ref.put({text: 'Hello, DataSync!'}).key('unique-key');
ref.path('unique-key').set(null);
Framework handles updates to other clients
58 / 97
@leggetter
59 / 97
@leggetter
Communication Pattern
RPC/RMI
Use Cases?
60 / 97
@leggetter
61 / 97
@leggetter
Client
rmi({
62 / 97
@leggetter
Client
rmi({
newMessage: function(message) {
console.log(message);
}
})
62 / 97
@leggetter
Client
rmi({
newMessage: function(message) {
console.log(message);
}
})
.on('remote', function(remote) {
62 / 97
@leggetter
Client
rmi({
newMessage: function(message) {
console.log(message);
}
})
.on('remote', function(remote) {
remote.sendMessage({text: 'dnode baby!'});
});
62 / 97
@leggetter
Client
rmi({
newMessage: function(message) {
console.log(message);
}
})
.on('remote', function(remote) {
remote.sendMessage({text: 'dnode baby!'});
});
Server
var remotes = [];
rmi({
sendMessage: function(message) {
62 / 97
@leggetter
Client
rmi({
newMessage: function(message) {
console.log(message);
}
})
.on('remote', function(remote) {
remote.sendMessage({text: 'dnode baby!'});
});
Server
var remotes = [];
rmi({
sendMessage: function(message) {
remotes.forEach(function(remote) {
remote.newMessage(message);
});
}
})
62 / 97
@leggetter
Client
rmi({
newMessage: function(message) {
console.log(message);
}
})
.on('remote', function(remote) {
remote.sendMessage({text: 'dnode baby!'});
});
Server
var remotes = [];
rmi({
sendMessage: function(message) {
remotes.forEach(function(remote) {
remote.newMessage(message);
});
}
})
.on('remote', function(remote) {
remotes.push(remote);
}); 62 / 97
@leggetter
63 / 97
@leggetter
Choosing a Communication Pattern
64 / 97
@leggetter
Communication Patterns
65 / 97
@leggetter
Communication Patterns & Use Cases
66 / 97
@leggetter
Real-Time is Essential
67 / 97
@leggetter
Real-Time is Essential
67 / 97
@leggetter
Max Williams (@maxthelion) - CEO, Pusher
‘I'm not sure I believe that there is such a thing as
"realtime apps" any more. Apps either update
instantly and smoothly, or they appear broken. I feel
that "realtime" as a feature has moved down the
Kano graph. It is much more of an expectation, than
an "exciter".
68 / 97
@leggetter
69 / 97
@leggetter
The Internet...
70 / 97
@leggetter
The Internet...
1. is our main communications platform
70 / 97
@leggetter
The Internet...
1. is our main communications platform
2. is becoming our main entertainment
platform
70 / 97
@leggetter
The Internet...
1. is our main communications platform
2. is becoming our main entertainment
platform
3. should give users real-time experiences
70 / 97
@leggetter
Future
71 / 97
@leggetter
Network Infrastructure & Protocols
Reliability
Speed
Beyond HTTP
HTTP2
72 / 97
@leggetter
Bayeux
DDP
dNode
EPCP
GRIP
MQTT
Pusher Protocol
STOMP
SignalR Protocol
WAMP (Web App Messaging Protocol)
XMPP (various)
Communication Pattern Protocol
Standardisation
73 / 97
@leggetter
74 / 97
@leggetter
GitHub
Iron.io
MailChimp
MailJet
PagerDuty
Pusher
SendGrid
Twilio
Real-Time APIs
75 / 97
@leggetter
76 / 97
@leggetter
More "Things"!
77 / 97
@leggetter
The Physical Web
78 / 97
@leggetter
IoT, Apps & Developers
79 / 97
@leggetter
A thing can be anything
80 / 97
@leggetter
A thing can be anything
Sensors
Appliances
Vehicles
Smart Phones
Devices (Arduino, Electric Imp, Raspberry Pi etc.)
80 / 97
@leggetter
A thing can be anything
Sensors
Appliances
Vehicles
Smart Phones
Devices (Arduino, Electric Imp, Raspberry Pi etc.)
Servers
Browsers
Apps: Native, Web, running anywhere
80 / 97
@leggetter
The Majority of code we'll write will still be
for "Apps"
Configuring
Monitoring
Interacting
App Logic
81 / 97
@leggetter
Real-Time Use Case Evolution
Notifications & Signalling
Activity Streams
Data Viz & Polls
Chat
Collaboration
Multiplayer Games
82 / 97
@leggetter
Notifications/Activity Streams -> Actions
83 / 97
@leggetter
The end of apps as we know it - Intercom
Subscriptions
84 / 97
@leggetter
Personalised Event Streams
85 / 97
@leggetter
Unified UIs
86 / 97
@leggetter
Chat for Everything
87 / 97
@leggetter
549M MAUs
10k integrations
app-within-an-app model
taxi, order food, tickets, games etc.
WeChat
88 / 97
@leggetter
Chat Integrations
89 / 97
@leggetter
Siri
Google Now
Microsoft Cortana
Facebook M
Chat "Virtual Assistants"
90 / 97
@leggetter
Chat has evolved. Chat is now a platform!
91 / 97
@leggetter
Multi-Device Experiences
92 / 97
@leggetter
Ben Foxall - A conceptual future for the multi-device web (FutureJS 2014)
93 / 97
@leggetter
Summary
94 / 97
@leggetter
Summary
The Internet is our communications platform
94 / 97
@leggetter
Summary
The Internet is our communications platform
Easier than ever to innovate on this platform
94 / 97
@leggetter
Summary
The Internet is our communications platform
Easier than ever to innovate on this platform
Users expect real-time experiences
94 / 97
@leggetter
Summary
The Internet is our communications platform
Easier than ever to innovate on this platform
Users expect real-time experiences
Future:
Infrastructure
standards
IoT
Event streams
Use case evolution
Chat everywhere
94 / 97
@leggetter
Realtime Internet Apps === IoT
Web Browsers +
Web Servers +
Native Apps +
Devices +
...
95 / 97
@leggetter
The Past, Present and Future of Real-Time Apps
& Communications
Thanks! Feedback & Questions!
PHIL @LEGGETTER
Head of Evangelism
96 / 97
@leggetter
References
Pusher
These slides - leggetter.github.io/realtime-internet-apps/
Mary Meeker's internet trend report
Kano model
DDP Protocol
Socket.IO protocol
MQTT
Real-Time Web Tech Guide
The end of apps as we know them - Intercom
97 / 97
@leggetter

More Related Content

Similar to The Past, Present and Future of Real-Time Apps and Communications

Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream Processing
Guido Schmutz
 
Gemfire
GemfireGemfire
Gemfire
FNian
 
Evolution of a big data project
Evolution of a big data projectEvolution of a big data project
Evolution of a big data project
Michael Peacock
 
Pushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax WPushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax W
rajivmordani
 
Streaming Visualisation
Streaming VisualisationStreaming Visualisation
Streaming Visualisation
Guido Schmutz
 
Big Data & Machine Learning Pipelines: A Tale of Lambdas, Kappas and Pancakes
Big Data & Machine Learning Pipelines: A Tale of Lambdas, Kappas and PancakesBig Data & Machine Learning Pipelines: A Tale of Lambdas, Kappas and Pancakes
Big Data & Machine Learning Pipelines: A Tale of Lambdas, Kappas and Pancakes
Osama Khan
 
Apache Flume - Streaming data easily to Hadoop from any source for Telco oper...
Apache Flume - Streaming data easily to Hadoop from any source for Telco oper...Apache Flume - Streaming data easily to Hadoop from any source for Telco oper...
Apache Flume - Streaming data easily to Hadoop from any source for Telco oper...
DataWorks Summit
 

Similar to The Past, Present and Future of Real-Time Apps and Communications (20)

Introduction to Stream Processing
Introduction to Stream ProcessingIntroduction to Stream Processing
Introduction to Stream Processing
 
Gemfire
GemfireGemfire
Gemfire
 
Evolution of a big data project
Evolution of a big data projectEvolution of a big data project
Evolution of a big data project
 
Data Science on Google Cloud Platform
Data Science on Google Cloud PlatformData Science on Google Cloud Platform
Data Science on Google Cloud Platform
 
Scalding Big (Ad)ta
Scalding Big (Ad)taScalding Big (Ad)ta
Scalding Big (Ad)ta
 
The Full Power of REST: Executing Code On The Client With HyperMap
The Full Power of REST: Executing Code On The Client With HyperMapThe Full Power of REST: Executing Code On The Client With HyperMap
The Full Power of REST: Executing Code On The Client With HyperMap
 
Vaadin 7 by Joonas Lehtinen
Vaadin 7 by Joonas LehtinenVaadin 7 by Joonas Lehtinen
Vaadin 7 by Joonas Lehtinen
 
Get Real: Adventures in realtime web apps
Get Real: Adventures in realtime web appsGet Real: Adventures in realtime web apps
Get Real: Adventures in realtime web apps
 
Pushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax WPushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax W
 
Streaming Visualization
Streaming VisualizationStreaming Visualization
Streaming Visualization
 
Tools, Tips and Techniques for Developing Real-time Apps. Phil Leggetter
Tools, Tips and Techniques for Developing Real-time Apps. Phil LeggetterTools, Tips and Techniques for Developing Real-time Apps. Phil Leggetter
Tools, Tips and Techniques for Developing Real-time Apps. Phil Leggetter
 
Building Event-Driven (Micro)Services with Apache Kafka
Building Event-Driven (Micro)Services with Apache KafkaBuilding Event-Driven (Micro)Services with Apache Kafka
Building Event-Driven (Micro)Services with Apache Kafka
 
Web automation with #d8rules (European Drupal Days 2015)
Web automation with #d8rules (European Drupal Days 2015)Web automation with #d8rules (European Drupal Days 2015)
Web automation with #d8rules (European Drupal Days 2015)
 
Streaming Visualisation
Streaming VisualisationStreaming Visualisation
Streaming Visualisation
 
Big Data & Machine Learning Pipelines: A Tale of Lambdas, Kappas and Pancakes
Big Data & Machine Learning Pipelines: A Tale of Lambdas, Kappas and PancakesBig Data & Machine Learning Pipelines: A Tale of Lambdas, Kappas and Pancakes
Big Data & Machine Learning Pipelines: A Tale of Lambdas, Kappas and Pancakes
 
Deep Dive into the OPC UA / DDS Gateway Specification
Deep Dive into the OPC UA / DDS Gateway SpecificationDeep Dive into the OPC UA / DDS Gateway Specification
Deep Dive into the OPC UA / DDS Gateway Specification
 
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
 
Apache Flume - Streaming data easily to Hadoop from any source for Telco oper...
Apache Flume - Streaming data easily to Hadoop from any source for Telco oper...Apache Flume - Streaming data easily to Hadoop from any source for Telco oper...
Apache Flume - Streaming data easily to Hadoop from any source for Telco oper...
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web Development
 
070416 Egu Vienna Husar
070416 Egu Vienna Husar070416 Egu Vienna Husar
070416 Egu Vienna Husar
 

More from Phil Leggetter

More from Phil Leggetter (20)

An Introduction to AAARRRP: A framework for Defining Your Developer Relations...
An Introduction to AAARRRP: A framework for Defining Your Developer Relations...An Introduction to AAARRRP: A framework for Defining Your Developer Relations...
An Introduction to AAARRRP: A framework for Defining Your Developer Relations...
 
How APIs Enable Contextual Communications
How APIs Enable Contextual CommunicationsHow APIs Enable Contextual Communications
How APIs Enable Contextual Communications
 
An Introduction to the AAARRRP Developer Relations Strategy Framework and How...
An Introduction to the AAARRRP Developer Relations Strategy Framework and How...An Introduction to the AAARRRP Developer Relations Strategy Framework and How...
An Introduction to the AAARRRP Developer Relations Strategy Framework and How...
 
An Introduction to the AAARRRP Developer Relations Strategy Framework and How...
An Introduction to the AAARRRP Developer Relations Strategy Framework and How...An Introduction to the AAARRRP Developer Relations Strategy Framework and How...
An Introduction to the AAARRRP Developer Relations Strategy Framework and How...
 
Contextual Communications: What, Why and How? Bristol JS
Contextual Communications: What, Why and How? Bristol JSContextual Communications: What, Why and How? Bristol JS
Contextual Communications: What, Why and How? Bristol JS
 
What's the ROI of Developer Relations?
What's the ROI of Developer Relations?What's the ROI of Developer Relations?
What's the ROI of Developer Relations?
 
Real-Time Web Apps & Symfony. What are your options?
Real-Time Web Apps & Symfony. What are your options?Real-Time Web Apps & Symfony. What are your options?
Real-Time Web Apps & Symfony. What are your options?
 
Why You Should be Using Web Components Right Now. And How. ForwardJS July 2015
Why You Should be Using Web Components Right Now. And How. ForwardJS July 2015Why You Should be Using Web Components Right Now. And How. ForwardJS July 2015
Why You Should be Using Web Components Right Now. And How. ForwardJS July 2015
 
Real-Time Web Apps in 2015 & Beyond
Real-Time Web Apps in 2015 & BeyondReal-Time Web Apps in 2015 & Beyond
Real-Time Web Apps in 2015 & Beyond
 
Why you should be using Web Components. And How - DevWeek 2015
Why you should be using Web Components. And How - DevWeek 2015Why you should be using Web Components. And How - DevWeek 2015
Why you should be using Web Components. And How - DevWeek 2015
 
Patterns and practices for building enterprise-scale HTML5 apps
Patterns and practices for building enterprise-scale HTML5 appsPatterns and practices for building enterprise-scale HTML5 apps
Patterns and practices for building enterprise-scale HTML5 apps
 
Fed London - January 2015
Fed London - January 2015Fed London - January 2015
Fed London - January 2015
 
How to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that ScaleHow to Build Single Page HTML5 Apps that Scale
How to Build Single Page HTML5 Apps that Scale
 
BladeRunnerJS Show & Tell
BladeRunnerJS Show & TellBladeRunnerJS Show & Tell
BladeRunnerJS Show & Tell
 
Testing Ginormous JavaScript Apps - ScotlandJS 2014
Testing Ginormous JavaScript Apps - ScotlandJS 2014Testing Ginormous JavaScript Apps - ScotlandJS 2014
Testing Ginormous JavaScript Apps - ScotlandJS 2014
 
How to Build Front-End Web Apps that Scale - FutureJS
How to Build Front-End Web Apps that Scale - FutureJSHow to Build Front-End Web Apps that Scale - FutureJS
How to Build Front-End Web Apps that Scale - FutureJS
 
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014
 
Building front-end apps that Scale - FOSDEM 2014
Building front-end apps that Scale - FOSDEM 2014Building front-end apps that Scale - FOSDEM 2014
Building front-end apps that Scale - FOSDEM 2014
 
What Developers Want - Developers Want Realtime - BAPI 2012
What Developers Want - Developers Want Realtime - BAPI 2012What Developers Want - Developers Want Realtime - BAPI 2012
What Developers Want - Developers Want Realtime - BAPI 2012
 
How the Realtime Web is influencing the future of communications
How the Realtime Web is influencing the future of communicationsHow the Realtime Web is influencing the future of communications
How the Realtime Web is influencing the future of communications
 

Recently uploaded

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Recently uploaded (20)

Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 

The Past, Present and Future of Real-Time Apps and Communications