Gérer son environnement de développement avec DockerJulien Dubois
Utilisation de Docker pour gérer une stack de développement "moderne", avec Maven / Grunt / Bower / Yeoman, et pouvoir facilement se partager ses containers entre membres d'une même équipe
L’un des enjeux principaux de Docker est de rapprocher les équipes de développement de celles de la production. Docker permet, en effet, d’aisément installer une application, mais également de la modifier rapidement.
Ce livre blanc s’adresse donc à la fois aux opérationnels et aux développeurs mais aussi à tous ceux qui organisent la DSI ou les différents projets.
Gérer son environnement de développement avec DockerJulien Dubois
Utilisation de Docker pour gérer une stack de développement "moderne", avec Maven / Grunt / Bower / Yeoman, et pouvoir facilement se partager ses containers entre membres d'une même équipe
L’un des enjeux principaux de Docker est de rapprocher les équipes de développement de celles de la production. Docker permet, en effet, d’aisément installer une application, mais également de la modifier rapidement.
Ce livre blanc s’adresse donc à la fois aux opérationnels et aux développeurs mais aussi à tous ceux qui organisent la DSI ou les différents projets.
How to develop with Angular in a JHipster Application ?
Discover the ecosystem, the benefits and the risks about using the latest framework from Google within the popular application generator.
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
4ème workshop @Oxalide, animé par Julien Follenfant, Théo Chamley (@MrTrustor) et Ludovic Piot (@lpiot), le 24 mai 2016.
Une entrée en matière sur la technologie Docker et son écosystème à date : pourquoi un tel engouement, à quel point Docker s'inscrit parfaitement dans la démarche DevOps…
Un TP sur le montage d'un cluster ElasticSearch avec le Dockerfile.
Une démo de kubernetes.
Subject: Oxalide's workshop about an overview of Docker and its ecosystem.
Date: 24-mai-2016
Speakers: Julien Follenfant (@Oxalide), Théo Chamley (@MrTrustor, @Oxalide) and Ludovic Piot (@lpiot, @Oxalide)
Language: french
Lien SpeakerDeck : https://speakerdeck.com/lpiot/oxalide-workshop-number-4-docker-des-tours-dans-le-petit-bassin
Lien SlideShare : http://www.slideshare.net/LudovicPiot/workshop-4-docker-des-tours-dans-le-petit-bassin
YouTube Video capture: https://youtu.be/xJuRS6QYAAk
Main topics:
* Introduction 15 min (Ludovic Piot)
** D’où vient Docker ?
** Les principales caractéristiques de Docker
*** POrtable (package)
*** DIsposable (cattle vs. pet)
*** LIve (git style)
*** SOcial (registry / Github style)
* Hands-on #1 - Mon premier container (Julien Follenfant 35 min)
** Un tour d’horizon de DockerHub
** Installation de Docker Toolbox
** Création d’un Dockerfile (outil stand-alone)
** Introspecter un container
** Configurer un container
** Monter un cluster Elasticsearch 3 nœuds
* Comment ça marche ? (Théo Chamley 20 min)
** Namespaces & cgroups
** Layered FS (les poupées russes)
** Cache Image
** Networking
** Volumes
* Nouvelles collaborations (Ludovic Piot 10 min)
** CaaS (infra + cluster de containers vs. containers + appli)
* Ecosystème 20 min
** Les produits Docker, inc. (Ludovic Piot)
** Les alternatives (CoreOS, OpenContainer Initiative, Warden/Garden) (Ludovic Piot)
** La registry (Docker Registry, Nexus) (Ludovic Piot)
** L’autodiscovery (Consul, etcd, ZooKeeper) (Ludovic Piot)
** Les composants réseaux (haproxy, traefik, zipnish) (Julien Follenfant)
** Les orchestrateurs (kubernetes (Théo Chamley), Mesos/Marathon, Swarm, Fleet) (Ludovic Piot)
** Les solutions PaaS/CaaS intégrées (OpenShift, Rancher (Théo Chamley), Deis, CloudFoundry) => screenshots (Ludovic Piot)
** Les services de cloud publics (AWS ECS et ECR, GKE) (Ludovic Piot)
* Demo - utilisation de Kubernetes 15 min (Théo Chamley)
* Questions / Réponses
1. DOCKER VS VM
2. CONSTRUIRE MANUELLEMENT UNE IMAGE PHP7
3. LANCER SCRIPT PHP 7 EN MODE CONSOLE VIA DOCKER
4. LANCER SCRIPT PHP 7 EN MODE WEB VIA DOCKER
5. AUTOMATISER LE BUILD D’UNE IMAGE DOCKER
6. ORCHESTRER LES CONTAINERS
7. LOAD BALANCER 2 CONTAINERS WEB
8. UTILISER LES IMAGES DE LA COMMUNAUTÉ
-------
1. DOCKER VS VM
2. MANUALLY BUILD A PHP7 IMAGE
3. START SCRIPT PHP 7 IN CONSOLE MODE VIA DOCKER
4. LAUNCH SCRIPT PHP 7 IN WEB MODE VIA DOCKER
5. AUTOMATING THE BUILD OF A DOCKER IMAGE
6. ORCHESTRATING CONTAINERS
7. LOAD BALANCEOR 2 WEB CONTAINERS
8. USER IMAGES OF THE COMMUNITY
jQuery est une bibliothèque JavaScript libre qui porte sur l'interaction entre JavaScript (comprenant Ajax) et HTML, et a pour but de simplifier des commandes communes de JavaScript.
Atelier présenté par SMAHI Zakaria.
UX Day, Semaine du Web.
GWT Principes & Techniques
Des IHM avec GWT
Des IHM avec GWT +
Communiquer avec le serveur
Internationalisation I18n
Développer un composant graphique
Historique du navigateur
Logging
Tester avec JUNIT
Divers principes avancées
JavaScript overlay types
Intégrer une appli GWT dans JavaScript
Code Splitting
Étendre la JRE Émulation
Sérialisation spécifique
Compile Reports
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Aurelien Navarre
Ce n'est pas vraiment du Drupal mais ça peut servir à tous les drupalistes ! Pour le meetup Drupal Lyon de juillet 2016 j'ai voulu parler des containers mais surtout de l'orchestration. Que ce soit LXC, ou Docker peu importe en fait. Tout dépend de vos besoins. Mais pour l'orchestration, ma préférence va clairement à Ansible qui est facile d'apprentissage et si pratique au quotidien, que ce soit pour vos environnements de dév ou prod.
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...adri1s
Premier Meetup Docker sur Nice. A cette occasion nous nous retrouverons dans les locaux d’Epitech Nice pour une conférence suivie d'ateliers.
En partenariat avec :
- Epitech Nice
- Gandi
- Wizishop
http://www.meetup.com/Docker-Nice/events/222345639/
Présentation de la bibliothèque JavaScript jQuery dans le cadre du cours combiné GTI780 / MTI780, Sujets spéciaux en TI, donné par Claude Coulombe, à l\'École de technologie supérieure, Montréal, Automne 2008
Docker Tours Meetup #1 - Introduction à DockerThibaut Marmin
Slides de l'introduction à Docker présentée par Thibaut Marmin et Antoine Boudot lors du premier Docker Tours Meetup (@DockerTours).
Présentation en trois parties :
- Introduction Docker (classique)
- Cas pratique en DEV
- Cas pratique en PROD
http://www.meetup.com/fr/Docker-Tours
Après avoir abordé les différentes problématiques autour d'AngularJS, du Continuous Delivery et de Java 8 :
les NightClazz sont de retours en 2015.
Zenika a hébergé le Docker Tour de France, en décembre dernier, souhaitant poursuivre notre investissement sur cette technologie nous vous proposons d'assister à la NightClazz Docker - Découverte.
Présentation portant sur le système de virtualisation Docker.
Langue : Français.
Auteur : Colin LEVERGER, me@colinleverger.fr, merci de citer vos sources ;)
Sources : Wikipedia / Docker site officiel : https://www.docker.com/
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Silicon Comté
Docker est une plateforme open source, pour les développeurs et les administrateurs systèmes, destinée à empaqueter une application et ses dépendances dans le but de l’exécuter sur n’importe quel serveur.
Il a pour objectif de faciliter le déploiement d’une application, d’avoir plusieurs versions de celle-ci et également d’automatiser son packaging tout en gardant un système de base propre.
Alexandre Di Pino nous présentera cette technologie et l’utilisation qu’il en fait dans un contexte de production.
A propos de l’intervenant
Titulaire d’un master en informatique à Epitech, Alexandre travaille au sein de la société InSimo, société développant un moteur physique temps réel pour la simulation médicale. Twitter : @a_dipino / LinkedIn : alexandredipino
Présentation de la bibliothèque JavaScript jQuery dans le cadre du cours combiné GTI780 / MTI780, Sujets spéciaux en TI, donné par Claude Coulombe, à l'École de technologie supérieure, Montréal, Automne 2009
jQuery est une bibliothèque JavaScript libre qui porte sur l'interaction entre JavaScript (comprenant Ajax) et HTML, et a pour but
de simplifier des commandes communes de JavaScript. La première version date de janvier 2006.
Le framework contient notamment les fonctionnalités suivantes :
- Parcours et modification du DOM
- Selecteurs CSS 1 à 3
- Événements
- Effets et animations
- Manipulations des feuilles de style en cascade
- Ajax
- Plugins
- Fonctions utilitaires
How to develop with Angular in a JHipster Application ?
Discover the ecosystem, the benefits and the risks about using the latest framework from Google within the popular application generator.
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
4ème workshop @Oxalide, animé par Julien Follenfant, Théo Chamley (@MrTrustor) et Ludovic Piot (@lpiot), le 24 mai 2016.
Une entrée en matière sur la technologie Docker et son écosystème à date : pourquoi un tel engouement, à quel point Docker s'inscrit parfaitement dans la démarche DevOps…
Un TP sur le montage d'un cluster ElasticSearch avec le Dockerfile.
Une démo de kubernetes.
Subject: Oxalide's workshop about an overview of Docker and its ecosystem.
Date: 24-mai-2016
Speakers: Julien Follenfant (@Oxalide), Théo Chamley (@MrTrustor, @Oxalide) and Ludovic Piot (@lpiot, @Oxalide)
Language: french
Lien SpeakerDeck : https://speakerdeck.com/lpiot/oxalide-workshop-number-4-docker-des-tours-dans-le-petit-bassin
Lien SlideShare : http://www.slideshare.net/LudovicPiot/workshop-4-docker-des-tours-dans-le-petit-bassin
YouTube Video capture: https://youtu.be/xJuRS6QYAAk
Main topics:
* Introduction 15 min (Ludovic Piot)
** D’où vient Docker ?
** Les principales caractéristiques de Docker
*** POrtable (package)
*** DIsposable (cattle vs. pet)
*** LIve (git style)
*** SOcial (registry / Github style)
* Hands-on #1 - Mon premier container (Julien Follenfant 35 min)
** Un tour d’horizon de DockerHub
** Installation de Docker Toolbox
** Création d’un Dockerfile (outil stand-alone)
** Introspecter un container
** Configurer un container
** Monter un cluster Elasticsearch 3 nœuds
* Comment ça marche ? (Théo Chamley 20 min)
** Namespaces & cgroups
** Layered FS (les poupées russes)
** Cache Image
** Networking
** Volumes
* Nouvelles collaborations (Ludovic Piot 10 min)
** CaaS (infra + cluster de containers vs. containers + appli)
* Ecosystème 20 min
** Les produits Docker, inc. (Ludovic Piot)
** Les alternatives (CoreOS, OpenContainer Initiative, Warden/Garden) (Ludovic Piot)
** La registry (Docker Registry, Nexus) (Ludovic Piot)
** L’autodiscovery (Consul, etcd, ZooKeeper) (Ludovic Piot)
** Les composants réseaux (haproxy, traefik, zipnish) (Julien Follenfant)
** Les orchestrateurs (kubernetes (Théo Chamley), Mesos/Marathon, Swarm, Fleet) (Ludovic Piot)
** Les solutions PaaS/CaaS intégrées (OpenShift, Rancher (Théo Chamley), Deis, CloudFoundry) => screenshots (Ludovic Piot)
** Les services de cloud publics (AWS ECS et ECR, GKE) (Ludovic Piot)
* Demo - utilisation de Kubernetes 15 min (Théo Chamley)
* Questions / Réponses
1. DOCKER VS VM
2. CONSTRUIRE MANUELLEMENT UNE IMAGE PHP7
3. LANCER SCRIPT PHP 7 EN MODE CONSOLE VIA DOCKER
4. LANCER SCRIPT PHP 7 EN MODE WEB VIA DOCKER
5. AUTOMATISER LE BUILD D’UNE IMAGE DOCKER
6. ORCHESTRER LES CONTAINERS
7. LOAD BALANCER 2 CONTAINERS WEB
8. UTILISER LES IMAGES DE LA COMMUNAUTÉ
-------
1. DOCKER VS VM
2. MANUALLY BUILD A PHP7 IMAGE
3. START SCRIPT PHP 7 IN CONSOLE MODE VIA DOCKER
4. LAUNCH SCRIPT PHP 7 IN WEB MODE VIA DOCKER
5. AUTOMATING THE BUILD OF A DOCKER IMAGE
6. ORCHESTRATING CONTAINERS
7. LOAD BALANCEOR 2 WEB CONTAINERS
8. USER IMAGES OF THE COMMUNITY
jQuery est une bibliothèque JavaScript libre qui porte sur l'interaction entre JavaScript (comprenant Ajax) et HTML, et a pour but de simplifier des commandes communes de JavaScript.
Atelier présenté par SMAHI Zakaria.
UX Day, Semaine du Web.
GWT Principes & Techniques
Des IHM avec GWT
Des IHM avec GWT +
Communiquer avec le serveur
Internationalisation I18n
Développer un composant graphique
Historique du navigateur
Logging
Tester avec JUNIT
Divers principes avancées
JavaScript overlay types
Intégrer une appli GWT dans JavaScript
Code Splitting
Étendre la JRE Émulation
Sérialisation spécifique
Compile Reports
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Aurelien Navarre
Ce n'est pas vraiment du Drupal mais ça peut servir à tous les drupalistes ! Pour le meetup Drupal Lyon de juillet 2016 j'ai voulu parler des containers mais surtout de l'orchestration. Que ce soit LXC, ou Docker peu importe en fait. Tout dépend de vos besoins. Mais pour l'orchestration, ma préférence va clairement à Ansible qui est facile d'apprentissage et si pratique au quotidien, que ce soit pour vos environnements de dév ou prod.
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...adri1s
Premier Meetup Docker sur Nice. A cette occasion nous nous retrouverons dans les locaux d’Epitech Nice pour une conférence suivie d'ateliers.
En partenariat avec :
- Epitech Nice
- Gandi
- Wizishop
http://www.meetup.com/Docker-Nice/events/222345639/
Présentation de la bibliothèque JavaScript jQuery dans le cadre du cours combiné GTI780 / MTI780, Sujets spéciaux en TI, donné par Claude Coulombe, à l\'École de technologie supérieure, Montréal, Automne 2008
Docker Tours Meetup #1 - Introduction à DockerThibaut Marmin
Slides de l'introduction à Docker présentée par Thibaut Marmin et Antoine Boudot lors du premier Docker Tours Meetup (@DockerTours).
Présentation en trois parties :
- Introduction Docker (classique)
- Cas pratique en DEV
- Cas pratique en PROD
http://www.meetup.com/fr/Docker-Tours
Après avoir abordé les différentes problématiques autour d'AngularJS, du Continuous Delivery et de Java 8 :
les NightClazz sont de retours en 2015.
Zenika a hébergé le Docker Tour de France, en décembre dernier, souhaitant poursuivre notre investissement sur cette technologie nous vous proposons d'assister à la NightClazz Docker - Découverte.
Présentation portant sur le système de virtualisation Docker.
Langue : Français.
Auteur : Colin LEVERGER, me@colinleverger.fr, merci de citer vos sources ;)
Sources : Wikipedia / Docker site officiel : https://www.docker.com/
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Silicon Comté
Docker est une plateforme open source, pour les développeurs et les administrateurs systèmes, destinée à empaqueter une application et ses dépendances dans le but de l’exécuter sur n’importe quel serveur.
Il a pour objectif de faciliter le déploiement d’une application, d’avoir plusieurs versions de celle-ci et également d’automatiser son packaging tout en gardant un système de base propre.
Alexandre Di Pino nous présentera cette technologie et l’utilisation qu’il en fait dans un contexte de production.
A propos de l’intervenant
Titulaire d’un master en informatique à Epitech, Alexandre travaille au sein de la société InSimo, société développant un moteur physique temps réel pour la simulation médicale. Twitter : @a_dipino / LinkedIn : alexandredipino
Présentation de la bibliothèque JavaScript jQuery dans le cadre du cours combiné GTI780 / MTI780, Sujets spéciaux en TI, donné par Claude Coulombe, à l'École de technologie supérieure, Montréal, Automne 2009
jQuery est une bibliothèque JavaScript libre qui porte sur l'interaction entre JavaScript (comprenant Ajax) et HTML, et a pour but
de simplifier des commandes communes de JavaScript. La première version date de janvier 2006.
Le framework contient notamment les fonctionnalités suivantes :
- Parcours et modification du DOM
- Selecteurs CSS 1 à 3
- Événements
- Effets et animations
- Manipulations des feuilles de style en cascade
- Ajax
- Plugins
- Fonctions utilitaires
Clairement dans cette version, nous assistons à une volonté de simplification. Plus de lisibilité du code, plus d’outils pour ne plus avoir à perdre de temps sur des opérations simples et courantes, pour au final un code de meilleur qualité et plus accessible. La plupart de ces améliorations se trouvent dans cette présentation.
Au coeur des applications Web riches, de HTML5 ou des applications Web mobiles, JavaScript est désormais incontournable. Sa communauté très dynamique a contribué à créer un écosystème complet pour répondre aux problématiques courantes de test, qualité du code ou intégration continue comme l'a fait avant elle la communauté Java il y a pas loin de dix ans... Parmi les projets les plus observés du moment, c'est curieusement côté serveur que JavaScript fait le plus parler de lui avec Node.js, un environnement de développement Web qui cultive sa différence.
Téléchargement du Coding Kata :
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
L’arrivée de PHP 5.3 en milieu d’année 2009 a bouleversé la manière de développer des applications web. En effet, cette nouvelle version a apporté de nouveaux outils au langage tels que les espaces de nommage qui favorisent la réutilisabilité du code lorsqu’ils sont employés à bon escient. Les nouveaux frameworks de développement rapide ont aussi suivi le mouvement et reposent sur la base de PHP 5.3. C’est le cas de Symfony2 dont la version stable est prévue prochainement.
Cette présentation offre un tour d’horizon de la nouvelle architecture du framework qui s’articule autour de “bundles”, de librairies externes et de nombreux composants indépendants tels que le conteneur d’injection de dépendances. Nous dresserons un panorama des principales fonctionnalités offertes par le framework telles que la couche d’ORM Doctrine 2, le moteur de templating Twig et la gestion des formulaires. Nous nous intéresserons également à la gestion du cache HTTP, à la couche de sécurité ainsi qu’aux outils de débogage destinés à améliorer la productivité du développeur et la maintenance de l’application.
Présentation dans le but d\'approfondir les connaissances sur GWT dans le cadre du cours combiné GTI780 / MTI780, Sujets spéciaux en TI, donné par Claude Coulombe, à l'Ecole de technologie supérieure, Montréal, Automne 2008
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Corinne Schillinger
Cette présentation vous propose de découvrir les possibilités offertes par Grunt, et de voir comment automatiser certaines tâches telles que la compilation des feuilles de styles, la concaténation et minification des fichiers JavaScript ou encore l'optimisation des images.
La conception d'application Web complexe se reposant sur un socle JavaScript devient monnaie courante.
De ce fait, nous nous devons de nous outiller, ainsi que d'utiliser des frameworks adéquats.
Cette présentation a pour but de vous faire découvrir l'un de ces frameworks: RequireJS.
Nous verrons alors que nous pouvons produire des applications modulaires avec gestion de dépendances simplement, permettant ainsi d'avoir des applications qui se chargent rapidement alors que nous avons un découpage complexe, mais aussi des applications maintenables et testables facilement.
Voir: http://humantalks.com/talks/26-apercu-de-requirejs
L'IA connaît une croissance rapide et son intégration dans le domaine éducatif soulève de nombreuses questions. Aujourd'hui, nous explorerons comment les étudiants utilisent l'IA, les perceptions des enseignants à ce sujet, et les mesures possibles pour encadrer ces usages.
Constat Actuel
L'IA est de plus en plus présente dans notre quotidien, y compris dans l'éducation. Certaines universités, comme Science Po en janvier 2023, ont interdit l'utilisation de l'IA, tandis que d'autres, comme l'Université de Prague, la considèrent comme du plagiat. Cette diversité de positions souligne la nécessité urgente d'une réponse institutionnelle pour encadrer ces usages et prévenir les risques de triche et de plagiat.
Enquête Nationale
Pour mieux comprendre ces dynamiques, une enquête nationale intitulée "L'IA dans l'enseignement" a été réalisée. Les auteurs de cette enquête sont Le Sphynx (sondage) et Compilatio (fraude académique). Elle a été diffusée dans les universités de Lyon et d'Aix-Marseille entre le 21 juin et le 15 août 2023, touchant 1242 enseignants et 4443 étudiants. Les questionnaires, conçus pour étudier les usages de l'IA et les représentations de ces usages, abordaient des thèmes comme les craintes, les opportunités et l'acceptabilité.
Résultats de l'Enquête
Les résultats montrent que 55 % des étudiants utilisent l'IA de manière occasionnelle ou fréquente, contre 34 % des enseignants. Cependant, 88 % des enseignants pensent que leurs étudiants utilisent l'IA, ce qui pourrait indiquer une surestimation des usages. Les usages identifiés incluent la recherche d'informations et la rédaction de textes, bien que ces réponses ne puissent pas être cumulées dans les choix proposés.
Analyse Critique
Une analyse plus approfondie révèle que les enseignants peinent à percevoir les bénéfices de l'IA pour l'apprentissage, contrairement aux étudiants. La question de savoir si l'IA améliore les notes sans développer les compétences reste débattue. Est-ce un dopage académique ou une opportunité pour un apprentissage plus efficace ?
Acceptabilité et Éthique
L'enquête révèle que beaucoup d'étudiants jugent acceptable d'utiliser l'IA pour rédiger leurs devoirs, et même un quart des enseignants partagent cet avis. Cela pose des questions éthiques cruciales : copier-coller est-il tricher ? Utiliser l'IA sous supervision ou pour des traductions est-il acceptable ? La réponse n'est pas simple et nécessite un débat ouvert.
Propositions et Solutions
Pour encadrer ces usages, plusieurs solutions sont proposées. Plutôt que d'interdire l'IA, il est suggéré de fixer des règles pour une utilisation responsable. Des innovations pédagogiques peuvent également être explorées, comme la création de situations de concurrence professionnelle ou l'utilisation de détecteurs d'IA.
Conclusion
En conclusion, bien que l'étude présente des limites, elle souligne un besoin urgent de régulation. Une charte institutionnelle pourrait fournir un cadre pour une utilisation éthique.
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...OCTO Technology
par Claude Camus (Coach agile d'organisation @OCTO Technology) et Gilles Masy (Organizational Coach @OCTO Technology)
Les équipes infrastructure, sécurité, production, ou cloud, doivent consacrer du temps à la modernisation de leurs outils (automatisation, cloud, etc) et de leurs pratiques (DevOps, SRE, etc). Dans le même temps, elles doivent répondre à une avalanche croissante de demandes, tout en maintenant un niveau de qualité de service optimal.
Habitué des environnements développeurs, les transformations agiles négligent les particularités des équipes OPS. Lors de ce comptoir, nous vous partagerons notre proposition de valeur de l'agilité@OPS, qui embarquera vos équipes OPS en Classe Business (Agility), et leur fera dire : "nous ne reviendrons pas en arrière".
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...Horgix
This is the slide deck of a talk by Alexis "Horgix" Chotard and Laurentiu Capatina presented at the MongoDB Paris User Group in June 2024 about the feedback on how PayFit move away from a monolithic hell of a self-hosted MongoDB cluster to managed alternatives. Pitch below.
March 15, 2023, 6:59 AM: a MongoDB cluster collapses. Tough luck, this cluster contains 95% of user data and is absolutely vital for even minimal operation of our application. To worsen matters, this cluster is 7 years behind on versions, is not scalable, and barely observable. Furthermore, even the data model would quickly raise eyebrows: applications communicating with each other by reading/writing in the same MongoDB documents, documents reaching the maximum limit of 16MiB with hundreds of levels of nesting, and so forth. The incident will last several days and result in the loss of many users. We've seen better scenarios.
Let's explore how PayFit found itself in this hellish situation and, more importantly, how we managed to overcome it!
On the agenda: technical stabilization, untangling data models, breaking apart a Single Point of Failure (SPOF) into several elements with a more restricted blast radius, transitioning to managed services, improving internal accesses, regaining control over risky operations, and ultimately, approaching a technical migration when it impacts all development teams.
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Laurent Speyser
(Conférence dessinée)
Vous êtes certainement à l’origine, ou impliqué, dans un changement au sein de votre organisation. Et peut être que cela ne se passe pas aussi bien qu’attendu…
Depuis plusieurs années, je fais régulièrement le constat de l’échec de l’adoption de l’Agilité, et plus globalement de grands changements, dans les organisations. Je vais tenter de vous expliquer pourquoi ils suscitent peu d'adhésion, peu d’engagement, et ils ne tiennent pas dans le temps.
Heureusement, il existe un autre chemin. Pour l'emprunter il s'agira de cultiver l'invitation, l'intelligence collective , la mécanique des jeux, les rites de passages, .... afin que l'agilité prenne racine.
Vous repartirez de cette conférence en ayant pris du recul sur le changement tel qu‘il est généralement opéré aujourd’hui, et en ayant découvert (ou redécouvert) le seul guide valable à suivre, à mon sens, pour un changement authentique, durable, et respectueux des individus! Et en bonus, 2 ou 3 trucs pratiques!
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...OCTO Technology
Par Nicolas Bordier (Consultant numérique responsable @OCTO Technology) et Alaric Rougnon-Glasson (Sustainable Tech Consultant @OCTO Technology)
Sur un exemple très concret d’audit d’éco-conception de l’outil de bilan carbone C’Bilan développé par ICDC (Caisse des dépôts et consignations) nous allons expliquer en quoi l’ACV (analyse de cycle de vie) a été déterminante pour identifier les pistes d’actions pour réduire jusqu'à 82% de l’empreinte environnementale du service.
Vidéo Youtube : https://www.youtube.com/watch?v=7R8oL2P_DkU
Compte-rendu :
1. Google Web Toolkit
« Under the hood »
Sébastien VUILLET
Directeur technique
Chez Silverpeas
2. Plateforme collaborative
La réalisation d'un Intranet/Extranet
La gestion documentaire (GED)
La gestion d'une banque d'images
La gestion documentaire de projets
La gestion de connaissances
Et plus encore ...
www.silverpeas.com
www.silverpeas.org
3. Version mobile
Power by
www.silverpeas.com
www.silverpeas.org
4. État des lieux
Le développement d'applications web c'est
quoi ?
Différents langages : HTML + CSS + JavaScript +
Java
Différents formats d'échanges : XML, Json ...
Différents environnement d’exécution : Desktop,
smatphone, tablette
Différents moteurs d’exécution : IE, FF, ...
Utilisation de langages interprétés
5. État des lieux
Au final développer une webapp ce n'est
toujours pas facile !
6. GWT - Définition
Ensemble d'outils
Abstraction :
du développement JavaScript
de l'environnement d’exécution
« One to rule them all »
Un langage : Java
8. GWT - Compilateur
Étape Java AST -> Optimized Java AST :
Pruning : suppression des classes / interfaces /
méthodes / attributs non référencés.
Finalizing : rend les méthodes, les classes et les
variables final si c'est possible.
Make Static : rend statiques les méthodes
d'instances si possible (pas de surcharge, n'utilise
pas de variables d'instance).
9. GWT - Compilateur
Étape Java AST -> Optimized Java AST :
Type Tightening : optimisation des attributs et
paramètres pour les rendre concrets (pour réduire
les opérateurs cast et instanceof).
Method Call Tightening : changement des appels
de méthodes polymorphiques, en appel direct.
Dead Code Elimination : suppression des portions
de code qui n'est jamais appelé (condition jamais
10. GWT - Compilateur
Étape Java AST -> Optimized Java AST :
Method Inlining : suppression des méthodes non
référencés dans une classe extérieure et
embarquement du code directement dans à
l'endroit de l'appel (si la méthode n’excède pas
deux lignes).
Same Parameter Value Optimizer
Enum Ordinalizer : remplace les références aux
11. GWT - Compilateur
Étape Java AST -> Optimized Java AST :
Remove Empty Super Calls
Set of Normalization Rules : transformation du
code pour que la génération du JavaScript soit
optimale (fusion des blocs catch, utilisation
d'array). Remplacement des appels aux classes
du JDK par de les classes de
com.google.gwt.lang.
12. GWT - Compilateur
Étape Java AST -> Optimized Java AST :
arbre « unifié », car il n'est lié à aucune permutation
13. GWT – Compilateur
Les permutations
Télécharge uniquement
la version nécessaire
au navigateur client
Un seul
code
Java
… puis le met en cache
indéfiniment
14. GWT - Compilateur
Possibilité de désactiver les optimisations :
Paramètre : -draftCompile
Réglage du code généré :
Paramètre : -style (OBF, PRETTY, DETAILED)
Amélioration des temps de compilation :
Paramètre : -localWorkers
Limiter les permutations : <set-property
name="user.agent" value="gecko"/>
15. GWT - Compilateur
Code généré par défaut :
function qH(){return np}
function mH(){}
_=mH.prototype=new mu;_.gC=qH;_.tI=0;function
uH(){uH=ZH;sH={};tH=[];sH[LM]=[Is,Hs,Js];sH[JM]=[rt,qt,st];Xv(tH,yn,LM);Xv(tH,To,JM)}
var sH,tH;function AH(a){a.b=oH(new mH);return a}
function BH(a){var b,c,d,e,f,g,h,i,j,k;g=ox(new cx,MM);f=OA(new FA);j=XH(new
VH,NM,OM);KA(f,j.b+sJ+j.c);pw(g.B,PM,true);Zw(gA(QM),f);Zw(gA(RM),g);f.B.focus()
;k=Jg(f.B,NJ).length;k>0&&JA(f,0,k);c=py(new my);Lf((tf(),c.b.B),SM);c.o=true;
b=ox(new cx,TM);b.B.id=UM;i=Py(new Ny);h=Ty(new My);d=UA(new RA);pw(d.B,VM,true);
VA(d,Uy(new My,WM));VA(d,i);VA(d,Uy(new My,XM));VA(d,h);d.b=(kz(),jz);VA(d,b);
Ax(c.j,d);Mx(c);vw(b,FH(new DH,c,g),(sh(),rh));e=KH(new IH,a,g,f,i,h,c,b);
vw(g,e,rh);vw(f,e,(hi(),gi))}
function CH(){return rp}
function xH(){}
16. GWT - Compilateur
Code généré en style pretty :
var $wnd = parent;
var $doc = $wnd.document;
var $moduleName, $moduleBase;
var $strongName = '21B409FCD39529C5A9DB925F7D8D9A95';
var $stats = $wnd.__gwtStatsEvent ? function(a) {return
$wnd.__gwtStatsEvent(a);} : null;
$stats && $stats({moduleName:'gwtperf',subSystem:'startup',evtGroup:
'moduleStartup',millis:(new Date()).getTime(),type:'moduleEvalStart'});
var _;
function nullMethod(){
}
function equals(other){
return this === (other == null?null:other);
}
function getClass_0(){
return Ljava_lang_Object_2_classLit;
}
function hashCode_0(){
return this.$H || (this.$H = ++sNextHashId);
}
function toString_0(){
return (this.typeMarker$ == nullMethod || this.typeId$ ==
2?this.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit)
.typeName + '@' + toPowerOfTwoString(this.typeMarker$ == nullMethod || this.typeId$
== 2?this.hashCode$():this.$H || (this.$H = ++sNextHashId), 4);
}
function Object_0(){
}
_ = Object_0.prototype = {};
_.equals$ = equals;
_.getClass$ = getClass_0;
_.hashCode$ = hashCode_0;
_.toString$ = toString_0;
_.toString = function(){
return this.toString$();
}
;
19. GWT – Deferred binding
Le Deferred Binding consiste à effectuer l’insertion de la classe
demandée à la compilation et non durant l’exécution du
programme.
Deux implémentation de Deferred Binding
Replacement : une classe est remplacée par une autre sous
certaines conditions
Generators : les classes qui héritent d’une classe particulière
sont générées et remplacées sous certaines conditions
20. GWT – Deferred binding
Replacement :
Configuration du module
21. GWT – Deferred binding
Generators :
Classes invoquées par le compilateur GWT pour générer
l’implémentation d’un classe java
Pour la compilation en mode web, l’implémentation générée est
directement traduite en Javascript
Configuration du module :
Créer un générateur
22. GWT – Linkers
Assurent le packaging
Exemples de linkers :
IframeLinker (défaut) : génère une Iframe cachée
XSLinker : produit des fichiers d'extension xs
comme <module>-xs.nocache.js (cas des
permutations hébergés sur un autre serveur que
les pages hôtes).
SingleScriptLinker : génère un seul fichier Java-
Script pour un module. Il n'existe qu'une seule
permutation.
24. GWT – Linkers
Créer un linker :
Créer une classe dérivant de
com.google.gwt.core.ext.Linker.
Ajouter l'annotation @LinkOrder pour déterminer si le
linker doit s'exécuter avant, après ou en
remplacement du linker primaire. Le nombre de
linkers n'est pas limité, seul le primaire est unique.
Définir et ajouter le linker personnalisé dans le fichier
de configuration du module (<module>.gwt.xml).
Inclure dans le classpath du compilateur le nouveau
25. GWT – Linkers
Exemple de linker :
@LinkerOrder(LinkerOrder.Order.POST)
public class MyLinker extends AbstractLinker {
public String getDescription() {
return "MyLinker";
}
public ArtifactSet link(TreeLogger logger, LinkerContext context,
ArtifactSet artifacts) throws UnableToCompleteException {
String artifactList="";
// Récupère la liste de tous les artéfacts
ArtifactSet toReturn = new ArtifactSet(artifacts);
for (Artifact artifact : toReturn) {
// Et trie seulement les fichiers générés
if (artifact instanceof EmittedArtifact) {
EmittedArtifact fic = (EmittedArtifact) artifact;
// Stocke dans une chaîne de caractères le nom du fichier généré
artifactList = fic.getPartialPath() + "," + new
Date(fic.getLastModified()).toString() + "n" + artifactList ;
}
}
// Ajoute à la liste précédente un nouveau fichier recensant
// les artéfacts
toReturn.add(emitString(logger, artifactList, "ListFiles.txt"));
return toReturn;
}
}
31. GWT - JRE Emulation
Non supporté
Multithreading (pour l'instant)
Gestion de la concurrence (pour l'instant)
Finalisation des objets
Réflexion
32. GWT - JRE Emulation
Étendre la JRE Emulation :
Ex : Timestamp
<module>
...
<!-- JRE Classes not Emulated by GWT -->
<super-source path='jre'/>
</module>
Serializer :
Timestamp_CustomFieldSerializer
public static void serialize(SerializationStreamWriter streamWriter, MyObject myObject)
throws SerializationException {}
public static void deserialize(SerializationStreamReader streamReader, MyObject myObject)
throws SerializationException {}
//This method is optional
public static MyObject instantiate(SerializationStreamReader streamReader)
throws SerializationException {}
33. GWT - tools
Environnement de développement
Google plugin pour Eclipse, GWT Designer
Debug
dans Eclipse avec dev mode et les plugins
navigateurs
Optimisation
SpeedTracer, Soyc
Build
Maven plugin
Tests
HtmlUnit, Selenium,...
34. GWT - synthèse
Pas un framework : beaucoup plus
gwt-user.jar
Le Framework
gwt-dev-[platform].jar
Les outils
46. GWT – Bilan de l'approche
Perfect caching
Client Bundle
Data : URLs & MHTML packaging
Developer guided code splitting
47. GWT - Développements
JSNI <=> JNI
Ouverture et intégration
Fonctionnalités
Invoquer du JavaScript natif depuis du code Java
public static native void alert(String msg) /*-{
$wnd.alert(msg);
}-*/;
48. GWT - Développements
JSNI
Invoquez une méthode Java depuis du code
javaScript externe
//La fonction Java qu'on peut appeler depuis javaScript
public static int maFonctionJava(int param) { ... }
public static native void exportationMaFonction() /*-{
//On assigne notre méthode
// à la variable globale maFonctionJava de notre objet window
$wnd.maFonctionJava = $entry(@com.silverpeas.jsni.client::maFonctionJava(I));
}-*/
49. GWT - Développements
Communication avec le serveur
Plusieurs approches :
RequestBuilder + JSONParser (resty-gwt)
RequestBuilder + XMLParser
GWT-RPC
RequestFactory (depuis GWT 2.1)
50. GWT - Développements
Communication avec le serveur
GWT-RPC
@RemoteServiceRelativePath("Contact")
public interface ServiceContact extends RemoteService {
List<DetailUserDTO> getAllContact() throws ContactException;
}
public class ServiceContactImpl extends AbstractAuthenticateService
implements ServiceContact {
public List<DetailUserDTO> getAllContact() throws ContactException {
...
}
}
51. GWT - Développements
Communication avec le serveur
GWT-RPC
public interface ServiceContactAsync {
void getAllContact(AsyncCallback<List<DetailUserDTO>> callback);
}
web.xml
<servlet>
<servlet-name>serviceContactImpl</servlet-name>
<servlet-class>com.silverpeas.mobile.server.services.ServiceContactImpl</servlet-
class>
</servlet>
<servlet-mapping>
<servlet-name>serviceContactImpl</servlet-name>
<url-pattern>/spmobil/Contact</url-pattern>
</servlet-mapping>
52. GWT - Développements
Communication avec le serveur
GWT-RPC : appel
ServiceContactAsync serviceContact =
(ServiceContactAsync) GWT.create(ServiceContact.class);
serviceContact.getAllContact(new AsyncCallback<List<DetailUserDTO>>() {
@Override
public void onFailure(Throwable caught) {
...
}
@Override
public void onSuccess(List<DetailUserDTO> result) {
...
}
});
54. GWT - Développements
Communication avec le serveur
GWT-RPC : Simple et puissant
Envoie / réception de POJO
Support du polymorphisme
Transfert optimisés
(plus léger que JSON)
Sécurité (pas de risque de
JavaScript hijacking/JSON attack)
55. GWT - Développements
Communication avec le serveur
RequestFactory
Pour les services orientés données
Niveau d’abstraction plus important que GWT-RPC
Plus rapide que GWT-RPC
Basé sur JSON : pas de sérialisation/déserialisation
Envoi uniquement du différentiel de données
Réponse aux problèmes Entity / DTO
56. GWT - Développements
Communication avec le serveur
RequestFactory : Entity proxies
@Entity
public class Employee { @ProxyFor(Employee.class)
public interface EmployeeProxy
@Size(min = 3, max = 30) extends EntityProxy {
private String userName;
Long getId();
@Id
private Long id; String getUserName();
@Version void setUserName(String userName);
private Integer version;
...
... }
}
57. GWT - Développements
Communication avec le serveur
RequestFactory : Value proxies
public interface AddressProxy extends ValueProxy
public class Address {
{
private String street1;
public String getStreet1();
private String street2;
public String getStreet2();
private String city;
public String getCity();
private String st;
public String getSt();
private String zip;
public String getZip();
...
...
}
}
58. GWT - Développements
Communication avec le serveur
RequestFactory
public interface ExpensesRequestFactory extends RequestFactory {
EmployeeRequest employeeRequest();
...
}
@Service(Employee.class)
public interface EmployeeRequest extends RequestContext {
Request<Long> countEmployees();
Request<List<EmployeeProxy>> findAllEmployees();
Request<EmployeeProxy> findEmployee(Long id);
InstanceRequest<EmployeeProxy, Void> persist();
InstanceRequest<EmployeeProxy, Void> remove();
}
59. GWT - Développements
Communication avec le serveur
RequestFactory
final EventBus eventBus = new SimpleEventBus();
requestFactory = GWT.create(ExpensesRequestFactory.class);
requestFactory.initialize(eventBus);
requestFactory.employeeRequest().findEmployee(employeeId).fire(
new Receiver<EmployeeProxy>() {
@Override
public void onSuccess(EmployeeProxy employee) {
...
}
});
EmployeeRequest request = requestFactory.employeeRequest();
EmployeeProxy newEmployee =
request.create(EmployeeProxy.class);
newEmployee.setDisplayName(...);
newEmployee.setDepartment(...);
...
Request<Void> createReq = request.persist().using(newEmployee);
60. GWT - Développements
Communication avec le serveur
RequestFactory : entity validation
JSR 303 support
Envoi de violation de contraintes au client
Appel de la méthode onViolation() du Receiver
61. GWT - Développements
Des logs dans le browser
GWT logging
# Dans le fichier .gwt.xml
<inherits name="com.google.gwt.logging.Logging"/>
Logger logger = Logger.getLogger("monLogger");
logger.log(Level.SEVERE, "impossible de contacter le serveur");
65. GWT - Développements
Approche de développement par composants
En java : « comme Swing »
Widgets et placement par Panels et Layouts
Avantages :
abstraction de l'html / javascript
(DOM/event/memory)
programmation événementielle
refactoring
Inconvénients :
68. GWT - Développements
Les widgets
Construire ses propres widgets
Trois possibilités pour créer ses propres composants :
Créer un widget avec des widgets existants
Héritage de com.google.gwt.user.client.ui.Composite
Créer un widget nouveau sans composition
Héritage de com.google.gwt.user.client.ui.Widget
Créér un widget qui « wrap » du code JavaScript en utilisation using JSNI
69. GWT - Développements
Les widgets : construire ses propres widgets
public class OptionalTextBox extends Composite implements ClickHandler {
private TextBox textBox = new TextBox();
private CheckBox checkBox = new CheckBox();
public OptionalTextBox(String caption) {
VerticalPanel panel = new VerticalPanel();
panel.add(checkBox);
panel.add(textBox);
checkBox.setText(caption);
checkBox.setChecked(true);
checkBox.addClickHandler(this);
}
public void onClick(ClickEvent event) {
Object sender = event.getSource();
if (sender == checkBox) {
textBox.setEnabled(checkBox.isChecked());
}
}
}
70. GWT - Développements
Les widgets : construire ses propres widgets
public class OptionalTextBox extends Composite implements ClickHandler {
private TextBox textBox = new TextBox();
private CheckBox checkBox = new CheckBox();
public OptionalTextBox(String caption) {
VerticalPanel panel = new VerticalPanel();
panel.add(checkBox);
panel.add(textBox);
checkBox.setText(caption);
checkBox.setChecked(true);
checkBox.addClickHandler(this);
}
public void onClick(ClickEvent event) {
Object sender = event.getSource();
if (sender == checkBox) {
textBox.setEnabled(checkBox.isChecked());
}
}
}
71. GWT - Développements
Ui-binder (depuis GWT 2.0) : declarative UI
Description des vues en XML
Binding XML (*.ui.xml) / Java (*.java)
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<g:HTMLPanel>
Gagnant, <g:ListBox ui:field='listBox' visibleItemCount='1'/>.
</g:HTMLPanel>
</ui:UiBinder>
72. GWT - Développements
Ui-binder (depuis GWT 2.0) : declarative UI
public class HelloWidgetWorld extends Composite {
interface MyUiBinder extends UiBinder<Widget, HelloWidgetWorld> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField ListBox listBox;
public HelloWidgetWorld(String... names) {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
for (String name : names) {
listBox.addItem(name);
}
}
}
83. GWT - Développements
Patterns
EventBus : event
public abstract class AbstractDocumentsControllerEvent extends
GwtEvent<DocumentsControllerEventHandler> {
public static Type<DocumentsControllerEventHandler> TYPE =
new Type<DocumentsControllerEventHandler>();
public AbstractDocumentsControllerEvent() {
}
@Override
public GwtEvent.Type<DocumentsControllerEventHandler> getAssociatedType() {
return TYPE;
}
}
87. GWT - Développements
Patterns
MVP : navigation
public class AppActivityMapper implements ActivityMapper {
private ClientFactory clientFactory;
public AppActivityMapper(ClientFactory clientFactory) {
super();
this.clientFactory = clientFactory;
}
@Override
public Activity getActivity(Place place) {
if (place instanceof HelloPlace)
return new HelloActivity((HelloPlace) place, clientFactory);
else if (place instanceof GoodbyePlace)
return new GoodbyeActivity((GoodbyePlace) place,
clientFactory);
return null;
}
}
88. GWT - Développements
Des APIs pour aller plus loin
Internationalisation
Sécurité
Accessibilité
Tests
...
89. GWT - Développements
Des bibliothèques pour aller plus loin
Gin : injection client-side
Gwt-ent : AOP, Reflexion, ...
Gwt-dnd
Gwt-comet
Crypto-gwt
Gwt-voices
Gquery
90. Uses cases
Application web single page
Caractéristiques :
Non server-centric
Webapp légère :
un conteneur de servlets suffit
pas de compilation des pages par le serveur d'applications
Application ou site web multi page
Caractéristiques :
Server-centric : jsp, jsf, php, html
Frameworks additionnels : vaadin
Application dans le cloud
92. Que s'est il passé depuis 2006 ?
Novembre 2011 :
Abandon de flex par adobe
Abandon de Silverlight par Microsoft
HTML5 plébiscité par le ténors du web
93. Que s'est il passé depuis 2006 ?
Adoption massive des smartphones
Explosion des applications mobiles natives
94. La suite : GWT 2.5
Amélioration du noyau :
Optimisation du compilateur :
30 % de réduction du code non
compressé et 15 % avec
compression gzip
Support de SourceMap et
Source-Level : java debugging
dans Chrome (Firefox à venir)
Le modèle de développement d'applications à énormément évolué depuis une décennie. Les technologies web se sont imposées et ont évoluées. Les applications web offrent de plus en plus de services, elles sont de plus en plus ergonomiques et performantes. Mais qu'en est-il du quotidien du développeur ? Les outils de développement ont-ils évolués ? Il y a 6 ans l'ovni GWT faisait son apparition, avec pour objectif de facilité le développement d'applications web sophistiqués La vision révolutionnaire de ses deux concepteurs a mit du temps a être accepté. De nos jours comment a évolué GWT ? Qui l'utilise ? La vision de Bruce Johnson et de Joel Webber a-t-elle supporté l'épreuve du temps ? Cette présentation tentera de répondre à ces questions, en présentant ce que GWT a dans le ventre.