SlideShare a Scribd company logo
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

More Related Content

What's hot

Redux vs Alt
Redux vs AltRedux vs Alt
Redux vs Alt
Uldis Sturms
 
Backbone js
Backbone jsBackbone js
Backbone js
rstankov
 
Vuejs testing
Vuejs testingVuejs testing
Vuejs testing
Greg TAPPERO
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScript
Visual Engineering
 
Ember and containers
Ember and containersEmber and containers
Ember and containers
Matthew Beale
 
Basics of AngularJS
Basics of AngularJSBasics of AngularJS
Basics of AngularJS
Filip Janevski
 
Angularjs Performance
Angularjs PerformanceAngularjs Performance
Angularjs Performance
Steven Lambert
 
AngularJs
AngularJsAngularJs
AngularJs
syam kumar kk
 
Why ruby
Why rubyWhy ruby
Why ruby
rstankov
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
rstankov
 
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 Directives
Eyal 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 presentation
nishasowdri
 
Introduction to Protractor
Introduction to ProtractorIntroduction to Protractor
Introduction to Protractor
Jie-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 III
Visual Engineering
 
AngularJS Basics with Example
AngularJS Basics with ExampleAngularJS Basics with Example
AngularJS Basics with Example
Sergey Bolshchikov
 

What's hot (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
 

Similar to 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 devices
Windows Developer
 
Testing in AngularJS
Testing in AngularJSTesting in AngularJS
Testing in AngularJS
Peter 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 Will
Vincenzo Barone
 
Build Web Apps using Node.js
Build Web Apps using Node.jsBuild Web Apps using Node.js
Build Web Apps using Node.js
davidchubbs
 
A few good JavaScript development tools
A few good JavaScript development toolsA few good JavaScript development tools
A few good JavaScript development tools
Simon Kim
 
Writing Maintainable JavaScript
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScript
Andrew 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 js
Francois Zaninotto
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with example
shadabgilani
 
Unit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJSUnit Testing and Coverage for AngularJS
Unit Testing and Coverage for AngularJS
Knoldus Inc.
 
JavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesJavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best Practices
Siarhei Barysiuk
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingWorkshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testing
Visual Engineering
 
Continuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptContinuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScript
Lars Thorup
 
Building Large jQuery Applications
Building Large jQuery ApplicationsBuilding Large jQuery Applications
Building Large jQuery Applications
Rebecca 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 2013
Laurent_VB
 
DrupalCon jQuery
DrupalCon jQueryDrupalCon jQuery
DrupalCon jQuery
Nathan Smith
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
BOSC 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 JavaScript
Guy 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
 

Similar to 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)
 

Recently uploaded

Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 

Recently uploaded (20)

Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 

Reliable Javascript