SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
Atom: Redis for Robotics
Dan Pipe-Mazo, Elementary Robotics
ELEMENTARY ROBOTICS NOV 15
Elementary Robotics:
Who We Are
We believe that there are two main
items holding back the robotics industry:
Cost & Ease of programming.
We’re building low-cost, data-rich robots
from the ground up with an emphasis on
performance and ease of use.
ELEMENTARY ROBOTICS NOV 15
Robotics Stack: Basics
HARDWARE DRIVERS SOFTWARE
Joints
Motors
Sensors
Talk to all hardware 

in low-level
Programming languages/
kernel modules
Proprietary communications
protocols
Implements high-level logic
and algorithms for the system.


Calls driver APIs as necessary
to get things done.
ELEMENTARY ROBOTICS NOV 15
ABSTRACTION
SCALABILITY LANGUAGE SUPPORT
Standardize complex
hardware and algorithms
into simple paradigms
Easy horizontal scaling
for compute-heavy
tasks
Certain tasks are
better suited to
certain languages
Software Stack:
Objectives
DEPENDENCIES
Eliminate
dependency issues
INTROSPECTION
Easily audit the system
for debug/monitoring
ELEMENTARY ROBOTICS NOV 15
Software Stack:
Solution
+
API
Create a specification, API, and set of libraries
called atom prebuilt with all dependencies and
shipped in a docker container.
MICRO-SERVICES
Create micro services called elements that use
the atom libraries, in their preferred language,
to implement higher-level APIs
TECHNOLOGY
Use redis streams for performant, flexible distributed
data publishing and command/response paradigms.
ELEMENTARY ROBOTICS NOV 15
Redis Streams: overview
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
...
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
ELEMENTARY ROBOTICS NOV 15
Redis Streams: overview
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s2
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
...
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
ELEMENTARY ROBOTICS NOV 15
Redis Streams: overview
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s2
...
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
XREAD BLOCK N STREAMS s1 $
XREAD BLOCK N STREAMS s1 ID
Subscribe to all entries from one stream
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
ELEMENTARY ROBOTICS NOV 15
Redis Streams: overview
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s2
...
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
XREAD BLOCK N STREAMS s1 $
XREAD BLOCK N STREAMS s1 ID
Subscribe to all entries from one stream
XREAD BLOCK N STREAMS s1 s2 ID1 ID2
Subscribe to all entries from multiple streams
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
ELEMENTARY ROBOTICS NOV 15
Redis Streams: overview
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s2
...
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
XREAD BLOCK N STREAMS s1 $
XREAD BLOCK N STREAMS s1 ID
Subscribe to all entries from one stream
XREAD BLOCK N STREAMS s1 s2 ID1 ID2
Subscribe to all entries from multiple streams
XREVRANGE s1 + - COUNT N
Get the latest N entries from a stream
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
ELEMENTARY ROBOTICS NOV 15
Redis Streams: overview
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s2
...
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
XREAD BLOCK N STREAMS s1 $
XREAD BLOCK N STREAMS s1 ID
Subscribe to all entries from one stream
XREAD BLOCK N STREAMS s1 s2 ID1 ID2
Subscribe to all entries from multiple streams
XREVRANGE s1 + - COUNT N
Get the latest N entries from a stream
XRANGE s1 - + COUNT N
Get the oldest N entries from a stream
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
ELEMENTARY ROBOTICS NOV 15
Atom
Specification and Examples
ELEMENTARY ROBOTICS NOV 15
Atom: Data Publishing
PUBLISHER:
element “foo”, streams s1 and s2
SUBSCRIBER:
Options to read from the stream
XADD data:foo:s1 MAXLEN ~ X k1 v1 k2 v2 …
XADD data:foo:s2 MAXLEN ~ X k3 v3 k4 v4 …
XREAD BLOCK T STREAMS data:foo:s1 data:foo:s2 idS1 idS2
XREVRANGE data:foo:s1 + - COUNT N
XRANGE data:foo:s1 - + COUNT N
ELEMENTARY ROBOTICS NOV 15
Atom: Data Publishing Example
CAMERA
USB
camera
element
MAIN COMPUTE
XADD
frames
elem:cam:frames
REDIS
ELEMENTARY ROBOTICS NOV 15
Atom: Data Publishing Example
CAMERA
USB
camera
element
MAIN COMPUTE
XADD
frames
elem:cam:frames
REDIS
video
packaging
element
XREAD BLOCK N
ELEMENTARY ROBOTICS NOV 15
Atom: Data Publishing Example
CAMERA
USB
camera
element
MAIN COMPUTE
XADD
frames
elem:cam:frames
REDIS
video
packaging
element
ML
classification
element
XREAD BLOCK N
XREVRANGE + -
ELEMENTARY ROBOTICS NOV 15
Atom: Data Publishing Example
CAMERA
USB
camera
element
MAIN COMPUTE
XADD
frames
elem:cam:frames
REDIS
video
packaging
element
ML
classification
element
ML
retraining
element
XREAD BLOCK N
XREVRANGE + -
XRANGE last +
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
elem:foo:rep
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req XREAD BLOCK 0 STREAMS elem:bar:req lastEntryIDXADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
elem:foo:rep
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
XREAD BLOCK 0 STREAMS elem:bar:req lastEntryIDXADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
elem:foo:rep
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
XREAD BLOCK 0 STREAMS elem:bar:req lastEntryIDXADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
elem:foo:rep
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
elem:foo:rep
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
(entryID, {“elem”: bar, “id”: ID, “time”: T})
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
elem:foo:rep
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
(entryID, {“elem”: bar, “id”: ID, “time”: T})
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
elem:foo:rep
XREAD BLOCK T STREAMS elem:foo:rep lastEntryID
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
XADD elem:foo:rep MAXLEN ~ X elem bar id ID resp R
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
(entryID, {“elem”: bar, “id”: ID, “time”: T})
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
elem:foo:rep
XREAD BLOCK T STREAMS elem:foo:rep lastEntryID
ELEMENTARY ROBOTICS NOV 15
Atom: Sync or Async Req/Rep
Requestor: “foo” Responder: “bar”REDIS
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
XADD elem:foo:rep MAXLEN ~ X elem bar id ID resp R
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
(entryID, {“elem”: bar, “id”: ID, “time”: T})
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
elem:foo:rep
(entryID, {“elem”: bar, “id”: ID, “resp”: R})
XREAD BLOCK T STREAMS elem:foo:rep lastEntryID
ELEMENTARY ROBOTICS NOV 15
Atom: Req/Rep Example
MAIN COMPUTE
REDIS
user
element
robot
element
elem:robot:req
elem:user:rep
Go to (x, y, z)
ELEMENTARY ROBOTICS NOV 15
Atom: Req/Rep Example
MAIN COMPUTE
REDIS
user
element
robot
element
elem:robot:req
elem:user:rep
Go to (x, y, z)
ACK
ELEMENTARY ROBOTICS NOV 15
Atom: Req/Rep Example
COMMS
MAIN COMPUTE
REDIS
MOTOR 1
MOTOR 2
MOTOR N
...
user
element
robot
element
elem:robot:req
elem:user:rep
Go to (x, y, z)
ACK
ELEMENTARY ROBOTICS NOV 15
Atom: Req/Rep Example
COMMS
MAIN COMPUTE
REDIS
MOTOR 1
MOTOR 2
MOTOR N
...
user
element
robot
element
elem:robot:req
elem:user:rep
Go to (x, y, z)
ACK
path
planning
element
camera
element
ELEMENTARY ROBOTICS NOV 15
Atom: Req/Rep Example
COMMS
MAIN COMPUTE
REDIS
MOTOR 1
MOTOR 2
MOTOR N
...
user
element
robot
element
elem:robot:req
elem:user:rep
Go to (x, y, z)
ACK
Done
path
planning
element
camera
element
ELEMENTARY ROBOTICS NOV 15
Atom:
Scaling &
Updates
REDIS STREAM CONSUMER GROUPS
XGROUP CREATE elem:bar:req consumers $
UPDATES (ASSUMING SAME API)
Spin up the new instance, monitor performance,
spin down the old instance.
SCALING
Just spin up another instance of the element on
the same redis master.
XREADGROUP consumers me BLOCK 0 COUNT 1 STREAMS elem:bar:req <
XACK elem:bar:req consumers entryID
ELEMENTARY ROBOTICS NOV 15
Atom: Scaling/Update Example
MAIN COMPUTE
REDISML
classification
element
(copy 1) elem:class:req
elem:user:rep
user element
Classify A, B, C, D
A
ELEMENTARY ROBOTICS NOV 15
Atom: Scaling/Update Example
MAIN COMPUTE
REDISML
classification
element
(copy 1)
ML
classification
element
(copy 2)
elem:class:req
elem:user:rep
user element
Classify A, B, C, D
A
B
ELEMENTARY ROBOTICS NOV 15
Atom: Scaling/Update Example
MAIN COMPUTE
REDISML
classification
element
(copy 1)
ML
classification
element
(copy 2)
elem:class:req
elem:user:rep
user element
Classify A, B, C, D
Result A
Results
Result B
ELEMENTARY ROBOTICS NOV 15
Atom: Scaling/Update Example
MAIN COMPUTE
REDISML
classification
element
(copy 1)
ML
classification
element
(copy 2)
elem:class:req
elem:user:rep
user element
Classify A, B, C, D
C
D
ELEMENTARY ROBOTICS NOV 15
Atom: Scaling/Update Example
MAIN COMPUTE
REDISML
classification
element
(copy 1)
ML
classification
element
(copy 2)
elem:class:req
elem:user:rep
user element
Classify A, B, C, D
Result C
Results
Result D
ELEMENTARY ROBOTICS NOV 15
Atom:
Basic Discovery
ELEMENT
DISCOVERY
DATA STREAM
DISCOVERY
SCAN cursor MATCH elem: SCAN cursor MATCH data:
SCAN cursor MATCH data:foo
COMMAND
DISCOVERY
In the works!
ELEMENTARY ROBOTICS NOV 15
Atom:
Serialization
OVERALL COMMAND/
RESPONSE
DATA
JPEG/TIFF best for
camera/PointCloud data,
Protobuf pretty good for
most other data.

