Découvrir la programmation python et faire des petits dessins, là tout de suite

Hey !

Alors comme ça tu veux essayer la programmation et tu ne sais pas par où commencer ? Tu as joué un peu avec des formules Excel et tu as trouvé ça relou ? Tu as pris peur devant la quantité faramineuse de case à cocher et de Giga-octets nécessaires à l’installation de Visual Studio ? On s’est moqué de toi quand tu as dit que le C++ était mieux que le HTML ? Allez, viens, t’as cliqué à la bonne porte. J’ai filé des cours de python à des jeunes en collèges et lycées, et j’ai presque eu l’impression d’avoir été intéressant. Autant t’en faire profiter !

Non-installation des outils nécessaires

Quand on débute en programmation, il faut s’inscrire sur des sites (github, stackoverflow, …), installer des interpréteurs, des compilateurs et un tas d’autres bronxs. Sauf que toi, tu veux pas forcément t’y mettre sérieusement, tu veux juste découvrir pour savoir si ça vaudra le coup de t’y mettre sérieusement. Tkt, lecteurtrice, je suis là pour ça.

Va voir par ici : https://trinket.io/python (ouvre le lien dans un nouvel onglet, car tu auras besoin de passer de l’un à l’autre).

C’est un petit environnement d’exécution en python, rien que pour toi. « Python » est le nom d’un serpent, mais aussi d’un langage de programmation.

Dans la partie gauche, c’est le code que tu écris, dans la partie droite, le résultat de l’exécution de ce code. T’as vu lecteurtrice ? J’ai utilisé le mot « code ». Ça veut dire exactement la même chose que « programme », mais ça fait plus expert. Hésite pas à utiliser ce mot.

Un premier exemple s’est déjà exécuté. On s’en fout. Efface tout le texte de la partie gauche et met seulement ces trois lignes :

import turtle
turtle.forward(50)
turtle.left(90)

En haut de la fenêtre se trouve un bouton « Play » (une flèche vers la droite), clique dessus. Si y’a pas, t’as un bouton « Stop » à la place, clique puis reclique dessus.

Devant tes yeux ébahis, un trait va se tracer.

Tant qu’à faire, clique sur le bouton « Expand » en bas de la fenêtre, ce sera plus pratique.

Mais que sont donc ces trois lignes que tu as copié-collées ?

La première sert à importer la librairie de code intitulée « turtle ». C’est ce qui te permet de tracer des petits dessins.

Si t’es un vieux ou une vieille, lecteurtrice, tu te souviens peut-être du plan « Informatique Pour Tous » et surtout du langage « Logo ». Turtle en est inspiré.

Le principe, c’est que la petite flèche noire dans la partie droite représente une tortue (ou n’importe quelle autre animal si tes goûts en matière de zoophilie sont différents). Tu la diriges avec des instructions de code.

  • « turtle.forward(50) » signifie que tu la fais avancer de 50 pixels.
  • « turtle.left(90) » signifie que tu la fais tourner de 90 degrés vers la gauche.

Juste pour montrer que tu as bien compris, tu vas changer le code pour me dessiner un beau carré de 50 pixels de côté. T’as juste à re-écrire trois fois de plus les deux dernières lignes. Fais un copier-coller, ça passe crême. Ne recopie pas « import turtle », qui n’a besoin d’être écrit qu’une seule fois au début. Appuie sur Play pour relancer le programme.

Ça y’est, t’imprimes ?

On peut aussi écrire du texte. À la fin de ton programme, ajoute la ligne :

print("yo ho ho ho. lolilol")

Le carré va se redessiner et du texte va s’afficher dans la partie juste en-dessous.

La fonction « print » affiche en bas à droite le texte que tu lui indiques. Ça s’appelle la sortie standard. C’est un truc de base que tu as tout le temps, même avec autre chose que le python.

En général, quand on découvre la programmation, on ne commence qu’avec ça, on ne dessine pas avec turtle. Du coup, on se retrouve à faire des exercices poucraves, genre pisser la suite de Fibona-qui-chie ou sortir la solution d’une équation du premier degré. C’est chiant. Nous on fais pas ça, nous on met des paillettes dans la life, t’as vu ?

Quand tu programmes, que tu sois débutant ou pas, il y a plein de fois où tu écris des trucs pétés qui déclenchent des erreurs. Ça fait partie du jeu. Dans le bel environnement de développement que je te propose, les erreurs s’affichent en bas de la fenêtre, et la ligne de code pétée est surlignée en rouge. On va tester ça tout de suite. Après le print, tu écris n’importe quoi. Vas-y lâche toi, fais pas ta/ton mijauré·e. (Wesh ! T’as vu lecteurtrice ? Je fais de l’écriture inclusive, c’est à la mode).

Appuie sur Play, et tu verras un message outrageusement irrespectueux, genre « NameError: nanani » ou « Bad input: nianiania ».

Les messages d’erreurs sont plus ou moins explicites, selon ton niveau de connaissance, la débilité que tu as écrite et la complexité de ton programme. Des fois ça peut aider de chercher sur internet ce que ça veut dire. Des fois pas. Tkt, lecteurtrice, tout au long de ce tuto, je t’ai mis des exemples de code qui fonctionnent. Si t’es grave dans la derche, ça t’aidera. Mais essaye à chaque fois de trouver la réponse par toi-même.

L’autre truc rigolo, c’est quand ton programme n’a aucune erreur, mais qu’il ne fait pas du tout ce que tu veux. Dans ce cas, met des « print ». Ça te permet de voir par où passe l’exécution, d’afficher le contenu de tes variables, etc.

On va tester ça tout de suite. Ajoute ça à la fin de ton programme :

x = 5
print("Valeur de x")
print(x)

Tu peux aussi écrire plusieurs trucs sur une même ligne, en séparant chaque valeur par une virgule. Ajoute aussi ça :

