Martin Luther King’s reconstruct-gonades day #1

Une énoooorme info provenant de la nouvelle crémerie dans laquelle je bosse :

J’ai des jours fériés en plus par rapport au reste des serfs non-chômeurs ouvrier-codeurs travailleurs français !

J’ai passé des années à conspuer ce gros con de Raffarin qui nous a volé notre lundi de Pentecôte, et voilà que l’on me rend (presque au centuple) ce temps que l’on m’a volé. J’en reste baba. À noter que je continuerais tout de même de conspuer Raffarin, par solidarité envers les tra-tra-travailleurs français.

D’où sors-je ce privilège ? Ma nouvelle crémerie résulte de la fusion/absorption d’une crémerie américaine et d’une crémerie française. De manière karmatique, les Méga-Chefs et Méga-Cheffettes ont décidé d’accorder les jours fériés des deux pays à tout le monde, afin de limiter les moments où on ne peut pas échanger entre Collègues et Colléguettes !!! Que leurs noms résonnent jusqu’en haut des montagnes iridescentes de la joyeuse créativité oisive !

Et justement, ce 16 janvier a eu lieu le Martin Luther King’s day, férié pour les américains et donc pour moi aussi. Bien entendu, j’aurais aimé écrire un article le jour-même, mais je l’ai passé à faire d’autres trucs. En espérant que vous ne m’en voudrez pas.

Afin de faire écho à mes noires et cafardeuses célébrations du « Raffarin pète-gonades Memorial Day », j’ai décidé d’appeler ce jour le « Marthin Luther King’s reconstruct-gonades day ». Youpi !

Je n’ai pas la prétention d’être expert-historien de la vie de Martin Luther King. J’aurais pu en connaître quelques détails supplémentaires, car j’ai lu, dans la revue Astrapi, les épisodes d’une bande dessinée sur son histoire.

Mais ma dernière lecture de cette BD date d’il y a plus de 20 ans. Alors, j’ai un peu oublié, désolé.

Oh si attendez, je me souviens d’un truc. Une image montrant des policiers réprimant une manifestation. Ils avaient un gros camion avec un canon à eau. J’ai cru que les policiers s’en servaient pour rigoler et détendre l’atmosphère. Genre : « hey, j’ai un pistolet à eau géant, faisons une bataille d’eau et tout le monde se sentira mieux après ».

Ensuite, j’ai réalisé que c’était pas ça.

(ici, mettre une image de canon à eau durant une manifestation, pour montrer que je suis une personne engagée qui lutte contre l’oppression étatico-capitaliste).

Et sinon, cette nouvelle crémerie. Bien ou bien ?

Nouvelle crémerie dont il faudra un jour que je vous donne le nom et le sacerdoce. En attendant, je vous raconte en vrac.

Comme plein de gens de l’informatique, je suis en « full remote » (c’est comme ça qu’on dit). Je l’étais chez ConcreteWorld-🌍, mais pas full. Je revenais sur site tous les mercredis. Là je pourrais pas faire ça parce que le site en question est beaucoup plus loin : une demi-journée de train. Ça va me changer de ne voir mes Collègues et Colléguettes que environ tous les deux mois. J’appréhende un peu. On verra bien.

J’ai fait deux semaines de « onboarding » (c’est comme ça qu’on dit), sur site. Tout frais payés : bouffe, hôtel, trajets, PQ, tout je vous dis. J’ai mangé du fast-food gentrifié à m’en faire péter la caillette : tofu, bo bun, poke bowl, falafel végétarien, …

Y’a un baby-foot et une Switch dans le burlingue/open-space. C’est les clichés des boîtes super cools avec des vrais morceaux de bienveillance dedans. Je m’en tamponne un peu, mais ça ne me dérange pas que ça existe.

Je ne suis pas sûr de bien tout comprendre ce que je dois faire, ni dans quel ordre. J’improviserai, comme d’habitude.

Il n’y a pas d’outil stupide pour déclarer combien de temps on passe sur chaque tâche ! C’est une victoire personnelle résultant d’un combat qui a duré plusieurs années. J’espère juste que c’est une vraie victoire et qu’on ne va pas me sortir de derrière les fagots un google-doc naze de rapport d’activité que l’on n’aurait pas encore pensé à me montrer.

J’ai récupéré un nouvel ordinateur de Travail, comme il se doit. Le sachiez-vous ? Maintenant j’utilise Ubuntu ! Ouais bon, tout le monde s’en tamponne. Moi le premier. De toutes façons, de nos jours, tout est dans le navigateur, alors ça marche et puis c’est tout. Le seul truc qui m’embête c’est que je n’arrive pas à trouver de logiciel de dessin en pixel art aussi souple-et-solide-à-la-fois que Paint.net. Peut-être parce que j’ai pas vraiment cherché.

J’espère que OBS marchera, sinon je ne pourrais plus twitcher de Clash of Codes le jeudi. Faut que je l’installe et que je teste.

J’ai offert, en cadeau de bienvenue, l’énigme des clés inspiré de Harry Potter. Les Collègues et Colléguettes l’ont résolu, alors je leur ai donné la surprise promise : une boîte de chocolats de qualité classe et bourgeoise.

C’est pas ces clés là, mais vous voyez l’idée.

Pour postuler, j’avais caché dans mon CV un code secret en plusieurs parties. Je vous le montrerais à l’occasion. Comme ça en plus vous aurez mon CV, même si ça ne vous intéresse pas.

J’ai fait vœu de non-flatulence dans le burlingue open-space, que j’ai presque réussi à tenir les deux semaines ! Juste une fois, en screud’ (comme on dit maintenant), j’étais tout seul à côté de la cafetière qui faisait un bruit du diable, je me suis permis un petit écart. Personne n’a rien entendu grâce à la cafetière, et personne n’a rien senti car les distances de sécurité étaient respectées. Alors bon, hein, voilà.

J’ai aussi fait vœu de non-masturbation sur le lieu de Travail, que j’ai tenu ! Heureusement qu’il y avait des toilettes dans l’hôtel où je créchais, pour soulager le système.

Là maintenant, mon lieu de travail c’est aussi mon lieu d’habitation. J’ai arrêté les vœux, faut pas déconner.

Je vous laisse avec une image qui milite pour la lutte contre l’apartheid.

J’espère que le lien entre apartheid et cette image est suffisamment de mauvais goût pour vous.

Yo !

Medley d’événements corporates

Cet article sera bourré d’incohérences, encore plus que d’habitude, car il est inspiré de plusieurs événements. Ils se sont tous déroulés il y a plus de deux ans, ne soyez donc pas choqués s’il n’y est fait aucune référence à des masques ou des virus.

L’un de ces événements inaugure le démarrage du projet POILS_PUBIENS. À cette époque, nous n’étions que 4 :

  • Chef NightWish. Pouvoirs spéciaux : balancer des liens vers des docs en croyant que ça va automatiquement résoudre un de nos blocages techniques. Dire « on n’a pas réussi à faire telle chose » pour dire « tu n’as pas réussi à faire telle chose ».
  • Semi-Chef Lucene-Lapin. Pouvoirs spéciaux : travailler la nuit et dormir le jour, déclencher des « réunions coup-de-poing », coder des projets persos clients lourds en PHP (wtf ?). Son titre de noblesse a fluctué d’un article à l’autre : « Collègue », « Chef », etc. On va dire qu’il est Semi-Chef.
  • Collègue DocteurMaboul. Pouvoirs spéciaux : écrire de la documentation en LATEX, faire des présentations avec des images rigolotes hahaha.
  • Et moi, bien sûr.

Petit zoom sur Collègue DocteurMaboul, mon meilleur collègue de tous les temps et de toutes les boîtes où j’ai été :

  • Il gueule contre les chefs afin d’obtenir des avantages, pour lui-même et pour l’équipe, ce dont je suis incapable en tant que SuperFlamby.
  • Il lèche les bottes de ses collègues et encense le moindre petit morceau de travail produit, ce que j’aime en tant que SuperEgo.
  • Il glandouille et ne travaille que sur les sujets qui l’intéressent, au point de déformer l’espace glandique local, masquant ainsi les glanderies moins prononcées des collègues situés à proximité, ce qui m’intéresse en tant que SuperGlandeur.

C’était mon collègue-fusible. Je me disais : « tant qu’il est là, je peux glander un peu puisque de toutes façons je glanderai jamais autant que lui ». Spoiler alert : le fusible a pas tenu.

L’événement se déroule en Sicile, dans une villa isolée du monde extérieur. Nous y crécherons pendant 4 jours, l’objectif étant d’élaborer le « Business Model Canvas » du projet.

Phase 1 : on collecte des slips…

Petit rappel concernant POILS_PUBIENS : il s’agit d’une gamme d’application cosmologiques ayant pour sacerdoce de lutter contre les distortions spatio-temporelles de l’univers, sur tous les plans d’existence confiés par nos clients, afin d’empêcher un débordement de chaos. C’est un outil parmi d’autres dans ce passionant métier qu’est le maintien de la réalité, mais nous avons vocation à en faire un outil central qui recueillerait les détections de paradoxe génériques des autres outils.

Comme cet article est un medley, en même temps qu’on est 4, on est aussi une quinzaine de personne, mais l’événement va durer une seule journée et une seule nuit. La nuit sera longue…

Un nombre conséquent d’embauche a été récemment effectué, nous ne nous connaissons pas tous très bien. Nous avions donc pour consigne de préparer des petites présentations de nous-mêmes. Les collègues front-enders ont osé un Power Point ironico-dégueulasse rose fluo + WordArt arc-en-ciel + gif animés de dancing banana. Sa confection leur a pris une bonne demi-journée.

De mon côté, j’ai recensé des hobbys et des passions de chaque collègue, afin d’obtenir un joli graphe connexe (les collègues A et B aiment l’aquafootball, les collègues B et C aiment collectionner des images de nichons, etc.). J’ai ensuite créé un petit jeu dans lequel il faut retrouver toutes les associations hobby-personne. Je ne peux pas vous le montrer car il révélerait des choses trop intimes. Mais je l’ai recyclé en un jeu-hommage à Eye of the Beholder, décrit dans cet ancien article, et jouable par ici.

J’ai aussi demandé un petit créneau pour jouer un sketch de mon crû sur le langage python. Oui, on peut faire des blagues avec du code.

Patchwork narratif du matin

L’événement est situé à quelques lieues du Travail. Chef NightWish nous a laissé nous organiser pour le trajet, avec l’obligation d’arriver au plus tard à 12h30. Sous-entendu : « le matin vous bossez normalement, parce que les événements corporate faut pas en abuser. En partant vers 11h, vous serez large pour arriver à 12h30 ».

On part dès 9h. Chef NightWish tire la tronche. On fait semblant de rien et on s’éclipse.

On débarque tranquille dans la maison-villa AirBnB. La gérante nous fait visiter. Elle est un peu âgée, avec des seins énormes. Pour de vrai. C’est pas moi qui le fantasme.

Des collègues installent du matos musical (sono, guitare, piano électropsychédélique et autres fatras). Vous verrez bientôt pourquoi.

Concernant la boustifaille, nous avons chacun été affecté à un poste précis. Collègue Aquafootball, autoproclamé « roi du barbeuk », s’est proposé pour les saucisses du soir. Il se nomme ainsi car c’est un grand supporter de l’équipe locale d’aquafootball chilien, le sport populaire de la région.

J’ai personnellement opté pour la salade-tomate-mozzarella, du soir aussi. Je peux donc glander.

