SlideShare a Scribd company logo
High quality
MarcBächingerPrincipalconsultant,HTML5Evangelist
talkpoweredbyZühlkeJScrew!
MichaelSchnyderSoftwareEngineer,Dronepilot
THEY SAID: „JAVASCRIPT ISTHE
FUTURE OF COMPUTING“
THEY SAID: „JAVASCRIPT ISTHE
FUTURE OF COMPUTING“
High-Quality JavaScript
dynamictyping
very-latebinding
dynamictyping
very-latebinding
must run to be verified!
BONE AND BANE OF JS
$.ajax({

url: "person/2",

dataType: "json",

success: function (obj) {

var person = new Person();

$.extend(person, obj);

global.person.push(person);

}

});
BONE AND BANE OF JS
$.ajax({

url: "person/42",

dataType: "json",

success: function (obj) {

$.extend(Person.prototype, obj);

}

});
BONE AND BANE OF JS
$.ajax({

url: "person/2",

dataType: "json",

success: function (obj) {

var person = new Person();

if (someCondition(obj)) {

$.extend(person, {

getFullname: function () {

return first + " " + last;

}

});

}

global.person.push(person);

}

});
COUNTERMEASURES!
DEVELOPMENT CYCLE
findbugs, checkstyle
IDE
compile
testing
jUnit
selenium
Java
DEVELOPMENT CYCLE
findbugs, checkstyle
IDE
compile
testing
jUnit
selenium
Java
DEVELOPMENT CYCLE
static code analysis
development
productionalizing
concatenate
minimize
testing
unit test
component tests
JavaScript
findbugs, checkstyle
IDE
compile
testing
jUnit
selenium
Java
ARCHITECTURE AND DESIGN
MODULES!
require(["app/services"], 

function(services) {

// use services

}

);
TOOL CHAIN
!
TOOL PARADE
jshint
uglify
esprima
require.js
less
bower
istanbul
karma
jasmine
High-Quality JavaScript
DEVELOPMENT CYCLE
grunt jshint
IDE/Editor/CI
productionalizing
cssmin
htmlcompress
testing
jasmine
qunit
uglify
concatenate
JSHINT - NOT A COMPILER
app/scripts/domain-factory.js
!
line 4 col 3 Missing "use strict" statement.
line 11 col 47 'suffix' is defined but never used.
line 16 col 22 Missing semicolon.
line 35 col 5 'person' is not defined.
line 37 col 11 Expected '===' and instead saw '=='.
line 38 col 5 Expected '{' and instead saw 'c'.
line 38 col 5 Expected 'c' to have an indentation at 7 instead at 5.
line 43 col 24 Missing 'new' prefix when invoking a constructor.
RELEASE WITH GRUNT
jshint
copy
concat
uglify cssmin htmlprocessor
karma
checkstyle findbugs
copywebfilestodistributiondirectory
concatenatefile(js,css)
minimize
runtests
GRUNT AS OFTEN AS IT GETS
jshint
copy
concat
uglify cssmin htmlprocessor
karma
GRUNT AS OFTEN AS IT GETS
jshint
copy
concat
uglify cssmin htmlprocessor
karma
onlocalfilechange
GRUNT AS OFTEN AS IT GETS
jshint
copy
concat
uglify cssmin htmlprocessor
karma
onlocalfilechange
onpushtorepository
TOOL INTEGRATION
BARE BONE BUILD
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
Editor
Browser
CI MIT JENKINS
CI MIT JENKINS
WEBSTORM IDE
MICROSOFT
What is Microsofts answer for developing
Enterprise JavaScript Applications?
High-Quality JavaScript
High-Quality JavaScript
JAVASCRIPT FOR 	

VISUAL STUDIO
“Enable efficient SPA development	

on the .NET platform by providing a proven,	

