Tag :Android

Droidcon Paris 2015

Vous êtes fan d’Android et vous souhaitez en découvrir plus sur les toutes dernières actualités ?

Ne ratez pas la 3ème édition de la Droidcon Paris! C’est LA conférence 100% Android qui se tiendra les 9 et 10 Novembre au Tapis Rouge à Paris !
Au programme, plus de 50 experts venus des quatre coins du globe, 600 développeurs passionnés d’Android, des sponsors, des jeux et du fan pour le plus grand rassemblement Android de France !

Lire la suite

IOT, timeseries et prediction avec Android, Cassandra et Spark par Amira Lakhal

Amira Lakhal, membre active de Duchess France, va proposer un talk sur IOT, timeseries et prediction avec Android, Cassandra et Spark, tout d’abord au Lyon JUG le 20 octobre, puis à Devoxx Morocco et Devoxx Be en novembre.

IOT a un énorme potentiel et son impact dans notre vie quotidienne est important.
Dans sa présentation, Amira va montrer un exemple d’utilisation d’un objet connecté, analyser ses données et prédire l’activité avec Spark. Allons lui poser queqlues questions pour nous donner envie d’aller plus loin et de voir son talk.

Lire la suite

Découverte d’Android par la pratique : les Duchesses Lyon récidivent !

L’année dernière, l’atelier « Découverte d’Android par la pratique » animé par les Duchesses Lyonnaises (Angélique, Soukaina et Marion) dans le cadre de la Code Week avait rencontré un bon succès. Partant de ça, et comme aucune d’entre nous n’avait le temps de produire un tutoriel aussi soigné sur un sujet complètement nouveau pour 2015, nous avons décidé de le rafraîchir et de le présenter de nouveau. Agnès, Marion, Anaïs et moi-même l’animerons donc le 14 octobre à SUPINFO (tous les détails sont dans l’événement Meetup). Cela sera aussi le premier événement pour Anaïs PAYET et moi-même qui sommes arrivées cette année au sein des Duchesses.

Lire la suite

Predict your activity using your Android, Cassandra and Spark

Lately, I started a new sport activity: running. When you run, you get really curious about the acceleration, the distance, the elevation and other metrics you can analyse when you practice this kind of sport. As a runner, I started using phone application (runkeeper) and recently I bought a Garmin Watch so I can get more information about my running sessions.
But how this kind of application analyse data and compute all this metrics?
Let’s focus on one metrics: proper acceleration.

What is proper acceleration?

Proper acceleration or physical acceleration is the acceleration it experiences relative to freefall and is the acceleration felt by people and objects. It is measured by an accelerometer.
The accelerometer data consist of successive measurements made over a time interval. that’s what we call a time series.


How can I get an accelerometer?

Luckily, most of smartphones contain an accelerometer sensor.
The sensor measures 3 values related to 3 different axes as shown in the picture bellow:

As an Android fan, I implemented an Android App: Basic Accelerometer which shows different axes values and the current date as timestamp.

Let’s create Basic Accelerometer Android App!

All source code is available on my Github repository here.
First step, I implemented the start activity:

After creating the starting menu, I have to collect the sensor values in a new activity: “AccelerometerActivity”.
To use the sensor, the activity class must implements SensorEventListener.

Now, I’m able to get information from the sensor and post them to an online REST service.
I used Retrofit, a REST client for Android and Java:

After that, I added an asynchronous task to post sensor values at each sensor’s update:

Now we’re able to launch our app!

How to install the app on your phone?

  • Download Android Studio
  • Clone the BasicAccelerometer project and open it on Android Studio
  • Activate developer mode on your Android phone (must have 4.0.3 version and above).
  • Plug your phone, run the app and choose your phone as a target.

The application will start automatically on your phone and you will see the screen below:


Now as the application is started, we will focus on the REST Service.

REST Service and Cassandra DB

The android app is ready to sent us real time data: time series of our acceleration.
As you may have noticed, I used acceleration bean on my Android app:
The acceleration is posted to a REST service.
The REST API receiving accelorometers data and storing them into Cassandra. Each acceleration contains:

  • acceleration capture date as a timestamp (eg, 1428773040488)
  • acceleration force along the x axis (unit is m/s²)
  • acceleration force along the y axis (unit is m/s²)
  • acceleration force along the z axis (unit is m/s²)