J’aurais aimé distiller dans cet article une ambiance glauque et effrayante : la villa sicilienne est hantée, on entend des bruits, des personnes disparaissent, on ne peut plus repartir car la voiture est en panne, etc. Mais la matière ne s’y prêtait pas. Les deux points les plus dérangeants de la maison sont :

  • la disposition des toilettes : juste à côté de la cuisine. Si ça ne tenait qu’à moi, on serait toujours à moins de 20 mètres d’une chiotte partout dans le monde. C’est important. Mais de là à avoir un accès direct aux chiottes depuis la cuisine, une limite a été franchie.
  • Une absence de moyen acceptable de faire du café. Nous disposons d’un récipient bizarre dans lequel il faut tout mettre en vrac (eau et café moulu), puis nous devons appuyer tout doucement sur un piston afin de séparer le café liquide du café moulu. Ça ne marche pas. Nous mâcherons du café pendant 4 jours.

On pose notre fatras informatique dans la salle principale. Entre temps, Chef NightWish est arrivé. Comme il s’y croit à fond, il annonce avec un corporatisme empreint d’ironie que cette pièce sera la « War Room ».

Collègue Aquafootball teste la tireuse à bière. Je discute du projet annexe Arcanciel avec Stagiaire SuperCSS.

Le projet annexe Arcanciel est un truc de dingue, développé en partenariat avec la Zuzu Academy (l’université gratuite de Marc Zuckerberg). Comme vous le savez, l’œil humain ne distingue pas toutes les couleurs, or certains bugs de réalité ne se voient que sur certaines longueurs d’onde chromatique bien spécifiques. Arcanciel est un framework javascript permettant de convertir les couleurs d’un type d’œil vers un autre. Vous pouvez afficher une image telle que vue par un daltonien deutéranope, ou bien vue par un chien qui veut savoir comment voient les yeux d’une mante de mer, etc. C’est énormément de code, avec des calculs ultra-optimisés.

Tout le monde est là, c’est le moment de montrer notre surprise à Chef NightWish, car c’est son anniversaire ! Nous lui offrons une interprétation de la chanson « Something Wrong » du groupe islandais Bang Gang, avec des paroles personnalisées pour lui. Il a une petite larmette pendant notre prestation.

Bang Gang : meilleur groupe du monde, meilleur nom de groupe du monde, va te faire foutre la SEO.

C’est Semi-Chef Lucene-Lapin qui s’est occupé des paroles. Il avait inévitablement déclenché une « réunion-coup-de-poing » pour en faire part au reste de l’équipe, avec réservation de salle et tout. J’étais un peu gêné. Des gens passaient dans le couloir et voyaient à travers la vitre un texte humoristique projeté sur grand écran.

Ça lui avait pris deux demi-nuits. Ce mec peut travailler des nuits entières sur des documents sérieux, puis d’autres nuits entières sur des trucs complètement aléatoires tels que des énigmes amusantes proposées par des collègues (pour une fois c’était pas moi). La journée, il m’appelle pour me narrer ce qu’il a fait de ses nuits (le sérieux ET l’aléatoire). Toutes ces heures passées au téléphone… Je les rentabilise en cassant des amandes, le téléphone sur l’oreille. J’en ai des pleines boîtes à chaussures, que je cueille chaque année sur les amandiers poussant autour de chez moi.

Et donc, cette performance chantatoire est la raison pour laquelle nous étions partis en avance. Nous devions installer le matos sans que Chef NightWish ne nous voit. Je ne suis pas sûr qu’il l’ait réalisé. Pour tous les domaines qu’il connait un minimum (entre autres, l’informatique et la musique), Chef NightWish croit systématiquement que chaque action « ne prendra pas plus de 5 minutes ». On retrouve ce caractère chez beaucoup de chefs.

De plus, il faut bien l’avouer, l’installation n’a pas pris énormément de temps. En tout cas, c’est sûr que ça ne nécessitait pas la contribution de tout le monde, puisque j’ai glandé pendant que d’autres s’y attelaient.

Pour finir cette matinée : repas classe et équilibré préparé avec amour par les collègues assignés à la bouffe du midi.

Moi pendant que les autres travaillaient.

Gloubiboulga récitatoire de l’après-midi

Séance de réflexion sur le Business Model Canvas et ses schémas annexes : Customer Journey Map, Economic Canvas, Environmental Canvas, Disruptifier Bullshit Canvas, etc. Vous connaissez le principe : on écrit un truc sur un post-it et on le colle sur un des schémas.

J’adore les pitreries corporate, mais j’ai beaucoup de mal à y garder mon sérieux. J’ai des idées de post-it que je trouve pertinentes, mais je ne peux m’empêcher de les présenter de manière débile. Par exemple, j’écris : « les lois étendues de conservation de la réalité physique, on n’y comprend rien ! ». Chef NightWish est obligé de dédébiliser le propos et de le remplacer par : « manque de connaissance théorique de l’équipe technique ». C’est pas très gentil de ma part et ça ralentit l’avancée de la réflexion, mais moi je me marre.

Le groupe de travail voisin, dans lequel officient Semi-Chef Lucene-Lapin et Collègue Aquafootball, a adopté la technique du pastis-post-it. Un post-it collé, un pastis, un post-it collé, un pastis, etc.

De manière prévisible, la War Room devient un océan de post-its aux couleurs criardes et entropiques.

Chef NightWish : « Nous ne devons pas hésiter à remettre en question ou casser des choses établies depuis des années. En gros : soyez punks ! ».

Des post-its punks.

Il nous donne comme exemple Elon Musk avec sa société SpaceX. La NASA imposait une gargantuesque liste d’exigences pour je-ne-sais-quel outil de navigation. Une seule entreprise au monde était capable de les fabriquer et les vendait à un prix stratosphérique (amusant pour un machin censé aller dans l’espace). Mumusk a pris un iPad, a (fait) effectuer une gargantuesque liste de tests pour prouver qu’il répondait aux exigences exigées, et c’est passé. Comme quoi il existe des appareils qui se vendent à un prix encore plus stratosphérique que le prix déjà bien stratosphérique d’un iPad.

Je reprécise que les événements corporates narrés ici datent de plusieurs années, Mumusk avait encore à peu près la cote auprès de la population humaine, Twitter gazouillait innocemment des propos d’une toxicité variable.

Vient alors le moment de faire nos auto-présentations. L’horrible & glorieux Power Point fait sensation. Collègue Aquafootball, alcoolisé par les bières et le pastis-post-it, commence à raconter n’importe quoi de plus en plus fort. Semi-Chef Lucene-Lapin trouve notre show très goleri, ha ha ha, mais aurait surtout souhaité une liste de nos compétences techniques : qui sait faire du python, du front-end, du big data, de la colorimétrie karmagraphique, … Ah oui, c’eut été intéressant.

Petite pause autorisée, avant de se remettre en groupe de travail pour préparer la restitution finale de nos post-its. Quelques personnes jouent au jeu des hobbys. Cool. Collègue DocteurMaboul entraine son groupe (dont moi) dans la méga-piscine de la maison. Le temps de pause file comme le vent. On revient à l’arrache, plus ou moins rhabillés et les cheveux dégoulinants. La restitution risque d’être un peu légère.

Dans une autre réalité, Chef NightWish nous présente le « Manifeste de la Bienveillance de POILS_PUBIENS ». Sur ce document est gravé en lettre de feu que nous devons être gentil, ne pas nous pourrir mutuellement et ne pas répéter ce que dit un collègue en prenant une voix de débile pour se moquer. Collègue BarryWhite met en doute la réelle utilité d’un tel texte. Chef NightWish répond que dans d’autres boîtes, il a vécu des moments où des ardeurs testostéronesques inter-collègues furent désamorcées grâce à quelqu’un qui montra du doigt le manifeste local placardé au mur.

Collègue BarryWhite continue d’émettre des doutes. Il est à la limite de se foutre de la gueule de Chef NightWish. Je lui réponds que dans le respect du Manifeste, on ne doit pas se foutre de la gueule des autres, y compris au sujet du Manifeste lui-même.

Collègue BarryWhite se nomme ainsi car il a le physique inverse de BarryWhite, tout en ayant sa voix. C’est assez troublant.

Le Manifeste.

Dans une autre réalité, un tournoi de paintball est organisé. Le gagnant remportera un coussin-peluche à l’effigie du logo de notre projet. Je suis l’un des plus mauvais, dans l’équipe la plus mauvaise. Ça me rappelle une partie de Laser Quest que j’avais disputé contre des gamins de 8 ans. J’étais arrivé avant-dernier. Évidemment, si ça avait été un tournoi de Clash of Codes, je leur aurai tous dévissé la tronche.

Malgré tout, je reste fair-play, en particulier lorsqu’une personne d’une autre équipe se vautre devant moi telle une otarie bourrée à la bière et se flingue le genou. Je m’enquiert de son état et ne lui tire pas dessus à bout portant. J’ai dû me faire violence, car cette personne est une autre fan d’aquafootball chilien, mais de type reloue. Elle arrête pas de fanfaronner chaque fois que son équipe gagne. Insupportable.

Chef NightWish n’est pas dans l’équipe la plus mauvaise, mais il est le plus mauvais. Ça finit par le gonfler d’arriver à rien. Dans les dernières minutes, il court dans tous les sens en rafalant aléatoirement et en insultant les mères de tout le monde.

Il est un peu essouflé et un peu rouge au moment de remettre le trophée à la personne gagnante (je ne sais plus qui c’est).

Saurez-vous deviner ce que représente ce trophée-coussin-peluche ?

Dans l’autre-autre réalité, notre restitution se déroule tant bien que mal et notre ardent travail est achevé. Les schémas dûment post-ités doivent maintenant nous permettre de déterminer notre Business Model. Chef NightWish énonce en quelques phrases le fonctionnement du projet et la manière dont il permettra de générer des clients et des soussous. On est tous bluffés : c’est clair, ça semble réaliste et c’est sorti naturellement. Une sorte de magie corporato-cognitive s’est opérée, notre travail de pastis-post-it-bullsh-it n’était rien d’autre qu’une préparation pour obtenir ces phrases qui nous sont maintenant évidentes.

Je pense que c’est des conneries et que Chef NightWish a tout fomenté à l’avance. Ces fameuses phrases étaient déjà prêtes bien avant le début de l’événement. Si je les ais instantanément approuvées, c’est surtout par fainéantise et par facilité. Dois-je rappeler que je préfère sauter dans une piscine, boire de la bière et réaliser des mini-jeux plutôt que de réfléchir à la proposition de valeur d’une start-up que l’on souhaiterait à haut potentiel de licornitude ?

Bachouillis racontariens du soir + lendemain

Réaffectation des tâches pour la préparation de la bouffe du soir, car Collègue Aquafootball est étrangement introuvable. Je me vois octroyé, d’autorité, le titre de « prince régent du barbeuk ». Je ne suis pas doué pour ce genre d’activité adulte et virile, je crame 73% des saucisses, ça aurait pu être pire.

Un québecois spawne de nul part, probablement un locataire comme nous. Comment a-t-il fait le trajet du Québec jusqu’à cette villa paumée en Sicile sans qu’on le voit arriver ? On ne le saura jamais. Il décline poliment notre invitation à partager notre repas, car il a déjà mangé. Mais il accepte l’invitation à boire et à discuter. Il a inévitablement un accent rigolo.

Je gratte les pourcentages de saucisse non-cramés et tente de les ingérer, car je n’aime pas gâcher la nourriture. Une voix proférant des propos aléatoires me fait relever la tête de mon assiette. Collègue Aquafootball a réapparu. Il parle avec le québecois, très fort et en anglais. Plusieurs personnes lui disent à plusieurs reprises que ce natif de la Belle Province parle et comprend le français, ce dont Collègue Aquafootball n’a cure. Un tel comportement peut-il être qualifié de « punk » ?

Il est 2 heures du matin, c’est le moment de sortir mon ordinateur et de proposer mon sketch sur le python. Dans un futur indéterminé, je vous ferais un article de blog pour vous le montrer. En attendant, voici un avant-goût : ouvrez une console python, écrivez None is not False et appuyez sur Entrée. Lolilol !

