Session du 28 juin 2022 à 20h30
Pratique & Live Coding
Qualité & Architecture
Algorithmique & Performance
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Récursivité et tests unitaires en Python
Plongez dans une correction d’exercice en Python pour comprendre la récursivité, les tests unitaires et les bases de la qualité de code de façon accessible.
00:00:00 :Salut mon abonné!Ouais je sais pas, on t'entend pas Lionel?Ouais je sais pas, on t'entend pas Lionel?Ouais je sais pas, on t'entend pas Lionel?
00:01:55 :Ouais je sais pas, on t'entend pas Lionel?Ouais on t'entend.Ah bah merde, du coup il est parti.Donc ouais il y a deux Thibaut ce soir mais il y en a un, c'est Lionel, c'est juste quedu coup c'est lui qui va faire le mentorat de ce soir et du coup il utilise mon compte
00:02:45 :et moi je suis sous mon compte personnel du coup.Mais du coup il va revenir, un petit problème de son.Bonsoir tout le monde, salut David, salut Jonathan, Muriel, qui d'autre est ici? Muriel,
00:03:01 :Lionel, ouais Lionel du coup.Ah bah du coup l'autre Lionel j'imagine, enfin le vrai avec son compte perso.Donc ça va démarrer dans pas longtemps, le temps que Lionel revienne et donc ce soirça va être une session animée par Lionel qui va vous, qui va préparer en fait un live
00:03:28 :coding comme on dit en bon français, c'est à dire une genre de petite correction d'unexercice dans lequel il va pouvoir parler de récursivité, de test unitaire, de qualitéde code, donc il y a pas mal de sujets intéressants comme ça.
00:03:42 :Il m'a dit qu'il ferait ça assez accessible aux débutants, de toute façon même si effectivementquand on entend test unitaire, toutes ces choses là ça peut faire un petit peu peur,c'est toujours bien de se confronter à ça le plus tôt possible, donc voilà, faut pashésiter à venir à des sessions de mentorat comme ça même si c'est des trucs qui vous
00:04:03 :semblent un petit peu plus avancés, c'est bien même juste pour la théorie, pour voirà quoi ça peut servir etc.Et si vous voulez, si vous voulez participer, normalement vous devez avoir un bouton, uneoption pour participer si vous souhaitez interagir, ouais c'est ça, en live, donc c'esten bas normalement participer, vous devriez pouvoir rejoindre si vous avez envie de parler,
00:04:29 :d'interagir, c'est pas obligatoire.Ah, revoilà mon homonyme, mais juste avant que tu partes on t'entendait en fait, doncle problème il va être réglé je pense.
00:04:44 :Ouais mais c'est un mélange de problèmes OS et problèmes d'interface, des fois je suispas sûr qu'ils me reconnaissent, ils reconnaissent le périphérique.Tu étais sur Linux?
00:04:59 :Ouais ouais, mais normalement ça marche bien, enfin avec les autres, le site utilise, doncsi Steam c'est Discord, je suis pas tout sim, mais là c'est question d'habitude j'imagine.
00:05:09 :Des fois ouais, j'ai vu là c'était les permissions de Chrome aussi, des fois ils bloquent ta cametc.Du coup j'ai fait une petite intro, mais tu peux la refaire peut-être plus précise.
00:05:22 :Ah non non c'était bien, en fait j'entendais, c'est ça qui était bizarre, j'entendaispas bien, j'ai l'impression que j'arrivais pas à interagir avec le micro.
00:05:30 :Non non c'est une bonne présentation, du coup alors les participants, est-ce qu'il y a dumonde qui est à la porte? La dernière fois il y avait du monde qui toquait.
00:05:42 :Ouais mais là normalement ça devrait être bon, et d'ailleurs c'est ce que je disais,les gens qui veulent rejoindre, je sais pas pourquoi il y a des sessions où il faut qu'onaccepte, enfin qu'on autorise les gens à participer en vocal et en webcam, mais làça ne semble pas être le cas, si vous cliquez juste en bas sur participer vous devriez pouvoir
00:06:01 :participer si vous le souhaitez.Ah ouais, et n'hésitez pas en vocal.Et sinon il y a le chat aussi.Du coup voilà, voilà un petit peu pour ce soir.
00:06:12 :Et t'avais commencé en avance finalement, donc en fait il y a juste une minute.Ouais ouais, comme je suis un peu fébrile sur la techno, j'essaye de t'anticiper unpeu le truc.
00:06:22 :Pas de soucis.Ok, bon bah vas-y.C'est bon, je te laisse prendre la main, let's go.Bon on va peut-être démarrer, puisqu'a priori les gens ils ont eu le message.
00:06:34 :Donc bonjour tout le monde, je suis Lionel, on va faire une session de mentora dans lecadre de la formation Dockstring.Donc là l'idée ça va être d'essayer d'expérimenter avec vous un peu de sessions de code en live.
00:06:51 :Dans l'idéal moi j'aimerais bien que ça soit un peu interactif, qu'on essaye de fairedes choses ensemble ou même qu'il y ait au minimum une interaction.
00:06:59 :Donc je vais essayer de dépiler le truc assez progressivement et à vitesse raisonnable.Et dans l'idéal ce serait cool qu'il y ait une interaction avec vous.
00:07:10 :Après si vous ne le sentez pas, il n'y a pas d'obligation, c'est juste en faisant enfait d'un point de vue pédagogique, c'est vrai qu'on a un niveau d'apprentissage, vousdécouvrez un niveau d'apprentissage plus profond en fait sur la pratique et sur l'exerciceque sur juste une écoute passive.
00:07:25 :Donc voilà.C'est une forte incitation mais ce n'est pas une obligation.Du coup, je suis Lionel Hattie, aléas Lionel sur Dockstring, séniorité 15 ans ou plus,bon je ne compte pas vraiment.
00:07:40 :Actuellement je suis dev backend Python chez Yonowaï, depuis un an c'est assez récent.Je suis en full remote à Lyon, la boîte est à Paris.
00:07:47 :Donc ça se passe bien pour l'instant, donc c'est cool.En background, formation initiale c'est C++, donc plutôt langage lourd et client lourd.Qtel en C++, puis ça après PyQt en Python.
00:08:02 :Pareil en formation initiale c'est plutôt Computer Graphic, donc Aline Rillard, Institutde recherche et après en entreprise dans le cadre d'une thèse.Donc c'était une boîte de jeux vidéo Eden Games, la filiale d'Atari française à l'époque.
00:08:16 :Après j'ai pas mal travaillé dans le SIG, donc c'est le Système d'information géographique,donc AIGN, l'Institut de géographie nationale.Donc là pareil en R&D, des startups sur enrichir ou utiliser l'information géographique pourfaire des choses intéressantes comme les smart cities ou les décisions d'aménagement, etc.
00:08:34 :C'est super intéressant, c'est un domaine que j'aime bien, même que j'aime toujours.Et là actuellement je suis plus dans les domaines EdTech, donc Education Technology.
00:08:46 :Donc il y a des technologies pour l'éducation numérique, donc actuellement je suis en Environnement,donc c'est plus des outils pour faire des classes numériques ou pour faire du remote,enfin de l'apprentissage remote.
00:08:56 :Donc là la boîte elle est plutôt sur Paris-Île-de-France, donc il y a eu des déploiements dans les lycées,collèges de matériel, puis après d'une suite logicielle, et moi je suis plutôt sur la suite logicielle.
00:09:09 :Un petit poke, ah non c'est plus, where is the poke? Ah oui, en sorte de ne pas casser les nouvelles versions.Donc là on avait, je disais sur UNOWI, plus sur la solution logicielle, et là en l'occurrence je suis plus sur le côté back-end,donc faire tourner les services, l'infra, DevOps un peu, et de l'architecture logicielle sur la solution logicielle.
00:09:34 :Ce dont j'ai intérêt, donc moi j'aime beaucoup le Python depuis 5-6 ans disons.Là je m'intéresse aussi en ce moment ces derniers temps sur Rust, qui est un langage compilé super intéressant,et j'essaye de me remotiver régulièrement à refaire du C++, parce que c'est pas comme la bicyclette ou comme nager,
00:09:54 :quand on arrête d'en faire ça part très vite, donc j'essaye de réactiver le truc de temps en temps sur des projets.Beaucoup d'appétents sur tout ce qui est design pattern, coeur d'architecture, donc plus le côté structuration de code,et comment construire les services, comment faire des applications justement à grande échelle,
00:10:12 :et comment elles montent à l'échelle facilement, de manière intelligente.Microservices et RPC, bon ça c'est des trucs un peu techniques, je vais peut-être pas m'attarder dessus.
00:10:21 :Après je suis vachement intéressé sur les tests unitaires fonctionnels, CICD,donc c'est des sujets un peu avancés, mais par exemple les tests unitaires je pense que ça peut commencer à être intéressant pour vous,ce qui permet de tester du code au fur et à mesure, voire même en avance selon les méthodes de développement.
00:10:40 :Donc là moi principalement c'est PyTest, d'ailleurs on va utiliser PyTest pour la suite,et après les outils de versionning et de CICD, GitLab ou GitHub, et GitLab CI, ou GitHub Action,donc ce sont les deux que j'utilise principalement, et en ce moment pas mal aussi de DevOps Infra,avec Uncible Kubernetes, et le tout, l'environnement ou l'écosystème Docker,
00:11:05 :donc containerisation d'applications dans des images. Donc là aussi c'est des sujets un peu avancés,mais je verrai avec Thibault pour peut-être essayer de faire une entrée dans ces mondes, ça peut être vraiment intéressant.
00:11:18 :Donc même ne serait-ce que d'avoir une idée de à quoi ça sert, et même dans le monde pro,il y a de fortes chances que vous tombiez dessus, très rapidement.
00:11:27 :En ce moment donc au travail c'est sur le vaste sujet de l'authentification, donc SSO, Key Cloak,donc c'est comment connecter ou sécuriser une connexion à travers différents services, et les normaliser, les unifier.
00:11:39 :Donc c'est des stratégies d'authentification globale, single access ou multi-access, ça dépend comment on voit le truc.Et en perso en ce moment je suis sur du sous-ditrage automagique de vidéos,donc des sujets autour de bases de données, fingerprinting, indexage intelligent,et sur une extension de speedtest pour YouTube, donc là c'est un projet un peu perso sur côté DevOps,
00:12:02 :infra monitoring et du réseau forcément, puisque l'idée c'est de faire un speedtest,donc de tester sa connexion internet sur un service.Donc là en ce moment je m'intéresse à comment tester sur YouTube, ce qui n'est pas une mince affaire.
00:12:23 :Donc voilà, c'est Bibi, donc plutôt orienté back-end Python et d'autres langages,mais plutôt back-end qualité logicielle et architecture.Je fais assez peu ou pas de front, ça m'intéresse modérément.
00:12:40 :Après j'ai fait un peu d'interface il y a plus longtemps, donc ça c'est tout qui peut m'intéresser.Et après il y a divers sujets, enfin le back-end c'est très large comme sujet, comme le front d'ailleurs.
00:12:52 :Il y a plein d'aspects, plein de facettes.Ok, vous avez des questions?Des interrogations?Non. Ah ok, cool.Peut-être si ça ne vous dérange pas, moi je serais intéressé de faire un petit tour,comme on n'est pas beaucoup, on va faire un petit tour assez rapidement pour vous présenter, me dire où vous en êtes sur votre formation,
00:13:25 :sur votre apprentissage, et dans quel but vous le faites en fait.Juste pour avoir une idée de mon audience.Je veux bien commencer du coup.
00:13:39 :Salut, moi c'est David. Alors pour le coup je travaille actuellement dans l'informatique,ça fait environ 7-8 ans que je suis technicien informatique.Donc là ça fait 6 ans que je suis dans la même boîte, qui est à la base d'éditeur logiciel.
00:14:00 :Donc moi je suis sur une partie qui gère plus la partie préparation réseau et poste.Donc ça va être les images des postes, ça va être la partie maintenance etc.
00:14:16 :Donc je me suis intéressé à Python il y a quelques années, j'avais commencé à regarder mais je ne me suis jamais vraiment lancé.Après je suis tombé sur la formation de Thibaut via Udemy,donc j'ai beaucoup accroché parce que c'était par rapport à la qualité de la formation et des explications,
00:14:35 :où ça part vraiment de zéro.Donc niveau progression actuellement je suis à la partie des classes où j'ai beaucoup de mal,j'ai un peu de mal avec le concept de la programmation orientée objet.
00:14:51 :Après là je pense que ça va demander surtout beaucoup d'exercice et d'applications pratiques.Mais voilà, et le but de la formation pour moi c'est à minima de pouvoir faire des projets personnelset pouvoir faire des choses via Python.
00:15:12 :Là actuellement par exemple on a certains outils qu'on utilise au boulotet sur lesquels j'utilise l'API de certains outils en faisant des petits scripts en Python.
00:15:24 :Donc ça va pas chercher très très loin.Mais voilà, donc à minima c'est pour être à l'aise et pouvoir concevoir certaines choseset idéalement ça serait pour peut-être me reconvertir en tant que dev back-end Python.
00:15:38 :Ok, nickel, merci. Merci pour le partage.Quelqu'un d'autre, motivé?Ça peut être rapide, combien de temps vous avez commencé, qu'est-ce que vous voulez faire,quelques phrases ça peut se faire si vous voulez pas parler longtemps.
00:16:08 :Pas de succès ce soir.Ok, donc Jonathan est plus motivé pour le faire en chat.Normalement t'as un bouton pour participer, t'as un bouton, je le vois plus ou moins par contre,mais normalement t'as un bouton en bas, participer, dans la barre centrale de Livestorm.
00:16:43 :Je suis même pas obligé de te donner l'autorisation, tu peux venir.Ça marche là?Ouais ouais, j'entends quelqu'un.Oui, Daniel, bonjour. J'ai commencé par du développement Django,
00:17:08 :sans formation, dans un laboratoire du CNRS, j'en ai fait pendant 6 mois, 9 mois,et ensuite j'ai fait du pure Python, toujours dans le même laboratoire,sur des problématiques d'astrophysique, c'est très intéressant, mais c'est fini.
00:17:31 :J'ai pris un contrat, je cherche un nouveau contrat,et comme j'ai appris sur le tas, je voudrais bien élargir mes compétences,j'ai commencé il n'y a pas très longtemps sur Dockstream.
00:17:47 :Ok, dans une visée professionnelle après, pour travailler avec?Oui oui, tout à fait.D'accord, cool. Merci.C'est juste ton background avant le CNRS, 6-9 mois, Django?
00:18:10 :J'ai travaillé beaucoup dans l'industrie, j'étais responsable informatique,pendant de nombreuses années, j'ai fait une formation en 2016, 2017, sur Java,et j'ai fait un stage en Python, que je ne considère du tout.
00:18:34 :Au CNRS il y a régulièrement des offres, en général c'est assez intéressant comme projet,on rencontre des gens d'un certain niveau.L'astrophysique je ne connaissais pas du tout, mais j'en ai appris un tout petit peu.
00:18:56 :Vaste sujet.Ok, cool, merci.Je prends le micro.Muriel peut-être?Salut. Bonjour.C'est Romain.Romain, ok.Moi je travaille dans le milieu du nucléaire, et je me suis intéressé à VBA,où j'ai commencé à faire de plus en plus de choses, de plus en plus complexes,et puis après est arrivé le confinement, où je suis tombé sur les formations de Thibault sur Udemy.
00:19:37 :Et du coup, petit à petit, je passe sur du Python,j'essaye de faire des programmes pour les collègues, pour automatiser le maximum de choses,et puis après j'ai quelques projets perso aussi, notamment avec PySide.
00:19:58 :Cool. Ok, merci.Allo. Bonjour, bonsoir.Oui, bonsoir. Donc moi c'est Muriel.Ça fait quelques temps que j'ai commencé la formation en Python,parce qu'avant j'étais responsable de mon centre de formation,donc plutôt un parcours en commerce et marketing.
00:20:29 :Par la suite, j'ai décidé de me reconvertir en analyse de données.Donc parallèlement à celle-ci de formation, je suis une formation sur Open Classroom de data analyst.
00:20:41 :La formation sur Open Classroom vient à peine de commencer,mais j'ai essayé de prendre l'avance en me formant déjà sur certaines bases comme Python.Et aujourd'hui je suis encore à la fin de ma première partie de Python.
00:20:57 :Je suis encore tout au début.C'est parce qu'avant j'ai commencé à me former en SQL sur Udemy.C'est à l'heure là où j'ai fait SQL avant et ensuite maintenant Python.
00:21:14 :Ok, pourquoi pas. Il n'y a pas de règle dans les parcours. Chaque personne a son backgroundet sa voie en fait vers le développement ou vers d'autres choses.
00:21:27 :De toute façon, il n'y a pas que le dev dans la vie.Mais ça a l'air intéressant comme chemin.Voilà.Merci.De rien.On doit être à peu près bon, sinon les autres seraient intervenus peut-être.
00:21:46 :Ok.Ascol, quelqu'un qui voudrait présenter par rapport à ses motivations, ses envies,par rapport au dev Python, etc.Jonathan, ok. Donc on va faire anti-attaque.
00:22:13 :Non, on ne t'entend pas Lionel.Enfin, sauf si c'est moi, parce qu'il m'appelle Lionel aussi.Tu dois avoir un problème de micro aussi.Sinon, écris dans le chat si tu veux.
00:22:53 :Ok. C'est cool, il y a plein de types de profils et d'expériences.Bon, on va démarrer. Il est quelle heure? 48.Donc, l'idée. C'est quelqu'un qui m'a contacté sur Docstring,
00:23:12 :qui avait un exo à faire Open Classroom dans une formation ou un projet.Si je n'ai pas eu accès à la page ou au projet, j'ai mis une faute inscrite ou payé, je ne sais rien.
00:23:24 :Bref, mais du coup, il avait un sujet à faire assez simple, assez court,et qui mettait en avant les principes de récurrence.Du coup, je me suis dit que ça pouvait être une bonne idée d'essayer de faire ce problèmeet d'essayer de réaliser cette tâche en live coding et en forme si possible,
00:23:48 :et vous montrer un peu comment on pourrait faire ou comment j'ai fait pour résoudre ce problème,et essayer de comprendre un peu les mécanismes un peu plus de la récurrence ou récursivité.
00:24:01 :C'est l'occasion aussi, dans le projet Open Classroom, il y avait une suite de tests aussiqui étaient proposés pour justement tester le code et pour aiguiller l'étudiant ou l'élève dans son cheminement de développement.
00:24:13 :Donc on va examiner un peu les tests qu'ils ont écrits, comprendre comment c'est fait, à quoi ça sert,et comment c'est structuré, et après essayer d'avancer sur le projet.
00:24:25 :Donc comme je disais, normalement c'est assez court, le code n'est pas très très compliqué,mais l'idée c'est de prendre notre temps et de voir comment faire, pourquoi on le fait, etc.
00:24:37 :Est-ce que ça sonne bien pour vous? Est-ce que ça vous motive?J'ai hâte de voir les tests unitaires surtout.Du coup je ne les ai pas réécrits, c'était une ressource que donnait Open Classroom, mais on va aller regarder.
00:25:01 :Donc du coup, le projet. Comment lancer le projet?Donc ça c'est la notice qui était donnée. Pour commencer, lancer les tests.Donc c'est bien, ils commencent directement pour qu'ils disent lancer les tests.
00:25:11 :Donc en gros, il y a une structure de projet. Au départ il n'y avait pas tout ça, il y avait juste,de mémoire il y avait juste goban.py, le readme, requirement.txt, donc ça c'est pour définir les dépendances des paquets du projet.
00:25:39 :Ah non, on va y aller tranquille, Muriel, t'inquiète.Ouais ouais, mais ne vous inquiétez pas, justement si vraiment vous décrochez, n'hésitez pas à me dire et on va ralentir le rythme et la vitesse.
00:25:54 :Donc en gros, il y a le projet. Donc avec ce script goban.py, c'est ce qui est donné par Open Classroom.Donc là je n'ai pas touché à ce fichier, c'est vraiment la source d'entrée. Donc on va commencer à la regarder, qu'est-ce qu'il nous donne.
00:26:13 :On va peut-être y aller danser avant de regarder les codes source. Donc cette ligne là, c'est pour créer un virtuel environnement.Je ne sais pas si vous avez commencé ou regardé ces notions. En fait le but ou l'utilité d'un virtuel environnement, c'est de ne pas polluer votre système global.
00:26:29 :Par exemple, moi je suis sous Linux, Python c'est un utilitaire qui est utilisé par le système, donc c'est un utilitaire système.Et il y a un environnement Python pour mon système qui est utilisé par mon OS, mon operating system ou mon système.
00:27:12 :Et quand on revient sur le projet, on réactive le bac à sable, on réutilise les librairies et on peut lancer notre projet.Et dès qu'on sort, on peut désactiver cette zone. On revient dans le jardin ou dans le salon par rapport à cette métaphore.
00:27:32 :Et quand on rentre chez nous, il n'y a pas de sable pour aller jusqu'au bout de la métaphore.Et donc là, l'idée c'est de créer le bac à sable virtuel. Là, le source c'est pour activer l'environnement.
00:27:45 :Donc on rentre dans le bac à sable et là on installe nos petits râteaux, nos petits seaux, les packages.On peut regarder le requirement.txt puisque c'est aussi une ressource. Donc là, le requirement.txt, c'est juste une ressource qui est pas éteste.
00:28:05 :c'est juste une dépendance pour faire les tests. Donc là, limite même, dans certains projets, certains renomment requirement.txtpar test-6 requirement.txt pour préciser que c'est vraiment des requis pour faire les tests et pas pour lancer le projet.
00:28:31 :qui représente une ligne dans requirement.txt. Donc je peux vous montrer ce que ça fait. Donc là, on sort du bac à sable.Normalement, si je fais, genre, calcule mon Python, il va me dire que c'est quelque part ailleurs. Là, mon chemin, c'est ça actuellement.
00:28:45 :Et là, en fait, on fait le Python moins... comment il faisait déjà? Ça, je le fais rarement à la main, ces types de lignes.Et du coup, moi, je l'ai appelé anv. Mais bon, bref, pareil, c'est vrai. Par contre, c'est le module v-anv et on fait le répertoire anv.
00:29:23 :je suis en fibre, plutôt énervé. Ah, c'est bizarre, ça. Pourquoi c'est flou? Ah, du coup, ça va être moins sympa.Je vais regrossir un peu le texte de son terminal. Je suis déjà très gros, mais c'est bizarre, pourquoi il est en flou? Bizarre. Donc, ok, bon, on va continuer.
00:29:53 :Vous me dites, là, ça va un peu mieux, le texte terminal? Ah, oui, c'est parce qu'il fait... ah, ok, c'est le système de compression.En gros, il croit que c'est une image statique et il la remet à jour quand je tape. Logique. Sur les textes, les vidéos, c'est assez dur à compresser.
00:30:15 :Surtout en stream, en stream temps réel. Je pense aussi que c'est la compression LiveStorm. Ok, bon, il faut que je ralentisse.Donc là, en gros, ça crée le répertoire Anv. Et à l'intérieur du répertoire Anv, il y a pas mal de choses. La structuration de projet Python, c'est pas super intéressant.
00:30:59 :Et après, l'autre commande qu'il fait, c'est le install-requirement. Donc en gros, là, c'est pip install. Donc pip, c'est l'utilisateur pour installer des packages.On lui dit d'installer. Et "-r", c'est l'option qui dit qu'on va spécifier un fichier de requirement. Donc en l'occurrence, c'est requirement.txt.
00:31:25 :il devrait me dire que j'ai au moins PyTest que j'ai installé. Et après, tout le reste, c'est des dépendances qui vont avec PyTest.Donc là, en gros, avec ces trois commandes, on a un environnement virtuel pour notre projet et on a installé les dépendances du projet.
00:32:35 :Donc la question, c'était est-ce que normalement dans le requirement de pointe exté, il ne faut-il pas préciser les numéros de version des packages?Donc là, en l'occurrence, dans le requirement, il n'y a pas PyTest, mais il n'y a pas un numéro de version ici.
00:32:46 :C'est une bonne pratique de préciser le numéro de version parce que les versions des packages peuvent évoluer au cours du temps.Donc en gros, c'est ce qu'on appelle en anglais, c'est les pined versions, où on pinde la version, donc on dit ce package, ça marche avec cette version.
00:33:03 :Enfin, mon programme marche avec cette version de package. Après, il y a plusieurs façons de formuler ces contraintes.On peut dire, on peut utiliser les opérateurs, en fait, supérieur égal, égal égal ou inférieur égal ou d'autres opérateurs un peu plus fancy.
00:33:17 :Après, la bonne recommandation pour faire quelque chose de propre, c'est de définir au moins la version minimale pour laquelle notre projet fonctionne.Donc là, en l'occurrence, si je faisais un pip show PyTest, ça me donne les informations qu'il y a sur le package que j'ai installé.
00:33:33 :Et là, le PyTest que j'utilise, c'est le 7.1.2. Et là, un truc qui pourrait être bien ou une bonne recommandation, c'est de dire,« Bon, mon programme, je l'ai testé au moins sur le 7.1.2 et j'assure n'importe quelle personne qui viendra après que normalement ça devrait tourner si au moins il y a la 7.1.2.
00:34:00 :Normalement, les packages ou les librairies qui sont bien faites, quand elles évoluent en version, donc elles montent de plus en plus,elles ont ce qu'on appelle de la rétrocompatibilité, c'est-à-dire que les versions d'avant sont supportées par la nouvelle version,sauf si grand changement, un changement majeur dans la libre. Mais en général, de dire que la version 7, par exemple,
00:34:29 :ça devrait fonctionner. Donc si par exemple, quelqu'un reprend mon projet un an après et qu'il fait un pip install du package,l'installateur pip aura la contrainte de, au moins la 7.1.2, donc il regardera quelle est la version la plus récente qu'il a
00:34:49 :et est-ce qu'elle respecte cette contrainte spécifiée par le développeur. Donc du coup, par rapport à la remarque de Lionel,oui c'est bien de spécifier la version. En général, d'ailleurs, on fait souvent l'installation de ses dépendances et après on fait un pip freeze,
00:35:07 :donc c'est une commande qui permet de voir l'état des dates de ses dépendances, on fait un pip freeze et on redirige dans requirementet on écrit en fait, au moment où on a son développement et qu'il est stable, on écrit ses dépendances de manière statique dans le fichieret évidemment ça réinscrit ici toutes les dépendances. Donc c'est une technique aussi, donc là il ne met que des égal-égal,
00:35:30 :après à nous de voir si on veut faire évoluer souvent les dépendances en mettant par exemple des super-égal, donc ça c'est après,c'est comme on le sent. Donc là, ici on a installé les dépendances et après la troisième commande qui nous dit c'est pytest.
00:35:45 :Donc invoquer le moteur pytest, par répertoire courant, et là il n'est pas content, ah oui parce que, ah tiens ouais c'est marrant ça,ok, parce que j'ai modifié les tests, mais c'est bizarre qu'il ne le trouve pas. Je me demande si ça va marcher, ah ouais d'ailleurs,
00:36:03 :ok, donc en gros leur pytest normalement ne fonctionne pas, parce qu'il ne trouve pas goban, mais après c'est peut-être lié à refactoque j'ai fait du code. Parce qu'en gros dans le, attend, est-ce qu'il devrait importer, ouais, dans test goban il fait un import goban,
00:36:22 :ok, ou sinon, ouais, import goban. Donc là en gros, ce que dit pytest c'est qu'il n'arrive pas à trouver le module goban,et goban en fait c'est juste le, goban.py, donc en gros il dit qu'il n'arrive pas à trouver le contexte courant.
00:36:38 :Donc le truc normalement c'est de faire un python pass pour lui dire en fait le contexte courant c'est là, et normalement ça passe,ouais bon, en l'occurrence le test ne passe pas, mais ça c'est normal, parce qu'on n'a pas encore écrit le code,enfin cette version là n'est pas écrite, donc tous les tests ne marchent pas. Donc là le python pass en fait c'est un trick,
00:36:59 :mais voilà, il ne faudrait pas l'utiliser vraiment, mais en gros on dit en contexte que l'environnement ou le répertoire où on va travaillerc'est le répertoire qui est là présent, et que s'il doit faire des imports il doit partir de ce répertoire.
00:37:23 :ça ne permet pas à pytest de retrouver ces petits, en fait quand il est à l'intérieur du répertoire test, il n'arrive pas à revenir en arrièrepour dire que je vais prendre goban.py qui a un cran avant. Donc normalement après l'autre façon de faire c'est de spécifier,
00:37:40 :bon après c'est un peu compliqué mais il faut spécifier avec pytest, lui dire explicitement c'est ce répertoire où il y a les sources,et il va chercher tous les imports là-dedans. Donc là, la commande proposée par Open Classroom c'est le pytest.
00:37:58 :Donc il lance les tests, donc là il lance tous les tests test goban, et là le f ça veut dire que ça a échoué, que ça n'a pas fonctionné,et après on a une liste en fait des tests qui ont échoué, et il donne des indications sur pourquoi ça a échoué.
00:38:12 :Et sur tous les tests ça a échoué, mais c'est normal parce que goban.py au départ n'implémente pas la méthode qu'on doit, enfin l'exercice.Donc l'exercice en fait, le thème de l'exercice c'est le jeu de go, donc goban, et goban c'est le plateau sur lequel on place les pierres.
00:38:59 :Des pierres adjacentes, des pierres qui sont à gauche, à droite, au dessus, en dessous, donc c'est la croix cartésienne, l'une de l'autre.Les diagonales ne comptent pas, donc là ils précisent encore plus que, ouais c'est vraiment la croix cartésienne.
00:39:12 :Liberté c'est un espace vide adjacent à une forme, donc par rapport à la définition de adjacent.Donc en gros s'il y a une pierre, si en haut, en bas, à gauche, à droite, il y a un espace, donc un espace sur le goban, alors la pierre elle est libre, ou elle a au moins une liberté.
00:39:46 :Lorsqu'une forme n'a plus de liberté, on dit qu'elle est prise. Donc là il va définir c'est quoi une forme.En fait il a déjà défini une forme, c'est un re-mouvement de plusieurs pierres et plus de liberté, c'est à dire que chacune des pierres qui composent la forme n'a pas d'espace ou de mouvement de liberté autour d'elle.
00:40:03 :Donc dans le sens d'une position adjacente, donc haut, bas, gauche, droite.L'objectif de l'exercice est d'écrire une fonction isTaken qui prend l'argument x, y, donc une position sur le goban, et qui retourne vrai si la pierre à la position x, y est prise et faux sinon.
00:40:31 :Pour faire cette fonction, on se base sur une fonction getStatue, donc ça c'est ce qu'il nous donne, x, y qui retourne.StatueBlack si c'est la position x, y, il y a une pierre noire. StatueWhite si c'est en position x, y, il y a une pierre blanche.
00:41:10 :Pour compléter la méthode gobanIsTaken, donc c'est la méthode qu'on doit implémenter avec votre solution, vous pouvez ajouter des paramètres si besoin.Celle-ci doit respecter les bonnes pratiques de Python, vous devez tester, vous pouvez, pardon, tester, mais moi je dirais vous devez, un petit lapsus, tester votre solution à tout moment avec PyTest,
00:41:48 :Et là ils disent la pierre blanche est prise parce qu'elle n'a pas de liberté, parce que haut, bas, gauche, droite, il y a des pierres noires qui l'empêchent de se déplacer,donc elle n'a aucun espace adjacent vide, donc elle est prise. Donc là si on fait is taken en 1,1, donc sur cette position, normalement ça devrait nous renvoyer à vrai,
00:43:05 :et il pose la question est-ce que la forme ou une des pièces de la forme est libre, et là il y a des pièces blanches qui bloquent tous les dégâts de liberté de chacune des pièces noires,donc la forme est prise parce qu'elle n'a aucun moment, aucune pièce qui a un mouvement de liberté. Donc là c'est la définition de est-ce qu'une forme est prise, c'est chacune des pierres qui la composent
00:44:57 :et après ils invoquent la méthode qu'on doit implémenter et qu'ils veulent tester, donc isTaken en position 1,1, donc 1,1, pierre blanche, est-ce qu'elle est prise ou pas,et le test s'attend à que la réponse soit vraie. Donc en pytest, et même en code on peut l'écrire, et en test unitaire on fait un assert, donc en gros ça dit assert,
00:45:33 :Donc là en gros ça, ça doit être vrai, donc ça c'est notre vérité pour que le test passe, parce qu'on a calculé à la main quel résultat ça doit être,et du coup on invoque notre programme goban pour qu'il le calcule, et qu'il se confronte à la vérité ou le résultat qu'on s'attend.
00:45:49 :Donc là il y a l'annotation que je vous disais de test underscore, donc là après en général on donne une indication, on donne une sorte de documentation avec le nomsur ce qu'on est en train de tester, donc là il dit que la pierre blanche elle est prise car elle est entourée de pierre noire.
00:46:05 :Là le test c'est la pierre n'est pas prise parce qu'il y a encore un degré de liberté, donc là c'est l'exemple où on enlève une pierre noire,donc là ici ça doit avoir 1 1, la même pierre ça doit renvoyer faux, elle n'est pas prise. Là c'est la forme noire est prise parce qu'elle est toute entourée,
00:46:32 :et chacune de ces invocations à Isteken doit renvoyer que c'est pris, c'est pris, c'est pris. Donc là en gros il teste toute la forme.Pareil là il fait la forme noire mais elle n'est pas prise parce qu'elle a un degré de liberté, donc là pareil il refait le test avec toute la forme noire,
00:47:18 :Donc après l'idée à partir de là c'est qu'on a une série de tests qui sont une assez bonne couverture sur la fonctionnalité qu'on veut implémenter,donc définir le plateau avec où sont les pierres et faire une requête sur le plateau de est-ce que cette pierre ou cette forme liée à cette pierre est prise.
00:47:52 :Du coup avec ça en fait on peut avancer dans le développement du projet et à chaque itération on peut voir si on passe les tests, les 4 tests,et du coup ça nous permet d'avancer, de vérifier qu'on progresse vers la fonctionnalité, donc on passe chacun des tests,et ça nous donne une forme de sécurité comme un filet de sécurité, on sait qu'on va itérer vers ce qu'on veut,
00:48:17 :c'est-à-dire la fonctionnalité, qu'elle soit fonctionnelle sur tous les cas qu'on a défini.Donc là en plus dans l'énoncé ils donnent des exemples, souvent les exemples peuvent se traduire dans un exercice et réaliser un projet.
00:48:32 :Si on vous donne des exemples ou des données d'exemples, c'est souvent une très bonne base pour écrire ces tests et construire ces premiers tests,parce que c'est souvent des exemples simples et assez facilement maîtrisables, et on peut calculer à la main le résultat,donc on a une vérité en fait de résultat. C'est une des pierres de démarrage, ou d'étape de démarrage, pour écrire les tests,
00:48:58 :c'est avoir une vérité qu'on peut calculer manuellement, et on essaye de l'automatiser et de faire tous les cas possibles qui peuvent mal se passer.Ok, du coup, Goban, on va regarder son implémentation, donc en gros il définit une classe statut, qui est dérivée de Enum,Enum c'est un type Python qui permet de faire une énumération, c'est pour ça qu'il s'appelle Enum, énumération d'états.
00:49:25 :Donc là en l'occurrence il utilise la classe Enum pour énumérer des statuts, donc c'est comme dans la définition qu'il a donnée,la pièce blanche, la pièce noire, une position vide et une position en dehors du plateau.
00:49:40 :Donc il associe à chacune de ces statuts, il associe un integer, donc un entier, c'est une façon de faire.Je ne sais pas si c'est obligatoire de numéroter, je ne crois même pas que ce soit obligatoire, je crois qu'il le fait automatiquement,mais là bon il l'a fait explicitement. Après il définit son plateau, le Goban, et c'est là dessus qu'on va jouer.
00:50:29 :c'est juste une liste de strings.Ouais avec auto, bien vu, en effet. Thibault dit que pour les classes renoumes on peut utiliser auto qui donne des valeurs de manière automatique
00:50:53 :être explicite c'est toujours mieux que d'être implicite. Donc là on a le Goban, le Goban c'est ce qu'on va envoyer ici, c'est cette valeur.On va la stocker comme attribute class parce qu'on va l'utiliser après, on va l'utiliser dans GetStatue et dans IsTaken. Donc GetStatue ça donne le statut
00:52:15 :On peut remarquer qu'il n'y a pas de vérification, on met n'importe quoi dans la chaîne.S'il y a une valeur random, du coup je ne sais pas, ça te renvoie non, puisque ça ne renvoie aucun des returns.
00:52:29 :Et par défaut toute fonction Python renvoie au moins non si tu ne renvoies rien.Donc là potentiellement il y a un bug dans le code, mais bon. Il suppose en fait que Goban ici là est bien formaté par rapport à l'exercice, mais c'est pas vérifié en tout cas.
00:52:51 :Et du coup il y a la méthode isTaken qu'on a implémentée, qui prend une position XY et d'après la définition ici,isTaken, le but est de créer une solution si la pierre à position XY est prise ou pas, donc on pourrait mettre ça.
00:53:11 :Donc si la pierre renvoie vrai, en gros ça renvoie, d'ailleurs ici on pourrait dire que ça renvoie un boulet.Et là ici c'est des positions int. Donc en gros on a un Goban qui est passé avec le init ici, et on a une méthode qui permet de dire
00:53:56 :Par rapport au test qu'on a écrit, c'est ce que ça fait.Du coup là je regarde l'heure, c'est vrai que j'ai été un peu lent avec la présentation au début, c'était peut-être pas une bonne idée.
00:54:32 :Donc là sous PyCharm on peut créer des configurations, j'ai créé une configuration sur les tests.py.Donc en gros c'est assez simple, on fait juste un clic droit sur ça, et on a un run PyTest int test, et là ça donne un affichage directement dans l'éditeur sur l'état des tests.
00:54:51 :Donc là forcément on n'a rien implémenté donc ça ne marche pas, donc tous les tests échouent.Donc là l'idée c'est qu'on peut avancer dans la fonctionnalité.
00:54:59 :Donc en gros, isTaken, par contre je vais désactiver,donc on a en XY, ce qu'on peut voir déjà, la première étape par exemple, c'est est-ce qu'on vise une pierre en XY?
00:55:25 :Est-ce que la position XY est sur une pierre ou pas?Donc en gros ce qu'on peut faire c'est self get statue, et dis-moi en XY le statut, statut position par exemple,et donc ça, ça va renvoyer un enum, enfin un statut, et selon le statut on peut déjà décider de ce qu'on fait.
00:55:53 :Donc là par exemple si statut égal à statut empty ou statut égal à statut out,alors on sait qu'on n'est pas, donc là en gros cette statement, elle dit est-ce que le statut de la position qu'on fait la requête,est-ce que c'est sur une case vide ou est-ce que c'est en dehors du plateau?
00:56:23 :Si c'est sur une case vide, de toute façon il n'y a pas de pierre, il n'y a pas de forme, donc ça ne peut pas être pris,et si c'est en dehors du plateau, pareil, une position en dehors du plateau ne peut pas être prise.
00:56:31 :Donc là on sait qu'on retourne false, parce qu'on ne peut pas prendre une position vide,et on ne peut pas prendre une position qui n'existe pas, qui est en dehors du plateau.
00:56:40 :Donc là c'est juste une notion de sens en fait, de traduction de l'énoncé.Donc là on peut lancer des tests, mais normalement ça ne devrait pas passer, parce qu'on n'a pas des tests qui suivent ça,donc ça ne marche pas.
00:56:55 :Donc deuxième étape, là maintenant on sait qu'on est sur une pierre,donc on a une pierre, donc elle peut être blanche ou noire, et on peut se demander est-ce qu'il y a une position vide autour de nous,donc sur une position adjacente, donc en haut, en bas, à gauche, à droite.
00:57:18 :Est-ce qu'une position adjacente est libre?Donc ce qu'on va faire, c'est qu'on va récupérer les statues des positions adjacentes.Donc statue, position adjacente.Donc on va dire que c'est une liste, mais du coup il y a quatre positions, donc on va refaire ce qu'on a fait là, mais avec quatre positions.
00:57:45 :Donc tac, on va copier ça quatre fois.Et donc la première position on va dire que c'est par exemple à droite, la deuxième position on va dire que c'est à gauche,la troisième position on peut dire que c'est en bas, et la quatrième position on peut dire que c'est en haut.
00:58:02 :Donc là on peut, même histoire de s'en rappeler, position adjacente, donc on a dit quoi à droite?Ah, il y a mon chat qui fait la zumba à côté.
00:58:22 :Position adjacente bas, et position adjacente haute.Ok, donc la question c'est est-ce qu'il y a une position libre? Donc on peut regarder pour chacune des positions adjacentes,
00:58:37 :enfin des statues des positions adjacentes dans les positions adjacentes.Du coup là je peux mettre un S.Tac, donc on récupère pour chacune des positions adjacentes le statut.
00:58:53 :Si le statut, donc par définition on a dit que c'était libre, si c'était empty.Donc si une des positions adjacentes est libre, alors on peut dire que la pièce de la requête est pas prise.
00:59:12 :Pourquoi il n'est pas content?Statue, position adjacente, c'est juste là.Adjacente, oui, c'est pas bon en français.Tac.Donc là en gros, la question c'est est-ce qu'une position adjacente est libre?
00:59:31 :Position adjacente libre, et donc la pièce, tac, n'est pas prise.Parce qu'une de ses positions adjacentes est libre, par rapport à l'énoncé.Donc là on peut relancer les tests, donc là je relance les tests, et il y en a un qui est passé.
00:59:55 :Test white is not taken, ouais, en gros c'est celui, forcément.En gros on fait la requête sur lui, et là ce qu'on vient de faire c'est on a regardé toutes les positions adjacentes,et il y a la position du haut qui est libre, donc il renvoie qu'elle n'est pas prise.
01:00:11 :Donc là il y a un des tests, le test qui vérifie que c'était libre, qui fonctionne,donc c'est normal avec l'implementation qu'on a faite, qu'on ait passé ce test.
01:00:22 :Alors est-ce que je vous ai perdu? Non.Je vais faire un petit check de pouls, est-ce que tout le monde est encore vivant?Ah, mince, ok.
01:00:49 :C'est à quel niveau, si tu peux le dire rapidement? Dans les sous, mais je m'accroche.Ok, et c'était quoi qui vous semble avancer? C'est à quel niveau que ça a décroché?
01:01:26 :Ah, ok.Donc c'est vraiment sur les bases-bases.Je ne connais pas la moitié des fonctions que tu utilises.Je n'ai pas beaucoup utilisé de fonctions encore, je ne suis pas encore à ce niveau,je découvre plein de trucs.
01:01:49 :Je pense que c'est juste l'interprétation des axes.Ah oui, dans le formatage des données, c'est vrai que je suis passé un peu vite là-dessus.Ok, je pense comprendre ce qui peut te troubler Lionel.
01:02:11 :Non, non, Patient, la question c'est, Patient, est-il indispensable pour ce type de projet?Non, non, il n'y a aucun éditeur qui est indispensable, la seule chose qui est indispensablec'est d'avoir l'interpréteur et de pouvoir installer ses dépendances de projet.
01:02:26 :Après tu pourrais tout faire à la ligne de commande ou dans un fichier texte tout simple si tu voulais.Patient, c'est un éditeur dit intelligent, et ça se discute, mais pour moi c'est le meilleur éditeurpour faire des projets Python, en tout cas au niveau professionnel, et ça a été même conçu
01:02:46 :pour faire des gros projets Python au niveau professionnel.Après c'est un usage qui facilite l'utilisation de Python et le développement de projet, etc.Débugger des paroles pour faire du débug, etc. Mais ce n'est pas obligatoire, ça ne reste qu'un éditeur.
01:03:06 :Après si vous êtes plus à l'aise par exemple sur VS Code ou même sur des trucs plus simples,il n'y a aucun souci, ça reviendra au même. Au final ce qui est important c'est d'écrire un code valide
01:03:15 :et qu'il puisse être exécuté par un interpréteur que vous avez sur votre machine, interpréteur Python.On va juste avancer. D'ailleurs, est-ce qu'on peut aller plus loin sans notion de récurrence?
01:03:30 :Normalement on devrait passer le premier test.Ah oui, le premier test on devrait le passer. Ce test là on devrait le passer.Sauf qu'on a oublié, d'ailleurs un des trucs qui est bien dans les tests, c'est que là en testant celui-là,je me suis rendu compte que j'ai oublié quelque chose ici.
01:03:52 :Donc là en gros la question c'est est-ce qu'il y a une position adjacente libre?Ici ça retourne false s'il y en a une, mais dans l'autre cas, c'est-à-dire s'il n'y a pas de position adjacente libre,à ce niveau là on sait que, si on sort de la boucle, on sait que toutes les positions adjacentes ne sont pas libres.
01:04:18 :Donc IE, il y a une pierre dessus.Ok.Du coup, si on faisait du TDD, c'est-à-dire juste écrire du code pour que ça passe,là ici on pourrait dire que comme il y a des pierres sur tout, c'est-à-dire que la position courante en tout cas,elle n'est pas libre et on pourrait renvoyer trop.
01:04:44 :Et donc là normalement on passe les deux premiers tests et on passe ce test.Donc là normalement on a pas mal de tests qui passent juste avec ça.
01:04:55 :C'est fou.Là on n'a pas encore fait de récurrence ou le gros du travail, mais on a trois quarts des tests qui fonctionnent.Ah tiens c'est marrant ça.
01:05:04 :Donc il y a juste un test en écrivant juste ce code, qui est vraiment simple.Il n'y a pas de notion de récurrence ou il n'y a pas de notion complexe là-dedans.
01:05:13 :C'est très direct.Il y a trois quarts de nos tests, donc quatre tests sur cinq qui fonctionnent et il y a juste un qui ne marche pas.
01:05:21 :Donc forcément c'est celui avec la forme.Donc c'est le dernier test.D'ailleurs celui d'avant il tourne.Celui-là il ne devrait pas.Alors attends.C'est bizarre qu'il n'y en ait qu'un qui...
01:05:38 :Ah oui parce que square is taken.Ouais ok d'accord.Ouais c'est normal aussi.Parce qu'on ne regarde pas forcément la couleur.Donc là aussi il passe, parce que pour chacune des pièces, que ce soit la même pierre que lui ou une pierre ennemie,à chaque fois toutes ses positions adjacentes sont couvertes par des pierres.
01:06:03 :Donc là ici on passe le test mais c'est un peu du hasard.Par contre là ici on ne le passe pas parce que sur la position qu'on demande, par exemple la position 0,1, celle-là,il dit qu'il n'y a pas de liberté alors que la forme entière il y a une position de liberté.
01:06:20 :Donc il devrait renvoyer à false et on renvoie à vrai.Ok. Du coup là on est à une heure.Après j'ai l'impression d'un peu vous perdre là sur le projet.
01:06:36 :Ce qu'on peut faire, je vais voir avec Thibaut, je ne sais pas s'il est encore là, l'ami Thibaut,mais on peut postponer cette session.Moi je vais mettre le projet sur le site de l'entreprise.
01:06:51 :Moi je vais mettre le projet sur un GitHub pour vous le transmettre.Et comme ça on peut peut-être essayer de se faire, par exemple sur un prochain mentorat qui suit,essayer de se faire, comme ça vous laissez le temps de regarder le sujet et regarder ce qui a été commencé à être implémenté,
01:07:09 :commencer à réfléchir dessus et après revenir sur le prochain mentorat et avancer sur la notion de récurrencepour faire toute la tâche demandée par l'exercice.
01:07:21 :Et donc passer tous les tests.Donc l'équivalent c'est tous les tests passés au vert.D'ailleurs c'est un truc dans les tests, on appelle ça le green red, en fait on appelle ça l'état vert,parce qu'en général quand on passe un test on associe la couleur verte qui est la couleur OK.
01:07:39 :Et en général c'est rouge, normalement ce n'est pas orange, ça dépend des conventions,mais normalement c'est plus rouge.Et donc c'est du rouge vert et quand on dit que le projet marche ou que les tests fonctionnent,c'est qu'on a un état vert global.
01:07:55 :Bon c'est mort, je suis en train de faire ça.OK, du coup l'idée ça va être, je vais formater ce qu'on a commencé ensemble, ce que je vous ai montré.
01:08:06 :Dans l'idéal ça serait bien que vous regardiez et que vous essayiez d'avancer sur le sujet,si vous pouvez ou si vous voulez.Et après on se refait une autre session où je focalise plus sur les notions de récurrence.
01:08:19 :J'essaierai d'ici là de travailler justement sur une simplification encore plus importantede ce que je vous présente, pour vraiment descendre à un niveau plus accessible pour tout le monde.
01:08:31 :Et comme ça on va avancer sur, donc là on a plus focalisé sur une analyse de dénoncés,la construction de tests liés à ce qu'on a analysé sur les dénoncés,créer son environnement, créer ses tests et pouvoir lancer ses tests.
01:08:49 :Et en jouant les tests, on a commencé, ou j'ai commencé à faire ce qu'on appelle un TDD,c'est à dire de faire du code pour faire passer les tests.
01:08:58 :Donc ça c'est la méthode ou le modèle canonique, c'est à dire dans les standards, dans les canons,on pourrait ou on devrait faire ça.Donc concrètement, bon ça n'arrive pas souvent qu'on ait ce type de structure et de façon de faire.
01:09:15 :Après souvent on fait un mélange entre on écrit des tests à l'avanceet on les écrit juste après avoir écrit la fonctionnalité.Et en général on fait un mix entre les deux, quelque chose d'hybride,et on essaye d'avancer vers de la fonctionnalité testée et testable.
01:09:29 :Et de l'assurance en fait sur, on écrit un code de qualité qui peut être testé,on sait ce qu'on teste, en général on teste les cas sur les côtés,ce qu'on appelle les edge case ou les cas de bord.
01:09:41 :On sait qu'il y a des zones, en fait quand on définit un problème,on sait que certaines zones vont être plus compliquées que d'autres.Genre typiquement on a définit le bord de Goban, le plateau pour le jeu de Go,et intuitivement sur un plateau qui est en 2D,je sais que les bords du plateau c'est souvent à ces endroits qu'il y a des problèmes.
01:09:59 :C'est à dire que quand on est à la limite de ce qu'on a défini, de ce qu'on va utiliser,on sait que là il peut y avoir des choses bizarres qui peuvent se passer si ce n'est pas bien fait.
01:10:07 :Donc en général les tests se focalisent, ou principalement se focalisent sur ce qu'on appelle les edge case.En plus dans le cas d'un plateau ou d'un bord comme le Goban, c'est parlant l'image,puisque c'est un plateau carré, et les edge c'est ce qu'on appelle les côtés,donc c'est la bordure du carré, et c'est là que ça nous intéresse généralement.
01:10:28 :De tester, de s'assurer que notre application tient la route dans cette localité de données.Est-ce que ça vous motive, est-ce que ça vous dit à ce projet de le continuer et d'avancer comme ça?
01:10:47 :Oui, cool David. Jonathan aussi, cool.Muriel, ah c'est Muriel aussi, nice.Ouais, ouais, ouais, carrément Yann.D'ailleurs vous pouvez revenir vers moi s'il y a des trucs vraiment qui sont un peu,dans ce que j'ai montré, qui sont trop élevés ou qui n'ont aucun sens,revenez vers moi carrément, je vous enverrai des docs en français à lire pour vraiment,
01:11:18 :enfin il n'y a pas beaucoup de notions très compliquées dans ce que j'ai fait pour l'instant,donc normalement ça devrait être durant une semaine ou deux,vous ne devriez pas acquérir cette connaissance.
01:11:30 :Ok, faut le upload dans GitHub, ok, nickel.J'en parle à Thibault pour voir où on va mettre ça, mais il n'y a pas de souci pour le placer en GitHubet il y aura une transmission.
01:11:44 :Lionel, j'ai juste deux, trois petites questions en fait, c'est concernant les tests unitaires.En fait c'est quoi, c'est à chaque fois qu'il y a un projet qui est mis en place,qu'il y a des tests unitaires qui sont définis obligatoirement?
01:11:59 :Non, non, non, non, en fait, c'est pas ça.Non, non, non, au contraire et malheureusement, mais c'est vrai que ça pourrait être,c'est ce que je disais en fait avec le mot TDD, c'est Test Driven Development,donc en gros c'est une méthode qui t'incite fortement à écrire les tests
01:12:16 :ou de faire un cercle vertueux, t'écris des tests, t'écris la fonctionnalité,les tests ne fonctionnent pas parce que ta fonctionnalité n'est pas assez bonne,donc tu refactores la fonctionnalité et tu réécris des tests,les tests ne fonctionnent pas donc tu réécris la fonctionnalité, tu vois,ça fait une sorte de cycle comme ça et normalement t'écris tes tests comme ça,
01:12:33 :c'est-à-dire que t'écris ton test qui va tester ton service,ton service ne fait pas encore ce que veut le test, ce qu'il doit faire,et t'écris ton service et après tu reviens sur les tests pour agrandir la zone de serviceou le nombre de fonctionnalités et t'avances comme ça.
01:12:48 :Là, comme c'est un projet pédagogique, là c'est Open Classroom,ils ont donné en fait les tests unitaires parce que c'est un moyen,parce que c'est un moyen d'auto-évaluation pour l'élève en fait.
01:13:01 :Comme il a les tests et que les tests couvrent à peu près toute l'application,tout le service, il sait à quel point il est loin ou pas d'avoir 100% pour le projet.
01:13:14 :Donc là, c'est plus un outil pédagogique dans ce cas-là,ça permet à l'étudiant ou la personne qui apprend d'avancer avec une sécurité,de ne pas être dans le flou, de savoir si vraiment il est à l'Est ou pas.
01:13:28 :Enfin à l'Ouest, à l'Est-Ouestien.Oui, je comprends. Mais du coup, quand tu mets en place des tests unitaires,j'allais dire que je ne voyais pas ça comme ça, mais en même temps,je ne savais pas du tout ce que c'était, j'entendais juste parler des tests unitaires,mais je pensais que c'était quelque chose qui a été mis en place à la fin,
01:13:46 :mais en fait, au final, c'est quelque chose qui est mis en place dès le début, non?Là, en fait, c'est ce que je disais sur ma phrase, le côté canonique ou le côté,comment dire, la voix du samouraï.
01:13:58 :Il y a plusieurs façons de faire, c'est ce qu'on appelle des méthodes de développement.Il y a des écoles, genre l'école TDD, Test Drive Development,où tu écris les tests en amont et après tu fais le service et tu t'y terres comme ça.
01:14:17 :Après, tu as l'extrême programming qui est de coder la fonctionnalité le plus vite possibleet après tu vois ce qui casse et tu corriges et tu écris des tests au moment où ça casse.
01:14:27 :En fait, tu as plein de méthodes et selon les méthodes et selon le temps que tu consacresà l'expérience que tu as, tu peux avoir des tests en amont, tu peux avoir des tests pendantet tu peux avoir même du refactoring et des tests après pour faire du refactoring.
01:14:39 :Actuellement, dans ma boîte, c'est ce qu'on fait, c'est qu'on réécrit les testsou on étend la couverture de tests pour pouvoir changer le code et être sûr qu'on casse rien.
01:14:50 :Ok, d'accord. Merci.Quelqu'un a d'autres questions ou des remarques?C'est le moment.Précision, je ne mords pas.L'implémentation de la récursivité, la récurrence, il faut écrire une autre fonction, une autre méthode?
01:15:22 :Ça dépend justement, il y a plusieurs, j'ai pas été jusque là, mais il y a plusieursfaçons de faire. Tu peux le faire soit avec plusieurs méthodes, genre une méthode dédiée
01:15:34 :pour faire la récursivité ou la récurrence, ou soit tu peux le faire directement à l'intérieurde la méthode, donc là notre API c'est Istaken. Moi, par exemple, quand j'écris la récurrence
01:15:45 :et comme je l'ai écrit par exemple pour cet exo, j'ai tout mis dans Istaken. En gros,dans le scope de la fonction ou de la classe méthode Istaken, tu peux faire des testset en gros dans le scope de la fonction ou de la classe méthode Istaken, j'ai mis ma
01:15:59 :fonction de récurrence. Si ça répond à ta question.Oui, c'est histoire de réfléchir un peu.Oui, mais après, rien ne m'empêche, après j'ai fait une autre version où j'ai détaché,où j'ai externalisé les méthodes de récurrence et les tests de récurrence, et j'ai faitd'autres méthodes, enfin des méthodes privées ou protected, parce qu'en Python, il n'y a
01:16:24 :rien qui est privé, mais en gros, il y a une interface où tu mets un underscore 8 devantun nom et ça dit à la personne qui lit le code que cette méthode, normalement, tu n'espas censé l'utiliser. Tu peux lire le code, tu peux demander ce qu'il y a dedans, mais
01:16:38 :tu ne dois pas l'utiliser directement et c'est une fonction qui est utilisée par quelquechose d'interne du paquet.Vas-y, assis.Si on a le temps, on fera les deux implémentations où on met tout à l'intérieur du scopede l'API, de la fonction, où on essaie d'externaliser, de découpler.
01:17:00 :Après, il y aura, bon, spoiler alert, il y aura un petit trix, enfin il y aura un trix.Il y aura un truc important à faire attention pour la résolution de la récurrence, c'estsavoir ce qu'on a fait avant.
01:17:17 :Grosso modo, c'est avoir un historique de ces actions pour ne pas retourner sur sespas, parce que le principe de récurrence, c'est d'itérer sur un domaine d'explorationet on fait un pas par un pas et on avance d'une position vers une position proche,de la position proche vers une autre position proche, etc.
01:17:35 :Le problème, c'est que si on ne conserve pas un état global de ce qu'on a fait depuisle début, on peut rentrer dans ce qu'on appelle une loop infinie de récurrence, c'est-à-direqu'on revient sur un endroit où on a déjà fait le travail et on repart dans le même
01:17:50 :chemin qu'on vient d'emprunter.En fait, il faut l'imaginer comme une boucle.Et donc, il y a quelque chose à faire en particulier pour éviter cet effet de boucle.
01:18:01 :Et c'est tout le nerf d'ailleurs de résoudre ce problème avec des fonctions par récurrence,c'est qu'il faut éviter de tomber dans cette loop infinie, dans cette boucle infinie.
01:18:14 :Après, le reste n'est pas très très compliqué.Ok, ok, merci.Merci à toi.Quelqu'un d'autre veut parler de quelque chose par rapport à ce projet ou autre chose?
01:18:31 :Bon, j'avoue là, ma gestion du temps n'était pas fofole, autant pour moi.À la prochaine session, j'espère d'aller plus droit au but et qu'on avance sur leprojet directement.
01:18:54 :Après, c'était bien, j'aime bien rencontrer les gens, savoir d'où ils viennent et lestypes de personnes qui écoutent.Limite, je trouve ça indispensable, mais c'est vrai que là, dans une heure de session,ça grappille un peu trop de budget.
01:19:10 :Mais après, je ne regrette pas.Au final, je ne regrette pas.En plus, vous avez tous des backgrounds super intéressants.Ok, du coup, on va s'arrêter là.
01:19:28 :Je vais voir avec Thibault s'il y a moyen de relancer.Niveau fréquence, je ne sais pas combien vous êtes là sur les sessions de mentorat.
01:19:35 :Par rapport à ce projet et la continuité, vous voudriez quelque chose d'assez rapideou dans plusieurs semaines, si vous aviez le choix.Il va falloir du temps pour regarder, donc un peu de temps, clairement.
01:20:06 :Deux semaines ou plus.Ok, d'accord.Après, il faut trouver le juste milieu du temps, mais pas trop parce qu'il y a de laremise en contexte.
01:20:17 :S'il y a trop de temps qui se passe, il y aura une remise en contexte nécessaire.Mais je suis d'accord qu'il faut du temps.Ok, d'accord.
01:20:26 :Je transmettrai à Thibault, je verrai par rapport à son planning aussi.Et aussi par rapport aux vacances, on sera mi-juillet.Ok, on verra tout ça.
01:20:38 :Ok, je vous remercie pour votre écoute et votre courage.Parce que c'est vrai que ce n'est pas forcément, il y a beaucoup de choses.J'ai tendance à aller un peu vite.
01:20:50 :C'est un truc où il faut que je travaille en termes de communication et de transmission.Et du coup, je parle de beaucoup de choses et ça peut aller vite des fois.
Aucune occurrence trouvée pour « ».