SlideShare a Scribd company logo
1 of 33
Download to read offline
Real-Time Web Programming
with Vortex-Web
Angelo	
  Corsaro,	
  PhD	
  
Chief	
  Technology	
  Officer	
  
angelo.corsaro@prismtech.com
Vortex
CopyrightPrismTech,2014
The Vortex Platform
Vortex enable seamless,
ubiquitous, efficient and
timely data sharing across
mobile, embedded,
desktop, cloud and web
applications
CopyrightPrismTech,2014
One Standard, One set of Tools, One Goal — Ubiquitous Data Sharing
The Vortex Platform
VORTEX
Web
VORTEX
Lite
VORTEX
Gateway
VORTEX
Cloud
Private
Clouds
VORTEX
Tools
• Insight	
  
• Record/Replay	
  
• Tuner	
  
• Tester	
  
• Configurator
OpenSplice
Enterprise
VORTEX
Café
Vortex Web
CopyrightPrismTech,2014
• A JavaScript DDS API to provide HTML5/
JavaScript applications with a high-level
communication abstraction
• Vortex Web exploits HTML5 features, such as web-
sockets and web-workers, to provide time and
space efficient Web-App to Cloud communication
Vortex Web
DDS#API JavaScript
Browser#/#Node.js
CoffeeScript
CopyrightPrismTech,2014
Client Side (dds.js): JavaScript/
CoffeeScript framework that
provides DDS abstractions
Server Side (vortex-web): A
Router that transparently
bridges data between matching
DDS entities, e.g. Browser-2-
Browser, DDS-2-Browser and
Browser-2-DDS
Vortex Web
TopicA
TopicB
TopicC
TopicD
QoS
QoS
QoS
QoS
Data
Reader
Data
Reader
Data
Writer
Data
Writer
dds.js
dds.js
dds.js
v-web
v-web
CopyrightPrismTech,2014
Vortex-Web takes advantage of HTML5 WebSockets as well as Web Workers
WebSockets are used for both the control as well as the data plane
Web Workers are used to decouple I/O from processing (recall that a JS context is
single-threaded)
Client-Side Architecture
CopyrightPrismTech,2014
Architecture
Control-­‐Link.js
Send-­‐Link.js
Recv-­‐Link.js
dds-­‐runtime.js
dds.js
main	
  worker	
  
(or	
  window	
  context)
worker	
  
worker	
  
worker	
  
worker	
  
Vortex-­‐Web	
  Server
control-­‐protocol
data	
  (from	
  browser)
data	
  (to	
  browser)
