Dev Life
Hardware amusant : construire un pistolet contrôlé par email pour la PyCon 2013
Chez Mailgun, nous sponsorisons (ou participons à) peu de conférences. En fait, à ce jour, nous n’en avons sponsorisé qu’une seule : PyCon. Nous faisons une exception pour la PyCon car elle nous a toujours semblé être la conférence idéale pour Mailgun.
Premièrement, et c’est le plus important, Mailgun est principalement développé avec Python. Deuxièmement, la conférence est dépourvue du baratin présent dans la plupart des autres événements. Elle offre chaque année un contraste admirable avec le SXSW. Elle se concentre sur la création de projets et sur le développement de Python. Nous n’avons pas encore participé au SXSW, mais nous mettons un point d’honneur à sponsoriser la PyCon chaque année.
Se préparer pour la PyCon
Cette année, nous voulions faire quelque chose d’un peu plus intéressant que de simplement venir avec des t-shirts et des autocollants. Nous voulions nous démarquer un peu. Il est difficile de rivaliser avec la bière gratuite de HP, mais nous nous sommes dit que si nous proposions quelque chose dans l’esprit de la conférence, nous pourrions attirer l’attention au-delà des chasseurs de t-shirts.
Nous avons réfléchi à quelques idées de goodies à commander, mais cela ne nous emballait pas vraiment. Ce qui nous a enthousiasmés, c’était de construire un véritable Mailgun physique. Nous avons eu l’idée de construire une tourelle automatisée déclenchée par l’envoi d’un email via Mailgun. Cela nous a permis de démontrer un cas d’usage (bien que très obscur) de Mailgun et, comme l’a mentionné l’une des personnes qui a visité notre stand, cela a permis de « faire entrer le logiciel dans le monde physique ».
Aller au-delà de la phase d’idéation
Nous sommes partis sur l’idée d’utiliser un lanceur de paintball. Après une vérification rapide auprès de l’organisation de la conférence, nous avons réalisé que notre équipe juridique n’apprécierait peut-être pas l’idée. Nous avons donc finalement opté pour un pistolet Nerf. Les personnes participantes pouvaient déclencher le pistolet en envoyant un email à une Route Mailgun. La Route Mailgun acceptait l’email et envoyait une requête POST à un service web, qui donnait ensuite au pistolet le signal de tirer. Si le pistolet touchait une cible, la personne gagnait un t-shirt. Il fallait mériter son t-shirt sur le stand de Mailgun.
Le premier grand obstacle était que nous ne sommes pas des spécialistes du matériel et que nous n’avions pas beaucoup de temps pour trouver une solution. Heureusement, nous connaissions des membres de YC qui pouvaient nous aider, Upverter.

Upverter propose des outils d’ingénierie basés sur le cloud et disposait d’un vaste réseau d’experts et d’expertes en matériel. Nous leur avons demandé de nous prêter main-forte. Nous leur avons laissé beaucoup de liberté quant à la conception et aux matériaux, et en quelques jours, ils avaient mis en place un concours pour construire le « Mailgun ».
Upverter concrétise l’idée
En quelques semaines, Upverter a reçu trois propositions, dont cette proposition gagnante design.
Voici un résumé du processus de conception par Upverter :
Nous avons opté pour le Nerf Vulcan Rapid Fire EBF-25 car il disposait d’un mode entièrement automatique. Une fois le pistolet choisi, les exigences ont été publiées :
- Développer le matériel et le logiciel pour faire pivoter le pistolet à l’aide d’un servomoteur et le faire tirer grâce à un relais.
- Des points bonus étaient accordés pour l’utilisation de Python, puisque la démonstration aurait lieu lors d’un événement dédié à Python.
La conception finale utilisait un Raspberry Pi faisant tourner un serveur web Flask. Mailgun a été utilisé pour envoyer des requêtes POST à ce serveur, ce qui déclenchait les tirs du pistolet. D’autres requêtes POST pouvaient démarrer et arrêter l’action de rotation du pistolet.
L’ bibliothèque pi-blaster pour le PWM a été utilisée pour contrôler les servomoteurs et s’assurer que la synchronisation sur la broche de déclenchement ne tirait qu’une seule fléchette.
Le code source de ce projet est disponible sur GitHub.
La conception mécanique utilisait un trépied comme support, ainsi qu’un mécanisme d’engrenage simple permettant au servomoteur de faire pivoter le pistolet. Il pivotait en continu, tirant une fléchette à la réception d’un email. Le tir était géré par le mécanisme d’origine du pistolet, en utilisant un relais pour simuler le signal de déclenchement.
La règle des 80/20 pointe le bout de son nez
Le pistolet et le reste du matériel sont arrivés le mardi précédant la PyCon, en grande partie assemblés et prêts à l’emploi. Cependant, en réfléchissant plus en détail à la façon dont cela allait concrètement fonctionner, nous avons réalisé qu’il nous restait encore quelques défis à relever.
1) Comment automatiser la cible ? Nous pouvions installer une cible quelconque et simplement regarder si elle était touchée, mais c’était plutôt nul. Il aurait fallu que quelqu’un reste assis à surveiller, sans compter les distractions possibles.
2) Il nous fallait une file d’attente pour les participations. Plusieurs personnes risquaient d’envoyer des emails presque en même temps.
3) Il nous fallait un moyen d’indiquer aux personnes leur position dans la file d’attente et l’identité des gagnants et gagnantes.
4) L’accès au réseau risquait d’être compliqué sur le lieu de la conférence. L’adresse IP du Raspberry Pi ne serait peut-être pas accessible publiquement, rendant impossible l’envoi d’une requête HTTP POST.
Comme pour la plupart des projets, les derniers 20 % comportaient de nombreux détails à régler. Malheureusement, nous n’avions que deux jours.
Heureusement, Anton, l’un de nos brillants ingénieurs qui venait d’arriver de Russie, est passé à l’action. Voici l’architecture du système qu’il a conçue.

Anton a configuré un serveur web et développé une application pour résoudre la plupart de ces problèmes. L’application web devait placer les participations dans une file d’attente, puis afficher celle-ci ainsi que les gagnants et gagnantes dans un navigateur. Il nous suffisait alors de connecter un écran à n’importe quel ordinateur pour montrer aux personnes le statut de leur participation. De plus, l’application web permettait au Raspberry Pi d’interroger le serveur web pour récupérer les participations, au lieu de devoir accepter des requêtes POST.

Dans un éclair de génie, Anton a eu l’idée d’utiliser une tablette Android comme cible. L’accéléromètre de l’appareil détecterait un impact et enverrait ensuite une requête POST à l’application web. Cela présentait l’avantage supplémentaire de pouvoir afficher le logo de Mailgun à l’écran en guise de cible.

Anton a également ajouté quelques finitions sympathiques, comme le boîtier de protection en Lego autour du Raspberry Pi.

Le pistolet a rencontré un franc succès lors de la conférence. Nous avons enregistré plus de 400 participations et récompensé de nombreuses personnes. C’était peut-être trop facile.
De plus, le pistolet offrait l’avantage de nous permettre de nous amuser lors des moments de creux pendant les conférences. Voici Anton, affichant un sourire diabolique en passant le pistolet en mode automatique.
Oui, toute cette installation était un peu une machine de Rube Goldberg bricolée, mais c’était vraiment amusant… et c’est bien là l’esprit de la PyCon.