206
MODERN WEB APPLICATION DEVELOPMENT WORKFLOW

Modern Web Application Development Workflow - web2day 2014

Embed Size (px)

DESCRIPTION

Slides of my presentation for web2day 2014

Citation preview

Page 1: Modern Web Application Development Workflow - web2day 2014

MODERNWEB APPLICATIONDEVELOPMENTWORKFLOW

Page 2: Modern Web Application Development Workflow - web2day 2014

FIRST, LET’S LOOK AT THE PAST

Page 3: Modern Web Application Development Workflow - web2day 2014
Page 4: Modern Web Application Development Workflow - web2day 2014

THROW A BUNCH OF HTML FILES

Page 5: Modern Web Application Development Workflow - web2day 2014

THROW A BUNCH OF HTML FILES

ADD A COUPLE OF CSS FILES

Page 6: Modern Web Application Development Workflow - web2day 2014

THROW A BUNCH OF HTML FILES

ADD A COUPLE OF CSS FILES

PUT SOME JAVASCRIPT IN ALL THIS

Page 7: Modern Web Application Development Workflow - web2day 2014

THROW A BUNCH OF HTML FILES

ADD A COUPLE OF CSS FILES

PUT SOME JAVASCRIPT IN ALL THIS

AND CALL IT A DAY...

Page 8: Modern Web Application Development Workflow - web2day 2014

COME BACK 6 MONTHS LATER

AND TRY TO REMEMBER HOW TO MAINTAIN YOUR CODE

Page 9: Modern Web Application Development Workflow - web2day 2014
Page 10: Modern Web Application Development Workflow - web2day 2014
Page 11: Modern Web Application Development Workflow - web2day 2014
Page 12: Modern Web Application Development Workflow - web2day 2014

Node.js

≠ Server-side JavaScript

Page 13: Modern Web Application Development Workflow - web2day 2014

Node.jsstand alone JavaScript runtime

Page 14: Modern Web Application Development Workflow - web2day 2014

Node.jsstand alone JavaScript runtimeusing v8, Chrome’s JavaScript engine

Page 15: Modern Web Application Development Workflow - web2day 2014

Node.jsstand alone JavaScript applications

Page 16: Modern Web Application Development Workflow - web2day 2014

Node.jsstand alone JavaScript applicationscreated by JavaScript developers

Page 17: Modern Web Application Development Workflow - web2day 2014

Node.jsstand alone JavaScript applicationscreated by JavaScript developersfor JavaScript developers

Page 18: Modern Web Application Development Workflow - web2day 2014

BRAND NEW WORLD

Page 19: Modern Web Application Development Workflow - web2day 2014

JAVASCRIPT DEVELOPMENT TOOLS

Page 20: Modern Web Application Development Workflow - web2day 2014

JAVASCRIPT DEVELOPMENT WORKFLOW

Page 21: Modern Web Application Development Workflow - web2day 2014

A GOOD DEVELOPMENT WORKFLOW

-HELPS YOU GET STARTED

Page 22: Modern Web Application Development Workflow - web2day 2014

A GOOD DEVELOPMENT WORKFLOW

-HELPS YOU GET STARTED-MAINTAINS YOUR DEPENDENCIES

Page 23: Modern Web Application Development Workflow - web2day 2014

A GOOD DEVELOPMENT WORKFLOW

-HELPS YOU GET STARTED-MAINTAINS YOUR DEPENDENCIES-ENFORCES BEST PRACTICES

Page 24: Modern Web Application Development Workflow - web2day 2014

A GOOD DEVELOPMENT WORKFLOW

-HELPS YOU GET STARTED-MAINTAINS YOUR DEPENDENCIES-ENFORCES BEST PRACTICES-PREPARES YOUR TOOLS

Page 25: Modern Web Application Development Workflow - web2day 2014

A GOOD DEVELOPMENT WORKFLOW

-HELPS YOU GET STARTED-MAINTAINS YOUR DEPENDENCIES-ENFORCES BEST PRACTICES-PREPARES YOUR TOOLS-FIGHTS REGRESSIONS

Page 26: Modern Web Application Development Workflow - web2day 2014

A GOOD DEVELOPMENT WORKFLOW

-HELPS YOU GET STARTED-MAINTAINS YOUR DEPENDENCIES-ENFORCES BEST PRACTICES-PREPARES YOUR TOOLS-FIGHTS REGRESSIONS-EASES THE RELEASE PROCESS