print("Valeur de x :", x)

Et rond et rond

On continue avec un truc simple. En plus du carré, tu vas me dessiner un cercle de rayon 60 pixels. Lorsque ton programme s’exécute, on doit voir ça :

Tu sais pas comment on dessine un cercle ? Mince alors. Eh bien, cherche. Va voir par là si j’essuie : https://docs.python.org/3.8/library/turtle.html#turtle.circle

C’est aussi ça, la prog. Tu passes ton temps à chercher comment on fait certains trucs, parce qu’on ne peut pas retenir tous les trucs.

Ensuite, au lieu d’un cercle entier, tu me dessines juste un tiers de cercle. Faut que ça donne ça :

Pour t’aider, re-zy-va voir le lien internet sus-cité.

Comme promis, lecteurtrice, voilà un lien vers la réponse, à n’utiliser qu’en cas d’extrême urgence mondiale, si tu n’arrive pas à trouver par toi-même.

Humeur variable

Mine de rien, on a fait un truc super important dans le chapitre pré-précedent, avec l’instruction « x = 5 ». On a déclaré une variable.

Ooooohhhhh.

Définition : une variable est un truc dans lequel tu mets le machin que tu veux. Tu peux ensuite réutiliser le truc, ça fait comme si c’était le machin. Débrouille-toi avec ça.

Le signe « égal » utilisé n’a pas la même signification qu’en maths. C’est une affectation et pas une égalité. Ce sont deux notions différentes, mais qui existent toutes les deux en programmation. On verra ça plus tard.

Dans ta tête, quand tu vois écrit « x = 5 », tu peux te dire « x prend la valeur de 5 », ou bien « x devient 5 ». Ce sera plus exact que « x égal 5 ».

Tu peux aussi te faire dans ta tête la voix française de Jim Carrey. Sérieusement, ça aide.

Si tu veux plus de détails sur les variables, va voir ce tutoriel. Il est assez bien fichu, y compris les chapitres après, sur les listes, les tuples, les fonctions… Ça pourrait te servir pour la suite.

On est pas chez ces ringards de matheux, t’as le droit d’avoir des noms de variables de plusieurs lettres, à condition qu’il n’y ait pas d’espace. Par exemple : « ma_super_variable = 5 ».

Ton environnement de dev a aussi un mode console, mais je t’embête pas avec ça pour l’instant. Par contre, un truc utile, au lieu de cliquer sur Play, tu peux utiliser le raccourci Ctrl+Entrée. Ça exécute ton code.

Si tu veux avoir l’air d’un vrai programmeur qui a des gonades, utilise des raccourcis claviers plutôt que ta souris. (Wesh lecteurtrice ! T’as vu ? Écriture inclusive avec le mot « gonades »). Comme t’as souvent les mains sur le clavier pour écrire du code, vaut mieux essayer de tout faire avec le clavier plutôt que de perdre une demi-seconde à attraper la souris.

Autre bidouille, spécifique à turtle. Au début de ton programme, juste après l’instruction « import », tu peux ajouter la ligne « turtle.speed(0) ».

La tortue dessinera ses traits et ses cercles plus vite. Tu me remercieras quand tu en seras à exécuter ton code pour la vingtième fois parce que tu seras en train d’essayer de faire marcher quelque chose qui ne veut pas marcher.

Une boucle pour une spirale

Commence par nettoyer le bazar des chapitres précédents. Supprime toutes les instructions de dessins : « turtle.forward », « turtle.left » et « turtle.circle ». Si tu tiens absolument à garder ces premiers blablablutiements, sauvegarde-les dans un petit fichier texte. Ou sinon, laisse-les où ils sont, mais en commentaire. Il suffit d’écrire un caractère dièse « # » au début de la ligne.

Très utile les commentaires. Ça peut servir à expliquer des choses directement dans le programme. Tu peux aussi écrire ton autobiographie.

Si je te fais enlever tout ça, c’est pour repartir sur une zone de dessin propre. Parce qu’on va faire du fun.

Des spirales comme la coiffure de princesse Leia

Si t’es pas trop vieux ou vieille, lecteurtrice, tu as certainement entendu l’expression de langage de jeune : « être en boucle sur quelque chose ». Ça vient de l’informatique.

Sans plus attendre, copie-colle moi cette ligne à la fin de ton programme :

for compteur in range(11):print(compteur * 8)

Tu exécutes, et ça écrit la table de 8 dans la sortie standard.

Cette ligne de code est à lire en deux parties, séparée par le caractère « : ». La première partie indique que tu veux faire une boucle, c’est à dire exécuter plusieurs fois la même chose.

Le « 11 » indique que cette boucle s’exécutera 11 fois, en comptant de 0 à 10. Ça a l’air crétin de commencer à compter à partir de zéro, mais ça se justifie. Je prendrais le temps de t’expliquer plus tard, quand tes poils auront poussés, jeune lecteurtrice.

Le morceau de code après le deux-points, c’est le contenu de ta boucle. C’est à dire l’instruction que tu veux exécuter plusieurs fois. Tu la connais déjà, c’est un « print ».

Le caractère étoile « * » signifie simplement la multiplication. En maths, la multiplication est notée par une croix, mais ce caractère n’existait pas sur les premiers ordinateurs. D’ailleurs, ces crétins de matheux n’utilisent même pas la croix, ils mettent rien du tout. « 2a » signifie « 2 multiplié par a ».

Déso, mais le caractère rien-du-tout ça existe pas, même sur les ordinateurs récents. Qu’est-ce qu’ils sont cons ces matheux.

Revenons aux boucles. Celles-ci sont gentilles. En plus de répéter un truc, elles te donnent gratochement une variable. Ici, on l’a appelé « compteur ». Celle-ci change automatiquement de valeur à chaque passage de la boucle.

Ça fait comme si t’avais écrit :

