La Cantine Numérique Brestoise, le GDG Finistère et le FinistJUG proposent une séance d’initiation à la création création d’application mobile sous Android.
Ca fait des mois que vous voulez vous mettre au développement Android. Vous avez regardé la doc, vous avez même téléchargé le SDK, vous avez peut-être même fait un HelloWorld, vous vous êtes dit que ça a l’air facile… mais vous n’êtes jamais allé jusqu’à développer une application avec. Manque de temps, plein d’autres choses à faire, manque de motivation pour démarrer. Car il faut reconnaître que se mettre au développement sur une nouvelle plate-forme tout seul dans son coin n’est pas évident, surtout quand la vraie vie s’en mêle.
Alors pourquoi pas vous réserver une journée pour franchir le cap et vous mettre pour de vrai au développement sur Android ?
Ce Bootcamp Android est l’opportunité pour le faire. Vous arrivez le matin équipés d’un ordinateur portable, avec Eclipse/Android Studio et une JVM pré-installés et vous partirez en fin d’après-midi en ayant développé une petite application Android et plus important encore, en ayant intégré les principes basiques du développement sur cette plate-forme.
Le Bootcamp Android est une introduction accélérée et pratique au développement Android. Vous allez apprendre, vous allez mettre les mains dans le cambouis, vous allez coder, vous allez enfin cocher la case Apprendre à coder sur Android dans votre ToDo-list.
Google : Prise en charge de l'Ajax et de l'Angular JSPeak Ace
Slides présentées lors du Petit Déjeuner Search Foresight du 19 novembre 2015.
Google vient d'annoncer qu'ils cessaient de promouvoir la méthode des "hashbangs" et des "escaped fragments" pour rendre les sites faits en ajax crawlables.
Comment interpréter ce revirement, et comment Google se comporte vraiment avec des sites faits en Ajax.
Point sur les bonnes pratiques dans ce domaine, en particulier pour les sites faits avec des technologies nouvelles comme Angular JS
A la demande générale La Coopérative des Tilleuls vous invite à un troisième workshop d'initiation aux technologies du web.
Après avoir appris les bases de HTML lors du premier workshop et de CSS lors du second, nous réaliserons ensemble l'intégration complète d'une page web à partir d'une maquette graphique.
Nous apprendrons à découper une maquette afin de la transformer en page web puis nous reverrons les techniques apprises lors des premiers ateliers et les mettrons en pratique sur ce cas concret.
C'est l'occasion pour ceux qui n'ont pas pu assister aux séances précédentes de prendre le train en marche et pour les autres de se perfectionner.
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDKGreenIvory
Nous parlerons dans un premier temps de GWT et GXT qui permettent de créer des interfaces web riches à partir de code Java, puis nous nous intéresserons plus précisément à un produit réalisé à partir de ces deux technologies : le portail AppCase de Greenivory et son SDK.
Jean-Marc Prevost (GreenIvory)
Présentation diffusée lors de la première d'une série d'ateliers gratuits autour du développement front-end HTML5 / CSS3 / Javascript animés par la Coopérative des Tilleuls.
Au menu de celui-ci :
- Comprendre le fonctionnement d'internet, du web et du mode de communication client-serveur
- Présentation générale des trois grands piliers des technologies web client : HTML (structuration), CSS (présentation) et Javascript (intéractivité)
- Réaliser sa première page HTML
Ces ateliers ouverts à tous dans la limite des places disponibles sont encadrés par des professionnels du développement coopérateurs de La Coopérative des Tilleuls.
Présentation technique de Laurent Duveau au Meetup AixJS du 12 Juillet 2018 à Aix-En-Provence, France.
https://www.meetup.com/aixjs-org/events/252276528/
Présentation de la dernière version d'Angular 2, le framework JavaScript de Google pour créer des applications monopages — http://angularfrance.com/
Thème abordés : Angular en chiffres. Principales fonctionnalités d'Angular 2. Comparaison entre Angular 1 et Angular 2. Outillage Angular 2. Angular 2 est une plateforme. Démarrer avec Angular 2. Migrer de Angular 1 à Angular 2. Faut-il passer à Angular 2 aujourd’hui ?
Google : Prise en charge de l'Ajax et de l'Angular JSPeak Ace
Slides présentées lors du Petit Déjeuner Search Foresight du 19 novembre 2015.
Google vient d'annoncer qu'ils cessaient de promouvoir la méthode des "hashbangs" et des "escaped fragments" pour rendre les sites faits en ajax crawlables.
Comment interpréter ce revirement, et comment Google se comporte vraiment avec des sites faits en Ajax.
Point sur les bonnes pratiques dans ce domaine, en particulier pour les sites faits avec des technologies nouvelles comme Angular JS
A la demande générale La Coopérative des Tilleuls vous invite à un troisième workshop d'initiation aux technologies du web.
Après avoir appris les bases de HTML lors du premier workshop et de CSS lors du second, nous réaliserons ensemble l'intégration complète d'une page web à partir d'une maquette graphique.
Nous apprendrons à découper une maquette afin de la transformer en page web puis nous reverrons les techniques apprises lors des premiers ateliers et les mettrons en pratique sur ce cas concret.
C'est l'occasion pour ceux qui n'ont pas pu assister aux séances précédentes de prendre le train en marche et pour les autres de se perfectionner.
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDKGreenIvory
Nous parlerons dans un premier temps de GWT et GXT qui permettent de créer des interfaces web riches à partir de code Java, puis nous nous intéresserons plus précisément à un produit réalisé à partir de ces deux technologies : le portail AppCase de Greenivory et son SDK.
Jean-Marc Prevost (GreenIvory)
Présentation diffusée lors de la première d'une série d'ateliers gratuits autour du développement front-end HTML5 / CSS3 / Javascript animés par la Coopérative des Tilleuls.
Au menu de celui-ci :
- Comprendre le fonctionnement d'internet, du web et du mode de communication client-serveur
- Présentation générale des trois grands piliers des technologies web client : HTML (structuration), CSS (présentation) et Javascript (intéractivité)
- Réaliser sa première page HTML
Ces ateliers ouverts à tous dans la limite des places disponibles sont encadrés par des professionnels du développement coopérateurs de La Coopérative des Tilleuls.
Présentation technique de Laurent Duveau au Meetup AixJS du 12 Juillet 2018 à Aix-En-Provence, France.
https://www.meetup.com/aixjs-org/events/252276528/
Présentation de la dernière version d'Angular 2, le framework JavaScript de Google pour créer des applications monopages — http://angularfrance.com/
Thème abordés : Angular en chiffres. Principales fonctionnalités d'Angular 2. Comparaison entre Angular 1 et Angular 2. Outillage Angular 2. Angular 2 est une plateforme. Démarrer avec Angular 2. Migrer de Angular 1 à Angular 2. Faut-il passer à Angular 2 aujourd’hui ?
Le thème soumis à notre étude dans le cadre du stage académique porte sur la « Gestion d’une agence de voyage routière ». L’application ainsi réalisée possède plusieurs modules (voyage, clientèle, personnel, service, planification, discipline, statistique et utilisateur) qui prennent en compte deux aspects : L’aspect sécurité qui donne la possibilité au CA de créer des utilisateurs (leur login étant ainsi crypté) et de les affecter à un groupe utilisateur. De même l’aspect gestion donne la possibilité de générer et d’imprimer les bordereaux de voyage, de lister le personnel de l’agence, de donner le nombre de billets vendus et les montants encaissés pour chaque voyage, de donner la liste des absences au service, le montant encaissé en une journée, et le montant obtenu pour les locations, de savoir quel est le mois où on a le plus gagné dans les voyages et pourquoi, de donner le nombre de clients ayant effectué une location et d’identifier par la même occasion ceux qui font beaucoup de locations pour ainsi leur faire un rabais. La
possibilité d’avoir le pourcentage des employés par type de congés pour une année, et le pourcentage des employés ayant pris un congé ces cinq dernières années ; de dire quels sont les employés les plus sanctionnés. Pour parvenir aux résultats, plusieurs outils ont été mis à profit.
Mobile Marketing Stats Automotive Dealers Should Knowcreativeeyeball
Exmosi is a digital lead provider for SMS text marketing. Our mobile friendly content is triggered by SMS technology. Exmosi enhances all of your current marketing channels.
What is-Mobile-Marketing-mehmettanlak.comUniversity
The document discusses mobile marketing and what mobile marketing entails. It covers how mobile is a personal, ubiquitous, and immediate method of communication. It also details specific mobile marketing campaigns and notes that mobile marketing provides a wide range of tools. However, mobile advertising and costs associated with mobile web access present challenges. The mobile landscape involves consolidation among carriers and growing mobile phone penetration worldwide. Mobiles are integrated into people's daily lives and used primarily for communication via text, pictures, social media.
Form Factor is the Message: How the Devices We Use Shape the Messages and Con...Future Insights
Ben Huh's talk from Future Insights Live 2014 in Las Vegas: "The 20th Century was about the dominance of one or two formats per medium (TV for video, radio for audio, etc). Welcome to the new world where everything can do everything, but that doesn't mean everything will be successful for everything."
Miss his talk? Join us at a future show: www.futureofwebdesign.com. Sign up for our newsletter at futureinsights.com and get 15% off your next conference.
The document discusses the Metro design language created by Microsoft for Windows Phone 7. It focuses on typography over graphics and is inspired by public transport signage. Key principles of Metro include being light, clean, open, and fast while focusing on content. The author gathered visual references of Metro and similar designs from websites, apps, Windows 8, dashboards, mobility uses, and miscellaneous examples to help generate new interface ideas.
The document discusses getting multi-touch interactions working for a fast-paced mobile game, including handling touch events, manipulating UI elements, and using JavaScript gesture libraries to recognize swipes, taps, and rotations. It also outlines some issues to consider like resizing, pre-loading assets, making the interface touch-aware, animating sprites, managing the GUI layer, and more. The goal is to create a continuous and touchable interface for mobile games.
Référencement Mobile - Anji Ismail - SEO Campus 2010SEO CAMP
Le référencement des sites mobiles
Conférence présentée par Anji Ismail, co-fondateur de la société CapSEO.
http://www.seo-campus.org/programme/vendredi
Content marketing world_mobile and tablet content distribution_8_17_2012interlinkONE
Mobile and Tablet Content Distribution
September 6th – 10:30am
There is no doubt that mobile devices such as smartphones and tablets are changing the way that people consume information. The speed at which people are purchasing those items and making them part of their daily routines is happening faster than most marketers are prepared for! In this presentation, John Foley, CEO of interlinkONE and Grow Socially, will provide an overview of what needs to be done to prepare, deliver, and measure content that is tailored for the mobile audience.
John will cover items such as:
How to develop a strategy to reach your mobile audience
Options for building mobile websites, landing pages, blogs, and more
Best practices for integrating mobile with other distribution channels, such as print and email
Considerations regarding building a mobile App vs. a mobile website
And more!
We hope that you will join us as you look for ways to reach the growing mobile audience!
Support de formation pour les développeurs. Pour les formations, ce support est complété par un livret d'exercices pour les stagiaires et de l'ensemble de tous les exemples, sous forme de projets Eclipse.
Méthodes agiles, frameworks javascript: optimisez votre time to marketmichael_bailly
Cette présentation (en français) explique les fondamentaux de l'innovation Agile des 10 dernières années, et propose un panorama des frameworks JavaScript client, serveur, desktop et mobiles permettant d'accélérer votre processus d'ingénierie, de l'idée au produit.
Agile tour bordeaux 1500 développeurs dans mon équipeAlexis Monville
Résumé :
En apprendre plus sur le développement de produit en mode agile au contact d'un grand projet open source !
Description :
J’apprends l’agile depuis déjà longtemps en pratiquant et en partageant les valeurs, principes et pratiques avec des clients et d’autres pratiquants. Et c’est peut-être depuis que j’interviens au contact d’Openstack, un logiciel libre d’infonuagique (ou si je parle en presque français “a cloud open source software”) que j’ai appris le plus.
Ce que j’ai appris ?
J’ai appris que l’on pouvait créer un produit avec une équipe de 1500 développeurs répartis sur tous les continents, que l’on pouvait avoir la certitude de délivrer les nouvelles versions à date fixe tous les 6 mois, que le processus de revue de code apportait beaucoup plus de bénéfices que ce que j’imaginais au départ, que la gestion des branches de développement pouvait être plus simple et plus efficace. J’ai aussi appris que la socialisation, l’accueil des nouveaux arrivants, le maintien du lien était une chose très importante…
En vous invitant à participer à cette session, je souhaite partager ces apprentissages pour que vous puissiez vous en inspirer dans vos organisations.
C'est un fait, le SIG libre QGIS s'est imposé. Parce qu'il est libre ? oui, certainement, mais pas uniquement ....
Il répond aux besoins et aux contraintes de beaucoup, et nous allons en parler avec quatre intervenants dont les applications métiers tournent avec ou sur QGIS.
- Présentation de QGIS et des interactions possibles avec les guichets (Emmanuel Belo - Camptocamp SA)
- Utilisation de QGIS pour la gestion d'un SIT communal : l'application Géocommunes (Régis Longchamps - BBHN SA)
- Développement d'une application pour la gestion de l'eau (Denis Rouzaud - SIGE)
- Ouvertures sur la communauté QGIS et autres applications métiers (Roger Maurer - Commune de Morges )
Avez-vous déjà livré votre menu debug en Prod ? Nous oui, et nous avons trouvé une solution originale basée sur les App groups pour que cela n'arrive plus jamais.
Le backlog peut-il être public? Comment obtenir un feedback d'un grand nombre d'utilisateurs? Faut-il utiliser un issue tracker? un story tracker? Une session pour les Product Owner d'un produit public, d'un site internet, d'une application mobile.
Similaire à Bootcamp d'Initiation à Android - 2013/11/30 (20)
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Horacio Gonzalez
Polymer par-ci, Polymer par-là, c'est bien beau de voir tout ce qu'on peut faire avec cette bibliothèque…
Mais à la base le discours qu'on nous vend depuis des années est celui des Web Components, des briques modulaires et interopérables, suivant un standard et pouvant être mélangés comme on le souhaite pour construire des webapp comme si on faisait du LEGO.
Alors, il n'est pas contradictoire de militer pour les Web Components et d'utiliser Polymer ?
Ben, pas du tout ! Polymer, surtout depuis la sortie de Polymer 2, n'est qu'une surcouche de sucre syntactique au dessus du standard Web Components, et les éléments créés avec Polymer sont bel et bien des Web Components standard.
De la même façon, il y a plein d'autres bibliothèques de Web Components qui ont un rôle semblable : SkateJS, SlimJS, BramJS... Chacune orientée vers une sensibilité et une façon de coder. Et bien entendu, les éléments créés avec eux se mélangent sans soucis, car ils suivent tous le même standard.
Dans ce talk nous allons voir comment ces éléments Polymer sont construits à partir du standard web components, voir ce côté sucre syntactique et comprendre ce qu'ils apportent. Ensuite on verra rapidement les bases de SkateJS et de SlimJS pour finir par prouver l'intéropérabilité avec une petite application qui mélange du Web Component standard, du Polymer, du SkateJS et du SlimJS.
But there is no web component for that - Web Components Remote Conference - 2...Horacio Gonzalez
This document discusses componentalizing JavaScript libraries to create web components. It provides examples of componentalizing QR code generation and scanning libraries. To componentalize a library, the author defines inputs, outputs, a template, and wires the library to these. Issues may arise that require debugging and even patching the library. The goal is to encapsulate third party code into reusable custom elements.
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27Horacio Gonzalez
The document is a transcript of a talk given by Horacio Gonzalez and Cyril Balit on using web components across different frameworks. They discuss how they have previously talked about Polymer and web components individually. For this talk, they wanted to demonstrate using web components from different libraries (like Polymer) in various web application frameworks. They give a demo mixing web components from different libraries in applications built with different frameworks. They conclude that with web components standards, elements can be freely mixed and matched across frameworks.
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Horacio Gonzalez
The Paris Web Components Meetup proposed a session to compare several component-oriented frameworks, where each speaker made the case of his or her favorite framework and showed the implementation of the same webapp done with the chosen framework. I did the Polymer presentation.
Mixing Web Components - Best of Web Paris - 2016 06-09Horacio Gonzalez
Ah, les web components, quelle belle idée ! Du développement web basé enfin sur une vraie architecture en composants, de la réutilisation, de la modularisation, de l'encapsulation… Mais en attendant que le W3C décide de sortir le standard, ce qu'on a dans les mains c'est une panoplie de bibliothèques de polyfills : Polymer, X-Tag, Bosomic…
Dans ce talk nous allos répondre à la question : "OK, le futur sera beau, mais aujourd'hui, si je fais des composants avec une bibliothèque X et mon pote en fait avec une bibliothèque Y, je peux les utiliser dans la même application ? Et ils marcheront dans mon framework favori ?".
Polymer in the real life - Devoxx France - 2016 04-20Horacio Gonzalez
In the last two years I've been speaking a lot about web components and Polymer in conferences and user-groups, sharing a vision of the upcoming web-component revolution. But after these introductory talks I often got the same question: "that seems great... but does it works in Real Life?" Ah, the pesky real life question...
In this talk I'm going to tackle that question in the best way I know: I'm going to tell you my experience of almost two full years web applications with Polymer in the real life, for real projects in a real enterprise with real costumers, and all the lessons I've learnt from it.
You will heard why did I choose Polymer, how I dealt with the 0.x versions lifecycle, the good points and the bad ones too, how I did integrate lots of 3rd part libs into a component architecture and how now I'm able to create full fledge Progressive Web Apps using Polymer in a simple way without having to deal with the complexity of Angular/React/Whatever JS, but also how to integrate your components into those frameworks if needed.
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Horacio Gonzalez
This document discusses Warp 10, a software platform for collecting, storing, and analyzing sensor and IoT data. Warp 10 can ingest large amounts of time series and geo-time series data from sensors and other sources. It provides tools for storing, manipulating, and analyzing the data using the WarpScript language. Examples demonstrate how to calculate averages and find the closest fuel station using geo-time series data on fuel prices in France.
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptHoracio Gonzalez
The document discusses JavaScript forge tools like npm, Bower, Grunt and Yeoman that allow developers to manage dependencies, build processes, and more for front-end development. It explains that npm is used to install front-end build tools and serves as the base for building a JavaScript forge. Bower is introduced as a package manager for installing web libraries and their dependencies. The benefits of using Bower and other tools via a bower.json file to define project dependencies are also covered.
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...Horacio Gonzalez
This document provides an overview of a module on interactive web application development. It covers the following topics:
- Front-end technologies: HTML5, CSS, JavaScript, and the Polymer library for implementing web components.
- Back-end concepts: Introduction to Java EE including servlets, JSP, and frameworks like SparkJava.
- JavaScript tooling: Grunt, Gulp, Bower, and Yeoman for building JavaScript applications.
- Node.js and backend frameworks like ExpressJS for building APIs.
- Introduction to NoSQL databases like MongoDB, Redis, and Cassandra.
- Software tooling in Java.
- Test-driven development.
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLHoracio Gonzalez
This document provides an introduction and overview of MongoDB and how to use it. Some key points:
- MongoDB is an open-source document database that provides high performance, high availability, and automatic scaling. It uses documents (similar to JSON objects) rather than tables and rows.
- Documents are stored in collections without a predefined schema. Fields can be added, modified or deleted at any time.
- Common operations include inserting, querying, updating, and removing documents from collections. Queries can use filters, projections, sorting, skips, limits, and regular expressions.
- MongoDB is flexible compared to relational databases as schemas are not rigidly defined. It is suitable for high performance applications that need
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLHoracio Gonzalez
This document provides an introduction and overview of MongoDB and NoSQL databases. It discusses key MongoDB concepts like document databases, collections and documents. It also covers how to install and run MongoDB, insert and query data, and use common operations. Some examples show how to create indexes, use JavaScript and regex queries. Exercises at the end propose practicing installing MongoDB, creating a collection and querying data.
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptHoracio Gonzalez
The document discusses various JavaScript development tools including npm, Bower, Grunt, and Yeoman. It begins by explaining that npm is used to install other development tools like Bower, Grunt, and Yeoman. It then provides more details on Bower for managing front-end package dependencies, Grunt for automating tasks, and how they can be used together with a Gruntfile and package.json to set up a build system for a JavaScript project.
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...Horacio Gonzalez
This document provides an overview and description of a module on interactive web application development. It covers front-end topics like HTML5, CSS, JavaScript, and the Polymer library, as well as back-end concepts using Java EE frameworks and Node.js. The module will include sections on:
- Front-end with HTML5, CSS, JS, and the Polymer library
- Back-end concepts using Java EE for servlets, JSP, and frameworks
- Back-end using Node.js, ExpressJS, and APIs
- JavaScript build tools like Grunt, Gulp, Bower, and Yeoman
- Software development practices like test-driven development
- An examination of student
The W3C has been working on a Web Components standard for almost three years, but it is still a work in progress. But polyfills like allows current developers to use Web Components today, and incorporate to their apps widgets from any library of web components.
The best known of these libraries is Polymer, but it isn't the only one. In this talk we are going to compare Polymer, the '800 lb gorilla' in the Web Component field, with several of its lesser known competitors: Mozilla's X-Tags and Briks, and Bosonic, and even homemade ReactJS webcomponents
We will build an Angular JS application where, instead of directives, we will use webcomponents done with Polymer, X-Tag and ReactJS. And we will take a look to the performances in both Chrome and Firefox.
Mixing Web Components - Paris Web Components - 2015 09-16 Horacio Gonzalez
The W3C has been working on a Web Components standard for almost three years, but it is still a work in progress. But polyfills like allows current developers to use Web Components today, and incorporate to their apps widgets from any library of web components.
The best known of these libraries is Polymer, but it isn't the only one. In this talk we are going to compare Polymer, the '800 lb gorilla' in the Web Component field, with several of its lesser known competitors: Mozilla's X-Tags and Briks, and Bosonic, and even homemade ReactJS webcomponents
We will build an Angular JS application where, instead of directives, we will use webcomponents done with Polymer, X-Tag and ReactJS. And we will take a look to the performances in both Chrome and Firefox.
Devoxx France - Web Components, Polymer et Material DesignHoracio Gonzalez
Des concepts comme encapsulation, réutilisation de composants, data-binding ou templating sont maintenant monnaie courante dans la plupart de frameworks web… mais chacun le fait à ça façon !
Et c’est là que les Web Components débarquent. Un nouveau standard en cours d’élaboration au W3C, qui va permettre d’avoir une approche par composants au développement web.
Dans cette présentation nous parlerons de ce standard en construction, de concepts comme ShadowDOM, Mutation Observers, custom elements, Model-Driven-View, Object.observe()… Nous parlerons aussi des implémentations actuelles, du projet Polymer de Google, des X-Tags de Mozilla et de comment avec AngularJS on peut déjà avoir un bon aperçu de ce que nous attend.
Et ensuite on rentrera dans le détail de comment on peut dès aujourd'hui utiliser des web components avec Polymer, et on illustrera l'approche en utilisant les composants Polymer Paper pour implémenter le look Material Design d'Android L dans des applications web.
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 :
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.
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.
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!
3. Horacio Gonzalez
Spaniard lost in Brittany, Java developer,
dreamer and all-around geek
● Senior Software Engineer at Cityzen Data
○
Cityzen Data provides a scalable, secure, ethical
and open platform for sensor data
● Leader du FinistJUG, du GDG Finistère
et de la communauté BreizhBeans
http://lostinbrittany.org/
+Horacio.Gonzalez
@LostInBrittany
Avec le soutien de :
5. Qui-sommes nous ?
● FinistJUG :
Java User Group du Finistère
http://finistjug.fr
@FinistJUG
● GDG Finistère :
Google Developers Group du Finistère
http://finistgdg.fr
@FinistGDG
Avec le soutien de :
7. C’est quoi Android ?
● Système d'exploitation sur noyau Linux
Image : newcircle
Avec le soutien de :
8. Dalvik ?
Machine virtuelle open-source utilisée
sur Android
● Exécutant des fichiers .dex
○
○
○
Format différent du bytecode Java
Instructions basées sur des registres
■ pas sur une pile comme en Java
Avec des optimisations
■ pas de duplication de Strings
constantes…
● Espace d’addressage 32 bits
● Pas compatible avec une JVM
Le compilateur Dex compile le
bytecode Java en bytecode Dex
Avec le soutien de :
10. Quelques chiffres
● 900 millions de terminaux activés
● 1,5 millions d’activations par jour
● 50 milliards d’applications installés
Terminaux activés
●
●
●
2011 : 100 millions
2012 : 400 millions
2013 : 900 millions
Avec le soutien de :
12. Du point de vue d’un développeur
Des points forts :
● Développement en Java
● Un SDK complet, open-source et multi-plateforme
○ Des IDEs basés sur des outils confirmés
■ IntelliJ IDEA et Eclipse
○ Des exemples, de la documentation
○ Des APIs riches
○ Un émulateur
Avec le soutien de :
13. Android Studio
● Nouveu IDE pour Android
○
○
○
○
Basé sur IntelliJ IDEA
Actuellement en v.0.3.x
IDE Android complet
■ Syntaxe, refactoring, corrections, templates
■ Editeur graphique d’écrans (layouts)
■ Émulateur des diifférents terminaux
Outillage additionnel :
■ Construction : Gradle
■ Performance : Lint
■ Signature d’applications : ProGuard
● Ancien IDE encore disponible
○
○
Eclipse IDE avec ADT (Android Developer Tools)
Presque aussi complet que Android Studio
■ Mais il n’évoluera plus
Avec le soutien de :
14. Fondements d’une application
● Applications écrites en Java
● Compilation avec SDK Android
○ Génération d’un fichier .apk
● Les applications tournent dans un sandbox
○ User, VM et processus Linux isolés par application
○ Principe du moindre de privilèges
● Communication entre applications
Avec le soutien de :
19. Activités (Activities)
● Une Activité peut être assimilée à un écran qu’une
application propose à son utilisateur
○
La transition entre deux écrans correspond au lancement d’une
Activité ou au retour sur une Activité placée en arrière-plan
● Une Activité est composée de deux volets :
○
La logique et la gestion du cycle de vie
■ Implémentées en Java dans une classe héritant de Activity
○
L'interface utilisateur, qui peut être définie
■ Soit dans le code de l’Activité
■ Soit dans un gabarit (layout)
● Fichier XML placé dans les ressources de l’application
● Approche plus générale à favoriser
Avec le soutien de :
20. Plusieurs Activités par application
● Une application peut avoir plusieurs Activités
○
○
○
Une Activité par écran de l’application
Une seule Activité est active à un instant donné
■ L’Activité précédente est mis en pause
Les Activités d’une application sont gérées dans le Back Stack
(une pile)
Avec le soutien de :
21. Activités et Tâches (Tasks)
● Tâche : série d’activités avec lesquelles l’utilisateur
intéragit pour faire quelque chose
○
○
○
Unité d’exécution des Activités
■ Une pile d’Activités par Tâche
Les Activités d’une application s’exécutent dans la même Tâche
Des fois des Activités de plusieurs applications
■ Si une application a besoin de lancer des Activités d’une autre
■ Exemple : navigateur qui ouvre un lien mailto dans gmail
Avec le soutien de :
22. Cycle de vie d'une Activité
États principaux d'une Activité :
●
●
●
Active (active ou resumed)
○ Activité visible qui détient le focus et attend les entrées utilisateur.
Suspendue (paused)
○ Activité au moins en partie visible à l’écran mais sans le focus
Arrêtée (stopped)
○ Activité non visible, mais encore en vie
Avec le soutien de :
23. Cycle de vie d'une Activité
● Démarrage → Active
○
Méthode onStart()
● Active → Suspendue
○
Méthode onPause()
● Suspendue → Arrêtée
○
Méthode onStop()
● Suspendue → Active
○
Méthode onResume()
● Arrêtée → Détruite
○
Méthode onDestroy()
public class Main extends Activity {
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acceuil);
}
protected void onDestroy() {
super.onDestroy();
}
protected void onPause() {
super.onPause();
}
protected void onResume() {
super.onResume();
}
protected void onStart() {
super.onStart();
}
protected void onStop() {
super.onStop();
}
}
Avec le soutien de :
24. Sauvegarde du contexte : Bundle
● La gestion de mémoire est fait par le système
○ Une application qui n’a plus le focus, peut être déchargée de la
mémoire
● Lorsqu’une Activité est suspendue, on appelle à
onSaveInstanceState(Bundle outState)
○
Par défaut il sauvegarde tous les champs avec idéntifiant
■ Formulaires de saisie…
● Si l’application est déchargée, le système doit la
rédémarrer lorsqu’elle récupère le focus
○
Pour récupérer l’état, il lui donnera le bundle dans
onCreate(Bundle savedInstanceState)
Avec le soutien de :
27. Vues et Gabarits
● Vues (Views) : composants graphiques de l’interface
○ Héritant de la classe View
● Les Vues sont groupées dans des Gabarits (Layouts)
○
Le Gabarit décrit l’interface associée à chaque Activité
● Le type de Gabarit définit la disposition des Vues dans
l’écran
○
○
○
○
LinearLayout : éléments de gauche à droite et du haut vers le bas
RelativeLayout : élément placé par rapport au précédent
TableLayout : éléments placés selon une disposition matricielle
FrameLayout : éléments qui s’empilent les uns sur les autres
Avec le soutien de :
28. Gabarits
Descriptions en XML de l’interface de l’Activité
●
Placé dans les ressources de
l’application
○ Dans /src/res/layout/
<?xml version="1.0" encoding="utf-16"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/bouton1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edit1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Avec le soutien de :
29. Composants graphiques
● On ajoute des composants
○
○
Soit directement en XML
Soit en utilisant l’éditeur graphique
<?xml version="1.0" encoding="utf-16"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
Avec le soutien de :
30. Imbrication de gabarits
● Les Gabarits peuvent inclure d’autres Gabarits
○
Pour faire du positionnement avancé
■ Un layout horizontal à l’intérieur d’un vertical, par exemple
○
Pour permettre la réutilisation du code
■ En utilisant le mot clé include
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<include android:id="@+id/included_accueil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
layout="@layout/acceuil" />
</LinearLayout>
Avec le soutien de :
31. Attributes du Gabarit
Permettent de fournir des propriétés globales du Gabarit
● Les plus importants sont :
○
○
○
android:layout_width et android:layout_height
■ définit la place occupé par le gabarit par rapport au père
■ valeur fill_parent - l'élément remplit l'élément parent
■ valeur wrap_content - prend la place nécessaire à l'affichage
android:orientation
■ définit l'orientation d'empilement
■ valeurs vertical et horizontal
android:gravity
■ définit l'alignement
<LinearLayout
xmlns:android=
des éléments
"http://schemas.android.com/apk/res/android"
■ valeurs top, bottom,
android:layout_width="fill_parent"
android:layout_height="fill_parent"
left, right...
android:orientation="vertical"
android:id="@+id/accueilid" >
[...]
</LinearLayout>
Avec le soutien de :
32. Accès depuis le code au gabarit
Et si dans mon code je veux modifier un composant ?
● On utilise la classe R
○
Le nom du fichier XML permet de retrouver le Gabarit dans le code
■ pour accueil.xml on passe par R.layout.accueil
● Associer un Gabarit à une Activité : setContentView()
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.accueil);
}
● On peut accéder à tout élément par son id
Dans le code :
Dans le gabarit :
LinearLayout l =
(LinearLayout)findViewById(R.id.mongabarit);
l.setBackgroundColor(Color.BLACK);
<LinearLayout
[...]
android:id="@+id/mongabarit" >
[...]
</LinearLayout>
Avec le soutien de :
34. Manifeste (Manifest)
● Toute application doit en avoir → AndroidManifest.xml
○
Dans le répertoire racine de l'application
○
Nom du paquet Java de l'application
■ Identifiant unique pour l'application
Déscription des composants de l'application
■ Activités, services, récepteurs et fournisseurs de contenus
Nom des classes implémentant chaque composant
Capacités de chaque composant, Intent Filters auxquels il répond
● Expose l'information essentielle sur l'application
○
○
○
● Déclare les permissions que l'application doit avoir
○
○
○
Pour accéder aux parties protégée de l'API
Pour interagir avec d'autres applications
Les permissions que les autres applications necessitent pour appeler les
composants de l'appli
● Déclare le niveau minimal requis de l'API Android
Avec le soutien de :
35. Fichier AndroidManifest.xml
Déclare l'ensemble des éléments de l'application
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.gdgrennes.android.bootcamp"
android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service>...</service>
<receiver>...</receiver>
<provider>...</provider>
</application>
</manifest>
Avec le soutien de :
37. Les ressources
Ressources : composants graphiques,
chaînes, menus, images, tailles, couleurs...
● Utilisées au travers de la classe statique R
○
○
●
Régénérée à chaque changement du projet
Incluant les ressources
■ déclarées dans le Manifeste
■ pour lesquelles les fichiers associés
sont dans le bon repértoire
Image : Constant Contact Labs
Utilisation : android.R.type_ressource.nom_ressource
En récupérant une instance de la classe Resources :
Resources res = getResources();
String hw = res.getString(R.string.hello);
XXX o = res.getXXX(id);
Avec le soutien de :
38. Ressources : chaînes de caractères
● Déclarées dans /src/res/values/strings.xml
○
Cela permet l’internationalisation
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World!</string>
<string name="app_name">My Android Hello World</string>
</resources>
Image : Constant Contact Labs
● Utilisation dans le code → R.string.name
Resources res = getResources();
String hw = res.getString(R.string.hello);
Avec le soutien de :
39. Ressources : chaînes et i18n
● Pour chaque langage un repértoire
/src/res/values-XX/
○ xx : code de la langue (en, fr, es…)
● Avec un fichier strings.xml à l’intérieur
○
Le name de chaque chaîne doit être le même
● Exemple : /src/res/values-fr/
Image : Constant Contact Labs
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Bonjour le monde!</string>
<string name="app_name">Mon Hello World Android</string>
</resources>
● Android chargera bon fichier de ressources
○
En fonction de la langue du système
Avec le soutien de :
40. Ressources : composants graphiques
● D'autres ressources sont spécifiables dans res:
●
●
●
●
les menus (R.menu)
les images (R.drawable)
des dimensions (R.dimen)
des couleurs (R.color)
Image : Constant Contact Labs
Avec le soutien de :
42. LiveCoding : Hello world!
● Objectif : Une application minimaliste
○ Elle affiche un Hello World sur l'écran
● Concepts à voir
○
○
○
○
○
○
Création d'une application
Création d'une Activité
Ressources
Gabarit
Chaîne de caractères
Déploiement et test
Avec le soutien de :
45. Intents
L'intent est une description abstraite d'une opération à effectuer
Documentation Android
● Objectif : déléguer une action à un autre composant
○ une autre application ou une autre Activité de la même application
● Il s’agit d’un objet que l’on passe à la cible, avec :
○
○
○
○
○
○
le nom du composant ciblé (facultatif)
l'action à réaliser (chaine de caractères)
les données: contenu MIME et URI
des données supplémentaires (paires clé/valeur)
une catégorie pour cibler un type d'application
des drapeaux (informations supplémentaires)
Avec le soutien de :
46. Lancer une Activité avec un Intent
● Démarrer une Activité dans l’application actuelle
○
○
Prémière paramètre : le contexte de l’application
Deuxième paramètre : la classe de l’activité à démarrer
Intent nouvelleActivite = new Intent(this, MaNouvelleActivite.class);
intent.putExtra("title","Hello Bootcamp"); //Des données extra, clé/valeur
startActivity(nouvelleActivite);
● Démarrer autre application
○
○
Prémière paramètre : le type d’action démandée
■ On demande une appli capable de faire l’action
■ Le système choisit laquelle
Deuxième paramètre : les données à envoyer à la cible
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
startActivity(callIntent);
Avec le soutien de :
47. Composants d’un Intent
● Action : on déclare le type d’action qu’on veut réaliser
○
○
Le système choisit l’application qui va faire l’action
Exemple : Intent.ACTION_VIEW pour aller voir une URL
■
Par défaut le système ouvrira le navigateur sur l’URL
● Catégorie : information additionnelle sur le composant
qui devrait répondre à l’Intent
○
○
Plusieurs catégories possibles
Catégories définies par défaut :
■
■
■
■
■
CATEGORY_BROWSABLE
● L’Activité cible peut être invoqué depuis le navigateur pour gérer des données
référencés par une URI
CATEGORY_GADGET
● L’Activité cible peut être inserée dans une Activité hôte
CATEGORY_HOME
● L’activité Cible montre l’écran d’accueil du terminal
CATEGORY_LAUNCHER
● L’Activité cible est Activité principale d’une application
CATEGORY_PREFERENCE
● L’Activité cible est un paneau de préférences
Avec le soutien de :
48. Composants d’un Intent
● Données : une URL et un type MIME
○
○
l’URL et le type MIME des données qu’on passe à la cible
Les URI de type content: indiquent des données sur le terminal
■ Contrôllées par un Content Provider
● Extras
○
Des données additionnelles en, forme clé/valeur
● Drappeaux
○
Ajoutent des information sur comment l’Intent doit être géré
■ Par exemple si l’Activité doit démarrer dans une Tâche nouvelle
Avec le soutien de :
49. Comment répondre aux Intents
● Chaque application déclare ses Intent Filters
○ Déclarés dans le Manifeste
○ Indiquant à quels Intents elle peut répondre
○ Plusieurs niveaux de filtrage
■
■
Action, Catégorie et Données
Pour répondre à un Intent, les trois niveaux doivent être ok
<intent-filter . . . >
<action android:name="com.example.project.SHOW_CURRENT" />
<action android:name="com.example.project.SHOW_RECENT" />
<action android:name="com.example.project.SHOW_PENDING" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="video/mpeg" android:scheme="http" . . . />
<data android:mimeType="audio/mpeg" android:scheme="http" . . . />
</intent-filter>
Avec le soutien de :
50. Broadcast Intent
● Intent diffusé à l'ensemble des applications du système
○
Pour transmettre des informations à destination d’autres applications
■ demander la réalisation d’actions spécifiques
■ pour fournir des informations sur l’environnement
●
appel entrant, réseau Wi-Fi connecté…
Intent broadcast = new Intent(MyBroadcastReceiver.VIEW);
broadcast.putExtra("extra", "Hello GDG!");
sendBroadcast(broadcast);
● Un Broadcast Received permet de recevoir ces Intents
public final class MyBroadcastReceiver extends BroadcastReceiver {
public static final String VIEW ="org.gdgrennes.intent.action.VIEW";
@Override
public void onReceive(Context context, Intent intent) {
// Code de traitement de l’Intent ici.
}
}
Avec le soutien de :
52. Gestion d’Événements
● Event Listeners
○
Mettent un composant à l’écoute d’un événement
○
Le composant reçoit un Event Listener
■
Qui implémente la méthode de réponse à l’événement
Bouton déclaré dans un Gabarit
Code utilisant un Event Listener sur le click
<Button
android:text="Hello!"
android:id="@+id/btnHello"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content" />
Button b = (Button)findViewById(R.id.btnHello);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),
"Hello World!",
Toast.LENGTH_LONG).show();
}
});
Avec le soutien de :
54. LiveCoding : Hello World avec Intents et Events
● Objectif : Première application interactive
○ Un premier écran avec un champ pour saisir son nom et un
bouton qui amène au deuxième écran
○ Un deuxième écran avec un Hello $NOM personnalisé
● Concepts à voir
○ Création d'une application avec plusieurs Activités
○ Création d'un Gabarit à plusieurs composants
○ Utilisation des Event Listeners pour écouter des Évenements
○ Utilisation des Intent pour changer d'Activité
Avec le soutien de :
57. Services
● Composants tournant en tâche de fond
○
○
○
○
○
Sans interface utilisateur
Pouvant réagir aux événements, mettre à jour des contenus,
effectuer des traitements…
Pouvant notifier de leur état à l'utilisateur
Avec un cycle de vie similaire aux activités
Contrôlables depuis d'autres applications
■
(activité, service et Broadcast Receiver)
● Beaucoup d’applications ont activités et services
○
○
L’activité permet à l’utilisateur de contrôler le service
Le service tourne en permanence
■
Par exemple pour aller chercher des informations
Avec le soutien de :
58. Code d'un service
Les services peuvent redéfinir quatre
méthodes : onCreate(), onStart(),
onBind() et onDestroy()
●
●
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MonService extends Service {
@Override
public void onCreate() {
// Placez ici le code qui sera exécuté lors
// de la création de ce service
}
Les services démarrés doivent
implémenter onStart()
Les services liées doivent
implémenter onBind()
○
@Override
public void onStart(Intent intent, int startId) {
// Placez ici le code qui sera exécuté à chaque
// démarrage du service
}
Cette méthode retourne un objet
IBinder qui permet au mécanisme
IPC de fonctionner
IPC : communication inter-processus,
permettant d’appeler des méthodes
distantes
@Override
public void onDestroy() {
// Placez ici le code qui sera exécuté lors
// de la destruction de ce service
}
@Override
public IBinder onBind(Intent arg0) {
return null;
Avec le soutien de :
}
}
60. Programmation concurrente
● Par défaut chaque application s’exécute dans un seul processus
○
Cela peut-être modifié dans le Manifeste
<application>
<activity>.../activity>
<service>...</service>
<service android:name=".MyService" android:process=":p2">
</application>
● Le processus peut créer des threads différents
Avec le soutien de :
61. Le Thread UI
Thread unique sur lequel l’application tourne au démarrage
● Si ce thread reste bloqué
○
○
L'interface d'utilisateur de l'appli reste bloqué
Le système peut arrêter l'application
Toute opération potentiellement bloquante ou simplement lente
doit se faire dans d'autre thread
●
●
Le Thread UI doit servir qu'à la gestion
des composants graphiques
Appels réseau, consultation données,
logique métier... sur d'autres threads
Avec le soutien de :
62. Multi-threading : les Async Tasks
Depuis le Thread UI
●
●
On peut créer des threads traditionnels Java (implements Runnable)
On peut utiliser des tâches asynchrones (AsyncTask)
Async Task
●
●
L'activité appelle la méthode execute() de l'AsyncTask
Le code à exécuter dans le nouveau thread est à mettre dans la méthode
doInBackground(Object... params)
Avec le soutien de :
63. Async Tasks
Ca cache la compléxité des threads
●
Pour chaque action asynchrone on crée une classe heritant d’AsyncTask
○ Surchargeant au moins doInBackground(Object... params)
○ Souvent surchageant aussi onPostExecute(Result)
●
La classe a trois paramètres <U,V,W>
○ U : le type du paramètre envoyé à l'exécution
○ V : le type de l'objet permettant de notifier de la progression
○ W : le type du résultat de l'exécution
Avec le soutien de :
64. Async Tasks
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
Avec le soutien de :
66. Permissions et état du réseau
●
Pour pouvoir accéder au réseau l’appli doit demander ces permissions
○ Dans le Manifeste
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
●
Elle doit ensuite vérifier que le réseau est disponible
○
Dans l’Activité qui veut se connecter
ConnectivityManager connMgr =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// fetch data
} else {
// display error
}
Avec le soutien de :
68. LiveCoding : Hello RESTFful World
● Objectif : Première application réseau
○
○
●
Un premier écran avec un champ de texte pour saisir le prénom et un
bouton pour l'envoyer vers le serveur
Suite à la réponse du serveur, un deuxième écran qui affiche cette
réponse
Concepts à voir
○
Utilisation des capacités réseau du terminal
○
Permissions dans l'AndroidManifest.xml
○
Envoi et réception de requêtes/réponses REST
Avec le soutien de :
70. LiveCoding : Twitter-like
● Objectif : une application permettant de se connecter
à un service d'échange de messages courts
● Concepts à voir :
○
○
○
Aller plus loin dans les concepts vus
TimerTaks, Services
ListView, ListAdapters
Avec le soutien de :
71. Le serveur
● Serveur codé en Java offrant une API REST
○ Services :
■
Inscription
■
Identification
■
Envoi de message
■
Récupération des 20 derniers messages
■
Récupération des nouveaux messages depuis un instant
donné
Avec le soutien de :
72. Première étape : l'inscription au service
● URI :
http://lostinbrittany.
org/java/AndroidBootcampServer/rest/user
○ Paramètres : username, password
○ Mèthode : PUT
○ Réponse JSON : {"result":"O.K."}
● Suggestion
○
○
○
○
Réalisation de l'UI
Création d'un thread utilitaire ou d'une AsyncTask
Envoi de la requête HTTP
Récupération de la réponse via le handler
Avec le soutien de :
73. Deuxième étape : l'identification
● URI :
http://lostinbrittany.
org/java/AndroidBootcampServer/rest/user
○ Paramètres : username, password
○ Mèthode : POST
○ Réponse JSON : {'token': 'TOKEN_IDENTIFICATION'
■ Il faudra renvoyer ce token à chaque envoi de message
●
}
Même URI que pour l'inscription, méthode différente
Avec le soutien de :
74. Troisième étape : Envoyons des messages
● Une UI simple mais fonctionnel
○ Un EditText et un Button en bas
○ Un ListView en haut
Avec le soutien de :
75. Troisième étape : Envoyons des messages
● URI :
http://lostinbrittany.
org/java/AndroidBootcampServer/rest/message
○ Paramètres : username,
○ Mèthode : POST
○ Réponse JSON :
token, content
{"result":"ok", 'timestamp': 'TIMESTAMP' }
■
Pour permettre la récupération des messages à partir d'un
instant donné
Avec le soutien de :
76. Quatrième étape : recevons des messages
● Réception via pulling
○ Pushing pour Bootcamp Avancé
● Deux alternatives
○
Service
○
TimerTask
● On va commencer par la TimerTask, plus simple
Avec le soutien de :
77. Quatrième étape : recevons des messages
● TimerTaks : Une tâche programmé pour
○
○
passer tous les x secondes et
lancer un thread d'éxécution
Avec le soutien de :
78. Quatrième étape : recevons des messages
● URI :
http://lostinbrittany.org/java/AndroidBootcampServer/rest/message/timestamp
○ Paramètres : timestamp
○ Mèthode : GET
○ Réponse JSON :
[{"id":22,"timestamp":1341026043615,"user":"toto",
"content":"titititi"}]
○
Il faut garder le timestamp du dernier message récupéré et la fois
suivante ne demander que les messages produits après ce
timestamp
Avec le soutien de :
79. Quatrième étape : recevons des messages
● Pour l'UI nous suggérons d'utiliser une ListView
○ La ListView par défaut ne présente
que des labels
○ Nous on voudrait une ListView plus
élaboré
■
Avec deux informations distinctes par ligne
■
Et éventuellement un avatar
○ Solution : utiliser un ListAdapter
Avec le soutien de :
81. Bilan
● Vous avez vu aujourd'hui :
○ Un aperçu de la plate-forme Android
○ Les concepts basiques d'une application Android
■
Activités, Services, Intents, AndroidManifest.xml
■
Layouts, widgets, strings.xml
■
Communications réseau, appels REST
■
AsyncTasks, TimerTask
Avec le soutien de :
82. Votre avis
● C'est notre quatrième Bootcamp Android
○
○
On a essayé de réduire le côté théorique
Et de mettre rapidement les mains à la pâte
● Qu'est-ce que vous en pensez ?
○
○
○
Trop simple ? Trop compliqué ?
Trop long ? Trop court ?
Trop théorique ? Trop pratique ?
● Votre avis est important pour nous !
Avec le soutien de :
83. La suite
● Un Atelier Android Avancé le 14 décembre
● Vous y voudriez voir quoi ?
On accepte des suggestions !
Avec le soutien de :