No single serialization
protocol was best/optimal
for all payloads/use cases.
No Enforced Serialization
Protobuf performed well and
RPC service specification
worked well for strongly typed
command/response types.
ELEMENTARY ROBOTICS NOV 15
Atom:
API
class Element():
__init__(self, name)
__del__(self)
# Commands

command_add(
self,
name,
handler,
timeout=DEFAULT_TIMEOUT)
command_loop(
self)
command_send(
self,
element,
command,
data,
block=True)
# Data
entry_write(
self,
name,
{“k1”: v1, “k2”:v2, … },
maxlen=DEFAULT_MAXLEN)
entry_read_n(
self,
element,
stream,
n)
entry_read_loop(
self,
{“s1”: h1, “s2”: h2, …},
n_loops=None)
# Discovery
get_all_elements(
self)
get_all_streams(
self,
element_name=None)
ELEMENTARY ROBOTICS NOV 15
Atom:
Docker
NUCLEUS
DOCKER
CONTAINER
ATOM
DOCKER
CONTAINER
ELEMENT
DOCKER
CONTAINERS
User-developed
elements
FROM
elementaryrobotics/atom
FROM
redis/alpine
Contains custom redis
conf + atom CLI
Latest tested atom
libraries
All dependencies,
protobuf, etc.
MOLECULE
DOCKER
COMPOSE FILE
Launch nucleus
and all elements
Set up shared tmpfs
between containers &
unix socket for redis