compteur = 0
print(compteur * 8)
compteur = 1
print(compteur * 8)
compteur = 2
print(compteur * 8)
...
compteur = 10
print(compteur * 8)

Ceci étant expliqué, on est bien d’accord que la table de 8, c’est des maths et c’est ringardos. Nous on veut du fun. On va dessiner une putain de spirale !

Tu sais comment ça se dessine, lecteurtrice ? Il suffit de tracer des morceaux de cercles de plus en plus grand. On dit qu’on fait des tiers de cercles, avec des rayons qui augmentent de 10 pixels en 10 pixels. On en fait 15.

Si t’es débile, lecteurtrice, tu vas faire ça :

turtle.circle(0, 120)
turtle.circle(10, 120)
turtle.circle(20, 120)
...

Mais tu vaux mieux que ça et tu me le fais sous forme d’une boucle, Okaye ?

Le dessin tracé ressemblera à ça :

Le lien vers la réponse, si jamais tu galères.

Une spirale qui grossit et des blocs de code

Sais-tu qu’on peut changer la taille du trait ? Mets-nous l’instruction « turtle.pensize(5) » juste avant ta boucle. Voilà une jolie spirale plus épaisse. Le nombre indiqué correspond à une taille en pixel. Évite de mettre trop gros, ça fera des pâtés moches. Le pensize doit être petit. D’ailleurs « pensize » est un anagramme de « ze penis ».

Soyons over-fun. Tu vas me dessiner une spirale de plus en plus épaisse. Le trait pourrait varier de 0 à 14 pixels, par exemple. Ça tombe bien, ta boucle s’exécute déjà avec un compteur qui va de 0 à 14.

Et là on arrive à une notion très importante en programmation (python ou autre) : les blocs de code.

Un programme est un gros bloc de code, avec plusieurs instructions dedans.

Dans un bloc de code, il peut y avoir des sous-blocs, eux-mêmes pouvant contenir des sous-sous-blocs, etc. Un peu comme ces ringards de matheux quand ils imbriquent des parenthèses. Zou, un exemple.

3 * ((1 + 6) * 2) + 4 * (2 + 5) – 1
Cette expression contient deux sous-blocs : ((1 + 6) * 2) et (2 + 5).
Le premier sous-bloc contient un sous-sous bloc : (1 + 6)

La comparaison s’arrête là. En maths, on évalue en premier les sous-blocs les plus profonds. En programmation, on commence au début, et on avance en rentrant (ou pas) dans les sous-blocs.

Une boucle annonce un sous-bloc, qu’elle exécutera plusieurs fois. Dans le chapitre précédent, ton sous-bloc n’avait qu’une seule instruction : « turtle.circle(compteur * 10, 120) ».

Chaque début et fin de sous-bloc doit être clairement indiqué dans le programme. Dans les langages C et Javascript, on utilise pour ça des accolades « {} », en LISP, des parenthèses « () », en Pascal, les mots « begin » et « end », etc.

Pour que le programme soit plus facilement lisible, on indente les blocs. Toutes les instructions d’un sous-bloc doivent être écrites avec un décalage de quelques espaces au début (en général on en met 4). Les instructions d’un sous-sous-bloc doivent être décalée deux fois, soit 8 espaces, et ainsi de suite. Quand on sort d’un bloc, on enlève un décalage d’indentation.

Il y a des tas de gens qui ne respectent pas cette mise en forme. Leurs programmes sont alors beaucoup moins lisibles. Si tu rencontres ce type de personnes, il est de ton devoir de les insulter et les stigmatiser.

Tu as sûrement déjà vu des images corporate bullshit montrant un écran d’ordinateur avec des lignes de code. C’est hype, swag, geek, hacker et tagada-tsoin-tsoin.

T’as vu lecteurtrice comment sont organisées ces petites lignes ? Ça se décale, puis ça se recale, se redécale, se rerecale. C’est ça l’indentation.

Et en python, comment donc marque-t-on les débuts et fin de blocs ?

Tu vas rire lecteurtrice, c’est par l’indentation elle-même ! Quand tu veux que des lignes de code soient dans un sous-bloc, tu leur mets des espaces au début. Quand ton sous-bloc se termine, tu écris la ligne suivante sans les espaces.

C’est un peu déroutant, mais ça a un très gros avantage. Ton code est obligé d’être bien présenté. En python, tu ne pourras jamais te faire insulter ou stigmatiser parce que tu n’auras pas respecté les règles d’indentation. (On pourra toutefois t’humilier pour plein d’autres raisons).

Les éditeurs de texte conçus pour la programmation prennent en compte cette particularité des indentations. Essayons ça tout de suite. Retourne à ton programme et copie-colle ce texte, sans oublier les deux-points à la fin : « for compteur in range(15): » , puis tu appuies sur Entrée. Ton curseur va à la ligne d’en dessous, mais pouf ! Il s’est décalé de 2 espaces ! Écrit un truc puis réappuie sur Entrée, ça restera décalé.

Quand tu as fini ton bloc, appuies sur backspace, ça enlève les deux espaces d’un coup, et tu retournes au bloc de code supérieur.

Dans l’environnement que je t’ai proposé, une indentation est représentée par 2 espaces. Ailleurs, ce sera 4, ou 8, ou une tabulation. Il y a des discussions sans fin entre les développeurs pour savoir s’il vaut mieux indenter avec des espaces ou des tabulations. Je ne t’en parle pas maintenant, tu n’es pas encore assez mature pour réaliser à quel point les développeurs peuvent avoir des discussions immatures.

Assez discuté, au boulot ! Tu me fais cette boucle, avec un sous-bloc de deux instructions. La première est un « pensize », la seconde un « circle ».

Ça doit donner un truc comme ça.

Lien vers la réponse si c’est la hass pour toi.

Ce sera tout pour aujourd’hui !

