SlideShare a Scribd company logo
OpenSplice DDS
                                      Delivering Performance, Openness, and Freedom




                                 The DDS Tutorial
Angelo Corsaro, Ph.D.
      Chief Technology Officer
        OMG DDS SIG Co-Chair
angelo.corsaro@prismtech.com



                                            ::Part I
Addressing Data Distribution Challenges
                                                          DDS is standard designed to address the data-distribution challenges across
                                                                                 a wide class of Defense and Aerospace Applications

The OMG DDS Standard
ā€£ Introduced in 2004, DDS is a standard
    for Real-Time, Dependable and High-
    Performance Publish/Subscribe
ā€£   DDS behaviour and semantics can be
    controlled via a rich set of QoS Policies
ā€£ DDS is today recommended by key
    administration worldwide and widely
    adopted across several different
    application domains, such as, Automated
    Trading, Simulations, SCADA, Telemetry,
    etc.

                                                Ā© 2009, PrismTech. All Rights Reserved
The OMG Data Distribution Service (DDS)
DDS v1.2 API Standard
ā€£ Language Independent, OS and HW architecture                                                         Application

    independent                                                                                            Object/Relational Mapping
ā€£   DCPS. Standard API for Data-Centric, Topic-                                                     Data Local Reconstruction Layer (DLRL)
    Based, Real-Time Publish/Subscribe
                                                                                                                               Content
ā€£   DLRL. Standard API for creating Object Views out                                  Ownership           Durability
                                                                                                                             Subscription

    of collection of Topics                                                                           Minimum Proļ¬le

                                                                                           Data Centric Publish/Subscribe (DCPS)
DDSI/RTPS v2.1 Wire Protocol Standard
ā€£ Standard wire protocol allowing interoperability                                          Real-Time Publish/Subscribe Protocol


    between different implementations of the DDS                                              DDS Interoperability Wire Protocol

    standard                                                                                               UDP/IP

ā€£   Interoperability demonstrated among key DDS
    vendors in March 2009
                                             Ā© 2009, PrismTech. All Rights Reserved
Tutorial Scope
Scope & Goals
ā€£ The Tutorial will cover the DCPS layer of DDS                                                   Application

ā€£ It will give you enough details and examples                                                        Object/Relational Mapping

  to make sure that you can get started                                                        Data Local Reconstruction Layer (DLRL)

  writing DDS applications
                                                                                                                          Content
                                                                                 Ownership           Durability
                                                                                                                        Subscription
Software
ā€£ OpenSplice DDS
                                                                                                 Minimum Proļ¬le

                                                                                      Data Centric Publish/Subscribe (DCPS)

  ā€£ http://www.opensplice.org                                                          Real-Time Publish/Subscribe Protocol
ā€£ SIMple Dds (SIMD)                                                                      DDS Interoperability Wire Protocol

  ā€£http://code.google.com/p/simd-cxx                                                                  UDP/IP

Prerequisite
ā€£ Basic C++ understanding
                                        Ā© 2009, PrismTech. All Rights Reserved
OpenSplice DDS
Delivering Performance, Openness, and Freedom


Your will learn:
- What is a Topic
- How to deļ¬ne Topic Types
- How to register a Topic               Step I
                             Deļ¬ning the Data
Topics

Topic
ā€£ Unit of information atomically
  exchanged between Publisher and
  Subscribers.
ā€£ An association between a unique name,
  a type and a QoS setting




                                   Ā© 2009, PrismTech. All Rights Reserved
Topic Types

A DDS Topic Type is described by an IDL Structure containing an arbitrary number for
fields whose types might be:
ā€£ IDL primitive types, e.g., octet, short, long, float, string (bound/unbound), etc.
ā€£ Enumeration
ā€£ Union
ā€£ Sequence (bounded or unbounded)
ā€£ Array
ā€£ Structure (nested)



                                    Ā© 2009, PrismTech. All Rights Reserved
Examples

struct HelloTopicType {                                                     enum TemperatureScale {
   string message;                                                             CELSIUS,
};                                                                             FAHRENHEIT,
                              struct ShapeType {                               KELVIN
                                 long x;                                    };
                                 long y;
                                 long shapesize;                            struct TempSensorType {
struct PingType                  string color;                                 short id;
{                             };                                               float temp;
   long         counter;                                                       float hum;
   string<32>   vendor;                                                        TemperatureScale scale;
};                                                                          };


                           struct Counter {
                              long cID;
                              long count;
                           };



                                   Ā© 2009, PrismTech. All Rights Reserved
Topic Types & Keys



ā€£ Each Topic Type has to define its key-set (which might be the empty set)
ā€£ There are no limitations on the number of attributes used to represent a key
ā€£ Keys can be top-level attributes as well as nested-attributes (i.e. attributes in nested
  structures)




                                        Ā© 2009, PrismTech. All Rights Reserved
Key Examples -- Empty Key-Set


                                                                     struct PingType
struct HelloTopicType {                                              {
   string message;                                                      long         counter;
};                                                                      string<32>   vendor;
#pragma keylist HelloTopicType                                       };
                                                                     #pragma keylist PingType




                                 Ā© 2009, PrismTech. All Rights Reserved
Key Examples -- User-Defined Keys

                                                                 enum TemperatureScale {
                                                                    CELSIUS,
                                                                    FAHRENHEIT,
struct ShapeType {
                                                                    KELVIN
   long x;
                                                                 };
   long y;
   long shapesize;
                                                                 struct TempSensorType {
   string color;
                                                                    short id;
};
                                                                    short roomid;
#pragma keylist ShapeType color
                                                                    float temp;
                                                                    float hum;
                                                                    TemperatureScale scale;
                  struct Counter {                               };
                     long cID;                                   #pragma keylist TempSensorType id roomid
                     long count;
                  };
                  #pragma keylist Counter cID


                                        Ā© 2009, PrismTech. All Rights Reserved
Topic Keys Gotchas
ā€£ Keys are used to identify specific data ā€œinstancesā€
ā€£ It we want to make a parallel with OO then we could say that:
 ā€£ Keyless Topic as singletons, e.g. there is only one instance!
 ā€£ Keyed Topics identify a class of instances. Each instance is identified by a key value
 ā€£ Think at each different key value as really instantiating a new ā€œobjectā€ in your system. That will avoid
   making mistakes in your keys assignment
ā€£ Never do something like this:
                struct Counter {
                   long cID;
                   long count;
                };
                #pragma keylist Counter count


 ... As it will create a new topic instance for each ping you send thus consuming an unbounded
 amount of resources!
                                            Ā© 2009, PrismTech. All Rights Reserved
Compiling Topic Types
ā€£ Topic types have to be compiled with the DDS-provided IDL compiler
ā€£ The compilation process will take care of generating code for
 ā€£ Strongly typed Reader and Writers
 ā€£ Type Serialization
ā€£ When compiling a target language should be chosen, such as C/C++/Java/C#

ā€£ Example:
             $ idlpp -S -l cpp -d gencxx ShapeType.idl

             $ idlpp -S -l java -d genjava ShapeType.idl


              Standalone mode
                                Target Language             Target Directory               Target File

                                                  Ā© 2009, PrismTech. All Rights Reserved
IDL Compilation in SIMD

ā€£ SIMD provides a template makefile that you can use to compile your IDL files.
ā€£ The default language is C++ (as SIMD currently supports only C++)

       Makeļ¬le.idl

        #-*-Makefile-*-
        include $(SIMD_HOME)/config/apps/Macros-idl.GNU

        TARGET_IDL=ShapeType.idl

        include $(SIMD_HOME)/config/apps/Rules-idl.GNU




                                        Ā© 2009, PrismTech. All Rights Reserved
Putting it all Together


                                             Circle


struct ShapeType {
   long   x;
   long   y;
   long   shapesize;                          Topic                        QoS
   string color;
};
#pragma keylist ShapeType color




