SlideShare ist ein Scribd-Unternehmen logo
1 von 132
Downloaden Sie, um offline zu lesen
Ambient-Oriented Dataflow Programming for
        Mobile RFID-Enabled Applications
Andoni Lombide Carreton

Promotor: Prof. Dr. Wolfgang De Meuter
Copromotor: Prof. Dr. Theo D’Hondt                 Vrije Universiteit Brussel
                                                          Brussels, Belgium




Private PhD Defense, October 11th 2011, Brussels                                1
Roadmap

Part I: Mobile RFID-Enabled Applications

Part II: Ambient-Oriented Programming for Mobile RFID-
Enabled Applications

Part III: Node-Centric Ambient-Oriented Dataflow
Programming

Part IV: Network-Centric Ambient-Oriented Dataflow
Programming

Part V: Conclusion
                                                         2
Part I: Mobile RFID-Enabled Applications




                                           3
RFID Technology




                  0 cm ~ 10 m

                  0 Kb ~ 32 Kb

                  0.02$ ~ 0.50$
                                  4
Mobile RFID-Enabled Applications




                                   5
6
6
6
7
7
7
7
Event-based Decoupling and Inversion of Control

       (register-connection-callback
         (lambda (tagged-object)

           (register-reply-callback
             (lambda (reply)
             ...))

           (register-disconnection-callback
             (lambda (tagged-object)
             ...))

       ...))
                                                  8
Event-based Decoupling and Inversion of Control

       (register-connection-callback
         (lambda (tagged-object)

           (register-disconnection-callback
             (lambda (tagged-object)
             ...))

           (register-reply-callback
             (lambda (reply)
             ...))

       ...))
                                                  8
Event-based Decoupling and Inversion of Control


         Shared state
                        ?
                            (register-reply-callback
                              (lambda (reply)
                                (set! Shared state ...) ...))

(register-connection-callback
  (lambda (tagged-object)
    (set! Shared state ...) ...))
                  (register-disconnection-callback
                    (lambda (tagged-object)
                      (set! Shared state ...) ...))
                                                           9
Event-based Decoupling and Inversion of Control


         Shared state
                        ?
                            (register-reply-callback
                              (lambda (reply)
                                (set! Shared state ...) ...))

(register-connection-callback
  (lambda (tagged-object)
    (set! Shared state ...) ...))
                  (register-disconnection-callback
                    (lambda (tagged-object)
                      (set! Shared state ...) ...))
                                                           9
Event-based Decoupling and Inversion of Control


         Shared state
                        ?
                            (register-reply-callback
                              (lambda (reply)
                                (set! Shared state ...) ...))

(register-connection-callback
  (lambda (tagged-object)
    (set! Shared state ...) ...))
                  (register-disconnection-callback
                    (lambda (tagged-object)
                      (set! Shared state ...) ...))
                                                           9
Event-based Decoupling and Inversion of Control


         Shared state
                      ? in space
                 Decoupling

                          (register-reply-callback
                 Decoupling in time
                             (lambda (reply)
                                (set! Shared state
                 Decoupling in arity                 ...) ...))

(register-connection-callback
                  Rich representation of events
  (lambda (tagged-object)
    (set! Shared state ...) ...))
                 No inversion of control
                  (register-disconnection-callback
                    (lambda (tagged-object)
                 Global(set! Shared state ...) ...))
                        control flow management
                                                             9
RFID-tagged Things as Objects




            book.addReview(“Good book”);

            println(book.getReviews());



                                           10
RFID-tagged Things as Objects

              1. Addressing physical objects


              2. Storing application-specific data on RFID tags


              3. Reactivity to appearing and disappearing objects


              4. Asynchronous, fault-tolerant communication


              5. Data consistency


              6. Infrastructureless operation



                                                                    10
RFID-tagged Things as Objects

              1. Addressing physical objects


              2. Storing application-specific data on RFID tags


              3. Reactivity to appearing and disappearing objects


              4. Asynchronous, fault-tolerant communication


              5. Data consistency


              6. Infrastructureless operation



                                                                    10
RFID-tagged Things as Objects

              1. Addressing physical objects


              2. Storing application-specific data on RFID tags


              3. Reactivity to appearing and disappearing objects


              4. Asynchronous, fault-tolerant communication


              5. Data consistency


              6. Infrastructureless operation



                                                                    10
RFID-tagged Things as Objects

              1. Addressing physical objects


              2. Storing application-specific data on RFID tags


              3. Reactivity to appearing and disappearing objects


              4. Asynchronous, fault-tolerant communication


              5. Data consistency


              6. Infrastructureless operation



                                                                    10
RFID-tagged Things as Objects

              1. Addressing physical objects


              2. Storing application-specific data on RFID tags


              3. Reactivity to appearing and disappearing objects


              4. Asynchronous, fault-tolerant communication


              5. Data consistency


              6. Infrastructureless operation



                                                                    10
RFID-tagged Things as Objects

              1. Addressing physical objects


              2. Storing application-specific data on RFID tags


              3. Reactivity to appearing and disappearing objects


              4. Asynchronous, fault-tolerant communication


              5. Data consistency


              6. Infrastructureless operation



                                                                    10
Survey of Related Work



   Publish/subscribe
        systems

 Reactive programming

   Explicit dataflow
    programming
 Node-centric sensor-
 network programming
Network-centric sensor-
 network programming      11
Survey of Related Work



   Publish/subscribe
        systems
                   Publish/subscribe
 Reactive programming     +
                 dataflow programming
   Explicit dataflow       =
              ambient-oriented dataflow
     programming
 Node-centric sensor-
 network programming
Network-centric sensor-
 network programming                     11
Part II: Ambient-Oriented Programming for Mobile
RFID-Enabled Applications




                                                   12
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
RFID in AmbientTalk




                                RFID event loop



                      Hardware Abstraction Layer




                                                   13
Things: Proxies for Tags

deftype Book;

def aBook := thing: {
  def isbn := 123;
  def title := “My book”;
  def reviews := Vector.new();
                                               RFID event loop
  def setTitle(newTitle)@Mutator {
     title := newTitle;
  };
                                     Hardware Abstraction Layer
  def addReview(review)@Mutator {
     reviews.add(review);
  };
} taggedAs: Book;

                                                                  14
Things: Proxies for Tags

deftype Book;

def aBook := thing: {
  def isbn := 123;
  def title := “My book”;
  def reviews := Vector.new();
                                               RFID event loop
  def setTitle(newTitle)@Mutator {
     title := newTitle;
  };
                                     Hardware Abstraction Layer
  def addReview(review)@Mutator {
     reviews.add(review);
  };
} taggedAs: Book;

                                                                  14
Storing Objects on RFID Tags


                               tag
           aBook




                                               RFID event loop

def aBook := thing: { ... };
                                     Hardware Abstraction Layer
when: BlankTag discovered: { |tag|
  when: tag<-initialize(aBook)
    becomes: { |bookReference|
      // ...
    }
}
                                                                  15
Storing Objects on RFID Tags


                               tag
           aBook




                                               RFID event loop

def aBook := thing: { ... };
                                     Hardware Abstraction Layer
