SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
@doanduyhai
KillrChat Presentation
DuyHai DOAN, Technical Advocate
@doanduyhai
KillrChat presentation!
2
What is KillrChat ?
•  scalable messaging app

Why KillrChat ?
•  show real life de-normalization
•  DIY exercise
•  provide real application for attendees
•  highlight Cassandra eco-system
@doanduyhai
Technology stack!
3
AngularJS
UI Bootstrap
SockJS
Spring REST
Spring Security
Spring Messaging
Cassandra
Achilles
Object Mapper
@doanduyhai
Architecture!
4
Tomcat
Spring
C*
HTTP Rest
Spring {Boot,Security,
Rest, Messaging}
Cassandra,
Achilles
In-memory broker
Embedded/local
Cassandra
Single node
AngularJS,
UI Bootstrap,
SockJS
@doanduyhai
Architecture!
5
Tomcat
Spring …
Broker (RabbitMQ, ZeroMQ, Kafka…)
Tomcat
Spring
Tomcat
Spring
Scaling out
@doanduyhai
Front end layout!
6
@doanduyhai
Getting started!
7
Clone the Git repository


git clone https://github.com/doanduyhai/killrchat.git
Go into the ‘killrchat’ folder and launch tests

cd killrchat
mvn clean test
Exercise 1!
User account management!
@doanduyhai
Scalability!
9
n1
n2
n3
n4
n5
n6
n7
n8
A
B
C
D
E
F
G
H
jdoe
oscar
alice
hsue
bob
Scaling by login!
@doanduyhai
Data model!
10

CREATE TABLE killrchat.users(

 
login text,

 
pass text, //password is not allowed because reserved word

 
lastname text,

 
firstname text,

 
bio text,

 
email text,

 
chat_rooms set<text>, 

PRIMARY KEY(login));
@doanduyhai
User’s chat rooms!
11
@doanduyhai
User’s chat rooms data model!
12
How to store chat rooms for an user ?!

CREATE TABLE killrchat.user_rooms(

 
login text,

 
room_name text, 

PRIMARY KEY((login), room_name));
•  pros: can store huge room count per user (106)
•  cons: separated table, needs 1 extra SELECT!
@doanduyhai
User’s chat rooms data model!
13
Best choice!
•  1 SELECT fetches all data for a given user
•  usually, 1 user is not in more that 1000 rooms at a time
•  stores only room name

CREATE TABLE killrchat.users(

 
login text,

 
…

 
chat_rooms set<text>, //list of chat rooms for this user

PRIMARY KEY(login));
@doanduyhai
Lightweight Transaction!
14
Avoid creating the same login by 2 different users ?
☞ use Lightweight Transaction!

INSERT INTO killrchat.users(room_name, …)

VALUES (‘jdoe’, …) IF NOT EXISTS ;
Expensive operation!
☞ do you create a new account every day ?!
Demo
Exercise 2!
Chat room management!
@doanduyhai
Scalability!
17
n1
n2
n3
n4
n5
n6
n7
n8
A
B
C
D
E
F
G
H
games
scala
java
politics
cassandra
Scaling by room name!
@doanduyhai
Data model!
18

CREATE TABLE killrchat.chat_rooms(

 
room_name text,

 
creation_date timestamp,

 
banner text,

 
creator text, 
 
 
 
// de-normalization

 
creator_login text,

 
participants set<text>, 
// de-normalization

PRIMARY KEY(room_name));
@doanduyhai
Room details!
19
@doanduyhai
Room participants!
20
@doanduyhai
De-normalization!
21

CREATE TABLE killrchat.chat_rooms(

 
room_name text,

 
…

 
creator text, 
 
 
 
// JSON blob {login: …, firstname: …, lastname: …}

 
…

 
participants set<text>, 
// JSON blob {login: …, firstname: …, lastname: …} 

PRIMARY KEY(room_name));
@doanduyhai
Lightweight Transaction!
22
Avoid creating the same room by 2 different users ?
☞ use Lightweight Transaction!

INSERT INTO killrchat.chat_rooms(room_name, …)

VALUES (‘games’, …) IF NOT EXISTS ;
Demo
Exercise 3!
Participants management!
Room deletion!
@doanduyhai
Participant joining!
25
Adding new participant!

UPDATE killrchat.chat_rooms SET participants = participants + {…} 


WHERE room_name = ‘games’;
❓
What if the creator deletes the room at the same time ?
@doanduyhai
Concurrent delete/update!
26
UPDATE chat_rooms SET
participants = 
participants + {login: ‘jdoe’, …}
WHERE room_name = ‘games’;
DELETE FROM chat_rooms
WHERE room_name= ‘games’;
result games
participants creator banner ...
{login: ‘jdoe’, …} ∅ ∅ ∅
@doanduyhai
Participant joining!
27
Solution
☞ use Lightweight Transaction!

