Alexis Bauchu - On est pas des machines

Coders are also human beings

mardi, février 2 2010

Retour sur la Global Game Jam 2010, part 1

Global Game Jam Logo

Vous l'avez peut être suivi sur mon compte Twitter, le week-end dernier j'ai participé à la Global Game Jam à Paris. Il s'agit d'un événement mondial qui en est à sa deuxième itération. On pourrait traduire en français par "Session d'improvisation de jeu vidéo mondial". Ce qui veut pas dire grand chose comme ça, mais disons que pendant tout un week-end, des programmeurs, des game-designers, des sounds designers et des graphistes se retrouvent, font connaissance, et développent ensemble un jeu vidéo.

L'événement avait deux sites en France cette année encore: Angoulême et Paris. La GGJ d'Angoulême était hébergée par l'école nationale du jeu vidéo (l'ENJMIN) et cette année la GGJ Paris était hébergée par l'ISART Digital (école de jeu, d'animation 3D et de web). La GGJ c'est l'occasion de rencontrer des professionnels: le sympathique Oliver Lejade du studio Mekensleep (Soul Bubbles) était notre hôte; Fabien Delpiano de PastaGames a fait une apparition et a ouvert la session par un discours de motivation et de conseils. Dommage qu'il n'ait pas pu rester. C'est un gars du Sud et il avait un train à prendre.

Après quelques jeux et un petit pot pour faire connaissance avec les participants, le sujet est dévoilé: "deception and seduction", avec en rab l'obligation de faire apparaitre dans le jeu au moins un des éléments suivants: un singe, un âne, une clé. C'est pas des belles contraintes ça?? Optionnellement, les participants peuvent tenter d'atteindre des objectifs qu'ils choisissent: jeu sans téléchargement, utiliser moins de 16 couleurs, jeu multi ou communautaire, etc.

A partir de là, chacun a réfléchi pendant 45 minutes sur une idée de jeu: il fallait trouver des mécaniques et un contexte qui colle aux contraintes. Je peux vous dire que c'est pas facile. Est venue ensuite la phase de présentation: on nous a donné 45 secondes pour présenter notre idée aux autres participants pour les convaincre de travailler sur ce projet. Ensuite, de manière informelle, les gens ont pu discuter entre eux de leurs idées et former les groupes. Les dernières associations ont eu lieu pendant la dégustation de pizza gracieusement offerte par l'ISART. C'est comme ça que j'ai fait la connaissance de Guillaume, William et Matthieu.

Si le sujet vous intéresse, inscrivez-vous à mon flux RSS. N'hésitez pas à poser des questions ou faire vos remarques dans les commentaires!

Lire la 2ème partie.

mardi, janvier 26 2010

World of Goo décortiqué

World of Goo Screen

Je vous ai déjà parlé de World of Goo dans un billet précédent, plutôt orienté économie, mais finalement je n'ai jamais parlé du jeu en lui même. World of Goo (WoG pour faire court) est un jeu de contruction / réfléxion sorti fin 2008 et développé par 2Dboy, un studio indépendant américain. Et par "studio", j'entends "juste deux talentueux ex-employés d'EA". Le but du jeu est de créer des tours et autres structures composées de petit êtres vivants appelés "balls of Goo" (intraduisible, mais imaginez une boule de pétrôle ou de morve dotée d'une paire d'yeux) afin d'atteindre un tuyau qui va aspirer les boules non utilisées. L'objectif étant d'atteindre le quota requis en fin de chaque niveau.

Dans mon esprit, WoG est, avec Braid, une icône du jeu vidéo indépendant, parce qu'il a prouvé au public que les "jeux de garage" pouvaient être de vraies réussites, à la fois critiques et financières. Le label "indé" en a gagné en crédibilité et la visibilté de cette catégorie de jeux a été améliorée. C'est un de mes coups de coeur de 2008. J'aime chaque élément du jeu: son gameplay de contruction avec ses pièges physiques; sa direction artistique étrange et attachante; sa bande son tantôt enjouée, tantôt mélancolique, tantôt épique; et son humour. Au delà de ça, en tant que développeur, je suis sensible à l'histoire du développement du jeu (un simple jeu expérimental devenu une production couronnée de succès), l'esprit de ses développeurs, etc.

Mais ce dont parlent rarement les test du jeu, c'est aussi les messages que le jeu véhicule, car derrière une façade de jeu cartoon plein d'humour, se cache en réalité une critique de notre société: les grands groupes qui écrasent leurs employés et leur concurence, la course à la beauté, la course au progrès, la main-mise des géants de l'informatique sur nos information personnelles... Beaucoup de thèmes sont ainsi abordés de manière indirecte, camouflés dans le décor ou dans le gameplay. C'est le sujet d'un dossier (en anglais) sur GameObserver.com appelé "We are World of Goo" (à lire ici). En voici quelques extraits:

Quand vous complètez le niveau “Hang Low”, la société "World of Goo" ouvre ses portes et on nous montre une vidéo de sa clientèle. Les clients ont tous le regard porté vers le nouveau bâtiment de la société et quand ils parlent, ils ne s'expriment pas avec des mots mais en poussant de petits cris aigus, à la manière de souris. Serait-ce la façon dont la société World of Goo, et que les entreprises du monde réel qu'elle représente, nous considèrent, comme des souris couinantes qui n'existent que pour consommer leurs produits?

Au début, l'idée d'utiliser la beauté comme source d'énergie pour alimenter le monde semble inspirée, jusqu'à ce qu'on se rende compte de quelle genre de beauté il s'agit. Le genre qui exclut certaines personnes pour le bénéfice d'autres, le genre pour lequel certains "moins chanceux" sont sacrifiés. Une beauté conservée seulement grâce à la chirurgie et aux injections; des visages qui perdent leur abilité à s'exprimer au nom de la "beauté".

Si vous ne connaissez pas le jeu ou si vous vous intéressez à la manière dont est construite le jeu, je recommande chaudement le visionnage de cette vidéo (encore en anglais, mais on peut activer les sous-titres) qui se concentre sur la manière dont le gameplay du jeu est présentée au joueur et comment l'aspect technique soutient ce gameplay.

mardi, novembre 24 2009

Unreal Development Kit

Epic released what they call the UDK. It's basically the Unreal Engine 3, for free!

Here are the best news:

You can create standalone applications with UDK. This means that users will be able to install and run your game without owning a copy of Unreal Tournament 3.

Now go get it and make some great games!

vendredi, novembre 20 2009

Google releases the Chromium OS open source project

This had to happen, Google has entered the OS business. Well, they're not in the Desktop OS business, their strategy is to win the market of the eBooks, those really small and cheap computers aiming at connectivity. The main idea behind this product (Chrome OS) is that people are 90% of their time on the internet. And that... ok they tell it very well themselves, just watch this video:

Done? Ok. It seems quite logical to get to this point. With all the services that we use on internet, most of our data is alreay in the cloud, so this all fits. When I saw Chrome on Windows for the first time, with its task manager, its separate processes for each tabs, its workers (similar to threads, they're part of HTML5)... I realized that the browser was really becoming the new OS. No problems of portability (well almost), your data always available all around the world... The advantage of this approach is that you can then build a really cheap and really fast computer just designed to go on the internet. Google also provided a video live demo:

So this is not the OS proper for now, just the open source project, so that devs can already dive into the code and collaborate or experiment with it. It's all there: the Chromium projects.

Note: I thought I remembered that they already had released somehow a desktop OS, called gOS, but they did not. gOS stands for "Good OS" and is a modified version of Ubuntu with an emphasis on web 2.0 apps and "in the cloud" data.

jeudi, septembre 3 2009

Update of the 'Share on reader' command for Ubiquity

I've finally updated that command that allows to share content on your Google Reader Shared Items page (providing you've got one!). The new version allows you to type the name without the hyphens (no more share-on-reader), you can also type share using reader, or note using reader, or note with reader.For those of you who don't know Ubiquity, head up to the project page.

You can install the "Share on reader" command by going there and clicking subscribe in the popup above the page.

CmdUtils.CreateCommand({
  names: [ "share on Reader", "note with Reader", "share using Reader", "note using reader" ],
  homepage: "http://abauchu.net/",
  icon: "http://www.google.com/reader/ui/favicon.ico",
  author: { name: "Alexis Bauchu", email: "alexis.bauchu@gmail.com" },
  license: "MPL",
  description: "Shares content Google Reader's shared stuff page and allow you to add a note.",
  help: "This uses Google Reader, so you need a Google account to use this command.",

 
  arguments: [ 
    { role: 'object', nountype: noun_arb_text, label: 'extract' }
  ],

 
  execute: function (args) {
   var cmd = "var b=document.body;var GR________bookmarklet_domain='http://www.google.com';if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/link-bookmarklet.js');void(b.appendChild(z));}else{}";
   var doc = Application.activeWindow.activeTab.document;
   var body = doc.body;
   void (cript = doc.createElement('script'));
   void (code = doc.createTextNode(cmd));
   void (cript.appendChild(code));
   void (body.appendChild(cript));
  }

});

mardi, août 18 2009

The Quest for the Holy Tools

I like tools. I think it's what I want my job to be about: making better tools. Tools are what stands in between of people and their work, and the better the tools are, the better the work can be. Good tools make your life easier, thus making you happier, thus making you more efficient. So it's good to invest in tools: everybody needs them, they always need to be improved, and people are grateful to you for making them.

Lire la suite...

lundi, août 10 2009

And Perforce failed me yet again...

I guess that software can smell when you're afraid of them. So they get nervous and do nasty stuff to you. I don't see any other explanation! I'm not in good terms with Perforce, and it knows it...

At work we had a bug, a big crash, and there was no way to find out what was wrong. It wasn't a problem in the game executable, so it had to be something with the data, but data change faster than the executable do. In order to locate the bug, I started to test older revisions of the whole data set. Re-synching, reconstructing, testing, getting a less old revision, re-test, and so on. I was resynching using the date and time. But noticed I would be able to go faster by resynching on changelists rather than dates. Boy was I wrong.

