Django-tagging, et le tag est en toi

Me revoilà donc pour le désormais presque célèbre billet mensuel de la django-app du mois. Comme d’habitude, je le fais sur le fils, limite à être en retard. Mais c’est bien normal, après tout il me faut bien un mois complet pour choisir, tester à fond et rédiger un magnifique billet concernant l’app du mois.

L’app d’octobre est donc django-tagging. Qui comme son nom l’indique sert à taguer des models.

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

On le trouve, très simplement sur google-code, sur sa page projet.  Pour l’installation, là aussi c’est du très classique :

  • pip
  • easy_install
  • télécharger un tar.gz
  • utiliser le svn de google-code

moi j’ai choisi, une fois n’est pas coutume d’utiliser easy_install.

Niveau documentation ?

Un fichier en ReStructuredText, accessible directement sur le site et présent dans les sources donne la doc et des exemples d’utilisation. Il n’est d’ailleurs par forcément à jour. Certaines fonctionnalités décrites comme étant dans la version de dev sont en fait dans la 0.3

En plus, trois petites pages sont présentes sur le wiki :

  • une pour parler d’un tips d’utilisation (avec des properties)
  • une pour les incompatibilité entre versions
  • une pour les idées et le planning

Ils sont où les murs alors ? ( ou qu’est ce qu’on peut faire avec django-tagging)

Ok, ce titre de chapitre est surement le plus pourris de ma carrière de créateur de titre de chapitre, mais tant pis j’assume.

Le configurer

Il y a quelques possibilité de configuration, en setant des variables dans le settings.py du projet. On peut par exemple forcer à ce que les tags soient en minuscule ou donner la longueur maxi d’un tag.

L’utiliser

On peut donc taguer des instances de model. Mais bon en disant cela, j’ai rien dit. En fait on peut register des models pour pouvoir ensuite simplement rajouter des tags (ou les lister) aux instances de ces models.

On peut également passer directement par les managers de Tags, fournit par l’app, pour taguer des instances.

L’utiliser encore plus

il y a quelques fonctions utilitaires fournis avec l’app.

On pourra par exemple ( avec la fonction get_intersection_by_model) récupéré le sous-ensemble des instances contenu dans le queryset passé en paramêtre 1 qui sont tagués avec tout les tags d’une liste passé en paramêtre 2

De même avoir toutes les instances d’un models tagués par un ou plusieurs tags est possible avec la fonction get_by_model, mais aussi les unions d’instance ou les groupe d’instance ayant les même tag qu’un autre objet …

Et aussi (et presque surtout aurais-je envie de dire) la fonction calculate_cloud qui permet de calculer le nuage de tag en calculant une taille de font pour chacun des tags passé en paramètre. (l’algorithme utilisé pour le calcul est configurable, en plus)

afficher les tags

Avec 4 templatestags différent pour afficher le nuage de tag, tout les tags d’un objet, tout les objets (d’un model précis) tagués avec un tag précis, ou tout les tags qui sont reliés à un model (enfin à ses instances, vous m’avez compris)

Conclusion.

Même si la façon d’ajouter un tag peu sembler un peu alambiqué (pour pouvoir avoir des tags avec des espaces, ou avec des espaces plus des guillemets, etc .. ) , c’est vraiment une bonne app, qui ne fait qu’une chose, mais qui le fait très bien. Donc, je ne peux que conseiller son utilisation.

Le built-in any, vous aussi vous allez aimer les sucettes à l’any ….

J’ai mis quelques temps à le découvrir ce built-in, pour l’oublier presque aussi vite. Je l’ai redécouvert au détour d’une conversation python au boulot.

A quoi sert-il donc ? En fait ‘à rien’, simplement à alléger l’écriture (niveau perf, je ne sais pas si cela change quelque chose, ça par contre)

any prend un seul paramêtre, un iterable et renvoie True dés que l’un des iterables est vrai. Si je cite la doc python, any est équivalent à une fonction définie comme suit :

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

un petit exemple sur une recherche de sous-chaine dans des chaines :

avant :

for word in list_words:
    if word.find(substring) != -1:
        return True
return False

après :

return any ( word.find(substring) != -1 for word in list_words )

C’est plus léger, tout le monde sera d’accord avec moi …

