Aller au menu - Aller au contenu

Voici le blog de : Warshadow

Blog | Adrian Gaudebert

Bonjour ! Je m'appelle Adrian et je suis chef de projet web. Depuis plus de 5 ans, je conçois et développe des sites web. Je maitrise les langages PHP, (X)HTML, CSS et JavaScript, et j'ai une bonne connaissance des processus de création d'un site ou d'un service web.


Game Dev Party 2 et Tunisie @ Le 18/04/2012 à 16:41:00

Bonjour !

J'ai publié hier un billet en anglais présentant la Game Dev Party 2, son déroulement, mon expérience et mes impressions sur cet événement. J'espère qu'il vous donnera, à vous aussi, l'envie de créer des jeux avec les technologies du Web !

Lire le billet : Game Dev Party – Writing A Game For The Web In A Weekend

Game Dev Days

J'en profite également pour annoncer que je serai la semaine prochaine en Tunisie, pour animer des conférences et des ateliers autour des jeux vidéo et du Web (oui, je reste dans le thème :) ). Je serai à l'Institut Supérieur d'Informatique (ISI) de Tunis les mercredi 25 et jeudi 26 avril, et à Monastir le vendredi 27 avril ! Je vais y présenter les technologies du Web et leur utilisation dans le cadre de la programmation de jeux vidéo, et je vais animer des ateliers pour que les étudiants puissent mettre les mains dans le cambouis. J'espère revenir avec plein de choses fantastiques à montrer !

L'affiche de l'événement à Tunis

Vive le Web ! :-)

Retours à chaud sur la GameDevParty2 @ Le 25/03/2012 à 20:50:00

Yo !

Ce week-end à Lyon, c'était la GameDevParty2, l'occasion de développer un petit jeu Web en équipe de 5 à 7 personnes. Voila mes retours à chaud, comme ça, à peine 4 heures après la fin du temps de développement autorisé. Je ferai un blog post plus complet (avec des liens et tout) plus tard dans la semaine, en anglais a priori. En attendant, commençons par présenter ce que j'ai fait...

Super Bit Boy

Je ne suis pas venu avec mon propre projet comme je l'aurais voulu (pas eu le temps de bosser sur Fightly ces dernières semaines), et j'ai donc du faire un difficile choix d'équipe. J'ai finalement choisi de travailler avec deux amis et futur collègues, Paul et Nicolas, ainsi qu'avec Louis-Rémi (ancien stagiaire Mozilla, comme quoi... ) et Michaël que j'ai rencontré pour la première fois vendredi soir. Paul et Nicolas sont venus à la GameDev avec un projet et un début de moteur fonctionnel. L'idée d'origine était de coder une sorte de clone de Super Meat Boy en JS avec Canvas. C'est principalement le côté technique qui m'a attiré ici, puisqu'ils n'utilisent pas de framework ou de moteur existant. Je n'ai pas été déçu par ce point.

L'équipe s'est composée d'un sound designer (Paul), d'un graphiste (Michaël) et de trois développeurs et demi (Louis-Rémi, Nicolas et moi, Paul étant le dernier demi). Une bonne répartition, des gens talentueux, du brainstorming et 48 heures plus tard, nous avions un prototype de Super Bit Boy jouable et plutôt excitant. Dans sa forme actuelle, le gameplay consiste à parcourir un niveau en sautant de plateforme en plateforme. Le joueur a une couleur, ainsi que les plateformes : lorsque l'on touche une couleur qui n'est pas la notre, on a une demi seconde pour effectuer un saut afin de changer sa couleur en celle de la plateforme. Le jeu est donc très nerveux, à base de double sauts en permanence, de morts frustrantes mais de recommencement rapide. Ça incite à jouer, c'est dur mais marrant, bref je suis personnellement très content de ce que nous avons fait.

La dernière version jouable, celle qui a été présentée à la fin de la GameDevParty, est jouable en ligne : Super Bit Boy est à portée de clic ! Tout comme son code source !

Les autres projets

Si il y a une chose que je dois dire, c'est que j'ai été bluffé par la qualité des projets qui ont été présentés ! En terme de graphismes, tout était vraiment beau. Évidemment, rien n'était parfait, mais les prototypes étaient là et quasiment tous étaient jouable. Petit bémol pour une équipe qui a eu les yeux un peu plus gros que le ventre techniquement, mais je sais qu'ils ont pris du plaisir à participer et qu'ils feront mieux la prochaine fois !

