Dev Life
Diversão com hardware: como criamos uma arma controlada por e-mail para a PyCon 2013
Nós da Mailgun não patrocinamos (nem participamos de) muitas conferências. Na verdade, até hoje só patrocinamos uma: PyCon. Abrimos uma exceção para a PyCon porque ela sempre pareceu a conferência perfeita para a Mailgun.
Primeiro e mais importante, a Mailgun foi criada usando principalmente Python. Segundo, a conferência não tem as mesmas enrolações da maioria dos outros eventos. Todos os anos, ela serve como um excelente contraponto ao SXSW. A ideia é criar coisas e promover o avanço do Python. Ainda não fomos ao SXSW, mas fazemos questão de patrocinar a PyCon todos os anos.
Preparativos para a PyCon
Neste ano, queríamos fazer algo um pouco mais interessante do que apenas distribuir camisetas e adesivos. Queríamos nos destacar um pouco. É difícil competir com a cerveja de graça da HP, mas pensamos que, se criássemos algo com o espírito da conferência, poderíamos chamar a atenção de outras pessoas além dos caçadores de brindes.
Pensamos em encomendar alguns brindes, mas nenhuma ideia nos animou de verdade. O que realmente nos empolgou foi construir uma Mailgun na vida real. Tivemos a ideia de construir uma arma de sentinela cujo gatilho era acionado pelo envio de um e-mail pela Mailgun. Isso nos permitiu demonstrar um caso de uso (embora bem peculiar) da Mailgun e, como disse uma das pessoas que visitou nosso estande, serviu para “trazer o software para o mundo físico”.
Indo além da fase de ideias
Começamos com a ideia de usar uma arma de paintball. Depois de uma rápida conversa com a organização da conferência, percebemos que nossa equipe jurídica poderia não gostar muito da ideia. Então, acabamos optando por uma arma de Nerf. Quem participasse poderia acionar o gatilho da arma enviando um e-mail para uma Rota da Mailgun. A Rota da Mailgun aceitaria o e-mail e faria um POST para um serviço da web, que enviaria um sinal para a arma disparar. Se a arma acertasse o alvo, quem participasse ganharia uma camiseta. Era preciso merecer a camiseta no estande da Mailgun.
O primeiro grande obstáculo era que não somos hackers de hardware e não tínhamos muito tempo para descobrir como fazer isso. Felizmente, conhecíamos um pessoal da YC que poderia nos ajudar com isso, a Upverter.

A Upverter oferece ferramentas de engenharia baseadas na nuvem e tem uma grande rede de especialistas em hardware. Perguntamos se eles poderiam nos ajudar. Demos bastante liberdade quanto ao design e aos materiais e, em poucos dias, eles criaram um concurso para construir a “Mailgun”.
A Upverter torna a ideia realidade
Em algumas semanas, a Upverter recebeu três projetos, sendo o vencedor este design.
Abaixo está um resumo do processo de design da Upverter:
Escolhemos a Nerf Vulcan Rapid Fire EBF-25, pois ela tem um modo totalmente automático. Com a arma escolhida, os requisitos foram publicados:
- Desenvolver hardware e software para movimentar a arma horizontalmente usando um servomotor, e dispará-la usando um relé.
- Pontos extras pelo uso do Python, já que a demonstração seria feita em um evento de Python.
O design final usou um Raspberry Pi rodando um servidor web Flask. A Mailgun foi usada para fazer solicitações POST para esse servidor, o que faria a arma disparar. Outras solicitações POST poderiam iniciar e interromper a ação de movimento horizontal da arma.
A A biblioteca pi-blaster para PWM foi usada para controlar os servos e garantir que o tempo do pino do gatilho disparasse apenas um dardo.
O código-fonte do design está disponível no GitHub.
O projeto mecânico usou um tripé como suporte, além de uma caixa de engrenagens simples que permitia que o servo girasse a arma. Ela se movimentava continuamente, disparando um dardo quando um e-mail era recebido. O disparo era controlado pelo mecanismo original da arma, usando um relé para simular o sinal do gatilho.
O desafio da regra 80/20
A arma e os outros hardwares chegaram na terça-feira antes da PyCon quase todos montados e prontos para uso. No entanto, à medida que pensávamos melhor em como isso funcionaria de verdade, percebemos que tínhamos mais alguns desafios para resolver.
1) Como vamos automatizar o alvo? Poderíamos colocar algum tipo de alvo e apenas observar para ver se ele era atingido, mas isso não teria graça. Alguém precisaria ficar lá sentado observando, e haveria distrações.
2) Precisávamos de uma fila para os envios. Várias pessoas poderiam enviar e-mails quase ao mesmo tempo.
3) Precisávamos de uma forma de avisar às pessoas em qual lugar da fila elas estavam e quem ganhou.
4) O acesso à rede poderia ser complicado no local da conferência. O endereço IP do Raspberry Pi poderia não ser acessível publicamente, então talvez não fosse possível fazer um POST HTTP para ele.
Como na maioria das coisas, os últimos 20% do projeto incluíram uma série de detalhes que precisavam ser resolvidos. Infelizmente, tínhamos apenas dois dias.
Por sorte, Anton, da nossa brilhante equipe de engenharia, tinha acabado de chegar da Rússia e entrou em ação. Veja o design que ele criou para o sistema.

Anton configurou um servidor web e programou um aplicativo para lidar com a maior parte desses desafios. O aplicativo da web colocaria os envios em uma fila, exibindo a fila e quem ganhou em um navegador. Depois, bastava conectar um monitor a qualquer computador para mostrar o status do envio a quem participasse. Além disso, o aplicativo da web permitiu que o Raspberry Pi consultasse o servidor web em busca de envios em vez de precisar aceitar solicitações POST.

Em uma atitude genial, Anton teve a ideia de usar um tablet Android como alvo. O acelerômetro do dispositivo agia como um gatilho ao registrar um acerto e, em seguida, faria um POST para o aplicativo da web. Isso tinha a vantagem adicional de poder exibir o logotipo da Mailgun na tela como o alvo.

Anton também adicionou alguns toques interessantes, como a capa protetora de Lego em torno do Raspberry Pi.

A arma fez o maior sucesso na conferência. Tivemos mais de 400 envios e muitas pessoas vencedoras. Talvez a gente tenha facilitado demais.
Além disso, a arma nos deu o benefício adicional de podermos brincar quando o movimento estava fraco durante as sessões. Aqui está Anton com um sorriso diabólico ao ativar o modo automático da arma.
Sim, toda essa engenhoca era um pouco como uma máquina de Rube Goldberg improvisada, mas com certeza foi muito divertida… e é mais ou menos esse o objetivo da PyCon.