Fantomas’side

Weblog open-source

Archives pour le tag : python

Flux RSS de python

Analyse hiérarchique par le contenu

Je suis actuellement en train de lire un livre sur les différents types d'intelligences dîtes collectives. C'est à dire l'analyse de données représentant les choix, ou les comportement de plusieurs personnes, et comment en extraire des vérités globales.

Une des première applications à laquelle je me suis attaqué à été de construire un Feed Clusterer en Python, servant à effectuer des regroupements par pertinences entre différents sites web.

Comment ca marche ?

Tout site web qui se respect propose un service de Flux RSS ou Atom, résumant les dernières actualités publiées sur le site. L'idée est d'en récupérer le contenu et d'en extraire une liste de mot pertinents.

En calculant le coefficient de Pearson en me basant sur les fréquences de mots comme vecteur, je peux en constituer des groupes et les classer de façon hiérarchique.

Pour visualiser cela, il suffit ensuite de tracer un dendogramme. Un dendogramme va représenter les groupes et la distance entre chaque groupes sur un ensemble de branches. Comme le montre l'image de l'article.

Ceci reste une expérience à petite échelle, mais imaginons maintenant toutes les données que récoltent les gros site web, en particulier ceux à vocations sociales, comme FaceBook, Twitter, MySpace, et n'oublions pas certains moteurs de recherches qui avec leurs dizaines de services sont capables de tracer toutes nos habitudes.

Je ne rentrerais pas dans le détails de toutes les applications inimaginables avec ces données pour tracer les gens, mais de plus avec l ...

Continuer la lecture

Python 3.0 : compatibilités et évolutions

C'est le 3 décembre dernier que la version 3.0 de Python est sortie. Une version attendue par une grande partie de la communauté Python.

Au programme, un bon coup de nettoyage de la librairie standard, des nouveautés comme le passage en tout Unicode, et une nouvelle syntaxe. Même si cette dernière reste proche des moutures 2.x, elle est clairement incompatibles avec les versions précédentes. Un fait assumé par les créateurs.

Pour effectuer la transition en douceur, les versions 2.6 et 2.7 ont amorcées le travail en intégrant une partie des nouveaux concepts présent dans Python 3.0, comme la Curryfication, ou l'implémentation de pseudo opérateurs ternaires.

De plus le script 2to3 est là pour finaliser cette transition en convertissant le code écrit en 2.x vers la version 3. Il serait dommage que les anciens projets basé sur la version 2.x meurent du fait d'une trop grande difficulté de migration.

Craignant une fuite de la communauté Python, c'est sur ces sujets que nous avons été consultés par le site LeMagIT.fr, mon collègue et moi, pour expliquer notre point de vue sur cette nouvelle version dîtes mature.

L'article se situe à l'adresse suivante : Harmonisation au sein de Python 3.0.

Mise à jour : Toonux.com relaye l'info.

Ogame Statistics

Lors de mon dernier article, je vous ai parlé de Open Flash Chart, en vous spécifiant que cela avait un rapport avec un prochain article, cet article le voilà.

Ogame Statisitics est un nouveau site que je viens d'ouvrir permettant de consulter les statistiques de tous les joueurs et alliances présents sur un univers de jeu de Ogame.

Le site réalisé grâce au framework Django, permet de créer une interface visuel des statistiques collectées par un module de mon robot pour Ogame, Obot dont j'ai déjà parler précèdement sur le blog.

En effet j'ai développé un nouveau module pour mon robot permettant de récolter toute les statistiques à un moment donné sur un serveur de jeu.

Des initiatives ont déjà été prises pour effectuer des visualisations de statistiques, utiles pour les alliances, mais le gros inconvénient de ces systèmes est qu'il est nécessaire de rentrer les données manuellement et assez fréquemment pour obtenir un suivi, ce qui est une tache longue et répétitive donc idiote :)

Là où se démarque Ogame Statistics, est que la mise à jours des données est automatique et régulière, car elle est prise en charge par Obot :)

Au menu du site, on trouvera un moteur de recherche, pour permettre de retrouver son profil ou son alliance, ses dernières statistiques, ainsi que celle de son alliance, et des graphiques d'évolutions réalisés avec Open Flash Chart. Une petite touche d'Ajax avec jQuery pour le trie des données et le résultat n'en ...

Continuer la lecture

Open Flash Chart avec le Python's style !

Récemment, pour les besoins d'un projet dont je parlerais bientôt lors d'un prochain article, je me suis mis à rechercher une librairie Python me permettant de réaliser rapidement de jolis graphiques statistiques.

Passé les PyChart et autre ChartDirector. Mon choix s'est porté sur Open Flash Chart, une librairie permettant de réaliser des graphiques statistiques grâce à Flash.

Comme son nom le laisse supposer, la librairie est open source, un point primordial ;) Un site bien documenté avec des exemples complets, permettant une prise en main rapide et un résultat graphique abouti, m'auront convaincu assez rapidement.

L'avantage de cette librairie est qu'il est techniquement possible de l'interfacer avec tous les langages, car le fichier flash générant le graphique, se charge de récupérer un fichier au format texte, contenant les données du document.