J’espère que ça t’as plu lecteurtrice. To be continued le mois prochain. On fera un dessin comme ça :

En attendant, voici tes devoirs. Essaye de me faire un dessin comme ça :

Je te donne pas le code. Tu te débrouilles. C’est réalisable avec les notions que je viens d’expliquer. Deux petits indices, quand même :

– On peut faire des boucles imbriquées, c’est à dire une boucle dans une boucle. Pense à rajouter une indentation (un décalage d’espace au début de la ligne) à chaque fois que tu rentres dans une nouvelle boucle. Et utilise un nom de variable différent pour chaque boucle, sinon ça va confusionner.

– Les tracés de cercle (et de morceaux de cercle) dépendent de l’orientation initiale de la tortue. Tu peux tester ça vite fait : écrit un programme qui fait uniquement « turtle.circle(60, 120) », puis ajoute juste avant l’instruction « turtle.left(180) ». Le morceau de cercle changera de sens.

Un dernier conseil : n’écris pas trop de code d’un coup. Tu rajoutes quelques lignes, tu appuies sur Play pour vérifier que ça swagge, tu rajoutes ou modifies quelques autres lignes, tu retestes, etc. Si t’écris trop d’un coup et que ça plante quand tu testes, ce sera plus difficile de trouver où que c’est que ça merdouille.

Comme je suis gentil et fun, tu auras le la réponse à l’exercice dans mon prochain article.

Ook ook à toi, lecteurtrice !

*Drop du clavier et je m’en vais comme un prince.

Encore un peu d’UTBM et de nostalgie

Mais cette fois-ci, séparément.

L’UTBM

 

Un petit post sympa sur Linkedin

Ce post montre les logos de toutes les promos, affichés dans de jolis cadres, accrochés au mur du campus de Sevenans.

On y trouvera bien sûr celui de la promo 01.

Ça me fait très plaisir de voir ça, car cela montre une reconnaissance officielle, de la part de l’UTBM, de la notion de « promo ».

Lorsque j’étais en deuxième année de Tronc Commun, l’administrateur « provisoire » de l’UTBM (dont je ne citerais pas le nom ici tellement il a peu d’intérêt) avait organisé une réunion avec les diverses associations étudiantes : AE, BDS, BDF, etc. C’était l’occasion d’expliquer le rôle de chacune, de rappeler les actions des années précédentes, et de demander un peu de sous. Notre bon administrateur avait ajouté : « je vois parfois des affiches et des mails mentionnant une certaine ‘promo 01’, j’aimerais en rencontrer les responsables, car je n’ai aucune idée de ce que c’est ».

Les responsables (le président et le trésorier de l’association) y étaient allés. Moi non, parce que j’avais cours d’espagnol en même temps. Je sais, c’est une excuse à la con, mais sur le coup, cette réunion ne m’avait pas spécialement semblé importante.

Le président et le trésorier résumèrent le but de la promo 01 : fédérer les élèves de l’UTBM qui sont arrivés en 2000/2001 et organiser des repas de promo et des ventes de T-shirts. Notre bon administrateur annonça : « Moui, bof. ça ne me plaît pas trop ce genre de choses ». Le président répondit : « On ne vous demande rien, aucune subvention, aucun appui. Si on est ici, c’est uniquement parce qu’on a été invités ». Ils en restèrent là. Et je n’ai pas regretté d’être allé en cours d’espagnol à la place.

J’aimais bien les cours d’espagnol, je m’amusais à ajouter des grosses fesses et des gros seins aux femmes dessinées sur les polycopiés de cours.

 

La vidéo « corporate 2019 » de l’UTBM

Allez la voir par ici. Je ne sais pas pourquoi elle est intitulée « corporate ». Il m’avait semblé qu’une école d’ingénieurs n’était pas spécialement censée être corporate, mais ce n’est pas grave.

À 2 minutes 23, on voit un mec en blouse bordeaux dans un concert en train de brailler. Cela montre une reconnaissance officielle par l’UTBM de l’existence de ces blouses. C’est très discret, le gars n’est visible qu’une seule seconde, dans une seule vidéo officielle parmi plein d’autres. Mais ça me fait très plaisir.

Excusez-moi de refaire mon vieux papi, mais je vais encore devoir vous sortir une phrase commençant par « à l’époque ».

À l’époque, un article était paru dans Détours, le journal interne officiel de l’UTBM. Il y était écrit, en substance : « C’est malheureux de constater qu’à chaque événement étudiant, on retrouve systématiquement des ex-enibiens faisant les zouzous-zouaves. Quand donc verrons-nous disparaître la blouse et le béret ? ».

Le journal était placardé sur un panneau, quelqu’un avait écrit dessus « MENTEUR !! ».

Je suis vraiment heureux de voir que la hache de guerre a été enterrée et que toutes ces histoires et ces rancœurs ont définitivement disparues. J’aurais aimé que ça se fasse plus rapidement, car je n’oublie pas qu’on en a tous un peu chié, lorsqu’on voulait faire émerger et faire vivre l’identité étudiante UTBMienne.

 

Même vidéo, mais plus rigolo

Je me souviens d’un certain prof, un type pas trop naze, par rapport à d’autres que j’ai eu et qui étaient super nazes. Il était un peu à côté de la plaque concernant les exigences qu’on peut demander à un ingénieur, tout en martelant qu’il s’y connaissait de ouf’ de guedin.

Une anecdote en particulier : il nous avait donné pour projet « implémenter le principe de la compression jpeg ». Lorsqu’on lui demandait des détails, il se contentait de spécifier : « faites comme vous voulez, avec le langage que vous voulez. Je veux une compression jpeg et un rapport expliquant comment vous l’avez codé ».

Je ne connaissais pas le python à l’époque, mais je n’avais déjà plus envie de me prendre la tronche avec du C++. Alors je l’ai réalisé en Matlab. L’interaction utilisateur était réduite à son strict minimum : deux constantes à définir au début du script, indiquant le nom du fichier d’entrée et le nom du fichier de sortie.

