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

Flexible Event Tracking (Paul Gebheim)
Flexible Event Tracking (Paul Gebheim)Flexible Event Tracking (Paul Gebheim)
Flexible Event Tracking (Paul Gebheim)
MongoSF
 
AnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyAnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior Creatively
Kiana Tennyson
 
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

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

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 

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