131
10/09/15 A-stad meetup Kris Waelkens Analyst Dries Droesbeke Architect Jan-Bart Vervoort Back-end Dev Mante Bridts Front-end Dev Charlie Misonne Testing

A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Embed Size (px)

Citation preview

Page 1: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

10/09/15A-stad meetup

Kris Waelkens

Analyst

Dries Droesbeke

Architect

Jan-Bart Vervoort

Back-end Dev

Mante Bridts

Front-end Dev

Charlie Misonne

Testing

Page 2: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

■wifi: ‘DigAnt Free Wifi’■hashtag: #digantcafe■instagram: @digipolis_antwerpen■twitter: @dgplsantwerpen■slideshare:

http://www.slideshare.net/digipolisantwerpen

■linkedin: https://www.linkedin.com/company/digipolis

■facebook: https://www.facebook.com/Digipolis/

Some info

Page 3: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

What? Why?A-stad

Page 4: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Centrale Referentie Systemen

burger / medewerker

...

Page 5: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 6: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

So it begins...

Page 7: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Concept

Page 8: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

mei ‘14: release beta.antwerpen.be

Page 9: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Centrale Referentie Systemen

burger

Page 10: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Centrale Referentie Systemen

A-profiel (user app)

meldingene-loket notificati

on redactie ... helpcenter

cart(betalen) search stadspla

n

burger

Page 11: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

no comment

Page 12: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Centrale Referentie Systemen

A-profiel (user app)

e-loket notification redactie ... helpcent

ercart

(betalen) search stadsplan

burger

meldingen

Page 13: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

navoor

Page 14: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Centrale Referentie Systemen

A-profiel (user app)

meldingene-loket notificati

on redactie ... helpcenter

cart(betalen) search stadspla

n

burger

Page 15: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Centrale Referentie Systemen

A-profiel (user app)

meldingene-loket notificati

on redactie ... helpcenter

vacatures

contact-boek

Onboarding

medewerker

Page 16: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Centrale Referentie Systemen

A-profiel (user app)

meldingene-loket notificati

on redactie ... helpcenter

cart(betalen) search stadspla

n

burger

API’s

Work in progress:

Page 17: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

■API’s & SDK: developer portal■Challenge: zero downtime deployment■Reusable backend “engines”-> Antwerp City Platform as a Service (AcPaaS)-> Check http://antwerpen.digipolis.be!!!

Work in progress...

Page 18: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Overview architectureA-stad

Page 19: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Overview

Page 20: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Frontend

Page 21: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Backend

Page 22: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Databases

Page 23: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Integrations

Page 24: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Infrastructure

Page 25: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

ALM

Page 26: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Tips■ automate everything from day 1■ use vagrant with production cookbooks■ create a skeleton with separate

packages(npm,bower,NuGet,composer)■ version your api’s/packages with semver■ code review with pull requests■ Write tests■ separation by isolation #(micro)services■ no agile excuses!

Page 27: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Backend@janbart

A-stad

Page 28: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 29: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

vagrant up

Page 30: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

vagrant up

Page 31: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

pm2 start processes.json

Page 32: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

pm2 start processes.json

Page 33: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 34: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 35: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 36: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Favorite

Page 37: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 38: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 39: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

