Le serveur Discord de Squarity

Joyeuses fêtes. Comme d’hab’, le moment de Noël-Nouvel an est l’occasion d’avancer mes projets, because vacances, et c’est bien cool.

J’ai créé un Discord pour Squarity. C’est ici : https://discord.gg/D5SYnk8u3j .

Je m’en servirais pour publier les annonces de mise à jour. Il y a aussi divers espaces pour montrer les jeux que vous faites, poser des questions techniques, ou tout simplement parler de n’importe quoi.

C’est un début.

Si vous avez déjà un compte Discord, ce serait super sympa de venir, même si vous n’avez rien à raconter. Juste pour montrer qu’il y a des gens qui s’intéressent à ce projet.

J’ai également créé un compte sur un serveur mastodon, histoire d’avoir une bonne conscience auprès des libristes :
https://mstdn.io/@recher

J’annoncerai les mêmes choses sur le discord et sur mon compte mastodon. Vous pouvez vous raccrocher à un seul des deux, celui que vous préférez.

Hypothétiquement, il y aura un jour un vrai forum et des vrais comptes où on pourra enregistrer ses jeux, mais ça c’est pour une date indéterminée.

Un peu de couleurs pour finir l’année, avec Romekia Brown.

Iodification du python squaritien

Coucou ! Quatre fois n’est pas coutume, je viens encore vous parler de Squarity.

J’ai réussi à régler le problème de lenteur. J’ai lâché la librairie JS Brython, pour la WebAssembly Pyodide.

Argh, du code binaire !

D’aucuns-et-d’aucunes considèrent que les WebAssembly sont le mal absolu, car, tout comme le code binaire des fichiers exécutables, c’est non lisible par un humain. Ça va à l’encontre de l’un des dogmes du web, qui énonce que tous les composants d’un site doivent être analysables, même si cette analyse peut être compliquée. Le HTML, le javascript, le CSS, le JSON sont écrits avec des mots, et non avec des nombres. C’est en partie en raison de ce dogme que les navigateurs vont définitivement virer la technologie Flash.

J’oblige donc votre navigateur à exécuter du code que vous ne pouvez comprendre aisément, ce qui fait de moi un vilain.

Ce à quoi je répondrai : « Mouiimmpfboapf, ça va bien. Le code source de Pyodide est disponible sur internet. D’autre part, avez-vous tous les codes sources de tous les exécutables que vous lancez sur votre machine ? ». À mon avis, la seule personne qui peut vraiment le prétendre serait Richard Stallman.

(TODO : insérer ici une photo à poil de Richard Stallman, pour équilibrer par rapport à la quantité de photos de femmes rondes à poil qu’il y a dans ce blog)

Heuwargl, le chargement est lent !

L’exécution de code python dans un navigateur est plus rapide par Pyodide que par Brython. J’ai fait quelques benchmarks au doigt mouillé, en particulier avec le jeu Loops in Pool. La propagation de la boue et de l’eau sont maintenant beaucoup plus fluide.

Dans la version précédente de Squarity, j’avais testé avec un délai de 1 milliseconde entre chaque propagation, et c’était quand même lent. Alors j’ai mis 400 millisecondes pour ne pas surcharger la machine. Dans la nouvelle version, j’ai re-essayé 1 milliseconde, l’animation s’est accélérée significativement. Je l’ai laissé ainsi, youpi.

Cependant, l’initialisation de Pyodide est très lente. Il faut télécharger 20 Mo de bazar, alors que Brython tient en moins de 10 Mo (et c’est déjà beaucoup pour du javascript !). Ensuite, le navigateur doit interpréter et démarrer la WebAssembly, ce qui prend encore quelques secondes.

« Dans le monde dans lequel on vit », tout doit aller très vite. Une dizaine de secondes d’attente peut décourager certaines personnes. Ce choix de Pyodide me fera donc perdre une base potentielle de user-client-partner. Mais je préfère décourager définitivement un petit nombre, plutôt que ralentir continuellement tous les futurs fidèles qui utiliseront Squarity.

Je mettrai une barre de progress la plus précise possible. On accepte plus facilement d’attendre lorsqu’on voit un décompte qui avance. Actuellement, le progress n’est qu’une liste de 8 étapes, dont 6 sont pratiquement instantanées et 2 sont très longues. C’est pas du tout suffisant.

Prototype d’une barre de progress avec estimation de temps incertaine.

Si je pouvais éviter le re-téléchargement des 20 Mo une fois que ça a été fait, ce serait top. Je sais bien que le navigateur a un cache, mais celui-ci a une fâcheuse tendance à se vider. On a le droit de stocker des WebAssembly dans du local storage ?

J’ai également testé sur smartphone. Ça fonctionne (j’en n’étais vraiment pas sûr), par contre l’exécution reste super lente. Les fuckings millenials de la génération Ÿ écoperont des deux inconvénients : lent à l’initialisation ET à l’exécution. Je laisse comme ça pour l’instant, tant pis. De toutes façons, le premier truc à régler concernant l’utilisation sur smartphone serait le responsive design cradingue. Et dans un futur très lointain, on pourrait carrément imaginer une app.

Il suffira juste d’accepter le postulat qu’une app mobile exécutant du code python arbitraire ne constitue pas une faille de sécurité. Ha ha ha. Je ne suis même pas sûr de ce postulat concernant les sites web. Re-ha re-ha re-ha. Bref : y’a du boulot.

En tout cas, Pyodide est beaucoup plus simple à intégrer que Brython. Pour exécuter du python, j’ai une fonction à appeler, avec le code en paramètre. On peut directement lire/écrire les variables javascript, les exceptions python sont automatiquement remontées, avec traceback et message. J’ai tout ce qu’il me faut.

Avec Brython, je devais pré-placer mes variables d’échanges dans un truc à la con, mettre mon code dans une balise script, lancer une fonction sans paramètres, prier pour que la portée des variables ne se vautre pas toute seule, et lire les données de retour dans le truc à la con sus-mentionné. Je ne vous (re)parle même pas de la récupération des erreurs où j’ai eu recours à des astuces tellement tordues que mon cerveau a préféré les oublier !

Vive Pyodide. De plus, je ne désespère pas que dans quelques siècles, si l’humanité n’a pas entièrement crevé pour une raison quelconque, les navigateurs web soient nativement dotés d’un interpréteur python. Que l’on ait enfin une alternative sérieuse à ce javascript de merde.

L’ancêtre de Pyodide sur smartphone

Qui veut dessiner un beau tileset ?

Mon jeu-phare, les aventures de H2O, mériterait bien un petit coup de polish (dans le sens polissage, pas dans le sens polonais). Mais je ne suis pas un dessinateur assez doué pour ça.

Alors j’ai posté un message chez la communauté PixelJoint, pour leur demander qui serait assez gentil pour me redessiner le tileset de H2O, en mieux.

Je me suis fendu d’une explication détaillée de toutes les tiles.

Si vous élevez des pixels chez vous, n’hésitez pas à vous manifester sur le forum de PixelJoint. Il s’agit d’un concours en mode bisounours, dans lequel tout le monde gagnera. C’est à dire que je ne prendrais pas le meilleur tileset, mais je ferais une version du jeu H2O pour chaque tileset qui sera proposé.

Pour l’instant, je n’ai eu qu’une seule proposition, via message privé. Je peux m’en contenter, le pixel-artiste m’a fait un super boulot. Vous le verrez très bientôt lorsque j’aurais mis à jour le jeu.

Pour le bon plaisir de ce projet Squarity, j’ai dû me créer un compte Twitch, un compte Ludum Dare, un compte GoDaddy, un deuxième compte pythonanywhere et maintenant un compte PixelJoint. Tellement populaire, tellement social.

Il y a de jolies choses sur PixelJoint

À propos de social

L’une des prochaines grosses étapes de Squarity sera de créer un lieu d’échange et de contenu. Ça me permettra de recenser les jeux existants, de publier les release notes, d’ajouter des articles et des tutoriels, d’aider les codeureuses en herbe, etc.

Je ne sais pas encore sous quelle forme je ferai ça. Le plus simple serait un serveur Discord, mais j’aimerais éviter d’être trop dépendant d’un réseau social existant, quitte à payer un petit peu. Peut-être que ça se finira avec une instance Mastodon et un CMS à l’arrache.

Mais j’aimerais aussi éviter d’obliger les gens à se créer un enième compte sur un enième site. J’essaierais peut-être d’intégrer des authentifications tierces : les boutons « sign in with Google », « sign in with Github », etc.

Bien évidemment, je ne connais pas grand chose dans ce domaine, ça risque donc de me prendre du temps et d’être un beau bordel. On verra bien. Peut-être que dans trois semaines, j’écrirais un article de blog larmoyant expliquant que c’est trop compliqué, que j’abandonne tout, et que je préfère encore utiliser tout mon temps libre à zapper en continu sur Twitch.

