Nouvelle application, la décision de partir sur Node.js est prise. L'application commence petite puis le nombre de features et de développeurs augmentent. Les 1ers refactoring cossus arrivent et ne se passent pas vraiment comme prévu pourtant nous avons 100% de coverage… Est ce lié au manque de typage de JS ? Est ce que TypeScript aurait évité ça ? Ou finalement est ce que c'est notre façon d'écrire notre code (et les tests) qu'il faut remettre en cause ?
Après quelques refactoring et bugfix l'application part en prod. Les utilisateurs commencent à remonter quelques soucis, en regardant les logs on prend peur, très difficile de s'y retrouver… Venant du monde Java on est surpris par le manque de maturité des frameworks et librairies Node.js, notamment au niveau de la gestion des logs et des erreurs.
Toutes ces (mes)aventures nous ont permis de prendre du recul sur le développement avec JS, nous vous proposons un retour d'expérience sur cette odyssée qui est toujours en cours.
Damien Berseron, Xiu Qiang Chu, Nicolas Massouh et Cyril Balit proposent de faire un retour d'expérience sur l'un de leurs derniers projets : un moteur de recherche de véhicule neuf implémenté avec Angular en responsive web design pour Renault.
Ils vont parler :
• du contexte projet (mise en place, architecture et méthodologie)
• de la contrainte du responsive web design
• des tips and tricks utilisés tout au long du développement
• de la mise en place du SEO sur un projet Angular
Nouvelle application, la décision de partir sur Node.js est prise. L'application commence petite puis le nombre de features et de développeurs augmentent. Les 1ers refactoring cossus arrivent et ne se passent pas vraiment comme prévu pourtant nous avons 100% de coverage… Est ce lié au manque de typage de JS ? Est ce que TypeScript aurait évité ça ? Ou finalement est ce que c'est notre façon d'écrire notre code (et les tests) qu'il faut remettre en cause ?
Après quelques refactoring et bugfix l'application part en prod. Les utilisateurs commencent à remonter quelques soucis, en regardant les logs on prend peur, très difficile de s'y retrouver… Venant du monde Java on est surpris par le manque de maturité des frameworks et librairies Node.js, notamment au niveau de la gestion des logs et des erreurs.
Toutes ces (mes)aventures nous ont permis de prendre du recul sur le développement avec JS, nous vous proposons un retour d'expérience sur cette odyssée qui est toujours en cours.
Damien Berseron, Xiu Qiang Chu, Nicolas Massouh et Cyril Balit proposent de faire un retour d'expérience sur l'un de leurs derniers projets : un moteur de recherche de véhicule neuf implémenté avec Angular en responsive web design pour Renault.
Ils vont parler :
• du contexte projet (mise en place, architecture et méthodologie)
• de la contrainte du responsive web design
• des tips and tricks utilisés tout au long du développement
• de la mise en place du SEO sur un projet Angular
ACRA est une librairie open source, légère, facile à mettre en oeuvre et très configurable permettant aux développeurs android de recevoir des rapports d'erreur de leurs applications dans un spreadsheet GoogleDocs.
Flex, une techno RIA incontournable pour les futures app web ?GreenIvory
La technologie Adobe Flex est aujourd'hui reconnue comme une des solutions les plus productives pour développer rapidement des applications de type RIA (Rich Internet Applications). Le succès de cette technologie repose sur deux notions fondamentales : la portabilité et l’interopérabilité. Cela fait deux ans que nous utilisons la technologie Flex. Je viens partager avec vous mes retours d'expériences concernant le développement des applications RIA basées sur Adobe Flex.
Ahmed El Houari
Au secours, mon chef m'a demandé de passer au DevOpsantony_guilloteau
"Continuous Delivery" et "DevOps" font partis des buzz word du moment dans l'IT.
Si vous n'êtes pas encore entrés dans ces démarches, ce n'est qu'une question de temps ! Préparez-vous à voir bientôt débarquer votre chef sur le bench avec le bouquin "Découvrir DevOps" sous le bras.
Mais pour les développeurs, ça change quoi le DevOps ? A travers cette conférence, je vais vous faire part des mes différents retours d'expérience sur ces changements autour des pratiques, organisations et outillages.
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...MongoDB
MongoDB Stitch est une plate-forme "serverless" conçue pour vous aider à créer facilement et en toute sécurité des applications utilisant votre cluster sur MongoDB Atlas. Il permet aux développeurs de se concentrer sur la création d'applications plutôt que sur la production de code de manipulation de données, l'intégration de services ou les problèmes d'infrastructure...
Quelle place pour le framework Rails dans le développement d'application web5pidou
Cette présentation a été réalisée dans le cadre des Rencontres Mondiales décentralisées du Logiciel Libre (RMLLd) qui se sont déroulées du 1er au 3 Juillet 2011 à Saint-Joseph (Ile de la Réunion).
ACRA est une librairie open source, légère, facile à mettre en oeuvre et très configurable permettant aux développeurs android de recevoir des rapports d'erreur de leurs applications dans un spreadsheet GoogleDocs.
Flex, une techno RIA incontournable pour les futures app web ?GreenIvory
La technologie Adobe Flex est aujourd'hui reconnue comme une des solutions les plus productives pour développer rapidement des applications de type RIA (Rich Internet Applications). Le succès de cette technologie repose sur deux notions fondamentales : la portabilité et l’interopérabilité. Cela fait deux ans que nous utilisons la technologie Flex. Je viens partager avec vous mes retours d'expériences concernant le développement des applications RIA basées sur Adobe Flex.
Ahmed El Houari
Au secours, mon chef m'a demandé de passer au DevOpsantony_guilloteau
"Continuous Delivery" et "DevOps" font partis des buzz word du moment dans l'IT.
Si vous n'êtes pas encore entrés dans ces démarches, ce n'est qu'une question de temps ! Préparez-vous à voir bientôt débarquer votre chef sur le bench avec le bouquin "Découvrir DevOps" sous le bras.
Mais pour les développeurs, ça change quoi le DevOps ? A travers cette conférence, je vais vous faire part des mes différents retours d'expérience sur ces changements autour des pratiques, organisations et outillages.
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...MongoDB
MongoDB Stitch est une plate-forme "serverless" conçue pour vous aider à créer facilement et en toute sécurité des applications utilisant votre cluster sur MongoDB Atlas. Il permet aux développeurs de se concentrer sur la création d'applications plutôt que sur la production de code de manipulation de données, l'intégration de services ou les problèmes d'infrastructure...
Quelle place pour le framework Rails dans le développement d'application web5pidou
Cette présentation a été réalisée dans le cadre des Rencontres Mondiales décentralisées du Logiciel Libre (RMLLd) qui se sont déroulées du 1er au 3 Juillet 2011 à Saint-Joseph (Ile de la Réunion).
Le SQL est un standard pour accéder vos données, donc, dans un monde orienté flux, quoi de plus normal que de retrouver le SQL pour traiter vos streams. Dans ce talk, vous découvrirez les extensions apportées à SQL par Apache Calcite pour répondre à cette problématique. Présentation faite au JugSummerCamp 2018
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
Slides du talk réalisé à Web2Day 2016 sur Apache Zeppelin (env. dédié à l'exploration des données, avec support de multiples langages, multiples backends)
Explorez vos données avec apache zeppelinBruno Bonnin
Rapide présentation du projet Apache Zeppelin, environnement web facilitant l'exploration et le partage autour de vos données : le support de multiples langages pour le traitement (Spark) et l'accès aux bases de données (PostgreSQL, Cassandra, ...) permet à Zeppelin de s'adapter aux backends les plus divers.
8. Publisher
Subscriber
1. subscribe
3. request(n) / cancel
2. onSubscribe (subscription)
4. onNext(data 1)
5. onComplete / onError
REACTIVE STREAMS API
Subscription
4. onNext(data …)
4. onNext(data n)
La source des
données
Le
consommateur
des données
9. IMPLÉMENTATION AVEC PROJET REACTOR
// Publisher de 0 à 1 élément
public abstract class Mono<T>
implements CorePublisher<T> {}
Flux.just("Hello", "How", "Are", "You?")
.doOnNext(System.out::println) // Data consumer
.doOnError(exc -> System.err.println("😭" + exc)) // Error consumer
.doOnComplete(() -> System.out.println("🎉")) // Complete consumer
.subscribe();
// Publisher de 0 à n éléments
public abstract class Flux<T>
implements CorePublisher<T> {}
10. Base de
données
Application
1. subscribe
3. request(n) / cancel
2. onSubscribe (subscription)
4. onNext(“R2D2”)
5. onComplete / onError
ET SI C’ETAIT UNE REQUETE…
Subscription
4. onNext(“C3PO”)
4. onNext(“BB-8”)
SELECT name FROM robot
11. REACTIVE API ET BASE DE DONNÉES
Driver Java v2
X DevAPI
(CompletableFuture)
SqlClient
ADBA
JDBC Reactive Extension
Reactive Driver
13. Définit une interface standard de
programmation réactive basée
sur les Reactive Streams,
destinée aux interactions avec
les bases de données
relationnelles. Reactive Streams
R2DBC SPI
R2DBC Driver X
16. UN PEU DE DÉPENDANCES POUR
COMMENCER…
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
20. public interface RobotRepository
extends ReactiveCrudRepository<Robot, Long> {
Flux<Robot> findByName(String name);
@Query("select distinct movie from robot")
Flux<String> getMovies();
}
CLASSE Reactive***Repository
21. @Transactional
public Mono<Void> create(Robot robot, Movie movie) {
return robotRepository.save(robot)
.then(movieRepository.save(movie))
.then();
}
ET AVEC UN ZESTE DE TRANSACTION!
public Mono<Void> create(Robot robot, Movie movie) {
TransactionalOperator rxtx = TransactionalOperator.create(reactiveTxManager );
return robotRepository.save(robot)
.then(movieRepository.save(movie))
.then()
.as(rxtx::transactional);
}
26. R2DBC PROXY
Librairie fournissant des callbacks
permettant d’accéder à l’exécution
des requêtes, pour:
- logging,
- métriques,
- traçage distribué,
- … R2DBC Driver
R2DBC Proxy
Application
27. R2DBC ET MULTI-TENANCY
Comment gérer plusieurs connexions selon un
contexte d’exécution ?
- AbstractR2dbcRouting : configuration des
différentes connexions
- AbstractRoutingConnectionFactory : fournit la
clé de sélection de la connexion
30. LOOM VA TUER LA PROGRAMMATION
REACTIVE ?
Movie getRobotFirstMovie(String robotName) {
Robot robot = repository.findRobotByName(robotName);
Movie movie = repository.findMovieById(robot.firstMovie);
return movie;
}
Movie getRobotFirstMovie(String robotName) {
CompletableFuture<Robot> robotFuture = CompletableFuture
.supplyAsync(() -> repository.findRobotByName(robotName));
CompletableFuture<Movie> movieFuture = robotFuture
.thenApplyAsync(robot -> repository.findMovieById(robot.firstMovie));
return movieFuture.get();
}
Mono<Movie> getFirstMovie(String robotName) {
return repository.findRobotByName(robotName)
.flatMap(robot -> repository.findMovieById(robot.firstMovie))
…. // Pleins de traitement: log, zip, map, …
.onErrorReturn(new Movie("Star Wars IV"));
}
?
@RunOnVirtualThread
31. LOOM VA TUER LA PROGRAMMATION
REACTIVE ?
Peut-être… ou pas
32. EN RÉSUMÉ …
Qu’a-t-on vu ?
- Initiative plus qu’intéressante pour standardiser l’accès aux bases de
données relationnelles en mode réactif
- Il y a aussi des transactions, du batch, des entity callbacks, de
l’observability, …
- Support de la communauté (clients, drivers, …)
- On peut faire du R2DBC sans aucun autre framework, mais ça va être
un peu roots :)
Mais il reste du boulot !
- Des frameworks en cours de mises à jour (Liquibase, …)
- Spring : pas de support des relations dans les entités :(
35. D’UN SYSTÈME SYNCHRONE ET
BLOQUANT…
Thread de traitement Thread bloqué !
Worker
thread
Hyper simplifié :)
Poursuite du traitement
36. … À UN SYSTÈME ASYNCHRONE ET
NON BLOQUANT !
Traitement d’une requête
Événement (tâche à réaliser avec
callback)
Invocation callback
Event loop
Traitement tâche
Modèle “Event Loop”
Événement
(résultat traitement tâche)
Worker
threads