                                  Ā© 2009, PrismTech. All Rights Reserved
Registering Topics with SIMD

ā€£ SIMD provides several constructors that allow to register a topic:

     Topic(const std::string& name);

     Topic(const std::string& name, const TopicQos& qos);

     Topic(const std::string& name, const std::string& type_name);

     Topic(const std::string& name, const std::string& type_name, const TopicQos& qos);




                                         Ā© 2009, PrismTech. All Rights Reserved
Registering the Circle Topic
                                    Circle


struct ShapeType {
   long   x;
   long   y;
   long   shapesize;                                                       Default
                                     Topic                                  QoS
   string color;
};
#pragma keylist ShapeType color




                   dds::Topic<ShapeType> shape(ā€œCircleā€);


                                  Ā© 2009, PrismTech. All Rights Reserved
Topic Registration Gotchas

ā€£ Topics registration is idempotent as far as you register the topic in the same way from various
    applications.
ā€£   It is an error to try to register a topic with the same name but a different type.

ā€£ Example:
                Application 1                                                         Application 2


dds::Topic<ShapeType> shape(ā€œCircleā€);                          dds::Topic<ShapeType> shape(ā€œCircleā€);     OK



dds::Topic<ShapeType> shape(ā€œCircleā€);                          dds::Topic<AnotherType> shape(ā€œCircleā€);   Errror



                                             Ā© 2009, PrismTech. All Rights Reserved
OpenSplice DDS
Delivering Performance, Openness, and Freedom


Your will learn:
- What are DDS Partitions
- How to partitions work
                                        Step II
                            Deļ¬ning the Scope
Domains and Partitions
                                              Domain


Domain
ā€£ A Domain is one instance of the DDS
  Global Data Space
ā€£ DDS entities always belong to a specific
  domain
Partition
ā€£ A partition is a scoping mechanism
  provided by DDS organize a partition                                             DDS
                                                                              Global Data Space
                                             Partition



                                              Ā© 2009, PrismTech. All Rights Reserved
More about Partitions

ā€£ Each partition is identified by a
    string, such as ā€œsensor-dataā€,
    ā€œlog-dataā€ etc.
ā€£   Read/Write access to a
    partition is gained by means of
    DDS Publisher/Subscribers
ā€£   Each Publisher/Subscriber
    can be provided with a list of
    Partitions name, which might
    as well include wildcards ,or                                                   DDS
    generic regular expression,                                                Global Data Space
                                                          Partition
    such as ā€œ*-dataā€


                                      Ā© 2009, PrismTech. All Rights Reserved
Partition as Namespaces

ā€£ Although DDS does not support explicit nesting of partitions, a powerful way of organizing your
    data is by always using a hierarchical ā€œdottedā€ notation to describe them.
ā€£   For instance, for a building in which you are deploying the new temperature control system you
    might use a scheme such as ā€œbuilding.floor-level.room-numberā€ for scoping the data that flows
    in each room.
    ā€£ building.floor-2.room-10
    ā€£ building.floor-3.room-15
ā€£ In this way, accessing the data for a specific floor can be done by using the partition
    expression ā€œbuilding.floor-2.*ā€
ā€£   While the data for all the building is available via ā€œbuilding.*ā€



                                             Ā© 2009, PrismTech. All Rights Reserved
Emulating Partition Nesting
ā€œbuilding.ļ¬‚oor-1.*ā€

                                           ā€œbuildingā€

                            ā€œbuilding.ļ¬‚oor-1ā€
        ā€œbuilding.ļ¬‚oor-1.room-1ā€ ...                                  ā€œbuilding.ļ¬‚oor-Nā€
                     ā€œbuilding.ļ¬‚oor-1.room-2ā€               ā€œbuilding.ļ¬‚oor-N.room-1ā€
                                                                                         ā€œbuilding.ļ¬‚oor-N.room-2ā€
                                                                            ...
                                      ā€œbuilding.ļ¬‚oor-2ā€
                 ā€œbuilding.ļ¬‚oor-2.room-1ā€
                                                          ...
                                          ā€œbuilding.ļ¬‚oor-2.room-2ā€
                                     ...

                                                Ā© 2009, PrismTech. All Rights Reserved
Connecting to Partitions in SIMD
ā€£ SIMD provides two ways of connecting to partitions.
ā€£ A simple one is to bound the full runtime to a partition expression by passing a string to the
    Runtime class at construction time
ā€£   The other is to configure a specific Publisher/Subscriber with the relevant list of partitions

Runtime();
Runtime(const std::string& partition);
Runtime(const std::string& partition, const std::string& domain);

Publisher(const std::string& partition);
Publisher(const std::string& partition, ::dds::DomainParticipant dp);
Publisher(const ::dds::PublisherQos& qos, ::dds::DomainParticipant dp);

Subscriber(const std::string& partition);
Subscriber(const std::string& partition, ::dds::DomainParticipant dp);
Subscriber(const ::dds::SubscriberQos& qos, ::dds::DomainParticipant dp);



                                            Ā© 2009, PrismTech. All Rights Reserved
OpenSplice DDS
Delivering Performance, Openness, and Freedom


Your will learn:
- What is a Data Writer
- How to Create a Data Writer
- How to write Data                         Step III
                                Producing the Data
Writing Data in SIMD



ā€£ Writing data with SIMD takes two steps.
ā€£ First you have to create the DataWriter by using the proper constructor (this
  depends on the level of customization you require)
ā€£ Then, youā€™ll have to decide how you want to write the data




                                 Ā© 2009, PrismTech. All Rights Reserved
Creating a DataWriter
ā€£ SIMD provides different DataWriter constructors allowing to control the
 level of customization required for the specific writer

template <typename T>
class dds::pub::DataWriter : public dds::core::Entity {
public:
   DataWriter();

   DataWriter(Topic<T> topic)

   DataWriter(Topic<T> topic, const DataWriterQos& qos)

   DataWriter(Topic<T> topic, const DataWriterQos& qos, Publisher pub);
// ...
};

                                 Ā© 2009, PrismTech. All Rights Reserved
Writing Data with SIMD

ā€£ SIMD provides two generic writes as well as a method for creating a writer
  dedicated to a specific instance
ā€£ The DataInstanceWriter provides constant time writes as it does not
  need to look-up the key-fields

 DDS::ReturnCode_t write(const T& sample);

 DDS::ReturnCode_t write(const T& sample, const DDS::Time_t& timestamp);

 DataInstanceWriter<T> register_instance(const T& key);




                                Ā© 2009, PrismTech. All Rights Reserved
Writing ā€œCirclingā€ Circle Samples




              Ā© 2009, PrismTech. All Rights Reserved
OpenSplice DDS
Delivering Performance, Openness, and Freedom


Your will learn:
- Reading vs Taking data
- Sample State
- How to Create a Data Reader
- How to read/take data
                                       Step IV
                                Consuming Data
Reading Samples

                                                                                                  ā€£ Read iterates over the
                                                                                                      available sample instances
                                                                                                  ā€£
                   1   1     1   2   1   3   1     4
                                                                                                      Samples are not removed
                   2   1     2   2   2   3
DataReader                                                                                            from the local cache as




                                                                                                                                   Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
                   3   1     3   2   3   3   3      4       3    5
                                                                                                      result of a read
                                                                     Topic                        ā€£   Read samples can be read
                                                                                                      again, by accessing the
    Samples Read                 Samples not Read
                                                                                                      cache with the proper
                                                                                                      options (more later)
                           DataReader Cache

