Fantomas’side

Weblog open-source

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

Bienvenue dans la galaxie !

Ayant fait acquisition il y a quelque mois d'une puce WiiKey permettant de lire les backups sur la Wii, j'ai voulu tester mes backups sur les nouveaux jeux sortis comme Metroid III et Mario Galaxy, mais une mise à jour est nécessaire pour pouvoir lancer ces backups.

La mise à jour étant accompagnée d'un message d'avertissement prévenant que les possesseurs de Wii
modifiées risque des dysfonctionnements, je commence à hésiter :)

"Si votre console Wii a subi une modification technique non autorisée, cette mise à jour risque de la mettre hors d'usage."

Donc directement je me rend sur internet a la recherche d'informations sur cette mise à jour et les conséquences sur la lecture de backup avec une WiiKey.

D'après divers forum, une mise a jour vers un firmware>= 3.0 de la Wii empêchera la lecture des backups sur la WiiKey. De plus ce nouveau firmware provoque une défaillance dans le système de mise à jour du propre firmware de la WiiKey.

Mais une solution existe, parmi les différentes méthodes décrites sur le net, celles testées et approuvées, celle plus ou moins claire, difficile de faire le tri. Mais pour bien faire les choses je vais vous donner la méthode que j'ai employé pour pouvoir passer les derniers backup de jeux tel Mario Galaxy.

Préparation :

  1. 2 DVDs vierges
  2. Téléchargez et décompressez le fichier suivant ConfigDisc 1.2b.
  3. Téléchargez et décompressez le dernier firmware de la Wiikey 1.9g.
  4. Une manette Gamecube ...

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

Génération de flux RSS en PHP

RSS pour Really Simple Syndication, est une des récentes technologies qui popularisent le web 2.0. Le format RSS est un flux de données XML regroupant diverses informations sur des ressources accessibles depuis le réseau.

Dans le cas d'un site d'actualités, les flux RSS du site regrouperont les nouveaux articles publiés et les commentaires récents qui permettront aux utilisateurs de voir l'évolution du site sans avoir besoin de s'y connecter en permanence.

Générer un flux RSS 2.0 à l'heure actuelle peut rester facile pour n'importe quel développeur. Cependant, générer de multiples flux devient vite une tâche fastidieuse. J'ai donc décidé d'écrire un jeu de classes PHP, pour me simplifier la production de flux de type RSS.

Un exemple concret de construction de flux à partir de ces classes vous montrera la marche à suivre. Notre exemple se base sur le listage d'un répertoire distant, à travers un flux RSS.

<?php
include('myrss.class.php');

$rss = new RSS('Contenu du répertoire', 'http://url.du.repertoire', 'Description du répertoire');

if ($handle = opendir('.')) {
  while (false !== ($file = readdir($handle)))
    if ($file != "." && $file != "..") {
      $file_info = stat($file);
      $desc = is_dir($file) ? 'Dossier créé ' : 'Fichier de '.round(
      $file_info['size'] / (1024 * 1024), 2).' Mo';
      $desc .= strftime('le %A %d/%m/%Y à %H:%M:%S', $file_info['atime']);
      $date = strftime('%D');
      // Remplissage du flux
      $item = new Item($file, 'http://url.du.repertoire/'.$file, $desc, $date);
      $rss->add($item);
    }
  closedir($handle);
}
print $rss->publish();
?>

Et voilà comment en moins de ...

Continuer la lecture

L'Himalaya

L'Himalaya est un restaurant indien et pakistanais, situé au 22 rue de la Gaieté, l'entrée ne paye pas de mine en termes de place, mais une salle spacieuse a l'étage permet d'accueillir plusieures dizaines de personnes. La décoration plutôt simple mais agrémentée ornements muraux met dans l'ambiance timidement.

Le problème de l'Himalaya n'est pas dans sa cuisine, qui est très bonne surtout concernant les entrées, mentions aux Pakoras et aux Samoussas aux légumes, bien qu'un peu mous. Le problème vient plutôt des 'à-côtés'.

