SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
TALKING AND LISTENING
TO WEB PAGES
Aurelio De Rosa
Warsaw, Poland - 20 April 2015
WEB & APP DEVELOPER
CONTRIBUTE(D) TO
...
jQuery
CanIUse
PureCSS
WRITE(D) FOR
...
SitePoint
Tuts+
.NET megazine
php [architect] megazine
Telerik
Web & PHP magazine
AUTHORED BOOKS
JQUERY IN ACTION (3RD EDITION) INSTANT JQUERY SELECTORS
(Shameless self-promotion!)
WHAT WE'LL COVER
Natural language processing (NLP)
Why it matters
The Web Speech API
Speech recognition
Speech synthesis
Issues and inconsistencies
Demo
NATURAL LANGUAGE
PROCESSING (NLP)
A field of computer science, artificial intelligence, and linguistics
concerned with the interactions between computers and human
(natural) languages.
NATURAL LANGUAGE PROCESSING (NLP)
It all started in 1950 when Alan Turing published an article titled
“Computing Machinery and Intelligence” where he proposed
what is now called the Turing test.
IT'S NOT ALL ABOUT
TEXT
ONCE UPON A TIME...
VOICEXML
It's an XML language for writing Web pages you interact with by
listening to spoken prompts and other forms of audio that you
can control by providing spoken inputs.
Specifications:http://www.w3.org/TR/voicexml30/
VOICEXML: EXAMPLE
<?xml version="1.0" encoding="ISO‐8859‐1"?>
<vxml version="3.0" lang="en">
<form>
   <field name="city">
      <prompt>Where do you want to travel to?</prompt>
      <option>New York</option>
      <option>London</option>
      <option>Tokyo</option>
   </field>
   <block>
      <submit next="http://www.test.com" namelist="city"/>
   </block>