Dans tous les événements corporate dont cet article est le medley, je présente ce sketch. Chef NightWish, qui y a déjà assisté, me fait remarquer que la blague « None is not False », je finirai par ne plus pouvoir l’utiliser. Sous-entendu : « ton sketch, c’est du réchauffé ». Ouais, et alors ? T’as mieux à proposer ? Viens nous faire un sketch sur les Business Model Canvas ! (C’est même pas ironique).

Semi-Chef Lucene-Lapin tente de mettre en défaut mes connaissances, en me questionnant sur la manière dont les nombres décimaux sont gérés en python. Il me suggère de tester des opérations mathématiques donnant des résultats faux à cause des approximations. C’est censé me surprendre.

Réponse : les nombres décimaux sont gérés pareil que dans la plupart des autres langages, c’est à dire avec la norme IEEE 754 (mais toujours en précision « double », 64 bits). Sauf que je maîtrise mal ces histoires de valeur approchées et ne parviens pas à lui répondre. Je considère que Semi-Chef Lucene-Lapin a mis en défaut mes connaissances sur la norme IEEE 754, mais pas sur le python.

Je me permets de lui montrer que s’il veut des valeurs plus exactes, avec une précision configurable et théoriquement infinie, il suffit d’utiliser le module « decimal », de la librairie standard du python. Merci, au revoir.

Le sketch terminé, chacun retourne à des occupations plus ou moins valorisantes : boisson, katastro-karaoké avec le matos de musique, discussion sur la vie, …

On re-perd Collègue Aquafootball. On le re-retrouve endormi dans un fossé, serrant dans ses bras une bouteille de whisky aromatisé au sirop d’érable. Stagiaire SuperCSS le traine jusque dans la villa et le pose en vrac sur un canapé. La plupart des gens partent se coucher. Nous ne sommes plus que quatre : Semi-Chef Lucene-Lapin, Collègue DocteurMaboul, Stagiaire SuperCSS et moi.

Collègue DocteurMaboul sort un petit carré de shit et commence à rouler. Ça fait plus de quinze ans que je n’avais pas fumé. Je le remercie pour ce petit moment de nostalgie qui me remémore ma vie étudiante et post-étudiante. À l’époque où ce récit se déroule, le CBD n’était pas encore à la mode. Cela dit j’ai jamais testé ce truc.

Dans une autre réalité, ce n’est pas la dernière nuit de l’événement, et le Business Model Canvas n’est pas fini. Nous restons à rédiger des post-its supplémentaires. C’est clairement pas la même réalité que celle avec le shit.

Dans la réalité précédente, nous discutons de l’avenir du projet jusqu’à 4 heures du matin.

Les deux réalités se rejoignent lorsqu’on va tous se coucher. Sauf pour Semi-Chef Lucene-Lapin, qui utilise son pouvoir spécial et continue de rédiger des post-its tout seul.

Le lendemain, les gens se réveillent à des heures non centrées et non normées. Nous rangeons le bordel : ordinateurs, bouteilles vides, tireuses à bière, morceaux de saucisse, matériel de musique, fins de pétards, post-its, …

Après un vote à l’unanimité, nous annulons les résultats du tournoi de paintball. La personne ayant gagné accepte de bon cœur de rendre le trophée-coussin-peluche-poils-pubiens (de toutes façons je savais même plus qui c’était), afin de le remettre solennellement et officiellement à Collègue Aquafootball, pour l’ensemble de sa prestation de la veille.

Covoiturage pour rentrer, dans la voiture de Collègue BarryWhite. Nous mettons plus de temps qu’à l’aller, car nous devons faire une pause tous les 20 kilomètres pour laisser vomir Collègue Aquafootball.

Durant l’une de ces sessions « dégobillage », nous sommes arrêtés dans un chemin d’entrée de maison. Un vieux affublé d’une casquette Spiderman s’approche de nous. On lui explique pourquoi on est là, qu’on est désolé et qu’on va très vite repartir. Le vieux ne dit rien et reste à nous regarder jusqu’à ce qu’on parte. C’était pas par méchanceté ni par crainte qu’on soit des cambrioleurs gérontophiles. C’est juste qu’il était très vieux et n’avait plus la faculté de parler. Un moment étrange, hors du temps.

Collègue Aquafootball perdu dans son vomi et le vieux Spiderman bizarre (allégorie).

Épilogue

Le dérapage alcoolisé de Collègue Aquafootball restera dans les esprits et sera diffusé, répété et mentionné durant plusieurs mois. Le pauvre ne méritait pas ça, d’autant plus que c’était exceptionnel (dans tous les sens du terme). Ce n’est pas un déglingopathe habitué du binge partying. Ça avait fait pareil avec Chef Peyotl : il a eu un seul écart malheureux et les gens en reparlaient encore des années après. C’est pourquoi, j’essaye pour ma part de ne pas trop faire circuler ce genre d’embarrassantes sorties de route. Sauf que je les écris et les immortalise dans ce blog. Zut…

Collègue BarryWhite deviendra un early adopter de Squarity. C’est grâce à des gens comme lui si je continue d’avoir le courage d’avancer ce pojet personnel. Ça avance juste très lentement.

Le coussin-peluche deviendra la mascotte de la boîte, trônant sur le burlingue de Collègue Aquafootball. Nous nous amuserons régulièrement à nous le lancer mutuellement à la tronche.

Stagiaire SuperCSS, armé d’un magnum de vodka, consacrera deux week-ends au projet annexe Arcanciel. Son travail rendra caduc et inutile tout le code déjà produit par la Zuzu Academy. Ce que la plupart des gens ignorent (mais pas lui), c’est que les codes couleurs CSS peuvent contenir de nombreuses valeurs hexadécimales. Les 3 premières indiquent les quantités de rouge, de vert et de bleu, les suivantes décrivent les différentes couleurs visibles par d’autres types de cônes et de bâtonnets présents dans différents types d’organes visuels, aussi bien humains que animaux.

color: #AABBCC1122334455667788990000111111

Collègue DocteurMaboul se fera intégralement virer comme un malpropre. Licenciement pour truanderie au travail et glanderie aggravée, sans indemnité ni pot de départ. C’était mon gonfleur d’égo, mon aggro à chefs, mon meilleur collègue de tous les temps. Il ne pouvait pas durer éternellement. Je le remercie de m’avoir permis de croiser son chemin à lui, iridescent et éthéré.

Semi-Chef Lucene-Lapin, armé d’un Jéroboam de Ricard, tentera de fusionner le PHP de Drupal avec le PHP de Symfony en une ultime application client lourd, mais échouera à cause de la mauvaise gestion des encodages de caractères dans le PHP, qui effacera tous les points-virgules de son code source. Son rythme de travail-sommeil incompatible avec le reste de l’humanité agacera la hiérarchie, qui le semi-placardisera en abaissant son contrat de travail aux trois cinquièmes.

Chef Nightwish démissionnera pour aller brouter de l’herbe plus verte ailleurs. Il fera un pot de départ comme il se doit, que je rentabiliserai un max (fondue savoyarde).

Des quatre fondateurs originaux du projet POILS_PUBIENS, il n’en reste maintenant plus que 1,6 (suite au passage aux trois-cinquième de Semi-Chef Lucene-Lapin). Ce dernier se rapproche doucement de l’âge de la retraite…

Sauf que bientôt, il ne restera plus que 0,6 fondateurs. Si vous avez lu cet article jusqu’ici, vous méritez bien une petite info exclusive : je vais très prochainement changer de crémerie ! Je ne manquerai pas de vous écrire une palanquée d’articles récapitulant les divers moments intéressants et étranges de cette présente incarnation professionnelle. Cependant, je dois vous avertir qu’il y aura moins de matière que ma série d’articles revanchards et cathartiques que j’avais écris en fuyant Zarma.pro.

À bientôt !

Ça c’est pas moi, c’est Collègue DocteurMaboul

Un peu de maintenance blogaire

Pouik pouik tout le monde !

J’ai réparé et réactualisé quelques trucs :

  • Dans mon article phare « les chansons pipi-caca de notre enfance » , j’ai corrigé les liens vers les fichiers mp3. Vous pouvez à nouveau cliquer sur les boutons Play pour écouter mes interprétations de ces perles culturelles.
  • J’ai bien évidemment ajouté Squarity dans cette page de regroupement.
  • Dans l’article expliquant pourquoi les liens sont bizarres, j’ai ajouté un paragraphe au début, annonçant que je laisse tomber les tentatives de monétisation de ce blog. Ça avait fonctionné un tout petit au début, puis ça a très vite fait flop.
  • Quelques autres résurrection de liens morts ici et là.

Je voulais aussi réorganiser les catégories, car c’est un beau bazar. Mais il faudrait que je repasse sur tous les articles pour tous les recatégoriser. Je le ferais plus tard, ça prendra un certain temps et ça risque de me sur-nostalgiquifier l’esprit, ce qui n’aide pas toujours à aller de l’avant.

Courbes tiktokiennes complotistes

La jolie dame du jour se nomme Tallyberry. Comme la totalité des personnes hypes et actuelles, elle est sur Tiktok. Dépêchez-vous de scraper ses vidéos avant que la fausse puritanerie sécuritaire des réseaux sociaux ne la banisse.

À moins que ce ne soit pas de la puritanerie…

Un pote m’a informé d’un complot mondial associé à Tiktok. Ce réseau social chinois est conçu pour privilégier sur le territoire de la Chine du contenu qui rend intelligent (tutoriels, conférences, cours en ligne, …) et pour privilégier dans le reste du monde du contenu qui rend stupide.

C’est pour cette raison que les femmes avec de belles rondeurs se font régulièrement fermer leurs compte sur Tiktok. Parce que regarder des seins et des fesses, ça rend intelligent, or je n’habite pas en Chine.

S’il te plaît, glorieux et gentil peuple de Chine, pourrais-tu nous laisser au moins les jolies filles ? Certes, on sera moins stupide, mais vous avez encore beaucoup de marge, car on vous laisse les conférences et les cours, en gage de notre bonne volonté.

Pouet !

Pour le mois prochain, j’aurais peut-être un truc à vous annoncer. Ou pas. Je ne peux rien révéler maintenant. Il est possible que je ne puisse rien révéler plus tard et que je n’ai finalement rien à vous annoncer. On ne sait pas. Ce paragraphe ne sert à rien.

Je vais finir par une phrase de fin à la mode des humoristes à la mode : « c’est tout pour moi, c’était Réchèr ! »

(Je déteste l’humour, ça m’énèrve)

La road-map de Squarity est là !

Article à l’arrache, qui est un copié-collé du message que j’ai mis sur le Discord de Squarity. Mais j’ai le droit, vu que j’ai réussi à sortir cette fameuse road-map.

Allez ici : http://squarity.fr/ et faites un Ctrl-F5. En haut à gauche, à côté des liens vers les repository github, se trouve le lien vers la roadmap. Il vous mène à une page pleine de petits carrés colorés, chacun représentant une fonctionnalité prévue (pour une date indéterminée). Cliquez sur les carrés pour avoir des détails.

Pour les personnes voulant lire tous ces détails, de manière plus simple et linéaire, allez ici : https://github.com/darkrecher/squarity-doc/blob/master/road_map.md .

Certains carrés sont censés afficher une gif animé de « vision » : un hypothétique screenshot montrant des fonctionnalités spécifiques. Pour l’instant, aucune de ces gifs n’est prête. Comme quoi, elle est pas si finie que ça, cette roadmap. J’y travaille.

Cette mise à jour tombe à point nommé pour fêter les 2 ans de Squarity ! Et ça mérite bien …

Une petite rétrospective

Tout d’abord, la vraie date d’anniversaire est le 17 septembre. On n’est plus à ça près. J’essayerais de me recaler sur le 17 l’année prochaine.

Cette année, je n’ai pas foutu grand-chose : juste quelques jeux et cette belle road-map.

Il est souvent difficile de se dégager du temps libre pour des projets perso. À cause du travail salarié, du quotidien à quotidieniser, du corps qui fatigue et qui veut tout le temps dormir, etc.

