Troisième chronique pour “Dans les coulisses d’une App” de “My System Coach”. Après l’introduction et une première partie sur le développement, on continue en se concentrant sur le métier de développeur indépendant qui, même si on (je) ronchonne beaucoup, est quand même formidable.
Développeur, un sacerdoce
Quand je discute avec des managers, des commerciaux, des clients, j’ai vraiment l’impression qu’ils fantasment les projets informatiques comme la construction d’un pont façon 19e siècle. Un “Gustave Eiffel” pose les plans du pont avec le nombre de poutres métalliques et de boulons à l’unité près. Des petites mains n’ont plus ensuite qu’à suivre ce plan parfait jusqu’à atteindre la rive opposée le jour prévu six mois à l’avance. Pur fantasme.
En informatique, cela ne fonctionne pas ainsi. Pour poursuivre la métaphore, quand on débute, on voit vaguement une rive de l’autre côté du fleuve et on part dans le brouillard en construisant soi-même au fur et à mesure ses poutres et ses boulons. On s’aperçoit alors qu’on ne peut pas poser l’un des piliers sur un fond sablonneux, que le métal est trop lourd pour une telle distance, que le pont plie et que le passage d’un bataillon ou même le vent peut faire écrouler ce si bel édifice. Mais surtout, il est illusoire de penser qu’on fait d’abord la liste des fonctionnalités et que l’on programme ensuite. Les choses se font au fur et à mesure dans un joli chaos.
My System Coach : J’adore quand un plan se déroule sans accroc (ou pas)
Pour “My System Coach” je comptais, au début, juste faire faire des widgets :
Puis je me suis dit qu’ajouter des notifications ne serait pas mal :
Et puis, tant qu’à faire, de l’OSD (On Screen Display : affichage permanent sur l’écran ici en bas à droite).
Et même des LED qui clignotent quand il y a un soucis…
Au départ il n’y avait pas vraiment d’application, que ces fonctionnalités là. La page panorama (vous avez vu, suite à vos commentaires que j’ai fait une version française !) et la liste des apps sont arrivées à la fin, vers janvier ou février.
Si vous voulez voir par vous même sur votre terminal, c’est par ici !
La programmation est donc un processus créatif comme un autre : les idées débarquent dans un gentil désordre suite à l’utilisation d’autres applications, aux difficultés rencontrées, à la lectures d’articles ou sous la douche… Ce n’est pas pour rien que nous sommes régis par le droit d’auteur et non par celui des brevets.
En programmation, quand on suit ce processus créatif en rajoutant des fonctionnalités au fur et à mesure, on a un effet exponentiel :
- La première fonctionnalité se programme en 2 heures
- La deuxième en une journée parce qu’elle impacte la première
- la troisième en trois jour parce qu’elle casse complètement ce que vous avez fait dans la première et qu’il vous faut des heures pour vous apercevoir que la deuxième fait maintenant n’importe quoi…
Et cela complexifie une programmation qui, sous Android, n’est pas vraiment triviale.
Service, Activités et Widget : un ménage à trois explosif
Une application classique se comporte grosso modo comme suit : on clique sur l’icône, le programme se lance et quand le travail est fini, l’application se ferme.
Sur Android, c’est (schématiquement) ce que l’on appelle une activité. Mais “My System Coach” est différente : certes l’application/activité principale fonctionne comme ci-dessus, mais on collecte et affiche si besoin les informations dès le démarrage du terminal. “My System Coach” doit donc se lancer seule au démarrage, chercher les informations comme l’utilisation CPU, les afficher sous différentes formes (notification, widget, application/activité etc.). Tout ce travail de fond est réalisé par ce que l’on appelle des services.
Activités, Services et Widgets. Toutes ces taches sont des entités différentes sous Android. Elles doivent communiquer entre elles alors qu’elles ont leur propre cycle de vie : vous pouvez ainsi démarrer et arrêter à tout moment votre application et cela ne doit pas impacter l’affichage des widgets. Il faut donc bien faire attention à ce que le service qui va chercher les informations ne s’arrête pas de manière impromptue, qu’il envoie les bonnes informations à l’activité, la notification ou le Widget qui doit les afficher et ce, au bon moment.
Sous Android, le fouillis est tel que l’on se sent souvent plus proche d’un moniteur de colonie de vacances débordé que d’Alan Turing. “Petit truc rigolo”, si vous n’utilisez pas les bons outils et que vous envoyez une information à une activité alors que l’utilisateur vient de la quitter, on peut tout faire planter : KABOOM !
Cela peut donc tourner au cauchemar. J’ai ainsi découvert un soir que mon application se coupait quand… une installation d’application tierce plaçait une icône sur l’écran d’accueil ! Un vrai bonheur à déboguer !
Si c’est comme ça, je vais devenir fermier dans le Larzac !
A lire la dernière chronique et les chapitres précédents on pourrait penser que développer se résume à un calvaire sans nom. C’est faux. Il m’est arrivé de me réveiller la nuit, de consulter l’heure sur mon portable et de m’émerveiller bêtement sur les petites barres de mon appli dans la zone de notification.
Vu tout le temps que j’y ai passé, je m’enthousiasme à chaque fois que mon portable s’allume et que l’application se lance. Je m’imagine le service qui va chercher les informations processeurs, qui passe ensuite la main aux widgets, qui choisissent la bonne couleur à afficher. Je pense à ma liste des apps qui est mise à jour en secret en arrière-plan avant d’être affichée. Bref, je couve mon bébé.
De plus, cas particulier du développeur indépendant, il est extrêmement gratifiant de faire une application de A à Z. Une bonne partie du travail consistait à retrouver dans un capharnaüm monstre la ligne de code qui correspondait à l’élément à modifier. Il m’est déjà arrivé de passer une journée à la trouver. Maintenant, quand je veux modifier une fonctionnalité, je travaille dessus 15 secondes plus tard. Et quelquefois j’ai un résultat positif en moins de 5 minutes sur mon terminal. Très gratifiant, croyez-moi.
Les fois où cela prend plus de temps, on essaye, on lance, il ne s’affiche pas exactement ce que l’on veut, on réessaye tout de suite quelque chose, on relance, c’est un peu mieux mais on a envie d’essayer autre chose et… Mais il est déjà 14h30 et on a oublié de manger !
Pour finir, je dois vous avouer que je vais de temps en temps sur la fiche Google Play rien que pour me dire en mon for intérieur : “Cémoikiléfé !”. Et ce n’est pas rien.
Allez, vous en avez assez fait pour un dimanche, on se retrouve la semaine prochaine pour parler de design et d’ergonomie. On est dans un autre monde, la preuve : je remercierai Microsoft et mentionnerai Kafka…
Bonus Stage 2 : Le coin des développeurs
Un petit mot pour les développeurs :
- L’application a été basée sur une architecture MVC très classique. J’ai ainsi tout simplement utilisé des classes statiques pour stocker les variables partagées. Et j’ai été étonné de voir à quel point cela est simple et robuste dans cet environnement asynchrone.
- L’application utilise la librairie de support Android pour être utilisable dès la version 2.1. C’est assez rare pour le noter : la librairie marche parfaitement et fut un plaisir à utiliser.
- Le service principal communique avec les widgets via des intents service et l’activité (si besoin) avec un LocalBroadcast. J’ai abandonné les Asynctask qui sont peu intuitives et qui vous font tout péter si l’activité passe en arrière-plan au cours de l’exécution.
L’auteur de cette chronique, Pierre Benayoun, est président du Bordeaux Android User Group ; il développe et conseille sur Android depuis la sortie du HTC G1 (qu’il possède toujours !). Vous pouvez le joindre sur Twitter à cette adresse !
Téléchargez notre application Android et iOS ! Vous pourrez y lire nos articles, dossiers, et regarder nos dernières vidéos YouTube.
Andlytics (open source) https://play.google.com/store/apps/details?id=com.github.andlyticsproject Permet également de suivre l'activité d'une application (avec un compte développeur).
Merci beaucoup, je garde le lien dans les favoris je regarderais ça dès que j'aurais un peu temps. :)
Mais dans l'idée on est un peu des deux :D à autant de degrés différents qu'il y a de développeurs.
Une Asynctask c'est pratique quand celui qui la lance est celui qui la récupère. Quand un même traitement est utilisé par plusieurs widgets ou activités, y'a pas photo, on passe par un Service.
Même dans la construction d'une maison ou d'un pont, on s'écarte toujours un peu du plan. On le voit bien au nombre de chantier de construction qui dure un à deux ans de plus que prévu. Des avaries il y a en a dans tous les projets, quelque soit le domaine :) En tout cas je suis contente de voir rappeler que le développement est une démarche créative, même s'il se base sur un processus logique. Le système D est notre compagnon de tous les instants !
L'agile me semble dans le principe particulièrement adapté, mais cela veut dire travailler en équipe. Je ne trouve pas ça évident du tout d'avancer avec un seul cerveau :). La où l'informatique souffre (de moins en moins) du cliché du dev isolé dans son garage, je trouve personnellement que c'est un réel travail d'équipe, de discussion et de partage !
"Si tout les projets informatique fonctionnaient comme tu en parles, ce serait terrifiant !" -> Mais tous les projets informatiques fonctionnent comme je parle ! :p Plus sérieusement merci pour cette précision, il y a toujours eu un débat à ce niveau. "En général on part d'une idée (d'un besoin) qu'on étoffe et qu'on fait mûrir avant de se jeter tête baisser dans la réalisation." C'est à mon avis très difficile à mettre en place dans le cadre d'un projet innovant (même à ma modeste échelle) on l'on découvre les difficultés au fur et à mesure. C'est notamment due à l'instabilité (26 versions !) du système Android. J'ai tâté pas mal de méthodes de gestions de projet dans ma carrière et utilise actuellement pour mes projets une méthode agile à ma sauce. Ca ne fait pas de miracle mais en effet ca aide pas mal...
« Les choses se font au fur et à mesure dans un joli chaos. » Si tout les projets informatique fonctionnaient comme tu en parles, ce serait terrifiant ! Il existe pas mal de méthodes de travail (ou de gestion de projet) pour amener son pont à l'autre rive en évitant le genre d’écueils dont tu parles. En général on part d'une idée (d'un besoin) qu'on étoffe et qu'on fait mûrir avant de se jeter tête baisser dans la réalisation. Je pense que c'est la multiplication des casquettes sur une seule tête qui donne cette impression de chaos dont tu parles. Il faut réussir à concilier, faire cohabiter et modérer les différents rôles dans sa tête ;). Après même les projets avec une équipe expérimentée peuvent tourner au vinaigre… Il faut savoir qu'environ 20% des projets informatique démarrés sont purement et simplement abandonnés en cours de route. (et 40 à 50% sont aboutissent avec des dépassement de budget, de délai ou des réductions de périmètre …) Pour quelqu'un de seul c'est déjà une belle réussite d'arriver a mener son projet à bon port ! Plus encore de le faire vivre et grandir sur la durée !
J'avais utilisé cet article pour me lancer : http://www.intertech.com/Blog/using-localbroadcastmanager-in-service-to-activity-communications/ L'avantage du LocalBroadcast c'est que si ton activité n'est pas dispo il ne se passe rien. Avec un Asynctask tu fait juste tout péter !
Un moment j'avais hésité à dire : "on est plus proche de ZAZ que de Gustave Eiffel" mais c'était trop hardcore...
j'adore : "Ce n’est pas pour rien que nous sommes régis par le droit d’auteur et non par celui des brevets" ! :D
Super chronique faite par un bordelais en plus. J'essaierai d'apprendre Java cet été et peut être que je me mettrai à développer ensuite avec Eclipse + ADT ou Android Studio que j'ai déjà installés (mais AS a un problème avec Gradle, c'est plus une version alpha qu'une bêta). Sinon j'arrive sur aucun des deux à faire "My first App" du site Google car il décrit des trucs que je n'est pas
LocalBroadcast? Faudra que je me document un peu là dessus, j'ai déjà utilisé des Asynctasks mais j'ai passé plus de temps à comprendre leur fonctionnement qu'à les mettre en place donc s'il y a plus efficace j'hésiterais pas à aller voir de ce côté !
Très bel article . Merci<i>-------<a href="https://play.google.com/store/apps/details?id=com.frandroid.app">Envoyé depuis l'application FrAndroid pour smartphone</a></i>
[…] Troisième chronique pour “Dans les coulisses d’une App” de “My System Coach”. Après l’introduction et une première partie sur le développement, on continue en se concentrant sur le métier de développeur indépendant qui, même si on (je) ronchonne beaucoup, est quand même formidable. Développeur, un sacerdoce Quand je discute avec des managers, des commerciaux, des Lire la suite […]
Ce contenu est bloqué car vous n'avez pas accepté les cookies et autres traceurs. Ce contenu est fourni par Disqus.
Pour pouvoir le visualiser, vous devez accepter l'usage étant opéré par Disqus avec vos données qui pourront être utilisées pour les finalités suivantes : vous permettre de visualiser et de partager des contenus avec des médias sociaux, favoriser le développement et l'amélioration des produits d'Humanoid et de ses partenaires, vous afficher des publicités personnalisées par rapport à votre profil et activité, vous définir un profil publicitaire personnalisé, mesurer la performance des publicités et du contenu de ce site et mesurer l'audience de ce site (en savoir plus)
En cliquant sur « J’accepte tout », vous consentez aux finalités susmentionnées pour l’ensemble des cookies et autres traceurs déposés par Humanoid et ses partenaires.
Vous gardez la possibilité de retirer votre consentement à tout moment. Pour plus d’informations, nous vous invitons à prendre connaissance de notre Politique cookies.
Gérer mes choix