CopyrightPrismTech,2014
Vortex-Web can be deployed to simply provide access to a “regular” DDS system
or to extend Vortex-Cloud with JavaScript support
In general, you should think of Vortex-Web as an add-on to either a regular or a
Vortex-Cloud DDS system
Vortex-Web takes advantage of DDS to support fault-tolerance and load-
balancin.
Vortex Web Deployment
CopyrightPrismTech,2014
Multiple instances can be deployed
on a single system to provide fault-
tolerance as well as to help in
partitioning the load
The switch-over between instances
is dealt-with by the dds.js library
Traditional System Deployment
TopicA
TopicB
TopicC
TopicD
QoS
QoS
QoS
QoS
Data
Reader
Data
Reader
Data
Writer
Data
Writer
dds.js
dds.js
dds.js
v-web
v-web
CopyrightPrismTech,2014
Multiple instances can be deployed on
the same IaaS platform sa Vortex-
Cloud provide fault-tolerance as well
as to help in partitioning the front-end
load
The switch-over between instances is
dealt-with by the dds.js library
Cloud Based Deployment
VORTEX
Cloud
IaaSserver-­‐side
dds.js
dds.js
dds.js
dds.js Overview
CopyrightPrismTech,2014
Runtime
var runtime = new dds.runtime.Runtime();!
runtime.connect(server, authToken);
runtime = new dds.runtime.Runtime();!
runtime.connect(server, authToken);
JavaScript
CoffeeScript
var runtime = new dds.runtime.Runtime()!
runtime.connect(“ws://88.77.66.55:9876”, “albator:corsaire”);
Example:
Example:
runtime = new dds.runtime.Runtime()!
runtime.connect(“ws://88.77.66.55:9876”, “albator:corsaire”);
CopyrightPrismTech,2014
Topic
topic = new dds.Topic(0, 'Cell', 'com.activefloor.Cell')
var myTopic = new dds.Topic(domainID, topicName, topicType);
myTopic = new dds.Topic(domainID, topicName, topicType)
JavaScript
CoffeeScript
var topic = new dds.Topic(0, 'Cell', 'com.activefloor.Cell');
Example:
Example:
CopyrightPrismTech,2014
DataWriter
dw = new dds.DataWriter(runtime, topic, qos) !
!
cell = {}!
cell.x = 3!
cell.y = 5!
cell.pressure = 3!
!
dw.write(cell)
dw = new dds.DataWriter(runtime, topic, qos)
CoffeeScript
Example:
CopyrightPrismTech,2014
DataReader
dr = new dds.DataReader(runtime, topic, qos) !
dr = new dds.DataReader(runtime, topic, qos)
CoffeeScript
Example:
CopyrightPrismTech,2014
A DataReader can be bound to a user provided function that will handle
incoming data or to a cache
Notice, that as you are in control of how data-readers are bound to cache you
can be very creative
Binding a DataReader
CopyrightPrismTech,2014
Binding to User Function
dr.addListener((s) -> console.log(JSON.stringify(s)))!
dr.addListener(f)
CoffeeScript
Example:
CopyrightPrismTech,2014
Binding to a Cache
// Binding!
bindCell = dds.bind((s) -> s.x + “-” + s.y)!
ccache = new DataCache(historyDepth)!
bindCell(ccache, cdr)!
!
// Working with the Cache: Compute number of active cells!
!
activeCells = ccache.map((c) -> if (c.pressure > p0) then 1 else 0).fold(0)((a, c) ->
a + c)!
!
!
cache = new DataCache(historyDepth)!
bind(keyMapper)(dr, cache)
CoffeeScript
Example:
CopyrightPrismTech,2014
DataCache Operations
# Writes a data sample into the cache corresponding to the key k !
write: (k, data)!
!
# Returns a list representing the content of the cache ordered by key.!
read()!
!
# Returns a list representing the last sample for each key!
readLast()!
!
# Returns a list representing the content of the cache ordered by key. !
# The data is actually removed from the cache.!
take()!
!
# Returns a list representing the last sample for each key!
# The data is actually removed from the cache.!
takeLast()
CopyrightPrismTech,2014
DataCache Operations
# Returns a list representing the content of the cache that matches for given predicate.!
# The data is actually removed from the cache.!
takeWithFilter(p)!
!
# Returns Some(v) if a value associated to the key k exists. Otherwise it returns None!
get: (k)!
!
# Returns Some(v) if a value associated to the key k exists. Otherwise it returns f()!
getOrElse(k, f)!
!
# Clear the content of the cache.!
clear()!
CopyrightPrismTech,2014
DataCache Operations
# Returns a new DataCache whose content is obtained by applying the function!
# f to each element of the cache!
map(f)!
!
# Executes the function f on each element of the cache!
forEach(f)!
!
# Executes the function f only on the first n samples associated with a key!
forEachN(f, n)!
!
# Returns the element of the cache that match the predicate p!
filter(p)!
!
# Returns the element of the cache that do not match the predicate p!
filterNot(p)
CopyrightPrismTech,2014
DataCache Operations
# Folds the content of the data cache using z as “zero” for the folding function f!
# For instance, assuming that the operator “+” is defined for the elements of !
# the cache, then you could compute the sum of all elements doing:!
# c.fold(0)((a, v) -> a + v)!
# the product by: !
# c.fold(1)((a, v) -> a * v)!
# a comma separated string representation of the content:!
# c.fold(“”)(a, v) -> a + “, “ + v!
fold(z)(f) !
!
# Register a listener l to be notified whenever data which matches a !
# predicate p is written into the cache. If no predicate is provided !
# then the listeners is always notified upon data insertion.!
addListener(l, p)!
!
Hacking Time!
CopyrightPrismTech,2014
Let’s see the steps required
to build a Web Chat that
may look like this
But before let’s play with it
a bit
Web Chat
http://bit.ly/vortex-web-chat
CopyrightPrismTech,2014
The Chat CoffeeScript
#	
  Create	
  useful	
  alias	
  for	
  coffez	
  and	
  jQuery	
  
root	
  =	
  this	
  
z_	
  =	
  coffez	
  
$	
  =	
  jQuery	
  
!
server	
  =	
  “ws://demo-­‐eu.prismtech.com:9999"	
  
!
#	
  The	
  post	
  type	
  used	
  by	
  the	
  chat	
  application	
  
class	
  Post	
  
	
  	
  constructor:	
  (@name,	
  @msg)	
  -­‐>	
  
!
#	
  Create	
  the	
  runtime	
  
runtime	
  =	
  new	
  dds.runtime.Runtime()	
  
!
#	
  Define	
  the	
  Post	
  topic	
  used	
  to	
  send	
  and	
  receive	
  chat	
  posts	
  
postTopic	
  =	
  new	
  dds.Topic(0,	
  	
  "Post")	
  
!
#	
  Define	
  the	
  QoS	
  for	
  the	
  DataReader/Writer	
  
drQos	
  =	
  new	
  dds.DataReaderQos(dds.Reliability.Reliable)	
  
dwQos	
  =	
  new	
  dds.DataWriterQos(dds.Reliability.Reliable)	
  
CopyrightPrismTech,2014
The Chat CoffeeScriptpostReader	
  =	
  z_.None	
  
postWriter	
  =	
  z_.None	
  
!
avatar	
  =	
  "avatar"	
  +	
  Math.floor((Math.random()	
  *	
  10000)	
  +	
  1);	
  
!
#	
  Add	
  post	
  to	
  the	
  chat	
  and	
  format	
  it	
  to	
  show	
  it	
  is	
  from	
  me	
  
createMyPost	
  =	
  (post)	
  -­‐>	
  ...	
  	
  
!
#	
  Add	
  post	
  to	
  the	
  chat	
  and	
  format	
  it	
  to	
  show	
  it	
  is	
  from	
  others	
  
createOtherPost	
  =	
  (post)	
  -­‐>	
  ...	
  	
  
!
#	
  Add	
  post	
  to	
  the	
  chat	
  and	
  format	
  it	
  to	
  show	
  it	
  is	
  from	
  others	
  
processPost	
  =	
  ()	
  -­‐>	
  
	
  	
  msg	
  =	
  $("#ChatMessage").val()	
  
	
  	
  post	
  =	
  new	
  Post(avatar,	
  msg)	
  
	
  	
  #	
  Publish	
  the	
  post	
  (notice	
  that	
  postWriter	
  is	
  an	
  Option	
  Monad)	
  
	
  	
  #	
  Take	
  a	
  look	
  at	
  (http://en.wikibooks.org/wiki/Haskell/Understanding_monads/Maybe)	
  
	
  	
  #	
  or	
  (http://www.scala-­‐lang.org/api/2.11.0/index.html#scala.Option)	
  
	
  	
  postWriter.map((dw)	
  -­‐>	
  dw.write(post))	
  
	
  	
  $("#ChatMessageList").append(createMyPost(post))	
  
	
  	
  $("#ChatMessage").val("")	
  
!
CopyrightPrismTech,2014
The Chat CoffeeScript
#	
  Deal	
  with	
  click	
  and	
  keys	
  events…	
  
!
$("#ChatMessage").keyup(	
  
	
  	
  	
  	
  (e)	
  -­‐>	
  
	
  	
  	
  	
  	
  	
  if(e.keyCode	
  is	
  13)	
  then	
  processPost()	
  
)	
  
!
!
$("#SendMsgButton").click(	
  
	
  	
  (evt)	
  -­‐>	
  
	
  	
  	
  	
  console.log("Send	
  Button	
  has	
  been	
  clicked")	
  
	
  	
  	
  	
  processPost()	
  
)	
  
!
$("#SelectAvatarButton").click(	
  
	
  	
  (evt)	
  -­‐>	
  
	
  	
  	
  	
  s	
  =	
  $("#AvatarName").val()	
  
	
  	
  	
  	
  if	
  (s	
  isnt	
  "")	
  
	
  	
  	
  	
  	
  	
  avatar	
  =	
  s	
  
)	
  
CopyrightPrismTech,2014
The Chat CoffeeScript
#	
  Handle	
  the	
  runtime	
  onconnect	
  event	
  
runtime.onconnect	
  =	
  ()	
  -­‐>	
  
	
  	
  #	
  Create	
  DataReader	
  and	
  DataWriter	
  for	
  our	
  posts	
  
	
  	
  dr	
  =	
  new	
  dds.DataReader(runtime,	
  postTopic,	
  drQos)	
  
	
  	
  dw	
  =	
  new	
  dds.DataWriter(runtime,	
  postTopic,	
  dwQos)	
  
!
	
  	
  #	
  Register	
  a	
  listener	
  with	
  the	
  data	
  reader	
  to	
  post	
  messages	
  	
  
	
  	
  #	
  in	
  our	
  chat	
  
	
  	
  dr.addListener(	
  
	
  	
  	
  	
  (post)	
  -­‐>	
  
	
  	
  	
  	
  	
  	
  if	
  (post.name	
  isnt	
  avatar)	
  
	
  	
  	
  	
  	
  	
  	
  	
  $("#ChatMessageList").append(createOtherPost(post)))	
  
	
  	
  postReader	
  =	
  z_.Some(dr)	
  
	
  	
  postWriter	
  =	
  z_.Some(dw)	
  
!
connectRuntime	
  =	
  ()	
  -­‐>	
  
	
  	
  $("#AvatarName").val(avatar)	
  
	
  	
  runtime.connect(server,	
  "uid:pwd")	
  
!
$(document).ready(()	
  -­‐>	
  connectRuntime())	
  
CopyrightPrismTech,2014
Only ~10 lines code for implementing the communication required by a chat
application!
Content filtering could be used to further simplify the application and reduce
number of lines of code, i.e. avoid the check on the origin of the message to
avoid duplicate posts
In Summary
CopyrightPrismTech,2014
Vortex-Web makes is very simple to develop peer-to-peer real-time web
applications
Through the Vortex Platform, Vortex-Web application can share data seamlessly
with any device!
Concluding Remarks
CopyrightPrismTech,2014
Vortex v1.0 will be available in June 2014
Starting from May will be providing a series of webcasts to get you
started in building IoT and I2 applications with Vortex
What’s Next?

More Related Content

What's hot

Vortex: The Intelligent Data Sharing Platform for the Internet of Things
Vortex: The Intelligent Data Sharing Platform for the Internet of ThingsVortex: The Intelligent Data Sharing Platform for the Internet of Things
Vortex: The Intelligent Data Sharing Platform for the Internet of ThingsAngelo Corsaro
 
Getting Started in DDS with C++ and Java
Getting Started in DDS with C++ and JavaGetting Started in DDS with C++ and Java
Getting Started in DDS with C++ and JavaAngelo Corsaro
 
Building Reactive Applications with DDS
Building Reactive Applications with DDSBuilding Reactive Applications with DDS
Building Reactive Applications with DDSAngelo Corsaro
 
DDS and OPC UA Explained
DDS and OPC UA ExplainedDDS and OPC UA Explained
DDS and OPC UA ExplainedAngelo Corsaro
 
The DDS Tutorial - Part I
The DDS Tutorial - Part IThe DDS Tutorial - Part I
The DDS Tutorial - Part IAngelo Corsaro
 
DDS-XRCE (Extremely Resource Constrained Environments)
DDS-XRCE (Extremely Resource Constrained Environments)DDS-XRCE (Extremely Resource Constrained Environments)
DDS-XRCE (Extremely Resource Constrained Environments)Gerardo Pardo-Castellote
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service TutorialAngelo Corsaro
 
Architecting IoT Systems with Vortex
Architecting IoT Systems with VortexArchitecting IoT Systems with Vortex
Architecting IoT Systems with VortexAngelo Corsaro
 
Introducing Vortex Lite
Introducing Vortex LiteIntroducing Vortex Lite
Introducing Vortex LiteAngelo Corsaro
 
zenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computezenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computeAngelo Corsaro
 
Micro services Architecture with Vortex -- Part I
Micro services Architecture with Vortex -- Part IMicro services Architecture with Vortex -- Part I
Micro services Architecture with Vortex -- Part IAngelo Corsaro
 
The DDS Tutorial Part II
The DDS Tutorial Part IIThe DDS Tutorial Part II
The DDS Tutorial Part IIAngelo Corsaro
 
Getting Started with Vortex
Getting Started with VortexGetting Started with Vortex
Getting Started with VortexAngelo Corsaro
 
A Gentle Introduction to OpenSplice DDS
A Gentle Introduction to OpenSplice DDSA Gentle Introduction to OpenSplice DDS
A Gentle Introduction to OpenSplice DDSAngelo Corsaro
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service TutorialAngelo Corsaro
 

What's hot (20)

Vortex: The Intelligent Data Sharing Platform for the Internet of Things
Vortex: The Intelligent Data Sharing Platform for the Internet of ThingsVortex: The Intelligent Data Sharing Platform for the Internet of Things
Vortex: The Intelligent Data Sharing Platform for the Internet of Things
 
Getting Started in DDS with C++ and Java
Getting Started in DDS with C++ and JavaGetting Started in DDS with C++ and Java
Getting Started in DDS with C++ and Java
 
Building Reactive Applications with DDS
Building Reactive Applications with DDSBuilding Reactive Applications with DDS
Building Reactive Applications with DDS
 
DDS and OPC UA Explained
DDS and OPC UA ExplainedDDS and OPC UA Explained
DDS and OPC UA Explained
 
DDS In Action Part II
DDS In Action Part IIDDS In Action Part II
DDS In Action Part II
 
The DDS Tutorial - Part I
The DDS Tutorial - Part IThe DDS Tutorial - Part I
The DDS Tutorial - Part I
 
DDS-XRCE (Extremely Resource Constrained Environments)
DDS-XRCE (Extremely Resource Constrained Environments)DDS-XRCE (Extremely Resource Constrained Environments)
DDS-XRCE (Extremely Resource Constrained Environments)
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
 
Architecting IoT Systems with Vortex
Architecting IoT Systems with VortexArchitecting IoT Systems with Vortex
Architecting IoT Systems with Vortex
 
DDS QoS Unleashed
DDS QoS UnleashedDDS QoS Unleashed
DDS QoS Unleashed
 
Introducing Vortex Lite
Introducing Vortex LiteIntroducing Vortex Lite
Introducing Vortex Lite
 
zenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computezenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query compute
 
Micro services Architecture with Vortex -- Part I
Micro services Architecture with Vortex -- Part IMicro services Architecture with Vortex -- Part I
Micro services Architecture with Vortex -- Part I
 
The DDS Tutorial Part II
The DDS Tutorial Part IIThe DDS Tutorial Part II
The DDS Tutorial Part II
 
Vortex Cloud Beyond Cloud Messaging
Vortex Cloud Beyond Cloud MessagingVortex Cloud Beyond Cloud Messaging
Vortex Cloud Beyond Cloud Messaging
 
Getting Started with Vortex
Getting Started with VortexGetting Started with Vortex
Getting Started with Vortex
 
A Gentle Introduction to OpenSplice DDS
A Gentle Introduction to OpenSplice DDSA Gentle Introduction to OpenSplice DDS
A Gentle Introduction to OpenSplice DDS
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
 
DDS Made Simple
DDS Made SimpleDDS Made Simple
DDS Made Simple
 
DDS Security
DDS SecurityDDS Security
DDS Security
 

Viewers also liked

Vortex Tutorial Part II
Vortex Tutorial Part IIVortex Tutorial Part II
Vortex Tutorial Part IIAngelo Corsaro
 
Advanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part IAdvanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part IAngelo Corsaro
 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEPAngelo Corsaro
 
Getting Started with OpenSplice DDS Community Ed.
Getting Started with OpenSplice DDS Community Ed.Getting Started with OpenSplice DDS Community Ed.
Getting Started with OpenSplice DDS Community Ed.Angelo Corsaro
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAngelo Corsaro
 
20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice NewbiesAngelo Corsaro
 
DDS on the Web: Quick Recipes for Real-Time Web Applications
DDS on the Web: Quick Recipes for Real-Time Web ApplicationsDDS on the Web: Quick Recipes for Real-Time Web Applications
DDS on the Web: Quick Recipes for Real-Time Web ApplicationsAngelo Corsaro
 
Charlotte, Ben And Chisanga
Charlotte, Ben And ChisangaCharlotte, Ben And Chisanga
Charlotte, Ben And Chisangaguest7dd83
 
Raspberry PiとActiveMQで作るセンサーライト
Raspberry PiとActiveMQで作るセンサーライトRaspberry PiとActiveMQで作るセンサーライト
Raspberry PiとActiveMQで作るセンサーライトTakayuki Konishi
 
Formación en centro 15 16
Formación en centro 15 16Formación en centro 15 16
Formación en centro 15 16XXX XXX
 
Visualizing Differential Equations
Visualizing Differential EquationsVisualizing Differential Equations
Visualizing Differential Equationspd3h
 
Elaboración jabón 2016
Elaboración jabón 2016Elaboración jabón 2016
Elaboración jabón 2016XXX XXX
 
Sunshine coast admin
Sunshine coast adminSunshine coast admin
Sunshine coast adminFaye Brownlie
 

Viewers also liked (17)

Vortex Tutorial Part II
Vortex Tutorial Part IIVortex Tutorial Part II
Vortex Tutorial Part II
 
Advanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part IAdvanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part I
 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEP
 
Getting Started with OpenSplice DDS Community Ed.
Getting Started with OpenSplice DDS Community Ed.Getting Started with OpenSplice DDS Community Ed.
Getting Started with OpenSplice DDS Community Ed.
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part II
 
OpenSplice DDS v6
OpenSplice DDS v6OpenSplice DDS v6
OpenSplice DDS v6
 
20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies
 
DDS on the Web: Quick Recipes for Real-Time Web Applications
DDS on the Web: Quick Recipes for Real-Time Web ApplicationsDDS on the Web: Quick Recipes for Real-Time Web Applications
DDS on the Web: Quick Recipes for Real-Time Web Applications
 
DDS Web Enabled
DDS Web EnabledDDS Web Enabled
DDS Web Enabled
 
Charlotte, Ben And Chisanga
Charlotte, Ben And ChisangaCharlotte, Ben And Chisanga
Charlotte, Ben And Chisanga
 
MRLC MR/SR Oct 2016
MRLC MR/SR Oct 2016MRLC MR/SR Oct 2016
MRLC MR/SR Oct 2016
 
Raspberry PiとActiveMQで作るセンサーライト
Raspberry PiとActiveMQで作るセンサーライトRaspberry PiとActiveMQで作るセンサーライト
Raspberry PiとActiveMQで作るセンサーライト
 
Formación en centro 15 16
Formación en centro 15 16Formación en centro 15 16
Formación en centro 15 16
 
Recent work
Recent workRecent work
Recent work
 
Visualizing Differential Equations
Visualizing Differential EquationsVisualizing Differential Equations
Visualizing Differential Equations
 
Elaboración jabón 2016
Elaboración jabón 2016Elaboración jabón 2016
Elaboración jabón 2016
 
Sunshine coast admin
Sunshine coast adminSunshine coast admin
Sunshine coast admin
 

Similar to Building Real-Time Web Applications with Vortex-Web

Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineRicardo Silva
 
HTML5 vs Silverlight
HTML5 vs SilverlightHTML5 vs Silverlight
HTML5 vs SilverlightMatt Casto
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.Mike Brevoort
 
Building Ruby on Rails apps on Windows Azure (MIX 2010 at Last Vegas))
Building Ruby on Rails apps on Windows Azure (MIX 2010 at Last Vegas))Building Ruby on Rails apps on Windows Azure (MIX 2010 at Last Vegas))
Building Ruby on Rails apps on Windows Azure (MIX 2010 at Last Vegas))Sriram Krishnan
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceSven Ruppert
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerOrtus Solutions, Corp
 
Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Ortus Solutions, Corp
 
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....Patrick Lauke
 
Get Ahead with HTML5 on Moible
Get Ahead with HTML5 on MoibleGet Ahead with HTML5 on Moible
Get Ahead with HTML5 on Moiblemarkuskobler
 
Brave new world of HTML5
Brave new world of HTML5Brave new world of HTML5
Brave new world of HTML5Chris Mills
 
webinale2011_Chris Mills_Brave new world of HTML5Html5
webinale2011_Chris Mills_Brave new world of HTML5Html5webinale2011_Chris Mills_Brave new world of HTML5Html5
webinale2011_Chris Mills_Brave new world of HTML5Html5smueller_sandsmedia
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backendDavid Padbury
 
Container (Docker) Orchestration Tools
Container (Docker) Orchestration ToolsContainer (Docker) Orchestration Tools
Container (Docker) Orchestration ToolsDhilipsiva DS
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applicationsTom Croucher
 
Speak the Web 15.02.2010
Speak the Web 15.02.2010Speak the Web 15.02.2010
Speak the Web 15.02.2010Patrick Lauke
 
Azure Bootcamp 2016 - Docker Orchestration on Azure with Rancher
Azure Bootcamp 2016 - Docker Orchestration on Azure with RancherAzure Bootcamp 2016 - Docker Orchestration on Azure with Rancher
Azure Bootcamp 2016 - Docker Orchestration on Azure with RancherKarim Vaes
 
Realtime Streaming using Autobahn Websockets
Realtime Streaming using Autobahn WebsocketsRealtime Streaming using Autobahn Websockets
Realtime Streaming using Autobahn WebsocketsTom Sheffler
 
Terrastore - A document database for developers
Terrastore - A document database for developersTerrastore - A document database for developers
Terrastore - A document database for developersSergio Bossa
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Sadaaki HIRAI
 

Similar to Building Real-Time Web Applications with Vortex-Web (20)

Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 Engine
 
HTML5 vs Silverlight
HTML5 vs SilverlightHTML5 vs Silverlight
HTML5 vs Silverlight
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
 
Building Ruby on Rails apps on Windows Azure (MIX 2010 at Last Vegas))
Building Ruby on Rails apps on Windows Azure (MIX 2010 at Last Vegas))Building Ruby on Rails apps on Windows Azure (MIX 2010 at Last Vegas))
Building Ruby on Rails apps on Windows Azure (MIX 2010 at Last Vegas))
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-Persistence
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and docker
 
Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018
 
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
HTML5 (and friends) - History, overview and current status - jsDay Verona 11....
 
