Projet

Général

Profil

Mes aventures avec Qt tome 2

Comme l'année dernière, je suis dans le train pour un long moment. De plus, cette fois-ci, il y a une prise de courant ! Je vais donc pouvoir prendre le temps de la réflexion pour régler mes comptes avec le développement de logiciels éducatifs dans le cadre du Terrier d'AbulÉdu !

Déjà un an et demi

Eh oui ! Depuis mes débuts dans la programmation Qt/C++, j'ai terminé, si jamais un logiciel peut être terminé, ma calculette capricieuse. Elle est sur les dépôts, empaquetée bien au chaud pour diverses distributions et même pour Windows : magie de Qt !
Ce ne fut pas sans mal (voir tome 1), mais quelle satisfaction au final : plaisir d'avoir réussi à terminer quelque chose de correct, plaisir du travail en équipe avec les camarades de AbulÉdu-fr, plaisir dû aux retours positifs de quelques collègues…
Côté programmation, pas encore de quoi se rouler parterre, mais enfin le compilateur ne se fâche plus aussi souvent, et quand il le fait, je comprends ce qu'il dit, presque toujours !
J'ai appris à dompter les notions d'héritage, d'héritage multiple, les fonctions virtuelles (plus au moins pure), les pointeurs (plus ou moins intelligents). J'arrive même à filer un coup de main aux potes quand leur code se vautre sur une segmentation fault. Ceci dit, j'ai quand même fait de sacrés sacs de nœuds
avant d'y voir clair. Au bout du compte, mon code a gagné en concision, en lisibilité ainsi qu'en rapidité de conception.

Commenter le code !

Tiens, voilà bien un truc dont on se demande à quoi ça peut bien servir sinon à perdre du temps ! Dans la phase de développement intensif, j'irais jusqu'à dire que ça sert à rien (ne le dites pas aux autres). Mais comme une des particularités de notre groupe est le développement collaboratif, commenter son code est une nécessité, de même que décrire l'installation, l'utilisation des modules sur le wiki associé au projet et aussi faire des commits réguliers (un par bug corrigé, un par fonctionnalité implémentée,il a dit le chef). Au total, ça en fait du texte ! De plus les normes ne sont pas les mêmes suivant le contexte : commentaires du code au format doxygen, wiki avec une syntaxe digne des débuts de l'informatique…

Bon, alors je commente, je documente le wiki, je fais religieusement mes commits. Enfin pas toujours, il m'arrive même de démarrer des trucs tout seul dans mon coin et puis quand c'est suffisamment avancé, voire terminé, je publie tout sur la forge. C'est pas très collaboratif tout ça, mais que celui qui ne l'a jamais fait me jette la première pierre !

Le principe du code auto-commenté est aussi un truc cool qui nous vaut de longues séances de refactorisation (pour ceux qui ne savent pas ce que c'est (les pôvres) : cela consiste à renommer les fonctions et variables) et quand on le fait à deux c'est encore mieux.

En fait, toute cette documentation à produire est un vrai plus, ça permet de prendre du recul sur le travail produit, voire de rectifier certaines choses. Pour moi, c'est même un véritable outil de formation : expliquer son code à quelqu'un qui ne l'a pas conçu, ce n'est pas si simple !

Toujours plus loin dans le collaboratif !

Quand je dis que Éric est un fou dangereux, c'est pas vrai mais presque ! Voilà-t-y pas qu'un jour de février, il nous dit : « on devrait redévelopper Aller en Qt » Déjà rien que ça, ça fait frémir, mais à peine
le frisson d'angoisse passé (on en était à se demander qui serait l'heureux élu en lorgnant sur le voisin) il ajoute : « on pourrait tenter de le faire à quatre ! » Ben tiens, yapuka !

Alors nous, bonnes poires, on s'y met, on cherche, trouve des avantages : on va se répartir le boulot, on va avoir des classes communes que l'on spécialisera pour chaque type d'exercice (on maîtrise au moins un peu vocabulaire). Cela ira plus vite, dans l'euphorie du moment, c'est tout juste si on allait avoir fini à la fin de la semaine, ou la prochaine…

Ça, c'était avant ! Faut dire aussi que géographiquement, on était assez éloigné les uns des autres : deux à Bordeaux, un dans le Lot, un dans le Gers (moi).

Si tout seul, bien tranquille dans votre coin, votre code n'est pas trop propre, imaginez, à quatre ! Malgré tout, petit à petit, le code avance, on dégage des classes communes, des objets génériques, on essaie de structurer le code, de le mutualiser (encore un mot magique ! ). Et là, patatras, tout le monde se débine : le développeur salarié part six mois en Nouvelle-Zélande pour assister à la coupe du monde de rugby, il y a des travaux urgents dans le développement de AbulEdu 11.08 et l'ADSL ne doit plus arriver dans le Lot ! Alors là, pour le coup, je me sens mal, d'autant plus mal que je viens de tomber sur un truc fantastique qui devrait bien convenir au développement d'Aller-5.0 : les QStateMachine, autrement dit, les machines à états finis. Je sens que c'est ce qu'il nous faut : le hic c'est que ça met par terre 80% de ce que l'on a déjà fait.

