SlideShare une entreprise Scribd logo
1  sur  61
Télécharger pour lire hors ligne
@Xebiconfr #Xebicon18 @pjechris
Build the future
Architecturer son application mobile
sur la durée
Jean-Christophe Pastant
1
@Xebiconfr #Xebicon18 @pjechris
Qui suis-je ?
Jean-Christophe Pastant
iOS Developer/Architect
Xebia IT Architects
@pjechris
2
@Xebiconfr #Xebicon18 @pjechris
Une architecture n’a pas besoin d’être complexe
pour être réussie
3
@Xebiconfr #Xebicon18 @pjechris
Architecturer ?
4
@Xebiconfr #Xebicon18 @pjechris
Bonne architecture ?
5
@Xebiconfr #Xebicon18 @pjechris
Bonne architecture ?
● Orientée vers le besoin fonctionnel
● Construite pour le présent (Pragmatique)
● Lisible (Simple)
● Cohérente (Simple, Pragmatique)
6
@Xebiconfr #Xebicon18 @pjechris
Architecture pérenne ?
7
@Xebiconfr #Xebicon18 @pjechris
Architecture pérenne ?
● Robuste dans le temps (petites modifications)
● Évolutive dans le temps (grosses modifications)
8
@Xebiconfr #Xebicon18 @pjechris
Architecturer ?
Une bonne architecture pérenne se doit d’être :
● Simple
KEEP IT SIMPLE, STUPID
● Pragmatique
YOU AIN’T GONNA NEED IT
● Fonctionnelle/métier
DOMAIN DRIVEN DESIGN
● Modifiable/évolutive
SEPARATION OF CONCERN, OPEN/CLOSED PRINCIPLE
9
@Xebiconfr #Xebicon18 @pjechris
Structurer
en couches
Keep it simple, You ain’t gonna need it, Domain Driven Design, Separation of Concern
@Xebiconfr #Xebicon18 @pjechris
Structurer en couches permet de :
● Séparer les responsabilités
○ Affichage
○ Appels réseaux
○ ….
● Réfléchir quel rôle (couche) joue une classe
● Être plus ouvert aux changements
○ On est agnostique des couches supérieures
Structurer en couches
11
@Xebiconfr #Xebicon18 @pjechris
Structurer en couches
Données
Métier
UI
DB WS Cache
login
logout
checkout
addBook
Layout i18n Formatting
12
@Xebiconfr #Xebicon18 @pjechris
Structurer en couches
Données
Métier
UI
DB WS Cache
login
logout
checkout
addBook
Layout i18n Formatting
Modèles
métier
13
@Xebiconfr #Xebicon18 @pjechris
Modèles métier
14
Keep it simple, Domain Driven Design
@Xebiconfr #Xebicon18 @pjechris
Exemple
● Pouvoir ajouter des livres dans un panier
● Afficher le panier
● Afficher le prix total du panier
source : application Fnac (Android)
15
@Xebiconfr #Xebicon18 @pjechris
Modèles métier
struct Book {
let id: Int
let isbn: String
let title: String
let price: Float
}
16
@Xebiconfr #Xebicon18 @pjechris
Modèles métier
import ReactiveKit
struct Cart {
private(set) var books: [Book]
var total: Observable<Float>
mutating func add(book: Book) { }
mutating func remove(index: Int) { }
}
17
@Xebiconfr #Xebicon18 @pjechris
Modèles métier
import ReactiveKit
struct Cart {
private(set) var books: [Book]
var total: Float
mutating func add(book: Book) { }
mutating func remove(index: Int) { }
}
18
@Xebiconfr #Xebicon18 @pjechris
Modèles métier
struct Cart {
private(set) var books: [Book]
var total: Float
mutating func add(book: Book) { }
mutating func remove(book: Book) { }
}
19
@Xebiconfr #Xebicon18 @pjechris
Modèles métier
● Notion centrale du métier/fonctionnel dans l’application
● Donne du sens dans la communication entre les couches
● Doit être orienté métier
● Objets simples
○ Immutables
○ Pas de réseau, pas d’asynchrone, etc...
20
@Xebiconfr #Xebicon18 @pjechris
UI
“Dumb components”
Keep it simple, Domain Driven Design, Open/Closed principle
@Xebiconfr #Xebicon18 @pjechris
Exemple
Application Fnac (Android)
CartItemView
priceLabel
title
22
@Xebiconfr #Xebicon18 @pjechris
Exemple
Application Fnac (Android)
CartItemView
23
CartRecapView
@Xebiconfr #Xebicon18 @pjechris
UI
class CartItemView: UIView {
var priceLabel: UILabel!
var title: UILabel!
func configure(title: String, price: String) {
priceLabel.text = price
title.text = title
}
}
24
@Xebiconfr #Xebicon18 @pjechris
UI
class CartItemView: UIView {
var priceLabel: UILabel!
var title: UILabel!
func configure(title: String, price: String) {
priceLabel.text = price
title.text = title
}
}
class CartRecapView: UIView {
var priceLabel: UILabel!
func configure(price: String) {
priceLabel.text = price
}
}
25
@Xebiconfr #Xebicon18 @pjechris
UI
class CartItemView: UIView {
var priceLabel: UILabel!
var title: UILabel!
func configure(book: Book) {
priceLabel.text = price
title.text = title
}
}
class CartRecapView: UIView {
var priceLabel: UILabel!
func configure(cart: Cart) {
priceLabel.text = price
}
}
26
@Xebiconfr #Xebicon18 @pjechris
UI
class CartItemView: UIView {
var priceLabel: UILabel!
var title: UILabel!
func configure(book: Book) {
priceLabel.text = stringify(book.price, .currency)
title.text = book.title.uppercased
}
}
class CartRecapView: UIView {
var priceLabel: UILabel!
func configure(cart: Cart) {
priceLabel.text = stringify(cart.total, .currency)
}
}
27
@Xebiconfr #Xebicon18 @pjechris
UI
struct PriceComponent {
func bind(price: Float, label: UILabel) {
}
}
28
@Xebiconfr #Xebicon18 @pjechris
UI
struct PriceComponent {
func bind(price: Float, label: UILabel) {
label.text = stringify(price, style: .currency)
}
}
29
@Xebiconfr #Xebicon18 @pjechris
UI
struct PriceComponent {
func bind(price: Float, label: UILabel) {
label.text = stringify(price, style: .currency)
}
}
struct TitleComponent {
func bind(title: String, label: UILabel) {
label.text = title.capitalize
}
}
30
@Xebiconfr #Xebicon18 @pjechris
UI
class CartItemView: UIView {
var priceLabel: UILabel!
var title: UILabel!
func configure(book: Book) {
priceLabel.text = stringify(book.price, .currency)
title.text = book.title.uppercased
}
}
class CartRecapView: UIView {
var priceLabel: UILabel!
func configure(cart: Cart) {
priceLabel.text = stringify(cart.total, .currency)
}
}
31
@Xebiconfr #Xebicon18 @pjechris
UI
class CartItemView: UIView {
var priceLabel: UILabel!
var title: UILabel!
func configure(book: Book) {
priceLabel.bind(book.price, with: PriceComponent.self)
title.bind(book.title, with: TitleComponent.self)
}
}
class CartRecapView: UIView {
var priceLabel: UILabel!
func configure(cart: Cart) {
priceLabel.bind(cart.total, with: PriceComponent.self)
}
}
32
@Xebiconfr #Xebicon18 @pjechris
UI
● Faire des petits composants UI réutilisables
● Préférer combiner les composants plutôt que l’héritage
● Exposer une API métier
33
@Xebiconfr #Xebicon18 @pjechris
Métier
“Smart components”
Keep it simple, You ain’t gonna need it, Domain Driven Design
@Xebiconfr #Xebicon18 @pjechris
Métier
class CartComponentContext {
// API
private(set) var cart: Variable<Cart>
let checkoutAction: Action
}
35
@Xebiconfr #Xebicon18 @pjechris
Métier
class CartComponentContext {
// API
private(set) var cart: Variable<Cart>
let checkoutAction: Action
private let httpRepository: XebiaWSRepository
init(cart: Cart) {
self.cart = cart
self.httpRepository = XebiaWSRepository(...)
}
}
36
@Xebiconfr #Xebicon18 @pjechris
Métier
class CartComponentContext {
// API
private(set) var cart: Variable<Cart>
let checkoutAction: Action
private let httpRepository: XebiaWSRepository
init(cart: Cart) {
self.cart = cart
self.httpRepository = XebiaWSRepository(...)
self.checkoutAction = Action(
enabledIf: { !cart.isEmpty },
factory: { httpRepository.checkout(self.cart) })
}
}
37
@Xebiconfr #Xebicon18 @pjechris
Métier
● Lien entre la couche données et la couche UI
● Définissent les actions / règles métier
○ Passer une commande seulement si le panier n’est pas vide
○ …
● Font les appels réseaux
● Gérent les états
● Exposent une API métier
38
@Xebiconfr #Xebicon18 @pjechris
Données
39
Keep it simple, Separation of Concern
@Xebiconfr #Xebicon18 @pjechris
Données
class XebiaWSRepository {
func checkout(cart: Cart, success: (Void) -> (), failure:
(Error) -> ()) {
}
40
@Xebiconfr #Xebicon18 @pjechris
Données
class XebiaWSRepository {
func checkout(cart: Cart, success: (Void) -> (), failure:
(Error) -> ()) {
let url = URL(string: “…”)
SessionManager.default.request(url).responseJSON {
}
}
41
@Xebiconfr #Xebicon18 @pjechris
class XebiaWSRepository {
func checkout(cart: Cart, success: (Void) -> (), failure:
(Error) -> ()) {
let url = URL(string: “…”)
SessionManager.default.request(url).responseJSON {
let json = JSON(data: $0.jsonData)
do {
let books = try JSONDecoder().decode([Book].self,
from: jsonData)
success(books)
}
catch let error { failure(error) }
}
}
42
@Xebiconfr #Xebicon18 @pjechris
Données
class XebiaWSRepository {
func checkout(cart: Cart) -> Promise<Void> {
}
}
43
@Xebiconfr #Xebicon18 @pjechris
Données
class XebiaWSRepository {
let builder: HttpQueryBuilder<XebiaEndpoint>
func checkout(cart: Cart) -> Promise<Void> {
return builder.query(.checkout(cart)).request()
}
}
44
@Xebiconfr #Xebicon18 @pjechris
Données
class XebiaWSRepository {
let builder: HttpQueryBuilder<XebiaEndpoint>
func checkout(cart: Cart) -> Promise<Void> {
return builder.query(.checkout(cart)).request()
}
func findBooks() -> Promise<[Book]> {
return builder.query(.books).request()
}
}
45
@Xebiconfr #Xebicon18 @pjechris
Données
● Doit être simple mais fiable et lisible
● Stateless
● Mapping 1-to-1 avec les services fournies
○ 1 classe = 1 service (DB, WS, …)
○ 1 méthode = 1 API
46
@Xebiconfr #Xebicon18 @pjechris
Providers
47
Separation of Concern
@Xebiconfr #Xebicon18 @pjechris
Providers
class CartProvider {
let httpRepository: XebiaWSRepository
func checkout(cart: Cart) -> Promise<Void> {
return httpRepository
.checkout(cart)
}
}
48
@Xebiconfr #Xebicon18 @pjechris
Providers
class CartProvider {
let httpRepository: XebiaWSRepository
let realmRepository: RealmRepository
func checkout(cart: Cart) -> Promise<Void> {
return httpRepository
.checkout(cart)
.then { realmRepository.savePurchasedCart($0) }
}
}
49
@Xebiconfr #Xebicon18 @pjechris
Providers
class CartComponentContext {
// API
private(set) var cart: Variable<Cart>
let checkoutAction: Action
private let httpRepository: XebiaWSRepository
init(cart: Cart) {
self.cart = cart
self.httpRepository = XebiaWSRepository(...)
self.checkoutAction = Action(
enabledIf: { !cart.isEmpty },
factory: { httpRepository.checkout(self.cart) })
}
}
50
@Xebiconfr #Xebicon18 @pjechris
Providers
class CartComponentContext {
// API
private(set) var cart: Variable<Cart>
let checkoutAction: Action
private let cartProvider: CartProvider
init(cart: Cart) {
self.cart = cart
self.cartProvider = CartProvider(...)
self.checkoutAction = Action(
enabledIf: { !cart.isEmpty },
factory: { cartProvider.checkout(cart: self.cart) })
}
}
51
@Xebiconfr #Xebicon18 @pjechris
Providers
● Facilite la synchronisation/les accès à plusieurs Repository
● Réduit la logique dans les Smart Components
● 1 classe par objet métier (BookProvider, CartProvider, …)
52
@Xebiconfr #Xebicon18 @pjechris
Injection de dépendances
53
Keep it simple, Separation of Concern
@Xebiconfr #Xebicon18 @pjechris
Injection de dépendances
class CartComponentContext {
// API
private(set) var cart: Variable<Cart>
let checkoutAction: Action
private let cartProvider: CartProvider
init(cart: Cart) {
self.cart = cart
self.cartProvider = CartProvider(...)
self.checkoutAction = Action(
enabledIf: { !cart.isEmpty },
factory: { cartProvider.checkout(cart: self.cart) })
}
}
54
@Xebiconfr #Xebicon18 @pjechris
Injection de dépendances
class CartComponentContext {
// API
private(set) var cart: Variable<Cart>
let checkoutAction: Action
private let cartProvider: CartProvider
init(cart: Cart, cartProvider: CartProvider) {
self.cart = cart
self.cartProvider = cartProvider
self.checkoutAction = Action(
enabledIf: { !cart.isEmpty },
factory: { cartProvider.checkout(cart: self.cart) })
}
}
55
@Xebiconfr #Xebicon18 @pjechris
Injection de dépendances
● Aide à garder les couches indépendantes
● Limite la connaissance de chaque objet au strict minimum
● Permet de tester plus facilement
56
@Xebiconfr #Xebicon18 @pjechris
Tests unitaires
57
@Xebiconfr #Xebicon18 @pjechris
Tests unitaires
Tester doit être simple
Si :
● Vous écrivez trop de lignes pour un test (+ 10 lignes)
● C’est trop compliqué de tester malgré tous vos protocoles/interfaces
Revoyez votre architecture !
58
@Xebiconfr #Xebicon18 @pjechris
We did it!
59
@Xebiconfr #Xebicon18 @pjechris
We did it!
● Simple
Petites classes, code réutilisable, séparation des rôles
● Pragmatique
Code incrémental, isolation des rôles
● Fonctionnelle/métier
APIs orientées modèles métier
● Modifiable/évolutive
Structure en couches, injection de dépendances, principes SOLID
60
@Xebiconfr #Xebicon18 @pjechris
MERCI
Questions ?

Contenu connexe

Tendances

XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...Publicis Sapient Engineering
 
XebiCon'16 : Orange - Transformation DevOps, les conteneurs sont vos alliés !
XebiCon'16 : Orange - Transformation DevOps, les conteneurs sont vos alliés !XebiCon'16 : Orange - Transformation DevOps, les conteneurs sont vos alliés !
XebiCon'16 : Orange - Transformation DevOps, les conteneurs sont vos alliés !Publicis Sapient Engineering
 
XebiCon'16 : Les coulisses de Xebia Studio. Par Ludovic Perot et Nicolas Joz...
XebiCon'16 : Les coulisses de Xebia Studio.  Par Ludovic Perot et Nicolas Joz...XebiCon'16 : Les coulisses de Xebia Studio.  Par Ludovic Perot et Nicolas Joz...
XebiCon'16 : Les coulisses de Xebia Studio. Par Ludovic Perot et Nicolas Joz...Publicis Sapient Engineering
 
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...Publicis Sapient Engineering
 
Xebicon2016 - React Native & Redux
Xebicon2016 - React Native & ReduxXebicon2016 - React Native & Redux
Xebicon2016 - React Native & Reduxpgdejardin
 
XebiCon'16 : Cellenza - Votre miroir interactif connecté avec Raspberry Pi 2,...
XebiCon'16 : Cellenza - Votre miroir interactif connecté avec Raspberry Pi 2,...XebiCon'16 : Cellenza - Votre miroir interactif connecté avec Raspberry Pi 2,...
XebiCon'16 : Cellenza - Votre miroir interactif connecté avec Raspberry Pi 2,...Publicis Sapient Engineering
 
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...Publicis Sapient Engineering
 
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilitéOVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilitéOVHcloud
 

Tendances (8)

XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana O...
 
XebiCon'16 : Orange - Transformation DevOps, les conteneurs sont vos alliés !
XebiCon'16 : Orange - Transformation DevOps, les conteneurs sont vos alliés !XebiCon'16 : Orange - Transformation DevOps, les conteneurs sont vos alliés !
XebiCon'16 : Orange - Transformation DevOps, les conteneurs sont vos alliés !
 
XebiCon'16 : Les coulisses de Xebia Studio. Par Ludovic Perot et Nicolas Joz...
XebiCon'16 : Les coulisses de Xebia Studio.  Par Ludovic Perot et Nicolas Joz...XebiCon'16 : Les coulisses de Xebia Studio.  Par Ludovic Perot et Nicolas Joz...
XebiCon'16 : Les coulisses de Xebia Studio. Par Ludovic Perot et Nicolas Joz...
 
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
XebiCon'16 : Le futur de la télévision, les applications ! Par Fabien Mirault...
 
Xebicon2016 - React Native & Redux
Xebicon2016 - React Native & ReduxXebicon2016 - React Native & Redux
Xebicon2016 - React Native & Redux
 
XebiCon'16 : Cellenza - Votre miroir interactif connecté avec Raspberry Pi 2,...
XebiCon'16 : Cellenza - Votre miroir interactif connecté avec Raspberry Pi 2,...XebiCon'16 : Cellenza - Votre miroir interactif connecté avec Raspberry Pi 2,...
XebiCon'16 : Cellenza - Votre miroir interactif connecté avec Raspberry Pi 2,...
 
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
 
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilitéOVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
 

Similaire à XebiCon'18 - Architecturer son application mobile pour la durabilité

Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Yannick Chartois
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Tugdual Grall
 
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...Publicis Sapient Engineering
 
Développer sereinement avec Node.js
Développer sereinement avec Node.jsDévelopper sereinement avec Node.js
Développer sereinement avec Node.jsJulien Giovaresco
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos SantosXebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos SantosPublicis Sapient Engineering
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelleMICHRAFY MUSTAFA
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity frameworkDNG Consulting
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Geeks Anonymes
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partiekadzaki
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Titanium studio et les modules
Titanium studio et les modulesTitanium studio et les modules
Titanium studio et les modulesGautier Pialat
 

Similaire à XebiCon'18 - Architecturer son application mobile pour la durabilité (20)

Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8Les concepts de la programmation fonctionnelle illustrés avec java 8
Les concepts de la programmation fonctionnelle illustrés avec java 8
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
 
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez...
 
3D Touch
3D Touch3D Touch
3D Touch
 
Développer sereinement avec Node.js
Développer sereinement avec Node.jsDévelopper sereinement avec Node.js
Développer sereinement avec Node.js
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos SantosXebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
XebiCon'17 : Kotlin, état de l'art - Benjamin Lacroix et Sergio Dos Santos
 
Tests Interfaces Web avec Rails
Tests Interfaces Web avec RailsTests Interfaces Web avec Rails
Tests Interfaces Web avec Rails
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Tpag appli-galaxy
Tpag appli-galaxyTpag appli-galaxy
Tpag appli-galaxy
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Introduction a jQuery
Introduction a jQueryIntroduction a jQuery
Introduction a jQuery
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Titanium studio et les modules
Titanium studio et les modulesTitanium studio et les modules
Titanium studio et les modules
 

Plus de Publicis Sapient Engineering

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainPublicis Sapient Engineering
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...Publicis Sapient Engineering
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin Publicis Sapient Engineering
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?Publicis Sapient Engineering
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéPublicis Sapient Engineering
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizPublicis Sapient Engineering
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectPublicis Sapient Engineering
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...Publicis Sapient Engineering
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...Publicis Sapient Engineering
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...Publicis Sapient Engineering
 
XebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieuXebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieuPublicis Sapient Engineering
 
XebiCon'18 - Orchestration : Conteneurs vs Musique
XebiCon'18 - Orchestration : Conteneurs vs MusiqueXebiCon'18 - Orchestration : Conteneurs vs Musique
XebiCon'18 - Orchestration : Conteneurs vs MusiquePublicis Sapient Engineering
 
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-StreamsXebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-StreamsPublicis Sapient Engineering
 
TEch4Exec - OUI.sncf propose des voyages moins chers grâce au Big Data et au ...
TEch4Exec - OUI.sncf propose des voyages moins chers grâce au Big Data et au ...TEch4Exec - OUI.sncf propose des voyages moins chers grâce au Big Data et au ...
TEch4Exec - OUI.sncf propose des voyages moins chers grâce au Big Data et au ...Publicis Sapient Engineering
 
Tech4Exec - Pourquoi faut-il gérer votre projet (Big) data comme une start-up...
Tech4Exec - Pourquoi faut-il gérer votre projet (Big) data comme une start-up...Tech4Exec - Pourquoi faut-il gérer votre projet (Big) data comme une start-up...
Tech4Exec - Pourquoi faut-il gérer votre projet (Big) data comme une start-up...Publicis Sapient Engineering
 

Plus de Publicis Sapient Engineering (20)

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
 
Xebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to CloudXebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to Cloud
 
XebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern InfrastructureXebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern Infrastructure
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
 
XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID Connect
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
 
XebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an aprèsXebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an après
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
 
XebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieuXebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieu
 
XebiCon'18 - Orchestration : Conteneurs vs Musique
XebiCon'18 - Orchestration : Conteneurs vs MusiqueXebiCon'18 - Orchestration : Conteneurs vs Musique
XebiCon'18 - Orchestration : Conteneurs vs Musique
 
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-StreamsXebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
 
XebiCon'18 - Data Science Done Wrong
XebiCon'18 - Data Science Done WrongXebiCon'18 - Data Science Done Wrong
XebiCon'18 - Data Science Done Wrong
 
TEch4Exec - OUI.sncf propose des voyages moins chers grâce au Big Data et au ...
TEch4Exec - OUI.sncf propose des voyages moins chers grâce au Big Data et au ...TEch4Exec - OUI.sncf propose des voyages moins chers grâce au Big Data et au ...
TEch4Exec - OUI.sncf propose des voyages moins chers grâce au Big Data et au ...
 
Tech4Exec - Pourquoi faut-il gérer votre projet (Big) data comme une start-up...
Tech4Exec - Pourquoi faut-il gérer votre projet (Big) data comme une start-up...Tech4Exec - Pourquoi faut-il gérer votre projet (Big) data comme une start-up...
Tech4Exec - Pourquoi faut-il gérer votre projet (Big) data comme une start-up...
 

XebiCon'18 - Architecturer son application mobile pour la durabilité