Page 27: Modern Web Application Development Workflow - web2day 2014

HOW TO GET STARTED?

Page 28: Modern Web Application Development Workflow - web2day 2014
Page 29: Modern Web Application Development Workflow - web2day 2014

YEOMANBorn in 2012

Various contributors (Employees from Google, Twitter, etc)

Page 30: Modern Web Application Development Workflow - web2day 2014

YEOMAN scaffolding

- structure- compilation- static analysis- dependencies management- development tools- unit testing

Page 31: Modern Web Application Development Workflow - web2day 2014

YEOMAN download

> npm install -g yo

“-g” global install

Page 32: Modern Web Application Development Workflow - web2day 2014

YEOMANVarious generators:○ Angular○ Ember○ Backbone

And all the other popular frameworks...

Page 33: Modern Web Application Development Workflow - web2day 2014

YEOMAN angular.js generator

> npm install -g generator-angular

Page 34: Modern Web Application Development Workflow - web2day 2014

YEOMAN create an Angular project

> yo angular

Page 35: Modern Web Application Development Workflow - web2day 2014

Select some dependencies

Page 36: Modern Web Application Development Workflow - web2day 2014

Choose some options

Page 37: Modern Web Application Development Workflow - web2day 2014

It creates the project

Page 38: Modern Web Application Development Workflow - web2day 2014

It downloads half of the internet

Page 39: Modern Web Application Development Workflow - web2day 2014

It uses some dark magic

Page 40: Modern Web Application Development Workflow - web2day 2014

Enjoy the view, Yeoman takes care of everything…

Page 41: Modern Web Application Development Workflow - web2day 2014

What does the result look like?

Page 42: Modern Web Application Development Workflow - web2day 2014

STRUCTURE

Page 43: Modern Web Application Development Workflow - web2day 2014

CONTENT

Page 44: Modern Web Application Development Workflow - web2day 2014

DEPENDENCIES

Page 45: Modern Web Application Development Workflow - web2day 2014

DEV TOOLS

Page 46: Modern Web Application Development Workflow - web2day 2014

IT’S MAGIC!and it will be your job to maintain it...

Page 47: Modern Web Application Development Workflow - web2day 2014

HAPPY?

Page 48: Modern Web Application Development Workflow - web2day 2014

Thierry Lau

“Build your own Yeoman generator”this afternoon at 2pm

Page 49: Modern Web Application Development Workflow - web2day 2014

BUT HOW DOES IT WORK?

Page 50: Modern Web Application Development Workflow - web2day 2014

YEOMAN HAS FRIENDS

Page 51: Modern Web Application Development Workflow - web2day 2014

BOWER

Page 52: Modern Web Application Development Workflow - web2day 2014
Page 53: Modern Web Application Development Workflow - web2day 2014

GRUNT

Page 54: Modern Web Application Development Workflow - web2day 2014
Page 55: Modern Web Application Development Workflow - web2day 2014

GULP

Page 56: Modern Web Application Development Workflow - web2day 2014
Page 57: Modern Web Application Development Workflow - web2day 2014

AND OTHERS

Page 58: Modern Web Application Development Workflow - web2day 2014

DEPENDENCIES MANAGEMENT

Page 59: Modern Web Application Development Workflow - web2day 2014

BOWER

Page 60: Modern Web Application Development Workflow - web2day 2014
Page 61: Modern Web Application Development Workflow - web2day 2014

BOWERPackage manager for the web

Born in 2012

Created by Twitter and other contributors over time

Page 62: Modern Web Application Development Workflow - web2day 2014

BOWER Download

> npm install -g bower

Page 63: Modern Web Application Development Workflow - web2day 2014

Find a package: bower search

Page 64: Modern Web Application Development Workflow - web2day 2014

Find more information: bower info

Page 65: Modern Web Application Development Workflow - web2day 2014

BOWER Add a specific dependency

> bower install jquery#1.10.2 --save

install jquery and save this new dependency

Page 66: Modern Web Application Development Workflow - web2day 2014

BOWER runtime dependencies in bower.json

Page 67: Modern Web Application Development Workflow - web2day 2014

DEPENDENCIES

Page 68: Modern Web Application Development Workflow - web2day 2014

LOCATION