De plus, j’ai dépensé beaucoup de ce temps libre dans un autre projet : la découverte des NFT et des jeux Play-to-Earn, en particulier avec la crypto-monnaie « WAX ».

Je n’ai pas pris beaucoup de risques, mais je ne suis pas sûr qu’on puisse considérer que j’ai gagné de l’argent. J’ai démarré avec environ 200 WAX. J’en ai maintenant 250 + plein de petits NFTs dont la valeur totale est actuellement estimée à 150 WAX. Je m’en suis plutôt bien sorti. Sauf que quand j’ai acheté mes 200 WAX, le cours était à 60 centimes d’euro, et il est maintenant à 10 centimes. Oups…

C’est pas grave du tout, je n’ai pas investi plus que ce que je pouvais me permettre de perdre. En revanche, j’ai perdu énormément de temps à analyser des jeux, surveiller des places de marché, cliquer toutes les 4 heures sur un tamagotchi-panda pour l’envoyer en aventure, etc. C’était amusant, mais je dois diminuer le temps et l’énergie que je consacre à cette activité. Les jeux actuels en play-to-earn ne valent vraiment pas grand-chose en ce qui concerne le plaisir de jeu et le divertissement.

Remerciements

Je remercie les mêmes personnes que l’année dernière, pour leurs encouragements et leurs passages réguliers sur le serveur Discord. Ça me fait très plaisir et ça m’aide à continuer, alors merci !

Je remercie également Hundraw , qui m’a énormément aidé à écrire le CSS de la page de roadmap. Merci merci !

Dans un futur (espéré) proche

Voici ce que j’ai prévu :

  • Dessiner ces fameuses gif animées,
  • Réaliser quelques tâches du Trello de Squarity, histoire de le nettoyer un peu,
  • Démarrer la tâche de road-map « Améliorer le point d’entrée »,
  • Faire une vraie API avec des vraies structures de données,
  • Ce sera déjà pas mal !

Voilà. On va continuer d’avancer comme ça, de manière bancale et anarchique, et surtout de manière très lente. Mais nous ne nous arrêterons jamais !

Et pour finir, voici des ronds

Miss Pamelia, sur tik-tok. Si elle vous plaît, je vous invite à télécharger assez vite ses vidéos (il y a des tonnes de downloader très simple à utiliser). Régulièrement, je trouve des belles femmes sur tik-tok, dont le compte se trouve mystérieusement fermé au bout de quelques semaines, juste parce qu’elles ont laissé dépasser un fragment de nichon. C’est scandaleux. En attendant, faites vos sauvegardes.

Bises.

Harry Potter et le python matriciel

Qui veut un puzzle marrant inspiré de l’univers de Harry Potter, généré avec du fourchelang le langage python et les librairies numpy + opencv ?

Voilà comment ça se présente :

(click to enlarge, biâtch)

Ceci est un quadrillage composé de 12 cases (3 lignes 4 colonnes), chaque case contient un groupe de 4 clés.

Chaque clé est présente une ou deux fois dans tout le quadrillage.

Si vous prenez deux cases adjacentes, elles ont toujours une clé en commun. Leurs emplacements à l’intérieur des cases sont aléatoires.

Or donc, :

  • pour les cases du milieu, les 4 clés ont une jumelle sur chacune des 4 cases adjacentes,
  • pour les cases du bord, 3 clés sur 4 ont une jumelle, et la quatrième est unique (sont emplacement à l’intérieur de la case est aléatoire),
  • pour les cases des coins, 2 clés sur 4 ont une jumelle, les deux autres sont uniques.

Imprimez cette feuille, découpez les cases, mélangez-les et essayez de retrouver la disposition originale. Quel distrayant puzzle !

Il m’en faut plus

Pas de problème, en voilà un fonctionnant sur le même principe, mais sur un quadrillage de 8×8 cases.

Pour des images plus grandes et de meilleure qualité, c’est par ici dans ce repository git. Elles doivent être disposées comme ceci :

plank_00.png | plank_03.png | plank_06.png | plank_09.png
plank_01.png | plank_04.png | plank_07.png | plank_10.png
plank_02.png | plank_05.png | plank_08.png | plank_11.png

Comment c’est construit ?

Les clés

Pour commencer, il vous faut des images pour générer les clés.

Nous avons donc : (3 types d’aile) x (4 types de bas de clé) x (4 types de haut de clé) x (3 types de tige). Soit 3 * 4 * 4 * 3 = 144 combinaisons différentes de clés.

On peut maintenant construire une image d’une des clés à partir d’un numéro entre 0 et 143. Il vous faudra effectuer quelques divisions entières, quelques modulos et utiliser open-cv (la lib python de manipulation d’image). Je vous fais grâce de ces détails bassement techniques.

Les associations horizontales

Vous prenez ensuite tous les nombres entre 0 et 143, vous les mélangez, et vous les séparez en deux listes de 72 nombres chacune. La première servira pour les clés définissant les liens d’adjacence horizontaux, la deuxième sera pour les liens verticaux.

Réarrangez la première liste en un rectangle de 8 lignes 9 colonnes. Mettons que ça donne ceci :

  7  17  38   4 68 125  96 135  16
101 118  97  73 46 143  92  89   2
 86  14  62  56 10   9   6  19   3
134  36  37  93 13  57  81  52  74
 66   8  71 109 60  40  65  69  27
 59 105   0  76 41  49  91 107  99
115  95  75  48 83 142 141 130  64
  1  51 104 102 22  54  80  34 129

Ensuite, vous recopiez la deuxième colonne juste à sa droite, puis la troisième, et ainsi de suite jusqu’à l’avant-dernière. Ça donne ce rectangle de 8 lignes 16 colonnes (que je vous mets sous forme de tableau, sinon ça fait des retours à la ligne pourris dans wordpress) :

717173838446868125125969613513516
101118118979773734646143143929289892
861414626256561010996619193
134363637379393131357578181525274
66887171109109606040406565696927
5910510500767641414949919110710799
115959575754848838314214214114113013064
151511041041021022222545480803434129

Pour finir, sur chaque ligne, vous regroupez les numéros par couple. Ce qui vous donne un rectangle de 8 lignes et (8×2) colonnes :

7,1717,3838,44,6868,125125,9696,135135,16
101,118118,9797,7373,4646,143143,9292,8989,2
86,1414,6262,5656,1010,99,66,1919,3
134,3636,3737,9393,1313,5757,8181,5252,74
66,88,7171,109109,6060,4040,6565,6969,27
59,105105,00,7676,4141,4949,9191,107107,99
115,9595,7575,4848,8383,142142,141141,130130,64
1,5151,104104,102102,2222,5454,8080,3434,129

Chaque couple de deux numéros correspond à deux clés, dans une case du quadrillage initial de 8×8. Il s’agit des clés réalisant les adjacences horizontales.

Les deux autres clés de chaque case ne sont pas encore définies, ce qui nous amène au chapitre suivant.

Mais avant, une petite pause. Puisque nous sommes dans l’univers de Harry Potter, voici Dawn French, l’actrice qui joue « La Grosse Dame » dans le Prisonnier d’Azkaban.

Les associations verticales

C’est pareil, mais en inversant les lignes/colonnes.

Prenez les 72 valeurs qui restent, disposez-les randomement dans un rectangle de 9 lignes 8 colonnes.

 12 114  15  45 128 120  44  28
  5 110 136 132 126  72  39  88
 78  11  70 127  47 124 117  33
 25 103  20  82  29 139  26 113
106 140 123 122  94  30 119  32
 79  23  21  98  24  55 137 111
 77 138 108 100  53  67  85 133
 58 112  84  90  35 131 121  31
 43  61  87 116  63  42  50  18

Au lieu de doubler les colonnes, doublez les lignes : de la 2ème à l’avant-dernière. Ce qui donne un rectangle de 16 lignes 8 colonnes :

 12 114  15  45 128 120  44  28
  5 110 136 132 126  72  39  88
  5 110 136 132 126  72  39  88
 78  11  70 127  47 124 117  33
 78  11  70 127  47 124 117  33
 25 103  20  82  29 139  26 113
 25 103  20  82  29 139  26 113
106 140 123 122  94  30 119  32
106 140 123 122  94  30 119  32
 79  23  21  98  24  55 137 111
 79  23  21  98  24  55 137 111
 77 138 108 100  53  67  85 133
 77 138 108 100  53  67  85 133
 58 112  84  90  35 131 121  31
 58 112  84  90  35 131 121  31
 43  61  87 116  63  42  50  18

Faites des couples, en prenant deux valeurs l’une au-dessus de l’autre. Ça donne un carré de 8×8. Cette fois-ci, je le mets sous forme de texte-code, car les lignes sont plus courtes et ne vont pas faire de stupides retours à la ligne. Tant que ça ne nuit pas à l’affichage et à la présentation, je préfère le texte brut, c’est plus facile à générer et à copier-coller dans l’article. Vive le texte brut !

 12|114| 15| 45|128|120| 44| 28
  5|110|136|132|126| 72| 39| 88
-------------------------------
  5|110|136|132|126| 72| 39| 88
 78| 11| 70|127| 47|124|117| 33
-------------------------------
 78| 11| 70|127| 47|124|117| 33
 25|103| 20| 82| 29|139| 26|113
-------------------------------
 25|103| 20| 82| 29|139| 26|113
106|140|123|122| 94| 30|119| 32
-------------------------------
106|140|123|122| 94| 30|119| 32
 79| 23| 21| 98| 24| 55|137|111
-------------------------------
 79| 23| 21| 98| 24| 55|137|111
 77|138|108|100| 53| 67| 85|133
-------------------------------
 77|138|108|100| 53| 67| 85|133
 58|112| 84| 90| 35|131|121| 31
-------------------------------
 58|112| 84| 90| 35|131|121| 31
 43| 61| 87|116| 63| 42| 50| 18

Chaque couple de deux numéros correspond aux deux autres clés, dans chaque case du quadrillage initial de 8×8. Elles définissent les adjacences verticales.

Enfin, pour chaque case, vous mélangez randomement les 4 clés contenues dedans.

Y’a plus qu’à coder tout ça. Vous avez une implémentation (un peu à l’arrache) dans ce repository, dans lequel je stockais déjà d’autres bazars pour des mini-jeux et mini-énigmes.

Vérification de l’unicité de la solution

J’ai vérifié avec mon feeling de maître de conférence en arithmancie combinatorio-serrurologique, j’en conclus que oui c’est bon. Aux rotations et aux symétries verticales/horizontales près : y’a qu’une solution.

J’ai utilisé ce puzzle pour une sorte de mini escape-game en famille, et j’ai profité des rotations et symétries pour ajouter une mini-post-énigme. J’ai écrit une lettre derrière chaque carte. Une fois que le puzzle était reconstitué, il fallait toutes les retourner, et retrouver la phrase composée par ces lettres. L’astuce amusante, c’est qu’on ne peut pas déterminer à l’avance le sens de lecture, ni la position de la carte de départ, ni celle d’arrivée. Ça dépend de la manière dont le puzzle a été résolu. Il faut donc tester différents sens pour trouver la phrase finale. Hi hi hi !!

Et hop, d’autres chouettes images de Dawn French.

Tchuss.

Raffarin Pète-Gonade Memorial Day #14

Célébration rituelle de notre jour qui était férié avant et qui ne l’est plus à cause de ce connard de Raffarin ! Vous connaissez le principe : on conspue cet empaffé, on râle, on trépigne, on pleure, mais on ne fait rien de concret parce qu’on est juste une feignasse derrière son écran.

Voilà, ça c’est fait.

Nous pouvons maintenant réfléchir à d’autres trucs.

« Raffarin au Tibet » : il va tous les bouffer.

Et si on coupait l’internet mondial un jour par semaine ?

Ça a l’air étrange qu’une personne comme moi propose ce genre de restriction. J’ai très souvent les fesses vissées sur ma chaise, devant mon écran, à faire des trucs plus ou moins intelligents.