UPDATE killrchat.chat_rooms SET participants = participants + {…} 


WHERE room_name = ‘games’ IF EXISTS;
@doanduyhai
Concurrent delete/update!
28
UPDATE chat_rooms SET
participants = 
participants + {login: ‘jdoe’, …}
WHERE room_name = ‘games’
IF EXISTS;
DELETE FROM chat_rooms
WHERE room_name= ‘games’
IF creator_login = ‘jdoe’;
OK
@doanduyhai
Concurrent delete/update!
29
UPDATE chat_rooms SET
participants = 
participants + {login: ‘jdoe’, …}
WHERE room_name = ‘games’
IF EXISTS;
DELETE FROM chat_rooms
WHERE room_name= ‘games’
IF creator_login = ‘jdoe’;
Room deleted
@doanduyhai
Participant leaving!
30
Removing participant (no read-before-write)!

UPDATE killrchat.chat_rooms SET participants = participants - {…} 


WHERE room_name = ‘games’; ❓
What if the creator deletes the room at the same time ?
•  we’ll create a tombstone
•  tombstone will be garbage-collected by compaction !
@doanduyhai
Concurrent delete/update!
31
UPDATE chat_rooms SET
participants = 
participants - {login: ‘jdoe’, …}
WHERE room_name = ‘games’;
DELETE FROM chat_rooms
WHERE room_name= ‘games’;
result games
participants creator banner ...
∅ ∅ ∅ ∅
@doanduyhai
Deleting room!
32
What if participant leaving at the same time ?
•  not a problem, tombstone will be garbage
What if participant joining at the same time ?
☞ use Lightweight Transaction!

Only room creator can delete room, no one else!
☞ use Lightweight Transaction
!
@doanduyhai
Deleting room!
33

DELETE killrchat.chat_rooms 

WHERE room_name = ‘games’

IF creator_login = <current_user_login>;
Solution
Advantages
•  current user login coming from Security context, no cheating !
•  slow but how often do you delete rooms ?
Demo
Exercise 4!
Chat messages management!
@doanduyhai
Scalability!
36
n1
n2
n3
n4
n5
n6
n7
n8
A
B
C
D
E
F
G
H
Scaling messages by room name!
games
message1
 …
 messageN
…
politics
message1
 …
 messageN
…
java
message1
 …
 messageN
…
cassandra
message1
 …
 messageN
…
scala
message1
 …
 messageN
…
@doanduyhai
Data model!
37

CREATE TABLE killrchat.chat_room_messages(

 
room_name text,

 
message_id timeuuid,

 
content text,

 
author text, 
 
 
// JSON blob {login: …, firstname: …, lastname: …}

 
system_message boolean,

 
PRIMARY KEY((room_name), message_id)

) WITH CLUSTERING ORDER BY (message_id DESC);
@doanduyhai
Data model!
38
Clustering column message_id order by DESC
•  latest messages first
•  leverage the new row cache in Cassandra 2.1
Improvements
•  current data model limits messages count to ≈ 500 ⨉ 106 
•  bucketing by day is the right design

PRIMARY KEY((room_name, day), message_id) //day format yyyyMMdd
Demo
Q & R
! "!
Thank You
@doanduyhai
duy_hai.doan@datastax.com
https://academy.datastax.com/

Contenu connexe

En vedette

Cassandra and Spark, closing the gap between no sql and analytics codemotio...
Cassandra and Spark, closing the gap between no sql and analytics   codemotio...Cassandra and Spark, closing the gap between no sql and analytics   codemotio...
Cassandra and Spark, closing the gap between no sql and analytics codemotio...
Duyhai Doan
 

En vedette (20)

Cassandra introduction mars jug
Cassandra introduction mars jugCassandra introduction mars jug
Cassandra introduction mars jug
 
Fast track to getting started with DSE Max @ ING
Fast track to getting started with DSE Max @ INGFast track to getting started with DSE Max @ ING
Fast track to getting started with DSE Max @ ING
 
Introduction to KillrChat
Introduction to KillrChatIntroduction to KillrChat
Introduction to KillrChat
 
Sasi, cassandra on the full text search ride At Voxxed Day Belgrade 2016
Sasi, cassandra on the full text search ride At  Voxxed Day Belgrade 2016Sasi, cassandra on the full text search ride At  Voxxed Day Belgrade 2016
Sasi, cassandra on the full text search ride At Voxxed Day Belgrade 2016
 
