Projet

Général

Profil

Imagéo version 2.2 (migration sur la machine à état)

Le cadre général

La petite histoire de la naissance de la version 2.2 est assez simple, j'étais totalement opposé à l'idée de passer plus de 30 heures (estimation) pour intégrer la state machine dans imagéo.

Les noms des fichiers ...

Une des raisons technique était que je ne m'y retrouvais pas dans le code d'imagéo 2.0, en particulier le nom des fichiers ne me parlait pas:

abuleduaproposv0.cpp  ajouterimage.ui          exercice.h               main.cpp         mamanwindow.h                   selectiondifficulte.cpp  selectionexercice.ui
abuleduaproposv0.h    exerciceassociation.cpp  exercice.ui              mainwindow.cpp   reconnaitreplusieursimages.cpp  selectiondifficulte.h    switchfenetre.cpp
abuleduaproposv0.ui   exerciceassociation.h    formulaireconfimage.cpp  mainwindow.h     reconnaitreplusieursimages.h    selectiondifficulte.ui   switchfenetre.h
ajouterimage.cpp      exerciceassociation.ui   formulaireconfimage.h    mainwindow.ui    reconnaitreuneimage.cpp         selectionexercice.cpp
ajouterimage.h        exercice.cpp             formulaireconfimage.ui   mamanwindow.cpp  reconnaitreuneimage.h           selectionexercice.h

Voulant y voir plus clair, surtout depuis que je me suis mis dans l'éditeur, j'ai pris l'affaire en main et me suis lancé dans le changement des noms des fichiers (et donc des classes correspondantes) ... et au passage j'ai supprimé ce qu'il y avait en trop (cf passage entre la version 2.0 et la 2.0+ donc plus de choix de difficulté etc.)

abuleduaproposv0.cpp  editeur.ui               exercice.h      mainwindow.ui                   reconnaitreuneimage.cpp     widgetediteurconfimage.h
abuleduaproposv0.h    exerciceassociation.cpp  exercice.ui     mamanwindow.cpp                 reconnaitreuneimage.h       widgetediteurconfimage.ui
abuleduaproposv0.ui   exerciceassociation.h    main.cpp        mamanwindow.h                   switchfenetre.cpp
editeur.cpp           exerciceassociation.ui   mainwindow.cpp  reconnaitreplusieursimages.cpp  switchfenetre.h
editeur.h             exercice.cpp             mainwindow.h    reconnaitreplusieursimages.h    widgetediteurconfimage.cpp
Je ne sais pas pour vous si c'est plus clair mais pour moi oui :)
  • abuleduapropos: la boite à propos
  • editeur: l'éditeur
  • exerciceassociation: les deux exercices où il faut associer x images et y étiquettes
  • exercice: porterait mieux le nom de exerciceorthographe
  • main: le main (in-déboulonable)
  • mainwindow: la fenêtre principale
  • mamanwindow: la classe commune à tous les exercices, cf Organisation 2.0
  • reconnaitreplusieursimages: code spécifique à reconnaitre plusieurs images
  • reconnaitreuneimage: code spécifique à reconnaitre une image
  • switchfenetre: organisateur permettant de savoir dans quelle fenêtre on se trouve
  • widgetediteurconfimage: un widget qui est embarqué dans l'éditeur

Au passage j'ai donc supprimé selectionexercice et selectiondifficulte. Le 1er est remplacé par la page d'accueil et le second par ... rien du tout pour l'instant (/)

Le saut

Hum ... vous pouvez récupérer le code de la branche 2.0, je pense qu'on ne peut plus rien faire de plus, ça roule, oui mais c'est spécifique, la télécommande est spécifique, l'aire de travail est spécifique, les fenêtres s'enchaînent ... et par ailleurs ça fait 2 jours que je passe avec Jean-Louis pour avancer sur ALLER-5.0 et ça me pose un vrai problème d'organisation d'ensemble, stratégique même si je laisse partir imagéo "comme ça".

Pourquoi ? hé bien parce-qu'une fois publié je sais ce qui va se passer, des bugs vont être trouvés, des demandes d'améliorations vont arriver et inévitablement on va se frotter à l'absence de machine à état.

C'est inévitable.

J'ai sauté

Bon, ben voilà, dans les logs bzr vous avez

  • 80: Eric Seigne 2012-01-01 19:53:19 grosse migration vers la state machine
  • 79: Eric Seigne 2012-01-01 11:20:24 schema xmind

Ça veut dire quoi ? "Tout simplement" qu'après 7-8h de boulot j'avais ça:

C'est à prendre à deux niveaux:

  • c'est super "ça marche", c'est toujours la même sensation étrange, on est un peu incrédule
  • mais d'un autre côté, ça ne marche qu'à 10% de ce que la version 2.0 donne comme résultat visuel (cf Captures d'écran 2.0)

Alors parfois il faut savoir ce qu'on veut pour "perdre du temps comme ça" ... mais je reste persuadé que le temps perdu maintenant c'est autant de temps gagné demain et ma petite histoire de développeur me rappelle sans cesse cette règle.

Maintenant que c'est lancé il faut le terminer, vous trouverez ici les étapes importantes de cette "migration de code".

La mauvaise surprise

C'est que la machine à état fini ... hé bien elle n'est pas finie ! Il reste encore des choses à lui faire faire, alors je laisse de côté le dev d'Imagéo à proprement parler et je vais implémenter les deux boutons qui ne servent pas dans ALLER (et donc qui n'ont pas été implémentés):
  • "Corriger" pour voir la réponse
  • "Changer de niveau"