Et puis, vu qu’on y est, il existe aussi le built-ins all qui prend lui aussi un itérable en paramètre et renvoie True si tout les éléments de l’itérable sont True.
(note de bas de billet : oui je sais, mes titres de billets sont toujours aussi … mais j’assume)

MMOWeb, deuxième partie : limitation du nombres d’actions

Dans ce billet, je vais parler plus spécifiquement au mmoweb de types rpg ou jeux de gestion et  non aux autres type de mmoweb. Je parlerais un peu des mmo jeux de carte (comme urban rivals par exemple) à la fin du billet, mais pas plus.

Pourquoi limiter le nombre d’actions journalières ?

C’est une question qui se pose. Après tout vouloir limiter le nombre d’actions effectuable par jour  semble être une hérésie. Puisque cela en vient à limiter, en tout cas il semblerait, le temps de jeux.
Et que, par définition, pour qu’on joueur soit content, il faut qu’il joue, longtemps. Si il ne peut pas jouer à son mmoweb préféré, le joueur ne sera pas content, et il arrêtera de jouer. C’est vrai.

Mais, première élément de réponse, limiter le nombre ne limite pas le temps de jeux. Je l’ai déjà dit dans mon premier billet, l’un des éléments essentiels d’un mmoweb, c’est tout ce qui se trouve autour du jeux. Les messages que l’on peut envoyer aux autres joueurs, les forums où les personnages discutent, où les alliances se nouent et les items se vendent. Écrire des posts sur le forum du jeux, même si cela ne rendra pas votre personnage ou votre ville plus puissante dans le jeux, c’est du temps de jeux. Non obligatoire, puisque n’apportant ‘rien’ en terme de puissance directe dans le jeux, mais du temps de jeux tout de même.

Ensuite, il faut bien voir quels sont les deux types de jeux (si j’oublie pour un temps les mmoweb de type puzzle et cartes). Ce sont les mmorpg et les mmo de gestion (de ville, d’élevage de dinosaures ou autre). Les deux se fondent sur un même principe plus on fait d’action plus on devient puissant. Pour le mmorpg c’est principalement tuer des monstres, pour le mmo de gestion, construire des choses.

Revenons en maintenant à ce qu’est un  mmoweb. Un mmoweb c’est un jeux auquel on joue à la pause à midi, ou rapido le soir entre deux lectures d’article de journaux en ligne. C’est la plupart du temps un jeux ‘secondaire’ pour les joueurs. Pas celui auxquels ils jouent tout le temps, mais celui auxquels ils jouent parce que ça fait passer le temps et que c’est rigolo.

Alors, bien entendu, c’est une grosse généralisation. Mais c’est l’idée. La grande majorité des joueurs de mmoweb y jouent sans vraiment y penser. Et c’est cette grande majorité qui pourtant va faire vivre le jeux, avec par exemple de la pub ou des micro-paiement.

La majorité des joueurs de mmoweb va donc jouer peu de temps, 15 à 30 minutes par jour. Mais il y a toujours des joueurs qui accrochent plus. Des joueurs qui vont vouloir jouer plus, c’est sur les mmo classiques ceux qui vont jouer 7 ou 8h tout les jours, qui seront toujours les premiers à finir toutes les quêtes et qui seront toujours imbattables. Ce déséquilibre est acceptable dans un jeux classique. Mais dans un jeux web,ce n’est pas admissible. Parce qu’on arrête bien plus facilement de jouer à un mmoweb qu’à un autre type de jeux, surtout si on a l’impression que cela ne sert à rien, que de toute façon on pourra jamais battre ceux qui jouent plus que nous.

Avant de continuer, je veux juste revenir sur une autre raison de limiter le nombre d’action quotidiennes. Elle est très simple. Si on met en place un mécanisme de limitation du nombre d’action, on peut très bien assouplir cette limitation en … faisant payer les joueurs.

Comment limiter le nombre d’action ?

Si on réfléchit un peu on trouve rapidement deux types de limitation du nombre d’actions faisable par les joueurs. Tout les mmoweb que j’ai pu tester mette en place l’une de ses deux limitations.

Les points d’actions.

