De l’intérêt des salons

Libertis est une des associations d’entreprise de PACA. C’est l’association des entreprises (prestataires,intégrateurs,éditeurs) qui font du libre. Bien entendu, en temps qu’entreprise, on y est adhérent. Et j’ai même l’honneur d’en être, depuis 6 mois et pour encore 1 an et demi, le président.

Depuis 3 ans,  (ha 2007, comme tu parais loin maintenant), Libertis organise un salon, le SPLLOS, (Salon Professionnel des Logiciels Libres et de l’Open Source). Cette année ce fut donc encore le cas. Cette année se fut un peu spécial parce qu’en fait le SPLLOS eu lieu au sein d’un ‘meta-salon’, le TopTIC, qui rassembla plusieurs salons en un seul. (j’aime bien le terme de meta-salon tiens).

Cette année, ce fut le 12 octobre, mardi dernier donc. Et ce fut, il faut le dire une réussite. Je serais presque tenté de dire, comme chaque année, mais on va croire que je flagorne. Bon allez, tant pis, je le dis. (Pour la petite histoire, cette année, nous avions décidé de faire différent, et il n’y avait pas un stand par entreprise dans l’espace SPLLOS mais un seul espace Libertis où se trouvait tout les membres et nous orientons les visiteurs suivant leur besoin, un stand collaboratif quoi).

Si je parle de cela ce soir, ce n’est pas seulement pour faire connaître Libertis et le SPLLOS (même si, en soit, cela serait une bonne raison), c’est aussi pour parler :
des raisons qu’une association peut avoir de monter un salon et celles qu’une entreprise peut avoir d’y aller.
Des raisons de ne pas monter un salon et de ne pas y aller

1  Coté Blanc

1.1 – Pour une association.

Bon alors là je parle plus spécifiquement d’une association d’entreprise, mais ça peut marcher pour tout les types d’asso.

Une asso monte un salon pour une raison principale. Sa légitimité. Pour qu’on la connaisse, qu’on sache qu’elle existe et qu’il faut la prendre en compte.

Parce que l’air de rien, monter un salon, c’est difficile, fatiguant, long, éprouvant. C’est des heures de réunions, des jours de coups de téléphones et de mails, des nuits d’angoisse.

Et au final, y arriver, et surtout surtout si c’est un succès, ça prouve de sa volonté et de sa force de travail. Ca donne de la visibilité. Et la visibilité c’est du poids.

Ca permet aussi de faire un peu de prosélytisme et de trouver de nouveaux adhérents. Et au final ça permet d’offrir un canal de communication à ses membres. Et au final c’est presque le plus important (surtout pour une asso d’entreprise), offrir des opportunités à ses membres.

1.2 Pour les entreprises

Il y a plein de raisons pour aller sur un salon. La première, qui est une mauvaise raison, c’est de faire du business à court terme. Parce que ça n’arrive pas souvent. Vraiment pas souvent. Parfois c’est le cas et alors c’est la cerise sur le gateau au chocolat, mais il ne vaut mieux pas compter dessus.

Pourquoi donc perdre du temps et de l’argent sur un salon ?

Parce qu’il y a plein d’autre raison.

1.2.1 La veille.

La première faire de la veille. Être exposant sur un salon, ça permet de voir tout ses concurrents, de juger de ce qu’ils font. Mais, je suis bien d’accord avec ce que vous êtes en train de penser, cette raison n’est pas suffisante pour y aller, surtout que cette veille, on peut la faire en temps que visiteur.

1.2.2 Rappeler que l’on est pas mort.

Ca peut paraître couillon, mais c’est comme ça. Etre sur un salon, ca permet de rappeler aux gens que l’on existe, que l’on propose des produits ou des services. Et peut-êre que dans six mois quand on recontactera un des prospects que l’on a croisé, il aura besoin de nos services et il se rappellera de nous. Sans compter qu’en temps qu’exposant, on peut espérer être présent sur les communications/mailing tout ça du salons.

1.2.3 Lancer un produit ou faire une annonce

Un salon est en effet l’endroit rêver pour lancer un nouveau produit ou service. (Il y aussi les bains douches mais c’est carrément pas le même budget). Ça permet d’avoir des retours assez important (en fonction du nombre de visiteur) et de faire un peu de buz rapidement. (Par exemple lors du SPLLOS, l’annonce de la création officielle du Groupe Pôle du Libre, un regroupement de 5 entreprises qui mutualisent locaux et moyens a été faite)

Plein de raisons donc, que ce soit pour une entreprise ou une association de participer ou monter des  salons.

Pour autant, tout n’est pas rose, tout n’est pas si merveilleux.

2 Coté Noir

2.1 Monter un salon, le supplice de tantale moderne

Mon titre exagère un peu. Mais il n’en reste pas moins qu’il faut avoir les nerfs bien accroché et être prêt à ne pas compter son temps.

Et il faut bien se rendre compte des risques. C’est quitte ou double. Réussissez et vous gagnerez une légitimité. Ratez vous, et personne ne viendra vous chercher au fond du caniveau où vous vous retrouverez.

2.2 Être exposant, pourquoi pas jetez ses sous par la fenêtre aussi.

Après tout, le retour à court terme est hasardeux. Et faire savoir que l’on existe, on peut le faire par d’autre moyen que celui là, qui est plutôt très couteux.

Sans compter que ‘faire’ un salon, ce n’est pas seulement passer une journée à rester debout à coté de son stand à serrer des mains et boire du mauvais café (je ne sais pas comment c’est possible, mais le café est quasiment tout le temps mauvais sur les salons, c’est un peu comme dans les gares)

Il faut le préparer le salon. Préparer les plaquettes, ce qui veut dire écrire les textes de celles-ci et les faire imprimer.
Préparer également ses totems, ses cartes de visites. Préparer les démos que l’on pourra faire aux visiteurs qui seront intéressés, les discours qu’on leur tiendra.

Et puis ne pas oublier de communiquer sur sa participation au salon. Pour que ses clients, ses prospects, tout le monde sache que l’on participe à ce salon là.

Beaucoup de temps et d’effort donc, pour un résultat plus qu’incertain, à se demander si cela vaut le coup.

3 Conclusion.

Personnellement, je suis assez partagé. Niveau Hybird, nous n’avons jusqu’à présent que fait très peu de salon. En fait cela se limite quasiment au trois SPLLOS. Vous me direz rien que les SPLLOS soit 3 salons en 4 ans d’existence, c’est pas mal. C’est vrai.

Mais je pense que c’est une décision qui doit se réfléchir, murement. Il serait crétin de partir du principe que les salons c’est toujours une perte de temps. Mais il serait tout aussi crétin (et beaucoup plus couteux) de passer son temps sur les routes à participer à tout les salons possibles.

A chacun de voir midi à sa porte donc…. 🙂

Les erreurs 404 et 500 en django.

