SlideShare a Scribd company logo
A Hybrid Visual Dataflow Language For
      Coordination in Mobile Ad Hoc Networks
      Andoni Lombide Carreton and Theo D’Hondt




      Department of Computer Science
      Vrije Universiteit Brussel

      12th International Conference on Coordination Models and Languages
      June 7-10 2010
      Amsterdam, the Netherlands                                           1

Wednesday 9 June 2010
Mobile Reactive Applications




                                     2

Wednesday 9 June 2010
Mobile Reactive Applications




                                     Mobile devices




                                                      2

Wednesday 9 June 2010
Mobile Reactive Applications

                                     Mobile devices




                                                 2

Wednesday 9 June 2010
Mobile Reactive Applications

                                                Mobile devices




                                     Intermittent connectivity




                                                                 2

Wednesday 9 June 2010
Mobile Reactive Applications

                                                    Mobile devices




              Spontaneous interactions



                                         Intermittent connectivity




                                                                     2

Wednesday 9 June 2010
Mobile Reactive Applications
                        Scarce infrastructure
                                                           Mobile devices




              Spontaneous interactions



                                                Intermittent connectivity




                                                                            2

Wednesday 9 June 2010
Mobile Reactive Applications
                        Scarce infrastructure
                                                           Mobile devices



Representation of physical objects




              Spontaneous interactions



                                                Intermittent connectivity




                                                                            2

Wednesday 9 June 2010
Mobile Reactive Applications

             Representation of physical objects
                                                                 Mobile devices



      Spontaneous interactions




                                          Distributed
                                   Event-driven Architecture

         Scarce infrastructure


                                                               Intermittent connectivity


                                                                                           3

Wednesday 9 June 2010
Mobile Reactive Applications

             Representation of physical objects
                                                                 Mobile devices



      Spontaneous interactions


                                           overy
                                   o c Disc
                             Ad H         Distributed
                                   Event-driven Architecture

         Scarce infrastructure


                                                               Intermittent connectivity


                                                                                           3

Wednesday 9 June 2010
Mobile Reactive Applications

             Representation of physical objects
                                                                 Mobile devices



      Spontaneous interactions


                                           overy
                                   o c Disc
                             Ad H         Distributed
                                   Event-driven Architecture

         Scarce infrastructure

                                      ecent ralized
                                    D                          Intermittent connectivity


                                                                                           3

Wednesday 9 June 2010
Mobile Reactive Applications

             Representation of physical objects
                                                                       Mobile devices



      Spontaneous interactions


                                           overy
                                   o c Disc
                             Ad H         Distributed
                                   Event-driven Architecture

                                                      Res
                                                            ilien
         Scarce infrastructure                                   t
                                      ecent ralized
                                    D                                Intermittent connectivity


                                                                                                 3

Wednesday 9 June 2010
Mobile Reactive Applications

             Representation of physical objects
                                                                         Mobile devices



      Spontaneous interactions
                                              Event streams

                                           overy
                                   o c Disc
                             Ad H         Distributed
                                   Event-driven Architecture

                                                        Res
                                                              ilien
         Scarce infrastructure                                     t
                                      ecent ralized
                                    D                                  Intermittent connectivity


                                                                                                   3

Wednesday 9 June 2010
Mobile Reactive Applications

             Representation of physical objects
                                                                                   Mobile devices


                                              Event streams
      Spontaneous interactions
                                                                       as ting
                                                             adc
                                           overy          Bro
                                   o c Disc
                             Ad H         Distributed
                                   Event-driven Architecture

                                                        Res
                                                              ilien
         Scarce infrastructure                                     t
                                      ecent ralized
                                    D                                            Intermittent connectivity


                                                                                                             3

Wednesday 9 June 2010
AmbientTalk                                     Distributed
                                                     Event-driven
                                                     Architecture



         whenever: Product discovered: { |product|




         }



                                                                    4
Wednesday 9 June 2010
AmbientTalk                                     Distributed
                                                     Event-driven
                                                     Architecture



         whenever: Product discovered: { |product|
             def future := product<-getSerial();
             when: future becomes: { |serial|
                 println(“Product discovered: ” + serial);




                  }
         }



                                                                    4