Je vous invite à lire le blog de la GameDevParty, tous les projets y sont présentés avec la composition de l'équipe et quelques détails. Je souhaite juste féliciter la Z Team, l'équipe d'Aurélien (pour laquelle j'ai beaucoup hésité tant le concept me plaisait) qui a présenté à la fin un jeu excellent, avec à mon avis (mais je ne l'ai pas encore testé) une bonne profondeur stratégique et un niveau de finition plus qu'honorable pour quelque chose de développé en 24 heures à partir de rien. Bravo les gars !

Ambiance Game Dev

Ce week-end s'est magnifiquement bien déroulé. Je suis ravi d'y avoir participé, je suis ravi d'avoir vu tous ces gens se réunir autour d'une même passion et se donner à fond pendant plus de deux jours. Merci, merci, merci aux organisateurs, vous avez fait un très bon boulot, on n'a manqué de rien. Merci à l'atelier des médias pour la salle, merci au sponsor Novius pour les petits déjeuners. La GameDevParty2 est terminée, mais l'association GameDevParty vient tout juste de naître, et va en profiter pour organiser plein de petits événements autour du développement de jeux vidéo sur Lyon, en attendant la prochaine vraie GameDevParty !

En bref : je suis heureux, j'ai participé à la création d'un jeu que j'estime, j'ai vu de très bons jeux se créer, et le tout dans une super ambiance. Bravo à tous, et à la prochaine !

Game Dev Party 2 à Lyon : du 23 au 25 mars @ Le 03/02/2012 à 15:00:00

Game Dev Party 2

Yeah ! Enfin !

J'avais raté la première Game Dev Party Lyonnaise parce que j'étais aux USA pour mon stage, et j'attendais avec impatience l'arrivée de la deuxième édition. Et ça y est ! On a une date et un lieu ! Et même un événement Eventbright !

Vous aimez créer des jeux vidéos ? Vous voulez vous mettre au défi et participer à la création d'un jeu en un weekend au milieu d'autres gens tout aussi passionnés que vous ? Alors réservez votre weekend, préparez vos moteurs, faites chauffer votre Photoshop et rejoignez-nous du vendredi 23 au dimanche 25 mars 2012 à l’Atelier des Médias - 9 quai André Lassagne, 69001 Lyon !

J'espère vous y retrouver nombreux !

Mais je voudrais te donner de l'argent ! @ Le 26/01/2012 à 15:00:00

Ce n'est pas que je ne veux pas donner d'argent à une personne qui le mérite et qui m'apporte quelque chose, c'est que je ne peux pas le faire.

Oui, cette phrase est trop catégorique, et même fausse. Je "peux" le faire. Mais à quel prix, et sous quelles conditions ? Je vais essayer dans ce billet d'exposer ce que je considère maintenant comme un des problèmes de base de notre société. Commençons par un petit retour en arrière...

Dans l'temps...

Avant, dans un monde sans technologie de l'information et de la communication, nous avions des contacts qui impliquaient une présence physique. J'entendais un chanteur dans la rue ou dans une salle de concert, j'allais au théâtre voir une pièce ou j'écoutais un poète déclamer ses vers. Toutes ces activités ne pouvant être faites qu'à une distance "humaine" de l'autre, il était simple de remercier monétairement l'autre : je pouvais lui donner de mon argent, quelques unes de mes pièces d'or ou de bronze durement acquises. On utilisait notre argent physique (notre "monnaie"), dont nous étions les uniques propriétaires, de la façon que nous voulions.

Gardez ce point en tête, j'y reviendrai.

Puis vint l'Internet

En évoluant, en créant et en adoptant de nouvelles technologies de communication, nous avons au fur et à mesure retiré la nécessité de proximité physique des échanges culturels. L'écriture a certainement été la première étape, il y a bien longtemps, en permettant de transmettre du savoir entre deux êtres humains sans qu'ils ne soient nécessairement en contact physique. L'imprimerie a sublimé cela. La radio a continué ce processus, puis la télévision, et bien entendu l'Internet qui vient supplanter toutes ces technologies. Aujourd'hui, j'écoute ma musique sur Spotify, je télécharge les films que je veux voir, les séries aussi, je regarde de temps en temps des émissions de télévision en différé sur le net, je télécharge mes livres, je lis des blogs, je regarde des vidéos sur YouTube, je joue en ligne... La majorité de mon activité culturelle passe par mon ordinateur et l'Internet. Est-ce une bonne chose ? J'estime que oui, parce que je crois que sans l'Internet, j'aurais tout simplement infiniment moins de culture. Cependant, ce n'est pas sur ce point que je veux débattre.

Il y a une question qui revient très souvent en tant qu'argument d'opposition au partage : l'argent. En partageant l’œuvre d'autrui, je lui coupe les vivres, je lui retire sa dignité d'être humain et je le condamne à la misère. C'est vrai : en refusant de cautionner et de participer à un système que je n'apprécie pas, je coupe une partie des revenus des artistes que j'aime. Cela reste cependant à pondérer, tant on sait aujourd'hui que les "éditeurs" (au sens large du terme, donc qui comprend aussi bien les majors de l'industrie musicale que les producteurs hollywoodiens) ne respectent pas les-dits artistes et ne leur versent qu'une part infime de l'argent que j'aurais, moi, payé. Ploum exprime très bien dans un récent article les raisons qui me poussent moi aussi à vouloir sortir de ce système, lire Pourquoi je suis un pirate !

Pas d'argent... Pas d'argent !

Donc, le cœur du problème reste tout de même là : moi, je ne donne plus d'argent aux gens que j'estime. La question que je me pose maintenant, c'est "Pourquoi ?" Moi je suis un gars honnête, je suis content de profiter de toutes ces magnifiques créations de mes contemporains, et j'aimerais les encourager en leur donnant un peu de mon argent. Alors pourquoi ne le fais-je pas ?

J'ai récemment été confronté à une telle situation : je voulais acheter un des excellents livres de Thierry Crouzet. Le problème, c'est que le livre en question n'était achetable que par Paypal. Ayant choisi de ne plus utiliser les services de ce dernier pour des raisons éthiques, je me suis retrouvé dans une situation qui est en fait incroyablement commune : il m'est impossible de donner mon argent à quelqu'un sur l'Internet. Pas réellement impossible, mais tellement compliqué que c'est proche d'impossible. Et pour que ça soit un tout petit peu (mais pas trop quand même) plus simple, je dois sacrifier une partie de mes convictions et de ma liberté.

Et c'est à mon avis sur ce point très précis que se trouve un de nos plus gros problèmes, et une des plus grandes victoires des puissants, ici par le biais des banques. Le paiement en ligne est intégralement contrôlé par les banques. Il est impossible aujourd'hui de procéder à un seul échange d'argent en ligne qui ne soit pas tracé, vérifié et stocké quelque part. Et le pire, le pire, c'est que ce n'est même pas simple ! Payer par carte bancaire en ligne est un parcours du combattant ! Les banques ont donc réussit le tour de force de nous emprisonner dans un système où elles contrôlent tout. Finie la monnaie qui partait on ne sait où, finie la pièce de 2€ que tu donnes à ton prochain et qui échappe à sa taxe de 5% pour la banque : dans le monde numérique, tout échange monétaire est tracé et taxé. En entrant dans le numérique, nous avons perdu une de nos libertés : celle de donner librement notre argent à une personne qui est dans notre proximité. Et le fait que dans l'Internet nous soyons tous proches les uns des autres ne justifie pas cette perte, bien au contraire.

Une limite technique

Je voudrais pouvoir donner mon argent à qui je le souhaite, en ligne, de manière simple. Comme je peux donner un billet à un chanteur de rue, je veux pouvoir donner 5€ à Lady Gaga ou à DEF. Cette impossibilité technique est une atteinte à nos libertés.

Cependant, comme je viens de l'écrire, c'est une limitation principalement technique. Il nous est donc possible de créer des solutions à ce problème. Et il y en a déjà ! Regardez BitCoin, le projet de monnaie numérique décentralisée : en utilisant ce système, il est possible de transférer de l'argent sur l'Internet de manière simple, sécurisée, et surtout de manière libre ! Personne ne peut vous empêcher de faire une transaction licite dans ce système.

Seulement le système BitCoin n'est pas parfait : comme beaucoup de systèmes à portée sociale, il faut que beaucoup de gens utilisent, ou au moins acceptent les BitCoins pour que ça ait un vrai impact. Je ne crois pas que ça soit le cas aujourd'hui, et c'est très dommage. Cependant, il ne tient qu'à nous de faire que ça change...

Comment est propagée la pensée unique @ Le 23/12/2011 à 18:00:00

Bonjour les amis !

Aujourd'hui je souhaite vous faire découvrir un morceau de reportage très intéressant. Intitulé, comme ce billet, "Comment est propagée la pensée unique", il présente via des interviews comment les industriels ont imposé leur vision du monde, leurs règles, leur modèle de pensée.

Je vous laisse apprécier, et en tirer les conclusions que vous souhaitez. Je me suis personnellement rappelé le discours de mes professeurs de Fac d'informatique qui nous disaient qu'ils nous préparaient pour le monde du travail, qu'ils nous enseignaient certaines matières parce que c'est ce que les entreprises veulent.