when: BlankTag discovered: { |tag|
  when: tag<-initialize(aBook)
    becomes: { |bookReference|
      // ...
    }
}
                                                                  15
Storing Objects on RFID Tags


                               tag
           aBook




                                               RFID event loop

def aBook := thing: { ... };
                                     Hardware Abstraction Layer
when: BlankTag discovered: { |tag|
  when: tag<-initialize(aBook)
    becomes: { |bookReference|
      // ...
    }
}
                                                                  15
Storing Objects on RFID Tags


                               tag
           aBook
                           bookRe
                                 ference



                                                     RFID event loop

def aBook := thing: { ... };
                                           Hardware Abstraction Layer
when: BlankTag discovered: { |tag|
  when: tag<-initialize(aBook)
    becomes: { |bookReference|
      // ...
    }
}
                                                                        15
Reactivity to Appearing and Disappearing Things




                                                RFID event loop

whenever: Book discovered: { |book|
   // React on appearance
   whenever: book disconnected: {     Hardware Abstraction Layer
      // React on disappearance
   };
   whenever: book reconnected: {
      // React on reappearance
   };
};                                                                 16
Reactivity to Appearing and Disappearing Things




                                                RFID event loop

whenever: Book discovered: { |book|
   // React on appearance
   whenever: book disconnected: {     Hardware Abstraction Layer
      // React on disappearance
   };
   whenever: book reconnected: {
      // React on reappearance
   };
};                                                                 16
Reactivity to Appearing and Disappearing Things




                                                RFID event loop

whenever: Book discovered: { |book|
   // React on appearance
   whenever: book disconnected: {     Hardware Abstraction Layer
      // React on disappearance
   };
   whenever: book reconnected: {
      // React on reappearance
   };
};                                                                 16
Reactivity to Appearing and Disappearing Things




                                                RFID event loop

whenever: Book discovered: { |book|
   // React on appearance
   whenever: book disconnected: {     Hardware Abstraction Layer
      // React on disappearance
   };
   whenever: book reconnected: {
      // React on reappearance
   };
};                                                                 16
Asynchronous and Fault-tolerant Communication
 with Things




                                                   RFID event loop



when: book<-getTitle()                   Hardware Abstraction Layer
  becomes: { |title|
     system.println(“TITLE: “ + title)
  };
system.println(“Here first!”);

                                                                      17
Asynchronous and Fault-tolerant Communication
 with Things




                                                   RFID event loop



when: book<-getTitle()                   Hardware Abstraction Layer
  becomes: { |title|
     system.println(“TITLE: “ + title)
  };
system.println(“Here first!”);

                                                                      17
Asynchronous and Fault-tolerant Communication
 with Things




                                                   RFID event loop



when: book<-getTitle()                   Hardware Abstraction Layer
  becomes: { |title|
     system.println(“TITLE: “ + title)
  };
system.println(“Here first!”);

                                                                      17
Asynchronous and Fault-tolerant Communication
 with Things




                                                   RFID event loop



when: book<-getTitle()                   Hardware Abstraction Layer
  becomes: { |title|
     system.println(“TITLE: “ + title)
  };
system.println(“Here first!”);

                                                                      17
Asynchronous and Fault-tolerant Communication
 with Things




                                                   RFID event loop



when: book<-getTitle()                   Hardware Abstraction Layer
  becomes: { |title|
     system.println(“TITLE: “ + title)
  };
system.println(“Here first!”);

                                                                      17
Asynchronous and Fault-tolerant Communication
 with Things




                                                   RFID event loop



when: book<-getTitle()                   Hardware Abstraction Layer
  becomes: { |title|
     system.println(“TITLE: “ + title)
  };
system.println(“Here first!”);

                                                                      17
Asynchronous and Fault-tolerant Communication
 with Things




                                                   RFID event loop



when: book<-getTitle()                   Hardware Abstraction Layer
  becomes: { |title|
     system.println(“TITLE: “ + title)
  };
system.println(“Here first!”);

                                                                      17
Benchmarks




             18
Benchmarks




             18
Summary

    1. Addressing physical objects


    2. Storing application-specific data on RFID tags


    3. Reactivity to appearing and disappearing objects


    4. Asynchronous, fault-tolerant communication


    5. Data consistency


    6. Infrastructureless operation



                                                          19
Summary

    1. Addressing physical objects


    2. Storing application-specific data on RFID tags


    3. Reactivity to appearing and disappearing objects


    4. Asynchronous, fault-tolerant communication


    5. Data consistency


    6. Infrastructureless operation



                                                          19
Part III: Node-Centric Ambient-Oriented Dataflow
Programming




                                                  20
The Ticket Trader Application




                                21
The Ticket Trader Application
       Event                     Signaling                   Reacting
New ticket trader     Automatic notification by
                                                      whenever:discovered:
connected             AmbientTalk
Ticket trader         Automatic notification by
                                                      when:disconnected:
disconnected          AmbientTalk
Ticket trader         Automatic notification by        when:reconnected:
reconnected           AmbientTalk
                      notifyTicketForSale             notifyTicketForSale
New ticket for sale
                      asynchronous message            callback
Price of ticket       notifyPriceChanged              notifyPriceChanged
changed               asynchronous message            callback
Location of ticket    notifyLocationChanged           notifyLocationChanged
trader changed        asynchronous message            callback
Own location          GPS abstraction invokes         Callback registered on
changed               callback with new coordinates   GPS abstraction
                                                                               21
Reactive Programming in AmbientTalk/R
 GUI.centerOn(GPSLocation.latitude, GPSLocation.longitude);


                        GPSLocation

                                                        H
               .latitude              .longitude




             latitude                  longitude

                                                       H+1
               GUI.centerOn(_, _)
                                                              22
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Node-Centric Ambient-Oriented Dataflow
Programming


                   subscribe(       )




                       subscribe(       )




                    publish(    )

                                            23
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocation := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @Any;

   GUI.showLocationOnMap(vendorLocation);                        24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocation := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @Any;

   GUI.showLocationOnMap(vendorLocation);                        24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocation := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @Any;

   GUI.showLocationOnMap(vendorLocation);                        24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocation := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @Any;

   GUI.showLocationOnMap(vendorLocation);                        24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocation := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @Any;

   GUI.showLocationOnMap(vendorLocation);                        24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocations := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @All(3.seconds);

   vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) };         24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocations := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @All(3.seconds);

   vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) };         24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocations := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @All(3.seconds);

   vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) };         24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocations := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @All(3.seconds);

   vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) };         24
Ambient Behaviors
      deftype TicketVendorLocation;

      exportBehavior: GPSLocation as: TicketVendorLocation
        to: { |buyer| buyer.interestedIn == “Rock Werchter” };




   deftype TicketVendorLocation;

   def vendorLocations := ambientBehavior: TicketVendorLocation
     where: { def interestedIn := “Rock Werchter” } @All(3.seconds);

   vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) };         24
Reactive Queries

                             deftype TicketVendor;

                             export: ticketVendor as: TicketVendor
                               with: { def event := “Rock Werchter” };




     deftype TicketVendor;

     def werchterVendors := ambient: TicketVendor
       where: { |vendor| vendor.event == “Rock Werchter” };

     def locations := werchterVendors<-getLocation()@Refresh(3.seconds);

     locations.each: { |loc| GUI.showLocationOnMap(loc) };               25
