Dev Life
Hardware-Spaß: Bau einer E-Mail-gesteuerten Kanone für die PyCon 2013
Wir bei Mailgun sponsern (oder besuchen) nicht viele Konferenzen. Tatsächlich haben wir bis heute nur eine einzige gesponsert: PyCon. Für die PyCon machen wir eine Ausnahme, denn sie hat sich schon immer wie die perfekte Konferenz für Mailgun angefühlt.
Erstens und am wichtigsten: Mailgun basiert in erster Linie auf Python. Zweitens verzichtet die Konferenz auf einen Großteil des Unsinns, den die meisten Konferenzen mit sich bringen. Sie ist jedes Jahr ein wunderbarer Gegenpol zur SXSW. Es geht darum, Dinge zu entwickeln und Python voranzubringen. Wir haben es zwar noch nicht auf die SXSW geschafft, aber wir legen großen Wert darauf, die PyCon jedes Jahr zu sponsern.
Vorbereitung auf die PyCon
In diesem Jahr wollten wir etwas Interessanteres machen, als nur mit T-Shirts und Aufklebern aufzutauchen. Wir wollten ein wenig auffallen. Es ist schwer, mit dem Freibier von HP mitzuhalten, aber wir dachten uns: Wenn wir uns etwas im Sinne der Konferenz einfallen lassen, könnten wir über die reine T-Shirt-Jagd hinaus Aufmerksamkeit erregen.
Wir haben über ein paar Ideen für Werbegeschenke nachgedacht, aber das hat uns nicht wirklich begeistert. Was uns hingegen begeisterte, war der Bau einer echten Mailgun. Wir kamen auf die Idee, ein automatisches Geschütz zu bauen, das durch das Versenden einer E-Mail über Mailgun ausgelöst wird. So konnten wir einen Anwendungsfall (wenn auch einen sehr ungewöhnlichen) für Mailgun demonstrieren und, wie jemand an unserem Stand treffend bemerkte, „die Software in die physische Welt bringen“.
Über die Ideenphase hinaus
Zunächst hatten wir die Idee, eine Paintball-Pistole zu verwenden. Nach kurzer Rücksprache mit der Konferenzleitung wurde uns jedoch klar, dass unsere Rechtsabteilung davon wahrscheinlich nicht begeistert sein würde. Also entschieden wir uns letztendlich für eine Nerf-Gun. Teilnehmende konnten die Gun auslösen, indem sie eine E-Mail sendeten an eine Mailgun-Route. Die Mailgun-Route empfängt die E-Mail und sendet einen POST-Request an einen Webservice, der der Gun das Signal zum Feuern gibt. Wurde ein Ziel getroffen, gab es als Gewinn ein T-Shirt. Am Mailgun-Stand musste man sich das T-Shirt erst verdienen.
Die erste große Hürde war, dass wir nicht besonders viel Erfahrung mit Hardware haben und wenig Zeit blieb, um uns einzuarbeiten. Zum Glück kannten wir ein paar Leute von YC, die uns dabei helfen konnten, Upverter.