Les erreurs 404 et les erreur 500 sont les deux erreurs les plus courantes sur le web. Quand on est pas en mode debug (vu que là c’est le mode debug qui gére le tout, avec une jolie traceback pour l’erreur 500), il faut s’occuper de l’affichage des dites pages.

Et par défaut, il n’y a pas de templates pour les deux erreurs. Même pas un petit template tout vide. Non rien. Ce qui fait que lorsqu’on génère une 404, comme django ne trouve pas le template, boum on se prend une 500 dans les dents, qui elle même râle parce qu’elle ne trouve pas son template.

Template 404 et 500

Les templates doivent se nommer, fort intelligemment 404.html et 500.html. Ces deux fichiers de templates doivent se trouver, c’est important, à la racine de votre répertoire contenant les templates.

Spécificités de la 404

il sera passé une variable à votre template 404 , request_path , qui contiendra l’URL qui a généré la 404. Vos contextes processors seront également appelés et donc vous pourrez les utiliser dans votre template.

Spécificités de la 500

Il n’est rien passé au template 500, histoire de ne pas, potentiellement, aggraver les problèmes, pas une seule variable.

Les handlers

Il est possible que redéfinir des templates ne vous suffisent pas. C’est peut-être fort improbable, mais possible. Ce cas là a été prévu. Il vous suffit de définir vos views spécifique et de enregistrer dans les deux handlers qui vont bien à savoir handler404 et handler500.

Vous voilà maintenant paré. Amusez vous bien avec vos templates persos de page d’erreur.

XMPP, cas d’utilisation et perspectives.

Parmi les commentaires rattachés à mon premier post parlant d’XMPP, il y en a eu un me demandant de présenter des exemples d’utilisation d’XMPP par un programme python. J’avais promis de le faire. Avec un certain délais, pour ne pas dire un délai certain, je vais essayer de répondre à cette demande en la généralisant. A savoir : à quoi ça peut servir xmpp pour un programme. Et comme je suis bavard, je finirais en me déguisant en madame soleil et en donnant mon avis sur le futur de l’utilisation d’XMPP.

XMPP, oui mais on peut faire quoi avec ?

La première chose à savoir pour répondre à cette question, c’est que le protocole XMPP c’est bien bien plus qu’un protocole de messagerie instantanée.

La discussion vocal est sensée être gérée (je dis sensée parce qu’à ma connaissance le support de cette fonctionnalité est assez ‘en mode alpha). L’envoi de fichier également, mais c’est un classique de l’IM ça.

Ce que l’on sait moins c’est qu’un mécanisme de publication très complet est gérée (PubSub) qui permet à des auteurs de publier du contenu et d’en limiter l’accès et à des lecteurs de lire le dit contenu. Et comme on est sur un fonctionnement intelligent (et connecté) il n’y a pas besoin de faire comme avec le RSS, c’est à dire d’avoir des lecteurs qui se connectent toutes les N minutes pour voir si il y a un nouvel article à lire. Là non, les lecteurs se connectent au serveur XMPP qui les notifiera du fait qu’un nouvel article est lisible, quand cela sera le cas.

Il existe également des mécanismes de data form, pour envoyer des ‘formulaires’ (comme des formulaires web quoi) entre deux points xmpp.

Plusieurs mécanismes de lancement de commande, que ce soit par xml-rpc ou avec une XEP (les XEP sont un peu les RFC du XMPP) qui spécifie comment un noeud XMPP peut demander à un autre nœud de lancer une commande et comment cet autre noeud peut ensuite renvoyer le résultat.

Et c’est loin d’être tout, il en existe tout plein d’autre de XEP, si la liste vous intéresse vous la trouverez ici : http://xmpp.org/extensions/

Ok, mais pour faire quoi au final ?

Parce qu’avoir un protocole qui fait plein de choses, c’est bien. Savoir quoi en faire, c’est mieux. Bon là évidemment vous n’êtes limités que par votre imagination, après tout, je ne vais pas pouvoir vous faire la liste exhaustive de toute les choses que vous pouvez faire avec XMPP.

Mais, parce que je suis gentil, je vais vous donner quelques exemples.

Le plus facile, c’est bien entendu, lorsqu’on développe un programme qui intègre de la messagerie instantanée. Plutôt que de perdre du temps à réinventer la roue, autant utiliser un truc qui est éprouvé. (je me répète peut être, mais comme exemple parfait on peut citer Eve Online qui utiliser xmpp pour le chat intra jeux).

C’est loin d’être la seule utilisation possible. Personnellement, je l’utiliserais dans tout les mécanismes de communication client / serveur qui n’ont pas un besoin ultime de non latence. Il est certains qu’envoyer les déplacements des joueurs par XMPP, dans un fps ne serait pas une excellente idée. Mais dans tout ce qui se rapproche à un jeux de stratégie, gestion, jeux de rôle en tour par tour. Op, du xmpp. (par exemple imaginons la version informatique du jeux ‘Les colons de Catane‘, c’est en XMPP sinon rien, de même pour tout les jeux web qui fleurissent aujourd’hui, une version non web serait à faire en xmpp).

La je parle de jeux, mais ça pourrait s’appliquer à bien d’autre domaine. Communication entre un programme opérateur et les automates qu’il contrôle par exemple. (imaginons un truc simple, un logiciel qui doit contrôler des automates qui sont chargés de fermer / ouvrir des vannes et qui peuvent donner leur statuts courant, où alors des daemons systèmes qui logueraient leur activités à travers du XMPP).

On peut (et on devrait) utiliser le XMPP à chaque fois que l’on se retrouve devant un mécanisme de publication / consultation de contenu. (comment ça je parle du web classique ? Mais pas du t… si en fait si).

Le futur et les perspectives du XMPP

Je vous le dis, et vous pouvez me croire, on aura jamais besoin de plus de 640Ko de mémoi… Mais qu’est ce que je dis moi là?

Le futur du XMPP. J’espère qu’il sera radieux. J’espère que ce protocole (utilisé massivement par google d’ailleurs) se développera et remplacera peu à peu les choses sous optimales que l’on fait au jour d’aujourd’hui.

Je trouve par exemple, complétement hallucinant tout le mécanisme de rss aujourd’hui. Avec les problèmes qu’impliquent le fait de consommer des ressources pour rien dans 80 % du temps (à savoir quand votre client RSS va vérifier que non, il n’y a vraiment pas de nouvel article à lire sur les 343 flux rss que vous suivez).

J’espère vraiment le développement futur d’une sorte d’XMPP-Web, avec des navigateurs xmpp qui se connectent sur des sites web xmpp. Des sites XMPP qui mixeront alors d’une façon complétement naturelle de la gestion de contenus, de la discussion entre lecteurs (sans devoir passer par des rajouts en js pour gérer un chat sur la page web..) , des parties du sites ludiques, etc etc ..

Si j’ai un espoir, c’est vraiment celui-là. Un glissement du HTTP-Web au XMPP-web, même si cela doit passer au départ par des plugins pour que les navigateurs HTTP puisse browser des sites XMPP.