Reactive Queries

                             deftype TicketVendor;

                             export: ticketVendor as: TicketVendor
                               with: { def event := “Rock Werchter” };




     deftype TicketVendor;

     def werchterVendors := ambient: TicketVendor
       where: { |vendor| vendor.event == “Rock Werchter” };

     def locations := werchterVendors<-getLocation()@Refresh(3.seconds);

     locations.each: { |loc| GUI.showLocationOnMap(loc) };               25
Reactive Queries

                               deftype TicketVendor;

                               export: ticketVendor as: TicketVendor
                                 with: { def event := “Rock Werchter” };




?? ?   deftype TicketVendor;

       def werchterVendors := ambient: TicketVendor
         where: { |vendor| vendor.event == “Rock Werchter” };

       def locations := werchterVendors<-getLocation()@Refresh(3.seconds);

       locations.each: { |loc| GUI.showLocationOnMap(loc) };               25
Reactive Queries

                             deftype TicketVendor;

                             export: ticketVendor as: TicketVendor
                               with: { def event := “Rock Werchter” };


?      ?          ?



     deftype TicketVendor;

     def werchterVendors := ambient: TicketVendor
       where: { |vendor| vendor.event == “Rock Werchter” };

     def locations := werchterVendors<-getLocation()@Refresh(3.seconds);

     locations.each: { |loc| GUI.showLocationOnMap(loc) };               25
Reactive Queries

                             deftype TicketVendor;

                             export: ticketVendor as: TicketVendor
                               with: { def event := “Rock Werchter” };




     deftype TicketVendor;

     def werchterVendors := ambient: TicketVendor
       where: { |vendor| vendor.event == “Rock Werchter” };

     def locations := werchterVendors<-getLocation()@Refresh(3.seconds);

     locations.each: { |loc| GUI.showLocationOnMap(loc) };               25
Reactive Queries

                             deftype TicketVendor;

                             export: ticketVendor as: TicketVendor
                               with: { def event := “Rock Werchter” };




     deftype TicketVendor;

     def werchterVendors := ambient: TicketVendor
       where: { |vendor| vendor.event == “Rock Werchter” };

     def locations := werchterVendors<-getLocation()@Refresh(3.seconds);

     locations.each: { |loc| GUI.showLocationOnMap(loc) };               25
Reactive Queries

                             deftype TicketVendor;

                             export: ticketVendor as: TicketVendor
                               with: { def event := “Rock Werchter” };




     deftype TicketVendor;

     def werchterVendors := ambient: TicketVendor
       where: { |vendor| vendor.event == “Rock Werchter” };

     def locations := werchterVendors<-getLocation()@Refresh(3.seconds);

     locations.each: { |loc| GUI.showLocationOnMap(loc) };               25
Reactive Queries

                             deftype TicketVendor;

                             export: ticketVendor as: TicketVendor
                               with: { def event := “Rock Werchter” };




     deftype TicketVendor;

     def werchterVendors := ambient: TicketVendor
       where: { |vendor| vendor.event == “Rock Werchter” };

     def locations := werchterVendors<-getLocation()@Refresh(3.seconds);

     locations.each: { |loc| GUI.showLocationOnMap(loc) };               25
Quantitative Evaluation




                          26
Quantitative Evaluation




                          26
Quantitative Evaluation




                          26
Qualitative Evaluation
       Event                     Signaling                   Reacting
New ticket trader     Automatic notification by
                                                      whenever:discovered:
connected             AmbientTalk
Ticket trader         Automatic notification by
                                                      when:disconnected:
disconnected          AmbientTalk
Ticket trader         Automatic notification by        when:reconnected:
reconnected           AmbientTalk
                      notifyTicketForSale             notifyTicketForSale
New ticket for sale
                      asynchronous message            callback
Price of ticket       notifyPriceChanged              notifyPriceChanged
changed               asynchronous message            callback
Location of ticket    notifyLocationChanged           notifyLocationChanged
trader changed        asynchronous message            callback
Own location          GPS abstraction invokes         Callback registered on
changed               callback with new coordinates   GPS abstraction
                                                                               27
Qualitative Evaluation




                         27
Qualitative Evaluation




                         27
Qualitative Evaluation




                         27
Qualitative Evaluation




                         27
Qualitative Evaluation




                         27
Qualitative Evaluation




  def allNearbyOffers := ambientBehavior: TicketOffer @All(_timespan_);

  allNearbyOffers.filter: { |offer|
    (offer.eventName == event).and: {
      (offer.price <= maxPrice).and: {
        GPSLocation.distanceTo(offer.location) <= maxDistance }}};




                                                                          27
Case Study: The Book Recommender Application
in the Ambient Library



         scanned
      recommended
  recommended in library




                                               28
Case Study: The Book Recommender Application
in the Ambient Library



         scanned
      recommended
  recommended in library




                                               28
Part IV: Network-Centric Ambient-Oriented
Dataflow Programming




                                            29
Network-Centric Visual Dataflow Programming in
AmbientTalk/R V



         scanned
      recommended
  recommended in library


                           1   1




                                                30
Network-Centric Visual Dataflow Programming in
   AmbientTalk/R V
                                BookScanner ->

                                  deftype Book;
                                  /.bridges.rfid.ReactiveRFIDService.scan(Book);

              scanned                            1                     1
           recommended             books                          scannedBooks
       recommended in library
                            1                                                      1
BookRecommender ->                                                         EBookReader ->

  showBooks(books);                                  1   recommended   1     scannedBooks.map: { |book|
  showSimilarBooks(recommended);                                                generateSimilarBooks(book)
  showRecommendationsInStock(recommendedInStock);                            };

                     1                                                                      1
                recommendedInStock                                           similarBooks


                              1                                               *
                     Shelf ->

                         deftype Book;
                         def booksInstock := /.bridges.rfid.ReactiveRFIDService.scan(Book);
                         similarBooks.filter: { |book| booksInStock.contains(book) };                  30
Deploying an AmbientTalk/RV Dataflow Program
 def BookRecommenderApp := extend: OperatorHostInterface with: {
    def showBooks(books) { ... };
    def showSimilarBooks(books) { ... };
    def showRecommendationsInStock(books) { ... };
 };

 deftype BookRecommender;
 export: BookRecommenderApp as: BookRecommender;

       AmbientTalk/R VM
               JVM




BookRecommender ->

  showBooks(books);
  showSimilarBooks(recommended);
  showRecommendationsInStock(recommendedInStock);
                                                                   31
Dataflow Dependencies
                                BookScanner ->

                                  deftype Book;
                                  /.bridges.rfid.ReactiveRFIDService.scan(Book);

 Fixed dataflow                                   1
  dependency                         books

                                 1
BookRecommender ->                                                 EBookReader ->

  showBooks(books);                                                  scannedBooks.map: { |book|
  showSimilarBooks(recommended);                                        generateSimilarBooks(book)
  showRecommendationsInStock(recommendedInStock);                    };

                                                                                    1
                                 Rebinding dataflow                   similarBooks

                                   dependency                         *
                     Shelf ->

                       deftype Book;
                       def booksInstock := /.bridges.rfid.ReactiveRFIDService.scan(Book);
                       similarBooks.filter: { |book| booksInStock.contains(book) };           32