ELEMENTARY ROBOTICS NOV 15
Atom:
User Development Flow
1
Copy template from
atom github repo.
2
Implement element in
language of choosing
3
Build element with
4
Launch element, nucleus
and all dependencies with
docker-compose up -d
docker-compose build
5
Done!
ELEMENTARY ROBOTICS NOV 15
Summary
ATOM SET
OF TOOLS
OUR
WEBSITE
elementaryrobotics.com.
Please visit and sign up
for more info on atom.
Allow for powerful yet
simple new ways of
programming
robotic systems.
WE’RE
HIRING!
REDIS
STREAMS
We're working on atom to
bring the power of redis
streams to robotics.
We build robots in LA! Send
me an email directly at
dan@elementaryrobotics.com

Thank you!
Please check out our website at
elementaryrobotics.com
and sign up for more info about atom!

Contenu connexe

Similaire à RedisDay London 2018 - Atom: Redis for Robotics

Atom The Redis Streams-Powered Microservices SDK: Dan Pipemazo
Atom The Redis Streams-Powered Microservices SDK: Dan PipemazoAtom The Redis Streams-Powered Microservices SDK: Dan Pipemazo
Atom The Redis Streams-Powered Microservices SDK: Dan PipemazoRedis Labs
 
[TECHCON 2019: MOBILE - iOS]3.쉽고 재미있는 iOS 디버깅 - LLDB Command
[TECHCON 2019: MOBILE - iOS]3.쉽고 재미있는 iOS 디버깅 - LLDB Command[TECHCON 2019: MOBILE - iOS]3.쉽고 재미있는 iOS 디버깅 - LLDB Command
[TECHCON 2019: MOBILE - iOS]3.쉽고 재미있는 iOS 디버깅 - LLDB CommandNAVER Engineering
 