                                                                                      struct Counter {
                                                                                         int cID;
                                                                                         int count;
                                                                                      };
                                                                                      #pragma keylist Counter cID
                                                 Ā© 2009, PrismTech. All Rights Reserved
Reading Samples
                                                                                               ā€£ Read iterates over the
                                                                                                   available sample instances
                  1    1     1   2   1   3   1     4
                                                                                               ā€£   Samples are not removed
                  2    1     2   2   2   3
                                                                                                   from the local cache as
DataReader




                                                                                                                                Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
                  3    1     3   2   3   3   3      4       3    5
                                                                                                   result of a read
                                                                                               ā€£   Read samples can be read
                                                                     Topic
                                                                                                   again, by accessing the
        Samples Read                 Samples not Read                                              cache with the proper
                                                                                                   options (more later)
                           DataReader Cache
                                                                                      struct Counter {
                                                                                         int cID;
                                                                                         int count;
                                                                                      };
                                                                                      #pragma keylist Counter cID
                                                 Ā© 2009, PrismTech. All Rights Reserved
Reading Samples
                                                                                         ā€£ Read iterates over the
                                                                                             available sample instances
             1   1     1   2   1   3   1     4
                                                                                         ā€£   Samples are not removed
             2   1     2   2   2   3
                                                                                             from the local cache as
DataReader




                                                                                                                          Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
             3   1     3   2   3   3   3      4       3    5
                                                                                             result of a read
                                                                                         ā€£   Read samples can be read
                                                               Topic
                                                                                             again, by accessing the
             Samples Read              Samples not Read                                      cache with the proper
                                                                                             options (more later)
                     DataReader Cache
                                                                                struct Counter {
                                                                                   int cID;
                                                                                   int count;
                                                                                };
                                                                                #pragma keylist Counter cID
                                           Ā© 2009, PrismTech. All Rights Reserved
Taking Samples
                                                                                         ā€£ Take iterates over the
                                                                                             available sample instances
             1   1     1   2   1   3   1     4
                                                                                         ā€£   Taken Samples are
             2   1     2   2   2   3
                                                                                             removed from the local
DataReader




                                                                                                                          Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
                                       3      4       3    5
                                                                                             cache as result of a take
             3   1     3   2   3   3
                                                                                         ā€£
                                                               Topic

                           Samples not Taken


                     DataReader Cache
                                                                                struct Counter {
                                                                                   int cID;
                                                                                   int count;
                                                                                };
                                                                                #pragma keylist Counter cID
                                           Ā© 2009, PrismTech. All Rights Reserved
Taking Samples
                                                                                 ā€£ Take iterates over the
                                                                                     available sample instances
               1   2   1   3   1     4
                                                                                 ā€£   Taken Samples are
               2   2   2   3
                                                                                     removed from the local
DataReader




                                                                                                                  Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
               3   2   3   3   3      4       3    5
                                                                                     cache as result of a take

                                                       Topic

                       Samples not Taken


             DataReader Cache
                                                                        struct Counter {
                                                                           int cID;
                                                                           int count;
                                                                        };
                                                                        #pragma keylist Counter cID
                                   Ā© 2009, PrismTech. All Rights Reserved
Taking Samples
                                                                              ā€£ Take iterates over the
                                                                                  available sample instances
                    1   3   1     4
                                                                              ā€£   Taken Samples are
                    2   3
                                                                                  removed from the local
DataReader




                                                                                                               Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
                    3   3   3      4       3    5
                                                                                  cache as result of a take

                                                    Topic

                        Samples not Taken


             DataReader Cache
                                                                     struct Counter {
                                                                        int cID;
                                                                        int count;
                                                                     };
                                                                     #pragma keylist Counter cID
                                Ā© 2009, PrismTech. All Rights Reserved
Sample, Instance and View States
                      History Depth = 2


                                              ā€£ Along with data samples, DataReaders are provided
                      1       1
                                                with state information allowing to detect relevant
                      2       2
                                                transitions in the life-cycle of data as well as data
                      3                         writers
  DataReader




                                                                                                          Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
                     SampleInfo               ā€£ Sample State (READ | NOT_READ): Determines
                                                wether a sample has already been read by this
                      1   1   1   2
                                                DataReader or not.
                      2   2   2   3
                                              ā€£ Instance State (ALIVE, NOT_ALIVE, DISPOSED).
                      3   1
                                                Determines wether (1) writer exist for the specific
                      Samples                   instance, or (2) no matched writers are currently
                          Topic                 available, or (3) the instance has been disposed

               DataReader Cache
                                              ā€£ View State (NEW, NOT_NEW). Determines wether
                                                this is the first sample of a new (or re-born) instance
                                          Ā© 2009, PrismTech. All Rights Reserved
Application / DDS Coordination
DDS provides three main mechanism for exchanging information with the application


ā€£ Polling. The application polls from time to time for new data or status changes. The
  interval might depend on the kind of applications as well as data




                                                                                              Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
ā€£ WaitSets. The application registers a WaitSet with DDS and waits (i.e. is suspended)
  until one of the specified events has happened.

ā€£ Listeners. The application registers a listener with a specific DDS entity to be notified
  when relevant events occur, such as state changes or




                                          Ā© 2009, PrismTech. All Rights Reserved
Reading Data with SIMD
/**
 * Reads all new samples from any view state and alive instances. Notice
 * that this call is intended to loan the <code>samples</code> as
 * well as the <conde>infos</code> containers, thus will require a
 * return_loan.
 */
DDS::ReturnCode_t read(TSeq& samples, DDS::SampleInfoSeq& infos)

/**
 * Reads at most <code>max_samples</code> samples that have not been




                                                                                      Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
 * read yet from all vies and alive instances.
 */
DDS::ReturnCode_t read(TSeq& samples, long max_samples)

/**
 * Most generic <code>read</code> exposing all the knobs provided by
 * the OMG DDS API.
 */
DDS::ReturnCode_t
read(TSeq& samples, DDS::SampleInfoSeq& infos,long max_samples,
     DDS::SampleStateMask samples_state, DDS::ViewStateMask views_state,
     DDS::InstanceStateMask instances_state)

DDS::ReturnCode_t
return_loan(TSeq& samples, DDS::SampleInfoSeq& infos);


                                             Ā© 2009, PrismTech. All Rights Reserved
Taking Data with SIMD
/**
 * Reads all new samples from any view state and alive instances. Notice
 * that this call is intended to loan the <code>samples</code> as
 * well as the <conde>infos</code> containers, thus will require a
 * return_loan.
 */
DDS::ReturnCode_t take(TSeq& samples, DDS::SampleInfoSeq& infos)

/**




                                                                                     Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
 * Reads at most <code>max_samples</code> samples that have not been
 * read yet from all vies and alive instances.
 */
DDS::ReturnCode_t take(TSeq& samples, long max_samples)

/**
 * Most generic <code>read</code> exposing all the knobs provided by
 * the OMG DDS API.
 */
DDS::ReturnCode_t
take(TSeq& samples, DDS::SampleInfoSeq& infos,long max_samples,
     DDS::SampleStateMask samples_state, DDS::ViewStateMask views_state,
     DDS::InstanceStateMask instances_state)




                                            Ā© 2009, PrismTech. All Rights Reserved
WaitSets in SIMD

ā€£ SIMD provides a strongly typed WaitSet that supports automatic dispatching to functors
ā€£ The best way of understanding SIMD waitsets is to look at an example:




                                                                                           Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
                                       Ā© 2009, PrismTech. All Rights Reserved
Listeners
 in SIMD


ā€£ SIMD provides a strongly
    typed Listeners based on
    the Signals/Slots patterns




                                                                          Proprietary Information - Distribution without Expressed Written Permission is Prohibited.
ā€£   The best way of
    understanding SIMD
    Listeners is to look at an
    example...




                                 Ā© 2009, PrismTech. All Rights Reserved
OpenSplice DDS
Delivering Performance, Openness, and Freedom




                                Step V
                     Compile and Run...
What Youā€™ve Learned today



ā€£ Defining Topics and Topic Types
ā€£ Scoping Information with Partitions
ā€£ Writing Data
ā€£ Reading (Taking) data with Waitsets and Listeners
ā€£ Writing an example that demonstrate all of the above