Implémentation de ce qui manque dans la machine à état ... et résultat :) au passage je suis tombé sur un bug drôle que j'ai corrigé aussitôt.

Vous pouvez maintenant voir dans la télécommande que les deux boutons manquants sont arrivés: Niveau et Corriger.

Ça avance ...

Petites avancées de fourmis, des choses invisibles mais pour vous faire une capture d'écran j'ai mis sur ma feuille de route de faire des "jolies touches" de clavier plutôt que les petits cadres flous autour des lettres.

Ça ne marche pas ? appuie plus fort !

Ça c'est une décision qui a de quoi étonner. Coincé pendant quelques heures sur le drag&drop des lettres du clavier virtuel vers l'image, au lieu de trouver une solution je décide de passer dans la "Machine infernale (à états)" les deux exercices restants ! Ça ne marche pas ? hé bien autant que plus rien ne marche tiens !

Et pour les exercices reconnaitre 1 et 2 je décide en plus de passer sur les étiquettes : AbulEduEtiquetteV1 je cherche donc le code qui parle des imageoLabel pour leur faire un sort et les remplacer par des Cellules et des Pieces, capitalisant ainsi les heures passées dans le code de ALLER pour le texte troué :)

Retour sur le module orthographe

Bon, suite à un mail sur la liste dev, jean-louis me donne la solution, finis les "bavouilles" lors du drag&drop:

Avancées sur Reconnaître 1

De retour dans le code de reconnaître 1, ça avance bien, en quelques heures je passe d'une image mal affichée et aucune étiquette à ... exactement ce qu'on cherche.

Passage sur Reconnaître 2

Tout le reste ne sera plus que "bricoles" et adaptations, la grande migration "Machine à état" qui est l'unique fondement au passage de imagéo version 2.0 -> version 2.2 sera terminée ...

Première victoire: en même pas plus d'une heure j'ai réussi à passer reconnaitre 2, rappel dans cet exercice ce sont 4 images qu'il faut reconnaître ... 1ère étape même si ça semble mauvais pour vous, pour moi c'est une victoire: j'ai les 4 vignettes qui s'entassent les unes sur les autres en haut à gauche, le reste n'est "plus que" du placement géographique, ça sent bon la fin de la migration !

Et hop, c'est fait :)

Migration terminée, bilan d'étape

Bon, 30 heures d'estimé, 42 heures en réel (en cours de route j'ai réévalué le temps à 60 heures), merci le suivi redmine, cf #1878 ... il reste encore beaucoup de choses à faire mais l'essentiel est là, maintenant direction la liste dev pour savoir si on garde ou si on jette :)

Par exemple je sais que le changement de niveau ne marche pas encore très bien mais ça permet déjà de se faire une idée plus précise de "avec" et "sans" la state machine: on récupère la branche 2.0 du projet c'est sans la machine à état, on se place sur la branche 2.2 et hop on a la machine à état. Il reste ensuite à comparer et décider.

Dernières modifications des classes

Je me suis permis de renommer exercice en exerciceOrthographe (/)

abuleduaproposv0.cpp  editeur.ui               exerciceorthographe.h  mainwindow.h                    reconnaitreplusieursimages.h  widgetediteurconfimage.h
abuleduaproposv0.h    exerciceassociation.cpp  imageolabel.cpp        mainwindow.ui                   reconnaitreuneimage.cpp       widgetediteurconfimage.ui
abuleduaproposv0.ui   exerciceassociation.h    imageolabel.h          mamanwindow.cpp                 reconnaitreuneimage.h
editeur.cpp           exerciceassociation.ui   main.cpp               mamanwindow.h                   version.h
editeur.h             exerciceorthographe.cpp  mainwindow.cpp         reconnaitreplusieursimages.cpp  widgetediteurconfimage.cpp

20120101-leterrier-imageo-01.png (39,8 ko) Eric Seigne, 02/01/2012 21:39

20120103-leterrier-imageo-01.jpg (70 ko) Eric Seigne, 03/01/2012 01:38

20120103-leterrier-imageo-02.png (46 ko) Eric Seigne, 03/01/2012 01:41

20120104-leterrier-imageo-01.png (48,3 ko) Eric Seigne, 04/01/2012 02:09

20120107-leterrier-imageo-01.png (6,95 ko) Eric Seigne, 08/01/2012 19:27

20120108-leterrier-imageo-01.png (49,8 ko) Eric Seigne, 08/01/2012 19:27

20120108-leterrier-imageo-02.png (45,5 ko) Eric Seigne, 08/01/2012 19:27

20120108-leterrier-imageo-03.png (36,4 ko) Eric Seigne, 08/01/2012 19:27

20120108-leterrier-imageo-04.png (27,1 ko) Eric Seigne, 08/01/2012 22:41

20120108-leterrier-imageo-05.png (37,2 ko) Eric Seigne, 08/01/2012 22:41

Redmine Appliance - Powered by TurnKey Linux