PLUG code generation tool
PLUG code generation toolPLUG code generation tool
PLUG code generation toolEmmanuel Fuchs
 
Big Data LDN 2017: Processing Fast Data With Apache Spark: the Tale of Two APIs
Big Data LDN 2017: Processing Fast Data With Apache Spark: the Tale of Two APIsBig Data LDN 2017: Processing Fast Data With Apache Spark: the Tale of Two APIs
Big Data LDN 2017: Processing Fast Data With Apache Spark: the Tale of Two APIsMatt Stubbs
 
Apache flink: data streaming as a basis for all analytics by Kostas Tzoumas a...
Apache flink: data streaming as a basis for all analytics by Kostas Tzoumas a...Apache flink: data streaming as a basis for all analytics by Kostas Tzoumas a...
Apache flink: data streaming as a basis for all analytics by Kostas Tzoumas a...Big Data Spain
 
Scalaz Stream: Rebirth
Scalaz Stream: RebirthScalaz Stream: Rebirth
Scalaz Stream: RebirthJohn De Goes
 
Scalaz Stream: Rebirth
Scalaz Stream: RebirthScalaz Stream: Rebirth
Scalaz Stream: RebirthJohn De Goes
 
Introducing Arc: A Common Intermediate Language for Unified Batch and Stream...
Introducing Arc:  A Common Intermediate Language for Unified Batch and Stream...Introducing Arc:  A Common Intermediate Language for Unified Batch and Stream...
Introducing Arc: A Common Intermediate Language for Unified Batch and Stream...Flink Forward
 
dot15926 Software Presentation
dot15926 Software Presentationdot15926 Software Presentation
dot15926 Software PresentationVictor Agroskin
 
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & ProtocolsAmazon Web Services
 
DASP Top10 for OWASP Thailand Chapter by s111s
DASP Top10 for OWASP Thailand Chapter by s111s DASP Top10 for OWASP Thailand Chapter by s111s
DASP Top10 for OWASP Thailand Chapter by s111s s111s object
 
Mapping Relational Databases to Linked Data
Mapping Relational Databases to Linked DataMapping Relational Databases to Linked Data
Mapping Relational Databases to Linked DataEUCLID project
 
Greyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka LibraryGreyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka LibraryNatan Silnitsky
 
PrismTech Reflective Language for Communication Systems
PrismTech Reflective Language for Communication SystemsPrismTech Reflective Language for Communication Systems
PrismTech Reflective Language for Communication SystemsADLINK Technology IoT
 
Scylla Summit 2017: SMF: The Fastest RPC in the West
Scylla Summit 2017: SMF: The Fastest RPC in the WestScylla Summit 2017: SMF: The Fastest RPC in the West
Scylla Summit 2017: SMF: The Fastest RPC in the WestScyllaDB
 
Apache Spark Overview part2 (20161117)
Apache Spark Overview part2 (20161117)Apache Spark Overview part2 (20161117)
Apache Spark Overview part2 (20161117)Steve Min
 
Open SQL & Internal Table
Open SQL & Internal TableOpen SQL & Internal Table
Open SQL & Internal Tablesapdocs. info
 

Similaire à RedisDay London 2018 - Atom: Redis for Robotics (20)

Atom The Redis Streams-Powered Microservices SDK: Dan Pipemazo
Atom The Redis Streams-Powered Microservices SDK: Dan PipemazoAtom The Redis Streams-Powered Microservices SDK: Dan Pipemazo
Atom The Redis Streams-Powered Microservices SDK: Dan Pipemazo
 