(TODO: insérer ici une image prise sur Twitch de gens pixelisés déguisés en serpent qui font passer des arcs électriques dans de la vapeur d’eau pour voir si ça la disperse et qui ensuite font de la peinture sur corps).

À propos de corps

Petit rattrapage de tous les précédents articles n’ayant pas d’images de femmes rondes.

Voici Nicole Nurko, dont je vous ai précédemment parlé :

Ainsi que Kim Manana :

Et la sublime-bling-bling Gabriella Lascano :

Pro-tip : lorsque vous voulez parcourir un compte Instagram (d’une femme ronde ou pas) et que vous ne voulez pas vous inscrire car, comme dit précédemment, vous en avez marre de vous créer des comptes de partout, vous pouvez remplacez dans l’url « instagram.com » par « imginn.com ». Vous aurez toutes les photos sans les pop-ups lourdingues.

À la chopraine, comme on disait dans les années 1990.

Classement Ludum Dare et presque un jeu de Soko-punk

Ludum Dare

Voici mon classement au Ludum Dare.

Il y a eu 800 participations dans la catégorie « Compo ». Une trentaine de personnes ont noté mon jeu.

  • Overall: 513ème
  • Fun: 426ème
  • Innovation: 144ème
  • Theme: 530ème
  • Graphics: 578ème
  • Humor: 438ème
  • Mood: 545ème

Pour une première participation, c’est pas si mal. Je suis assez content de mon classement en « Innovation ».

Manifestement, le jeu de mot dans le titre du jeu : « Loops in Pool » n’a pas vraiment fait décoller mon classement en Humour. On fera mieux la prochaine fois.

Presque Soko-punk

Et voici un lien vers le jeu que nous avons créé en live mercredi soir.

Il est pas fini, mais ça fait quand même des trucs. Il faut imaginer que l’héroïne que vous dirigez n’est pas censée pouvoir passer dans des éclairs.

Du Sokoban-like dans une ambiance Steam Punk.

Le but est d’électriser toutes les boules, mais vous n’êtes pas obligé de toutes les connecter ensemble dans un même graphe connexe. Lorsque le but est atteint, il aurait dû y avoir un petit « print » pour dire bravo, et un passage vers un hypothétique niveau suivant.

Une fois de plus, je me suis heurté à la lenteur de Brython. Dans mon code, j’avais un double parcours imbriqué de toutes les tiles du jeu, pour vérifier quelles boules doivent être électrisées. Rien que ça, ça mettait quelques secondes.

J’ai arrangé le code pour que ce soit plus rapide. Mais cette lenteur pose de plus en plus problème, même pour des jeux que j’aurais cru simple. J’ai peut-être une piste pour régler ça, je vous en reparle quand je l’aurais testée, c’est à dire dans un délai non défini.

À nouveau, pas d’image de femme ronde. Désolé. Je me rattraperais au prochain article. En attendant, vous pouvez chercher « yathbeauty » sur Twitter, TikTok et instagram. Très jolie, et elle sait comment se tenir pour nous faire profiter de ses atouts.

Twitch ce mercredi à 22h !

Gzolb les prolos.

Petit article très rapide, juste pour dire que mercredi 28 octobre, à 22h, je streame sur twitch. On créera un petit jeu sur Squarity, en live.

Ça se passera par ici : https://www.twitch.tv/recher_squarity

Oh, et sinon j’ai trouvé le moyen d’afficher les messages d’erreur et la traceback quand le code python plante. Ce sera mis en prod d’ici mercredi, ce qui me permettra de beaucoup moins galérer.

Pas d’image de femme ronde parce que c’est vraiment un tout petit article. Mais si vous voulez prospecter par vous-même, tapez « Nicole Nurko » dans un moteur de recherche.

Ludum Dare 47 post-codem

Comme annoncé dans mon précédent article, j’ai participé au Ludum Dare. Vous pouvez jouer à ma contribution directement par ici.

La tradition dans les game jams est d’écrire un « post-mortem », c’est un petit (grand) texte que l’on écrit à tête reposée après avoir bossé comme un oufzor pendant tout un week-end à créer un jeu.

Je trouve l’expression « post-mortem » étrange. Je ne suis pas mort, même si ça a été assez intense et que j’en suis sorti fatigué. Donc : « post-codem ».

Fonctionnement du jeu

Les premiers retours m’indiquent que c’est difficile à prendre en main au départ. J’ai donc fait une petite vidéo de démo explicatoire. J’y parle anglais, c’est une catastrophe. Vous avez le droit de mettre en mute.

L’aire de jeu est une piscine qui se recouvre entièrement de boue et de lierre (les petits traits verts). Vous sélectionnez une première case, en appuyant sur le bouton « 1 », puis vous en sélectionnez une deuxième, et elles s’échangent. Le but est de construire, par échanges successifs, des boucles fermées de lierre, ce qui déclenche la suppression de la boue qui est à l’intérieur.

Il faut commencer par créer une boucle à côté de la fontaine d’eau en haut à gauche. L’eau avance lorsqu’elle est en contact avec une zone sans boue. Vous devez la propager petit à petit jusqu’à l’arrivée en bas à droite.

Vous ne pouvez pas échanger une case si elle n’est pas unie, c’est à dire ayant un mix de boue et d’eau. C’est gênant lorsque vous avez deux boucles proches : vous ne pouvez pas créer de mini-boucle entre les deux pour les fusionner. J’ai donc ajouté un pouvoir spécial, lorsque vous activez le bouton « 2 » sur une case comportant de la boue, un trait vert se rajoute, qui peut vous permettre de finaliser une boucle.

Par le pouvoir du lierre !!

Post-codem au sujet du jeu

Le thème était : « Stuck in a Loop », c’est à dire : « Coincé dans une boucle ».

Il y a deux modes de participation au Ludum Dare :

  • Jam : vous avez 3 jours pour créer un jeu vidéo, en équipe ou en solo. Vous pouvez réutiliser des images, des sons et des codes existants (en respectant les licences et autres fucking copyright, évidemment).
  • Compo : c’est le « hard mode ». Vous n’avez que 2 jours, en solo. Tous les éléments de votre jeu doivent être originaux et doivent avoir été créés durant ces 2 jours. Obligation de partager le code source. Mais vous pouvez utiliser des outils de création privatifs (Unreal Engine, par exemple).

J’ai choisi compo. C’est pas que je veuille me la péter en démarrant directement en hard mode. C’est juste que j’avais mon week-end de dispo, mais pas le lundi après. Et les autres contraintes de la compo me convenaient.

Bien entendu, je n’ai pas eu le temps de réaliser toutes les idées que j’avais. Ça arrive à chaque projet (artistique ou non). Comme c’est systématique, on sait à l’avance qu’on ne pourra pas tout faire, on peut donc diminuer ses prétentions dès le départ. Mais même ainsi, les prétentions restent trop grandes, et on finit toujours par finir à l’arrache.

Ouais, à la

Comme dirait Helmut : voilà un jeu de mot franco-allemand qui Kohl très bien à l’article.

Échec de la continuous delivery

J’ai tellement galéré à coder (j’explique pourquoi dans le dernier chapitre de cet article), que ce n’est que le dimanche à 12h que j’ai eu une version pre-pre-alpha, comportant uniquement la fonction d’échange et la détection des boucles.

Note pour les prochains Ludum Dare : se réserver des petites plages de temps pour tester et faire tester son jeu par des gens quelconques. Ça permet d’ajuster la difficulté et éventuellement de glaner de nouvelles idées.

Ce que j’avais imaginé au début : coder un petit bout de truc, le montrer aux gens qui vivent avec moi, même si ça ne constitue pas un vrai jeu, montrer le bout de truc suivant, et ainsi de suite. On aurait avancé tous ensemble durant le week-end, ces mini-démonstrations régulières auraient permis de me faire pardonner le fait que je me serait comporté en geek pendant 48 heures.

Au lieu de ça, j’ai passé les trois premiers quarts du week-end à grogner devant mon ordinateur. Lorsque quelqu’un venait me voir, je lui grognais que rien ne marchait. Pas très interactif.

Groumpf ! A marche pô !

Échec de l’explication du mécanisme du jeu

J’avais prévu de faire un petit tutoriel, qui s’est terminé en un pseudo-manuel écrit en 20 minutes, sous forme de docstring au début du code python. J’ai ensuite pseudo-copié-collé ce manuel pour le mettre dans la description Ludum Darienne.

Ça n’aide pas trop à comprendre le fonctionnement du jeu quand on le découvre. D’où la petite vidéo que j’ai faite après. Qui est elle-même créé à l’arrache, mais ça c’est parce que j’ai très peu d’expérience dans ce domaine. Je cause très mal anglais alors que d’habitude en vrai conversation je m’en sors potablement. De plus, on m’entend prendre de grandes inspirations avant chaque phrase. C’est malaisant.

