Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe
description
Transcript of Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe
![Page 1: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/1.jpg)
Desktop, Embedded and Mobile Distributed Apps with
Angelo Corsaro, PhD Chief Technology Officer
Café
![Page 2: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/2.jpg)
Vortex
![Page 3: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/3.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
Vortex enable seamless, ubiquitous, efficient and timely data sharing across mobile, embedded, desktop, cloud and web applications
The Vortex Platform
![Page 4: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/4.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
One Standard, One set of Tools, One Goal — Ubiquitous Data Sharing
The Vortex PlatformVORTEXWeb
VORTEXLite
VORTEXGateway
VORTEXCloud
PrivateClouds
VORTEXTools
• Insight • Record/Replay • Tuner • Tester • Configurator
OpenSpliceEnterprise
VORTEXCafé
![Page 5: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/5.jpg)
Vortex Café
![Page 6: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/6.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 7: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/7.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 8: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/8.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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]
![Page 9: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/9.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 10: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/10.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 11: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/11.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 12: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/12.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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 $*
![Page 13: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/13.jpg)
Anatomy of a Vortex-Cafe App
![Page 14: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/14.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
• 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
![Page 15: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/15.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
Brewing Vortex-Cafeint 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();
![Page 16: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/16.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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()) }
![Page 17: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/17.jpg)
Android
![Page 18: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/18.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4Android 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
![Page 19: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/19.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 20: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/20.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4Activities, 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
![Page 21: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/21.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4The 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
![Page 22: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/22.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
Notice that Activities are also destroyed each time there is a screen rotation (unless you don’t explicitly manage it)
Activities Life-Cycle
![Page 23: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/23.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
Tasks and Back Tasks
![Page 24: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/24.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 25: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/25.jpg)
DDS Chat
![Page 26: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/26.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4To 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
![Page 27: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/27.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 28: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/28.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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]
![Page 29: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/29.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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]
![Page 30: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/30.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
Applicationpublic 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);! }!!
![Page 31: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/31.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
Application
! public DataReader<Post> reader() {! return this.dr;! }!! public DataWriter<Post> writer() {! return this.dw;! }!!! @Override! public void onTerminate() {! super.onTerminate();! this.dp.close();! }!}!
![Page 32: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/32.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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>!
![Page 33: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/33.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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"/>!
![Page 34: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/34.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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"! />!!
![Page 35: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/35.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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>!
![Page 36: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/36.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 37: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/37.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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 }!
![Page 38: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/38.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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 }!
![Page 39: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/39.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 40: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/40.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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 !
![Page 41: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/41.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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 }!
![Page 42: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/42.jpg)
Raspberry Pi
![Page 43: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/43.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 44: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/44.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 45: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/45.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4Getting 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
![Page 46: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/46.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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
![Page 47: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/47.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
Chat App
![Page 48: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/48.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
Chat App
![Page 49: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/49.jpg)
Let’s get Action!
![Page 50: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/50.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4Vortex 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
![Page 51: Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe](https://reader034.fdocuments.us/reader034/viewer/2022042714/554f553eb4c905b9508b5037/html5/thumbnails/51.jpg)
Cop
yrig
ht P
rism
Tech
, 201
4
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?