Page 69: Modern Web Application Development Workflow - web2day 2014

BOWER Add all your dependencies

> bower install

Page 70: Modern Web Application Development Workflow - web2day 2014

See your dependencies: bower list

Page 71: Modern Web Application Development Workflow - web2day 2014

BOWER Package management always comes with its set of problems:

Page 72: Modern Web Application Development Workflow - web2day 2014

BOWER Package management always comes with its set of problems:- how can I create a new package?

Page 73: Modern Web Application Development Workflow - web2day 2014

BOWER Package management always comes with its set of problems:- how can I create a new package?- how can I host a bower repository?

Page 74: Modern Web Application Development Workflow - web2day 2014

BOWER Package management always comes with its set of problems:- how can I create a new package?- how can I host a bower repository?- what kind of exotic tools will I have to use?

Page 75: Modern Web Application Development Workflow - web2day 2014

Create a bower package: bower init

Page 76: Modern Web Application Development Workflow - web2day 2014

BOWER Host a bower repository

Page 77: Modern Web Application Development Workflow - web2day 2014

BOWER Host a bower repository

> git init

Page 78: Modern Web Application Development Workflow - web2day 2014

BOWER Host a bower repository

> git init> git add .

Page 79: Modern Web Application Development Workflow - web2day 2014

BOWER Host a bower repository

> git init> git add .> git commit -m “Initial commit.”

Page 80: Modern Web Application Development Workflow - web2day 2014

BOWER Host a bower repository

> git init> git add .> git commit -m “Initial commit.”> git remote add origin …

Page 81: Modern Web Application Development Workflow - web2day 2014

BOWER Host a bower repository

> git init> git add .> git commit -m “Initial commit.”> git remote add origin …> git push origin master

Page 82: Modern Web Application Development Workflow - web2day 2014

BOWER Host a bower repository

SVN support has been added with bower 1.3for those who care….

Page 83: Modern Web Application Development Workflow - web2day 2014

BOWER Use bower with Git

> bower install https://myrepository.git

Page 84: Modern Web Application Development Workflow - web2day 2014

BOWER Host multiple versions

> git tag -a 1.4 -m 'version 1.4'

> bower install https://myrepository.git#1.4

Page 85: Modern Web Application Development Workflow - web2day 2014

BOWER Host multiple versions

Use semantic versioning to easily let your consumers handle API breakages

Page 86: Modern Web Application Development Workflow - web2day 2014

BOWER Download

> bower install jquery> bower install git://github.com/jquery/jquery.git

Page 87: Modern Web Application Development Workflow - web2day 2014

BOWER Download

> bower install jquery> bower install git://github.com/jquery/jquery.git

How do this work?

Page 88: Modern Web Application Development Workflow - web2day 2014

BOWER Registry

https://github.com/bower/registry

A simple web server listing Git repository URLs

Page 89: Modern Web Application Development Workflow - web2day 2014

BOWER Register

> bower register myrepository https://…git

> bower install myrepository

Page 90: Modern Web Application Development Workflow - web2day 2014

BUILD

Page 91: Modern Web Application Development Workflow - web2day 2014
Page 92: Modern Web Application Development Workflow - web2day 2014

GRUNT GULP

Page 93: Modern Web Application Development Workflow - web2day 2014

CONFIGURATION

GULP

CODE

GRUNT

Page 94: Modern Web Application Development Workflow - web2day 2014

EQUALLY POWERFUL

Page 95: Modern Web Application Development Workflow - web2day 2014

GRUNT is a bit older so its

ECOSYSTEM is more mature

Page 96: Modern Web Application Development Workflow - web2day 2014

Grunt and Gulpdevelopment tools dependencies in package.json

>npm install

Page 97: Modern Web Application Development Workflow - web2day 2014

DEV TOOLS

Page 98: Modern Web Application Development Workflow - web2day 2014

GRUNT

Page 99: Modern Web Application Development Workflow - web2day 2014
Page 100: Modern Web Application Development Workflow - web2day 2014

GRUNT configuration over code

grunt.initConfig({ lint: { src: 'src/<%= pkg.name %>.js' }, concat: { src: [ '<banner:meta.banner>' , '<file_strip_banner:src/<%= pkg.name %>.js>' ], dest: '<%= pkg.name %>.js' }});

Page 101: Modern Web Application Development Workflow - web2day 2014

