SlideShare a Scribd company logo
Desktop, Embedded and
Mobile Distributed Apps
with
Angelo	
  Corsaro,	
  PhD	
  
Chief	
  Technology	
  Officer	
  
angelo.corsaro@prismtech.com
Café
Vortex
CopyrightPrismTech,2014
Vortex enable seamless,
ubiquitous, efficient and
timely data sharing across
mobile, embedded,
desktop, cloud and web
applications
The Vortex Platform
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 Café
CopyrightPrismTech,2014
Pure Java version of Vortex targeting JVM
and embedded JVMs
DDSI Protocol Stack optimised for mobility
and Android OS
Only DDS on the market designed and
Engineered for Android
Vortex Café
J2SE
DDSI$$
(Optimised*for*Mobility)*
DDS$API Java Scala JavaScript
CopyrightPrismTech,2014
Vortex Café has a Staged Event Driven Architecture (SEDA) that allows it to be
easily configured to trade off between throughput and latency
A Staged Event Driven Architecture
CopyrightPrismTech,2014
Decomposes a complex, event-driven application into a set of stages connected by
queues
Avoids the high overhead associated with thread-based concurrency models, and
decouples event and thread scheduling from application logic.
Through admission control on each event queue, SEDAs can be well-conditioned to
load, preventing resources from being overcommitted when demand exceeds service
capacity
SEDA
[Matt Welsh, David Culler, and Eric Brewer, SEDA:An Architecture for Well-Conditioned, Scalable Internet Services]
CopyrightPrismTech,2014
The Vortex Café architecture is organized
around three stages
Packet Processing
Message Processing
Data Processing
The channel that connect each stage can
be configured to be active or passive
Vortex Café Architecture
Packet
Processor
Message
Processor
Data
Processor
Network Packet
DDSI Messages
Cache Changes
CopyrightPrismTech,2014
Channels can be active or passive (and zero-copy).
That means that channels can be configured with
threading resources, or not
Messages posted in a passive channel are executed
in the context of the posting thread
This allows to configure Vortex Café to optimize the
use case at hand
Configurability
Processor
Channel
CopyrightPrismTech,2014
Single Thread per Message
Sample Configurations
Packet
Processor
Message
Processor
Data
Processor
Network Packet
DDSI Messages
Cache Changes
Fully Asynchronous
Packet
Processor
Message
Processor
Data
Processor
Network Packet
DDSI Messages
Cache Changes
CopyrightPrismTech,2014
Vortex Café is SEDA architecture as well as all the protocol parameters can be configured
through configuration file or via command line properties , i.e. providing -D options to the JVM
Configuration parameters are listed on the user manual
Example:
Configuration in Practice
java	
  -­‐server	
  	
  -­‐cp	
  .:./target/vortex-­‐cafe-­‐demo-­‐assembly-­‐2.0.jar	
  	
  	
  
-­‐Ddds.listeners.useTransportThread=true	
  	
  
-­‐Dddsi.writers.heartbeatPeriod=0.001	
  	
  	
  
-­‐Dddsi.writers.nackResponseDelay=0	
  	
  	
  
-­‐Dddsi.readers.heartbeatResponseDelay=0	
  	
  
-­‐Dddsi.timer.threadPool.size=1	
  	
  	
  
-­‐Dddsi.receiver.threadPool.size=0	
  	
  	
  
-­‐Dddsi.dataProcessor.threadPool.size=0	
  	
  
-­‐Dddsi.acknackProcessor.threadPool.size=0	
  	
  
-­‐Dddsi.writers.reliabilityQueue.size=128	
  	
  	
  
com.prismtech.cafe.demo.perf.RoundTripDemoReader	
  $*
Anatomy of a
Vortex-Cafe App
CopyrightPrismTech,2014
• DomainParticipant: Provides access to a data cloud -- called a domain in DDS
• Topic: Domain-wide definition of a kind of Information
• Publisher/Subscriber: Provide scope to data sharing through the concept of partitions	

• DataReader/DataWriter: Allow to read/write data for a given topic in the partitions their Subscriber/Publisher are
associated with.
DDS Entities
CopyrightPrismTech,2014
Brewing Vortex-Cafe
int	
  domain_id	
  =	
  18;	
  
DomainParticipantFactory	
  dpf	
  =	
  	
  	
  	
  
	
  	
  	
  	
  DomainParticipantFactory.getInstance(env)	
  
!
DomainParticipant	
  dp	
  =	
  	
  
	
  	
  	
  	
  dpf.createParticipant(domainId);	
  
Topic<Post>	
  topic	
  =	
  	
  
	
  	
  	
  	
  dp.createTopic(“Post”,	
  Post.class);
struct	
  Post	
  {	
  
	
  	
  string	
  name;	
  
	
  	
  string	
  msg;	
  
};	
  	
  	
  	
  	
  	
  	
  	
  	
  
#pragma	
  keylist	
  Post	
  name	
  
Publisher	
  pub	
  =	
  dp.createPublisher();	
  
DataWriter<Post>	
  dw	
  =	
  	
  
	
  	
  	
  pub.createDataWriter<Post>(topic);	
  
dw.write(new	
  Post(“Barman”,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  “Would	
  you	
  like	
  an	
  espresso?”);
Subscriber	
  sub	
  =	
  dp.createSubscriber();	
  
DataReader<Post>	
  dr	
  =	
  
	
  	
  	
  	
  	
  sub.createDataReader<Post>(topic);	
  
LoanedSamples<Post>	
  samples	
  =	
  dw.read();
CopyrightPrismTech,2014
Escalating Vortex-Cafe
val	
  topic	
  =	
  Topic[Post](“Post”) struct	
  Post	
  {	
  
	
  	
  string	
  name;	
  
	
  	
  string	
  msg;	
  
};	
  	
  	
  	
  	
  	
  	
  	
  	
  
#pragma	
  keylist	
  Post	
  name	
  
val	
  dw	
  =	
  DataWriter[Post](topic)	
  	
  
dw	
  write(new	
  Post(“Barman”,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  “Would	
  you	
  like	
  an	
  espresso?”)
val	
  dr	
  =	
  DataReader[Post](topic)	
  
dr.listen	
  {	
  
	
  	
  	
  case	
  DataAvailable(_)	
  =>	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  dr.read.foreach(println(_.getData())	
  
}
Android
CopyrightPrismTech,2014
Android applications are written in the Java programming language
Support for native code is available, but this often leads to worse performance
(due to the JNI layer) and worse battery utilisation
Thus unless you have very good reasons not to, you are strongly encouraged to
write android applications in Java and to leverage on Java libraries!
Android Fundamentals
CopyrightPrismTech,2014
An Android application runs in its own JVM and (by default) on its own linux process
An application may be composed of the following elements:
- Activities: a single screen with a user interface
- Services: a component that runs in the background to perform long-running operations or to
perform work for remote processes.
- Content Providers: a component that manages shared data for a set of applications
- Broadcast Receivers: a component that responds to system-wide broadcast
announcements
Android allows any applications to start any other application component and potentially
consume the data it produces
Android Application in a Nutshell
CopyrightPrismTech,2014
Activities, Services and Broadcast Receivers are activated through an asynchronous
message, called Intent
For Activities and Services the intent specifies the action to perform
For Broadcast Receivers it specifies the event being broadcasted, e.g. battery-low
Component Activation
CopyrightPrismTech,2014
The manifest is an XML file containing several important information about the
application
Among, other things, the manifest includes the authorization necessary for your
application -- for instance, it is in this file that you have to mention that your
application requires access to the network, etc.
Application Manifest
CopyrightPrismTech,2014
Notice that Activities are also
destroyed each time there is a screen
rotation (unless you don’t explicitly
manage it)
Activities Life-Cycle
CopyrightPrismTech,2014
Tasks and Back Tasks
CopyrightPrismTech,2014
Considering the Android application lifecycle, we should ask ourselves a few
questions:
When should we create DDS entities and who should hold a reference to them?
What happens when an application is no more visible?
Can I control when my application exits?
How do I deal with multi-threading?
DDS Considerations for Android
DDS Chat
CopyrightPrismTech,2014
To learn how to write an Android
Application that uses Vortex Café
we’ll develop a very simple Chat
To keep things simple this chat will
have a single “chat room”
DDS Chat for Android
CopyrightPrismTech,2014
Our Chat application will have a very simple architecture with simply one
Activity that will take care of:
- Sending Posts into the ChatRoom
- Displaying Posts in the room since when we joined
In terms of information modelling, we’ll have a single topic representing the user
post
Step 1: Architecture
struct	
  Post	
  {	
  
	
  	
  string	
  name;	
  
	
  	
  string	
  msg;	
  
};	
  	
  	
  	
  	
  	
  	
  	
  	
  
#pragma	
  keylist	
  Post	
  name	
  
CopyrightPrismTech,2014
Creating DDS entities, such as
DomainParticipants, DataReaders and
DataWriters involves network communication,
such as discovery information
In addition when an a DDS entity is destroyed it
looses its state
As such, tying the life-cycle of DDS entities to
activities should be done with great care
Step 2: Lifecycle Management[1/2]
CopyrightPrismTech,2014
In general, it is a better idea to tie the life-cycle of
DDS entities to the Application as opposed to
Activities
In some cases, it may make sense to tie the life-
cycle of DataReaders/DataWriters to that of the
activity that relies on them -- Usually this makes
sense for activities that are “one-off”
Step 2: Lifecycle Management[2/2]
CopyrightPrismTech,2014
Application
public class ChatApplication extends Application {!
!
DataReader<Post> dr;!
DataWriter <Post> dw;!
DomainParticipant dp;!
!
@Override!
public void onCreate() {!
super.onCreate();!
// This should be defined via a resource -- but for a small!
// demo that’s OK.!
System.setProperty(ServiceEnvironment.IMPLEMENTATION_CLASS_NAME_PROPERTY,!
"com.prismtech.cafe.core.ServiceEnvironmentImpl");!
ServiceEnvironment env = ServiceEnvironment.createInstance(!
ChatApplication.class.getClassLoader());!
DomainParticipantFactory dpf =!
DomainParticipantFactory.getInstance(env);!
!
dp = dpf.createParticipant(0);!
Topic<Post> topic = dp.createTopic("Post",Post.class);!
Publisher pub = dp.createPublisher();!
Subscriber sub = dp.createSubscriber();!
!
dw = pub.createDataWriter(topic);!
dr = sub.createDataReader(topic);!
}!
!
CopyrightPrismTech,2014
Application
!
public DataReader<Post> reader() {!
return this.dr;!
}!
!
public DataWriter<Post> writer() {!
return this.dw;!
}!
!
!
@Override!
public void onTerminate() {!
super.onTerminate();!
this.dp.close();!
}!
}!
CopyrightPrismTech,2014
Manifest...
<application!
android:allowBackup="true"!
android:icon="@drawable/ic_launcher"!
android:label="@string/app_name"!
android:theme="@style/AppTheme" android:name="ChatApplication" >!
<activity!
android:name=“com.ddschat.MainActivity"!
android:label="@string/app_name" >!
<intent-filter>!
<action android:name="android.intent.action.MAIN" />!
<category android:name="android.intent.category.LAUNCHER" />!
</intent-filter>!
</activity>!
</application>!
CopyrightPrismTech,2014
When using Vortex Café you need to grant the proper permissions for
networking:
More Manifest...
<uses-permission android:name="android.permission.INTERNET"/>!
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>!
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>!
CopyrightPrismTech,2014
Activity GUI
<?xml version="1.0" encoding="utf-8"?>!
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"!
xmlns:tools="http://schemas.android.com/tools"!
android:layout_width="match_parent"!
android:layout_height="match_parent"!
android:orientation="vertical" >!
!
<TextView android:id="@+id/chatMessages"!
android:layout_width="match_parent"!
android:layout_height="wrap_content"!
android:text="@string/chat_msgs"!
android:visibility="gone"!
android:background="#666"!
android:textColor="#fff"!
android:paddingLeft="5dp"!
/>!
<ListView!
android:id="@+id/messageList"!
android:layout_width="match_parent"!
android:layout_height="0dp"!
android:layout_weight="1"!
/>!
!
CopyrightPrismTech,2014
Activity GUI
!
<LinearLayout!
android:layout_width="fill_parent"!
android:layout_height="wrap_content"!
android:orientation="horizontal" >!
!
<EditText!
android:id="@+id/message"!
android:layout_width="0dp"!
android:layout_height="wrap_content"!
android:layout_weight="1"!
android:hint="@string/edit_message" />!
!
<Button!
android:layout_width="wrap_content"!
android:layout_height="wrap_content"!
android:onClick="sendChatMessage"!
android:text="@string/button_send" />!
</LinearLayout>!
!
!
</LinearLayout>!
CopyrightPrismTech,2014
Activity
1 !
2 public class MainActivity extends Activity {!
3 !
4 private static final String TAG = "ChatMainActivity";!
5 private final Handler handler = new Handler();!
6 private ArrayAdapter<String> chatMessages;!
7 !
8 public class ChatMessageListener extends ChatMessageDataListener { !
9 // ...!
10 }!
11 !
12 @Override!
13 protected void onCreate(Bundle savedInstanceState) {!
14 super.onCreate(savedInstanceState);!
15 setContentView(R.layout.activity_main);!
16 chatMessages = new ArrayAdapter<String>(this, R.layout.messages);!
17 chatMessages.add("Welcome to the DDS Chat Room");!
18 ListView mview = (ListView) findViewById(R.id.messageList);!
19 mview.setAdapter(chatMessages);!
20 ChatApplication app = (ChatApplication) getApplication();!
21 !
22 app.reader().setListener(new ChatMessageListener());!
23 !
24 }!
25
CopyrightPrismTech,2014
Activity
!
25 !
26 @Override!
27 public boolean onCreateOptionsMenu(Menu menu) {!
28 // Inflate the menu; this adds items to the action bar if it is present.!
29 getMenuInflater().inflate(R.menu.main, menu);!
30 return true;!
31 }!
CopyrightPrismTech,2014
Activity
32 !
33 public void sendChatMessage(View view) {!
34 EditText editText = (EditText) findViewById(R.id.message);!
35 String msg = editText.getText().toString();!
36 editText.setText("");!
37 // chatMessages.add(msg);!
38 ChatApplication app = (ChatApplication) getApplication();!
39 try {!
40 Log.i(TAG, ">>> Sending data " + msg);!
41 app.writer().write(new Post(usr, msg));!
42 } catch (TimeoutException te) {!
43 }!
44 }!
45 !
46 }!
CopyrightPrismTech,2014
Receiving data is a bit trickier since in Android only the thread that runs an
activity has the right to change the UI
This means, that from a DDS listener it is not possible to change an the UI
directly!
The solution is to use an Android Handler	
  to which we can post Runnable to
be executed by the activity thread
Let’s see how this works...
Receiving Data
CopyrightPrismTech,2014
DDS Listener & Android Handler
1 public class ChatMessageListener extends ChatMessageDataListener {!
2 !
3 private DataReader<Post> dr;!
4 !
5 public ChatMessageListener() {!
6 ChatApplication app = (ChatApplication) getApplication();!
7 dr = app.reader();!
8 }!
9 !
CopyrightPrismTech,2014
DDS Listener & Android Handler
10 @Override!
11 public void onDataAvailable(DataAvailableEvent<Post> dae) {!
12 final Iterator<Post> i = dr.read();!
13 !
14 Log.i(TAG, ">>> DataReaderListener.onDataAvailable");!
15 if (i.hasNext()) {!
16 Runnable dispatcher = new Runnable() {!
17 public void run() {!
18 while (i.hasNext()) {!
19 Sample<Post> s = i.next();!
20 !
21 if (s.getSampleState() == SampleState.NOT_READ) {!
22 Post cm = s.getData();!
23 chatMessages.add(cm.name + " > " + cm.msg);!
24 }!
25 }!
26 }!
27 };!
28 handler.post(dispatcher);!
29 }!
30 }!
31 }!
Raspberry Pi
CopyrightPrismTech,2014
The Raspberry Pi is a low cost, credit-card
sized computer that plugs into a computer
monitor or TV, and uses a standard keyboard
and mouse
Raspberry Pi can interact with the outside
world, and is used in a wide array of digital
maker projects, from music machines and
parent detectors to weather stations and
tweeting birdhouses with infra-red cameras,
etc.
Raspberry Pi
CopyrightPrismTech,2014
Several Images are available nowadays, I tend to use Raspbian
To get started get the image from: http://www.raspberrypi.org/downloads/
Then copy the image on an SD card following instruct ructions available at http://
www.raspberrypi.org/documentation/installation/installing-images/
For MacOS X:
-­‐ diskutil	
  list	
  [to	
  check	
  the	
  SD	
  card	
  /dev/diskN]	
  
-­‐ diskutil	
  unmontDisk	
  /dev/diskN	
  
-­‐ sudo	
  dd	
  bs=1m	
  if=2014-­‐01-­‐07-­‐wheezy-­‐raspbian.img	
  of=/dev/diskN	
  
-­‐ sudo	
  diskutil	
  eject	
  /dev/diskN
Raspberry Pi Image
CopyrightPrismTech,2014
Getting the Java JDK on raspberry is as easy as executing the following
command:
- sudo apt-get update
- sudo apt-get install oracle-java7-jdk [jdk8 is also available]
Getting Java on Raspberry
CopyrightPrismTech,2014
You can get Scala and SBT using curl:
- curl -O http://downloads.typesafe.com/scala/2.11.1/scala-2.11.1.tgz
- http://dl.bintray.com/sbt/native-packages/sbt/0.13.5/sbt-0.13.5.tgz
Then simply extract and properly set the PATH environment variable
Getting Scala and SBT
CopyrightPrismTech,2014
Chat App
CopyrightPrismTech,2014
Chat App
Let’s get Action!
CopyrightPrismTech,2014
Vortex enable seamless, ubiquitous, efficient and timely data sharing across
mobile, embedded, desktop, cloud and web applications
It is the first platform to address the data-sharing needs of Business Critical IoT,
and Industrial Internet Systems
Vortex is fully interoperable with DDS compliant implementations
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

PDF
Desktop, Embedded and Mobile Apps with Vortex Café
Angelo Corsaro
 
PDF
Building and Scaling Internet of Things Applications with Vortex Cloud
Angelo Corsaro
 
PDF
Building Real-Time Web Applications with Vortex-Web
Angelo Corsaro
 
PPT
RTI Data-Distribution Service (DDS) Master Class 2011
Gerardo Pardo-Castellote
 
PDF
Standardizing the Data Distribution Service (DDS) API for Modern C++
Sumant Tambe
 
PDF
OpenSplice DDS Tutorial -- Part II
Angelo Corsaro
 
PDF
Connected Mobile and Web Applications with Vortex
Angelo Corsaro
 
PDF
Component Based DDS with C++11 and R2DDS
Remedy IT
 
Desktop, Embedded and Mobile Apps with Vortex Café
Angelo Corsaro
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Angelo Corsaro
 
Building Real-Time Web Applications with Vortex-Web
Angelo Corsaro
 
RTI Data-Distribution Service (DDS) Master Class 2011
Gerardo Pardo-Castellote
 
Standardizing the Data Distribution Service (DDS) API for Modern C++
Sumant Tambe
 
OpenSplice DDS Tutorial -- Part II
Angelo Corsaro
 
Connected Mobile and Web Applications with Vortex
Angelo Corsaro
 
Component Based DDS with C++11 and R2DDS
Remedy IT
 

What's hot (20)

PDF
The Data Distribution Service Tutorial
Angelo Corsaro
 
PDF
Vortex Tutorial Part 2
ADLINK Technology IoT
 
PDF
RTI Data-Distribution Service (DDS) Master Class - 2010
Gerardo Pardo-Castellote
 
PDF
Vortex Tutorial -- Part I
Angelo Corsaro
 
PDF
BranchOffice Szenarios
Digicomp Academy AG
 
PDF
Communication Patterns Using Data-Centric Publish/Subscribe
Sumant Tambe
 
PDF
The DDS Tutorial Part II
Angelo Corsaro
 
PDF
OMG DDS: The Data Distribution Service for Real-Time Systems
Angelo Corsaro
 
PDF
Getting Started in DDS with C++ and Java
Angelo Corsaro
 
PDF
High Performance Distributed Computing with DDS and Scala
Angelo Corsaro
 
PDF
Vortex Cloud Beyond Cloud Messaging
ADLINK Technology IoT
 
PDF
9/28/11 Slides - Introduction to DuraCloud, Slides
DuraSpace
 
PDF
Getting Started with DDS in C++, Java and Scala
Angelo Corsaro
 
PDF
Architecting IoT Systems with Vortex
Angelo Corsaro
 
PDF
Advanced OpenSplice Programming - Part I
Angelo Corsaro
 
PDF
Micro services Architecture with Vortex -- Part I
Angelo Corsaro
 
PDF
Reactive Data Centric Architectures with Vortex, Spark and ReactiveX
Angelo Corsaro
 
PDF
The DDS Tutorial - Part I
Angelo Corsaro
 
PPTX
Patterns of Data Distribution
Rick Warren
 
PDF
The Data Distribution Service
Angelo Corsaro
 
The Data Distribution Service Tutorial
Angelo Corsaro
 
Vortex Tutorial Part 2
ADLINK Technology IoT
 
RTI Data-Distribution Service (DDS) Master Class - 2010
Gerardo Pardo-Castellote
 
Vortex Tutorial -- Part I
Angelo Corsaro
 
BranchOffice Szenarios
Digicomp Academy AG
 
Communication Patterns Using Data-Centric Publish/Subscribe
Sumant Tambe
 
The DDS Tutorial Part II
Angelo Corsaro
 
OMG DDS: The Data Distribution Service for Real-Time Systems
Angelo Corsaro
 
Getting Started in DDS with C++ and Java
Angelo Corsaro
 
High Performance Distributed Computing with DDS and Scala
Angelo Corsaro
 
Vortex Cloud Beyond Cloud Messaging
ADLINK Technology IoT
 
9/28/11 Slides - Introduction to DuraCloud, Slides
DuraSpace
 
Getting Started with DDS in C++, Java and Scala
Angelo Corsaro
 
Architecting IoT Systems with Vortex
Angelo Corsaro
 
Advanced OpenSplice Programming - Part I
Angelo Corsaro
 
Micro services Architecture with Vortex -- Part I
Angelo Corsaro
 
Reactive Data Centric Architectures with Vortex, Spark and ReactiveX
Angelo Corsaro
 
The DDS Tutorial - Part I
Angelo Corsaro
 
Patterns of Data Distribution
Rick Warren
 
The Data Distribution Service
Angelo Corsaro
 
Ad

Similar to Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe (20)

PPT
Android overview
Has Taiar
 
PDF
Android Development in a Nutshell
Aleix Solé
 
PDF
Real-Time Web Programming with PrismTech Vortex Web
ADLINK Technology IoT
 
PDF
Android Workshop Part 1
NAILBITER
 
PPTX
architecture of android.pptx
allurestore
 
PDF
Android : Revolutionizing Mobile Devices
Ritesh Puthran
 
PDF
Google Android @ AlphaCSP's JavaEdge
yuvalb
 
PPT
Module - Programming with android course.ppt
demowork2
 
PPT
Introduction to android
Jawad Mohmand
 
PPSX
Android Introduction
Sharmistha Mandal
 
PPT
Practical Considerations for Deploying a Java Active Networking Platform
Tal Lavian Ph.D.
 
PDF
IBM MobileFirst Reference Architecture 1512 v3 2015
Sreeni Pamidala
 
PPT
My androidpresentation
niteshnarayanlal
 
PPTX
Intro to Mobile app development Android.pptx
itstehreem2830
 
PPT
265.ppt
sanjaykj6
 
PDF
20IT601PE - Mobile Application Development PPT.pdf
vani15332
 
PPT
Android Basics
Krushnakant Solanki
 
PPT
Synapseindia android apps overview
Synapseindiappsdevelopment
 
PDF
Vert.x introduction
GR8Conf
 
PDF
Ch1 hello, android
Jehad2012
 
Android overview
Has Taiar
 
Android Development in a Nutshell
Aleix Solé
 
Real-Time Web Programming with PrismTech Vortex Web
ADLINK Technology IoT
 
Android Workshop Part 1
NAILBITER
 
architecture of android.pptx
allurestore
 
Android : Revolutionizing Mobile Devices
Ritesh Puthran
 
Google Android @ AlphaCSP's JavaEdge
yuvalb
 
Module - Programming with android course.ppt
demowork2
 
Introduction to android
Jawad Mohmand
 
Android Introduction
Sharmistha Mandal
 
Practical Considerations for Deploying a Java Active Networking Platform
Tal Lavian Ph.D.
 
IBM MobileFirst Reference Architecture 1512 v3 2015
Sreeni Pamidala
 
My androidpresentation
niteshnarayanlal
 
Intro to Mobile app development Android.pptx
itstehreem2830
 
265.ppt
sanjaykj6
 
20IT601PE - Mobile Application Development PPT.pdf
vani15332
 
Android Basics
Krushnakant Solanki
 
Synapseindia android apps overview
Synapseindiappsdevelopment
 
Vert.x introduction
GR8Conf
 
Ch1 hello, android
Jehad2012
 
Ad

More from ADLINK Technology IoT (20)

PDF
Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...
ADLINK Technology IoT
 
PDF
Introducing Vortex Lite
ADLINK Technology IoT
 
PDF
Harnessing DDS in Next Generation Healthcare Systems
ADLINK Technology IoT
 
PDF
PrismTech Vortex Tutorial Part 1
ADLINK Technology IoT
 
PDF
Building and Scaling Internet of Things Applications with Vortex Cloud
ADLINK Technology IoT
 
PDF
Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...
ADLINK Technology IoT
 
PPTX
PrismTech Integrated Communications Systems Modeling
ADLINK Technology IoT
 
PPTX
PrismTech Reflective Language for Communication Systems
ADLINK Technology IoT
 
PDF
Model_Driven_Development_SDR
ADLINK Technology IoT
 
PDF
SCA_4_adoption_may2013
ADLINK Technology IoT
 
PDF
Using Model Driven Development to Easily Manage Variations in Software Define...
ADLINK Technology IoT
 
PDF
Sca 4 0 _may16_2012_final
ADLINK Technology IoT
 
PDF
Spectra dtp4700h march2012_final
ADLINK Technology IoT
 
PDF
Spectra CX 3.4 Launch Webcast
ADLINK Technology IoT
 
PDF
Spectra DTP4700 Linux Based Development for Software Defined Radio (SDR) Soft...
ADLINK Technology IoT
 
PPTX
Migrating Legacy Waveforms to the Software Communications Architecture (SCA)
ADLINK Technology IoT
 
PDF
Rapid Software Communications Architecture (SCA) Development for DSPs with Sp...
ADLINK Technology IoT
 
PPT
Spectra IP Core ORB - high-performance, low-latency solution for FPGA-GPP com...
ADLINK Technology IoT
 
PPT
Automating Software Communications Architecture (SCA) Testing with Spectra CX
ADLINK Technology IoT
 
PPT
SCA Next Part 1 - Software Defined Radio (SDR) Webcast Slides
ADLINK Technology IoT
 
Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...
ADLINK Technology IoT
 
Introducing Vortex Lite
ADLINK Technology IoT
 
Harnessing DDS in Next Generation Healthcare Systems
ADLINK Technology IoT
 
PrismTech Vortex Tutorial Part 1
ADLINK Technology IoT
 
Building and Scaling Internet of Things Applications with Vortex Cloud
ADLINK Technology IoT
 
Introduction to PrismTech's Vortex Intelligent Data Sharing Platform for the ...
ADLINK Technology IoT
 
PrismTech Integrated Communications Systems Modeling
ADLINK Technology IoT
 
PrismTech Reflective Language for Communication Systems
ADLINK Technology IoT
 
Model_Driven_Development_SDR
ADLINK Technology IoT
 
SCA_4_adoption_may2013
ADLINK Technology IoT
 
Using Model Driven Development to Easily Manage Variations in Software Define...
ADLINK Technology IoT
 
Sca 4 0 _may16_2012_final
ADLINK Technology IoT
 
Spectra dtp4700h march2012_final
ADLINK Technology IoT
 
Spectra CX 3.4 Launch Webcast
ADLINK Technology IoT
 
Spectra DTP4700 Linux Based Development for Software Defined Radio (SDR) Soft...
ADLINK Technology IoT
 
Migrating Legacy Waveforms to the Software Communications Architecture (SCA)
ADLINK Technology IoT
 
Rapid Software Communications Architecture (SCA) Development for DSPs with Sp...
ADLINK Technology IoT
 
Spectra IP Core ORB - high-performance, low-latency solution for FPGA-GPP com...
ADLINK Technology IoT
 
Automating Software Communications Architecture (SCA) Testing with Spectra CX
ADLINK Technology IoT
 
SCA Next Part 1 - Software Defined Radio (SDR) Webcast Slides
ADLINK Technology IoT
 

Recently uploaded (20)

PPTX
ConcordeApp: Engineering Global Impact & Unlocking Billions in Event ROI with AI
chastechaste14
 
PPTX
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
PPTX
AI-Ready Handoff: Auto-Summaries & Draft Emails from MQL to Slack in One Flow
bbedford2
 
PPTX
Odoo Integration Services by Candidroot Solutions
CandidRoot Solutions Private Limited
 
PDF
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
PDF
Salesforce Implementation Services Provider.pdf
VALiNTRY360
 
PPTX
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
PDF
ShowUs: Pharo Stream Deck (ESUG 2025, Gdansk)
ESUG
 
PPTX
Role Of Python In Programing Language.pptx
jaykoshti048
 
PDF
49784907924775488180_LRN2959_Data_Pump_23ai.pdf
Abilash868456
 
PDF
What to consider before purchasing Microsoft 365 Business Premium_PDF.pdf
Q-Advise
 
PDF
WatchTraderHub - Watch Dealer software with inventory management and multi-ch...
WatchDealer Pavel
 
PPTX
Explanation about Structures in C language.pptx
Veeral Rathod
 
PDF
vAdobe Premiere Pro 2025 (v25.2.3.004) Crack Pre-Activated Latest
imang66g
 
PPTX
oapresentation.pptx
mehatdhavalrajubhai
 
PDF
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
PDF
49785682629390197565_LRN3014_Migrating_the_Beast.pdf
Abilash868456
 
PDF
New Download MiniTool Partition Wizard Crack Latest Version 2025
imang66g
 
PPTX
PFAS Reporting Requirements 2026 Are You Submission Ready Certivo.pptx
Certivo Inc
 
PPTX
Can You Build Dashboards Using Open Source Visualization Tool.pptx
Varsha Nayak
 
ConcordeApp: Engineering Global Impact & Unlocking Billions in Event ROI with AI
chastechaste14
 
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
AI-Ready Handoff: Auto-Summaries & Draft Emails from MQL to Slack in One Flow
bbedford2
 
Odoo Integration Services by Candidroot Solutions
CandidRoot Solutions Private Limited
 
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
Salesforce Implementation Services Provider.pdf
VALiNTRY360
 
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
ShowUs: Pharo Stream Deck (ESUG 2025, Gdansk)
ESUG
 
Role Of Python In Programing Language.pptx
jaykoshti048
 
49784907924775488180_LRN2959_Data_Pump_23ai.pdf
Abilash868456
 
What to consider before purchasing Microsoft 365 Business Premium_PDF.pdf
Q-Advise
 
WatchTraderHub - Watch Dealer software with inventory management and multi-ch...
WatchDealer Pavel
 
Explanation about Structures in C language.pptx
Veeral Rathod
 
vAdobe Premiere Pro 2025 (v25.2.3.004) Crack Pre-Activated Latest
imang66g
 
oapresentation.pptx
mehatdhavalrajubhai
 
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
49785682629390197565_LRN3014_Migrating_the_Beast.pdf
Abilash868456
 
New Download MiniTool Partition Wizard Crack Latest Version 2025
imang66g
 
PFAS Reporting Requirements 2026 Are You Submission Ready Certivo.pptx
Certivo Inc
 
Can You Build Dashboards Using Open Source Visualization Tool.pptx
Varsha Nayak
 

Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe

  • 1. Desktop, Embedded and Mobile Distributed Apps with Angelo  Corsaro,  PhD   Chief  Technology  Officer   [email protected] Café
  • 3. CopyrightPrismTech,2014 Vortex enable seamless, ubiquitous, efficient and timely data sharing across mobile, embedded, desktop, cloud and web applications The Vortex Platform
  • 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 Pure Java version of Vortex targeting JVM and embedded JVMs DDSI Protocol Stack optimised for mobility and Android OS Only DDS on the market designed and Engineered for Android Vortex Café J2SE DDSI$$ (Optimised*for*Mobility)* DDS$API Java Scala JavaScript
  • 7. CopyrightPrismTech,2014 Vortex Café has a Staged Event Driven Architecture (SEDA) that allows it to be easily configured to trade off between throughput and latency A Staged Event Driven Architecture
  • 8. CopyrightPrismTech,2014 Decomposes a complex, event-driven application into a set of stages connected by queues Avoids the high overhead associated with thread-based concurrency models, and decouples event and thread scheduling from application logic. Through admission control on each event queue, SEDAs can be well-conditioned to load, preventing resources from being overcommitted when demand exceeds service capacity SEDA [Matt Welsh, David Culler, and Eric Brewer, SEDA:An Architecture for Well-Conditioned, Scalable Internet Services]
  • 9. CopyrightPrismTech,2014 The Vortex Café architecture is organized around three stages Packet Processing Message Processing Data Processing The channel that connect each stage can be configured to be active or passive Vortex Café Architecture Packet Processor Message Processor Data Processor Network Packet DDSI Messages Cache Changes
  • 10. CopyrightPrismTech,2014 Channels can be active or passive (and zero-copy). That means that channels can be configured with threading resources, or not Messages posted in a passive channel are executed in the context of the posting thread This allows to configure Vortex Café to optimize the use case at hand Configurability Processor Channel
  • 11. CopyrightPrismTech,2014 Single Thread per Message Sample Configurations Packet Processor Message Processor Data Processor Network Packet DDSI Messages Cache Changes Fully Asynchronous Packet Processor Message Processor Data Processor Network Packet DDSI Messages Cache Changes
  • 12. CopyrightPrismTech,2014 Vortex Café is SEDA architecture as well as all the protocol parameters can be configured through configuration file or via command line properties , i.e. providing -D options to the JVM Configuration parameters are listed on the user manual Example: Configuration in Practice java  -­‐server    -­‐cp  .:./target/vortex-­‐cafe-­‐demo-­‐assembly-­‐2.0.jar       -­‐Ddds.listeners.useTransportThread=true     -­‐Dddsi.writers.heartbeatPeriod=0.001       -­‐Dddsi.writers.nackResponseDelay=0       -­‐Dddsi.readers.heartbeatResponseDelay=0     -­‐Dddsi.timer.threadPool.size=1       -­‐Dddsi.receiver.threadPool.size=0       -­‐Dddsi.dataProcessor.threadPool.size=0     -­‐Dddsi.acknackProcessor.threadPool.size=0     -­‐Dddsi.writers.reliabilityQueue.size=128       com.prismtech.cafe.demo.perf.RoundTripDemoReader  $*
  • 14. CopyrightPrismTech,2014 • DomainParticipant: Provides access to a data cloud -- called a domain in DDS • Topic: Domain-wide definition of a kind of Information • Publisher/Subscriber: Provide scope to data sharing through the concept of partitions • DataReader/DataWriter: Allow to read/write data for a given topic in the partitions their Subscriber/Publisher are associated with. DDS Entities
  • 15. CopyrightPrismTech,2014 Brewing Vortex-Cafe int  domain_id  =  18;   DomainParticipantFactory  dpf  =                DomainParticipantFactory.getInstance(env)   ! DomainParticipant  dp  =            dpf.createParticipant(domainId);   Topic<Post>  topic  =            dp.createTopic(“Post”,  Post.class); struct  Post  {      string  name;      string  msg;   };                   #pragma  keylist  Post  name   Publisher  pub  =  dp.createPublisher();   DataWriter<Post>  dw  =          pub.createDataWriter<Post>(topic);   dw.write(new  Post(“Barman”,                                        “Would  you  like  an  espresso?”); Subscriber  sub  =  dp.createSubscriber();   DataReader<Post>  dr  =            sub.createDataReader<Post>(topic);   LoanedSamples<Post>  samples  =  dw.read();
  • 16. CopyrightPrismTech,2014 Escalating Vortex-Cafe val  topic  =  Topic[Post](“Post”) struct  Post  {      string  name;      string  msg;   };                   #pragma  keylist  Post  name   val  dw  =  DataWriter[Post](topic)     dw  write(new  Post(“Barman”,                                        “Would  you  like  an  espresso?”) val  dr  =  DataReader[Post](topic)   dr.listen  {        case  DataAvailable(_)  =>                          dr.read.foreach(println(_.getData())   }
  • 18. CopyrightPrismTech,2014 Android applications are written in the Java programming language Support for native code is available, but this often leads to worse performance (due to the JNI layer) and worse battery utilisation Thus unless you have very good reasons not to, you are strongly encouraged to write android applications in Java and to leverage on Java libraries! Android Fundamentals
  • 19. CopyrightPrismTech,2014 An Android application runs in its own JVM and (by default) on its own linux process An application may be composed of the following elements: - Activities: a single screen with a user interface - Services: a component that runs in the background to perform long-running operations or to perform work for remote processes. - Content Providers: a component that manages shared data for a set of applications - Broadcast Receivers: a component that responds to system-wide broadcast announcements Android allows any applications to start any other application component and potentially consume the data it produces Android Application in a Nutshell
  • 20. CopyrightPrismTech,2014 Activities, Services and Broadcast Receivers are activated through an asynchronous message, called Intent For Activities and Services the intent specifies the action to perform For Broadcast Receivers it specifies the event being broadcasted, e.g. battery-low Component Activation
  • 21. CopyrightPrismTech,2014 The manifest is an XML file containing several important information about the application Among, other things, the manifest includes the authorization necessary for your application -- for instance, it is in this file that you have to mention that your application requires access to the network, etc. Application Manifest
  • 22. CopyrightPrismTech,2014 Notice that Activities are also destroyed each time there is a screen rotation (unless you don’t explicitly manage it) Activities Life-Cycle
  • 24. CopyrightPrismTech,2014 Considering the Android application lifecycle, we should ask ourselves a few questions: When should we create DDS entities and who should hold a reference to them? What happens when an application is no more visible? Can I control when my application exits? How do I deal with multi-threading? DDS Considerations for Android
  • 26. CopyrightPrismTech,2014 To learn how to write an Android Application that uses Vortex Café we’ll develop a very simple Chat To keep things simple this chat will have a single “chat room” DDS Chat for Android
  • 27. CopyrightPrismTech,2014 Our Chat application will have a very simple architecture with simply one Activity that will take care of: - Sending Posts into the ChatRoom - Displaying Posts in the room since when we joined In terms of information modelling, we’ll have a single topic representing the user post Step 1: Architecture struct  Post  {      string  name;      string  msg;   };                   #pragma  keylist  Post  name  
  • 28. CopyrightPrismTech,2014 Creating DDS entities, such as DomainParticipants, DataReaders and DataWriters involves network communication, such as discovery information In addition when an a DDS entity is destroyed it looses its state As such, tying the life-cycle of DDS entities to activities should be done with great care Step 2: Lifecycle Management[1/2]
  • 29. CopyrightPrismTech,2014 In general, it is a better idea to tie the life-cycle of DDS entities to the Application as opposed to Activities In some cases, it may make sense to tie the life- cycle of DataReaders/DataWriters to that of the activity that relies on them -- Usually this makes sense for activities that are “one-off” Step 2: Lifecycle Management[2/2]
  • 30. CopyrightPrismTech,2014 Application public class ChatApplication extends Application {! ! DataReader<Post> dr;! DataWriter <Post> dw;! DomainParticipant dp;! ! @Override! public void onCreate() {! super.onCreate();! // This should be defined via a resource -- but for a small! // demo that’s OK.! System.setProperty(ServiceEnvironment.IMPLEMENTATION_CLASS_NAME_PROPERTY,! "com.prismtech.cafe.core.ServiceEnvironmentImpl");! ServiceEnvironment env = ServiceEnvironment.createInstance(! ChatApplication.class.getClassLoader());! DomainParticipantFactory dpf =! DomainParticipantFactory.getInstance(env);! ! dp = dpf.createParticipant(0);! Topic<Post> topic = dp.createTopic("Post",Post.class);! Publisher pub = dp.createPublisher();! Subscriber sub = dp.createSubscriber();! ! dw = pub.createDataWriter(topic);! dr = sub.createDataReader(topic);! }! !
  • 31. CopyrightPrismTech,2014 Application ! public DataReader<Post> reader() {! return this.dr;! }! ! public DataWriter<Post> writer() {! return this.dw;! }! ! ! @Override! public void onTerminate() {! super.onTerminate();! this.dp.close();! }! }!
  • 33. CopyrightPrismTech,2014 When using Vortex Café you need to grant the proper permissions for networking: More Manifest... <uses-permission android:name="android.permission.INTERNET"/>! <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>! <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>!
  • 34. CopyrightPrismTech,2014 Activity GUI <?xml version="1.0" encoding="utf-8"?>! <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"! xmlns:tools="http://schemas.android.com/tools"! android:layout_width="match_parent"! android:layout_height="match_parent"! android:orientation="vertical" >! ! <TextView android:id="@+id/chatMessages"! android:layout_width="match_parent"! android:layout_height="wrap_content"! android:text="@string/chat_msgs"! android:visibility="gone"! android:background="#666"! android:textColor="#fff"! android:paddingLeft="5dp"! />! <ListView! android:id="@+id/messageList"! android:layout_width="match_parent"! android:layout_height="0dp"! android:layout_weight="1"! />! !
  • 36. CopyrightPrismTech,2014 Activity 1 ! 2 public class MainActivity extends Activity {! 3 ! 4 private static final String TAG = "ChatMainActivity";! 5 private final Handler handler = new Handler();! 6 private ArrayAdapter<String> chatMessages;! 7 ! 8 public class ChatMessageListener extends ChatMessageDataListener { ! 9 // ...! 10 }! 11 ! 12 @Override! 13 protected void onCreate(Bundle savedInstanceState) {! 14 super.onCreate(savedInstanceState);! 15 setContentView(R.layout.activity_main);! 16 chatMessages = new ArrayAdapter<String>(this, R.layout.messages);! 17 chatMessages.add("Welcome to the DDS Chat Room");! 18 ListView mview = (ListView) findViewById(R.id.messageList);! 19 mview.setAdapter(chatMessages);! 20 ChatApplication app = (ChatApplication) getApplication();! 21 ! 22 app.reader().setListener(new ChatMessageListener());! 23 ! 24 }! 25
  • 37. CopyrightPrismTech,2014 Activity ! 25 ! 26 @Override! 27 public boolean onCreateOptionsMenu(Menu menu) {! 28 // Inflate the menu; this adds items to the action bar if it is present.! 29 getMenuInflater().inflate(R.menu.main, menu);! 30 return true;! 31 }!
  • 38. CopyrightPrismTech,2014 Activity 32 ! 33 public void sendChatMessage(View view) {! 34 EditText editText = (EditText) findViewById(R.id.message);! 35 String msg = editText.getText().toString();! 36 editText.setText("");! 37 // chatMessages.add(msg);! 38 ChatApplication app = (ChatApplication) getApplication();! 39 try {! 40 Log.i(TAG, ">>> Sending data " + msg);! 41 app.writer().write(new Post(usr, msg));! 42 } catch (TimeoutException te) {! 43 }! 44 }! 45 ! 46 }!
  • 39. CopyrightPrismTech,2014 Receiving data is a bit trickier since in Android only the thread that runs an activity has the right to change the UI This means, that from a DDS listener it is not possible to change an the UI directly! The solution is to use an Android Handler  to which we can post Runnable to be executed by the activity thread Let’s see how this works... Receiving Data
  • 40. CopyrightPrismTech,2014 DDS Listener & Android Handler 1 public class ChatMessageListener extends ChatMessageDataListener {! 2 ! 3 private DataReader<Post> dr;! 4 ! 5 public ChatMessageListener() {! 6 ChatApplication app = (ChatApplication) getApplication();! 7 dr = app.reader();! 8 }! 9 !
  • 41. CopyrightPrismTech,2014 DDS Listener & Android Handler 10 @Override! 11 public void onDataAvailable(DataAvailableEvent<Post> dae) {! 12 final Iterator<Post> i = dr.read();! 13 ! 14 Log.i(TAG, ">>> DataReaderListener.onDataAvailable");! 15 if (i.hasNext()) {! 16 Runnable dispatcher = new Runnable() {! 17 public void run() {! 18 while (i.hasNext()) {! 19 Sample<Post> s = i.next();! 20 ! 21 if (s.getSampleState() == SampleState.NOT_READ) {! 22 Post cm = s.getData();! 23 chatMessages.add(cm.name + " > " + cm.msg);! 24 }! 25 }! 26 }! 27 };! 28 handler.post(dispatcher);! 29 }! 30 }! 31 }!
  • 43. CopyrightPrismTech,2014 The Raspberry Pi is a low cost, credit-card sized computer that plugs into a computer monitor or TV, and uses a standard keyboard and mouse Raspberry Pi can interact with the outside world, and is used in a wide array of digital maker projects, from music machines and parent detectors to weather stations and tweeting birdhouses with infra-red cameras, etc. Raspberry Pi
  • 44. CopyrightPrismTech,2014 Several Images are available nowadays, I tend to use Raspbian To get started get the image from: http://www.raspberrypi.org/downloads/ Then copy the image on an SD card following instruct ructions available at http:// www.raspberrypi.org/documentation/installation/installing-images/ For MacOS X: -­‐ diskutil  list  [to  check  the  SD  card  /dev/diskN]   -­‐ diskutil  unmontDisk  /dev/diskN   -­‐ sudo  dd  bs=1m  if=2014-­‐01-­‐07-­‐wheezy-­‐raspbian.img  of=/dev/diskN   -­‐ sudo  diskutil  eject  /dev/diskN Raspberry Pi Image
  • 45. CopyrightPrismTech,2014 Getting the Java JDK on raspberry is as easy as executing the following command: - sudo apt-get update - sudo apt-get install oracle-java7-jdk [jdk8 is also available] Getting Java on Raspberry
  • 46. CopyrightPrismTech,2014 You can get Scala and SBT using curl: - curl -O http://downloads.typesafe.com/scala/2.11.1/scala-2.11.1.tgz - http://dl.bintray.com/sbt/native-packages/sbt/0.13.5/sbt-0.13.5.tgz Then simply extract and properly set the PATH environment variable Getting Scala and SBT
  • 50. CopyrightPrismTech,2014 Vortex enable seamless, ubiquitous, efficient and timely data sharing across mobile, embedded, desktop, cloud and web applications It is the first platform to address the data-sharing needs of Business Critical IoT, and Industrial Internet Systems Vortex is fully interoperable with DDS compliant implementations Concluding Remarks
  • 51. 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?