Ça rejoint également un TED Talk que j'ai vu il y a quelques temps sur l'éducation, dans lequel Sir Ken Robinson expliquait que le système educatif tue la créativité des enfants. Voici d'ailleurs la vidéo en question, elle date de 2006 :

Lisez, pensez, partagez !

/-)

Source : http://www.jmp.net/2011/12/comment-est-propagee-la-pensee-unique/

Component Entity Manager for JavaScript games @ Le 18/12/2011 à 02:00:00

Hi everyone!

I recently wrote a library to handle a Component Entity model in a JavaScript game. I need it for my ongoing Fightly Game Engine, which I'm trying to work on. If you don't know what the Component Entity model is, here are great resources about it:

Basically, the idea is to replace classical inheritance with composition. Your game is composed of entities, each being just a list of components. JavaScript's flexibility is well adapted to this sort of programming, as it is easy to change an object to add attributes or methods to it.

That system I implemented is highly based on what Louis Stowasser did on Crafty.js. It works on both server- and client-side, and comes with a few unit tests and examples. Let's first show you how it can be used:

How to use the ComponentEntityManager

Ok, so I like showing code instead of writing English. Here is the most basic way to use that library. First, import and instantiate the Manager:

var cem = require('component-entity-manager'),
    myCEM = new cem.ComponentEntityManager();

Then, declare a new component:

myCEM.c('HelloWorld', function() {
    this.hello = function() { console.log('Hello, World!'); };
});

Now create an entity using this component:

var hi = myCEM.e('HelloWorld');

And finally use that entity the way you like. For example:

hi.hello(); // prints "Hello, World!" in the console

Pretty simple, right? Right, we only printed a "Hello World" but still, we did so by using the Component Entity model! Now you can obviously add a thousand more components, and create hundreds of thousands entities. Let's see a more concrete example before I explain why it is useful.

A more concrete example

See example1.js on github

var cem = require('../../component-entity-manager'),
    // Instanciate the Game Engine
    myGE = new cem.ComponentEntityManager();

// Create a few components that can be used in-game
var Hero = {
    "life": 100,
    "defense": 100,
    "attack": 100,

    "hit": function(opponent) {
        var points = this.attack * 1.1 - opponent.defense;

        if (points > 0) {
            opponent.life -= Math.round(points);
        }
        return this;
    },

    "specialHit": function(opponent) {
        return this.hit(opponent);
    }
}

var Wizard = {
    // this component requires the Hero component, and
    // any entity having a Wizard component will automatically have a Hero one
    "_requires": "Hero",

    "life": 80,
    "mana": 100,

    // "Overwrite" the specialHit method of the Hero component
    "specialHit": function(opponent) {
        var points = this.attack * 1.2 - opponent.defense;

        if (this.mana > 20) {
            points += 20;
            this.mana -= 20;
        }

        if (points > 0) {
            opponent.life -= Math.round(points);
        }
        return this;
    }
}

var Necromancer = {
    "_requires": "Wizard",
    "life": 70,
    "attack": 110
}

var Paladin = {
    "_requires": "Hero",
    "defense": 150
}

// Add those components to the Game Engine so we can use them
myGE.addComponent("Hero", Hero)
    .addComponent("Wizard", Wizard)
    .addComponent("Necromancer", Necromancer)
    .addComponent("Paladin", Paladin);

// Create two entities than we can manipulate
var gerard = myGE.e("Paladin"),
    igor = myGE.e("Necromancer");

// And now play with those entities
console.log("Before we do anything: ");
console.log("  Gerard's life is " + gerard.life);
console.log("  Igor's life is " + igor.life);

gerard.hit(igor);

console.log("\nAfter Gerard hits Igor: ");
console.log("  Gerard's life is " + gerard.life);
console.log("  Igor's life is " + igor.life);

igor.specialHit(gerard);

console.log("\nAfter Igor hits Gerard: ");
console.log("  Gerard's life is " + gerard.life);
console.log("  Igor's life is " + igor.life);

How is this useful?

And how is it better than classical inheritance? Some people answered this better than I could do in other places (see the two links above), but here is the main point. When you come to have a very complex hierarchy, with lots of classes and dependencies between them, you will certainly end up having unneeded code in some of your objects. Let's say you have a few classes: Moving, Vehicle, Car. Vehicle inherits from Moving, Car inherits from Vehicle. Now at some point you want to add a BrokenCar class, to represent a car than cannot move. It seems quite logical to make it inherit from Car as it shares almost everything with it. But that is the point: almost. As you don't want that BrokenCar to move, you will have to overwrite the code from Moving, or to break your entire hierarchy. With composition, you just specify directly what you need in your object. For example, I want this object to be a Car, a Vehicle and a Moving. Or I want that other object to be a BrokenCar, a Car and a Vehicle (but not a Moving). It is more flexible and allows for a wider range of mixing.

Now about that library precisely. The main features are here: you can create components and declare them, express requirements in a component, create entities from one or several components, get entities from their components. It is intended to be used as a building block for any JavaScript game, or any JavaScript game engine. Oh and I'm pretty sure you guys can find some other use cases as well... :)

Licensing

I release this code under a simple MIT license. It's the simplest I know. I'm considering adding a GPL-ish license as well, and maybe some BSD if people ask me to. 

And the future...

There are a few things I want to add to this library: a function to get an entity from it's ID, more unit tests, more options for selectors... But what I would really, really love to hear is everything you have to say! I will gladly accept code reviews, forks, pull requests, emails, comments here... 

Hack & Enjoy! /-)

Examples of how to break long lines in Python @ Le 15/11/2011 à 11:33:00

I recently started learning Python, and as I am a bad student, I didn't follow the coding style PEP8 recommends. So I'm currently in the process of rewriting all of my code to follow PEP8, and that basically means breaking long lines. I ran into several cases where I didn't know how to break my line, and the Internet doesn't seem to be very helpful about this. But fortunately my awesome coworkers are, so here are some examples of cases I had to deal with, and how I ended up dealing with them.

Before I start showing examples, I just wanted to outline the few rules that matter here about PEP8:

  • Lines must not be longer than 79 characters ;
  • Use 4-space indentation for blocks ;
  • Alignment matters ;
  • The rest of the rules is well described in the PEP8 documentation.

Breaking an if statement

if condition1 and condition2 and condition3 and condition4 and condition5 or condition6:
do_stuff()

I at first did something like this:

if condition1 and condition2 and condition3 and condition4 and condition5 or \
condition6:
do_stuff()

It seemed better to me mainly because that way the second line of conditions is not on the same indentation level than the content of the block, but my coworkers convinced me that using parentheses instead of backslashes is better. Reasons are backslashes are not "pythonic", and the use of parentheses shows the limits of the conditions.

