Nouveau blog

Et voilà, juste juste, vu que j’avais annoncé une deadline pour fin de week-end, j’ouvre un nouveau blog The Jdr-Mad blog. Un blog qui parle donc, de jeu de rôle. Et uniquement de jeux de rôle.
Pourquoi un nouveau blog ? Parce que le Mad Blog a pour vocation d’être un blog orienté, le plus possible, boulot et création d’entreprise. Et que donc je ne voulais pas partir dans tout les sens (c’est déjà suffisamment le cas en ce moment) en rajoutant une partie jeux de rôle. J’ai un peu l’impression que mes billets sur la création d’entreprise et les relations avec son banquiers perdraient de leur crédibilités si ils étaient à coté de billet d’avis sur DD4 ou Fading Suns. Je me fais peut-être des idées mais bon…

Et puis j’avais envie de tester une autre plateforme de blog que WordPress. Alors pourquoi pas blogger ? Ça sera l’occasion de voir ce qu’il a vraiment dans le ventre. A ce propos, je ne suis pas pour l’instant, super favorablement surpris.

L’édition est bof, l’interconnexion avec les autres services google pas forcément évidente, si je devais donner une note, ça serait, pour l’instant, peu mieux faire…

Enfin, je verrais dans quelques temps, après une utilisation prolongée, pour faire un billet, sur le mad blog, pour parler de mon expérience blogger.

En attendant, j’espère retrouver nombre des lecteurs du Mad blog, sur le Jdr-Mad blog.

(Note de l’auteur : ce post est publié sur les deux blogs, comment faire du contenu sans se fouler… 🙂 ).

Django-transmeta ou comment traduire son contenu sans se faire suer

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.

Piratage en blouse blanche (épisode 2)

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

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.

Ajouter ses filters perso aux filters builtins

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.

Unpacking de tuples dans les templates django

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 ?

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

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

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.

petit mémo python

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.