Je suis fortement dépendant de l’informatique. Je pense que je pourrais péter un câble si je n’avais pas accès à un ordinateur pendant plusieurs semaines d’affilée. Mais dans une certaine mesure, un ordinateur sans internet pourrait me suffire.

Les activités que j’aime pratiquer avec mon ordinateur (sans y être forcément talentueux) sont :

  • jouer,
  • programmer,
  • lire,
  • écrire,
  • dessiner du pixel art,
  • créer des challenges de hacking.

Elles ne nécessitent pas un accès internet constant. Bien entendu, il faut télécharger les jeux, aller sur les pages des blogs, faire des recherches sur stack-overflow pour copier-coller à l’arrache le code de la première réponse, chercher l’inspiration, etc. Mais en m’organisant un minimum, je pense être capable de pré-charger tout ce dont j’ai besoin de l’internet, pour ensuite utiliser mon ordinateur de manière optimale durant la journée sans connexion. Je n’ai jamais essayé, mais il est évident qu’annoncer quelque chose sans l’avoir vérifié n’ébranle ni ma conscience ni mon obligation de cohérence envers vous, lecteurtrices.

Autre de mes activités : la recherche d’images (ici, de Mandy Majestic).

Les activités que je pratique avec mon ordinateur dans le cadre professionnel nécessitent un accès internet constant. Ce n’est pas mon problème. La boîte où je bosse n’aura qu’à gérer ça comme il faut.

D’après un sondage que j’ai entendu quelque part et dont j’ai oublié la source, un certain pourcentage de personnes aurait souhaité qu’internet n’existât pas.

Ploum, éminent blogologue, s’est lancé dans une expérience encore plus extrême : une seule connexion par jour pour synchroniser des informations prévues à l’avance, ainsi que des connexions exceptionnelles chronométrées qu’il doit également préparer à l’avance.

Je ne suis pas un grand fan des religions, mais il faut avouer que l’idée d’un jour de repos régulier et obligatoire viennent d’elles (le « jour du seigneur »). Le judaïsme va même jusqu’à se demander s’il est autorisé de faire fonctionner des appareils électriques pendant le shabbat. N’oublions pas qu’en des temps lointains, le Raffarin Pète-Burne Memorial Day se nommait « lundi de Pentecôte » et provenait de la religion catholique. Ce lundi anciennement férié trouve ses racines dans un texte biblique narrant l’histoire de poules en chocolat de Pâques qui gravissent une pente en faisant « côt côt ».

Oui mais comment on ferait sans internet ?

Tout simplement de la même manière qu’on faisait dans les temps lointains où internet n’existait pas.

Bien entendu, l’idéal serait que ce jour déconnecté soit un jour travaillé. Y’a qu’à dire que ce serait le mardi. Les entreprises vont hurler pour l’atteinte à leur « compétitivité ». Par définition, la compétitivité représente le contexte interne et externe qui fait qu’une entreprise réussira mieux qu’une autre. Le jour de déconnexion serait mondial (puisque l’internet est mondial), donc il désavantagerait toutes les entreprises de la même manière, et par définition, ne modifierait pas les compétitivités entre elles.

Ensuite, les entreprises vont hurler que ça ferait écrouler l’économie mondiale. Ce à quoi je répondrais la même chose que précédemment : l’économie mondiale existait déjà avant internet. C’est aux entreprises d’organiser le travail de leurs employés de façon à les rendre le plus productifs possible même durant le jour sans connexion. Ce serait d’ailleurs une bonne leçon de « résilience » (bullshit-word included).

Comment ça se passe actuellement lorsqu’un problème survient dans le réseau interne de votre entreprise et que des employés ne peuvent plus utiliser le matériel informatique à leur disposition ? Ne me dites pas que ça n’arrive jamais tellement votre réseau est ouffement bien conçu. Est-ce que les employés sont condamnés à glander pendant plusieurs heures ? Peut-être que oui. Est-ce que l’impact a été important au point d’égratigner la compétitivité ?

L’engagement, une notion importante, surtout au foot.

Cette journée déconnectée serait une occasion de travailler sur des sujets de fond, de se concentrer sur des projets de long terme, de faire avancer des tâches qui attendent depuis des semaines et qui ne progressent pas car vous êtes en train de répondre aux mini-urgences constamment générées par vos collègues qui vous sollicitent dans le but de régler leurs mini-urgences à eux, générées par d’autres collègues, etc. Peut-être même que cette journée améliorerait la compétitivité.

Tant qu’à faire, on pourrait aussi couper tous les systèmes de communication à distance : téléphone, téloche, radio… Seules les appels d’urgence seraient possibles. Ça ne devrait pas être très difficile techniquement, puisque les appels d’urgence bénéficient déjà d’un traitement spécial : vous n’avez pas besoin de déverrouiller un téléphone pour en effectuer un, et ils utilisent la première antenne disponible, même si elle n’est pas incluse dans votre abonnement.

Il reste le sujet des organismes d’importance vitale : distribution de l’eau et de l’électricité, hôpitaux, etc. Est-ce qu’ils fonctionneraient toujours durant la journée sans connexion ? Réponse : il le faudrait, même si cette journée n’existe pas.

Je peux concevoir que des vies humaines dépendent de l’énergie électrique. Car il y a des solutions de secours pour générer du courant même en cas de perte d’accès au réseau électrique : ce sont les groupes électrogènes. Ça pollue et ça a un rendement catastrophique, mais en dernier recours, ça marche.

Le réseau internet a été conçu pour rester fonctionnel même si une partie des connexions et des appareils qui le composent tombent en panne. Cependant, il n’y a pas de garantie locale. Si le câble de fibre optique arrivant chez vous pète, internet fonctionne toujours, mais plus pour vous. Il n’existe pas de « groupe internetogène » de secours. Ça veut dire que si votre vie dépend d’une connexion à internet, même sur une période courte, ça peut mal se terminer pour vous. Cette journée sans connexion serait une occasion d’organiser les activités humaines de façon à ce que moins de vie soient dépendantes d’un système qui n’a ni solution de secours ni garantie.

Ce sera tout pour aujourd’hui. Vive le bonheur !

Ludum Dare 49 : mes revues de jeu

Zou. Petit article cheapos qui recycle des trucs déjà produits : les commentaires de mes revues de jeux du Ludum Dare pré-précédent. Je me permets parce que le mois dernier vous avez eu deux articles, alors ça va bien. J’oserais dire que ces commentaires comportent des descriptifs de qualité et des suggestions détaillées. Ça vaut ce que ça vaut (le vaut est un animal à poil ras).

Oh, et ça fait le deuxième article de suite qui est en anglais. Vous y survivrez, n’est-ce pas ?

Les jeux sont à peu près classés par ordre croissant de ma kiffitude personnelle. Si vous avez un peu de temps pour en tester quelques-uns, prenez en priorité ceux de la fin, qui sont justement estampillés « kiffitude ».

C’est parti pour du copié-collé frénétique !

Paper Route

https://ldjam.com/events/ludum-dare/49/paper-route

  • Overall:3.0
  • Fun:2.5
  • Innovation:2.0
  • Theme:4.0
  • Graphics:3.0
  • Audio:3.5
  • Humor:2.0
  • Mood:4.0

I encountered some bugs as other people said. But it was not too much annoying.

It is very frustrating to have McLudum giving you so many newspapers at start, and seeing nearly half of them immediatly lost, because the carriage can not hold them all.

I did not managed to get past level 2, but I’m not good at this sort of games.

There seems to be a story with your father, that’s always good to add this in a game.

Nice game, even if I’m not skilled enough for it.

Akameis

https://ldjam.com/events/ludum-dare/49/akameis

  • Overall:1.5
  • Fun:1.0
  • Innovation:2.0
  • Theme:3.5
  • Graphics:4.0
  • Audio:4.0
  • Humor:3.0
  • Mood:3.5

Technically and visually, it is really beautiful. Voxels are cool, and I like the fact that you can see the previous level below. It makes the tower more realistic.

About the time management

However, the turn-based/real-time logic is hard to understand at first, and cancels the interest of many monsters.

I did not immediatly realize the voxel-thing on the top right is a sort of hourglass that indicates the time before the next automatic turn.

The green monsters do not move when you move in real-time (by using the space bar), so you can dodge all of them easily. But at the opposite, the arrows move at the same time of the hero, and also with the automatic turn. This combination is rather illogical. And you often have to wait automatic turns for long seconds, to dodge some arrows that passes by.

Either you use a complete turn-based logic, like the game D.R.O.D., or you use a complete real-time logic, where every elements move at its own rythm. But mixing both is weird and unpractical.

 About the hammer

I thought I could break scenery objects with the hammer, in the hope of hidden bonuses, but scenery are unbreakable.

If you push « Z » without any direction, you smash the ground under you, making you fall and die.

I tried to smash the ground under skeletons with the hammer, but each time I got shot at blank point, because of the weird turn-based/real-time logic, and the fact that there is no visual information indicating that a skeleton is about to shoot.

So IMO the hammer is useless.

About the rest.

You can’t go back to the main menu when you click « how to play », and I had to reload the whole web page.

Arrows stays in place when you restart after dying.

3D is cool, but if you can not turn the camera, it is sometimes hard to see where objects are, or what is behind other objects. In an early level, I stupidly died because I did not realized a bomb has no floor under it.

Sorry for this “hard” review, but all these tiny buggy details makes your game quite painful to play, and gave me really little fun.

The totally safe and explosion free heist

https://ldjam.com/events/ludum-dare/49/the-totally-safe-and-explosion-free-heist

  • Overall:1.5
  • Fun:1.0
  • Innovation:2.0
  • Theme:4.0
  • Graphics:2.0
  • Audio:3.5
  • Mood:3.0

Nice game. You added some perspective feeling with the top half of the hero that can traverse walls, but it introduces a bug. The bullets starts inside the wall, and are instantly cancelled. You can not fire when you stand near a wall.

I liked the guards that spawns after you picked up the bionite. It adds a real importance to the fact that you get instakilled when you hold the bionite.

It needs an ending. Spoiler alert : nothing happens when you finish all the levels.

At the last level, there is a heart floating in space. Is it possible to take it, or is it just a decorative troll ?

Uns’Table

https://ldjam.com/events/ludum-dare/49/ld49-uns-table

  • Overall:3.0
  • Fun:2.5
  • Innovation:1.0
  • Theme:4.5
  • Graphics:2.0
  • Audio:4.0
  • Humor:3.5
  • Mood:3.0

I love the word game in the title.

It is sometimes hard to guess from the description which object must be brought to Uns. (I tested all the consumable objects for the « savourly ingredient »). And it’s sometime a bit long to get the object you want.

Does the object you are holding change the fights ? A sword increases the chance of not being hit, an armor absorbs some damage, … That would be cool. Also, we do not know how the level of the character affects the fights.

Aimless Wizard

https://ldjam.com/events/ludum-dare/49/aimless-wizard

  • Overall:3.0
  • Fun:3.5
  • Innovation:2.5
  • Theme:4.0
  • Graphics:3.5
  • Audio:3.5
  • Humor:3.0
  • Mood:1.5

Nice idea and nice “aiming instability”.

However, your game has a little default common to many games : there is no collision between monsters. As you turn around them, they all pack together in the same spot. Having lots of monsters is not much dangerous as having only a few. And when you hit the pack spot, it’s an XP jackpot.

I would have implemented collision handling and lowered the monster generation rate. It would have increased the feeling of being overwhelmed by your enemies. Here, they just feel “immaterial” and not so harmful.

Some clear delimitations of the game area would have been appreciated. It’s a little annoying to plan fleeing to the left and realizing you can’t because you bumped into the invisible border of the world.

And maybe add more randomness to the target movement. They straightly move in the 4 directions or the diagonals. That would be funnier and “more instable” if they moved in any direction, while changing it progressively.