Here is what I then thought would be the best solution:

if (condition1 and condition2 and condition3 and condition4 and condition5 or
condition6):
do_stuff()

But it's still not perfect as the block is aligned with conditions, and it makes it difficult to differenciate them. I believe now the best way to go is the following:

if (condition1 and condition2 and condition3 and condition4 and condition5 or
condition6):
do_stuff()

Assert

assert condition, "This is a very long error message because I like to be verbose when I describe assertion errors with this content: %s" % variable

Becomes

assert condition, ("This is a very long error message because I like to be "
"verbose when I describe assertion errors with this "
"content: %s" % variable)

Or when the condition is long:

assert condition1 and condition2 and condition3 or condition4, (
"This is a small error message. ")

Other examples?

If you ran into similar examples and couldn't find a documented solution on the Web, please share them in the comments and I'll add them here!

Concours Ganuta @ Le 24/08/2011 à 06:30:00

Je suis récemment tombé, via un tweet de Karganis, sur le site du concours Ganuta, et j'y ai découvert deux-trois petites perles que je voudrais partager avec vous aujourd'hui.

Kaolao le puissant Glypheur Aztèque

Tout d'abord Kaolao, un jeu développé par les étudiants de Gamagora, la formation pour le jeu vidéo lyonnaise. Mon pote Raf' Voulzy a participé au développement, et si je n'ai pas encore testé le jeu moi-même, je vous invite à regarder cette vidéo de présentation, puis à télécharger la démo du jeu depuis leur site.

Urbhaine

Urbhaine est un court métrage réalisé par Ludivine Berthouloux, étudiante à l'école Emile Cohl. Ça raconte l'histoire d'une fille qui accumule de la haine à cause de la vie en ville, des gens qui l'entourent, des aggressions... Et qui se créé un démon en conséquence.

Beauté Fatale

Un autre court métrage, par Johanna Falaschi. Je suis pas du tout fan des graphismes, et la chute est un peu trop évidente, mais j'ai trouvé ça plutôt original.

Pour clore ce brillant article, je vous invite à aller visiter le site du concours Ganura, et à voter pour Kaolao parce que c'est top moumoute.

Adrian chez les Américains : la Saga Exclusive @ Le 12/04/2011 à 17:00:00

Je sais pas vous, mais moi je kiffe ce titre ! 

Bon, j'ai l'impression de ne parler que de ça en ce moment, mais en même temps, je ne pense qu'à ça. Donc bon. Autant que je continue d'en parler. 

Je pars ce vendredi pour les USA, en Californie, et plus précisément à Mountain View, pour faire mon stage de fin d'étude en tant que Web Dev chez Mozilla ! Je vais certainement continuer à partager ici mes expériences techniques (ici et sur le blog de programmateur a priori), mais pour tout ce qui concerne ma vie de tous les jours, les photos, les petites histoires et autres banalités qui n'intéressent pas forcément le lectorat de ce blog, j'ai créé un autre journal en ligne : http://stwaladinde.lqbs.fr/


La Californie...

Allez un peu de technique pour justifier tout ce que je dis : ce nouveau blog est motorisé par PluXml, un système de blog très simple sans BDD (tout est enregistré dans des fichiers xml, d'où le nom), qui possède les fonctions de base qu'on attend d'un blog, et qui a surtout l'énorme avantage d'être très très très rapide. Je suis totalement bluffé par le temps de chargement des pages, comparé à Wordpress ou DotClear c'est vraiment flagrant. 

Mais il faut avouer qu'on est quand très en deçà d'un WP en ce qui concerne l'étendue des possibilités, et surtout en terme d'interfaces d'administration. Mais bon, ça reste vraiment bien, un peu geek (j'adore devoir écrire mes billets en HTML :D ) et amplement suffisant pour un petit blog. 

Prochaine émission, prochaine édition, en direct des Etats-Unis. 

À la revoyure ! 

Liens :

Ideonimbus reprend du service @ Le 04/04/2011 à 21:33:00

Bonjour jeunes (et moins jeunes) amis ! 

Vous vous souvenez d'Ideonimbus ? Ce site qui vous permet de partager des idées ou des concepts avec le monde entier ? Eh bien le projet a été quelque peu "mort" pendant pas loin d'un an, jusqu'à la semaine dernière : en effet, à cause d'un bug, je ne recevais plus les annonces des nouvelles propositions d'idée. Du coup, j'ai cru que le site n'intéressait plus personne... Et j'avais tord ! 

Vous pouvez donc d'ores et déjà retrouver sur Ideonimbus deux nouvelles idées : des combats épiques contre des boss humains, dans la catégorie Jeux vidéo et proposé par moi-même, et une idée pour trouver l'âme-soeur dans son département, proposée par terral dans la catégorie Vie courante

Allez, je vous fais même un peu de teasing : l'idée de demain est de Florence (ma chère et tendre, dont l'entreprise, Graphisphère, gère votre communication (OUI CECI EST DE LA PUB :D ), et ça parlera de Mezzanine ! ;-)

Et surtout, n'oubliez pas : partager vos idées rend beau, et noter ou commenter celles des autres rend aimable ! 

Fightly Game Engine : un moteur de jeux web libre @ Le 21/03/2011 à 10:00:00

Amis lecteurs, bonjour ! 

J'en avais parlé il y a quelques temps (plus de 6 mois maintenant), j'ai travaillé ces derniers temps sur un projet nommé Fightly. Comme ce projet a subit pas mal de changements, commençons par un peu d'histoire pour que les choses soient claires... 

blog-fightly.png

La vie d'un projet

Tout commence il y a environ un an, Gandi offre des noms de domaine gratuits, et j'acquiers fightly.fr et fightly.com avec dans l'idée de faire un jeu de stratégie très simple. Je garde le concept dans un coin de mon cerveau, jusqu'à ce que je découvre les WebSockets : je code quelques essais simplistes de jeu de stratégie sur carte hexagonale, et je fais des tests de communication par WebSocket. Ça me botte bien, donc j'approfondis le concept du jeu, et je lance une première campagne de recrutement en juillet dernier, sur le Site du Zéro et bien d'autres sites spécialisés : [Jeu Web] Fightly

À ce moment, l'idée est de créer un jeu web de stratégie au tour par tour, au concept simpliste, avec pour ambition de faire un projet réalisable par une équipe amateur. On y travaille donc pendant les deux mois de vacances, puis vient la rentrée scolaire, et le rythme ralentit pendant quelques semaines. Et j'ai là une occasion sur laquelle je saute : faire passer ce projet dans le cadre d'un projet universitaire, et ainsi pouvoir travailler sur un projet que j'ai lancé et donc que j'affectionne, et être noté pour ça ! 

