1er imprévu avec Google Maps

Au mois de mai dernier, nous vous faisions part de notre premier imprévu. Nous l’avions comparé à un “hérisson blindé” qui nous aurait regardé avec ses yeux méchants.

Le hérisson nous bloquant la route ! Il fait peur non ?

Vous vous souvenez ? Il est temps de faire un point sur la situation… et sérieusement.

Rappel des faits !

C’est grâce aux services de Google Maps nous pouvons afficher la carte où se trouvent nos étapes, zoomer, dézoomer et surtout… tracer les itinéraires pour aller d’un point à un autre en suivant les routes, ces fameux “traits rouges” qui apparaissent dans nos captures du jeu !  🚕

Ulysse testant le contrôleur de trajet.

En mai dernier, Google Maps décide de changer ses règles de fonctionnement. Ces nouvelles règles nous concernent directement pour les demandes de trajets et nous allons essayer de vous l’expliquer.


Google Maps

Comment fonctionnent les trajets dans le jeu ?

Quand nous demandons un trajet à Google, voilà ce que ça donne :

Morceau de code

Pour simplifier : imaginez-vous dans le jeu.

Vous désirez passer d’une étape à une autre. D’après le morceau de code ci-dessus, vous souhaitez quitter l’étape n°137 “Aéroport des Trois-Rivières” et rejoindre l’étape n°148 “Aéroport d’Alma” (Ce n’est pas compliqué de lire un code ^^).

