Session du 09 mars 2022 à 18h00
Pratique & Live Coding
Data Science & IA
Veille & Discussions
Frontend & UI
DevOps & Environnement
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
Maîtriser les environnements virtuels Python
Découvrez comment gérer efficacement les environnements virtuels Python sous Windows, Mac et Linux, et explorez différentes solutions comme venv, pipenv ou Poetry.
00:00:00 :J'ai suivi tes manipulations et à un moment donné il y avait un chemin que toi tu avais, c'était...Ecoute, attends un petit instant, je regarde sur le dossier. Alors on est dans bureau, Python, ok, Django...
00:00:20 :Salut Romain! Salut tout le monde! Salut! Et puis voilà, c'était.env, après donc en fait c'était au niveau du activate.Moi activate, j'avais pas le chemin que toi tu avais, moi c'est.env, script et après activate.
00:00:49 :D'accord. Donc c'est juste une différence de dossier et je l'explique dans le glossaire, je vais te retrouver ça.Si tu veux avoir une petite référence, si jamais tu oublies, hop, je mets le lien dans le chat.
00:01:05 :Donc Harley, ici, en fait c'est ça, et effectivement c'est un gros sujet, les environnements virtuels.Je sais pas si Thierry sera là ce soir, mais lui il conseille souvent justement d'utiliser pipenv à la place de virtualenv,qui a comme intérêt de ne pas varier en fait entre Windows, Mac et Linux.
00:01:28 :Donc ça permet vraiment d'utiliser les mêmes commandes, après moi je trouve qu'il y a toujours des petits trucs,juste le fait que sur Windows, tu sais, tu peux pas, enfin on peut pas utiliser directement Python 3.9,
00:01:42 :il faut juste taper Python parce que le nom de l'exécutable c'est juste Python.Enfin il y a plein de petites différences comme ça entre Windows, même quand tu utilises git bash,il y a toujours des petits trucs comme ça qui varient.
00:01:54 :Et donc ouais, sur les environnements virtuels, effectivement, ça va varier aussi justement si tu utilises git bash ou pas,parce qu'au delà du nom du dossier, si tu utilises le command prompt par exemple, donc l'invit de commande,là tu pourras pas utiliser la commande source, donc là ça va être encore, tu vas avoir deux trucs,
00:02:16 :il va falloir utiliser la commande call et aller chercher le fichier.bat qui est dans le dossier scripts.Donc là tu vois, tu cumules les trucs qui changent.
00:02:27 :Après ça, je peux aussi te passer la formation, j'en parle dans, je vais te retrouver ça,j'en parle dans les environnements virtuels en fait.Et puis ouais, les environnements virtuels c'est un gros sujet, voilà, hop, je te passe le lien.
00:02:48 :Donc tu pourras re-regarder ça si tu veux, ou si tu l'avais pas vu, je sais pas,donc j'explique justement, j'ai une partie générique et une partie spécifique sur Windows,activer et désactiver un environnement virtuel sur Windows.
00:03:06 :Donc voilà, ça va te résumer tout ce qu'il y a besoin de savoir là-dessus.Ok, attends, je le mets en favori.Et ouais, après, c'est ça les environnements virtuels, c'est un des gros,environnement virtuel et en fait la gestion des packages, c'est un des gros reproches qui est fait à Python.
00:03:26 :Je suis tombé sur un fil Reddit hier qui parlait de Python 4 et qui posait la question en généralqu'est-ce que les gens aimeraient voir dans Python 4, et le premier truc qui revenait c'étaitune meilleure gestion des packages, des environnements, tout ça.
00:03:44 :Parce que pour l'instant il y a, t'as PyPenf, t'as Venf, t'as Poetry, t'en as encore un autre que j'ai plus en tête.On avait fait un article là-dessus aussi, ça va être la dernière ressource, je te balance toutes les ressources,mais c'est un gros sujet. On avait fait un article assez complet justement,
00:04:02 :qui répertoriait un peu toutes les façons de faire, voilà, gérer efficacement les dépendances.Donc voilà, troisième lien. Et tu vas voir, il y a PyP, après il y avait Venf, il y a PyPtools,
00:04:19 :il y a PyEnv, on peut utiliser Docker aussi. Donc il y a plein de façons de gérer les environnements,certaines qui sont très simples, certaines qui ont des avantages et des inconvénients.
00:04:29 :Il y avait aussi Thierry, ça aussi je pourrais te retrouver, qui avait fait un webinar assez complet là-dessus.Donc c'est un gros sujet, après de base si tu fais juste avec Venf, bon voilà, il y a juste des petites différencesentre Windows et les autres systèmes. Et puis après voilà, t'as pas trop besoin non plus de pousser,
00:04:46 :c'est plus quand t'es dans un projet où tu vas commencer à avoir beaucoup beaucoup de dépendance,avec des versions précises, etc. que là ça peut commencer à devenir un petit peu plus pénible.
00:04:54 :Mais sur des projets de base, voilà, une fois que t'as compris comment créer ton environnement virtuel,l'activer pour pas avoir tout dans le même environnement, voilà, t'as pas besoin de... ça se fait assez vite quoi.
00:05:05 :Ok. Est-ce que... c'était toi Romain qui m'avait passé le projet du tarot, ou je me trompe?Oui oui c'est moi.Ouais c'est toi, ok cool. Parce que finalement on n'est pas encore beaucoup, on est juste deux.
00:05:24 :Sur le Doodle il y avait, me semble, une petite dizaine de personnes qui avaient dit qu'ils seraient disponibles.Donc bon, au pire...Euh, excuse-moi, une dernière question.
00:05:36 :Ouais non mais vas-y vas-y.Une dernière question, avant les autres.Vas-y.J'ai découvert un site qui s'appelle... attends, je vérifie pour ne pas dire de bêtises, Code In Game.
00:05:46 :Ouais.Est-ce que c'est un bon site?Alors, ça dépend, moi je l'ai pas trop utilisé, enfin je l'ai déjà testé et j'ai arrêté assez rapidement.
00:05:59 :Donc personnellement, ce serait un peu rapide pour moi de te donner mon avis et de te dire que c'est un avis général.Moi je l'ai pas trop aimé, après j'entends souvent aussi un peu des gens qui disent la même chose.
00:06:13 :Que, en fait, c'est quand même... je pense qu'il y a des personnes pour qui ça convient très bien, c'est un peu qui tout double.Je pense, essaye et puis regarde si ça te plaît et si tu vois qu'au bout de 15 minutes, t'aimes pas les exercices et ça te plaît pas,
00:06:31 :bah en fait, va pas plus loin parce que ça sera pas fait pour toi.D'accord, ok.Parce que c'est vraiment des... ouais, c'est ça.J'ai l'impression qu'il y a des gens qui peuvent vraiment accrocher à cette façon de faire.
00:06:41 :Ça peut être sympa, mais après, moi je trouve que c'est un peu trop...C'est un peu trop éloigné finalement après de ce que tu vas faire, tu vois, dans le projet que t'as fait par exemple.
00:07:02 :D'accord.Parce que ça reste des trucs où ça veut être un peu ludique, ça veut être des mises en situation justement un peu avec des exercices ludiques autour de jeux, etc.
00:07:12 :Mais je trouve qu'on se retrouve un peu dans le même syndrome que les exercices où c'est des trucs de maths en fait.Où c'est un peu décorrélé de finalement ce qu'on fait réellement quoi.
00:07:23 :Donc, mais ouais, essaye.Puis voilà, il y a pas mal de sites du genre, il y a code in game, il y en a un autre.
00:07:30 :Après il y a les classiques Code Academy où là c'est plus justement...Moi je préfère parce que Code Academy c'est plus inséré dans une logique de cours justement.
00:07:40 :Donc t'as aussi un peu ce côté d'avoir un éditeur et puis tu codes directement dedans.Mais c'est quand même relié plus directement à des notions de programmation.
00:07:49 :Donc je trouve que ouais, moi je préfère.Code Academy c'est uniquement en anglais.Ouais c'est en anglais et c'est payant.Je crois qu'ils ont des parties gratuites aussi mais c'est pas...
00:08:01 :Enfin les parties intéressantes sont quand même payantes je crois.C'est pas très cher, après je crois que c'est 20 euros par mois, un truc comme ça.
00:08:07 :Et puis ils ont beaucoup beaucoup de contenu.Il y a des trucs par exemple, tu vois ils ont des parcours de data, data science, tout ça.
00:08:14 :Où là je trouve que c'est vraiment cool parce que c'est vraiment sur des projets très précis.Et j'ai d'ailleurs envie de faire un peu ça pour DocStream sur ces trucs là.
00:08:22 :J'ai changé l'éditeur Python sur le site et ça va me permettre de faire ça.Donc il va y avoir des trucs assez cool à faire avec ça.
00:08:29 :D'accord.Mais ouais, je crois qu'on a un article avec des ressources pour apprendre Pythonqui va sortir bientôt et du coup il y a, je crois, Codingame et d'autres sites du genre qu'on avait mis dedans.
00:08:44 :Donc ça c'est vrai, c'est vraiment, faut essayer puis faut voir si ça te correspond.Ok.Est-ce qu'il y avait d'autres questions, Loïc, Romain?Des questions générales sur des trucs que vous aviez vus?
00:08:59 :Écoute, pour l'instant il n'y a rien qui me vient en tête spécifiquement.J'en ai des millions de questions mais là tout de suite...Est-ce que je crois que ce soir on aborde le scrapping?
00:09:14 :Ouais, alors on va effectivement, c'était la question de Yacine je crois?Ludovic? Non.Vincent, je ne sais plus, je regarde.Qui c'est qui vous laisse faire un...
00:09:28 :Ah oui, si c'était Yacine, c'est ça.Oui parce qu'on avait déjà abordé un peu en fait et justement je n'ai pas eu le temps de regarder,je voulais revoir, on l'a abordé dans une des sessions et je vais vous retrouver laquelle.
00:09:43 :Variable d'environnement, donc ça devait être celle d'avant.Voilà, le scrapping.Donc je vais vous mettre le lien là aussi.C'est la session du 19 février.
00:10:00 :Je vous mets ça dans le chat.19 février, il y a un chapitre, vous allez voir, c'est à partir de 12 minutes,chapitre 3 qui s'appelle le scrapping.
00:10:13 :À partir de 12 minutes.Donc on avait déjà en fait parlé, je crois que d'ailleurs, je ne sais plus si c'était Yacine déjàqui avait posé la question, mais on en avait déjà un peu parlé en fait,on avait parlé de façon plus générale du scrapping et de ce que ça impliquait au niveau de la légalité,
00:10:32 :du truc aussi, dans quel contexte ça pouvait être utilisé,parce que le scrapping c'est très large, c'est un peu tout et n'importe quoi en fait,c'est aussi large que l'internet presque, tu peux faire tout ce que tu veux,tu peux récupérer des informations, tu peux faire, on en parlait,
00:10:48 :on peut faire même limite de l'espionnage en allant récupérer les infos des concurrents de façon régulièreet puis il y a toujours une ligne rouge à partir.
00:10:59 :Et c'est en fait, c'est ça où moi c'est ce que j'avais prévu d'en parler,je vais vous partager mon écran.Ah ça y est, il ne veut plus repartager.
00:11:17 :A chaque fois j'ai l'impression que je ne mets pas à jour mon chrome,il ne veut pas partager mon écran.Ah non il ne veut pas.
00:11:28 :Bon je vais revenir, je vais remettre à jour mon chrome,et j'en reviens dans une minute.Ok, donc en fait moi j'avais prévu,alors je n'avais pas prévu de faire un cours complet sur le scrapping,parce qu'en fait c'est en une heure, on pourrait à peine commencer avec la base,
00:11:49 :je fais des cours qui sont prévus parce que c'est un sujet qu'on me demande assez souvent,et c'est une des grosses forces de Python aussi,c'est quelque chose qui se fait pas mal avec Python et JavaScript pour le coup,les deux langages sont assez similaires, c'est un peu les mêmes techniques et les mêmes principes,
00:12:09 :et donc c'est quelque chose qui se fait très bien avec Python aussi.Vous avez fait une vidéo YouTube aussi pour récupérer les mots des chansons?
00:12:18 :Ouais, ça c'était effectivement un petit aperçu de ce qu'on pouvait faire avec du scrapping,et c'est pour ça que je disais que ça peut être de l'analyse,donc là la question de Yacine c'était pour récupérer des horaires de vol,et ça rentre un peu dans tout ce que je voulais dire aussi,
00:12:35 :il y a quelqu'un qui a posté sur le Discord,qu'il y avait une API pour récupérer les prix des billets d'avion, etc.Et le premier truc à savoir avec le scrapping,qui va un peu dans cette idée que c'est réglementé,c'est que les sites n'aiment pas qu'on fasse du scrapping,
00:13:01 :donc c'est pour ça que déjà dans les conditions d'utilisation des sites,vous allez voir un petit paragraphe qui va dire que vous n'êtes pas autorisé à le faire,la plupart vont juste dire que vous n'êtes pas autorisé,il y en a qui vont dire que c'est autorisé si ce n'est pas justement pour nous causer du tort,
00:13:18 :et si vous ne faites pas 10 000 requêtes à la seconde.Donc voilà, on est toujours dans la zone grise,et aussi il faut savoir que c'est de plus en plus pénible en fait,parce que déjà il y a beaucoup de sites, sans forcément que ce soit volontaire,qui utilisent du Javascript et qui vont afficher des données avec du Javascript.
00:13:41 :Donc par rapport à il y a 10 ans où vous aviez une requête tout simple,et puis après vous aviez un bloc de HTML qui était là,et vous pouviez aller chercher juste les informations dans le HTML,maintenant on a de plus en plus de sites où si on enlève le Javascript,
00:13:55 :on n'a plus rien, il y a des sites complets qui vont utiliserdu Javascript pour afficher des informations,et donc si vous faites l'expérience dans votre navigateur,vous désactivez Javascript, il n'y a plus rien sur le site.
00:14:08 :Donc il y a des façons de contourner ça un petit peu,et c'est le point avancé avec Splash notamment,Splash c'est un peu comme Selenium,Selenium Splash c'est des façons d'accéder, d'émuler un navigateur.
00:14:30 :Donc la façon basique avec Request et Beautiful Soup,c'est tout simplement vous allez requêter une page web,vous allez récupérer le HTML qui vous est retourné par la requête,et vous allez fouiller dans ce HTML.
00:14:43 :Donc ça c'est ce que j'avais fait effectivement pour les paroles de chansons,sur le site il n'y avait pas de Javascript et tout ça,donc c'était directement dans le HTML, je pouvais aller récupérer les paroles de la chanson.
00:14:57 :Et donc en fait ça c'est le cas de figure le mieux.Il y a aussi un autre cas de figure,où en fait vous allez pouvoir récupérer les informations directement depuis l'API,et ça en fait vous allez pouvoir le faire,je vais vous montrer si je vous partage.
00:15:17 :Alors partager, et salut Christophe!On va partager, Chrome, hop.Donc si je vais sur DuckString par exemple,vous allez voir, ou même peut-être plutôt sur Udemy,parce que je sais que Udemy, je me souviens,en fait vous avez des moyens des fois d'accéder à des informations,si vous faites un clic droit vous allez dans Inspect,
00:15:44 :vous allez aller dans l'onglet Network ici,et c'est là que tout se passe.Donc en fait si vous rafraîchissez la page,vous allez avoir plein de choses ici,et ce qui est intéressant, généralement là vous pouvez aller dans All,et puis vous allez avoir tous les types de ressources qui vous sont retournées,
00:16:01 :donc par exemple des images, des fichiers CSS, des trucs comme ça,et si vous voulez voir, donc là vous voyez,vous pouvez filtrer après pour voir juste le CSS,juste le JavaScript, etc.
00:16:12 :Et Fetch, XHR, généralement c'est ça en fait qui va aller chercher des informations,donc vous voyez tous les types ici, XHR et Fetch,et en fait là dedans vous pouvez aller chercher,et des fois vous avez des trucs où c'est marqué justement API,ou des trucs comme ça, course ID,
00:16:28 :donc vous cliquez, et là vous allez voir par exemple une URL avec des paramètres,vous voyez par exemple, voilà c'est ce que je cherchais, API 2.0, pricing,
00:16:38 :et vous avez sur ces cours avec ces identifiants,avec les fields, donc on va récupérer les fields Price, Discount, List, etc.Et ça en fait ça va vous retourner après si vous allez dans Response,vous voyez que ça vous retourne, hop, tout un tas d'informations.
00:16:58 :Et donc ça généralement en fait vous pouvez aller hacker un petit peu le truc,alors des fois il y a des API officielles, c'est un peu le cas de ce que je voulais vous montrer aussi après,avec l'API pour aller chercher les vols, et puis les informations de prix sur les vols.
00:17:12 :Donc des fois vous avez des API officielles que vous pouvez utiliser,ça c'est le mieux parce que vous n'avez pas besoin de faire de scrapping,le problème avec le scrapping, avec Beautiful Soup notamment,c'est que vous allez devoir parser le HTML,donc vous allez devoir les fouiller,puis si jamais le HTML y change, votre script peut-être qu'il ne marchera plus,
00:17:30 :alors que l'API en fait, si vous utilisez directement l'API,bon si l'API change, ça peut que ça ne marche plus aussi,mais vous allez avoir des trucs beaucoup plus, qui vont vous être retournés de façon beaucoup plus claire.
00:17:40 :Là vous voyez si on va chercher cette API et qu'on request cette URL,on récupère dans la réponse un dictionnaire, donc un JSON en fait,avec toutes les informations, et c'est beaucoup plus simple d'aller directement chercher par exemple le prix d'un cours en particulier.
00:17:58 :Donc vous voyez qu'il y a plein de façons d'aller chercher les informations,directement dans le HTML, via une API officielle, via une API non officielle,tous ces trucs-là, à chaque fois ça peut changer,tous ces trucs-là aussi, à chaque fois vous pouvez avoir plein d'obstacles,parce que comme je disais déjà le JavaScript, vous pouvez avoir aussi des limitations des fois,
00:18:17 :donc sur les API, par exemple sur l'API là encore, pour aller chercher les informations des vols,vous avez un certain nombre de requêtes que vous pouvez faire de façon gratuite,et après ça devient payant.
00:18:30 :Donc il y a plein de limitations comme ça, au point où, c'est aussi un truc que je voulais vous montrer,j'ai des amis justement qui font Scrapping Bee,et eux vous voyez ils ont fait un business complet là, qui commence à marcher très bien,et qui prouve qu'il y a vraiment une demande là-dessus,
00:18:45 :donc ils ont fait un produit en fait avec plein de pitons d'ailleurs derrière,et ce que ça permet, c'est que ça permet de faire des robots de Scrapping,et eux en fait ils gèrent également tout le, c'est ce qu'ils expliquent ici, le Rotate Proxy,c'est qu'en fait à un moment, si vous allez Scrapper des sites web, ils peuvent vous bloquer,
00:19:05 :en gros ils vont dire bon bah cet IP il a fait trop de requêtes,donc on va le bloquer, il ne pourra plus faire de requêtes.
00:19:12 :Et donc là il y a des façons, et c'est pour ça que je vous dis on rentre là dans les trucs plus avancés,il y a des façons d'aller, un peu comme des VPN si vous voulez, d'aller faire des proxys,de changer ça régulièrement pour que vous puissiez continuer de Scrapper les informations sans vous faire bloquer.
00:19:28 :Le problème c'est que ça prend du temps, il faut trouver des proxys, c'est compliqué à mettre en place etc.Donc eux en fait c'est exactement ça qu'ils proposent, c'est que vous faites votre recette de Scrapping,vous vous dites voilà moi je veux aller chercher telles informations ici,je veux récupérer ces données, et puis eux après ils vont s'assurer que votre truc marche tout le temps.
00:19:46 :Donc vous voyez c'est pour ça que je disais que c'est vraiment un gros sujet,il y a déjà toute la théorie, donc avec ce que je disais sur ma petite note là,avec les basiques, où c'est juste apprendre à faire des requêtes.
00:20:02 :Donc il y a déjà le module request, avec les get, les post, les autorisations aussi,avec le côté headers qu'on retrouve aussi, je vais vous le repartager,que j'ai, voilà qu'on avait ici.
00:20:22 :Donc là vous voyez en fait ça va un peu dans cette idée là,on est vraiment dans tout ce qui est Scrapping, on va souvent aussi toucher aux API comme je vous disais.
00:20:34 :Donc là par exemple c'est le fameux Amadeus, je ne connaissais pas ce truc là,mais j'ai fait un petit test et effectivement on va pouvoir faire des requêtes à leur API,et c'est ça où je vous disais qu'en fait on peut en faire je ne sais plus 100 par jour,
00:20:49 :et puis après ça devient pire.Et donc là souvent vous allez avoir l'exemple avec Curl,qui est une façon de faire des requêtes en ligne de commande,et donc là en fait on peut adapter ça avec Dupython,et donc là il faut par exemple aller chercher un token,et alors ça c'est un truc, c'est généralement assez chiant,
00:21:09 :parce qu'en gros il y a plein de façons là encore d'autoriser les requêtes,il y a des façons plus simples que d'autres,il y a des sites où ça va juste être un genre de mot de passe,login avec un nom d'utilisateur, un mot de passe,et de plus en plus en fait ce qu'on voit c'est cette façon de faire,
00:21:27 :en fait vous allez devoir faire une première requête avec votre client ID et client secret,donc ça en fait vous vous créez un compte,il va vous dire voilà vous avez une longue chaîne de caractères avec un ID et un secret,ensuite vous faites une première requête avec toutes ces informations là,
00:21:43 :et cette requête elle va vous retourner un token que vous allez pouvoir utiliser,donc vous voyez c'est ça en fait vous faites cet appel à l'API avec vos identifiants,je crois qu'il y a quelqu'un qui vient d'arriver, c'est Yo Yonel,Salut ça va?
00:22:05 :Donc voilà vous faites une première requête avec votre ID et votre secret,et ça en fait c'est pas avec le ID et le secret que vous allez faire les requêtes directement,c'est avec le BARREL token que ça va vous retourner,là vous voyez en fait ça va vous retourner ce token ici,
00:22:23 :que vous pouvez ensuite utiliser pour faire des requêtes,donc ensuite vous allez lui donner,voilà ici vous allez faire une requête vers l'API et vous allez lui dire en autorisation je te passe mon token,et le truc qui est chiant c'est que le token généralement en fait il est valide qu'un certain nombre de temps,
00:22:39 :vous voyez ici il y a le expires in,et donc en fait ce qu'il faut c'est que vous avez deux façons de faire,c'est ce qu'il dit, il le dit je ne sais plus où,c'est qu'en fait soit vous regardez quand est-ce qu'il expire et vous prévoyez le coût,
00:22:52 :donc avant qu'il expire vous allez en récupérer un nouveau,ou alors à un moment vous allez faire une requête,il va vous dire votre token est plus valide et donc à ce moment là vous savez qu'il faut en régénérer un pour le récupérer.
00:23:05 :Moi je trouve ça vraiment pénible,ça rajoute juste avant de commencer à faire une requête avec l'API,il faut déjà mettre en place un peu tous ces systèmes là,pour aller récupérer le token, vérifier s'il expirait, s'il expirait en redemander un etc,c'est un peu pénible, mais voilà c'est une façon de faire qu'on voit très souvent,
00:23:26 :et il y a plein d'autres façons de faire, c'est pour les autorisations.Je ne sais plus pourquoi j'étais parti sur les API,je vous disais qu'il y avait plusieurs façons de faire avec les scrapping tout ça,donc voilà si je reviens sur les trucs,si ça vous intéresse le scrapping,
00:23:47 :je vous conseille de déjà commencer avec request et Beautiful Soup,avec des trucs de base, donc pas des sites javascript compliqués,limite vous vous prenez juste un fichier local HTML et vous vous entraînez avec ça,et justement avec le nouvel interprèteur Python sur Dockstring,je vais pouvoir faire des exercices là dessus,
00:24:09 :vous n'aurez rien besoin d'installer et tout,ce sera direct sur le site, juste pour vous entraîner à utiliser Beautiful Soup,à récupérer des informations.Après si vous voulez aller un peu plus loin,pour notamment des sites qui sont un peu plus complexes,ou automatiser des choses, il y a Selenium,
00:24:24 :je vais vous repartager si vous voulez prendre des notes.Voilà donc Selenium comme ça,et après Splash pour aller encore plus loin,et puis après vous pouvez faire du crawling aussi avec,comment ça s'appelle, ah j'ai plus le nom,je le retrouverai, il y a une autre bibliothèque Python qui permet après de faire des robots de Scraping,
00:24:52 :donc un peu comme les robots Google.C'est un truc comme ça, Spider Scroll,un truc comme ça, Scroller, je ne sais plus,c'est un nom, Scrappy, oui c'est ça, Scrappy.
00:25:09 :Ah oui j'ai déjà utilisé ça.Scrappy ça vous permet de faire des recettes de Scraping,donc c'est pour automatiser du Scraping si vous voulez.Et c'est pour ça que ça devient très compliqué,parce que la base n'est pas si compliquée,c'est ça qui est marrant vraiment, si vous voulez juste récupérer,
00:25:30 :des fois vous arrivez sur un site, il n'y a pas de JavaScript,vous faites une requête, vous n'avez pas d'autorisation,c'est un peu ce que j'avais fait sur la vidéo avec les paroles de chansons,vous arrivez sur le site, vous avez les infos, vous les récupérez,Beautiful Soup c'est très bien foutu et c'est assez facile à prendre en main,
00:25:47 :en une heure vous êtes opérationnel là-dessus.Et après ça peut devenir très vite compliqués'il y a des petits trucs comme ça qui vous tombent dans les pattes.
00:25:58 :Et notamment, c'est un peu le problème,c'est que je dirais, c'est qu'à la fois sur tous les trucs classiques,de plus en plus, il y a cinq ans, aller récupérer des vols d'avionsou des AirBnB c'était assez facile,et vu que maintenant tout le monde, avec la démocratisation de tout ça,
00:26:16 :tout le monde s'est mis à dire, trop bien, je vais aller récupérerles vols des avions etc.En fait ils ont mis plein plein de garde-fouspour éviter que tout le monde commence à bombarder les sites du genre de requêtes.
00:26:29 :Donc voilà, un peu sur le sujet.Est-ce qu'il y avait des questions un peu sur tout ça?Non, ça va?Non non.Ok.Alors je vais peut-être passer tout de suite sur la question de Camille,enfin c'était, du coup elle n'est pas là, c'était une question assez générale,mais c'est vrai que c'est une question qui est assez,
00:27:01 :que tout le monde se pose je pense à un moment,elle disait donc voilà, de sa pratique au quotidien,et malgré l'outillage qu'elle a acquéri avec son expérience,elle se rend compte qu'elle a besoin de level-up sur l'analyse et la résolution de problèmes.
00:27:13 :Et donc elle demande est-ce qu'on a des pistes de réflexion,des ressources ou des exercices de mise en pratique pour ça.Et Thierry lui avait répondu que déjà effectivement le mieux c'est de décomposer les choses,de décomposer le problème en plusieurs petits problèmes que l'on résout chacunpour pas rester bloqué en fait devant un gros problème qu'on n'arrive pas à résoudre.
00:27:34 :Et après c'est vrai que c'est toujours la question qui est un peu difficileparce que la vraie bonne réponse c'est le temps et la pratique,et c'est de se heurter au plus de 4 figures possible.
00:27:48 :Après moi je trouve et je crois que je l'avais mis récemment,je l'ai mis dans la formation Python de base,c'est en fait ce qu'on dit souvent en fait c'est de ne pas penser code,de penser juste vous, comment vous aborderiez le problème vraiment avec un papier, un crayon.
00:28:11 :Il y a Yonel qui veut parler, tu voulais intervenir?Yes, un truc que j'ai expérimenté qui marche pas mal,c'est le data workflow, c'est à dire de penser le problème en tant que flux de donnéeset vraiment schématiser ou centrer la réflexion sur la manipulation de données,comment tu la gères, comment tu la requêtes, comment tu l'utilises,
00:28:34 :comment tu la stockes, et souvent on arrive justement à créer une atomicitédans le raisonnement et dans les services etc.Et on arrive assez rapidement quand on a ce mindset, cette façon de penser,à trouver des cas simples sur une donnée simple, avec un process simple,avec un résultat simple etc.
00:28:54 :Donc le truc c'est penser données, penser workflow de données,puis après penser, essayer de trouver un cas minimal ou un cas nominalqui permet de faire le déroulement en fait de la pensée du service qu'on essaie d'implémenteravec une donnée concrète, minimale, un peu comme quand on fait des tests unitaires,
00:29:11 :on essaie de réduire la taille des données,ben là c'est un peu la même chose mais dans l'esprit.Ouais c'est vrai qu'on a des fois effectivement,on a un cas aussi qui est un peu théorique et général,et puis il faut se mettre, il faut prendre, et ça va un peu dans ce que je disais,
00:29:28 :ce côté là de prendre un exemple simple, de se dire bon ben là j'ai un cas de figurequi doit marcher pour tout, mais bon on va déjà essayer de,pour ne pas rester bloqué, de prendre un cas de figure avec effectivementcomme tu dis des données en entrée, et te dire concrètement moi qu'est-ce que je veux faire avec ça,
00:29:44 :et d'essayer de résoudre le problème avec ces données précises,et puis après de voir si tu peux pas, il y a un petit peu un côté je me dis mathématique,mais il me semble que c'est le seul truc dont je me souviens de mes cours de maths,ce côté là d'essayer de démontrer le truc sur un cas particulier,
00:30:00 :puis après de l'étendre et de dire maintenant on a un théorème en fait qui marchepour tous les cas de figure, donc il y a un peu cette approche là,et après effectivement oui c'est, plus vous allez progresser en fait,plus vous allez aussi, n'empêche avoir un bagage d'une boîte à outils importante,
00:30:23 :je pense qu'au début c'est un peu ça aussi qui bloque, c'est que en fait,même si on décompose le truc et qu'on se dit voilà comment je ferais à la main,sans code juste moi, ben des fois on reste bloqué à cette étape là,on arrive à décomposer le problème et puis après dans l'implémentation on n'arrive pas à le faire.
00:30:39 :Donc ça en fait c'est vraiment juste, il faut s'entraîner,enfin il faut apprendre le langage et puis tout ce que vous pouvez faire,mais c'est deux trucs un peu séparés, je prends l'exemple,un exemple que j'avais juste avant de faire le live, là où je refais le module de quiz de Doxtring,
00:30:57 :donc il y a du javascript qui est impliqué, le javascript il y a plein de trucspour lesquels je ne suis pas super doué, avec les sélections, les sélecteurs de CSS etc.
00:31:09 :Et donc là voilà, il y a vraiment deux parties au problème,il y a la partie purement qu'est-ce que je dois faire,donc là je dois récupérer les blocs de questions individuellement,où là c'est pas du tout relié à javascript, ça pourrait être fait avec n'importe quel langage,l'idée c'est juste de se dire il faut que je puisse boucler à travers chaque bloc de questions,
00:31:28 :ensuite sur chaque bloc de questions il faut que je puisse savoir s'il y a une des questions qui a été cochée,sachant que là l'idée c'était de vérifier si l'étudiant avait bien coché au moins une réponse par question.
00:31:40 :Donc voilà, il faut vous dire comment vous vous feriez,moi si je devais sans code juste vérifier que l'étudiant n'a pas oublié une question,je passerais à travers chaque question, je regarderais s'il y en a une qui est cochée,et je ferais pareil pour tous, donc vous écrivez ça,
00:31:55 :vous commencez à voir que là dedans il va y avoir une boucle, parce qu'il va falloir boucler sur toutes les questions,qu'il y aura peut-être une boucle dans une boucle, parce que chaque question a des réponses qui peuvent aller de 2 à 5, 6, etc.
00:32:08 :Donc voilà, vous vous dites bon là il y a une boucle dans une boucle,vous pouvez commencer justement à isoler les problèmes, là vous voyez qu'il y a peut-être plusieurs problèmes,il y a déjà le problème général qui est de savoir comment on peut détecter que l'étudiant a répondu à tout,
00:32:23 :et puis après à l'intérieur de ça vous avez le sous-problème qui est comment à l'intérieur d'une question,déjà une seule question, vérifier que l'étudiant a coché une case,et après vous répétez ce problème sur toutes les questions.
00:32:33 :Donc voilà, de minimiser les choses en petits problèmes, et après vous arrivez à finalement une ou deux lignes de code,et c'est vrai que ce que tu disais Yonel, il y a le côté des TDD, le Test Driven Development qui est assez intéressant là-dessus,c'est un peu cette idée aussi de partir du résultat, de se dire qu'est-ce que je dois faire,
00:32:58 :de déjà, comment dire, en fait le Test Driven Development c'est que vous allez créer les tests avant le code,ce qui peut paraître au début complètement contre-intuitif,parce qu'on a envie de se dire on va déjà faire le code et puis après on va tester s'il marche,et là en fait vous faites déjà les tests, donc vous allez déjà dire mon code il doit faire ça avant même d'écrire le code,
00:33:22 :et en fait généralement une fois qu'on a fait nos premiers tests comme ça, on se rend compte à quel point c'est puissant,parce qu'on va déjà découper notre problème beaucoup mieux, beaucoup plus facilement,parce que le but des tests déjà c'est qu'ils vont tester des petits trucs,un test il ne va pas tester 40 000 choses, et c'est le problème quand on fait l'inverse,
00:33:45 :c'est que généralement quand on fait une fonction c'est très facile de commencer à faire une fonction qui fait 10 000 trucs,alors que quand on fait des tests là c'est l'inverse, quand on fait un test généralement on le voit très bien,c'est très vite visible si on fait un test qui teste 5 choses, vous allez avoir 5 tests dans votre test,
00:34:02 :donc c'est très rapidement visible, donc c'est assez intéressant de partir de ça,de se dire bon voilà concrètement qu'est-ce que je veux faire,et là vous allez vous rendre compte que si vous faites un test qui teste votre gros problème,en fait il ne peut pas le tester directement, le test ne peut pas tester ce gros problème que vous avez,
00:34:16 :il va falloir décomposer votre truc, donc ça c'est assez intéressant je trouve,que vous fassiez les tests avant ou après, si vous faites les tests après vous allez vous rendre compte que votre fonction est mal faite,ou que votre problème n'est pas forcément bien fait, ou que vous pourriez le faire différemment,
00:34:33 :et si vous faites les tests avant en TDD vous sauvez du temps finalement avec ces étapes.Donc voilà, je ne sais pas si ça vous donne des pistes, c'est des trucs assez génériques,mais c'est vrai qu'après ce que je trouve difficile c'est que même quand on a des cas de figure précis,
00:34:54 :c'est vraiment après on a tous un peu une façon différente de penser,et c'est le genre de truc où si moi je prends un problème et je vous montre ma façon de faire,vous allez regarder une vidéo comme ça et vous allez dire bah oui en fait c'est facile,
00:35:07 :et c'est vraiment quand vous vous allez être devant le truc avec personne à côté que vous allez bloquer,donc c'est pour ça c'est vrai qu'il n'y a pas trop d'autres façons de faire que de s'entraîner,de trouver des problèmes qui sont adaptés au niveau qu'on a aussi, c'est surtout ça,
00:35:23 :et puis après aussi pas avoir peur de regarder les solutions des fois justement,parce que c'est en engrangeant justement des problèmes et puis en voyant comment ils sont résolus,qu'aussi après on acquiert, on a dans notre boîte à outils justement différentes façons de résoudre les problèmes.
00:35:40 :Donc voilà à peu près pour cette question. Est-ce qu'il y avait des gens qui voulaient rajouter des choses?Oui donc après on avait le projet de Romain, donc Romain, je vais partager mon PyCharm,comment je le remets de l'avant? Non, voilà, ça en avant, et moi je ne veux plus être en avant, minimisé, voilà ok, c'est bon.
00:36:24 :Donc c'est bon, vous m'entendez toujours, vous voyez tout? On le voit oui.Ok parfait, donc après moi je ne sais pas si je peux me cacher carrément.
00:36:39 :Je regarde, peut-être si je désactive la caméra, voilà tout simplement ça sera plus mieux.Donc déjà bravo parce que c'est un gros projet et c'est quand même bien découpé,on voit que ce n'est pas ton premier projet ou alors sinon tu as bien fait les choses parce que tu as bien découpé les choses,
00:37:06 :tu as bien découpé tes fenêtres, même au niveau des tests justement j'ai vu que tu t'étais assuréque tu puisses tester des fenêtres séparément parce que ça c'est un des problèmes que je vois très souvent,c'est ça déjà que les gens font tout dans un fichier et qu'après si tu veux tester juste une partie de ton script,
00:37:25 :tu es obligé de relancer le programme au complet.Et là le fait d'avoir séparé les choses avec plusieurs fenêtres à chaque fois différentes, avec des fichiers Python séparés,j'ai vu que dans les fichiers tu avais mis les ifname, si je reviens par exemple, voilà ici,donc tu avais ce petit truc caractéristique qui fait que ce module ici ajoute le joueur, tu l'importes ailleurs,
00:37:52 :donc du coup tu as mis ce ifname="main", qui permet de tester ta fenêtre directementet de ne pas exécuter ce code quand le module est importé.
00:38:03 :Donc ça c'est bien parce que comme ça tu peux tester ta fenêtre sans avoir besoin de relancer toute l'application au complet.Et c'est aussi une bonne indication je trouve que le script est bien faitparce que si en fait tu ne peux pas tester ta fenêtre de façon individuelle,
00:38:21 :ça doit être une indication que ton truc n'est pas super bien construit.Je m'explique, c'est que vous savez on dit souvent qu'il faut qu'une fonction ou qu'une entité en fait elle fasse qu'une seule chose,et donc si en fait pour que la fenêtre, pour ajouter les joueurs, pour qu'elle marche il faut lancer 4 autres scripts,
00:38:40 :ben en fait vous n'avez pas un truc qui est atomique, et c'est un peu cette idée là qu'on a dans les tests,et dans les fonctions, si la fonction en fait pour qu'elle fonctionne il faut qu'il y ait 15 fonctions qui soient appelées à côté,ben en fait votre fonction elle n'est pas isolée si vous voulez.
00:38:58 :Et après ça peut créer des effets de bord et tout ça.Donc déjà c'est ça, j'ai trouvé ça bien découpé.Toi je ne sais pas si tu avais, alors moi je n'y connais rien aux tarots,c'était la limite parce que j'ai ouvert le script et puis tu as plein de trucs avec des formules,
00:39:15 :les preneurs, les contrats, les bouts, les poignets, je n'y connais rien du coup j'étais un petit peu perdu.Mais bon je trouve que justement c'était quand même suffisamment bien découpé pour qu'on puisse quand même comprendre.
00:39:31 :Je te dirais, alors j'ai fait pas mal de changements, je vais les afficher, local change.Alors le premier truc que je te dirais c'est déjà de ne pas avoir peur de faire des noms un peu plus longs,ça on le voit souvent, tu avais par exemple je me rappelle des trucs qui étaient NB.
00:39:53 :NB je trouve que c'est la limite NB.Je vais mettre une petite fenêtre comme ça.NB voilà, NB joueur tu vois, tant qu'à avoir un truc, à la limite je te dirais soit l'un ou soit l'autre.
00:40:10 :Ce qu'on voit souvent c'est des gens qui vont mettre juste NB,puis à la limite tu te dis bon bah voilà là tu sauves vraiment de la place mais on ne comprend pas trop.
00:40:17 :Mais si tu mets NB joueur là t'es vraiment l'entre deux.Donc moi je dirais mets nombre joueur, ça prend 4-5 caractères de plus mais au moins on est sûr de ce que c'est.
00:40:26 :Parce que tu vois je dis ça parce que bon là on comprend que c'est le nombre de joueurs,mais sur les PT-GLM, GR-GLM, moi je l'imagine que c'est petit et grand.
00:40:39 :Mais tu vois là on rentre dans des trucs où je me dis ça se trouve c'est un terme de tarot, GR, je sais pas.Donc là c'était surtout une question de place dans le culte à budget.
00:40:51 :Ok ouais parce que là c'est des trucs que tu affiches.Après effectivement j'ai vu que, alors ça c'était une question que je me suis posé,parce que j'ai vu que tu avais fait un custom bouton et que tu lui donnais une taille minimum en fait.
00:41:08 :Et ça j'ai pas eu le temps de regarder précisément,mais ça m'a intrigué parce que normalement il y a une façon de faire pour que tout soit responsive un peu si tu veux.
00:41:21 :Et que t'aies pas besoin de faire ce genre de choses.En fait je crois que le but c'était la fenêtre d'accueil, je voulais qu'elle soit fixe en fait.
00:41:34 :Pour pas qu'on puisse la modifier la taille.D'accord ok, donc la fenêtre celle-ci là.Parce que... Ouais?Ouais ouais c'est celle-là, la fenêtre principale.Parce que en fait tu peux setter une taille minimale ou fixe sur ta fenêtre elle-même.
00:41:53 :Et après en fait les boutons ils vont suivre et ils vont prendre toute la place qu'ils peuvent.Et après il y a aussi des façons de justement spécifier,si tu veux que les boutons prennent le minimum de place possible, le maximum.
00:42:06 :Ça je sais pas si t'avais vu, j'ai refait la formation sur Dockstringet je parle justement de ça avec pas mal plus de détails que ce que j'avais dans la formation précédente.
00:42:18 :Je sais pas toi si t'avais vu, quelle version de la formation t'avais vue?Je crois que je l'ai vue celle dont tu parles sur les size policy.
00:42:25 :Ouais c'est ça, exact.Donc c'était je pense dans les bases ou notion intermédiaire je sais plus.Notion intermédiaire ça doit être là. Ouais voilà, size policy.
00:42:37 :Je vais le mettre dans le chat si ça intéresse les autres.Voilà.Donc oui effectivement il y a moyen d'avoir un truc responsiveet de t'assurer que t'es pas besoin de setter des tailles fixes.
00:42:52 :Mais après si tu veux setter une taille fixe, il y a moyen de le setter au niveau de la fenêtre.Et il y a même moyen en fait, ça je n'en parle pas dans les formations,mais j'ai pas mal de scripts d'exemples où je faisais ça,où en fait tu peux récupérer, donc tu utilises la taille de ton écran,
00:43:09 :tu peux même récupérer l'écran si t'as plusieurs écrans.Et après ça te permet en fait de, par exemple si tu voulais que ta fenêtre elle soit toujours centréeet qu'elle fasse la moitié de ton écran comme ça, bah c'est possible.
00:43:20 :Et du coup ça va s'adapter, si t'as quelqu'un qui a un écran 4K en 16.9ou un autre qui a un 16 par 10 en 2K, ça va s'adapter à chaque fois.
00:43:31 :Donc il y a des façons de récupérer ça.Normalement il y a vraiment moyen à chaque fois d'avoir des trucs comme çaqui sont responsive sans avoir besoin de fixer des tailles spécifiques.
00:43:41 :Alors après, dans ce que j'avais noté,Git log, hop,alors il y a ça que j'avais vu, ouais effectivement,si je m'en souviens,je peux pas y aller directement depuis là,je trouve assez rarement le git directement,je pensais qu'on pouvait y accéder, donc voilà.
00:44:06 :Il y a pas mal d'endroits où j'ai vu des trucs comme ça,des if, contra, égal ça, tu retournes ça,elif, égal ça, tu retournes ça.
00:44:15 :Alors là il y a plusieurs façons d'aborder, je crois que je l'ai fait,pour celui-ci je l'ai fait, il y a plusieurs façons de gérer ça,là je t'ai fait un exemple pour celui-ci.
00:44:25 :Donc là en fait tu avais un if, elif, else,donc si l'annonce c'est cette chaîne de caractère tu retournes ce calcul,si c'est cette chaîne de caractère tu retournes ça, etc.
00:44:36 :Moi j'aime bien utiliser des dictionnaires pour ça,parce que ça te permet de tout simplement, imagine que tu as un autre calcul,tu dupliques ta ligne, tu dis échec, et puis là finalement ça va être je sais pas,300 fois signe, voilà.
00:44:48 :Et là tu vois t'as pas besoin de refaire un elif, machin,parce que là tu répètes à chaque fois le annonce, égal, égal,annonce, égal, égal, à chaque fois t'as un if, elif, elif, elif,le return aussi, donc tu vois il y a pas mal de chosesqui sont répétées à chaque fois, alors que là tu répètes juste
00:45:04 :le truc que t'as d'un côté, le truc que t'as de l'autre,et après avec cette ligne ça va aller chercher ce qu'il faut.Et là t'as ton else en fait.
00:45:13 :Et puis c'est bien plus lisible en plus.Ouais bah après je trouve que ça dépend,moi je comprends qu'on puisse préférer des fois des if, elif,parce que je trouve que c'est quand même lisible,c'est si t'as ça tu fais ça, si t'as ça tu fais ça,alors que tu vois quand t'arrives premièrement là ici,
00:45:30 :tu te dis oula attends il retourne calcul, get, machin,c'est pas forcément clair, mais après, une fois que t'es habitué,tu comprends que tu vas récupérer un cas de figure iciet que tu le retournes.
00:45:44 :Donc ça c'est une des façons de faire.Il y a aussi un truc que tu peux regarder,c'est ce qu'on appelle les enum,donc c'est un raccourci pour énumération,et en fait c'est quelque chose qui va te permettre d'associerun nom à une valeur, et en fait ça te permet après,
00:46:02 :c'est une classe simplifiée un peu,donc après tu pourrais faire ça,tu pourrais dire par exemple if ma valeurégal à contra G, et ben tu fais quelque chose.
00:46:13 :Et ce qui est pratique avec ça, c'est que du coup c'est plus lisible,parce que là, je ne sais pas ce que c'est G et GS,alors justement là aussi,c'est garde, garde sans, garde contre.
00:46:27 :Ok d'accord.Parce que un des exemples qu'ils donnent par exemple,c'est l'exemple de la documentation sur les enum,j'aime bien, c'est avec des couleurs,et j'ai vu que tu avais des couleurs aussi,je ne sais plus où, je crois dans ton utils,ici voilà, blue, dark, orange.
00:46:43 :En fait le truc qui est bien avec les,là tu vois le problème c'est que ici,c'est un peu comme avec les classes aussi,c'est que là tu ne vas pas avoir de,par exemple de, d'autocomplétion tu vois.
00:46:55 :Là en fait si quelqu'un il veut savoir c'est quoitoutes les valeurs qui sont disponibles,ben il faut aller dans une liste,et une liste en fait c'est, une liste c'est générique,une liste tu vois,ça peut être tout et n'importe quoi,ça pourrait être des nombres, ça pourrait être,
00:47:09 :là dans ce cas-ci c'est des chaînes de caractères.Alors que si tu avais,donc je te dis l'exemple qu'ils donnent c'est avec des couleurs,donc en fait tu peux avoir après un red,un green, un blue, des trucs comme ça,puis après tu vas faire color.red,
00:47:23 :color.green,donc là tu vois c'est plus,c'est plus, comment dire,t'es plus, t'as moins de risque de te planter aussi,parce qu'en fait, genre imagine,attends je reviens là-dessus,là ton dark orange tu vois,imagine je me souviens plus si c'est un haut majuscule,ou si tu l'as mis comme ça,
00:47:44 :ou tu vois je sais plus comment tu l'as fait,ben là tu vois t'auras pas d'autocomplétion,si tu fais color graph et que tu vas prendreune valeur là-dedans,ben là il faut que tu te rappelles que c'est dark orange comme ça.
00:47:55 :Alors que quand t'as un enum,ben là tu vas avoir l'autocomplétion.C'est la, ouais, en fait c'est la notion de tipping,en fait Python de base est tippé faiblement,c'est-à-dire qu'il n'y a aucune obligation,enfin il y a peu d'obligations,là en utilisant un enum, une structure enum,en fait on rend,
00:48:14 :en fait on rajoute de la sémantique à Contra,ou à la structure,et on lui dit que les valeurs, obligatoirement,sont dans un ensemble qu'on définit.
00:48:23 :Du coup, après PyCharm là,en l'occurrence retrouve Septi,pour faire l'association entre la structure et les valeurs de la structure,et même à l'utilisation,c'est-à-dire à l'utilisation de la méthode,on peut plus faire d'erreur,c'est-à-dire que c'est à l'appel de la méthode,si on n'a pas le bon enum,
00:48:41 :en fait ça ne pourra pas tourner.Donc en fait tu remontes en amont,avant les ifs qu'il y a dans la méthode,est-ce que c'est ça, est-ce que c'est ça,même à l'appel, on ne pourra même plusfaire cet appel incorrectement,de manière incorrecte.
00:48:55 :Par contre, toujours pareil,c'est un peu plus faible,donc tu peux appeler avec n'importe quoi d'autre,par contre si tu utilises l'enum,tu seras obligatoirement dans un bon cas,mais tu peux mettre autre chose qu'un enum,parce que Python est faiblement typé.
00:49:09 :Là tu vois, effectivement,tu fais une comparaison avec une chaîne de caractères,donc imagine,tu as quelqu'un qui continue ton code,là encore, qui fait un autre check,contrat,et donc il fait une autre fonction,il est dans ton code,il fait le contrat, et là il n'est plus sûr,
00:49:27 :et finalement il met R minuscule,et là ça va planter,parce que toi tu avais décidé que c'était en majuscule,alors que si tu utilises lecontrat.g,
00:49:37 :il va te dire,tu as juste ces deux là qui sont disponibles,et donc tu limites le risque d'erreur.Tu limites le risque d'erreur,et puis c'est plus clair aussi,on sait que là, c'est les trois valeurs qui sont possibles.
00:49:49 :Alors que là, je me dis,peut-être qu'il y a plein d'autres valeurs,que je ne suis pas au courant, que je pourrais utiliser.Donc ça c'estun autre truc qui peut être sympaà regarder.
00:50:01 :Qu'est-ce quej'avais d'autre? J'avais d'autres petits trucs.Ah oui, celui-là il est intéressant.Là,ça je le vois très souvent,j'avais fait une petite vidéod'ailleurs sur Youtube, je vais vous la retrouver.
00:50:21 :C'étaitcinq trucs un peu comme ça,du genre.Je vais me mettre dedans.Alors,partiel.Je ne sais plus si,je crois que c'était peut-être dans les petites astuces.
00:50:37 :Ouais, c'était dans les astuces.Alors je vais vous passer la playlist directement.J'avais fait voilà, astuce piton.Comment on peut partagerla playlist?Playlist.Bon, je vais vous passerle lien.
00:50:57 :Hop.Donc,là je vous passe la playlist, là dansle chat c'est plein de petites astucescomme ça, sur justementdes trucs,des problèmes que je vois souvent, ou du codequi peut être fait différemment.
00:51:13 :Et donc là en fait,l'idée, si je reviens surle code, donc en faitc'est l'idée quemoi dès que je vois ça en fait, là quand tu fais une conditionen fait, ça ça va te retourner un boulet.
00:51:27 :T'es assuré quand tu fais un if,ce qui est sur laligne du if, ça te retourne soittrue, soit false. Il n'y a pas
00:51:35 :d'autres possibilités.Donc,en fait ça tu peux l'utiliser directement. Et donc c'est ce queje vais faire ici, c'est parce que là en faittu dis, donc si le texteil est égal à attack, point de l'attaquetu le mets à false, et sinon tu le mets à true.
00:51:49 :Donc là en fait tu vois queon a en fonction de ce résultat là,qui est un boulet 1, parce que là tu vérifies quequelque chose est égal à quelque chose, donc ça va te retournervrai ou faux.
00:51:59 :Bah en fait tu vas déjà avoir ton vrai ou faux que tu mets ici.Donc c'est ce que je fais là en fait,je fais tout simplement un boulet 1 is attackqui est égal à ça.
00:52:07 :Donc si le boutondu... le texte du boutonest égal à attack, bah ça va être vrai, sinon ça va être faux.Et ensuite là toi alorstoi tu faisais l'inverse, c'est à dire que si le boutonil est... s'il est écrit attack dessus
00:52:19 :bah le point de l'attaque tu le mets à falseet sinon tu le mets à true. Donc là j'ai justeinversé, j'ai dit not is attack.
00:52:25 :Donc si le bouton, le texte du boutonest égal à attack, point de l'attaque ça seraitégal à false, donc on est dans ce configure là.
00:52:31 :Et si bah il est paségal à attack ça va être faux, et doncon va faire not false, ça va être égal à true.
00:52:37 :Donc on fait ça.Et pour le set textej'ai fait une petite... du coupune petite... un opérateur ternaireoù je fais voilà, je changele texte, donc je mets def si c'est is attacksinon je mets at.
00:52:51 :Donc tu vois tout ça ici, on peut le remplacerpar les trois lignes ici.Ouais.Et donc ça c'est quelque chosevraiment, je crois que je l'ai vu, je vaisvérifier, je crois que je l'ai vu à un autre endroitaussi.
00:53:05 :Alors il y avait ça...Est-ce que c'était là?Ouais celui-là aussiil est intéressant.Ah oui, celui-là.Hop.Alors,là tu vois, toi t'avais fait ça.
00:53:25 :Donc là c'est pareil en fait.Là tu dis, alors c'est un petit peu, et ça aussij'en parle dans les astuces, c'est l'idée queles boolea en fait c'est un sous-typedes nombres entiers, donc ça c'est assez pratiqueet ça c'est un excellentcas de figure. Là en fait dans ton
00:53:39 :actif tu mets 1si la checkbox estchecked, et sinon tu mets 0.Et donc ça, qu'est-ce que ça va te retourner?Is checked ça va te retournertrue ou false.
00:53:51 :Et true en fait c'est un sous-type,comme je te disais, les boolea c'est un sous-typedes nombres entiers, donc vrai c'est 1et faux c'est 0.
00:53:59 :Donc en fait ce que tu peux faire c'est directement convertiren int, en nombre entier,le résultatde is checked, donc sic'est checked tu vas faire int de trueet ça va te retourner 1,et sinon ça va te retournerint de false, ça va te retourner 0.
00:54:15 :Et là je l'ai converti en intparce que je crois qu'aprèsj'avais regardé, toi tu voulais vraiment un nombreentier, après selon les cas de figure tu pourraismême enlever le int,puisque comme les...
00:54:27 :enfin ça dépend des cas de figure, mais des foistu peux te satisfaire du booleaparce que justement le trueça va être 1 et le false ça va être 0.
00:54:35 :Là si tu veux vraiment un nombre,tu fais juste convertir en int ton booleaet puis ça va te retourner 1 ou 0.Donc ça aussi c'est une façonplutôt que de faire un opérateur ternaire,t'as déjà un boolea ici,donc t'as pas besoin de faire ça en plus.
00:54:49 :Là il y avait d'autres suggestions,pendant que je suis là j'y pense,j'ai vu pas malde trucs comme ça dans le script, où en faitdepuis ta base de données tu vas récupérer des joueurset aprèsen fait le problème c'est queça va te retournerun dictionnaire, et c'est ce que tu fais aussi
00:55:09 :ici, voilà, tu vas insérertu vas récupérer un dictionnaireà partir du joueur et tu vas l'insérerdans ta base de données. Le problème c'est
00:55:17 :qu'au niveau de la lecture tu vois icion récupère pseudo crochet 0et alors là c'est vraiment le genre de truc oùsi tu vas pas regarder à quoicorrespond le premier élémentdans ta structure de donnéeson sait plus ce que c'est.
00:55:31 :Donc là c'est pour ça que je te suggérais de faire une classesurtout pour un utilisateurc'est clairement le genre de truc oùune classe va être intéressanteparce que ça tombesous le sens des attributs, ça va êtrele nom, le prénom,le pseudo, tout çaet en plus après du coup tu vas
00:55:55 :récupérer directementici des instances de ta classeet après tu pourras faireuser.pseudo par exemple.Et aussic'est ce que je conseillais icilà tu as 3 vérificationsou 2 seulementok ouais, tu en as juste 2ici tu as ça et çadonc là pareil, c'est le genre
00:56:17 :de truc où il faut penser que ton codeen fait au débutj'allais te conseiller de rajouter un commentaire parce queje me disais alors làqu'est-ce qu'il fait précisément, qu'est-ce qu'il veutvérifier, donc il faut que je lisetoute la condition pour comprendre ce que tu veux faire
00:56:31 :donc je me disais bon allez un petit commentaire pour direvérifier ça peut être pas malen fait je me suis dit là ce qu'il fautc'est mêmefaire une méthode sur tonjoueur, donc tu pourras direjoueur.isValid
00:56:45 :un truc comme çaet là du coup ce seraitclair directement, on regarde ton codeon fait if joueur.isValid tu continuesdoncif len self pseudoet machin.lower
00:56:59 :not in joueur.lower for joueurça, ça se lit tout seulet du coup tu n'as même pas besoin de rajouter de commentaire ou quoi que ce soitdonc pas hésiterà décomposer les chosesça fait en sorte quece sera plus clairet ce que tu te rends compte très souvent
00:57:15 :aussi c'est queau début on a peur de trop découper, on se ditattends je veux pas faire une fonction quifait juste deux lignesce serait un peu stupidemais en fait on se rend compte très rapidement quand tu prends l'habitudede faire ça au débutc'est que probablement que
00:57:31 :vérifier que le pseudo du joueuril est valide, tu vas avoir besoinde le faire ailleurs dans ton script, mais tu le sais pas encoreet donc en prenant les devantet en faisant déjà une fonction, même si elle faitdeux lignes, mais qui vavérifier ça, la prochaine fois
00:57:45 :dans ton script tu te rends compte quetu vas avoir besoin de faire çata fonction sera déjà là et tu vas limiterle risque de répéter du code ou de te direlà il faudrait que je découpedonc de commencer à penser comme çac'est souvent préférablen'hésitez pas à m'interrompre s'il y a des questions
00:58:03 :accessoirementau test unitairelà tu pourrais tester juste la partie, est-ce que mon joueurest valide, alors que là c'estlié intrinsèquementà un autre type de validitéliée à la base de données ou quelque choseça on s'en rendcompte très souvent dans lesc'est un problème que je vois souvent avec
00:58:23 :Django par exemple, où les gensils vont faire dans lesign up ou dans le loginen fait dans le sign up il y a souvent pas mald'étapes, donc tu vas justement vérifier si lesmails, le mot de passe, donc tu as pas mal d'étapes devérification, après tu as des
00:58:37 :je sais pas, tu vas envoyer un mail de confirmationetc, et en fait les gens fonttout ça dans unefonction, et en fait on se rend comptequ'après tu as besoin detu veux peut-être faire un sign up d'unepersonne différemment sans passerpar cette fonction justementqui fait toutes ces vérifications, et c'est là
00:58:55 :que tu te rends compte que tu as besoin de tous ces trucs làmais de façon séparée, et queà un moment tu vas avoir besoin de vérifier si la personneelle a, sison pseudo est valide, maisen dehors du processus de sign upC'est la même notion qu'une phrase en français
00:59:09 :quand tu mets trop de virguletu regardes la phrase si t'arrives à respirersi pour énoncer ce quetu vas faire, tu t'arrives pas à respirerc'est que t'as sûrement un problème de découpeEtles tests, comme tu disais, les testsc'est génial pour ça parce quec'est vraiment à ce moment là qu'on se rend
00:59:27 :compte que voilà, qu'en faitnotre code n'est pas testable, parce que commetu dis, là on se dit bon bah, commentje teste que mon joueur est valideLà on se ditil faut que je passe dans cettefonction valider pour vérifiersi le joueur est valide, et en fait on se dit
00:59:43 :bah non, en fait, làje fais plusieurs trucs, donc en faitparce que là tu vois, tu fais aussi de l'interfacetu clears le truc et tuémets un pseudo et tu ajoutes le joueur dans la basede données, donc là tu vois t'as troistrucs qui se passent ici, t'ajoutes le joueur, tu vérifies
00:59:57 :s'il est valide, tu récupèresses informations et tu fais de l'interface graphiquedonc tu vas pas pouvoirtester tout ça. En plus c'est mauvais signe
01:00:05 :quand t'as, bah là on revientsur la notion de donnéeslà par exemple t'as trois types detrois types de visualisationde la donnée ou stockage de la donnée, t'as la versionDB, la version front, c'est à direl'interface, et même la versionmemory in memoryet là en général quand t'as un truc
01:00:23 :qui manipule mêmelimite plus que deux, c'est que t'as un trucqui va pas. C'est aussi pour çaqu'il faut se poser, surtoutaprès effectivement quand t'as de l'interface, il fauttoujours se mettre dans une, il faut toujourspenser que l'interface n'est pas là en faitet se dire imagine demain t'as pas
01:00:39 :le bouton sur lequel tu vascliquer qui va appeler cette fonction, commenttu peux quand même ajouterà un joueur. Là tu vois actuellementon a cette fonctionqui permet d'ajouter le joueur dans la base de donnéesmais dans cette fonction la vérificationelle est pas faite. Donc
01:00:55 :c'est pour ça qu'effectivement il faut se poser la questionsi j'avais pas le bouton et l'interfacepour le faire, comment je le ferais sans ça.
01:01:01 :Ensuite,si je reviens là-dedans, j'avaisd'autres petits trucs,ça on avait vu, ça on avait vu,ouais alors ça c'est un truc que je voistrès souvent et d'ailleurs il y a Djangoa un truc très pratiquepour ça, parce quelà en fait ce que t'avais faitc'était
01:01:21 :ça.Donc sile nombrede joueurs sélectionnésest plusgrand que 1, tu mets le nombrede joueurs sélectionnés, tu mets un S et sinontu mets pas de S. Et moi
01:01:37 :ce que je fais généralement pour ça c'estdirectement un opérateur ternairedans un ifstring.C'est un peu chiant parce que ça allongevachement la chaîne de caractère juste pour mettreun S, mais là tu vois on resteavec une seule ligne au lieu de 4.
01:01:51 :Donc en fait ce que je fais c'est qu'à la finje dis tu mets la chaîne de caractère Ssi le nombre sélectest plus grand que 1, sinon tu mets une chaînede caractère 8. Et là il faut
01:02:01 :juste faire attention auxguillemets simples et doubles pour pas quetu fermes l'un avec l'autre et tout.Et pour que je parlede Django, parce que Django ils ont un truc qui s'appellePluralize, comme ça.
01:02:13 :Et donc en fait tu peuxça va faire en fait cette vérificationlà, tu vas lui passerun élément et en gros il va regardersi l'élément il y en a plusque 2 ou plusil va mettre un S et sinon il va pas le mettre.
01:02:27 :Tu peux même spécifier ce que tu veux mettrepour le pluriel si jamais c'est pas un S,si c'est AUX par exemple tu pourras le spécifier.
01:02:33 :Et je me suis toujours dit que ça serait pratiqued'avoir ce petit truc là en dehors de Djangoparce que c'est vrai qu'on voit souvent çale besoin juste defaire une phrase correcte en fonction dunombre de trucs sélectionnés.
01:02:45 :Ah oui il y avait ça aussi.Un autre... Ah une question......Ok, donc......Oui, ça ici,voilà, là t'avaisça ici. Alors ceci c'est
01:03:07 :intéressant parce qu'on est dans lemême cas de figure même si on a un truc quisemble plus complexe.Là encore, rappelez-vousà chaque fois ici vous allez avoirTRUE ou FALSE.
01:03:19 :Ça peut pas être autre chose.Même si c'estune chaîne de caractère, même si c'est...Parce que des fois on fait ça, on dit par exemple on va avoirpseudo égal à...
01:03:29 :...Romain, je sais pas, ça fait trois fois que...Ok, je sais pas,il y a Romain qui a du mal à rejoindrela salle je crois.
01:03:41 :Bon, je vais continuer, c'est pas grave.Donc,là ce que je disais, des fois en faitvous allez avoir ça, effectivement on a l'impressionqu'il n'y a pas un bool et un.
01:03:53 :On pourrait se dire ici, bah làen fait non, tu fais juste IF pseudo,là ça va pas être TRUE ou FALSEparce que pseudo c'est une chaîne de caractère.
01:04:01 :En fait ce qu'il faut comprendre c'est que quand on met çaici, il va faire l'interprétationen bool et un de pseudo.Ce qu'il va faire c'est qu'il va vérifiersi bool de pseudoça renvoie TRUE ou FALSE.
01:04:13 :Et donc c'est pour ça queon vous dit souventsi vous voulez vérifier en fait siune variable ou une liste contient quelque chosevous n'avez pas besoin de direIS TRUE.
01:04:25 :Vous pouvez juste mettre le pseudoet en fait ça va...Si il y a quelque chose dans la chaîne de caractère,une chaîne de caractère qui contient au moins un caractèreça va être évalué comme VRAIet une chaîne de caractère vide ça va être évalué comme FAUX.
01:04:37 :Donc même dans des cas de figure comme çail faut bien comprendre que ça va être soit TRUEsoit FALSE.Donc là dans le cas de figure qu'on avait c'étaitça.
01:04:47 :Et en avantça.Alors déjà ça c'était bien par contreeffectivement on peut faire ce genre de vérificationparce que ce qu'on voit souventc'est des gens qui vont direIF 2est plus petit que NUMBERSELECT ANDNUMBER SELECT plus petitque 7.
01:05:09 :Un truc comme ça et en fait on peut simplifier en mettantdirectement entre les deuxcomme ça.Mais donc ça, ça va retourner TRUE ou FALSE.
01:05:17 :Si on a le nombre ici qui est 3, 4,5 ou 6ça, ça va être VRAI. Et donc là qu'est-ce qu'onfait en fonction de si ça c'est VRAIon fait un SET ENABLED TRUE ou FALSE.
01:05:27 :Donc moi ce que j'ai fait ici c'est que j'aijuste mis la conditiondonc ça ici dans le SET ENABLEDdonc si on a une condition qui est VRAIEça va être TRUE et sinon ça va être FALSE.
01:05:37 :Et il faut se direque si on voulait faire l'inverse, on pourrait très bienmettre NOT tout ça.Il n'y a pas de soucis.Si le problème, si la raisonpour laquelle vous faites ça c'est parce que finalementlà c'est l'inverse, qu'on a FALSE et que là on a TRUE
01:05:51 :il faut toujours penser qu'on peutinverser un boulet 1. Donc là on a une conditionon peut faire NOT ça et ça vainverser. Si on avait TRUE ça va être FALSE, si on avait
01:05:59 :FALSE ça va être TRUE.Donc là encore une façon de ne pas avoirun IF-ELSE avec juste une condition comme ça.Est-ce que ça va?
01:06:09 :Je crois que Romain n'est plus là.Mais bonil verrala redif.Doncqu'est-ce qu'il y avait d'autre?Alors ouais il y avait çaet ça je l'avais mis effectivement.
01:06:29 :Ça aussi c'est quelque choseque je vois assez souvent.Donc le code c'était ça.C'était liste égale à ça.Et donc moi j'ai mis comme commentaire liste trop vagueliste de quoi?
01:06:43 :Quand vous mettez liste, listeça veut dire tout et n'importe quoi.Une liste ça peut être une liste de bananeou de joueur ou de je sais pas quoi.
01:06:51 :Donc quand vous mettez juste listec'est pas du tout explicite. Donc moi je l'ai remplacépar SELECTED PLAYERSpour être le plus précis possible.Au début j'avais mis PLAYERSet en fait je me suis rendu compte que non parce que là en fait il varécupérer la liste des joueurs
01:07:05 :qui sont sélectionnés. Donc c'est pas justesi on met PLAYERS ça peut indiquerque c'est tous les joueurs qui seraientdans la partie.Alors que là c'est pas le cas, c'est vraiment les joueursqui sont sélectionnés. Donc n'hésitez pas à mettre
01:07:17 :SELECTED PLAYERS. Il vaut mieuxmettre des noms qui sont un peu longs mais qui fontque voilà après c'est très clair de quoion parle. Et après
01:07:25 :alors là, bon Romain est plus là du coupdoncil pourra plusil pourra pas m'expliquer parce que j'avaislà j'ai vu ce code là et je me suis ditoula à mon avis il y a des façons mieuxde faire ça mais j'ai pas trop compris ce qu'il voulait faire
01:07:39 :en fait. Est-ce qu'il récupère lepseudo, ça c'est un 7 donc il faitune différence entre deux 7et du coup il veut récupérerun ordre avec ça mais j'ai pas trop comprisquelle était la finalité. Donc
01:07:51 :j'ai pas amélioré le code maisexcuse-moiest-ce que Romain c'estroquette? Ouais c'est ça.Il vient de mettre dans le discordje suis en salle d'attente du stream.
01:08:03 :Ahbahje le vois pasparce que je l'ai vu sortirrevenir.C'est débloquéla salleok RomainOuais c'est bizarresalleest-ce que salleverrouillée okJe suis désoléJe suis désoléNon mais t'as bien fait de me le direparce que j'avais vu qu'il aillej'ai eu la notification 3-4 fois qu'il essayait
01:09:13 :de... Ah voilàc'est bon Romain? Il est développeur Romain ouil commence?Moi j'ai commencé enc'était quoi? 2020 avec leCovid. Ah d'accordOuais. J'ai découvert
01:09:29 :un article qui parlaitdes formations de Thibaut sur Udemyj'ai commencé comme çaet puis depuispar-ci par-làje m'exerce. Ok oknon mais parce qu'il y a un gap entretoi et moi, je me suis dit s'il acommencé en même temps que moi, ça craint?
01:09:47 :Aprèslà l'applicationTaroelle existe en versionExcel VBAdepuis bien 10 ans maintenantAh d'accordOuais t'avais reprist'avais déjà un brouillon dela façon dont ça fonctionnait en faitOuais. Ouais ok
01:10:09 :Désolé, je sais pas, j'ai vu que t'avaisessayé de rentrer dans la salle et j'ai cliqué suroui mais après t'étais plus làj'ai déverrouillé, normalement c'est bonIl y a quelques membresde la famille qui sont arrivésil y a eu perte de... Ok
01:10:23 :de raison. Ok d'accordmais tu pourras regarder larediffusion si tu veux, j'expliquaistrois trucs là sur les noms de variablesque je disais qu'il fallait pas avoirpeur d'être explicite aussiparce que t'avais une variable qui s'appelait listet je disais que list ça peut êtreenfin tu vois c'est large
01:10:41 :une list ça peut être une list de joueurset que même je disaisau début je l'avais mis playerset en fait là c'est vraiment une listde joueurs sélectionnés, donc j'ai misselected players, donc faut pas hésiterà être verbeux sur les noms de variableset aprèsje disais aussi que je voyais ton code
01:10:59 :là et j'avais l'impressionque on pouvait faire mieuxmais j'ai pas trop compris en faitce que tu voulais faire avec ça, j'ai compris que tu voulaismettre un ordre en fonctiond'un pseudo et que là tu utilises des setspour du coupfaire des opérations mais j'ai pas eu le temps
01:11:15 :de te tester doncà mon avis il y a moyen d'améliorerOuile but c'est de savoir dans quel ordre ont été sélectionnésles joueurs pour après les afficherc'était juste cosmétiquemais les afficher dans le même ordreaprès dans la fenêtre suivanteD'accord ok, donc tu veux savoir
01:11:33 :dans quel ordre ont été sélectionnés les personnesc'est vrai que je réfléchisdans Qtest-ce qu'il y a un moyen plus facile de savoir çaouais je regardeje vais me mettre une petite noteme semble que c'est un trucqui est assez courantje vais me mettre un petit mot
01:11:55 :dans un...je regarderai ça et je te reviendrailà dessusà mon avis il y a moyen de faire plus simpleet salut Camj'ai répondu à ta question tout à l'heureenfin j'ai réponduj'ai essayé de... enfin c'est ce qu'on disait
01:12:11 :c'est une réponse un peu difficileparce que c'est effectivement assez généralmais tu pourras regarder la rediffusion si tu veuxj'ai fait un petitpavé de 5 minutes de réponselà dessus si ça t'intéressedonc je reviensje crois que ça faisait pas mal le tourde ce que j'avais noté, je vais vérifier
01:12:31 :s'il n'y en a pas d'autresdonc ça on avait vul'ajout du joueur on avait vuje te conseille vraiment de commencerà penser en classe aussià mon avis ça va permettre de bien simplifierle codeoui puis à niveau tout ce qui estbase de donnéeslà dessus j'ai pu voir
01:12:51 :des webinaires de Thierrysur PureBearoù toutes ces tablesen fait sont une classe à chaque foisdonc là je voulais retravailler çacomme çaet après n'hésite pas à regarderparce que j'ai vu queje trouve ça très bien de mettre les mains dedansparce que j'ai vu que là du coup t'as vraiment fait les trucs
01:13:11 :je crois que c'est dans les utilsen SQL et je trouve ça intéressantde manier du SQLparce que ces notionsde Primary Key, deForeign Key, de Integer, de Not Nullenfin de comprendre comment la base de donnéesest faite derrière c'est intéressantles Auto-Incrementtout ça c'est des termes que tu vas rencontrer
01:13:31 :ici et là même si au finaltu utilises un ORMaprès je pense que ouais ça seraitsi tu veux vraiment pousser le projet un peu plus loinet puis avoir un truc qui est plus faciletu commences à regarder des ORMcomme SQL Alchemyqu'est-ce qu'il y a d'autre?
01:13:47 :il y a Peeweequi est pas mal, qui est un peu plus simpleil y a pas mal d'ORM qui sont assez coolet ça permetaprès de garder justementd'un peu fusionner les deux parce quele risque que si tu commences à faire de l'Orienté Object des classes
01:14:01 :et que tu gardes des trucs SQL comme çac'est que soit tu vasun peu avoir la même chosedes deux côtés, soit tu vascommencer à justementintégrer du codeSQL dans tes classesalors qu'avec un ORMc'est l'idée de l'ORM c'est que du coup tes classesvont directement représenter la structure de ta base
01:14:21 :de données, donc en fait tu fais un peud'une pierre deux coupsc'est quelque chose que tu vois très rapidementquand tu fais du Django ou de basetu utilises l'ORM de Django et du couptu utilises des classes Pythonqui représentent les éléments de ta basede données et du coup c'est
01:14:37 :c'est assez simpledès le départ mais c'est bienquand même de passer par ça au débutdu coup oui sinonà part çasinon c'était bien, c'étaitcomme je te disais c'est bien bien découpéil y a encore pas mal d'endroitsoù je pense que tu peux découper encore plus
01:14:57 :comme on disaitet pas hésiteret en découpant tu vas te rendre compte que justementj'allais dire aussi effectivementde pas hésiter que ce soitpour toi ou pour d'autres, tu vois moi j'arrive dans le scriptil y a plein detrucs où forcémentsi tu connais pas le tarot
01:15:15 :c'est sur des projets comme ça, ça complexifie un peuparce que t'es sur des problématiques déjàoù c'est quelqu'un qui connait pasle tarot même si tu mets des docstrings partoutça va pas forcément faire toutle travail mais quand même tu vois icide rajouter un peu plus de docstrings
01:15:29 :comme tu l'as fait icide pas hésiter à expliquer un peu plusle code avec des docstrings ça peut être pas malsinonouais sinon je réfléchisen général dès que t'asune... ah oui tiens ça tu regarderas
01:15:47 :dans la rediffusion je crois que t'étais pas là quand je l'ai expliquémais c'est un peu la même idéeque tu peux éviter 4 lignesici avec une ligneenfin ouais dès que tu commences à voirmoi dès que je regarde le codeet que je voiset que je commence à voir
01:16:03 :ça ça va encoremais dès que tu commences à voir plus que 10ou 15 lignes dans une fonction moi y'a uneindication que ça peut êtreséparétu vois là icivérification complète bon alors là y'a pasmal de choses qui sont de la récupération d'informationsdonc c'est normal dans ce cas là que ce soit
01:16:21 :que ça puisse être assez verbeuxalors que tu fais juste récupérer des infosmais ce que jetu vois je me dis quand même que comme je disaistout à l'heure si tu as besoinde récupérer toutes ces infos ici c'est probablequ'à un moment tu vas avoir besoin de le faire ailleurs
01:16:35 :donc en faisant directement une fonctionici d'ailleurs dans PyCharmtu peux très facilement extraire des trucs comme çasi tu fais un refactor tu peux direextract methodet là tu vas dire par exemple getvalues fromet là tac tu vois il t'a tout foutuiciet donc tu vois en faisant ça déjà
01:16:57 :et enen extrayant déjà destrucs comme ça pour pasavoir tout plein de lignes de codebah peut-être qu'à un autre endroit tu te dirasbah oui en fait là je me retrouve à devoir récupérertoutes ces informations ici et ta fonctionbah du coup elle est déjà faite et t'as plus qu'à l'utiliser
01:17:13 :donc ça évite de répéterdes chosesvoilàdonc ça fait à peu près le tourah là aussije me dislà aussi desénumérations ou de l'orienterobjet à mon avis ça permettrait de simplifier çaaprès ouais là y'apas mal de trucs d'interface donc les trucs d'interface
01:17:37 :add widgets to layout c'est normal que ce soitassez verbeux aussi ça c'est pasça tu peux pas tropl'éviter c'est une création d'interfaceet c'est le genre de truc que si tu le faisais pas en code tu le feraisdans QtDesigner doncça c'est normal que ce soit long
01:17:51 :hopest-ce qu'il y a des questionsCamille j'allume le microune fois le chat nourrije comprenais pas je pensais que tu parlais du chatpourquoi elle veut nourrir le chatle chat nourri d'accorddonc ouaisvoilà ça faisait un peu le tourde ce que j'avais vu qui m'avait un peu
01:18:23 :sauté aux yeux mais sinon le restec'est vraiment bient'as un truc très solidedonc après c'est juste de l'améliorationsur ces petits points làouais bah mercipour toutes les astucespas de soucis et hésite pas à revenir du coupsi t'as un nouveauune nouvelle version d'ici là
01:18:45 :okest-ce qu'il y avait d'autres questionsgénérales qu'on n'avait pasabordéessinon bah pour ce Yacineje crois du coup pour ta question sur le scrappingdonc je vais mettre la rediffusionce soir là donc tu pourrasvoir ce qu'on a dit à propos de tout çaet les pistes de bibliothèque
01:19:09 :et de choses à aller voirCamille aussi du coupon a répondu un petit peuje met des chapitres à chaque foiscomme ça vous pouvez aller directementaux parties qui vous intéressent sur la vidéotopmerci, salutc'est bon le chat est nourrile chat est nourri, il a arrêté de chanter
01:19:29 :je peux prendre la parole sereinementc'est bonmerci pour la réponse du coupj'avais un peu de retard donc je reprendrai le train en marcheavec plaisirje mets ça ce soir là, je le fais tout de suite aprèset je le mets en ligneoui la question était peut-être un peu floue
01:19:45 :non bah c'esten général mais d'une certaine manièremalgré toutje pense qu'on est beaucoupà se poser la même question en faitouais bah c'estje vais pas refairetoute ma réponse mais ouais c'estun mix de tempsde problèmes précisde découpage, d'expérienceexactementet aprèseffectivement ouais si t'as des
01:20:13 :cas précisce qui est intéressant je trouve au delà de çac'est parce que ce que je disais dans ma réponse c'est que si en faitle problème même quand on a des cas précis c'est queon va tous quand même penser différemmentdonc même quand tu prends un cas précis
01:20:25 :et que tu l'expliques et que tu montres comment l'aborderbah en fait en regardant le truc tu vaste dire bah oui effectivement c'est logiqueet finalement quand toi après tu vas retourneravec un problème que tu vas rencontrerbah tu vas retomber dans le murà pas savoir comment
01:20:39 :l'aborder parce qu'il va falloirdévelopper ses propres façons de résoudre les problèmeset d'aborder un problèmemais ce que je trouve intéressant c'est justementdemultiplier ces exemples làet c'est ça aussi qui est intéressant c'est dequand même quand t'as des exemples comme çade voir comment différentes personnes résolvent
01:20:57 :les problèmes et petit à petittu vois tu vas peut-être te dire ah tiens çaj'adhère à cette façon de faire ette rendre compte que c'est comme ça que toi tu fonctionnestu voisj'ai un trucdont je viens de faire l'expérience récemment parce queon a recruté du renfort
01:21:13 :dans la boîte et du coupil y a quelqu'un avec qui je bosse de temps en tempset on croise les regards et en fait je me rendscompte qu'on aborde pas du toutla même problématique de la même manièredonc je memettrais jamais dans ses bottes ni dans ses chaussures ni quoi que
01:21:27 :ce soit ni dans sa tête mais par contrede temps en temps je vais le voir en modebon j'ai tiré toutes mes cartouchesj'ai plus rien je suis à boutje peux me dire comment t'envisages le truc et là d'un seul coupje me dis ah ouais mais là il attaque le truc
01:21:39 :mais j'aurais jamais attaqué de cette manière là en faitet là par contre c'est top quoiBah des foisil y a deux trucs des fois effectivement il fautrembobiner en fait des foison part dans une direction et en faitil fautil faut repartirau début et faire table rase
01:21:57 :et essayer une autre approcheet après il y a effectivement c'est le fameuxrubber duck làje pense que ça c'est un truccomplètement sous estiméon a beau le savoirje me rappelle le nombre de foisde moins en moinsmaintenant mais ça m'arrive quand même encoreaprès plusieurs années d'expérience
01:22:17 :mais au début c'étaitflagranten fait j'avais un ami qui faisaitun petit peu de programmation aussimais très très très peumais du coup à chaque fois j'allais lui parlerde mes problèmes de programmation parce que je savaisquand mêmequ'il savait à peu près de quoi je parlais
01:22:35 :mais finalement il avait jamais la réponse et au finalil comprenait jamais rien parce quec'était quand même beaucoup plus avancé que son niveaumais c'est pas grave parce qu'en fait juste le fait de lui parleret d'avoir quelqu'un qui m'écoutaitgentiment et qui prenait le tempsde m'écouter parler
01:22:49 :exposer son problèmeet donc ça rejointun peu ce qu'on disait dans le découpage de problèmeparce qu'en fait sans t'en rendre comptetu le fais mais quand tu parles à quelqu'un tu disen fait voilà j'ai essayé de faire ça et là j'ai essayé çaet en fait en faisant ça à un moment
01:23:03 :tu te dis ah mais je suis con mais j'ai pas pensé à çamais en fait maintenant c'est clairje suis pas parti dans le bon trucou alors j'avais pas pensé à ça et c'estincroyable quoila lumière s'éluvepour ceux qui ne connaissent pas le rubber duck
01:23:17 :c'est l'idée que tu prends un canardet tu le fous sur ton bureau et du coupcomme pour éviter d'aller embêter tes collèguesqui ont peut-être autre chose à fairetu parles à ton canard en faitet juste d'avoirun pointparce qu'effectivement quand t'es tout seul face à ton écran
01:23:33 :tu vas pas te mettre à parler à ton écran c'est un peu bizarremais quand t'as un collègue à côtéc'est plus naturel tu vas lui parleret puis tu te rends compte que tu résous ton problème comme çadonc voilàfaut soit embaucher un collèguequi va faire le
Aucune occurrence trouvée pour « ».