private phd defense_40-45min

Post on 25-May-2015

273 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ambient-Oriented Dataflow Programming for Mobile RFID-Enabled Applications

Andoni Lombide Carreton

Promotor: Prof. Dr. Wolfgang De MeuterCopromotor: Prof. Dr. Theo D’Hondt Vrije Universiteit Brussel

Brussels, Belgium

Private PhD Defense, October 11th 2011, Brussels 1

Roadmap

2

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

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-reply-callback (lambda (reply) ...))

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

8

Event-based Decoupling and Inversion of Control

(register-connection-callback (lambda (tagged-object) (set! ...) ...))

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

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

Shared state

Shared state

Shared state

?

Shared state9

Event-based Decoupling and Inversion of Control

(register-connection-callback (lambda (tagged-object) (set! ...) ...))

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

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

Shared state

Shared state

Shared state

?

Shared state9

Event-based Decoupling and Inversion of Control

(register-connection-callback (lambda (tagged-object) (set! ...) ...))

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

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

Shared state

Shared state

Shared state

?

Shared state9

Event-based Decoupling and Inversion of Control

(register-connection-callback (lambda (tagged-object) (set! ...) ...))

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

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

Shared state

Shared state

Shared state

?

Shared state

Decoupling in space

Decoupling in time

Decoupling in arity

Rich representation of events

No inversion of control

Global control flow management9

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

Reactive programming

Explicit dataflow programming

Node-centric sensor-network programming

Network-centric sensor-network programming

Publish/subscribe + dataflow programming = ambient-oriented dataflow

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();

def setTitle(newTitle)@Mutator { title := newTitle; };

def addReview(review)@Mutator { reviews.add(review); };} taggedAs: Book;

RFID event loop

Hardware Abstraction Layer

14

Things: Proxies for Tags

deftype Book;

def aBook := thing: { def isbn := 123; def title := “My book”; def reviews := Vector.new();

def setTitle(newTitle)@Mutator { title := newTitle; };

def addReview(review)@Mutator { reviews.add(review); };} taggedAs: Book;

RFID event loop

Hardware Abstraction Layer

14

Storing Objects on RFID Tags

def aBook := thing: { ... };