Don't try to get a specific changelist, EVER! Perforce started to delete the content of my workspace! And it goes pretty fast, believe me. By the time I noticed I was wrong, like 30 seconds, it had deleted so much, that resynching and reconstructing the lost data took about an hour. A 30 seconds error cost me an hour of work! And I still didn't know where the bug was!

Thank You for Nothing Perforce! I'll have you!

jeudi, janvier 8 2009

Ubiquity command: share-on-reader and share-on-reader-secure

The share-on-reader command is the first ubiquity command I've ever coded. I made it just to try ubiquity's command editor, but I wouldn't expect people to use it. It's basically a wrapper of Google Reader's bookmarklet that allows you to select (or not) text from a web page, and share it with a note on your Google Reader Shared Stuff Page (providing you've got a Google Account and activated Google Reader). It's that simple. You can subscribe to that command on that page. Here is the code:

CmdUtils.CreateCommand({
  name: "share-on-reader",
  homepage: "http://abauchu.net/",
  icon: "http://www.google.com/reader/ui/favicon.ico",
  author: { name: "Alexis Bauchu", email: "alexis.bauchu@gmail.com"},
  license: "MPL",
  description: "Shares content Google Reader's shared stuff page and allow you to add a note.",
  help: "This uses Google Reader, so you need a Google account to use this command.",
 
  takes: {"your selection": noun_arb_text},
  preview: function( pblock, selection ) {
    pblock.innerHTML = "Shares \"" + selection.html + "\" with Google Reader and allows to add a note";
  },
  execute: function(selection) {
   var cmd = "var b=document.body;var GR________bookmarklet_domain='http://www.google.com';if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/link-bookmarklet.js');void(b.appendChild(z));}else{}";
   var doc = Application.activeWindow.activeTab.document;
   var body = doc.body;
   void (cript = doc.createElement('script'));
   void (code = doc.createTextNode(cmd));
   void (cript.appendChild(code));
   void (body.appendChild(cript));
  }
});

The code is rather long, because at the time there wasn't any command like CmdUtils.makeBookmarkletCommant(). I could have updated it, but I like it like that. You know, it's my first one.

But this command doesn't work with the https version of Google Reader (I should say the bookmarklet doesn't work, because I virtually didn't code anything). Someone commented about it in this blog: he uses the customizegoogle extension which automatically redirects the normal url to the secured one (https). And it breaks the command. So I tried some stuff, and came with a solution: in fact, on the https version of the website, Google provides ANOTHER bookmarklet, working this time. Simple! You can subscribe here. Here's the code:

CmdUtils.makeBookmarkletCommand({
  name: "share-on-reader-secure",
  url: "javascript:var%20b=document.body;var%20GR________bookmarklet_domain='https://www.google.com';if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='https://www.google.com/reader/ui/link-bookmarklet.js');void(b.appendChild(z));}else{}"
});

Reminder: makeBookmarkletCommand

This is just a reminder: how to make a command out of a bookmarklet. For example, a command that embed a Flickr photo (the example is taken from Aza Raskin's blog).

CmdUtils.makeBookmarkletCommand({
name: "Embed Flickr Photo",
url: "javascript:(function(){if(window.page_p)window.open('http://www.elsewhere.org/mbedr/?p='+window.page_p.id);%20else%20alert('No%20Flickr%20photo%20found.');})()"
});

Replace the url by your bookmarklet code.

mercredi, décembre 31 2008

Ubiquity: makeSearchCommand template

This is just a reminder of the search command template. It allows you to create in no time what must be the most used feature of Ubiquity at the moment.

Use the command-editor command, and type the following code in the editor:

CmdUtils.makeSearchCommand({
  name: "your-function-name",
  url: "http://url-to-my-search-engine/?q={QUERY}",
  icon: "http://url-to-my-search-engine/favicon.ico",
  description: "Searches 'my-search-engine' for your words."
});

And just replace your-function-name and url-to-my-search-engine by your own new values. You may have to adapt the query url though.

An example, which searches cplusplus.com:

CmdUtils.makeSearchCommand({
  name: "c++",
  url: "http://www.cplusplus.com/query/search.cgi?q={QUERY}",
  icon: "http://www.cplusplus.com/favicon.ico",
  description: "Searches cplusplus.com for your words."
});

jeudi, novembre 27 2008

It happens more often that you may think...

As I arrived at school this morning, I synced my computer with Perforce. I know there would be conflicts, but in like 3 or 4 files. It appeared that a dozen files had conflicts. There were files I didn't even touch, so it was easy to 'revert' my 'non-modifications' so Perforce feels ok, or to tell it to accept 'their' modifications over 'mine'. But it also happened in a file I knew could have been modified. So I ran the resolve tool to check what lines were conflicting. Here it is:

No Conflict

So it actually knows I didn't do anything AND/SO there's no conflict of any kind. What kind of resolver is that? That's one of the things I don't really get when I use Perforce, things that make me regret a bit SVN or Bazaar.