Private phd defense_40-45min
-
Upload
alombide -
Category
Technology
-
view
274 -
download
0
Transcript of Private phd defense_40-45min
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