Dependency Arities


BookRecommender ->                                                  EBookReader ->

  showBooks(books);                                                   scannedBooks.map: { |book|
  showSimilarBooks(recommended);                                         generateSimilarBooks(book)
  showRecommendationsInStock(recommendedInStock);                     };

                     1                                                               1
                recommendedInStock                                    similarBooks


                              1                                        *
                     Shelf ->

                         deftype Book;
                         def booksInstock := /.bridges.rfid.ReactiveRFIDService.scan(Book);
                         similarBooks.filter: { |book| booksInStock.contains(book) };




                                                                                                33
Dependency Arities


BookRecommender ->                                                  EBookReader ->

  showBooks(books);                                                   scannedBooks.map: { |book|
  showSimilarBooks(recommended);                                         generateSimilarBooks(book)
  showRecommendationsInStock(recommendedInStock);                     };

                     1                                                               1
                recommendedInStock                                    similarBooks


                              *                                        *
                     Shelf ->

                         deftype Book;
                         def booksInstock := /.bridges.rfid.ReactiveRFIDService.scan(Book);
                         similarBooks.filter: { |book| booksInStock.contains(book) };




                                                                                                33
Dependency Semantics


                    Incoming 1                 Incoming *

                Signal one value to a    Signal one value to all
 Outgoing 1   single (rebound or fixed) reachable nodes of same
                        node                      role

              Signal set of values to a Signal set of values to all
 Outgoing *   single (rebound or fixed) reachable nodes of same
                        node                       role


          Binding semantics              Arity semantics
                                                                  34
Part V: Conclusion




                     35
Limitations and Avenues for Future Research

• Event-loop based architecture prevents RFID events to be processed in
  parallel.


• Security was not considered. For RFID it requires revising the technology
  stack down to the hardware level.



• No distributed glitch prevention. It requires consistent distributed message
  ordering.



• AmbientTalk/RV needs more tooling (e.g. visual scalability, syntax for content-
  based subscriptions...).


                                                                                    36
Summarizing the Contributions

1. Addressing physical objects


2. Storing application-specific data on RFID tags


3. Reactivity to appearing and disappearing objects


4. Asynchronous, fault-tolerant communication


5. Data consistency


6. Infrastructureless operation



                                                      37
Summarizing the Contributions

1. Addressing physical objects
         Ambient-Oriented Programming


2. Storing application-specific data on RFID tags
              with Passive RFID



3. Reactivity to appearing and disappearing objects


4. Asynchronous, fault-tolerant communication


5. Data consistency


6. Infrastructureless operation



                                                      37
Summarizing the Contributions

1. Addressing physical objects
         Ambient-Oriented Programming

                                        Decoupling in space
2. Storing application-specific data on RFID tags
              with Passive RFID


                                        Decoupling in time
3. Reactivity to appearing and disappearing objects

                                        Decoupling in arity
4. Asynchronous, fault-tolerant communication


5. Data consistency


6. Infrastructureless operation



                                                              37
Summarizing the Contributions

1. Addressing physical objects
         Ambient-Oriented Programming

                                        Decoupling in space
2. Storing application-specific data on RFID tags
              with Passive RFID


                                        Decoupling in time
3. Reactivity to appearing and disappearing objects

                                        Decoupling in arity
4. Asynchronous, fault-tolerant communication


5. Data consistency
                                        No inversion of control
6. Infrastructureless operation



                                                                  37
Summarizing the Contributions

1. Addressing physical objects
         Ambient-Oriented Programming

                                        Decoupling in space
2. Storing application-specific data on RFID tags
              with Passive RFID


                                  Decoupling in time
                     Publish/subscribe
3. Reactivity to appearing and disappearing objects

                              + Decoupling in arity
4. Asynchronous, fault-tolerant communication
                   dataflow programming
                              =
5. Data consistency
              ambient-oriented inversion of control
                                   No dataflow
6. Infrastructureless operation



                                                              37
Summarizing the Contributions

1. Addressing physical objects
         Ambient-Oriented Programming
                                        Decoupling in space
2. Storing application-specific data on RFID tags
                                        Decoupling in time
              with Passive RFID



3. Reactivity to appearing and disappearing objects
                                        Decoupling in arity
4. Asynchronous, fault-tolerant communication
                                        Rich representation of events
5. Data consistency
                                        No inversion of control
6. Infrastructureless operation



                                                                        37
Summarizing the Contributions

1. Addressing physical objects
         Ambient-Oriented Programming
                                        Decoupling in space
2. Storing application-specific data on RFID tags
                                        Decoupling in time
              with Passive RFID



3. Reactivity to appearing and disappearing objects
                                        Decoupling in arity
4. Asynchronous, fault-tolerant communication
                                        Rich representation of events
5. Data consistency
                                        No inversion of control
6. Infrastructureless operation

                                        Global control flow management
                                                                        37
Summarizing the Contributions

1. Addressing physical objects
        Ambient-Oriented Programming

                                       Decoupling in space
2. Storing application-specific data on RFID tags
                                       Decoupling in time
             with Passive RFID



3. Reactivity to appearing and disappearing objects

                                       Decoupling in arity
4. Asynchronous, fault-tolerant communication

                                       Rich representation of events
5. Data consistency

                   No inversion of control
6. Infrastructureless operation

                                       Global control flow management
                                                                       37
Why Ambient-Oriented Language Abstractions?
                                              38
Why Ambient-Oriented Language Abstractions?
                                              39
Why Ambient-Oriented Language Abstractions?
                                              40
Why Ambient-Oriented Language Abstractions?
                                              41

Weitere ähnliche Inhalte

Ähnlich wie Private phd defense_40-45min

Evaluation of the Technology Supporting the Development of an Assets Tracking...
Evaluation of the Technology Supporting the Development of an Assets Tracking...Evaluation of the Technology Supporting the Development of an Assets Tracking...
Evaluation of the Technology Supporting the Development of an Assets Tracking...Dominique Guinard
 
2010 coscup be_android
2010 coscup be_android2010 coscup be_android
2010 coscup be_androidtick
 
From data stream management to distributed dataflows and beyond
From data stream management to distributed dataflows and beyondFrom data stream management to distributed dataflows and beyond
From data stream management to distributed dataflows and beyondVasia Kalavri
 
OSMC 2012 | Monitoring with Pacemaker by Martin Gerhard Loschwitz
OSMC 2012 | Monitoring with Pacemaker by Martin Gerhard LoschwitzOSMC 2012 | Monitoring with Pacemaker by Martin Gerhard Loschwitz
OSMC 2012 | Monitoring with Pacemaker by Martin Gerhard LoschwitzNETWAYS
 
NHibernate for .NET
NHibernate for .NETNHibernate for .NET
NHibernate for .NETGuo Albert
 
Identify RFID Logistics
Identify RFID Logistics Identify RFID Logistics
Identify RFID Logistics wn393
 