when: BlankTag discovered: { |tag| when: tag<-initialize(aBook) becomes: { |bookReference| // ... }}

RFID event loop

Hardware Abstraction Layer

tagaBook

15

Storing Objects on RFID Tags

def aBook := thing: { ... };

when: BlankTag discovered: { |tag| when: tag<-initialize(aBook) becomes: { |bookReference| // ... }}

RFID event loop

Hardware Abstraction Layer

tagaBook

15

Storing Objects on RFID Tags

def aBook := thing: { ... };

when: BlankTag discovered: { |tag| when: tag<-initialize(aBook) becomes: { |bookReference| // ... }}

RFID event loop

Hardware Abstraction Layer

tagaBook

15

Storing Objects on RFID Tags

def aBook := thing: { ... };

when: BlankTag discovered: { |tag| when: tag<-initialize(aBook) becomes: { |bookReference| // ... }}

RFID event loop

Hardware Abstraction Layer

tag

bookReferenceaBook

15

Reactivity to Appearing and Disappearing Things

RFID event loop

Hardware Abstraction Layer

whenever: Book discovered: { |book| // React on appearance whenever: book disconnected: { // React on disappearance }; whenever: book reconnected: { // React on reappearance };}; 16

Reactivity to Appearing and Disappearing Things

RFID event loop

Hardware Abstraction Layer

whenever: Book discovered: { |book| // React on appearance whenever: book disconnected: { // React on disappearance }; whenever: book reconnected: { // React on reappearance };}; 16

Reactivity to Appearing and Disappearing Things

RFID event loop

Hardware Abstraction Layer

whenever: Book discovered: { |book| // React on appearance whenever: book disconnected: { // React on disappearance }; whenever: book reconnected: { // React on reappearance };}; 16

Reactivity to Appearing and Disappearing Things

RFID event loop

Hardware Abstraction Layer

whenever: Book discovered: { |book| // React on appearance whenever: book disconnected: { // React on disappearance }; whenever: book reconnected: { // React on reappearance };}; 16

Asynchronous and Fault-tolerant Communication with Things

RFID event loop

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

17

Asynchronous and Fault-tolerant Communication with Things

RFID event loop

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

17

Asynchronous and Fault-tolerant Communication with Things

RFID event loop

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

17

Asynchronous and Fault-tolerant Communication with Things

RFID event loop

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

17

Asynchronous and Fault-tolerant Communication with Things

RFID event loop

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

17

Asynchronous and Fault-tolerant Communication with Things

RFID event loop

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

17

Asynchronous and Fault-tolerant Communication with Things

RFID event loop

Hardware Abstraction Layerwhen: book<-getTitle() 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

21

Event Signaling Reacting

New ticket trader connected

Automatic notification by AmbientTalk whenever:discovered:

Ticket trader disconnected

Automatic notification by AmbientTalk when:disconnected:

Ticket trader reconnected

Automatic notification by AmbientTalk

when:reconnected:

New ticket for sale notifyTicketForSale asynchronous message

notifyTicketForSale callback

Price of ticket changed

notifyPriceChanged asynchronous message

notifyPriceChanged callback

Location of ticket trader changed

notifyLocationChanged asynchronous message

notifyLocationChanged callback

Own location changed

GPS abstraction invokes callback with new coordinates

Callback registered on GPS abstraction

Reactive Programming in AmbientTalk/R

GUI.centerOn(GPSLocation.latitude, GPSLocation.longitude);

.latitude .longitude

GUI.centerOn(_, _)

H

H+1

GPSLocation

latitude longitude

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 Behaviorsdeftype 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 Behaviorsdeftype 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 Behaviorsdeftype 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 Behaviorsdeftype 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 Behaviorsdeftype 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 Behaviorsdeftype 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 Behaviorsdeftype 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 Behaviorsdeftype 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 Behaviorsdeftype 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 Behaviorsdeftype 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

27

Event Signaling Reacting

New ticket trader connected

Automatic notification by AmbientTalk whenever:discovered:

Ticket trader disconnected

Automatic notification by AmbientTalk when:disconnected:

Ticket trader reconnected

Automatic notification by AmbientTalk

when:reconnected:

New ticket for sale notifyTicketForSale asynchronous message

notifyTicketForSale callback

Price of ticket changed

notifyPriceChanged asynchronous message

notifyPriceChanged callback

Location of ticket trader changed

notifyLocationChanged asynchronous message

notifyLocationChanged callback

Own location changed

GPS abstraction invokes callback with new coordinates

Callback registered on GPS abstraction

Qualitative Evaluation

27

Qualitative Evaluation

27

Qualitative Evaluation

27

Qualitative Evaluation

27

Qualitative Evaluation

27

Qualitative Evaluation

27

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

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

Case Study: The Book Recommender Application in the Ambient Library

28

scannedrecommended

recommended in library

Case Study: The Book Recommender Application in the Ambient Library

28

scannedrecommended

recommended in library

Part IV: Network-Centric Ambient-Oriented Dataflow Programming

29

Network-Centric Visual Dataflow Programming in AmbientTalk/RV

scannedrecommended

recommended in library

30

11

Network-Centric Visual Dataflow Programming in AmbientTalk/RV

scannedrecommended

recommended in library

30

11BookRecommender ->

showBooks(books); showSimilarBooks(recommended); showRecommendationsInStock(recommendedInStock);

Shelf ->

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

recommendedInStock similarBooks

books

BookScanner ->

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

recommended

scannedBooks

EBookReader ->

scannedBooks.map: { |book| generateSimilarBooks(book) };

1

1

1

1

1

*

1

1

Deploying an AmbientTalk/R Dataflow ProgramV

def BookRecommenderApp := extend: OperatorHostInterface with: { def showBooks(books) { ... }; def showSimilarBooks(books) { ... }; def showRecommendationsInStock(books) { ... };};

deftype BookRecommender;export: BookRecommenderApp as: BookRecommender;

AmbientTalk/R VM

JVM

31

BookRecommender ->

showBooks(books); showSimilarBooks(recommended); showRecommendationsInStock(recommendedInStock);

Dataflow Dependencies

Rebinding dataflow dependency

Fixed dataflow dependency

32

BookScanner ->

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

1

1

BookRecommender ->

showBooks(books); showSimilarBooks(recommended); showRecommendationsInStock(recommendedInStock);

books

1

EBookReader ->

scannedBooks.map: { |book| generateSimilarBooks(book) };

Shelf ->

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

*

similarBooks

Dependency Arities

33

1

BookRecommender ->

showBooks(books); showSimilarBooks(recommended); showRecommendationsInStock(recommendedInStock);

1

*

EBookReader ->

scannedBooks.map: { |book| generateSimilarBooks(book) };

1recommendedInStock similarBooks

Shelf ->

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

Dependency Arities

33

*

BookRecommender ->

showBooks(books); showSimilarBooks(recommended); showRecommendationsInStock(recommendedInStock);

1

*

EBookReader ->

scannedBooks.map: { |book| generateSimilarBooks(book) };

1recommendedInStock similarBooks

Shelf ->

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

Dependency Semantics

Incoming 1 Incoming *

Outgoing 1Signal one value to a

single (rebound or fixed) node

Signal one value to all reachable nodes of same

role

Outgoing *Signal set of values to a single (rebound or fixed)

node

Signal set of values to all reachable nodes of same

role

Binding semantics Arity semantics34

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/R needs more tooling (e.g. visual scalability, syntax for content-based subscriptions...).

V

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

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

Ambi

ent-O

rient

ed P

rogr

amm

ing

with

Pas

sive

RFID

37

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

Ambi

ent-O

rient

ed P

rogr

amm

ing

with

Pas

sive

RFID

37

Decoupling in space

Decoupling in time

Decoupling in arity

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

No inversion of control

Ambi

ent-O

rient

ed P

rogr

amm

ing

with

Pas

sive

RFID

37

Decoupling in space

Decoupling in time

Decoupling in arity

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

No inversion of control

Ambi

ent-O

rient

ed P

rogr

amm

ing

with

Pas

sive

RFID

37

Decoupling in space

Decoupling in time

Decoupling in arity Publish/subscribe + dataflow programming = ambient-oriented dataflow

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

Ambi

ent-O

rient

ed P

rogr

amm

ing

with

Pas

sive

RFID

37

Decoupling in space

Decoupling in time

Decoupling in arity

Rich representation of events

No inversion of control

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

Ambi

ent-O

rient

ed P

rogr

amm

ing

with

Pas

sive

RFID

37

Global control flow management

Decoupling in space

Decoupling in time

Decoupling in arity

Rich representation of events

No inversion of control

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

Ambi

ent-O

rient

ed P

rogr

amm

ing

with

Pas

sive

RFID

37

Decoupling in space

Decoupling in time

Decoupling in arity

Rich representation of events

No inversion of control

Global control flow management

Why Ambient-Oriented Language Abstractions?38

Why Ambient-Oriented Language Abstractions?39

Why Ambient-Oriented Language Abstractions?40

Why Ambient-Oriented Language Abstractions?41

top related