Wednesday 9 June 2010
AmbientTalk                                     Distributed
                                                     Event-driven
                                                     Architecture



         whenever: Product discovered: { |product|
             def future := product<-getSerial();
             when: future becomes: { |serial|
                 println(“Product discovered: ” + serial);
                 whenever: product disconnected: {
                     println("Product disconnected: " + serial);
                 };
                 whenever: product reconnected: {
                     println("Product reconnected: " + serial);
                 };
             }
         }



                                                                    4
Wednesday 9 June 2010
AmbientTalk                                     Distributed
                                                     Event-driven
                                                     Architecture
                          Decentralized discovery
                        based on UDP broadcasting

         whenever: Product discovered: { |product|
             def future := product<-getSerial();
             when: future becomes: { |serial|
                 println(“Product discovered: ” + serial);
                 whenever: product disconnected: {
                     println("Product disconnected: " + serial);
                 };
                 whenever: product reconnected: {
                     println("Product reconnected: " + serial);
                 };
             }
         }



                                                                    4
Wednesday 9 June 2010
AmbientTalk                                      Distributed
                                                      Event-driven
                                                      Architecture
                          Decentralized discovery
                        based on UDP broadcasting

         whenever: Product discovered: { |product|            Resilient
             def future := product<-getSerial();            asynchronous
             when: future becomes: { |serial|                 messages
                 println(“Product discovered: ” + serial);
                 whenever: product disconnected: {
                     println("Product disconnected: " + serial);
                 };
                 whenever: product reconnected: {
                     println("Product reconnected: " + serial);
                 };
             }
         }



                                                                           4
Wednesday 9 June 2010
AmbientTalk                                                   Distributed
                                                                   Event-driven
                                                                   Architecture
                          Decentralized discovery
                        based on UDP broadcasting

         whenever: Product discovered: { |product|            Resilient
             def future := product<-getSerial();            asynchronous
             when: future becomes: { |serial|                 messages
                 println(“Product discovered: ” + serial);
                 whenever: product disconnected: {
                     println("Product disconnected: " + serial);
                 };
                 whenever: product reconnected: {
                     println("Product reconnected: " + serial);
                 };
             }
         }
                                    Control flow driven by events, but
                                  specified by textual, sequential blocks
                                                                                  4
Wednesday 9 June 2010
Dataflow Programming



                        x        y     z




                            f(x,y,z)




                                           5

Wednesday 9 June 2010
The Ambient Vinyl Store




                                6

Wednesday 9 June 2010
The Ambient Vinyl Store




                                6

Wednesday 9 June 2010
The Ambient Vinyl Store




                                6

Wednesday 9 June 2010
The Ambient Vinyl Store




                                6

Wednesday 9 June 2010
1



                                productsInBag



                            1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                  products



                                             1




                                                     7


Wednesday 9 June 2010
1



                                productsInBag



                            1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                  products



                                             1

                                  UserDatabase ->
                                    DB.getRecommendationsWithProducts(products);




                                                                                   7


Wednesday 9 June 2010
1



                                productsInBag



                            1

   ListeningStation ->                                          Shelf ->
     rfidTags.map: { |t| t.getProduct() };                         filterOutPresentProducts(recommendToUser);

                        1                                                              *



                                  products                           recommendToUser



                                             1                       1

                                  UserDatabase ->
                                    DB.getRecommendationsWithProducts(products);




                                                                                                            7


Wednesday 9 June 2010
1          1



                                productsInBag


                                                     recommendations
                            1

   ListeningStation ->                                            Shelf ->
     rfidTags.map: { |t| t.getProduct() };                           filterOutPresentProducts(recommendToUser);

                        1                                                                *



                                  products                             recommendToUser



                                             1              1          1

                                  UserDatabase ->
                                    DB.getRecommendationsWithProducts(products);




                                                                                                              7


Wednesday 9 June 2010
1          1          1



                                productsInBag                              nearbyRecommendations


                                                     recommendations
                            1                                                          1

   ListeningStation ->                                            Shelf ->
     rfidTags.map: { |t| t.getProduct() };                           filterOutPresentProducts(recommendToUser);

                        1                                                                  *



                                  products                             recommendToUser



                                             1              1          1

                                  UserDatabase ->
                                    DB.getRecommendationsWithProducts(products);




                                                                                                              7


Wednesday 9 June 2010
Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1          1          1



                                 productsInBag                              nearbyRecommendations


                                                      recommendations
                             1                                                          1

   ListeningStation ->                                             Shelf ->
     rfidTags.map: { |t| t.getProduct() };                            filterOutPresentProducts(recommendToUser);

                        1                                                                   *



                                   products                             recommendToUser



                                              1              1          1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);




                                                                                                               7