Cassandra and Spark, closing the gap between no sql and analytics codemotio...
Cassandra and Spark, closing the gap between no sql and analytics   codemotio...Cassandra and Spark, closing the gap between no sql and analytics   codemotio...
Cassandra and Spark, closing the gap between no sql and analytics codemotio...
 
Datastax day 2016 introduction to apache cassandra
Datastax day 2016   introduction to apache cassandraDatastax day 2016   introduction to apache cassandra
Datastax day 2016 introduction to apache cassandra
 
Spark cassandra integration 2016
Spark cassandra integration 2016Spark cassandra integration 2016
Spark cassandra integration 2016
 
Cassandra introduction at FinishJUG
Cassandra introduction at FinishJUGCassandra introduction at FinishJUG
Cassandra introduction at FinishJUG
 
Spark cassandra integration, theory and practice
Spark cassandra integration, theory and practiceSpark cassandra integration, theory and practice
Spark cassandra integration, theory and practice
 
Cassandra nice use cases and worst anti patterns no sql-matters barcelona
Cassandra nice use cases and worst anti patterns no sql-matters barcelonaCassandra nice use cases and worst anti patterns no sql-matters barcelona
Cassandra nice use cases and worst anti patterns no sql-matters barcelona
 
Libon cassandra summiteu2014
Libon cassandra summiteu2014Libon cassandra summiteu2014
Libon cassandra summiteu2014
 
Data stax academy
Data stax academyData stax academy
Data stax academy
 
Cassandra introduction 2016
Cassandra introduction 2016Cassandra introduction 2016
Cassandra introduction 2016
 
Cassandra 3 new features @ Geecon Krakow 2016
Cassandra 3 new features  @ Geecon Krakow 2016Cassandra 3 new features  @ Geecon Krakow 2016
Cassandra 3 new features @ Geecon Krakow 2016
 
Real time data processing with spark & cassandra @ NoSQLMatters 2015 Paris
Real time data processing with spark & cassandra @ NoSQLMatters 2015 ParisReal time data processing with spark & cassandra @ NoSQLMatters 2015 Paris
Real time data processing with spark & cassandra @ NoSQLMatters 2015 Paris
 
Apache zeppelin the missing component for the big data ecosystem
Apache zeppelin the missing component for the big data ecosystemApache zeppelin the missing component for the big data ecosystem
Apache zeppelin the missing component for the big data ecosystem
 
Datastax enterprise presentation
Datastax enterprise presentationDatastax enterprise presentation
Datastax enterprise presentation
 
Cassandra for the ops dos and donts
Cassandra for the ops   dos and dontsCassandra for the ops   dos and donts
Cassandra for the ops dos and donts
 
Sasi, cassandra on full text search ride
Sasi, cassandra on full text search rideSasi, cassandra on full text search ride
Sasi, cassandra on full text search ride
 
From rdbms to cassandra without a hitch
From rdbms to cassandra without a hitchFrom rdbms to cassandra without a hitch
From rdbms to cassandra without a hitch
 

Similaire à KillrChat presentation

JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
Marcel Bruch
 
Pylons + Tokyo Cabinet
Pylons + Tokyo CabinetPylons + Tokyo Cabinet
Pylons + Tokyo Cabinet
Ben Cheng
 
Github github-github
Github github-githubGithub github-github
Github github-github
fusion2011
 

Similaire à KillrChat presentation (20)

DOAN DuyHai – Cassandra: real world best use-cases and worst anti-patterns - ...
DOAN DuyHai – Cassandra: real world best use-cases and worst anti-patterns - ...DOAN DuyHai – Cassandra: real world best use-cases and worst anti-patterns - ...
DOAN DuyHai – Cassandra: real world best use-cases and worst anti-patterns - ...
 
Cassandra nice use cases and worst anti patterns
Cassandra nice use cases and worst anti patternsCassandra nice use cases and worst anti patterns
Cassandra nice use cases and worst anti patterns
 
Eight Rules for Making Your First Great Game
Eight Rules for Making Your First Great GameEight Rules for Making Your First Great Game
Eight Rules for Making Your First Great Game
 
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
 
Sonatype DevSecOps Leadership forum 2020
Sonatype DevSecOps Leadership forum 2020Sonatype DevSecOps Leadership forum 2020
Sonatype DevSecOps Leadership forum 2020
 
Introduction to Cassandra & Data model
Introduction to Cassandra & Data modelIntroduction to Cassandra & Data model
Introduction to Cassandra & Data model
 
Writing clean code in C# and .NET
Writing clean code in C# and .NETWriting clean code in C# and .NET
Writing clean code in C# and .NET
 
Pylons + Tokyo Cabinet
Pylons + Tokyo CabinetPylons + Tokyo Cabinet
Pylons + Tokyo Cabinet
 