GRUNT

Configuration in Gruntfile.js

Page 102: Modern Web Application Development Workflow - web2day 2014

GRUNT

Global install before Grunt 0.4

Updating Grunt cannot break existing projects anymore

Page 103: Modern Web Application Development Workflow - web2day 2014

GRUNT gruntfile.js structure

3 parts:-Task loading-Task configuration-Task registration

Page 104: Modern Web Application Development Workflow - web2day 2014

GRUNT

An example: Static code analysis with JSHINT

Page 105: Modern Web Application Development Workflow - web2day 2014

GRUNT

Page 106: Modern Web Application Development Workflow - web2day 2014

HOW DO YOU USE IT?

>grunt

>grunt jshint:all

Page 107: Modern Web Application Development Workflow - web2day 2014

GULP

Page 108: Modern Web Application Development Workflow - web2day 2014
Page 109: Modern Web Application Development Workflow - web2day 2014

GULP code over configuration

gulp.src('src/main.mycss') .pipe(stylus()) .pipe(rename({ ext: 'css' })) .pipe(autoprefixer()) .pipe(cssmin()) .pipe(header('/* All Right Reserved */' )) .pipe(gulp.dest( 'dist'))

Page 110: Modern Web Application Development Workflow - web2day 2014

GULPConfiguration in Gulpfile.js

Page 111: Modern Web Application Development Workflow - web2day 2014

GULP gulpfile.js structure

3 parts:- task loading- task configuration- task registration

Page 112: Modern Web Application Development Workflow - web2day 2014

GULP

Page 113: Modern Web Application Development Workflow - web2day 2014

SOUNDS FAMILIAR?

Page 114: Modern Web Application Development Workflow - web2day 2014

GULP differences with Grunt

node.js streams (asynchronous by nature)

nice and simple api

less IO operations

Page 115: Modern Web Application Development Workflow - web2day 2014

GULP Task

define a task

gulp.task('name', ['deps'], function(done) { return stream || promise|| done();});

Page 116: Modern Web Application Development Workflow - web2day 2014

GULP Watch

react to changes on the file system

gulp.watch('src/**/*.js', ['test', 'compile']);

Page 117: Modern Web Application Development Workflow - web2day 2014

GULP Src

create a stream from the file system

gulp.src(['src/**/*.js', 'test/**/*.js'])

Page 118: Modern Web Application Development Workflow - web2day 2014

GULP Dest

create a stream to the file system

gulp.src('src') .pipe(...) .pipe(gulp.dest( 'dist'));

Page 119: Modern Web Application Development Workflow - web2day 2014

GULP Start

Start a task

gulp.task('default', ['clean'], function(){ gulp.start('lint', 'min', 'concat');});

Page 120: Modern Web Application Development Workflow - web2day 2014

GULP Execution

computed using the dependencies

concurrent execution with Orchestrator

adopted by Grunt 1.0 too

Page 121: Modern Web Application Development Workflow - web2day 2014

BUILD TASKS

Page 122: Modern Web Application Development Workflow - web2day 2014

STATIC ANALYSISgrunt-contrib-jshintgulp-jshint

Detect coding errors in your JavaScript files

Page 123: Modern Web Application Development Workflow - web2day 2014

STATIC ANALYSISVarious style of reports (checkstyle, html, etc)Configuration in .jshtinrc

Page 124: Modern Web Application Development Workflow - web2day 2014

COFFEESCRIPTgrunt-contrib-coffeegulp-coffee

Compile CoffeeScript source code to JavaScript

Page 125: Modern Web Application Development Workflow - web2day 2014

RESPONSIVE IMAGESgrunt-responsive-imagesgulp-responsive-images

Produce images at different sizes for responsive websites

Page 126: Modern Web Application Development Workflow - web2day 2014

COMPRESS IMAGESgrunt-contrib-imagemingulp-imagemin

Compress and optimize images

Page 127: Modern Web Application Development Workflow - web2day 2014

MINIFICATIONgrunt-contrib-uglifygulp-uglify

Reduce the size of JavaScript files

Page 128: Modern Web Application Development Workflow - web2day 2014

CSS TRIMMINGgrunt-uncssgulp-uncss-task

Remove unused CSS rules

Page 129: Modern Web Application Development Workflow - web2day 2014

LIVE RELOADgrunt-contrib-watchgulp-livereload