6-ZeroLab_decentralized_applications-2008.pptx
6-ZeroLab_decentralized_applications-2008.pptx6-ZeroLab_decentralized_applications-2008.pptx
6-ZeroLab_decentralized_applications-2008.pptxClaudioTebaldi2
 
Keeping Up with the Adversary: Creating a Threat-Based Cyber Team
Keeping Up with the Adversary:  Creating a Threat-Based Cyber TeamKeeping Up with the Adversary:  Creating a Threat-Based Cyber Team
Keeping Up with the Adversary: Creating a Threat-Based Cyber TeamPriyanka Aash
 
SSONDE: Semantic Similarity On liNked Data Entities
SSONDE: Semantic Similarity On liNked Data EntitiesSSONDE: Semantic Similarity On liNked Data Entities
SSONDE: Semantic Similarity On liNked Data EntitiesRiccardo Albertoni
 
Fuzzing malware for fun & profit. Applying Coverage-Guided Fuzzing to Find Bu...
Fuzzing malware for fun & profit. Applying Coverage-Guided Fuzzing to Find Bu...Fuzzing malware for fun & profit. Applying Coverage-Guided Fuzzing to Find Bu...
Fuzzing malware for fun & profit. Applying Coverage-Guided Fuzzing to Find Bu...Maksim Shudrak
 
Integrating Applications: the Reactive Way
Integrating Applications: the Reactive WayIntegrating Applications: the Reactive Way
Integrating Applications: the Reactive WayNicola Ferraro
 
Dimitri Bellini - Monitoring Large Multi-Site Data Environment
Dimitri Bellini - Monitoring Large Multi-Site Data EnvironmentDimitri Bellini - Monitoring Large Multi-Site Data Environment
Dimitri Bellini - Monitoring Large Multi-Site Data EnvironmentZabbix
 
Spark and Shark: Lightning-Fast Analytics over Hadoop and Hive Data
Spark and Shark: Lightning-Fast Analytics over Hadoop and Hive DataSpark and Shark: Lightning-Fast Analytics over Hadoop and Hive Data
Spark and Shark: Lightning-Fast Analytics over Hadoop and Hive DataJetlore
 
SecTor '09 - When Web 2.0 Attacks!
SecTor '09 - When Web 2.0 Attacks!SecTor '09 - When Web 2.0 Attacks!
SecTor '09 - When Web 2.0 Attacks!Rafal Los
 

Ähnlich wie Private phd defense_40-45min (20)

Pinte
PintePinte
Pinte
 
Evaluation of the Technology Supporting the Development of an Assets Tracking...
Evaluation of the Technology Supporting the Development of an Assets Tracking...Evaluation of the Technology Supporting the Development of an Assets Tracking...
Evaluation of the Technology Supporting the Development of an Assets Tracking...
 
Rfid
Rfid Rfid
Rfid
 
2010 coscup be_android
2010 coscup be_android2010 coscup be_android
2010 coscup be_android
 
From data stream management to distributed dataflows and beyond
From data stream management to distributed dataflows and beyondFrom data stream management to distributed dataflows and beyond
From data stream management to distributed dataflows and beyond
 
call for papers, research paper publishing, where to publish research paper, ...
call for papers, research paper publishing, where to publish research paper, ...call for papers, research paper publishing, where to publish research paper, ...
call for papers, research paper publishing, where to publish research paper, ...
 
OSMC 2012 | Monitoring with Pacemaker by Martin Gerhard Loschwitz
OSMC 2012 | Monitoring with Pacemaker by Martin Gerhard LoschwitzOSMC 2012 | Monitoring with Pacemaker by Martin Gerhard Loschwitz
OSMC 2012 | Monitoring with Pacemaker by Martin Gerhard Loschwitz
 
NHibernate for .NET
NHibernate for .NETNHibernate for .NET
NHibernate for .NET
 
Identify RFID Logistics
Identify RFID Logistics Identify RFID Logistics
Identify RFID Logistics
 
6-ZeroLab_decentralized_applications-2008.pptx
6-ZeroLab_decentralized_applications-2008.pptx6-ZeroLab_decentralized_applications-2008.pptx
6-ZeroLab_decentralized_applications-2008.pptx
 
Net remoting
Net remotingNet remoting
Net remoting
 
Keeping Up with the Adversary: Creating a Threat-Based Cyber Team
Keeping Up with the Adversary:  Creating a Threat-Based Cyber TeamKeeping Up with the Adversary:  Creating a Threat-Based Cyber Team
Keeping Up with the Adversary: Creating a Threat-Based Cyber Team
 
SSONDE: Semantic Similarity On liNked Data Entities
SSONDE: Semantic Similarity On liNked Data EntitiesSSONDE: Semantic Similarity On liNked Data Entities
SSONDE: Semantic Similarity On liNked Data Entities
 
Fuzzing malware for fun & profit. Applying Coverage-Guided Fuzzing to Find Bu...
Fuzzing malware for fun & profit. Applying Coverage-Guided Fuzzing to Find Bu...Fuzzing malware for fun & profit. Applying Coverage-Guided Fuzzing to Find Bu...
Fuzzing malware for fun & profit. Applying Coverage-Guided Fuzzing to Find Bu...
 
Integrating Applications: the Reactive Way
Integrating Applications: the Reactive WayIntegrating Applications: the Reactive Way
Integrating Applications: the Reactive Way
 
Dimitri Bellini - Monitoring Large Multi-Site Data Environment
Dimitri Bellini - Monitoring Large Multi-Site Data EnvironmentDimitri Bellini - Monitoring Large Multi-Site Data Environment
Dimitri Bellini - Monitoring Large Multi-Site Data Environment
 
Spark and Shark: Lightning-Fast Analytics over Hadoop and Hive Data
Spark and Shark: Lightning-Fast Analytics over Hadoop and Hive DataSpark and Shark: Lightning-Fast Analytics over Hadoop and Hive Data
Spark and Shark: Lightning-Fast Analytics over Hadoop and Hive Data
 
javarmi
javarmijavarmi
javarmi
 
Rights Technologies for E-Publishing
Rights Technologies for E-PublishingRights Technologies for E-Publishing
Rights Technologies for E-Publishing
 
SecTor '09 - When Web 2.0 Attacks!
SecTor '09 - When Web 2.0 Attacks!SecTor '09 - When Web 2.0 Attacks!
SecTor '09 - When Web 2.0 Attacks!
 

Kürzlich hochgeladen

activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfJamie (Taka) Wang
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-pyJamie (Taka) Wang
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesDavid Newbury
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IES VE
 

Kürzlich hochgeladen (20)

activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond Ontologies
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
 