Anyway, I liked this moment of monster genocide and reached level 8 !

Doc. Noggin

https://ldjam.com/events/ludum-dare/49/doc-noggin

  • Overall:4.0
  • Fun:4.5
  • Innovation:2.5
  • Theme:1.5
  • Graphics:3.5
  • Audio:4.0
  • Humor:2.0
  • Mood:3.0

The sprite choices are a little WTF. On one side, the teeth, syringe, pills and microbs suggest a medical world, which is consistent with the game title. (Maybe I am inside a body I have to heal ?)

But on the other side, there are fuel cans, moving fires, levers, blocks, and stars as background. It may be hard, but you should try to find “medical” equivalent to all these unrelated objects.

Level design looks sometimes strange. Some levels seems to be really big, but you only have to explore a little to find the exit. I do not know if it is made on purpose. It may be a good idea, because it suggests that you’re in a world bigger than what you are able to realize, like a body if you are a micro-organism.

It needs a scenario, or at least some explanations. What is this strange grey-ball-character I have to get ? Why is the world “unstable” ? What am I supposed to do here ?

Even with these little drawbacks, I was hooked and could not stop until I won the game.

(Spoiler alert) : I really liked the mechanic of coming back accross all the previous level.

Music and “special effects” are great.

Thank you for this really cool game !

Orbital Cascade

https://ldjam.com/events/ludum-dare/49/orbital-cascade

  • Overall:3.0
  • Fun:4.0
  • Innovation:1.5
  • Theme:3.0
  • Graphics:4.5
  • Audio:4.0
  • Mood:3.5

Great game. A nice tribute to Asteroids, Lunar Lander and all of the kind.

Controls are hard, but that’s totally assumed in this sort of game.

The GUI is quite messy. Writing « status » next to a bar graph does not help. The status of what ?

I took some time to realize the status is the health of the Earth. I suppose it decreases when a satellite escape from the screen and crashes on the Earth, and it regenerates with the time. But I’m not even sure it works like that. It seems to randomly increase and decrease.

Also, if it works like this, what about burning satellites which you can’t destroy ? Do they make the status decrease ? If yes, it’s rather unfair.

The spaceship health bar is shown on several little ship. It looks like you have several « discrete » lives. But in fact it is a continuous health bar splitted in 5 « mini-health bar ». That’s quite uncommon. And the visual difference between an empty mini-health bar and a full one is not strong enough. It’s hard to quickly take account of your whole current health, whereas it’s the most important thing in the GUI !

As some other people did, I played the whole game with the mouse button pressed, so this feature is useless. Do an automatic metal collect, or add the necessity to aim a satellite with your mouse.

I like the initial radio communication, to set a plot and to explain how to play. Just one thing : you choosed silver as the metal collected from satellites, to express it is valuable and to justify the fact that the player is paid for that. But then the player beams all this precious silver to the earth to have it destroyed in the atmosphere. What a spoil ! It would have been more consistent to tell that the player collects scraps, destroys them, and then the human on earth are so happy with it they instantly pay the player.

Apart from these little drawbacks, the graphics are really cool, the sound is good enough and it’s really fun to play. It gives this incentive of « just one last play to see if I can get more upgrades ».

Congrats !

ecosystem except there is no equilibrium and everyone dies probably

kiffitude de type : c’est un jeu où on code + la personne ayant créé le jeu assume totalement que tout a été fait à l’arrache.

https://ldjam.com/events/ludum-dare/49/i-cant-think-of-a-name

  • Overall:3.0
  • Fun:5.0
  • Innovation:3.5
  • Theme:1.5
  • Graphics:1.0
  • Humor:4.5
  • Mood:4.5

I love the concept, and I also love all the clues revealing that you may have realized the game in a sort of urge :

  • the main title
  • the url of the game : « i-cant-think-of-a-name »
  • the ludum description : « …actually that tagline doesn’t really make sense anymore. »
  • the in-game description : « I didn’t have time to write a good tutorial, but I do have examples »

This game is totally experimental and raw, which I love too.

In case you do not know it, you should visit the site codingame.com, where you will find plenty of bot-coding games, to compete against other people. And maybe you should also test the old text-mode video game ZZT, which has its own level editor and its own programming language.

Thank you, and keep up experimenting !

Volatile Defender

kiffitude de type : jeu squaritable + graphisme + « allez juste une dernière partie ».

https://ldjam.com/events/ludum-dare/49/volatile-defender

  • Overall:4.5
  • Fun:4.0
  • Innovation:2.0
  • Theme:4.0
  • Graphics:5.0
  • Audio:4.5
  • Mood:4.5

Simple but original concept.

I did not want to look at the tutorial at first, and did not realize you could look back whith the « space » key. It may be a good idea to tell this action in your game description.

I like the fact that robots destroy bonuses when they walk on it, it adds some strategy, with choices like : « I should keep this bonus on the ground for later, but I take the risk to have it eaten by a robot ».

IMO, the hero is a little too slow to move from one tile to another, and the bonus lasts a little too short. It generates a little frustration because a big part of the bonus advantages are lost, as you fire in the void while moving in front of your next target.

Really great graphisms and music. The best I have seen for this Ludum Dare, so far.

Parcel Panic

kiffitude de type : j’adore le mini-univers du jeu + j’ai totalement trippé dans mon commentaire.

https://ldjam.com/events/ludum-dare/49/parcel-panic

  • Overall:3.5
  • Fun:4.5
  • Innovation:3.5
  • Theme:1.0
  • Graphics:4.0
  • Audio:3.5
  • Humor:1.0
  • Mood:5.0

The difficulty of the game, that many people felt, would not be a problem if it was brought gradually. It may be a good idea to use all the suggestions in previous comments to make the game easier, and removing them as the player progresses.

  • lower global speed (player movement and energy loss).
  • parcels and energy bar stays longer on the ground, then you make them stay shorter.
  • the parcel destination is directly marked on the map and does not go away.
  • then the parcel destination is indicated on the bottom, as it is now, but it does not go away.
  • then the parcel destination goes away.
  • then some parcels may be heavier and slows you down when you carry too much of them (instead of decreasing your energy faster, which you don’t really realize while you play).
  • then, why not making it more difficult than it is now ? Remove the letters on the buildings ! After all, you know this place by heart now.

The possibility to cycle between the parcels you own may also be a good thing. So that you can optimize your deliveries. To keep track, in your own memories, of the parcels destination, they could look different. Like in the reality.

I really liked the small world where you are. The road to the left is here to show this world is inside a greater one, but you know nothing of it. It increases the microcosm effect. While playing, I felt like the local hero of the quarter, the person who everybody knows, and who is useful for everybody.

I really like the fact that you put different building types. A, B, C, I, J and K are clearly house of rich people, with fences to be protected from the others. D, E and F looks like middle-class houses. G and H are big buildings where all the poors pack themselves. Even in a small world like that you can make appear social differences, which is an interesting idea.

The post office may not be a good idea. It suggests that this small world has contacts with the outer world. I would have put a more local building : « the janitor desk » or something like that.

An idea comes to me while I’m writing this comment. You should have different types of parcels, and use them as collectibles in the game. You could have a menu where you see the list of all the collectibles you gained, and read their descriptions.

You could have parcel types that clearly shows that the expeditor and destinator hate each other, and other that shows they love each other, or many other feelings.

Here are some ideas :

  • a letter with a heart drawn on it,
  • a present that looks really expensive,
  • a postcard that you can read,
  • a letter whose address is written like : « old dork Jack »,
  • a parcel with white powder on it,
  • a beer pack,
  • a parcel that smells shit,
  • a dead animal,
  • a bullet,

As you play a game, you could imagine and guess the life of all the people in the microcosm, as you learn which type of things they send to each other. How would you feel, as the local delivery hero, when you end up knowing everything of all you neighbors ?

When a game starts, you could randomly choose some specific situations, that the player would discover progressively : a rich house that sends parcels with white powder to all the middle-class and poor buildings, two middle-class neighbors that sends normal parcels at the beginning and then hate parcels (bullets, dead animals, …), expensive presents sent from a poor buildings to a rich house without any returns, love between a rich and a poor, …

Whoa, I realized I totally tripped on this game. That was cool. Thank you for your game. Do what you want with all these weird ideas.

Voili voilà

Et voici Chun Li en version un peu plus ronde que d’habitude.

Bug et propositions d’améliorations pour l’outil All-Seeing Eye

Coucou. Voici un deuxième article dans le même mois !

Comme promis, j’ai envoyé 20 euros à All-Seeing Eye, pour remercier Joonas Hirvonen d’avoir créé cet outil permettant de modifier le jeu Eye Of The Beholder. Je m’en suis servi pour créer un challenge de Hacking pour la THCON. Tout est expliqué dans ce précédent article.

Ce fameux Joonas Hirvonen m’a remercié par mail et m’a encouragé à transmettre mes signalements de bugs. Je vais lui envoyer un document récapitulant tout ça, j’en profite pour le copier-coller ici. Ça ne vous intéresse peut-être pas, mais moi ça me fait un article à peu de frais. (Quelle blague ! Tous mes articles sont à peu de frais !)

C’est en anglais, vive le rosbif !


These bugs and improvement proposals are sorted from most important to less important.

Technical context :

Do what you want with these bugs, as I am not sure I will have the occasion to re-use ASE.

Modifying scripts provokes graphical bugs

Many wall images are scrambled when the game scripts are modified.

Here are steps to reproduce the bug.

  1. Start a game, create a party, go to the first drainage grate.
  2. Everything looks OK.
  1. Launch ASE.exe and set the folder
  2. Launch EOB1_Explorer.exe
  3. Add an instruction anywhere in the code, for example : F8 "I add a new message here." 00 02 00
  4. Press Ctrl-F9 to compile.
  5. You get a message box telling « Range check error. »
  1. Click the button « update INF ».
  2. Close and restart EOB1_Explorer.exe
  3. Add another instruction anywhere in the code.
  4. Press Ctrl-F9 to compile.
  5. This time you don’t get the error message.
  6. Click once again the button « update INF ».
  7. Start another game, re-create a party, go to the first drainage grate.
  8. This time the image is buggy. I do not know from where it was taken. It looks like a part of an attacking leech.

Other bugs appear on many wall textures. Once it happened, there is no hope to come back to a correct display.

I guess it’s a problem with memory offsets in the game information. It is quite annoying, it cancels all the involvement I would put in the creation of a totally new Eye Of The Beholder game.

Object sub-position cannot be redefined

Information related to objects can be modified in the tab « F4:Items ». But their sub-positions cannot be modified.

As we all know, an object on a square in the map has 5 possible sub-positions : the four corners on the ground, and the alcove carved on a wall.

The function ADD_ITEM shows it. It has 3 parameters : OBJECT_INDEX, POS_X_Y, SUB_POS.

The initial data contained in the .PAK files undoubtedly contains these supositions. When I modify existing object coordinates, they land on different sub-positions, depending on their index.

If the initial sub-position of the object is in an alcove, and if the object coordinates is on a square that has no wall, we have flying objects !

These flying objects can not be taken. Too bad.

I would say the tab « F4:Items » should have a field « sub-position », that allows us to read and write sub-position of each object.

A weird thing in the game engine : there is only one sub-position to define an object in an alcove, not one per wall side.

If you put a square with an alcove wall on each side, and if you put an object sub-positioned in the alcove on this square, then the object is visible from the four sides ! Logically, when you take it, it goes away from the four sides. In my opinion, this weird behaviour should be documented somewhere.

Encounter scripts should be editable, if possible

I do not know if it is possible at all. Some encounters seem to execute the same kind of instructions as the ones in the script :

  • speaking with Armun puts some objects in front of the party and sets a global flag,
  • there are movements automatically done before and after speaking with the dwarven cleric, and the previous global flag is checked to initiate the conversation,
  • speaking with Shindia spawns the monster « Shindia »,

