SlideShare a Scribd company logo
1 of 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
■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
What? Why?
A-stad
Centrale Referentie Systemen
burger / medewerker
...
So it begins...
Concept
mei ‘14: release beta.antwerpen.be
Centrale Referentie Systemen
burger
Centrale Referentie Systemen
A-profiel (user app)
meldingene-loket notification redactie ... helpcenter
cart
(betalen)
search stadsplan
burger
no comment
Centrale Referentie Systemen
A-profiel (user app)
e-loket notification redactie ... helpcenter
cart
(betalen)
search stadsplan
burger
meldingen
navoor
Centrale Referentie Systemen
A-profiel (user app)
meldingene-loket notification redactie ... helpcenter
cart
(betalen)
search stadsplan
burger
Centrale Referentie Systemen
A-profiel (user app)
meldingene-loket notification redactie ... helpcenter vacatures
contact-
boek
Onboarding
medewerker
Centrale Referentie Systemen
A-profiel (user app)
meldingene-loket notification redactie ... helpcenter
cart
(betalen)
search stadsplan
burger
API’sWork in progress:
■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...
Overview architecture
A-stad
Overview
Frontend
Backend
Databases
Integrations
Infrastructure
ALM
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!
Backend
@janbart
A-stad
vagrant up
vagrant up
pm2 start
processes.json
pm2 start
processes.json
Favorite
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());
});
});
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));
});
});
/**
* 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);
}
/**
* 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);
}
Test it.™
Node Package Manager
NPM
NPM-modules
Hi, I'm Betty.
Developer x
Developer x
Developer y
Developer z
Developer x
Developer 1
Developer 2
Front-end development
A-stad
vagrant up
Minifying
JS hint Sass to
css
Watch
Sprite
generator
Concat
Strip & uglify
Bless
i18n
■API: styling API with variables, mixins,
functions
■Base: styling for base HTML elements
■Grid: the Singularity grid
■Helpers: definition of helper classes
Sass-kit
■Components:
●Collections of HTML elements that
form a new element together
●Directives
■Vendor: styling overrides for vendor
components
Sass-kit
improves
code quality!
meldingen
A-kaart
notificationredactie
helpcenter
cart
(betalen)
search
stadsplan
ui
user
contactboek
boodschap
vacature
meldingen
A-kaart
notificationredactie
helpcenter
cart
(betalen)
search
stadsplan
ui
user
contactboek
boodschap
vacature
Single Point of
Failure...
Contactboek app
Template
Service
Controller
$scope
Template
Controller
Service
Service
Service
Directives
<data-ng-if>
<data-ng-repeat>
<a>
Vragen?
Waarom en hoe automatiseren
- Charlie Misonne
Automated
RegressionTesting
Een verandering
impacteert een voorheen
werkend systeem op een
negatieve manier
Wat is regressie
Testautomatisatie -
algemeen
Agile? ⇒ Automatiseer!
Korte sprints
Snelle releases
Continuous integration
Waarom?
Verschillende niveaus
Begin
onderaan!
5min
10min
90min
... uren, dagen??
UI test-automatisatie!
■Repetitieve testen?
■Regressie testen = repetitief
⇒ Ideaal voor automatisatie!
Wanneer UI automatisatie?
Automation paradox
Veel veranderingen
Veel regressietesten nodig Automatisatie is moeilijk
Demo...
Protractor vs. Selenium...
Selenium
Webdriver
■Angular Locators
element(by.binding('item.assignee.fullName'))
element(by.repeater('answer in question.answers'))
■Wacht op page sync ($timeout, $http)
■A-stad technologieën
Waarom Protractor?
Demo...
Protractor

More Related Content

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

Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Matt Raible
 
BACKBONE.JS & UNDERSCORE.JS
BACKBONE.JS & UNDERSCORE.JSBACKBONE.JS & UNDERSCORE.JS
BACKBONE.JS & UNDERSCORE.JSDesignveloper
 
UX Analytics for Data-driven Product Development
UX Analytics for Data-driven Product DevelopmentUX Analytics for Data-driven Product Development
UX Analytics for Data-driven Product DevelopmentTrieu Nguyen
 
Flexible Event Tracking (Paul Gebheim)
Flexible Event Tracking (Paul Gebheim)Flexible Event Tracking (Paul Gebheim)
Flexible Event Tracking (Paul Gebheim)MongoSF
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data BindingEric Maxwell
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...mharkus
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!Craig Schumann
 
VueJS Introduction
VueJS IntroductionVueJS Introduction
VueJS IntroductionDavid Ličen
 
SharePoint Saturday Belgium 2018 - APIs, APIs everywhere!
SharePoint Saturday Belgium 2018 - APIs, APIs everywhere!SharePoint Saturday Belgium 2018 - APIs, APIs everywhere!
SharePoint Saturday Belgium 2018 - APIs, APIs everywhere!Sébastien Levert
 
APIs, APIs Everywhere!
APIs, APIs Everywhere!APIs, APIs Everywhere!
APIs, APIs Everywhere!BIWUG
 
Telecom datascience master_public
Telecom datascience master_publicTelecom datascience master_public
Telecom datascience master_publicVincent Michel
 
AnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyAnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyKiana Tennyson
 
The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)
The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)
The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)David Pichsenmeister
 
Introduction to iOS 9 (Xamarin Evolve 2016)
Introduction to iOS 9 (Xamarin Evolve 2016)Introduction to iOS 9 (Xamarin Evolve 2016)
Introduction to iOS 9 (Xamarin Evolve 2016)Craig Dunn
 
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c(1)
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c(1)Deck 8983a1d9-68df-4447-8481-3b4fd0de734c(1)
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c(1)Thinkful
 

Similar to A-stad: een mix van krachtige, nieuwe front- en backend technologieën (20)

Korhan bircan
Korhan bircanKorhan bircan
Korhan bircan
 
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
 
BACKBONE.JS & UNDERSCORE.JS
BACKBONE.JS & UNDERSCORE.JSBACKBONE.JS & UNDERSCORE.JS
BACKBONE.JS & UNDERSCORE.JS
 
UX Analytics for Data-driven Product Development
UX Analytics for Data-driven Product DevelopmentUX Analytics for Data-driven Product Development
UX Analytics for Data-driven Product Development
 
Flexible Event Tracking (Paul Gebheim)
Flexible Event Tracking (Paul Gebheim)Flexible Event Tracking (Paul Gebheim)
Flexible Event Tracking (Paul Gebheim)
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
 
Vanjs backbone-powerpoint
Vanjs backbone-powerpointVanjs backbone-powerpoint
Vanjs backbone-powerpoint
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!
 
Data Binding
Data BindingData Binding
Data Binding
 
VueJS Introduction
VueJS IntroductionVueJS Introduction
VueJS Introduction
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
SharePoint Saturday Belgium 2018 - APIs, APIs everywhere!
SharePoint Saturday Belgium 2018 - APIs, APIs everywhere!SharePoint Saturday Belgium 2018 - APIs, APIs everywhere!
SharePoint Saturday Belgium 2018 - APIs, APIs everywhere!
 
APIs, APIs Everywhere!
APIs, APIs Everywhere!APIs, APIs Everywhere!
APIs, APIs Everywhere!
 
Telecom datascience master_public
Telecom datascience master_publicTelecom datascience master_public
Telecom datascience master_public
 
AnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyAnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior Creatively
 
The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)
The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)
The Hitchhikers Guide To Html5 Offline Strategies (+firefoxOS)
 
Mobile optimization
Mobile optimizationMobile optimization
Mobile optimization
 
Introduction to iOS 9 (Xamarin Evolve 2016)
Introduction to iOS 9 (Xamarin Evolve 2016)Introduction to iOS 9 (Xamarin Evolve 2016)
Introduction to iOS 9 (Xamarin Evolve 2016)
 
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c(1)
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c(1)Deck 8983a1d9-68df-4447-8481-3b4fd0de734c(1)
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c(1)
 

More from Digipolis Antwerpen

Meetup 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor ...
Meetup 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor ...Meetup 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor ...
Meetup 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor ...Digipolis Antwerpen
 
Meet-up 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor...
Meet-up 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor...Meet-up 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor...
Meet-up 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor...Digipolis Antwerpen
 
Infobundel meetup app van't stad
Infobundel meetup app van't stadInfobundel meetup app van't stad
Infobundel meetup app van't stadDigipolis Antwerpen
 
Meetup 24/10/2019 - Slimme IT-oplossingen voor steden en gemeenten: het open ...
Meetup 24/10/2019 - Slimme IT-oplossingen voor steden en gemeenten: het open ...Meetup 24/10/2019 - Slimme IT-oplossingen voor steden en gemeenten: het open ...
Meetup 24/10/2019 - Slimme IT-oplossingen voor steden en gemeenten: het open ...Digipolis Antwerpen
 
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinMeetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinDigipolis Antwerpen
 
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinMeetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinDigipolis Antwerpen
 
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinMeetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinDigipolis Antwerpen
 
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinMeetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinDigipolis Antwerpen
 
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainMeetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainDigipolis Antwerpen
 
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainMeetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainDigipolis Antwerpen
 
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainMeetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainDigipolis Antwerpen
 
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Digipolis Antwerpen
 
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Digipolis Antwerpen
 
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Digipolis Antwerpen
 
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Digipolis Antwerpen
 
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteit
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteitMeetup 18/10/2018 - Artificiële intelligentie en mobiliteit
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteitDigipolis Antwerpen
 
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteit
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteitMeetup 18/10/2018 - Artificiële intelligentie en mobiliteit
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteitDigipolis Antwerpen
 

More from Digipolis Antwerpen (20)

Meetup 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor ...
Meetup 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor ...Meetup 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor ...
Meetup 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor ...
 
Meet-up 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor...
Meet-up 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor...Meet-up 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor...
Meet-up 21/10/2021 - Digipolis Fabric: alle IT-oplossingen zijn mogelijk voor...
 
Infobundel meetup app van't stad
Infobundel meetup app van't stadInfobundel meetup app van't stad
Infobundel meetup app van't stad
 
Meetup 24/10/2019 - Slimme IT-oplossingen voor steden en gemeenten: het open ...
Meetup 24/10/2019 - Slimme IT-oplossingen voor steden en gemeenten: het open ...Meetup 24/10/2019 - Slimme IT-oplossingen voor steden en gemeenten: het open ...
Meetup 24/10/2019 - Slimme IT-oplossingen voor steden en gemeenten: het open ...
 
Meetup 25/04/19: Big Data
Meetup 25/04/19: Big Data Meetup 25/04/19: Big Data
Meetup 25/04/19: Big Data
 
Meetup 25/04/19: Big Data
Meetup 25/04/19: Big Data Meetup 25/04/19: Big Data
Meetup 25/04/19: Big Data
 
Meetup 25/04/19: Big Data
Meetup 25/04/19: Big DataMeetup 25/04/19: Big Data
Meetup 25/04/19: Big Data
 
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinMeetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
 
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinMeetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
 
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinMeetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
 
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierinMeetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
Meetup 14/3/2019: Digitalisering in de zorg en de rol van de stad hierin
 
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainMeetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
 
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainMeetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
 
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchainMeetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
Meetup 21/2/2019 - Blockchain on the Move: digitale identiteit op blockchain
 
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
 
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
 
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
 
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
Meetup 12/12/2018: Augmented & Virtual Reality: wat zijn de mogelijkheden voo...
 
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteit
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteitMeetup 18/10/2018 - Artificiële intelligentie en mobiliteit
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteit
 
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteit
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteitMeetup 18/10/2018 - Artificiële intelligentie en mobiliteit
Meetup 18/10/2018 - Artificiële intelligentie en mobiliteit
 

Recently uploaded

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 

Recently uploaded (20)

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 

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

Editor's Notes

  1. Situatie van een paar jaar terug toen er nog geen sprake was van het A-stad platform Applicatielandschap: oplossingsarsenaal van Digipolis bestaat uit een waaier aan technologieën: (home made in .Net, aangekochte pakketten. Recent meer SaaS toepassingen) Gelinkt met CRS’en om authentieke brondata op te halen (bv. persoons- of ondernemingsgegevens) Elke technologie heeft zijn eigen user interface + UX. Waaier aan toepassingen en websites waar de gebruiker zijn weg moet in zoeken (zowel burgers als medewerkers van de Groep Antwerpen) => digitale versnippering
  2. Vooraleer er code kon getypt worden, moest er eerst draagvlak gecreëerd worden om iets te doen aan die digitale versnippering. Op zich een lang verhaal, kort samengevat: in 2012 werd er naar aanleiding van een opleiding een visietekst goedgekeurd door alle bedrijfsdirecteurs van de Stad. Hierin stonden een aantal belangrijke standpunten rond hoe we met klanten omgaan: We willen streven naar 1 profiel, ipv dat de klant zich voor verschillende diensten van de Stad steeds opnieuw moeten registreren + waarom moet een gebruiker altijd opnieuw gegevens alle gegevens invullen als hij een product aanvraagt. volgend wapenfeit was een stadsbrede digitale strategie dat het bedrijf Ondernemen en Stadsmarketing heeft uitgeschreven. Bevat een aantal belangrijke principes die we nog steeds in ons achterhoofd houden als we nieuwe oplossingen uitwerken in A-stad. Bv. de gebruiker staat centraal en verkrijgt relevante digitale communicatie door personalisering. Dit alles is vervolgens in een collegebesluit gegoten. Bedrijf personeelsmanagement was op zoek naar een remedie voor de digitale fragmentering door een portaal te creëren specifiek voor medewerkers en wou dus ook mee op de kar springen. Ondertussen zijn zo goed als alle bedrijven betrokken, wat niet meer dan normaal is voor een stadsbreed platform.
  3. in het begin in het betty kot op Den Bell waar de meeste collega’s van de Stad werken, nadien verhuis naar Digipolis
  4. Screenshot van één van de eerste versies van A-stad. Toont de visie waar we naartoe willen werken: verzameling apps die de ingelogde gebruiker kan favoriten of installeren, net zoals in de gekende app stores. Dit maakt van A-stad een platform (en niet enkel een website), en moet het op termijn mogelijk maken dat externe partijen apps gaan ontwikkelen.
  5. Eén coherente, responsive user interface. Conceptueel is het de bedoeling dat we de zwarte balk bovenaan laten terugkomen boven alle apps of websites van Antwerpen. Je kan daar inloggen, zoeken, notificaties raadplegen en naar het overzicht gaan om content of apps te favoriten (=> personalisatie). Content groeperen we via kanalen, dat zijn eigenlijk mini sites met een bepaald thema. de user app staat centraal omdat zo goed als alle apps daarmee communiceren. Dit zijn een paar voorbeelden van apps (in totaal hebben we er een stuk of 30). Ook tussen apps onderling is er veel communicatie. We streven er naar om apps zo veel autonoom te laten draaien en onafhankelijk van elkaar te deployen. backlog (van alle bedrijven) is heel groot, daarnaast moeten er voor bepaalde apps nog een nieuwe fundering gegoten worden om die backlog te kunnen realiseren. Dus elke sprint is een evenwichtsoefening tussen nieuw functionaliteiten en refactoring. basisprincipe: “Alles is verbonden met elkaar” -> apps connecteren meestal niet rechtstreeks naar de backend toepassing, maar via de ESB. Vervult meerdere functies: de consumer van de koppeling is veel minder afhankelijk van de backend toepassing. bus kan data transformeren bus kan data orchestreren en verschillende services aanspreken om een gecombineerd resultaat te bouwen. voordeel van de bus wordt groter als er meerdere afnemers zijn van een service => hergebruik issues: in het begin werkte het busteam onafhankelijk van het A-stad team => API’s werkten niet zoals we verwachten. Nu zit er ene buschauffeur mee in het scrumteam en kan er veel korter op de bal gespeeld worden. daarnaast hebben we wel dikwijls problemen met performantie van API’s. Aan services die we zelf geschreven hebben kunnen we sleutelen, maar bij aangekochte pakketten is dat al lastiger en bij SaaS oplosssingen wordt het helemaal moeilijk. Dus moeten we dikwijls via caching performantieproblemen oplossen.
  6. in de weken voor de grote release: moment van totale ontreddering bij Jo Giraerts, één van onze lead backend developers
  7. Maar na realisatie mag het resultaat er wel zijn: meldingsapp. In deze app kan een gebruiker iets melden aan de stadsdiensten (sluikstort of een losse straatsteen bv.). Ook medewerkers kunnen meldingen maken, bv. voor ICT support of aan de personeelsdienst. Koppelt momenteel achterliggend met 3 backoffice toepassingen.
  8. vroeger: veel verschillende meldingsformulieren met hun eigen layout, waarbij je iedere keer je persoonlijke gegevens moest ingeven. nu: één drop down met alle keuzes (mobile first design). Vervolgens krijg je een form die er altijd ongeveer hetzelfde uit ziet, aangezien dit gekoppeld is met uw profiel zijn heel wat velden geprefilled. heel het e-loket werkt volgens dit principe.
  9. Om het A-stad platform te realiseren hebben we heel wat nieuwe technologieën in huis gehaald, Dries zal subiet een overzicht geven en sommige zitten ook achter de bus, zoals Solr. We gebruiken Solr voor de algemene search (zwarte balk) voor in app searches (via facetten) om data op te halen voor bepaalde apps (bv. gerelateerde content in stadsplan) Elke app is verantwoordelijk om via de ESB de data naar Solr te sturen. Soms wordt die data dynamisch verstuurd (bij een Save), soms zijn het cron jobs die daily of hourly draaien.
  10. Medewerkersluik: van het moment dat ik mij identificeer met mijn medewerkerscredentials => verandert de kleur van het portaal, krijg ik andere content en apps ter beschikking. Draait op dezelfde infrastructuur en technologie als het burgerluik -> Logische keuze: veel apps komen terug.
  11. Elke app voorzien van een API en samen met een SDK publiceren op een developer portal zodat externen ook apps kunnen bouwen op het platform (Uiteraard rekening houdend met de privacy wetgeving). We willen hierbij aansluiting zoeken bij o.a. start ups en een community uitbouwen
  12. Naast de stad zijn ook politie en het OCMW elk een user centric portaal aan het bouwen, met gelijkaardige noden. Het kan niet de bedoeling zijn om telkens opnieuw een variant van eenzelfde component te bouwen of aankopen. Vandaar dat we beroep willen doen op start ups om deze gemeenschappelijke componenten mee te ontwikkelen. Dat is de basis van het Antwerp City Platform as a Service
  13. Ik zou kort even de highlevel architectuur willen overlopen. Ik denk niet dat het een traditionele overheids stack is, toch zeker niet toen we met het project begonnen. Het is een vrij service georienteerde architectuur volledig gebaseerd op opensource componenten. Het idee toen we aan de applicatie starten was om 1 single page app te maken waar alle toekomstige burger en medewerkers apps op gemaakt zouden worden. Op zich hebben we 2 soorten consumers, de externe applicaties die via de API manager connecteren en onze astad applicatie die via antwerpen.be ontsloten is. Zo is er bijvoorbeeld een freewifi project dat gratis wifi aanbied aan iedereen met een aprofiel op de meir. De Astad applicaties draaien op zich volledig geïsoleerd draaien. Iedere applicatie heeft zijn eigen frontend, backend en database. Het enigste dat geshared wordt in de Astad stack is een Redis instance voor de sessies. Zo goed als alle externe systemen roepen we op via de ESB. Meldingen worden bijvoorbeeld doorgestuurd naar SAP of de kalender applicatie wordt gevoed door onder andere de UIT database. voorbeelden We hebben op zich een 35 applicaties die zich beperken tot 1 functioneel domein. Alle assets van iedere applicatie zitten bijvoorbeeld in de assets app in gridfs. In deze app kan je images uploaden die al dan niet private zijn, images resizen en worden ze automatisch gescanned op virussen. Een andere belangrijke app waar we het nog niet over gehad hebben is onze redactie omgeving die integreert met onder andere kanalen,stadsplan,kalender. De redacteur kan binnen deze app kiezen in welk kanaal hij de content will publiceren of kan zijn content linken aan gegevens uit het stadsplan of de kalender
  14. Voor de frontend maken we gebruik van Angular en sass. In Grunt hebben we tasks die constant door de ontwikkelaars worden uitgevoerd of tijdens een build lopen. Mante gaat hier straks nog meer over vertellen.
  15. Apps binnen Astad zijn ofwel in PHP(met ZF2) ofwel in NodeJs(Expressjs) geschreven. In het algemeen werden de meer complexere in PHP geschreven maar tegenwoordig schrijven we alle nieuwe apps in NodeJs JB gaat her sevens nog wat meer over vertellen. Als loadbalancer gebruiken e in onze webserver
  16. Alle data van de apps zit in MongoDb. Redis gebruiken we om de sessies in te bewaren, caching te doen en pubsub voor onze websockets. Zoals Kris al aanhaalde zit alle data voor de zoek SolR. Alles wat achter de bus zit werd vroeger bewaard in MS SQL en voor alle nieuwe apps in PostgreSQL.
  17. De ESB die we gebruiken is van WSO2 en de huidige API manager is ook van WS02. Recent is er een ACPAAS project gestart om een nieuwe API manager op te zetten met Kong.
  18. Alle servers draaien op ubuntu en worden volledig gecheffed. Ondertussen werkt iedere developer ook met een vagrant box die exact dezelfde setup heeft als de productie omgeving. De ontwikkelaars kunnen newrelic gebruiken om performantie problemen te achterhalen en de infrastructuur mensen gebruiken zabbix.
  19. Wij zijn recent geswitched naar een volledige ALM stack van Atlassian. Jira voor onze issues Stash voor alle servers Bamboo om de builds en deployments te triggeren, als er testen falen wordt er niets gebuild Slack voor onze interne communicatie
  20. automatiseer alles van de eerste dag. maak gewoon 1 vagrant op basis van de cookbooks/config die in productie gebruikt wordt. In het begin werkte de meeste developers gewoon lokaal maar aangezien iedereen een andere setup heeft waren er altijd wel dingen die niet werkte. Daarna waren er meerdere vagrant files in omloop. Als je verschillende gelijkaardige apps hebt kan je best 1 skeleton project maken en alle dependencies in packages onderbrengen. Op deze manier kan je later alles nog relatief gemakkelijk onderbrengen. Voorzie zowel uw API als packages met een deftige semver versioning. probeer het pull request systeem zo snel mogelijk op te zetten en durf ook zaken afkeuren testen afdwingen en zorg ervoor dat een developer de testen niet kan afzetten te vaak “we fixen da dan wel” wordt gezeAnders krijgt de ontwikkelaar deze indruk. gebruik agile niet als een excuus om niet meer na te denken. Uiteindelijk komt het toch bij de developer terecht die tegen het einde van de sprint zijn code er in hackt. En uiteindelijk heb je een gefrustreerde developer die meer technical debt heeft opgeleverd.
  21. chaijs.com
  22. chaijs.com
  23. Solr
  24. Front-end dev: 3 zaken: HTML(5), javascript, CSS(3)
  25. niets is minder waar
  26. 100 zaken om mee rekening te houden, iets van af moet weten. Ik licht kort even toe.
  27. Start development: vagrant
  28. Vagrant = viruteel linux draaien
  29. Ubuntu
  30. Gedaan met het werkt op mijn systeem excuus
  31. Nog maar 1 iets onthouden
  32. we werken met stash voor versioning
  33. da’s dus git
  34. PR’s gitflow
  35. Vagrant = viruteel linux draaien
  36. CODE REVIEWS
  37. CODE REVIEWS
  38. IE 4000+ selectors -> bless
  39. IE 4000+ selectors -> bless
  40. IE 4000+ selectors -> bless
  41. IE 4000+ selectors -> bless
  42. IE 4000+ selectors -> bless
  43. IE 4000+ selectors -> bless
  44. IE 4000+ selectors -> bless
  45. oorzaak: meestal door een bugfix ook door toevoegen features (Kan business en technische oorzaak hebben) Voorbeeld: aanpassen van een component maar er niet aan denken dat deze ergens anders ook gebruikt wordt.
  46. tijdswinst = bugs in een vroeger stadium vinden!
  47. https://watirmelon.files.wordpress.com/2012/01/softwaretestingicecreamconeantipattern.png