ntro.ca

        • Contrats de classe
        • Liens utiles
        • Calendrier
        • Calendrier groupe 3
        • Calendrier groupes 1, 2
        • Structure du cours
        • Évaluations
        • Matériel à se procurer
        • Les profs
          • Marc-Olivier Tremblay
          • Mathieu Bergeron
        • Module 1.1: installation + trier des cartes
        • Module 1.2: rappels POO
          • URL dépôt Git à remettre
        • Module 1.3: tableau d'objets
        • Examen 1
        • Validation des ateliers
        • Module 2.1: données JSON
        • Module 2.2: données en Java
        • Module 2.3: récursivité
        • Examen 2
        • Validation des ateliers
        • Module 3.1: structure générique
        • Module 3.2: efficacité (1)
        • Module 3.3: efficacité (2)
        • Examen 3
        • Validation des ateliers
        • Module 4.1: liste naïve
        • Module 4.2: liste par tableau
        • Module 4.3: liste chaînée
        • Examen 4
        • Validation des ateliers
        • Module 5.1: mappage naïf
        • Module 5.2: mappage par hachage
        • Module 5.3: mappage par arbre
        • Examen 5
        • Validation des ateliers
        • Travail de rattrapage
        • Projets vedettes
          • Contrat gr1
          • Contrat gr2
          • Contrat gr3
        • Survol
        • Structure
        • Calendrier semaines
          • Calendrier gr1
          • Calendrier gr2
          • Calendrier gr3
        • Utilisation IA
        • Évaluations
        • Exemples de pages
        • Exemples de jeu
        • Jeux choisis
        • Réponses à vos questions
        • Module 1: créer le projet
        • Module 2: concevoir l'application
        • Module 3: vues NtroFx
        • Module 4: modèle et navigation
        • Module 5: ajouter le dorsal, modifier le modèle
        • Guide de style 4F5
        • TP1
        • Examen 1
        • Examen 2
        • Calendrier
        • Évaluations
        • Structure du cours
        • Contrat de classe
        • Le prof
        • 01: Windows et Word
          • Astuces et raccourcis
        • 02: Word
          • Exercice Word: insertion d'éléments spéciaux
          • Exercice Word: tableaux
        • 03: Word
          • Exercice Word: références
          • TP01: Word (15%)
        • 04: Word
        • 05: PowerPoint
          • TP02: PowerPoint (10%)
        • 06: Examen Word (20%)
        • 07: Excel
        • 08: Excel
        • 09: Excel
          • TP03: Excel (15%)
        • 10: Excel
        • 11: Examen Excel (20%)
        • 12: Access
        • 13: Access
        • 14: Access
        • 15: Examen Access
      • Sondage H2023 (dept. info)
      • Vision H2023 (dept. info)
      • P1) exercices interactifs de lecture
      • P2) transition Excel vers Python
        • Atelier 2: un exemple
      • Index
      • Point de vue sur l'IA
    Extra: exemples d'erreurs
    • Extra: exemples d’erreurs
      • Contexte: projet awale
      • Erreur 1: Gradle bloque au début
        • Solution 1
      • Erreur 2: Gradle fait Task not found
        • Solution 2
      • Erreur 3: Gradle fait Class not found
        • Solution 3
      • Erreur 4: mauvais nom de paquet
      • Solution 4
      • Erreur 5: mauvais nom de classe
      • Solution 5
      • Erreur 6: fx:controller
        • Solution 6
      • Erreur 7: resource "%var" not found
        • Solution 7
      • Erreur 8: attribut erroné dans le .json du modèle
        • Solution 8
      • Erreur 9: classe manquante dans le .json du modèle
        • Solution 9
      • Erreur 10: mauvais nom AjouterPartieMsg
        • Solution 10
      • Erreur 11: mauvais nom FileAttente
        • Solution 11
      • Erreur 12: mauvais nom DorsalPong
        • Solution 12
      • Erreur 13: mauvais noms AfficherPartie et vueFileAttente
        • Solution 13
      • Erreur 14: mauvais nom et mauvais paquet pour FileAttenteVue
        • Solution 14
      • Erreur 15: mauvais nom pour le groupe de tâche "CreerVues"
        • Solution 15
      • Erreur 16: mauvais nom de tâche tacheA1
        • Solution 16
      • Erreur 17: mauvais nom de tâche "placerLaVueRacine"
        • Solution 17
      • Erreur 18: mauvais nom FrontalPong
        • Solution 18
      • Erreur 19: mauvais nom de fichier parametres.fxml
        • Solution 19
      • Comparaison avec IA
        • Résultats
          • Erreurs introduites par l’IA
          • Erreurs du tutoriel

    Extra: exemples d’erreurs #

    Contexte: projet awale #

    1. Télécharger exemples_erreurs.zip et extraire l’archive

    2. En VSCode, ouvrir le répertoire racine, c-à-d celui qui contient setttings.gradle

    Erreur 1: Gradle bloque au début #

    • Je veux lancer le projet

      $ sh gradlew awale
      
    • J’ai cette erreur:

      Configuring project ':pong' without an existing directory is not allowed.
      
    • Dans VSCode je n’ai pas de projets java:

      • Mais j’ai une Gradle: Build Error

      • en cliquant je vois que c’est la même erreur de répertoire non-existant

      • par contre, l’erreur VSCode ci-bas est un faux positif et peut être ignoré:

    Solution 1 #

    • Dans settings.gradle
      • retirer le include 'pong'
        • (qui fait référence à un répertoire qui n’existe pas)
    1. Vérifier que ça compile

      $ sh gradlew build
      
      [...]
      
      BUILD SUCCESSFUL in 662ms
      
    2. Relancer VSCode ou encore faire un Clean Workspace

    Erreur 2: Gradle fait Task not found #

    1. Je veux lancer le projet

      $ sh gradlew awale
      
    • J’ai cette erreur:

      Task 'awale' not found in root project 'racine4f5' and its subprojects
      
    • En VSCode, le projet awale n’apparaît pas

    Solution 2 #

    • Dans settings.gradle ajouter la ligne
      • include 'awale'
    1. Vérifier que awale est dans la liste des projets

      $ sh gradlew projects
      
      [...]
      
      project ':awale' - /awale
      
    2. Relancer VSCode ou encore faire un Clean Workspace

    Erreur 3: Gradle fait Class not found #

    • Je veux lancer le projet

      $ sh gradlew awale
      
    • J’ai cette erreur

      > Task :awale:awale FAILED
      Erreur : impossible de trouver ou de charger la classe principale depart.AppDepart
      Causé par : java.lang.ClassNotFoundException: depart.AppDepart
      

    Solution 3 #

    • Dans awale/build.gradle déclarer la classe principale telle qu’elle est dans le code

      ntroProject.appClass = "depart.AppPong"

    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      

    Erreur 4: mauvais nom de paquet #

    • Le nom du paquet principal devrait être comme le nom du projet

      • projet: awale
      • paquet: depart ❌

    Solution 4 #

    • En VSCode, renommer le paquet avec F2

    • S’assurer de mettre à jour le nom de la classe principale dans le build.gradle

      ntroProject.appClass = "awale.AppPong"

    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      

    Erreur 5: mauvais nom de classe #

    • Le nom de la classe principale devrait faire référence à Awalé

      • en ce moment: awale.AppPong ❌
      • devrait être: awale.AppAwale

    Solution 5 #

    • En VSCode, renommer la classe avec F2

    • S’assurer de mettre à jour le nom de la classe principale dans le build.gradle

      ntroProject.appClass = "awale.AppAwale"

    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      

    Erreur 6: fx:controller #

    • fx:controller class not found

      $ sh gradlew awale
      
      [...]
      
      [FATAL] (parametres.fxml:8)  class not found: depart.frontal.vues.VueParametres
      
              details: awale/_storage/tmp/exception_lh0R.log
      
      [...]
      
      [FATAL] (partie.fxml:26) fx:controller class not found: depart.frontal.vues.VuePartie
      
              details: awale/_storage/tmp/exception_lh0R.log
      
      [...]
      
      [FATAL] (racine.fxml:23)  class not found: depart.frontal.vues.VueRacine
      
              details: awale/_storage/tmp/exception_lh0R.log
      

    Solution 6 #

    • Dans le .fxml, s’assurer que fx:controller est le nom complet d’une Vue qui existe dans le projet

    • Modifier parametres.fxml:

      fx:controller="awale.frontal.evenements.FileAttenteVue"

    • Modifier partie.fxml:

      fx:controller="awale.frontal.vues.VuePartie"

    • Modifier racine.fxml:

      fx:controller="awale.frontal.vues.VueRacine"

    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      

    Erreur 7: resource "%var" not found #

    • Resource "%var" not found

      $ sh gradlew awale
      
      [...]
      
      [FATAL] (partie.fxml:39) Resource "quitter" not found.
      

    Solution 7 #

    • On utiliser %quitter dans le .fxml, s’assurer que quitter existe dans les .properties

      • resources/traductions/fr.properties

        retour=Exit Game      # retirer
        quitter=Exit Game     
        
      • resources/traductions/en.properties

        retour=Quitter       # retirer
        quitter=Quitter
        
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 8: attribut erroné dans le .json du modèle #

    • field not found

      $ sh gradlew restoreJson
      $ sh gradlew awale
      
      [...]
      
      [FATAL] (AppAwale.java:18)
      
      field not found: PartieEnFile.prenomJoueurA
      

    Solution 8 #

    • Vérifier awale/_storage/models/FileAttente.json et s’assurer que le .json correspond au modèle

      {
          "_C": "PartieEnFile",
          "idPartie": "1",
          "scoreJoueurB": 6,
          "scoreJoueurA": 2,
      
          "nomJoueurA": "Gregson", 
          "nomJoueurB": "Alice",
      
          "idJoueurA": "gregson",
          "idJoueurB": "alice"
      }
      

    Erreur 9: classe manquante dans le .json du modèle #

    • ClassCastException [...] HashMap ... PartieEnFile

      $ sh gradlew restoreJson
      $ sh gradlew awale
      
      [...]
      
      [FATAL] (FileAttente.java:34)
      
      ClassCastException
      
      class java.util.HashMap cannot be cast to class awale.commun.valeurs.PartieEnFile (java.util.HashMap is in module java.base of
      loader 'bootstrap'; awale.commun.valeurs.PartieEnFile is in unnamed module of loader 'app')
      

    Solution 9 #

    • Vérifier awale/_storage/models/FileAttente.json et s’assurer d’avoir le attributs spéciaux "_C"

      {
      
          "_C":"PartieEnFile",
      
          "idPartie": "0",
          "scoreJoueurB": 4,
          "nomJoueurA": "Ashwin",
          "scoreJoueurA": 2,
          "nomJoueurB": "Marcel",
          "idJoueurA": "ashwin",
          "idJoueurB": "marcel"
      }
      
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 10: mauvais nom AjouterPartieMsg #

    1. La classe AjouterPartieMsg devrait s’appeler MsgAjouterPartie

    Solution 10 #

    1. Avec F2, renommer

      • AjouterPartieMsg => MsgAjouterPartie
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 11: mauvais nom FileAttente #

    1. La classe FileAttente devrait s’appeler ModeleFileAttente

    Solution 11 #

    1. Avec F2, renommer

      • FileAttente => ModeleFileAttente
    2. Renommer le fichier awale/_storage/models/FileAttente.json

      • FileAttente.json => ModeleFileAttente.json
    3. Dans le fichier .json, ajuster la valeur l’attribut spécial "_C"

      {
        "_C": "ModeleFileAttente",
      
    4. Sauvegarder le json

      $ sh gradlew saveJson
      
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 12: mauvais nom DorsalPong #

    1. La classe DorsalPong devrait s’appeler DorsalAwale

    Solution 12 #

    1. Avec F2, renommer

      • DorsalPong => DorsalAwale
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 13: mauvais noms AfficherPartie et vueFileAttente #

    1. L’événement AfficherPartie devrait s’appeler EvtAfficherVuePartie

    2. La classe vueFileAttente est en fait un événement et devrait s’appeler EvtAfficherVueFileAttente

    Solution 13 #

    1. Avec F2, renommer

      • AfficherPartie => AfficherVuePartie
      • vueFileAttente => EvtAfficherVueFileAttente
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 14: mauvais nom et mauvais paquet pour FileAttenteVue #

    1. La classe FileAttenteVue devrait s’appeler VueFileAttente

    2. La classe est dans le paquet evenement mais devrait être dans le paquet vues

    Solution 14 #

    1. Avec F2, renommer

      • FileAttenteVue => VueFileAttente.java
    2. Pour déplacer:

      • ouvrir le fichier VueFileAttente.java
      • placer le curseur sur le nom de la classe
      • Maj+Ctrl+R (ou clique-droit => refactor)
        • déplacer (move)
        • sélectionner le paquet vues
    3. Comme on a modifié une Vue, il faut mettre à jour le fichier parametres.fxml

      • fx:controller="awale.frontal.vues.VueFileAttente"
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 15: mauvais nom pour le groupe de tâche "CreerVues" #

    1. Le nom est "creerLesVues" mais devrait être "CreerVues" comme la classe

    Solution 15 #

    1. Dans CreerVues.java, renommer

      • "creerLesVues" => "CreerVues"
    2. Dans PremierAffichage.java, renommer

      • waitsFor("creerLesVues") => waitsFor("CreerVues")
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 16: mauvais nom de tâche tacheA1 #

    1. Le nom devrait être creerVueFileAttente

    Solution 16 #

    1. Avec F2, renommer

      • tacheA1 => creerVueFileAttente
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 17: mauvais nom de tâche "placerLaVueRacine" #

    1. Dans PremierAffichage.java

      • la tâche devrait s’appeler comme la méthode "installerVueRacine"

    Solution 17 #

    1. Ouvrir PremierAffichage.java et renommer

      • "placerLaVueRacine" => "installerVueRacine"
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 18: mauvais nom FrontalPong #

    1. Le nom devrait être FrontalAwale

    Solution 18 #

    1. Avec F2, renommer

      • FrontalPong => FrontalAwale
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Erreur 19: mauvais nom de fichier parametres.fxml #

    1. Si c’est une VueFileAttente, le fichier devrait être file_attente.fxml

    Solution 19 #

    1. Avec F2, renommer

      • parametres.fxml => file_attente.fxml
    2. Il faut aussi changer la déclaration dans FrontalAwale

      registrar.registerView(VueFileAttente.class, "/vues/parametres.fxml"); // avant
      registrar.registerView(VueFileAttente.class, "/vues/file_attente.fxml"); // après
      
    • Vérifier

      $ sh gradlew awale
      
      [INFO] Ntro version 0.1
      [INFO] App running. Press Enter or Ctrl+D to close App
      [...]
      
      # la fenêtre s'affiche correctement
      

    Comparaison avec IA #

    1. Outil: le chat dans VSCode

    2. Modèle:

      • essai 1:
        • chat GPT-5-mini
        • 15 minutes
        • 5 interventions humaines
          • indiquer de continuer
          • choisir entre deux options
          • fermer la fenêtre après un sh gradlew awale réussi
        • interventions plus importante pour corriger le fichier .json (erreurs 8 et 9)
      • essai 2:
        • chat GPT-4o
        • 5 minutes de modifications aux fichier et coincé à 13 erreurs de compilation
      • essai 3:
        • chat GPT-4o
        • cette fois-ci quelques renommages avant de tester l’exécution
        • on est descendu à 1 erreur de compilation, avant de remonter à 5 erreurs
      • essai 4:
        • chat GPT-5-mini
        • 35 minutes
        • ~15 interventions humaines
          • indiquer de continuer (plusieurs fois)
          • insister qu’il faut “exécuter l’application et corriger les erreurs”
          • fermer la fenêtre après un sh gradlew awale réussi
        • après 20 minutes: l’application s’est exécuté une fois, mais il manquait les données
        • en continuant, l’IA a introduit ~10 erreurs de compilations (et on est resté bloqué là)
      • essai 5:
        • chat GPT-5-mini
        • 5 interventions humaines
          • indiquer de continuer
          • choisir entre deux options
          • fermer la fenêtre après un sh gradlew awale réussi
        • après 10 minutes, le projet exécutait mais avec une fenêtre vide
    3. Contexte

      • fichier regles.md pour les instructions
      • répertoire awale où se trouve le projet
      • fichiers settings.gradle et awale/build.gradle pour la configuration Gradle
    4. Énoncé

      En suivant les régles de regles.md, SVP trouver les erreurs dans le projet awale et suggérer des correctifs. En particulier, i) s’assurer que le projet s’exécute via la ligne de commande, ii) s’assuer que les noms (de classes, de tâches, etc.) respecte le style énoncé dans regles.md.

    Résultats #

    Erreurs introduites par l’IA #

    essai 1
    • le paquet depart existe encore mais il est vide

    • le paquet commun a été supprimé alors qu’il aurait dû être conservé

    • FrontalAwale a été placé dans le paquet maquettes

    • dans le ModeleFileAttente, la PartieEnFile a été remplacé par Object pour permettre de charger le .json

    essai 2
    • l’application affiche une fenêtre vide

      • l’IA a complétement effacé les tâches de navigation!:

        package awale.frontal.taches;
        
        import ca.ntro.app.tasks.frontend.FrontendTasks;
        
        public class Navigation {
        
            public static void creerTaches(FrontendTasks tasks) {
                // No navigation tasks implemented yet
            }
        
        }
        
    • le paquet depart existe encore mais il est vide

    • FrontalAwale a été placé dans le paquet maquettes

    Erreurs du tutoriel #

        Erreur trouvé par IA? Solution trouvée par IA?
    Erreur 1 essai 1 Oui Oui
    essai 5
    Erreur 2 essai 1 Oui Oui
    essai 5
    Erreur 3 essai 1 Oui Oui
    essai 5
    Erreur 4 essai 1 Oui Oui
    essai 5
    Erreur 5 essai 1 Oui Oui
    essai 5
    Erreur 6 essai 1 Oui Oui
    essai 5
    Erreur 7 essai 1 Oui Oui
    essai 5 Oui Oui
    Erreur 8 essai 1 Oui Non (mauvaise solution)
    essai 5 Oui Oui
    Erreur 9 essai 1 Oui Non (mauvaise solution)
    essai 5 Oui Noui (solution partielle)
    Erreur 10 essai 1 Oui Non
    essai 5 Non Non
    Erreur 11 essai 1 Oui Oui
    essai 5 Non Non
    Erreur 12 essai 1 Oui Oui
    essai 5 Oui Oui
    Erreur 13 essai 1 Oui Oui
    essai 5 Oui Non
    Erreur 14 essai 1 Oui Non
    essai 5 Oui Oui
    Erreur 15 essai 1 Non Non
    essai 5 Non Non
    Erreur 16 essai 1 Non Non
    essai 5 Non Non
    Erreur 17 essai 1 Non Non
    essai 5 Non Non
    Erreur 18 essai 1 Oui Non
    essai 5 Oui Non
    Erreur 19 essai 1 Non Non
    essai 5 Non Non
    Creative Commons License Creative Commons Attribution Creative Commons ShareAlike
    • Extra: exemples d’erreurs
      • Contexte: projet awale
      • Erreur 1: Gradle bloque au début
        • Solution 1
      • Erreur 2: Gradle fait Task not found
        • Solution 2
      • Erreur 3: Gradle fait Class not found
        • Solution 3
      • Erreur 4: mauvais nom de paquet
      • Solution 4
      • Erreur 5: mauvais nom de classe
      • Solution 5
      • Erreur 6: fx:controller
        • Solution 6
      • Erreur 7: resource "%var" not found
        • Solution 7
      • Erreur 8: attribut erroné dans le .json du modèle
        • Solution 8
      • Erreur 9: classe manquante dans le .json du modèle
        • Solution 9
      • Erreur 10: mauvais nom AjouterPartieMsg
        • Solution 10
      • Erreur 11: mauvais nom FileAttente
        • Solution 11
      • Erreur 12: mauvais nom DorsalPong
        • Solution 12
      • Erreur 13: mauvais noms AfficherPartie et vueFileAttente
        • Solution 13
      • Erreur 14: mauvais nom et mauvais paquet pour FileAttenteVue
        • Solution 14
      • Erreur 15: mauvais nom pour le groupe de tâche "CreerVues"
        • Solution 15
      • Erreur 16: mauvais nom de tâche tacheA1
        • Solution 16
      • Erreur 17: mauvais nom de tâche "placerLaVueRacine"
        • Solution 17
      • Erreur 18: mauvais nom FrontalPong
        • Solution 18
      • Erreur 19: mauvais nom de fichier parametres.fxml
        • Solution 19
      • Comparaison avec IA
        • Résultats
          • Erreurs introduites par l’IA
          • Erreurs du tutoriel