SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
OpenSplice DDS
                                  Delivering Performance, Openness, and Freedom



Angelo Corsaro, Ph.D.
      Chief Technology Officer


                                 ISO C++ DDS PSM
        OMG DDS SIG Co-Chair
angelo.corsaro@prismtech.com
OpenSplice DDS
Delivering Performance, Openness, and Freedom




                                  Rationale
ISO C++ PSM Motivations

The “Native C++ Language DDS PSM” (CxxDDS) was motivated by
the following reasons:
‣Provide better integration with the C++ programming language
‣Provide a simpler and safer API to facilitate adoption within and
 beyond current user domains
‣Ensure 100% source-code portability across DDS
 implementations

                            © 2010, PrismTech. All Rights Reserved
Integration with C++

The current IDL-derived PSM suffers the following shortcomings:
‣ Limited integration of IDL-derived types with the C++ language
 ‣e.g. char* vs. std::string, Sequence vs. std::vector, etc.
‣ Limited use of features and idioms universally supported by C++
 compilers and widely used by C++ programmers
 ‣e.g. template and template-meta-programming, iterators, etc.



                            © 2010, PrismTech. All Rights Reserved
API Complexity



‣ The current API suffers from accidental complexity mostly induced
 by the limited expressiveness of IDL and the dated IDL2C++
 mapping




                             © 2010, PrismTech. All Rights Reserved
Portability


‣ The current IDL-derived API leaves some types defined as native,
 thus allowing different vendors to use different representations
 ‣e.g. the type of the domainid
‣ The current IDL-derived API does not specifies the DDS interfaces
 as local, yet semantically those are local. This has also been source of
 portability issues


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




                     Submission Overview
                                  Foundations
CxxDDS API Organization

‣ Different packages are introduced to limit the
  dependencies and group together relevant classes
‣ The submission separates clearly those files features
  that are specific to publication and subscription so
  that application can include only the minimal set of
  files
‣ The API is parametrized w.r.t. a DELEGATE layer



                                     © 2010, PrismTech. All Rights Reserved
Delegation Layer
‣ The delegation layer, is provided by vendors and used to instantiate the CxxDDS API
  into a concrete API
‣ This standard provide a reference implementation that shows how that can be done.
‣ Under any circumstances, compliant implementation shall not change the CxxDDS
  API, as detailed in Section 8, vendor-specific extensions shall be added only via
  DELEGATEs.
‣ The CxxDDS API provides a standard way of accessing vendor specific extensions
‣ Finally, although the specification allows for vendor-specific extensibility, it should be
  clear that this specification does not encourage nor recommend their use
 Using vendor specific extensions will make application non-source-code-portable to
 other CxxDDS compliant implementations and might also adversely impact on-the-
 wire interoperability.
                                       © 2010, PrismTech. All Rights Reserved
Object Model


The Native C++ Language DDS PSM (CxxDDS) is based
on an object model structured in two different kinds of
object types: reference-types and value-types



                       © 2010, PrismTech. All Rights Reserved
Reference Types

‣ Reference-types have a shallow
 (polymorphic) assignment operator that                                      Ref
 simply changes the value of the reference
                                                                                              Impl.
‣ Reference-types are safe. Under no                                         Ref
 circumstances a reference can point to an
 invalid object.                                                              Ref

‣ Memory for reference-types is
                                                                            CxxDDS   Delegate (provided by a
 automatically managed by the runtime.                                               specific vendor
                                                                                     implementation)


                                   © 2010, PrismTech. All Rights Reserved
Reference Types (cont.)

‣ The semantics for Reference types is defined by the CxxDDS class
 dds::core::Reference.

         namespace dds { namespace core {
            template <typename DELEGATE> class Reference;
         }}

‣ The specification mandates the semantics implied by the Reference class, yet the
 implementation provided as part of this standard is provided to show one possible
 way of implementing this semantics


                                    © 2010, PrismTech. All Rights Reserved
Reference Types




           © 2010, PrismTech. All Rights Reserved
WeakReferences

‣ The CxxDDS also provides safe Weak References implemented by the class
 dds::core::WeakReference
‣ Weak References can be constructed only from strong references
‣ Weak References do not expose other method other than checking wether the
 reference is valid and getting a strong-reference

       namespace dds { namespace core {
       template <typename class R <typename D>>
       class WeakReference;
       }}



                                     © 2010, PrismTech. All Rights Reserved
Value Types

‣ All objects that have a value-type have a deep-copy assignment semantics.
‣ It should also be pointed out that value-types are not “pure-value-types” in the sense
  that they are immutable (as in functional programming languages).
‣ The CxxPSM makes value-types mutable to limit the number of copies as well limit the
  time-overhead necessary to change a value-type (note that for immutable value-types
  the only form of change is to create a new value-type).
‣ Value-types always inherit from the CxxPSM dds::core::Value
The CxxDDS models all DDS entities as reference-types while QoS and Topic samples
are all modeled as value-types.


                                     © 2010, PrismTech. All Rights Reserved
API Extensibility


‣ The CxxPSM allows for QoS to be extended, either by new version of the standard or
 by vendor specific extension without any impact on the public API.
‣ The CxxPSM provides this level of extensibility while also enjoying a very compact
 representation of a QoS which leverages the combination of a DELEGEATE QoS
 implementation along with template getter and setters.




                                    © 2010, PrismTech. All Rights Reserved
QoS as an Example of Extensibility
Although the CxxPSM
specifies the EntityQoS by
leveraging variadic C++
templates for providing a
constructor taking an
arbitrary number or
arguments, some
implementation might have
to leverage other techniques
for emulating variadic
templates on non-supported
compilers. The standard
technique for doing this is to
define several template
constructors accepting an
increasing number of
arguments.

                                 © 2010, PrismTech. All Rights Reserved
Primitive Types Mapping


‣ The CxxDDS API provides its own
 interoperable definition of DDS primitive types
 and represents them in terms of standard (and
 portable) C/C++ types.




                                  © 2010, PrismTech. All Rights Reserved
Sequence Mapping



‣ Bounded and Unbounded IDL Sequences for a type T map to
 std::vector<T>




                          © 2010, PrismTech. All Rights Reserved
Parameters Passing
Constant-size Primitive types
‣ in T => T
‣ out T => T&
‣ inout T => T&