Wednesday 9 June 2010
A Visual Dataflow Language For Coordination in
      Mobile Ad Hoc Networks
                            1
                                 de                                                                                         1
                                      pe
                                           nd                                                                          y3
                                                en                                                            e   nc
                                                     cy                                                    nd
                                                          1                                           pe
                                                                                                de
                                                              1                             1
                                                                  Role ->
                                                                    << par1, par2, par3 <<
                                                              1     code                   1
                                                  2                                             dep
                                            e ncy                                                     end
                                      end                                                                   enc
                                dep                                                                                y4
                        *                                                                                                   *
                                                                                         Role
                                                      Role
                                                                                    - method1
                                           - method1
                                                                                    - method2
                                           - method2
                                                                                    - method3
                                           - method3
                                                                                     AmbientTalk VM
                                            AmbientTalk VM
                                                                                          JVM
                                                          JVM




                                                                                                                                8

Wednesday 9 June 2010
Res
      Executing Mobile AmbientTalk Code                                                ilien
                                                                                            t

                        Customer ->
                          GUI.showProductsInBag(productsInBag);
                          GUI.showRecommendations(recommendations);
                          GUI.showRecommendationsInShop(nearbyRecommendations);

                                           1           1            1

                           productsInBag       recommendations      nearbyRecommendations



                                   [ record1,              [ record1,
                                     record2,                                [ record2,
                                                             record2,
                                     record3,                                  record4 ]
                                                             record4 ]
                                     record4 ]




                        def customer := extend: OperatorHostInterface with: {
                          // ... Private fields ...
                          def GUI := extend: JFrame with: {
                            def showProductsInBag(products) { ... };
                            def showRecommendations(products) { ... };
                            def showRecommendationsInShop(products) { ... };
                          }
                        }                                                                   AmbientTalk VM
                                                                                                             9
                                                                                                 JVM
Wednesday 9 June 2010
Propagating and Reacting to Events                                              ms
                                                                                strea
                                                                       Ev ent              Res
                                                                                                 ilien
                                                                                                      t

                                [ record2,
                                  record4 ]    nearbyRecommendations



                                                            1

                                        Shelf ->
  filterOutPresentProducts(      )         filterOutPresentProducts(recommendToUser);

                                                                *



                              [ record1,      recommendToUser
                                record2,                            >> system.println(recommendToUser)
                                record3,                             [ record1, record2 ]
                                record4 ]




                                                                                                          10

Wednesday 9 June 2010
Propagating and Reacting to Events                                              ms
                                                                                strea
                                                                       Ev ent              Res
                                                                                                 ilien
                                                                                                      t

                                [ record2,
                                  record4 ]    nearbyRecommendations



                                                            1

                                        Shelf ->
  filterOutPresentProducts(      )         filterOutPresentProducts(recommendToUser);

                                                                *



                              [ record1,      recommendToUser
                                record2,                            >> system.println(recommendToUser)
                                record3,                             [ record1, record2 ]
                                record4 ]                            [ record1, record2, record3 ]




                                                                                                          10

Wednesday 9 June 2010
Propagating and Reacting to Events                                              ms
                                                                                strea
                                                                       Ev ent              Res
                                                                                                 ilien
                                                                                                      t

                                [ record2,
                                  record4 ]    nearbyRecommendations



                                                            1

                                        Shelf ->
  filterOutPresentProducts(      )         filterOutPresentProducts(recommendToUser);

                                                                *



                              [ record1,      recommendToUser
                                record2,                            >> system.println(recommendToUser)
                                record3,                             [ record1, record2 ]
                                record4 ]                            [ record1, record2, record3 ]
                                                                     [ ]




                                                                                                          10