Avec l'aide de Pierre-Antoine Champin, enseignant-chercheur au LIRIS et avec qui j'avais déjà travaillé, qui accepte de jouer le rôle de "client", nous remanions le projet : l'objectif sera de créer un moteur de jeu web de stratégie au tour par tour, libre, exploitant des technologies récentes du Web Ouvert, et d'implémenter une démonstration simple de ce moteur. Je recrute 4 collègues de formation, et nous voilà partis ! 

Fightly Game Engine

Venons-en donc au projet en question, et reprenons-en les objectifs. Le coeur c'est de créer un moteur de jeu, donc un outil permettant de construire et de faire tourner un jeu vidéo. En réalité, le terme "moteur de jeu" est peut être mal adapté. Ce serait plutôt un framework, puisque notre application fournira les briques de base pour créer un jeu. Il serait intéressant de débattre sur ces noms : est-ce qu'un moteur de jeu est une spécialisation de framework ? Quoi qu'il en soit, l'idée ne change pas : on fournit un ensemble de fonctionnalités de base, dont on sait qu'il constitue la base d'un certain type de jeu, et on facilite donc le développement de ce type d'application. 

La première subtilité ici est qu'on s'intéresse uniquement aux jeux Web : on n'est plus du tout dans le même cadre que les moteurs de jeu "classiques" (par exemple, le Unreal Engine, le Cry Engine ou le Gamebryo), la structure de base de l'application change totalement puisqu'il faut gérer avant tout une architecture client / serveur basée sur les protocoles du Web. On cherchera donc à fournir une application gérant les connexions de clients, l'envoi et la réception de données via le réseau, le tout étant réalisé avec un client qui s'exécute dans un navigateur. 

blog-wesnoth.jpg
Battle for Wesnoth

Deuxième point important, on se limite à un certain type de jeu bien particulier : les jeux de stratégie au tour par tour. Pensez Civilization, Dofus, Heroes of Might and Magic ou encore Battle for Wesnoth. Notre but est donc de faciliter la création de ce type de jeu dans un navigateur : gestion de parties, des tours, des joueurs, des unités, des combats entre unités, etc. Là où le Fightly Game Engine se différencie d'un moteur de jeu classique, c'est qu'il sera largement extensible. À la manière d'un framework comme jQuery, il sera possible d'ajouter des modules au moteur, pour en étendre les fonctionnalités. Nous avons l'ambition de fournir un outil avec lequel il ne sera pas nécessaire de savoir programmer pour créer un jeu : vous choisissez les modules nécessaires à votre jeu, vous les configurez pour qu'ils répondent à vos attentes, vous écrivez vos règles dans un format défini par le moteur et vous n'avez plus qu'à lancer votre serveur et à attendre vos premiers joueurs. 

Bien entendu, s'il sera possible de ne pas programmer, tout sera fait pour qu'un développeur puisse étendre ou modifier le comportement du moteur de manière simple. De même, on cherchera à faciliter grandement la création de modules, puisque c'est par eux que le moteur grandira et deviendra réellement intéressant pour les créateurs de jeux. 