Rest API sources are available on my Github here. All data are saved on Cassandra Data Base.

Apache Cassandra is an NoSQL database. When writing data to Cassandra, data is sorted and written sequentially to disk. When retrieving data by row key and then by range, you get a fast and efficient access pattern due to minimal disk seeks – time series data is an excellent fit for this type of pattern.

To start Cassandra data base:

  • dowload the archive Cassandra 2.1.4
  • open it
  • execute this command: sh /bin/cassandra

On the REST application, I used Spring Data Cassandra which uses DataStax java driver so I can easily interact with Cassandra DB to do different operations:  write, read, update or delete.
Spring Data Cassandra helps to configure Cassandra cluster and create my keyspace:

After configuration, I created my application model:


We are trying to store historical data, so I used a compound key (user_id and timestamp) as they are unique:


Then, I added the REST controller.
The controller receives POST request with an acceleration and insert values on Cassandra DB.

The acceleration bean used in the controller is the same as defined for the Android app with an extra attribute: userID (I’ll explain the usage later).

After defining the REST controller and defining Cassandra configuration, we’re able to run the application:


Spring Boot starts a Jetty Server but you can use Tomcat Server instead. You’ll have to update project dependencies:
dependencies {
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: "spring-boot-starter-tomcat"

Let’s launch REST app!

We have already our Andoid. We run now the REST app. Then you have to add REST app URL to Android app:

As soon as you click on start button, Basic Accelerometer app begins to send acceleration data to the REST service:


And then we start see insertion logs on REST app:


And if we check Cassandra DB, we launch a CQL terminal to do some queries:
sh apache-cassandra-2.1.4/bin/cqlsh

Here’s how data looks like in Cassandra:

At this level, we collect data from the accelerometer and we store it in Cassandra Data Base.

How to analyse accelerometer data?

Remember, we aim to analyse our acceleration data. We must have some references to be able to create a decision tree model.

Luckily this model already exist and there is an interresting article explaining how to create a decision tree model based on acceleration data using data from Cassandra, Spark and MLib here.

Apache Spark is a fast and general engine for large-scale data processing.  MLlib is a standard component of Spark providing machine learning primitives on top of Spark which contains common algorithms , and also basic statistics and feature extraction functions.

The source code to do prediction with an exiting model is available on my Github here. [Update: this is the latest version with Scala]

We want now to guess just by analysing our acceleration if we are walking, jogging, standing up, sitting down, goind up or downstairs.
The decision tree model contains Resilient Distributed Dataset (RDD) of labeled points based on some features.

A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable, partitioned collection of elements that can be operated on in parallel.

The feature include different values:

So to analyse the collected data from BasicAccelerator application, we have to compute features as defined in our decision tree model.
We init our Spark Context:

Then, we read data from Cassandra Data Base (UserID « TEST_USER » is hard coded in REST service application, you can update it or add it to Android App).

Spark-Cassandra Connector is a lightning-fast cluster computing with Spark and Cassandra. This library lets you expose Cassandra tables as Spark RDDs, write Spark RDDs to Cassandra tables, and execute arbitrary CQL queries in your Spark applications.

The connector transforms data written into Cassandra into Spark’s RDDs:

After creating our features and computed them into vectors, we can call the model and try to predict our activity.
You must use spark-cassandra-connector-java-assembly-1.3.0-SNAPSHOT or above to be able to save and load models:

Last final step: prediction

Now we can launch our prediction to see if we can predict the activity based on acceleration:

  1. Launch the REST application
  2. Start the Andoid app with REST application URL
  3. Do an activity during 30seconds (Sitting, Standing Up, Walking, Jogging or Going up or down stairs) while holding the phone in one hand.
  4. Stop the Android app
  5. Launch the prediction activity:


Then you will see the predicted activity as a result:



We’ve seen how to use a connected object (smartphone) to collect time series data and store it into Cassandra.
Then we used Spark Cassandra Connector to transform data into RDD. Then we analysed those RDD using a decision tree model created with Spark.
This is a just a light simple of the infinite possibilies we can have nowadays with conneted devices.

Les Duchess en région se mobilisent pour la CodeWeek

Avez-vous entendu parler de la Code Week ? C’est une semaine dédiée au code en France et partout en Europe. Cette initiative de la commission européenne est destinée à faire découvrir la programmation lors d’événements locaux entre le 11 et le 17 octobre 2014. L’organisation des ateliers est libre. Vous pouvez consulter les sites CodeWeek et CodeWeekFrance pour découvrir les initiatives qui se préparent près de chez vous, et pourquoi pas rajouter la vôtre.

Pour l’occasion, Duchess a décidé de participer à cette manifestation et cette fois-ci ce sont les Duchess en région qui se mobilisent afin d’organiser des événements près de chez vous.

Tout d’abord à Aix-en-Provence le samedi 11 Octobre après-midi, la Maison Numérique nous ouvrira ses portes de 14 heures à 17 heures. En collaboration avec le Laboratoire d’Aix-périmentation et de Bidouille, nous animerons différents ateliers destinés aux enfants et aux adultes. Ces ateliers s’adressent à des novices et ne nécessitent aucune connaissance en informatique.

Les enfants de 6 à 15 ans pourront s’initier à Scratch ou à Code Combat. Scratch permet de créer des animations ou des jeux en mode graphique (avec la souris). C’est une façon ludique de découvrir les bases de la programmation. Code Combat permet d’apprendre le Javascript via un jeu d’aventure très graphique…

Les plus grands (à partir de 15 ans) pourront s’initier à Python. Python est un vrai langage de programmation facile à apprendre. Quelques notions de base vous seront présentées avant de vous laisser coder votre premier script python. Le but de cet atelier est de vous mettre le pied à l’étrier pour que vous puissiez ensuite continuer à apprendre ce langage chez vous.

Ensuite dans la région de Limoges, mercredi 15 et  jeudi 16 Octobre, des ateliers découverte du code via Light Bot et Scratch seront organisés pour des CE1/CM1 des écoles élémentaires Joliot Curie (Limoges) et Jean Rostand (Condat-sur-Vienne).

Enfin le 13 octobre  l’équipe de Duchess Lyon lance son premier évènement : un atelier “Découverte d’Android par la pratique”! Venez nous rencontrer et participer! Lors de cet atelier vous aurez l’opportunité de vous initier au développement Android grâce a un tutorial pas à pas de création d’un memory (jeu de mémoire). Au début de l’atelier, nous vous fournirons les outils de développement ainsi qu’un début d’application qu’il vous faudra faire évoluer pour obtenir un memory pleinement fonctionnel. Vous serez encadrés pendant l’atelier par des développeurs/ développeuses confirmé(e)s qui vous aideront dans la réalisation du memory. A noter pour cet atelier :

  • Public: adultes, ayant les bases en informatique (navigation sur Internet)- limité à 24 paticipant(e)s
  • Matériel: PC (Windows, Mac ou Linux) avec 8Go de RAM minimum, éventuellement un téléphone Android + cable USB si vous voulez essayer l’application sur un téléphone réel.

Si vous êtes intéressés par la Code Week, n’hésitez pas à nous contacter et à nous rejoindre que ce soit pour participer ou pour nous aider à encadrer les différents ateliers !

Retrouvez les informations sur le site de CodeWeek et les inscriptions sur notre groupe meetup

Inscription Aix enfants (de 6 à 15 ans) : http://www.meetup.com/Duchess-France-Meetup/events/206456572/

Inscription Aix adultes (à partir de 15 ans) : http://www.meetup.com/Duchess-France-Meetup/events/206457582/

Inscription Lyon Atelier Initiation Android : http://www.meetup.com/Duchess-France-Meetup/events/207546922/

Droidcon Paris 2014

La Droidcon est de retour à Paris pour la deuxième édition! Cette nouvelle édition aura lieu le 22 et 23 Septembre prochains.

Pour ceux qui ne connaissent pas, la Droidcon est un événement qui regroupe en 2 jours une quarantaine de conférences Android animées par des développeurs passionnés en provenance du monde entier. Trois thématiques spécifiques seront traitées dans les présentations (Android Development, Android Everywhere, Android UX/UI) et un Barcamp est au planning.

Les premières conférences sont déjà présentées sur le site de l’événement, mais de nombreuses vont être ajoutées rapidement.

Droidcon aura la chance d’accueillir des experts reconnus mondialement alors profitez-en !

Duchess France a le plaisir de vous faire gagner une place. Pour cela, il suffit de participer à notre tirage au sort via ce formulaire.

Le résultat du tirage sera annoncé sur notre compte twitter alors suivez nous et bonne chance à tous!
logo DroidCon

Soirée Android au Lyon JUG!

Le 20 novembre prochain, le Lyon JUG propose une soirée spéciale Android. Vous aurez la chance d’assister, en première partie, à une session Livecoding Android pour une introduction les mains dans le cambouis. Plutôt que de s’endormir devant des slides surchargés de code, le livecoding permettra de vous présenter progressivement tous les concepts clés. Suivra ensuite un talk sur le projet Android Annotations qui est un framework Open Source visant à simplifier et industrialiser les développements Android.

@PiwaiPour vous accompagnez tout au long de cette soirée, deux speakers vont co-animer les sessions! Tout d’abord Pierre-Yves Ricau qui est le créateur du projet Android Annotations. Après des expériences en tant que consultant Java/JEE, il tente désormais d’amener des bonnes pratiques au développement Android. Il a rejoint la startup Siine Ltd, basée notamment à Londres et Barcelone, fondée en 2007, qui édite un clavier Android révolutionnaire.

@dam_villeneuveDamien Villeneuve est le deuxième speaker! Damien est un développeur Web et mobilité. Axé principalement Java/JEE, Android et iOS, il aime savoir comment les choses fonctionnent pour mieux les simplifier. Il travaille avec Android Annotations au sein du groupe Excilys, sponsor du projet.

Pour vous donner tout de suite un avant-goût de la soirée, allons à la rencontre des speakers.

Cet interview a été préparé par la team du Lyon JUG, Agnès CREPET, Cédric EXBRAYAT, Alexis HASSLER, ainsi que Guillaume EHRET.

La team « élargie » du Lyon JUG : Peux-tu te présenter ? Comment es-tu arrivé dans le monde de la mobilité ?

Pierre-Yves : Bonjour ! Je suis Pierre-Yves Ricau, @Piwai sur Twitter. Il y a 3 ans, j’ai découvert le développement Android au cours de mon stage ingénieur et j’ai ensuite alterné les expériences Android et JEE / GWT au sein d’eBusinessInformation. Je travaille en freelance depuis un an, pour Siine.

Damien : Bonjour. Je suis Damien Villeneuve. J’ai toujours été passionné par les nouvelles technologies et la programmation. Après avoir testé du J2ME il y a 5 ans, j’ai eu l’occasion de travailler sur un projet Android et ça m’a tout de suite plu. Depuis je travaille principalement sur Android et JEE au sein d’eBusinessInformation.


La team « élargie » du Lyon JUG : Quelles sont les nouveautés notables des dernières versions Android ?

Pierre-Yves : L’essentiel est écrit ici et . D’un point de vue utilisateur, on s’oriente vers une intégration plus forte entre les produits Google, et une cohérence globale de la plateforme. D’un point de vue développeur, d’une part l’outillage (IDE, Lint, build, émulateurs) a beaucoup progressé, et d’autres part le design est devenu une préoccupation majeure des équipes Android.

Damien : Pierre-Yves a plutôt bien résumé la situation. J’ajouterais juste que l’expérience utilisateur est beaucoup plus simple et agréable depuis la version 4.0. On peut aussi noter des animations beaucoup plus fluide, ce qui commence à placer Android comme un sérieux concurrent à l’iPhone pour les fans du shiny.


La team « élargie » du Lyon JUG : As-tu déjà testé les frameworks qui permettent de faire des applications multiplateformes ? PhoneGap a notamment une grande popularité actuellement. L’as-tu testé et qu’en penses-tu ?

Pierre-Yves : Il y a un an j’ai testé PlayN en réimplémentant 2H4U (voici le résultat en html5). C’était marrant et pas très compliqué, mais encore beaucoup trop jeune. Je n’ai pas utilisé PhoneGap. Les retours qu’on m’a fait indiquent que PhoneGap permet d’arriver très rapidement à un premier résultat, mais qu’il est difficile de créer une application performante et iso-fonctionelle sur toutes les plateformes.

Damien : Il y a un an, on m’a demandé une étude préliminaire sur PhoneGap. On arrivait effectivement à avoir des résultats assez rapidement, mais on était assez limités pour l’accès aux ressources physiques (accéléromètre, gps, etc…). Aujourd’hui l’API semble avoir évolué, mais il reste toujours des contraintes de compatibilité entre les différentes plateformes.


La team « élargie » du Lyon JUG : En 2012, quand faut-il développer en natif et quand faut-il faire du Web ?

Pierre-Yves: Ça ne va pas plaire à tout le monde, et c’est pourtant une évidence : le Web sert à faire des sites Web, le natif des applications natives. Un site web mobile et une application native servent des objectifs différents, et sont souvent complémentaires en termes stratégiques.

Évidemment, développer une application native pour chaque plateforme est un investissement. On serait tenté d’utiliser un outil comme PhoneGap pour mutualiser ses développements. C’est payant à court terme, cela permet d’arriver rapidement à un prototype multiplateforme en utilisant des compétences Web répandues. Mais c’est une garantie d’échec à plus long terme. Les paradigmes de UI sont largement différents d’une plateforme à l’autre, en tentant de les unifier on réalise un produit médiocre sur toutes les plateformes. De même, les implémentations de « webview » varient, il vous faudra donc une équipe d’experts (chers?) pour résoudre les bugs et autres problèmes de performance.

Damien : Encore une fois, mon point de vue est très similaire à celui de Pierre-Yves. Je n’ai pas grand chose à ajouter, tout a été dit.


La team « élargie » du Lyon JUG : Comment se porte le marché des applications mobiles? À part les hits à la Angry Birds, est-il possible de vivre facilement du développement mobile?

Pierre-Yves : Oui! Au delà du développeur qui se lance seul, créé ses propres applications et devient riche, les entreprises ont besoin de développeurs mobiles. Les utilisateurs sont à la recherche d’applications qui soient plus que des applications vitrines développées en 3 semaines par une web agency. Le mobile est donc en train de quitter la direction marketing pour intégrer la DSI.

Damien : Les entreprises commencent effectivement à se tourner de plus en plus sur l’utilisation d’appareils mobiles en interne. Que ce soit dans les bureaux ou à l’extérieur dans des conditions plus difficiles, le marché du mobile n’explose pas que pour les particuliers.


La team « élargie » du Lyon JUG : Quelles sont les solutions actuelles aux problèmes de fragmentation des systèmes Android : versions, résolutions et capacités différentes ?

Pierre-Yves : Côté design, il vaut mieux fournir une expérience identique quelle que soit la version, le constructeur, etc. Le style Holo est top, pourquoi ne pas en faire bénéficier tous vos utilisateurs ? C’est pourtant simple en utilisant les bons outils : AndroidKickstartR, HoloEverywhere, ActionBarSherlock, Action Bar Style Generator, Android Holo Colors, …

Pour les versions, on décide d’une version minimale supportée (cf les stats), mais on configure la dernière version du SDK dans le projet, ce qui permet d’utiliser les dernières features. Lint se charge de nous avertir sur l’utilisation d’API non supportées dans la version minimale. Ensuite, on utilise d’une part le mécanisme de resources alternatives, et d’autre part des branchements dans le code avec des implémentations alternatives de classes.

En pratique, les différences de résolution et de dimension posent peu de problèmes : on utilise des layout fluides, des dimensions indépendantes de la résolution. Côté images, il faut à minima les fournir dans 2 dimensions (hdpi, xhdpi). C’est vraiment une question de bonnes pratiques, une fois qu’on a choppé le coup on n’y pense même plus.

Côté capacités, on note principalement des différences en terme de CPU et de mémoire.

Les problèmes de CPU concernent plutôt des usages spécifiques, comme les jeux, auquel cas on pourra utiliser le NDK. En général, les lags sont dus aux erreurs classiques comme des opérations d’IO sur le thread de la UI ou des hiérarchies de vues trop profondes. StrictMode et Traceview aident bien.

Pour la gestion de la mémoire, il faut penser à utiliser des caches ayant une taille maximale et une politique d’éviction, par exemple le LruCache. Petite anecdote marrante, le clavier Android standard (LatinIME) catch les OutOfMemoryError en plusieurs endroits, par exemple ici.

Damien : Que dire de plus… Google fourni régulièrement des stats sur cette fragmentation. Je pense qu’il est important d’aller y jeter un œil régulièrement et tailler son application en conséquence.


La team « élargie » du Lyon JUG : Quelles sont les difficultés pour un développeur Java pour commencer à développer pour Android ?

Pierre-Yves : Vous ne retrouverez pas vos outils habituels: pas de Spring, pas d’Hibernate, Maven est un enfer, l’introspection explose les perfs, les Logs fonctionnent différemment.

La documentation est telle qu’il est difficile de suivre un chemin d’apprentissage linéaire. Le web regorge de mauvais conseils (Read the source Luke). Les conventions de nommages internes au SDK nous viennent d’un autre siècle.

Bref, il faut s’armer de patience et savoir se faire aider.


La team « élargie » du Lyon JUG : Tu seras à Devoxx en novembre, tu vas présenter un Tools in Action sur ton projet AndroidAnnotations. Peux-tu nous présenter ce projet?

Pierre-Yves : AndroidAnnotations, AA pour les intimes, est un framework Open Source visant à simplifier et industrialiser les développements Android, sans impacter les performances.

AA utilise l’API d’Annotation Processing de Java 6 pour générer à la compilation le code d’infrastructure de vos applications Android, et permettre au développeur de se concentrer sur le code métier.

Ce projet est né il y a deux ans d’une frustration que j’ai ressenti en travaillant pendant un an sur un projet Android. J’avais du abandonner RoboGuice pour des raisons de performances. Olivier Croisier a présenté l’Annotation Processing au ParisJUG, et 8 jours plus tard AA était né.


La team « élargie » du Lyon JUG : Utilises-tu des tests unitaires dans tes projets Android (http://developer.android.com/tools/testing/testing_android.html) et est-ce que la simplification de l’écriture de ces tests est dans le scope d’AndroidAnnotations ?

Pierre-Yves : Pour tout ce qui est logique métier et composants techniques, j’écris des tests JUnit hors conteneur ne nécessitant pas de démarrer un émulateur, grâce à Robolectric qui reproduit le comportement du SDK. Combiné avec infinitest, ça permet un feedback très rapide.

AA n’a pas pour objectif de simplifier l’écriture des tests, mais c’est effectivement un effet induit par le découplage qu’il permet.

Je ne code pas de test d’IHM tournant sur de vrais devices, j’attends encore de découvrir comment faire ça simplement. C’est complexe à mettre en place, dur à maintenir, et long à exécuter.


La team « élargie » du Lyon JUG : Est-ce que l’utilisation d’AndroidAnnotations ne pose pas de problème avec Lint comme on peut avoir par exemple quand on utilise Lombok avec Sonar ?

Pierre-Yves : Non, car le code généré par AA est visible par Lint. Le problème de Lombok est que les modifications du bytecode ne sont pas visibles dans les sources. Ce n’est pas le cas d’AA, qui se contente de générer des classes supplémentaires, sans modifier le code existant.


Merci à Anne-Laure Rigaudon pour sa relecture.


Merci Pierre-Yves et Damien!

 Les inscriptions pour la session de Pierre-Yves et Damien au Lyon JUG le 20 novembre sont ouvertes! Rendez-vous sur le site du Lyon JUG pour vous inscrire!

En continuant à utiliser le site, vous acceptez l’utilisation des cookies. Plus d’informations

Les paramètres des cookies sur ce site sont définis sur « accepter les cookies » pour vous offrir la meilleure expérience de navigation possible. Si vous continuez à utiliser ce site sans changer vos paramètres de cookies ou si vous cliquez sur "Accepter" ci-dessous, vous consentez à cela.