SlideShare una empresa de Scribd logo
1 de 109
Descargar para leer sin conexión
Implementing a Rule Language
for the Internet of Things
Phil Windley
Office of the CIO
Brigham Young University
The great question
(about power) is who
should have it.

– John Locke
The Web (circa 1996)
Client
Space
Server
Space
Google FacebookiCloud
Web 2.0
Client
Space
Server
Space
Google FacebookiCloud
Web 2.0
Client
Space
Server
Space
Google FacebookiCloud
Web 2.0
So long as we are merely
clients of servers,
we cannot be independent
Internet of Things
Lorem Ipsum Dolor
But it’s bigger than that…
Everything will have an online
representation.
But it’s not just about
manufactured things...
What will its architecture be?
Trillion node networks
Imagine a mountain
representing today’s
billion node network...
Lorem Ipsum Dolor
From Trillions by Maya Design
From Trillions by Maya Design
The Current IoT Model
Won’t Scale
Me
Me
GE
Internet of
My Things
Me
GE
• decentralized
• heterarchical
• interoperable
1. Distributed transaction processing and
applications
2. Peer-to-peer messaging and sharing
3. Autonomous coordination and contracts
between peers
picos
Picos are online computers
• persistent—retain state based on past operations.
• unique—identity that is immutable.
• online—available on the Internet and respond to events and
queries.
• concurrent—operate independently of one another and process
events and queries asynchronously.
• event-driven—respond to events by changing state and sending
new events.
• rule-based—behavior is expressed as rules that pattern-match
against incoming events.
http://joinfuse.com
Owner
Pico
Fleet Pico
Vehicle
Pico
Vehicle
Pico
Vehicle
Pico
Owner
Pico
Fleet Pico
Vehicle
Pico
Vehicle
Pico
Vehicle
Pico
Owner
Pico
Phil's Pico
owner
Phil's Pico
owner
Lynne's Pico
owner
Phil's Pico Tom's Pico
owner
Lynne's Pico
owner
Phil's Pico Tom's Pico
owner
Lynne's Pico
owner
Phil's Pico Tom's Pico
owner
Lynne's Pico
owner
Phil's Pico Tom's Pico
owner
Lynne's Pico
owner
borrower
Domain-Specific Languages
devices standardsidentityAPIsprotocols
devices standardsidentityAPIsprotocols
architecture
devices standardsidentityAPIsprotocols
architecture
framework
devices standardsidentityAPIsprotocols
architecture
framework
notation
Events vs Requests
“this happened”
vs
“do this”
Event System Properties
• Events are autonomous
• Event-driven system are more loosely coupled
• Downstream (receiver) driven flow control
• Near real-time propagation
Web
Application
Application
Data
Browser
Web
Application
Application
Data
Browser
Vehicle's
Pico
iCalendar
Web
Mobile
Rather than a model
where a system
presents an API for
a collection of
resources….
Rather than a model
where a system
presents an API for
a collection of
resources….
Picos present a
model wherein each
pico presents it’s
own, customizable
API
CloudOS
• Pico Lifecycle
• Subscriptions
• Ruleset management
• Notifications
• Files
KRL
Event-Condition-Action
rule check_subscriptions {
select when fuse subscription_check
pre {
vid = carvoyant:vehicle_id();
my_subs = carvoyant:getSubscription(vid);
should_have = required_subscription_list.length();
}
if(my_subs.length() < should_have) then
send_directive("not enough subscriptions")
fired {
log ">>>> vehicle #{vid} needs subscription check";
raise fuse event initial_carvoyant_subscriptions;
}
}
Event-Condition-Action
rule check_subscriptions {
select when fuse subscription_check
pre {
vid = carvoyant:vehicle_id();
my_subs = carvoyant:getSubscription(vid);
should_have = required_subscription_list.length();
}
if(my_subs.length() < should_have) then
send_directive("not enough subscriptions")
fired {
log ">>>> vehicle #{vid} needs subscription check";
raise fuse event initial_carvoyant_subscriptions;
}
}
Event-Condition-Action
rule check_subscriptions {
select when fuse subscription_check
pre {
vid = carvoyant:vehicle_id();
my_subs = carvoyant:getSubscription(vid);
should_have = required_subscription_list.length();
}
if(my_subs.length() < should_have) then
send_directive("not enough subscriptions")
fired {
log ">>>> vehicle #{vid} needs subscription check";
raise fuse event initial_carvoyant_subscriptions;
}
}
Event-Condition-Action
rule check_subscriptions {
select when fuse subscription_check
pre {
vid = carvoyant:vehicle_id();
my_subs = carvoyant:getSubscription(vid);
should_have = required_subscription_list.length();
}
if(my_subs.length() < should_have) then
send_directive("not enough subscriptions")
fired {
log ">>>> vehicle #{vid} needs subscription check";
raise fuse event initial_carvoyant_subscriptions;
}
}
Event-Condition-Action
rule check_subscriptions {
select when fuse subscription_check
pre {
vid = carvoyant:vehicle_id();
my_subs = carvoyant:getSubscription(vid);
should_have = required_subscription_list.length();
}
if(my_subs.length() < should_have) then
send_directive("not enough subscriptions")
fired {
log ">>>> vehicle #{vid} needs subscription check";
raise fuse event initial_carvoyant_subscriptions;
}
}
select when
web pageview re#/support/(d+)#
setting(issue_number)
before (phone inboundcall or
email received
subj.match(re#issue_number#)
)
select when
web pageview re#/support/(d+)#
setting(issue_number)
before (phone inboundcall or
email received
subj.match(re#issue_number#)
)
1
2
3
select when
web pageview re#/support/(d+)#
setting(issue_number)
before (phone inboundcall or
email received
subj.match(re#issue_number#)
)
1
2
3
Persistent Variables
rule name_trip {
select when fuse trip_name
pre {
tid = mkTid(event:attr("tripId"));
tname = event:attr(“tripName”).defaultsTo(“”, “no trip name”);
tcategory = event:attr(“tripCategory”).defaultsTo(“”, “no trip category”);
trip = ent:trip_summaries{tid}.defaultsTo({});
start = reducePrecision(trip{"startWaypoint"});
end = reducePrecision(trip{"endWaypoint"});
}
if(not trip{"startWaypoint"}.isnull() && not trip{"endWaypoint"}.isnull()) then
send_directive("Named trip") with
tripId = tid and
start = start and
end = end;
fired {
set ent:trip_names{[end, start]} mkTripMeta(tname, tcategory);
}
}
Persistent Variables
rule name_trip {
select when fuse trip_name
pre {
tid = mkTid(event:attr("tripId"));
tname = event:attr(“tripName”).defaultsTo(“”, “no trip name”);
tcategory = event:attr(“tripCategory”).defaultsTo(“”, “no trip category”);
trip = ent:trip_summaries{tid}.defaultsTo({});
start = reducePrecision(trip{"startWaypoint"});
end = reducePrecision(trip{"endWaypoint"});
}
if(not trip{"startWaypoint"}.isnull() && not trip{"endWaypoint"}.isnull()) then
send_directive("Named trip") with
tripId = tid and
start = start and
end = end;
fired {
set ent:trip_names{[end, start]} mkTripMeta(tname, tcategory);
}
}
Persistent Variables
rule name_trip {
select when fuse trip_name
pre {
tid = mkTid(event:attr("tripId"));
tname = event:attr(“tripName”).defaultsTo(“”, “no trip name”);
tcategory = event:attr(“tripCategory”).defaultsTo(“”, “no trip category”);
trip = ent:trip_summaries{tid}.defaultsTo({});
start = reducePrecision(trip{"startWaypoint"});
end = reducePrecision(trip{"endWaypoint"});
}
if(not trip{"startWaypoint"}.isnull() && not trip{"endWaypoint"}.isnull()) then
send_directive("Named trip") with
tripId = tid and
start = start and
end = end;
fired {
set ent:trip_names{[end, start]} mkTripMeta(tname, tcategory);
}
}
persistent variables (cont)
ent:trips -> {“39.369,-111.456” : {“39.034,-110.915”: {“name” : “home/school”,
“category” : “other”}},
“40.010,-111.456” : {“39.144,-112.324”: {“name” : “doctor’s office”,
“category” : “medical”}},
…
}
persistent variables (cont)
tripMeta = function(start, end) {
ent:trip_names{[reducePrecision(end), reducePrecision(start)]}
}
tripsByDate = function(start, end){
utc_start = common:convertToUTC(start);
utc_end = common:convertToUTC(end);
ent:trip_summaries.query([], {
'requires' : '$and',
'conditions' : [
{ ‘search_key' : [ 'endWaypoint', 'timestamp'],
'operator' : '$gte',
'value' : utc_start
},
{ 'search_key' : [ 'endWaypoint', 'timestamp' ],
'operator' : '$lte',
'value' : utc_end
}
]},
‘return_values’)
};
persistent variables (cont)
tripsByDate = function(start, end){
utc_start = common:convertToUTC(start);
utc_end = common:convertToUTC(end);
ent:trip_summaries.query([], {
'requires' : '$and',
'conditions' : [
{ ‘search_key' : [ 'endWaypoint', 'timestamp'],
'operator' : '$gte',
'value' : utc_start
},
{ 'search_key' : [ 'endWaypoint', 'timestamp' ],
'operator' : '$lte',
'value' : utc_end
}
]},
‘return_values’)
};
persistent variables (cont)
rulesets
pico engine
(kre)
Pico container is
implemented as
Apache module in
Perl
We’ve got both kinds:C & Perl!
Open standards
Open source
http://github.com/kre
Picos Support A Familiar Model
Kynetx Rules Engine
Other
Data
Sources
Web
Services
APIs
Rulesets
Persistent
Data
APIs
engine
Picos Support A Familiar Model
Kynetx Rules Engine
Other
Data
Sources
Web
Services
APIs
Rulesets
Persistent
Data
APIs
engine
Persistent Compute Object
containers
Picos Support A Familiar Model
Kynetx Rules Engine
Other
Data
Sources
Web
Services
APIs
Rulesets
Persistent
Data
APIs
engine
Persistent Compute Object
containers
CloudOS
Configuration
Management
CloudOS
Service
Notification
Service
PersonalData
Service
UISupport
File
Social
Social
Fuse
Library
Guard
Tour
Library
libraries
Picos Support A Familiar Model
Kynetx Rules Engine
Other
Data
Sources
Web
Services
APIs
Rulesets
Persistent
Data
APIs
engine
Persistent Compute Object
containers
Forevr.us
(contact)
Timeline
(social)
ToDo&
Reminders
Vehicle
Manangement
Home
Management
Intentcasting
Fuse
Guard
Tour
applications
CloudOS
Configuration
Management
CloudOS
Service
Notification
Service
PersonalData
Service
UISupport
File
Social
Social
Fuse
Library
Guard
Tour
Library
libraries
Picos Are Decentralized & Networked
pico
pico
Hosting
Space
Pico
Space
Hosting
Company A
Hosting
Company B
Self
Hosted
pico
pico
pico
pico
pico
pico
pico
KRE KRE KRE
Pico
Containers
Apache as an
Application Server
Modules are NOT CGI Programs
• Modules run inside the Apache process architecture
• Modules have access to and can replace all Apache services
• Uses the server API - not an embedded interpreter
• Access to every part of the HTTP request lifecycle
Apache Server
Lifecycle
Apache HTTP
Request Lifecycle
Apache Application Services
• Configuration
• Process and thread management
• Security
• Logging
• Interprocess communication
• Request dispatching
Implementation
• LOTS of libraries (~90)
• Any::Event
• DateTime
• Data::Diver
• Cache::Memcached
• WWW::Mechanize
• Test::More
• Parser
• Operators
• Good support for shards
• Documents are JSON
• Capped collections
• TTL indexes
wait
decode
event
schedule
rules
eval
rules
assemble
response
receive
event
explicit
event
directive
document
schedule
object
javaScript or
JSON
event
object
Pico Event Evaluation Cycle
event
directives
API interactions
external events
wait
decode
event
schedule
rules
eval
rules
assemble
response
receive
event
explicit
event
directive
document
schedule
object
javaScript or
JSON
request
env
Pico Event Evaluation Cycle
with container actions
event
directives
API interactions
external events
establish
context event
object
establish identity
load rulesets (parse/optimize)
calculate RIDs
calculate salience graph
Quickstart
http://developer.kynetx.com
Lessons Learned
• Understand language feng shui
• Parsing
• Don’t optimize too early
• Orthoganility
• Breadth first
• Languages evolve
• Leverage underlying language
• Build the language you want to
use
• Use your language
• Picos are a decent abstraction
Implementing a Rule Language
for the Internet of Things
Phil Windley
pjw@byu.edu
www.windley.com
@windley
windley

Más contenido relacionado

Similar a Rule Language for IoT

#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup Performance
Justin Cataldo
 
Engage 2013 - Multi Channel Data Collection
Engage 2013 - Multi Channel Data CollectionEngage 2013 - Multi Channel Data Collection
Engage 2013 - Multi Channel Data Collection
Webtrends
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWARE
FIWARE
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Events
tkramar
 
Developing your first application using FI-WARE
Developing your first application using FI-WAREDeveloping your first application using FI-WARE
Developing your first application using FI-WARE
Fermin Galan
 
Windows Remote Management - EN
Windows Remote Management - ENWindows Remote Management - EN
Windows Remote Management - EN
Kirill Nikolaev
 
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
confluent
 
Kakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming appKakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming app
Neil Avery
 

Similar a Rule Language for IoT (20)

[NDC 2019] Functions 2.0: Enterprise-Grade Serverless
[NDC 2019] Functions 2.0: Enterprise-Grade Serverless[NDC 2019] Functions 2.0: Enterprise-Grade Serverless
[NDC 2019] Functions 2.0: Enterprise-Grade Serverless
 
#NewMeetup Performance
#NewMeetup Performance#NewMeetup Performance
#NewMeetup Performance
 
Picos, CloudOS, and Connecting Things
Picos, CloudOS, and Connecting ThingsPicos, CloudOS, and Connecting Things
Picos, CloudOS, and Connecting Things
 
Engage 2013 - Multi Channel Data Collection
Engage 2013 - Multi Channel Data CollectionEngage 2013 - Multi Channel Data Collection
Engage 2013 - Multi Channel Data Collection
 
AWS IoT Deep Dive
AWS IoT Deep DiveAWS IoT Deep Dive
AWS IoT Deep Dive
 
以Device Shadows與Rules Engine串聯實體世界
以Device Shadows與Rules Engine串聯實體世界以Device Shadows與Rules Engine串聯實體世界
以Device Shadows與Rules Engine串聯實體世界
 
Ceilometer + Heat = Alarming
Ceilometer + Heat = Alarming Ceilometer + Heat = Alarming
Ceilometer + Heat = Alarming
 
Why you should be using structured logs
Why you should be using structured logsWhy you should be using structured logs
Why you should be using structured logs
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWARE
 
JavaScript Refactoring
JavaScript RefactoringJavaScript Refactoring
JavaScript Refactoring
 
Node.js: Continuation-Local-Storage and the Magic of AsyncListener
Node.js: Continuation-Local-Storage and the Magic of AsyncListenerNode.js: Continuation-Local-Storage and the Magic of AsyncListener
Node.js: Continuation-Local-Storage and the Magic of AsyncListener
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every day
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Events
 
What 100M downloads taught us about iOS architectures
What 100M downloads taught us about iOS architecturesWhat 100M downloads taught us about iOS architectures
What 100M downloads taught us about iOS architectures
 
Developing your first application using FI-WARE
Developing your first application using FI-WAREDeveloping your first application using FI-WARE
Developing your first application using FI-WARE
 
Windows Remote Management - EN
Windows Remote Management - ENWindows Remote Management - EN
Windows Remote Management - EN
 
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
 
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
 
Kakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming appKakfa summit london 2019 - the art of the event-streaming app
Kakfa summit london 2019 - the art of the event-streaming app
 

Más de Phil Windley

Introducing Personal Event Networks
Introducing Personal Event NetworksIntroducing Personal Event Networks
Introducing Personal Event Networks
Phil Windley
 
Using Apache as an Application Server
Using Apache as an Application ServerUsing Apache as an Application Server
Using Apache as an Application Server
Phil Windley
 
Context Automation
Context AutomationContext Automation
Context Automation
Phil Windley
 

Más de Phil Windley (20)

Trust, Blockchains, and Self-Soveriegn Identity
Trust, Blockchains, and Self-Soveriegn IdentityTrust, Blockchains, and Self-Soveriegn Identity
Trust, Blockchains, and Self-Soveriegn Identity
 
Events, Picos, and Microservices
Events, Picos, and MicroservicesEvents, Picos, and Microservices
Events, Picos, and Microservices
 
Relationships: Modeling the Vehicle Ecosystem with Fuse
Relationships: Modeling the Vehicle Ecosystem with FuseRelationships: Modeling the Vehicle Ecosystem with Fuse
Relationships: Modeling the Vehicle Ecosystem with Fuse
 
Connecting Things
Connecting ThingsConnecting Things
Connecting Things
 
Persistent Compute Objects and the Fabric of Cyberspace
Persistent Compute Objects and the Fabric of CyberspacePersistent Compute Objects and the Fabric of Cyberspace
Persistent Compute Objects and the Fabric of Cyberspace
 
Persistent Compute Objects - Picos
Persistent Compute Objects - PicosPersistent Compute Objects - Picos
Persistent Compute Objects - Picos
 
Fuse Technical Presentation
Fuse Technical PresentationFuse Technical Presentation
Fuse Technical Presentation
 
Personal Cloud Application Architectures
Personal Cloud Application ArchitecturesPersonal Cloud Application Architectures
Personal Cloud Application Architectures
 
Why Personal Clouds
Why Personal CloudsWhy Personal Clouds
Why Personal Clouds
 
Personal Cloud Operating Systems
Personal Cloud Operating SystemsPersonal Cloud Operating Systems
Personal Cloud Operating Systems
 
Introducing Personal Event Networks
Introducing Personal Event NetworksIntroducing Personal Event Networks
Introducing Personal Event Networks
 
The Live Web #SCITDA11 Keynote
The Live Web #SCITDA11 KeynoteThe Live Web #SCITDA11 Keynote
The Live Web #SCITDA11 Keynote
 
Shaping strategies and Startups
Shaping strategies and StartupsShaping strategies and Startups
Shaping strategies and Startups
 
Shaping Strategies and the Live Web - Kynetx Impact 2011
Shaping Strategies and the Live Web - Kynetx Impact 2011Shaping Strategies and the Live Web - Kynetx Impact 2011
Shaping Strategies and the Live Web - Kynetx Impact 2011
 
The Evented Web Makes Users Happy
The Evented Web Makes Users HappyThe Evented Web Makes Users Happy
The Evented Web Makes Users Happy
 
Using Puppet and Cobbler to Automate Your Infrastructure
Using Puppet and Cobbler to Automate Your InfrastructureUsing Puppet and Cobbler to Automate Your Infrastructure
Using Puppet and Cobbler to Automate Your Infrastructure
 
Using Apache as an Application Server
Using Apache as an Application ServerUsing Apache as an Application Server
Using Apache as an Application Server
 
The Power of Open Data
The Power of Open DataThe Power of Open Data
The Power of Open Data
 
Context Automation
Context AutomationContext Automation
Context Automation
 
Context Automation (with video demos)
Context Automation (with video demos)Context Automation (with video demos)
Context Automation (with video demos)
 

Último

VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
imonikaupta
 
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
Call Girls In Delhi Whatsup 9873940964 Enjoy Unlimited Pleasure
 

Último (20)

2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
 
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
 
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort ServiceBusty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
 
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts ServiceReal Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
 
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
 
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
 
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
 
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
 
Al Barsha Night Partner +0567686026 Call Girls Dubai
Al Barsha Night Partner +0567686026 Call Girls  DubaiAl Barsha Night Partner +0567686026 Call Girls  Dubai
Al Barsha Night Partner +0567686026 Call Girls Dubai
 
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
 
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
 
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls DubaiDubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
 

Rule Language for IoT