Ce projet est libre, c'est-à-dire que vous pouvez, à tout moment, en lire les sources, les modifier, les redistribuer, selon les termes des licences. Notez cependant que le jeu n'est pas encore explicitement sous licence (il est donc encore soumis au droit d'auteur), mais qu'il sera très certainement distribué sous double licence MIT et GPL

Enfin, le Fightly Game Engine utilise des technologies émergentes du Web : les WebSockets pour une couche réseau solide et performante, Canvas côté client pour l'affichage, HTML5 et CSS3, du JavaScript côté serveur avec Node.js, et bien d'autres. Nous souhaitons profiter de toutes ces nouvelles possibilités techniques pour fournir un outil puissant et robuste, permettant la création de jeux de plus en plus poussés, qui profitent de l'énorme avantage du Web : ils marcheront sur toutes les plateformes disposant d'un navigateur récent. 

Où en sommes-nous ?

Le projet Fac est terminé, et si nous sommes loin d'avoir atteint tous nos objectifs, nous avons su créer quelque chose d'exploitable. Ce n'est pas encore un moteur à proprement parler, c'est plutôt une application configurable. Etant donnés nos délais et le peu de temps que nous pouvions consacrer au projet, nous avons du couper beaucoup de choses, et aller au plus rapide pour pouvoir avoir un résultat présentable. Nous avons donc une démo de jeu, très simple, dans laquelle les unités s'affichent sur une carte, et les joueurs peuvent les déplacer chacun à leur tour. Un bon début à mon avis, et une bonne base de code. 

Si vous souhaitez en savoir plus sur le travail que nous avons effectué durant le projet Fac, je vous invite à lire les documents que nous avons produit : le cahier des charges, la veille technologique et le dossier bilan. Ou un zip contenant les trois

Cependant, ce que nous avons réalisé est très loin d'être terminé. Nous n'avons pas résolu de nombreuses problématiques clés du projet : comment rendre le moteur générique et extensible, pour permettre d'ajouter ou de retirer des modules ? Comment gérer les dépendances entre ces modules ? Comment gérer les correspondances des modules côté client et côté serveur ? 

Il reste donc beaucoup à faire, il y a des défis très intéressants à relever, en terme d'architecture générique et extensible, en terme d'application orientée réseau, en terme de moteur de jeu, en terme de performances côté client, et bien d'autres choses encore. Voila pourquoi j'en viens au... 

Recrutement

Je pense qu'il est nécessaire de travailler à plusieurs sur ce projet, pour plusieurs raisons. D'abord parce que j'aime travailler en équipe. Ensuite parce que mes seules compétences ne me paraissent pas suffisantes : j'ai besoin de gens meilleurs que moi en architecture logicielle et en performances JavaScript, qui sont deux points clés de ce projet. Et enfin parce qu'on réfléchit bien mieux à plusieurs, surtout sur des problèmes complexes. 

Je recherche donc des coéquipiers pour travailler avec moi sur le Fightly Game Engine. Il y a trois axes majeurs pour le développement immédiat du projet, qui sont les suivants :

  • Architecture : Réflexion sur l'architecture du projet, mise en place de solutions adaptées à nos besoins de généricité et d'extensibilité. 
  • Communauté : Mise en place d'outils favorisant la création d'une communauté autour de notre logiciel libre. 
  • Développement : Refactoring du code sur des bases saines, mises en place de bonnes pratiques, correction des bugs existants, amélioration constante de la documentation, ajout de nouvelles fonctionnalités.

Je cherche en priorité des gens relativement compétents, avec une bonne expérience en JavaScript, en jeu vidéo ou en gestion de communauté libre. Bien entendu, le travail serait bénévole, le projet étant libre et n'ayant pas pour but de générer, de lui-même, des bénéfices commerciaux. 

Pourquoi participer à ce projet alors ? Pour l'intérêt des difficultés techniques à surmonter. Pour participer à un projet que vous estimez et que vous voulez voir aboutir. Pour avoir l'occasion de travailler sur une application dont les performances sont critiques. Pour approfondir vos connaissances en JavaScript, en jeu vidéo, en Web. Pour expérimenter le travail en équipe amateur (dans le sens, qui travaille sur son temps libre). Ou pour toute autre raison de votre choix ! 

Si vous êtes intéressé ou que vous avez des questions, n'hésitez pas à me contacter via les commentaires de ce billet, via ma adrian@gaudebert.fr

Découvrir un humain : Alita Bernachot @ Le 14/02/2011 à 10:00:00

Salut, ami lecteur ! Tu veux découvrir une personne fantastique ? Alors lis ce qui suit... 

Alita Bernachot est née en 1987, enfin je crois. Elle a donc 23 ans, elle mesure 1m70 et fait du 95C, enfin je crois. Et en plus, elle est très poilue

Bon en vrai, Alita elle est cool, parce qu'elle fait plein de choses bien : elle est développeuse Web, elle fait du dessin, de la photo, de l'animation... Une vraie créative quoi ! T'as p'tet remarqué qu'il y avait un invité de marque sur ma page de contact ? Ben c'est Alita qui l'a fait ! Et ouais ! 

Tu veux constater l'étendue de son talent avec tes petits yeux ? Je t'en prie, ouvre ce lien, et la lumière sera : http://www.titipops.fr/

Et si tu aimes les blogs de dessinateur (-trice en l’occurrence), vas-t-en voir l'Observatoire de la Vie Humaine, c'est plein de gens tout nus ! 

Alita, son rêve, c'est de faire de la BD. Alors si tu trouves toi aussi qu'elle a plein de talent, si tu peux (et que tu veux) l'aider à se lancer dans cette carrière, contacte-la ! (Ou au pire, contacte-moi et je te la présenterai ! )

Les dessins de ce billet sont la propriété d'Alita Bernachot, publiés ici avec son aimable autorisation.

Quelles sont mes motivations ? @ Le 28/01/2011 à 15:00:00

Je suis en cours, là. Et la question est : "quelles sont vos motivations pour travailler ?" Sous entendu, en entreprise, puisqu'on est dans un contexte d'entretien de recrutement. 

Bon, le prof est avec un autre groupe, on s'ennuie un peu, alors hop, j'en profite pour mettre quelque chose ici. Je vais donc répondre à cette question. Pas évidente, d'ailleurs. Si on n'y a jamais réfléchi posément, comme c'était mon cas il y a 30 minutes, on ne sait pas clairement ce qui nous motive.

Première approche

Ma première réponse était : faire des choses qui me font plaisir. D'accord. "Mais qu'est-ce qui vous fait plaisir ?", rétorque le recruteur. Bonne question. Effectivement, ça demande un peu plus de réflexion, pour rendre les choses explicites, et pour bien ressortir ce qui nous motive au fond.

Make the world better

Il y a deux choses qui me motivent : tout d'abord, rendre le monde meilleur. Je veux travailler sur des projets qui ont pour objectif d'améliorer la vie de l'Homme, d'améliorer nos sociétés, d'améliorer notre monde. Ça peut être quelque chose de simple : le plombier améliore la vie de ses clients en réparant leur intérieur. Mais ça peut aussi aller plus loin, avoir un impact plus fort, sur plus de gens. Il y a des gens qui travaillent pour les sans-abris, d'autres pour les gens en situations difficiles dans des pays comme le Burkina-faso ou Haïti. 

Dans le domaine de l'informatique, et plus précisément du Web puisque c'est ce qui m'intéresse, il y a diverses façon de rendre le monde meilleur. Mozilla par exemple rend le monde meilleur, le monde du Web en tout cas. (Note : oui je postule chez Mozilla en ce moment :D) Le projet Diaspora tente de rendre le monde meilleur en corrigeant les défauts de ses concurrents (Facebook principalement). La majorité des projets libres ont pour but d'améliorer le monde, chacun à sa manière, chacun avec son impact

Indirectement, j'ai besoin d'une certaine éthique. J'apprécie plus de travailler sur des outils libres, ouverts, respectueux de l'utilisateur. Mais là on entre dans des débats un peu plus profonds que mes motivations... ;)

Le plaisir

La deuxième chose qui me motive, c'est le plaisir. Pour être motivé dans mon travail, j'ai besoin de prendre du plaisir à faire ce que je fais. Et pour prendre du plaisir, j'ai besoin d'être créatif. J'ai besoin de développer, de créer de belles choses. Je parle de beauté dans un sens très large. Un site Web peut être "beau" autrement que par son design : l'ergonomie, les fonctionnalités, l'originalité. Créer des choses dont on peut dire "ouah, ça c'est cool" ou "ça c'est balèze", ça me fait plaisir.

Apprendre me fait plaisir aussi, si j'y vois un intérêt personnel, si ce que je vais apprendre va me permettre de créer de belles choses. Apprendre le JavaScript me permet de créer des jeux Web, donc apprendre JavaScript, c'est cool et ça me fait plaisir. 

Bon. Je sais pas si ça peut apporter quelque chose à quelqu'un. Mais c'était intéressant d'avoir cette réflexion.

Allez, à bientôt les loulous ! :)

"Propriété intellectuelle" : une expression sémantiquement mensongère @ Le 08/12/2010 à 10:00:00

Avez-vous déjà réfléchi aux mots que vous employez ? Vous êtes-vous déjà demandé si telle ou telle expression que vous venez de prononcer avait vraiment un sens ? Ou au moins celui que vous pensez ? 