C’est un système très simple, hérités des jeux de rôles papier. Chaque action coutent un certain nombre de point d’action. Se battre / se déplacer / manger / dormir. Tout à un coup en point d’action. Un personnage possède un certain nombre de point d’action. Ce nombre de point d’action est réinitialiser à son maximum à minuit. Et voilà. Tout est dit. Vous faites vos actions tranquillement et puis vous attendez le lendemain. La monétisation est très facile. Soit vous achetez directement des points d’actions, soit vous achetez des  items qui réduiront le coût en PA de certaines actions (des bottes de sept lieux pour courir plus vite par exemple)

La durée des actions

Ce système est encore plus simple. C’est celui mis en place dans Travian. Là c’est tout simple. Chaque action a une durée en minutes, heures. Vous lancez une action (construire une étable) et vous attendez qu’elle se termine. Lorsqu’elle est finit, vous pouvez en lancer une autre. Construire une étable prenant 3h, vous savez que vous ne pourrez en construire que 8 dans la journée, quoi qu’il arrive. La encore la monétisation est facile. Soit elle permet de réduire le temps d’une action soit elle permet (c’est le cas d’en travian) de mettre en attente des actions qui se déclencheront automatiquement lorsque votre première action est finie. Je m’explique. Il est 23h, vous lancez le démarrage de la construction d’un château. Construire un château prend 4h. Il sera donc fini a 3h du matin. Vous, vous ne vous lèverez qu’à 7h du matin, vous allez donc perdre 4h de construction. Trois possibilité :

  • vous en avez rien à faire, le jeux attendra
  • vous ne voulez pas perdre ces 4h de construction, vous réglez votre réveil à 3h du mat
  • vous payez 50 cents, vous avez dorénavant une pile d’action à votre disposition, vous indiquez que vous voulez que la construction de l’étable démarre directement après celle du château.

Regardez les mmoweb auxquels vous jouez, vous verrez qu’ils se rangent dans ces deux catégories (et si ce n’est pas le cas, je veux bien avoir le nom et l’url du jeux en commentaire).

Les jeux de puzzle et de cartes.

Ce sont des jeux web différents. Ils ne se basent pas sur un univers persistants mais sur des parties ‘courtes’ que l’on joue seuls ou contre un autre joueur. Il faut donc raisonner en nombre de partie et non en nombre d’action. Il semblerait alors qu’il n’y ait, dans ce cas là, pas de raison de limiter le nombre de partie possible. C’est vrai, mais pas forcément. Limiter le nombre de partie possible a deux avantages. Le plus intéressant, c’est encore et toujours la monétisation. Vous ne pouvez faire que 5 parties par jour, sauf si vous payez. L’autre c’est de garder le joueur plus longtemps, dans le cas où vous avez un jeux incluant une progression de niveau en fonction du nombre de parties jouées. (exemple, un jeux de combat où vos personnages deviendraient de plus en plus fort après chaque combat gagnés)

MMOWeb, première partie

Je ne l’ai jamais caché (et ça doit transparaitre dans mes posts de toutes façon), j’ai depuis de nombreuses années, joué à pas mal de MMO différent. Dans une très large majorité c’était des mmo ‘classique’, mais j’ai aussi testé quelques MMOweb et même des MMO Iphone (j’en ai déjà parlé de ceux là d’ailleurs).

Après avoir parlé de ‘théorie des MMORPG’ en général et du mmorpg auquel j’essaie de jouer actuellement (j’essaie parce qu’il n’y a pas assez d’heures dans mes journées pour que je trouve le temps de jouer), j’ai eu envie de parler de MMOweb. Une des raisons étant surement que cela fait pas mal de temps que l’idée de me retrousser les manches pour en ‘faire’ un me trotte dans la tête. Je vais commencer par un premier billet, plutôt court et qui se contentera de décrire quelques aspects des mmoweb.

1- Différences et similitudes

Les mmoweb sont à la fois très proches et très différents des mmo ‘classiques’.

  • Dans les deux cas, on joue un personnage (même si c’est le maire d’une ville dans un jeux de gestion de ville).
  • Dans les deux cas, on le fait évoluer (quel que soit la manière de le faire évoluer)
  • Dans les deux cas, on interagit avec plein de joueurs.
  • Dans les deux cas, on retrouve un système de niveau / classement / accomplissement / découvertes du monde.