Variable-size Primitive types (e.g string, wsting)
‣ in T => const T&
‣ out T => T&
‣ inout T => T&

                                      © 2010, PrismTech. All Rights Reserved
Parameters Passing
Value Types
‣ in T => const T&
‣ out T => T&
‣ inout T => T&

Reference Types
‣ in T => const T&
‣ out T => T&
‣ inout T => T&

                     © 2010, PrismTech. All Rights Reserved
Return Parameters
Attribute Accessors for fixed-size primitive types
‣ T => T

Attribute Accessors for any other type
‣ T => const T&

Non-attribute return-values
‣ T => T


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




                     Submission Overview
                                 API Overview
DDS Entities




               © 2010, PrismTech. All Rights Reserved
Entity QoS
                         template <typename DELEGATE>
                         class Publisher : public dds::core::Entity<DELEGATE> {
                         public:
‣ To improve the            // -- QoS related methods --
 level of compile           template <typename POLICY>
                            void set_policy(const POLICY& p) {
 time error                    impl_->set_policy(p);
 detection, the             }

 current submission           template <typename POLICY>
                              const POLICY& get_policy() const {
 separates the                   return impl_->get_policy();
 initialization of            }
 entity QoS policy            dds::PublisherQos get_qos() const {
 from the update of              return impl_->get_qos();
                              }
 some of its policies.        // -- Other Publisher Methods not shown
                              // for space constraints
                         };

                                © 2010, PrismTech. All Rights Reserved
QoS Extensibility
                    Vendor-specific DDS Entity QoS (topic in this case)
                     XYZVendorTopicQoS vtqos = { /* values */ };
                     dds::Topic<MyType> topic("MyTopic", vtqos);
‣ The current
 submission
 provides two       Vendor-specific QoS Policy (topic in this case)
 ways of             dds::Topic<MyType> topic("MyTopic");
 providing vendor    XYZVendorPolicy policy = { /* values */ };
                     topic.set_policy(policy);
 specific QoS




                    © 2010, PrismTech. All Rights Reserved
Reading/Taking Data

The new API simplify and extends the ways in which data can be read/taken
by providing:
‣ std::vector based reads/takes
 ‣ The std::vector API allows for zero copy optimization
‣ Iterators based read/take supporting both:
  ‣ Forward Iterators
  ‣ Back Inserting Iterators



                                            © 2010, PrismTech. All Rights Reserved
std::vector-based read/take
/**
 * Reads all new samples from any view state and alive instances. If the provided containers have
 * zero-size than the middleware will loan memory to the application to support zero-copy reads.
 * The memory will be returned to the middleware when the container is destroyed or by explicitly
 * invoking the <code>return_loan</code> method on the data reader.
 */
void
read(std::vector<T>& samples, dds::SampleInfoSeq& infos);
/**
 * Reads at most <code>max_samples</code> samples that have not been read yet from all views
 * and alive instances.
 */
void
read(std::vector<T>& samples, uint32_t max_samples);
/**
 * Most generic <code>read</code> exposing all the knobs provided by
 * the OMG DDS API.
 */
void
read(std::vector<T>& samples, dds::SampleInfoSeq& infos,
     uint32_t max_samples, dds::SampleStateMask samples_state,
     dds::ViewStateMask views_state, dds::InstanceStateMask instances_state);


                                        © 2010, PrismTech. All Rights Reserved
std::vector-based take
/**
 * Reads all new samples from any view state and alive instances. If the provided containers have
 * zero-size than the middleware will loan memory to the application to support zero-copy reads.
 * The memory will be returned to the middleware when the container is destroyed or by explicitly
 * invoking the <code>return_loan</code> method on the data reader.
 */
void
take(std::vector<T>& samples, dds::SampleInfoSeq& infos);
/**
 * Reads at most <code>max_samples</code> samples that have not been read yet from all views
 * and alive instances.
 */
void
take(std::vector<T>& samples, uint32_t max_samples);
/**
 * Most generic <code>read</code> exposing all the knobs provided by
 * the OMG DDS API.
 */
void
take(std::vector<T>& samples, dds::SampleInfoSeq& infos,
     uint32_t max_samples, dds::SampleStateMask samples_state,
     dds::ViewStateMask views_state, dds::InstanceStateMask instances_state);


                                        © 2010, PrismTech. All Rights Reserved
FWD-Iterator-based read
 /**
  * Reads new samples from any view state and alive instances.
  */
 template <typename SamplesFWIterator, typename InfoFWIterator>
 void
 read(SamplesIterator sfit, InfoIterator ifit, uint32_t max_samples);
 /**
  * Reads at most <code>max_samples</code> samples that have not been read yet from all vies and
  * alive instances.
  */
 template <typename SamplesFWIterator>
 void
 read(SamplesFWIterator samples, uint32_t max_samples);
 /**
  * Most generic <code>read</code> exposing all the knobs provided by
  * the OMG DDS API.
  */
 template <typename SamplesFWIterator, typename InfoFWIterator>
 void
 read(SamplesFWIterator sfit, InfoFWIterator ifit,
      uint32_t max_samples, dds::SampleStateMask samples_state,
      dds::ViewStateMask views_state, dds::InstanceStateMask instances_state);


                                     © 2010, PrismTech. All Rights Reserved
FWD-Iterator-based take
 /**
  * Reads new samples from any view state and alive instances.
  */
 template <typename SamplesFWIterator, typename InfoFWIterator>
 void
 take(SamplesIterator sfit, InfoIterator ifit, uint32_t max_samples);
 /**
  * Reads at most <code>max_samples</code> samples that have not been read yet from all vies and
  * alive instances.
  */
 template <typename SamplesFWIterator>
 void
 take(SamplesFWIterator samples, uint32_t max_samples);
 /**
  * Most generic <code>read</code> exposing all the knobs provided by
  * the OMG DDS API.
  */
 template <typename SamplesFWIterator, typename InfoFWIterator>
 void
 take(SamplesFWIterator sfit, InfoFWIterator ifit,
      uint32_t max_samples, dds::SampleStateMask samples_state,
      dds::ViewStateMask views_state, dds::InstanceStateMask instances_state);


                                     © 2010, PrismTech. All Rights Reserved