Upverter bietet cloudbasierte Engineering-Tools und verfügt über ein großes Netzwerk von Hardware-Profis. Wir fragten, ob sie uns unterstützen könnten. Wir ließen ihnen viel Spielraum bei Design und Materialien, und innerhalb weniger Tage starteten sie einen Wettbewerb zum Bau der „Mailgun“.
Upverter lässt die Idee Wirklichkeit werden
Innerhalb weniger Wochen erhielt Upverter drei Einreichungen und dieses siegreiche Design.
Im Folgenden finden Sie eine Zusammenfassung des Designprozesses von Upverter:
Wir entschieden uns für die Nerf Vulcan Rapid Fire EBF-25, da sie über einen vollautomatischen Modus verfügt. Nachdem die Wahl getroffen war, wurden die Anforderungen veröffentlicht:
- Entwicklung von Hardware und Software, um die Gun mithilfe eines Servomotors zu schwenken und über ein Relais abzufeuern.
- Bonuspunkte für die Verwendung von Python, da die Präsentation auf einem Python-Event stattfinden würde.
Das finale Design basierte auf einem Raspberry Pi, auf dem ein Flask-Webserver lief. Mailgun wurde genutzt, um POST-Requests an diesen Server zu senden und die Gun abzufeuern. Weitere POST-Requests konnten die Schwenkaktion der Gun starten und stoppen.
Die pi-blaster-Bibliothek für PWM wurde verwendet, um die Servos zu steuern und sicherzustellen, dass das Timing des Trigger-Pins nur einen einzigen Pfeil abfeuert.
Der Quellcode für das Design ist auf GitHub verfügbar.
Das mechanische Design nutzte ein Stativ als Stütze und ein einfaches Getriebe, mit dem der Servo die Gun drehen konnte. Sie schwenkte kontinuierlich und feuerte einen Pfeil ab, sobald eine E-Mail einging. Das Abfeuern erfolgte über den Standardmechanismus der Gun, wobei ein Relais das Trigger-Signal simulierte.
Die 80/20-Regel zeigt ihr hässliches Gesicht
Die Gun und die restliche Hardware kamen am Dienstag vor der PyCon fast vollständig zusammengebaut und einsatzbereit an. Als wir jedoch weiter darüber nachdachten, wie das Ganze in der Praxis funktionieren sollte, wurde uns klar, dass wir noch ein paar weitere Herausforderungen zu bewältigen hatten.
1) Wie automatisieren wir das Ziel? Wir könnten einfach eine Zielscheibe aufstellen und zusehen, ob sie getroffen wird, aber das wäre ziemlich langweilig. Jemand müsste danebensitzen und aufpassen, was leicht zu Ablenkungen führen könnte.
2) Wir brauchten eine Warteschlange für die Einreichungen. Es könnten mehrere Personen fast gleichzeitig E-Mails senden.
3) Wir brauchten eine Möglichkeit, dem Publikum mitzuteilen, an welcher Stelle der Warteschlange sie stehen und wer gewonnen hat.
4) Der Netzwerkzugang am Veranstaltungsort der Konferenz könnte problematisch sein. Die IP-Adresse des Raspberry Pi ist möglicherweise nicht öffentlich zugänglich, sodass ein HTTP-POST-Request dorthin eventuell nicht funktioniert.
Wie bei den meisten Dingen umfassten die letzten 20 % des Projekts viele Details, die noch geklärt werden mussten. Leider hatten wir dafür nur zwei Tage Zeit.
Zum Glück war einer unserer brillanten Entwickler, Anton, gerade aus Russland angereist und trat in Aktion. Hier ist das Systemdesign, das er entworfen hat.

Anton richtete einen Webserver ein und schrieb eine Anwendung, um die meisten dieser Herausforderungen zu lösen. Die Web-App sollte die Einreichungen in eine Warteschlange einreihen und diese sowie alle, die gewonnen haben, in einem Browser anzeigen. So konnten wir einfach einen Monitor an einen beliebigen Computer anschließen, um den Teilnehmenden den Status ihrer Einreichung anzuzeigen. Darüber hinaus ermöglichte die Web-App dem Raspberry Pi, den Webserver auf neue Einreichungen abzufragen, anstatt POST-Requests empfangen zu müssen.

In einem genialen Schachzug kam Anton auf die Idee, ein Android-Tablet als Zielscheibe zu verwenden. Der Beschleunigungssensor des Geräts registrierte einen Treffer und sendete anschließend einen POST-Request an die Web-App. Das hatte den zusätzlichen Vorteil, dass das Mailgun-Logo als Ziel auf dem Bildschirm angezeigt werden konnte.

Anton fügte auch ein paar nette Details hinzu, wie das schützende Lego-Gehäuse um den Raspberry Pi.

Die Gun war auf der Konferenz ein echter Hit. Wir hatten über 400 Einreichungen und viele, die gewonnen haben. Vielleicht haben wir es etwas zu einfach gemacht.
Außerdem hatte die Gun den Vorteil, dass wir ein bisschen damit herumspielen konnten, wenn es während der Sessions ruhiger war. Hier ist Anton mit einem teuflischen Grinsen, während er die Gun in den Automatikmodus schaltet.
Ja, die ganze Konstruktion war eine Art Rube-Goldberg-Maschinen -Hack, aber es hat auf jeden Fall Spaß gemacht … und genau darum geht es bei der PyCon.