Je sais personnellement que ça m'arrive peu. Et c'est un tort, à mon avis, parce qu'il est important d'avoir conscience, de maîtriser les mots que l'on emploie. On pourrait penser, dans la catégorie des expressions sans aucun sens, au classique "voire même". Mais si cet exemple n'est pas dramatique (même s'il est choquant), il y a des mots que l'on prononce et qui sont tout bonnement dangereux. C'est le cas de l'expression "propriété intellectuelle", dont on entend beaucoup parler ces temps-ci. 

"Propriété" implique une appartenance à une entité, qui détient donc un ensemble de droits sur l'objet possédé. 

"Intellectuelle", c'est une idée, une oeuvre de l'esprit. Or, est-ce qu'une idée est un objet réel ? Non. Une idée n'est pas réelle, une idée c'est le résultat d'une pensée qui se passe dans le cerveau d'un individu. 

La question que l'on devrait se poser est donc la suivante : comment peut-on être propriétaire de quelque chose qui n'existe pas ? 

Si vous avez une réponse, je serai ravi de la lire en commentaire ! Si vous n'en avez pas, comme c'est mon cas, c'est certainement que cette expression n'a tout simplement aucun sens. La propriété intellectuelle est un concept qui n'existe pas. On ne peut pas parler de propriété pour une oeuvre de l'esprit, qui n'a pas de représentation physique. 

Je vous invite à aller plus loin dans cette réflexion en écoutant parler deux personnes remarquables : d'abord Richard Stallman, dont je vous ai déjà parlé, un grand défenseur du libre, puis Albert Jacquard, généticien et humaniste, qui délivre un discours très instructif sur cette expression. La vidéo est créée par le collectif Libre Accès, qui commence un travail ayant pour objet d’ éradiquer ces expressions sémantiques mensongères.

Sources : 

Programmateur : le blog est dans la place ! @ Le 29/11/2010 à 10:00:00

Bonjour chers lecteurs ! 

Je tiens aujourd'hui à vous présenter ma dernière création : le blog de Programmateur. J'ai décidé de créer ce nouveau blog pour le spécialiser plus autour de la programmation, et surtout pour avoir l'occasion de rédiger des billets en anglais ! Ma dernière phrase vous donne donc tout ce qu'il y aura sur ce blog : des billets qui parlent de programmation, en anglais. 

Du reste, ce blog restera aussi actif qu'il l'a toujours été (ça fait pas très actif hein ! :p ), et j'y publierai toujours des articles en français, sur le développement, sur l'Internet ou sur plein d'autres choses. Rien de change donc, si ce n'est que les billets orientés prog iront en priorité sur Programmateur

Je vous invite à lire la courte présentation que j'ai faite de ce nouveau blog, et à vous abonner à son flux RSS

Et bien entendu, comme à chaque fois, toutes vos critiques sont les bienvenues ! Vous pouvez également largement vous permettre de commenter mon anglais, un des objectifs de ce nouveau blog étant de m'aider à m'améliorer dans cette langue. 

Merci de votre fidélité et de votre intérêt. :)

Introduction au contexte du jeu vidéo par navigateur @ Le 18/11/2010 à 10:00:00

Bonjour à tous !

Je vous avait parlé ici-même, il y a quelques temps, du projet Fightly : un jeu par navigateur de stratégie au tour par tour, dont le but est d'exploiter des technologies récentes du Web pour amener une expérience de jeu avancée dans un navigateur, le tout en utilisant des technologies de l'Open Web. Eh bien ce projet a quelque peu changé, puisqu'il s'est coupé en deux parties : la création du jeu en lui-même est mise en pause, pendant que l'on travaille actuellement sur un moteur de jeu web qui fournira une grosse base au développement de Fightly. 

Un des gros avantages de ce découpage, c'est que le moteur sera libre, relativement générique, et très extensible. Il aura donc pour but d'être utilisé par vous, développeurs de jeux web ! Et puis aussi par moi, quand même ! :) L'autre avantage, c'est que ce projet est développé dans le cadre de mes études en Master 2 Technologies de l'Information ! Nous sommes donc 5 à travailler dessus, et Pierre-Antoine Champin, enseignant-chercheur à Lyon, a accepté de jouer le rôle de client, et nous guide donc sur le développement de ce projet. 

Je reparlerai plus en détail de ce projet, il y a beaucoup de choses à faire et à dire. Aujourd'hui, je vous livre un texte que j'ai rédigé en introduction du cahier des charges de ce projet, et qui présente le contexte de ce projet, et pourquoi il apparaît viable actuellement. 

Le Jeu vidéo

Le marché du jeu vidéo s’est beaucoup développé depuis l’arrivée de l’ancêtre Pong ou du célèbre Tetris. On joue aujourd’hui à des jeux de plus en plus beaux, demandant de plus en plus de ressources à nos machines. Mais on voit aussi d’autres utilisations du jeu vidéo arriver : le Serious Gaming, par exemple, est une branche en pleine expansion en ce moment. Le Social Gaming également, représenté activement par les nombreux jeux basés sur Facebook et ses possibilités en terme de diffusion.

Si on s’essayait à une catégorisation rapide des jeux vidéo, voici ce qui pourrait ressortir : les jeux consoles, les jeux PC “classiques”, les jeux en ligne (MMO en tous genres compris). Dans cette dernière catégorie, on trouve beaucoup de types de jeux différents : les MMO dans le genre de World of Warcraft, les jeux multijoueur comme Counter Strike ou Team Fortress, les modes multi des jeux principalement solo, et les jeux par navigateur.

Les jeux par navigateur

Le jeu par navigateur, ou Browser Game en anglais, se joue par définition dans un navigateur Internet. On retrouve donc dans cette catégorie les jeux “Facebook” cités plus haut, la majorité des jeux en Flash, mais également un très grand nombre de jeux que nous appellerons les Jeux Web, puisqu’ils se basent sur les technologies du Web ouvert. Quelques exemples de jeux web relativement connus : Ogame, Travian, ou le français Hordes.

Ces trois exemples ne sont cependant pas représentatifs de la diversité que l’on trouve dans les jeux web. Les jeux d’élevage virtuel, par exemple, sont extrêmement nombreux sur le Web. À quoi est due cette profusion de jeux web ? Majoritairement à la simplicité d’accès du développement web. Faire un jeu web, en soit, c’est développer un site web. Or, avec des technologies très répandues comme PHP, HTML et CSS, avec toutes les ressources que l’on trouve autour de ces dernières (il suffit de regarder les tutoriels du Site du Zéro pour s’en rendre compte), il est très simple pour une personne un peu motivée de créer son propre jeu web.

Malheureusement, s’il est simple de créer un jeu web “basique”, les développeurs sont rapidement limités par les technologies qu’ils utilisent. Il est quasiment impossible de faire du temps réel avec PHP, le couple HTML / CSS n’est pas adapté à l’affichage d’effets spéciaux ou d’animations complexes, et si l’arrivée récente de frameworks JavaScript comme jQuery a permis de repousser un peu ces limites techniques, cela ne résout pas le problème.

Les technologies du web

Il existe une solution simple aux limitations techniques actuelles des technologies web : se tourner vers le futur et utiliser de nouvelles technologies, pas encore éprouvées, mais qui permettent d’aller beaucoup plus loin dans la création de nos jeux web.

HTML 5, la nouvelle mouture du langage de description des pages web, apporte au développeur un très grand nombre de fonctionnalités clés : le temps réel dans le navigateur avec les WebSockets, les manipulations graphiques avancées avec le SVG et les Canvas, la vidéo et le son avec Video et Audio, et bien d’autres.

La version 3 du langage CSS offre elle aussi d’alléchantes nouveautés : les animations, les transitions, les polices particulières, ainsi que tous les effets graphiques amplement simplifiés.

Objectifs du projet

Toutes les avancées actuelles du web ouvrent indéniablement les portes à des jeux de plus en plus impressionnants, de plus en plus profonds, le tout se passant dans un navigateur ! Il faudra cependant du temps pour que les développeurs maîtrisent tout ceci, pour que des outils facilitant l’utilisation de ces technologies apparaissent, et donc pour que l’accès à toutes ces possibilités pour nos jeux devienne simple.