I guess the dialogue texts, reply choices, player characters joining the party, etc. are all stored somewhere in the game files. If we could modify all this, it would be really cool, and we could make a totally-totally new Eye Of The Beholder game.

Some event parameters are not parsed in the script

Here is the code we usually have with stairs and ladders :

IF         TRIGGER_FLAG = 1 (on_enter)
ELSE_GOTO  $0473

[...]

IF         3 = 0
ELSE_GOTO  $044C
TELEPORT   TYPE = $E8 (party), SOURCE = <00,00>, DEST = <18,24>

IF         3 = 1
ELSE_GOTO  $0459
TELEPORT   TYPE = $E8 (party), SOURCE = <00,00>, DEST = <17,23>

IF         3 = 2
ELSE_GOTO  $0466
TELEPORT   TYPE = $E8 (party), SOURCE = <00,00>, DEST = <18,22>

IF         3 = 3
ELSE_GOTO  $0473
TELEPORT   TYPE = $E8 (party), SOURCE = <00,00>, DEST = <19,23>

IF         TRIGGER_FLAG = 4 (on_put_item)
ELSE_GOTO  $04AE

IF         3 = 0
ELSE_GOTO  $0487
TELEPORT   TYPE = $F5 (item), SOURCE = <18,23>, DEST = <18,24>

IF         3 = 1
ELSE_GOTO  $0494
TELEPORT   TYPE = $F5 (item), SOURCE = <18,23>, DEST = <17,23>

IF         3 = 2
ELSE_GOTO  $04A1
TELEPORT   TYPE = $F5 (item), SOURCE = <18,23>, DEST = <18,22>

IF         3 = 3
ELSE_GOTO  $04AE
TELEPORT   TYPE = $F5 (item), SOURCE = <18,23>, DEST = <19,23>

END

The translated script shows comparrison between litteral numbers : « 3 = 0 », « 3 = 3 », … which looks really dumb.

This is of course not what the script does. These values corresponds to the direction from where the party comes, or the direction from where the object was thrown. It is used to reposition the party or the object from where it comes, because nothing is supposed to stay at the same square of a stair or ladder.

Some specific words should be used in the translated script to describe this process. For example, 3 = 0 should be replaced by FROM_DIRECTION = NORTH.

The direction identifiers are the usual ones : 0 = north, 1 = west, 2 = south, 3 = east.

Labels should be shown in the « Events » tab

The « F2:Events » tab shows the translated scripts, but the GOTO instructions have the litteral adresses.

The « F3:Scripts » tab shows GOTO instructions with labels, but the script is displayed with raw bytecode.

The text labels should also be displayed in the « F2:Events » tab, to have all the human-readable script in one tab.

It is quite painful to modify the scripts, I was always switching between the two tabs : write some code, check it is correct, and so on. A really nice feature would be a mode to display the two tabs side by side. The « F2:Events » would automatically updates while we type in the « F3:Scripts » tab. But maybe that’s too much to ask.

Texture atlas needed

I had to try different wall numbers in the map, then play the game to see the corresponding images, then repeat for the next level palette, etc.

Some identifiers are the same in many palettes, for example : with « brick » and « blue », the value 51 corresponds to a wall with writings on it.

Other identifiers exist only in one palette, or are different between palettes, for example : all the stone portal images.

That would really be helpful to have the complete list of wall images, with their identifier, for all the palettes. You don’t even have to integrate it in the existing software. Just toss an external document with the images and their identifiers, that would be perfect.

Command parameters should be documented

The tab « F5:Commands » lists all the existing commands, which is great, but not enough.

The parameters of each command should also be documented. Some commands, such as TELEPORT or ADD_MONSTER, have numerous, varied and complex parameters.

The documentation you linked to https://moddingwiki.shikadi.net/ is interesting, but really hard to read and to understand. I’m not sure it explains all the commands of Eye Of The Beholder.

Program crashes when writing coordinates with one digit

This one is simple to reproduce :

  • Go to « F3:Script » tab, go to the « event trigger points » zone.
  • Modify a coordinate of any event, write it with only one digit. For example, replace « 03 » by « 3 ».
  • Press Ctrl-F9.
  • You get an error message : « Access violation ».

Code size limit should be checked

When the script of a level is too big, it can lead to unexpected behaviours.

The last address value in « F2:Events » should be checked. If it is greater than $1AF0, there are risks to have unexpected behaviours. I’m not sure of the exact limit, it may be a rounded value, like $1B00.

This should be checked by EOB1_Explorer.exe, and a warning message should be displayed when updating/saving the INF file.

The unexpected behaviour seems quite random, and occur when the party arrives in the level having the INF too big.

Sometimes, it’s an immediate crash with a totally unrelated message :

Some other times, it’s a crash with a message « Far heap corrupt! » when you click on the button « CAMP » :

Race and class values are not completely documented

The file EOB1_Explorer_Notes.txt has an uncomplete list of race indexes. Here is the complete one :

  • 00 = Human
  • 01 = Elf
  • 02 = Half-elf
  • 03 = Dwarf
  • 04 = Gnome
  • 05 = Halfling

The Class identifiers are not correct and does not correspond to the HAS_CLASS function.

There are only 4 « base class »,

  • 01 = Fighter
  • 02 = Mage
  • 04 = Cleric
  • 08 = Thief

HAS_CLASS adds all the classes of your characters, by using the boolean « OR », and returns true if there is at least one set bit in common with the parameter given to the function.

Multi-class activates the corresponding bits of all the base classes.

For example, let’s say the party has a Fighter/Mage and 3 clerics (that’s a weird party).

HAS_CLASS(2) will return True. It evaluates to :

  • has_class_param & (classes_chara_01 | classes_chara_02 | ... )
  • 2 & ((fighter | mage) | cleric | cleric | cleric)
  • 2 & (fighter | mage | cleric)
  • 2 & (1 | 2 | 4)
  • 2
  • True

It is not possible to check if there is a ranger in the party. This class only lights the « fighter » bit.

It is also not possible to check if there is a paladin. This class lights the « fighter » and the « cleric » bits.

The way how the function HAS_CLASS works should be documented.

That’s all

Thank you once again for having created these tools. They are wonderful, even with those tiny bugs.

I used EOB_Explorer1 to create a hacking challenge that involves the game and your tools. This challenge was part of the CTF at the Toulouse Hacking Convention 2022. The people who tried it said it was really interesting (a few of them managed to solve it, though). I will submit it to root-me.org in the upcoming months and I will let you know about it, if root-me accepts it.

For the moment, I have not planned to create other challenges or other games with Eye Of The Beholder, so there may have no specific reason to fix these bugs. Anyway, I’m really happy to have « revived » this game in a quite uncommon way. It was an important part of my childhood, I took many years to finish it.

See you next time !


Voilà, c’était tout ce que j’avais à dire. Je l’envoie à mon nouvel ami Joonas ce soir. S’il me répond des trucs intéressants, je vous en ferais part.

Bien entendu, j’ai plusieurs autres idées de challenge « TUR-ROX », avec d’autres jeux. J’essayerais d’en concrétiser une ou deux pour la prochaine THCON.

Cet article est un rapport de bug.

Rapport de bug -> bug -> ladybug -> l’héroïne de dessin animé -> vêtements aux motifs de cette héroïne -> femme ronde !

Enjoy :

Pour le mois prochain, je me permettrais d’être moins blogalement productif. Je vous rassemblerai un package de commentaires de jeux du Ludum Dare, et ça devrait suffire.

D’ailleurs, faut que je vous annonce mon classement. Eh bien on fera tout ça en même temps.

THCON + Ludum Dare, ça a été un beau bazar ces dernières semaines. Peut-être que maintenant je vais avoir du temps pour faire la road-map de Squarity ?

On ne sait pas…

Et paf les stats + Ludum Dare

Il s’est passé un truc le 29 mars sur mon blog. Impossible de dire d’où ça vient, mais il s’est passé un truc. Admirez ci-dessous les statistiques des visites.

D’après les graduations de l’axe horizontal, ça n’a pas l’air de s’être passé le 29. Mais je vous confirme que si. Les graduations ne sont pas en face des histogrammes, c’est mal foutu. Comment peut-on afficher un graphe de manière aussi pourrie ? Bon, osef.

Dans les débuts de ce blog, je faisais attention aux stats. Mon article phare (les Chansons Pipi-Caca de Notre Enfance) ont fait monter les vues quotidiennes à 50, j’en étais très heureux. Puis c’est progressivement retombé à des valeurs plus humbles, autour de 20, et j’ai fini par me désinteresser des stats parce que ça ne redécollait pas. De toutes façons ce ne sont pas les vues qui m’intéressent, mais les commentaires. Cela dit, le nombre de commentaires ne décolle pas non plus.

Et donc, ce 29 mars, 194 vues de 21 personnes uniques. Est-ce que j’ai mes 20 personnes habituelles, qui ne consultent qu’un seul article chacune, plus une 21ème qui a consulté 174 articles ? Ou bien est-ce que chaque personne a consulté 9 articles et un peu moins d’un quart d’article ? Aucune idée. En tout cas il y a eu zéro commentaire.

Si vous étiez là le 29 mars, serait-il possible que vous reveniez pour mettre un tout petit commentaire, expliquant comment vous avez atterri ici ? En particulier si vous avez lu 174 articles. Merci d’avance et gros bisous.

Mangeons des stats.

Ma contribution au Ludum Dare 50

Le thème de cette édition était « Delay the Inevitable »

Mon jeu s’appelle Cat Fragmentator, il utilise Squarity, bien entendu.

C’est l’histoire d’une personne quelconque. Elle télécharge en continu des images de chats et finira inévitablement par remplir son disque dur. Vous êtes le USS-Fragmentor, un processus dans le disque ayant pour tâche de fragmenter les images afin d’optimiser l’espace. Déplacez-vous avec les flèches et utilisez la touche ‘1’ pour tirer votre laser découpeur.

Les images qui tombent vous éliminent, il faut les éviter. Les images déjà tombées ne font que vous bloquer.

Lorsque vous mourez ou lorsque le disque dur est plein (c’est inévitable !), le score s’affiche dans le log. Appuyez sur le bouton ‘2’ pour recommencer une partie.

Si vous avez un compte sur le Ludum, prenez le temps de noter le jeu et de lâcher un p’tit comm’. À moins que vous ne préfériez tester 174 jeux sans rien commenter.

Je ne ferais pas d’article post-creationem, car je n’ai rien de tonitruant à dire. J’ai appliqué la même méthode que les fois d’avant : avoir une idée puis réaliser cette idée, en essayant d’être le moins à l’arrache possible.

Je vous laisse, je suis actuellement dans la période « tester les jeux des autres pour avoir mon propre jeu testé ». Il faut aussi que je termine ce que j’ai à dire au sujet de Eye of the Beholder et All-Seeing Eye. Hey, lecteurtrice, tu réalises que ça te fera deux articles de mon blog le même mois ? Ça faisait longtemps que c’était pas arrivé. Comme quoi, 194 vues en une journée, ça motive.

Il est 3 heures du matin, je relirais ce texte plus tard.

Et sinon, quoi d’autres ?

Il y a quelques temps, je vous présentais un site qui permettait de mater les images d’Instagram sans avoir de compte, parce que c’est relou. Il ne marche plus. Ce n’est pas grave, d’autres ont spawné. Le stagram-crawler du moment, c’est gramhir.com.

Enjoy the image of this beautiful girl, elle s’appelle Renally Gabrielly, et elle est mannequin grande taille.

TUR-ROX-👁 Post-creationem-challengem

Heeey !

J’ai terminé la réalisation de mon challenge de hacking pour la THCON. Je l’ai soumis aux personnes qui organisent l’événement. Je ne sais pas encore s’il sera accepté. Dans tous les cas, je ne peux rien vous révéler avant la fin du Capture The Flag, qui aura lieu entre le 16 et le 17 avril.