[TECHCON 2019: MOBILE - iOS]3.쉽고 재미있는 iOS 디버깅 - LLDB Command
[TECHCON 2019: MOBILE - iOS]3.쉽고 재미있는 iOS 디버깅 - LLDB Command[TECHCON 2019: MOBILE - iOS]3.쉽고 재미있는 iOS 디버깅 - LLDB Command
[TECHCON 2019: MOBILE - iOS]3.쉽고 재미있는 iOS 디버깅 - LLDB Command
 
PLUG code generation tool
PLUG code generation toolPLUG code generation tool
PLUG code generation tool
 
Big Data LDN 2017: Processing Fast Data With Apache Spark: the Tale of Two APIs
Big Data LDN 2017: Processing Fast Data With Apache Spark: the Tale of Two APIsBig Data LDN 2017: Processing Fast Data With Apache Spark: the Tale of Two APIs
Big Data LDN 2017: Processing Fast Data With Apache Spark: the Tale of Two APIs
 
Apache flink: data streaming as a basis for all analytics by Kostas Tzoumas a...
Apache flink: data streaming as a basis for all analytics by Kostas Tzoumas a...Apache flink: data streaming as a basis for all analytics by Kostas Tzoumas a...
Apache flink: data streaming as a basis for all analytics by Kostas Tzoumas a...
 
Scalaz Stream: Rebirth
Scalaz Stream: RebirthScalaz Stream: Rebirth
Scalaz Stream: Rebirth
 
Scalaz Stream: Rebirth
Scalaz Stream: RebirthScalaz Stream: Rebirth
Scalaz Stream: Rebirth
 
Introducing Arc: A Common Intermediate Language for Unified Batch and Stream...
Introducing Arc:  A Common Intermediate Language for Unified Batch and Stream...Introducing Arc:  A Common Intermediate Language for Unified Batch and Stream...
Introducing Arc: A Common Intermediate Language for Unified Batch and Stream...
 
dot15926 Software Presentation
dot15926 Software Presentationdot15926 Software Presentation
dot15926 Software Presentation
 
Serverless for Developers
Serverless for DevelopersServerless for Developers
Serverless for Developers
 
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
 
Dynamic user trace
Dynamic user traceDynamic user trace
Dynamic user trace
 
DASP Top10 for OWASP Thailand Chapter by s111s
DASP Top10 for OWASP Thailand Chapter by s111s DASP Top10 for OWASP Thailand Chapter by s111s
DASP Top10 for OWASP Thailand Chapter by s111s
 
Mapping Relational Databases to Linked Data
Mapping Relational Databases to Linked DataMapping Relational Databases to Linked Data
Mapping Relational Databases to Linked Data
 
Greyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka LibraryGreyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka Library
 
Odp
OdpOdp
Odp
 
PrismTech Reflective Language for Communication Systems
PrismTech Reflective Language for Communication SystemsPrismTech Reflective Language for Communication Systems
PrismTech Reflective Language for Communication Systems
 
Scylla Summit 2017: SMF: The Fastest RPC in the West
Scylla Summit 2017: SMF: The Fastest RPC in the WestScylla Summit 2017: SMF: The Fastest RPC in the West
Scylla Summit 2017: SMF: The Fastest RPC in the West
 
Apache Spark Overview part2 (20161117)
Apache Spark Overview part2 (20161117)Apache Spark Overview part2 (20161117)
Apache Spark Overview part2 (20161117)
 
Open SQL & Internal Table
Open SQL & Internal TableOpen SQL & Internal Table
Open SQL & Internal Table
 

Plus de Redis Labs

Redis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redisRedis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redisRedis Labs
 
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020Redis Labs
 
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...Redis Labs
 
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020Redis Labs
 
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...Redis Labs
 
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of OracleRedis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of OracleRedis Labs
 
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020Redis Labs
 
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020Redis Labs
 
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...Redis Labs
 
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...Redis Labs
 
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...Redis Labs
 
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...Redis Labs
 
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...Redis Labs
 
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020Redis Labs
 
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020Redis Labs
 
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020Redis Labs
 
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020Redis Labs
 
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...Redis Labs
 
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...Redis Labs
 
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...Redis Labs
 