Arrive la soutenance. Il m’interroge : « ou est l’interface graphique ? la fenêtre de sélection d’un fichier ? L’automatisation pour faire plusieurs fichiers à la fois ? »

Je lui réponds : « vous n’avez jamais demandé ça. Mon programme fait du jpeg, rien de plus ».

Et là, bim ! Il me sort sa réponse toute faite : « Vous voulez avoir une démarche d’ingénieur ? Alors vous devez toujours chercher à faire plus que ce qu’on vous demande ! ».

Quelques années plus tard, je travaillais péniblement à Merluchon Corp (je vous renvoie vers mes premiers articles de blog à ce sujet). Dans cette boîte à viande d’ouvriers-codeurs, on m’a bien précisé dès le départ que si je finissais une tâche plus tôt que prévu, je ne devais pas en commencer une autre, car ce serait un travail pour lequel la boîte ne serait pas payée. Je devais immédiatement le signaler au chef, qui lui, serait en mesure de me trouver une autre tâche, lucrative.

On peut prendre des initiatives quand on est ingénieur, et proposer de nouvelles choses qui vont améliorer des trucs. Mais on ne commence pas tout seul une tâche dans son coin « pour faire plus ».

À Merluchon Corp, j’avais parfois pris l’initiative de coder des bouts de python pour automatiser des bidouilleries internes. Mais lorsque je finissais une tâche plus tôt que prévu, je ne disais rien et je gardais le temps supplémentaire pour moi-même, pour glander et coder des projets persos. C’est une démarche d’ingéglandeur.

Cela dit, on se fout un peu de cette anecdote cafardeuse et de l’à-côté-de-la-plaquisme de ce prof. Ce qui m’a vraiment choqué chez lui, c’est la taille de ses narines.

Il a un gros pif, ce qui est une condition nécessaire pour avoir des grosses narines. Mais j’ai déjà vu des gens avec un pif aussi gros et des narines bien plus raisonnables.

Les siennes sont vraiment énormes, et en plus, il a une extension à chacune d’elle. Voici un schéma :

Pendant les cours, je trouvais ça vraiment déstabilisant. J’ai été obligé d’en parler à mes potes pour catharsiser cette vision irréelle.

Retournez à la vidéo précédemment mentionnée, positionnez-vous à 3:16. Vous verrez en gros plan l’une de ses narines, avec l’extension. On a presque l’impression que la vidéo met volontairement en exergue cette géo-curiosité nasale.

Est-ce là l’UTBM qui a pris la décision de reconnaître officiellement l’existence des hypernarines extensionnées de ce prof ? Je pense que oui.

 

La nostalgie

Je racle les fonds de tiroir de mes anciennes outrecuidances créatives. C’est vraiment le fond du fond, car j’en suis à mes vieux programmes Turbo Pascal que je faisais au lycée et à l’UTBM.

Ce faisant, j’apprends l’existence de dosbox-js. Un émulateur DOS en javascript.

[Insérer ici une image de faisan, rapport à l’expression « ce faisant »]

Alors je me suis dit que ce serait amusant de mettre le tout dans un mini-site internet, vous permettant d’exécuter mes vieux trucs directement dans votre navigateur. Rien à installer, configurer ou compiler. Il vous faut juste un ordinateur consentant.

Je n’ai pas encore tout fini, ce qui est déjà fait est par ici : http://recher.pythonanywhere.com/prog_pascal/main_pascal.html

Certains programmes sont très très lents. Le pauvre petit émulateur fait de son mieux avec mon code Pascal pas toujours bien foutu.

Il y a peu de documentation, ça ne le mérite pas. En revanche, j’ai ajouté des petites notes et des petits souvenirs à chaque programme (cliquez sur le lien « code source » de chaque page). Désolé pour, une fois de plus, le ton nostalgique.

Si vous avez le courage, installez l’émulateur Dosbox et exécutez mes programmes dedans. La vitesse sera bien plus raisonnable.

J’ai aussi le github qui va avec : https://github.com/darkrecher/prog_pascal

C’est en cours de raclage, je rajoute des choses au fur et à mesure. Je vous dirais quand j’aurais vraiment tout fini.

Je pascalais pas sur Atari, mais c’est marrant de voir que c’était possible.

Du code commenté et documenté pour Noël

Il m’arrive assez souvent de pondre un article aux environs de Noël, voire le jour même, car c’est le moment où je suis en vacances. Comme plein de monde, en fait.

Comme promis le mois dernier, j’ai rangé et commenté le code de ma petite animation pour la vidéo-boulette de l’UTBM. C’est dans mon repository git, par ici : https://github.com/darkrecher/anim-tunnel-utbm

J’ai fini un autre mini-projet sur lequel j’avançais par intermittence depuis quelques mois : compléter un challenge de niveau « très difficile » sur le site CodinGame.

Il s’agit du challenge « Vox Codei – épisode 2 ». Des vilains carrés rouges se déplacent sur un quadrillage, il faut déterminer les coordonnées où placer des bombes pour les détruire.

Cliquez sur l’image pour accéder au challenge (il vous faut un compte CodinGame).

Boum !

J’en ai profité pour utiliser « aboard », ma librairie de code gérant des plateaux de jeux en 2D. Je vous en avais déjà parlé, fouillez dans mes anciens articles ou dans mes repo git si ça vous intéresse.

Petit conseil pour les jeux dans CodinGame

Que ce soit des challenges ou des combats de bots : respectez le rythme des échanges stdin/stdout entre votre code et le jeu. À chaque tour de jeu, récupérez bien les infos qui vous sont envoyées en appelant des fonctions « input() », même si vous n’en faites rien.