Private phd defense_40-45min

  • 1. Ambient-Oriented Dataflow Programming for Mobile RFID-Enabled Applications Andoni Lombide Carreton Promotor: Prof. Dr. Wolfgang De Meuter Copromotor: Prof. Dr. Theo D’Hondt Vrije Universiteit Brussel Brussels, Belgium Private PhD Defense, October 11th 2011, Brussels 1
  • 2. Roadmap Part I: Mobile RFID-Enabled Applications Part II: Ambient-Oriented Programming for Mobile RFID- Enabled Applications Part III: Node-Centric Ambient-Oriented Dataflow Programming Part IV: Network-Centric Ambient-Oriented Dataflow Programming Part V: Conclusion 2
  • 3. Part I: Mobile RFID-Enabled Applications 3
  • 4. RFID Technology 0 cm ~ 10 m 0 Kb ~ 32 Kb 0.02$ ~ 0.50$ 4
  • 6. 6
  • 7. 6
  • 8. 6
  • 9. 7
  • 10. 7
  • 11. 7
  • 12. 7
  • 13. Event-based Decoupling and Inversion of Control (register-connection-callback (lambda (tagged-object) (register-reply-callback (lambda (reply) ...)) (register-disconnection-callback (lambda (tagged-object) ...)) ...)) 8
  • 14. Event-based Decoupling and Inversion of Control (register-connection-callback (lambda (tagged-object) (register-disconnection-callback (lambda (tagged-object) ...)) (register-reply-callback (lambda (reply) ...)) ...)) 8
  • 15. Event-based Decoupling and Inversion of Control Shared state ? (register-reply-callback (lambda (reply) (set! Shared state ...) ...)) (register-connection-callback (lambda (tagged-object) (set! Shared state ...) ...)) (register-disconnection-callback (lambda (tagged-object) (set! Shared state ...) ...)) 9
  • 16. Event-based Decoupling and Inversion of Control Shared state ? (register-reply-callback (lambda (reply) (set! Shared state ...) ...)) (register-connection-callback (lambda (tagged-object) (set! Shared state ...) ...)) (register-disconnection-callback (lambda (tagged-object) (set! Shared state ...) ...)) 9
  • 17. Event-based Decoupling and Inversion of Control Shared state ? (register-reply-callback (lambda (reply) (set! Shared state ...) ...)) (register-connection-callback (lambda (tagged-object) (set! Shared state ...) ...)) (register-disconnection-callback (lambda (tagged-object) (set! Shared state ...) ...)) 9
  • 18. Event-based Decoupling and Inversion of Control Shared state ? in space Decoupling (register-reply-callback Decoupling in time (lambda (reply) (set! Shared state Decoupling in arity ...) ...)) (register-connection-callback Rich representation of events (lambda (tagged-object) (set! Shared state ...) ...)) No inversion of control (register-disconnection-callback (lambda (tagged-object) Global(set! Shared state ...) ...)) control flow management 9
  • 19. RFID-tagged Things as Objects book.addReview(“Good book”); println(book.getReviews()); 10
  • 20. RFID-tagged Things as Objects 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 10
  • 21. RFID-tagged Things as Objects 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 10
  • 22. RFID-tagged Things as Objects 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 10
  • 23. RFID-tagged Things as Objects 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 10
  • 24. RFID-tagged Things as Objects 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 10
  • 25. RFID-tagged Things as Objects 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 10
  • 26. Survey of Related Work Publish/subscribe systems Reactive programming Explicit dataflow programming Node-centric sensor- network programming Network-centric sensor- network programming 11
  • 27. Survey of Related Work Publish/subscribe systems Publish/subscribe Reactive programming + dataflow programming Explicit dataflow = ambient-oriented dataflow programming Node-centric sensor- network programming Network-centric sensor- network programming 11
  • 28. Part II: Ambient-Oriented Programming for Mobile RFID-Enabled Applications 12
  • 29. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 30. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 31. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 32. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 33. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 34. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 35. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 36. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 37. RFID in AmbientTalk RFID event loop Hardware Abstraction Layer 13
  • 38. Things: Proxies for Tags deftype Book; def aBook := thing: { def isbn := 123; def title := “My book”; def reviews := Vector.new(); RFID event loop def setTitle(newTitle)@Mutator { title := newTitle; }; Hardware Abstraction Layer def addReview(review)@Mutator { reviews.add(review); }; } taggedAs: Book; 14
  • 39. Things: Proxies for Tags deftype Book; def aBook := thing: { def isbn := 123; def title := “My book”; def reviews := Vector.new(); RFID event loop def setTitle(newTitle)@Mutator { title := newTitle; }; Hardware Abstraction Layer def addReview(review)@Mutator { reviews.add(review); }; } taggedAs: Book; 14
  • 40. Storing Objects on RFID Tags tag aBook RFID event loop def aBook := thing: { ... }; Hardware Abstraction Layer when: BlankTag discovered: { |tag| when: tag<-initialize(aBook) becomes: { |bookReference| // ... } } 15
  • 41. Storing Objects on RFID Tags tag aBook RFID event loop def aBook := thing: { ... }; Hardware Abstraction Layer when: BlankTag discovered: { |tag| when: tag<-initialize(aBook) becomes: { |bookReference| // ... } } 15
  • 42. Storing Objects on RFID Tags tag aBook RFID event loop def aBook := thing: { ... }; Hardware Abstraction Layer when: BlankTag discovered: { |tag| when: tag<-initialize(aBook) becomes: { |bookReference| // ... } } 15
  • 43. Storing Objects on RFID Tags tag aBook bookRe ference RFID event loop def aBook := thing: { ... }; Hardware Abstraction Layer when: BlankTag discovered: { |tag| when: tag<-initialize(aBook) becomes: { |bookReference| // ... } } 15
  • 44. Reactivity to Appearing and Disappearing Things RFID event loop whenever: Book discovered: { |book| // React on appearance whenever: book disconnected: { Hardware Abstraction Layer // React on disappearance }; whenever: book reconnected: { // React on reappearance }; }; 16
  • 45. Reactivity to Appearing and Disappearing Things RFID event loop whenever: Book discovered: { |book| // React on appearance whenever: book disconnected: { Hardware Abstraction Layer // React on disappearance }; whenever: book reconnected: { // React on reappearance }; }; 16
  • 46. Reactivity to Appearing and Disappearing Things RFID event loop whenever: Book discovered: { |book| // React on appearance whenever: book disconnected: { Hardware Abstraction Layer // React on disappearance }; whenever: book reconnected: { // React on reappearance }; }; 16
  • 47. Reactivity to Appearing and Disappearing Things RFID event loop whenever: Book discovered: { |book| // React on appearance whenever: book disconnected: { Hardware Abstraction Layer // React on disappearance }; whenever: book reconnected: { // React on reappearance }; }; 16
  • 48. Asynchronous and Fault-tolerant Communication with Things RFID event loop when: book<-getTitle() Hardware Abstraction Layer becomes: { |title| system.println(“TITLE: “ + title) }; system.println(“Here first!”); 17
  • 49. Asynchronous and Fault-tolerant Communication with Things RFID event loop when: book<-getTitle() Hardware Abstraction Layer becomes: { |title| system.println(“TITLE: “ + title) }; system.println(“Here first!”); 17
  • 50. Asynchronous and Fault-tolerant Communication with Things RFID event loop when: book<-getTitle() Hardware Abstraction Layer becomes: { |title| system.println(“TITLE: “ + title) }; system.println(“Here first!”); 17
  • 51. Asynchronous and Fault-tolerant Communication with Things RFID event loop when: book<-getTitle() Hardware Abstraction Layer becomes: { |title| system.println(“TITLE: “ + title) }; system.println(“Here first!”); 17
  • 52. Asynchronous and Fault-tolerant Communication with Things RFID event loop when: book<-getTitle() Hardware Abstraction Layer becomes: { |title| system.println(“TITLE: “ + title) }; system.println(“Here first!”); 17
  • 53. Asynchronous and Fault-tolerant Communication with Things RFID event loop when: book<-getTitle() Hardware Abstraction Layer becomes: { |title| system.println(“TITLE: “ + title) }; system.println(“Here first!”); 17
  • 54. Asynchronous and Fault-tolerant Communication with Things RFID event loop when: book<-getTitle() Hardware Abstraction Layer becomes: { |title| system.println(“TITLE: “ + title) }; system.println(“Here first!”); 17
  • 57. Summary 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 19
  • 58. Summary 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 19
  • 59. Part III: Node-Centric Ambient-Oriented Dataflow Programming 20
  • 60. The Ticket Trader Application 21
  • 61. The Ticket Trader Application Event Signaling Reacting New ticket trader Automatic notification by whenever:discovered: connected AmbientTalk Ticket trader Automatic notification by when:disconnected: disconnected AmbientTalk Ticket trader Automatic notification by when:reconnected: reconnected AmbientTalk notifyTicketForSale notifyTicketForSale New ticket for sale asynchronous message callback Price of ticket notifyPriceChanged notifyPriceChanged changed asynchronous message callback Location of ticket notifyLocationChanged notifyLocationChanged trader changed asynchronous message callback Own location GPS abstraction invokes Callback registered on changed callback with new coordinates GPS abstraction 21
  • 62. Reactive Programming in AmbientTalk/R GUI.centerOn(GPSLocation.latitude, GPSLocation.longitude); GPSLocation H .latitude .longitude latitude longitude H+1 GUI.centerOn(_, _) 22
  • 63. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 64. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 65. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 66. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 67. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 68. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 69. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 70. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 71. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 72. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 73. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 74. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 75. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 76. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 77. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 78. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 79. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 80. Node-Centric Ambient-Oriented Dataflow Programming subscribe( ) subscribe( ) publish( ) 23
  • 81. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocation := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @Any; GUI.showLocationOnMap(vendorLocation); 24
  • 82. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocation := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @Any; GUI.showLocationOnMap(vendorLocation); 24
  • 83. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocation := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @Any; GUI.showLocationOnMap(vendorLocation); 24
  • 84. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocation := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @Any; GUI.showLocationOnMap(vendorLocation); 24
  • 85. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocation := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @Any; GUI.showLocationOnMap(vendorLocation); 24
  • 86. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocations := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @All(3.seconds); vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) }; 24
  • 87. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocations := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @All(3.seconds); vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) }; 24
  • 88. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocations := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @All(3.seconds); vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) }; 24
  • 89. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocations := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @All(3.seconds); vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) }; 24
  • 90. Ambient Behaviors deftype TicketVendorLocation; exportBehavior: GPSLocation as: TicketVendorLocation to: { |buyer| buyer.interestedIn == “Rock Werchter” }; deftype TicketVendorLocation; def vendorLocations := ambientBehavior: TicketVendorLocation where: { def interestedIn := “Rock Werchter” } @All(3.seconds); vendorLocations.each: { |loc| GUI.showLocationOnMap(loc) }; 24
  • 91. Reactive Queries deftype TicketVendor; export: ticketVendor as: TicketVendor with: { def event := “Rock Werchter” }; deftype TicketVendor; def werchterVendors := ambient: TicketVendor where: { |vendor| vendor.event == “Rock Werchter” }; def locations := werchterVendors<-getLocation()@Refresh(3.seconds); locations.each: { |loc| GUI.showLocationOnMap(loc) }; 25
  • 92. Reactive Queries deftype TicketVendor; export: ticketVendor as: TicketVendor with: { def event := “Rock Werchter” }; deftype TicketVendor; def werchterVendors := ambient: TicketVendor where: { |vendor| vendor.event == “Rock Werchter” }; def locations := werchterVendors<-getLocation()@Refresh(3.seconds); locations.each: { |loc| GUI.showLocationOnMap(loc) }; 25
  • 93. Reactive Queries deftype TicketVendor; export: ticketVendor as: TicketVendor with: { def event := “Rock Werchter” }; ?? ? deftype TicketVendor; def werchterVendors := ambient: TicketVendor where: { |vendor| vendor.event == “Rock Werchter” }; def locations := werchterVendors<-getLocation()@Refresh(3.seconds); locations.each: { |loc| GUI.showLocationOnMap(loc) }; 25
  • 94. Reactive Queries deftype TicketVendor; export: ticketVendor as: TicketVendor with: { def event := “Rock Werchter” }; ? ? ? deftype TicketVendor; def werchterVendors := ambient: TicketVendor where: { |vendor| vendor.event == “Rock Werchter” }; def locations := werchterVendors<-getLocation()@Refresh(3.seconds); locations.each: { |loc| GUI.showLocationOnMap(loc) }; 25
  • 95. Reactive Queries deftype TicketVendor; export: ticketVendor as: TicketVendor with: { def event := “Rock Werchter” }; deftype TicketVendor; def werchterVendors := ambient: TicketVendor where: { |vendor| vendor.event == “Rock Werchter” }; def locations := werchterVendors<-getLocation()@Refresh(3.seconds); locations.each: { |loc| GUI.showLocationOnMap(loc) }; 25
  • 96. Reactive Queries deftype TicketVendor; export: ticketVendor as: TicketVendor with: { def event := “Rock Werchter” }; deftype TicketVendor; def werchterVendors := ambient: TicketVendor where: { |vendor| vendor.event == “Rock Werchter” }; def locations := werchterVendors<-getLocation()@Refresh(3.seconds); locations.each: { |loc| GUI.showLocationOnMap(loc) }; 25
  • 97. Reactive Queries deftype TicketVendor; export: ticketVendor as: TicketVendor with: { def event := “Rock Werchter” }; deftype TicketVendor; def werchterVendors := ambient: TicketVendor where: { |vendor| vendor.event == “Rock Werchter” }; def locations := werchterVendors<-getLocation()@Refresh(3.seconds); locations.each: { |loc| GUI.showLocationOnMap(loc) }; 25
  • 98. Reactive Queries deftype TicketVendor; export: ticketVendor as: TicketVendor with: { def event := “Rock Werchter” }; deftype TicketVendor; def werchterVendors := ambient: TicketVendor where: { |vendor| vendor.event == “Rock Werchter” }; def locations := werchterVendors<-getLocation()@Refresh(3.seconds); locations.each: { |loc| GUI.showLocationOnMap(loc) }; 25
  • 102. Qualitative Evaluation Event Signaling Reacting New ticket trader Automatic notification by whenever:discovered: connected AmbientTalk Ticket trader Automatic notification by when:disconnected: disconnected AmbientTalk Ticket trader Automatic notification by when:reconnected: reconnected AmbientTalk notifyTicketForSale notifyTicketForSale New ticket for sale asynchronous message callback Price of ticket notifyPriceChanged notifyPriceChanged changed asynchronous message callback Location of ticket notifyLocationChanged notifyLocationChanged trader changed asynchronous message callback Own location GPS abstraction invokes Callback registered on changed callback with new coordinates GPS abstraction 27
  • 108. Qualitative Evaluation def allNearbyOffers := ambientBehavior: TicketOffer @All(_timespan_); allNearbyOffers.filter: { |offer| (offer.eventName == event).and: { (offer.price <= maxPrice).and: { GPSLocation.distanceTo(offer.location) <= maxDistance }}}; 27
  • 109. Case Study: The Book Recommender Application in the Ambient Library scanned recommended recommended in library 28
  • 110. Case Study: The Book Recommender Application in the Ambient Library scanned recommended recommended in library 28
  • 111. Part IV: Network-Centric Ambient-Oriented Dataflow Programming 29
  • 112. Network-Centric Visual Dataflow Programming in AmbientTalk/R V scanned recommended recommended in library 1 1 30
  • 113. Network-Centric Visual Dataflow Programming in AmbientTalk/R V BookScanner -> deftype Book; /.bridges.rfid.ReactiveRFIDService.scan(Book); scanned 1 1 recommended books scannedBooks recommended in library 1 1 BookRecommender -> EBookReader -> showBooks(books); 1 recommended 1 scannedBooks.map: { |book| showSimilarBooks(recommended); generateSimilarBooks(book) showRecommendationsInStock(recommendedInStock); }; 1 1 recommendedInStock similarBooks 1 * Shelf -> deftype Book; def booksInstock := /.bridges.rfid.ReactiveRFIDService.scan(Book); similarBooks.filter: { |book| booksInStock.contains(book) }; 30
  • 114. Deploying an AmbientTalk/RV Dataflow Program def BookRecommenderApp := extend: OperatorHostInterface with: { def showBooks(books) { ... }; def showSimilarBooks(books) { ... }; def showRecommendationsInStock(books) { ... }; }; deftype BookRecommender; export: BookRecommenderApp as: BookRecommender; AmbientTalk/R VM JVM BookRecommender -> showBooks(books); showSimilarBooks(recommended); showRecommendationsInStock(recommendedInStock); 31
  • 115. Dataflow Dependencies BookScanner -> deftype Book; /.bridges.rfid.ReactiveRFIDService.scan(Book); Fixed dataflow 1 dependency books 1 BookRecommender -> EBookReader -> showBooks(books); scannedBooks.map: { |book| showSimilarBooks(recommended); generateSimilarBooks(book) showRecommendationsInStock(recommendedInStock); }; 1 Rebinding dataflow similarBooks dependency * Shelf -> deftype Book; def booksInstock := /.bridges.rfid.ReactiveRFIDService.scan(Book); similarBooks.filter: { |book| booksInStock.contains(book) }; 32
  • 116. Dependency Arities BookRecommender -> EBookReader -> showBooks(books); scannedBooks.map: { |book| showSimilarBooks(recommended); generateSimilarBooks(book) showRecommendationsInStock(recommendedInStock); }; 1 1 recommendedInStock similarBooks 1 * Shelf -> deftype Book; def booksInstock := /.bridges.rfid.ReactiveRFIDService.scan(Book); similarBooks.filter: { |book| booksInStock.contains(book) }; 33
  • 117. Dependency Arities BookRecommender -> EBookReader -> showBooks(books); scannedBooks.map: { |book| showSimilarBooks(recommended); generateSimilarBooks(book) showRecommendationsInStock(recommendedInStock); }; 1 1 recommendedInStock similarBooks * * Shelf -> deftype Book; def booksInstock := /.bridges.rfid.ReactiveRFIDService.scan(Book); similarBooks.filter: { |book| booksInStock.contains(book) }; 33
  • 118. Dependency Semantics Incoming 1 Incoming * Signal one value to a Signal one value to all Outgoing 1 single (rebound or fixed) reachable nodes of same node role Signal set of values to a Signal set of values to all Outgoing * single (rebound or fixed) reachable nodes of same node role Binding semantics Arity semantics 34
  • 120. Limitations and Avenues for Future Research • Event-loop based architecture prevents RFID events to be processed in parallel. • Security was not considered. For RFID it requires revising the technology stack down to the hardware level. • No distributed glitch prevention. It requires consistent distributed message ordering. • AmbientTalk/RV needs more tooling (e.g. visual scalability, syntax for content- based subscriptions...). 36
  • 121. Summarizing the Contributions 1. Addressing physical objects 2. Storing application-specific data on RFID tags 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 37
  • 122. Summarizing the Contributions 1. Addressing physical objects Ambient-Oriented Programming 2. Storing application-specific data on RFID tags with Passive RFID 3. Reactivity to appearing and disappearing objects 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 37
  • 123. Summarizing the Contributions 1. Addressing physical objects Ambient-Oriented Programming Decoupling in space 2. Storing application-specific data on RFID tags with Passive RFID Decoupling in time 3. Reactivity to appearing and disappearing objects Decoupling in arity 4. Asynchronous, fault-tolerant communication 5. Data consistency 6. Infrastructureless operation 37
  • 124. Summarizing the Contributions 1. Addressing physical objects Ambient-Oriented Programming Decoupling in space 2. Storing application-specific data on RFID tags with Passive RFID Decoupling in time 3. Reactivity to appearing and disappearing objects Decoupling in arity 4. Asynchronous, fault-tolerant communication 5. Data consistency No inversion of control 6. Infrastructureless operation 37
  • 125. Summarizing the Contributions 1. Addressing physical objects Ambient-Oriented Programming Decoupling in space 2. Storing application-specific data on RFID tags with Passive RFID Decoupling in time Publish/subscribe 3. Reactivity to appearing and disappearing objects + Decoupling in arity 4. Asynchronous, fault-tolerant communication dataflow programming = 5. Data consistency ambient-oriented inversion of control No dataflow 6. Infrastructureless operation 37
  • 126. Summarizing the Contributions 1. Addressing physical objects Ambient-Oriented Programming Decoupling in space 2. Storing application-specific data on RFID tags Decoupling in time with Passive RFID 3. Reactivity to appearing and disappearing objects Decoupling in arity 4. Asynchronous, fault-tolerant communication Rich representation of events 5. Data consistency No inversion of control 6. Infrastructureless operation 37
  • 127. Summarizing the Contributions 1. Addressing physical objects Ambient-Oriented Programming Decoupling in space 2. Storing application-specific data on RFID tags Decoupling in time with Passive RFID 3. Reactivity to appearing and disappearing objects Decoupling in arity 4. Asynchronous, fault-tolerant communication Rich representation of events 5. Data consistency No inversion of control 6. Infrastructureless operation Global control flow management 37
  • 128. Summarizing the Contributions 1. Addressing physical objects Ambient-Oriented Programming Decoupling in space 2. Storing application-specific data on RFID tags Decoupling in time with Passive RFID 3. Reactivity to appearing and disappearing objects Decoupling in arity 4. Asynchronous, fault-tolerant communication Rich representation of events 5. Data consistency No inversion of control 6. Infrastructureless operation Global control flow management 37
  • 129. Why Ambient-Oriented Language Abstractions? 38
  • 130. Why Ambient-Oriented Language Abstractions? 39
  • 131. Why Ambient-Oriented Language Abstractions? 40
  • 132. Why Ambient-Oriented Language Abstractions? 41