BI-Iterator-based read
 /**
  * Reads all new samples from any view state and alive instances.
  */
 template <typename SamplesBIIterator, typename InfoBIIterator>
 void
 read(SamplesIterator sbit,
      InfoIterator ibit);
 /**
  * Most generic <code>take</code> exposing all the knobs provided by
  * the OMG DDS API.
  */
 template <typename SamplesBIIterator, typename InfoBIIterator>
 void
 read(SamplesBIIterator ifit, InfoBIIterator ifit,
      dds::SampleStateMask samples_state,
      dds::ViewStateMask views_state, dds::InstanceStateMask instances_state);




                                   © 2010, PrismTech. All Rights Reserved
BI-Iterator-based take
 /**
  * Reads all new samples from any view state and alive instances.
  */
 template <typename SamplesBIIterator, typename InfoBIIterator>
 void
 take(SamplesIterator sbit,
      InfoIterator ibit);
 /**
  * Most generic <code>take</code> exposing all the knobs provided by
  * the OMG DDS API.
  */
 template <typename SamplesBIIterator, typename InfoBIIterator>
 void
 take(SamplesBIIterator ifit, InfoBIIterator ifit,
      dds::SampleStateMask samples_state,
      dds::ViewStateMask views_state, dds::InstanceStateMask instances_state);




                                   © 2010, PrismTech. All Rights Reserved
Conditions




             © 2010, PrismTech. All Rights Reserved
Creating a Condition (ex.)

  /**
   * Creates an <code>ActiveReadCondition</code> that waits for new samples to
   * be arriving in order to notify.
   */
  template <typename F>
  ::dds::Condition
  create_readcondition(const F& f);




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




                     Submission Overview
                          Writing an application
IDL as Usual
       enum TemperatureScale {
       ! CELSIUS,
       ! KELVIN,
       ! FAHRENHEIT
       };
       !
       struct TempSensorType {
       ! short id;
       ! float temp;
       ! float hum;
             TemperatureScale scale;

       };
       #pragma keylist TempSensor id



                  © 2010, PrismTech. All Rights Reserved
Writer: As simple as it gets
 /**********************************************************
  * DataWriter
  **********************************************************/
 dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
 // Create a Publisher connected to the proper partition
 // Create a DataWriter
 dds::DataWriter<TempSensorType> dw(tsTopic);

 TempSensorType ts = {1, 26.0F, 70.0F, CELSIUS};
 // Write Data
 dw.write(ts);




                          © 2010, PrismTech. All Rights Reserved
Customizing the Writer QoS
 /**********************************************************
  * DataWriter
  **********************************************************/
 dds::DomainParticipant dp(did);
 dds::Publisher pub(dp, pqos);
 dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
 // Create a Publisher connected to the proper partition
 // Create a DataWriter
 dds::DataWriter<TempSensorType> dw(tsTopic, pub, dwqos);

 TempSensorType ts = {1, 26.0F, 70.0F, CELSIUS};
 // Write Data
 dw.write(ts);




                          © 2010, PrismTech. All Rights Reserved
