Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Programmation Android - 09 - Web servicesYann Caron
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Programmation Android - Tp2 Travaux pratiques - GeomatiqueYann Caron
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Programmation Android - 09 - Web servicesYann Caron
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Programmation Android - Tp2 Travaux pratiques - GeomatiqueYann Caron
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
In01 - Programmation Android - Travaux pratiquesYann Caron
Cours CNAM sur la programmation Android, travaux pratiques.
Objectif : réaliser l'application "Pêcheur du Léman" qui mélange de l'IHM, de la base de donnée, GoogleMap, de la géolocalisation, des vues personnalisées des webservices, les senseurs.... et tout se qui germera de notre imagination.
Dernier cours de la série.
Ce chapitre présente un ensemble de techniques avancées (comme les capteurs, les testes unitaires, la concurrence, les vues personnalisées, les fragments...) ainsi qu'une vue d'ensemble des frameworks de jeux vidéos et alternatives multi plate-formes
Bonne lecture
Voici la suite du cours que je donnerai au CNAM Léman. Cette présentation porte sur les interface utilisateurs et les design pattern associés. Bonne lecture :)
Cours CNAM sur la programmation Android, partie sur la plateforme Android, l'anatomie d'un projet, les composants, le ccle de vie d'une application, la persistance etc....
Cours CNAM sur la programmation Android, partie 06.
Ce cours porte sur la publication d'une app, sa promotion.
Il présente les différents moyen de monétisation, adMob, l'inApp billing v3 et enfin l'intégration de l'API Google Analytics
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
Tallk présenté à Devoxx avec Bachir Ait M'Barek : https://www.linkedin.com/in/baitmbarek
C’est la révolution dans la BI, les zones tampon FTP laissent la place aux systèmes de fichier distribués, le SQL s'exécute sur Hadoop, les dashboard en HTML5 remplacent les clients lourds, mais ne peut-on pas rationaliser un peu l’approche ?
Comment s’y prendre pour transformer une chaine BI en datalake ?
Cette université fera le tour de l’ingénierie des données en mode BigData. Au travers d’une présentation détaillée des concepts, de retour d’expériences et d’un cas pratique, nous allons découvrir :
les technologies et l’architecture, avec Spark, Kafka, Elasticsearch, Impala et Mesos,
et les méthodes associées : cycle de développement avec Hadoop, tests unitaires, jointures, gestion de la qualité de donnée, recette en mode Big Data et gestion des métadonnées.
Techniques de programmation avancée LabVIEW : gestion des données de la local...Luc Desruelle
Journées techniques LabVIEW National Instruments
Présentation réalisée lors des Journées techniques LabVIEW, par Luc Desruelle - Technique de programmation avancée : gestion des données.
Sommaire :
Où trouver de l’aide?
Quelques règles de style, LabVIEW Style Checklist
Quelques techniques d’architecture sous LabVIEW, pour la gestion des données
Contrôle, Indicateur VS Locale VS Globale VS Nœud propriété
FGV : Functional Global Variable
AE : Action Engine
OOP et SM – QDMH : Object-Oriented Programming et structure
DVR : Data Value Reference
SPECIFY - un nouveau système de gestion pour l’Herbier de Nouvelle-Calédonie ...RainerZaiss
The slideshow summarizes the characteristics of the new herbarium management system of the Herbarium in New-Caledonie (NOU). The new system is in place since end of 2017. We designed the system at the Institut de recherche pour le développement (IRD) using Specify 6 as a framework.
Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...Christophe Niel
http://www.dotic.fr/ - Dotic délivre une formation auprès des intervenants FTTH afin de leurs apporter la connaissance nécessaire pour gérer une restitution de livrables GraceTHD. Lors de cette formation, nous expliquons le mécanisme de création de la base de données GraceTHD, l'intégration des données 'Shapefile + csv' et la création des vues. Nous passons sur les fonctionnalités importantes de QGIS . Et, nous apprenons aux participants à construire des requêtes SQL attributaires et spatiales. Pour assurer une meilleure compréhension, chaque item est accompagné d'exercices. L'objectif principal de cette formation est de donner aux participants les éléments pour la mise en place rapide d'une structure opérationnelle.
Cette formation s'articule sur 2 jours et peut être réalisée dans vos locaux. Remplissez le formulaire ci-contre pour accéder aux supports.
Le package de formation inclut :
* Le support de formation GraceTHD
* Une structure de répertoires/fichiers pour la gestion des livrables.
* Un livrable 'Shapefile et csv' de démo GraceTHD.
* Les scripts de création GraceTHD, d'intégration des Shape+Csv et création des vues.
* Des exemples de Script SQL.
Nous vous présenterons tout au long de ces slides trois chapitres principaux. Le premier chapitre présent un tour sur les plans d’expériences complets Le deuxième chapitre donne une idée générale sur l’utilisation de la plateforme Matlab et son environnement. Et le troisième chapitre explique la conception et la réalisation de l’application.
La toute première présentation du Toulouse-JUG le 13 mai 2009 !
Le développement sur mobile en J2ME : contraintes, techniques, difficultés, outils et... une pléthore de téléphones pour les tests !
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
In01 - Programmation Android - Travaux pratiquesYann Caron
Cours CNAM sur la programmation Android, travaux pratiques.
Objectif : réaliser l'application "Pêcheur du Léman" qui mélange de l'IHM, de la base de donnée, GoogleMap, de la géolocalisation, des vues personnalisées des webservices, les senseurs.... et tout se qui germera de notre imagination.
Dernier cours de la série.
Ce chapitre présente un ensemble de techniques avancées (comme les capteurs, les testes unitaires, la concurrence, les vues personnalisées, les fragments...) ainsi qu'une vue d'ensemble des frameworks de jeux vidéos et alternatives multi plate-formes
Bonne lecture
Voici la suite du cours que je donnerai au CNAM Léman. Cette présentation porte sur les interface utilisateurs et les design pattern associés. Bonne lecture :)
Cours CNAM sur la programmation Android, partie sur la plateforme Android, l'anatomie d'un projet, les composants, le ccle de vie d'une application, la persistance etc....
Cours CNAM sur la programmation Android, partie 06.
Ce cours porte sur la publication d'une app, sa promotion.
Il présente les différents moyen de monétisation, adMob, l'inApp billing v3 et enfin l'intégration de l'API Google Analytics
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
Tallk présenté à Devoxx avec Bachir Ait M'Barek : https://www.linkedin.com/in/baitmbarek
C’est la révolution dans la BI, les zones tampon FTP laissent la place aux systèmes de fichier distribués, le SQL s'exécute sur Hadoop, les dashboard en HTML5 remplacent les clients lourds, mais ne peut-on pas rationaliser un peu l’approche ?
Comment s’y prendre pour transformer une chaine BI en datalake ?
Cette université fera le tour de l’ingénierie des données en mode BigData. Au travers d’une présentation détaillée des concepts, de retour d’expériences et d’un cas pratique, nous allons découvrir :
les technologies et l’architecture, avec Spark, Kafka, Elasticsearch, Impala et Mesos,
et les méthodes associées : cycle de développement avec Hadoop, tests unitaires, jointures, gestion de la qualité de donnée, recette en mode Big Data et gestion des métadonnées.
Techniques de programmation avancée LabVIEW : gestion des données de la local...Luc Desruelle
Journées techniques LabVIEW National Instruments
Présentation réalisée lors des Journées techniques LabVIEW, par Luc Desruelle - Technique de programmation avancée : gestion des données.
Sommaire :
Où trouver de l’aide?
Quelques règles de style, LabVIEW Style Checklist
Quelques techniques d’architecture sous LabVIEW, pour la gestion des données
Contrôle, Indicateur VS Locale VS Globale VS Nœud propriété
FGV : Functional Global Variable
AE : Action Engine
OOP et SM – QDMH : Object-Oriented Programming et structure
DVR : Data Value Reference
SPECIFY - un nouveau système de gestion pour l’Herbier de Nouvelle-Calédonie ...RainerZaiss
The slideshow summarizes the characteristics of the new herbarium management system of the Herbarium in New-Caledonie (NOU). The new system is in place since end of 2017. We designed the system at the Institut de recherche pour le développement (IRD) using Specify 6 as a framework.
Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...Christophe Niel
http://www.dotic.fr/ - Dotic délivre une formation auprès des intervenants FTTH afin de leurs apporter la connaissance nécessaire pour gérer une restitution de livrables GraceTHD. Lors de cette formation, nous expliquons le mécanisme de création de la base de données GraceTHD, l'intégration des données 'Shapefile + csv' et la création des vues. Nous passons sur les fonctionnalités importantes de QGIS . Et, nous apprenons aux participants à construire des requêtes SQL attributaires et spatiales. Pour assurer une meilleure compréhension, chaque item est accompagné d'exercices. L'objectif principal de cette formation est de donner aux participants les éléments pour la mise en place rapide d'une structure opérationnelle.
Cette formation s'articule sur 2 jours et peut être réalisée dans vos locaux. Remplissez le formulaire ci-contre pour accéder aux supports.
Le package de formation inclut :
* Le support de formation GraceTHD
* Une structure de répertoires/fichiers pour la gestion des livrables.
* Un livrable 'Shapefile et csv' de démo GraceTHD.
* Les scripts de création GraceTHD, d'intégration des Shape+Csv et création des vues.
* Des exemples de Script SQL.
Nous vous présenterons tout au long de ces slides trois chapitres principaux. Le premier chapitre présent un tour sur les plans d’expériences complets Le deuxième chapitre donne une idée générale sur l’utilisation de la plateforme Matlab et son environnement. Et le troisième chapitre explique la conception et la réalisation de l’application.
La toute première présentation du Toulouse-JUG le 13 mai 2009 !
Le développement sur mobile en J2ME : contraintes, techniques, difficultés, outils et... une pléthore de téléphones pour les tests !
Comment imaginer et implémenter une plateforme (au sens Apple Store) from-scratch au sein d'un groupe média ? Quelle philosophie ? Quels principes ? Quelle architecture choisir ? Comment assurer la scalabilité des développements interne comme externe ?
Nous aborderons aussi le tournant numérique du groupe par cette plateforme ouverte. Le développement d'un écosystème avec nos partenaires et filiales basé sur des contrats json-schema/open-api et les conséquences sur diverses dimensions.
Android, Spring, Gradle et de nombreux autres projets apportent leur soutien au langage Kotlin. Fin 2017, Kotlin tient-il ses promesses ?
Retour d’expérience sur le langage, ses avantages et inconvénients sur un projet Mobile, un projet Back et bien plus.
Théorie des langages - TP - WellKnownTextYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Théorie des langages - 04 Théorie des langagesYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Théorie des langages - 03 - Principes et paradigmesYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Théorie des langages - 01.1 - Parcours d'arbresYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Théorie des langages - 00 - IntroductionYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
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!
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.
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.
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 :
2. session fev 2016 Yann Caron (c) 2016 2
Sommaire - Spatialite
Présentation
Installation
Modélisation de base de donnée
Création de base de donnée
Spatialite Helper
Requêtes
Objets géométriques
Pour allez plus loin !
4. session fev 2016 Yann Caron (c) 2016 4
Présentation
Base de donnée Spatiale
Open source (MPL 1.1, GPL 2, LGPL 2.1)
Surcouche SQLite
Originalement prévu pour PC et porté sur Android
Embarqué
Créer pour le projet geopaparazzi
https://github.com/geopaparazzi/libjsqlite-spatialite-
android/wiki
6. session fev 2016 Yann Caron (c) 2016 6
Fonctionnalités
Comme SQLite, db contenue dans un fichier
Limites du File System
Equi-fonctionnalité avec PostgreSQL + PostGIS
Quantité de fonctions SQL : http://www.gaia-
gis.it/gaia-sins/spatialite-sql-4.3.0.html
Support les données géométriques
conformément au standard OGC-SFS
7. session fev 2016 Yann Caron (c) 2016 7
Présentation
Portage de Spatialite sur Android
C++ / JNI
Compiler depuis les sources :
➔ Nécéssite d'être compilé avec le ndk (native development
kit)
➔ Il faut écrire les classes java associés
Utilisé dans l'application geopaparazzi :
https://github.com/geopaparazzi/libjsqlite-spatialite-
android
8. session fev 2016 Yann Caron (c) 2016 8
Spatialite-Database-Driver
Une bibliothèque Android Spatialite autonome
Ecrit par Kristina Hager
Repo git : https://github.com/kristina-
hager/Spatialite-Database-Driver
Extrait depuis l'application Geopaparazzi pour
en créer une bibliothèque autonome
10. session fev 2016 Yann Caron (c) 2016 10
Installation
Télécharger le repository git :
https://github.com/kristina-hager/Spatialite-
Database-Driver
Placer la bibliothèque dans le même repertoire
que le projet (bonne pratique pour les
bibliothèques tiers)
11. session fev 2016 Yann Caron (c) 2016 11
Installation
Dans le projet cible :
➔ Dans le module app/build.gradle, ajouter la
dépendance vers la bibliothèque
➔ Inclure la bibliothèque dans le setting du projet :
setting.gradle
include ':app', '..:Spatialite-Database-Driver:spatialite-db-driver'
dependencies {
compile project(
':..:Spatialite-Database-Driver:spatialite-db-driver')
}
12. session fev 2016 Yann Caron (c) 2016 12
Installation
➔ Dans le module app/build.gradle, ajouter la
copie des bibliothèques natives dans la future apk
import com.android.build.gradle.tasks.PackageApplication
task copyNativeLibs(type: Copy) {
from(new File(project(
':..:Spatialite-Database-Driver:spatialite-db-driver').projectDir,
'src/main/java/jniLibs')) {
include 'armeabi/libjsqlite.so'
include 'armeabi-v7a/libjsqlite.so'
include 'x86/libjsqlite.so' // for emulator x86
}
into new File(buildDir, 'native-libs')
}
tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(PackageApplication) { pkgTask ->
// !!!! Nécéssite la version 1.3.1 de gradle
pkgTask.jniFolders = new HashSet<File>()
pkgTask.jniFolders.add(new File(buildDir, 'native-libs'))
}
13. session fev 2016 Yann Caron (c) 2016 13
Installation
Attention, le code ci-dessus n'est pas
compatible avec la version courante de gradle.
Il faut revenir à une version antérieure
➔ Dans le projet app/build.gradle, ajouter la
dépendance vers la bibliothèque
Dependencies {
Classpath 'com.android.tools.build:gradle:1.3.1'
}
14. session fev 2016 Yann Caron (c) 2016 14
IN01 – Séance 10
Modélisation de base de donnée
15. session fev 2016 Yann Caron (c) 2016 15
Creation des tables
Méthodologie et bonne pratique : toujours créer
un MCD (conception) avant de commencer le
developpement
Traduire le MCD vers le MLD, format qui est
compréhensible dans le SGBDR
Créer les tables et leurs jointures
Créer les indexes
Le “+” spatial, ajouter les colonnes spatiales
16. session fev 2016 Yann Caron (c) 2016 16
Modélisation
Divers méthodologies, objet (UML) ou entité-
relation (Merise)
Deux étapes :
➔ Modélisation : création des entités et relations,
regroupement des attributs
Grand principe ; éviter la redondance d'information
➔ Normalisation : convertir le model vers la machine
Les jointures n / n deviennent une table avec 2 Clés étrangères
Les classes sur-type sous-types sont normalisées
17. session fev 2016 Yann Caron (c) 2016 17
Exemple de MCD
In charge ofrecord1,1 1,n 1,n 1,1
Forester
FirstName
LastName
Serial
POI
Name
Description
Position
District
Name
Description
Area
Establish a law suite
Date
Position
Person
FirstName
LastName
1,n
1,n
18. session fev 2016 Yann Caron (c) 2016 18
MLD
Forester
ID : int
FirstName : string
LastName : string
Serial : string
POI
ID : int
ForesterID : int
Name : string
Description : string
Position : point
District
ID : int
ForesterID : int
Name : string
Description : string
Area : polygon
Person
ID : int
FirstName : string
LastName : string
LawSuite
ForesterID : int
PersonID : int
Date : date
Position : pointRelation n / n normalisée
19. session fev 2016 Yann Caron (c) 2016 19
IN01 – Séance 10
Création de base de donnée
20. session fev 2016 Yann Caron (c) 2016 20
Spatial MetaData Tables
A la création de la base de donnée, spatialite
requière des tables systèmes particulières
Appellées MetaData Tables
Pour les créer, il faut lancer la fonction :
SELECT InitSpatialMetaData();
21. session fev 2016 Yann Caron (c) 2016 21
Spatial MetaData Tables
Quelques exemples de tables MetaData
spatial_ref_sys : contient les données
EPSG (European Petroleum Survey Group)
geometry_columns : recense les colonnes
géométrique de la base de donnée
22. session fev 2016 Yann Caron (c) 2016 22
Exemple de MLD
Forester
ID : int
FirstName : string
LastName : string
Serial : string
POI
ID : int
ForesterID : int
Name : string
Description : string
Position : point
23. session fev 2016 Yann Caron (c) 2016 23
Création de table
CREATE TABLE Forester (
ID integer PRIMARY KEY AUTOINCREMENT,
FirstName string NOT NULL,
LastName string NOT NULL,
Serial string NULL
);
Nom de la table
Non nullable
Nullable
Clé primaire
24. session fev 2016 Yann Caron (c) 2016 24
Création de table
CREATE TABLE PointOfInterest (
id integer PRIMARY KEY AUTOINCREMENT,
foresterID integer NOT NULL,
name string NOT NULL,
description string,
CONSTRAINT FK_poi_forester
FOREIGN KEY (foresterID)
REFERENCE forester (id)
);
Contrainte clé étrangère
Clé étrangère
25. session fev 2016 Yann Caron (c) 2016 25
Création d'index
Les indexes servent à optimiser les
performances de la base de donnée
➔ Sur les jointure : il faut un index sur chaque clé
étrangère
➔ Sur les critères de recherches souvent utilisés
CREATE INDEX IDX_poi_forester_id ON
PointOfInterest (forester_id);
26. session fev 2016 Yann Caron (c) 2016 26
Création d'une table géométrique
Comme Spatialite est une surcouche à SQLite, il
n'existe pas de grammaire native pour crées
des données Géométriques
Il est donc nécéssaire de procéder en deux
étapes :
➔ La création de la table en SQL
➔ L'ajout de la (des) colonne(s) géométrique(s) :
fonction AddGeometryColumn
27. session fev 2016 Yann Caron (c) 2016 27
Création de la colonne geometrique
SELECT
AddGeometryColumn('PointOfInterest'
, 'position', 4326, 'POINT', 'XY',
0);
SRID
Type de géométrie
Nb dimensionsGéométrie Nullable
33. session fev 2016 Yann Caron (c) 2016 33
Geometry : GEOMETRYCOLLECTION
Une succession d'objets géométriques
Non standard et peu reconnu
GEOMETRYCOLLECTION(POINT(1 1),
LINESTRING(4 5, 6 7, 8 9), POINT(30
30))
34. session fev 2016 Yann Caron (c) 2016 34
Dimensions
Quatre systèmes de dimensions possible
➔ XY : Coordonnées 2D
➔ XYM : Coordonnées 2D + Mesure
➔ XYZ : Coordonnées 3D
➔ XYZM : Coordonnées 3D + Mesure
35. session fev 2016 Yann Caron (c) 2016 35
Dimensions
Dont on dérive les géométries
XY XYM XYZ XYZM
POINT POINT M POINT Z POINT ZM
MULTIPOINT MULTIPOINT M MULTIPOINT Z MULTIPOINT ZM
LINESTRING LINESTRING M LINESTRING Z LINESTRING ZM
MULTILINESTRING MULTILINESTRING
M
MULTILINESTRING
Z
MULTILINESTRING
ZM
POLYGON POLYGON M POLYGON Z POLYGON ZM
MULTIPOLYGON MULTIPOLYGON M MULTIPOLYGON Z MULTIPOLYGON
ZM
37. session fev 2016 Yann Caron (c) 2016 37
Spatialite Helper
Développé pour le TP
➔ Basé sur SqliteOpenHelper
➔ Prend en charge les MetaData Tables
➔ Facilite la création et la gestion des mises à jour
dans le contexte d'une application Android
➔ Permet de manipuler et comprendre un design
pattern : Template Method
Propre à l'architecture en couche
38. session fev 2016 Yann Caron (c) 2016 38
Template Method
Lorsqu'un méthode concrète d'une classe
abstraite fait appel à des méthodes abstraite de
celle ci
39. session fev 2016 Yann Caron (c) 2016 39
Spatialite API
Architecture en couche
My ApplicationDelegation
Template method
40. session fev 2016 Yann Caron (c) 2016 40
SpatialiteOpenHelper
Créer une classe qui hérite de
SpatialOpenHelper
Surcharger la méthode onCreate ; en charge
de créer le schema de la base
Surcharger la méthode onUpgrade ; en charge
de gérer le changement de version de
l'application
Utiliser la méthode super.exec
41. session fev 2016 Yann Caron (c) 2016 41
SpatialiteOpenHelper
public class SDBHelper extends SpatialiteOpenHelper {
@Override
public void onCreate(Database db) throws jsqlite.Exception {
// Création du schema
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion)
throws Exception {
// Upgrade
}
}
Lancement à l'installation
Schema complet et à jour
Lorsque l'application est mise à jour par l'utilisateur
43. session fev 2016 Yann Caron (c) 2016 43
Gestion de la version
Le numéro de version de la base de donnée est
passé en paramètre au super constructeur
La super classe abstraite se chargera de gérer
la mise à jour
public MySpatialiteHelper(Context context) throws .... {
super(context, "Spatial.sqlite", 4);
}
44. session fev 2016 Yann Caron (c) 2016 44
Gestion des mises à jours
Problématique : que deviens le schema si
l'application est mise à jours par l'utilisateur
Contrainte : concerver les données déjà saisies
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
// mise à jour de 1 -> 2
// pas de break
case 2:
// mise à jour de 2 -> 3
// pas de break
case 3:
// mise à jour de 3 -> 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion" + oldVersion);
}}
Gère les changements
étape par étape
Exécution en cascade
45. session fev 2016 Yann Caron (c) 2016 45
Mise à jour de l'application
Si le schema est modifié, il faut ajouter les
requête de création à deux endroits :
➔ OnCreate : pour que les nouveaux utilisateurs aient
le nouveau schéma directement
➔ OnUpdate : ajouter un case au switch et déplacer le
break, pour que les utilisateurs possedant une
ancienne version aient leur schema mis à jour
47. session fev 2016 Yann Caron (c) 2016 47
WKT / WKB
WKT : Well known Text, exploitable par un être
humain
WKB : Well Known Binary, exploitable par la
machine à destination d'import, export et
échanges
Contre un format de stoquage Spatialite BLOB
Geometry
Il faut convertir !
50. session fev 2016 Yann Caron (c) 2016 50
Fonctions utiles
ST_GeometryType : renvoie le type de
géométrie
➔ SELECT
ST_GeometryType(ST_GeomFromText('POINT
M(1.2345 2.3456)'));
POINT M
Attention, les deux syntaxes POINT M et
POINTM sont valides
51. session fev 2016 Yann Caron (c) 2016 51
Fonctions utiles
ST_Srid : renvoie le SRID (EPSG) de la valeur
géométrique
➔ SELECT
ST_Srid(ST_GeomFromText('POINT(1.2345
2.3456)', 4326));
4326
Attention, à toujours spécifier les SRID de la
géométrie !
53. session fev 2016 Yann Caron (c) 2016 53
Exécuter une requêtes : code
helper.exec(
"insert into " + MySpatialiteHelper.TABLE_SECTOR +
"(" + MySpatialiteHelper.COLUMN_NAME + ", "
+ MySpatialiteHelper.COLUMN_COORDINATE + ")" +
" values ('" + name.getText() + "', '"
+ comment.getText() + "', "
+ shape.toSpatialiteQuery(MySpatialiteHelper.GPS_SRID) + ");");
S'exécute grâce au helper
Il faut gérer les exceptions le cas échéant
54. session fev 2016 Yann Caron (c) 2016 54
jsqlite.stmt
Pour lire le résultat d'une requête
Appellé RecordSet ou Statement
Il faut utiliser la méthode Database.Prepare(sql)
qui renvoie un Stmt
Itérer avec la méthode stmt.step()
Récupérer les valeurs typés de chaque élément avec
stmt.column_string(columnId), column_int
etc...
Gérer les erreurs éventuelles
55. session fev 2016 Yann Caron (c) 2016 55
Stmt : code
stmt = database.prepare("Select name, description, " +
"ST_asText(coordinate) as coord from PointOfInterest");
while (stmt.step()) {
String name = stmt.column_string(0);
String comment = stmt.column_string(1);
String coordStr = stmt.column_string(2);
Point coord = Point.unMarshall(new StringBuilder(coordStr));
mapFragment.addMarker(coord, name, comment);
}
56. session fev 2016 Yann Caron (c) 2016 56
Exemple de jointure
Tous les secteurs d'un garde forestier
➔ SELECT s.Name, AsText(s.Area) FROM Sector s
INNER JOIN forester f ON f.id =
s.foresterID
Les contraventions bornés dans un temps donné
➔ SELECT ls.Date, f.FirstName FROM LawSuite
ls INNER JOIN forester f ON f.id =
ls.foresterID
WHERE ls.date BETWEEN '2015-01-01' AND
'2015-02-01'
57. session fev 2016 Yann Caron (c) 2016 57
Spatiale
Jointure :
➔ SELECT s.name, poi.name from Sector s,
PointOfInterest poi where ST_Contains(s.area,
poi.position)
Ou (Sql99) :
➔ SELECT s.name, poi.name from Sector s INNER
JOIN PointOfInterest poi ON
ST_Contains(s.area, poi.position)
Area
➔ SELECT *, ST_Area(area) as 'area' from Sector
58. session fev 2016 Yann Caron (c) 2016 58
Spatiale
Le plus petit secteur
➔ SELECT MIN(St_Area(area)) from Sector
La plus grande distance entre deux points
➔ SELECT MAX(St_Distance(poi1.position,
poi2.position)) from PointOfInterest poi1,
PointOfInterest poi2
59. session fev 2016 Yann Caron (c) 2016 59
Spatiale
Multi jointure et jointure spatiale :
➔ SELECT * FROM LawSuite ls
INNER JOIN Sector s ON St_Contains(s.area,
poi.position)
INNER JOIN Forester f ON f.id =
s.foresterId AND f.id = ls.ForesterId
WHERE s.name = 'Fontainbleau'
61. session fev 2016 Yann Caron (c) 2016 61
Présentation
Librairie conçue pour le TP
Convertion WKT Objet (unmarshall) et Objet WKT (marshall)→ →
Idée de base, manipuler des objets plutôt que des chaînes de
caractères
➔ Eviter les erreurs
➔ Bénéficier du typage fort du langage Java
➔ Facile à maintenir
➔ Pas de code tiers dans les couches hautes
➔ Optimiser la concatenation des chaînes de caractères
Bonne pratique (requêtes Sql)
66. session fev 2016 Yann Caron (c) 2016 66
IN01 – Séance 10
Pour allez plus loin
67. session fev 2016 Yann Caron (c) 2016 67
ORM
Object Relational Mapping
➔ Pour Sqlite, il existe un ORM appellé ORM-Lite
➔ Il n'existe pas, à ce jour, d'extenssion spatiale
Et les raster ?
➔ Il existe librasterlite2 pour la version Windows
➔ Il faudrait le porter sur Android
Compiler les sources C++
Créer le mapping JNI
68. session fev 2016 Yann Caron (c) 2016 68
WebServices
Spatialite est une base de données embarquée
et mono application / utilisateur
Idée de mutualiser les données
Synchronisation avec une base de donnée
centralisée via WebServices (cf. Chapitre 09)
Exemple : PostGIS / Jax WS / Glassfish
69. session fev 2016 Yann Caron (c) 2016 69
Fin
Merci de votre attention
Des questions ?