Intridea ajn-rttos OA NYC Summit
-
Upload
open-analytics -
Category
Documents
-
view
3.574 -
download
2
description
Transcript of Intridea ajn-rttos OA NYC Summit
Anthony NyströmFellow, Managing Director of Engineering
Tuesday, June 18, 13
Tuesday, June 18, 13
What is Intridea?
Tuesday, June 18, 13
What is Intridea?We design and develop apps: Web, Mobile and Data
Tuesday, June 18, 13
What is Intridea?We design and develop apps: Web, Mobile and Data
Founded inWashington, DC
Tuesday, June 18, 13
What is Intridea?We work with cool clients – really!
We design and develop apps: Web, Mobile and Data
Founded inWashington, DC
Tuesday, June 18, 13
What is Intridea?
40+ Intrideans:Designers/Developers/Scientists+ Smart biz folks
We work with cool clients – really!
We design and develop apps: Web, Mobile and Data
Founded inWashington, DC
Tuesday, June 18, 13
What is Intridea?
40+ Intrideans:Designers/Developers/Scientists+ Smart biz folks
We work with cool clients – really!
We work from anywhere!
We design and develop apps: Web, Mobile and Data
Founded inWashington, DC
Tuesday, June 18, 13
What is Intridea?
40+ Intrideans:Designers/Developers/Scientists+ Smart biz folks
We work with cool clients – really!
We work from anywhere!
We design and develop apps: Web, Mobile and Data
Founded inWashington, DC
We are growing
Tuesday, June 18, 13
What is Intridea?
40+ Intrideans:Designers/Developers/Scientists+ Smart biz folks
We work with cool clients – really!
We work from anywhere!
We hire the best and the smartest
We design and develop apps: Web, Mobile and Data
Founded inWashington, DC
We are growing
Tuesday, June 18, 13
Anthony NyströmFellow, Managing Director of Engineering
Tuesday, June 18, 13
The guy on stage
Intridean:
Anthony NyströmFellow, Managing Director of Engineering
Tuesday, June 18, 13
Tuesday, June 18, 13
Data Science in the NOW!It takes an army of TOOLS
Tuesday, June 18, 13
Tuesday, June 18, 13
An Army of Tools you say?
Tuesday, June 18, 13
An Army of Tools you say?
• I am going to talk about what NOW means in Data Science
• Databases, Streaming Engines, Query Engines and Interfaces
• We are going to look at many of them and single out a few
• Each has a respected and in some cases competing set of features
Tuesday, June 18, 13
Tuesday, June 18, 13
Why is NOW in data Special?
Tuesday, June 18, 13
Why is NOW in data Special?
Actionable Intelligence & Knowledge
Tuesday, June 18, 13
Why is NOW in data Special?
Actionable Intelligence & Knowledge
NOW has innate context
Tuesday, June 18, 13
Why is NOW in data Special?
Actionable Intelligence & Knowledge
NOW has innate context
TIME is THE natural facet for our minds & life!
Tuesday, June 18, 13
Tuesday, June 18, 13
Why is NOW in data Special?
Tuesday, June 18, 13
Why is NOW in data Special?Trends | Patterns | Extraction
Tuesday, June 18, 13
Why is NOW in data Special?Trends | Patterns | Extraction
Data Centric Trends
Tuesday, June 18, 13
Why is NOW in data Special?Trends | Patterns | Extraction
Data Centric Trends
Pattern Extraction (ML/NLP)
Tuesday, June 18, 13
Why is NOW in data Special?Trends | Patterns | Extraction
Data Centric Trends
Pattern Extraction (ML/NLP)
Signature Extraction (Binary, Encoded)
Tuesday, June 18, 13
Why is NOW in data Special?Trends | Patterns | Extraction
Data Centric Trends
Pattern Extraction (ML/NLP)
Signature Extraction (Binary, Encoded)
Not user input data like Google, Yahoo etc.
Tuesday, June 18, 13
Why is NOW in data Special?Trends | Patterns | Extraction
Data Centric Trends
Pattern Extraction (ML/NLP)
Signature Extraction (Binary, Encoded)
Not user input data like Google, Yahoo etc.
“I am looking for data that conforms to a learned or known pattern”
Tuesday, June 18, 13
Why is NOW in data Special?Trends | Patterns | Extraction
Data Centric Trends
Pattern Extraction (ML/NLP)
Signature Extraction (Binary, Encoded)
Not user input data like Google, Yahoo etc.
“I am looking for data that conforms to a learned or known pattern”
“I am looking for data that matches a predefined signature”
Tuesday, June 18, 13
Tuesday, June 18, 13
Why is NOW in data Special?
Tuesday, June 18, 13
Why is NOW in data Special?Routing | Transformation | Computation
Tuesday, June 18, 13
Why is NOW in data Special?Routing | Transformation | Computation
Intelligent Routing
Tuesday, June 18, 13
Why is NOW in data Special?Routing | Transformation | Computation
Transformation & Computation
Intelligent Routing
Tuesday, June 18, 13
Why is NOW in data Special?Routing | Transformation | Computation
Transformation & Computation
Intelligent Routing“I need to replicate/fork that of criteria x portions of this data
stream”
Tuesday, June 18, 13
Why is NOW in data Special?Routing | Transformation | Computation
Transformation & Computation
Intelligent Routing“I need to replicate/fork that of criteria x portions of this data
stream”
“I need to transform certain fields” or “I need to compute a some value on certain fields”
Tuesday, June 18, 13
Tuesday, June 18, 13
Why is NOW in data Special?
Tuesday, June 18, 13
Why is NOW in data Special?Algorithmic Speciality
Tuesday, June 18, 13
Why is NOW in data Special?
Concepts
Algorithmic Speciality
Tuesday, June 18, 13
Why is NOW in data Special?
Regression
Concepts
Algorithmic Speciality
Tuesday, June 18, 13
Why is NOW in data Special?
Relationships
Regression
Concepts
Algorithmic Speciality
Tuesday, June 18, 13
Why is NOW in data Special?
Relationships
Regression
Concepts
Algorithmic Speciality
What does a value represent or infer (NLP/ML/k-NN)
Tuesday, June 18, 13
Why is NOW in data Special?
Relationships
Regression
Concepts
Algorithmic Speciality
What does a value represent or infer (NLP/ML/k-NN)
How is a value related to another value or How can we predict such relations
Tuesday, June 18, 13
Why is NOW in data Special?
Relationships
Regression
Concepts
Algorithmic Speciality
What does a value represent or infer (NLP/ML/k-NN)
How is a value related to another value or How can we predict such relations
Topological, Ontological, Forest (Evolutionary/Random) (NLP)
Tuesday, June 18, 13
Tuesday, June 18, 13
Tuesday, June 18, 13
Tuesday, June 18, 13
Point of Sale System • Terminal• Admin• Tablet
Tuesday, June 18, 13
Tuesday, June 18, 13
Merck• RT Persona• RT Data• Browser
Tuesday, June 18, 13
Tuesday, June 18, 13
Where is NOW in data?
Tuesday, June 18, 13
Where is NOW in data?
Data Creation Time | Data Consumption Time
Tuesday, June 18, 13
Tuesday, June 18, 13
Latency
Tuesday, June 18, 13
Latency
Data Creation Time | Data Consumption Time
Tuesday, June 18, 13
Latency
Standard - NOPE!
Data Creation Time | Data Consumption Time
Tuesday, June 18, 13
Latency
Standard - NOPE!
Depends upon the Medium - YEP!
Data Creation Time | Data Consumption Time
Tuesday, June 18, 13
Latency
Standard - NOPE!
Depends upon the Consumer - YEP!
Depends upon the Medium - YEP!
Data Creation Time | Data Consumption Time
Tuesday, June 18, 13
Latency
Standard - NOPE!
Depends upon the Consumer - YEP!
Depends upon the Medium - YEP!
Depends upon Technology - YEP!
Data Creation Time | Data Consumption Time
Tuesday, June 18, 13
Tuesday, June 18, 13
NOW and Latency
Tuesday, June 18, 13
NOW and Latency
Real-Time
Tuesday, June 18, 13
NOW and Latency
Real-Time
Near Real-Time
Tuesday, June 18, 13
NOW and Latency
Real-Time
Some-Time
Near Real-Time
Tuesday, June 18, 13
NOW and Latency
Real-Time
Some-Time
Data that is consumed immediately after creation
Near Real-Time
Tuesday, June 18, 13
NOW and Latency
Real-Time
Some-Time
Data is consumed within seconds/minutes
Data that is consumed immediately after creation
Near Real-Time
Tuesday, June 18, 13
NOW and Latency
Real-Time
Some-TimeData is consumed when requested & is NOT RT nor NRT
Data is consumed within seconds/minutes
Data that is consumed immediately after creation
Near Real-Time
Tuesday, June 18, 13
Tuesday, June 18, 13
Physiological Latency
Tuesday, June 18, 13
Perception:
Research suggests that the human retina transmits data to the brain at the rate of 10 million bits per second, which is close to that of 10 base Ethernet connection!
We can perceive changes in reality at ~ 13-15 frames per second (fps, or Hz), Our perception of reality fully refreshes itself ~ once every 77
Physiological Latency
Tuesday, June 18, 13
Perception:
Research suggests that the human retina transmits data to the brain at the rate of 10 million bits per second, which is close to that of 10 base Ethernet connection!
We can perceive changes in reality at ~ 13-15 frames per second (fps, or Hz), Our perception of reality fully refreshes itself ~ once every 77
Stock Exchange ~ 5-100 milliseconds (ms)
Physiological Latency
Tuesday, June 18, 13
Web Sites ~ 50-400 milliseconds (ms)
Perception:
Research suggests that the human retina transmits data to the brain at the rate of 10 million bits per second, which is close to that of 10 base Ethernet connection!
We can perceive changes in reality at ~ 13-15 frames per second (fps, or Hz), Our perception of reality fully refreshes itself ~ once every 77
Stock Exchange ~ 5-100 milliseconds (ms)
Physiological Latency
Tuesday, June 18, 13
Web Sites ~ 50-400 milliseconds (ms)
Perception:
Research suggests that the human retina transmits data to the brain at the rate of 10 million bits per second, which is close to that of 10 base Ethernet connection!
We can perceive changes in reality at ~ 13-15 frames per second (fps, or Hz), Our perception of reality fully refreshes itself ~ once every 77
Games (FPS) ~ 10-150 milliseconds (ms)
Stock Exchange ~ 5-100 milliseconds (ms)
Physiological Latency
Tuesday, June 18, 13
Web Sites ~ 50-400 milliseconds (ms)
Perception:
Research suggests that the human retina transmits data to the brain at the rate of 10 million bits per second, which is close to that of 10 base Ethernet connection!
We can perceive changes in reality at ~ 13-15 frames per second (fps, or Hz), Our perception of reality fully refreshes itself ~ once every 77
Games (FPS) ~ 10-150 milliseconds (ms)
Social/Games ~ 200 ms -1 second
Stock Exchange ~ 5-100 milliseconds (ms)
Physiological Latency
Tuesday, June 18, 13
Tuesday, June 18, 13
Real-Time (DB’s, Index’s, FS’s)
Tuesday, June 18, 13
Real-Time (DB’s, Index’s, FS’s)No particular order
Tuesday, June 18, 13
Real-Time (DB’s, Index’s, FS’s)
• MySQL
No particular order
Tuesday, June 18, 13
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• SQL Server
No particular order
Tuesday, June 18, 13
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• SQL Server
No particular order
Tuesday, June 18, 13
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)• Solr
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)• Solr
• HDFS
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)• Solr
• HDFS
• HBase
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)• Solr
• HDFS
• Oracle
• HBase
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)• Solr
• HDFS
• Oracle
• ERTFS
• HBase
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)• Solr
• Redis
• HDFS
• Oracle
• ERTFS
• HBase
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)• Solr
• Redis
• HDFS
• Oracle
• ERTFS
• HBase
• Cassandra
No particular order
Tuesday, June 18, 13
• Mongo
Real-Time (DB’s, Index’s, FS’s)
• MySQL
• PostgreSQL
• Neo4j (Graph)
• SQL Server
• Elastic Search (Lucene)• Solr
• Redis
• HDFS
• Oracle
• ERTFS
• HBase
• Cassandra• Riak
No particular order
Tuesday, June 18, 13
Tuesday, June 18, 13
HBase
Tuesday, June 18, 13
HBase
Regions and HDFS
Tuesday, June 18, 13
HBase
Regions and HDFS
Scaling
Tuesday, June 18, 13
HBase
Regions and HDFS
Hadoop
Scaling
Tuesday, June 18, 13
HBase
Regions and HDFS“Regions” Data files for regions are stored in HDFS and replicated to multiple nodes in the cluster. As well, allocation in to the cluster is
rather automatic
Hadoop
Scaling
Tuesday, June 18, 13
HBase
Regions and HDFS“Regions” Data files for regions are stored in HDFS and replicated to multiple nodes in the cluster. As well, allocation in to the cluster is
rather automatic
Hadoop
ScalingFault Tolerance
Commodity Machines
Tuesday, June 18, 13
HBase
Regions and HDFS
Runs on top of HadoopMapReduce Integration
“Regions” Data files for regions are stored in HDFS and replicated to multiple nodes in the cluster. As well, allocation in to the cluster is
rather automatic
Hadoop
ScalingFault Tolerance
Commodity Machines
Tuesday, June 18, 13
Tuesday, June 18, 13
Cassandra
Tuesday, June 18, 13
Cassandra
Always Writable
Tuesday, June 18, 13
Cassandra
Always Writable
Scaling
Tuesday, June 18, 13
Cassandra
Always Writable
More...
Scaling
Tuesday, June 18, 13
Cassandra
Always WritableEven when internally the write fails. However, the data will eventually
become consistent (Tunable)
More...
Scaling
Tuesday, June 18, 13
Cassandra
Always WritableEven when internally the write fails. However, the data will eventually
become consistent (Tunable)
More...
ScalingCan span data centers
Peer-to-Peer communication between nodes (Gossip)
Tuesday, June 18, 13
Cassandra
Always Writable
Supports MapReduceSupports Range Queries
Even when internally the write fails. However, the data will eventually become consistent (Tunable)
More...
ScalingCan span data centers
Peer-to-Peer communication between nodes (Gossip)
Tuesday, June 18, 13
Tuesday, June 18, 13
Redis
Tuesday, June 18, 13
Redis
Transactions
Tuesday, June 18, 13
Redis
Transactions
An evolutionary Key-Value Store
Tuesday, June 18, 13
Redis
Transactions
Pub-Sub
An evolutionary Key-Value Store
Tuesday, June 18, 13
Redis
TransactionsAtomic operations (MULTI/EXEC/Discard) Queue your operations and
EXEC/Commit as transaction. Allows for Roll-back support.
Pub-Sub
An evolutionary Key-Value Store
Tuesday, June 18, 13
Redis
TransactionsAtomic operations (MULTI/EXEC/Discard) Queue your operations and
EXEC/Commit as transaction. Allows for Roll-back support.
Pub-Sub
An evolutionary Key-Value StoreSupports complex types that are closely related to fundamental data
structures. No need for abstraction layer.
Tuesday, June 18, 13
Redis
Transactions
Publish - Push messages to a channelSubscribe - Listen to a channel
Atomic operations (MULTI/EXEC/Discard) Queue your operations and EXEC/Commit as transaction. Allows for Roll-back support.
Pub-Sub
An evolutionary Key-Value StoreSupports complex types that are closely related to fundamental data
structures. No need for abstraction layer.
Tuesday, June 18, 13
Tuesday, June 18, 13
Near Real-Time & Real-Time
Tuesday, June 18, 13
Near Real-Time & Real-TimeQueries and Streams
Tuesday, June 18, 13
Near Real-Time & Real-Time
• Storm
Queries and Streams
Tuesday, June 18, 13
Near Real-Time & Real-Time
• Storm
• Kafka
Queries and Streams
Tuesday, June 18, 13
Near Real-Time & Real-Time
• Storm
• Drill/Dremel
• Kafka
Queries and Streams
Tuesday, June 18, 13
Near Real-Time & Real-Time
• Storm
• Drill/Dremel
• Hadoop
• Kafka
Queries and Streams
Tuesday, June 18, 13
• MapReduce
Near Real-Time & Real-Time
• Storm
• Drill/Dremel
• Hadoop
• Kafka
Queries and Streams
Tuesday, June 18, 13
• MapReduce
Near Real-Time & Real-Time
• Storm
• Drill/Dremel
• Hadoop
• MapReduce v2 (YARN)
• Kafka
Queries and Streams
Tuesday, June 18, 13
• MapReduce
Near Real-Time & Real-Time
• Storm
• Drill/Dremel
• Hadoop
• MapReduce v2 (YARN)
• Pig • Kafka
Queries and Streams
Tuesday, June 18, 13
• MapReduce
Near Real-Time & Real-Time
• Storm
• Drill/Dremel
• Hadoop
• MapReduce v2 (YARN)
• Pig
• Hive
• Kafka
Queries and Streams
Tuesday, June 18, 13
• MapReduce
Near Real-Time & Real-Time
• Storm
• Drill/Dremel
• Hadoop • Cascalog
• MapReduce v2 (YARN)
• Pig
• Hive
• Kafka
Queries and Streams
Tuesday, June 18, 13
• MapReduce
Near Real-Time & Real-Time
• Storm
• Drill/Dremel
• Hadoop • Cascalog
• MapReduce v2 (YARN)
• Pig
• Hive
• Kafka
• DataTurbine
Queries and Streams
Tuesday, June 18, 13
Tuesday, June 18, 13
MapReduce/Hadoop
Tuesday, June 18, 13
MapReduce/Hadoop
Scale
Tuesday, June 18, 13
MapReduce/Hadoop
Scale
Development
Tuesday, June 18, 13
MapReduce/Hadoop
Scale
Batch
Development
Tuesday, June 18, 13
MapReduce/Hadoop
Scale100’s to 1000’s of server nodes
Extreme and cheapSimple programming model
Batch
Development
Tuesday, June 18, 13
MapReduce/Hadoop
Scale100’s to 1000’s of server nodes
Extreme and cheapSimple programming model
Batch
DevelopmentJava, Python, Grep & Others...
Tuesday, June 18, 13
MapReduce/Hadoop
Scale
Complex Multi-Step Processing
100’s to 1000’s of server nodesExtreme and cheap
Simple programming model
Batch
DevelopmentJava, Python, Grep & Others...
Tuesday, June 18, 13
Tuesday, June 18, 13
Storm
Tuesday, June 18, 13
Storm
FAST
Tuesday, June 18, 13
Storm
FAST
Integration
Tuesday, June 18, 13
Storm
FAST
Assurance
Integration
Tuesday, June 18, 13
Storm
FASTOver a million tuples processed per second per node
Assurance
Integration
Tuesday, June 18, 13
Storm
FASTOver a million tuples processed per second per node
Assurance
IntegrationIntegrates with any queueing system and any database system
Handles the parallelization, partitioning, and retrying on failures when necessary
Tuesday, June 18, 13
Storm
FAST
Scalable, Fault-Tolerant, Guarantees your data will be processed!
Over a million tuples processed per second per node
Assurance
IntegrationIntegrates with any queueing system and any database system
Handles the parallelization, partitioning, and retrying on failures when necessary
Tuesday, June 18, 13
Tuesday, June 18, 13
CQL/StreamQL/SparQL/QL-RTDB/
Tuesday, June 18, 13
CQL/StreamQL/SparQL/QL-RTDB/
Languages
Tuesday, June 18, 13
CQL/StreamQL/SparQL/QL-RTDB/
Languages
Scalable
Tuesday, June 18, 13
CQL/StreamQL/SparQL/QL-RTDB/
Languages
SQL Idioms
Scalable
Tuesday, June 18, 13
CQL/StreamQL/SparQL/QL-RTDB/
LanguagesHuman Readable
SQL Idioms
Scalable
Tuesday, June 18, 13
CQL/StreamQL/SparQL/QL-RTDB/
LanguagesHuman Readable
SQL Idioms
ScalableSimultaneous n Queries upon both stream data and static
Tuesday, June 18, 13
CQL/StreamQL/SparQL/QL-RTDB/
Languages
All support to a large degree what you would expect from SQL
Human Readable
SQL Idioms
ScalableSimultaneous n Queries upon both stream data and static
Tuesday, June 18, 13
Tuesday, June 18, 13
PIG
Tuesday, June 18, 13
PIG
Language
Tuesday, June 18, 13
PIG
Language
Parallelization
Tuesday, June 18, 13
PIG
Language
Underneath
Parallelization
Tuesday, June 18, 13
PIG
LanguageHigh Level and easy to understand (Pig Latin)
Underneath
Parallelization
Tuesday, June 18, 13
PIG
LanguageHigh Level and easy to understand (Pig Latin)
Underneath
ParallelizationIt is trivial to achieve parallel execution of simple, "embarrassingly
parallel" data analysis tasks
Tuesday, June 18, 13
PIG
Language
Essentially a MapReduce sequence compiler
High Level and easy to understand (Pig Latin)
Underneath
ParallelizationIt is trivial to achieve parallel execution of simple, "embarrassingly
parallel" data analysis tasks
Tuesday, June 18, 13
Tuesday, June 18, 13
PIG
Tuesday, June 18, 13
PIGExample Pig Script
Tuesday, June 18, 13
PIGExample Pig Script
Tuesday, June 18, 13
Tuesday, June 18, 13
PIG
Tuesday, June 18, 13
PIGThat same example using MR Java code
Tuesday, June 18, 13
Tuesday, June 18, 13
The perfect Army!
Tuesday, June 18, 13
The perfect Army!
In Memory
Tuesday, June 18, 13
The perfect Army!
In Memory
Identify and Plan
Tuesday, June 18, 13
The perfect Army!
In Memory
Consumer
Identify and Plan
Tuesday, June 18, 13
The perfect Army!
In MemoryKeep as much as you can IN MEMORY! Think Redis...
Consumer
Identify and Plan
Tuesday, June 18, 13
The perfect Army!
In MemoryKeep as much as you can IN MEMORY! Think Redis...
Consumer
Identify and PlanWhat data can be batch processed and what can’t! Think
Hadoop and Storm (for stream) and HBase (for adhoc)
Tuesday, June 18, 13
The perfect Army!
In Memory
Who is the data consumer? Person or Process? Think Pig or xQL’s for both!
Keep as much as you can IN MEMORY! Think Redis...
Consumer
Identify and PlanWhat data can be batch processed and what can’t! Think
Hadoop and Storm (for stream) and HBase (for adhoc)
Tuesday, June 18, 13
www.intridea.com
Anthony NyströmFellow, Managing Director of Engineering
[email protected]@AnthonyNystrom
Thank You Gracias Merci Danke
Tuesday, June 18, 13