Plus de Redis Labs (20)

Redis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redisRedis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redis
 
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
 
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
 
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
 
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
 
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of OracleRedis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
 
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
 
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
 
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
 
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
 
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
 
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
 
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
 
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
 
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
 
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
 
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
 

Dernier

Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 

Dernier (20)

Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 

RedisDay London 2018 - Atom: Redis for Robotics

  • 1. Atom: Redis for Robotics Dan Pipe-Mazo, Elementary Robotics
  • 2. ELEMENTARY ROBOTICS NOV 15 Elementary Robotics: Who We Are We believe that there are two main items holding back the robotics industry: Cost & Ease of programming. We’re building low-cost, data-rich robots from the ground up with an emphasis on performance and ease of use.
  • 3. ELEMENTARY ROBOTICS NOV 15 Robotics Stack: Basics HARDWARE DRIVERS SOFTWARE Joints Motors Sensors Talk to all hardware 
 in low-level Programming languages/ kernel modules Proprietary communications protocols Implements high-level logic and algorithms for the system. 
 Calls driver APIs as necessary to get things done.
  • 4. ELEMENTARY ROBOTICS NOV 15 ABSTRACTION SCALABILITY LANGUAGE SUPPORT Standardize complex hardware and algorithms into simple paradigms Easy horizontal scaling for compute-heavy tasks Certain tasks are better suited to certain languages Software Stack: Objectives DEPENDENCIES Eliminate dependency issues INTROSPECTION Easily audit the system for debug/monitoring
  • 5. ELEMENTARY ROBOTICS NOV 15 Software Stack: Solution + API Create a specification, API, and set of libraries called atom prebuilt with all dependencies and shipped in a docker container. MICRO-SERVICES Create micro services called elements that use the atom libraries, in their preferred language, to implement higher-level APIs TECHNOLOGY Use redis streams for performant, flexible distributed data publishing and command/response paradigms.
  • 6. ELEMENTARY ROBOTICS NOV 15 Redis Streams: overview XADD s1 MAXLEN ~ X k1 v1 k2 v2 … ... stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2
  • 7. ELEMENTARY ROBOTICS NOV 15 Redis Streams: overview XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s2 ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB ... stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2
  • 8. ELEMENTARY ROBOTICS NOV 15 Redis Streams: overview XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s2 ... stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 XREAD BLOCK N STREAMS s1 $ XREAD BLOCK N STREAMS s1 ID Subscribe to all entries from one stream ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB
  • 9. ELEMENTARY ROBOTICS NOV 15 Redis Streams: overview XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s2 ... stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 XREAD BLOCK N STREAMS s1 $ XREAD BLOCK N STREAMS s1 ID Subscribe to all entries from one stream XREAD BLOCK N STREAMS s1 s2 ID1 ID2 Subscribe to all entries from multiple streams ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB
  • 10. ELEMENTARY ROBOTICS NOV 15 Redis Streams: overview XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s2 ... stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 XREAD BLOCK N STREAMS s1 $ XREAD BLOCK N STREAMS s1 ID Subscribe to all entries from one stream XREAD BLOCK N STREAMS s1 s2 ID1 ID2 Subscribe to all entries from multiple streams XREVRANGE s1 + - COUNT N Get the latest N entries from a stream ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB
  • 11. ELEMENTARY ROBOTICS NOV 15 Redis Streams: overview XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s2 ... stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 XREAD BLOCK N STREAMS s1 $ XREAD BLOCK N STREAMS s1 ID Subscribe to all entries from one stream XREAD BLOCK N STREAMS s1 s2 ID1 ID2 Subscribe to all entries from multiple streams XREVRANGE s1 + - COUNT N Get the latest N entries from a stream XRANGE s1 - + COUNT N Get the oldest N entries from a stream ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB
  • 12. ELEMENTARY ROBOTICS NOV 15 Atom Specification and Examples
  • 13. ELEMENTARY ROBOTICS NOV 15 Atom: Data Publishing PUBLISHER: element “foo”, streams s1 and s2 SUBSCRIBER: Options to read from the stream XADD data:foo:s1 MAXLEN ~ X k1 v1 k2 v2 … XADD data:foo:s2 MAXLEN ~ X k3 v3 k4 v4 … XREAD BLOCK T STREAMS data:foo:s1 data:foo:s2 idS1 idS2 XREVRANGE data:foo:s1 + - COUNT N XRANGE data:foo:s1 - + COUNT N
  • 14. ELEMENTARY ROBOTICS NOV 15 Atom: Data Publishing Example CAMERA USB camera element MAIN COMPUTE XADD frames elem:cam:frames REDIS
  • 15. ELEMENTARY ROBOTICS NOV 15 Atom: Data Publishing Example CAMERA USB camera element MAIN COMPUTE XADD frames elem:cam:frames REDIS video packaging element XREAD BLOCK N
  • 16. ELEMENTARY ROBOTICS NOV 15 Atom: Data Publishing Example CAMERA USB camera element MAIN COMPUTE XADD frames elem:cam:frames REDIS video packaging element ML classification element XREAD BLOCK N XREVRANGE + -
  • 17. ELEMENTARY ROBOTICS NOV 15 Atom: Data Publishing Example CAMERA USB camera element MAIN COMPUTE XADD frames elem:cam:frames REDIS video packaging element ML classification element ML retraining element XREAD BLOCK N XREVRANGE + - XRANGE last +
  • 18. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID elem:foo:rep
  • 19. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req XREAD BLOCK 0 STREAMS elem:bar:req lastEntryIDXADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z elem:foo:rep
  • 20. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) XREAD BLOCK 0 STREAMS elem:bar:req lastEntryIDXADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z elem:foo:rep
  • 21. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) XREAD BLOCK 0 STREAMS elem:bar:req lastEntryIDXADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID elem:foo:rep
  • 22. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID elem:foo:rep
  • 23. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z (entryID, {“elem”: bar, “id”: ID, “time”: T}) XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID elem:foo:rep
  • 24. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z (entryID, {“elem”: bar, “id”: ID, “time”: T}) XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID elem:foo:rep XREAD BLOCK T STREAMS elem:foo:rep lastEntryID
  • 25. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T XADD elem:foo:rep MAXLEN ~ X elem bar id ID resp R XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z (entryID, {“elem”: bar, “id”: ID, “time”: T}) XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID elem:foo:rep XREAD BLOCK T STREAMS elem:foo:rep lastEntryID
  • 26. ELEMENTARY ROBOTICS NOV 15 Atom: Sync or Async Req/Rep Requestor: “foo” Responder: “bar”REDIS elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T XADD elem:foo:rep MAXLEN ~ X elem bar id ID resp R XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z (entryID, {“elem”: bar, “id”: ID, “time”: T}) XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID elem:foo:rep (entryID, {“elem”: bar, “id”: ID, “resp”: R}) XREAD BLOCK T STREAMS elem:foo:rep lastEntryID
  • 27. ELEMENTARY ROBOTICS NOV 15 Atom: Req/Rep Example MAIN COMPUTE REDIS user element robot element elem:robot:req elem:user:rep Go to (x, y, z)
  • 28. ELEMENTARY ROBOTICS NOV 15 Atom: Req/Rep Example MAIN COMPUTE REDIS user element robot element elem:robot:req elem:user:rep Go to (x, y, z) ACK
  • 29. ELEMENTARY ROBOTICS NOV 15 Atom: Req/Rep Example COMMS MAIN COMPUTE REDIS MOTOR 1 MOTOR 2 MOTOR N ... user element robot element elem:robot:req elem:user:rep Go to (x, y, z) ACK
  • 30. ELEMENTARY ROBOTICS NOV 15 Atom: Req/Rep Example COMMS MAIN COMPUTE REDIS MOTOR 1 MOTOR 2 MOTOR N ... user element robot element elem:robot:req elem:user:rep Go to (x, y, z) ACK path planning element camera element
  • 31. ELEMENTARY ROBOTICS NOV 15 Atom: Req/Rep Example COMMS MAIN COMPUTE REDIS MOTOR 1 MOTOR 2 MOTOR N ... user element robot element elem:robot:req elem:user:rep Go to (x, y, z) ACK Done path planning element camera element
  • 32. ELEMENTARY ROBOTICS NOV 15 Atom: Scaling & Updates REDIS STREAM CONSUMER GROUPS XGROUP CREATE elem:bar:req consumers $ UPDATES (ASSUMING SAME API) Spin up the new instance, monitor performance, spin down the old instance. SCALING Just spin up another instance of the element on the same redis master. XREADGROUP consumers me BLOCK 0 COUNT 1 STREAMS elem:bar:req < XACK elem:bar:req consumers entryID
  • 33. ELEMENTARY ROBOTICS NOV 15 Atom: Scaling/Update Example MAIN COMPUTE REDISML classification element (copy 1) elem:class:req elem:user:rep user element Classify A, B, C, D A
  • 34. ELEMENTARY ROBOTICS NOV 15 Atom: Scaling/Update Example MAIN COMPUTE REDISML classification element (copy 1) ML classification element (copy 2) elem:class:req elem:user:rep user element Classify A, B, C, D A B
  • 35. ELEMENTARY ROBOTICS NOV 15 Atom: Scaling/Update Example MAIN COMPUTE REDISML classification element (copy 1) ML classification element (copy 2) elem:class:req elem:user:rep user element Classify A, B, C, D Result A Results Result B
  • 36. ELEMENTARY ROBOTICS NOV 15 Atom: Scaling/Update Example MAIN COMPUTE REDISML classification element (copy 1) ML classification element (copy 2) elem:class:req elem:user:rep user element Classify A, B, C, D C D
  • 37. ELEMENTARY ROBOTICS NOV 15 Atom: Scaling/Update Example MAIN COMPUTE REDISML classification element (copy 1) ML classification element (copy 2) elem:class:req elem:user:rep user element Classify A, B, C, D Result C Results Result D
  • 38. ELEMENTARY ROBOTICS NOV 15 Atom: Basic Discovery ELEMENT DISCOVERY DATA STREAM DISCOVERY SCAN cursor MATCH elem: SCAN cursor MATCH data: SCAN cursor MATCH data:foo COMMAND DISCOVERY In the works!
  • 39. ELEMENTARY ROBOTICS NOV 15 Atom: Serialization OVERALL COMMAND/ RESPONSE DATA JPEG/TIFF best for camera/PointCloud data, Protobuf pretty good for most other data.
 No single serialization protocol was best/optimal for all payloads/use cases. No Enforced Serialization Protobuf performed well and RPC service specification worked well for strongly typed command/response types.
  • 40. ELEMENTARY ROBOTICS NOV 15 Atom: API class Element(): __init__(self, name) __del__(self) # Commands
 command_add( self, name, handler, timeout=DEFAULT_TIMEOUT) command_loop( self) command_send( self, element, command, data, block=True) # Data entry_write( self, name, {“k1”: v1, “k2”:v2, … }, maxlen=DEFAULT_MAXLEN) entry_read_n( self, element, stream, n) entry_read_loop( self, {“s1”: h1, “s2”: h2, …}, n_loops=None) # Discovery get_all_elements( self) get_all_streams( self, element_name=None)
  • 41. ELEMENTARY ROBOTICS NOV 15 Atom: Docker NUCLEUS DOCKER CONTAINER ATOM DOCKER CONTAINER ELEMENT DOCKER CONTAINERS User-developed elements FROM elementaryrobotics/atom FROM redis/alpine Contains custom redis conf + atom CLI Latest tested atom libraries All dependencies, protobuf, etc. MOLECULE DOCKER COMPOSE FILE Launch nucleus and all elements Set up shared tmpfs between containers & unix socket for redis

  • 42. ELEMENTARY ROBOTICS NOV 15 Atom: User Development Flow 1 Copy template from atom github repo. 2 Implement element in language of choosing 3 Build element with 4 Launch element, nucleus and all dependencies with docker-compose up -d docker-compose build 5 Done!
  • 43. ELEMENTARY ROBOTICS NOV 15 Summary ATOM SET OF TOOLS OUR WEBSITE elementaryrobotics.com. Please visit and sign up for more info on atom. Allow for powerful yet simple new ways of programming robotic systems. WE’RE HIRING! REDIS STREAMS We're working on atom to bring the power of redis streams to robotics. We build robots in LA! Send me an email directly at dan@elementaryrobotics.com

  • 44. Thank you! Please check out our website at elementaryrobotics.com and sign up for more info about atom!