Même la longueur de la vidéo est une erreur. J’explique tous les mécanismes du jeu durant les 4 premières minutes, puis je passe 6 minutes à terminer ma partie. Lorsque les ordispectateurtrices-joueureuses arrivent sur ma page Ludum Darienne, ces personnes voient une vidéo ayant une durée de 10 minutes. Elles ne la regardent pas forcément, parce que c’est trop long. Si la durée affichée avaient été plus courte, il y aurait eu plus de chances qu’elles cliquassent sur « play », parce que gâcher 4 minutes de sa vie dans notre monde actuel est quelque chose d’encore à peu près acceptable. Ce serait d’ailleurs intéressant de connaître la probabilité de clic sur un bouton « play » en fonction de la durée d’une vidéo, mais ce n’est pas le sujet.

Les graphismes sont manifestement beurkys. Les explications du jeu utilisent le terme « vines » (du lierre), il faut comprendre que ça correspond aux traits verts. Ces traits sont une représentation métaphysique aristotélicienne du lierre quand on n’a pas eu le temps de le dessiner correctement.

Possible échec de la promotion de Squarity

Cette participation au Ludum Dare, et les futures participations à d’autres game jams, n’ont pas pour but de créer un jeu génial qui sera premier au classement et restera dans la mémoire de l’humanité (même si ça me plairait bien). Le but est de promouvoir Squarity.fr, ma plate-forme de création et partage de jeux.

Je veux provoquer chez les Ludum Daristes une réaction de type :

« Voyons voir ce jeu… Moui bof. Pas génial.

Oh, mais quelle est donc ce site web étrange… Squarity ? Mais que vois-je dans la partie droite ? Une fenêtre de texte avec du code python dedans, et d’autres informations qui semblent définir le jeu auquel je suis en train de jouer !

Que va-t-il se passer si je change des trucs et que je clique sur le bouton de validation en-dessous ? Oh bon sang ! Le jeu se modifie instantanément ! Ce site est génial ! Je vais de ce pas m’en servir pour créer tous mes prochains jeux. Je participe au Ludum Dare, c’est bien que je veux créer des jeux pour le restant de ma vie !

Mon avenir sera squaritien ou ne sera pas ! »

Pour provoquer une telle réaction, il faut bien entendu que Squarity soit amélioré (ce qui se fera progressivement), mais la moindre des choses aurait été que je commente mon code python, afin d’aider le monde à comprendre son fonctionnement, et par là même le fonctionnement de Squarity.

J’ai échoué sur ce point, mon code est cradingue et très peu documenté. J’essayerais d’arranger ça dans les jours à venir. Et puis je voulais aussi créer un mini-jeu tutoriel de Squarity. Tant de choses à faire, comme d’habitude…

Les carrés sont l'avenir du monde

Succès de la fontaine !

J’avais prévu d’afficher la quantité de mana sous forme d’une jauge dans un coin de l’aire de jeu. Mais en me levant le dimanche matin, j’ai eu une idée géniale : Squarity ne permet que d’afficher des images, mais la transparence est gérée. Lorsque le mana est bas, je peux noircir la fontaine en superposant plus ou moins de pixels noirs transparent dessus !

Pas besoin de perdre de temps à dessiner une jauge de mana et à coder des choses compliquées pour l’afficher. Avec 4 lignes de code dégueux et un seul sprite supplémentaire (créé rapidement à partir du sprite de la fontaine, en mettant tous ses pixels en noirs-transparents), j’avais un indicateur de mana bien mieux intégré dans le jeu.

Pour fignoler le tout, j’ajoutais un petit log indiquant la quantité exacte de mana lorsqu’on sélectionne la fontaine.

À droite de la fontaine se trouve l’image correspondant à son « ombre ».
if self.pool_mana < 100:
    nb_fountain_darking = (100 - self.pool_mana) // 5
    for _ in range(nb_fountain_darking):
        gamobjs.append("darkfountain")

Je vois aussi cette fontaine comme un très très lointain clin d’œil à l’un de mes jeux préférés intemporels et intraspatial : Might and Magic – World of Xeen.

Alamar, you misguided mechanism ! You’ll destroy us all !

N’ayant pas peur de faire de la surenchère, je rajoutais un autre lointain clin d’œil à World of Xeen : dans le pseudo-scénario de mon jeu, le personnage de la « Countess du Swagging » est une référence au mot de passe secret « Count Du Money ».

Cette fontaine est un auto-clin d’œil, puisque c’est le logo de New World Computing

Si jamais je continuais le dev de ce jeu

Je note ici toutes les idées que je pourrais rajouter dans une hypothétique version post-ludum.

Faciliter le début en pré-plaçant du lierre

Si on n’a pas de bol, on commence comme ça :

Peu de lierre partent de la zone d’eau. Pour y coller des boucles, on risque d’être obligé d’utiliser le pouvoir d’ajout de lierre. Or c’est un pouvoir qui coûte assez cher en mana, car on ne devrait normalement l’utiliser qu’en dernier recours.

J’aurais dû ajouter automatiquement quelques connexions partant de la zone d’eau. Quelque chose comme ça :

C’est beaucoup plus facile de tracer un chemin depuis le trait vertical qui est sous la zone jusqu’au trait diagonal, ou bien depuis le trait horizontal à droite jusqu’au trait diagonal, et ainsi créer une première boucle sans s’arracher les cheveux.

Une « learning curve » moins violente

Il faudrait ajouter des niveaux. Les premiers seraient rendus plus facile par :

  • un tutoriel,
  • des maps plus petites,
  • des délimitation de cases plus marquées,
  • l’absence de traits diagonales.

J’ai eu beaucoup de remarques au sujet des délimitation de cases. Les gens analysent la map, repèrent une case qui leur convient, et s’aperçoivent ensuite que ce n’en est pas une mais que c’est 4 coins de 4 cases différentes. J’avais fait exprès de brouiller les limites entre les cases parce que je trouvais ça cool et j’aime créer des choses difficiles pour ensuite prendre un air condescendant auprès des gens qui n’y arrivent pas. Mais peut-être que j’ai overkillé.

Alors que les grands comédiens gomment les coupures entre vers lorsqu’ils déclament des alexandrins, je gomme les coupures entre cases lorsque je crée des jeux grid-2D.

J’embroche vos rimes, mon épée vous tru-Cid.

Un monde ouvert

Il y aurait une aire de jeu plus grande que ce que peut afficher l’écran. On ne pourrait pas scroller partout. On aurait un personnage et le scroll serait limité autour de lui. On pourrait déplacer ce personnage uniquement vers une case recouverte d’eau. Pour progresser dans le monde, il faudrait donc faire des boucles et propager l’eau petit à petit.

Par contre, ça gâcherait un peu si on permet de faire des boucles géantes, et surtout il y aurait le risque que le temps de calcul de vérifs des boucles soit trop long. Donc il faudrait limiter les tailles de boucle. Ce qui pourrait être sujet à des bonus : au début on ne peut faire que des boucles ayant une longueur de 5, puis 6, puis 7, etc.

Bien entendu, ce grand monde ouvert serait truffé de bonus, de mana, de sorts et de pouvoirs à gagner. Pour récupérer quelque chose, il faudrait amener son personnage dessus, donc l’entourer avec une boucle.

Et puis des passages secrets et des zones super compliquées à atteindre. Par exemple un grand couloir de 3 cases de large avec un super bonus au bout.

Je voulais aussi faire une super blague, avec un genre de quête annexe. Une map où l’objectif serait à côté du point de départ, mais il y aurait un grand mur entre les deux. Il faudrait faire tout un détour pour l’atteindre. À la fin, le personnage aurait dit : « j’ai du créer toutes ces boucles de lierre juste pour parcourir une grande boucle qui me ramène à mon point de départ ! WTF ? ». Haha, lolilol potentiel.

D’autres idées en vrac

L’échange entre une case de boue et une case d’eau ne coûterait pas de mana, mais ne ferait que déplacer les lierres de l’eau sur la case de boue. On perdrait les lierres de boue. Ça nettoie la piscine et ça encourage à étendre l’eau le plus possible, pour conquérir des lierres qu’on pourra ensuite placer gratuitement.

Des statistiques :

  • longueur & surface de la plus grande boucle réalisée,
  • nombre de boucle créées en une seule action,
  • maximum de mana atteint,
  • rentabilité (mana gagné / mana dépensé),
  • nombre de case d’eau créées,
  • etc.

Et bien sûr, des achievements et des bonus liés à ces stats.

Des robots

Quand on fait une boucle, ça ne supprime pas immédiatement la boue. Il faut poser des petits robots nettoyeurs qui enlèvent la boue autour d’eux. Ils fonctionnent pendant un temps limité. Donc si on les pose sur une boucle trop grande, ils ne nettoieront pas tout et la boue se repropagera dans la boucle. Si on les pose sur une boucle plus petite, ils nettoient tout, la boue ne se propage pas car elle ne peut pas traverser les lierres. On peut alors déclencher la propagation de l’eau vers la boucle nettoyée.

