Ludum Dare 18 - Attract

date
26 / 8 / 2010
comments
0

Le Ludum Dare est un concours qui a lieu 4 fois par ans, et dont le but est de réaliser un jeu vidéo sur un thème donné. Pour cette édition c'est Enemies as Weapons.
Les choses deviennent très intéressantes quand on regarde les règles :

  1. Vous devez travailler seul.
  2. Toutes les ressources et codes sources doivent être écrit en 48 heures .
  3. Le jeu doit être basé sur le thème donné.
  4. Toutes les bibliothèques, middleware, contenus et outils de développement sont autorisés.
  5. Le code source doit être inclut.

Ça donne diablement envie ! Brainstorming sur un concept, codage du jeu, créations graphiques, sonores, écriture du scénario et des dialogues, debugging, création des niveaux... tout ceci en 48 heures :)

J'ai essayé quelques jeux, vues quelques timelapse et j'ai au final surtout été scotché par Attract, tant son concept comme sa mise en oeuvre est simple.

Attract

Attract

Attract est un jeu web minimal créé par hturan et qui -attention les yeux- ne tourne pas avec Flash mais avec du Html 5 et du JavaScript.

Vous dirigez un cercle qui agit comme un aimant, ou plutôt comme un centre de gravité, sur les tirs ennemis (des triangles). Le but est de dévier ces tirs pour détruire les autres triangles tout en faisant attention à sa propre survie. Simplissime ! Ça ne casse pas trois pattes mais c'est épuré et frais. Ça me rappelle Eufloria dont il faudra que je vous parle un autre jour.

Essayez-le. - Code Source

Attract Attract

Pblog, nouveau logo et refonte de l'admin

date
25 / 7 / 2010
comments
1

Bonjour à tous,

Je poste pour vous informer un peu de l'avancement de pblog et aussi pour dire que Ksh et moi-même ne sommes pas mort, au contraire, le développement a bien avancé ces derniers jours.

Pblog a un nouveau logo !

logo pblog

L'ami Bram, aka Lord Nibbler, qui avait déjà traduit en Hollandais la première version de pblog, revient à la charge avec un tout nouveau logo épuré et bien plus pro que l'ancien. Ce logo est simplement parfait et reflète bien le projet.

Encore une fois merci Bram ! Avec un peu de chance il viendra nous aider dans le développement et s'occupera du JavaScript et de Jquery.

Nouvelle administration

Le design a été repris depuis zéro, l'ancien était un tas d'intestins grisâtres immonde.

pblog admin pblog admin pblog admin

Ce n'est pas complètement terminé et il manque le nouveau logo mais ça donne un bon aperçu.

La suite ?

Je dirais que la version 2 de pblog est proche d'être stable. Mais la sortie officielle va peut être être encore retardée : nous débattons actuellement si oui ou non nous devrions complètement virer webpy pour le remplacer par Tornado, voire carrément l'intégrer à notre sauce dans pblog en enlevant ce qui nous est inutile.

En attendant vous pouvez toujours essayer pblog2 :

git clone http://git.philpep.org/pblog2.git/

Ou venir discuter avec nous sur #staff@irc.philpep.org

Benjamin Bayart - Cycle de conférences à Sciences Po

date
22 / 5 / 2010
comments
0

Pour ceux qui auraient raté le cycle de trois conférences de Benjamin Bayart donnés à Sciences Po, voici les torrents (trouvés chez tuxfamily) :

Tuxfamily les propose aussi en direct download.

En bonus : Do It Yourself : Monter son FAI toujours par Benjamin Bayart.


EDIT : au passage je viens de faire une petite page qui répertorie les conférences et interventions du Monsieur Bayart : http://blog.bender-labs.org/page/bayart

Chargement dynamique de modules et de fonctions en python

date
21 / 5 / 2010
comments
0

La question ici posé est comment importer dynamiquement un/des module(s) (sans en connaître le nom ni même savoir si il existe) et comment exécuter des fonctions contenus dans ces modules.

Cette méthode peut être utile si par exemple vous souhaitez faire un système de plugins. Cet article est une piste à explorer et aucunement une réponse complète !

Je n'ai pas la prétention de tout connaître en python, au contraire je pense plutot être un grand débutant dans ce langage, donc si quelqu'un se rend compte que je dis de la merde, qu'il n'hésite pas à me corriger.

Cette solution a été testé avec Python 2.5 et 2.6. Cela dit, si vous utilisez la version 2.6 il vous faudra ce bout de code piqué ici pour que ça marche (cette version corrige un bug). Ça nous permettra d'importer un module à la volée proprement.

# plugins.py
import imp
import sys

