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.

Dans les coulisses d'une App

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 :

My System Coach

Puis je me suis dit qu’ajouter des notifications ne serait pas mal :

My System Coach

Et puis, tant qu’à faire, de l’OSD (On Screen Display : affichage permanent sur l’écran ici en bas à droite).

My System Coach

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.

My System Coach

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 !