                               Ā© 2009, PrismTech. All Rights Reserved
What Iā€™ll Cover Next Time



ā€£ Content Filtered Topics and Queries
ā€£ QoS and the Request vs. Offered Model
ā€£ Setting QoS on DDS Entities
ā€£ Tuning OpenSplice DDS Configuration



                               Ā© 2009, PrismTech. All Rights Reserved
Online Resources

 http://www.opensplice.com/
                                                                                  http://www.slideshare.net/angelo.corsaro
 emailto:opensplicedds@prismtech.com




 http://bit.ly/1Sreg                                                              http://twitter.com/acorsaro/




                                                                                  http://opensplice.blogspot.com
 http://www.youtube.com/OpenSpliceTube


                                         Ā© 2009, PrismTech. All Rights Reserved

More Related Content

What's hot

DDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data LinksDDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data Links
Real-Time Innovations (RTI)
Ā 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
Angelo Corsaro
Ā 
The DDS Security Standard
The DDS Security StandardThe DDS Security Standard
The DDS Security Standard
Angelo Corsaro
Ā 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
Angelo Corsaro
Ā 
DDS In Action Part II
DDS In Action Part IIDDS In Action Part II
DDS In Action Part II
Angelo Corsaro
Ā 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
Angelo Corsaro
Ā 
10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS
Angelo Corsaro
Ā 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
Angelo Corsaro
Ā 
Overview of the DDS-XRCE specification
Overview of the DDS-XRCE specificationOverview of the DDS-XRCE specification
Overview of the DDS-XRCE specification
Gerardo Pardo-Castellote
Ā 
Tuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsTuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsAngelo Corsaro
Ā 
Introduction to RTI DDS
Introduction to RTI DDSIntroduction to RTI DDS
Introduction to RTI DDS
Real-Time Innovations (RTI)
Ā 
DDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardDDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing Standard
Angelo Corsaro
Ā 
Getting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaGetting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaAngelo 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 Meeting
Jaime Martin Losa
Ā 
The Art and Science of DDS Data Modelling
The Art and Science of DDS Data ModellingThe Art and Science of DDS Data Modelling
The Art and Science of DDS Data Modelling
Angelo Corsaro
Ā 
Fast RTPS: Programming with the Default Middleware for Robotics Adopted in ROS2
Fast RTPS: Programming with the Default Middleware for Robotics Adopted in ROS2Fast RTPS: Programming with the Default Middleware for Robotics Adopted in ROS2
Fast RTPS: Programming with the Default Middleware for Robotics Adopted in ROS2
Jaime Martin Losa
Ā 
20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies
Angelo 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 Age
Angelo Corsaro
Ā 
DDS Security
DDS SecurityDDS Security
DDS Security
Angelo Corsaro
Ā 
Best Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDSBest Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDS
Real-Time Innovations (RTI)
Ā 

What's hot (20)

DDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data LinksDDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data Links
Ā 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
Ā 
The DDS Security Standard
The DDS Security StandardThe DDS Security Standard
The DDS Security Standard
Ā 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
Ā 
DDS In Action Part II
DDS In Action Part IIDDS In Action Part II
DDS In Action Part II
Ā 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
Ā 
10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS
Ā 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
Ā 
Overview of the DDS-XRCE specification
Overview of the DDS-XRCE specificationOverview of the DDS-XRCE specification
Overview of the DDS-XRCE specification
Ā 
Tuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsTuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS Applications
Ā 
Introduction to RTI DDS
Introduction to RTI DDSIntroduction to RTI DDS
Introduction to RTI DDS
Ā 
DDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardDDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing Standard
Ā 
Getting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaGetting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and Scala
Ā 
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
Ā 
The Art and Science of DDS Data Modelling
The Art and Science of DDS Data ModellingThe Art and Science of DDS Data Modelling
The Art and Science of DDS Data Modelling
Ā 
Fast RTPS: Programming with the Default Middleware for Robotics Adopted in ROS2
Fast RTPS: Programming with the Default Middleware for Robotics Adopted in ROS2Fast RTPS: Programming with the Default Middleware for Robotics Adopted in ROS2
Fast RTPS: Programming with the Default Middleware for Robotics Adopted in ROS2
Ā 
20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies
Ā 
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
Ā 
DDS Security
DDS SecurityDDS Security
DDS Security
Ā 
Best Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDSBest Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDS
Ā 

Viewers also liked

OpenSplice DDS v6
OpenSplice DDS v6OpenSplice DDS v6
OpenSplice DDS v6
Angelo Corsaro
Ā 
Building the Internet of Things
Building the Internet of ThingsBuilding the Internet of Things
Building the Internet of ThingsAngelo Corsaro
Ā 
Standardizing the Data Distribution Service (DDS) API for Modern C++
Standardizing the Data Distribution Service (DDS) API for Modern C++Standardizing the Data Distribution Service (DDS) API for Modern C++
Standardizing the Data Distribution Service (DDS) API for Modern C++Sumant Tambe
Ā 
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of ThingsComparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
Real-Time Innovations (RTI)
Ā 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming Ruminations
Angelo Corsaro
Ā 
Distributed Simulations with DDS and HLA
Distributed Simulations with DDS and HLADistributed Simulations with DDS and HLA
Distributed Simulations with DDS and HLA
Angelo Corsaro
Ā 
Advanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part IAdvanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part I
Angelo Corsaro
Ā 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEP
Angelo Corsaro
Ā 
Vortex Tutorial -- Part I
Vortex Tutorial -- Part IVortex Tutorial -- Part I
Vortex Tutorial -- Part I
Angelo Corsaro
Ā 
Vortex Tutorial Part II
Vortex Tutorial Part IIVortex Tutorial Part II
Vortex Tutorial Part II
Angelo Corsaro
Ā 
Desktop, Embedded and Mobile Apps with Vortex CafƩ
Desktop, Embedded and Mobile Apps with Vortex CafƩDesktop, Embedded and Mobile Apps with Vortex CafƩ
Desktop, Embedded and Mobile Apps with Vortex CafƩ
Angelo 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-Web
Angelo Corsaro
Ā 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part II
Angelo 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 Vortex
Angelo 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
Ā 
Building Reactive Applications with DDS
Building Reactive Applications with DDSBuilding Reactive Applications with DDS
Building Reactive Applications with DDS
Angelo Corsaro
Ā 
Getting Started with Vortex
Getting Started with VortexGetting Started with Vortex
Getting Started with Vortex
Angelo Corsaro
Ā 
Introducing Vortex Lite
Introducing Vortex LiteIntroducing Vortex Lite
Introducing Vortex Lite
Angelo Corsaro
Ā 

Viewers also liked (18)

OpenSplice DDS v6
OpenSplice DDS v6OpenSplice DDS v6
OpenSplice DDS v6
Ā 
Building the Internet of Things
Building the Internet of ThingsBuilding the Internet of Things
Building the Internet of Things
Ā 
Standardizing the Data Distribution Service (DDS) API for Modern C++
Standardizing the Data Distribution Service (DDS) API for Modern C++Standardizing the Data Distribution Service (DDS) API for Modern C++
Standardizing the Data Distribution Service (DDS) API for Modern C++
Ā 
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of ThingsComparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
Ā 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming Ruminations
Ā 
Distributed Simulations with DDS and HLA
Distributed Simulations with DDS and HLADistributed Simulations with DDS and HLA
Distributed Simulations with DDS and HLA
Ā 
Advanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part IAdvanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part I
Ā 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEP
Ā 
Vortex Tutorial -- Part I
Vortex Tutorial -- Part IVortex Tutorial -- Part I
Vortex Tutorial -- Part I
Ā 
Vortex Tutorial Part II
Vortex Tutorial Part IIVortex Tutorial Part II
Vortex Tutorial Part II
Ā 
Desktop, Embedded and Mobile Apps with Vortex CafƩ
Desktop, Embedded and Mobile Apps with Vortex CafƩDesktop, Embedded and Mobile Apps with Vortex CafƩ
Desktop, Embedded and Mobile Apps with Vortex CafƩ
Ā 
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
Ā 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part II
Ā 
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.
Ā 
Building Reactive Applications with DDS
Building Reactive Applications with DDSBuilding Reactive Applications with DDS
Building Reactive Applications with DDS
Ā 
Getting Started with Vortex
Getting Started with VortexGetting Started with Vortex
Getting Started with Vortex
Ā 
Introducing Vortex Lite
Introducing Vortex LiteIntroducing Vortex Lite
Introducing Vortex Lite
Ā 

Similar to The DDS Tutorial - Part I

DDS vs AMQP
DDS vs AMQPDDS vs AMQP
DDS vs AMQP
Angelo Corsaro
Ā 
ISO C++ DDS PSM
ISO C++ DDS PSMISO C++ DDS PSM
ISO C++ DDS PSM
Angelo Corsaro
Ā 
UML Profile for DDS
UML Profile for DDSUML Profile for DDS
UML Profile for DDS
Angelo Corsaro
Ā 
A Gentle Introduction to OpenSplice DDS
A Gentle Introduction to OpenSplice DDSA Gentle Introduction to OpenSplice DDS
A Gentle Introduction to OpenSplice DDS
Angelo Corsaro
Ā 
Tweeting with OpenSplice DDS
Tweeting with OpenSplice DDSTweeting with OpenSplice DDS
Tweeting with OpenSplice DDS
Angelo Corsaro
Ā 
Cloudand Xchange
Cloudand XchangeCloudand Xchange
Cloudand Xchange
Skills Matter
Ā 
Fast RTPS Workshop at FIWARE Summit 2018
Fast RTPS Workshop at FIWARE Summit 2018Fast RTPS Workshop at FIWARE Summit 2018
Fast RTPS Workshop at FIWARE Summit 2018
Jaime Martin Losa
Ā 
Real Time Java DDS
Real Time Java DDSReal Time Java DDS
Real Time Java DDSkerush
Ā 
Fiware - communicating with ROS robots using Fast RTPS
Fiware - communicating with ROS robots using Fast RTPSFiware - communicating with ROS robots using Fast RTPS
Fiware - communicating with ROS robots using Fast RTPS
Jaime Martin Losa
Ā 
DDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxDDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxx
Angelo Corsaro
Ā 
dds.pptx
dds.pptxdds.pptx
dds.pptx
PriyadharshiniG41
Ā 
Distributed Systems: How to connect your real-time applications
Distributed Systems: How to connect your real-time applicationsDistributed Systems: How to connect your real-time applications
Distributed Systems: How to connect your real-time applications
Jaime Martin Losa
Ā 
Fiware: Connecting to robots
Fiware: Connecting to robotsFiware: Connecting to robots
Fiware: Connecting to robots
Jaime Martin Losa
Ā 
OMG DDS Tutorial - Part I
OMG DDS Tutorial - Part IOMG DDS Tutorial - Part I
OMG DDS Tutorial - Part I
Angelo Corsaro
Ā 
Beyond messaging
Beyond messagingBeyond messaging
Beyond messaging
Angelo Corsaro
Ā 
OMG DDS Interoperability Demo 2009
OMG DDS Interoperability Demo 2009OMG DDS Interoperability Demo 2009
OMG DDS Interoperability Demo 2009
Gerardo Pardo-Castellote
Ā 
Distributed Algorithms with DDS
Distributed Algorithms with DDSDistributed Algorithms with DDS
Distributed Algorithms with DDS
Angelo Corsaro
Ā 
SimD
SimDSimD
Component Based DDS with C++11 and R2DDS
Component Based DDS with C++11 and R2DDSComponent Based DDS with C++11 and R2DDS
Component Based DDS with C++11 and R2DDS
Remedy IT
Ā 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDS
Angelo Corsaro
Ā 

Similar to The DDS Tutorial - Part I (20)

DDS vs AMQP
DDS vs AMQPDDS vs AMQP
DDS vs AMQP
Ā 
ISO C++ DDS PSM
ISO C++ DDS PSMISO C++ DDS PSM
ISO C++ DDS PSM
Ā 
UML Profile for DDS
UML Profile for DDSUML Profile for DDS
UML Profile for DDS
Ā 
A Gentle Introduction to OpenSplice DDS
A Gentle Introduction to OpenSplice DDSA Gentle Introduction to OpenSplice DDS
A Gentle Introduction to OpenSplice DDS
Ā 
Tweeting with OpenSplice DDS
Tweeting with OpenSplice DDSTweeting with OpenSplice DDS
Tweeting with OpenSplice DDS
Ā 
Cloudand Xchange
Cloudand XchangeCloudand Xchange
Cloudand Xchange
Ā 
Fast RTPS Workshop at FIWARE Summit 2018
Fast RTPS Workshop at FIWARE Summit 2018Fast RTPS Workshop at FIWARE Summit 2018
Fast RTPS Workshop at FIWARE Summit 2018
Ā 
Real Time Java DDS
Real Time Java DDSReal Time Java DDS
Real Time Java DDS
Ā 
Fiware - communicating with ROS robots using Fast RTPS
Fiware - communicating with ROS robots using Fast RTPSFiware - communicating with ROS robots using Fast RTPS
Fiware - communicating with ROS robots using Fast RTPS
Ā 
DDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxDDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxx
Ā 
dds.pptx
dds.pptxdds.pptx
dds.pptx
Ā 
Distributed Systems: How to connect your real-time applications
Distributed Systems: How to connect your real-time applicationsDistributed Systems: How to connect your real-time applications
Distributed Systems: How to connect your real-time applications
Ā 
Fiware: Connecting to robots
Fiware: Connecting to robotsFiware: Connecting to robots
Fiware: Connecting to robots
Ā 
OMG DDS Tutorial - Part I
OMG DDS Tutorial - Part IOMG DDS Tutorial - Part I
OMG DDS Tutorial - Part I
Ā 
Beyond messaging
Beyond messagingBeyond messaging
Beyond messaging
Ā 
OMG DDS Interoperability Demo 2009
OMG DDS Interoperability Demo 2009OMG DDS Interoperability Demo 2009
OMG DDS Interoperability Demo 2009
Ā 
Distributed Algorithms with DDS
Distributed Algorithms with DDSDistributed Algorithms with DDS
Distributed Algorithms with DDS
Ā 
SimD
SimDSimD
SimD
Ā 
Component Based DDS with C++11 and R2DDS
Component Based DDS with C++11 and R2DDSComponent Based DDS with C++11 and R2DDS
Component Based DDS with C++11 and R2DDS
Ā 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDS
Ā 

More from Angelo Corsaro

Zenoh: The Genesis
Zenoh: The GenesisZenoh: The Genesis
Zenoh: The Genesis
Angelo Corsaro
Ā 
zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data Fabric
Angelo Corsaro
Ā 
Zenoh Tutorial
Zenoh TutorialZenoh Tutorial
Zenoh Tutorial
Angelo 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 Monetisation
Angelo 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 compute
Angelo Corsaro
Ā 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
Angelo Corsaro
Ā 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
Angelo 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 Computing
Angelo Corsaro
Ā 
Eastern Sicily
Eastern SicilyEastern Sicily
Eastern Sicily
Angelo Corsaro
Ā 
fog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructurefog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructure
Angelo Corsaro
Ā 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing Platform
Angelo Corsaro
Ā 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture Four
Angelo Corsaro
Ā 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture Three
Angelo Corsaro
Ā 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
Angelo Corsaro
Ā 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture One
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 Envionrments
Angelo 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 Standard
Angelo Corsaro
Ā 
Fog Computing Defined
Fog Computing DefinedFog Computing Defined
Fog Computing Defined
Angelo Corsaro
Ā 
DDS and OPC UA Explained
DDS and OPC UA ExplainedDDS and OPC UA Explained
DDS and OPC UA Explained
Angelo Corsaro
Ā 
The Cloudy, Foggy and Misty Internet of Things -- Toward Fluid IoT Architect...
The Cloudy, Foggy and Misty Internet of Things --  Toward Fluid IoT Architect...The Cloudy, Foggy and Misty Internet of Things --  Toward Fluid IoT Architect...
The Cloudy, Foggy and Misty Internet of Things -- Toward Fluid IoT Architect...
Angelo Corsaro
Ā 

More from Angelo Corsaro (20)

Zenoh: The Genesis
Zenoh: The GenesisZenoh: The Genesis
Zenoh: The Genesis
Ā 
zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data Fabric
Ā 
Zenoh Tutorial
Zenoh TutorialZenoh Tutorial
Zenoh Tutorial
Ā 
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationData Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Ā 
zenoh: 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
Ā 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing Platform
Ā 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture Four
Ā 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture Three
Ā 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
Ā 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture One
Ā 
Data Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsData Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained Envionrments
Ā 
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
Ā 
DDS and OPC UA Explained
DDS and OPC UA ExplainedDDS and OPC UA Explained
DDS and OPC UA Explained
Ā 
The Cloudy, Foggy and Misty Internet of Things -- Toward Fluid IoT Architect...
The Cloudy, Foggy and Misty Internet of Things --  Toward Fluid IoT Architect...The Cloudy, Foggy and Misty Internet of Things --  Toward Fluid IoT Architect...
The Cloudy, Foggy and Misty Internet of Things -- Toward Fluid IoT Architect...
Ā 

Recently uploaded

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
Ā 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
Ā 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
Ā 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
Ā 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
Ā 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
Ā 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
Ā 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
Ā 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
Ā 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
Ā 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
Ā 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
Ā 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
Ā 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
Ā 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
Ā 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
Ā 
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
UiPathCommunity
Ā 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
Ā 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
Ā 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
Ā 

Recently uploaded (20)

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Ā 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Ā 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Ā 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Ā 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Ā 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
Ā 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
Ā 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Ā 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Ā 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Ā 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Ā 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
Ā 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Ā 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Ā 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
Ā 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ā 
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Ā 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Ā 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Ā 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Ā 

The DDS Tutorial - Part I