Reload automatically the web application if some files have been changed

Page 130: Modern Web Application Development Workflow - web2day 2014

initconcat

jshintminunit

serverendtoend

watch

WORKFLOW

Page 131: Modern Web Application Development Workflow - web2day 2014

SASS

Page 132: Modern Web Application Development Workflow - web2day 2014
Page 133: Modern Web Application Development Workflow - web2day 2014

SASS- variables

$font-stack: Helvetica, sans-serif;$primary-color: #333;

body { font: 100% $font-stack; color: $primary-color;}

Page 134: Modern Web Application Development Workflow - web2day 2014

SASS- nesting

nav { ul { margin: 0; padding: 0; list-style: none; }

li { display: inline-block; }

a { display: block; padding: 6px 12px; text-decoration: none; }}

Page 135: Modern Web Application Development Workflow - web2day 2014

SASS- import- partials

// base.scss@import ‘reset’;

body { font: 100% Helvetica, sans-serif; color: #333;}

// _reset.scss

html,body { margin: 0; padding: 0;}

Page 136: Modern Web Application Development Workflow - web2day 2014

SASS- mixins

@mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; border-radius: $radius;}

.box { @include border-radius(10px); }

Page 137: Modern Web Application Development Workflow - web2day 2014

SASS- inheritance