app.put('/srv/overzicht/d/items/:itemId/favorite', function(req, res) { var overviewItemId = req.params.itemId; var favorite = req.body.favorite; app.astad.acl.requireLogin(app, req, res, function() { var user = req.adata.user; var context = users.hasContext(req, "employee") ? "employee" : "user"; favorites.favoriteItem(user, context, overviewItemId, favorite, function(err, data) { if (err) {

return res.status(500).json(getError(err.message)); } else if (data == null) { return res.status(404).json(getError('Kon favoriet niet

vinden.')); } else { return res.json(getResponse(data)); } }); }, function() { return res.status(401).json(getNoPermission()); });

});

Page 40: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

app.put('/srv/overzicht/d/items/:itemId/favorite', access.canFavorite(app), function(req, res) { var overviewItemId = req.params.itemId; var favorite = req.body.favorite; var user = req.adata.user; var context = users.hasContext(req, "employee") ? "employee" : "user"; favorites.favoriteItem(user, context, overviewItemId, favorite, function(err, data) { if (err) { return res.status(500).json(getError(err.message)); } else if (data == null) { return res.status(404).json(getError('Kon favoriet niet vinden.')); } else { return res.json(getResponse(data)); });});

Page 41: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

/*** Save an item as favorite*/function favoriteItem(user, context, overviewItemId, favorite, callback) { var userId = user.id; async.waterfall([ function getOverviewObject(cb) { OverviewItem.findById(overviewItemId, cb); }, function userHasFavorites(overviewObject, cb) { if (overviewObject == null) { return cb(new Error('OverviewItem bestaat niet.')); } Favorite.findOne({userId: userId, context: context}, cb); }, function createFavoritesObjectIfNeeded(favoriteObject, cb) { if (favoriteObject == null) { if (favorite) { // Create favorite object for user return saveFavorite(userId, context, overviewItemId, function saved(err, data) { return favoriteSaved(err, data, overviewItemId, cb); }); } else { return cb(new Error("Dit item behoort nog niet tot je favorieten.")); } } else { var foundId = favoriteObject.overviewItemIds.indexOf(overviewItemId) !== -1; if (foundId) { if (favorite) { return cb(new Error("Je hebt dit item al toegevoegd aan je favorieten.")); } else { favoriteObject.overviewItemIds.pull(mongoose.Types.ObjectId(overviewItemId)); return favoriteObject.save(function saved(err, data) { return favoriteSaved(err, data, overviewItemId, cb); }); } } else { if (favorite) { favoriteObject.overviewItemIds.push(mongoose.Types.ObjectId(overviewItemId)); return favoriteObject.save(function saved(err, data) { return favoriteSaved(err, data, overviewItemId, cb); }); } else { return cb(new Error("Je moet dit item toevoegen aan je favorieten voordat je het kan verwijderen uit je favorieten.")); } } } } ], callback);}

Page 42: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

/*** Save an item as favorite*/function favoriteItem(user, context, overviewItemId, favorite, callback) {

async.waterfall([ function getOverviewObject(cb) {}, function userHasFavorites(overviewObject, cb) {}, function createFavoritesObjectIfNeeded(favoriteObject, cb) {} ], callback);}

Page 43: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Test it.™

Page 44: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 45: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 46: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 47: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 48: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 49: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Node Package Manager

NPM

Page 50: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

NPM-modules

Page 51: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 52: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 53: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 54: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 55: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Hi, I'm Betty.

Page 56: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 57: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 58: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Developer x

Developer x

Developer y

Developer z

Page 59: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Developer x

Page 60: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Developer 1

Developer 2

Page 61: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Front-end developmentA-stad

Page 62: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 63: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 64: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 65: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 66: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 67: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 68: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

vagrant up

Page 69: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 70: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 71: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 72: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 73: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 74: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 75: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 76: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 77: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 78: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 79: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 80: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Minifying

JS hint Sass to css

Watch

Sprite generator

Concat

Strip & uglify

Bless

i18n

Page 81: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 82: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 83: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 84: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 85: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 86: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 87: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 88: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

■API: styling API with variables, mixins, functions

■Base: styling for base HTML elements

■Grid: the Singularity grid■Helpers: definition of helper classes

Sass-kit

Page 89: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

■Components:●Collections of HTML elements that form a new element together

●Directives

■Vendor: styling overrides for vendor components

Sass-kit

Page 90: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 91: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 92: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 93: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 94: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

improvescode quality!

Page 95: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 96: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

meldingen

A-kaart

notificationredactie

helpcenter

cart(betalen)

search

stadsplan

ui

user

contactboek

boodschap

vacature

Page 97: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

meldingen

A-kaart

notificationredactie

helpcenter

cart(betalen)

search

stadsplan

ui

user

contactboek

boodschap

vacature

Page 98: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 99: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Single Point of Failure...

Page 100: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 101: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Contactboek app

Page 102: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 103: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Template

Service

Controller

Page 104: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

$scope

Page 105: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Template

Page 106: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Controller

Page 107: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Service

Page 108: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Service

Page 109: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Service

Page 110: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Directives

Page 111: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

<data-ng-if>

Page 112: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 113: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

<data-ng-repeat>

Page 114: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 115: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

<a>

Page 116: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 117: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 118: A-stad: een mix van krachtige, nieuwe front- en backend technologieën
Page 119: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Vragen?

Page 120: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Waarom en hoe automatiseren- Charlie Misonne

Automated RegressionTesting

Page 121: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Een verandering impacteert een voorheen werkend systeem op een negatieve manier

Wat is regressie

Page 122: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Testautomatisatie - algemeen

Page 123: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Agile? ⇒ Automatiseer!

Korte sprintsSnelle releasesContinuous integration

Waarom?

Page 124: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Verschillende niveaus

Begin onderaan!

5min

10min

90min

... uren, dagen??

Page 125: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

UI test-automatisatie!

Page 126: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

■Repetitieve testen?

■Regressie testen = repetitief⇒ Ideaal voor automatisatie!

Wanneer UI automatisatie?

Page 127: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Automation paradox

Veel veranderingen

Veel regressietesten nodig Automatisatie is moeilijk

Page 128: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Demo...

Page 129: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Protractor vs. Selenium...

SeleniumWebdriver

Page 130: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

■Angular Locatorselement(by.binding('item.assignee.fullName'))element(by.repeater('answer in question.answers'))

■Wacht op page sync ($timeout, $http)

■A-stad technologieën

Waarom Protractor?

Page 131: A-stad: een mix van krachtige, nieuwe front- en backend technologieën

Demo...

Protractor