C’est une idée qui reste à finaliser. Parce qu’actuellement, l’eau peut passer à travers le lierre. Donc si on commence à nettoyer une boucle avec des robots, l’eau peut alors se propager tout de suite dans une boucle dont le nettoyage n’a pas été terminé, et ça peut donner n’importe quoi.

Ou alors on dit que l’eau ne passe pas le lierre. Et on doit enlever manuellement le lierre qui sépare l’eau de la boucle nettoyée. À réfléchir si on a envie.

Je laisse cette idée là où elle est, j’ai peur d’avoir embrouillé tout le monde en la décrivant.

Robot nettoyant la boue (à moins que ce soit l’inverse)

Post-codem concernant Squarity

Voici maintenant mes retours en tant que simple utilisateur/créateur de cette plate-forme de jeu.

Les messages d’erreur, rogntudjuu !

Comme l’a si bien dit 10kbis en commentaire de mon précédent article, il faut les messages d’erreur et les tracebacks !

Quand le code du jeu plante à l’initialisation, le message s’affiche comme il faut dans la console du navigateur. Mais quand ça plante pendant l’exécution d’une callback, on a que d’alle. On ne sait pas où ça a planté, ni pourquoi. Je n’ai pas encore pris le temps de régler ce problème.

Je pensais être capable de coder du python sans visibilité sur les messages d’erreur. Je m’étais dit : « je suis super fort, et au pire, je pourrais toujours débuguer à coups de print ».

Débuguer à l’aveugle, c’est ce que j’ai fait pendant tout le week-end. C’est la raison pour laquelle je n’ai eu une version pre-pre-alpha que très tard. Ça m’a aussi mis de sérieux doutes sur ma capacité à sortir quelque chose de jouable avant la fin.

J’avais prévu, après le Ludum Dare, de me poser un peu concernant le dev, faire un semblant de road-map, nettoyer et documenter un peu mon code. Mais là, nope. Avant de faire tout ça, il faut que je règle cette non-gestion des erreurs.

Bien. Il me reste 12h pour faire tout le reste et j’ai pas encore mangé.

Ajouter les événements de clics de souris

Je m’étais promis que pendant le Ludum Dare, je m’occuperais uniquement du jeu, sans mettre à jour le site Squarity. Je voulais prouver que la présente version est suffisamment aboutie pour créer un jeu, même très simple, même avec beaucoup de galère.

Puis j’ai réalisé que Loops in Pool serait beaucoup plus pratique si on pouvait directement cliquer sur les cases. Alors j’ai décidé que je ferais une entorse à ma promesse et que je rajouterais à la va-vite la gestion des clics dans Squarity.

Finalement, je n’ai pas du tout eu le temps de faire ça. Je suis donc parvenu à être suffisamment à l’arrache pour tenir ma promesse. Youpi !

Ayez l’amabilité de bien vouloir gérer ce mulot, mon brave.

Ça peut être très lent

Exécuter du python dans un navigateur web, c’est lent. Je m’en doutais un peu, mais je ne pensais pas que ça se révélerait dès maintenant.

Lorsqu’on échange deux tiles, il faut attendre une ou deux secondes avant de pouvoir faire autre chose. C’est le temps pour vérifier si l’échange a créé une boucle ou pas. On exécute pour cela un algo pourri de Dijkstra sur 2240 pauvres petits nodes. Ça devrait se faire instantanément, or ce n’est pas le cas.

C’est pour ça que la boue se remplit progressivement au début. Si je calculais toute la propagation dès le départ, ça prendrait vachement de temps et on pourrait croire que le jeu ne marche pas.

Heureusement, quand on fait des jeux simples nécessitant peu de traitement, il n’y a aucun problème, le jeu du magicien et H2O en sont des preuves. Mais il ne faut pas trop abuser.

Je n’ai pas de solution miracle pour ce problème, juste des pistes :

  • Faire des tests de performances, en déduire des manières de coder plus rapide que d’autres et les documenter dans des bonnes pratiques. Je suppose que le python dans un navigateur se code et s’optimise différemment par rapport au python normal.
  • Essayer de faire des traitements parallèles ou asynchrones. Je ne sais même pas si on peut faire ça proprement dans un navigateur web, que ce soit en javascript ou en python.
  • Mesurer en live les performances du code, pour repérer les parties de code les plus ralentisseuses.
  • Optimiser l’affichage. Au lieu de redessiner toutes les tiles à chaque fois, on en marque certaines comme « dirty ». Seules celles-là seront redessinées. Mais, je ne suis pas sûr que ça améliore grandement la vitesse.

D’autre part, j’ai fait une modif qui me semble cool : j’ai redirigé les print. Normalement, ils vont dans la console du navigateur. Moi je les affiche dans la zone de texte en bas à gauche. Figurez-vous que ça aussi, ça ralentit tout. Faites une dizaine de print à chaque appui de bouton : ça devient horrible, même dans un jeu simple.

Je ne sais pas pourquoi. Est-ce que le navigateur doit recalculer tout le DOM à chaque fois qu’on écrit dans un élément <textarea> ? Ce serait embarrassant. En attendant, l’effet de bord est très amusant : le seul moyen actuel de débuguer est de faire des prints, mais les prints ralentissent tout. Bon courage !!!

Je ne parviendrais peut-être pas à régler ce gros défaut de lenteur, ce qui risque de bloquer des créateurtrices potentieleulleux dans la réalisation de leurs jeux.

Ça ne me fera pas abandonner ce projet, ni déroger de mon idée principale : créer et partager des jeux 2D en python dans un navigateur web. C’est ce que je veux faire, et plus que ça, c’est aussi ce que j’ai envie d’avoir. Je veux utiliser mon propre outil pour créer une foisonnance de jeux bizarres/amusants/pulpesque/dérangeants/moches/etc. Bref, des jeux que je veux voir exister.

Un jeu « pulpe-zinesque » créé par Anna Anthropy, dont je vous parlerai à l’occasion

Autres trucs-en-vrac

Il faut des sons et de la musique. C’est prévu, mais les conseils que j’ai pu récolter à l’occasion du Ludum Dare me confirment que c’est très important pour se démarquer. Si j’avais pas un tas de choses déjà prioritaires, je prioriserai les sons.

Les images des objets ne peuvent pas déborder de leur tile. On peut faire sans, mais pour dessiner un trait qui rejoint deux tiles en diagonale, il faudrait pouvoir placer quelques pixels sur les tiles diago-adjacentes. Ça mériterait un petit dessin pour vous expliquer, mais là, pfouf, cet article est déjà bien assez long.

L’image de tileset devrait pouvoir être uploadée depuis le disque en local, dans le navigateur (en local aussi, du coup). Actuellement, il faut publier l’image sur un site d’hébergement, et ce à chaque changement. Même si on ne souhaite pas publier son jeu. C’est relou. En ce qui me concerne, je met l’image dans un repo github. Mais les push d’images dans github ne sont pas instantanément mis à jour dans leur site web.

Tôt ou tard, il me faudra un lieu d’échange et de création de contenus autour de Squarity (articles, documentation, tilesets, jeux, …). Je me permettrais de commencer par un tout petit truc. Mais il me le faut vraiment ce petit truc, car actuellement j’ai rien du tout, à part des comptes sur des rézosociaux « annexes », comme ce blog. Or, ces comptes n’ont pas pour utilité principale de décrire Squarity. Il va falloir que je me lance dans un mini-CMS Django, et/ou une instance Mastodon, ou autre chose de mieux si vous avez une idée.

Rappelons que l’utilité principale de ce blog est de vous faire découvrir des images de femmes rondes. Ceci ne va pas changer de sitôt. À ce sujet je vous présente llindaa23

À la prochaine, je me remet sur mon code et mes gestion d’erreurs.

Démarrage d’un gros projet complètement à l’arrache !

Ce que j’avais prévu

1 : Faire les fonds de tiroir de mes activités créatives, packager proprement les trucs qui méritent de l’être, même ceux qui ne sont pas finis. C’est ainsi que vous avez eu Blarg sur github, Kawax, Pru-pra-prok, l’archivage de tous les articles du magazine 42, L’animation du tunnel pour l’UTBM, une grosse série d’article concernant mon dernier changement de crémerie, et tout un tas d’autres machins.

2 : Terminer en packageant mes très vieux programmes Pascal que j’écrivais au lycée et à l’UTBM, et les mettre à disposition ici.