Github github-github
Github github-githubGithub github-github
Github github-github
 
Being Amazon for Software Developers - IDE 2.0: Crowdsourcing mal anders #Jav...
Being Amazon for Software Developers - IDE 2.0: Crowdsourcing mal anders #Jav...Being Amazon for Software Developers - IDE 2.0: Crowdsourcing mal anders #Jav...
Being Amazon for Software Developers - IDE 2.0: Crowdsourcing mal anders #Jav...
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDC
 
Clean Code @Voxxed Days Cluj 2023 - opening Keynote
Clean Code @Voxxed Days Cluj 2023 - opening KeynoteClean Code @Voxxed Days Cluj 2023 - opening Keynote
Clean Code @Voxxed Days Cluj 2023 - opening Keynote
 
Rainbow Over the Windows: More Colors Than You Could Expect
Rainbow Over the Windows: More Colors Than You Could ExpectRainbow Over the Windows: More Colors Than You Could Expect
Rainbow Over the Windows: More Colors Than You Could Expect
 
Making A Game Engine Is Easier Than You Think
Making A Game Engine Is Easier Than You ThinkMaking A Game Engine Is Easier Than You Think
Making A Game Engine Is Easier Than You Think
 
Old code doesn't stink - Detroit
Old code doesn't stink - DetroitOld code doesn't stink - Detroit
Old code doesn't stink - Detroit
 
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
 
ICS3211 lecture 08
ICS3211 lecture 08ICS3211 lecture 08
ICS3211 lecture 08
 
Hackersuli Minecraft hackeles kezdoknek
Hackersuli Minecraft hackeles kezdoknekHackersuli Minecraft hackeles kezdoknek
Hackersuli Minecraft hackeles kezdoknek
 
Rails israel 2013
Rails israel 2013Rails israel 2013
Rails israel 2013
 
Lecture 2: C# Programming for VR application in Unity
Lecture 2: C# Programming for VR application in UnityLecture 2: C# Programming for VR application in Unity
Lecture 2: C# Programming for VR application in Unity
 

Plus de Duyhai Doan

Apache zeppelin, the missing component for the big data ecosystem
Apache zeppelin, the missing component for the big data ecosystemApache zeppelin, the missing component for the big data ecosystem
Apache zeppelin, the missing component for the big data ecosystem
Duyhai Doan
 

Plus de Duyhai Doan (15)

Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandra
 
Big data 101 for beginners devoxxpl
Big data 101 for beginners devoxxplBig data 101 for beginners devoxxpl
Big data 101 for beginners devoxxpl
 
Big data 101 for beginners riga dev days
Big data 101 for beginners riga dev daysBig data 101 for beginners riga dev days
Big data 101 for beginners riga dev days
 
Datastax day 2016 : Cassandra data modeling basics
Datastax day 2016 : Cassandra data modeling basicsDatastax day 2016 : Cassandra data modeling basics
Datastax day 2016 : Cassandra data modeling basics
 
Apache cassandra in 2016
Apache cassandra in 2016Apache cassandra in 2016
Apache cassandra in 2016
 
Spark zeppelin-cassandra at synchrotron
Spark zeppelin-cassandra at synchrotronSpark zeppelin-cassandra at synchrotron
Spark zeppelin-cassandra at synchrotron
 
Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016
 
Cassandra 3 new features 2016
Cassandra 3 new features 2016Cassandra 3 new features 2016
Cassandra 3 new features 2016
 
Cassandra introduction 2016
Cassandra introduction 2016Cassandra introduction 2016
Cassandra introduction 2016
 
Cassandra UDF and Materialized Views
Cassandra UDF and Materialized ViewsCassandra UDF and Materialized Views
Cassandra UDF and Materialized Views
 
Apache zeppelin, the missing component for the big data ecosystem
Apache zeppelin, the missing component for the big data ecosystemApache zeppelin, the missing component for the big data ecosystem
Apache zeppelin, the missing component for the big data ecosystem
 
Distributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeConDistributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeCon
 
Spark cassandra connector.API, Best Practices and Use-Cases
Spark cassandra connector.API, Best Practices and Use-CasesSpark cassandra connector.API, Best Practices and Use-Cases
Spark cassandra connector.API, Best Practices and Use-Cases
 
Algorithmes distribues pour le big data @ DevoxxFR 2015
Algorithmes distribues pour le big data @ DevoxxFR 2015Algorithmes distribues pour le big data @ DevoxxFR 2015
Algorithmes distribues pour le big data @ DevoxxFR 2015
 

Dernier

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+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...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Dernier (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
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
 
+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...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

KillrChat presentation