Dans Vox Codei, la situation du plateau de jeu, avec les positions des carrés rouges, vous est transmise à chaque tour. Et à chaque tour, vous devez renvoyer soit le texte « WAIT », soit les coordonnées d’une bombe à poser.

Les mouvements des carrés rouges sont assez simples. Au bout de quelques tours, il est possible de les extrapoler. Vous n’aurez donc plus besoin des infos transmises par le jeu. J’avais pris la décision de ne plus les lire, et de simplement renvoyer mon WAIT ou mes coordonnées.

Eh bien ça met le jeu dans les choux.

Comme vous ne récupérez rien, le jeu croit que vous en êtes resté au début. Il attend, et au bout d’un moment, considère que c’est votre code qui est dans les choux. Il y a en effet un temps limite d’exécution pour chaque tour. Le jeu arrête votre programme si celui-ci est dépassé, pour les cas où vous auriez envoyé du code pourri comportant une boucle infinie.

Vous êtes alors averti d’un message d’erreur indiquant, en substance : « Désolé gros con, on a killé ton process car on le suspectait de glander. Corrige ton code de merde. Respect et robustesse. » Sauf que votre code n’est pas spécialement lent, c’est juste qu’il n’exécute pas les input() permettant de vider régulièrement le buffer d’entrée-sortie entre vous et le jeu.

De la doc publiée mais pas publique

Ce mini-projet m’ayant pris un peu de temps, je me suis dit que ça méritait une petite documentation, que j’ai directement écrite dans le code. Ensuite, j’ai publié le tout sur CodinGame.

Le problème, c’est que seuls les gens ayant déjà résolu le challenge ont accès aux solutions publiées par les autres. Je me suis donc cassé le fondement à décrire et commenter un algo dont seules 258 personnes pourront profiter. Ce qu’elles ne feront pas forcément car rien ne dit que ça les intéressera.

Tant pis pour la gloire. Je me console en me disant que j’ai réussi une chose que seules 258 autres personnes dans le monde ont réussie.

Joyeux Noël quand même

Voici pour l’occasion Meagan Kerr et ses dents du bonheur.

 

Rien pour ce mois-ci !

Amis feignassous, amies feignassottes, bonjour.

J’ai rien foutu pour le blog ce mois-ci. Donc pas d’article digne de ce nom. À part ce présent article pour dire que y’aura pas d’article.

Mais j’ai une excuse, j’ai réalisé une petite vidéo pour l’UTBM, la prestigieuse et grandiose école dans laquelle j’ai fait mes études.

Cette vidéo a été réalisé dans le cadre du montage « vidéo boulette », à l’occasion des 20 ans de l’UTBM. Plus de détail par ici : https://www.facebook.com/GalaAeUTBM/posts/2773072979403412

Je ne me suis pas contenté de faire une vidéo de moi qui chope une boulette de papier et qui la déplie. J’y ai intégré une jolie animation (codée en python, évidemment).

Le mois prochain, je ferais un article sur ce sujet, en y intégrant ladite vidéo, bien entendu. Et j’y ajouterais des explications sur les petits détails incorporés dedans.

Je n’en dis pas plus pour l’instant, car je réserve la primeur de cette vidéo pour la gala de l’UTBM.

Je ne serais pas présent à ce gala, c’est bien dommage et j’en suis désolé, mais c’est géographiquement un peu loin pour moi, et j’ai déjà du mal à trouver du temps pour faire les trucs que je dois faire.

Et si vous êtes de l’UTBM, n’hésitez pas à contribuer en faisant une vidéo de votre cru. Y’a juste que vous devrez faire ça à l’arrache, car y’a plus que aujourd’hui 31 octobre pour l’envoyer.

À le mois prochain tout le monde !

À défaut de montrer du texte sur une boulette de papier, Jade Parker montre son livre.

La cryogénisation du blog Sam et Max

Il y a quelques années de ça, un chien et un lapin se rencontrèrent.

− Bonjour monsieur le chien.

− Bonjour monsieur le lapin.

− …

− …

− …

− …

− …

− …

− Mais, que nous arrive-t-il ? Je sens comme un arc de tension sexuelle s’établir entre nous deux.

− Moi aussi. Cela va être difficile de le contrôler.

− Pourquoi ne pas céder à cet amour qui s’offre à nous ?

− Je n’ai rien contre les homosexuels, mais je n’en fais pas partie.

− Qui parle d’homosexualité ? Vous êtes un chien et je suis un lapin. Il ne s’agit rien de plus que de zoophilie.

− Comme vous avez raison. Faisons l’amour !

(Quelques mois plus tard…)

− Je suis enceint !

− Moi aussi !

− Quel bonheur ! Nous mettrons au monde toute une marmaillerie de petits chien-lapins !

(Encore quelques années plus tard…)

− Qu’allons nous faire de tous ces chien-lapins et autres lapin-chiens ?

− Il est impossible pour nous de nous occuper d’un aussi grand nombre d’enfants.

− Achetons un congélateur et cryogénisons-les.

− Sage décision. Malheureusement, les techniques de réveil après cryogénisation ne sont pas encore aboutie. Nous risquons de tuer ces pauvres petites créatures lorsque leurs futurs parents adoptifs voudront les réanimer.

− J’ai une idée ! Il nous suffit de les cloner à plusieurs reprises et de cryogéniser ces clones dans plusieurs congélateurs. Nous pourrons ainsi tenter des réanimations au fur et à mesure que la technologie évoluera.

C’est ce qui fut fait.

Archi-archivisme

Le blog http://sametmax.com/ existe toujours, mais aucun nouvel article ne sera ajouté. Les commentaires ont été réouverts momentanément. Lorsqu’ils seront fermés, le blog ne changera plus.

Il n’y a aucune garantie future qu’il restera en ligne. C’est insupportable ces gens qui ne se sentent coupables de rien sous prétexte qu’ils mettent leur travail à disposition librement et gratuitement. Encore un coup des trotskistes.