</form>
</vxml>
JAVA APPLET
It's an application written in Java and delivered to users in the
form of bytecode through a web page. The applet is then
executed within a Java Virtual Machine (JVM) in a process
separated from the browser itself.
WHY I CARE
WHY YOU SHOULD CARE
A step ahead to fill the gap with native apps
Improve user experience
Feature needed by some applications such as navigators
Help people with disabilities
“DEMO IT OR IT DIDN'T HAPPEN”™
Register to our website
Name:
Surname:
Nationality:
Start
Thisdemocanbefoundathttps://jsbin.com/faguji/watch?output
WEB SPEECH API
The Web Speech API allows you to deal with two aspects of the
computer-human interaction: Automatic Speech Recognition
(ASR) and Text-to-Speech (TTS).
Specifications:https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html
WEB SPEECH API
Introduced at the end of 2012
Defines two interfaces: one for recognition and one for
synthesis
Requires the permission before acquiring audio
Agnostic of the underlying technology
SPEECH RECOGNITION
There are two types of recognition available: one-shot and
continuous. The first stops as soon as the user stops talking, the
second must be stopped programmatically.
To instantiate a new speech recognizer you have to call
speechRecognition():
var recognizer = new speechRecognition();
SPEECH RECOGNITION: BROWSERS SUPPORT
Explorer Chrome Safari Firefox Opera
None 25+(-webkit) None None None
Dataupdatedto18thApril2015
SPEECH RECOGNITION: PROPERTIES
continuous
grammars*
interimResults
lang
maxAlternatives
serviceURI**
*UptoChrome42addingagrammartothegrammarspropertydoesnothing.ThishappensbecauseThegroupis
currentlydiscussingoptionsforwhichgrammarformatsshouldbesupported,howbuiltingrammartypesarespecified,
anddefaultgrammarswhennotspecified.
**serviceURIisn'texposedbyanybrowser.
SPEECH RECOGNITION: METHODS
start()
stop()
abort()
SPEECH RECOGNITION: EVENTS
start
end*
audiostart
audioend
soundstart
soundend
speechstart
speechend
result
nomatch
error
*UptoChrome42onWindows8.1doesn'tfiretheresultortheerroreventbeforetheendeventwhenonly
noisesareproduced(issue ).#428873
“IT'S SHOWTIME!”
Start Stop
Thisdemocanbefoundathttps://jsbin.com/zesew/watch?output
SPEECH RECOGNITION: RESULTS
Results are obtained as an object (that implements the
SpeechRecognitionEvent interface) passed as the first
argument of the handler attached to the result event.
PROBLEM: SOMETIMES RECOGNITION SUCKS!
Imagine a user of your website or web app says a command but
the recognizer returns the wrong string. Your system is good and
it asks the user to repeat it, but the recognition fails again.
How can you get out of this loop?
(IDEAL) SOLUTION: GRAMMARS
SOLUTION: LEVENSHTEIN DISTANCE
An approach that isn't ideal but that you can use today.
LEVENSHTEIN DISTANCE: EXAMPLE
Commands available: "Send email", "Call"
Names in the phonebook: "Aurelio De Rosa", "Annarita
Tranfici", "John Doe"
Recognized text:
Updated text:
Start
Thisdemocanbefoundathttps://jsbin.com/tevogu/watch?output
SPEECH SYNTHESIS
Provides text-to-speech functionality in the browser. This is
especially useful for blind people and those with visual
impairments in general.
The feature is exposed via a speechSynthesis object that
possess static methods.
SPEECH SYNTHESIS: BROWSERS SUPPORT
Explorer Chrome Safari Firefox Opera
None 33+ 7+ None 27+
Dataupdatedto18thApril2015
SPEECH SYNTHESIS: PROPERTIES
pending
speaking
paused* **
*UptoChrome42,pausingtheutterancedoesn'treflectinachangeofthepauseproperty(issue )#425553
**InOpera27pausingtheutterancereflectinanerroneous,reversedchangeofthepauseproperty(issue
#DNA-37487)
SPEECH SYNTHESIS: METHODS
speak()*
cancel()
pause()
resume()
getVoices()
*UptoChrome42,speak()doesn'tsupportSSMLanddoesn'tstripunrecognizedtags(issue ).#428902
SPEECH SYNTHESIS: VOICES
SPEECH SYNTHESIS: EVENTS
voicechanged
SPEECH SYNTHESIS: UTTERANCE INTERFACE
The SpeechSynthesisUtterance interface represents the
utterance (i.e. the text) that will be spoken by the synthesizer.
SPEECH SYNTHESIS: UTTERANCE PROPERTIES
lang
pitch*
rate*
text**
voice
volume*
*UptoChrome42,changingthepitch,thevolume,andtheratepropertiesdoesnothing(issue )#376280
**UptoChrome42,thetextpropertycan'tbesettoanSSML(SpeechSynthesisMarkupLanguage)document
becauseitisn'tsupportedandChromedoesn'tstriptheunrecognizedtags(issue ).#428902
SPEECH SYNTHESIS: UTTERANCE EVENTS
start
end
pause
resume
boundary*
mark*
error
boundaryandmarkarenotsupportedbyanybrowserbecausetheyarefiredbytheinteractionwithSSML
documents.
SHOW ME TEH CODEZ
To set the text to emit, we can either pass it when instantiating an
utterance object or set it later using the text property.
EXAMPLE 1
var utterance = new SpeechSynthesisUtterance('Hello!');
utterance.lang = 'en‐US';
utterance.rate = 1.2;
utterance.addEventListener('end', function() {
   console.log('Speech completed');
});
speechSynthesis.speak(utterance);
EXAMPLE 2
var utterance = new SpeechSynthesisUtterance();
utterance.text = 'Hello!';
utterance.lang = 'en‐US';
utterance.rate = 1.2;
utterance.addEventListener('end', function() {
   console.log('Speech completed');
});
speechSynthesis.speak(utterance);
SPEECH SYNTHESIS: DEMO IT MAN!
I know my voice isn't very sexy, but I still want to say that this
conference is wonderful and the audience of my talk is even
better. You all rock!
Thisdemocanbefoundathttps://jsbin.com/cipepa/watch?output
HOW I DID IT
INTERACTIVE FORM: RECIPE
Promises (to avoid the callback hell)
Speech recognition
Speech synthesis
TheactualcodeisabitdifferentbutImadethechangesforthesakeofbrevityandthelimitedsizeofthescreen.
INTERACTIVE FORM: STEP 1 - HTML
<form id="form">
 <label for="name"
   data‐question="What's your name?">Name:</label>
 <input id="name" />
 <label for="surname"
   data‐question="What's your surname?">Surname:</label>
 <input id="surname" />
 <!‐‐ Other label/element pairs here ‐‐>
 <input id="btn‐voice" type="submit" value="Start" />
</form>
INTERACTIVE FORM: STEP 2 - SUPPORT
LIBRARY
Create a Speech object containing two methods: speak and
recognize that return a Promise.
var Speech = {
  speak: function(text) {
    return new Promise(function(resolve, reject) {...}
  },
  recognize: function() {
    return new Promise(function(resolve, reject) {...}
  }
}
INTERACTIVE FORM: STEP 3 - JS 1/2
function formData(i) {
  return promise.then(function() {
        return Speech.speak(
           fieldLabels[i].dataset.question
        );
     }).then(function() {
       return Speech.recognize().then(function(text) {
         document.getElementById(
           fieldLabels[i].getAttribute('for')
         ).value = text;
       })
     });
}
INTERACTIVE FORM: STEP 3 - JS 2/2
var form = document.getElementById('form');
form.addEventListener('click', function(event) {
   var fieldLabels = document.querySelectorAll('label');
   function formData(i) { /* code here */ }
   for(var i = 0; i < fieldLabels.length; i++) {
      promise = formData(i);
   }
   promise.then(function() {
      return Speech.speak('Thank you for filling...');
   }).catch(function(error) { alert(error); });
});
DICTATION: RECIPE
Speech recognition
TheactualcodeisabitdifferentbutImadethechangesforthesakeofbrevityandthelimitedsizeofthescreen.
DICTATION: STEP 1 - HTML
<div id="transcription" contenteditable="true"></div>
<button id="btn‐start">Start</button>
<button id="btn‐stop">Stop</button>
DICTATION: STEP 2 - JS 1/3
var recognizer = new SpeechRecognition();
recognizer.interimResults = true;
recognizer.continuous = true;
var transcr = document.getElementById('transcription');
var currTranscr = document.createElement('span');
currTranscr.id = 'current‐transcription';
DICTATION: STEP 2 - JS 2/3
recognizer.addEventListener('result', function(event){
  currTranscr.textContent = '';
  var i = event.resultIndex;
  while (i < event.results.length) {
    var result = event.results[i++];
    if (result.isFinal) {
      transcr.removeChild(currTranscr);
      transcr.textContent += result[0].transcript;
      transcr.appendChild(currTranscr);
    } else {
      currTranscr.textContent += result[0].transcript;
    }
  }
});
DICTATION: STEP 2 - JS 3/3
var btnStart = document.getElementById('btn‐start');
btnStart.addEventListener('click', function() {
   transcr.textContent = '';
   transcr.appendChild(currTranscr);
   recognizer.start();
});
var btnStop = document.getElementById('btn‐stop');
btnStop.addEventListener('click', function() {
   recognizer.stop();
});
ONE LAST DEMO...
VideocourtesyofSzymonNowak( ):@szimek https://www.youtube.com/watch?v=R8ejjVAZweg
THANK YOU!
QUESTIONS?
CONTACTS
Website:
Email:
Twitter:
www.audero.it
a.derosa@audero.it
@AurelioDeRosa

Weitere ähnliche Inhalte

Ähnlich wie 4Developers 2015: Talking and listening to web pages - Aurelio De Rosa

RSJ2011 OSS Robotics and Tools OpenHRI Intro
RSJ2011 OSS Robotics and Tools OpenHRI IntroRSJ2011 OSS Robotics and Tools OpenHRI Intro
RSJ2011 OSS Robotics and Tools OpenHRI IntroYosuke Matsusaka
 
aibo introduction at ROSCon2018@Madrid
aibo introduction at ROSCon2018@Madridaibo introduction at ROSCon2018@Madrid
aibo introduction at ROSCon2018@MadridTomoya Fujita
 
Adobe AIR. NativeProcess. FFMPEG. Awesome.
Adobe AIR. NativeProcess. FFMPEG. Awesome.Adobe AIR. NativeProcess. FFMPEG. Awesome.
Adobe AIR. NativeProcess. FFMPEG. Awesome.Joseph Labrecque
 
JmDNS : Service Discovery for the 21st Century
 JmDNS : Service Discovery for the 21st Century JmDNS : Service Discovery for the 21st Century
JmDNS : Service Discovery for the 21st CenturyGnu Alsonative
 
JmDNS : Service Discovery for the 21st Century
 JmDNS : Service Discovery for the 21st Century JmDNS : Service Discovery for the 21st Century
JmDNS : Service Discovery for the 21st CenturyGnu Alsonative
 
HKOSCon18 - Chetan Khatri - Open Source AI / ML Technologies and Application ...
HKOSCon18 - Chetan Khatri - Open Source AI / ML Technologies and Application ...HKOSCon18 - Chetan Khatri - Open Source AI / ML Technologies and Application ...
HKOSCon18 - Chetan Khatri - Open Source AI / ML Technologies and Application ...Chetan Khatri
 
BUD17-104: Scripting Languages in IoT: Challenges and Approaches
BUD17-104: Scripting Languages in IoT: Challenges and ApproachesBUD17-104: Scripting Languages in IoT: Challenges and Approaches
BUD17-104: Scripting Languages in IoT: Challenges and ApproachesLinaro
 
02 state of the art speech technology using java speech api@egsp 25.08.2011
02 state of the art speech technology using java speech api@egsp 25.08.201102 state of the art speech technology using java speech api@egsp 25.08.2011
02 state of the art speech technology using java speech api@egsp 25.08.2011VinothkumaR Ramu
 
Automatic subtitle generation
Automatic subtitle generationAutomatic subtitle generation
Automatic subtitle generationtanyasaxena1611
 
Google Cloud Platform
Google Cloud PlatformGoogle Cloud Platform
Google Cloud PlatformVMware Tanzu
 
Voice based autometedtransport enquiry system in #c by Rohit malav
Voice based autometedtransport enquiry system in #c by Rohit malavVoice based autometedtransport enquiry system in #c by Rohit malav
Voice based autometedtransport enquiry system in #c by Rohit malavRohit malav
 
Openmeetings
OpenmeetingsOpenmeetings
Openmeetingshs1250
 
Overview and Status of LibreOffice Accessibility (LibreOffice Conference 2014)
Overview and Status of LibreOffice Accessibility (LibreOffice Conference 2014)Overview and Status of LibreOffice Accessibility (LibreOffice Conference 2014)
Overview and Status of LibreOffice Accessibility (LibreOffice Conference 2014)Igalia
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaChristian Heilmann
 

Ähnlich wie 4Developers 2015: Talking and listening to web pages - Aurelio De Rosa (20)

voice browser
voice browservoice browser
voice browser
 
RSJ2011 OSS Robotics and Tools OpenHRI Intro
RSJ2011 OSS Robotics and Tools OpenHRI IntroRSJ2011 OSS Robotics and Tools OpenHRI Intro
RSJ2011 OSS Robotics and Tools OpenHRI Intro
 
aibo introduction at ROSCon2018@Madrid
aibo introduction at ROSCon2018@Madridaibo introduction at ROSCon2018@Madrid
aibo introduction at ROSCon2018@Madrid
 
Adobe AIR. NativeProcess. FFMPEG. Awesome.
Adobe AIR. NativeProcess. FFMPEG. Awesome.Adobe AIR. NativeProcess. FFMPEG. Awesome.
Adobe AIR. NativeProcess. FFMPEG. Awesome.
 
Desktop assistant
Desktop assistant Desktop assistant
Desktop assistant
 
JmDNS : Service Discovery for the 21st Century
 JmDNS : Service Discovery for the 21st Century JmDNS : Service Discovery for the 21st Century
JmDNS : Service Discovery for the 21st Century
 
JmDNS : Service Discovery for the 21st Century
 JmDNS : Service Discovery for the 21st Century JmDNS : Service Discovery for the 21st Century
JmDNS : Service Discovery for the 21st Century
 
HKOSCon18 - Chetan Khatri - Open Source AI / ML Technologies and Application ...
HKOSCon18 - Chetan Khatri - Open Source AI / ML Technologies and Application ...HKOSCon18 - Chetan Khatri - Open Source AI / ML Technologies and Application ...
HKOSCon18 - Chetan Khatri - Open Source AI / ML Technologies and Application ...
 
Voice Assistant.pptx
Voice Assistant.pptxVoice Assistant.pptx
Voice Assistant.pptx
 
BUD17-104: Scripting Languages in IoT: Challenges and Approaches
BUD17-104: Scripting Languages in IoT: Challenges and ApproachesBUD17-104: Scripting Languages in IoT: Challenges and Approaches
BUD17-104: Scripting Languages in IoT: Challenges and Approaches
 
02 state of the art speech technology using java speech api@egsp 25.08.2011
02 state of the art speech technology using java speech api@egsp 25.08.201102 state of the art speech technology using java speech api@egsp 25.08.2011
02 state of the art speech technology using java speech api@egsp 25.08.2011
 
Automatic subtitle generation
Automatic subtitle generationAutomatic subtitle generation
Automatic subtitle generation
 
Smalltalk and Business
Smalltalk and BusinessSmalltalk and Business
Smalltalk and Business
 
Google Cloud Platform
Google Cloud PlatformGoogle Cloud Platform
Google Cloud Platform
 
Voice based autometedtransport enquiry system in #c by Rohit malav
Voice based autometedtransport enquiry system in #c by Rohit malavVoice based autometedtransport enquiry system in #c by Rohit malav
Voice based autometedtransport enquiry system in #c by Rohit malav
 
Hak voice-browser
Hak voice-browserHak voice-browser
Hak voice-browser
 
Openmeetings
OpenmeetingsOpenmeetings
Openmeetings
 
Overview and Status of LibreOffice Accessibility (LibreOffice Conference 2014)
Overview and Status of LibreOffice Accessibility (LibreOffice Conference 2014)Overview and Status of LibreOffice Accessibility (LibreOffice Conference 2014)
Overview and Status of LibreOffice Accessibility (LibreOffice Conference 2014)
 
Tamil OCR using Tesseract OCR Engine
Tamil OCR using Tesseract OCR EngineTamil OCR using Tesseract OCR Engine
Tamil OCR using Tesseract OCR Engine
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World Romania
 

Kürzlich hochgeladen

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in sowetomasabamasaba
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 

Kürzlich hochgeladen (20)

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 

4Developers 2015: Talking and listening to web pages - Aurelio De Rosa