Il suffit donc de générer un simple fichier texte, pour pouvoir afficher un graphique complexe, ce qui est un avantage notable pour la machine qui hébergera la représentation des graphiques. En effet on nous n'avons pas générer d'image, comme les autres librairies, et encore moins à les stocker.

La bonne nouvelle, est qu'il existe déjà des APIs pour différents langages, tel PHP, Perl, mais aussi Python. Génial ! :)

La moins bonne nouvelle vient du fait, que cette dite API Python ne fonctionne pas ou plus, et n'est clairement pas maintenue à jours. :(

L'autre bonne nouvelle, est que j'ai pris le soin de recoder l'API Python pour Open ...

Continuer la lecture

Ogame Attack Watcher, la suite !

Cela fait maintenant quelques semaines que le silence se fait sur le blog, ceci est du au développement intensif de mon dernier projet, mon robot pour Ogame, j'ai nommé Obot. C'est l'occasion idéale de faire un focus sur la progression de ce projet.

Je résume le projet dont j'ai parlé dans un article précédent : j'ai ouvert le site web OAW pour mettre à disposition les avancées techniques du robot, et éventuellement recruter de nouveaux contributeurs pour ce projet.

Avec actuellement en frontal un site réalisé grâce au framework python Django, qui m'as permis d'interfacer des fonctionnalitées de la librairie Obot, comme la vérification du compte Ogame à l'inscription, j'ai réalisé le paramétrage du robot via des interfaces en Ajax, et une internationalisation facile à mettre en place et à mettre à jours.

J'ai déployé en arrière plan une version stabilisée par des tests unitaires et fonctionnels, une version serveur du robot, capable de gérer jusqu'à 1000 comptes en simultanés (vive la théorie :p)

Résultat, le premier bot online gratuit pour Ogame ! Open-source en plus :D

http://oaw.upasika.org

Dénommé à la base Ogame Attack Watcher, car à la base le robot et le site web étaient uniquement destinés à la surveillance des attaques sur les planètes de son compte, le développement de la librairie de fonctions contenues dans Obot a pris une tournure différente : automatiser et optimiser le développement ses planètes.

Au programme :

  • Alerte par e-mail en cas ...

Continuer la lecture

Ogame Attack Watcher

Ogame Attack Watcher (OAW) est un programme écrit en Python qui permet la surveillance de comptes inter-univers pour OGame.

En effet OGame est un jeu de rôle massivement multijoueurs en ligne, qui se joue à travers un navigateur internet.

L’intérêt de ce programme est de pouvoir surveiller à distance son compte de toutes tentatives d'attaques sur ses planètes, qui pourraient ruiner des semaines d'efforts. Le programme se connectera toute les 30 minutes sur votre compte et vous préviendra par email de toute attaques, laissant le temps de préparer une manœuvre.

Le plaisir d'écrire ce programme pour moi a été de pouvoir recevoir ces attaques directement sur mon téléphone mobile pour pouvoir savoir de n'importe où si je me fais attaquer sur le jeu, le tout grâce au transfert d'email :) Ce que je vous recommande de faire fortement.

Une seconde version du programme est en cours d'écriture, avec beaucoup plus de fonctionnalités :

  • Migration des flottes et des ressources en cas d'attaques.
  • Construction de batiments, défense, recherches
  • Mode Raider :p

Les bonnes volontées sont les bienvenues d'ailleurs.

Il ne manque juste l'adresse du programme pour pouvoir s'enregistrer et utiliser OAW : http://ogame.willbreak.it ou directement http://oaw.upasika.org

Le svn du projet en version 2 :

http://obot.upasika.org

Persistance

Comment rendre les variables du code persistantes à travers le temps et les pannes de courants en passant par les crashs d'application ?

Cette problématique fut mise en avant lors du développement d'ECS, un framework e-commerce écrit en Python, au sein d'Emencia, société de services en logiciels libres.

Les modules Python pickle et cPickle servent à cela, mais leurs mise en place de manière générique peuvent être coûteuse et de plus comment centraliser des centaines d'objets à un moment T donné ?

ECS grâce au projet SQLAchemy, supporte tous types de bases données et fournis en plus un tas de fonctions pour manipuler des tables en base de donnée à partir d'un modèle de code. C'est donc à partir de la que fût développé le modèle de persistance.

Le modèle de persistance écrit pour ECS, fournit donc les outils pour effectuer la sauvegarde de tout objet instancié au sein de Python. Il contient en plus une implémentation rapide par méta-classe pour accélérer l'intégration au sein du code.

Voici un exemple d'implémentation de classe persistante, prenons l'exemple d'un chat :

from persistency import PersistentClass

class Cat(object):
  __metaclass__ = PersistentClass
  age = None
  name = None

def __init__(self, name='', age=-1):
  self.age = age
  self.name = name
  if self.age == -1:
    self.load()
  else:
    self.save()

def database(cls):
  return 'sqlite:///:memory:'

Cat._sqluri_callback = database

Nous allons donc créer un chat du nom de Felix âgé de 8 ans.

felix = Cat('Felix', 8)  # Roooh il est ...

Continuer la lecture