3 : Écrire un article de blog émouvant dans lequel j’explique que je me sens prêt à démarrer un gros projet créatif. Expliquer que ça fait un peu peur, que jusqu’à maintenant, le peu de projets que j’ai réussi à mener jusqu’au bout étaient soit de taille moyenne, soit une succession de mini-projets (par exemple, tous les articles pour le magazine 42). Ajouter qu’il est fort possible que j’abandonne au bout de deux mois pour cause de découragement honteux, ou pour cause de découverte d’une toute nouvelle idée que je croirais encore meilleure. Terminer l’article en demandant à mes lecteurtrices, avec des trémolos dans la voix, quelques commentaires de soutien pour ce nouveau projet, même si je ne l’ai pas du tout décrit pour le moment. Insister sur le fait qu’un soutien inconditionnel de leur part serait une magnifique démonstration de fidélité, rappeler (toujours avec des trémolos) que ce blog existe depuis plus de 10 ans et que certains d’entre vous me suivent depuis plusieurs années.

4 : Espérer deux ou trois commentaires de soutien, pas plus, pour ne pas être déçu.

5 : Travailler pendant un mois ou deux sur ce projet secret.

6 : Écrire un nouvel article, montrer la première version du projet même si elle est bancale. Expliquer que c’est une plate-forme de création de mini-jeux web en 2D sur une grille. Annoncer qu’il suffit de savoir coder un peu en python pour créer des premières choses toutes simples. Ajouter qu’il n’y a pas besoin d’installer de logiciel ou de s’inscrire (mais il faut quand même un compte github pour partager ses jeux). Arguer du fait que, même si la plate-forme est simple, sa souplesse permettrait de créer des jeux très variés tels que des Match 3, un Laser Tank, voire des jeux de stratégie comme Advance Wars. Préciser tout de même qu’il ne sera jamais possible de placer des objets à cheval entre deux cases de la grille, que c’est un choix conscient destiné à assurer la simplicité. Donner l’exemple de Zelda sur la NES, qui ne serait pas recréable sur cette plate-forme puisque le personnage peut se trouver entre deux cases. Terminer sur un ton faussement humble en disant que je me suis inspiré de PuzzleScript, Drod et même ZZT.

7 : Écrire une doc, pas forcément complète ni bien peaufinée, mais qui expliquerait au minimum comment créer et partager des jeux. Espérer que quelques personnes commencent à s’y mettre, même si c’est rustique et pas du tout ergonomique dans un premier temps.

8 : Améliorer encore le projet pendant quelques mois.

9 : Participer au Ludum Dare (une compétition de création de jeu en un week-end). Ne pas s’attendre à un glorieux classement, mais utiliser cette participation pour montrer la plate-forme au plus de gens possible.

10 : Éventuellement, créer une vidéo ou un stream sur twitch montrant la genèse du jeu créé pour le Ludum Dare. Utiliser cette vidéo comme tutoriel et comme démo de ce qu’il est possible de faire.

12 : Donner rendez-vous aux prochains Ludum Dare, tous les 6 mois. Indiquer que l’on profitera de ces compétitions pour s’imposer des dead lines fixes, qui devraient apporter la motivation nécessaire pour produire régulièrement de nouvelles versions de la plate-forme.

13 : Continuer comme ça sur plusieurs années, et voir jusqu’où ça nous mène.

Pour l’instant, ça mène ici.

Ce qu’il s’est réellement passé

1 : Réaliser qu’il n’y a plus que quelques mois avant les grandes vacances, et qu’on aimerait avoir une première version du projet à ce moment là.

2 : Laisser en plan le packaging des vieux jeux Pascal.

3 : Réaliser une première version ultra à l’arrache de la plate-forme, afin de pouvoir la montrer aux potes qu’on retrouvera pendant les vacances.

4 : Ne pas oser parler de ce projet aux potes en question, parce que l’occasion ne s’est pas présentée et que j’ai toujours l’impression de passer pour un mendiant quand je quémande de l’attention aux gens, même quand c’est mes potes.

5 : Continuer de bosser sur le projet, pester intérieurement que, comme toujours, ça avance trèèès lentement.

6 : Au passage, créer une chaîne twitch et s’amuser à streamer des Clash of Code, même si ça n’a absolument rien à voir avec la choucroute.

7 : Réaliser que le prochain Ludum Dare est dans à peine quinze jours, que la plate-forme est à peu près utilisable mais pas du tout documentée, qu’on n’aura pas forcément le temps de la documenter d’ici là, et qu’on n’a rien annoncé pour l’instant.

8 : Jeter à la gueule de ses lecteurtrices le lien vers la plate-forme : http://squarity.fr.

9 : Leur jeter un autre lien à la gueule, en croyant que ce sera suffisant pour comprendre comment créer et partager des jeux : squarity.fr#fetchez_githubgist_darkrecher/bd49300f9c480b789a70315155571e9d/raw/gamecode.txt

10 : Espérer que l’on arrivera à faire quelque chose de pas trop pourri pour le Ludum Dare.

11 : Continuer comme ça sur plusieurs années, et voir jusqu’où ça nous mène.

Pour conclure, inévitablement

12 : Expliquer que le mot « squarity » signifierait « la carrétitude », puisque les jeux sont créés sur un quadrillage en 2D. Ajouter que le fait d’aimer les carrés n’empêche pas d’aimer aussi les courbes. Pour illustrer ce propos, insérer une image de Myesha Boulton :

13 : S’endormir sur son clavier parce qu’il est tard.

Un jeu Puzzlescript : recherche de diamant

Bloub !

Il y a quelques temps, j’avais créé un petit escape game pour des gens personnels. J’y avais mis diverses énigmes plus ou moins rigolotes et compliquées, dont un jeu PuzzleScript.

Shaïne braïght laïke daïmondze.

Petit rappel : pour commencer à jouer, il faut appuyer sur la touche « X ». C’est pas forcément évident quand on découvre « l’environnement PuzzleScript », qui est un peu rustique il faut bien le dire.

Vous êtes équipé d’un détecteur de diamant ayant un nombre limité de charges. Chaque fois que vous l’utilisez, vous obtenez (ou pas) un indice sur la position finale du diam’s. Je ne vous donne pas plus de détails que ça. À vous de comprendre comment interpréter ces indices !

C’est inspiré du mini-jeu MindSweeper, inclus dans le jeu flash débile intitulé « Anti-Idle: The Game ». Il y a quelques années, je m’étais quelque peu fait chronophager par ce agglomérat bizarre et trollesque. Mais depuis, tout va bien, je me soigne.

Il est fort possible que ce soit le dernier jeu PuzzleScript que je code. Non pas que je boycotte ce site ou que je n’ai plus envie de coder des jeux. Bien au contraire. Mais je suis en train de préparer une chouette surprise, qui a vocation à proposer mieux que PuzzleScript.

Je n’en parle pas plus pour l’instant, car je n’ai pas grand-chose de prêt. J’essaye de vous donner plus de détail très bientôt, si possible avant le prochain Ludum Dare, c’est à dire début octobre.

En attendant, qui dit diamant dit bijoux, qui dit bijoux dit jewels, qui dit jewels dit Bianca Jewelz.

Pots de départ multiplexés

Suite à un tas d’événements qui m’échappent, la boîte ConcreteWorld-🌍 a dû recourir à une opération de lourdage massif du personnel.

Heureusement pour moi, les personnes affectées au super-projet secret « POILS_PUBIENS » n’ont pas été impactées, parce qu’au niveau comptable, gestion boîtale et autres subtilités administrativo-légales, c’est pas foutu pareil. Mais ça fait une ambiance un peu bizarre. Je crois que certaines personnes aimeraient avoir une preuve tangible de l’utilité de notre beau projet. Ça viendra.

En attendant, lecteurtrice, je t’en dois quand même une description minimale.

Description du projet POILS_PUBIENS

Comme tu le sais, l’entreprise ConcreteWorld-🌍 a la vocation (pour ne pas dire « l’abnégation ») de lutter contre les distortions spatio-temporelles de l’univers, sur les plans d’existence confiés par nos clients, afin d’empêcher un débordement de chaos. Comme toute entreprise ayant pour métier le maintien de la réalité, nous adoptons plusieurs approches :

  • blocage direct des déformations spatio-temporelles,
  • déplacement temporel afin de prévoir et bloquer les déformations spatio-temporelles,
  • déformation spatio-temporelle locale contrôlée afin de rendre impossible une déformation spatio-temporelle chaoticogène.

Le projet POILS_PUBIENS adopte une approche totalement innovantatrice. Nous réalisons une déformation spatio-temporelle globale, complémentaire et orthogonale à la déformation chaoticogène, afin, non pas de bloquer frontalement celle-ci, mais de la rendre normale. La déformation chaoticogène existe toujours, mais ce n’est plus une déformation.

C’est un peu compliqué à comprendre, alors je vais employer une analogie. Imaginons par exemple que vous ayez un pli sur votre drap. Vous pourriez tirer dessus, puis badigeonner le drap d’amidon pour le rendre entièrement rigide. Nous, nous faisons le choix de découper et reconstruire une partie du lit, ainsi que la maison autour, et la Terre, et l’univers, de façon à ce que le pli du drap ne se remarque plus. C’est aussi simple que ça.