En effet en apéritif, le whisky commandé, couleur jaune fade voir transparent, possède un goût immonde, celui d'un spiritueux quelconque qu'on aurait coupé a l'eau, j'interpelle le serveur, qui m'affirme m'avoir servi un JB... enfin bref passons je prendrais une bière indienne, la Cobra, désaltérante au possible, mais aux épices trop prononcées et à la saveur peu consistante. Petite déception mais bon, on est là pour manger indien.

Après le plateau d'entrée servi dans un décoration très appétissante, et le plat principal, les choses se gâtent...

Je commande une glace au lait, servie avec des éclats de coco, mais le résultat se trouva être 2 boules de glace quelconques avec pour caractéristique les cristaux de glace d'eau, signe d'une décongélation et recongélation, sympa...

Pour finir le serveur nous proposa un digestif, et là l'erreur d'accepter fut fatale. Le digestif fut une sorte d'alcool frelaté, peut être la ...

Continuer la lecture

A kind of Kinder

Qui aime les Kinder Chocolat ?

A peu près tout le monde certainement, hormis ceux sensibles aux allergies et au chocolat chimique.

Enfin bref, à une époque, je me demandais d'où provenait la tête du gamin affichée sur tous les packagings du produit, ce gamin au visage super symétrique, retouché au Photoshop de l'époque, et à la coupe de cheveux sortie tout droit des années 70 (1978 pour être précis), mais surtout je me demandais quand Ferrero changerait de représentant.

Enfin bref ce qui devait arriver arriva, en me baladant dans un magasin, le choc, ce n'est plus lui, il a été remplacé par un autre gamin, plus hype, plus dans l'air du temps. Une partie de ma jeunesse s'effondre, mais c'est pas plus mal.

Maintenant comparons l'évolution entre les 2. Le sourire ultra-bright est toujours présent (oui oui je mange du chocolat, mais j'ai les dents super blanches). La coupe de cheveux plus courte et relevée. La seule réelle évolution révélatrice de notre société, c'est qu'il est plus rond, obésité oblige :) Moi ce que je me demande, c'est :

  • Comment il gère sa vie de star, vis à vis de ses potes, qui le voit dès qu'ils ouvrent le placard ?
  • Est ce que si je mange du kinder chocolat, j'aurais l'air aussi heureux, et j'aurais les dents plus blanches ?

Un autre truc qui me chiffonne, c'est que les rares emballages, où une tête est affichée ...

Continuer la lecture

Valeur binaire et décalage

L'informatique a un secret, un secret aussi fondamental que spectaculaire. Toutes les informations circulant à l'intérieur d'une calculatrice ou même d'un ordinateur sont composées de 0 et de 1. Ce système appelé binaire, permet de synthétiser toutes les informations possibles, chiffres, images, caractères, à travers des séquences de bits pour rendre ces informations compréhensibles par une machine.

Par exemple, si on prend le nombre 42, il aura besoin de 6 bits pour stocker son information, qui se représentera pour un l'ordinateur 101010. Je vous épargne la conversion du système décimal au système binaire :)

Lors de l'écriture d'une programme, un développeur ne se souciera pas de ces suites de 0 et de 1, c'est le travail du compilateur ou de l'interpréteur, et surtout de la machine. Le développeur se souciera juste du déroulement des différentes actions composant son programme.

Mais parfois il est astucieux d’accéder aux bits d'une valeur stockée en mémoire. Dans l'infographie par exemple, pour les composantes RGB des couleurs, généralement codées sur 32bits (4 octets).

Dans mon cas, j'ai eu besoin de représenter en ActionScript pour Flash les suites de bits contenus dans des nombres indiquant l'heure actuelle. L'avantage de cet algorithme est qu'il est portable et facile à paramétrer.

function arrayOctetBinaryValue(value:Number) : Array {
    var binary = new Array();
    for (var i = 0; i < 8; i++) {
        binary[i] = value & 0x1;
        value = value >> 1;
    }
    return(binary.reverse());
}

arrayOctetBinaryValue(12); // [0 ...

Continuer la lecture

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