Wednesday 9 June 2010
Propagating and Reacting to Events                                              ms
                                                                                strea
                                                                       Ev ent              Res
                                                                                                 ilien
                                                                                                      t

                                [ record2,
                                  record4 ]    nearbyRecommendations



                                                            1

                                        Shelf ->
  filterOutPresentProducts(      )         filterOutPresentProducts(recommendToUser);

                                                                *



                              [ record1,      recommendToUser
                                record2,                            >> system.println(recommendToUser)
                                record3,                             [ record1, record2 ]
                                record4 ]                            [ record1, record2, record3 ]
                                                                     [ ]
                                                                     [ record4 ]




                                                                                                          10

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1
                                                            [ record1,
                                                              record2,
                                 productsInBag                ...
                                                              recordN ]


                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1

                                                            [ record1,
                                                              record2,
                                   products
                                                              ...
                                                              recordN ]

                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                           covery                  Res
                                                         H oc Dis               ralized
                                                                                                ilien
                                                                                                     t
                                                      Ad                D ecent
                            Customer ->
                              GUI.showProductsInBag(productsInBag);
                              GUI.showRecommendations(recommendations);
                              GUI.showRecommendationsInShop(nearbyRecommendations);

                                                  1



                                 productsInBag



                             1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };

                        1



                                   products



                                              1

                                   UserDatabase ->
                                     DB.getRecommendationsWithProducts(products);                        11

Wednesday 9 June 2010
Discovering Nodes                                      covery                        Res
                                                    H oc Dis               ralized
                                                                                                 ilien
                                                                                                      t
                                                 Ad                D ecent
                        Customer ->
                          GUI.showProductsInBag(productsInBag);
                          GUI.showRecommendations(recommendations);
                          GUI.showRecommendationsInShop(nearbyRecommendations);

                                             1



                             productsInBag



                         1

   ListeningStation ->
     rfidTags.map: { |t| t.getProduct() };         1


                                                         products

                                                                           1

                                                              UserDatabase ->
                                                                DB.getRecommendationsWithProducts(products);



                                                                                                          11

Wednesday 9 June 2010
as ting
      Dependency Arities                          roa
                                                      dc
                                                 B
                         Customer ->
                           GUI.showProductsInBag(productsInBag);
                           GUI.showRecommendations(recommendations);
                           GUI.showRecommendationsInShop(nearbyRecommendations);

                                                                       1



                                                                           nearbyRecommendations



                        incoming 1 incoming *                                          1

                            send one    broadcast one           Shelf ->
    outgoing 1          recommendation recommendation              filterOutPresentProducts(recommendToUser);

                           send list of  broadcast list of                                 *
     outgoing *         recommendations recommendations

                                                                       recommendToUser



                                                                       1

                               UserDatabase ->
                                 DB.getRecommendationsWithProducts(products);                             12

Wednesday 9 June 2010
as ting
      Dependency Arities                          roa
                                                      dc
                                                 B
                         Customer ->
                           GUI.showProductsInBag(productsInBag);
                           GUI.showRecommendations(recommendations);
                           GUI.showRecommendationsInShop(nearbyRecommendations);

                                                                       1



                                                                           nearbyRecommendations



                        incoming 1 incoming *                                          *

                            send one    broadcast one           Shelf ->
    outgoing 1          recommendation recommendation              filterOutPresentProducts(recommendToUser);

                           send list of  broadcast list of                                 *
     outgoing *         recommendations recommendations

                                                                       recommendToUser



                                                                       1

                               UserDatabase ->
                                 DB.getRecommendationsWithProducts(products);                             12

Wednesday 9 June 2010
ms
                                                          trea
      Remembering State                           ent
                                                        s
                                               Ev
                                                        1


                                                  value



                                                        1

                        Averager ->
                          << buffer <<
                          if: (buffer == nil) then: {
                             buffer := Buffer.new(5);
                          };
                          buffer.put(value);
                          def accumulated := 0;
                          buffer.each: { |val| accumulated := accumulated + val };
                          accumulated / 5;


                                                        1


                                                  average


                                                                                     13
                                                        1
Wednesday 9 June 2010
Editing Dataflow Graphs




                               14

Wednesday 9 June 2010
Limitations and Future Work

      • Node discovery based on role names may cause name clashes: look into
        more advanced publish/subscribe mechanisms?


      • Security: build a secure environment to execute mobile AmbientTalk code.


      • Current editor prototype is still very rudimentary.


      • Dataflow debugging support.




                                                                                   15

