zPilot au DevFest Nantes!

Le 8 Novembre dernier a eu lieu la conférence DevFest à Nantes. Cette journée de conférences, organisée par le Google Developers Group Nantes, a accueilli plus de 300 personnes dans les locaux d’Epitech. « Les DevFests sont des évènements communautaires de grande envergure, ayant lieu à travers le monde, suivant la tradition des Google Developer Days et organisés par des groupes d’utilisateurs locaux ».

Zenika était sponsor de l’évènement et avait pour l’occasion préparé une démonstration, nommée zPilot, permettant d’animer les inter-conférences des visiteurs.

zPilot

zPilot - le jeu

zPilot est un jeu multi-joueur, tournant dans votre navigateur web, proposant l’analyse en temps réel des parties jouées. Cette analyse est réalisée en mixant de nombreuses technologies, que l’on retrouve de plus en plus sur nos projets : AngularJS, Couchbase, ElasticSearch…

Pour cette démonstration, nous avons utilisé le jeu HTML5 Wpilot développé par Johan Dahlberg sous licence open-source. Le principe est simple, le joueur est au commande d’un vaisseau spatial, se déplaçant en apesanteur, et doit combattre les autres joueurs sur différentes cartes de jeu.

Enhanced by Zenika

Pour l’occasion, certaines évolutions ont été apportées :

Un gamepad pour les mobiles

L’ajout d’un gamepad rendant le jeu accessible pour tous les joueurs mobiles.

Une application permettant de choisir un serveur parmi l’un des huit mis à disposition lors de la conférence.

zPilot Hub

La gestion de nombreux évènements rendant ainsi le jeu plus ludique et plus fun:

  • Distinction des différentes façons de mourir: crash contre un mur, crash contre un autre joueur, tir réussi…
  • Connexion / Déconnexion des joueurs
  • Ensemble des tirs réalisés par les joueurs
  • Type de joueur (étudiant, freelance ou entreprise)
Un tableau de bord dynamique

De l’analyse de ces différents évènements, zPilot génère un tableau de bord couvrant l’historique du jeu sur une période donnée. zPilot permet ainsi d’accéder à différentes informations :

  • Liste des serveurs utilisés
  • Liste des joueurs ayant joués sur la période considérée
  • Statistiques sur le nombre de morts, nombre de suicides, temps joué cumulé …
  • Classements des différents joueurs : “Les plus meurtriers”, “Les plus morts”, “Les plus suicidaires”
  • Le game feed : permettant d’accéder en temps réel aux derniers évènements du jeu

Ces statistiques sont, par la suite, présentées sur un tableau de bord responsive permettant ainsi l’affichage sur les mobiles pour les joueurs préférant ce biais.

Il est possible de sélectionner un serveur et / ou un joueur particulier pour accéder à ses statistiques personnelles.

Résultats de la journée

Un peu de technique

Un déploiement continu

La première étape de ce prototype était l’automatisation de la chaîne de déploiement et cela pour trois raisons :

  1. Faciliter la mise en production
  2. Démontrer qu’aujourd’hui le javascript s’industrialise aussi bien (ou presque) que les autres langages.
  3. Utiliser AppEngine, le PAAS de Google et Compute Engine, le IAAS de Google, qui sont forcément d’actualité lorsqu’on est à un DevFest.

L’objectif est simple, le développeur ne s’occupe que du développement, et à chaque commit, les applications sont redéployées automatiquement.

Et puisqu’un schéma vaut mieux qu’un long discours, voici la chaîne de déploiement :

Un déploiement automatisé

Une architecture web : Le jeu et ses données

zPilot était ainsi l’occasion de mêler des technologies récentes afin de proposer un jeu développé pour le web avec les technologies du web.

Le jeu zPilot est réalisé en HTML5 et tous les clients communiquent avec le serveur de jeu via les websocket. Le serveur zPilot produit ainsi des évènements qui sont envoyés et persistés dans la base NoSQL Couchbase. Ici seules les opérations GET et PUT sont utilisées. Tous les documents Coucbbase sont alors répliqués vers ElasticSearch via le plugin transport de couchbase.

ElasticSearch indexe toutes les données, ce qui permet de les restituer de différentes façons sur notre interface web de monitoring, développée en AngularJS avec Bootstrap 3 et D3.js / NVD3.js pour les graphes.

Le schéma ci-dessous présente l’ensemble de l’architecture mise en place :

Une architecture pour le web par le web

Pour la restitution des données sur le tableau de bord, nous utilisons toute la puissance d’ElasticSearch et n’avons besoin que de deux requêtes HTTP:

  1. La première permet d’obtenir le game feed en récupérant les derniers évènements du jeu.
  2. La deuxième plus conséquente permettant de construire le reste du dashboard (graphiques, camemberts, classements et listes des joueurs et serveurs). Cette requête utilise les facettes ElasticSearch pour ramener différentes « vues » des mêmes données, tout ça en quelques millisecondes seulement. Cela permet notamment de minimiser le besoin de calcul côté client.

Merci!

Merci au GDG Nantes pour ce DevFest 2013 qui a présenté de nombreuses conférences de très bonnes qualités.

Mais aussi merci à toutes les personnes qui sont passés sur le stand pour voir, échanger et jouer à zPilot. Nous avons ainsi pu collecter 34041 documents (évènements) sur la journée durant lesquelles plus de 800 personnes ont été froidement assassinées alors que 1400 mourraient dans l’anonymat !

Enfin, félicitations aux speakers de Zenika pour leurs talks Go & AppEngine (Julien Landuré) et “De l’agilité pour mon projet : pour quoi faire?” (Christophe Addinquy et Martin Mouterde).

A l’année prochaine !

L'équipe Zenika

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :