SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
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?

Mais conteúdo relacionado

Mais procurados

The DDS Tutorial - Part I
The DDS Tutorial - Part IThe DDS Tutorial - Part I
The DDS Tutorial - Part IAngelo Corsaro
 
Building Reactive Applications with DDS
Building Reactive Applications with DDSBuilding Reactive Applications with DDS
Building Reactive Applications with DDSAngelo 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
 
IoT Protocols Integration with Vortex Gateway
IoT Protocols Integration with Vortex GatewayIoT Protocols Integration with Vortex Gateway
IoT Protocols Integration with Vortex GatewayAngelo Corsaro
 
DDS and OPC UA Explained
DDS and OPC UA ExplainedDDS and OPC UA Explained
DDS and OPC UA ExplainedAngelo Corsaro
 
Distributed Algorithms with DDS
Distributed Algorithms with DDSDistributed Algorithms with DDS
Distributed Algorithms with DDSAngelo Corsaro
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAngelo 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
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service TutorialAngelo Corsaro
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service TutorialAngelo Corsaro
 
DDS Tutorial -- Part I
DDS Tutorial -- Part IDDS Tutorial -- Part I
DDS Tutorial -- Part IAngelo Corsaro
 
Connected Mobile and Web Applications with Vortex
Connected Mobile and Web Applications with VortexConnected Mobile and Web Applications with Vortex
Connected Mobile and Web Applications with VortexAngelo 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
 
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
 
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
 
Reactive Data Centric Architectures with Vortex, Spark and ReactiveX
Reactive Data Centric Architectures with Vortex, Spark and ReactiveXReactive Data Centric Architectures with Vortex, Spark and ReactiveX
Reactive Data Centric Architectures with Vortex, Spark and ReactiveXAngelo Corsaro
 
Building Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebBuilding Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebAngelo Corsaro
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudBuilding and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudAngelo Corsaro
 

Mais procurados (20)

The DDS Tutorial - Part I
The DDS Tutorial - Part IThe DDS Tutorial - Part I
The DDS Tutorial - Part I
 
Vortex Tutorial Part 2
Vortex Tutorial Part 2Vortex Tutorial Part 2
Vortex Tutorial Part 2
 
Building Reactive Applications with DDS
Building Reactive Applications with DDSBuilding Reactive Applications with DDS
Building Reactive Applications with DDS
 
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
 
IoT Protocols Integration with Vortex Gateway
IoT Protocols Integration with Vortex GatewayIoT Protocols Integration with Vortex Gateway
IoT Protocols Integration with Vortex Gateway
 
DDS and OPC UA Explained
DDS and OPC UA ExplainedDDS and OPC UA Explained
DDS and OPC UA Explained
 
Distributed Algorithms with DDS
Distributed Algorithms with DDSDistributed Algorithms with DDS
Distributed Algorithms with DDS
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part II
 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEP
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
 
DDS Tutorial -- Part I
DDS Tutorial -- Part IDDS Tutorial -- Part I
DDS Tutorial -- Part I
 
Connected Mobile and Web Applications with Vortex
Connected Mobile and Web Applications with VortexConnected Mobile and Web Applications with Vortex
Connected Mobile and Web Applications with Vortex
 
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.
 
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
 
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
 
DDS Security
DDS SecurityDDS Security
DDS Security
 
Reactive Data Centric Architectures with Vortex, Spark and ReactiveX
Reactive Data Centric Architectures with Vortex, Spark and ReactiveXReactive Data Centric Architectures with Vortex, Spark and ReactiveX
Reactive Data Centric Architectures with Vortex, Spark and ReactiveX
 
Building Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebBuilding Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-Web
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudBuilding and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex Cloud
 

Destaque

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
 
OpenSplice DDS Tutorial -- Part II
OpenSplice DDS Tutorial -- Part IIOpenSplice DDS Tutorial -- Part II
OpenSplice DDS Tutorial -- Part IIAngelo Corsaro
 
20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice NewbiesAngelo Corsaro
 
Free/Open Source Software
Free/Open Source SoftwareFree/Open Source Software
Free/Open Source SoftwareAngelo Corsaro
 
The Open Splice.Org Community
The Open Splice.Org CommunityThe Open Splice.Org Community
The Open Splice.Org CommunityAngelo Corsaro
 
Test 2 Polymer Notes
Test 2 Polymer NotesTest 2 Polymer Notes
Test 2 Polymer Notessad asad
 
Dreamforce 2012 Xactly CEO Keynote
Dreamforce 2012 Xactly CEO KeynoteDreamforce 2012 Xactly CEO Keynote
Dreamforce 2012 Xactly CEO KeynoteBriscoe Pelkey
 
Small World Tours
Small World ToursSmall World Tours
Small World ToursC FM
 

Destaque (15)

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
 
OpenSplice DDS v6
OpenSplice DDS v6OpenSplice DDS v6
OpenSplice DDS v6
 
OpenSplice DDS Tutorial -- Part II
OpenSplice DDS Tutorial -- Part IIOpenSplice DDS Tutorial -- Part II
OpenSplice DDS Tutorial -- Part II
 
20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies
 
Sph 107 Ch 7
Sph 107 Ch 7Sph 107 Ch 7
Sph 107 Ch 7
 
ikp321-01
ikp321-01ikp321-01
ikp321-01
 
Free/Open Source Software
Free/Open Source SoftwareFree/Open Source Software
Free/Open Source Software
 
The Open Splice.Org Community
The Open Splice.Org CommunityThe Open Splice.Org Community
The Open Splice.Org Community
 
Test 2 Polymer Notes
Test 2 Polymer NotesTest 2 Polymer Notes
Test 2 Polymer Notes
 
Greetings
GreetingsGreetings
Greetings
 
ikp213-06-horn-clause
ikp213-06-horn-clauseikp213-06-horn-clause
ikp213-06-horn-clause
 
ikh331-05-transaction
ikh331-05-transactionikh331-05-transaction
ikh331-05-transaction
 
Dreamforce 2012 Xactly CEO Keynote
Dreamforce 2012 Xactly CEO KeynoteDreamforce 2012 Xactly CEO Keynote
Dreamforce 2012 Xactly CEO Keynote
 
Small World Tours
Small World ToursSmall World Tours
Small World Tours
 

Semelhante a Desktop, Embedded and Mobile Apps with Vortex Café

Fog Computing with VORTEX
Fog Computing with VORTEXFog Computing with VORTEX
Fog Computing with VORTEXAngelo Corsaro
 
Designing a Scalable Twitter - Patterns for Designing Scalable Real-Time Web ...
Designing a Scalable Twitter - Patterns for Designing Scalable Real-Time Web ...Designing a Scalable Twitter - Patterns for Designing Scalable Real-Time Web ...
Designing a Scalable Twitter - Patterns for Designing Scalable Real-Time Web ...Nati Shalom
 
DDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileDDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileAngelo Corsaro
 
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingDDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingJaime Martin Losa
 
Droidcon London 2021 - Full Stack Dart
Droidcon London 2021   - Full Stack DartDroidcon London 2021   - Full Stack Dart
Droidcon London 2021 - Full Stack DartChris Swan
 
RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011Gerardo Pardo-Castellote
 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSAngelo Corsaro
 
Resume_Appaji
Resume_AppajiResume_Appaji
Resume_AppajiAppaji K
 
Harbour IT & VMware - vForum 2010 Wrap
Harbour IT & VMware - vForum 2010 WrapHarbour IT & VMware - vForum 2010 Wrap
Harbour IT & VMware - vForum 2010 WrapHarbourIT
 
Web Services and Devices Profile for Web Services (DPWS)
Web Services and Devices Profile for Web Services (DPWS)Web Services and Devices Profile for Web Services (DPWS)
Web Services and Devices Profile for Web Services (DPWS)Jorgen Thelin
 
Privacy Preservation in cloud Environment using AES Algorithm
Privacy Preservation in cloud Environment using AES AlgorithmPrivacy Preservation in cloud Environment using AES Algorithm
Privacy Preservation in cloud Environment using AES AlgorithmIRJET Journal
 
The Windows Azure Platform (MSDN Events Series)
The Windows Azure Platform (MSDN Events Series)The Windows Azure Platform (MSDN Events Series)
The Windows Azure Platform (MSDN Events Series)Dave Bost
 
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineIMC Institute
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudBuilding and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudADLINK Technology IoT
 