Pour en revenir au plan de lourdage massif : celui-ci a déclenché un combo de deux pots de départ, que je vais vous narrer.

Présentation des lourdé·e·s

Colléguette Rosemonde

Il s’agit de l’ex-cheffe du département boîtal « Orgies Internes ». Elle s’appelle ainsi à cause d’un gros délire sorti de nul part durant une pause de midi.

Collègue TuLaBoucles, qui aime bien taquiner les gens, a dit que c’était une grande poétesse et qu’elle écrivait des textes d’une incommensurable époustouflance. C’est resté, elle a alors pris le nom de Rosemonde Gérard, une autre poétesse, qui ne lui arrive cependant pas à la cheville.

C’est une nana bien, plusieurs personnes dans la boîte s’accordaient à dire que c’était « la grande sœur de tout le monde ».

J’apprendrais plus tard qu’elle s’est fait lourder d’une manière quelque peu cavalière. je n’en dis pas plus pour l’instant, pour ne pas spoiler.

Rien à voir, mais son fils était présent à certains des cours de python que j’ai prodigué.

Chef Peyotl

L’ex-grand-chef du département boîtal « Corrélations Inter-spatio-temporelles des Réalités Locales ».

Pour rappel : il se nomme Chef Peyotl car il a parcouru tous les pays du monde à la recherche de l’alcool qui lui conviendrait le mieux, et qui s’est révélé être le peyotl.

Techniquement, il n’a pas été lourdé. Il est parti de lui-même, suite à « une accumulation de divergences d’opinions avec MégaChef En-Même-Temps ». J’en sais pas plus.

Un cactus peyotl n’ayant pas la même opinion que les autres.

Les autres

Ces personnes n’ont pas fait de pot de départ, ce qui peut se comprendre, car elles ont été prises au dépourvu. Certaines sont particulièrement dégoûtées.

Je vais me contenter de lister leur noms pour que leur mémoire soit à jamais gravée dans votre mémoire à vous.

  • Colléguette Carnea
  • Colléguette Louloute
  • DRHe Bourgeoise-Rappeuse
  • Collègue Rocker
  • Collègue Megabite
  • Collègue Kirikou
  • Collègue Bo (physiquement, il ressemble à l’autre dans la série SuperStore)
  • Collègue FautLireLaDocQuExistePas
  • Je crois qu’il y a une dernière personne mais désolé je l’ai oublié. (Pour le gravage dans la mémoire, c’est raté).

Comme d’habitude, à chaque fois qu’il y a des départs, volontaires ou non, un tabou temporaire le recouvre. Faut pas trop l’ébruiter, chacun l’apprend individuellement de manière détourné, tout en ayant la consigne de ne pas le transmettre.

Un départ dans une entreprise, c’est un peu comme une personne à l’article de la mort. On n’en parle pas ouvertement, des murmures se propagent progressivement sur l’état (sanitaire ou professionnel) de la personne concernée, mais tout le monde finit par le savoir. Je ne détaille pas plus cette situation, vous l’avez certainement déjà vécue, soit vous-même, soit par des collègues, soit par des proches.

Partie à peu près sobre de la soirée

Comme je suis très alternatif et que j’aime moi aussi à distordre gentiment la réalité, je vais vous narrer les deux pots de départ sous forme multiplexée, en un seul et même article de blog.

Il n’y a pas d’heure fixe, je débarque un peu à l’arrache. Multiplexement parlant, ça se passe dans un bar-tapas entrelacé avec un barbecue. À côté se trouvent des tireuses groupes-électrogènisées que personne n’arrive à démarrer. Les serveurs promettent de venir me voir pour prendre la commande, mais ils n’en font rien, alors je me bouge au comptoir.

Il y a plein de collègue·ttes que je n’ai pas croisé·e·s physiquement depuis longtemps. Leurs coiffures sont parfois un peu spéciales.

Les cheveux ont poussés pendant le confinement.

Et parfois, les cheveux ont frisotté sur la fin.

Colléguette Platona vient discuter avec moi. Même si nos sujets de conversation sont banals (le boulot, les gens, les enfants), ce moment est teinté d’une aura spirituelle mystique. Je réalise que lorsque je vous ai présenté cette dame, j’ai parlé un petit peu de son physique, ce qui était inapproprié, veuillez m’en excuser. Ce qui compte avec Colléguette Platona, c’est uniquement sa personnalité iridescente et sa façon toute particulière qu’elle a de la chatoyer pour illuminer mon ego. Je suis revegoré.

J’atteins Chef Peyotl, qui est derrière un bosquet de bouteilles, gobelets et autres cacaouètes. Je lui transmets les amitiés de Chef Lucene-Lapin qui n’a pas pu venir. La dernière fois que je vous ai parlé de Lucene-Lapin, il avait pour titre de noblesse « Collègue ». Ça a changé depuis le projet POILS_PUBIENS. Faudra que je décrive de ce gars là en détail, un jour.

Méga-Chef En-Même-Temps est là aussi. On discute de trucs couillus et virils de chefs d’entreprise : l’EPR de Flamanville, la sous-traitance off-shore, la culture japonaise, les piliers de ponts, … Je sais absolument pas quoi dire, heureusement, un autre collègue est là pour assurer la conversation. Je m’éclipse non-discrètement en prétextant que je dois remplir mon verre à la tireuse (que des gens ont réussi à faire fonctionner).

Pour éviter de me refaire piéger dans la même conversation, je squatte un groupe au hasard. J’y trouve Colléguette Pauline. On discute de choses diverses et de la situation du monde. Sa fille était présente à certains des cours de python que j’ai prodigué.

Petite partie de Mölkki durant laquelle je ratatine divers collègues, ainsi que Chef NightWish et ses enfants. On m’en repropose une autre, tellement elle a duré peu de temps, tellement je les ai tous ratatinés. Mais je décline l’invitation car je préfère boire et discuter avec des gens. Rien à voir, mais l’un des fils de Chef NightWish était présent à certains des cours de python que j’ai prodigué.

Petit échange avec Collègue Pagne, qui joue à d’anciens jeux d’aventure sur une ScummVM installée sur son smartphone. Je lui parle de Loom, un jeu Lucas Arts très beau et très onirique. Il faut que je lui envoie les fichiers. Vous pouvez télécharger la version anglaise EGA ici.

Je cause avec Mascotte À-Fleurs, de python et autres geekeries.

Au loin, Colléguette Platona discute avec d’autres gens. Des particules de sa personnalité volettent dans le Monde des Idées jusqu’à ma propre personnalité personnelle, et je m’en enivre.

Nous nous installons à une table pour manger. Dans ces situations, le placement est toujours crucial. Mais là ça va, car nous nous mélangerons, lèveront et assoiront aléatoirement. C’est cool.

Colléguette Babiole-Poétique me parle de la dernière fois où nous étions à cette même table, et où j’avais ébloui l’assemblée avec mes connaissances sur les moules à caca. Un moment anthologique. Si les moules à caca vous intéressent, en voici un article détaillé.

Les mélanges aléatoires de place me propulsent jusqu’à Colléguette Rosemonde, avec qui je peux enfin discuter un peu. Elle me révèle qu’elle va quitter la ville pour tenter l’aventure ailleurs. Dans l’ouest. Le grand ouest où tout est possible. Elle va me manquer. On se faisait de temps en temps le trajet du boulot en vélo, elle m’a montré tous les petits chemins secrets pour éviter la rocade de la mort que si t’y vas en vélo tu te fais tailler un shortasse. C’était sympa de faire cette route avec elle. Il faisait beau. Les dinosaures-marionnettes illusionnistes bleuissaient le ciel d’une jugulence idiosyncrasique.

Je cause avec Collègue Huître d’un ancien collègue, qui’il considérait comme un trou du cul. Ce n’est pas mon avis. Pour moi, cet ancien collègue était trop respectueux des humains, donc ne sortait jamais de blague sur des minorités diverses, donc n’était pas hyper drôle, mais ça n’en faisait pas un trou du cul.

Le robot DJ nous passe du Parov Stelar. J’aime bien l’electro swing. C’est de la bonne musique pour se concentrer pendant qu’on code.

Je continue de papillonner entre les groupes et les personnes, à deviser sur des sujets divers : le python, notre super-projet, la bière… Je réalise alors avec frayeur que je suis conversationolique.

Quelques minutes à peine après avoir entamé une discussion, je ne la juge pas suffisamment intéressante, et me dis que je ferais mieux de m’en éclipser pour espérer trouver une autre personne plus cultivée ou plus apte à faire gonfler mon ego. Je suis comme un alcoolique qui boit un verre et qui en veut un autre immédiatement après, comme un fumeur chronique voulant se griller une clope alors même qu’il est en train d’en fumer une. Je dois faire attention à ça.