Wednesday 9 June 2010
Res
                                                          ilien
                                                               t
                                     overy                                 ms                 ting
      Conclusion          d Ho c Disc         tralize
                                                      d              st rea           dc   as
                        A              D ecen                  ent              B roa
                                                            Ev
      • Hybrid visual dataflow language to coordinate distributed AmbientTalk
        components.


      • Coarse grained control flow encoded in dataflow graph and separated from
        fine grained control flow (AmbientTalk statement level).


      • Dynamically reconfiguring dataflow graph when mobile network topology
        changes.


      • Based on reactive programming.


      • Extends basic dataflow coordination model with broadcasting primitives by
        means of dependency arities.


               http://soft.vub.ac.be/soft/research/amopcop                                           16

Wednesday 9 June 2010

More Related Content

PDF
Distributed Reactive Programming Tools2010
PDF
Living in Smart Environments - 2nd year PhD Report
PPT
RBI paper, CHI 2008
PDF
Hybrid worlds nano_biotech_art_impulsionsdi
PDF
Cyber Worlds 2011 submission
PPTX
Mr Dumas Autonomy & ICT
PDF
ISMAR09 Paper
Distributed Reactive Programming Tools2010
Living in Smart Environments - 2nd year PhD Report
RBI paper, CHI 2008
Hybrid worlds nano_biotech_art_impulsionsdi
Cyber Worlds 2011 submission
Mr Dumas Autonomy & ICT
ISMAR09 Paper

What's hot (19)