def __import__(name, globals=None, locals=None, fromlist=None):
    # Fast path: see if the module has already been imported.
    try:
        return sys.modules[name]
    except KeyError:
        pass

    # If any of the following calls raises an exception,
    # there's a problem we can't handle -- let the caller handle it.

    fp, pathname, description = imp.find_module(name)

    try:
        return imp.load_module(name, fp, pathname, description)
    finally:
        # Since we may exit via an exception, close fp explicitly.
        if fp:
            fp.close()

Ensuite, le contenu d'un module. Pour des raisons de simplicité, je pars de l'idée que chaque module aura toujours une fonction du même nom dont le but sera d'appeler comme elle le souhaite les autres fonctions, et de se répartir le travail à exécuter à sa manière.
Faisons un exemple bidon mais simple : une fonction qui reçoit un texte et retourne un tableau de toutes les lignes.

# parselines.py
def start(**args):
    data = []
    for line in args['text'].split('\n'):
        data.append(line)
    return data

Bien, passons maintenant au vrai sujet de cet article : importer des modules et exécuter une fonction contenu dans ces modules. Encore une fois je donne un exemple simple et inutile, où l'on importe ce qui se trouve dans le dossier plugin/, pas de vérifications ni rien du tout.

#plugins.py
from os import listdir
data = []
args = {'text': 'Ligne une\nLigne deux\nLigne trois'}
for dirname in listdir('plugins/'):
    # path sous la forme 'plugins/module_name/module_name'
    pathname = 'plugins/' + dirname + '/' + dirname)
    # Import
    module = __import__(pathname)
    # Appel de la fonction 'start' dans le module module avec args en arguments
    data.append(getattr(module, 'start')(**args))
return data

getattr s'utilise comme ceci :

getattr(object, function_name)([arg])

object : le module
function_name : la fonction à importer
arg : arguments à donner à manger à la fonction (optionnel)

Voir 4.7.4. Unpacking Argument Lists pour avoir des arguments optionnels.

À vous de trouver comment gérer plusieurs plugins avec des fonctions et des arguments de fonctions différents entre chaque appel.

Ça donnera peut être suite à un second article plus complet sur la question, car je suis justement en train de tester un système un peu similaire pour les futurs plugins de Pblog 2.

Passage à Pblog

date
19 / 5 / 2010
comments
0

Ça c'est fait, je me suis enfin décidé à utiliser Pblog, le moteur de blog que l'ami Ksh et moi-même développont depuis quelques mois déjà.

Ça va me permettre de vous faire un petit compte rendu de ce qui a été fait et de ce qui est à venir.

Déjà il faut savoir que ce blog utilise une version instable encore en développement de ce qui sera dans un avenir (proche) Pblog 2. La version 1 Stable sortie en Janvier dernier est bien moins bugée, mais est beaucoup plus basique et permet donc beaucoup moins de choses amusantes.

Je ne vais pas m'étendre sur les nouvelles fonctionnalités annoncées sur le site, mais voici juste les quelques points importants déjà implémentés :

  • recodage complet en utilisant sqlalchemy
  • interface d'administration avec tout ce que ça comprend pour éditer, publier, configurer
  • gestion de templates
  • création de pages statiques en plus des articles de blog
  • installation et configuration depuis l'interface web et non plus depuis un fichier en console
  • migration depuis pblog 1

Nous utilisons toujours le framework webpy mais l'idée de passer à Django a été lancé quelque part, bien que pour l'instant ce ne soit pas envisagé sérieusement. Malgrès toutes les fonctionnabilités ajoutés et en cours, Pblog reste léger et rapide (en grande partie dû au passage à sqlalchemy.

Nous avons aussi adopté jQuery pour une plus grande souplesse notament dans l'administration ou l'écriture de billets et de commentaires. Mais c'est laborieux, aucun de nous n'aimons le JavaScript, donc forcément l'envie de coder dans ce langage de @!# donne pas toujours envie de se mettre au travail. Au passage, il y a un grand travail de nettoyage à faire dans le code source à ce niveau là, les volontaires sont les bienvenus.

linkdd a eu le courage de passer son blog à Pblog 2, du coup Ksh est occupé en ce moment à faire des tests pour la production, et corrige tout un tas de bugs sous le fouet menaçant de linkdd.
Ce qui fait que Pblog 2 est déjà utilisable (du moins sous Lighttpd - Apache et Nginx n'ont pas encore été testé), mais faut pas s'étonner de voir certaines parties franchement incomplètes ou des trucs qui marchent qu'à moitié.

Pour ma part, je suis en train de faire un système de plugins que j'espère simple mais efficace. Pas grand chose à dire, j'ai les mains en plein dans le camboui.

Si vous voulez tester cette nouvelle version ou aider à son développement :

git clone git://git.philpep.org/pblog2.git

Pour les rapports de bugs ou tout simplement venir insulter nos mamans :
#staff @ irc.philpep.org

Les volontaires, je le répète, sont bienvenus, et le seront encore plus au moment de la sortie, quand on pourra vraiment faire ses propres designs et plugins ! owi !