Mais c’est à peu prés tout. Pour tout le reste, ces deux types de jeux sont très différents. Les mmoweb reposent en grande partie sur la mise en place d’un personnage et le dialogue (forum/message privé) entre les joueurs. Le roleplay est bien souvent beaucoup beaucoup plus présent que sur un mmo classique, parce que, il faut bien le dire, en caricaturant beaucoup ‘il n’y a que cela à faire.
Un mmo classique est basé sur l’action, le temps réel, de longues plages de jeux continue.
Un mmo web est basé sur la ‘gestion’, des moments de jeux cours tout au long de la journée.

Si j’osais, je dirais qu’on joue à un mmo classique comme on regarde un film, on joue à un mmoweb comme on écrit une lettre.

Autant dire que pour beaucoup les mmoweb sont chiants comme la mort. Très peu d’images, pas de 3D, pas de cinématique qui déchire, pas de bande son entrainante, rien que des pages web, avec  un peu de flash ou d’images quand on a de la chance.

Quand à l’adrénaline des combats en temps réel dans les mmo classique, là faudra repasser. Bien souvent on clique sur combattre, on attend et voilà, le résultat du combat apparaît, sans que l’on ait rien pu faire pour influencer le combat. Enfin là encore je caricature, quand vous lancez une armada de vaisseaux spatiaux sur l’un de vos ennemis. L’adrénaline du combat, elle est là aussi. Et l’attente du résultat de la confrontation existe belle et bien, mais d’une façon différente.

2- Mais au fait, pourquoi donc jouer à un mmoweb ?

Parce que vu la description rapide que je viens de faire, c’est pas vraiment la joie. Est-ce que cela ne seraient-ils pas des ‘sous-mmo’ destinés aux handicapés du clavier qui n’arrive pas à lancer leurs pouvoirs dans le bon sens tout en se déplaçant autour de leurs ennemis en ronds rapide et changeant ou aux accros du post de forum de 5000 mots, post qui décrira chaque minute de la vie de son perso imaginaire, même dans des moments aussi inintéressant que son petit déjeuner ?

Bon déjà, effectivement c’est une bonne façon de s’amuser pour ces deux populations là.(et je le rappelle il n’y a pas de ‘sous-façon’ de jouer) Mais ce n’est pas tout.

Tout d’abord, jouer à un mmo classique apporte souvent un lot de contraintes que l’on imagine pas. Il vaut jouer par tranche suffisamment importante pour pouvoir ‘avancer’, finir des quêtes, des instances, etc … Tout dans les mmo-classique est de toute façon penser pour vous ‘forcer’ à rester longtemps connecté.

Alors que dans le mmoweb, c’est différent. On joue par petite plage de temps, 10-20 minutes, plusieurs fois par jours. On peut jouer le matin, pendant la pause midi au boulot, puis le soir, etc…

Le moyen de jouer aussi permet plus de liberté. Il suffit d’un navigateur. Pas besoin d’un logiciel de 10 giga qui nécessite une carte graphique de tueur. Donc un peu joueur de bien plus d’endroit (même de son téléphone si il a un navigateur).

3- Et pourquoi en faire ?

Alors là, les raisons sont assez facile à comprendre. Imaginez vous faire un mmorpg dans votre chambre le soir.. Le nouveau WoW fait dans un garage au fin fond du périgord ? Ca ne colle pas vraiment.

Maintenant imaginez vous faire un site web … C’est déjà plus réaliste. Bon un mmoweb c’est pas exactement le blog de tonton alphonse, mais ça reste du web, avec ‘peu’ de ressource graphique. C’est imaginable de tenter l’aventure. Même si il faut se rassembler à 2 ou 3. Mais c’est faisable.

Et puis il y a une autre raison. Du fait de la relative facilité à développer un mmoweb, on peut plus facilement tester des choses, des mécanismes de jeux un peu innovant, différent.

Après ce rapide petit exposé de présentation, pas forcément super intéressant mais bon faut bien planter le décor, dés que j’ai le temps, je rentrerais un peu plus dans le vif du sujet avec un billet qui parlera des mécanismes de fonctionnement des mmoweb.

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.