PDF
Critical Design Mid-Share - Ch1 of Dunne A.-Hertzian Tales-Electronic Product...
PDF
ISMAR 2011 Paper
PPTX
CyberWorlds 2011 Presentation
PPTX
MuMe Slide M. Wolpers 18 Nov
PDF
Roberts u oxf_msc_200213
PDF
Community web sites: small pieces loosely joined
PPTX
Embedded & Tangible Interaction Design
PPT
Ismar 2010 Presentation
PDF
context aware computing
PPTX
Network of Excellence in Internet Science (Multidisciplinarity and its Implic...
PPTX
Presentatie The Internet of Things iBestuur Congres 2013 door Ben van Lier
PDF
SNViz: Analysis-oriented Visualization for the Internet of Things
PDF
Tangible &amp; Embodied Interaction @RSE11
PPTX
[SENAmI'13] PERSEO - a system to personalize the environment response through...
PDF
Context-aware Mobile Computing - a Literature Review
PDF
EVO NSF/OCI/STCI Workshop Poster
PPTX
Ws_INREDIS_Publicaciones_científicas_2009-2010
PPT
Tangible User Interface Showcase
PDF
3 g be technologized by Dev yusmananda
Critical Design Mid-Share - Ch1 of Dunne A.-Hertzian Tales-Electronic Product...
ISMAR 2011 Paper
CyberWorlds 2011 Presentation
MuMe Slide M. Wolpers 18 Nov
Roberts u oxf_msc_200213
Community web sites: small pieces loosely joined
Embedded & Tangible Interaction Design
Ismar 2010 Presentation
context aware computing
Network of Excellence in Internet Science (Multidisciplinarity and its Implic...
Presentatie The Internet of Things iBestuur Congres 2013 door Ben van Lier
SNViz: Analysis-oriented Visualization for the Internet of Things
Tangible &amp; Embodied Interaction @RSE11
[SENAmI'13] PERSEO - a system to personalize the environment response through...
Context-aware Mobile Computing - a Literature Review
EVO NSF/OCI/STCI Workshop Poster
Ws_INREDIS_Publicaciones_científicas_2009-2010
Tangible User Interface Showcase
3 g be technologized by Dev yusmananda
Ad

Similar to Visual Dataflow Coordination2010 (20)

PDF
Ubiquitous interactions
PDF
Crowd Steering: Music Festival Case Study
PDF
Collecter - Multi-agent Systems Configuration over Ad-hoc Networks: Network a...
PDF
Towards user co-creation of value on the Internet-of-Things (IoT)
PDF
Data First - The Next Mobile Wave
PPTX
Towards application development for the internet of things updated
PDF
Design of interactive mobile and ubiquitous applications
PDF
Research Talk at Bell Labs - IoT System Architecture and Interactions
PDF
Gestures For Mobile
PDF
Developing For The Pervasive Internet Of Things
PDF
Brochure co summit 2012
PDF
SMARCOS Project Brochure
PDF
PIRAmIDE English Presentation
PPTX
Pervasive computing
PDF
AmbientTalk Rfid Dais2010
PDF
A Context Aware Mobile Social Web
PDF
Fjord@Mobile2.0: Designing for the connected world
PDF
Mobile Monday London M2M Event 110516
PDF
Pervasive Computing
PDF
MobiSys Group Presentation
Ubiquitous interactions
Crowd Steering: Music Festival Case Study
Collecter - Multi-agent Systems Configuration over Ad-hoc Networks: Network a...
Towards user co-creation of value on the Internet-of-Things (IoT)
Data First - The Next Mobile Wave
Towards application development for the internet of things updated
Design of interactive mobile and ubiquitous applications
Research Talk at Bell Labs - IoT System Architecture and Interactions
Gestures For Mobile
Developing For The Pervasive Internet Of Things
Brochure co summit 2012
SMARCOS Project Brochure
PIRAmIDE English Presentation
Pervasive computing
AmbientTalk Rfid Dais2010
A Context Aware Mobile Social Web
Fjord@Mobile2.0: Designing for the connected world
Mobile Monday London M2M Event 110516
Pervasive Computing
MobiSys Group Presentation
Ad

Visual Dataflow Coordination2010

  • 1. A Hybrid Visual Dataflow Language For Coordination in Mobile Ad Hoc Networks Andoni Lombide Carreton and Theo D’Hondt Department of Computer Science Vrije Universiteit Brussel 12th International Conference on Coordination Models and Languages June 7-10 2010 Amsterdam, the Netherlands 1 Wednesday 9 June 2010
  • 2. Mobile Reactive Applications 2 Wednesday 9 June 2010
  • 3. Mobile Reactive Applications Mobile devices 2 Wednesday 9 June 2010
  • 4. Mobile Reactive Applications Mobile devices 2 Wednesday 9 June 2010
  • 5. Mobile Reactive Applications Mobile devices Intermittent connectivity 2 Wednesday 9 June 2010
  • 6. Mobile Reactive Applications Mobile devices Spontaneous interactions Intermittent connectivity 2 Wednesday 9 June 2010
  • 7. Mobile Reactive Applications Scarce infrastructure Mobile devices Spontaneous interactions Intermittent connectivity 2 Wednesday 9 June 2010
  • 8. Mobile Reactive Applications Scarce infrastructure Mobile devices Representation of physical objects Spontaneous interactions Intermittent connectivity 2 Wednesday 9 June 2010
  • 9. Mobile Reactive Applications Representation of physical objects Mobile devices Spontaneous interactions Distributed Event-driven Architecture Scarce infrastructure Intermittent connectivity 3 Wednesday 9 June 2010
  • 10. Mobile Reactive Applications Representation of physical objects Mobile devices Spontaneous interactions overy o c Disc Ad H Distributed Event-driven Architecture Scarce infrastructure Intermittent connectivity 3 Wednesday 9 June 2010
  • 11. Mobile Reactive Applications Representation of physical objects Mobile devices Spontaneous interactions overy o c Disc Ad H Distributed Event-driven Architecture Scarce infrastructure ecent ralized D Intermittent connectivity 3 Wednesday 9 June 2010
  • 12. Mobile Reactive Applications Representation of physical objects Mobile devices Spontaneous interactions overy o c Disc Ad H Distributed Event-driven Architecture Res ilien Scarce infrastructure t ecent ralized D Intermittent connectivity 3 Wednesday 9 June 2010
  • 13. Mobile Reactive Applications Representation of physical objects Mobile devices Spontaneous interactions Event streams overy o c Disc Ad H Distributed Event-driven Architecture Res ilien Scarce infrastructure t ecent ralized D Intermittent connectivity 3 Wednesday 9 June 2010
  • 14. Mobile Reactive Applications Representation of physical objects Mobile devices Event streams Spontaneous interactions as ting adc overy Bro o c Disc Ad H Distributed Event-driven Architecture Res ilien Scarce infrastructure t ecent ralized D Intermittent connectivity 3 Wednesday 9 June 2010
  • 15. AmbientTalk Distributed Event-driven Architecture whenever: Product discovered: { |product| } 4 Wednesday 9 June 2010
  • 16. AmbientTalk Distributed Event-driven Architecture whenever: Product discovered: { |product| def future := product<-getSerial(); when: future becomes: { |serial| println(“Product discovered: ” + serial); } } 4 Wednesday 9 June 2010
  • 17. AmbientTalk Distributed Event-driven Architecture whenever: Product discovered: { |product| def future := product<-getSerial(); when: future becomes: { |serial| println(“Product discovered: ” + serial); whenever: product disconnected: { println("Product disconnected: " + serial); }; whenever: product reconnected: { println("Product reconnected: " + serial); }; } } 4 Wednesday 9 June 2010
  • 18. AmbientTalk Distributed Event-driven Architecture Decentralized discovery based on UDP broadcasting whenever: Product discovered: { |product| def future := product<-getSerial(); when: future becomes: { |serial| println(“Product discovered: ” + serial); whenever: product disconnected: { println("Product disconnected: " + serial); }; whenever: product reconnected: { println("Product reconnected: " + serial); }; } } 4 Wednesday 9 June 2010
  • 19. AmbientTalk Distributed Event-driven Architecture Decentralized discovery based on UDP broadcasting whenever: Product discovered: { |product| Resilient def future := product<-getSerial(); asynchronous when: future becomes: { |serial| messages println(“Product discovered: ” + serial); whenever: product disconnected: { println("Product disconnected: " + serial); }; whenever: product reconnected: { println("Product reconnected: " + serial); }; } } 4 Wednesday 9 June 2010
  • 20. AmbientTalk Distributed Event-driven Architecture Decentralized discovery based on UDP broadcasting whenever: Product discovered: { |product| Resilient def future := product<-getSerial(); asynchronous when: future becomes: { |serial| messages println(“Product discovered: ” + serial); whenever: product disconnected: { println("Product disconnected: " + serial); }; whenever: product reconnected: { println("Product reconnected: " + serial); }; } } Control flow driven by events, but specified by textual, sequential blocks 4 Wednesday 9 June 2010
  • 21. Dataflow Programming x y z f(x,y,z) 5 Wednesday 9 June 2010
  • 22. The Ambient Vinyl Store 6 Wednesday 9 June 2010
  • 23. The Ambient Vinyl Store 6 Wednesday 9 June 2010
  • 24. The Ambient Vinyl Store 6 Wednesday 9 June 2010
  • 25. The Ambient Vinyl Store 6 Wednesday 9 June 2010
  • 26. 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 7 Wednesday 9 June 2010
  • 27. 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 7 Wednesday 9 June 2010
  • 28. 1 productsInBag 1 ListeningStation -> Shelf -> rfidTags.map: { |t| t.getProduct() }; filterOutPresentProducts(recommendToUser); 1 * products recommendToUser 1 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 7 Wednesday 9 June 2010
  • 29. 1 1 productsInBag recommendations 1 ListeningStation -> Shelf -> rfidTags.map: { |t| t.getProduct() }; filterOutPresentProducts(recommendToUser); 1 * products recommendToUser 1 1 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 7 Wednesday 9 June 2010
  • 30. 1 1 1 productsInBag nearbyRecommendations recommendations 1 1 ListeningStation -> Shelf -> rfidTags.map: { |t| t.getProduct() }; filterOutPresentProducts(recommendToUser); 1 * products recommendToUser 1 1 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 7 Wednesday 9 June 2010
  • 31. Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 1 1 productsInBag nearbyRecommendations recommendations 1 1 ListeningStation -> Shelf -> rfidTags.map: { |t| t.getProduct() }; filterOutPresentProducts(recommendToUser); 1 * products recommendToUser 1 1 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 7 Wednesday 9 June 2010
  • 32. A Visual Dataflow Language For Coordination in Mobile Ad Hoc Networks 1 de 1 pe nd y3 en e nc cy nd 1 pe de 1 1 Role -> << par1, par2, par3 << 1 code 1 2 dep e ncy end end enc dep y4 * * Role Role - method1 - method1 - method2 - method2 - method3 - method3 AmbientTalk VM AmbientTalk VM JVM JVM 8 Wednesday 9 June 2010
  • 33. Res Executing Mobile AmbientTalk Code ilien t Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 1 1 productsInBag recommendations nearbyRecommendations [ record1, [ record1, record2, [ record2, record2, record3, record4 ] record4 ] record4 ] def customer := extend: OperatorHostInterface with: { // ... Private fields ... def GUI := extend: JFrame with: { def showProductsInBag(products) { ... }; def showRecommendations(products) { ... }; def showRecommendationsInShop(products) { ... }; } } AmbientTalk VM 9 JVM Wednesday 9 June 2010
  • 34. Propagating and Reacting to Events ms strea Ev ent Res ilien t [ record2, record4 ] nearbyRecommendations 1 Shelf -> filterOutPresentProducts( ) filterOutPresentProducts(recommendToUser); * [ record1, recommendToUser record2, >> system.println(recommendToUser) record3, [ record1, record2 ] record4 ] 10 Wednesday 9 June 2010
  • 35. Propagating and Reacting to Events ms strea Ev ent Res ilien t [ record2, record4 ] nearbyRecommendations 1 Shelf -> filterOutPresentProducts( ) filterOutPresentProducts(recommendToUser); * [ record1, recommendToUser record2, >> system.println(recommendToUser) record3, [ record1, record2 ] record4 ] [ record1, record2, record3 ] 10 Wednesday 9 June 2010
  • 36. Propagating and Reacting to Events ms strea Ev ent Res ilien t [ record2, record4 ] nearbyRecommendations 1 Shelf -> filterOutPresentProducts( ) filterOutPresentProducts(recommendToUser); * [ record1, recommendToUser record2, >> system.println(recommendToUser) record3, [ record1, record2 ] record4 ] [ record1, record2, record3 ] [ ] 10 Wednesday 9 June 2010
  • 37. Propagating and Reacting to Events ms strea Ev ent Res ilien t [ record2, record4 ] nearbyRecommendations 1 Shelf -> filterOutPresentProducts( ) filterOutPresentProducts(recommendToUser); * [ record1, recommendToUser record2, >> system.println(recommendToUser) record3, [ record1, record2 ] record4 ] [ record1, record2, record3 ] [ ] [ record4 ] 10 Wednesday 9 June 2010
  • 38. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 39. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 40. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 41. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 [ record1, record2, productsInBag ... recordN ] 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 42. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 43. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 44. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 45. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 46. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 47. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 48. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 49. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 [ record1, record2, products ... recordN ] 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 50. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 51. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 52. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 53. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 54. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 55. Discovering Nodes covery Res H oc Dis ralized ilien t Ad D ecent Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 productsInBag 1 ListeningStation -> rfidTags.map: { |t| t.getProduct() }; 1 products 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 11 Wednesday 9 June 2010
  • 56. as ting Dependency Arities roa dc B Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 nearbyRecommendations incoming 1 incoming * 1 send one broadcast one Shelf -> outgoing 1 recommendation recommendation filterOutPresentProducts(recommendToUser); send list of broadcast list of * outgoing * recommendations recommendations recommendToUser 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 12 Wednesday 9 June 2010
  • 57. as ting Dependency Arities roa dc B Customer -> GUI.showProductsInBag(productsInBag); GUI.showRecommendations(recommendations); GUI.showRecommendationsInShop(nearbyRecommendations); 1 nearbyRecommendations incoming 1 incoming * * send one broadcast one Shelf -> outgoing 1 recommendation recommendation filterOutPresentProducts(recommendToUser); send list of broadcast list of * outgoing * recommendations recommendations recommendToUser 1 UserDatabase -> DB.getRecommendationsWithProducts(products); 12 Wednesday 9 June 2010
  • 58. ms trea Remembering State ent s Ev 1 value 1 Averager -> << buffer << if: (buffer == nil) then: { buffer := Buffer.new(5); }; buffer.put(value); def accumulated := 0; buffer.each: { |val| accumulated := accumulated + val }; accumulated / 5; 1 average 13 1 Wednesday 9 June 2010
  • 59. Editing Dataflow Graphs 14 Wednesday 9 June 2010
  • 60. Limitations and Future Work • Node discovery based on role names may cause name clashes: look into more advanced publish/subscribe mechanisms? • Security: build a secure environment to execute mobile AmbientTalk code. • Current editor prototype is still very rudimentary. • Dataflow debugging support. 15 Wednesday 9 June 2010
  • 61. Res ilien t overy ms ting Conclusion d Ho c Disc tralize d st rea dc as A D ecen ent B roa Ev • Hybrid visual dataflow language to coordinate distributed AmbientTalk components. • Coarse grained control flow encoded in dataflow graph and separated from fine grained control flow (AmbientTalk statement level). • Dynamically reconfiguring dataflow graph when mobile network topology changes. • Based on reactive programming. • Extends basic dataflow coordination model with broadcasting primitives by means of dependency arities. http://soft.vub.ac.be/soft/research/amopcop 16 Wednesday 9 June 2010