Data Reader
  /**********************************************************
   * DataReader
   **********************************************************/
  dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
  // Create a DataReader
  dds::DataReader<TempSensorType> dr(tsTopic);

  // If no initial size is provided than the read will read
  // all available samples
  std::vector<TempSensorType> data;
  SampleInfoSeq info; // This is a std::vector too!

  while (true) {
     dr.read(data, info);
     for (int i = 0; i < data.length(); ++i)
        std::cout << data[i] << std::endl;
     sleep(1);

                          © 2010, PrismTech. All Rights Reserved
Data Reader (with FW Iterators)
  /**********************************************************
   * DataReader
   **********************************************************/

  dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
  // Create a DataReader
  dds::DataReader<TempSensorType> dr(tsTopic);

  std::vector<TempSensorType> data(length);
  SampleInfoSeq info(length); // This is a std::vector too!

  while (true) {
     dr.read(data.begin(), info.begin(), length);
     for (int i = 0; i < data.length(); ++i)
        std::cout << data[i] << std::endl;
     sleep(1);
  }

                          © 2010, PrismTech. All Rights Reserved
Data Reader (with BI Iterators)
  /**********************************************************
   * DataReader
   **********************************************************/

  dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
  // Create a DataReader
  dds::DataReader<TempSensorType> dr(tsTopic);

  std::vector<TempSensorType> data;
  SampleInfoSeq info; // This is a std::vector too!
  std::back_insert_iterator<std::vector<TempSensorType>> bid(data);
  std::back_insert_iterator<SampleInfoSeq> bii(info);
  while (true) {
     dr.read(bid, bii);
     for (int i = 0; i < data.length(); ++i)
        std::cout << data[i] << std::endl;
     sleep(1);

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




                     Interoperability with
                IDL2C++ API and CORBA
C++2IDL and CORBA Interop


‣ The new mapping defines implicit conversion methods to create the equivalent C+
 +2IDL type when needed
‣ This allows to pass a new DDS Type to a CORBA call by leveraging automatically
 generated conversions
‣ Conversion can be enabled/disabled via IDL compilers flags



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




                    Résumé & Next Steps
Résumé


‣ The CxxDDS addresses the goals of the RFP by providing a simpler, safer and well
 integrated C++ API for DDS
‣ The current submission addresses extensibility and portability
‣ Efficiency and determinism is not impacted by the higher level of abstraction




                                    © 2010, PrismTech. All Rights Reserved
Next Steps



‣ Vote a finalized version of this submission on June Meeting




                                    © 2010, 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
Thank You...



© 2009, PrismTech. All Rights Reserved

Mais conteúdo relacionado

Mais procurados

OMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsOMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsAngelo Corsaro
 
Tweeting with OpenSplice DDS
Tweeting with OpenSplice DDSTweeting with OpenSplice DDS
Tweeting with OpenSplice DDSAngelo Corsaro
 
DDS Tutorial -- Part I
DDS Tutorial -- Part IDDS Tutorial -- Part I
DDS Tutorial -- Part IAngelo 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
 
Introduction to OMG DDS (1 hour, 45 slides)
Introduction to OMG DDS (1 hour, 45 slides)Introduction to OMG DDS (1 hour, 45 slides)
Introduction to OMG DDS (1 hour, 45 slides)Gerardo Pardo-Castellote
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution ServiceAngelo Corsaro
 
Communication Patterns Using Data-Centric Publish/Subscribe
Communication Patterns Using Data-Centric Publish/SubscribeCommunication Patterns Using Data-Centric Publish/Subscribe
Communication Patterns Using Data-Centric Publish/SubscribeSumant Tambe
 
Vortex Tutorial -- Part I
Vortex Tutorial -- Part IVortex Tutorial -- Part I
Vortex Tutorial -- Part IAngelo Corsaro
 
OMG Data-Distribution Service (DDS) Tutorial - 2009
OMG Data-Distribution Service (DDS) Tutorial - 2009OMG Data-Distribution Service (DDS) Tutorial - 2009
OMG Data-Distribution Service (DDS) Tutorial - 2009Gerardo Pardo-Castellote
 
Building Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebBuilding Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebAngelo Corsaro
 
Data Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsData Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsAngelo Corsaro
 
RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011Gerardo Pardo-Castellote
 
Getting Started with Vortex
Getting Started with VortexGetting Started with Vortex
Getting Started with VortexAngelo Corsaro
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudBuilding and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudAngelo Corsaro
 
Two Approaches You Must Consider when Architecting Radar Systems
Two Approaches You Must Consider when Architecting Radar SystemsTwo Approaches You Must Consider when Architecting Radar Systems
Two Approaches You Must Consider when Architecting Radar SystemsReal-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 StandardAngelo Corsaro
 

Mais procurados (20)

DDS vs AMQP
DDS vs AMQPDDS vs AMQP
DDS vs AMQP
 
OMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsOMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time Systems
 
Tweeting with OpenSplice DDS
Tweeting with OpenSplice DDSTweeting with OpenSplice DDS
Tweeting with OpenSplice DDS
 
DDS Tutorial -- Part I
DDS Tutorial -- Part IDDS Tutorial -- Part I
DDS Tutorial -- Part I
 
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é
 
Introduction to OMG DDS (1 hour, 45 slides)
Introduction to OMG DDS (1 hour, 45 slides)Introduction to OMG DDS (1 hour, 45 slides)
Introduction to OMG DDS (1 hour, 45 slides)
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
 
Communication Patterns Using Data-Centric Publish/Subscribe
Communication Patterns Using Data-Centric Publish/SubscribeCommunication Patterns Using Data-Centric Publish/Subscribe
Communication Patterns Using Data-Centric Publish/Subscribe
 
Vortex Tutorial -- Part I
Vortex Tutorial -- Part IVortex Tutorial -- Part I
Vortex Tutorial -- Part I
 
OMG Data-Distribution Service (DDS) Tutorial - 2009
OMG Data-Distribution Service (DDS) Tutorial - 2009OMG Data-Distribution Service (DDS) Tutorial - 2009
OMG Data-Distribution Service (DDS) Tutorial - 2009
 
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
 
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
 
RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011
 
Getting Started with Vortex
Getting Started with VortexGetting Started with Vortex
Getting Started with Vortex
 
Vortex Tutorial Part 2
Vortex Tutorial Part 2Vortex Tutorial Part 2
Vortex Tutorial Part 2
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudBuilding and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex Cloud
 
Overview of the DDS-XRCE specification
Overview of the DDS-XRCE specificationOverview of the DDS-XRCE specification
Overview of the DDS-XRCE specification
 
DDS Everywhere
DDS EverywhereDDS Everywhere
DDS Everywhere
 
Two Approaches You Must Consider when Architecting Radar Systems
Two Approaches You Must Consider when Architecting Radar SystemsTwo Approaches You Must Consider when Architecting Radar Systems
Two Approaches You Must Consider when Architecting Radar Systems
 
DDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardDDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing Standard
 

Destaque

before traveling
before travelingbefore traveling
before travelingJune Song
 
Pleno municipal infantil 2012
Pleno municipal infantil 2012Pleno municipal infantil 2012
Pleno municipal infantil 2012XXX XXX
 
MV open innovation cluster conference handout
MV open innovation cluster conference handoutMV open innovation cluster conference handout
MV open innovation cluster conference handoutJohn Michitson
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Conguest29922
 
Osservatorio sul turismo Scolastico 2012
Osservatorio sul turismo Scolastico 2012 Osservatorio sul turismo Scolastico 2012
Osservatorio sul turismo Scolastico 2012 Jacopo Zurlo
 
House For Rent in Montgomery Alabama 2009
House For Rent in Montgomery Alabama 2009House For Rent in Montgomery Alabama 2009
House For Rent in Montgomery Alabama 2009sad asad
 
Hr Managers Presentation
Hr Managers PresentationHr Managers Presentation
Hr Managers Presentationericmaher
 
Global Conferencing Trends
Global Conferencing TrendsGlobal Conferencing Trends
Global Conferencing TrendsInterCall
 
In Vitro Metabolism of Clonidine in Human Hepatic Microsomes and Cytochrome P...
In Vitro Metabolism of Clonidine in Human Hepatic Microsomes and Cytochrome P...In Vitro Metabolism of Clonidine in Human Hepatic Microsomes and Cytochrome P...
In Vitro Metabolism of Clonidine in Human Hepatic Microsomes and Cytochrome P...Claessens
 
Inside a Computer
Inside a ComputerInside a Computer
Inside a ComputerSMumford
 
Matsqui/Swift - Differentiation and Engagement
Matsqui/Swift - Differentiation and EngagementMatsqui/Swift - Differentiation and Engagement
Matsqui/Swift - Differentiation and EngagementFaye Brownlie
 
Europe 6B
Europe 6BEurope 6B
Europe 6BC FM
 
Plan estratgicoparalaspersonasconte aysusfamilias
Plan estratgicoparalaspersonasconte aysusfamiliasPlan estratgicoparalaspersonasconte aysusfamilias
Plan estratgicoparalaspersonasconte aysusfamiliasPepe Jara Cueva
 

Destaque (20)

Greetings
GreetingsGreetings
Greetings
 
before traveling
before travelingbefore traveling
before traveling
 
Pleno municipal infantil 2012
Pleno municipal infantil 2012Pleno municipal infantil 2012
Pleno municipal infantil 2012
 
MV open innovation cluster conference handout
MV open innovation cluster conference handoutMV open innovation cluster conference handout
MV open innovation cluster conference handout
 
Peqoud
PeqoudPeqoud
Peqoud
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Con
 
Osservatorio sul turismo Scolastico 2012
Osservatorio sul turismo Scolastico 2012 Osservatorio sul turismo Scolastico 2012
Osservatorio sul turismo Scolastico 2012
 
Sph 107 Ch 11
Sph 107 Ch 11Sph 107 Ch 11
Sph 107 Ch 11
 
House For Rent in Montgomery Alabama 2009
House For Rent in Montgomery Alabama 2009House For Rent in Montgomery Alabama 2009
House For Rent in Montgomery Alabama 2009
 
Bonsai
BonsaiBonsai
Bonsai
 
Hr Managers Presentation
Hr Managers PresentationHr Managers Presentation
Hr Managers Presentation
 
Global Conferencing Trends
Global Conferencing TrendsGlobal Conferencing Trends
Global Conferencing Trends
 
In Vitro Metabolism of Clonidine in Human Hepatic Microsomes and Cytochrome P...
In Vitro Metabolism of Clonidine in Human Hepatic Microsomes and Cytochrome P...In Vitro Metabolism of Clonidine in Human Hepatic Microsomes and Cytochrome P...
In Vitro Metabolism of Clonidine in Human Hepatic Microsomes and Cytochrome P...
 
Pei 2010 2014
Pei 2010 2014Pei 2010 2014
Pei 2010 2014
 
Inside a Computer
Inside a ComputerInside a Computer
Inside a Computer
 
Matsqui/Swift - Differentiation and Engagement
Matsqui/Swift - Differentiation and EngagementMatsqui/Swift - Differentiation and Engagement
Matsqui/Swift - Differentiation and Engagement
 
Work Samples
Work SamplesWork Samples
Work Samples
 
Europe 6B
Europe 6BEurope 6B
Europe 6B
 
Plan estratgicoparalaspersonasconte aysusfamilias
Plan estratgicoparalaspersonasconte aysusfamiliasPlan estratgicoparalaspersonasconte aysusfamilias
Plan estratgicoparalaspersonasconte aysusfamilias
 
Hibernating DDS
Hibernating DDSHibernating DDS
Hibernating DDS
 

Semelhante a ISO C++ DDS PSM

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 R2DDSRemedy IT
 
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 applicationsJaime Martin Losa
 
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingDDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingJaime Martin Losa
 
DDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxDDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxAngelo Corsaro
 
The DDS Tutorial Part II
The DDS Tutorial Part IIThe DDS Tutorial Part II
The DDS Tutorial Part IIAngelo Corsaro
 
Integrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approachIntegrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approachRemedy IT
 
Integrating DDS into AXCIOMA - The Component Approach
Integrating DDS into AXCIOMA - The Component ApproachIntegrating DDS into AXCIOMA - The Component Approach
Integrating DDS into AXCIOMA - The Component ApproachReal-Time Innovations (RTI)
 
Distributed Algorithms with DDS
Distributed Algorithms with DDSDistributed Algorithms with DDS
Distributed Algorithms with DDSAngelo Corsaro
 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSAngelo Corsaro
 
AXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systemsAXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systemsRemedy IT
 
AXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systemsAXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systemsRemedy IT
 
Extensible and Dynamic Topic Types For DDS (out of date)
Extensible and Dynamic Topic Types For DDS (out of date)Extensible and Dynamic Topic Types For DDS (out of date)
Extensible and Dynamic Topic Types For DDS (out of date)Rick Warren
 
Model Driven, Component Based Development for CBDDS and IDL to C++11
Model Driven, Component Based Development for CBDDS and IDL to C++11Model Driven, Component Based Development for CBDDS and IDL to C++11
Model Driven, Component Based Development for CBDDS and IDL to C++11Remedy IT
 
Ymens - Bouncing off clouds - Rapid Development for Cloud Ready Applications...
Ymens - Bouncing off clouds - Rapid Development for Cloud Ready Applications...Ymens - Bouncing off clouds - Rapid Development for Cloud Ready Applications...
Ymens - Bouncing off clouds - Rapid Development for Cloud Ready Applications...Vlad Mihnea
 
[db tech showcase Tokyo 2017] C24:Taking off to the clouds. How to use DMS in...
[db tech showcase Tokyo 2017] C24:Taking off to the clouds. How to use DMS in...[db tech showcase Tokyo 2017] C24:Taking off to the clouds. How to use DMS in...
[db tech showcase Tokyo 2017] C24:Taking off to the clouds. How to use DMS in...Insight Technology, Inc.
 
Integrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approachIntegrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approachRemedy IT
 

Semelhante a ISO C++ DDS PSM (20)

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
 
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
 
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
 
DDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxDDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxx
 
The DDS Tutorial Part II
The DDS Tutorial Part IIThe DDS Tutorial Part II
The DDS Tutorial Part II
 
Interoperable DDS Strategies
Interoperable DDS StrategiesInteroperable DDS Strategies
Interoperable DDS Strategies
 
Integrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approachIntegrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approach
 
Integrating DDS into AXCIOMA - The Component Approach
Integrating DDS into AXCIOMA - The Component ApproachIntegrating DDS into AXCIOMA - The Component Approach
Integrating DDS into AXCIOMA - The Component Approach
 
Distributed Algorithms with DDS
Distributed Algorithms with DDSDistributed Algorithms with DDS
Distributed Algorithms with DDS
 
Soa wcf 1.1
Soa wcf 1.1Soa wcf 1.1
Soa wcf 1.1
 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDS
 
AXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systemsAXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systems
 
AXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systemsAXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systems
 
SimD
SimDSimD
SimD
 
Extensible and Dynamic Topic Types For DDS (out of date)
Extensible and Dynamic Topic Types For DDS (out of date)Extensible and Dynamic Topic Types For DDS (out of date)
Extensible and Dynamic Topic Types For DDS (out of date)
 
Model Driven, Component Based Development for CBDDS and IDL to C++11
Model Driven, Component Based Development for CBDDS and IDL to C++11Model Driven, Component Based Development for CBDDS and IDL to C++11
Model Driven, Component Based Development for CBDDS and IDL to C++11
 
Ymens - Bouncing off clouds - Rapid Development for Cloud Ready Applications...
Ymens - Bouncing off clouds - Rapid Development for Cloud Ready Applications...Ymens - Bouncing off clouds - Rapid Development for Cloud Ready Applications...
Ymens - Bouncing off clouds - Rapid Development for Cloud Ready Applications...
 
[db tech showcase Tokyo 2017] C24:Taking off to the clouds. How to use DMS in...
[db tech showcase Tokyo 2017] C24:Taking off to the clouds. How to use DMS in...[db tech showcase Tokyo 2017] C24:Taking off to the clouds. How to use DMS in...
[db tech showcase Tokyo 2017] C24:Taking off to the clouds. How to use DMS in...
 
Integrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approachIntegrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approach
 
Enterprise serverless
Enterprise serverlessEnterprise serverless
Enterprise serverless
 

Mais de Angelo Corsaro

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

Mais de Angelo Corsaro (20)

Zenoh: The Genesis
Zenoh: The GenesisZenoh: The Genesis
Zenoh: The Genesis
 
zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data Fabric
 
Zenoh Tutorial
Zenoh TutorialZenoh Tutorial
Zenoh Tutorial
 
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationData Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
 
zenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computezenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query compute
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
 
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingBreaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
 
Eastern Sicily
Eastern SicilyEastern Sicily
Eastern Sicily
 
fog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructurefog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructure
 
Cyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeCyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT Age
 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing Platform
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture Four
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture Three
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture One
 
The 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
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming Ruminations
 
Vortex II -- The Industrial IoT Connectivity Standard
Vortex II -- The  Industrial IoT  Connectivity StandardVortex II -- The  Industrial IoT  Connectivity Standard
Vortex II -- The Industrial IoT Connectivity Standard
 

Último

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 

Último (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 

ISO C++ DDS PSM

  • 1. OpenSplice DDS Delivering Performance, Openness, and Freedom Angelo Corsaro, Ph.D. Chief Technology Officer ISO C++ DDS PSM OMG DDS SIG Co-Chair angelo.corsaro@prismtech.com
  • 2. OpenSplice DDS Delivering Performance, Openness, and Freedom Rationale
  • 3. ISO C++ PSM Motivations The “Native C++ Language DDS PSM” (CxxDDS) was motivated by the following reasons: ‣Provide better integration with the C++ programming language ‣Provide a simpler and safer API to facilitate adoption within and beyond current user domains ‣Ensure 100% source-code portability across DDS implementations © 2010, PrismTech. All Rights Reserved
  • 4. Integration with C++ The current IDL-derived PSM suffers the following shortcomings: ‣ Limited integration of IDL-derived types with the C++ language ‣e.g. char* vs. std::string, Sequence vs. std::vector, etc. ‣ Limited use of features and idioms universally supported by C++ compilers and widely used by C++ programmers ‣e.g. template and template-meta-programming, iterators, etc. © 2010, PrismTech. All Rights Reserved
  • 5. API Complexity ‣ The current API suffers from accidental complexity mostly induced by the limited expressiveness of IDL and the dated IDL2C++ mapping © 2010, PrismTech. All Rights Reserved
  • 6. Portability ‣ The current IDL-derived API leaves some types defined as native, thus allowing different vendors to use different representations ‣e.g. the type of the domainid ‣ The current IDL-derived API does not specifies the DDS interfaces as local, yet semantically those are local. This has also been source of portability issues © 2010, PrismTech. All Rights Reserved
  • 7. OpenSplice DDS Delivering Performance, Openness, and Freedom Submission Overview Foundations
  • 8. CxxDDS API Organization ‣ Different packages are introduced to limit the dependencies and group together relevant classes ‣ The submission separates clearly those files features that are specific to publication and subscription so that application can include only the minimal set of files ‣ The API is parametrized w.r.t. a DELEGATE layer © 2010, PrismTech. All Rights Reserved
  • 9. Delegation Layer ‣ The delegation layer, is provided by vendors and used to instantiate the CxxDDS API into a concrete API ‣ This standard provide a reference implementation that shows how that can be done. ‣ Under any circumstances, compliant implementation shall not change the CxxDDS API, as detailed in Section 8, vendor-specific extensions shall be added only via DELEGATEs. ‣ The CxxDDS API provides a standard way of accessing vendor specific extensions ‣ Finally, although the specification allows for vendor-specific extensibility, it should be clear that this specification does not encourage nor recommend their use Using vendor specific extensions will make application non-source-code-portable to other CxxDDS compliant implementations and might also adversely impact on-the- wire interoperability. © 2010, PrismTech. All Rights Reserved
  • 10. Object Model The Native C++ Language DDS PSM (CxxDDS) is based on an object model structured in two different kinds of object types: reference-types and value-types © 2010, PrismTech. All Rights Reserved
  • 11. Reference Types ‣ Reference-types have a shallow (polymorphic) assignment operator that Ref simply changes the value of the reference Impl. ‣ Reference-types are safe. Under no Ref circumstances a reference can point to an invalid object. Ref ‣ Memory for reference-types is CxxDDS Delegate (provided by a automatically managed by the runtime. specific vendor implementation) © 2010, PrismTech. All Rights Reserved
  • 12. Reference Types (cont.) ‣ The semantics for Reference types is defined by the CxxDDS class dds::core::Reference. namespace dds { namespace core { template <typename DELEGATE> class Reference; }} ‣ The specification mandates the semantics implied by the Reference class, yet the implementation provided as part of this standard is provided to show one possible way of implementing this semantics © 2010, PrismTech. All Rights Reserved
  • 13. Reference Types © 2010, PrismTech. All Rights Reserved
  • 14. WeakReferences ‣ The CxxDDS also provides safe Weak References implemented by the class dds::core::WeakReference ‣ Weak References can be constructed only from strong references ‣ Weak References do not expose other method other than checking wether the reference is valid and getting a strong-reference namespace dds { namespace core { template <typename class R <typename D>> class WeakReference; }} © 2010, PrismTech. All Rights Reserved
  • 15. Value Types ‣ All objects that have a value-type have a deep-copy assignment semantics. ‣ It should also be pointed out that value-types are not “pure-value-types” in the sense that they are immutable (as in functional programming languages). ‣ The CxxPSM makes value-types mutable to limit the number of copies as well limit the time-overhead necessary to change a value-type (note that for immutable value-types the only form of change is to create a new value-type). ‣ Value-types always inherit from the CxxPSM dds::core::Value The CxxDDS models all DDS entities as reference-types while QoS and Topic samples are all modeled as value-types. © 2010, PrismTech. All Rights Reserved
  • 16. API Extensibility ‣ The CxxPSM allows for QoS to be extended, either by new version of the standard or by vendor specific extension without any impact on the public API. ‣ The CxxPSM provides this level of extensibility while also enjoying a very compact representation of a QoS which leverages the combination of a DELEGEATE QoS implementation along with template getter and setters. © 2010, PrismTech. All Rights Reserved
  • 17. QoS as an Example of Extensibility Although the CxxPSM specifies the EntityQoS by leveraging variadic C++ templates for providing a constructor taking an arbitrary number or arguments, some implementation might have to leverage other techniques for emulating variadic templates on non-supported compilers. The standard technique for doing this is to define several template constructors accepting an increasing number of arguments. © 2010, PrismTech. All Rights Reserved
  • 18. Primitive Types Mapping ‣ The CxxDDS API provides its own interoperable definition of DDS primitive types and represents them in terms of standard (and portable) C/C++ types. © 2010, PrismTech. All Rights Reserved
  • 19. Sequence Mapping ‣ Bounded and Unbounded IDL Sequences for a type T map to std::vector<T> © 2010, PrismTech. All Rights Reserved
  • 20. Parameters Passing Constant-size Primitive types ‣ in T => T ‣ out T => T& ‣ inout T => T& Variable-size Primitive types (e.g string, wsting) ‣ in T => const T& ‣ out T => T& ‣ inout T => T& © 2010, PrismTech. All Rights Reserved
  • 21. Parameters Passing Value Types ‣ in T => const T& ‣ out T => T& ‣ inout T => T& Reference Types ‣ in T => const T& ‣ out T => T& ‣ inout T => T& © 2010, PrismTech. All Rights Reserved
  • 22. Return Parameters Attribute Accessors for fixed-size primitive types ‣ T => T Attribute Accessors for any other type ‣ T => const T& Non-attribute return-values ‣ T => T © 2010, PrismTech. All Rights Reserved
  • 23. OpenSplice DDS Delivering Performance, Openness, and Freedom Submission Overview API Overview
  • 24. DDS Entities © 2010, PrismTech. All Rights Reserved
  • 25. Entity QoS template <typename DELEGATE> class Publisher : public dds::core::Entity<DELEGATE> { public: ‣ To improve the // -- QoS related methods -- level of compile template <typename POLICY> void set_policy(const POLICY& p) { time error impl_->set_policy(p); detection, the } current submission template <typename POLICY> const POLICY& get_policy() const { separates the return impl_->get_policy(); initialization of } entity QoS policy dds::PublisherQos get_qos() const { from the update of return impl_->get_qos(); } some of its policies. // -- Other Publisher Methods not shown // for space constraints }; © 2010, PrismTech. All Rights Reserved
  • 26. QoS Extensibility Vendor-specific DDS Entity QoS (topic in this case) XYZVendorTopicQoS vtqos = { /* values */ }; dds::Topic<MyType> topic("MyTopic", vtqos); ‣ The current submission provides two Vendor-specific QoS Policy (topic in this case) ways of dds::Topic<MyType> topic("MyTopic"); providing vendor XYZVendorPolicy policy = { /* values */ }; topic.set_policy(policy); specific QoS © 2010, PrismTech. All Rights Reserved
  • 27. Reading/Taking Data The new API simplify and extends the ways in which data can be read/taken by providing: ‣ std::vector based reads/takes ‣ The std::vector API allows for zero copy optimization ‣ Iterators based read/take supporting both: ‣ Forward Iterators ‣ Back Inserting Iterators © 2010, PrismTech. All Rights Reserved
  • 28. std::vector-based read/take /** * Reads all new samples from any view state and alive instances. If the provided containers have * zero-size than the middleware will loan memory to the application to support zero-copy reads. * The memory will be returned to the middleware when the container is destroyed or by explicitly * invoking the <code>return_loan</code> method on the data reader. */ void read(std::vector<T>& samples, dds::SampleInfoSeq& infos); /** * Reads at most <code>max_samples</code> samples that have not been read yet from all views * and alive instances. */ void read(std::vector<T>& samples, uint32_t max_samples); /** * Most generic <code>read</code> exposing all the knobs provided by * the OMG DDS API. */ void read(std::vector<T>& samples, dds::SampleInfoSeq& infos, uint32_t max_samples, dds::SampleStateMask samples_state, dds::ViewStateMask views_state, dds::InstanceStateMask instances_state); © 2010, PrismTech. All Rights Reserved
  • 29. std::vector-based take /** * Reads all new samples from any view state and alive instances. If the provided containers have * zero-size than the middleware will loan memory to the application to support zero-copy reads. * The memory will be returned to the middleware when the container is destroyed or by explicitly * invoking the <code>return_loan</code> method on the data reader. */ void take(std::vector<T>& samples, dds::SampleInfoSeq& infos); /** * Reads at most <code>max_samples</code> samples that have not been read yet from all views * and alive instances. */ void take(std::vector<T>& samples, uint32_t max_samples); /** * Most generic <code>read</code> exposing all the knobs provided by * the OMG DDS API. */ void take(std::vector<T>& samples, dds::SampleInfoSeq& infos, uint32_t max_samples, dds::SampleStateMask samples_state, dds::ViewStateMask views_state, dds::InstanceStateMask instances_state); © 2010, PrismTech. All Rights Reserved
  • 30. FWD-Iterator-based read /** * Reads new samples from any view state and alive instances. */ template <typename SamplesFWIterator, typename InfoFWIterator> void read(SamplesIterator sfit, InfoIterator ifit, uint32_t max_samples); /** * Reads at most <code>max_samples</code> samples that have not been read yet from all vies and * alive instances. */ template <typename SamplesFWIterator> void read(SamplesFWIterator samples, uint32_t max_samples); /** * Most generic <code>read</code> exposing all the knobs provided by * the OMG DDS API. */ template <typename SamplesFWIterator, typename InfoFWIterator> void read(SamplesFWIterator sfit, InfoFWIterator ifit, uint32_t max_samples, dds::SampleStateMask samples_state, dds::ViewStateMask views_state, dds::InstanceStateMask instances_state); © 2010, PrismTech. All Rights Reserved
  • 31. FWD-Iterator-based take /** * Reads new samples from any view state and alive instances. */ template <typename SamplesFWIterator, typename InfoFWIterator> void take(SamplesIterator sfit, InfoIterator ifit, uint32_t max_samples); /** * Reads at most <code>max_samples</code> samples that have not been read yet from all vies and * alive instances. */ template <typename SamplesFWIterator> void take(SamplesFWIterator samples, uint32_t max_samples); /** * Most generic <code>read</code> exposing all the knobs provided by * the OMG DDS API. */ template <typename SamplesFWIterator, typename InfoFWIterator> void take(SamplesFWIterator sfit, InfoFWIterator ifit, uint32_t max_samples, dds::SampleStateMask samples_state, dds::ViewStateMask views_state, dds::InstanceStateMask instances_state); © 2010, PrismTech. All Rights Reserved
  • 32. BI-Iterator-based read /** * Reads all new samples from any view state and alive instances. */ template <typename SamplesBIIterator, typename InfoBIIterator> void read(SamplesIterator sbit, InfoIterator ibit); /** * Most generic <code>take</code> exposing all the knobs provided by * the OMG DDS API. */ template <typename SamplesBIIterator, typename InfoBIIterator> void read(SamplesBIIterator ifit, InfoBIIterator ifit, dds::SampleStateMask samples_state, dds::ViewStateMask views_state, dds::InstanceStateMask instances_state); © 2010, PrismTech. All Rights Reserved
  • 33. BI-Iterator-based take /** * Reads all new samples from any view state and alive instances. */ template <typename SamplesBIIterator, typename InfoBIIterator> void take(SamplesIterator sbit, InfoIterator ibit); /** * Most generic <code>take</code> exposing all the knobs provided by * the OMG DDS API. */ template <typename SamplesBIIterator, typename InfoBIIterator> void take(SamplesBIIterator ifit, InfoBIIterator ifit, dds::SampleStateMask samples_state, dds::ViewStateMask views_state, dds::InstanceStateMask instances_state); © 2010, PrismTech. All Rights Reserved
  • 34. Conditions © 2010, PrismTech. All Rights Reserved
  • 35. Creating a Condition (ex.) /** * Creates an <code>ActiveReadCondition</code> that waits for new samples to * be arriving in order to notify. */ template <typename F> ::dds::Condition create_readcondition(const F& f); © 2010, PrismTech. All Rights Reserved
  • 36. OpenSplice DDS Delivering Performance, Openness, and Freedom Submission Overview Writing an application
  • 37. IDL as Usual enum TemperatureScale { ! CELSIUS, ! KELVIN, ! FAHRENHEIT }; ! struct TempSensorType { ! short id; ! float temp; ! float hum; TemperatureScale scale; }; #pragma keylist TempSensor id © 2010, PrismTech. All Rights Reserved
  • 38. Writer: As simple as it gets /********************************************************** * DataWriter **********************************************************/ dds::Topic<TempSensorType> tsTopic("TempSensorTopic"); // Create a Publisher connected to the proper partition // Create a DataWriter dds::DataWriter<TempSensorType> dw(tsTopic); TempSensorType ts = {1, 26.0F, 70.0F, CELSIUS}; // Write Data dw.write(ts); © 2010, PrismTech. All Rights Reserved
  • 39. Customizing the Writer QoS /********************************************************** * DataWriter **********************************************************/ dds::DomainParticipant dp(did); dds::Publisher pub(dp, pqos); dds::Topic<TempSensorType> tsTopic("TempSensorTopic"); // Create a Publisher connected to the proper partition // Create a DataWriter dds::DataWriter<TempSensorType> dw(tsTopic, pub, dwqos); TempSensorType ts = {1, 26.0F, 70.0F, CELSIUS}; // Write Data dw.write(ts); © 2010, PrismTech. All Rights Reserved
  • 40. Data Reader /********************************************************** * DataReader **********************************************************/ dds::Topic<TempSensorType> tsTopic("TempSensorTopic"); // Create a DataReader dds::DataReader<TempSensorType> dr(tsTopic); // If no initial size is provided than the read will read // all available samples std::vector<TempSensorType> data; SampleInfoSeq info; // This is a std::vector too! while (true) { dr.read(data, info); for (int i = 0; i < data.length(); ++i) std::cout << data[i] << std::endl; sleep(1); © 2010, PrismTech. All Rights Reserved
  • 41. Data Reader (with FW Iterators) /********************************************************** * DataReader **********************************************************/ dds::Topic<TempSensorType> tsTopic("TempSensorTopic"); // Create a DataReader dds::DataReader<TempSensorType> dr(tsTopic); std::vector<TempSensorType> data(length); SampleInfoSeq info(length); // This is a std::vector too! while (true) { dr.read(data.begin(), info.begin(), length); for (int i = 0; i < data.length(); ++i) std::cout << data[i] << std::endl; sleep(1); } © 2010, PrismTech. All Rights Reserved
  • 42. Data Reader (with BI Iterators) /********************************************************** * DataReader **********************************************************/ dds::Topic<TempSensorType> tsTopic("TempSensorTopic"); // Create a DataReader dds::DataReader<TempSensorType> dr(tsTopic); std::vector<TempSensorType> data; SampleInfoSeq info; // This is a std::vector too! std::back_insert_iterator<std::vector<TempSensorType>> bid(data); std::back_insert_iterator<SampleInfoSeq> bii(info); while (true) { dr.read(bid, bii); for (int i = 0; i < data.length(); ++i) std::cout << data[i] << std::endl; sleep(1); © 2010, PrismTech. All Rights Reserved
  • 43. OpenSplice DDS Delivering Performance, Openness, and Freedom Interoperability with IDL2C++ API and CORBA
  • 44. C++2IDL and CORBA Interop ‣ The new mapping defines implicit conversion methods to create the equivalent C+ +2IDL type when needed ‣ This allows to pass a new DDS Type to a CORBA call by leveraging automatically generated conversions ‣ Conversion can be enabled/disabled via IDL compilers flags © 2010, PrismTech. All Rights Reserved
  • 45. OpenSplice DDS Delivering Performance, Openness, and Freedom Résumé & Next Steps
  • 46. Résumé ‣ The CxxDDS addresses the goals of the RFP by providing a simpler, safer and well integrated C++ API for DDS ‣ The current submission addresses extensibility and portability ‣ Efficiency and determinism is not impacted by the higher level of abstraction © 2010, PrismTech. All Rights Reserved
  • 47. Next Steps ‣ Vote a finalized version of this submission on June Meeting © 2010, PrismTech. All Rights Reserved
  • 48. 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
  • 49. Thank You... © 2009, PrismTech. All Rights Reserved