Voici donc où se place ce projet : notre objectif est de fournir un outil complet, permettant de créer de façon simple et rapide un jeu profitant des dernières avancées en matière de technologie web. Il constitura un ensemble d'outils qui fournissent un cadre de développement et des fonctionnalités permettant d'implémenter tout ou partie d'un jeu.

Je serai ravi d'avoir vos avis éclairés sur cette introduction ! Peut-être ai-je raconté des bêtises, peut-être ma vision des choses est-elle fausse, trop orientée, ou idéaliste... Quoi qu'il en soit, si vous avez des commentaires à faire, ils sont tous les bienvenus ! 

À bientôt pour la suite de nos aventures ! :)

[Aparté Cinéma] Welcome to the Rileys @ Le 15/11/2010 à 10:00:00

Bonjour ! 

J'ai été voir le film Welcome to the Rileys récemment, et je vous le recommande chaudement. 

Ce film raconte l'histoire d'un couple qui a perdu sa fille alors qu'elle avait 15 ans. Ça raconte l'histoire d'un homme qui, détruit par la vie et par des événements tragiques, décide de prendre en main une jeune fille perdue. Ça raconte l'histoire d'une femme qui ne vit plus depuis longtemps, et qui reprend goût à la vie, au monde extérieur, aux autres. 

L'histoire est très belle, le film est émouvant et les acteurs sont somptueux. 

Je vous invite vraiment à aller voir ce film, il vaut la place de cinéma. 

Liens : 

Plugin jQuery : des éléments de même hauteur @ Le 09/11/2010 à 10:00:00

Bonjour ! 

Je vous livre aujourd'hui un bout de code qui vient de m'être utile, et qui permet d'obtenir des éléments de même hauteur. A priori, pour résoudre ce problème, on utiliserait des display: table; et display: table-cell; sur les éléments concernés. Grâce au plugin jQuery que je vous présente, les choses sont bien plus simples : le plugin calcule la plus grande hauteur des éléments concernés, et aligne tous les éléments sur cette hauteur. 

Le problème

sameheight_problem.png

Ce qu'on veut

sameheight_wanted.png

Solution

Le code d'origine est de Adham Dannaway, sur son blog cre8ivecommando : Equal height columns using jQuery. La version qui suit est légèrement améliorée, puisqu'elle permet de passer en paramètre le type des enfants à redimensionner.

Voici le code HTML utilisé pour cet exemple : 

<div class="boxes">
<div class="box">
<h1>Col 1</h1>
<p>Integer lacus orci, eleifend non semper ac, dictum ut urna. Donec sed lacus ligula, nec varius nisl. Cras eleifend porta varius. Nunc porttitor, dui ut scelerisque tincidunt, lorem nulla semper odio, non laoreet nisi dui id lorem. </p>
</div>
<div class="box">
<h1>Col 2</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi non dolor eu enim aliquam cursus. </p>
</div>
<div class="box">
<h1>Col 3</h1>
<p>Lorem ipsum stuff... </p>
</div>
<div>This div isn't a box ! </div>
</div>

Intégrez à votre page HTML la bibliothèque jQuery, puis ajoutez le code du plugin qui suit : 

/* Plugin to make variable height divs equal heights */
$.fn.sameHeights = function(childrenSelector) {
$(this).each(function(){
var tallest = 0;
$(this).children(childrenSelector).each(function(i){
if (tallest < $(this).height()) { tallest = $(this).height(); }
});
$(this).children(childrenSelector).css({'height': tallest});
});
return this;
};

Il ne vous reste qu'à appeler cette fonction sur les éléments qui vous intéressent : 

$(document).ready(function() {
$('.boxes').sameHeights('.box');
});

Notez que le paramètre de la fonction sameHeights est optionnel : si vous ne mettez rien, la fonction prendra tous les enfants sans distinction. Ce paramètre m'a été utile pour pas appliquer la redimmension à un <div class="clear"></div> contenu dans le <div> parent. 

Voili voilou ! J'espère que ça vous sera utile ! Un grand merci à Adham Dannaway qui a partagé cette astuce. :)

Liens

PS : navré pour l'indentation, j'ai encore du boulot à réaliser sur mon blog... 

Aparté musical : Aqua, My mamma said @ Le 05/11/2010 à 10:00:00

Le groupe Aqua, à qui on doit d'immenses succès comme Barbie Girl ou Doctor Jones, a sorti l'année dernière un Best Of (intitulé Greatest Hits), qui contenait trois chansons inédites. Parmi celles-ci, My Mamma Said, que j'ai découvert il y a quelques jours grâce à un ami sur Facebook. 

Cette chanson parle de la mort, vue de deux différentes façon : une approche religieuse, interprétée par Lene, qui décrit par des sentiments la perte d'un être cher. Et une approche scientifique, interprétée par René, qui utilise la physique quantique pour relativiser la mort, celle-ci n'étant qu'un passage vers le "multivers". 

Vous l'aurez compris, c'est une chanson triste, c'est pas habituel avec Aqua, mais c'est vraiment réussi. C'est mon coup de coeur du moment. 

A Brand New Website @ Le 02/11/2010 à 10:00:00

feu-d-artifice.jpgBonjour les amis ! 

Regardez autour de vous : ce site vient tout juste d'être entièrement refait ! 

Ça faisait un bout de temps que je voulais le faire, et puis j'ai enfin trouvée l'excuse idéale : je cherche un stage pour ma période de fin d'études. J'ai donc entrepris de refaire tout le site, avec deux buts : d'abord, lui donner une meilleure image, qui reflète plus ce que je suis et ce que je fais, et ensuite le simplifier, en limitant le nombre de pages au minimum, et en affichant que le contenu utile. L'interface est donc épurée, le contenu plus pertinent, plus "pro", et le site s'en trouve, je l'espère, grandement amélioré. 

Bon, ce n'est pour l'instant qu'une première version, il reste pas mal de détails à régler, d'éléments à améliorer, etc. Le blog notamment est loin d'être au point, mais c'est majoritairement du à Dotclear qui n'est vraiment pas propre... Il faut donc que je passe un peu de temps à faire du cleaning du HTML de mon thème. Ça viendra ! 

Vous remarquerez dans le menu (celui qui flotte sur votre gauche) que le site est disponible en deux langues : le français et l'anglais. La traduction anglaise est en cours de relecture par ma prof d'anglais (merci à elle :) ), et devrait donc se voir corrigée d'ici quelques jours. 

J'accepte volontiers toutes vos remarques, critiques et questions par commentaire ou par mail ! 

[Photo : http://www.flickr.com/photos/gnondpomme/3867809702/sizes/m/in/photostream/]