.message { border: 1px solid #ccc; padding: 10px; color: #333;}

.success { @extend .message; border-color: green;}

.error { @extend .message; border-color: red;}

Page 138: Modern Web Application Development Workflow - web2day 2014

SASS- operators

.container { width: 100%; }

article[role="main"] { float: left; width: 600px / 960px * 100%;}

Page 139: Modern Web Application Development Workflow - web2day 2014

SASSgrunt-contrib-sassgulp-sass

Compile SASS to CSS

Page 140: Modern Web Application Development Workflow - web2day 2014

TESTING

Page 141: Modern Web Application Development Workflow - web2day 2014

UNIT TESTSFrameworks: Jasmine, Mocha, QUnit

describe("A suite", function() { it("contains spec with an expectation", function() { expect(true).toBe(true); });});

Page 142: Modern Web Application Development Workflow - web2day 2014

RUNNING TESTSRunner: Karma

// Gruntfile.jskarma: { unit: { configFile: 'karma.conf.js' }}

Page 143: Modern Web Application Development Workflow - web2day 2014

module.exports = function(config) { config.set({ frameworks: [ 'jasmine'], singleRun: true, browsers: ['Chrome','Firefox','Safari'], files: [ '**/*.js' ], plugins: [ 'karma-jasmine', 'karma-chrome-launcher' , 'karma-firefox-launcher' , 'karma-safari-launcher' ], exclude: [], reporters: ['progress'], colors: true, logLevel: config.LOG_INFO, captureTimeout: 60000 });};

Page 144: Modern Web Application Development Workflow - web2day 2014

FUNCTIONAL TESTSPhantomJS & SlimerJS - headless browsers

CasperJS - navigation scripting & testing utility

Page 145: Modern Web Application Development Workflow - web2day 2014

PHANTOMJSHeadless WebKit scriptable with JavaScript

console.log('Loading a web page');var page = require('webpage').create();var url = 'http://www.phantomjs.org/';page.open(url, function (status) { //Page is loaded! phantom.exit();});

Page 146: Modern Web Application Development Workflow - web2day 2014

TESTINGModern.ie - for the poor souls who have to support Windows XP and IE6 IE8

Page 147: Modern Web Application Development Workflow - web2day 2014

TESTINGCode Coverage: Istanbul

Page 148: Modern Web Application Development Workflow - web2day 2014

TESTINGHudson/Jenkins integration?

karma-junit-reporter (JUnit reports)karma-coverage (Cobertura reports)jshint (Checkstyle reports)

Page 149: Modern Web Application Development Workflow - web2day 2014
Page 150: Modern Web Application Development Workflow - web2day 2014

KARMA + GRUNT/GULP

Test your application on various devices

Page 151: Modern Web Application Development Workflow - web2day 2014
Page 152: Modern Web Application Development Workflow - web2day 2014
Page 153: Modern Web Application Development Workflow - web2day 2014

CHROME DEVTOOLS

Page 154: Modern Web Application Development Workflow - web2day 2014

F12or

Ctrl+Shift+i

Page 155: Modern Web Application Development Workflow - web2day 2014

ELEMENTS

Page 156: Modern Web Application Development Workflow - web2day 2014
Page 157: Modern Web Application Development Workflow - web2day 2014
Page 158: Modern Web Application Development Workflow - web2day 2014
Page 159: Modern Web Application Development Workflow - web2day 2014

NETWORK

Page 160: Modern Web Application Development Workflow - web2day 2014
Page 161: Modern Web Application Development Workflow - web2day 2014
Page 162: Modern Web Application Development Workflow - web2day 2014

HAR HTTP Archive

Page 163: Modern Web Application Development Workflow - web2day 2014
Page 164: Modern Web Application Development Workflow - web2day 2014

SOURCES

Page 165: Modern Web Application Development Workflow - web2day 2014

WORKSPACE

Page 166: Modern Web Application Development Workflow - web2day 2014
Page 167: Modern Web Application Development Workflow - web2day 2014

SNIPPETS

Page 168: Modern Web Application Development Workflow - web2day 2014
Page 169: Modern Web Application Development Workflow - web2day 2014

Chrome Devtools Options

Page 170: Modern Web Application Development Workflow - web2day 2014
Page 171: Modern Web Application Development Workflow - web2day 2014

TIMELINE

Page 172: Modern Web Application Development Workflow - web2day 2014
Page 173: Modern Web Application Development Workflow - web2day 2014
Page 174: Modern Web Application Development Workflow - web2day 2014
Page 175: Modern Web Application Development Workflow - web2day 2014

CHROMECANARY

Page 176: Modern Web Application Development Workflow - web2day 2014
Page 177: Modern Web Application Development Workflow - web2day 2014
Page 178: Modern Web Application Development Workflow - web2day 2014
Page 179: Modern Web Application Development Workflow - web2day 2014

Custom events

console.timeStamp

Page 180: Modern Web Application Development Workflow - web2day 2014

PERFORMANCES

Page 181: Modern Web Application Development Workflow - web2day 2014

MEMORY LEAKS

Page 182: Modern Web Application Development Workflow - web2day 2014
Page 183: Modern Web Application Development Workflow - web2day 2014
Page 184: Modern Web Application Development Workflow - web2day 2014
Page 185: Modern Web Application Development Workflow - web2day 2014

Compare memory snapshots

Page 186: Modern Web Application Development Workflow - web2day 2014
Page 187: Modern Web Application Development Workflow - web2day 2014

Think about browsers extensions

Page 188: Modern Web Application Development Workflow - web2day 2014

CPUPROFILING

Page 189: Modern Web Application Development Workflow - web2day 2014
Page 190: Modern Web Application Development Workflow - web2day 2014

AUDITS

Page 191: Modern Web Application Development Workflow - web2day 2014
Page 192: Modern Web Application Development Workflow - web2day 2014

Customize the Chrome Devtools

Page 193: Modern Web Application Development Workflow - web2day 2014

New panels

Page 194: Modern Web Application Development Workflow - web2day 2014
Page 195: Modern Web Application Development Workflow - web2day 2014
Page 196: Modern Web Application Development Workflow - web2day 2014

MOBILE FIRST

Page 197: Modern Web Application Development Workflow - web2day 2014

EMULATION

Page 198: Modern Web Application Development Workflow - web2day 2014
Page 199: Modern Web Application Development Workflow - web2day 2014

REAL DEVICE

Page 200: Modern Web Application Development Workflow - web2day 2014
Page 201: Modern Web Application Development Workflow - web2day 2014
Page 202: Modern Web Application Development Workflow - web2day 2014
Page 203: Modern Web Application Development Workflow - web2day 2014
Page 204: Modern Web Application Development Workflow - web2day 2014

TO SUM UP

Page 205: Modern Web Application Development Workflow - web2day 2014

YEOMAN + BOWER + GRUNT/GULPand Chrome...

=

AWESOME

Page 206: Modern Web Application Development Workflow - web2day 2014

THANKS!Stéphane BégaudeauTwitter: @sbegaudeauGoogle+: +stephane.begaudeau

The research leading to these results has received funding from the European Union’s Seventh Framework Program (FP7/2007-2013) for CRYSTAL – Critical System Engineering Acceleration Joint Undertaking under grant agreement № 332830 and from specific national programs and/or funding authorities.