What is expected from Chief Cloud Officers?
What is expected from Chief Cloud Officers?What is expected from Chief Cloud Officers?
What is expected from Chief Cloud Officers?Bernard Paques
 
Azure & WP7 at GRDevDay
Azure & WP7 at GRDevDayAzure & WP7 at GRDevDay
Azure & WP7 at GRDevDaySam Basu
 
Introduction to DDS
Introduction to DDSIntroduction to DDS
Introduction to DDSRick Warren
 
Fanug - Pragmatic Windows Phone Developer
Fanug - Pragmatic Windows Phone DeveloperFanug - Pragmatic Windows Phone Developer
Fanug - Pragmatic Windows Phone DeveloperSam Basu
 

Semelhante a Desktop, Embedded and Mobile Apps with Vortex Café (20)

Fog Computing with VORTEX
Fog Computing with VORTEXFog Computing with VORTEX
Fog Computing with VORTEX
 
Designing a Scalable Twitter - Patterns for Designing Scalable Real-Time Web ...
Designing a Scalable Twitter - Patterns for Designing Scalable Real-Time Web ...Designing a Scalable Twitter - Patterns for Designing Scalable Real-Time Web ...
Designing a Scalable Twitter - Patterns for Designing Scalable Real-Time Web ...
 
DDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileDDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice Mobile
 
DevCon5 (July 2014) - Acision SDK
DevCon5 (July 2014) - Acision SDKDevCon5 (July 2014) - Acision SDK
DevCon5 (July 2014) - Acision SDK
 
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingDDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
 
Vortex Cloud Beyond Cloud Messaging
Vortex Cloud Beyond Cloud MessagingVortex Cloud Beyond Cloud Messaging
Vortex Cloud Beyond Cloud Messaging
 
Droidcon London 2021 - Full Stack Dart
Droidcon London 2021   - Full Stack DartDroidcon London 2021   - Full Stack Dart
Droidcon London 2021 - Full Stack Dart
 
RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011
 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDS
 
Resume_Appaji
Resume_AppajiResume_Appaji
Resume_Appaji
 
Harbour IT & VMware - vForum 2010 Wrap
Harbour IT & VMware - vForum 2010 WrapHarbour IT & VMware - vForum 2010 Wrap
Harbour IT & VMware - vForum 2010 Wrap
 
Web Services and Devices Profile for Web Services (DPWS)
Web Services and Devices Profile for Web Services (DPWS)Web Services and Devices Profile for Web Services (DPWS)
Web Services and Devices Profile for Web Services (DPWS)
 
Privacy Preservation in cloud Environment using AES Algorithm
Privacy Preservation in cloud Environment using AES AlgorithmPrivacy Preservation in cloud Environment using AES Algorithm
Privacy Preservation in cloud Environment using AES Algorithm
 
The Windows Azure Platform (MSDN Events Series)
The Windows Azure Platform (MSDN Events Series)The Windows Azure Platform (MSDN Events Series)
The Windows Azure Platform (MSDN Events Series)
 
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudBuilding and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex Cloud
 
What is expected from Chief Cloud Officers?
What is expected from Chief Cloud Officers?What is expected from Chief Cloud Officers?
What is expected from Chief Cloud Officers?
 
Azure & WP7 at GRDevDay
Azure & WP7 at GRDevDayAzure & WP7 at GRDevDay
Azure & WP7 at GRDevDay
 
Introduction to DDS
Introduction to DDSIntroduction to DDS
Introduction to DDS
 
Fanug - Pragmatic Windows Phone Developer
Fanug - Pragmatic Windows Phone DeveloperFanug - Pragmatic Windows Phone Developer
Fanug - Pragmatic Windows Phone Developer
 

Mais de 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: 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
 
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
 
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
 

Mais de 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: 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
 
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
 
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
 

Último

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 

Último (20)

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 

Desktop, Embedded and Mobile Apps with Vortex Café

  • 1. Desktop, Embedded and Mobile Distributed Apps with Angelo  Corsaro,  PhD   Chief  Technology  Officer   angelo.corsaro@prismtech.com 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?