Get Ahead with HTML5 on Moible
Get Ahead with HTML5 on MoibleGet Ahead with HTML5 on Moible
Get Ahead with HTML5 on Moible
 
Brave new world of HTML5
Brave new world of HTML5Brave new world of HTML5
Brave new world of HTML5
 
webinale2011_Chris Mills_Brave new world of HTML5Html5
webinale2011_Chris Mills_Brave new world of HTML5Html5webinale2011_Chris Mills_Brave new world of HTML5Html5
webinale2011_Chris Mills_Brave new world of HTML5Html5
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
 
Container (Docker) Orchestration Tools
Container (Docker) Orchestration ToolsContainer (Docker) Orchestration Tools
Container (Docker) Orchestration Tools
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
Speak the Web 15.02.2010
Speak the Web 15.02.2010Speak the Web 15.02.2010
Speak the Web 15.02.2010
 
Azure Bootcamp 2016 - Docker Orchestration on Azure with Rancher
Azure Bootcamp 2016 - Docker Orchestration on Azure with RancherAzure Bootcamp 2016 - Docker Orchestration on Azure with Rancher
Azure Bootcamp 2016 - Docker Orchestration on Azure with Rancher
 
Realtime Streaming using Autobahn Websockets
Realtime Streaming using Autobahn WebsocketsRealtime Streaming using Autobahn Websockets
Realtime Streaming using Autobahn Websockets
 
Terrastore - A document database for developers
Terrastore - A document database for developersTerrastore - A document database for developers
Terrastore - A document database for developers
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
 

More from Angelo Corsaro

zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data FabricAngelo Corsaro
 
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationData Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationAngelo Corsaro
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolAngelo Corsaro
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolAngelo Corsaro
 
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingBreaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingAngelo Corsaro
 
fog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructurefog05: The Fog Computing Infrastructure
fog05: The Fog Computing InfrastructureAngelo Corsaro
 
Cyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeCyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeAngelo Corsaro
 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing PlatformAngelo Corsaro
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture FourAngelo Corsaro
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture ThreeAngelo Corsaro
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture TwoAngelo Corsaro
 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture OneAngelo Corsaro
 
Data Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsData Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsAngelo Corsaro
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution ServiceAngelo Corsaro
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsAngelo Corsaro
 
Vortex II -- The Industrial IoT Connectivity Standard
Vortex II -- The  Industrial IoT  Connectivity StandardVortex II -- The  Industrial IoT  Connectivity Standard
Vortex II -- The Industrial IoT Connectivity StandardAngelo Corsaro
 

More from Angelo Corsaro (20)

Zenoh: The Genesis
Zenoh: The GenesisZenoh: The Genesis
Zenoh: The Genesis
 
zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data Fabric
 
Zenoh Tutorial
Zenoh TutorialZenoh Tutorial
Zenoh Tutorial
 
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationData Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
 
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingBreaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
 
Eastern Sicily
Eastern SicilyEastern Sicily
Eastern Sicily
 
fog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructurefog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructure
 
Cyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeCyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT Age
 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing Platform
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture Four
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture Three
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture One
 
Data Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsData Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained Envionrments
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming Ruminations
 
Vortex II -- The Industrial IoT Connectivity Standard
Vortex II -- The  Industrial IoT  Connectivity StandardVortex II -- The  Industrial IoT  Connectivity Standard
Vortex II -- The Industrial IoT Connectivity Standard
 
Fog Computing Defined
Fog Computing DefinedFog Computing Defined
Fog Computing Defined
 

Recently uploaded

08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Recently uploaded (20)

08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Building Real-Time Web Applications with Vortex-Web

  • 1. Real-Time Web Programming with Vortex-Web Angelo  Corsaro,  PhD   Chief  Technology  Officer   angelo.corsaro@prismtech.com
  • 3. CopyrightPrismTech,2014 The Vortex Platform Vortex enable seamless, ubiquitous, efficient and timely data sharing across mobile, embedded, desktop, cloud and web applications
  • 4. CopyrightPrismTech,2014 One Standard, One set of Tools, One Goal — Ubiquitous Data Sharing The Vortex Platform VORTEX Web VORTEX Lite VORTEX Gateway VORTEX Cloud Private Clouds VORTEX Tools • Insight   • Record/Replay   • Tuner   • Tester   • Configurator OpenSplice Enterprise VORTEX Café
  • 6. CopyrightPrismTech,2014 • A JavaScript DDS API to provide HTML5/ JavaScript applications with a high-level communication abstraction • Vortex Web exploits HTML5 features, such as web- sockets and web-workers, to provide time and space efficient Web-App to Cloud communication Vortex Web DDS#API JavaScript Browser#/#Node.js CoffeeScript
  • 7. CopyrightPrismTech,2014 Client Side (dds.js): JavaScript/ CoffeeScript framework that provides DDS abstractions Server Side (vortex-web): A Router that transparently bridges data between matching DDS entities, e.g. Browser-2- Browser, DDS-2-Browser and Browser-2-DDS Vortex Web TopicA TopicB TopicC TopicD QoS QoS QoS QoS Data Reader Data Reader Data Writer Data Writer dds.js dds.js dds.js v-web v-web
  • 8. CopyrightPrismTech,2014 Vortex-Web takes advantage of HTML5 WebSockets as well as Web Workers WebSockets are used for both the control as well as the data plane Web Workers are used to decouple I/O from processing (recall that a JS context is single-threaded) Client-Side Architecture
  • 9. CopyrightPrismTech,2014 Architecture Control-­‐Link.js Send-­‐Link.js Recv-­‐Link.js dds-­‐runtime.js dds.js main  worker   (or  window  context) worker   worker   worker   worker   Vortex-­‐Web  Server control-­‐protocol data  (from  browser) data  (to  browser)
  • 10. CopyrightPrismTech,2014 Vortex-Web can be deployed to simply provide access to a “regular” DDS system or to extend Vortex-Cloud with JavaScript support In general, you should think of Vortex-Web as an add-on to either a regular or a Vortex-Cloud DDS system Vortex-Web takes advantage of DDS to support fault-tolerance and load- balancin. Vortex Web Deployment
  • 11. CopyrightPrismTech,2014 Multiple instances can be deployed on a single system to provide fault- tolerance as well as to help in partitioning the load The switch-over between instances is dealt-with by the dds.js library Traditional System Deployment TopicA TopicB TopicC TopicD QoS QoS QoS QoS Data Reader Data Reader Data Writer Data Writer dds.js dds.js dds.js v-web v-web
  • 12. CopyrightPrismTech,2014 Multiple instances can be deployed on the same IaaS platform sa Vortex- Cloud provide fault-tolerance as well as to help in partitioning the front-end load The switch-over between instances is dealt-with by the dds.js library Cloud Based Deployment VORTEX Cloud IaaSserver-­‐side dds.js dds.js dds.js
  • 14. CopyrightPrismTech,2014 Runtime var runtime = new dds.runtime.Runtime();! runtime.connect(server, authToken); runtime = new dds.runtime.Runtime();! runtime.connect(server, authToken); JavaScript CoffeeScript var runtime = new dds.runtime.Runtime()! runtime.connect(“ws://88.77.66.55:9876”, “albator:corsaire”); Example: Example: runtime = new dds.runtime.Runtime()! runtime.connect(“ws://88.77.66.55:9876”, “albator:corsaire”);
  • 15. CopyrightPrismTech,2014 Topic topic = new dds.Topic(0, 'Cell', 'com.activefloor.Cell') var myTopic = new dds.Topic(domainID, topicName, topicType); myTopic = new dds.Topic(domainID, topicName, topicType) JavaScript CoffeeScript var topic = new dds.Topic(0, 'Cell', 'com.activefloor.Cell'); Example: Example:
  • 16. CopyrightPrismTech,2014 DataWriter dw = new dds.DataWriter(runtime, topic, qos) ! ! cell = {}! cell.x = 3! cell.y = 5! cell.pressure = 3! ! dw.write(cell) dw = new dds.DataWriter(runtime, topic, qos) CoffeeScript Example:
  • 17. CopyrightPrismTech,2014 DataReader dr = new dds.DataReader(runtime, topic, qos) ! dr = new dds.DataReader(runtime, topic, qos) CoffeeScript Example:
  • 18. CopyrightPrismTech,2014 A DataReader can be bound to a user provided function that will handle incoming data or to a cache Notice, that as you are in control of how data-readers are bound to cache you can be very creative Binding a DataReader
  • 19. CopyrightPrismTech,2014 Binding to User Function dr.addListener((s) -> console.log(JSON.stringify(s)))! dr.addListener(f) CoffeeScript Example:
  • 20. CopyrightPrismTech,2014 Binding to a Cache // Binding! bindCell = dds.bind((s) -> s.x + “-” + s.y)! ccache = new DataCache(historyDepth)! bindCell(ccache, cdr)! ! // Working with the Cache: Compute number of active cells! ! activeCells = ccache.map((c) -> if (c.pressure > p0) then 1 else 0).fold(0)((a, c) -> a + c)! ! ! cache = new DataCache(historyDepth)! bind(keyMapper)(dr, cache) CoffeeScript Example:
  • 21. CopyrightPrismTech,2014 DataCache Operations # Writes a data sample into the cache corresponding to the key k ! write: (k, data)! ! # Returns a list representing the content of the cache ordered by key.! read()! ! # Returns a list representing the last sample for each key! readLast()! ! # Returns a list representing the content of the cache ordered by key. ! # The data is actually removed from the cache.! take()! ! # Returns a list representing the last sample for each key! # The data is actually removed from the cache.! takeLast()
  • 22. CopyrightPrismTech,2014 DataCache Operations # Returns a list representing the content of the cache that matches for given predicate.! # The data is actually removed from the cache.! takeWithFilter(p)! ! # Returns Some(v) if a value associated to the key k exists. Otherwise it returns None! get: (k)! ! # Returns Some(v) if a value associated to the key k exists. Otherwise it returns f()! getOrElse(k, f)! ! # Clear the content of the cache.! clear()!
  • 23. CopyrightPrismTech,2014 DataCache Operations # Returns a new DataCache whose content is obtained by applying the function! # f to each element of the cache! map(f)! ! # Executes the function f on each element of the cache! forEach(f)! ! # Executes the function f only on the first n samples associated with a key! forEachN(f, n)! ! # Returns the element of the cache that match the predicate p! filter(p)! ! # Returns the element of the cache that do not match the predicate p! filterNot(p)
  • 24. CopyrightPrismTech,2014 DataCache Operations # Folds the content of the data cache using z as “zero” for the folding function f! # For instance, assuming that the operator “+” is defined for the elements of ! # the cache, then you could compute the sum of all elements doing:! # c.fold(0)((a, v) -> a + v)! # the product by: ! # c.fold(1)((a, v) -> a * v)! # a comma separated string representation of the content:! # c.fold(“”)(a, v) -> a + “, “ + v! fold(z)(f) ! ! # Register a listener l to be notified whenever data which matches a ! # predicate p is written into the cache. If no predicate is provided ! # then the listeners is always notified upon data insertion.! addListener(l, p)! !
  • 26. CopyrightPrismTech,2014 Let’s see the steps required to build a Web Chat that may look like this But before let’s play with it a bit Web Chat http://bit.ly/vortex-web-chat
  • 27. CopyrightPrismTech,2014 The Chat CoffeeScript #  Create  useful  alias  for  coffez  and  jQuery   root  =  this   z_  =  coffez   $  =  jQuery   ! server  =  “ws://demo-­‐eu.prismtech.com:9999"   ! #  The  post  type  used  by  the  chat  application   class  Post      constructor:  (@name,  @msg)  -­‐>   ! #  Create  the  runtime   runtime  =  new  dds.runtime.Runtime()   ! #  Define  the  Post  topic  used  to  send  and  receive  chat  posts   postTopic  =  new  dds.Topic(0,    "Post")   ! #  Define  the  QoS  for  the  DataReader/Writer   drQos  =  new  dds.DataReaderQos(dds.Reliability.Reliable)   dwQos  =  new  dds.DataWriterQos(dds.Reliability.Reliable)  
  • 28. CopyrightPrismTech,2014 The Chat CoffeeScriptpostReader  =  z_.None   postWriter  =  z_.None   ! avatar  =  "avatar"  +  Math.floor((Math.random()  *  10000)  +  1);   ! #  Add  post  to  the  chat  and  format  it  to  show  it  is  from  me   createMyPost  =  (post)  -­‐>  ...     ! #  Add  post  to  the  chat  and  format  it  to  show  it  is  from  others   createOtherPost  =  (post)  -­‐>  ...     ! #  Add  post  to  the  chat  and  format  it  to  show  it  is  from  others   processPost  =  ()  -­‐>      msg  =  $("#ChatMessage").val()      post  =  new  Post(avatar,  msg)      #  Publish  the  post  (notice  that  postWriter  is  an  Option  Monad)      #  Take  a  look  at  (http://en.wikibooks.org/wiki/Haskell/Understanding_monads/Maybe)      #  or  (http://www.scala-­‐lang.org/api/2.11.0/index.html#scala.Option)      postWriter.map((dw)  -­‐>  dw.write(post))      $("#ChatMessageList").append(createMyPost(post))      $("#ChatMessage").val("")   !
  • 29. CopyrightPrismTech,2014 The Chat CoffeeScript #  Deal  with  click  and  keys  events…   ! $("#ChatMessage").keyup(          (e)  -­‐>              if(e.keyCode  is  13)  then  processPost()   )   ! ! $("#SendMsgButton").click(      (evt)  -­‐>          console.log("Send  Button  has  been  clicked")          processPost()   )   ! $("#SelectAvatarButton").click(      (evt)  -­‐>          s  =  $("#AvatarName").val()          if  (s  isnt  "")              avatar  =  s   )  
  • 30. CopyrightPrismTech,2014 The Chat CoffeeScript #  Handle  the  runtime  onconnect  event   runtime.onconnect  =  ()  -­‐>      #  Create  DataReader  and  DataWriter  for  our  posts      dr  =  new  dds.DataReader(runtime,  postTopic,  drQos)      dw  =  new  dds.DataWriter(runtime,  postTopic,  dwQos)   !    #  Register  a  listener  with  the  data  reader  to  post  messages        #  in  our  chat      dr.addListener(          (post)  -­‐>              if  (post.name  isnt  avatar)                  $("#ChatMessageList").append(createOtherPost(post)))      postReader  =  z_.Some(dr)      postWriter  =  z_.Some(dw)   ! connectRuntime  =  ()  -­‐>      $("#AvatarName").val(avatar)      runtime.connect(server,  "uid:pwd")   ! $(document).ready(()  -­‐>  connectRuntime())  
  • 31. CopyrightPrismTech,2014 Only ~10 lines code for implementing the communication required by a chat application! Content filtering could be used to further simplify the application and reduce number of lines of code, i.e. avoid the check on the origin of the message to avoid duplicate posts In Summary
  • 32. CopyrightPrismTech,2014 Vortex-Web makes is very simple to develop peer-to-peer real-time web applications Through the Vortex Platform, Vortex-Web application can share data seamlessly with any device! Concluding Remarks
  • 33. CopyrightPrismTech,2014 Vortex v1.0 will be available in June 2014 Starting from May will be providing a series of webcasts to get you started in building IoT and I2 applications with Vortex What’s Next?