J-Mad

Feb 272010
 

Et oui, vous ne rêvez pas, malgré le fait que le mois de février soit ridiculement court, je trouve tout de même le temps d’écrire mon billet de l’app django du mois. Comme quoi, tout arrive.

Bon il faut dire, que j’ai du coup sélectionné une app assez petite, que j’ai découvert grâce à #django-fr (merci les gars) et avec une doc très bien conçu que je vais donc pouvoir honteusement recopier en parti pour vous expliquer comment cela fonctionne.

1- Où on le trouve, comment on l’installe, tout ça quoi (et la doc) ?

Sur la page qui lui est dédiée sur google code. Et pour l’installer, point de tar.gz, de easy_install ou de pip. Le seul moyen de l’installer consistera à faire un bon vieux svn checkout des familles.

Au niveau de la doc, il n’y a que la page du project home du google code. Mais par contre, elle est super bien foutue.

Rendre heureux aussi, ceux qui ne parlent pas français (personne n’est parfait 🙂 ).

Django-transmeta tente de répondre à un besoin tout con, comment traduire efficacement son contenu, lorsqu’on a un site multi langue. Parmi tout les moyens imaginables pour faire cela (j’en reparlerais en fin de billet), transmeta a choisi de modifier directement les tables des modeles à contenu traduisible.

2- Comment ça marche ?

Je vais reprendre, texto, les exemples donnés par la page web de transmeta, parce qu’ils très clairs. Prenons l’exemple d’un model qui décrit un bouquin.

Tel que :