Ensuite, je réalise autre chose : Méga-Chef En-Même-Temps est parti. On peut complètement arrêter d’avoir l’air digne, ce qui nous amène à la partie suivante de la soirée.

Partie n’importe quoi

Semi-Chef Pez vient participer à une conversation. Chef Peyotl le réprimande : « parle pas si fort, tu parles trop fort ». C’est rigolo parce que Chef Peyotl était le chef de Semi-Chef Pez, et il le taquinait régulièrement.

Je dis à Collègue Fêtard que c’est dommage car cette fois on ne pourra pas finir au Baron. Il m’annonce qu’il y a un espoir que cet établissement réouvre, on ne sait pas trop quand. Je me garde cette info.

Sans savoir pourquoi, je pense à un pote, dans un bar, qui a dit en revenant des toilettes : « Ils sont pas pratique leurs urinoirs. Ils sont super haut et la chasse d’eau nettoie pas bien les bords ». Un autre pote lui avait alors répondu : « Y’avait pas d’urinoir. Que des lavabos ».

Il ne m’a pas semblé que Colléguette Rosemonde ait eu un cadeau de départ, possiblement parce que son départ n’était pas souhaité et que son pot a été décidé à l’arrache.

En revanche, Chef Peyotl a eu plein de belles choses : Du peyotl bien entendu, un tas d’autres alcools, ainsi qu’un stage de ball-trap bazooka, son sport favori. Ça fait plaisir de voir quelqu’un avoir le minimum de personnalité nécessaire pour être capable d’être fan d’autre chose que l’aquafootball chilien, notre enculerie de sport local à la con qui fait la fierté de la ville.

Il nous gratifie d’un petit discours conventionnel : « j’ai adoré bosser avec vous, je vous aime, bonne continuation à vous, les oiseaux, les petites fleurs, etc. »

Et c’est beau. Toutes ces soirées, toutes ces molécules d’alcool, toutes ces conversations aléatoires, toutes ces années de travail, toutes ces lignes de code torturées n’ont existées que pour ce petit moment précis, cette toute petite seconde où la voix de Chef Peyotl a chevroté, et où ses yeux se sont un tout petit peu humidifiés.

La larmichette de Chef Peyotl

Mais ensuite, Semi-Chef Pez, comme à son habitude, fait son gros relou et sort un commentaire inintéressant pendant le discours. Il le fait quasiment à chaque fois.

Le re-hasard des placements me remet à côté de Colléguette Rosemonde. J’apprends que pour l’opération de lourdage massif, les chefs ont dû noter leurs ouailles, mais lesdites ouailles avaient le droit de demander leur note, ce que Rosemonde a fait. Sa cheffe, Semi-cheffe PositiveAttitude, lui a filé une note toute pourrite. C’est quelque peu cavalier.

Je suis un peu étonné de ça et préfère adopter l’attitude de la fuite : à savoir auto-persuader mon esprit que c’est sûrement pas comme ça que ça s’est passé, mais que j’ai mal compris parce que je suis bourré.

Il y a des gens qui font un feu juste à côté des groupes électrogènes et des noisetiers. Embarrassant.

Mon cerveau mate la magnifique personnalité de Colléguette Platona, tel le pervers platonique qu’il est.

Semi-Chef Pez, obéissant à l’entropie qui règne dans ses neurones, décide de s’improviser DJ et demande au maître du smartphone BlueToothé à l’enceinte de passer du død / violinbwoy. Il nous annonce, de sa voix de stentort (comme un stentor, mais qui aurait eu tort de le devenir), que c’est en souvenir du road-trip en ma compagnie, lorsque nous sommes allés aux Temps Forts de Pochtronarr. Un événement narré ici et ici. Je ne me souviens pas du tout qu’il avait passé cette musique, mais je me souviens que sur le chemin du retour on avait croisé une prostituée aux magnifiques formes généreuses.

J’avais filé des cours de python à son fils. (nan j’déconne).

Faisant fi de mon conversationolisme, je vais voir chef Peyotl et lui dit que j’ai beaucoup apprécié travailler avec lui, et que quand même ça fait quelque chose de le voir partir, parce que c’est lui qui m’avait embauché (même si je n’avais pas été le seul, évidemment). Il me répond que lui aussi il avait trouvé ça cool que je sois dans son équipe et qu’il aurait aimé que j’y reste un peu plus longtemps. Il ajoute conventionnellement qu’il est quand même content pour moi, parce qu’il sait que je m’éclate à fond sur le projet POILS_PUBIENS. Je lui réréponds conventionnellement que oui c’est tout à fait ça.

Je suis assez bourré pour ajouter, de manière taquine, que si j’avais aimé travailler avec lui, c’est aussi parce que je pouvais faire le roi du pétrole. Y’avait aucun autre développeur dans son équipe et c’est moi qui m’occupais de toute cette partie. Plein de gens me considéraient comme un super-héros.

Je m’allonge dans l’herbe et réalise que je suis super bien et super heureux. Souvent, on ne se rend pas immédiatement compte de son bonheur. C’est seulement après, lorsqu’on devient malheureux, qu’on réalise comme on était heureux avant. Alors je profite de ce moment de lucidité pour en profiter pleinement. Je regarde lentement tout autour de moi afin de bien m’imprégner des molécules volatiles de félicité et de béatitude. Je faisais pareil durant mes joyeuses études. Je m’adossais au bar de la Maison des Élèves, à l’UTBM, et j’opérais un lent regard circulaire, pour bien prendre conscience de tout ce qui était autour de moi et qui était bien.

Et voilà que ma stupide nostalgie revient. Alors que je suis dans un moment de bonheur et que je m’en rends pleinement compte, je suis nostalgique des fois précédentes où je m’étais pleinement rendu compte que j’étais dans un moment de bonheur.

Le vertige me prend et je réalise qu’il y a à peine quelques années, à ConcreteWorld-🌍, on faisait des soirées nimp’ dans les bars, et des soirées jeux de société avec un collègue qui est parti depuis, sans oublier les semencinaires/ovuliaires annuels. Tout ça s’est étiolé dans le temps et risque de ne plus trop revenir, maintenant que la cheffe du département « Orgies Internes » a été lourdée. Il y a aussi cette histoire de virus.

Heureusement, je peux toujours profiter des gaudrioleries que nous faisons entre membres du projet POILS_PUBIENS. Pour l’instant, je n’arrive pas à en retirer des choses à raconter. Il faut le temps que ça incube dans mon cerveau.

La carte de Chef Peyotl où on écrit un petit mot d’adieu circule plus ou moins discrètement. C’est lui qui avait pris la décision initiale d’acheter le super-outil de gestion de trucs « Pochtronarr » et qui m’avait laissé me démerdouiller avec. Je ne peux pas le laisser partir sans lui laisser une pique à ce sujet. J’écris :

Putain
Ondoyante
Carabistouille
Hail !
Terrible
Rouflaquette
Onirique
Nocturne
Amazing
Roooarrrr !
Réussite.

Et j’écris « Bisous » à la fin.

Les dernières personnes qui restent rangent les trucs du barbecue et s’au-revoirisent progressivement. On paye le bar-tapas.

On finit à trois : Collègue Fêtard, Collègue HumourBlanc et moi. On erre dans les rues à la recherche d’un dernier endroit où s’en coller une. Mais, comme déjà expliqué, il n’y a plus de Baron. Alors on squatte un bar random.

Dans un éclair épiphanique, j’explique à Collègue Fêtard que, globalement, dans l’univers mondial, ce qui est important ce ne sont pas les choses. Ce sont les liens entre les choses.

Les liens entre atomes sont plus importants que les atomes, car c’est ce qui fait les molécules. Les liens entre neurones sont plus importants que les neurones, car c’est ce qui fait l’intelligence. Les liens entre pièces de Lego sont plus importants que les pièces de Lego, car c’est ce qui fait une construction. Les liens entre les liens sont plus importants que l’éolien.

Collègue Fêtard réalise que je suis un génie. Il est tellement heureux qu’il nous paye un verre.

On boit, puis chacun rentre à pied chez soi.

Log out

C’était deux superbes pots de départ multiplexés. Merci à toutes les personnes qui ont participées.

Au revoir à Lourdée Rosemonde, Démissionné Peyotl, et aux autres lourdé·e·s.

Bonnes nouvelles-aventures à vous !

Raffarin Pète-Gonade Memorial Day #12 : « Mauvaise journée de travail »

Yèèèèèèèè.

Comme chaque année, ce blog commémore le RPGMD, en souvenir de ce lundi qui était férié avant et qui ne l’est plus. Merci encore à Raffarin.

Niveau Travail, je suis toujours sur le projet ultra-secret POILS_PUBIENS. Jusqu’ici, tout va bien. Je fais pas beaucoup de python, mais je vais essayer d’y survivre.

