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.

Galaxy 55 : script de récupération des prix

Edit 2013-11-19 : le jeu Galaxy 55 a été mis en jachère pour une durée indéterminée. Cet article n’est donc plus d’actualité. Je le conserve ici, car tout ce que je dis est éternel.

Salutations aux capitalicubistes qui me lisent !

Aujourd’hui, un article de geek avec du code dedans. Mais pas du python. Nous, dans le blog de Réchèr, on n’est pas que des machines à pythonner, on est aussi des êtres humains, avec un cœur, un foie, des ovaires et/ou des couilles. (On est surtout un mec tout seul avec des petites voix dans la tête).

Bref, ce que je vous propose, c’est

Du javascript DTC (Dans Ta Console)

Une fois n’est pas coutume, mais plusieurs fois est ; la société Motion Twin a créé un chouette jeu. C’est « comme Minecraft, mais dans l’espace », et ça s’intitule Galayx 55. Le joueur y explore des planètes diverses et variées. Minage, extraction, récolte et recherche de constructions témoignant d’une civilisation perdue sont de mise. Je ne vous décris pas tout en détail, d’autres sites feront ça mieux que moi, et avec moins de commentaires débiles en rouge pour sous-entendre que je suis fou et que je voudrais que tout parte, non que tout reste, non que tout parte mais que le reste reste, prolétaritude du dictatioriaaaaaaaaaaaaahhhhh !

Ce jeu comporte un marché d’échange de cubes. Un peu comme Wall Street, mais sans les hippies qui l’occupy. (Tiens d’ailleurs, il en est où ce mouvement ? Faudra que je le moteur-de-recherchise, à l’occasion). Les joueurs y font des offres d’achats, de vente et des transactions. Tout cela est bien biaux.

Il y a juste un problème d’interface : on peut consulter les prix pour chaque type de cube, un par un, mais il n’y a pas de récapitulatif global!

Il y a aussi quelques soucis dans l’affichage des courbes.

Alors vous êtes là, avec vos planètes comportant des centaines de cubes, vous « kiffez » l’exploitation intensive de la nature dans le but bien légitime d’amasser de l’argent, vous êtes prêt à tondre des hectares entier de forêt luxuriante pour votre luxe, mais vous ne pouvez pas savoir quels cubes se vendent le mieux. Mince alors.

Heureusement, je suis là.

Disgression : j’ai mis le mot « kiffer » entre guillemets juste pour m’amuser à faire le type qui parle pas djeun’s mais qui essaie quand même de parler djeun’s tout en ayant bien conscience qu’il sait pas le faire, et qui prend tout cela au second degré. Je fais du second degré sur du second degré. D’ailleurs, pour être vraiment clair sur mes intentions, j’aurais du mettre les guillemets entre guillemets. Ça aurait donné quelque chose comme ça : ‘ »‘kiffer' »‘. Sauf que WordPress bidouille mes guillemets pas comme je veux. Bon, passons.

Galaxy 55 est un jeu comportant des arbres et des barrières en bois, comme ce qu’on voit en arrière-plan de cette image.

Je me suis lancé dans la réalisation d’un bout de javascript automatisant la récupération des prix. Comme j’y connais pas grand-chose à la programmation web en général, je me suis dit que ce serait sûrement faisable sous la forme d’un gros tas de code à copier-coller comme un bourrin dans la console du navigateur. J’y suis parvenu.

Je ne m’en suis rendu compte que plus tard, mais j’ai vraiment eu du bol. Ça a pu fonctionner ainsi grâce au fait que la recherche des cubes, leur sélection et la récupération des prix se font par des requêtes Ajax.

(ici, il faudrait mettre une image d’un bidon de lessive Ajax, mais ce serait tellement convenu. Je vous l’épargne, d’accord ?)

Les requêtes Ajax ne changent pas l’URL, ce qui signifie qu’il n’y a pas de méga-reset de la page web qui aurait tué dans l’œuf l’exécution de mon gentil script. Oui, mon script s’exécute dans un œuf et il vous emmerde.

Et donc ça marche. Mon code, après quelques instants de moulinage, finit par logger dans la console le tableau complet des cours et des prix. Pour savoir comment s’en servir, vous pouvez consulter, au choix

Faites-en bon usage, jeunes parallelépipédocapitalistes !

Les trucs que j’ai pas réussi à faire dans ce script

Des requêtes jQuery qui ne se bloquent pas

Une petite partie de jQuery ?

Une petite partie de jQuery ?