enterprise-ready toolchain”
ZÜHLKE SPA STACK
HIGH QUALITY JAVASCRIPT ?
WHATTO DO ?
leverageJavaScriptbuildtools
toolintegration
continuousintegration
unittesting
architectureanddesign
High-Quality JavaScript
thx!
@marcbaechinger
BACKUP SLIDES
GRUNTFILE.JS
module.exports = function(grunt) {

var DOC_ROOT = "public_html",

DIST_DIR = "build";



grunt.initConfig({

pkg: grunt.file.readJSON('package.json'),

copy: {

dist: {

files: [

{

expand: true,

src: [DOC_ROOT + '/**'],

dest: DIST_DIR

}

]

}

},

[...]

}

};
GRUNT: BASE
{

"name": "jquery-app",

"version": "0.0.0",

"devDependencies": {

"grunt": "~0.4.1",

"grunt-contrib-jshint": "~0.6.0",

"grunt-contrib-nodeunit": "~0.2.0",

"grunt-contrib-concat": "~0.1.3",

"grunt-contrib-uglify": "~0.2.0",

"grunt-contrib-copy": "~0.4.1",

"grunt-contrib-clean": "~0.4.1",

"grunt-contrib-cssmin": "~0.6.1",

"grunt-htmlcompressor": "~0.1.8",

"grunt-contrib-watch": "~0.3.1",

"grunt-regarde": "~0.1.1",

"grunt-contrib-connect": "0.1.2",

"grunt-contrib-livereload": "0.1.1"

"grunt-open": "~0.2.2",

"grunt-karma": "~0.6.1",

"karma": "~0.10.1",

"karma-chrome-launcher": "~0.1.0",

"karma-jasmine": "~0.1.0",

"karma-qunit": "~0.1.0",

"karma-html2js-preprocessor": "~0.1"

}

}
GRUNT: LIVE RELOAD
{

"name": "jquery-app",

"version": "0.0.0",

"devDependencies": {

"grunt": "~0.4.1",

"grunt-contrib-jshint": "~0.6.0",

"grunt-contrib-nodeunit": "~0.2.0",

"grunt-contrib-concat": "~0.1.3",

"grunt-contrib-uglify": "~0.2.0",

"grunt-contrib-copy": "~0.4.1",

"grunt-contrib-clean": "~0.4.1",

"grunt-contrib-cssmin": "~0.6.1",

"grunt-htmlcompressor": "~0.1.8",

"grunt-contrib-watch": "~0.3.1",

"grunt-regarde": "~0.1.1",

"grunt-contrib-connect": "0.1.2",

"grunt-contrib-livereload": "0.1.1"

"grunt-open": "~0.2.2",

"grunt-karma": "~0.6.1",

"karma": "~0.10.1",

"karma-chrome-launcher": "~0.1.0",

"karma-jasmine": "~0.1.0",

"karma-qunit": "~0.1.0",

"karma-html2js-preprocessor": "~0.1"

}

}
GRUNT: LIVE RELOAD
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
Editor
Browser
GRUNT: LIVE RELOAD
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
Editor
Browser
watches
1
GRUNT: LIVE RELOAD
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
Editor
Browser
save
2
watches
1
GRUNT: LIVE RELOAD
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
Editor
Browser
save
2
watches
1
request reload
3
GRUNT: LIVE RELOAD
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
Editor
Browser
save
2
watches
1
request reload
3
load
4
GRUNT: KARMA
{

"name": "jquery-app",

"version": "0.0.0",

"devDependencies": {

"grunt": "~0.4.1",

"grunt-contrib-jshint": "~0.6.0",

"grunt-contrib-nodeunit": "~0.2.0",

"grunt-contrib-concat": "~0.1.3",

"grunt-contrib-uglify": "~0.2.0",

"grunt-contrib-copy": "~0.4.1",

"grunt-contrib-clean": "~0.4.1",

"grunt-contrib-cssmin": "~0.6.1",

"grunt-htmlcompressor": "~0.1.8",

"grunt-contrib-watch": "~0.3.1",

"grunt-regarde": "~0.1.1",

"grunt-contrib-connect": "0.1.2",

"grunt-contrib-livereload": "0.1.1"

"grunt-open": "~0.2.2",

"grunt-karma": "~0.6.1",

"karma": "~0.10.1",

"karma-chrome-launcher": "~0.1.0",

"karma-jasmine": "~0.1.0",

"karma-qunit": "~0.1.0",

"karma-html2js-preprocessor": "~0.1"

}

}
GRUNT: KARMA
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
fooSpec.jsbarSpec.jsbarSpec.js
Chrome Firefox
Android
iOS
fooSpec.jsbarSpec.jsbarSpec.js
fooSpec.jsbarSpec.jsbarSpec.jsfooSpec.jsbarSpec.jsfooSpec.js
Karma
GRUNT: KARMA
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
fooSpec.jsbarSpec.jsbarSpec.js
Chrome Firefox
Android
iOS
fooSpec.jsbarSpec.jsbarSpec.js
fooSpec.jsbarSpec.jsbarSpec.jsfooSpec.jsbarSpec.jsfooSpec.js
Karma
watches
1
GRUNT: KARMA
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
fooSpec.jsbarSpec.jsbarSpec.js
Chrome Firefox
Android
iOS
fooSpec.jsbarSpec.jsbarSpec.js
fooSpec.jsbarSpec.jsbarSpec.jsfooSpec.jsbarSpec.jsfooSpec.js
Karma
watches
1
register
2
GRUNT: KARMA
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
fooSpec.jsbarSpec.jsbarSpec.js
Chrome Firefox
Android
iOS
fooSpec.jsbarSpec.jsbarSpec.js
fooSpec.jsbarSpec.jsbarSpec.jsfooSpec.jsbarSpec.jsfooSpec.js
Karma
watches
1
register
2
3
changed
GRUNT: KARMA
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
fooSpec.jsbarSpec.jsbarSpec.js
Chrome Firefox
Android
iOS
fooSpec.jsbarSpec.jsbarSpec.js
fooSpec.jsbarSpec.jsbarSpec.jsfooSpec.jsbarSpec.jsfooSpec.js
Karma
watches
1
register
2
request rerun 4
3
changed
GRUNT: KARMA
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
fooSpec.jsbarSpec.jsbarSpec.js
Chrome Firefox
Android
iOS
fooSpec.jsbarSpec.jsbarSpec.js
fooSpec.jsbarSpec.jsbarSpec.jsfooSpec.jsbarSpec.jsfooSpec.js
Karma
watches
1
register
2
request rerun 4
execute5
3
changed
GRUNT: KARMA
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
*.html *.js *.css
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
---------------

---------------
---------------
---------------
---------------
fooSpec.jsbarSpec.jsbarSpec.js
Chrome Firefox
Android
iOS
fooSpec.jsbarSpec.jsbarSpec.js
fooSpec.jsbarSpec.jsbarSpec.jsfooSpec.jsbarSpec.jsfooSpec.js
Karma
watches
1
register
2
request rerun 4
execute5
test report
6
3
changed
RUNNING GRUNT WITH
MAVEN
• yeoman-maven-plugin	

• Exec Maven plugin

More Related Content

What's hot (20)

jQuery UI and Plugins
jQuery UI and PluginsjQuery UI and Plugins
jQuery UI and Plugins
Marc Grabanski
 
HTML5 - Introduction
HTML5 - IntroductionHTML5 - Introduction
HTML5 - Introduction
Davy De Pauw
 
Keypoints html5
Keypoints html5Keypoints html5
Keypoints html5
dynamis
 
HTML 5 - Overview
HTML 5 - OverviewHTML 5 - Overview
HTML 5 - Overview
Marcelio Leal
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
Julien Lecomte
 
Makezine
MakezineMakezine
Makezine
Kelly Thejitternews
 
Intro to html 5
Intro to html 5Intro to html 5
Intro to html 5
Ian Jasper Mangampo
 
How to make Ajax work for you
How to make Ajax work for youHow to make Ajax work for you
How to make Ajax work for you
Simon Willison
 
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJRealize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Leonardo Balter
 
HTML5 Essentials
HTML5 EssentialsHTML5 Essentials
HTML5 Essentials
Marc Grabanski
 
Using Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion DollarsUsing Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion Dollars
Mike Pack
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
Terry Ryan
 
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
Remy Sharp
 
ActiveDOM
ActiveDOMActiveDOM
ActiveDOM
Felix Geisendörfer
 
WordPress Admin UI - Future Proofing Your Admin Pages
WordPress Admin UI - Future Proofing Your Admin PagesWordPress Admin UI - Future Proofing Your Admin Pages
WordPress Admin UI - Future Proofing Your Admin Pages
Brandon Dove
 
HTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymoreHTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymore
Remy Sharp
 
jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009
Ralph Whitbeck
 
Secure WordPress Development Practices
Secure WordPress Development PracticesSecure WordPress Development Practices
Secure WordPress Development Practices
Brandon Dove
 
Taiwan Web Standards Talk 2011
Taiwan Web Standards Talk 2011Taiwan Web Standards Talk 2011
Taiwan Web Standards Talk 2011
Zi Bin Cheah
 
Web Standards: Fueling Innovation [Web Design World Boston '08]
Web Standards: Fueling Innovation [Web Design World Boston '08]Web Standards: Fueling Innovation [Web Design World Boston '08]
Web Standards: Fueling Innovation [Web Design World Boston '08]
Aaron Gustafson
 
HTML5 - Introduction
HTML5 - IntroductionHTML5 - Introduction
HTML5 - Introduction
Davy De Pauw
 
Keypoints html5
Keypoints html5Keypoints html5
Keypoints html5
dynamis
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
Julien Lecomte
 
How to make Ajax work for you
How to make Ajax work for youHow to make Ajax work for you
How to make Ajax work for you
Simon Willison
 
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJRealize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Leonardo Balter
 
Using Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion DollarsUsing Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion Dollars
Mike Pack
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
Terry Ryan
 
HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?HTML5: friend or foe (to Flash)?
HTML5: friend or foe (to Flash)?
Remy Sharp
 
WordPress Admin UI - Future Proofing Your Admin Pages
WordPress Admin UI - Future Proofing Your Admin PagesWordPress Admin UI - Future Proofing Your Admin Pages
WordPress Admin UI - Future Proofing Your Admin Pages
Brandon Dove
 
HTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymoreHTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymore
Remy Sharp
 
jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009
Ralph Whitbeck
 
Secure WordPress Development Practices
Secure WordPress Development PracticesSecure WordPress Development Practices
Secure WordPress Development Practices
Brandon Dove
 
Taiwan Web Standards Talk 2011
Taiwan Web Standards Talk 2011Taiwan Web Standards Talk 2011
Taiwan Web Standards Talk 2011
Zi Bin Cheah
 
Web Standards: Fueling Innovation [Web Design World Boston '08]
Web Standards: Fueling Innovation [Web Design World Boston '08]Web Standards: Fueling Innovation [Web Design World Boston '08]
Web Standards: Fueling Innovation [Web Design World Boston '08]
Aaron Gustafson
 

Similar to High-Quality JavaScript (20)

WordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEEDWordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEED
Jan Löffler
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood
 
JavaScript Web Development
JavaScript Web DevelopmentJavaScript Web Development
JavaScript Web Development
vito jeng
 
[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
Justin Ryan
 
"Your script just killed my site" by Steve Souders
"Your script just killed my site" by Steve Souders"Your script just killed my site" by Steve Souders
"Your script just killed my site" by Steve Souders
Dmitry Makarchuk
 
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
 
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Jan Löffler
 
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
 Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra... Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
Plesk
 
Sanjeev ghai 12
Sanjeev ghai 12Sanjeev ghai 12
Sanjeev ghai 12
Praveen kumar
 
Nodejs meetup-12-2-2015
Nodejs meetup-12-2-2015Nodejs meetup-12-2-2015
Nodejs meetup-12-2-2015
Fergus McDowall
 
CQRS, ReactJS, Docker in a nutshell
CQRS, ReactJS, Docker in a nutshellCQRS, ReactJS, Docker in a nutshell
CQRS, ReactJS, Docker in a nutshell
Andrea Giuliano
 
Docker cqrs react
Docker cqrs reactDocker cqrs react
Docker cqrs react
Simone Di Maulo
 
CQRS, React, Docker in a Nutshell
CQRS, React, Docker in a NutshellCQRS, React, Docker in a Nutshell
CQRS, React, Docker in a Nutshell
Claudio D'Alicandro
 
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
Alessandro Nadalin
 
Specification-Driven Development of REST APIs by Alexander Zinchuk
Specification-Driven Development of REST APIs by Alexander Zinchuk   Specification-Driven Development of REST APIs by Alexander Zinchuk
Specification-Driven Development of REST APIs by Alexander Zinchuk
OdessaJS Conf
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Chris Alfano
 
(2018) Webpack Encore - Asset Management for the rest of us
(2018) Webpack Encore - Asset Management for the rest of us(2018) Webpack Encore - Asset Management for the rest of us
(2018) Webpack Encore - Asset Management for the rest of us
Stefan Adolf
 
Automatically Assessing Code Understandability: How Far Are We?
Automatically Assessing Code Understandability: How Far Are We?Automatically Assessing Code Understandability: How Far Are We?
Automatically Assessing Code Understandability: How Far Are We?
sscalabrino
 
Front End Tooling and Performance - Codeaholics HK 2015
Front End Tooling and Performance - Codeaholics HK 2015Front End Tooling and Performance - Codeaholics HK 2015
Front End Tooling and Performance - Codeaholics HK 2015
Holger Bartel
 
WordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEEDWordCamp Cologne - WordPress auf SPEED
WordCamp Cologne - WordPress auf SPEED
Jan Löffler
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood
 
JavaScript Web Development
JavaScript Web DevelopmentJavaScript Web Development
JavaScript Web Development
vito jeng
 
[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design[rwdsummit] Adaptive Images in Responsive Web Design
[rwdsummit] Adaptive Images in Responsive Web Design
Christopher Schmitt
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
Justin Ryan
 
"Your script just killed my site" by Steve Souders
"Your script just killed my site" by Steve Souders"Your script just killed my site" by Steve Souders
"Your script just killed my site" by Steve Souders
Dmitry Makarchuk
 
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
 
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Rac...
Jan Löffler
 
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
 Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra... Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
Container Days 2017 Hamburg - Plesk - How Docker helps tune Websites into Ra...
Plesk
 
CQRS, ReactJS, Docker in a nutshell
CQRS, ReactJS, Docker in a nutshellCQRS, ReactJS, Docker in a nutshell
CQRS, ReactJS, Docker in a nutshell
Andrea Giuliano
 
CQRS, React, Docker in a Nutshell
CQRS, React, Docker in a NutshellCQRS, React, Docker in a Nutshell
CQRS, React, Docker in a Nutshell
Claudio D'Alicandro
 
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2...
Alessandro Nadalin
 
Specification-Driven Development of REST APIs by Alexander Zinchuk
Specification-Driven Development of REST APIs by Alexander Zinchuk   Specification-Driven Development of REST APIs by Alexander Zinchuk
Specification-Driven Development of REST APIs by Alexander Zinchuk
OdessaJS Conf
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Chris Alfano
 
(2018) Webpack Encore - Asset Management for the rest of us
(2018) Webpack Encore - Asset Management for the rest of us(2018) Webpack Encore - Asset Management for the rest of us
(2018) Webpack Encore - Asset Management for the rest of us
Stefan Adolf
 
Automatically Assessing Code Understandability: How Far Are We?
Automatically Assessing Code Understandability: How Far Are We?Automatically Assessing Code Understandability: How Far Are We?
Automatically Assessing Code Understandability: How Far Are We?
sscalabrino
 
Front End Tooling and Performance - Codeaholics HK 2015
Front End Tooling and Performance - Codeaholics HK 2015Front End Tooling and Performance - Codeaholics HK 2015
Front End Tooling and Performance - Codeaholics HK 2015
Holger Bartel
 
Ad

More from Marc Bächinger (8)

HTML5 unplugged
HTML5 unpluggedHTML5 unplugged
HTML5 unplugged
Marc Bächinger
 
Modern web application network architecture
Modern web application network architectureModern web application network architecture
Modern web application network architecture
Marc Bächinger
 
JavaScript toolchain
JavaScript toolchainJavaScript toolchain
JavaScript toolchain
Marc Bächinger
 
JQuery primer
JQuery primerJQuery primer
JQuery primer
Marc Bächinger
 
With your bare hands
With your bare handsWith your bare hands
With your bare hands
Marc Bächinger
 
Architecting non-trivial browser applications (Jazoon 2012)
Architecting non-trivial browser applications (Jazoon 2012)Architecting non-trivial browser applications (Jazoon 2012)
Architecting non-trivial browser applications (Jazoon 2012)
Marc Bächinger
 
Jax-rs-js Tutorial
Jax-rs-js TutorialJax-rs-js Tutorial
Jax-rs-js Tutorial
Marc Bächinger
 
Html5 communication
Html5 communicationHtml5 communication
Html5 communication
Marc Bächinger
 
Modern web application network architecture
Modern web application network architectureModern web application network architecture
Modern web application network architecture
Marc Bächinger
 
Architecting non-trivial browser applications (Jazoon 2012)
Architecting non-trivial browser applications (Jazoon 2012)Architecting non-trivial browser applications (Jazoon 2012)
Architecting non-trivial browser applications (Jazoon 2012)
Marc Bächinger
 
Ad

Recently uploaded (20)

AI Emotional Actors: “When Machines Learn to Feel and Perform"
AI Emotional Actors:  “When Machines Learn to Feel and Perform"AI Emotional Actors:  “When Machines Learn to Feel and Perform"
AI Emotional Actors: “When Machines Learn to Feel and Perform"
AkashKumar809858
 
Gihbli AI and Geo sitution |use/misuse of Ai Technology
Gihbli AI and Geo sitution |use/misuse of Ai TechnologyGihbli AI and Geo sitution |use/misuse of Ai Technology
Gihbli AI and Geo sitution |use/misuse of Ai Technology
zainkhurram1111
 
LSNIF: Locally-Subdivided Neural Intersection Function
LSNIF: Locally-Subdivided Neural Intersection FunctionLSNIF: Locally-Subdivided Neural Intersection Function
LSNIF: Locally-Subdivided Neural Intersection Function
Takahiro Harada
 
Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...
Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...
Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...
Aaryan Kansari
 
End-to-end Assurance for SD-WAN & SASE with ThousandEyes
End-to-end Assurance for SD-WAN & SASE with ThousandEyesEnd-to-end Assurance for SD-WAN & SASE with ThousandEyes
End-to-end Assurance for SD-WAN & SASE with ThousandEyes
ThousandEyes
 
Jira Administration Training – Day 1 : Introduction
Jira Administration Training – Day 1 : IntroductionJira Administration Training – Day 1 : Introduction
Jira Administration Training – Day 1 : Introduction
Ravi Teja
 
Introducing the OSA 3200 SP and OSA 3250 ePRC
Introducing the OSA 3200 SP and OSA 3250 ePRCIntroducing the OSA 3200 SP and OSA 3250 ePRC
Introducing the OSA 3200 SP and OSA 3250 ePRC
Adtran
 
Kubernetes Cloud Native Indonesia Meetup - May 2025
Kubernetes Cloud Native Indonesia Meetup - May 2025Kubernetes Cloud Native Indonesia Meetup - May 2025
Kubernetes Cloud Native Indonesia Meetup - May 2025
Prasta Maha
 
ECS25 - The adventures of a Microsoft 365 Platform Owner - Website.pptx
ECS25 - The adventures of a Microsoft 365 Platform Owner - Website.pptxECS25 - The adventures of a Microsoft 365 Platform Owner - Website.pptx
ECS25 - The adventures of a Microsoft 365 Platform Owner - Website.pptx
Jasper Oosterveld
 
European Accessibility Act & Integrated Accessibility Testing
European Accessibility Act & Integrated Accessibility TestingEuropean Accessibility Act & Integrated Accessibility Testing
European Accessibility Act & Integrated Accessibility Testing
Julia Undeutsch
 
Securiport - A Border Security Company
Securiport  -  A Border Security CompanySecuriport  -  A Border Security Company
Securiport - A Border Security Company
Securiport
 
AI Trends - Mary Meeker
AI Trends - Mary MeekerAI Trends - Mary Meeker
AI Trends - Mary Meeker
Razin Mustafiz
 
Palo Alto Networks Cybersecurity Foundation
Palo Alto Networks Cybersecurity FoundationPalo Alto Networks Cybersecurity Foundation
Palo Alto Networks Cybersecurity Foundation
VICTOR MAESTRE RAMIREZ
 
Grannie’s Journey to Using Healthcare AI Experiences
Grannie’s Journey to Using Healthcare AI ExperiencesGrannie’s Journey to Using Healthcare AI Experiences
Grannie’s Journey to Using Healthcare AI Experiences
Lauren Parr
 
Droidal: AI Agents Revolutionizing Healthcare
Droidal: AI Agents Revolutionizing HealthcareDroidal: AI Agents Revolutionizing Healthcare
Droidal: AI Agents Revolutionizing Healthcare
Droidal LLC
 
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Nikki Chapple
 
Cyber security cyber security cyber security cyber security cyber security cy...
Cyber security cyber security cyber security cyber security cyber security cy...Cyber security cyber security cyber security cyber security cyber security cy...
Cyber security cyber security cyber security cyber security cyber security cy...
pranavbodhak
 
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Lorenzo Miniero
 
New Ways to Reduce Database Costs with ScyllaDB
New Ways to Reduce Database Costs with ScyllaDBNew Ways to Reduce Database Costs with ScyllaDB
New Ways to Reduce Database Costs with ScyllaDB
ScyllaDB
 
Measuring Microsoft 365 Copilot and Gen AI Success
Measuring Microsoft 365 Copilot and Gen AI SuccessMeasuring Microsoft 365 Copilot and Gen AI Success
Measuring Microsoft 365 Copilot and Gen AI Success
Nikki Chapple
 
AI Emotional Actors: “When Machines Learn to Feel and Perform"
AI Emotional Actors:  “When Machines Learn to Feel and Perform"AI Emotional Actors:  “When Machines Learn to Feel and Perform"
AI Emotional Actors: “When Machines Learn to Feel and Perform"
AkashKumar809858
 
Gihbli AI and Geo sitution |use/misuse of Ai Technology
Gihbli AI and Geo sitution |use/misuse of Ai TechnologyGihbli AI and Geo sitution |use/misuse of Ai Technology
Gihbli AI and Geo sitution |use/misuse of Ai Technology
zainkhurram1111
 
LSNIF: Locally-Subdivided Neural Intersection Function
LSNIF: Locally-Subdivided Neural Intersection FunctionLSNIF: Locally-Subdivided Neural Intersection Function
LSNIF: Locally-Subdivided Neural Intersection Function
Takahiro Harada
 
Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...
Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...
Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...
Aaryan Kansari
 
End-to-end Assurance for SD-WAN & SASE with ThousandEyes
End-to-end Assurance for SD-WAN & SASE with ThousandEyesEnd-to-end Assurance for SD-WAN & SASE with ThousandEyes
End-to-end Assurance for SD-WAN & SASE with ThousandEyes
ThousandEyes
 
Jira Administration Training – Day 1 : Introduction
Jira Administration Training – Day 1 : IntroductionJira Administration Training – Day 1 : Introduction
Jira Administration Training – Day 1 : Introduction
Ravi Teja
 
Introducing the OSA 3200 SP and OSA 3250 ePRC
Introducing the OSA 3200 SP and OSA 3250 ePRCIntroducing the OSA 3200 SP and OSA 3250 ePRC
Introducing the OSA 3200 SP and OSA 3250 ePRC
Adtran
 
Kubernetes Cloud Native Indonesia Meetup - May 2025
Kubernetes Cloud Native Indonesia Meetup - May 2025Kubernetes Cloud Native Indonesia Meetup - May 2025
Kubernetes Cloud Native Indonesia Meetup - May 2025
Prasta Maha
 
ECS25 - The adventures of a Microsoft 365 Platform Owner - Website.pptx
ECS25 - The adventures of a Microsoft 365 Platform Owner - Website.pptxECS25 - The adventures of a Microsoft 365 Platform Owner - Website.pptx
ECS25 - The adventures of a Microsoft 365 Platform Owner - Website.pptx
Jasper Oosterveld
 
European Accessibility Act & Integrated Accessibility Testing
European Accessibility Act & Integrated Accessibility TestingEuropean Accessibility Act & Integrated Accessibility Testing
European Accessibility Act & Integrated Accessibility Testing
Julia Undeutsch
 
Securiport - A Border Security Company
Securiport  -  A Border Security CompanySecuriport  -  A Border Security Company
Securiport - A Border Security Company
Securiport
 
AI Trends - Mary Meeker
AI Trends - Mary MeekerAI Trends - Mary Meeker
AI Trends - Mary Meeker
Razin Mustafiz
 
Palo Alto Networks Cybersecurity Foundation
Palo Alto Networks Cybersecurity FoundationPalo Alto Networks Cybersecurity Foundation
Palo Alto Networks Cybersecurity Foundation
VICTOR MAESTRE RAMIREZ
 
Grannie’s Journey to Using Healthcare AI Experiences
Grannie’s Journey to Using Healthcare AI ExperiencesGrannie’s Journey to Using Healthcare AI Experiences
Grannie’s Journey to Using Healthcare AI Experiences
Lauren Parr
 
Droidal: AI Agents Revolutionizing Healthcare
Droidal: AI Agents Revolutionizing HealthcareDroidal: AI Agents Revolutionizing Healthcare
Droidal: AI Agents Revolutionizing Healthcare
Droidal LLC
 
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025
Nikki Chapple
 
Cyber security cyber security cyber security cyber security cyber security cy...
Cyber security cyber security cyber security cyber security cyber security cy...Cyber security cyber security cyber security cyber security cyber security cy...
Cyber security cyber security cyber security cyber security cyber security cy...
pranavbodhak
 
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Multistream in SIP and NoSIP @ OpenSIPS Summit 2025
Lorenzo Miniero
 
New Ways to Reduce Database Costs with ScyllaDB
New Ways to Reduce Database Costs with ScyllaDBNew Ways to Reduce Database Costs with ScyllaDB
New Ways to Reduce Database Costs with ScyllaDB
ScyllaDB
 
Measuring Microsoft 365 Copilot and Gen AI Success
Measuring Microsoft 365 Copilot and Gen AI SuccessMeasuring Microsoft 365 Copilot and Gen AI Success
Measuring Microsoft 365 Copilot and Gen AI Success
Nikki Chapple
 

High-Quality JavaScript