SlideShare une entreprise Scribd logo
1  sur  76
Télécharger pour lire hors ligne
BUILDING RELIABLE WEB
APPS
A Guide to Client Side
Testing
GLENN STOVALL
MOVING TO THE CLIENT SIDE
More applications are moving more code from the server side to the
client side.
▸ Greater decoupling of rendering & business logic.
▸ More responsive UX.
▸ More Devices = More API-centric approach.
JAVASCRIPT IS A 1ST CLASS CITIZEN
This means we should treat it the same way we treat our server side
languages, and that means it needs to be tested.
WHO AM I?
AND WHY SHOULD YOU CARE?
▸ Glenn Stovall
▸ Technical Consultant
▸ Have worked on large scale front end applications.
▸ Worked with multiple tech companies to improve their internal
practices.
WHAT THIS TALK IS
▸ Overview of the challenges we face.
▸ Tools and techniques to overcome them.
▸ As platform agnostic as possible
▸ 3 Examples using the user story > test > code cycle (BDD)
4 CHALLENGES
OF FRONT END TESTING
a.k.a excuses
1.NOT IN THE TERMINAL
▸ The client side feels 'separate' from our usual tool chain.
▸ Doesn't integrate with other CI tools.
2. THE DOM
▸ Difficult to simulate browser behavior.
3. APIS
▸ Client-side applications are rarely self contained.
▸ Still dependant on Server-Side and 3rd party applications
4. ASYNC
▸ How can you test code when you don't know when it's going to be
done?
OUR 3 STORIES
1. Testing a simple string manipulation function.
2. Testing a "read more" button (DOM Manipulation).
3. Testing code reliant on a 3rd party API.
THE TOOLS
1. NODEJSSERVER SIDE JAVASCRIPT.
2. GRUNTJAVASCRIPT TASK RUNNER.
3. JASMINEJAVASCRIPT TESTING FRAMEWORK.
4. JQUERYDOM MANIPULATION, SIMULATION, AND
SELECTION.
5. PHANTOMJSBROWSER SIMULATION.
SETTING UP OUR
ENVIRONMENT
STEP 0: INSTALL NODEJS
http://nodejs.org/
download/
STEP 1: DOWNLOAD JASMINE STANDALONE
▸ https://github.com/jasmine/jasmine/tree/
master/dist
▸ Can open SpecRunner.html in a browser to see tests.
▸ Remove example tests if you want.
STEP 2: INSTALL GRUNT + GRUNT-JASMINE
From the project root directory:
▸ npm install grunt
▸ npm install grunt-jasmine
STEP 3: WRITE YOUR GRUNTFILE.JS
module.exports = function(grunt) {
grunt.initConfig({
jasmine : {
src : 'src/*.js',
options: {
specs : 'spec/*Spec.js',
helpers: 'spec/*Helper.js'
}
}
});
grunt.loadNpmTasks('grunt-contrib-jasmine');
};
You can now run your front end tests on the back end by calling grunt
jasmine.
And we are done with setting up our environment.
FEATURE #1
STRING REVERSE
FUNCTION
"As a developer, I should be able to
reverse a string, so that I can learn
about testing"
spec/ReverseSpec.js
describe('strReverse function', function() {
it('should return the inverse of a string', function() {
var result = strReverse('hello');
expect(result).toBe('olleh');
});
});
FAIL
/src/Util.js
function strReverse(str) {
return str.split("").reverse().join("");
}
PASS
FEATURE #2
READ MORE
BUTTON
"As a user, I should be able to click a
button labeled“read more”in order to
view the content of an article, so I can
read it."
BUT FIRST...
JASMINE-JQUERY
▸ Add on library that gives us additional tools for testing HTML & CSS
related functionality.
▸ Download this file and place it in /vendor directory.
▸ We'll load jQuery from a CDN (because we can)
Gruntfile.js
grunt.initConfig({
jasmine:
...
vendor: [
"http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js",
"https://raw.githubusercontent.com/velesin/jasmine-jquery/master/lib/jasmine-jquery.js"
],
...
});
Vendor scripts are loaded first.
FIXTURES
▸ HTML Template files you can use in your tests.
▸ Add this line to spec/SpecHelper.js and create the
directory:
jasmine.getFixtures().fixturesPath = 'spec/fixtures/html';
spec/fixtures/html/post.html
<section class='post'>
This is a summary.
<button class='read-more'>read more</button>
<article>This is the full article.</article>
</section>
SET UP + TEAR DOWN
▸ beforeAll() : runs once at the beginning of the suite.
▸ beforeEach(): runs before every test.
▸ afterEach(): runs after every test.
▸ afterAll() : runs once at the end of the suite.
/spec/PostSpec.js
describe('article', function() {
var content = null;
beforeEach(function() {
content = $(readFixtures("post.html"));
$('body').append(content);
});
afterEach(function() {
$('body').remove(".post");
});
});
/spec/PostSpec.js
it('should not display the content by default', function() {
expect(content.find("article")).toBeHidden();
});
FAIL
STYLE FIXTURES
▸ CSS files you can use in your tests.
▸ Add this line to spec/SpecHelper.js and create the
directory:
jasmine.getStyleFixtures().fixturesPath = 'spec/fixtures/css';
/spec/fixtures/css/post.css
.post > article {
display: none;
}
/spec/PostSpec.js
beforeEach(function() {
loadStyleFixtures("post.css");
...
});
PASS
TESTING THE 'READ MORE' BUTTON
/spec/PostSpec.js
it('should display the article when you click "read more"', function() {
content.find(".read-more").click();
expect(content.find("article")).toBeVisible();
});
FAIL
/src/Post.js
$(document).ready(function() {
$("body").on("click", ".post > .read-more", function(e) {
$(this).siblings("article").show();
});
});
PASS
FEATURE #3
REDDIT API +
AJAX
“As a user, I would like to see the cutest
animal of the month according to
Reddit, so that I can bring some joy
into an other wise listless and dreary
existance."
PRO TIP
You can change any URL on Reddit to an API call by adding .json to
the end of the URL.
http://www.reddit.com/r/aww/top.json?sort=top&t=month
BUT FIRST...
JSON FIXTURES
▸ JSON Files you can use in your tests.
▸ Add this line to spec/SpecHelper.js and create the
directory:
jasmine.getJSONFixtures().fixturesPath = 'spec/fixtures/json';`
/spec/fixtures/json/aww.json
{
"kind" : "listing",
"data" : {
"children" : [
{
"data" : {
"title" : "Our indoor cat moved from a gray apartment block view to this",
"url" : "http://i.imgur.com/3rYHhEu.jpg"
}
}
]
}
}
SPIES
▸ Can track when functions are called.
▸ Can be called before or After functions.
▸ Can be called instead of functions and return values.
We can use spies to mock Service objects, so that we can test other
code that relies on these objects without being dependant on them.
src/AwwService.js
var AwwService = {};
AwwService.query = function() {
return null;
}
spec/AwwServiceSpec.js
beforeEach(function() {
spyOn(AwwService, 'query').and.callFake( function(params) {
return getJSONFixture('aww.json');
});
});
PROBLEMS WITH THIS APPROACH
▸ Functions can't return values from async calls
▸ We could use async: false, but this approach is slow.
▸ Instead, query() should take a callback, and we can test against
that.
src/AwwService.js
AwwService.query = function(callback) {
$.ajax({
url: "http://www.reddit.com/r/aww/top.json",
data : {
"sort" : "top",
"t" : "month"
},
success: callback
});
}
TIMING AJAX CALLS
▸ beforeEach() and it() have an optional done paramater.
▸ Tests will not run until done() is called.
▸ By adding done() to our callbacks, we can test async behavior
src/AwwSerivce.js
AwwService.displayTopResult = function(listings) {
var img = $("<img>").attr("src",listings.data.children[0].data.url);
$("body").append(img);
}
By placing the logic in a separate function we achieve the following:
▸ Test this functionality on its own (using our JSON fixture).
▸ Use this callback in the app itself.
▸ Create our own callback for testing, which will call done().
spec/AwwService.js
describe('AwwService', function() {
describe('query Function', function() {
beforeEach(function(done) {
AwwService.query(function(results) {
AwwService.displayTopResult(results);
done();
});
});
afterEach(function(done) {
$("body").remove("img");
done();
});
});
});
NOW WE CAN WRITE OUR FIRST TEST
(FINALLY).
spec/AwwService.js
it('should run the callback provided', function() {
var imgs = $("body").find("img");
var firstImg = img.first();
expect(imgs.length).toBe(1);
expect(firstImg.attr("src")).toEqual("http://i.imgur.com/3rYHhEu.jpg");
});
PASSBUT...
PROBLEMS WITH THIS APPROACH
▸ This test is dependant on the Reddit API.
▸ The first assertion will fail if the API is ever unavailable.
▸ The second assertion will fail if the result changes.
▸ We need to mock the result of HTTP request.
JASMINE-AJAX
▸ Jasmine provides a library that can intercept calls.
▸ Allows us to control when they are called, and how they respond.
▸ Need to download the file, add it to our vendor directory.
▸ Let's add this to our test, and create a mock response.
spec/AwwServiceSpec.js
beforeEach(function() {
jasmine.Ajax.install();
});
afterEach(function() {
jasmine.Ajax.uninstall();
});
FAIL
spec/AwwSerivce.js
beforeEach(function() {
// ...our original AJAX call...
var responseText = JSON.stringify({ ... });
jasmine.Ajax.requests.mostRecent().respondWith({
'status': 200,
'content/type': 'application/javascript',
'responseText': responseText
});
});
PASS
PROBLEM WITH THIS APPROACH
▸ jasmine-jquery uses AJAX calls to load fixtures.
▸ jasmine-ajax intercepts and breaks these calls.
▸ You can use preloadFixtures() before the
jasmine.Ajax.install() call to load HTML fixtures into
the cache.
▸ There is currently no preloading for CSS/JSON.
CONCLUSION
▸ This should be more than enough to get you started on client side
testing.
▸ Any tests are better than no tests.
▸ Client side applications aren't going to get any less complicated.
FURTHER INFORMATION
▸ http://glennstovall.com
▸ glenn@concordantsolutions.com
▸ @GSto
- LINK TO SHOW NOTES
ANY QUESTIONS

Contenu connexe

Tendances

Backbone js
Backbone jsBackbone js
Backbone jsrstankov
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptVisual Engineering
 
Ember and containers
Ember and containersEmber and containers
Ember and containersMatthew Beale
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Railsrstankov
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the FinishYehuda Katz
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS DirectivesEyal Vardi
 
Javascript unit testing, yes we can e big
Javascript unit testing, yes we can   e bigJavascript unit testing, yes we can   e big
Javascript unit testing, yes we can e bigAndy Peterson
 
ReactJs presentation
ReactJs presentationReactJs presentation
ReactJs presentationnishasowdri
 
Introduction to Protractor
Introduction to ProtractorIntroduction to Protractor
Introduction to ProtractorJie-Wei Wu
 
2013 - Nate Abele: HTTP ALL THE THINGS: Simplificando aplicaciones respetando...
2013 - Nate Abele: HTTP ALL THE THINGS: Simplificando aplicaciones respetando...2013 - Nate Abele: HTTP ALL THE THINGS: Simplificando aplicaciones respetando...
2013 - Nate Abele: HTTP ALL THE THINGS: Simplificando aplicaciones respetando...PHP Conference Argentina
 
Workshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIWorkshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIVisual Engineering
 

Tendances (20)

Redux vs Alt
Redux vs AltRedux vs Alt
Redux vs Alt
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Vuejs testing
Vuejs testingVuejs testing
Vuejs testing
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScript
 
Ember and containers
Ember and containersEmber and containers
Ember and containers
 
Basics of AngularJS
Basics of AngularJSBasics of AngularJS
Basics of AngularJS
 
Angularjs Performance
Angularjs PerformanceAngularjs Performance
Angularjs Performance
 
Dan Webb Presentation
Dan Webb PresentationDan Webb Presentation
Dan Webb Presentation
 
AngularJs
AngularJsAngularJs
AngularJs
 
Why ruby
Why rubyWhy ruby
Why ruby
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS Directives
 
Javascript unit testing, yes we can e big
Javascript unit testing, yes we can   e bigJavascript unit testing, yes we can   e big
Javascript unit testing, yes we can e big
 
ReactJs presentation
ReactJs presentationReactJs presentation
ReactJs presentation
 
Introduction to Protractor
Introduction to ProtractorIntroduction to Protractor
Introduction to Protractor
 
2013 - Nate Abele: HTTP ALL THE THINGS: Simplificando aplicaciones respetando...
2013 - Nate Abele: HTTP ALL THE THINGS: Simplificando aplicaciones respetando...2013 - Nate Abele: HTTP ALL THE THINGS: Simplificando aplicaciones respetando...
2013 - Nate Abele: HTTP ALL THE THINGS: Simplificando aplicaciones respetando...
 
Workshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte IIIWorkshop 14: AngularJS Parte III
Workshop 14: AngularJS Parte III
 
AngularJS Basics with Example
AngularJS Basics with ExampleAngularJS Basics with Example
AngularJS Basics with Example
 
Step objects
Step objectsStep objects
Step objects
 

Similaire à Reliable Javascript

Building Progressive Web Apps for Windows devices
Building Progressive Web Apps for Windows devicesBuilding Progressive Web Apps for Windows devices
Building Progressive Web Apps for Windows devicesWindows Developer
 
Testing in AngularJS
Testing in AngularJSTesting in AngularJS
Testing in AngularJSPeter Drinnan
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js frameworkBen Lin
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)Igor Bronovskyy
 
Jeroen Vloothuis Bend Kss To Your Will
Jeroen Vloothuis   Bend Kss To Your WillJeroen Vloothuis   Bend Kss To Your Will
Jeroen Vloothuis Bend Kss To Your WillVincenzo Barone
 
Build Web Apps using Node.js
Build Web Apps using Node.jsBuild Web Apps using Node.js
Build Web Apps using Node.jsdavidchubbs
 
A few good JavaScript development tools
A few good JavaScript development toolsA few good JavaScript development tools
A few good JavaScript development toolsSimon Kim
 
Writing Maintainable JavaScript
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScriptAndrew Dupont
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsFrancois Zaninotto
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with exampleshadabgilani
 
Unit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJSUnit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJSKnoldus Inc.
 
JavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesJavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesSiarhei Barysiuk
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingWorkshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingVisual Engineering
 
Continuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptContinuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptLars Thorup
 
Building Large jQuery Applications
Building Large jQuery ApplicationsBuilding Large jQuery Applications
Building Large jQuery ApplicationsRebecca Murphey
 
Developing web-apps like it's 2013
Developing web-apps like it's 2013Developing web-apps like it's 2013
Developing web-apps like it's 2013Laurent_VB
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in reactBOSC Tech Labs
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptGuy Royse
 
Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)Future Insights
 

Similaire à Reliable Javascript (20)

Building Progressive Web Apps for Windows devices
Building Progressive Web Apps for Windows devicesBuilding Progressive Web Apps for Windows devices
Building Progressive Web Apps for Windows devices
 
Testing in AngularJS
Testing in AngularJSTesting in AngularJS
Testing in AngularJS
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 
Jeroen Vloothuis Bend Kss To Your Will
Jeroen Vloothuis   Bend Kss To Your WillJeroen Vloothuis   Bend Kss To Your Will
Jeroen Vloothuis Bend Kss To Your Will
 
Build Web Apps using Node.js
Build Web Apps using Node.jsBuild Web Apps using Node.js
Build Web Apps using Node.js
 
A few good JavaScript development tools
A few good JavaScript development toolsA few good JavaScript development tools
A few good JavaScript development tools
 
Writing Maintainable JavaScript
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScript
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with example
 
Unit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJSUnit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJS
 
JavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesJavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best Practices
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingWorkshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testing
 
Continuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptContinuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScript
 
Building Large jQuery Applications
Building Large jQuery ApplicationsBuilding Large jQuery Applications
Building Large jQuery Applications
 
Developing web-apps like it's 2013
Developing web-apps like it's 2013Developing web-apps like it's 2013
Developing web-apps like it's 2013
 
DrupalCon jQuery
DrupalCon jQueryDrupalCon jQuery
DrupalCon jQuery
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
 
Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)Get Grulping with JavaScript Task Runners (Matt Gifford)
Get Grulping with JavaScript Task Runners (Matt Gifford)
 

Dernier

Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 

Dernier (20)

Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 

Reliable Javascript