Comprendre les opérateurs binaires en Python
Session du 19 février 2022 à 18h00
Bases du Langage
Librairie Standard & Modules
Pratique & Live Coding
DevOps & Environnement
Fichiers & Système
Veille & Discussions
Deviens membre Premium
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- +100h de formations
- +180 exercices de code
- +100h de mentorats en rediffusion
- 20 projets
- Mentorats groupés hebdomadaires
- Support individuel avec nos mentors
Comprendre les opérateurs binaires en Python
Discussion sur les opérateurs binaires
Exemples & solutions d'étudiants
Discussion sur les tests techniques & certificats
Gestion des fichiers avec Python et Windows / Mac / Linux
Support écrit du mentorat : https://docstring.notion.site/12-f-vrier-2022-0b577eb563b64c5f8f3bd921373dc98c
00:00:00 :On peut voir sur Python comment on peut faire des opérations sur des bits,qui fait quelque chose qui te parle bien ou non.Oui, oui, bah oui, t'as dû voir mon tweet d'hier du coup.
00:00:13 :Très utile les bits, les opérateurs bits amis.Bah écoute, pour le coup, la certification t'aurait servi.Mais en plus, je sais pas, est-ce que c'est toi?
00:00:25 :Il y a quelqu'un qui m'a parlé de ça, qui m'a répondu justement que c'était pas mal utilisé,je sais plus si c'était sur Twitter ou LinkedIn, que c'était utilisé pas mal dans l'IoT.
00:00:35 :Ouais, je sais pas.Mais tout ce qui est décalage de bits et tout ça, en fait pour l'instant ça me parle pas beaucoup.Mais j'essaye de vraiment rentrer dans le sujet.
00:00:48 :C'est pour ça que... Comment ça t'aime?Ah bah, écoute, finalement, je vais supprimer mes tweets d'hier du coup.Mais en vrai, c'est ce que je disais, je l'ai dit de façon peut-être pas très diplomatique,mais j'avais la question sincère de savoir si vraiment, en me disant,si ça se trouve il y a peut-être des domaines dans lesquels justement je sais pas que c'est utilisé.
00:01:16 :Et puis apparemment, effectivement, il y en a. Donc c'est des domaines quand même très spécifiques.Ça reste vrai que, effectivement, tous les gens que je connais qui font du Python,je sais qu'ils connaissent pas ces opérateurs-là.
00:01:28 :Après, effectivement, là sur ces opérations avec les bits, tout ça, les bitwise opérateurs,opérateurs binaires, c'est ça en français?Là tu reviens au... Bah juste la théorie de base de tout ça.
00:01:47 :Moi je me rappelle juste de ces trucs-là du collège ou du lycée avec le 1,puis après le 2, le 4, le 8, tout ça qui double à chaque fois.
00:01:55 :Et après, effectivement, là-dessus, personnellement, je pourrais checker un peu si t'as des questions plus précises.Après, n'hésite pas à les poser.Je pense que Thierry, toi t'en avais fait un petit peu, non?
00:02:05 :Tu m'avais dit que t'avais des collègues qui l'utilisaient, c'est ça?Moi j'en fais, et pour les mêmes raisons.Avec nous, on accède pas mal à du matériel également, parce qu'on travaille justement sur des systèmes qui acquièrent des données,différents types de données, de température, de débit, sur des installations de production, dans une gale de fabrication.
00:02:29 :Et donc, effectivement, on reçoit des données, souvent des flux binaires de ces différents appareils.Donc dans ce domaine-là, plus on s'approche de la machine, plus c'est utile.
00:02:40 :Et comme Python est quand même à super large spectre, c'est-à-dire que ça touche autant ce domaine-làque finalement un site web de très haut niveau qui permet de faire un blog,on se retrouve avec, effectivement, si on fait un site d'e-commerce en Django,ou si on fait un blog en Django, on voit pas trop à quoi ça peut servir.
00:02:59 :Et puis si on fait du IoT, alors là, on s'en sert pratiquement tout le temps.Et donc c'est bien que ça touche. Finalement, on a des outils pour toutes les applications.
00:03:10 :Et puis c'est ce qui fait aussi que Python est aussi largement utilisé.C'est marrant, parce que tu sais, c'est ce que j'avais dit, je crois que c'était sur LinkedIn,justement, que j'avais l'impression, j'avais la fausse impression, du coup, que justement,si quelqu'un avait besoin de faire des opérations à ce point-là, plus proche de la machine, on va dire,
00:03:29 :je me disais, ces gens-là ont besoin, généralement, moi j'avais en tête un besoin de performance aussi,alors que c'est pas forcément lié. Mais je pense que c'est aussi parce que je sais pourquoi,
00:03:40 :c'est que j'avais un prof, la seule fois où j'ai eu un prof de Python dans ma vie à l'université,quand on était en effet visuel, donc c'était pas un prof vraiment de programmation,mais lui il faisait de la recherche dans les trucs de métallurgie, etc.
00:04:02 :Et donc lui, du coup, il utilisait du C, enfin un truc comme ça, je sais plus si c'était le C précisément,parce qu'il avait des besoins très importants de performance, et du coup, tous les cours qu'il nous donnait,c'était des trucs indigestes comme ça, où à chaque fois on se disait, mais à quoi ça sert, quoi.
00:04:18 :Donc c'était un peu... Du coup, moi j'avais cette impression que forcément, quand on était dans du binaire,des trucs comme ça, c'était forcément, enfin probablement plutôt avec d'autres langages,mais apparemment, comme tu dis, c'est la force de Python aussi.
00:04:32 :Non, parce que parfois ça se fait par le réseau, par exemple, tu as un appareil, et puis tu veux lui communiquer,tu as trois variables, qui peuvent les trois être vraies. Alors toi, avec Python, tu vas renvoyer vrai, vrai,
00:04:44 :et puis du coup, tu vas renvoyer 32 bits, où il y a 31 0 et 1 1, et puis une deuxième variable avec 32 bits de 0 et 1 1,alors qu'avec un opérateur binaire, tu peux juste renvoyer 1 1 1, 8, et puis, du coup, ta trame réseau,
00:05:04 :elle est clairement beaucoup plus efficace à transmettre. Donc si tu fais du temps réel, ça change la donne quand même.Et puis là, on parle juste de trois variables. Alors si tu as beaucoup plus de données qui vont transiter,
00:05:17 :voire même des données vidéo, ou des trucs comme ça, là, ça devient quand même vachement utile.Après, ça peut devenir très spécialisé, et puis, quelque part, si tu es là-dedans, c'est que tu bosses pratiquementtoute la journée dans les bits, alors il faut voir à qui s'adresse la certification.
00:05:36 :Oui, c'est ça, c'est un peu comme si d'un coup, dans une certification générale, pour voir si tu maîtrises Python,tu mettais un truc très précis sur l'ORM de Django, là, tu te dirais, oui, moi, j'ai jamais vu ça.
00:05:47 :Donc, oui, c'est... Alors Yacine, du coup, tu as une question sur...En fait, en industrie maintenant, ce qui est bien, c'est que Python, il se répond très rapidement.
00:06:01 :Alors qu'avant, on faisait tout en C, et du coup, il suffit maintenant de valider, on va dire,il y a des systèmes embarqués ou des applications embarquées, il y a des tests automatisés,et pour ça, on utilise Python.
00:06:17 :Oui, et puis j'imagine que, enfin, c'est ça, là encore, dans tous ces trucs-là, il n'y a pas...Enfin, c'est aussi ça qu'on dit, tu sais, on parle souvent du fait que Python est lent,et puis alors, il y a lent et lent, quoi, dans le sens où c'est sûr que, même si c'est lent,
00:06:30 :souvent, dans la plupart des opérations qu'on fait, quand même, on est de l'ordre de la milliseconde.Effectivement, peut-être qu'en C, tu vas être de l'ordre de la microseconde, mais donc pour plein de cas de figure,en fait, que ton code, ils mettent 100 millisecondes ou 1 milliseconde à exécuter, ça ne change rien, quoi.
00:06:46 :Et après, effectivement, dans des cas très précis, là encore, tu vas avoir besoin de trucs beaucoup plus rapides.Mais j'ai vu, d'ailleurs, il y avait...
00:06:54 :En fait, ce n'est pas que la rapidité, en fait, il y a autre chose.C'est que c'est surtout l'espace mémoire.Parce que, tu sais, en Python, quand tu déclares une variable, forcément, on va réserver une mémoire qui est plus grande que la taille de la variable.
00:07:10 :Oui, du coup, dans l'IoT, c'est sûr que c'est...Donc, obligé de gérer ça au cas par cas.Ouais, mais tu vois, j'ai vu quelqu'un qui tweetait, justement, c'était assez intéressant,il parlait des VPS et le fait qu'en fait, avec un serveur, par exemple, tu vas sur DigitalOcean,tu prends le truc de base qui est à 5€ par mois, et tu peux déjà, ce petit truc-là, ça peut déjà gérer un million de requêtes.
00:07:36 :Donc, il disait pareil, en fait, tu as bien, enfin, tu as vraiment le temps, quand tu auras un million de requêtes,de trouver une autre solution.
00:07:45 :Pour l'instant, tu peux prendre le petit truc à 5€ et puis ça fera l'affaire.Donc, c'est souvent ça aussi.C'est un truc que je vois très souvent avec le web aussi.
00:07:55 :C'est des gens qui passent beaucoup de temps à penser optimisation, performance, etc.parce qu'ils ont peur que ça ne soit pas assez rapide.Et en fait, très souvent, tu as le temps de voir le problème arriver quand même avec ce qu'on a aujourd'hui.
00:08:10 :Ce qui ne veut pas dire qu'il ne faut pas, qu'il faut masquer totalement çaet puis commencer à mettre des images de 10 mégas sur son site web.
00:08:18 :Ce n'est pas ça non plus, mais tu vois, il ne faut pas non plus virer fou sur ces trucs-là.Et du coup, je me dis que c'est ça, sur l'IoT, ça doit être à peu près pareil.
00:08:30 :Enfin, dans le sens où là encore, j'imagine très bien que quand tu achètes le tout petit Raspberry 10 à 10 ans,à un moment, tu peux être très bien limité par les mémoires,mais après, quand tu vois déjà, là encore, la puissance que tu as sur un tout petit Raspberry que tu achètes à 30 balles,
00:08:49 :qui est déjà 10 fois plus de puissance que l'ordi que j'avais, moi je ne suis pas vieux, mais que j'avais il y a 10 ou 15 ans,tu te dis, on a déjà de quoi faire quand même pas mal de choses.
00:08:58 :Après oui, effectivement, j'imagine que dans ces domaines-là, c'est quand même beaucoup plus limité que sur un ordinateur du bureau.Oui, en fait, la limitation, elle est plus au niveau processeur.
00:09:09 :Tu ne peux pas te permettre d'acheter des processeurs qui coûtent très cher,sinon ton produit, à la fin, il sera cher.Oui, et ça, tu vois, c'est des contraintes que généralement, là, tu vois, on est vraiment dans des domaines où ces contraintes,tu les connais dès le départ et tu sais qu'elles vont être importantes.
00:09:25 :Et je pense que, tu vois, sur le web, par exemple, c'est vraiment cet exemple que je donne souvent,mais c'est vraiment, je ne sais pas pourquoi, les gens focalisent sur la rapidité du langage,alors que bien souvent, ce qui pêche, c'est que tu vas mettre un bout de strap ou des images ou des trucs comme ça qui pèsent très lourd
00:09:42 :pour avoir juste un bouton en rouge. Et donc, ouais, c'est ça.Ça ne veut pas dire qu'il faut complètement eclipser ces problèmes-là, mais il faut en être conscientet puis les trouver, enfin, les identifier au bon endroit, quoi.
00:09:57 :Oui, je pense qu'en web, peut-être, tu as moins de contraintes sur le temps de calcul, peut-être.Après, ça peut être aussi, je m'en rends compte à chaque fois que je retourne en Bretagne.
00:10:12 :La Bretagne, c'est le meilleur endroit pour tester ton site.Tu n'as pas besoin de faire un speed test, tu vas en Bretagne, j'ouvre Doxtring et puis je vois si ça marche,parce que c'est là que tu te rends compte que quand tu développes avec la fibre à Pariset que justement, même si ton site web, il va chercher 10 000 librairies, ce n'est pas très grave.
00:10:32 :Et puis quand tu arrives avec une connexion de 3 Mbps et que ta page, elle met 25 secondes à afficher,là tu te dis « Ah ouais, merde ». Et du coup, là, tu es clairement dans un cas de figure
00:10:44 :où la vision des choses est biaisée par tout simplement la technologie que tu as, l'endroit où tu te trouves, etc.Donc, c'est clair que ce ne sont pas des questions qui sont simples et qu'il faut évacuer facilement.
00:10:56 :C'est vrai que des fois, je fais un peu des généralités sur ces trucs-là.Ce qui est souvent étonnant, c'est que dans les forums pour ceux qui démarrent en Python et autres,la question de l'optimisation, elle vient très vite sur la table.
00:11:21 :Et puis, c'est vrai que quand on arrive vraiment dans l'entreprise ou dans une application,il y avait eu des comparaisons qui disaient qu'une application Python à fonctionnalité égalefait plus ou moins trois fois moins de lignes de code qu'une application équivalente en Java.
00:11:38 :Et pour le coup, si je prototype en écrivant trois fois moins de lignes de code,en écrivant trois fois plus vite, je gagne aussi de l'argent pour le prototypage.
00:11:51 :Rien ne veut dire qu'après, je ne vais pas reprogrammer la moitié de ça, voire peut-être le quart de ça.En l'occurrence, nous, on fait ça. Même quand on fait des applications relativement gourmandes,
00:12:04 :on commence toujours par un prototype full Python.Et puis après, on regarde ce qui pose problème.Et puis souvent, ce qu'on se rend compte, c'est qu'il y a à peine 10% du code,on doit le réécrire, même moins, on doit le réécrire en C.
00:12:19 :Du coup, ça garde 90% du code en Python et on a gagné du temps.Je ne sais pas si tu as vu, il y a eu un petit débat là-dessus, parce que c'était sur LinkedIn,je crois il y a Jean-Marc Jancovici, je ne sais pas si vous voyez qui c'est, c'est un ingénieur
00:12:39 :qui parle beaucoup sur le thème du climat et tout ça.Et il a fait un poste justement qui faisait pas mal de raccourcis, parce qu'en gros,il explique quand même un petit peu, mais en gros, il dit que le problème,il fait la comparaison un petit peu entre Python et du C et il dit que du coup,
00:13:03 :comme c'est moins optimisé, du coup du Python ça consomme plus que du C,où tu peux vraiment optimiser justement, comme tu disais Yacine, à fond sur les processeurset du coup tu peux avoir des processeurs moins puissants, et donc toute cette idée un peu de sobriété énergétique.
00:13:16 :Et donc voilà, le constat général qui ressortait de ce petit post sur LinkedIn,c'était un peu ça, de se dire bon bah c'est bien beau Python, mais à un moment,il faudra peut-être revenir à des trucs, des langages un peu plus verbeux et pénibles à utiliser,mais qui sont plus optimisés.
00:13:36 :Et on était avec pas mal d'amis assez surpris de cette conclusion, parce que ça y est justement,et en plus pour quelqu'un qui a l'habitude, comme Jean-Marc Jancovici, de ne pas regarder le problèmeque d'un point de vue, mais de prendre tous les facteurs qui vont autour,comme tu disais Thierry, c'est que genre un développeur qui va utiliser son ordinateur
00:13:58 :trois fois plus de temps, parce qu'écrire un programme en C, ça va prendre trois fois plus de temps qu'en Python,bah c'est autant d'électricité, de temps que tu vas passer, etc., qui vont consommer énormément aussi.
00:14:11 :Donc il vaut peut-être mieux prendre un langage qui va être, et là encore ça dépend,parce que si c'est un script qui est exécuté sur tous les ordi de la planète,là effectivement t'as intérêt à peut-être passer une journée de plus pour avoir un truc optimisé,mais par rapport à un site web par exemple, il vaut peut-être mieux avoir le truc qui sort plus rapidement.
00:14:33 :Donc ouais, il y a plein de facteurs qui rentrent en compte, et c'est difficile de faire des conclusions comme ça.En plus, même comme je disais avant avec mon 10%, c'est que souvent sur une application,t'as des goulots d'étranglement, et puis t'as peut-être 5% du code qui consomme les 95% du temps d'utilisation
00:14:53 :ou des ressources d'utilisation. Donc au final, c'est ça qu'il faudra optimiser.De toute manière, pour le reste, que ce soit du Python ou du C, si t'as un code qui envoie une requête sur le réseau,et puis qui doit attendre 3 secondes que cette requête donne une réponse, alors que ce soit du C ou du Python qui doivent attendre,
00:15:12 :ça change pas grand-chose.Oui, c'est ça. Le problème, il est placé ailleurs. Du coup Yacine, c'est assez intéressant ta question.Je me dis que d'ailleurs, ça me donne envie de faire un petit exercice. Je me demande si j'ai pas fait un exercice.
00:15:31 :Je sais que j'ai fait un exercice comme ça sur Dockstring et sur Udemy. Je vais vous partager mon écran.Tiens, partage l'écran. Parce que, donc là, en gros, et alors ça c'est le genre de truc, j'imagine qu'il y a des façons plus simples de le faire,
00:15:52 :mais je trouve que c'est assez intéressant au niveau algorithmique de voir justement la façon dont on peut aborder ce genre de petits problèmes.Vous voyez tous mon écran là?
00:16:04 :Oui. En fait, juste pour te dire Thibault, en gros, normalement il y a plusieurs façons de faire.Donc moi je connais certains, on va dire certains façons de faire, mais je sais pas si c'est vraiment la meilleure façon de faire.
00:16:19 :Parce que je sais qu'en Python, par exemple, t'as des masques maintenant binaires.Sinon, en fait, moi je me dis, tout simplement on peut la convertir en liste et on peut vraiment parfois des...
00:16:43 :Il faut faire des décalages.Oui, bah en fait, moi tu vois, je l'aborderais vraiment d'une façon très pragmatique et je ferais une première passe en fait en me disant tout simplement comment je le ferais à la main.
00:17:25 :On n'est même pas obligé puisque si on fait 0 à puissance 2, ça va retourner 0.Et il faut qu'il y ait une genre d'incrémentation parce que c'est sûr qu'on va pas faire puissance 2 à chaque fois, à chaque fois ça va être...
00:17:38 :Et alors c'est là que vous allez pouvoir voir à quel point je suis mauvais en maths.Si je fais puissance 2, puissance 4, c'est ça, c'est puissance 1, 2, 4, 16, 32, si j'imagine bien.
00:17:48 :D'abord 0.0, oui, 0, 0, mais enfin à chaque fois je fais 1 puissance et puis je double la puissance et puis ça me donne le résultat, c'est ça.
00:17:58 :Donc on va juste en gros doubler à chaque fois, on va avoir une variable qui va avoir cette puissance, donc au début ça va être 0,après on va faire 1 et on va la doubler à chaque fois, 2, 4, 8, 16, et puis on va additionner tout ça.
00:18:14 :Et ça me semble être la façon la plus directe de faire, qui n'est pas forcément la plus optimisée.Je ne sais pas si Thierry tu approuves ou tu vois d'autres choses qui pourraient être plus efficaces?
00:18:26 :Pour l'efficacité, alors on a plusieurs choses qu'on pourrait faire.On pourrait déjà utiliser les décalages, les chevrons à droite ou à gauche qui permet de décaler,en fait c'est la manière la plus efficace de multiplier par 2.
00:18:42 :On pourrait ici faire des décalages multiples et puis regarder juste la première position et regarder que l'or arrive en première position.On pourrait les traiter 4 par 4 avec un masque par exemple, parce que 4 par 4 on pourrait avoir une liste pour optimiser,on a de 1 jusqu'à 15, enfin de 0 jusqu'à 15, et puis on regarde juste les 4 premiers avec un masque,
00:19:08 :donc on prend 1 puis après que des 0 et puis si ces 4 premiers c'est 0 on le voit tout de suite.Donc on arrive en listant un petit peu ces choses là à analyser, à savoir quelle serait la plus efficace,on peut trouver probablement une dizaine d'algorithmes, une façon de faire.
00:19:28 :Je dirais que pour démarrer, d'essayer de trouver deux solutions, ça c'est un exercice que je pourrais proposer par exemple,trouver deux solutions significativement différentes pour résoudre le problème,puis après faire un time it pour voir la différence, mais à mon avis on ne verra pas beaucoup de différences.
00:19:47 :Oui, c'est ce que je me dis à chaque fois sur des trucs comme ça, effectivement c'est ce que je disais en préambule un peu,que tu vas arriver sur un qui prend 10ms et l'autre qui va en mettre 12,et puis tu ne sais jamais trop, même quand tu fais un time it etc, des fois il suffit que tu aies un processus qui bouffe un peu de mémoire,
00:20:07 :en arrière plan et ça ralentit, donc c'est sûr que c'est toujours sur des trucs aussi,il faudra faire des tests sur des gros gros nombres j'imagine, et là tu pourrais commencer à avoir vraiment la différence.
00:20:20 :Yacine, tu veux uniquement le premier an, ou tu veux autre chose?Non, tous les ans.Tous les ans?Oui, c'est pour ça en fait ce que tu as dit Thierry c'est intéressant, en fait quand tu parlais de décalage...
00:20:38 :Tu veux quand même garder leur position, tu veux savoir à quelle position sont les 1 ou tu veux savoir combien il y en a?C'est ça, à quelle position ils sont les 1, en utilisant par exemple une méthode de décalage ou par exemple la méthode de masque.
00:20:55 :En fait ce que j'ai fait pour l'instant c'est comme ce qu'il est en train de faire Thibaut, c'est la façon la plus simple,mais vous me disiez qu'il y a d'autres façons de faire qui sont plus pratiques.
00:21:13 :Effectivement, si on parle vraiment d'optimisation, le truc qui me vient en tête c'est de se dire qu'on a pas besoin de boucler,enfin dès qu'on voit des 0 on s'en fout quoi.
00:21:25 :Donc ça revient à ta question un peu initiale de cette idée de se dire comment est-ce qu'on peut voir que les 1et on pourrait se dire, je sais plus si c'est ce que tu disais Thierry mais peut-être se baser aussi sur l'index,de se dire que là encore en inversant le truc au départ, de récupérer la position dans la liste des...
00:21:47 :Oui en fait ça serait probablement, je sais pas si...On peut rechercher des motifs, des choses comme ça par exemple, un motif avec 4 0 par exemple, tu peux regarder.
00:21:56 :Après il faut savoir de nouveau, après une fois que tu as des positions, ce que tu veux faire sur le long terme,une fois que tu as des positions tu veux faire quoi Yacine, tu veux recalculer la valeur numérique?
00:22:09 :C'est ça, on va récupérer la valeur numérique de la position des 1, par exemple le premier 1,ça va être 2 puissance 4, donc je sais que le premier 1 en partant de la droite c'est la valeur 16,le deuxième 1 ça va être 64 je pense.
00:22:27 :Donc moi en fait je fais le traitement, une fois que j'ai récupéré cette valeur là, je fais un traitement particulier.Mais en fait la question c'est que, ça c'est un exemple, j'ai donné une valeur au hasard, c'est un exemple,mais derrière il faut essayer de gérer tous les cas possibles jusqu'à 32 bits, et on a une valeur qui vaut 32 bits.
00:22:50 :Donc c'est pour ça que quand tu parlais de décalage et de masque, je trouve que c'est intéressant,mais c'est vrai que je n'ai pas encore regardé bien en détail comment on peut faire un décalage ou un masqued'une valeur par rapport à un masque de 32 bits par exemple.
00:23:13 :On essaye plusieurs, j'imagine Thierry t'essayes aussi de ton côté, moi tu vois je...Ouais, déjà Manu est foutu là.Non, vous inquiétez pas, en fait pour l'instant c'est juste un début, j'ai à peine commencé à regarder,je sais qu'il y a des façons de faire.
00:23:30 :Moi je suis parti sur autre chose, là du coup j'ai inversé et je prends l'index, et donc l'idée...Après il faut que je vois index, je sais plus si j'avais vu récemment, je crois que c'était sur Kemp,je sais plus laquelle, il me semble que tu peux lui donner un endroit à partir duquel tu cherches,
00:23:48 :ou alors on pourrait en fait... Ouais je réfléchis, parce que là ça va te retourner la première,donc là c'est bien, on a la puissance en fait, et puis après on pourrait faire ça sur tous les autres.
00:24:03 :Donc se dire en fait, on pourrait faire probablement un...Alors je réfléchis, est-ce que si on fait un while, quelque chose du genre, faudrait qu'on puisse bouger sur tous les autres.
00:24:15 :Un while avec un décalage, donc tant que le nombre n'est pas à 0 tu décales vers la droite,et puis tu comptes le nombre de décalages.
00:24:22 :Ouais tu peux faire ça, mais moi je voulais en fait directement juste prendre les 1,genre récupérer l'index du premier 1, donc ça me donne 4, donc je fais 1 puissance 4,après celui-là ça va me donner 6, donc plus 1 puissance 6, et puis celui-là ça va être 1 puissance 10.
00:24:40 :Et du coup, ouais donc, en fait ce que je me demande c'est,est-ce qu'il n'y a pas une fonction, ou est-ce qu'on ne peut pas le faire avec index directement,qui permet de nous récupérer, pas l'index que du premier, mais de tous.
00:24:59 :Me semble que index, on peut lui donner, je ne sais plus si c'est index ou une autre,qu'on peut lui donner un nombre d'occurrences à récupérer, je crois que c'était avec replace, je ne sais plus,j'ai vu ça récemment, j'ai appris un truc en répondant à un étudiant,qu'il y avait des petites fonctions comme ça qu'on utilise tout le temps,
00:25:15 :où il y avait des arguments qu'on pouvait passer en plus que je n'avais jamais utilisé,et qui étaient pratiques, c'était quelqu'un qui voulait remplacer juste les 3 premiers points dans une phrase,mais pas ceux d'après, un truc comme ça.
00:25:25 :Après si on partourne, les manipulations de chaines, ça ne devient pas très efficace, par exemple,si tu prends le module ray, avec ray, strip, tu fais une découpe, tu découpes sur les 1 par exemple,tu peux te mettre à une chaîne de 0, et tu verras exactement où étaient les 1, ou des trucs comme ça.
00:25:49 :Mais la question est de savoir, ça va pas forcément être fonctionnel, mais pas forcément super efficace.Après, c'est pour ça que je m'étais lancé dans Index, parce que je me dis que Index, ça doit être assez,je me trompe peut-être, je n'ai jamais fait de test là-dessus au niveau performance,
00:26:09 :que je me dis que ça doit être assez rapide, quoi que peut-être pas,parce qu'à chaque fois il faut qu'il parcourt toute la séquence, et que du coup c'est moins rapide qu'un autre truc.
00:26:17 :De toute manière, ils n'ont pas d'autre choix que de parcourir toute la séquence,une fonction de chaîne qui va avoir toute une chaîne de caractère, elle va forcément au minimum en ordre de grandeur n,où n est la longueur de la chaîne.
00:26:31 :Oui, c'est pour ça que finalement c'est peut-être plus optimal de boucler sur tous les nombres,mais de le faire qu'une fois, plutôt que finalement à chaque fois récupérer l'index.
00:26:43 :Donc là on sait facilement tester par exemple, savoir si un certain nombre,on sait qu'on ne pourrait de toute manière probablement pas faire mieux qu'en ordre de grandeur n ici.
00:27:00 :De toute manière, donc on est obligé de traverser d'une manière ou d'une autre toute la chaîne de nombrespour pouvoir prendre la position.Si jamais Thierry tu trouves un lien qui parle de masque avec le Python, tu es bien le seul.
00:27:33 :Le concept de masque, si je peux partager mon écran.C'est ça en fait dans l'idée, je suis juste en train de faire un test avant.
00:28:08 :Ça change un peu par rapport à la programmation.Je suis en train de réfléchir sur l'algorithme. Je reste pour l'instant sur l'algorithme.Si j'essaye, j'utilise l'opérateur Morse, je suis content, je l'utilise tout le temps en ce moment.
00:28:42 :Alors.Alors.Du coup, j'ai réussi à récupérer les puissances. J'ai 4, 6 et 12.Du coup, c'est 1, mais 1 puissance n'importe quoi, ça fait toujours 1.
00:29:54 :Du coup c'est 2.J'étais en train de me dire, c'est débile mon truc, ça me retourne 1 tout le temps.Je ne sais pas si tu as pas partagé encore, je reprends le partage de seconde.
00:30:14 :Du coup, mon opérateur Morse finalement il n'est pas content parce que forcément à un moment il n'y a plus de 1 dans la liste.Donc là finalement ça ne marche pas.
00:30:27 :Donc il faudrait plutôt faire...Donc tant qu'on a un indice.Donc j'ai essayé ça, je vais pas donner une boucle infinie.Donc on prend l'indice, tant qu'on en a un on affiche.
00:30:57 :Là je le remplace pour pas qu'il le prenne.On pourrait du coup voir avec un décalage, parce que j'ai regardé un index, on peut effectivement lui donner un endroit à partir duquel chercher.
00:31:11 :Donc on peut aussi faire un décalage comme ça en reprenant l'indice qu'on avait et en partant de ce nouvel indice pour pas compter.Bon là j'ai fait un truc un peu plus brut où je fous un 0 à la place du 1 comme ça on le compte plus la fois d'après.
00:31:24 :Et j'ai toujours...Bah non en fait ça règle pas mon erreur parce qu'il faut que je le récupère là.Bah non en fait non.Alors oui c'est ça, je viens de me souvenir, il y a une différence entre... je me rappelle avoir fait une vidéo là dessus.
00:31:59 :Il y a une différence entre un index et une autre méthode qui justement ne retourne pas d'erreur quand c'est pas trouvé.Je sais pas si ça te dit quelque chose Thierry, ou Yacine ou Guillaume, je sais pas.
00:32:13 :Non je suis effectivement en train de réfléchir.Je vais aller chercher dans mes propres formations.Trouver une chaîne...Find, c'est ça. Et find en fait ça retourne moins 1 si c'est pas trouvé alors qu'index retourne une erreur.
00:32:58 :Oui parce qu'en plus find c'est sur une chaîne de caractère donc là je pense que ça marchera pas.Parce que j'ai une liste effectivement. Après du coup... Ouais du coup ça foire mon truc.
00:33:10 :Parce que du coup j'avais fait une liste pour pouvoir avoir un truc mutable que je peux modifier.Donc là du coup ça va à l'inverse de... Donc je vais repartir sur l'index, au pire je pourrais faire un try except sur l'erreur.
00:33:23 :C'est pas très grave parce que ça va juste planter à la fin quand on a que des zéros.Donc on pourrait faire un if, un try except, et il y a probablement là encore des moyens plus logiques de gérer cette erreur.
00:33:34 :Mais en tout cas là je pourrais faire un total. Et puis faire un total plus égal.Et normalement ça devrait fonctionner. Donc là on a une première version.
00:33:49 :Donc là il faudrait que je fasse un try except l'erreur et là on est en 10 égal à 9.J'ai encore tombé dans une boucle mais voilà 4176, je crois que c'était ça le résultat à trouver.
00:34:10 :Donc là voilà, moi j'ai un truc mais tu vois c'est pas très beau.Et du coup je pense que je pourrais par contre remettre mon walrus.
00:34:19 :Ah bah quoi que non parce que je peux pas faire un try except.Mais du coup là ça marche.Du coup c'était sur un truc, enfin non toi t'étais parti sur une boucle qui bouclait sur Shlack Elements.
00:34:46 :Sachant que moi je t'ai envoyé la chaîne de caractère directement parce que la représentation binaire d'une valeur ça commence par un 0b.J'ai fait un split sur un b, du coup ça me retourne la première partie, c'est le 0 qui est avant le b.
00:35:06 :La deuxième partie, du coup ensuite je prends la deuxième partie comme une chaîne de caractère et je la parcours.Ça j'imagine tu vois qu'il doit y avoir un... Bon ça ça marche, par contre c'est pas vraiment efficace parce que
00:35:26 :tout ce qui est manipulation binaire je pense qu'il y a déjà tout ce qu'il faut en Python.C'est juste qu'il faut trouver les bonnes méthodes.
00:35:35 :Alors il y a une formation sur Udemy que je te conseille vraiment, c'est en anglais mais elle est vraiment très bien.C'est... comment ça s'appelle... anglais... langue...
00:35:52 :Alors est-ce que je vais la retrouver? En fait le mec il a fait que ça, Deep Dive.Et je me souviens qu'en fait il explique à un moment, donc il va vraiment dans le détail parce qu'il explique justementtous les trucs de performance, il va vraiment très pousser.
00:36:10 :Et il explique à un moment ces trucs là, donc t'en as 4 tu vois comme ça, et il explique je sais plus dans laquelleque sur justement les chaînes de caractère il y a une fonction qui existe que justement j'avais jamais vue.
00:36:26 :Tu peux créer une genre de chaîne de caractère optimisée pour la recherche.Alors je sais plus, je dis peut-être des bêtises, c'est pas exactement ça, je sais plus exactement comment il faisait,si c'était un... s'il passait par un set ou un truc du genre, mais il me semble, il faudrait que je te retrouve ça,
00:36:42 :que voilà, qu'en fait il prenait des exemples et là vraiment il faisait un time-it et il te montrait les performances,il te disait que la façon de faire que tout le monde utilise, qu'avec un find ou un truc comme ça,comme on vient de faire un peu, ça marche bien, c'est facile à utiliser, mais voilà, que c'était pas le plus efficace
00:36:58 :parce qu'à chaque fois en fait il parcourait toute la chaîne pour trouver ce que tu voulais, et avec donc je sais plus quelle...Je crois que c'était vraiment, je sais pas si ça te dit quelque chose Thierry, c'était un type d'objet qu'on utilise quasiment jamaismais qui était beaucoup plus efficace pour ça.
00:37:14 :J'ai pas écouté le début, donc désolé, j'étais... Non t'inquiète, c'est dur de coder en live, j'étais là à faire mon script.J'ai pas acheté les 4? Ah, je crois que j'en avais acheté les 4.
00:37:33 :C'est vrai qu'il fait pas de promo lui, elles sont un petit peu plus chères, mais franchement elles valent vraiment le coup.Je vais aller regarder dans celle que j'ai visionnée...
00:37:46 :Mémoire...Ouais, alors ça c'est le string interning, je sais plus si c'était ça.Ah oui si c'est ça, je crois que c'est ça.C'est que en fait c'est ça, c'est que tu peux...
00:38:12 :C'est ce que j'explique au tout début de ma formation, il y a certaines...Et d'ailleurs c'est la première fois, c'est la seule fois que j'avais cherché sur Google, parce que quand on fait une chaîne de caractère, vous avez peut-être déjà vu ça.
00:38:25 :Quand on fait une... Alors je pensais que c'était de ce que j'avais lu justement sur Stack Overflow.Si je fais ça comme ça, A is B, en fait ça va pas recréer une autre chaîne de caractère.
00:38:42 :Oui, j'ai bien partagé mon écran là, vous voyez?Donc ça va pas recréer une autre chaîne de caractère, et ce principe là c'est un peu comme avec les nombres de moins 5 à 256.
00:39:18 :Il y a probablement un mot mieux que ça en français, mais en anglais on dit intern.Et je sais plus, il le dit à un moment, enfin il y a un truc, voilà, identifiers.
00:39:43 :Et si par contre, c'est ça, des identifiers, donc si t'as un truc un peu comme un slog avec juste des lettres et des nombres et pas d'espace et que des tirés du bas,donc dès que t'as un caractère spécial, un espace ou des trucs comme ça en fait, ça sera pas interné.
00:40:08 :Et tu peux forcer ça du coup, donc tu peux, avec ce truc là, comme je t'ai dit, c'est vraiment incroyable cette formation, je sais pas si tu savais ça Thierry,il y a plein de trucs comme ça, peut-être un truc qui est assez connu finalement.
00:40:20 :Non, je ne savais pas.Et donc en fait tu vois, avec le module 6, tu peux forcer une chaîne de caractères à être internée, et du coup ça va beaucoup plus vite en fait,pour rechercher, faire des comparaisons, je sais plus si c'est pour la recherche aussi, mais je crois que c'est vraiment pour la comparaison, ouais.
00:40:39 :Et donc il parle de ça par exemple pour le NLP, le Natural Language Processing je crois,donc quand tu dois faire des recherches sur un bouquin en entier, si tu fais pas ça, là tu vas quand même vraiment voir des différences de performances.
00:40:55 :Donc voilà, il y a des petits trucs comme ça, des fois tu découvres que vraiment, il faut soit regarder des tutos un peu obscurs comme ça,soit l'avoir vu avec un développeur senior qui a déjà vu ça, et tu vois là il fait des tests de timing justement.
00:41:11 :J'ai jamais croisé ça.Et tu vois là, je sais pas si on voit le...Tu vois là on passe de quand même 4 secondes à 0,3 secondes. Donc là on voit clairement le gain de performance.
00:41:29 :Et comme on disait au début, après c'est le genre de truc où si c'est un script que tu lances une fois dans la journée,que ça prenne 3 secondes ou 300 millisecondes, on s'en fout un peu.
00:41:42 :Si par contre c'est un script qui scanne toute la bibliothèque de France tous les jours, là ça vaut le coup.Ou c'est une version Udemy.
00:41:54 :Il y a plein de petits trucs comme ça. Franchement elles sont un petit peu chères par rapport à ce qu'il y a sur Udemy,mais franchement ça dure 40 heures, là franchement c'est donné par rapport à toute la valeur qu'il apporte là-dedans.
00:42:05 :Tu vois il y en a 4, donc effectivement si t'achètes les 4, moi j'ai pas acheté les 4, je sais plus lesquelles j'ai.Mais vraiment tu vois c'est rare de voir des formations à 4.9 sur Udemy, c'est vraiment incroyable.
00:42:18 :T'as 35 heures, c'est même presque... Au début tu vois ça, tu te dis oula 45 heures de tuto c'est lourd,mais en fait c'est très bien expliqué, ça va vraiment très loin dans le piton, et c'est pas que du abstrait.
00:42:39 :Ah du coup Thierry t'as posté alors get1, spore2, if number...Ah du coup tu utilises ce fameux opérateur.En fait c'est plus qu'il utilise aussi le décalage avec les 2 flèches.
00:43:03 :De quoi excuse Yacine?Non en fait je pense que Thierry il a utilisé un décalage, l'opérateur de décalage.Alors là t'as power of 2... Ah c'est ça là?
00:43:17 :Oui.Ah ouais.En fait ça c'est un décalé de 1 en fait.D'accord. Bah tu vois je savais pas. Finalement c'est vous qui faites mon mentora c'est bien.
00:43:28 :C'est ça qui est bien c'est qu'on apprend toujours.Bah oui oui mais c'est ce que je dis, c'est ce que je dis toujours sur Twitter partout,c'est qu'au final il faut pas avoir peur de l'avouer, il y a plein de trucs qu'on connait pas,justement le string in turning là je suis sûr il y a plein de gens qui connaissent pas ça et c'est normal,
00:43:45 :parce que qui a besoin d'utiliser ça? Alors encore quand tu fais du Django tu l'utilises pas souvent,quand tu fais des trucs de natural language processing tu l'utilises peut-être tous les jours.
00:43:55 :Donc ok ça c'est le décalage et puis ça c'est le fameux opérateur du coup.Ok. Power of 2.Voilà, j'arrive avec mieux dans deux minutes.
00:44:11 :D'accord. Donc là tant que... donc get one, d'accord, tant que number est plus grand, d'accord,oui ok, if number est 1, donc du coup tu l'ajoutes dans ta liste,après tu décales à chaque fois et tu incrimentes.
00:44:27 :Ok, sur l'execute ça fait quoi? Ça fait bien... ça récupère bien les ordres d'origine?Je serais intéressé de faire des tests après sur... voir vraiment les gains de performance
00:44:42 :sur deux ou trois solutions différentes, voir à quel point il y en a.Tu voulais partager ton écran Thierry?Pas encore, je suis mieux attesté dans le noir.
00:44:58 :Ok.Du coup j'en profite pour faire une petite aparté pendant que Thierry finit.Je ne sais pas si vous avez vu pour les exercices de code sur docstring,je ne crois pas que je l'ai posté sur le serveur ici.
00:45:17 :J'ai intégré un nouvel éditeur, donc dans les exercices, si vous allez voir dans les exercices,par exemple je ne sais pas les... et je vais en rajouter, il n'y en a pas énormément,
00:45:32 :il y en a un peu quand même mais il n'y a pas beaucoup de catégories, je vais en rajoutermais finalement ce qui va être génial c'est que je vais pouvoir faire beaucoup plus de trucsparce qu'il y a beaucoup plus de librairies avec le nouveau système que j'utilise.
00:45:44 :Donc principalement là ce qui change c'est des petits trucs un peu cosmétiquesmais il y a les raccourcis clavier, c'est quand même pratique.Vous pouvez appuyer sur ctrl-entrée ou commande-entrée sur Mac pour exécuter le script, le code.
00:46:00 :Et oui ça fait des petites animations.Mais du coup je voulais rester là-dessus.Alors il faut que j'enlève le pop-up à chaque fois, mais du coup là j'ai réussi la solution,je vais essayer de ne pas la réussir pour vous montrer.
00:46:23 :Je l'affiche à chaque fois, bon il y a des petits bugs encore à régler.Donc ça ça n'a pas beaucoup changé, vous pouvez afficher la solution, vous pouvez wrapper le code,vous pouvez augmenter tout ça, ça c'était déjà là.
00:46:39 :Par contre sur les tests unitaires ils sont un peu plus descriptifset vous pouvez voir aussi le code du test unitaire.Ça peut être pratique parce que des fois on ne comprend pas trop pourquoi l'exercice ne passe pas.
00:46:51 :Mais de voir concrètement ce que le script cherche en arrière-plan,on comprend que c'est une variable qui n'existe pas ou un truc comme ça.Si vous oubliez un point, une virgule ou des trucs comme ça.
00:47:02 :Et on est en train de faire des challenges, je vous montre un petit aperçu.Ce qui va être génial c'est que là par exemple c'est un petit challenge de scrapping.
00:47:13 :Et donc on a par exemple Beautiful Soup qu'on peut utiliser pour les requests aussi.Donc là par exemple ça permet de faire du scrapping.Et par exemple à la fin j'ai des petits exemples comme ça.
00:47:35 :Où en fait on va récupérer la page même du challenge sur laquelle il y a cet exemple de boutiqueavec des prix qu'on veut récupérer.
00:47:43 :Et du coup on peut aller récupérer toutes ces informations là,ici avec Beautiful Soup directement sur le site de DuckString.Donc ça c'est vraiment cool et mon objectif à moyen-long terme c'est de refaire tout le...
00:48:02 :de proposer les deux en fait, je ne vais pas enlever l'ancien,mais de prendre le parcours pour débutants qui existe actuellement.Donc ce parcours ici, qui pour l'instant est composé à 95% de vidéoset de quelques exercices et quiz.
00:48:17 :L'idée c'est de faire un truc un peu comme les Code Académie, Free Code Camp etc.Donc d'avoir un truc beaucoup plus pratique où il y a quasiment...
00:48:25 :où il y aura des vidéos mais en mode si tu veux voir la théorieet puis si tu veux voir un truc qui explique plus, tu peux aller voir cette vidéo.
00:48:32 :Mais que ce soit vraiment un peu sur ce mode là, de vraiment à chaque fois,bon qu'est-ce qu'une variable, et puis hop tu codes tout de suite,tu écris ta variable, tu exécutes ton code, ça te dit si c'est bon ou pas.
00:48:42 :Et de faire ça pour tous ces trucs là, donc un truc beaucoup plus pratique.Et ce qui va être génial comme je disais, c'est qu'aussi avec toutes ces bibliothèques en plus,il y a Panda pour la Data Science, il y a plein de trucs comme ça,pour le web aussi, donc il y a plein de choses que je vais pouvoir faire comme ça,
00:48:58 :d'exercices qui vont être beaucoup plus interactifs.Donc voilà, ça c'est un projet quand même moyen terme,parce que ça fait pas mal de boulot, mais au moins d'avoir codé tous ces trucs làpour avoir la possibilité de le faire, c'est déjà un bon début.
00:49:11 :Je pense que c'est déjà un très bon début.Alors Thierry nous est revenu avec un truc...Beaucoup plus simple.Ouais, effectivement.Voilà, je vais le partager.
00:49:28 :Avec les conférenciers de liste, maintenant c'est très puissant aussi.Ouais.Vous voyez mon écran?Pour l'instant, moi je vois du noir.Je sais pas si c'est parce que tu codes vraiment dans le noir, mais...
00:49:44 :Là on a le noir.Ok, c'est bon, ouais, c'est bon.On voit.Non, et puis là tu vois vis-à-vis du code?Ouais, ouais, ouais, c'est bon.
00:49:53 :En fait, le niveau du masque, il est ici.Là on voit pas, mais simplement on crée en masque dynamiquement, on décale.1 décalé de 1, ça fera 1 et 0.
00:50:09 :1 décalé de 2, ça fera 100.Enfin 100 au binaire, etc.Donc ça c'est l'opérateur de décalage.Donc finalement on parcourt les entiers de 1 à 32, ou de combien on veut, 64.
00:50:21 :Enfin, si on veut 64 bits.Et puis à chaque fois on construit en masque avec ça.Et puis une fois qu'on a le masque qui a été construit avec autant de décalage,on peut simplement le comparer avec le nombre qu'on a trouvé.
00:50:37 :Alors le masque, qu'est-ce qu'il fait?Si je pose ici le masque,il va faire l'équivalent de ça.Après l'équivalent de ça.0, 0.Premier tour de boucle.
00:50:57 :Il faut ça.De manière plus intelligente.Il faut ça.Il compare donc du coup juste ces deux nombres.Et puis là il les compare tout d'un coup.
00:51:10 :Et simplement, comme on va faire en A, ici, en A binaire.Donc en fait, ça, ça va donner 0.Sauf si le premier bit ici est 1.
00:51:22 :Si 1 est 1, là, j'obtiendrai 1.Si 1 est 0, ça donne 0.Donc ici, cette condition là, elle vaut faux.Donc elle vaut 0.
00:51:33 :Donc faux si là on n'a pas le premier bit.Deuxième tour de boucle.On a i égal à du coup 1 ici.On va décaler.
00:51:41 :Donc on va se mettre là.Donc nous on aura notre masque qui vaudra ceci.Et il compare.Les deux bits là.Deuxième tour de boucle.
00:51:53 :Donc on voit que de nouveau la condition est fausse.Il n'y a pas 1 des deux côtés.Et donc pour le coup, il ne va rien créer.
00:52:01 :Puisqu'on est dans le if de la compréhension.Et cetera.Jusqu'au quatrième par exemple.Où là on aura ça.Je mets juste les underscores pour percer dans la chaîne.
00:52:13 :Et puis à quatrième tour, on aura donc ça comme masque.Et donc 1 est là.Donc la condition du if est vraie.Donc il va mettre 4 ici.
00:52:25 :Si j'exécute le code.Je l'ai exécuté là.Il y en a 4.Premier nombre.Et puis il va continuer.Et puis il va continuer.Puis il va voir en sixième position.
00:52:36 :En nombre.Et puis il va continuer.Puis il va voir en douzième position.En nombre.Puis après que des 0 jusqu'à 2.Ici ça me donne donc les puissances de 2.
00:52:47 :Qui sont associées au 1.Si je veux directement les valeurs.Il suffit de faire 2 puissance là.Et puis on a cette fois le 16, 64 et 4026.
00:52:58 :Mais donc c'est la...Alors les compréhensions de listes sont généralement assez efficaces.Parce qu'elles sont compilées en interne.Généralement plus efficaces que la version BOOK.
00:53:11 :Je pense que ça doit être difficile en Python d'être plus efficace ici.En tout cas, je pense qu'il y a une bonne efficacité par rapport à nos premières solutions.
00:53:21 :Et pas si complexe.Mais il faut comprendre le fonctionnement de ça.Des décalages pour construire le masque.Pour déplacer le 1, il va simplement se déplacer.
00:53:31 :Le 1 va se déplacer de ce côté là.Et puis l'opérateur A qui va comparer deux chaînes.Il va garder, puisque j'ai qu'un seul 1 dans cette chaîne là.
00:53:40 :Il va juste dire faux.Si le bit correspondant est pas bon.Et puis vrai.Et ça devrait être bien.Ouais, non c'est...Ça c'est le genre de truc je pense tu vois.
00:53:56 :Tu fais juste rajouter une petite animation où tu vois le 1 qui se déplace.Et des trucs comme ça.Et là je pense que ça peut aider pas mal de gens à comprendre.
00:54:05 :Après quand tu l'expliques comme ça, effectivement c'est...On comprend très bien le principe avec le 1 qui se balade.Quand t'as deux 1 ça fait 1.
00:54:13 :Et quand t'as un 0 ça fait 0.Mais c'est vrai que c'est le genre de code où si t'as pas l'explication qui vient avec.Tu te dis oula, c'est quoi ce truc.
00:54:22 :Généralement mettre une ligne de docstring.Ouais, ouais.Juste en dessous de... Enfin dans la fonction.Ou une ligne de commentaire pour expliquer le truc.Après de nouveau, la plupart du temps.
00:54:36 :Quand on a besoin de faire ça, c'est que généralement on sait faire des opérations sur des bits.Si on entre dans ce domaine là, effectivement il y a des très bons livres en C.
00:54:47 :Il y a une grosse bite qui s'appelle C Unleashed.Et puis il y a un chapitre complet qui est dédié aux opérations binaires.Et dans ce chapitre complet il y a pas mal de petits trucs.
00:54:59 :Je pense que quelqu'un qui bosse dans ce domaine là où il a besoin de faire des opérations bit à bit.Peut-être que ça vaut la peine de se concentrer un chapitre exclusivement là dessus.
00:55:13 :Et puis quelqu'un qui fait du Django, à la limite, moi dans ma vie de tous les jours,en tout cas du côté de Django, j'utilise plus ces opérateurs là qui ont été phagocytés par les sets, par les ensembles.
00:55:25 :Et ce qui est bien c'est qu'on peut les récupérer dans nos classes pour faire des opérations.Si on vient d'ailleurs, Pandas fait la même chose.
00:55:34 :Il utilise l'opérateur A bit à bit pour faire des masques dans les data frames par exemple.En fait pour les objets, on peut utiliser des méthodes spéciales pour donner à nos opérations.
00:55:49 :Alors les opérateurs de décalage, pareil, on peut utiliser des méthodes spéciales pour dans une classefaire que le chevron droite droite veut dire quelque chose de particulier.
00:56:00 :Ça peut être sympa.Du coup c'est presque là dessus qu'ils ont le plus d'utilité pour les phagocytés à d'autres emplois que les opérations binaires.Ouais, mais après une fois que tu les... Ouais Yacine t'avais une... Non?
00:56:15 :Non, c'est juste pour les infos parce que c'est vrai que c'est plus clair on va dire.Et on voit la différence par rapport à d'autres façons de lire.
00:56:26 :C'est intéressant.Après effectivement c'est là où je repense à tu vois la... Comment dire?Ce qui est intéressant aussi c'est de voir la... Moi la direction dans laquelle je suis parti c'est vraiment du coup une direction de quelqu'un qui ne connaît pas justement du coup.
00:56:43 :Enfin qui va utiliser les outils que j'ai qui ne sont pas du coup les opérateurs binaires et tous ces trucs là.Et c'est là où tu vois que t'arrives quand même à une solution et après on en revient là encore un peu à ce qu'on disait au début quoi.
00:57:06 :Donc est-ce que j'ai besoin de les apprendre? Je sais pas.Et après on peut se dire bon bah en fait vu que... Parce que le problème c'est que probablement que si on faisait des essais là sur comme je disais au tout début, si on faisait des essais de performance
00:57:27 :Et du coup on se dit bon bah voilà mon script il est optimisé quoi.Mais après c'est vrai que si t'as pas quelqu'un qui te dit bah non il y a telle façon de faire ou tu peux rester avec ton petit set d'outils que t'as et qui est pas forcément le plus optimal.
00:57:39 :Donc c'est vrai que c'est bien comme ça d'avoir des cas de figure, de voir différentes façons de faire un même algorithme avec différents outils.Tu les retrouves dans beaucoup aussi de configurations de pas mal de bibliothèques de trucs où on utilise des flags binaires pour activer ou désactiver des options par exemple.
00:59:04 :Donc faut pas non plus, c'est aussi quelque chose de bien mais c'est vrai que je pense justement dans les effets visuels c'est souvent ça.Nous pareil on utilisait des logiciels qui te matchaient le travail en fait et derrière t'as des gens qui utilisaient du C au plus proche de la machine pour te faire des trucs ultra optimisés quoi.
01:00:11 :Exactement, comme Qt par exemple aussi, pareil, donc c'est pour ça que ça tient la route.Là je sais pas si tu vois mon écran.Ouais ouais on voit ouais.
01:00:21 :Là je suis sur la doc de Python directement, sur le O2 pour les regex, donc le module re.On voit par exemple pour les options, peut-être que Yacine t'as pas encore travaillé avec les options rationnelles, mais quand on utilise recompile ou autre on peut mettre certaines options pour savoir si ça va être sensible à la casse, si ça va être une regex qui va être multiligne ou etc.
01:01:05 :Du coup je prends une autre variable là c'est 1 0 et pour le coup je calcule ré Y ou ré M.Et là j'ai les deux options, j'ai 1 1 et pour le coup je peux avoir une troisième option ré quelque chose, qui est égale à 1 0 0 et puis l'appareil ou ré que j'ai 1 1 1.
01:02:43 :De connaître ses opérateurs, ça peut avoir une utilité si finalement j'ai une vision complète du langage.Bien sûr je peux faire autrement, je peux créer 3 variables, puis 3 variables auront des valeurs true ou false et puis je peux très bien vivre avec.
01:03:02 :Ou alors je peux le faire comme ça, ça a un aspect pratique, mais historiquement je ne sais pas pourquoi avec le module ré ils sont arrivés à cette solution là, parce que j'aurais très bien pu avoir une fonction compile qui prend la règle hexet puis qui prend des booléens in your case et puis je passe égal true par exemple et puis dot all c'est égal false.
01:03:32 :Ou alors comme eux, en seul truc c'est options et puis je lui passe juste en nombre qui est celui là ou encore plus.Donc voilà c'est une manière de faire différente et les opérateurs booléens peuvent aider à ce niveau là.
01:03:47 :Je confirme, parce que justement sur Qt, regarde je vais repartager mon écran.C'est à dire de départager le mien, mais voilà c'est bon, non c'est pas bon, oui c'est bon.
01:04:01 :C'est exactement ce qui se passe sur Qt, quand tu fais une fenêtre tu peux créer des flags et en fait tu as une méthode, tu as ton application et tu fais setWindowFlagset c'est exactement ce que tu viens de décrire, du coup Thierry c'est que après tu fais from QtWidgets, tu as un truc genre flags et en fait tu vas dire flags.noMenuBar par exemple
01:04:31 :et donc ça effectivement c'est ça, après en fait tu envoies l'information binaire, parce que j'imagine que du coup la bibliothèque derrière c'est Qt c'est du C++et donc j'imagine que le truc est codé comme ça et qu'ils sont pas embêtés là aussi à faire un truc qui soit plus Pythonesque on va dire, avec des arguments
01:04:52 :où tu pourrais dire justement comme disait Thierry noMenuBar égale true ou un truc comme ça, et donc c'est exactement ça, tu retrouves ça et tu peux direje veux qu'il n'y ait pas de menu bar et je veux aussi que ce soit always on top par exemple, des trucs comme ça.
01:05:07 :Et donc là effectivement, tu viens de me rappeler Thierry que c'est la seule fois je crois dans ma vie où j'ai utilisé ces opérateurs pour du Python,encore un cas de figure très très précis.
01:05:22 :Et perturbant c'est que pour dire qu'on veut à la fois non debut, non menu bar et always on top, on utilise l'opérateur où?Bah en fait non mais il y avait lui ou lui je sais plus justement, bah lui je crois, je confonds ça c'est javascript, j'ai fait deux jours de javascript là je sais plus.
01:05:41 :Celui là justement il fonctionne pas.Ouais.En l'occurrence pour ça justement parce que je l'ai expliqué c'est que tu veux à la fois, tu veux que les 1 ils soient tous free en fait.
01:05:54 :Ouais mais...Et donc là en fait ça donnerait toujours 0 parce que non menu bar il a le 1 qui est placé pas au même bit que flag always on top.
01:06:06 :Ouais.Donc si tu les coupes comme ça, ton résultat vaudra 0.Bah après parce que je me souviens qu'il y avait un truc très perturbant c'est justement que des fois tu voulais enlever une option et il me semble, je me trompe peut-être,que du coup des fois t'avais des trucs comme ça parce que justement t'avais des options c'était des, tu vois comme no menu bar c'est un négatif quoi.
01:06:31 :Et donc en fait pour l'activer il fallait qu'elle soit là ou qu'elle soit là.Donc il me semble que des fois tu te retrouverais avec à la fois les deux mais je me trompe peut-être.
01:06:39 :Effectivement pour enlever tu utilises le et et puis le ou pour ajouter.Ah cutie ça fait le dos flag je vais le checker.Ou alors ils s'y sont pris autrement alors j'ai pas.
01:07:11 :Ah c'est le, ça inverse tout.Ça inverse tout oui c'est ça donc il fait et et il inverse donc tu vois des cas de figure comme ça où justement tu vois ça tu dis bon ok.
01:07:20 :Bon là il faut prendre son papier, son crayon puis comment tes gens vont faire.Ouais ouais non c'est ça ouais.Bon finalement tu vois que c'est super utile parce que même toi tu les utilises.
01:07:47 :Si c'est pour pour départ, si c'est un concours national de programmation pour départager la personne qui a le plus de connaissances encyclopédiques tu vois.Oui effectivement tu vois c'est une bonne certification si c'est pour tester les compétences professionnelles de quelqu'un parce que c'était ça moi qui m'embêtais un peu avec cette certification.
01:08:04 :C'était vendu en mode vraiment rajoute une ligne sur ton CV pour prouver à quel point voilà t'es compétent et t'es bon.Et je trouve que voilà c'est pas une, tu peux avoir des gens qui vont être même si on parle tout simplement de soft skills.
01:08:21 :Tu peux avoir et je vais faire là encore une petite généralité mais dans ma relativement courte carrière j'ai souvent remarqué que les gens qui sont justement le plus à fond techniquementc'est pas souvent les gens qui sont les plus agréables on va dire avec qui travailler quoi.
01:08:42 :Il y avait un mec d'ailleurs dans la boîte où j'étais qui était incroyable techniquement il a fini par se faire virer parce qu'il était imbuvable et puis il faisait tout de sa façonet le fameux lone wolf qui veut rien qu'on lui dise.
01:10:08 :À un niveau très basique c'est pour ça que c'est un peu mon cheval de bataille souvent par rapport au maths etc.Par rapport au fait qu'on a pas besoin d'être très bon en maths pour tout du moins commencer et puis faire quand même pas mal de choses en programmation
01:10:24 :parce que j'ai remarqué vraiment très souvent ça quand j'enseignais en présentiel.C'est justement sur des trucs tout cons aussi. J'avais une ex qui prenait sa calculatrice pour faire 12 plus 5 donc c'est pour vous donner le niveau de maths.
01:10:51 :Elle comprenait pourquoi on le faisait, elle comprenait comment ça fonctionnait. Donc en fait au niveau logique elle avait un esprit très logique.Et après que oui faire 12 plus 5, elle aimait pas les maths de base donc elle avait même pas envie d'essayer, elle prenait sa calculatrice.
01:11:13 :Je vous dis c'est pas des blagues, sur les boucles ça les bloquait quand même assez rapidement, il restait pas bloqué 2 mois non plus.Mais je veux dire t'introduis le concept des boucles, tu te dis bon bah il est matheux, ça va. Et en fait tu te rends compte que non, des fois c'est même l'inverse.
01:11:35 :Et en fait ils vont tout remettre en question ou alors ils vont pas comprendre la logique derrière le truc.Et donc ouais je trouve qu'il y a vraiment une différence entre logique et mathématiques, je trouve que c'est pas forcément des trucs qui vont de... enfin c'est des compétences différentes je trouve.
01:11:53 :Ça remet complètement en question le processus de recrutement de certaines boîtes, quand on voit certains qui finissent en parcours, diplôme ou pas,ou alors qui ont abouti à un certain portfolio en piton et puis qui commencent à postuler dans les jobs et ils arrivent dans des tests techniques qui sont de la pure algorithmique.
01:12:13 :Et puis souvent de la pure algorithmique mathématique, c'est-à-dire que les gens ils mettent encore des problèmes qui sont mathématiques là derrière.Et puis tu passes par le test technique alors que t'as fait des choses super, t'as un portfolio qui tient bien la route, moi je trouve ça dommage.
01:12:41 :et puis il est pas engagé parce qu'il a pas su programmer un algorithme de tri. Je trouve ça toujours un peu dommage.Ouais, j'espère qu'on peut faire bouger un petit peu les choses, c'est pour ça aussi que j'en parle beaucoup, parce que je trouve ça...
01:13:02 :Et puis c'est démotivant, parce que surtout après en fait, tous ces gens là justement ils ont un réflexe un peu naturel de se dire mince,soit j'ai pas appris les bons trucs, soit finalement c'était pas pour moi parce que ça fait un an que j'apprends et je pensais que je pouvais faire de la programmation
01:13:21 :et finalement il y a plein de trucs apparemment mathématiques et compliqués qu'il faut savoir que je maîtrise pas,et en fait là encore, non, en général t'as pas, comme on dit pour du Django, du web, t'as pas besoin de ça,et donc il y a beaucoup de remises en question sur des trucs comme ça, qui n'ont pas lieu d'être quoi, et c'est démotivant pour ces gens là.
01:13:42 :Je sais pas, Guillaume, je sais pas si t'es toujours avec nous, si t'avais des questions, là ça fait quoi, 1h15 qu'on parle?Je sais pas si t'avais des trucs que t'as vus, des questions pendant la semaine?
01:13:59 :Non, pas de questions particulières, au contraire, j'ai commencé à attaquer les chemins de fichiers,j'ai fini la première partie, et voilà, j'apprends doucement, j'avance.Et ça va les fichiers? Parce que je sais qu'il y a pas mal de gens qui des fois bloquent un peu sur cette partie.
01:14:21 :Pour l'instant je suis au début, la dernière partie, oui, ça a l'air d'aller, je pense pas avoir de grosses difficultés,je comprends beaucoup la logique, mais le souci, oui, des fois je peux buter sur certaines choses en me posant beaucoup de questions,ou en essayant de faire un parallèle avec d'autres choses, et c'est ça qui perturbe, parce que je suis quasiment à 80% de réussite,
01:14:48 :mais c'est ces 20% là qui me bloquent, et tant que j'ai pas trouvé la solution, je vais pas aller au-delà.Sur les fichiers, ce que je vois souvent, il y a 2-3 petits trucs, il y a déjà le fait que tu commences à utiliser pas mal de modules,de méthodes, est-ce qu'il faut utiliser read ou readline, il y a pas mal de trucs qui commencent à se fabriquer,
01:15:07 :parce qu'il faut qu'à la fois tu ouvres ton fichier dans le bon mode, et puis après il faut que tu le lises,donc sur le JSON aussi il y a des trucs qui perturbent, parce que, ça je l'ai rajouté récemment dans les formations,la différence entre un fichier texte où tu peux mettre n'importe quoi, ce que tu veux dedans, et puis le fichier JSON,
01:15:54 :des trucs de compréhension de son système d'exploitation aussi des fois, pour lesquels des fois Python ne nous aide pas,enfin Python ou je vais dire plus justement Windows, avec Python je sais pas sur quel système d'exploitation t'es,mais je suis sûr que c'est un problème un petit peu sur Windows avec les chemins etc.
01:16:14 :Moi je suis sous Linux, donc j'ai pas sujet de Windows à Linux.Ok, donc ça t'enlève déjà une difficulté.Oui, mais on partit de première chance.
01:16:29 :Ouais, le pire c'est, moi j'étais dans une boîte où il y avait trois, il y avait Linux, Mac et Windows, et c'est à cette époque là que j'avais découvert Commander justement,c'est un des logiciels que je montre dans les formations pour remplacer le Shell, et c'était vraiment bien parce que du coup ça permettait de rouler le même code,
01:16:51 :vu que les chemins étaient vraiment un peu comme le Windows subsystem for Linux, mais sans avoir besoin d'installer, enfin juste en lançant un petit programme,donc c'était assez pratique.
01:17:06 :Bon pour les chemins relatifs ça change rien, on peut utiliser les chemins Linux sur Windows, c'est pas un problème.Ouais, mais là c'était vraiment des trucs, parce que tu vois c'était vraiment dans un contexte assez spécifique, mais dans un studio d'animation 3D,t'avais beaucoup de, comment dire, il y avait forcément beaucoup de trucs avec des chemins de fichiers, de sauvegarde, de backup, des trucs comme ça,
01:17:33 :donc des fois sur Windows c'était sur le C, des fois c'était sur le D, des fois, enfin tu vois il y avait plein de petits trucs comme ça,c'est ça qui était incroyable en fait, c'est à quel point, sans exagérer, il y avait peut-être 20% de mon temps complet de développement qui était dédié à Windows,
01:17:52 :mais à des conneries quoi, à des petits bugs, des trucs de permissions, c'est pour ça que j'ai développé une haine envers Windows,parce que vraiment, le nombre de fois où je me tapais la tête contre les murs et finalement je me disais, ah mais merde, c'est une particularité quoi,
01:18:10 :et à chaque fois je me disais, bon c'est bon, maintenant j'ai fait mes petites fonctions helper qui me permettent de tout normaliser,de ne plus être embêté, et puis une semaine plus tard il y avait un autre petit truc, et que des cas de figure comme ça,parce qu'en plus c'était à l'intérieur de logiciels 3D, donc chaque logiciel avait un petit peu aussi sa façon de faire,
01:18:27 :il y en avait qui étaient en chemin relatif, d'autres absolus, d'autres qui faisaient des trucs encore par-dessus les chemins, qui les modifiaient,enfin c'était vraiment, donc d'avoir, quand tu as tout sur Linux avec l'islash dans le même sens, tout le monde est sur le même système,c'est quand même plus facile.
01:18:46 :Mais du coup, Guillaume, oui, vraiment, je te dis, les fichiers c'est vraiment un truc où je vois, il y a des gens qui passent à travers,premier coup, zéro problème, ils comprennent tout de suite, et puis il y en a qui bloquent sur des tout petits trucs précis,donc n'hésite pas si tu as des questions pendant la semaine qui te viennent sur cette partie là, mais de ce que tu me dis,
01:19:12 :j'ai l'impression que ça a l'air de quand même bien aller, donc...D'accord, avec plaisir, ça marche.C'est une bonne idée d'expérimenter aussi sur Windows, si tu as accès à un Windows, je pense que c'est une bonne chose d'avoir cette flexibilitéde passer de l'un à l'autre. En tout cas pour les utilisateurs Windows qui ont passé sur Linux, mais qui ont toujours leur Windows,
01:19:35 :pour les gens qui sont sur Linux ou sur Mac et qui vont pas forcément avoir un Windows, c'est pas un problème, mais ça peut être une bonne chosede quand même être à l'aise avec son système de base ou avec différents systèmes.
01:19:48 :Pour information, il y a beaucoup d'entreprises qui sont toujours sur Windows.Ça reste malgré tout l'OS dominant dans l'entreprise.Ouais, clairement, c'est pour ça que même si, je reviens sur l'exemple de l'entreprise dans laquelle j'étais,même si 95% du... En fait c'était même le problème avec Mac OS, même si pour le coup c'était un autre problème,
01:20:17 :enfin là c'était plus les outils de développement, mais il suffit que tu aies 90% de la boîte qui était sur Linux,t'avais un mec qui était sur Windows parce qu'il avait des outils et des logiciels qui étaient que sur Windows,et t'avais deux producteurs et un designer qui étaient sur Mac parce qu'ils avaient pas envie d'utiliser autre chose.
01:20:36 :Et du coup quand le producteur avait besoin d'utiliser les outils que 90% du studio utilisait sur Linux,il a fallu lui faire des trucs et lui setuper des machins et tout sur son Mac.
01:20:47 :Et après pareil pour Windows, donc en fait t'es toujours confronté effectivement que tu le veuilles ou non à une situationoù t'as besoin d'utiliser un OS qui est pas celui que tu utilises forcément de base.
01:20:57 :Donc c'est vrai que souvent la marche est plus dure dans l'autre sens, le problème que je vois le plus souvent,c'est des gens qui apprennent et qui font tout sur Windows et une fois qu'ils arrivent dans une entreprise,on leur dit le premier jour, ah non, non, non, Windows, il y en a zéro dans la compagnie, c'est tout Linux,
01:21:19 :Mais en même temps ça s'apprend très vite quand t'es dans un contexte d'entreprise, donc ça va.Bon écoutez, on va du coup arrêter là s'il n'y a pas d'autres questions.
01:21:32 :Merci beaucoup en tout cas.Pas de soucis, je sais pas si ça va parler à beaucoup de gens du coup le truc binaire et tout,mais je pense que ça peut être bien d'avoir SoulCool et puis c'est intéressant de façon générale.
01:21:47 :J'espère que ça va pas faire peur aux autres, je vais faire un petit message pour leur dire que c'est quand même des trucs très spécifiques justement,qu'on fasse pas fuir la moitié du Discord, mais je pense que c'est le genre quand même de trucs assez intéressants à regarder,juste pour la culture générale et pour justement s'ouvrir à d'autres façons de faire, donc c'est cool.
Aucune occurrence trouvée pour « ».
Bravo, tu es prêt à passer à la suite