Ces messieurs Sam et Max ont expliqué comment récupérer tout le contenu de leur blog. Je n’ai pas de moyen de lancer des commandes « wget » de chez moi (désolé, Windows, tout ça). Je pourrais le faire au Travail, mais ça me gêne de mobiliser du CPU, de la bande passante et de la place disque en quantité indéterminée pour quelque chose que je ne peux pas trop justifier.

Alors j’ai fait le gros bourrin avec l’utilitaire WinHTTrack. Ça a mouliné sa mère pendant des heures. Je ne suis pas sûr d’avoir tout récupéré. Certains articles semblent avoir échappé au moissonage, car leur titre est trop long (en particulier toute la partie sur la programmation orientée objet). Je les ai récupérés manuellement, en espérant que d’autres n’ont pas planté de la même manière.

Puis j’ai tout compressé et tout balancé dans dropbox. Vous pouvez télécharger un énorme fichier .zip avec tout dedans. C’est cadeau c’est bonheur.

Il y a aussi des autoblogs, vous permettant de consulter directement les articles sans vous embêter à tout télécharger en local. Mais ils ne sont pas forcément à jour, et ont le même niveau de non-garantie de continuité que le blog de Sam&Max lui-même.

Dropbox pourrait également décider de virer ma sauvegarde.

Internet n’est pas forcément durable.

Ni vos ordinateurs. Ni le réseau de distribution d’électricité. Ni vous-même. Tout fout le camp.

C’est pour ça que lorsqu’on tient à quelque chose, il faut en faire le plus de sauvegardes décentralisées possibles, dans le plus d’endroits différents. Ce dropbox est ma toute petite contribution à cela.

Le passage nostaltriste

Le blog de Sam&Max s’est offert à mon temps de cerveau, il y a quelques années de cela, par le biais de roro, un ami bizarre de l’internet. Je le salue au passage, s’il me lit encore.

J’y ai lu tous les articles paru depuis que je l’ai découvert. Je me suis promis de me faire une rétrospective générale des anciens non encore lus.

Certains de ces articles ont augmenté ma culture générale informatique et ma veille technologique.

L’un en particulier m’a directement fait économiser plusieurs heures de travail de mon vrai Travail. Il s’agissait de l’explication d’un concept générique : les itérateurs avec yield . Et en plus ça m’a même pas servi pour du python, mais du C#.

Je me suis fendu de quelques petits commentaires chez eux, plus ou moins pertinents, plus ou moins utiles.

Je leur ai proposé quelques articles, qu’ils ont gentiment accepté de publier. En voici la liste.

J’avais l’idée de deux autres sujets qui auraient pu être intéressants :

– comment créer un plug-in Sublime Text.

