Unités, encodage et caractères spéciaux

Vous vous souvenez de ce prof de physique, au collège, qui n’avait pas tenu compte de vos réponses à un contrôle parce que vous n’aviez pas indiqué les unités ?

Vous aviez écrit « 63 » au lieu de « 63 grammes », « 2,83 » au lieu de « 2,83 mètres », etc. Ça vous avait valu un 5/20.

C’était un gros con ce prof.

Sauf qu’il avait raison.

C’était effectivement un gros con, concernant un tas d’aspects de sa personnalité. Mais pour cette histoire d’unité il avait raison.

En informatique, on a un problème équivalent avec les encodages et les caractères spéciaux.

C’est des centimètres ou des inches ?

L’encodage

Vous connaissez peut-être déjà. Il s’agit de la correspondance entre un caractère et la suite de nombre utilisée pour le représenter. Les ordinateurs ne savent rien faire d’autres que gérer des valeurs numériques. Une image, une application, des clics de souris, une connexion internet, les barrettes de RAM, tout ça c’est que des nombres. Il peut y en avoir énormément, et on ne fait pas toujours la même chose avec. Mais c’est des nombres.

Voici quelques exemples.

  • Le caractère é (e accent aigu) :
    • est représenté par la suite de nombres (195, 169) dans l’encodage ‘UTF-8’,
    • est représenté par le nombre unique 233 en ‘Latin-1’,
    • ne peut pas être représenté en ‘ASCII’,
  • la lettre A majuscule:
    • est représentée par le nombre unique 65, en UTF-8, Latin-1 et ASCII
    • est représentée par le nombre unique 193 en ‘EBCDIC’ (un encodage bizarre utilisé par IBM).