Cependant, ça me démange de ne pas pouvoir vous parler de mon œuvre, alors je vais vous révéler son contexte et tout ce qui m’est passé dans la tête durant sa création. Ça ne devrait rien spoiler, je ne décris pas les énigmes en elle-même.

Le contexte

J’en ai déjà parlé un peu à la fin de cet article.

Il s’agit du jeu vidéo Eye Of The Beholder, dont j’ai modifié les plans des niveaux et les événements à l’aide de l’outil All-Seeing Eye et de son éditeur.

Pour résoudre le challenge, il faut jouer à la version modifiée tout en inspectant son contenu avec All-Seeing Eye. Il faut analyser les scripts et en déduire les actions à faire dans le jeu, pour obtenir le code secret permettant de valider le challenge. Je ne vous en dis pas plus.

Ce challenge, ainsi que les deux autres créés pour la précédente THCON, s’inscrivent dans un objectif plus global : l’instauration d’une nouvelle catégorie de challenge de hacking, que j’ai sybillinement baptisé « TUR-ROX ». Ça signifie « TURing-appROXi-complete video games ». C’est même pas un vrai sigle, c’est pas du tout les initiales des mots, mais j’m’en fous total, j’suis un ouf’ rebelle malade.

Principe des challenges de type TUR-ROX

Le principe consiste à trouver un jeu vidéo comportant un système de script intégré, à le modifier dans le but d’y implémenter un algorithme plus ou moins simple, et à faire en sorte que le flag ne puisse être découvert que lorsque cet algorithme est compris.

L’inspection et la modification du jeu peuvent être effectuées par un outil « officiel » (comme l’éditeur de ZZT), ou bien par un outil ne provenant pas des personnes ayant créé le jeu (comme All-Seeing Eye). Le système de script peut être plus ou moins élaboré. Au minimum, il doit pouvoir accéder à certains éléments du jeu. S’il comporte quelques structures algorithmiques de base, (if, while, …), c’est déjà bien.

En général, on fournira cet outil avec le challenge, afin de donner tous les moyens nécessaires à sa résolution. Mais on pourrait faire exception à cette règle.

Beaucoup de jeux actuels sont fortement moddables et scriptables. Les gens qui les développent ont réfléchi deux secondes et se sont dit qu’il serait bon de profiter des expériences du passé. Les scripts s’appuient maintenant sur des langages de programmations standards, multi-usages et documentés. Par exemple : Roblox utilise le Lua, Twine utilise du JavaScript, les gros moteurs de jeux comme Unity autorisent plusieurs langages (python, C#, …).

C’est la meilleure démarche possible, ça facilite les liens entre les personnes qui veulent créer des jeux vidéos et qui ne savent pas (encore) coder, et les personnes qui codent sans créer de jeux.

Mais ce n’est pas avec ça que je peux faire des chouettes challenges TUR-ROX. Du code à rétro-ingénierer dans un langage connu, c’est trop facile. Un foisonnement de documentation, d’outils d’analyse et de debugging sont à portée de clavier. Une solution serait de faire exprès d’écrire du code le plus incompréhensible possible, mais serait alors un challenge de type obfuscation, et non plus un TUR-ROX. Il existe déjà une foule de gens capable de créer des challenges d’obfuscation, et ce mieux que moi.

Un TUR-ROX est un mix entre un jeu vidéo et du code source à décortiquer, le système de script doit donc être spécifique au jeu. En revanche, il peut être obscur et mal documenté, ça fait partie du challenge de le comprendre avec les moyens disponibles. C’est pour ça que je préfère utiliser des jeux anciens ou exotiques. On est obligé de se plonger dans leur histoire, de retrouver comment pensaient les concepteurtrices de jeux à une époque où il y avait moins de standards.

Et cette année, j’ai choisi Eye Of The Beholder. Mais pourquoi donc ?

Attention : Turok ≠ TUR-ROX

Eye Of The Beholder, parce que nostalgie

Ce n’est pas la première fois que j’écris un article sur ce jeu. Il a marqué mon enfance. Je l’ai commencé alors que j’étais en sixième, en explorant un peu au hasard. Une solution a été publiée dans un magazine Tilt, j’ai demandé à mon frère de la photocopier. On a commencé à s’en servir avec mon autre frère, on est allé jusqu’au niveau 7. Ensuite, notre intérêt pour le jeu a diminué. De plus, ce niveau est graphiquement plus inquiétant que les précédents (très sombre, des symboles d’araignés omniprésents), et il commence par un difficile combat contre un groupe d’elfes noirs. J’ai douté de mes capacités à en venir à bout, j’ai laissé tomber.

Moustache ! moustache !

Je me suis fait engueuler par mon frère, qui m’a reproché que les photocopies avaient été faites pour rien puisque je n’étais même pas foutu de les utiliser entièrement.

Quelques années plus tard, j’ai recommencé le jeu seul. J’ai pris le temps d’élaborer une équipe bien équilibrée, couvrant le plus de classes possibles. J’ai tué tous ces tocards d’elfes noirs et je suis arrivé au niveau 10. Il comporte un générateur de Mantis Warrior. J’avais réussi à faire abstraction du générateur d’araignée géante présent au niveau 4, mais celui des Mantis m’a psychologiquement bloqué.

Ce que j’aime dans ce jeu, c’est le sentiment de « nettoyer » les souterrains. On explore partout, on tue tous les monstres qu’on rencontre et on prend tous les objets. À chaque fois qu’on finit un niveau, on peut se dire : « Voilà, il n’y a plus aucun danger. Je pourrais revenir me promener dans ce niveau sans aucune crainte ». Concrètement, on n’a pas besoin d’y revenir, mais j’aimais éprouver cette sécurité et cette impression de rendre le monde meilleur. Or, les générateurs de monstres enlèvent complètement ce sentiment.

Encore une ou deux années plus tard, je me dis que c’est quand même dommage d’être allé aussi loin dans le jeu sans le finir. Je détruis 4 Mantis Warrior à la suite dans le niveau 10. Je parviens à me faire une raison : les prochains seront générés dans longtemps, je peux toujours éprouver un sentiment de nettoyage même provisoire, et si il faut vraiment sécuriser entièrement les souterrains, eh bien les notables de la ville de WaterDeep n’auront qu’à envoyer des magiciens destructeurs de générateurs de monstres !

J’écume les derniers niveaux, je bute Xanathar à la bourrin (je possédais le « Wand of Silvias », mais je n’avais pas compris qu’on pouvait s’en servir pour le faire reculer jusque dans des pics où il se plante stupidement). Mon frère revient à la maison pour des vacances. Je lui annonce que j’ai terminé le jeu. Il est heureux pour moi, mais ne s’excuse pas de m’avoir engueulé des années auparavant. Il ne se souvenait certainement pas de ce passage de sa vie.

Maintenant que j’y pense, ce même frère m’avait soutenu lorsque je suis allé rapporter à la FNAC un jeu qui ne marchait pas. On a pu obtenir un avoir, ce qui n’était pas gagné d’avance, et je crois que je ne l’ai jamais remercié pour ça.

D’autres années plus tard, je commence un tout petit peu Eye Of The Beholder 2, mais je ne prends pas le temps de me lancer vraiment dedans. J’essayerais peut-être de le faire un jour, en live sur Twitch, avec vous.

Pour finir, j’ai négationné mes deux frères et je me sens mieux. Je ne détaille pas plus, je ne veux pas vous embêter avec des histoires idiotes.

Aujourd’hui, j’ai retrouvé la solution, sans faire de photocopies. Merci au site abandonware-magazine !

Eye Of The Beholder, parce que script

Je me souvenais d’énigmes et d’événements tellement étranges que ça laissait supposer la présence d’un système de script relativement générique. Quelques exemples :

  • Vous avancez dans un couloir et automatiquement vous faites un demi-tour, sans être prévenu.
  • Vous posez certains objets à certains endroits, ça déclenche l’apparition d’un monstre et/ou d’autres objets.
  • Vous entrez dans une pièce, vous ramassez une potion, vous sortez, vous re-rentrez par une autre entrée, une deuxième potion est apparue, vous la ramassez, ainsi de suite jusqu’à 4 potions.
  • Des rencontres avec des PNJ déclenchant des dialogues, des ajouts de nouveaux personnages, des attaques, etc.
  • Des téléporteurs, des murs qui disparaissent quand on appuie sur un bouton, des plaques de pression qui déclenchent des ouvertures/fermetures de portes, etc etc.

J’ai cherché un éditeur de niveau et je suis très vite tombé sur « All-Seeing Eye », créé par Joonas Hirvonen (je sais pas qui c’est). Il permet de modifier beaucoup de choses, y compris les scripts.

Au bout de quelques soirées et quelques week-ends, j’avais assez bien appréhendé le « EOB-script » (appelons-le comme ça) et j’avais une idée assez précise des énigmes que je pouvais créer.

J’ai été impressionné. Ça date de 1991 et c’est une machine virtuelle fonctionnant avec du bytecode. Son langage, comme dirait les Inconnus, est « souple et solide à la fois ».

Voici les fonctionnalités de l’EOB-script qui m’ont beaucoup plues.

  • 32 variables booléennes locales à chaque niveau + 32 variables booléennes globales.
  • Opérations booléennes complexes à l’aide de la notation postfixe .
  • Beaucoup de fonctions pour analyser l’état du jeu : présence de monstre à un endroit, type de mur d’une case spécifique, présence d’un type d’objet sur une case, position de l’équipe de personnages, classe et race des personnages, …
  • Et aussi beaucoup de fonctions pour agir sur le jeu : créer/supprimer des objets/murs/monstres, lancer un sort, émettre un son, infliger des dégâts, …
  • Branchement conditionnel (if – goto), mais aussi sous-fonctions grâce aux instructions gosub et return, dont j’ai grandement profité !
  • Gestion d’événements couvrant un large spectre : on peut exécuter un script sur une récupération ou un dépôt d’objet, une arrivée ou une sortie sur une case, un clic dans la zone réactive d’un mur (manette, serrure, rune, …).
  • Cohérence dans la gestion d’événements : une téléportation déclenchera le « on_enter » de la case d’arrivée, un lancer d’objet déclenchera le « on_put_item » de la case sur laquelle l’objet atterrit.
  • Robustesse : sur un seul événement, il est possible de déplacer des dizaines d’objets, modifier des dizaines de murs, exécuter des dizaines d’instructions, écrire des dizaines de messages (même si seuls les trois derniers sont visibles), tout ça sans problème, sans plantage, sans ralentissement.

En revanche, All-Seeing Eye n’est pas toujours à la hauteur de la magnificence de l’EOB-script. En particulier, on ne peut pas changer les dialogues et les événements des rencontres avec les PNJ. Je ne sais pas si c’est dû à un simple manque de motivation ou à une impossibilité technique. Je ne sais pas si ces événements sont écrits en EOB-script ou codés en dur. Je ne sais pas non plus où ils sont stockées, (pas forcément dans les fichiers EOBDATA.PAK).

J’ai beaucoup de remarques et de propositions d’améliorations, ce qui nous amène au chapitre suivant.

Ils sont meugnons !

Review de All-Seeing Eye (Pour plus tard)

Je vais faire un petit don de 20 euros sur le Paypal de Zorbus.net. C’est amplement mérité. S’ils n’avaient pas créé All-Seeing Eye, je n’aurais jamais pu créer ce challenge de hacking dont je suis assez fier.

Comme j’ai bien utilisé et exploré leur outil pendant plusieurs semaines, et que j’ai un peu galéré à cause de certains bugs, j’ai souhaité rassembler mes remarques dans un même document, que je leur transmettrais.

Et comme j’aime bien rentabiliser les textes que j’écris, je mettrais ces remarques aussi dans ce blog. Mais pas tout de suite, ce sera l’objet du prochain-prochain article. Il sera en anglais, mais vous vous débrouillerez bien.

Je vous laisse avec des yeux tatoués sur des seins. Je trouve ça très rigolo.