que se passe-t-il en interne quand on définit une variable en python ? (https ://nedbatchelder.com/text/names.html)

Je les écrirais peut-être ici, dans mon blog à moi. C’est dommage. L’audience y est beaucoup plus faible, je ne pourrais donc pas en retirer tout le flattage d’ego que j’aurais pu en espérer.

Ça me fait quand même un petit quelque chose de voir le blog de Sam&Max s’arrêter. Un peu le même effet que la fin du magazine 42, même si ce n’est pas du tout le même genre de création. Snif snif beuheu-beuheu ouin.

Finalement, peut-être que cette nouvelle m’apporte plus de réconfort égoïste que de tristesse. Tous ces « créateurs de contenus web », qui parviennent à obtenir plus « d’audience » et « d’attention » que moi, finissent par abandonner et passer à autre choses. Moi je suis toujours là, depuis plus de 10 ans, sur mon blog pourri avec à peine 30 visites non-uniques par jour, à publier un article par mois.

Je m’accrocherai autant que je le pourrais, comme un vieux chewing-gum dégueulasse à la chlorophylle oublié au fond d’une poche.

Sur ce, voici une dernière image de lapine pour conclure.

Jessica Rabbit !

Un jeu de connexion en D3.js et du non-cis-genrisme

Au cours de mes diverses tâches dans le monde de Le Travail, j’ai dû utiliser à l’arrache la librairie graphique D3.js.

C’est plutôt rigolo, même si je n’ai pas tout compris. À un moment, je trashe puis reconstruis de zéro toute la structure de données définissant ce qui doit être représenté à l’écran. Sans sourciller, le D3 me fait une gentille petite animation de transition entre l’ancienne et la nouvelle structure. Très pratique, mais très étrange.

Notons cependant que ça reste du putain de javascript, c’est à dire un langage comportant 6 façons différentes de parcourir un tableau, pas forcément équivalentes entre elles.

(ici on pourrait mettre une image faisant un jeu de mot entre « D3 » et « Detroit », mais ne sommes-nous pas au-dessus de tout ça ?)

J’ai profité de ces connaissances joyeusement glanées pour créer un tout petit jeu.

Il s’agit d’un hommage à Eye Of The Beholder. Vous devez associer les armes, armures et objets aux différentes classes de personnages qui savent les utiliser. Attention, malgré le fait que j’ai regroupé certaines de ces classes, il y a des objets qui doivent être associés plusieurs fois. De plus, je ne peux totalement garantir que mes souvenirs soient restés exacts, s’il y a des oublis ou des erreurs, n’hésitez pas à me le hurler dessus.

Le jeu peut fonctionner en local, et il est configurable assez facilement. Les associations à trouver pourraient être entre des gens que vous connaissez et leurs hobbies, entre des fruits et leurs couleurs, entre des recettes de cuisine et leurs ingrédients, etc. Toutes les explications et les ressources sont dans le repository github prévu à cet effet.

Réflections à 2 centimes sur le cis-genrisme dans les jeux vidéos.

« Cis-genrisme » est un mot que j’ai plus ou moins inventé, sans trop savoir exactement ce qu’il pourrait signifier. Débrouillez-vous avec ça.

Et tant qu’à tout mélanger, j’ai aussi balargué de l’écriture inclusive dans le jeu. Il y a des gens qui n’en ont rien à foutre de l’écriture inclusive, donc ils ne l’utilisent pas. Mon but est de montrer que je n’en ai encore plus rien à foutre, à tel point que ça ne me dérange pas de l’utiliser.

Ouais bon bref.

Il ne vous aura pas échappé qu’il existe différents types de jeux vidéos :

  • Ceux qui sont tellement azimutés et vaporeux qu’ils ne peuvent être ni pour ni contre le cis-genrisme. Par exemple : Osmos, un jeu dans lequel vous êtes une bulle (https:// www. osmos-game.com/).
  • Ceux qui montrent explicitement qu’il existe d’autres manières de penser que le cis-genrisme. Par exemple Dys4ia, de Anna Anthropy (https ://fr. wikipedia.org/wiki/Dys4ia).
  • Ceux qui s’en foutent complètement.
  • Ceux qui sont explicitement cis-genre, voire explicitement sexiste, sans forcément l’assumer.

Eye of the Beholder irait plutôt dans la catégorie « qui s’en foutent ». Mais, sans le faire exprès, il a peut-être un tout petit peu contribué à faire évoluer les esprits.

Comme dans tout bon jeu de rôle qui se respecte, vous devez initialement créer vos personnages, définir leur métier, leurs attributs, leur genre et leur trombine. Le panel de choix est le suivant :

Certes, il y a moins de femmes que d’hommes, une partie d’entre elles montrent leurs nichons, et je vous laisse débattre sans moi concernant la présence d’un voile.

Pour autant, ces femmes que nous voyons ne sont pas toutes à sourire bêtement et ne sont pas toutes féminisées à outrance, certains visages sont mêmes suffisamment marqués pour laisser imaginer des personnalités spécifiques (une borgne, une toute verte, etc.). À l’heure des polémiques sur les princesses Disney qui ont toutes la même gueule, un jeu vidéo vieux de plus de 10 ans a essayé de diversifier les personnalités des femmes dans un espace délimité par un rectangle de 257×100 pixels (https ://every-flavored-bean.tumblr.com/post/112569173199/every-woman-in-every-disneypixar-movie-in-the).

C’est toujours ça de gagné.

Les têtes, les genres et les noms que vous choisissez pour vos personnages n’ont aucune incidence dans la suite du jeu, mais ça en a peut-être sur vous-même.

Si vous n’êtes pas trop débile, vous placerez systématiquement votre guerrière en première ligne et votre prêtre à l’arrière, vous confierez le livre de sorts à votre magicienne et les outils de crochetage à votre voleur. Ces choix sont contraints par le fonctionnement du jeu.

Mais qui attaque en premier ? Qui est placé derrière qui ? Comment organisez-vous les objets dans les inventaires ? Qui(s) stocke(nt) la nourriture ? et les potions ? et les bijoux ?

Comme ces choix sont mineurs et sans grandes conséquences, peut-être que vous les prendrez en vous laissant inconsciemment influencer par d’autres détails mineurs. Les noms et les visages de vos personnages ne changent pas le jeu, ils changent la manière dont vous allez vivre le jeu. Et puisque notre comportement global d’humain est déterminé par nos expériences passées (réelles ou virtuelles), ils changeront aussi votre vie, même infinitésimalement.

Mais ce n’est pas exactement de ça dont je voulais vous parler.

Re-regardez bien tous ces portraits, aussi bien les hommes que les femmes. Deux d’entre eux apparaissent dans les deux genres :

Dans Eye of the Beholder, vos personnages peuvent avoir un aspect physique ne permettant pas de déduire si c’est un homme ou une femme. Appelez-ça comme vous voudrez : hermaphrodite, neutre, asexué(e), non-cis-genrifié-e, inclusi(fve), inclusifive, inclusisix, inclusiseven, …

Il est probable que l’intention initiale n’était rien de plus qu’augmenter artificiellement le panel de choix, sans nécessiter plus de travail pour les graphistes. Mais c’est là. On peut s’amuser à penser que ça ait hypothétiquement aidé quelques personnes à entrevoir plusieurs possibilités d’être.

En ce qui me concerne, ça m’a rappelé que je n’ai jamais vraiment joué aux jeux Eye of the Beholder 2 et 3. Faudrait que je trouve le temps de m’y mettre, même s’il paraît que le 3 est pourri.

Youhou !

Je vous laisse avec MechaLilith, en une not-so-related-pic.

Dessins de l’Ovuliaire 2019

Yo-ho-hoooo.

Comme promis le mois dernier, voici mes petits dessins réalisés lors du dernier événement corporate : l’Ovuliaire 2019.

Tout d’abord, une tour. À noter que les trois oiseaux sont une référence très lointaine à la série de BD Rork, de Andreas Martens.

Dessin d'une tour de magicien avec des oiseaux et une Lune géante

Et ensuite une algue géante croisée avec un poulpe. Mascotte À-Fleurs, en voyant ce dessin, m’a dit : « oulàlà, mais c’est un peu du hentaï, ça ».

Euh… Non. C’est juste que récemment, je venais de me refaire le jeu Day of the Tentacle. Mais bon, qui suis-je pour juger les pensées hentaï de mes collègues ?

Comme toujours quand je publie un article avec des dessins, j’en ajoute un qui n’est pas de moi et qui représente des femmes rondes. Celui que je vous propose aujourd’hui est un Robert Crumb, dessinateur de comics américain underground. Je l’ai découvert dans les BD de Scott McCloud. Il aime et dessine des amazones avec des jambes musclées et des seins tout à fait honorables.

Zouplaï.

L’article de ce mois-ci est un peu petit. Mais celui du mois précédent était long, alors pouet-pouet.