Chef Tabarnak nous a dit que cette année, ConcreteWorld.🌍 ne nous donnerait pas notre jour férié. Parce que « c’est un jour pour aider nos aînés et nos personnes handicapées, il doit donc être exergué, ressenti et vécu ».

Ça me semble quand même un peu hypocrite. Il aurait pu dire que y’a très besoin qu’on bosse sur le projet, et que y’a besoin de toutes les heures de tra-tra définies par le code du tra-tra.

Je l’ai déjà dit, je le redis : bosser un jour de plus gratos pour se permettre de taxer un peu plus les entreprises pour avoir de l’argent pour aider les vieux, c’est sacrément alambiqué comme idée. L’intermédiaire ajouté (les entreprises) diminue fortement la garantie de récupérer tout le pognon généré par le travail supplémentaire. C’était pas plus simple d’augmenter un impôt existant ? Ça aurait tout autant fait râler les gens, mais pour un rendement à mon avis meilleur.

Je préférerais qu’on me prenne mon argent plutôt que mon temps libre.

  • Mon argent me permet d’acheter des choses, de bouffer, de survivre. Il définit ma quantité de confort. Je POSSÈDE mon argent.
  • Mon temps libre me permet de réaliser les choses que je veux. Il définit mes actes, mon expérience, mes souvenirs et mes projets personnels pour l’avenir. Je SUIS mon temps libre.

L’être et l’avoir, toujours cette dualité.

Autre info : les mots à la mode du moment sont : « résilience », « agile » (vous le saviez déjà), et « frugal ». Du coup, on peut créer un mot doublement à la mode : « frugagile ».

Ugh ! Pied-Agile être frugasilient !

Tant qu’à être là et à m’exprimer sur la façon dont on exprime les choses, je vais vous parler d’une expression que je trouve débile.

La « mauvaise journée de travail »

« La journée a été mauvaise ». Cette expression se truffe dans des conversations à haute teneur en lieu-communs et dans des articles à la con. En voilà une brouettée :

On y trouvera des interrogations hyper-réflexionnatoires telles que « le défi est de savoir que faire à ce sujet. » , ainsi que des conseils drastiquement inédits comme « reposez-vous quand vous êtes malade » . Passée cette décharge de sagesse que nous venons de recevoir sur nos visages ébahis, intéressons-nous au sens intrinsèque de l’expression.

Elle donne l’impression que le caractère « bon / mauvais » d’une journée peut changer du jour au lendemain, littéralement. Ça me paraît totalement déconnecté de la réalité et de ce fameux « Monde du Travail » que tout le monde se targue de connaître.

Bande de mongolos, c’est pas la journée elle-même qui est bonne ou mauvaise, c’est les événements qu’il y a dedans ! Lorsque ces événements ont un impact limité à une seule journée, on s’en fout un peu. C’est quand l’impact s’étend à une plus grande période (une ou plusieurs semaines) qu’il devient significatif.

Est-ce qu’on se lève le matin en n’ayant absolument aucune conscience de la qualité de la journée à venir ? Bien sûr que non. On a en mémoire les événements des jours passés, qui font que l’on est dans une bonne ou mauvaise période. Une mauvaise journée n’est que le symptôme ponctuel d’une mauvaise période, qui est elle-même la conséquence d’événements « mauvais ».

Je me fiche de lutter contre les « mauvaises journées », ça ne réglera pas le problème et je devrais recommencer le lendemain. Ce qui m’intéresse c’est de lutter contre les « mauvais événements » qui feraient que je me retrouve dans une période de merde dont la durée pourrait courir jusqu’à plusieurs semaines.

J’ai pas de méthode miracle pour ça, mais voici quelques conseils :

*) Faites pas chier le peuple.

*) Impliquez-vous si ça vous intéresse, mais arrêtez « d’y croire à fond ». C’est pas une religion, c’est juste votre emploi.

*) Masturbez-vous (que vous soyez un homme ou une femme). Ça ne réglera pas les mauvais événements, mais ça vous mettra dans de meilleures dispositions pour affronter le problème surfacique des « mauvaises journées ».

*) Écrivez de la doc. Ne vous prenez pas la tête à la présenter bien comme il faut et à respecter la charte graphique blabla en vigueur. C’est de la doc que pour vous. Vous avez le droit d’y mettre des trucs débiles décrivant des choses super simples que tout le monde a déjà comprises sauf vous. Si quelqu’un râle parce qu’un truc quelconque n’est pas documenté, mettez en forme puis montrez-lui la partie de votre doc concernant ce truc.

Et maintenant, voici un cliché tenace du monde du Travail des années 1970 : la secrétaire. Notez le bureau cossu et les tableaux de la période Louis croix-V-bâton.

Au boulot les feignassoss !

Je parle pas pour moi. Vous vous doutez bien que j’ai pris un congé pour cette journée si spéciale.

NorthSec 2020

Avec des collègues de ConcreteWorld.🌍 (la boîte où je bosse), on a participé au CTF du NorthSec, c’est une compétition avec des truck à hacker.

Normalement, il a lieu sur place, au Québec, mais cette année, avec cette histoire de virus, ils l’ont fait en ligne. Je ne vais rien dire de plus à propos du Covid, car je souhaite garder ce blog le plus possible éloigné de l’actualité, pour qu’il reste une sorte de lieu magique dans l’espace éthéré.

Le NorthSec, c’était bien cool ! On a eu 31 points au total, ce qui nous a classé 39ème sur 79. Certes, je n’ai personnellement fait gagner que 2 points, mais mes collègues m’aiment bien quand même. (Je ne suis pas encore assez entrainé à ce genre de compétition).

Je me suis gardé quelques challenges offline sous le coude, que j’essayerais de réussir à tête reposé.

L’environnement et le contexte de présentation des challenges était vraiment bien chiadé. Je vous explique.

Ambiance années 90

Tout se passe dans une université fictive intitulé « Severity High School ».

Les challenges sont disponibles sur le forum de cette université, un par sujet de forum. Même si parfois, certains sujets racontent des trucs qui n’ont rien à voir.

Le style graphique du forum, avec sa magnifique texture de brique en fond, est d’une mocheté assumée.

Qui dit challenge de hacking dit site web avec des vulnérabilités à exploiter. En général, ces sites n’ont aucune mise en forme. C’est une convention, et même une fierté. On se concentre sur le fonctionnement interne du site et les failles qui s’y trouvent. Il faut éviter d’être pollué par le rendu visuel.

De toutes façons, les hackers savent rarement designer un site. C’est un autre métier. Allez sur root-me.org et essayez les challenges de type « Web-server » et « Web-client », vous verrez.

Pour le NorthSec, c’est un autre choix qui a été fait. Le design des sites et du forum a été travaillé. Travaillé pour être comme dans les années 90.

C’est pas les premiers à faire ça, mais c’est toujours amusant. On pourrait aussi y voir une critique du système éducatif et du secteur public en général, qui a la réputation d’avoir systématiquement 10 trains de retard concernant internet et l’informatique. Pour eux, des designs de ce genre, ça ne les choquerait pas.

Y’avait pas ça au NorthSec, mais vous voyez l’idée.

Ambiance dystopie

Les messages fictifs échangés sur le forum donnent l’impression que les élèves et les professeurs font tous n’importe quoi et passent leur temps à se pourrir entre eux.

  • des données comportementales sont stockées sur eux, ainsi que des données personnelles complètement WTF (proba d’échec, index social, score consommateur, couleur des yeux, ton de la voix, humidité, …)
  • ces mêmes données révèlent que toute l’école est corrompue et que les notes sont proportionnelles aux donations effectuées par les parents,
  • les élèves se volent leurs devoirs entre eux et modifient les notes (pas forcément les leurs) sur les serveurs,
  • les professeurs développent eux-mêmes leurs applications de validation des examens, qui sont bien évidemment de véritables passoires,
  • les élèves, quand ils ne sont pas occupés à tricher, passent leur temps à organiser des « parties » et à se préparer pour « le prom » (le bal de fin d’année).

Ça donne une impression de micro-société totalement dystopique, c’est très étrange et très amusant.

Il y a deux ans, j’étais allé au CTF de la Toulouse Hacking Convention. Le contexte donne forcément l’impression d’être dans un autre monde durant une nuit : plein de geeks dans une pièce en train d’essayer de hacker des trucs. Mais les challenges y étaient présentés de manière brute, sans cohérence entre eux.

L’ambiance et la contextualisation des challenges du NorthSec (même si on n’est pas physiquement sur place) m’a transporté dans un autre monde pendant tout un week-end, et ça fait du bien. Et le fait que c’était un monde dystopique était encore plus rigolo.

C’est à ça que servent les vacances, les voyages, les festivals, jouer dans une pièce de théâtre, etc. : jouer à être quelqu’un d’autre durant une parenthèse de temps plus ou moins longue.

J’espère avoir l’occasion de participer à d’autres trucs comme ça. À la prochaine !

Je vous laisse avec Busty Dusty, une nana des années 90.