Dans le jeu que se passe-t-il ?

  1. L’ application demande à Google Maps : “Cher ami, quel est le meilleur itinéraire pour effectuer ce déplacement ?”
  2. Google Maps nous envoie gentiment le trajet en question : “ojehH`xmtLpCp@LmBd@uEd@{Fi@OsDk@iBg@sR{Fej@}OSKI?wBu@cL_DSKsgAmYyOqEigAi\iP}F_YyGi@Wk@}Aa@yASgAbDkeBIoDU{DeLmcAa@aEOy@IeAkFu]a@{AaA{Ai@c@{CcAk@GmDu@” (bon d’accord, là c’est carrément illisible)
  3. A réception de la réponse de Google Maps, nous faisons trois choses :

3.1 Nous décryptons ce charabia (hé oui cette suite de caractères a une signification secrète !)

3.2 Grâce à une optimisation déjà réalisée, nous sauvegardons la réponse de Google Maps sur nos serveurs pour ne plus la redemander ultérieurement.

3.3 Nous avançons le joueur vers le point désiré en suivant les instructions reçues. (ici l’étape n°148)

Nouvelles règles de Google Maps

Oui mais voilà… Google Maps a mis des limites en place. Il y a un quota par jour assez sévère à respecter : nous pouvons lui demander 2 500 trajets au maximum dans une journée.

Vous allez nous dire 2 500 trajets par jour, c’est énorme. Oui vous avez raison, si nous essayons de faire 2 500 trajets différents chaque jour, nous n’y arriverions pas. Pour un humain, c’est impossible.

Mais lorsque le jeu sera ouvert au public ? Il n’y aura plus un joueur, mais des centaines ou des milliers qui utiliseront Google Maps. Et plus vous serez nombreux (ce que nous souhaitons vraiment) et plus il y aura des demandes à faire à Google Maps.

Et c’est là que cela coince. Parce que tout à coup, 2 500 trajets par jour… c’est ridiculement faible ! Même si dans notre cas, on parle de 2 500 NOUVEAUX trajets (puisque nous  sauvegardons déjà les trajets envoyés par Google Maps). Le joueur qui demanderait le 2501ème nouveau trajet du jour se retrouverait bloqué. Et ce n’est absolument pas envisageable !

En se creusant la tête, il n’y avait pas 2 500 possibilités ! La seule solution était de récupérer l’intégralité des trajets avant de rendre les étapes disponibles aux joueurs dans le jeu !

Mais comment ?

Ça va prendre des mois ?

Un nombre de trajets colossale !

Début juillet, Globe-Trotter comptait déjà plus de 429 étapes (Juste pour le Québec^^ et nous continuons d’en ajouter).

Depuis, chaque étape, on doit pouvoir rejoindre toutes les autres étapes donc 428 trajets par étape : 428 x 428 = 183184 trajets !

Eh oui c’est déjà colossale !

C’est donc plus de 180 000 trajets qui doivent être demandés à Google Maps et sauvegardés.

Geoffroy a eu une première idée : réduire ces 180 000 trajets.

Isabelle : – “Eh ! On a dit que nous ne limiterions pas le jeu ! Si nous réduisons la quantité de trajets, il va falloir supprimer des étapes !”

Geoffroy : – “Mais je ne touche pas aux nombres d’étapes ! Un trajet qui va de A vers B ou de B vers A doit être identique. Il suffit de ne le demander que pour un sens. Ainsi on divise le nombre de trajets sauvegardés de moitié !

Isabelle : -…

Pas faux. Et pour nos serveurs, c’est une idée géniale : moins de trajets à mémoriser ça veut dire moins de données à stocker. Et moins on conserve d’informations sur un serveur et moins ça coûte cher.

L’idée semble excellente, pas un problème en vue (pour le moment ) la solution est validée. Et hop, il ne reste plus que 90 000 trajets à demander. C’est mieux… mais pas suffisant.

En effet, il n’est pas humainement possible de demander 2500 trajets par jour : il faudrait travailler uniquement là dessus à plein temps pendant des mois, le risque d’erreurs serait très important et c’est une tâche rébarbative.

Il faut une meilleur solution !

Une seule réponse : un robot !

Dans presque toutes les bonnes histoires, il y a un robot. Enfin dans toutes les histoires dont le héros est un programmeur. Vous connaissez peut-être quelques robots ? Nono le petit robot d’Ulysse 31, R2D2 dans Star Wars… Geoffroy a donc décidé de créer Iggis.

Iggis, le petit robot d’IG Studio

N’allez pas imaginer Iggis courant partout dans la pièce ou tapant sur un clavier avec ses petites pinces. Celui-ci est un programme et donc il est totalement virtuel. Grâce à lui, nous pourrions n’en avoir que pour 36 jours (au lieu de plusieurs mois^^) et les futurs joueurs de Globe-trotters pourront voyager sans aucune limite…

Créer Iggis !

Mais Iggis ce fut beaucoup de travail pour Geoffroy. Après plusieurs tâtonnements, un programme doué d’une certaine intelligence informatique est né : Iggis.

Avoir un robot à peu près intelligent, c’est bien… le contrôler c’est mieux ! Pour contrôler Iggis, Geoffroy a créé une petite interface pour pouvoir communiquer avec lui.

Vous ne verrez jamais cette interface dans le jeu. Mais dans notre version de tests, ces 5 boutons sont présents.

5 boutons pour communiquer avec Iggis

Bouton 1 : obliger Iggis à recommencer l’intégralité de son travail de la journée. Il faut pouvoir employer les grands moyens s’il n’a pas été sage !

Bouton 2 : enregistrer le rapport du travail en cours. Mais Geoffroy est un malin : il a préféré très vite ajouter une sauvegarde automatique à Iggis.

Bouton 3 : mettre Iggis au travail.

Bouton 4 : mettre  Iggis en pause. On pourrait s’en servir pour taquiner Iggis… En vrai cela permet à Geoffroy de corriger les bugs d’Iggis ou de l’améliorer. Iggis de toute façon ne possède  pas la fonction “humour” de programmée. C’est sûrement plus sage ainsi.

Bouton 5 : vérifier, en fin de journée, qu’Iggis a bien fait ce que nous avons demandé. Il ne faut jamais croire un robot sur parole !

Quand Geoffroy discute avec Iggis …

De la théorie à la pratique…

Google Maps autorise donc désormais 2 500 trajets par jour… mais ça c’est la théorie. En pratique, Google Maps a ses petites règles bien cachées qui ne nous facilitent pas la tâche mais le protège des attaques malveillantes.

Geoffroy a donc dû apprendre quelques règles à Iggis.

Règle n°1 : Ne pas se laisser abuser par les apparences

Notre gentil petit Iggis est bien discipliné. Il demande et enregistre un nouveau trajet par seconde (ben oui, nous sommes pressé !).  Donc il arrive que Google Maps confonde Iggis avec un méchant robot-pirate. Et boum ! Voilà Google Maps qui se met à parler anglais : “OVER_QUERY_LIMIT”. Et Iggis s’arrête…

Geoffroy se penche sur le problème : – Bizarre, Iggis n’a pas atteint son quota. Il doit y avoir une règle secrète. Quelque chose comme :  “un client ne doit pas demander trop de trajets trop vite, sinon on le bloque !”

Comment faire pour qu’Iggis puisse continuer à travailler ?

La solution : organiser le travail d’Iggis ! Il lui faut un journal (en langage programmeur c’est une sorte d’agenda^^) pour savoir à tout moment où il en est et ce qu’il lui reste à faire pour la journée.

Ainsi quand Google Maps hurle “OVER_QUERY_LIMIT”, Iggis enregistre très calmement son rapport et met à jour son journal.

Il patiente un moment puis ouvre tout seul une nouvelle fenêtre de navigateur et se remet au travail. Et voilà un problème de régler ! Geoffroy peut de nouveau vaquer à d’autres occupations.

Eh ! Qu’est-ce que tu fais toi ? (Non mais ces robots je vous jure…).

Ne vous inquiétez pas, on lui a bloqué les accès à Facebook et à Youtube pour ne pas qu’il perde du temps sur les réseaux sociaux 🙂

Règle n°2 : Passer outre la mauvaise humeur du robot de Google Maps

Iggis complètement indécis tapote virtuellement sur l’épaule de Geoffroy : -Google Maps vient de me dire “UNKNOWN_ERROR”, que dois-je faire ?”

Oups ! il y a une erreur…

Geoffroy : -Houla, il n’a pas l’air content… Si je traduis en français ça donne : “Euh… tu es gentil, mais si tu crois que j’ai pris le temps de faire une documentation pour t’expliquer comment je fonctionne en détails, tu peux aller te faire voir ! — signé Google Maps”. Euh Iggis, tu attends un peu et tu recommences.”

Iggis : -A vos ordres chef !

Pendant un moment, tout se passe  parfaitement bien. Et Geoffroy commence à se détendre et à griffonner un nouveau look à Ulysse.

Règle n°3 : Ignorer les bugs de level design

Iggis : -Chef ! Google Maps dit “ZERO_RESULT”. Je fais quoi ?

Geoffroy se penche de nouveau sur le problème, cherche… tapote… : -Ça veut dire que pour l’instant tu sautes cette étape. Il doit y avoir un bug dans ce qu’Isabelle a écrit, je ne vois que ça. (Moi : “Argh ! Un bug ? Nooooon !”)

Et finalement Iggis arrive au bout de la liste des étapes.

Résultat

Notre petit robot a parcouru en moyenne 2 400 nouveaux trajets chaque jour (et oui, il y a des jours avec et des jours sans !!). Pourtant ce petit veinard ne travaille que 3 heures par jour !

En moins de 3 mois, Iggis a déjà fait 2 fois la liste complète des 90 000 trajets, soit des millions de kilomètres.

Modifier Iggis

Si Iggis a abattu un énorme travail et l’a bien réalisé, il est désormais obsolète pour la suite du projet.

En effet si, à chaque correction ou ajout d’étapes, Iggis doit demander à nouveau l’intégralité des trajets pour corriger juste quelques informations ce sera trop long et trop laborieux.

Geoffroy s’est donc de nouveau penché sur le petit robot pour modifier sa programmation et la rendre plus adaptée à ses futures fonctions.

Avant d’aller demander quoique ce soit à Google Maps, Iggis doit désormais être capable de savoir si un trajet est déjà dans les serveurs ou non. De même il doit être capable d’identifier une nouvelle étape et en déduire les nouveaux trajets à demander à Google Maps.

Après quelques essais en situation… Nous sommes satisfait : Iggis est totalement rodé et il est prêt à s’attaquer à n’importe quel coin du globe.

La suite au prochain épisode 🙂

Mise à jour avec vos commentaires Facebook :

Please follow and like us:

Laisser un commentaire