class Book(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
body = models.TextField(default='')
price = models.FloatField()

Là, rien n’est traduisible. Imaginons que l’on veuille traduire la description et le body. Rien de plus simple, le code du model devient alors :

class Book(models.Model):
__metaclass__ = TransMeta

title = models.CharField(max_length=200)
description = models.TextField()
body = models.TextField(default='')
price = models.FloatField()

class Meta:
translate = ('description', 'body', )

On rajoute une metaclass et on défini dans la classe méta, les champs que l’on veut traduire.

Il faut ensuite, dans le settings.py, définir les langues que l’on veut gérer, par exemple :

LANGUAGES = (
('es', ugettext('Español')),
('en', ugettext('English')),
)

Et qu’est ce que cela fait ?
Un petit manage.py sqlall va vous le dire :

CREATE TABLE "fooapp_book" (
"id" serial NOT NULL PRIMARY KEY,
"title" varchar(200) NOT NULL,
"description_en" text,
"description_es" text NOT NULL,
"body_es" text NOT NULL,
"body_en" text NOT NULL,
"price" double precision NOT NULL
)
;

apparaît ici la solution utilisé pour transmeta. Chaque champ qui est défini comme traduisible donne lieu à n champs en bd, pour n langues.

Là vous allez me dire : ‘Ok, bien cool, mais comment on fait quand on rajouter une langue ou que l’on veut faire en sorte qu’un champ existant qui n’était pas traduisible le soit ?’
Forcément, c’est prévu. Sinon, je n’aurais pas osé faire de billet. Donc il y des commandes manage.py spécial pour altérer les tables déjà existantes et permettre de rajouter soit des langues, soit des champs traduisibles.
Dernière chose, il y a tout ce qu’il faut de prévu pour pouvoir gérer ses champs dans l’admin.

3- Retour sur la méthode

Le principe de fonctionnement de transmeta implique de devoir utiliser des alter table à chaque fois que l’on veut rajouter une langue ou un champ. J’avoue que je n’ai jamais aimé les alter table sur du sql. Est ce un tort que j’ai ? Je ne sais pas.
Vous me direz que si l’on utilise pas d’alter table, on se retrouve presque les mains liées et qu’il ne reste que peu de solution, à part des grosses tables sous la forme ‘langue code’, ‘field name’, ‘trad’. Il est vrai. Mais bon, j’aime pas les alter table.

4- Retour sur le titre du billet :

Tout le monde aura compris, bien entendu, le jeux de mot. C’est une référence directe à transmeta, l’entreprise américaine qui faisait des processeurs ni ne chauffaient que très peu et qui donc n’avait pas besoin de ventilo. D’où le sans suer. C’est nul, je sais.

Feb 222010
 

Bon, ben voilà, après quelques semaine d’attente, et malgré les multiples obstacles que j’ai du surmonter, voici le nouveau chapitre de mon polar geek, qui du coup, gagne un titre un peu moins générique que Polar Geek. Un remerciement tout spécial à ma chère et tendre qui a hérité du travail de relecture. Et au vu de ses remarques, parfois assassines, ce ne fut pas de tout repos….
Bonne Lecture

«Avec plaisir oui, sucré et avec un peu de lait s’il vous plaît».
Et en plus il sucre son café… Si vous voulez mon avis, on devrait torturer les gens qui gâchent le café en le sucrant.
«Vous me disiez que vous vous étiez fait pirater, expliquez-moi ça, et d’abord, qu’est-ce que vous vous êtes fait pirater ?».
«Oui vous avez raison, il faut que je vous explique. Mais… Tout d’abord, ce que je vous dirais restera bien confidentiel n’est-ce pas ? Comme avec les avocats ?».
Ne pas rire, ne pas rire, me répétais-je alors.
«En fait non, Monsieur, mais j’ai une certaine déontologie que je respecte et si vous le voulez nous pouvons signer un accord de confidentialité tout de suite, celui-ci m’empêchera légalement de divulguer vos problèmes».
«Ah oui alors, signons cela, j’aurais l’esprit plus tranquille».
Aussitôt dit, aussitôt fait. Et c’est ainsi que j’appris son nom : Arthur Carpendar, DG d’une société appelée LearnMore.
«Maintenant que vous vous êtes assuré de mon silence Monsieur Carpendar, je vous écoute».
Tandis qu’il rangeait précieusement sa copie de l’accord de confidentialité, il commença à parler : «LearnMore est une société qui propose des formations à distance reconnues par l’État. Nous formons nos étudiants à tout type de métiers, mais nous sommes avant tout présents dans le médical. Nous nous occupons aussi des plateformes d’apprentissage et d’examens d’une majorité des écoles d’infirmières du pays».
Pendant que mon client parlait, je prenais rapidement des notes sur l’un des petits carnets à spirale qui jonchaient mon bureau. Oui, je sais, le papier c’est dépassé. Mais écrire m’aide à réfléchir. Et j’aime la sensation de mon stylo qui glisse sur le papier, je trouve ça étrangement sensuel.
«Et depuis quelques temps, un de nos élèves a réussi à nous pirater. Des dizaines de notes ont été changées, plusieurs tests ont vu leurs questions modifiées et d’une façon qui nous a ridiculisés…».
«Ah bon, que voulez-vous dire par là ?».
«Que demander à des élèves infirmiers s’il est vrai que le code du travail leur interdit de porter des sous-vêtements sous leur blouse, cela nous ridiculise…».
Comment dans de telles situations, je réussis à ne pas rire, parfois je m’impressionne moi-même. Cette fois-ci encore je jugulais mon rire et me contentais d’un : «En effet, ce n’est pas du meilleur effet».
«Non et cela doit cesser. Il y a quelques mois, nous avons été rachetés par un grand groupe américain, le groupe Horizon. Il y a eu, du coup, un nombre important de remaniements dans nos équipes, si vous voyez ce que je veux dire. Si l’affaire s’ébruite, c’est ma tête qui va tomber».
«Oui, je vois. Je saurais faire preuve de la plus grande discrétion. Mais pourquoi pensez-vous que c’est un piratage ? Vous avez des indices ?».
«En fait, c’est ce que pense notre ingénieur réseau, chef de projet. Il y a presque deux ans, nous avons demandé à une société de services de faire des modifications profondes dans le code. Notre informaticien pense qu’ils ont fait un travail de mauvaise qualité et ouvert des failles qu’un de nos élèves a fini par trouver».

Taper sur les sociétés de services, c’est toujours si pratique. Enfin, il faut bien dire qu’elles le méritent assez souvent. Mais on ne peut pas vendre de la viande et en même temps avoir un engagement qualité haut de gamme. Ce n’est que mon avis, mais je ne supporte plus ces garagistes de l’informatique.

«Ce que je vous propose, si vous acceptez mes tarifs, c’est de venir le plus rapidement possible dans vos locaux pour commencer à auditer le code de votre applicatif ainsi que votre SI et trouver votre pirate».
Mon presque client me coupa avant que je puisse énoncer mon prix de journée : «Votre prix sera le mien. Cet après-midi c’est le mieux si vous êtes disponible, je préviendrais les informaticiens».
Je ravalais précipitamment le chiffre que j’allais énoncer et pleine d’aplomb, en croisant les doigts derrière mon écran, lui assenais le double.
«C’est parfait», lâcha-t-il sans même frémir.
J’envoyais une petite prière silencieuse au dieu des détectives et tentait un : «Et bien entendu, il me faudrait trois jours d’acompte».
«Bien, je m’en doutais. Casey Pollard m’avait prévenu».
C’est bizarre comme parfois, les mots nous prennent au dépourvu. Je fus heureuse d’être assise.
«Pollard vous a parlé de moi?», demandais-je comme si cela n’avait aucune importance.
«Oui, je le connais depuis des années, nous avons des amis communs. Il y a trois ou quatre jours, je lui ai dit que j’avais des problèmes informatiques que je voulais régler en toute discrétion. Il m’a tendu votre carte en me disant qu’elle serait la solution à tous mes problèmes. Il a rajouté que ça allait me coûter cher, mais que le travail serait parfait».

Je bouillais de rage. Il avait même mes cartes de visite… Pensait-il que je n’étais pas capable de me débrouiller seule qu’il me faisait l’aumône des clients ? Je me rendis compte que je venais d’égorger violemment une Lucky Strike à coup d’ongles rageurs. Et que j’avais loupé les derniers mots de mon client.

«… le connaissez ?».
«Ah… C’est une longue histoire, disons que nous avons eu l’occasion de travailler ensemble. Par contre, si vous voulez bien me pardonner, je dois préparer l’entretien de cet après-midi avec votre équipe». Se rendit-il compte que je le jetais presque dehors ? Me prit-il pour une autiste d’une impolitesse crasse ? Je dois bien dire que sur le moment, cela m’importait peu. Je voulais juste être seule et me vider la tête avec une bonne session de Team Fortress.

L’après-midi était, comme il se doit pour un lundi après-midi d’hiver, gris et glacial. Après une vraie croisade à travers les transports publics suivie d’une petite marche que l’on pourrait qualifier de revigorante mais que je décrirais plutôt comme frigorifiante, je finis par enfin me retrouver devant les locaux de LearnMore. Pour que vous vous fassiez une idée, comparé à l’immeuble qui me faisait face, les tunnels du métro ressemblaient au pays joyeux de l’île aux enfants. Je me serais cru dans un mauvais polar. Vous savez ceux où les immeubles sont toujours gris et lugubres, perdus au fond d’une zone industrielle où les seules femmes que l’on croise sont celles qui attendent sur le bord de la route en faisant tourner leur petit sac à main. Un vrai cliché.

«Bonjour, Alana Oscar, Monsieur Carpendar m’attend», annonçais-je à la standardiste en soufflant sur le bout de mes doigts pour les réchauffer. J’ai le bout des doigts très sensibles, je ne supporte pas les gants, je ne peux donc porter que des mitaines. Et de toute façon, cela peut être très sexy les mitaines. En voyant que la standardiste me regardait avec des yeux aussi gros que des assiettes à pizza italienne, je me rendis compte que j’avais oublié d’enlever mon bonnet. C’est un cadeau de ma petite nièce. Elle a eu droit à un atelier couture pendant ses dernières vacances. J’ai donc gagné un gros bonnet en laine, comment dire, arc en ciel. Mais il tient chaud et ça lui fait plaisir que je le porte. Et puis en y réfléchissant, il nuit moins à ma vie sociale que mon vieux bonnet Domo Kun.
«C’est la nouvelle tendance de l’hiver, si vous m’appelez Monsieur Carpendar tout de suite, je vous dirais où vous pouvez l’avoir à tout petit prix». Elle ne daigna même pas me répondre…

«Vous avez raison Mademoiselle, il est ennuyeux qu’il n’y ait pas de logs sur les connexions du VPN, mais ce n’est pas très grave dans l’affaire qui vous occupe vu que ce n’est pas par ce biais que se connectent les élèves». Cela faisait moins d’une heure que j’étais là et j’avais déjà envie de courir à travers les couloirs en hurlant avant d’assommer le responsable réseau à coup de clavier, voire de l’écarteler avec des RJ45. Et le fait que ses notions d’anatomie humaine lui fasse croire que les yeux des femmes étaient à hauteur de poitrine, n’aidait pas vraiment non plus.

«Laissez-moi juge de ce qui est grave ou pas, Monsieur Tave». Je remontais mes lunettes d’une petite pichenette avant de continuer. Je ne devrais pas vous le dire, mais ce sont des verres blancs. Une femme informaticienne c’est déjà suffisamment dérangeant, si je ne portais pas de lunettes, je pense que certains de mes interlocuteurs refuseraient de croire que j’existe et me classeraient dans la catégorie créature mythique et fantasmée.

«Si je récapitule, votre applicatif est accessible à vos élèves, par le web, ce qui est normal. C’est la même chose pour les professeurs qui ne sont pas des salariés LearnMore. Mais aucun log n’est fait de leur activité, on sait juste quand ils se connectent et combien de temps. L’accès administrateur de ce même applicatif n’est possible que de votre réseau d’entreprise, cette limitation étant mise en place par de la restriction IP. Mais permettez-moi de vous dire que LearnMore n’a jamais été et ne sera jamais un password sécurisé. Pour que le tout soit un peu plus piquant, il existe un VPN qui donne accès à votre réseau d’entreprise, pour vos salariés mobiles. Bien entendu, à partir de ce VPN on peut se connecter sur votre application, y compris en accès administrateur, mais ça, apparemment, ça ne gène personne. Et, histoire d’être sûr de remporter le Darwin Awards des réseaux informatiques, il n’y a pas de logs de connexions concernant ce VPN. Rien, nada, nichego, le VPN le plus aveugle que je connaisse. Est-ce que j’oublie quelque chose ?»

«C’est que… Je… Je n’étais que développeur PHP jusqu’il y a peu de temps. Ce n’est que depuis la restructuration que je dois m’occuper du réseau aussi. J’ai tout laissé comme c’était avant que l’on vire le responsable».

«J’ai bien compris monsieur Tave…», faire un jeu de mot en lui disant qu’il était un pauvre gus me démangeait depuis qu’il s’était présenté, surtout qu’il avait le physique de l’emploi. «… que vous n’étiez pas qualifié pour gérer l’infrastructure réseau, et que vous n’êtes pas le seul à blâmer… Mais tout de même. Vous pensez vraiment que ce n’est pas grave qu’il n’y ait aucun log nulle part ? Vous pensez vraiment qu’il n’est pas important de logguer quand et d’où se connectent ceux qui ont les privilèges administrateurs ? Au vu de ce que vous venez de me montrer, les modifications dans vos bases pourraient venir de n’importe où et l’hypothèse que vous imaginez, celle de l’élève pirate informatique, me semble clairement la moins plausible».

C’est le moment que choisit Carpendar pour intervenir. «Monsieur Tave pensait pourtant que cela ne pouvait provenir que des élèves, que c’était, comme je vous l’ai dit ce matin, dû à une faille qu’aurait laissé la société de services qui a travaillé sur notre applicatif. Comment pouvez-vous affirmer le contraire sans avoir vu le code source. Et, si ce n’est pas cela, qui a donc piraté nos bases ?».
«Je parle en terme de plausibilité. Vu la qualité de votre sécurité informatique, je pense que c’est là que ce trouve le point faible. A mon avis, c’est tout simplement un sabotage interne. Quelqu’un qui par exemple n’a pas apprécié le rachat de votre société et qui se connecte soit directement de vos locaux, soit à travers le VPN».

Je vis alors clairement que mon hypothèse les choquait. L’admin réseau surtout, avait l’air catastrophé. Le pauvre, il devait se dire que tout allait lui retomber dessus. «Je vais tout de même auditer le code de votre application, au cas où. Mais pendant que je ferrais cela, vous monsieur Tave, vous allez changer les mots de passe de tous vos salariés en prétextant que le groupe Horizon vous oblige à mettre en place une politique de changement de mots de passe forcé tous les trimestres. Vous allez également faire en sorte que chaque action faite sur l’applicatif de cours soit loguées. Et enfin vous allez activer tous les logs possibles sur le VPN. Et surtout, surtout, vous allez changer le mot de passe du compte admin de votre applicatif. Et c’est moi qui vous donnerait le nouveau mot de passe. Des questions ?».
«Non Mademoiselle, je vais m’y mettre tout de suite et je vous tiendrais au courant».
«Non, avant cela, nous allons voir la configuration de votre VPN et définir des zones d’accès en fonction des fonctions des salariés. Monsieur Carpendar, nul besoin que vous restiez plus longtemps, cela va devenir technique, je viendrais vous voir pour faire un rapide debriefing avant de repartir, pourriez-vous simplement faire en sorte que je puisse rentrer en taxi après notre réunion ?».

Le bureau de Carpendar criait que celui-ci avait plus d’égo qu’un jeune diplômé de l’ENA. Des reproductions de tableaux que je trouvais moches à souhait, mais qui devaient être la dernière mode côtoyait des photos de lui lors de grandes occasions. Au centre, trônait un lourd bureau très Renaissance, un bureau de Président, tout à fait la sorte de bureau qui vous dit quand vous le voyez ”celui qui s’assoit ici est important, pour de vrai, tu devrais être heureuse de simplement avoir le droit de pouvoir lui adresser la parole”. Tout cela me fit sourire. Les DG, décidément, tous les mêmes.

«Je ne vous cacherais pas que votre politique de sécurité est déplorable. Je suis presque étonnée que vous n’ayez pas eu de problèmes plus tôt. Nous avons, avec Monsieur Tave, mis en place, une configuration un peu plus étoffée du VPN, en limitant autant que possible les accès. Avec les logs que l’on a rajouté un peu partout, nous devrions pouvoir y voir plus clair. Le risque principal, maintenant, c’est que votre pirate, si c’est un salarié interne prenne peur du fait du changement de mot de passe et arrête tout. De mon coté je vais auditer le code de votre application et je reviens vous voir dans une semaine, plus tôt si vous détectez une activité suspecte».

JPod, le livre

 Critiques de bouquins  Comments Off on JPod, le livre
Feb 182010
 

Lorsque ma chère et tendre m’avait parlé de la série JPod, j’étais aux anges. Les premiers épisodes m’avaient ravi, je crois qu’il n’y a pas de mots plus justes. Mais malheureusement, la série fut annulée et moi, je dus me contenter de pester sur les fout… incompétents qui prenaient de telles décisions.

Alors, bien entendu, vous imaginez ma joie lorsque que je découvris qu’Au Diable Vauvert sortait le bouquin en français. Si j’avais pu, je me serais précipité immédiatement pour acheter ce petit joyau. Malheureusement, Aion et quelques autres bouquins ayant asséchés mon budget ‘loisirs’ je dus attendre quelques temps avant de pouvoir devenir l’heureux propriétaire d’un exemplaire de JPod (et râler, avec raison, à chaque fois que je croisais un inconnu le nez plongé dans son exemplaire de JPod).

Mais revenons en au bouquin.

Tout d’abord, l’aspect extérieur.

Vous allez me dire, qu’est-ce qu’on s’en fout ? Sauf que non, c’est important. Il m’est arrivé de ne pas acheter un bouquin à cause de son odieuse couverture (et le contraire fut également vrai).

C’est un bon pavé de 523 pages. La couverture est très sympa, grise métallisée, avec six petits bonhommes type Légo. C’est d’ailleurs la même couverture que la version US.

1- L’histoire

Tout allait pour le mieux pour Ethan et ses cinq acolytes déjantés. ‘Enfermés’ dans JPod, une espèce de placard professionnel dont l’on ne sort jamais, ils bossent tranquillement sur un jeu de skateboard. Et par bosser tranquillement, je veux dire qu’ils en font le moins possible, en trouvant toutes les excuses possibles pour ne pas travailler. Tout va dans le meilleur des mondes des développeurs de jeux vidéos, jusqu’à ce que le service marketing ponde une nouvelle idée géniale : intégrer un PNJ tortue dans le jeu de skateboard… Et là, tout dérape, enfin je devrais dire sur-dérape.

JPod ne raconte que cela, le quotidien complètement burlesque d’Ethan. Comme Ethan passe la majeure partie de sa vie au boulot, JPod raconte donc aussi la vie de ceux qui bossent avec lui, à savoir l’équipe de dev de jeux vidéos la plus spéciale du monde. Et par spéciale, je veux dire qu’elle se compose de (n’ayons pas peur des mots) ratés, ultra-geeks, nerds, psychotiques et perdus de la vie. Notre gentil héros ayant une famille, quand même, on pourra aussi se régaler de ses différentes histoires de famille. Sachant qu’à bien y réfléchir, les camarades de boulot d’Ethan sont presque normaux comparés à sa famille…

Un livre qui ne raconte que la vie quotidienne des personnages qu’il met en scène, cela vous rappelle Seinfeld et la série qui ne raconte rien ? C’est normal, c’est un peu ça, les persos frappadingues en plus.

Vous ne me croyez pas ? Alors allez, pour le plaisir j’en liste quelques uns :

  • un figurant de films ratés spécialiste de danse de salons,
  • un mafieux chinois, très… spécial,
  • une mère bien sous tout rapport et cultivatrice de drogues,
  • un mec qui se shoote au sirop contre la toux,
  • Douglas Coupland lui-même, qui se met en scène dans son propre bouquin,
  • ….

Et donc forcément, avec autant de personnages déjantés, il ne peut arriver que trucs complètement fous sur trucs complètement fous. A tel point que parfois, on pourrait croire qu’en fait on s’est retrouvé, par un phénomène bizarre, dans un livre de Jasper Fforde (auteur que j’adore d’ailleurs).

2- Le reste

2.1 Typo quand tu nous tiens

Tout le livre joue sur la typo, la géographie des lettres. Et je dois dire que j’aime beaucoup. Sur certaines pages il n’y a que 2 ou 3 mots, écrits en gros. Sur d’autres, ça sera écrit en plus petit, tout serré. Il y a parfois des listes de mots, sur deux ou trois pages (pour ceux qui connaissent, on retrouve un peu les mêmes sensations que lorsque l’on lit la La Maison des Feuilles).

2.2 Scrapbooking

Le bouquin raconte la vie quotidienne des protagonistes, je l’ai déjà dit. Et leur vie quotidienne, c’est avant tout, comment ne rien faire au boulot. Et là où c’est fort, c’est que leurs activités sont vraiment détaillées dans le bouquin, genre scrapbooking de vacances avec les tickets de métros et les polaroids collés avec du chewing-gum. Cowboy (l’un des perso) retrouve de vieux spams de 2003 ? On a le texte du spam dans le bouquins.
Mark le Maléfique (pourquoi ce surnom, vous verrez en lisant) donne une liste de 58 894 chiffres au hasard et proposent à ses camarades de trouver la position du O qu’il a glissé à la place d’un 0, sans utiliser rechercher, bien entendu, eh ben on a la liste des 58 894 chiffres (et je dois avouer que j’ai chercher le O, et j’ai pas honte). Ça a l’air tout con, mais ça donne une vraie force au bouquin, ça le rend vraiment immersif, le temps d’un jeu, on devient un JPoder (l’un de mes préférés étant quand même, le jeu qui fait intervenir Ronald Mac Donald).

3- Alors, faut l’acheter ou pas ?

Plus que oui. Absolument même. Et ça, malgré ses défauts. Parce que oui, JPod, n’est pas sans défaut. En fait, pour être tout à fait franc, je trouve que la fin est bâclée. Pas la dernière page, que j’adore. Mais dans la dernière partie, je trouve que Coupland se laisse aller à la facilité. A rajouter un rebondissement ‘grosse ficelle’ qui au final n’apporte rien, toujours à mon avis, qui est juste posé là pour finir le bouquin sur un ‘changement’.

C’est dommage, parce qu’en plus, il s’était sorti plutôt bien de l’exercice difficile consistant à se mettre soi-même en scène dans un bouquin.

Mais même malgré ça, je le classe tout de suite dans la très petite catégorie de mes bouquins préférés, qu’il faut absolument lire avant 50 ans, sinon c’est que l’on a raté sa vie.

Et ce n’est pas grave si vous n’êtes pas geek, vous comprendrez quand même.

Feb 172010
 

Vu le manque de temps dont je souffre, je n’ai pas vraiment le temps d’écrire de long billet. J’espère pouvoir changer cela assez vite. Mais en attendant, une petite astuce que j’ai découvert il y a peu et que pour l’instant, je dois l’avouer, je n’utilise pas beaucoup. Mais ça peut-être utile.

Django offre deux outils merveilleux pour bosser avec ses templates, les templatetags et les filter. J’en utilise à tour de bras, sans arrêts.

Ce qu’il y a d’ennuyeux, il faut bien le dire, c’est dans le cas où l’on utilise un filter, dans tout les templates, de devoir faire, dans chaque template le {% load myfilter %}

Sachant qu’en plus si j’inclus un template A dans un autre B, le template A ‘n’hérite pas’ des filters et templatetags qui ont été déclaré dans B. Je devrais donc de nouveau dans A me refrapper les {% load ..

Pas de quoi raler plus que ça, je vous l’accorde.

Mais quand même, ce n’est pas très DRY tout ça, si on doit faire un load dans tout les templates de son appli.

Heureusement, papi Django a pensé à nous. Et il y a la possibilité de déclarer un filter comme étant un builtins. Il sera donc inclus par défaut, dans tout les templates.

Comment on fait ce petit miracle ? Rien de plus facile. Il suffit de mettre quelque part dans son code (dans l’__init__ de son app par exemple ) :

from django.template import add_to_builtins
add_to_builtins('nom_app.templatetags.nom_fichier_filter')

C’est tout de même assez facile, non ?

Par contre, je pense qu’il ne faut pas abuser de cette petite astuce, je soupçonne une diminution des perfs possible dans le cas d’une utilisation sans modération.

Feb 122010
 

Il peut arriver que l’on est besoin de passer à ses templates des données sous la forme de tuple. Mais comment dans le template, récupéré les données qui sont dans le tuple ?

Question importante s’il en est.

Je vous rassure tout de suite, là réponse n’est pas ‘construire une classe qui sert à rien pour pouvoir faire instance.nom_donneée_membre. ‘

Il y en en fait deux méthodes.

Méthode 1

on peut unpack (désolé je n’ai pas trouvé de traduction françaises pour unpack) les tuples en utilisant la notation .NumeroChamp. Petit exemple :

tuples = [ ( foo, barr, tut ) , ( a , b , c ) , ( x, y , z ) ]

{% for tuple in tuples %}
    {{ tuple.0 }} {{ tuple.1}} {{ tuple.2 }}
{% endfor %}

C’est déjà pas mal, mais c’est peu lisible. Il y a donc mieux, la méthode 2.

Méthode 2

Celle ci permet d’unpack directement vos tuples dans la boucle for, en donnant un nom à chaque variable. Dans ce cas là, il faut donc que chaque tuple est la même structure.

Imaginons par exemple que l’on construit des liens à la volée, avec des tuples qui contiendraient deux champ, l’url et le nom du lien, on aurait donc :

{% for url , name  in tuples %}
    <a href="{{url}} "> {{name}}</a>
{% endfor %}

Plutôt sympa non ?

Feb 082010
 

Mes légumes, ils sont beaux mes légumes

Encore une semaine qui commence en mode ‘infernale’ et qui va finir en mode ‘hardcore de l’espace’ je sens. Du coup, entre deux lignes de code django et juste après un déploiement serveur client, je me change les idées en inaugurant une nouvelle rubrique délirante.

A savoir tout les concepts de jeux que je sais consciemment que j’aurais même pas le temps de faire plus qu’y réfléchir. Soit parce que je n’aurais jamais le temps, soit parce qu’ils sont juste mauvais, rigolo mais mauvais.

Et oui, je suis encore suffisamment plein d’illusions pour croire que pour certains, j’aurais le temps de ‘faire des trucs’…

Donc, pour ce premier post, voilà un petit concept, très peu réfléchi, mais qui il y a deux jours, quand j’y ai pensé, m’a bien fait marrer.

En fait, l’idée vient d’une discussion que j’avais avec un pote qui joue sur le même serveur Aion que moi. On discutait du fait que lui se foutait du nom de son perso, du nom de sa guilde, du background du monde, du texte des quête, etc quand il jouait. Le seul truc qui l’amusait c’était d’amasser des pièces d’or (les puristes d’Aion me diront que ce n’est pas des pièces d’or mais des khina, mais vous aurez compris que bon, le nom de la monnaie, mon pote s’en fiche un peu), des lvls et du stuff.

Donc je lui ai dit ‘de toute façon, toi, ça pourrait être un mmorpg où l’on jouerait des carottes, des navets ou des poireaux, ca te plairait quand même’.

Et au final, je me suis dit, pourquoi pas. Pourquoi pas incarner des légumes. Avec des clans de légumes, qui auraient chacun des pouvoirs. Les agrumes, les légumes verts, les féculents, etc …
Les pommes de terres pourraient par exemple voyager sous le sol, en étant, du coup, furtif. Les poireaux pourraient être utile pour passer des obstacles, les agrumes pourraient tirer des pépins, les petits pois s’agréger en ‘homme petit pois’ ou se transformer en limace de petit pois pour se faufiler  partout.

Les lieux pourraient être multiples, ferme, super marché (avec la possibilité de conduire des voitures télécommandés à la greemlins), entrepôt, camion ou péniche, restaurants, etc …

Je verrais bien un moteur physique assez réaliste dans la gestion des collisions et des interactions (avec l’eau, le feu).

Je me dis qu’il y aurait plusieurs modes possibles, mais je les vois tous pvp :

  • pvp team contre team,
  • race contre race, où les féculents font tout pour transformer les légumes verts en potage et ou les agrumes reverraient de faire tomber les patates dans les découpes frites.
  • un mode pvp guilde contre guilde , suivant les même principe que le team vs team, mais en guilde.

Le but serait de faire ‘gagner’ sa team/race/guilde.

Comment ? En prenant et en tenant des forts, en se servant des avantages de ceux-ci pour  faire maximiser son score. Le score étant bien entendu le nombre d’adversaires cuit/découpés/frit/réduit en purée. Par exemple, dans la maps cuisine, imaginons que l’un des points à conquérir soit la casserole d’eau qui boue sur le feu. Le groupe qui le posséderait pourrait, s’en servir pour faire bouillir les ennemis qu’il arriverait à capturer (où à faire tomber dans la casserole en faisant des embuscades à la incredible machine, d’où l’importance du moteur physique).

On pourrait rajouter des événements aléatoire, du style, le geek célibataire qui revient éteindre la casserole qu’il a oublié à cause d’une instance de WoW. Où la mère de famille qui se rend compte qu’elle a laisser trainer une carotte sur le plan de travail et qui enferme un pauvre joueur dans le frigo, dans le bac à légumes.

A ce niveau là, je me demande si il vaut mieux le penser avec des légumes qui se cachent des ‘humains’ pour pas que l’on sache qu’ils sont vivants ou si il vaut mieux partir sur le fait que les légumes puissent se battre contre des PNJ humains ou animaux, comme le boss chef de cuisine fou de poêlée de légume ..

Au final, je me dis qu’il y aurait peut-être un vrai concept à creuser la dessous.. Si j’avais le temps..
Mais là, le devoir, et les lignes de python, m’appelle, donc op, j’y replonge.

Django 1.2 beta, the news

 Django  Comments Off on Django 1.2 beta, the news
Feb 062010
 

Comme le petit billet qui listait les nouveautés de la version alpha de django 1.2 a eu un petit succès, j’ai décidé de récidiver et de faire la même chose pour la sortie de la version beta. Ce qui sera d’ailleurs beaucoup moins fatiguant, vu qu’il y a peu de nouveautés entre l’alpha et la toute récente beta.

Pour ceux qui veulent les releases notes précises, en anglais, c’est par ici, sur le site de django.

1- Trucs obsolètes ou changés.

1.1 Le lanceur de test

Le lanceur de test passe dans un modèle class-based. L’ancien style fonctionne encore mais il faut penser à passer dans le nouveau style.

1.2 La Syndication

La classe qui Feed qui gère les feeds a été modifiée (mais elle garde le même nom) et en plus elle change de package. De django.contrib.syndication.feeds.Feed elle devient django.contrib.syndication.views.Feed. L’api du truc ne change pas vraiment, mais maintenant on peut l’utiliser dans des vues.

De plus un atom:link apparaît, pour être en concordance avec les RSS best practices.

1.3 Encodage de cookies

L’ancien encodage des virgules et des points virgules bugguaient dans certain navigateur (IE par exemple..) Du coup, l’encodage a été changé.

2- Ce qui est complètement nouveau dans la beta

Tout d’abord, il faut savoir que la sortie de cette beta marque le gel des nouveautés dans la 1.2. Et non. Plus rien de nouveau. Il n’y aura plus maintenant que de la correction de bug (ma bonne dame). Mais en attendant, cette beta amène quand même quelque nouveautés.

2.1 Les permissions par objet

Ce n’est pas géré directement par le système par défaut de gestion des permissions. Mais cette beta permet maintenant à des systèmes tiers de gestion de permissions, de mettre en place un système de gestion de permissions par objet. Et ça, ça tue. (Pour être exact, ce système était déjà présent dans l’alpha mais pas documenté du tout).

2.2 Les permissions pour les anonymes.

Encore une modification du système d’authent / droit d’accés, qui permettra au système tiers de gestion d’authenfication, de gérer les droits pour les utilisateurs anonyme. Cette nouveauté permet de centraliser et d’homogénéiser les choses.

2.3 le select_related () passe à la gonflette

Peut-être grâce au pouvoir du glaive ancestral, ou peut-être juste à un gentil codeur core-team django, en tout cas, maintenant, le select_related accepte les related_name en paramètre.

3- Conclusion

Et voilà, c’est ‘déjà’ fini… Mais bon, je trouve que ça fait déjà pas mal de nouveautés (et de nouveautés utile en plus) pour une version beta. Pour la roadmap, rien n’a changé :
RC autour du 2 mars
version finale autour du 9 mars.

Il ne me reste donc plus qu’une seule chose à ajouter : Vivement le mois de mars.

je dois bien avouer que j’avais prévu d’insérer ici un proverbe concernant le mois de mars… mais malheureusement après une rapide recherche google j’ai eu le choix entre :

  • Pluie de mars ne vaut pas pisse de renard.
  • Mars qui rit malgré les averses prépare en secret le printemps
  • Au mois de mars, pluie et vent fou, sur nos gardes tenons-nous.
  • Mars en brume, mois de mai enrhume.
  • D’autre que je vais vous épargner.

Je ne finirais donc pas par un proverbe de mars. Tant pis.

Feb 042010
 

J’aime lire du code des autres. Enfin quand c’est du code de qualité, bien entendu. (Parce que question code bien pourri… j’ai été servi, plus qu’à mon tour, sur les différentes reprises de projets complètement à la ramasse auxquels j’ai eu la joie de participer).

Pourquoi j’aime lire du code bien écrit ?

Parce que tout simplement, j’apprend beaucoup en faisant cela. Et parfois, je découvre des ‘trucs’, que je trouve tellement élégant que je me dis ‘mais comment je pouvais faire sans’.

C’est une des raisons qui fait que je me fais assez régulièrement des sessions de lecture du code du django. La dernière remonte à .. hier soir.

Et j’y ai découvert une écriture que je trouve très élégante. C’est celle-ci :

def func(foo):
    return foo

toto = func(arg) or "bip"

A quoi sert-elle ? elle permet de remplacer le code suivant :

def func(foo):
    return foo

bar = func(None)
toto = bar if bar else "bip"

Une petite explication en bon français ? (pas forcément utile, j’en conviens, vu la simplicité de la chose, mais bon).

Imaginons que l’on veuille donner une valeur à une variable. Cette valeur peut-être soit la valeur de retour d’une fonction, soit si le code de retour est None (ou False) une chaine de caractère. Sans le petit truc avec or, on est obligé d’écrire le code que j’ai mis juste au dessus et qui utilise une variable temporaire (et un opérateur if .. else .. que je n’aime pas trop).

Voila, je suis sur que je n’ai rien appris à personne, mais bon, on ne sait jamais.

Jan 312010
 

Oui, je sais, je devrais renouveler un peu mon stock de blagues. Parce que mettre des cong à la fin de tout et n’importe quoi, pour singer l’accent marseillais, ça commence à …. Je sais. (j’en profite pour vous rappeler que le 24 et 25 avril, il va y avoir la DjangoCong à Marseille, une super convention fr où ça va parler django, encore et encore).

Et, oui, la django-app du mois de janvier arrive vraiment sur le fil, à quelques heures du dépassement de délai. Mais faudra dire ça au crétin qui a décidé qu’une journée ça ne serait que 24h et qu’il fallait obligatoirement dormir chaque nuit, ou presque … (bordeille comment je vais faire en février moi..)

Enfin, je reste dans les délais, c’est le principal. Et pour le deuxième mois consécutif, je fais une petit entorse au principe de cette catégorie, vue que ce mois-ci, encore une fois, ce n’est pas une vrai django-app que je présente, mais un ‘simple’ module python.

0- Et ça sert à quoi  ?

En fait tagcon est ‘inutile’ (donc indispensable vous allez me dire… ne niez pas, je vous ai tous entendu le dire…). Il sert simplement à faciliter l’écriture des templatetags (et surtout des templates tags à argument). On pourrait se dire que c’est assez inutile. Mais en fait, ça permet de gagner un peu de temps et de réduire d’une façon assez intéressante la taille de son code. Donc..

Un petit exemple, tiré de la doc, parce que comme me l’a fait remarquer daks (dont je conseille le blog, qui vient d’arriver dans mes RSS) , ça manque :

from django.contrib.auth.models import User
from django.template import Library
import tagcon

register = Library()

class UserListTag(tagcon.TemplateTag):
    limit = tagcon.IntegerArg(default=10)

    def render(self, context):
        self.resolve(context)
        yield "<ul>"
        for user in User.objects.all()[:self.args.limit]:
            yield "<li>%s</li>" % (user.username,)
        yield "</ul>"

1- Où on le trouve, comment on l’installe, tout ça quoi ?

Alors alors, sur le github qui va bien. (une petite remarque qui a rien à voir, je préfère de loin bitbucket à github … et pas juste parce que mercurial c’est mieux que git).

Une fois qu’on a récupérer le package (par fork si on a un compte github ou avec un petit tar.gz), il y a deux façon de l’installer:

  • un petit python setup.py install
  • en copiant directement le fichier base.py qui se trouve dans tagcon.tagcon (dans ce cas là on pourra renommer base.py en tagcon.py).

2- La documentation.

Alors là… Il n’y a pas grand chose. Un fichier readme qui donne un petit exemple et c’est tout. Après, il vous faudra lire les tests et le fichier source directement. Ce n’est pas donc super fourni, mais d’un autre coté, vous me direz que le module est tellement simple que ça suffit. Et vous ne seriez pas loin d’avoir raison. Mais bon.

3- En conclusion

Au départ, quand j’ai découvert ce petit module (je crois que je dois, encore une fois, remercier benoitc pour cela), je n’étais vraiment pas convaincu de son utilité. Il me semblait presque inutile et puis un peu restrictif en obligeant à utiliser la fonction render (alors que j’ai plus l’habitude d’enregistrer les fichier template html avec le décorateur inclustion_tag). Mais au final, on se ren compte que ça simplifie pas mal les choses et on y prend rapidement goût.

4- dernier paragraphe complètement HS.

Ma liste de django-app à tester est loin d’être vide (avec entre autre piston, haystack,..) et ça ne risque pas de changer, vu que chaque semaine, je découvre une nouvelle app. Toutefois, j’écris ces billets avant tout pour qu’ils soient utile . Donc, si vous connaissez des app que vous adorez et que vous aimerez faire découvrir à tous. Laissez moi leur nom en commentaire et je m’efforcerais de les tester.

 Posted by at 18:23
Jan 242010
 

Voilà le premier épisode de ma contribution à Polar Geek. Je sais, c’est très court. Mais ce n’est que le premier épisode, une petite scène d’ouverture pour présenter les personnages. Et puis c’était histoire de me mettre en jambe, avant d’attaquer les choses sérieuses. J’espère en tout cas que ce premier épisode vous plaira (et les suivants encore plus). Allez hop, place à Polar Geek (j’espère trouver rapidement un nom pour cette histoire) :

Je déteste les matins, et encore plus les lundi matins. Surtout que depuis peu, pour réduire les coûts, j’ai installé mon bureau dans mon petit chez moi. Je ne peux donc même plus rester à trainasser en nuisette le lundi matin. Bon d’accord, je ne mets que des pyjamas. Mais le problème reste le même. Le lundi matin est, j’en suis certaine, le premier des cercles de l’enfer. Une espèce d’avant goût de ce qui attend les méchants. Du coup, je croise les doigts pour avoir le droit de faire la bise à Saint Pierre.

Voilà à peu près les pensées qui me trottaient la tête ce matin là. Toute à ces joyeuses pensées, je regardais le temps passer en discutant sur IRC, d’un sujet hautement important : est-ce qu’il était plus viril de dire «pain au chocolat» ou «chocolatine». Qu’une fille parle de virilité, ce n’est pas commun vous allez me dire. Et vous aurez raison. Mais j’ai tendance à oublier que je suis une fille. Et puis une fille qui vit seule avec ses ordinateurs et des peluches de petits démons ou de pingouins, ce n’est de toute façon pas commun. J’étais donc en train d’occuper mon temps d’une manière très instructive lorsque la sonnette de l’immeuble sonna.

«Oui ?», demandais-je, en essayant d’avoir l’air heureuse de répondre. Je sais, je suis d’une inventivité rare lorsque je parle à d’autres personnes, mais je vous l’ai déjà dit, c’était un lundi matin.
«Je viens voir A. Oscar», me répondit sèchement une voix d’homme, un brin essoufflé.
«Je vous ouvre, c’est au cinquième mais l’ascenseur est en panne», lui répondis-je avec toujours autant d’imagination, tout en lui ouvrant la porte.

Quelques dizaines de marches plus tard, j’entends mon visiteur, qui totalement haletant, frappe à ma porte. Je suis très fière de ma porte. Une belle porte blindée, vert pisseux mais sur laquelle sont collées, en lettres dorées, les mentions «A. Oscar» et juste en dessous «détective informatique». J’ai à chaque fois l’impression, lorsque je rentre chez moi, que je suis dans un vieux polar américain et que lorsque je rentrerais dans mon appartement, Bogart se retournera en me lançant un langoureux t’as de beaux yeux tu sais avant de… Enfin, voilà, j’adore ma porte. Mais revenons à mon visiteur qui entre, tout essoufflé. La quarantaine bien tassée, il détaille mon salon, contemple avec un petit air méprisant ma collection de figurines en vinyle puis me lance «Bonjour, je suis venu voir Monsieur Oscar, pourriez-vous m’annoncer ?».

Tu l’as bien cherché pourriez-vous me dire. Et vous auriez raison. Ce n’était d’ailleurs pas la première fois, loin de là, que l’on me prenait pour la secrétaire de Monsieur Oscar. Pourquoi est-ce que je n’écrivais pas mon prénom en toutes lettres alors, pourriez-vous continuer à me demander. Ne vous méprenez pas, je n’ai pas honte de mon prénom, même si Alana ce n’est pas très commun (que voulez-vous, il doit y avoir peu de petites filles dont le papa admire Alan Turing), j’ai appris à l’aimer mon prénom. Non, il semblerait simplement que la plupart des gens qui pourrait avoir besoin de mes services pensent qu’une fille ne peut pas être compétente. Ce qui m’oblige à ruser. Mais qui du coup m’énerve lorsque l’on me prend pour la secrétaire. Je me rendis d’ailleurs compte que je l’étais, énervée, lorsque je pris conscience que je tapotais machinalement le filtre d’une de mes Lucky Strike contre mon clavier. J’essaie d’arrêter de fumer voyez-vous. Et mon patch de nicotine à moi, c’est de tapoter sans fin le filtre d’une Lucky contre mon clavier. Mais revenons à ce brave homme, que je fais patienter depuis quelques temps maintenant et qui visiblement commence à s’énerver, là debout dans mon salon bureau.

«Excusez-moi Monsieur, une affaire urgente à régler, permettez-moi de me présenter Alana Oscar, détective» (j’adore prononcer ce mot, à ce moment là, ça me donne des petits frissons partout). Je continue, sans lui laisser le temps de me couper. «Non ne vous excusez pas, les gens font souvent l’erreur, mais que voulez-vous, il se trouve que parfois un prénom féminin fait peur quand on parle d’informatique. Mais asseyez-vous et dites moi pourquoi vous êtes venus».

Mon bonhomme, ayant eu le temps de se reprendre son souffle, s’assit dans mes fauteuils décoration Star Wars et lâcha une seule phrase, d’un ton catastrophé. «Nous nous sommes fait pirater». C’est toujours pareil avec les clients, au moindre pépin, c’est la faute aux méchants pirates d’Internet. Aucune autre explication ne leur vient à l’esprit, non, c’est un piratage. J’essayais de cacher mon petit sourire amusé.

«Vous voulez un café pendant que vous me donnerez un peu plus de détails ?».

To be continued…

Jan 232010
 

Je l’ai déjà dit, et je le redirais, il peut être, à mon avis, très interagissant d’utiliser les mécanismes des jeux vidéos pour améliorer l’expérience utilisateur des logiciels non jeux vidéos. Je vais essayer dans ce petit billet de mettre en relation les types de joueurs avec des idées de trucs à intégrer dans les applis.

Le classement de types de joueurs que j’utiliserais est le classement du Bartle Test of Gamer Psychology, classement utilisé dans les MMORPG (et que l’on retrouvera aussi dans toute première partie de manuel du maître de n’importe quel jeu de rôle, avec parfois des noms différents).

Il classe les joueurs suivant une pondération de 4 catégories:  achiever, explorer, socializer, killer. La somme des quatres ‘notes’ d’un joueur doit faire 200 et aucune ne peut être supérieure à 100. Vous pouvez donc être le joueur suivant : 55 % killer, 75 % socializer, 20 % achiever et 50 % explorer. Ce doit être, de mémoire, presque mon profil de joueur. Voyons voir un peu plus en détail ce que signifie ces catégories (pour une description précise, je vous renvoie à la très complète page Wikipedia sur le sujet).

1- Les types de joueurs

1.1 Le collectionneur compulsif (aka l’achiever)

Le joueur collectionneur adore par dessus tout… Collectionner. C’est logique. Il aime réussir à avoir tous les succès, même les plus inutiles ou les plus difficile à avoir. Mettez en place un système de badges et il passera ses journées à les traquer et ce jusqu’à avoir la veste qui ressemble à un général de l’armée. Et si vous voulez vraiment lui faire faire nuits blanches sur nuits blanches, prévoyez un système très fourni d’équipement. L’achiever se sentira obligé d’avoir tous les sets possibles d’armes et d’armures, surtout les plus puissants.

1.2 L’Indiana Jones du dimanche (aka l’explorer)

Lui, ce qu’il aime c’est la sensation grisante de la découverte, le frisson de l’exploration, la montée d’adrénaline du mystère. Il passera des nuits blanche à voyager dans l’univers du jeu, parcourant chaque colline, cartographiant chaque grotte, espérant toujours arriver dans une zone de jeu vierge, ou aucun autre joueur n’aura encore mis les pieds.

1.3 Le “putain ferme la, on veut aller nettoyer l’instance, marre des blabla à la taverne”(aka le socializer)

Lui, ce qui l’intéresse, c’est de papoter. De raconter une histoire commune avec d’autres joueurs dans lequel il inclura son personnage. Il aime les titres parce qu’il peut les intégrer dans l’histoire de son personnage. Il adore pouvoir décider de chaque infime détail de son avatar et passera des heures sur le chat de son MMORPG à balancer des emotes et à offrir des tournées dans les tavernes des différentes villes, stations spatiales, bases sous-marines que comporte le jeu.

1.4 Le petit faquin de merde qui vous a lâchement démoli en vous attaquant dans le dos (aka le killer)

Lui, il n’a qu’un but, larder les autres personnages de coups de dagues, épées magiques, balles de snipers, sorts de boule de feu. Ce qui l’intéresse c’est le duel. Le défi de se mesurer à d’autres joueurs et de tenter de les dominer pour pouvoir ensuite crier un ‘haha’ triomphant à son écran que sa malheureuse victime ne verra pas (ce qui a pour effet de le faire passer pour un fou). Suivant les jeux il passera donc de longues heures à s’entrainer pour devenir le meilleur ou de longues heures à chercher le meilleur équipement possible pour être sûr d’écraser ses ‘concurrents’.

2- Et maintenant, je fais quoi avec mon appli là ?

Ok, ok, j’ai compris. Vous voulez savoir à quoi ça sert de savoir de connaître les différents types de joueurs. C’est tout simple, les joueurs qui sont des achievers dans le jeu vidéo, se sont des achievers aussi quand ils utilisent un logiciel quelconque. Donc en intégrant dans ledit logiciel quelconque des concepts qui plaisent aux achievers dans les jeux vidéos, vous leur ferrez plaisir. Et ils utiliseront avec plus de joie votre appli.

2.1 Ce qui plait aux achievers

Là, c’est assez facile. Et ça va presque être de la redite avec mon précédent billet. Les joueurs achievers adorent les système de succès. Un petit système avec des badges suivant les choses qu’il fait et vous l’avez définitivement conquis. Et là soyez malin. Mixez les types de succès. Par exemple, mettez en place un système de succès qui contient :

  • des succès reliés à ce que font vos utilisateurs (le succès du profil rempli, le succès du tuto d’apprentissage fini, le succès de la lecture de l’aide, etc.),
  • des succès liés à l’assiduité (le succès des 1 000 heures passées sur l’appli ou des 10 000 cellules de tableur remplies),
  • des succès inconnus (dans le panneau des succès ils sont notés comme non réussis, mais on ne connait ni leur nom ni les modalités pour les débloquer).

Vous verrez que vos utilisateurs achievers vont adorer.

2.3 Explore ma nouvelle appli

Pour les explorateurs, c’est déjà plus difficile. Après tout, une appli, c’est une appli. Pour les applis lourdes, je n’ai pour l’instant pas d’idées. Pour les applis web par contre, j’ai quelques pistes. En voilà déjà une. Des pages vers du contenu nouveau qui ne se débloquent qu’à certaines heures ou qu’après avoir résolu une énigme ou avoir accomplis certaines actions dans un ordre bien précis. Bien entendu il faut que les utilisateurs soient au courant que ces zones vierges existent et qu’ils aient des pistes pour arriver à y accéder. Mais une mise en pratique d’un tel système, je suis certain que cela tiendra en haleine vos utilisateurs explorateurs.

2.4 Discute avec les autres, soit sociable

Bon alors pour les socializers, rien de plus facile, et puis tout est déjà là. Permettre à vos utilisateurs de discuter entre eux, d’échanger, de commenter. Quelle application web ne le fait pas, aujourd’hui ?  Par contre pour les applications lourdes, c’est déjà beaucoup moins le cas. Et c’est dommage. Intégrer des espaces de discussion (comprendre des forums light) dans les applications lourdes, même si c’est pour les limiter aux questions/réponses que peuvent avoir les utilisateurs, ce serait déjà un grand pas, à mon avis.

2.5 Et ma grosse épée, tu veux que je…

Là aussi, pour les killers, à priori, ce n’est pas super facile de mettre en place des mécanismes leur rappelant leur pratique du jeu vidéo (à moins d’intégrer un fps dans votre appli, qui se lancera grâce un raccourci clavier tarabiscoté). On peut toutefois en se rappelant que pour la plupart des joueurs de ce type, ce n’est pas le plaisir d’ennuyer les autres qui les motivent, mais la saine compétition. Mettre en place des systèmes des highscore peut donc être une façon de motiver les joueurs de ce type là.

3- En conclusion

Je vais me répéter, encore. Je vais insister sur le fait que se mettre à la place de l’utilisateur lorsque vous concevez une appli, c’est primordial.

Parce que vos utilisateurs sont peut-être obligés d’utiliser votre appli (cas d’une appli métier dans le cadre d’une entreprise). Mais ils ne le sont peut-être pas. Et même s’ils le sont, si vous voulez limiter les appels de mécontentement et autre ennuis, il faut leur faire aimer votre appli. Il faut que lorsqu’ils lancent/se connectent, ils soient impatients, joyeux. Cela ne se suffit pas/plus qu’une application soit fonctionnelle. Il faut aussi qu’elle soit plaisante, un minimum tout au moins.

Pour presque finir, je rajouterais, une dernière chose en tout cas dans ce billet, que l’on peut réutiliser du monde du jeu vidéo. C’est l’attrait de la nouveauté, le rajout de contenu. Là aussi, c’est bien plus facile avec une application web. Mais bon, c’est pas non plus impossible avec des applis lourdes. Pensez à ajouter du contenu dans vos applis. Ici le contenu pourrait être de nouvelles features ajoutées petit à petit, de temps en temps. Ou alors de nouveaux badges/succès. Ou de nouveaux accès cachés. Mais il faut penser à faire vivre son appli, à maintenir ses utilisateurs sous le charme.

Mais, et je finirais presque ainsi, ne me faites pas écrire ce que je n’ai pas écrit. C’est à dire que rajouter des mécanismes venus du jeu vidéo, c’est bien. C’est comment dire, la cerise sur le gâteau. Si l’application en dessous est pourrie ou ne sert à rien, vos utilisateurs fuiront ou râleront très fort et continuellement. C’est d’ailleurs la même chose pour les jeux vidéos. Un mauvais jeu vidéo avec le meilleur système d’achievement du monde, personne n’y jouera bien longtemps (ou alors votre ‘habillage’ fera que vous retiendrez vos utilisateurs un peu plus longtemps, mais ça ne durera pas).

Enfin, et là, c’est vraiment la fin de mon billet, la plupart des mécanismes de ‘rétention du joueur’ se basent, il faut bien l’avouer, sur l’égo du joueur. Mais bon, faites attention à ne pas abuser de ces mécanismes. Personne n’aime être pris pour un con.

Jan 142010
 

Je sais, je sais. Ce billet ne sert à rien, ce billet n’est qu’un gros troll tout poilu et j’aurais mieux fait de ne pas l’écrire. Et en plus, ce n’est même pas encore vendredi (mais presque, jeudi, c’est presque comme un vendredi qui serait un peu en avance).

Mais tant pis. Et puis il faut bien écrire, de temps en temps, des billets engagés, des billets qui dénoncent.

Le seul et unique but de ce billet est donc d’étayer l’hypothèse, fortement plausible, que le PHP soit le WoW du dev web. Pour cela, on étudiera la question suivant deux angles. Tout d’abord, en se concentrant sur les ressemblances (ou pas) du PHP et de WoW puis ensuite en disséquant les comportements des utilisateurs, joueurs de WoW ou codeurs PHP (et non, n’insistez pas, ce billet ne donnera pas lieu à une dissection de joueurs de WoW, non, après c’est pas vous qui nettoyez hein…).

1- WoW et le PHP

1.1 WoW

WoW est un MMORPG, tout le monde le sait.

Il a été conçu et lancé dans un but et un seul, démocratiser le jeu en ligne. Pas parce que Blizzard a reçu la parole divine du dieu des MMO et a décidé d’en devenir le prophète mais tout simplement parce qu’avec une pratique du jeu online démocratisée et rentrée dans les mœurs, Blizzard avait plus de chance de se faire tout plein de sous. Et oui… C’est triste, mais WoW ce n’est qu’une grosse machine à vous prendre vos sous.

Réduire la barrière à l’entrée pour le joueur moyen, voire même pour le non joueur, même s’il a 12 ans. Je suis sûr que cette phrase était gravée dans le marbre sur le fronton de chacun des openspaces de Blizzard.

1.2 Le PHP

Remontez dans le temps, non non, stop, pas jusque dans les années 80… Revenez juste après le début des années 90. Rappelez-vous avant 1995, quand pour dev du web c’était soit du Perl, soit des choses pires encore…
Autant dire qu’il n’y avait pas beaucoup de codeurs web. Et là est apparu le PHP. Un langage volontairement simple (mais non j’ai pas dit simpliste, tss, tss), facile à comprendre et à apprendre. Un langage pour mettre le développement web à la portée de tout le monde, pour que n’importe qui puisse en 20 minutes avoir des trucs qui s’affichent dans son navigateur (tiens, ça me rappelle un peu le pourquoi de la création du VB… Je dis ça…).

1.3 Bilan

Sur le point des ‘logiciels’ en eux-mêmes, il semblerait bien que mon hypothèse se valide. Dans les deux cas, on voit bien qu’il y avait une volonté de démocratisation qui se traduit par un abaissement de la difficulté (mais non je ne pense pas nivellement par le bas, mais non…) de prise en main et d’apprentissage.

2- Les utilisateurs

2.1 Le joueur de WoW

Le joueur de WoW ne connaissait pas les MMORPG avant le jour qui restera dans les mémoires comme LE jour, le 23 novembre 2004, jour de la sortie de WoW. Ce jour là, ce fut la révélation. Il découvrit le monde merveilleux du MMORPG et ses gentils habitants appelés Leg0lasdu33 ou SoRrOn ou encore BobQuiLol… Notre joueur ébahi découvrit que l’on pouvait parler SMS ailleurs que dans ce qui s’appelait alors les textos.

Depuis cette découverte, il joue. Encore et encore. Jamais lassé, jamais déçus, parce que WoW, waouh, c’est trop bien. Alors oui parfois, il faute. Il se laisse aller à écouter les sirènes du marketing. Et il achète un autre MMO. Il l’installe, le lance et la première remarque ‘Mais… C’est pourri ce jeu, c’est pas comme dans WoW‘. Et finalement, au bout de quelques heures, voire au maximum quelques jours, il désinstallera ce jeu ‘complètement raté‘, parce que ‘pas comme WoW‘. Il retournera ensuite jouer à WoW, parce que WoW, c’est bien, vu que c’est comme WoW.

2.2 Le codeur PHP

Le codeur PHP a appris la programmation avec le PHP. Par lui même, grâce aux tutos qu’il a trouvé sur le net ou alors en cours. Il ne connait pas d’autres langages que le PHP, parce que de toute façon le PHP c’est le mieux, c’est le langage le plus utilisé sur le web et que ‘ceux qui font pas du web, ils ont rien compris, c’est des has been‘. Algorithmique, complexité des algorithmes, POO ou design pattern, c’est du chinois pour lui. Ce qui compte c’est que les coms de son dernier site 2.0 presque 3.0 s’affichent, et vite.
Parfois, tout de même, il est pris de curiosité. Alors il essaie un autre langage. Pour voir si quelque chose arriverait au niveau du PHP. Il y croit pas, mais ‘il faut savoir garder l’esprit ouvert‘ dira-t-il doctement aux autres codeurs PHP avec qui il discute. Ça peut être Ruby, Erlang, Python, ou n’importe quoi d’autre. Mais invariablement, au bout de quelques secondes, il s’exclamera ‘Mais… C’est pourri ce truc, c’est pas comme en PHP’ .. Et au bout de 4 ou 5 tests de “hello world”, parfois sans même essayer d’apprendre le langage en question, juste en ‘essayant’, il abandonnera et retournera se vautrer dans son PHP, parce que ‘décidément il y a rien de mieux que le PHP’‘.

2.3 Bilan

On le voit, nos deux populations sont très très similaires. Même réflexes, même façon d’envisager les choses qui ne sont pas ce dont ils ont l’habitude. Et très souvent le même argument pour essayer de vous convaincre à savoir ‘Tu sais, WoW c’est super bien, c’est pas pour rien que c’est le MMO le plus joué, hein, c’est parce que c’est le meilleur‘ ou pour le PHP  ‘Tu sais, php c’est le langage le plus utilisé pour le web, c’est pas pour rien, c’est parce que c’est le mieux‘. A croire que les codeurs PHP  jouent à WoW et inversement.

3- Bilan des bilans

Après une aussi brillante démonstration qui a prouvé que :

  • WoW était similaire au PHP,
  • que les utilisateurs avaient des comportement similaires,
  • que les usages étaient similaires.

On est bien forcé d’en déduire que oui, le PHP est bien le WoW du développement web. J’avais donc raison.

Pour ceux qui se demanderait quel légitimité j’ai pour faire cette étude, je leur répondrais que j’ai la légitimité d’une très longue pratique, à savoir :

  • 4 jours de test de WoW en août 2009 (merci le trial),
  • quelques mois de dev PHP, du pire type la modification de code existant, pour des projets clients.

Note de bas de page, pas en bas de page.

Il faut bien entendu prendre ce billet avec humour. Mais non très chers codeurs PHP et très chers joueurs de WoW, je n’ai rien contre vous. Certains de mes amis font d’ailleurs partie de vos cohortes (et parfois même, ils cumulent, eux, j’évite de les voir trop souvent, c’est mauvais pour ma réputation). Et puis rassurez-vous, il y a pire que vous, genre les joueurs de Dofus ou les codeurs Perl… Mais ceci est une autre histoire.