Je collabore tout seul

Comme pour le moment, je suis un peu seul sur le coup, et que je suis absolument sûr du bien fondé de ma trouvaille, je fonce et je fais une maquette fonctionnelle (encore un de nos dadas) à toute vitesse pour la présenter lors de la rencontre que nous allons avoir au début de l'été dans le Lot (l'ADSL est revenu). Là, ils ont tout essayé pour se débarrasser de moi, me gaver de nourritures locales aussi bonnes les unes que les autres, me noyer dans la grotte de trou madame, scier une patte de ma chaise (j'y ai gagné le pseudo de Malloc), malgré tout cela, il a bien fallu qu'ils en conviennent, l'AbulEduStateMachine, c'est trop fort ! Et tant pis pour celui qui est en Nouvelle-Zélande : les absents ont toujours tort ! Après trois jours de décorticage de la chose, de solides bases sont posées, L'AbuleduStateMachine est interfacée avec les autres modules, et l'enthousiasme est à fond, au moins pour moi. La gêne aussi, d'avoir réussi à imposer un nouveau paradigme lourd de conséquences pour la suite.

Je collabore pour les autres

Comme je suis parti pour réimplanter une bonne partie des classes de Aller, pourquoi ne pas bien analyser le code et en profiter pour identifier les objets dont nous auront besoin par la suite ? En effet, les logiciels du Terrier présentent bon nombres de similitudes, qu'ils aient été développés par des enseignants, ou en interne par Ryxéo. On a ainsi pu identifier des briques de base. Il me semble alors utile, de "bétonner" ces classes pour en faire de petites librairies incorporables dans d'autres logiciels sans trop de peine.

Et hop, c'est parti ! C'est la valse des AbuleduEtiquetteV1, des AbuleduLabelV1, AbuleduTetesV1...
Les autres sont sur le wiki dans la section QT . J'en profite aussi pour tester la possibilité d'intégrer dans nos développements la correction orthographique et avec Éric le module de synthèse vocale basé sur Pico.

Suite à une discussion avec le graphiste, il apparaît nécessaire d'avoir une page d'accueil offrant des zones sensibles au clic, des bulles d'info graphiques. Il faut de plus que la fenêtre du logiciel soit redimensionnable tout en gardant les proportions du décor créé par le graphiste. Rien que ça! Et hop, voici un nouveau widget pour les logiciels du Terrier.

J'avais pourtant dit que je ne le ferais plus !

Si le widget est assez bien fait, quoique les discussions de la réunion d'automne ont fait apparaître le nécessité d'autres fonctionnalités ! Il m'apparut très vite qu'il fallait aussi développer un éditeur de pages d'accueil afin de faciliter la liaison entre le graphiste et les développeurs. Il est bien connu qu'un développeur n'hésitera pas à tailler dans l'image fournie si ses dimensions ne lui conviennent pas, au mépris du cadrage, des proportions et autres trucs d'artiste.

Donc, pour revenir à mon éditeur de page d'accueil, je me lance, la fleur au clavier pensant en avoir pour une paire d'heures. Je n'avais pas pensé que ce serait bien si on pouvait placer les zones sensibles au bon endroit à la souris : et hop quelques lignes de code, changer de police de caractères et hop une petite dizaine de plus. Et l'autre qui veut un aperçu, une autre trouve que serait bien de pouvoir imprimer (il y a trop de filles dans ce groupe, et elles ont des idées bizarres !)… Au final me voici avec un plat de nouilles indigestes, ce ne sont plus des nouilles, mais des spaghettis !!! J'avais pourtant dit que je le ferais plus : juré craché !!!

Je me suis consolé en me disant que ce serait un logiciel utilisé uniquement en interne et que donc on supporterait bien quelques défauts. Et puis non, pendant mon voyage aller en train, j'ai refait l'interface graphique, corrigé une paire de maladresses. C'est un peu mieux, surtout pour l'utilisateur ! Restons un peu pragmatique nom d'une pipe !

Des regrets

Ben oui, il y en a, surtout une frustration. Depuis six mois, j'ai développé un certain nombre de briques dont on me dit quelles seront utiles. Soit, mais pendant ce temps, je n'ai rien produit de visible, ni d'utilisable par mes collègues dans leur classe.

J'aimerais croire que ce travail de fond servira à développer plus vite et mieux les prochains logiciels. Mais le soir, le doute me prend et je me regonfle le moral en écoutant les tubes des années 80 : Desirless, Téléphone, ABBA, Beach Boys...

Redmine Appliance - Powered by TurnKey Linux