Jeux vidéos et iphone.

Ca fait quelques temps que je n’ai pas parlé d’autre chose que de python et de django ici. Ors je ne veux pas que ce blog devienne seulement un blog technique. Voici donc le retour des billets non directement technique. Pour commencer un premier billet sur les jeux vidéos et l’iphone.

Parce que d’un j’ai un iphone et que de deux, parler de jeux vidéos c’est rigolo (et puis que le petit jeux iphone http://www.canabalt.com/  que l’on m’a fait découvrir hier aprés-midi m’a donné l’idée de ce billet).

Les types de jeux que j’aime sur iphone (ou que j’aime pas)

J’ai testé pas mal de jeux sur l’iphone, la plupart étant des jeux gratuits, il faut bien l’avouer mais j’ai aussi acheter quelques titres, pour pouvoir les tester.

Au final, sur iphone en tout cas il y a 2 grand types de jeux parmi ceux proposé actuellement et auxquels j’aime jouer. Les casuals, que ce soit des casual arcade  , réflexion ou puzzle ou les pseudo mmo. Je m’expliquerais ensuite sur les pseudo mmo.

Pour les casual, tout le monde le sait que le mobile c’est avant tout et surtout du casual. Mais bon n’empêche que j’aime bien y jouer (et que j’y passe parfois un temps certain).

Pour les pseudo mmo, j’en ai testé pas mal (dont pas mal fait par storm 8 ) et même si ils reprennent assez souvent les mêmes grands principes, très limités, il faut reconnaître qu’ils sont addictifs.

Rapidement, une petite liste des principes de ces pseudos mmo :

  • une interface texte / icônes,
  • des bâtiments à construire pour avoir des ressources,
  • des unités à construire,
  • des missions à faire (sachant que faire une mission c’est cliqué sur le bouton Go ou Do a coté du titre de la mission,
  • défier les autres joueurs dans des combats (sachant que la aussi c’est bien souvent limité à un bouton fight à coté du pseudo du joueur et que lorsqu’on clique dessus le combat se résout automatiquement).

Pour le reste, j’avoue ne pas accrocher du tout au fps sur iphone (bon ok Wolfenstein c’était sympa, parce que ça faisait remonter tout plein de souvenirs, que la prouesse technique était cool tout ça, mais pour y jouer pour de vrai : bof bof ), ni au jeux de voitures où en plus il faut incliner l’iphone pour jouer. D’ailleurs pour moi, en tout cas dans les jeux actuels, l’utilisation de l’inclinaison de l’iphone est bien souvent le moyen le plus rapide de plomber un jeux. (A part pour les jeux de type planche avec des trous, où il faut faire parcourir un chemin à une bille en évitant les trous). Pour les jeux de voiture (ou bateau ou autre), c’était carrément chiant. Ce petit constat me permet de passer à mon deuxième point :

Comment on peut jouer, sur un iphone ? (ou, Où je met mes doigts, y a pas de croix directionnelle sur ce .. de truc)

Donc, j’ai déjà dit que pour moi, utiliser les senseurs d’inclinaisons pour un jeux iphone était une mauvais idée, sauf si l’utilisation de ses senseurs est indispensable au gameplay du jeux (cf mon exemple du jeux de la planche à trou).

Mais qu’est ce qu’il reste alors ?

Il reste :

  • un écran tactile
  • un micro
  • des boutons de volumes.
  • Un casque oreillette avec une télécommande

Le micro.

Là c’est comme pour les senseurs de déplacement. Il faut un jeux construit autour de cette interaction. Sachant que l’on peut l’utiliser soit pour récupérer des sons dans un jeux musical ou vocal ou qu’on doit pouvoir l’utiliser pour capter des ‘rythmes’ de tapotage.

Les boutons de volumes.

Je n’ai pour l’instant pas vu de jeux les utilisant comme contrôle, je me demande du coup si c’est possible de s’en servir, mais je ne vois vraiment pas de raisons qui empêcherait de tirer parti de ces boutons là.

L’écran tactile.

Lui, il a eu droit à tout :

  • La croix directionnelle redessinée ou réinventée (j’ai souvent vu des gros ronds qui symbolisait une croix directionnelle avec 4 ou 8 zones de pression/contrôle réelles, exemple dans minigore) et qu’on utilise à travers l’écran, le tap sur l’écran n’importe où pour faire une action (comme dans canabalt)
  • les zones ’boutons’ appuyable ou cliquable pour tirer par exemple.
  • Les ‘scrollbar’ sur les cotés pour accélérer  ou avancer, reculer.

Personnellement j’ai une préférence pour le moins de contrôle possible, et positionnés soit dans les coins soit en barre verticale sur les cotés.

La télécommande du casque

Est-elle utilisable dans un jeux ? Peut-on utiliser les séquences de clic sur la télécommande pour interagir avec un jeux ? Je me demande. Le problème serait de tenir l’iphone tout en cliquant comme un barge sur sa télécommande….

Les jeux qui manquent (comprendre que j’aimerais avoir)

Les vieux jeux

L’iphone est pour moi, une plateforme idéale pour remettre les vieux jeux au goût du jour. Pourquoi ? Parce qu’ils étaient juste délicieusement addictif, avec des graphismes hum, simple on va dire et un nombre d’interaction relativement limité.

Que ce soit de l’arcade comme :

  • Hocus Pocus
  • Secret Agent 1 , 2 ou 3
  • Duke nukem 1
  • commander keen

des points and click comme :

  • les discworld
  • curse of enchantia

des beat them all (genre comic zone ou double dragon)

ou des très casual comme frogger , oilcap , lemmings,

ou même, on va me jeter des pierres, mais des rogue-like comme nethack, angband ou les wizardry.

Les jeux de gestions

Une pincée de Simcity, un soupçon d’ascendancy et une goutte de civilisation. Je trouve que les jeux de gestion/stratégie sont peut représenté dans les jeux iphone existant et pourtant je pense que ça serait une plateforme parfaite pour cela.

Surtout si on utilise les possibilités offerte par la forte connectivité de l’iphone. Et op, on rajouter un  petit serveur quelques part et on se retrouve avec un jeux persistant, voir multijoueur. Et op encore une transition qui déchire

Les jeux à plusieurs.

Que ce soit en mode ‘LAN’, comme le trivial pursuit (parce que oui jouer tout seul, ca gonfle rapidement) ou le monopoly
Ou en mode persistant / multijoueur comme les jeux de storm 8, il y a encore beaucoup de possibilité pas exploré du tout ou presque par les concepteurs de jeux (comme l’utilisation de la géolocalisation).

Au final.

L’iphone est pour moi une excellente plateforme pour jouer, sur des types de jeux que j’adore, les casuals.

Pour les autres types de jeux, ils ne seront ‘jouable’ que lorsque l’offre de périphériques iphone pour joueurs existera. Mais même comme cela, je n’en suis pas vraiment persuadé. Si pour jouer à un fps sur iphone je dois brancher une manette dessus .. mouais… j’ai des doutes.

Ou alors peut être des périphériques vraiment spécifiques iphones permettant d’inventer de nouveau jeux et non de simplement porter des jeux existant. (pourquoi pas une espèce de ‘gant’ permettant de capter les taptap des doigts sur une surface ?)

Django registration, et avoir des users devient facile.

Tout d’abord, mes plus plates excuses à vous tous, fidèles lecteurs de mon petit espace qui attendiez avec d’abord joie, puis impatience, puis tristesse et désespoir, le billet de la django app du mois de septembre.

Alors oui, nous sommes le premier octobre et le billet de la django app de septembre n’a pas encore été posté. Oui, c’est une honte de lancer ainsi une si bonne idée et de ne pas suivre le principe même de la bonne idée de le deuxième mois. Oui, je reconnais tout cela. Mais votre honneur, je plaide coupa.. pardon innocent.

Ce n’est pas de ma faute si je n’ai pas écrit ce billet. Mon chien (comment ça je n’ai pas de chien?) a mangé mes devoi.. pardon mon cable réseau. Et puis c’est sans parler du débarquement des ET, qui a eu lieu dans mon jardin (comment ça y a pas de jardin dans mon appart?) et qui a ruiné ma pelouse.

Bon, trêve de bêtises. En fait il y a deux raisons à ce retard sur le deuxième billet djangoapp du mois (et aussi sur mon relatif silence sur ce blog). Deux raisons très simples :

  • Une grosse période bien chaude au boulot, avec suffisamment de boulot pour y bosser soir et week-end.
  • Le fait que la troisième occurrence du SPLLOS (le salon professionnel des logiciels libres qui aura lieu à marseille, le 13 octobre) se rapproche à grand pas (ben oui le 13 octobre) et qu’en temps que président de l’association qui l’organise (Libertis, l’association des boites qui font du libre en PACA), j’ai pas mal de truc à gérer (d’ailleurs je profite de ce billet, même si ils ne le liront jamais, pour remercier plus qu’un peu les membres de l’asso qui bossent aussi sur ce sujet, heureusement qu’on est à plusieurs sur le truc, sinon … )

Et, comme les deux points que je cite au dessus sont toujours d’actualité, le billet du mois de septembre (mais oui on est encore, presque, en septembre) sera un billet court, sur une app que beaucoup doivent connaître mais qui à l’avantage d’être suffisament petite pour être tester avec peu de temps  : J’ai nommé django-registration. Qui sert à la registration des users (désolé ça fait depuis le début du billet que je voulais le faire cet anglicisme).

1- A quoi ça sert , où on le trouve, comment on l’installe ?

1.1 Le pourquoi du comment

Utiliser django-registration c’est bien parce que cela permet de ne pas réinventer la roue et donc de ne pas perdre du temps à développer un système d’enregistrement/activation/ utilisateurs.

1.2 Où on la trouve ?

Sur bitbucket, il y a un repo avec un wiki bien sympa , ici : http://bitbucket.org/ubernostrum/django-registration/

1.3 Comment on l’installe ?

Il y a trois manière pour l’installer, par easy_install , par pypi ou avec les bonnes vieilles sources (hg cloneeeee) et un python manage setup.py.
Personnellement j’ai une préférence pour la troisième méthode, la doc étant incluses dans les sources, je trouve ça plus facile d’avoir les sources du truc que je met à jour de temps en temps.

2- Mais ça fait quoi django-registration, pour de vrai ?

Django registration met un place un système complet d’enregistrement des users.

A savoir, vous avez la vue qui gère le fait qu’un user veut s’inscrire et va remplir un joli petit formulaire.

Une fois le formulaire submit, django va créer un compte user inactif et envoyer un mail qui contiendra une clé d’activation. L’utilisateur qui vient de submit sa demande d’enregistrement verra alors ensuite apparaître une jolie page lui disant d’aller vérifier ses mails et d’activer son compte.

Truc sympa, l’app gére le fait d’interdire certains provider d’emails jetable ou l’interdiction de créer un compte avec un email déjà utilisé.

Cerise sur le gâteau, il y a même un petit script (qui utilise les commandes django) qui permettra de supprimer les comptes qui n’ont pas été activés et qui sont considérés comme expirés.

2.1 Et la localisation ?

Elle y est, dans tout plein de langues (y compris le français, bien entendu)

3- La doc ?

Bien fournie, très précise et claire, il n’y a vraiment rien à redire.

Une fois qu’on a installé l’app, on a plus rien à faire alors ?

Ben en fait si, parce qu’il n’y a aucun template de fournis, même pas à titre d’exemple. Il faut donc ‘tous’ les faire, mais c’est assez rapide. Et puis là aussi, la doc est vraiment bien faite et détaille précisément chaque variable du contexte de chaque view. Faire les templates n’est donc pas vraiment difficile.

4- En conclusion

Installez la et utilisez la.

Des blocks dans des blocks dans des blocks , dans des …

Tout ceux qui font du django, ont, un jour, utilisés des blocks pour écrire un template. Pour rappel, un block c’est un moyen de délimiter un ’bout’ de template.

A quoi ca sert un block ? Très rapide rappel

Imaginons que vous faites un blog. Votre blog peut afficher soit un post, soit une liste de post, soit une catégorie, soit une liste de catégorie. Dans tout les cas, vous aurez des menus à droites et à gauches et même au dessus.
Vous allez peut-être décider de faire un template ‘base’ où vous allez définir les choses qui ne changeront jamais, ici les menus.
Ensuite il faut trouver une façon simple de pouvoir soit afficher un post, soit une catégorie, etc etc ..

Rien de plus simple. Dans la base vous définissez un block content par exemple :

{% block content %}
{% endblock %}

Maintenant dans votre template qui s’occupe d’afficher les posts, il suffira de dire que vous étendez base puis de redéfinir le block content et op, vous aurez à la fois tout vos menus définis dans base mais aussi votre nouveau content.

{% extends "base.html" %}

{% block content %}
     {{post}}
{% endblock %}

Bien entendu, on est pas obligé de redéfinir tout les blocks de template qu’on étends. Si on ne redéfinit pas un block , le contenu du block parent sera utilisé. (Par exemple, si on reprend l’idée du blog, ce n’est pas seulement un block content qu’il faut définir, mais aussi un block pour chacun de nos menus. Ces block ne seront pas redéfinis dans le template post, c’est donc ceux de base qui seront utilisés)

des blocks dans des blocks.

Jusqu’à présent, je n’ai fait que faire un très rapide rappel de ce que c’était qu’un block en django. (Pour ceux qui veulent en savoir plus, la doc de django est là pour ça).

La petite astuce que je voulais mettre en lumière dans ce billet arrive maintenant. En fait c’est tout simple, c’est qu’on peut parfaitement imbriquer des blocks dans d’autre.

Ceci :

{% block content %}

    {% block content_intra_content %}

    {% endblock %}

{% endblock %}

Fonctionne parfaitement. A quoi cela pourrait servir ? Pourquoi ne pas faire deux blocks l’un en dessous de l’autre ?

Pour la première question, je me suis creusé la tête pour trouver un exemple. Je crois en avoir trouvé un. Imaginons qu’on doit afficher différentes données, toute de la même manière. Mais que par contre , en fonction des données en question , on a un menu ‘Actions possibles’ différents.

Pour reprendre mon exemple de blog, cela serait afficher la liste des catégories ou la listes des posts.

On pourrait donc décider de faire les choses ainsi  dans le template liste :

{% extends "base.html" %}

    {% block content %}

    {% block actions  %}

{% endblock %}

    {% block content_intra_content %}
         Ici on affiche des trucs ...
    {% endblock %}
{% endblock %}

puis dans le template liste_categorie :

{% extends "liste.html" %}

    {% block actions  %}
         {{categorie_actions}}
    {% endblock %}

Je ne suis pas sur que ce soit le meilleur exemple, ni même qu’au final, l’imbrication des blocks aient une quelconque utilité, mais comme en testant, je me suis rendu compte que c’était possible, je me suis dit que j’allais en parler (Et comme ça si des gens ont un avis sur l’utilité de cette pratique, je les aurais en commentaire)

Deux derniers petits trucs

Le tags {{ block.super }} qui permet dans un block fils de récupérer le contenu d’un block père pour l’afficher. A utiliser quand on ne veut pas redéfinir un block mais simplement l’enrichir.
Il est possible de remettre le nom du block dans le tags de fin de block comme ceci :

{% extends "base.html" %}

{% block content %}

{% endblock content  %}

Ca ne sert à rien, à part à rendre plus clair les choses.

L’algèbre du Q (et du queryset)

Oui, je sais, mon titre de billet n’est pas des plus fin.. Tans pis, c’est la faute au surmenage.

J’avais déjà parlé des objets Q dans un précédent billet. Pour mémoire les objets Q sont des objets django qui permettent de faire de filtrer des requêtes BD d’une façon plus poussée qu’en simplement chainant des appels à filter.

L’algèbre des Q

Les opérateurs ET (&) et OU ( | ) fonctionne sur les objects Q. On peut les chainer, en faire des expressions complexes en parenthésant sans aucun problème.

L’algèbre des queryset

Les queryset sont des objets itérable qui sont renvoyés, par, entre autre, la fonction filter et qui stockent le résultat d’une requête BD. On s’en sert aussi pour remplir les différents composants ‘à choix’ d’un formulaire (selectlist,etc… ).

On ne peut pas concaténer deux queryset comme on pourrait le faire avec deux listes avec par exemple L1 + L2. Mais les queryset supporte les opérations logique. On peut donc là aussi faire des OU (ce qui revient à les concaténer) et des ET pour trouver l’intersection entre deux queryset.

Et c’est, plus que bien utile.

L’entreprena-zen-itude

Un horrible néologisme comme titre pour faire un petit billet listant des conseils (que je ne respecte pas du tout, et oui voici le premier, mais surement pas le dernier, billets faites ce que je dis, pas ce que je fais), qui peut-être vous éviteront de péter un plomb un jour et de courir dans le plus simple appareil, dans les rues de votre ville. (non, ça, je ne l’ai pas encore fait).

  • Sachez arrêter de travailler, quelques temps, chaque jour. Le soir, après le boulot, ce n’est plus le boulot. Même si vous ramenez le PC à la maison, parce qu’inconscient que vous êtes, vous avez un PC portable, ne passez pas vos soirées à bosser. Sinon autant rester au boulot et y dormir, vous éviterez les temps de transport.
  • Ne faites pas 35 heures en deux jours. N’oubliez pas qu’il y a une vie, enfin il paraît, à coté du boulot. Pensez à dormir, manger, faire des choses quoi.
  • Prenez des vacances. De vrai vacances (quand j’ai dit que je ne suivais pas mes propres conseils, je ne mentais pas). Des vacances où vous passez plus d’une heure, une heure et demi à bosser pour le boulot, ce n’est plus des vacances, c’est du télétravail.
  • Si vous commencez à avoir envie de prendre votre clavier à deux mains et de frapper violemment votre écran jusqu’à ce que celui ci explose dans un feu d’artifice de composants électroniques, faites une pause.
  • La pression, c’est bien. Tout le monde le dit. Et tout le monde vous dira qu’on bosse mieux avec la pression, que ça booste, etc etc. C’est des foutaises. Enfin, moi aussi j’aime bien bosser sous la pression. De temps en temps. Et je préfère largement quand tout est prêt, finit, bien avant la date de livraison prévu. Laisser vous le temps. Et si cela implique de dire non, parce que votre prospect veut tout, tout de suite. Dites non. Vous perdrez peut-être un prospect, mais vous ne ne vous retrouverez pas avec une horde de mécontents aux trousses.
  • Apprenez que le monde ne se limite pas à votre boulot, vos concurrents, vos clients, prospects, fournisseur, etc … N’oubliez pas que le reste de l’humanité existe et qu’il est bon d’interagir avec elle, un minimum.
  • Ne négligez pas vos hobbies et votre vie sociale. Ca permettra à votre cerveau de respirer et en plus, peut-être que vous trouverez de nouvelles idées, angle d’attaque pour le boulot.

Conclusion

Pourquoi donc j’écris ce billet, si même moi je ne suis pas les conseils que j’y donne?

Pour plusieurs raisons. Même si je ne les suis pas, je sais que c’est de bons conseils, que je suis bien idiot de ne pas mettre en pratique. Ca faisait longtemps que je n’avais rien publié et je ne voulais changer ça.

Et puis, en plein milieu d’une grosse session boulot, j’ai eu, vraiment, besoin d’une petite pause.  Et ça coute beaucoup moins cher de taper un billet que de frapper avec son clavier, sur son écran. Beaucoup, beaucoup moins cher. Si, si, je vous jure.

Django Extensions, le couteau suisse du djangonaute.

Une nouvelle catégorie apparaît (oui je sais, encore une alors que certaines restent désespérément vide, mais grâce à la magie de wordpress, vous ne le savez pas, vu que les catégories vides n’apparaissent pas… ), la Django App du mois. Tout est dit dans le nom, tout les mois, en fin de mois, je posterais un petit billet sur une django app que j’aurais testé pendant le mois. Enfin, ça c’est le principe, est ce que je vais tout les mois avoir le temps de chercher/choisir/tester une django app.. Ça, rien n’est moins sur. (d’ailleurs j’en profite, si vous avez des idées de django app, les commentaires sont là pour ça).

Pour ce premier numéro, la django App qui a la chance d’être la django App d’août est Django Extensions. (tiens, je viens d’avoir une idée, un calendrier des DjangoApp, que les djangonautes, ou les routier, pourraient accrocher dans leur bureau ou leur camion).

1- A quoi elle sert ?

Django Extensions est une application d’aide au développement. Elle rajoute plein de commande au manage.py, commandes tellement indispensable qu’on se demande comment l’on avait pu faire sans.

Elle rajoute aussi quelques Database Model Fiels et  Database Model. Et comme si cela ne suffisait pas on gagne aussi, pour le même prix, une extension pour la gestion des ForeignKey du coté admin.

2- Et plus en détail ?

2.1 Les commandes en plus

Je vais me limiter à décrire quelqu’une des commandes que vous pourrez utiliser avec Django Extensions, celles que moi, j’utilise le plus souvent.

  • generate_secret_key

elle permet de générer une secret key pour son projet. Ca a l’air tout con et inutile, mais en fait non. Quand on utilise un gestionnaire de source pour déployer rapido son projet et que donc on ne passe pas par la commande de création de projet, et ben en fait c’est super utile.

  • create_app

rien de plus que la commande de base sauf que l’on peut donner en plus un répertoire de template à utiliser

  • reset_db

qui n’a pas eu besoin de reset 42 fois par jour sa bd ? Et passer soit par le client ligne de commande soit par les interface web d’admin, ça devient rapidement très chiant. Pour tout ces djangonautes là (dont je fais parti) reset_db c’est le paradis.

  • runscript

lance un script dans l’environnement django.

  • runserver_plus

l’une des (si ce n’est pas la) commandes la plus utile de toute l’extension. Elle nécessite d’avoir Werkzeug installé (mais un petit easy_install et c’est bon). Et elle permet ensuite de lancer le serveur de dev avec le debugguer de Werkzeug. Et là, c’est le pied. A chaque exception reçu, on se retrouve avec une vrai interface de debugger dans notre page web. On peut ouvrir des consoles interractive un peu partout (à tout les pas d’appel de fonction), on peut voir l’état courant des variables, le code de chaque fonctions tracées ). C’est juste ultime.

  • shell_plus

celle là aussi est une commande indispensable. Elle vous permet de lancer un shell qui a déjà importé tout vos models. Lorsqu’on utilise comme moi, assez souvent le shell pour faire quelques petits tests, vérifications, on se rend vite compte du gain de temps.

  • dumpscript

qui permet de générer un script python à partir des données contenu dans une base de donnée à un instant t. dumpscrit fonctionne pour toute une app ou juste un model d’app.

2.2 Le système de job

Django Extensions rajoute un mécanisme complet de job. Un job est une classe python qui dérive de BaseJob et qui implémente la fonction execute (self).

Les jobs se définissent par app django. Pour mettre en place le système de jobs pour une app, il suffira d’utiliser la commande create_jobs en lui donnant le nom de l’app en question. Django Extensions créera alors l’architecture de répertoire qui va bien.

Une fois que l’on a créé ses jobs, on peut les configurer pour qu’ils soient executés toutes les heures, les jours, les semaines, les mois. On peut aussi demander l’exécution d’un ou de plusieurs jobs en commande manage.py.

3- Comment on l’installe, où on le trouve ?

Django extensions étant hosté par google code, il suffit d’aller sur son espace google code se trouvant là http://code.google.com/p/django-command-extensions/

Pour l’installation deux possibilités :

  • télécharger la derniere versions sur le site web puis faire un simple python setup.py install
  • lancer un easy_sintall

ensuite, il vous suffira, pour chaque projet dans lequel vous voulez l’utiliser, d’ajouter django_extensions dans votre INSTALLED_APPS .

Et c’est tout.

4- Et la doc ?

Vous en trouverez sur le google code. Plutôt complète et claire. Il y a même un lien vers un screencast.

5- En conclusion

Une application à utiliser, sans aucune modération et qui fait vraiment gagner énormément de temps.

Champions Online, très bref aperçu de l’open béta.

Il y a quelques temps, lors de mon essai de Eve Online, mon windows avait décidé de me faire une blague et de se suicider. J’avais finalement réussi à le faire revenir à la vie en utilisant un combo chkdsk , mode sans échec, réinstallation du SP3 (qui avait du merdé à sa première install en maj auto). Ce qui m’avait permis de tester Team Fortress 2 et de me dire que ma clé Open Beta pour Champions Online ne serait pas complétement inutile.

Sauf qu’apparemment, mon windows est un vrai comique. Et il adore le comique de répétition. Et donc après … 1h30 de jeux, gros plantage complet, reboot bourrin et surprise … windows encore mort. Et là, le chkdsk n’a rien fait, impossible de booter, mode sans échec ou pas. Donc, c’est la fête, et mon exaspération grandissant de plus en plus, l’achat d’un nouveau PC approche à grand pas. Et pour une fois, je l’orienterais jeux ce PC, ouais je me réjouis déjà des heures perdues sur les forum à chercher si il vaut mieux une Radeon HD 4870 ou une GTX 260 , quelle carte mère pour un core i7 ou si les phenom sont ou pas des gros bousins …

Mais revenons à champions online. Car j’ai quand même pu y jouer 1h30, même si c’était en low details (plus low que low d’ailleurs) et en 800×600 (oui je sais, mon PC est vraiment au bout du rouleau).

1- Visuellement

Alors au vu de mes réglages graphiques, je ne vais pas pouvoir vraiment juger. Mais au vu des différents screenshoots que j’ai vu voir, je dirais qu’il est plutôt joli. Un point important, l’intégralité du jeu est en cellshading. Ca donne un rendu assez spécial, il y a ceux qui sont fan et ceux qui détestent. Perso je trouve que ça rend plutôt bien.

2- Création de votre super héros.

Plusieurs points intéressants à ce niveau. Tout d’abord l’absence de classe. Vous n’avez pas un voleur super-héros, un paladin super-héros, un guerrier de la mort super-héros. Non, vous jouez un super héros, un point c’est tout. ( il faut tempérer cela par la notion de rôle qui existe dans le jeu, mais que je n’ai pas testé, on peut choisir 4 rôles, gardien , vengeur, sentinelle, protecteur qui influent sur le comportement du héros et qui sont respectivement des rôles équilibré, attaquant, defensif, soutien)

Un super héros qui a ….

2.1 des pouvoirs.

Ceux-ci sont rangés par catégories qui sont :

  • Élémentaires
  • Technologie
  • Art Martiaux
  • Puissance
  • Psychiques
  • Mysticisme

Chaque catégorie contient elle même des sous catégorie de pouvoir (par exemple pour élémentaires il y a électricité, feu, force, glace, pour technologie tout 4 sous catégories dont gadget ) Pour voir la liste complète, il y a ce très complet article de jeuxonline.

A la création de votre perso, vous choisissez une sous catégorie (moi par exemple j’avais choisi gadget). Ensuite au gré de l’évolution de votre perso, vous pourrez acheter des pouvoirs de votre sous catégorie ou (et c’est là que c’est cool) ceux d’autres sous-catégories (imaginons que vous ayez toujours voulu jetez des éclairs en plus d’utiliser des dizaines de gadget cool, aucun problème, vous achetez un pouvoir d’éclair).

Bien entendu les pouvoirs demande des pré-requis, mais ils sont suffisamment bien fait pour que vous puissiez vraiment piocher à gauche et à droite dans les différents arbre de pouvoir (le prérequis sera par exemple ‘un pouvoir de la même branche ou deux pouvoirs quelconques de type charge )

Mais un super héros, ce n’est pas que des pouvoirs dans un slip par dessus un collant, c’est aussi …

2.2 des caractéristiques.

Elles sont au nombre de huit :

  • Constitution
  • Endurance
  • Force
  • Dextérité
  • Intelligence
  • Ego
  • Présence
  • Récupération

Elles influent directement sur la ‘vie’ de votre super héros. La dextérité par exemple permet d’augmenter les chances de coups critiques et les chances d’esquiver une attaque.

Parmi ses huit caractéristiques vous aurez à en choisir 2, vos …. SUPER STATS !!!!!. Elles augmenteront petit à petit avec l’expérience de votre perso et influeront sur les dommages de vos pouvoirs.

2.3 La création en elle même.

C’est un des gros points forts du jeux. La personnalisation est énorme. Vous pourrez la aussi trouver plein de screen de perso (un petit lien vers un thread forum jeunxonline , non ceci n’est pas un billet sponsorisé par jeuxonline). Vous pourrez vraiment tout faire, un perso extra terreste, avec un manteau à la néo, des cornes, des bas résilles, Vegeta, Goldorak, un jackson five, avec une tête de requin, une auréole. Je ne suis juste pas sur qu’on puisse faire un héros bedonnant, je voulais essayer, mais je n’ai pas eu le temps … Seul petit bémol, il y a tellement de possibilité et d’option que c’est un peu fouilli. Il va falloir passer du temps à le créer son super héros, et à chercher toute les options possibles.

3- Le jeux.

3.1 La baston.

Il y a quelques petites ‘originalités’ que je trouve sympa.

Comme le premier pouvoir qui est un pouvoir ‘automatique’. On clic et c’est parti, il se lance, encore et encore. On lance un autre pouvoir, le pouvoir automatique s’arrête, le nouveau pouvoir se lance, puis le pouvoir automatique revient.

Où les pouvoirs à charge, comme le deuxième pouvoir gadget. Cliquer une fois, le pouvoir se lance. Cliquer, laisser appuyer, il charge, relâchez, et le pouvoir se lance, mais fait bien plus de dégâts.

De ce que j’ai pu voir, j’ai l’impression que, pour ce qui est des mobs en tout cas, la baston se fait à distance. Moi, ça me va, je n’aime pas trop les bastons cac, mais ça peut ennuyer les fans du combat full contact.

3.2 Les pouvoirs de déplacement.

En plus des pouvoirs de bastons, sont présent les pouvoirs de déplacement. Vous allez pouvoir voler comme superman, utiliser des bottes à réaction, un surf en glace, vous téléporter ou courir en super vitesse. A vous de choisir suivant votre préférence et le style que vous voulez donner à votre super héros.

3.3 L’équipement

je peux me tromper , mais j’ai l’impression que l’équipement de votre super héros est assez réduit. Des armes, et un système de slots ( un primaire , 3 secondaires ) pour la partie défense, attaque, pouvoir passif.

3.4 Le craft

La aussi je n’ai pas pu tester, forcément, mais il y a du craft, uniquement utile (impossible de crafter un super bouquet de fleur pour la saint valentin de votre super-copine).

3.5 Le housing

Apparemment pas de possibilité d’avoir sa super maison ou sa super cachette perso. Il est prévu de pouvoir avoir une super maison de guilde par contre, mais elle n’est pas encore implémenté.

3.7 Le PVP

Comme tout le monde joue un super héros, il est un peu difficile d’implémenter un pvp qui colle avec l’univers (c’était un peu le même problème sur Tabula Rasa). Il y a dans champion un mécanisme d’arène et de BG qui est sensé résoudre cela. Pas de pvp sauvage donc, à part  dans des zones spécialement prévues pour. Il y aura aussi un tournoi ultime des champions, mais je ne sais pas comment il se présentera.

3.8 Sa Némésis

Elle (ou il) apparaît aux alentours du lvl 25. C’est votre super ennemi perso. Construit en fonction de vos pouvoirs, c’est votre joker, votre Lex Luthor , celui ou celle que vous combattez encore et encore sans jamais totalement le battre. Vous pourrez lui donner un nom, choisir son apparence, sa motivation, ses sbires et vous l’affronterez ensuite, encore et encore. Sur le papier, ça a l’air très sympa, faudra voir en jeu après …

3.9 l’humour

Ce n’est pas un jeux ambiance sérieuse, on s’en serait douter. Les PNJ ont parfois des remarques rigolotes, les pouvoirs sont assez fun (le jouet d’attaque, pouvoir de gadget, qui invoque un jouet qui combat à la place du héros par exemple)

3.10 Les quêtes.

Vu le peu que j’ai jouer, les quêtes restaient assez classiques :

  • tuer X mobs
  • escorter une personne
  • récupérer un item
  • sauver X citoyens malmenés par des vilains

Mais de ce que j’ai pu lire comme retour, ça s’améliore ensuite et les quêtes ne restent pas au niveau du ‘rapporte moi 4 peaux de loups ‘

3.9 le décor modifiable.

Un bon gros point pour le jeu. On peut, dans une certaine mesure modifier le décor. Arracher un lampadaire pour taper sur les mobs par exemple. Mais aussi les poubelles, les boites aux lettres et je crois même (mais pas sur) soulever des voitures.

3.10 L’instanciation à outrance

Je ne sais pas si cela change après, mais pour ce qui était de la zone du tutorial, c’était instanciation maximum, avec une limite d’une quarantaine (voir d’une cinquantaine) de perso par instance. Autant dire que je ne suis vraiment pas fan de cette façon de faire. (j’avais déjà pu y gouter dans Age Of conan, j’avoue que les rendez vous de guilde rendu impossible par cette fout….instanciation massive, ça ne m’avait pas vraiment plut).

4- Sur l’open beta en elle même.

4.1 Avant de pouvoir jouer

Déjà, je déteste un truc. Les éditeurs de jeux qui s’associent à des sites genre file planet pour faire dl les clients du jeux. Avec la restriction que si on n’a pas un compte payant fileplanet, on ne peut pas dl avant le début de l’open béta et qu’en plus après le dl est pas super top. Donc, comme champions online utilise cette méthode, déjà, je râle.

Ensuite, que le site web officiel tombe le jour du lancement de l’open béta, c’est ennuyeux (surtout quand on a pas pensé à activer sa clé avant et que l’on lutte pour y arriver).

Que le client qu’on a enfin réussit à dl passe un temps infinis à se patcher ( après 12h de dl non stop,  a peine  à 50 % de dl du patch) c’est déjà plus rageant.

Que le petit patch (350) mis en ligne le lendemain du lancement de l’open beta, une fois dl et lancé ne serve à rien, c’est carrément inadmissible (sans compter les petits tips du style ‘déplacer les fichiers de ce répertoire à celui-ci le patcheur a un problème).

Et qu’au final, pour pouvoir jouer il faille re-dl, à nouveau sur file planet, le client à jour (youhou encore 2,5 giga de dl), alors là, ça donne carrément envie d’exploser.

4.2 En jeu

J’ai été plutôt agréablement surpris, surtout après la catastrophe que ce fut pour avoir le droit de jouer.
Pas mal de texte traduit, très peu de constante de traduction à base de object_defense_passive dans l’interface. Pas de plantage serveur (en même temps, en 1h30 de jeu … ). J’ai pas vu de gros bug, de gros lag ou de gros freeze. Les patchs sur des bugs trouvé par les joueurs sortent assez vite, d’après ce que je peux suivre en discutant avec des joueurs qui eux, n’ont pas perdu leur windows. A voir sur la durée et au lancement de la release.

5- En conclusion.

J’ai clairement pas assez joué pour pouvoir me décider. Disons simplement, qu’après 1h30 de jeux, je n’avais pas envie de le désinstaller mais bien de continuer à le tester. De ce que j’en ai vu, il y a vraiment plein plein de bons points, qui me donne envie de le découvrir un peu plus. Suffisament, pour, si les retours que je peux avoir d’autre joueurs d’ici là ne sont pas mauvais, prendre un abonnement de quelques mois lorsque j’aurais mon nouveau PC.

Pour l’instant, comme ça, les trois seuls défauts que je lui voie sont :

  • L’absence de PVP sauvage qui pourrait être contrebalancé par la multitude de mode pvp, enfin j’espère.
  • L’absence de craft inutile et de housing perso. Ben oui j’aime bien avoir des objets qui servent à rien et je pense que la super cachette sécréte du super héros est un must have.
  • Le gros gros point noir pour moi : les instances. Faudra voir comment c’est gérer par la suite. Mais jouer sur des instances de 50 … mouais. Vraiment à voir quoi.

Xmpp en python, petit tour des possibilités

Pour ce premier post parlant d’XMPP, je ne vais pas faire trop compliqué, je vais me contenter de faire un petit tour des possibilités qui s’offre au gentil et innocent développeur python qui, ayant découvert le monde merveilleux d’XMPP se décide à utiliser ce joli protocole dans un de ces programmes python.

Il faut dire, que lorsque j’ai commencé à m’intéresser à ce sujet, il y a un peu plus d’un an, j’ai été surpris par le peu de librairies maintenues et proposant un peu plus que la simple paire réception/envoi de message. Aujourd’hui, la situation n’a pas vraiment changé. C’est, je trouve, assez étrange, surtout que cette situation ne se retrouve pas dans d’autre langages qui ont pléthore de librairie (un seul exemple, en Java).

1- Les mortes, ou presque.

Parmi les librairies zombies, je vais en citer deux Zymb  ou jabber.py

Il semble ne plus avoir eu un seul mouvement sur leur deux sites respectifs depuis 2007 ou 2003. La doc est quasiment inexistante, les exemples de même. A ne surtout pas choisir donc, si vous voulez commencer à bidouiller avec XMPP.

2- La  librairie sans code

Sleekxmpp est une petite librairie hébergé sur google code. Je n’ai pas l’impression qu’elle bouge beaucoup au niveau du code, même si des bugs ont été commentés très récemment. Mais, il y a comme un problème. Impossible de récupérer le code source de la dite lib, le svn est vide.

3- La plus complète

Celle qui est, sans aucun doute, la plus complète, celle la version modifié de xmpppy qui est utilisée par gajim. Elle gère énormément de XEP, son développent est continue, le rêve quoi. Sauf que.. j’ai essayé de l’utiliser et le faire sans devoir utiliser tout le code de gajim, c’est un peu (voir beaucoup) mission impossible. Sans compter qu’elle existe en de multiple version (quand je l’ai testé, le support du BOSH était dans une version bien spécifique de la lib, une des branches SVN, je ne sais pas si c’est toujours le cas).

4- Les autres

Xmpppy en version originale ou pyxmp. Elles gèrent un certain nombre de XEP, pas une panacée mais un peu plus que le simple envoi/réception de message. La doc a au moins le mérite d’exister. Une doc API avec même quelques petits exemple de code. J’ai un peu utilisé Xmpppy et elle est pas mal, surtout quand on veut utiliser une librairie légère (sans être ridicule) dans un prog où le XMPP n’est pas central mais une partie, au milieu des autres.

5- Celle que j’utilise.

La librairie que j’utilise actuellement est en fait, au final, presque celle avec laquelle j’ai commencé à faire joujou avec XMPP en python. J’ai commencé en utilisant Twisted words qui est la partie consacré aux Instants Messaging (et IRC) dans Twisted. Autant dire que c’est le parent pauvre de Twisted, peu de doc, peu d’exemple (mais relativement, par rapport aux autres lib, beaucoup), aucune gestion de XEP. Le concept de twisted words xmpp était simple :
Vous avez la puissance de twisted, on vous fournit un moyen de vous connecter et de brancher des callback sur des cheminx XPATH, à vous de faire le reste. D’une simplicité magnifique.

Sauf que, même si le concept est élégant, avoir quelque XEP de gérer, out of the box, c’est un peu mieux, quand on veut juste utiliser le XMPP et pas devenir développeur de lib XMPP.

C’est pour cela que j’utilise Wokkel, une surcouche à Twisted words qui gèrent quelques XEP (dont pubsub). J’ai ainsi quelques XEP (même si je pourrais en avoir plus en essayant d’utiliser la lib de gajim) et je bénéficie de toute la puissance de Twisted.

Une particularité de Twisted (et wokkel) c’est que ce sont des librairies qui sont prévues pour développer des clients ou des serveurs. Certaines fonctionnalités sont donc gérer pour les deux cotés, que pour le coté serveur ou que pour le coté client.

Une autre particularité, qui peut être ennuyeuse, c’est que twisted se fonde sur l’utilisation de ‘reactor’ et qu’il peut parfois être un peu difficile de concilier la façon de fonctionner de twisted avec celle de l’application dans laquelle on veut l’intégrer.

Petits tips concernant django.db.models.Q : le Q identité.

Il peut arriver que l’on doive ‘calculer’ un critère de filtrage Q en combinant plusieurs Q dont les conditions seraient saisis par l’utilisateur. On se retrouve à faire des choses du style

for one_q in q_list :
    full_q &= one_q

La question est de savoir comment initialiser full_q avant de commencer la boucle. La réponse est toute simple, il existe un filtre Q identité, qui ne trie donc rien, c’est tout simplement Q ()