En détail, c’est un peu plus compliqué que ça, car l’encodage et le jeu de caractères sont deux notions différentes, je n’ai pas parlé du Byte Order Mark, et il existe plusieurs sortes d’EBCDIC (https:// en.wikipedia.org/wiki/EBCDIC). Mais on ne va pas se prendre la tête avec ça.

Donc une chaîne de caractères toute seule, ça ne veut rien dire et si vous ne connaissez pas son encodage, vous ne pouvez pas la manipuler avec certitude.

C’est ça qui fait que les accents sont parfois tout pourris dans une page web ou un fichier Excel. Le texte est dans un certain encodage, l’application qui le manipule croit que c’en est un autre, et paf pastèque.

Vous pouvez décider que « fuck les accents », et obligez vos utilisateurs à n’utiliser que les caractères ASCII. Mais il faut avoir conscience que cela implique « fuck tous les alphabets non latins » : « fuck les russes, les chinois, les arabes, les hébreux, les mathématiciens et les gens qui écrivent avec des smileys ».

À tout cela s’ajoute une autre couche de confusion possible.

Les caractères spéciaux

Alors voilà. Vous avez créé un site web ou une application dans laquelle l’utilisateur peut saisir du texte (par exemple pour ajouter un commentaire, décrire son chien, etc). Vous maîtrisez parfaitement ce que vous avez développé, et connaissez donc l’encodage dans lequel la chaîne de caractère a été saisie. Super ! Tout est OK ? On peut arrêter de se poser des questions ?

Que diantre nenni !

Il faudra peut-être appliquer une transformation pour protéger ou interpréter certains caractères spéciaux.

Vous voulez enregistrer cette chaîne dans une base de données ? Attention aux injections SQL, vous devez protéger les simple-quotes en les remplaçant par deux simple-quotes à la suite. (Les requêtes paramétrées permettent de le faire automatiquement).

Vous voulez la réafficher dans une page HTML ? Attention aux failles XSS et aux balises HTML. Vous devez protéger les caractères ‘<‘ et ‘>’ en les remplaçant par les HTML entities. Et comme les HTML entities s’écrivent avec le caractère ‘&’, il faut lui aussi le remplacer par son HTML entity.

C’est une URL ? Pensez à la convertir en ‘url-encoding’ : remplacer les espaces par des %20, etc.

C’est une ligne de commande ? Il va peut-être falloir protéger les antislashes en les doublant. Ou pas. Ça dépend de ce que vous avez décidé, mais il sera de bon ton de prévenir l’utilisateur des opérations appliquées.

C’est un chemin vers un fichier ? Très bien, vous n’aurez peut-être pas de conversion à faire. Mais si vous utilisez ce chemin dans une ligne de commande, n’oubliez pas de l’entourer par des guillemets, au cas où il comporterait des espaces. Vous connaissez, bien sûr, l’encodage de votre système de fichiers ?

Autres choses

Cette histoire d’unités et de vilains profs de physique est transposable à d’autres types de données : les dates.

Je ne parle même pas du format de représentation. « 02/03/14 23:45:56 », vous savez déjà que ça ne veut rien dire. Le ’02’ c’est le jour où c’est le mois ? (Au passage, merci les anglais de faire, une fois de plus, à l’envers de tout le monde). Le ’14’, c’est 1914 ou 2014 ?

Évitons ces pièges stupides, et indiquons les dates au format ISO 8601 : 2014-03-02 23:45:56. Voilà, et maintenant, plus d’ambigüité !

Perdu ! Elle est bien votre date, mais c’est quel fuseau horaire ? C’est l’heure d’été ou l’heure d’hiver ? Au fait, vous saviez que les américains effectuaient le changement d’heure, mais pas exactement au même moment dans l’année par rapport à nous ? Et les leaps seconds, on les prend en compte ou pas ?

La solution à cette histoire de date est de tout gérer avec des timestamps, et de convertir vers/à partir d’autres formats uniquement lors des entrées-sorties de ces dates dans votre programme. Le timestamp définit un nombre de secondes depuis 1970-01-01 00:00 UTC.

À partir de ce nombre de secondes, on peut retrouver toute la date. De plus, les opérations de calcul avec les intervalles sont grandement simplifiées. Par contre, ça met en incubation des bugs encore plus rigolos que celui de l’an 2000 (https:// fr.wikipedia.org/wiki/Bug_de_l’an_2038).

Quel bazar ces données ! Au moins, avec les nombres on n’est pas embêtés. Quoi que… Si vous faites de la programmation bas niveau (ce qui signifie « proche de la machine », et non pas « programmation pour les gros teubés »), un monde de normes et de notations peut vous jaillir à la figure. Comment vous représentez les nombres à virgules ? flottantes ou virtuels ? IEEE 754 ou autre chose ? Vos entiers, vous les voulez signés ou non signés ? Avec du complément à deux ou autrement ?

Même pour la donnée la plus simple possible : des nombres entiers positifs, vous devrez peut-être vous poser des questions : big-endian ou little-endian ? Des bits de contrôle ? de parité ?

Il y a encore un tas d’autres choses où le lien entre la donnée et la méta-donnée est indispensable. Vous avez récupéré un fichier, super, mais c’est pour en faire quoi ? C’est une image ? Un texte ? Autre chose ? Et sous quel format ? Et si vous tombez sur une vieille cassette vidéo, c’est du PAL ou du Secam ?

Tout ça pour dire qu’il faut faire attention aux données qu’on manipule, depuis la plus simple variable string jusqu’aux tera-octets de base de données. Il y a plein de programmeurs qui n’en ont pas toujours conscience, ça met le bazar, et je voulais vous sensibiliser sur ce sujet, tel le gros con de prof de physique que je ne suis pas.

Ce sera tout pour aujourd’hui

J’essaie de faire un article de blog par mois, et là ça a été un peu juste. Comme d’hab’, c’est la faute au monde réel, mais aussi à Dead Cells, le nouveau jeu de la Motion Twin. J’aime beaucoup, il y a énormément d’idées intéressantes, et une ambiance mignonne-glauque assez bien travaillée.

Du coup je vous laisse, je vais essayer de dégommer des Slashers au corps à corps.

Vive la liberté d’expressionotron

Voilà déjà quelques temps que mon twitter bot expressionotron a dépassé le nombre hallucinogénatoirement élevé de 30 followers. On en est même à 36.

Comme promis dans cet article, j’ai libéré le code source de cette incommensurable œuvre.

C’est sur mon compte github : tout bien documenté, avec la config de mise en production, la doc de conception, etc. J’aime la doc.

bande dessinée de Gaston Lagaffe documentation

Au départ, j’avais prévu de ne libérer que le code source, sans les listes de morceaux de phrases utilisés pour créer les expressions. Sauf que je me suis vautré et j’ai tout balancé d’un coup dans github. J’aurais pu supprimer les listes après coup, mais ça aurait toujours été possible de les retrouver en fouillant les logs. J’aurais également pu effacer tout le repository et repartir de zéro, mais j’avais la flemme.

De plus, je n’avais pas envie de maintenir une version publique sans les morceaux de phrases et une version privée avec. Donc, ça suffit les bêtises, on libère tout, c’est beaucoup plus simple. Ça n’en est que mieux pour vous. (À condition d’admettre le postulat initial que ça vous intéresse).

Pour la suite

L’expressionotron continue sa quête de célébrité. La prochaine étape sera d’accorder les adjectifs avec les noms. En effet, actuellement, tous les adjectifs sont au masculin, alors qu’il y a quelques noms féminins. Ce qui peut provoquer quelques incohérences grammaticales, tel que :

Ça corrode de la prostate néo-myxomateux au point godwin !! CXI !!1!

Pour diminuer le risque de faute, j’ai intégré assez peu de noms féminins. Il serait maintenant louable de corriger ce problème et d’implémenter l’accord nom-adjectif, afin de pouvoir se permettre d’ajouter des noms de tous genres.

Pour 40 followers, je me lance dans cette tâche.

Suis-je un vilain ?

D’aucuns et d’aucunes diront que mon expressionotron est sexiste, puisque je l’ai créé par défaut au masculin, et que ce n’est que bien plus tard que je songe à féminiser ses composants. Ouais c’est possible.

Je vais me permettre de poser la question : le masculin et le féminin, est-ce que c’est pareil que l’homme et la femme ?

Il existe des langages (l’anglais par exemple), dans lesquels le masculin et le féminin a moins d’importance : chaque nom d’objet est neutre (« it ») et les adjectifs sont invariables. Quelles sont les différentes manières, à travers le monde et les âges, de prendre en charge le féminin et le masculin dans une langue ? A-t-on absolument besoin d’y intégrer cette notion ? Comment est-ce pris en compte dans le langage des signes ? Est-ce qu’on se touche les seins ou les testicules à chaque fois qu’on veut accorder un adjectif ?

Je sais pas. Il faudrait peut-être chercher les réponses auprès des langages épicènes, dont nous parlerons peut-être dans un autre article.

De toutes façons, ce blog lui-même est sexiste, vu le type de photo incorporé à chaque article.

tumblr_o6utq94hzd1uaiz32o1_1280

Mais c’est comme ça. C’est vraiment ces images là que j’ai envie de vous montrer, que vous soyez une femme, un homme, ou entre les deux, ou totalement autre. J’espère que ça vous plaît.

Sublime Text : détection des indentations tab/space

Alors voilà, vous vous êtes mis à Sublime Text 2 (http:// www. sublimetext.com/2), parce que c’est un éditeur de texte topissimissime.

Vous prévoyez de vous en servir pour un ensemble de projets et de fichiers de code existants, ayant des conventions différentes concernant les indentations en tabulations/espace. Pour diverses raisons, (justifiées ou non), vous n’avez pas envie de tout homogénéiser à grands coups de replace, alors vous avez gardé cette configuration :

"translate_tabs_to_spaces": false,

 

Le problème

Vous vous attelez à un projet indenté avec des espaces, vous y créez un nouveau fichier de code (mettons que ce soit du python). Dès la première définition de fonction, vous tapez manuellement les 4 espaces d’indentation, afin de bien indiquer à Sublime Text que c’est ça que vous voulez. Lorsque vous passez à la ligne suivante, c’est bien des espaces qui sont automatiquement ajoutés.

Ensuite, c’est la merde.

Pour reculer d’une indentation, vous êtes obligé d’appuyer 4 fois sur backspace. Et chaque fois que vous écrivez un if, un while ou autre, le niveau d’indentation automatiquement ajouté est écrit avec une tabulation.

Vous vous retrouvez donc avec de la cagassade comme ça :

screenshot_space_tab_02,

ce qui ne manque pas de faire hurler l’interpréteur python.

Vous êtes constamment obligé de remettre manuellement des espaces. Vous ne comprenez pas pourquoi cet abruti de Sublime Text ne comprend pas la convention de ce fichier en particulier, alors que celui-ci contient déjà trouzemille lignes de code indentées bien comme il faut.

 

L’interrogation existentielle

La configuration de Sublime Text est définie dans différents fichiers, qui se recouvrent les uns à la suite des autres (config globale, config d’un package, d’un projet, …). Ce n’est pas toujours évident de déduire les valeurs utilisées au final. Heureusement, il est possible de les vérifier.

Vous ouvrez la console, via l’option du Menu principal « View -> Show Console », puis vous tapez fébrilement les commandes suivantes :

view.settings().get("translate_tabs_to_spaces")
False
view.settings().get("tab_size")
4
view.settings().get("detect_indentation")
True
view.settings().get("auto_indent")
True
view.settings().get("smart_indent")
True

sublime_text_console

Tout semble normal.

Alors, vous décidez que Sublime Text n’est pas si génial que ce qu’on en dit, et vous reprenez ce bon vieux Notepad (pas Notepad++, Notepad tout court). C’est de la chiottasse, mais au moins, c’est de la chiottasse maîtrisée.

Notepad à l'apogée de son utilisation

Notepad à l’apogée de son utilisation

 

La solution

Sublime Text est capable de simplifier les ajouts et retraits d’indentation, qu’ils soient en tab ou en espace. Mais pour y parvenir, il doit préalablement déduire la convention du fichier à partir de son contenu actuel. Cette déduction n’est déclenchée qu’à l’ouverture. Comme il s’agit d’un fichier que vous aviez créé, rien n’a été déduit puisqu’il était vide au départ.

Il suffit de fermer puis réouvrir le fichier, et tout va mieux. (Pas la peine de redémarrer Sublime Text, juste l’onglet du fichier concerné). Il existe par ailleurs une commande pour relancer la déduction, mais je ne sais plus où elle est, et osef.

Il faut un nombre suffisant de lignes indentées (une dizaine) pour que cette déduction soit garantie. Naturellement, il faut qu’elles soient toutes homogènes, et si c’est des espaces, il en faut le même nombre à chaque fois.

 

La sodomie drosophilienne

(Ça veut dire « enculage de mouche »)

La déduction d’indentation est également déclenchée lorsqu’on copie-colle une quantité conséquente de texte dans un fichier vide. On va jouer un peu avec ça.

Créer un nouveau fichier (File -> New File, ou raccourci Ctrl+N). Copier-collez le texte suivant dedans :

def truc():
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0

(Il y a 10 lignes indentées, chacune avec 4 espaces).

Placez votre curseur juste après le « 0 » de la dernière ligne.

Appuyez sur « Entrée ». Une ligne indentée s’ajoute. Elle comporte 4 espaces.

Appuyez sur Backspace.

Les 4 espaces sont retirés en une seule fois et le curseur revient au début de la ligne. Sublime Text a compris que l’indentation de ce fichier est sous forme de 4 espaces. Il n’est même pas nécessaire de préciser que la syntaxe est du python. (D’ailleurs c’en est pas vraiment, car écrire des lignes ne comportant qu’un chiffre n’a que peu de sens).

copypast_ok

Recréez ensuite un nouveau fichier. Ne repartez pas du fichier précédent, car Sublime Text lui a déjà attribué une convention.

Copier-collez le même texte mais sans la dernière ligne.

Placez votre curseur juste après le « 9 ».

Appuyez sur « Entrée ». Une ligne indentée s’ajoute. Elle comporte 4 espaces.

Appuyez sur Backspace.

Seul un espace est retiré. Sublime Text n’a pas compris que l’indentation de ce fichier est sous forme d’espaces. Il garde le comportement par défaut, qui est une indentation indéterminée.

copypast_fail

Pour info, j’utilise Sublime Text version 2.0.2, Build 2221.

Toute cette drosophilophilie pour dire qu’avec la dernière génération d’éditeurs de texte (Sublime, Atom, …), on n’a plus vraiment besoin de se soucier du choix tabulations/espaces. J’ai récemment créé un nouveau projet python + django, j’ai passé 3 jours dessus avant de m’apercevoir que certains fichiers étaient indentés avec des espaces et d’autres avec des tabulations !

Ça ne dérange ni python, ni Sublime Text, ni la personne qui code d’avoir des fichiers mixés. Cependant, il est toujours nécessaire d’appliquer la même convention au sein d’un même fichier, et il vaut mieux comprendre avec précision le comportement et l’intelligence de ces nouveaux éditeurs de texte.

Malgré ces petites gênes qui subsistent, il semble donc que la rivalité millénaire entre les tabulistes et les espaciens s’estompe progressivement, ce qui est à mon avis une bonne chose.

Strips-Indentation-600-final

 

Le réconfort

Maintenant que vous connaissez cette subtilité, à vos claviers, mesdames les codeuses et messieurs les codeurs !

moretomeasure_by_fatty_lover-d5stsk4

De la 3D avec pyglet

Salut à vous, chers amis multi-dimensionnels !!

En ce moment, j’entrepose et je documente sur mon compte github tous mes trucs de code. J’ai commencé par les plus récents, et je remonte progressivement dans le temps et dans mes joyeux souvenirs.

Mais c’est un peu fastidieux, et pas très valorisant car je ne fabrique rien de nouveau. Je me suis donc offert des petites vacances créatives au milieu de ce travail d’archivage, ce qui a résulté en une démo 3D, faite avec python + openGL + pyglet.

screenshot_cube

screenshot_icosahedron

Et devinez quoi ? Je l’ai entreposée et documentée sur mon compte github !
https://github.com/darkrecher/Geode-Sweeper

Certes, y’a pas grand chose. On peut tourner autour d’un objet (un cube arc-en-ciel ou un dodécaèdre, au choix), et c’est tout. De plus, je n’ai pas fait d’exécutable. Pour tester, vous devrez installer le bataclan nécessaire.

Je vais me garder ce machin sous le coude dans le futur but de concrétiser une idée de jeu absolument géniale : un démineur sur une géode. D’où le nom du repository : Geode-Sweeper.

Je ne vous en dis pas plus, mais pour vous faire patienter, voici des nichons géodésiques.

lara13

Avant, je ne voulais jamais parler publiquement de mes créations tant qu’elles n’étaient pas finies. Mais je me suis rendu compte que c’était un peu idiot, d’autant plus que quand je parle, c’est principalement dans le vide. J’ai donc décidé de décrire mes créations dès le début de leur création (ha ha ha). Le souci, c’est que Geode-Sweeper, je l’ai non seulement pas fini, mais carrément même pas commencé.

Donc je ne peux pas vous en dire plus. Pour vous faire repatienter, voici des fesses en polygone.

The-10-Most-Ridiculous-Victoria-Secret-Fashion-Show-Costumes

Ce blog vous a habitué à un bien meilleur patrimoine concernant les images érotiques. Pour me rattraper et vous faire rerepatienter, voici une jolie codeuse python.

python_girl_boobs

Sans transition :

Jacques Chancelle et tombe

Comme vous le savez, Jacques Chancelle est mort.

Je ne sais pas exactement qui est ce mec, et je dois avouer qu’il ne m’intéresse pas plus que ça. Mais ça m’a rappelé un souvenir rigolo.

Il y a environ 25 ans de ça, je me distrayais avec un jeu vidéo nommé « Tera », catalogué, déjà à cette époque, dans la catégorie « vieux et un peu pourri ».

screenshot du jeu vidéo Tera, de Loriciel

Lorsqu’un des personnage mourait, un texte indiquait en bas de l’écran : « Machin chancelle et tombe… ». Je-sais-plus-qui avait alors dit « haha, Jacques Chancelle, lol ! ». (Enfin à l’époque on disait pas encore « lol », mais l’idée est là, m’voyez).

Du coup, j’avais créé un personnage du nom de « Jacques », et on s’était trop lolé quand il a mouru, car le jeu a dit : « Jacques chancelle et tombe ». Hahaharg !!

Ici et maintenant, devant vous, je jure que lorsque le Revenu de Base Inconditionnel sera mis en place en France, je rejouerai à ce jeu, j’en décortiquerai les mécanismes, et publierai la solution dans un article de blog. Et alors, on retiendra de Jacques Chancelle sa contribution sérendipitesque à ce superbe jeu qu’est Tera.

Ouais et Bonne Année sinon.

Victoriabilité augmentée : la pêche aux mouleu-mouleu-mouleu.

Vous vous souvenez de ce concept que j’ai inventé il y a quelques temps déjà ?

Eh bien je l’ai réitéré. (Il était dans une boucle « for », quelque part).

C’est à nouveau pour le jeu flash débile « Anti-Idle » (http:// www. kongregate.com/games/Tukkun/anti-idle-the-game).

Celui-ci contient un mini-jeu, qui consiste à pêcher des triangles. Il se présente comme ça :

Anti-Idle Fishing screenshot

triangle = symbole du vagin = moule. donc pêche aux triangles = pêche aux moules.

Le triangle orange, en bas à droite, se déplace latéralement. Lorsqu’il arrive pil poil au niveau du trait rouge vertical, il faut appuyer sur une touche, ce qui permet de faire un « perfect catch ». Puis, un autre triangle passe, et ainsi de suite.

L’un des achievements du jeu consiste à effectuer 20 perfect catch à la suite. J’ai essayé de le faire à la main, avec mes petits réflexes d’hominoïdes, ça m’a très vite lourdé.

Pavlov aurait certainement réglé le problème avec des cacahuètes, des décharges électriques et un sifflet. En ce qui me concerne, je l’ai réglé avec un petit script python, qui effectue des copies d’écran et envoie des appuis de touches vers le jeu aux bons moments.

Vous le trouverez, sur mon compte github, avec la documentation nécessaire.

poisson pané en forme de triangle

Une pêche miraculeuse.

J’ai un peu honte de gâcher du temps de ma vie à programmer des trucs aussi inutiles, pour un jeu aussi débile. Je vais donc invoquer ma clause de déculpabilisation récursive : « ce n’est pas grave d’avoir honte de quelque chose, à condition de ne pas avoir honte d’avoir honte ».

Et sinon, je travaille actuellement sur Kawax. Je ne finirais probablement jamais ce jeu, mais je vais au moins en faire une version présentable. Vous pouvez voir l’évolution du chantier sur mon sus-mentionné compte github.

Sur ce, je vous laisse, je dois gagner l’achievement des 2000 perfect catch (heureusement que pour celui-là, il ne faut pas les faire tous à la suite).

Lailani fat girl fishing

Bonne pêche aux ce-que-vous-voulez !

La victoriabilité augmentée !!

Royal Salute à vous, petits technophiles.

Vous avez certainement entendu parler de la réalité augmentée.

Edutainment : la réalité augmentée est créée par un procédé de distortion du champ karmagraphique, qui transforme les vessies en lanternes, les miroirs en alouettes, les cliques et les claques en clic-clacs, les plombs en plomb et les mâles en pis de vache. La réalité augmentée ajoute une troisième dimension à notre monde réel 2D. Elle est compressible et interopérable : un simple mail suffit pour en transmettre plusieurs mètres cubes à vos amis. Elle permet également à toutes les personnes compatibles d’augmenter leur salaire et leur taux d’alcool.

Appareil permettant de diminuer le résultat de la soustraction entre monde réel et réalité augmentée, afin d'interfacer les deux au sein d'une abstraction commune.

Appareils servant à diminuer le résultat de la soustraction entre monde réel et réalité augmentée, afin d’interfacer les deux au sein d’une abstraction commune.

Photo prise dans la réalité augmentée, mettant en évidence les illusions d'optiques inhérentes au monde réel.

Photo prise dans la réalité augmentée, mettant en évidence les illusions d’optiques inhérentes au monde réel, qui nous font croire que les japonaises ont des petits seins.

Eh bien moi, j’ai inventé un concept de la même veine : la victoriabilité augmentée. Pas aussi cool que la réalité augmentée, mais presque. Disons que ça déprécate du chaton lvl 99 Gangnam Style.

La virtualité augmentée

« Virtualité augmentée » est une expression existante, plus ou moins déjà définie. Je ne le savais pas et j’avais voulu l’utiliser pour nommer le concept que j’ai inventé. Je ne peux plus le faire. Ça m’emmerde, parce que j’avais écrit une belle introduction avec. Donc ce que je vais vous demander, juste le temps de quelques paragraphes, c’est de faire comme si « virtualité augmentée » ne préexistait pas, et désignait mon invention à moi.

OK ? Merci, vous êtes super gentils.

On est d’accord que ce qui s’affiche sur l’écran d’un ordinateur est virtuel.

Mais cette virtualité n’est pas toujours claire, ni simple d’utilisation, ni agréable.

Prenons un exemple complètement au hasard. Vous jouez à un jeu vidéo de calcul mental, dans lequel vous devez répondre le plus rapidement possible à des questions existentielles telles que « 123/3 est-il plus grand, plus petit ou égal à 30+5 ? ».

Il s’agit d’une situation virtualitaire totalement pas pratique, pour des raisons que nous devinons tous très bien : il faut lire les questions, y réfléchir, trouver le résultat, … Si on se trompe, on perd du temps, le score n’est pas aussi haut que ce qu’il pourrait être. Bref, ce n’est pas très rentable.

Dans une virtualité idéale, le jeu se déroulerait sans qu’aucune intervention humaine ne soit nécessaire. Dès qu’une question de calcul mental serait posée, la réponse serait automatiquement trouvée et sélectionnée. Puis le jeu poserait une nouvelle question, et ainsi de suite. L’ensemble serait beau, agréable et optimal pour le score.

La virtualité idéale n’est pas évidente à atteindre. Mais on peut déjà imaginer et créer des logiciels qui s’en approchent.

La victoriabilité augmentée

La reine Victoria, inventeuse du Steam Punk, mais qui n'a pas inventé l'expression "victoriabilité". Heureusement sinon j'aurais vraiment été dans la merde.

La reine Victoria, inventeuse du Steam Punk. Elle n’a pas inventé le mot « victoriabilité », et heureusement sinon j’aurais vraiment été dans la merde.

Revenons à la euh… réalité. (Merde, putain de mot, on l’utilise partout ça fait tout confondre. Ah vous êtes encore là ? Oups…  Euh… Faites pas attention. On enchaîne).

Puisque manifestement, dans cette fameuse réalité commune à tout le monde, on me pique mes expressions avant même que j’ai le temps de m’en servir, je déclare officiellement que « victoriabilité augmentée » désigne le concept d’un logiciel externe apportant une assistance temps réel à un jeu vidéo trop difficile ou trop chiant.

Anti-Idle Math Solver

Tout ça pour dire que j’ai codé un script en python, pour le sous-jeu Math Master, du stupide jeu flash Anti-Idle (http:// www. kongregate.com/games/Tukkun/anti-idle-the-game).

Ce script effectue des captures d’écran, en déduit la question de calcul mental affichée, et renvoie la réponse dans une console. Le seul point qui manque, c’est le clic automatique sur la réponse. Mais c’est déjà pas mal non ?

Ça ressemble à ça.

Ça ressemble à ça.

J’ai tout mis sur mon compte github (https:// github.com/darkrecher/Anti-Idle-Math-Solver).

Edit 2013-12-14: Ça ne fonctionne plus depuis la version 1,652 de Anti-Idle. Ce serait assez simple à corriger, il suffit de mettre à jour les définitions de couleurs. Si vous voulez que je le fasse, envoyez un message ou un signalement de bug. En attendant, j’ai la flemme de le faire.

Je ne m’étends pas plus que ça sur le script en lui-même. Le repository contient une très belle doc de présentation pour les utilisateurs, ainsi qu’une très belle autre doc de conception pour les développeurs qui voudraient hypothétiquement reprendre le code.

Je suis content, c’est mon premier projet sur github un tant soit peu conséquent. Grâce à lui, j’ai augmenté mon niveau en geekeries. Maintenant je peux ajouter les compétences suivantes à ma fiche de personnage :

  • Écrire du python sans trop violenter le PEP8.
  • Githuber de manière à peu près correcte. Sauf que j’ai parfois des commits bizarres, avec des différentiels de fichiers mal fichus. Je vais tenter d’éclaircir la question.
  • Edit 2013-12-03 : je sais d’où viennent ces commits bizarres. Un simple cafouillage dans les sauts de ligne (CR / LF / CR&LF). Oubliez cela, c’est réglé.
  • Faire de la doc de « macro-description ». Quand j’ai créé Blarg, je me suis targué d’avoir tout bien documenté. Sauf que la doc tant vantée n’était constituée que de commentaires de code. Ce n’est pas très pratique pour quelqu’un qui ne connait pas du tout le projet et qui veut le découvrir, car il ne sait pas par où commencer.
PEP8, la boisson qui vous fait bien coder en python.

PEP8, la boisson qui vous fait bien coder en python.

J’ai encore pleins d’anciens et futurs projets à mettre sur github. Mais c’est pas pour complètement tout de suite. Là j’ai prévu d’augmenter la monétisation de mon blog (c’est de la monetariabilité augmentée). Je vais ajouter mon intermédiaire publicitaire préféré à vraiment tous les liens, et en profiter pour ressuciter les morts (les liens morts). Y’a du boulot. Et faut aussi que je fasse cette fameuse page regroupant toutes les conneries que j’ai faites depuis le début de ma vivirtuelle.

Petites blablateries rapides en vrac

J’ai éjaculé un nouvel article chez mes amis virtuels Sam & Max. J’y décris des méthodes d’union d’un ensemble d’intervalles (http:// sametmax.com/union-dun-ensemble-dintervalles/).

Le jeu Galaxy 55 est temporairement mort. Ça me chagrine beaucoup, parce que je l’aimais énormément, et j’y avais « investi » du temps. J’avais écrit des articles de blog et de magazine 42 à son sujet, créé un script de récupération des prix du marché des kubes (encore une augmentation de la victoriabilité), trouvé une méthode de quadrillage optimal pour extraire le minerai, et construit un super espace de stockage sur ma planète principale. J’espère que tout ceci reviendra un jour. Sinon, il faudra se coder son propre minecraft-like, avec des robots cette fois-ci.

Si vous voulez écouter de la bonne dub qui rotototototom du ganja farmer à la platine de platine, je vous conseille le site OnDubGround Productions (http:// odgprod.com/). C’est ma musique de chevet. J’aime particulièrement Panda Dub et Mahom.

C’est presque l’été, on va pouvoir se lashay. Voici donc une photo de Summer Lashay.

summer-lashay-01

Royal à bientôt à tous !

Ça destructure du schtroumpf clignotant à coups d’extincteur !!

Alors ces fêtes, bien ou bien ? Si vous avez chopé la gastro ces deux dernières semaines, sachez que c’est de moi qu’elle est partie. Ouais, je suis le patient zéro. Me remerciez pas, c’est naturel. (J’espère que je ne vous apprends rien lorsque j’annonce qu’une gastro, c’est naturel).

schtroumpf_pompier

Schtroumpf destructuré à coup d’extincteur.

Je me dois de vous expliquer l’origine du titre croquignolet de cet article. Pour cela, il faut remonter à un peu plus avant dans le temps.

Un peu plus avant

Je suis (du verbe suivre) avec une assiduité certaine le blog geeko-pythono-sexo-philosophile « Sam & Max ». Dans un de leur récent article, ils listent des services, gratuits et payants, permettant d’héberger des applications web (http:// sametmax.com/quel-hebergement-web-pour-les-projets-python/).

Je cherchais ce genre d’infos, car j’ai quelques petites idées de bidouilleries à offrir à l’internet. Malheureusement, je n’ai aucune expérience dans ce domaine. Figurez-vous que, malgré tous les trucs informatiques étranges que j’ai fait jusqu’à maintenant, je n’ai jamais eu besoin de créer/tuner/jackiser intégralement un site. Les services préconçus existants m’ont toujours convenu : ce blog, le magazine 42, SourceForge, InLibroVeritas, Ulule, IndieDb, etc.

Il y a longtemps de cela, je m’étais fait un site perso (avec un fond vert), hébergé par Alice/Tiscali. C’était du HTML statique, et je n’avais pas profité de toutes les folles possibilités de customisation offertes, alors que y’avait moyen d’y mettre du javascript, et peut-être même du php. Je n’ai pas honte de ce site perso, il brahmapoutrait du pingouin Linux freudien à la kqlqsh. C’était simplement une autre époque.

Or donc, pour tester et découvrir ces services d’hébergement, j’ai créé un expressionotron, c’est à dire un générateur de phrases d’exclamations époustouflantes. Et c’est ce que j’ai utilisé pour obtenir le titre de cet article.

J’ai codé la chose en python, avec la librairie Flask, et je l’ai encastré chez PythonAnywhere. Allez-y voir, et n’hésitez pas à marteler à outrance la touche F5, afin d’avoir une foule de formules cosmopolites à ressortir « en société » : http://recher.pythonanywhere.com/expressionotron

Des pythons (flasques) dans des flasques

Des pythons (flasques) dans des flasques.

Un peu après, mais quand même toujours avant

Fier de mes exploits, je poste un commentaire chez Sam & Max, annonçant la toute nouvelle existence de mon œuvre. Le concept est accueilli à bras ouvert, et Sam (le chien) me suggère de créer un twitter bot émettant une phrase à la con par jour.

Je connais encore moins les twitter bot que les bidouilleries web, mais puisque je suis en phase « découverte de nouvelles teshnologies », je me lance dans cette entreprise.

Comme on pouvait s’y attendre avec le fabuleux langage python : il y a une librairie pour ça. Elle se nomme, et c’est fort à-propos : twitter (http:// code.google.com/p/python-twitter/).

Cerise sur la choucroute, les gentils lutins de chez PythonAnywhere l’ont pré-installée. Quelques recherches internetienne, quelques lignes de code, quelques tests, et voilà-t-y pas qu’un robot à touitte sort vaillamment de mon cerveau (à défaut de sortir d’un robot-utérus fait en métal liquide).

Le premier twitter bot, créé en 1739

Le premier twitter bot, créé en 1739.

Je vous invite donc à consulter, et surtout à vous abonner au compte suivant : https://twitter.com/expressionotron

Je suis bien content d’avoir réalisé tout ça. J’ai découvert des nouveaux trucs, et je peux maintenant mettre sur mon CV : « expert en programmation web ».

Ces exploits ne méritent pas vraiment un article décrivant en détail les aspects techniques. De la documentation sur Flask et Bottle, il y en a à la pelle (voire à la bouteille). PythonAnywhere a son propre tutoriel intégré dans le site. Quant au twitter bot, j’ai trouvé assez rapidement un exemple, incluant du code et des infos sur les mystères de l’OAuth. Il est par là (http:// wilsonericn.wordpress.com/2011/08/22/tweeting-in-python-the-easy-way/).

Si vous insistez en me mettant plein de commentaire, je ferais un tutoriel maison ici. Mais honnêtement, je pense que vous n’avez pas besoin de plus que ce qui existe déjà ici et là. Bonne débrouille !

L’idée originale de l’exressionotron ayant été piquée chez nioutaik, je l’ai bien évidemment crédité. Je me suis également fendu d’un joyeux clin d’œil : l’avatar du twitter bot est une version pixel-art-paint minimaliste de l’OMG-tortoise, égérie (s’il en est) de l’expressionotron nioutaikien (http:/ www. nioutaik.fr/index.php/2007/09/06/386-l-expressionotron).

Coïncidence ? Mmmhh... Pas sûr.

Coïncidence ? Mmmhh… Pas sûr.

Et pour après ?

J’ai envie d’améliorer le concept, mais je ne le ferais que si des gens s’y intéressent, et sont prêts à flatter mon ego en échange de mon travail. Car : oui ! C’est du Travail !

Au fur et à mesure que le twitter bot atteindrait de plus en plus de followers, j’augmenterais les fonctionnalités et la diversité des phrases rigolotes. Voici les étapes prévues :

  • Si j’ai 24 followers, je corrige les fautes d’orthographes, j’améliore la gestion de la seed, et je rajoute 50 verbes, 50 noms, 50 adjectifs et 50 trucs de fin. Sachant qu’il y a actuellement une centaine de chacun de ses éléments.
  • Pour 30 followers, je libère le code du site et le mets sur github. Mais je ne libèrerai pas encore les listes de mots.
  • Pour 40 followers, je corrige les fautes d’accord entre les noms et les adjectifs, et j’en profite pour rajouter une cinquantaine de noms, majoritairement féminin.
  • Pour encore plus de followers (nombre restant à déterminer), je rajoute encore des mots, et je les regroupe par champ lexical. Vous pourrez alors générer une expression spécial Star Wars, spécial Magic The Gathering, spécial jeux de rôles, etc. Vous pourrez également mixer plusieurs champs lexicaux.
  • Pour encore-encore plus de followers, je publie les listes de mots des premières versions, je rajoute d’autres champs lexicaux, je crée une interface permettant de construire manuellement son expression en piochant ce qu’on veut.
  • Il est certainement possible de trouver encore plein d’idées bien débiles. Les possibilités d’extension sont infinies.

Il y a déjà 14 followers, la première étape devrait être franchissable, j’ai bon espoir.

Alors, venez vous agglomérer, petits twittos. Faites comme les mannequins du site Scoreland, mettez-vous en file indienne et suivez-moi !

score_sixpack14

Ni avant, ni après, mais d’autre part

J’ai écrit deux articles de pythonneries sur le blog de Sam et Max. Je vous en parle plus tard.

Le magazine 42 est paru depuis le jour de la fin du monde. C’est le dernier numéro. Notre aventure s’arrête là. Il y aura bien sûr un petit article récapitulatif de ce que j’y ai fait, et quelques explications de cet arrêt.

Seed expressionotronatoriale du titre de cet article : 183058273_001

Seed du brahmapoutrage des pingouins Linux : 238201767_001

On va pas se laisser brahmapoutrer comme ça ! Quak quak !

On va pas se laisser brahmapoutrer comme ça ! Quak quak !

Dernière minute, de type « et merde ! »

Pas merci à ce putain de WordPress, de foutre automatiquement des liens là où j’ai absolument pas demandé qu’il en foute, et que faut justement PAS que y’en ai. Putain de bordel de connerie de truc de daube. C’est trop demander d’avoir juste du TEXTE SIMPLE dans un article comportant du TEXTE SIMPLE ?

Donc à partir de maintenant, les liens en clair, que je mets à côté des liens avec intermédiaire publicitaire, seront écrits en gris, italique, et SANS LE H DE « HTTP » ! Sinon ce connard de WordPress me les transforme automatiquement en lien cliquable, et je veux justement pas qu’il le fasse ! Je veux obliger les gens à cliquer sur les liens à pub, tout en donnant quand même la cible du lien, si jamais un jour l’intermédiaire publicitaire sus-mentionné a un problème, me claque entre les doigts ou me supprime mon compte pour une raison quelconque.

Et maintenant je vais devoir reprendre TOUS mes articles, pour corriger cette connerie. SUPER WORDPRESS, SUPER ! J’avais exactement besoin de ça ! Putain, heureusement que c’est gratuit, sinon je serais VRAIMENT en train de râler !

Plus qu’à espérer que personne n’invente de protocole intitulé « ttp », sinon je suis bon pour tout re-re-faire. TROP BIEN ! ÇA DÉPUCELLE DU ZOMBI NEURASTHÉNIQUE À LA PELLE À TARTE ! JE SUIS TROP HEUREUX!

Edit 2013-11-24 : Bon, j’ai trouvé une astuce un tout petit peu moins dégueulasse. Si je colle des espaces en plein milieu de l’URL, ça vire la mise en forme automatique. C’est ce que je suis en train de faire, sur tous mes articles.