Doit y avoir un truc qui m’échappe avec cette cochonnerie. Je tape $(« div#best_ask span.tgt ») dans la console et j’obtiens un tableau contenant un élément. Jusqu’ici tout va bien.

Sur la même page, je lance mon script comportant cette ligne de code, et elle me renvoie null.

Je me dis qu’il faut peut-être attendre que les ajaxeries en cours soient terminées. Je met la ligne dans une fonction SetTimeout, qui se relance tant que le truc obtenu est null. Le bastringue se coince dans une boucle infinie. Merci, au revoir, et passez-moi une brouette de commandes getElement [ById / sByTagName / sByClassName ].

Continuer mon script sur une autre page

Lorsque je suis parvenu à logger le tableau dans la console, je me suis dit que ce serait cool de l’envoyer automatiquement à un site de pastebin. C’est là que je me suis heurté au problème non vu précédemment, grâce au gros coup de bol.

Ça paraît évidemment pour ceux qui font du web depuis l’époque où leur mère suçait encore des bites, mais pour moi, ça ne l’était pas. Je vais donc vous l’écrire en gras : La plupart des infos en mémoire (variables, fonctions à exécuter après un timer, etc.) sont oubliées lorsqu’on recharge la page ou qu’on change d’URL.

Ce n’est pas une limitation technique, le navigateur fait exprès d’être amnésique de la sorte. Il s’agit d’une sorte de mesure de sécurité, appelée la « Same Origin Policy », ou quelque chose comme ça. Il y a bien une instruction javascript pour changer de page, mais lorsqu’on l’exécute : pouf ! Mémoire-de-poisson-rouge power !

Rien à voir, sinon le mot "cube".

Rien à voir, sinon le mot « cube ».

Les « vrais » sites web, pour conserver leurs informations, utilisent des cookies dont ils gavent votre navigateur. Il est certainement possible de concocter rapidement une de ces délicieuses friandises, mais ça n’aidera pas mon pauvre script dans sa pauvre console. Il va de toutes façons se stopper en changeant de page.

La solution serait d’utiliser un plug-in comme GreaseMonkey, qui peut cuisiner ses propres cookies en interne, et exécuter différents morceaux de javascript dans différentes pages. J’en aurais donc un morceau dans la page Galaxy 55, un autre dans celle du pastebin, et les données se transmettraient grâce à un cookie commun. (kou-ki-kom-1).

Sauf que je n’ai pas envie de mettre tout ce bazar en place, d’abord parce que j’ai la flemme, et ensuite parce que ce serait moins portable. Le script tel qu’il est actuellement n’a rien besoin d’autre qu’un navigateur. Pas de singe graisseux à installer, ni tout autre tralalas.

Je veux que ça reste super simple à utiliser, que n’importe quel joueur puisse l’exécuter et rediffuser publiquement les prix afin d’en faire profiter tout le monde. J’ai dit.

Autre petite chose concernant Galaxy 55

Pour aller d’une planète à l’autre, on dispose d’un vaisseau, à concevoir soi-même comme on veut.

 Y'avait trop de cube dans l'image précédente. Pour compenser, voici des courbes.

Y’avait trop de cubes dans l’image précédente. Pour compenser, voici des courbes.

Ce vaisseau doit respecter diverses contraintes : étanchéité, accès à l’ordinateur de bord, accès au transmuteur, etc. Comme je suis un grand scientifique, je suis parvenu à créer le plus petit vaisseau acceptable possible. Le détail de ces recherches cruciales et sérieuses est publié dans le forum (http:// twinoid.com/fr/tid/forum#!view/96|thread/11814458).

Le vaisseau possède également une valeur de vitesse, qui semble être calculée en fonction du nombre de cubes. J’ai trouvé la formule exacte. Mes expériences empiriques et les conclusions théoriques qui en découlent sont décrites dans le sujet du forum sus-mentionné. Distinction suprême pour mon travail de chercheur, cette formule de vitesse est reprise dans la revue scientifique Twinpedia (http:// www. twinpedia.com/galaxy55/donnees_mathematiques).

Mes nouveaux l’amis de l’internet

Pour trouver la réponse à mes questions existentielles sur le javascript et les pastebin, j’ai eu recours à mes nouveaux l’amis de l’internet. Ils s’appellent Sam et Max et ont un blog super (http:// sametmax.com/).

Allez-y les voir, je les «’» »«’»kiffe«’» »«’». Voici une photo d’eux, avec un troisième ami indéterminé.

 Photo prise à la soirée-anniversaire de celui du milieu.

Photo prise à la soirée-anniversaire de celui du milieu.

Je vais essayer, dans les semaines qui viennent, de leur proposer des articles sympatoches sur le python ou autre. C’est toujours bien de squatter un peu le blog d’autres gens, ça permet d’amener du flux de cerveau dans le mien.

J’en profite également pour remercier Roro, un autre l’ami de l’internet, qui m’a introduit (avec vaseline) au blog de Sam&Max. Il n’a pas de site ni de blog ni de truc comme ça, alors je vais juste le remercier publiquement ici.

Merci !!!

Merci !!!

Et merci à lui pour plein d’autres trucs !!