  • 1. OpenSplice DDS Delivering Performance, Openness, and Freedom The DDS Tutorial Angelo Corsaro, Ph.D. Chief Technology Officer OMG DDS SIG Co-Chair angelo.corsaro@prismtech.com ::Part I
  • 2. Addressing Data Distribution Challenges DDS is standard designed to address the data-distribution challenges across a wide class of Defense and Aerospace Applications The OMG DDS Standard ā€£ Introduced in 2004, DDS is a standard for Real-Time, Dependable and High- Performance Publish/Subscribe ā€£ DDS behaviour and semantics can be controlled via a rich set of QoS Policies ā€£ DDS is today recommended by key administration worldwide and widely adopted across several different application domains, such as, Automated Trading, Simulations, SCADA, Telemetry, etc. Ā© 2009, PrismTech. All Rights Reserved
  • 3. The OMG Data Distribution Service (DDS) DDS v1.2 API Standard ā€£ Language Independent, OS and HW architecture Application independent Object/Relational Mapping ā€£ DCPS. Standard API for Data-Centric, Topic- Data Local Reconstruction Layer (DLRL) Based, Real-Time Publish/Subscribe Content ā€£ DLRL. Standard API for creating Object Views out Ownership Durability Subscription of collection of Topics Minimum Proļ¬le Data Centric Publish/Subscribe (DCPS) DDSI/RTPS v2.1 Wire Protocol Standard ā€£ Standard wire protocol allowing interoperability Real-Time Publish/Subscribe Protocol between different implementations of the DDS DDS Interoperability Wire Protocol standard UDP/IP ā€£ Interoperability demonstrated among key DDS vendors in March 2009 Ā© 2009, PrismTech. All Rights Reserved
  • 4. Tutorial Scope Scope & Goals ā€£ The Tutorial will cover the DCPS layer of DDS Application ā€£ It will give you enough details and examples Object/Relational Mapping to make sure that you can get started Data Local Reconstruction Layer (DLRL) writing DDS applications Content Ownership Durability Subscription Software ā€£ OpenSplice DDS Minimum Proļ¬le Data Centric Publish/Subscribe (DCPS) ā€£ http://www.opensplice.org Real-Time Publish/Subscribe Protocol ā€£ SIMple Dds (SIMD) DDS Interoperability Wire Protocol ā€£http://code.google.com/p/simd-cxx UDP/IP Prerequisite ā€£ Basic C++ understanding Ā© 2009, PrismTech. All Rights Reserved
  • 5. OpenSplice DDS Delivering Performance, Openness, and Freedom Your will learn: - What is a Topic - How to deļ¬ne Topic Types - How to register a Topic Step I Deļ¬ning the Data
  • 6. Topics Topic ā€£ Unit of information atomically exchanged between Publisher and Subscribers. ā€£ An association between a unique name, a type and a QoS setting Ā© 2009, PrismTech. All Rights Reserved
  • 7. Topic Types A DDS Topic Type is described by an IDL Structure containing an arbitrary number for fields whose types might be: ā€£ IDL primitive types, e.g., octet, short, long, float, string (bound/unbound), etc. ā€£ Enumeration ā€£ Union ā€£ Sequence (bounded or unbounded) ā€£ Array ā€£ Structure (nested) Ā© 2009, PrismTech. All Rights Reserved
  • 8. Examples struct HelloTopicType { enum TemperatureScale { string message; CELSIUS, }; FAHRENHEIT, struct ShapeType { KELVIN long x; }; long y; long shapesize; struct TempSensorType { struct PingType string color; short id; { }; float temp; long counter; float hum; string<32> vendor; TemperatureScale scale; }; }; struct Counter { long cID; long count; }; Ā© 2009, PrismTech. All Rights Reserved
  • 9. Topic Types & Keys ā€£ Each Topic Type has to define its key-set (which might be the empty set) ā€£ There are no limitations on the number of attributes used to represent a key ā€£ Keys can be top-level attributes as well as nested-attributes (i.e. attributes in nested structures) Ā© 2009, PrismTech. All Rights Reserved
  • 10. Key Examples -- Empty Key-Set struct PingType struct HelloTopicType { { string message; long counter; }; string<32> vendor; #pragma keylist HelloTopicType }; #pragma keylist PingType Ā© 2009, PrismTech. All Rights Reserved
  • 11. Key Examples -- User-Defined Keys enum TemperatureScale { CELSIUS, FAHRENHEIT, struct ShapeType { KELVIN long x; }; long y; long shapesize; struct TempSensorType { string color; short id; }; short roomid; #pragma keylist ShapeType color float temp; float hum; TemperatureScale scale; struct Counter { }; long cID; #pragma keylist TempSensorType id roomid long count; }; #pragma keylist Counter cID Ā© 2009, PrismTech. All Rights Reserved
  • 12. Topic Keys Gotchas ā€£ Keys are used to identify specific data ā€œinstancesā€ ā€£ It we want to make a parallel with OO then we could say that: ā€£ Keyless Topic as singletons, e.g. there is only one instance! ā€£ Keyed Topics identify a class of instances. Each instance is identified by a key value ā€£ Think at each different key value as really instantiating a new ā€œobjectā€ in your system. That will avoid making mistakes in your keys assignment ā€£ Never do something like this: struct Counter { long cID; long count; }; #pragma keylist Counter count ... As it will create a new topic instance for each ping you send thus consuming an unbounded amount of resources! Ā© 2009, PrismTech. All Rights Reserved
  • 13. Compiling Topic Types ā€£ Topic types have to be compiled with the DDS-provided IDL compiler ā€£ The compilation process will take care of generating code for ā€£ Strongly typed Reader and Writers ā€£ Type Serialization ā€£ When compiling a target language should be chosen, such as C/C++/Java/C# ā€£ Example: $ idlpp -S -l cpp -d gencxx ShapeType.idl $ idlpp -S -l java -d genjava ShapeType.idl Standalone mode Target Language Target Directory Target File Ā© 2009, PrismTech. All Rights Reserved
  • 14. IDL Compilation in SIMD ā€£ SIMD provides a template makefile that you can use to compile your IDL files. ā€£ The default language is C++ (as SIMD currently supports only C++) Makeļ¬le.idl #-*-Makefile-*- include $(SIMD_HOME)/config/apps/Macros-idl.GNU TARGET_IDL=ShapeType.idl include $(SIMD_HOME)/config/apps/Rules-idl.GNU Ā© 2009, PrismTech. All Rights Reserved
  • 15. Putting it all Together Circle struct ShapeType { long x; long y; long shapesize; Topic QoS string color; }; #pragma keylist ShapeType color Ā© 2009, PrismTech. All Rights Reserved
  • 16. Registering Topics with SIMD ā€£ SIMD provides several constructors that allow to register a topic: Topic(const std::string& name); Topic(const std::string& name, const TopicQos& qos); Topic(const std::string& name, const std::string& type_name); Topic(const std::string& name, const std::string& type_name, const TopicQos& qos); Ā© 2009, PrismTech. All Rights Reserved
  • 17. Registering the Circle Topic Circle struct ShapeType { long x; long y; long shapesize; Default Topic QoS string color; }; #pragma keylist ShapeType color dds::Topic<ShapeType> shape(ā€œCircleā€); Ā© 2009, PrismTech. All Rights Reserved
  • 18. Topic Registration Gotchas ā€£ Topics registration is idempotent as far as you register the topic in the same way from various applications. ā€£ It is an error to try to register a topic with the same name but a different type. ā€£ Example: Application 1 Application 2 dds::Topic<ShapeType> shape(ā€œCircleā€); dds::Topic<ShapeType> shape(ā€œCircleā€); OK dds::Topic<ShapeType> shape(ā€œCircleā€); dds::Topic<AnotherType> shape(ā€œCircleā€); Errror Ā© 2009, PrismTech. All Rights Reserved
  • 19. OpenSplice DDS Delivering Performance, Openness, and Freedom Your will learn: - What are DDS Partitions - How to partitions work Step II Deļ¬ning the Scope
  • 20. Domains and Partitions Domain Domain ā€£ A Domain is one instance of the DDS Global Data Space ā€£ DDS entities always belong to a specific domain Partition ā€£ A partition is a scoping mechanism provided by DDS organize a partition DDS Global Data Space Partition Ā© 2009, PrismTech. All Rights Reserved
  • 21. More about Partitions ā€£ Each partition is identified by a string, such as ā€œsensor-dataā€, ā€œlog-dataā€ etc. ā€£ Read/Write access to a partition is gained by means of DDS Publisher/Subscribers ā€£ Each Publisher/Subscriber can be provided with a list of Partitions name, which might as well include wildcards ,or DDS generic regular expression, Global Data Space Partition such as ā€œ*-dataā€ Ā© 2009, PrismTech. All Rights Reserved
  • 22. Partition as Namespaces ā€£ Although DDS does not support explicit nesting of partitions, a powerful way of organizing your data is by always using a hierarchical ā€œdottedā€ notation to describe them. ā€£ For instance, for a building in which you are deploying the new temperature control system you might use a scheme such as ā€œbuilding.floor-level.room-numberā€ for scoping the data that flows in each room. ā€£ building.floor-2.room-10 ā€£ building.floor-3.room-15 ā€£ In this way, accessing the data for a specific floor can be done by using the partition expression ā€œbuilding.floor-2.*ā€ ā€£ While the data for all the building is available via ā€œbuilding.*ā€ Ā© 2009, PrismTech. All Rights Reserved
  • 23. Emulating Partition Nesting ā€œbuilding.ļ¬‚oor-1.*ā€ ā€œbuildingā€ ā€œbuilding.ļ¬‚oor-1ā€ ā€œbuilding.ļ¬‚oor-1.room-1ā€ ... ā€œbuilding.ļ¬‚oor-Nā€ ā€œbuilding.ļ¬‚oor-1.room-2ā€ ā€œbuilding.ļ¬‚oor-N.room-1ā€ ā€œbuilding.ļ¬‚oor-N.room-2ā€ ... ā€œbuilding.ļ¬‚oor-2ā€ ā€œbuilding.ļ¬‚oor-2.room-1ā€ ... ā€œbuilding.ļ¬‚oor-2.room-2ā€ ... Ā© 2009, PrismTech. All Rights Reserved
  • 24. Connecting to Partitions in SIMD ā€£ SIMD provides two ways of connecting to partitions. ā€£ A simple one is to bound the full runtime to a partition expression by passing a string to the Runtime class at construction time ā€£ The other is to configure a specific Publisher/Subscriber with the relevant list of partitions Runtime(); Runtime(const std::string& partition); Runtime(const std::string& partition, const std::string& domain); Publisher(const std::string& partition); Publisher(const std::string& partition, ::dds::DomainParticipant dp); Publisher(const ::dds::PublisherQos& qos, ::dds::DomainParticipant dp); Subscriber(const std::string& partition); Subscriber(const std::string& partition, ::dds::DomainParticipant dp); Subscriber(const ::dds::SubscriberQos& qos, ::dds::DomainParticipant dp); Ā© 2009, PrismTech. All Rights Reserved
  • 25. OpenSplice DDS Delivering Performance, Openness, and Freedom Your will learn: - What is a Data Writer - How to Create a Data Writer - How to write Data Step III Producing the Data
  • 26. Writing Data in SIMD ā€£ Writing data with SIMD takes two steps. ā€£ First you have to create the DataWriter by using the proper constructor (this depends on the level of customization you require) ā€£ Then, youā€™ll have to decide how you want to write the data Ā© 2009, PrismTech. All Rights Reserved
  • 27. Creating a DataWriter ā€£ SIMD provides different DataWriter constructors allowing to control the level of customization required for the specific writer template <typename T> class dds::pub::DataWriter : public dds::core::Entity { public: DataWriter(); DataWriter(Topic<T> topic) DataWriter(Topic<T> topic, const DataWriterQos& qos) DataWriter(Topic<T> topic, const DataWriterQos& qos, Publisher pub); // ... }; Ā© 2009, PrismTech. All Rights Reserved
  • 28. Writing Data with SIMD ā€£ SIMD provides two generic writes as well as a method for creating a writer dedicated to a specific instance ā€£ The DataInstanceWriter provides constant time writes as it does not need to look-up the key-fields DDS::ReturnCode_t write(const T& sample); DDS::ReturnCode_t write(const T& sample, const DDS::Time_t& timestamp); DataInstanceWriter<T> register_instance(const T& key); Ā© 2009, PrismTech. All Rights Reserved
  • 29. Writing ā€œCirclingā€ Circle Samples Ā© 2009, PrismTech. All Rights Reserved
  • 30. OpenSplice DDS Delivering Performance, Openness, and Freedom Your will learn: - Reading vs Taking data - Sample State - How to Create a Data Reader - How to read/take data Step IV Consuming Data
  • 31. Reading Samples ā€£ Read iterates over the available sample instances ā€£ 1 1 1 2 1 3 1 4 Samples are not removed 2 1 2 2 2 3 DataReader from the local cache as Proprietary Information - Distribution without Expressed Written Permission is Prohibited. 3 1 3 2 3 3 3 4 3 5 result of a read Topic ā€£ Read samples can be read again, by accessing the Samples Read Samples not Read cache with the proper options (more later) DataReader Cache struct Counter { int cID; int count; }; #pragma keylist Counter cID Ā© 2009, PrismTech. All Rights Reserved
  • 32. Reading Samples ā€£ Read iterates over the available sample instances 1 1 1 2 1 3 1 4 ā€£ Samples are not removed 2 1 2 2 2 3 from the local cache as DataReader Proprietary Information - Distribution without Expressed Written Permission is Prohibited. 3 1 3 2 3 3 3 4 3 5 result of a read ā€£ Read samples can be read Topic again, by accessing the Samples Read Samples not Read cache with the proper options (more later) DataReader Cache struct Counter { int cID; int count; }; #pragma keylist Counter cID Ā© 2009, PrismTech. All Rights Reserved
  • 33. Reading Samples ā€£ Read iterates over the available sample instances 1 1 1 2 1 3 1 4 ā€£ Samples are not removed 2 1 2 2 2 3 from the local cache as DataReader Proprietary Information - Distribution without Expressed Written Permission is Prohibited. 3 1 3 2 3 3 3 4 3 5 result of a read ā€£ Read samples can be read Topic again, by accessing the Samples Read Samples not Read cache with the proper options (more later) DataReader Cache struct Counter { int cID; int count; }; #pragma keylist Counter cID Ā© 2009, PrismTech. All Rights Reserved
  • 34. Taking Samples ā€£ Take iterates over the available sample instances 1 1 1 2 1 3 1 4 ā€£ Taken Samples are 2 1 2 2 2 3 removed from the local DataReader Proprietary Information - Distribution without Expressed Written Permission is Prohibited. 3 4 3 5 cache as result of a take 3 1 3 2 3 3 ā€£ Topic Samples not Taken DataReader Cache struct Counter { int cID; int count; }; #pragma keylist Counter cID Ā© 2009, PrismTech. All Rights Reserved
  • 35. Taking Samples ā€£ Take iterates over the available sample instances 1 2 1 3 1 4 ā€£ Taken Samples are 2 2 2 3 removed from the local DataReader Proprietary Information - Distribution without Expressed Written Permission is Prohibited. 3 2 3 3 3 4 3 5 cache as result of a take Topic Samples not Taken DataReader Cache struct Counter { int cID; int count; }; #pragma keylist Counter cID Ā© 2009, PrismTech. All Rights Reserved
  • 36. Taking Samples ā€£ Take iterates over the available sample instances 1 3 1 4 ā€£ Taken Samples are 2 3 removed from the local DataReader Proprietary Information - Distribution without Expressed Written Permission is Prohibited. 3 3 3 4 3 5 cache as result of a take Topic Samples not Taken DataReader Cache struct Counter { int cID; int count; }; #pragma keylist Counter cID Ā© 2009, PrismTech. All Rights Reserved
  • 37. Sample, Instance and View States History Depth = 2 ā€£ Along with data samples, DataReaders are provided 1 1 with state information allowing to detect relevant 2 2 transitions in the life-cycle of data as well as data 3 writers DataReader Proprietary Information - Distribution without Expressed Written Permission is Prohibited. SampleInfo ā€£ Sample State (READ | NOT_READ): Determines wether a sample has already been read by this 1 1 1 2 DataReader or not. 2 2 2 3 ā€£ Instance State (ALIVE, NOT_ALIVE, DISPOSED). 3 1 Determines wether (1) writer exist for the specific Samples instance, or (2) no matched writers are currently Topic available, or (3) the instance has been disposed DataReader Cache ā€£ View State (NEW, NOT_NEW). Determines wether this is the first sample of a new (or re-born) instance Ā© 2009, PrismTech. All Rights Reserved
  • 38. Application / DDS Coordination DDS provides three main mechanism for exchanging information with the application ā€£ Polling. The application polls from time to time for new data or status changes. The interval might depend on the kind of applications as well as data Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ā€£ WaitSets. The application registers a WaitSet with DDS and waits (i.e. is suspended) until one of the specified events has happened. ā€£ Listeners. The application registers a listener with a specific DDS entity to be notified when relevant events occur, such as state changes or Ā© 2009, PrismTech. All Rights Reserved
  • 39. Reading Data with SIMD /** * Reads all new samples from any view state and alive instances. Notice * that this call is intended to loan the <code>samples</code> as * well as the <conde>infos</code> containers, thus will require a * return_loan. */ DDS::ReturnCode_t read(TSeq& samples, DDS::SampleInfoSeq& infos) /** * Reads at most <code>max_samples</code> samples that have not been Proprietary Information - Distribution without Expressed Written Permission is Prohibited. * read yet from all vies and alive instances. */ DDS::ReturnCode_t read(TSeq& samples, long max_samples) /** * Most generic <code>read</code> exposing all the knobs provided by * the OMG DDS API. */ DDS::ReturnCode_t read(TSeq& samples, DDS::SampleInfoSeq& infos,long max_samples, DDS::SampleStateMask samples_state, DDS::ViewStateMask views_state, DDS::InstanceStateMask instances_state) DDS::ReturnCode_t return_loan(TSeq& samples, DDS::SampleInfoSeq& infos); Ā© 2009, PrismTech. All Rights Reserved
  • 40. Taking Data with SIMD /** * Reads all new samples from any view state and alive instances. Notice * that this call is intended to loan the <code>samples</code> as * well as the <conde>infos</code> containers, thus will require a * return_loan. */ DDS::ReturnCode_t take(TSeq& samples, DDS::SampleInfoSeq& infos) /** Proprietary Information - Distribution without Expressed Written Permission is Prohibited. * Reads at most <code>max_samples</code> samples that have not been * read yet from all vies and alive instances. */ DDS::ReturnCode_t take(TSeq& samples, long max_samples) /** * Most generic <code>read</code> exposing all the knobs provided by * the OMG DDS API. */ DDS::ReturnCode_t take(TSeq& samples, DDS::SampleInfoSeq& infos,long max_samples, DDS::SampleStateMask samples_state, DDS::ViewStateMask views_state, DDS::InstanceStateMask instances_state) Ā© 2009, PrismTech. All Rights Reserved
  • 41. WaitSets in SIMD ā€£ SIMD provides a strongly typed WaitSet that supports automatic dispatching to functors ā€£ The best way of understanding SIMD waitsets is to look at an example: Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Ā© 2009, PrismTech. All Rights Reserved
  • 42. Listeners in SIMD ā€£ SIMD provides a strongly typed Listeners based on the Signals/Slots patterns Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ā€£ The best way of understanding SIMD Listeners is to look at an example... Ā© 2009, PrismTech. All Rights Reserved
  • 43.
  • 44. OpenSplice DDS Delivering Performance, Openness, and Freedom Step V Compile and Run...
  • 45. What Youā€™ve Learned today ā€£ Defining Topics and Topic Types ā€£ Scoping Information with Partitions ā€£ Writing Data ā€£ Reading (Taking) data with Waitsets and Listeners ā€£ Writing an example that demonstrate all of the above Ā© 2009, PrismTech. All Rights Reserved
  • 46. What Iā€™ll Cover Next Time ā€£ Content Filtered Topics and Queries ā€£ QoS and the Request vs. Offered Model ā€£ Setting QoS on DDS Entities ā€£ Tuning OpenSplice DDS Configuration Ā© 2009, PrismTech. All Rights Reserved
  • 47. Online Resources http://www.opensplice.com/ http://www.slideshare.net/angelo.corsaro emailto:opensplicedds@prismtech.com http://bit.ly/1Sreg http://twitter.com/acorsaro/ http://opensplice.blogspot.com http://www.youtube.com/OpenSpliceTube Ā© 2009, PrismTech. All Rights Reserved