{"id":20104,"date":"2026-09-14T22:07:07","date_gmt":"2026-09-14T22:07:07","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/missao-para-marte-pycon-2014\/"},"modified":"2026-09-14T22:07:07","modified_gmt":"2026-09-14T22:07:07","slug":"missao-para-marte-pycon-2014","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/","title":{"rendered":"Miss\u00e3o para Marte \u2013 PyCon 2014"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Nos divertimos muito na PyCon 2013 com nossa\u00a0<a href=\"\/?blog_category=hardware-fun-building-an-email-controlled-gun-for\" target=\"_tabs\" rel=\"noopener noreferrer\">arma Nerf gigante movida a e-mail<\/a>. Fez muito sucesso com o p\u00fablico e, para a PyCon 2014, quer\u00edamos fazer algo ainda mais legal. Ent\u00e3o, \u00e9 claro que dever\u00edamos come\u00e7ar com&#8230; um aspirador de p\u00f3. Neste post do blog, mostramos como fomos de um aspirador de p\u00f3 para um Mars Rover e acabamos nos divertindo muito de novo na PyCon deste ano.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-8086\"><p class=\"h5 m-0\" id=\"toc-title-8086\">\u00cdndice<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#de-origens-humildes-uma-missao-para-marte\">De origens humildes&#8230; uma miss\u00e3o para Marte<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#como-funciona\">Como funciona<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#vamos-precisar-de-mais-legos\">Vamos precisar de mais Legos<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#prezada-tsa\">Prezada TSA,<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#novo-e-melhorado-mas-nao-por-escolha\">Novo e melhorado&#8230; mas n\u00e3o por escolha<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\"><strong>De origens humildes&#8230; uma miss\u00e3o para Marte<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Anton, nosso engenheiro el\u00e9trico que virou desenvolvedor de software, comprou um\u00a0<a href=\"http:\/\/www.neatorobotics.com\/products\/\">aspirador rob\u00f4 da Neato\u00a0<\/a>depois de muita pesquisa, comparando o Neato com o popular Roomba da iRobot. O fator decisivo? Os aspiradores da Neato t\u00eam uma API que permite control\u00e1-los por c\u00f3digo. Exatamente o que precisar\u00edamos para nossa miss\u00e3o para Marte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma das muitas coisas de que gostamos em trabalhar na Rackspace, empresa que adquiriu o Mailgun em 2012, \u00e9 o hackday mensal. Nele, toda a equipe de engenharia do escrit\u00f3rio se re\u00fane para trabalhar em qualquer coisa que considere interessante, seja relacionada a um projeto oficial da Rackspace ou n\u00e3o. Chamamos alguns colegas da Rackspace e passamos o dia trabalhando no c\u00f3digo que usar\u00edamos para controlar o rob\u00f4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sab\u00edamos que quer\u00edamos dar \u00e0s pessoas a capacidade de enviar comandos por e-mail para o rob\u00f4 como um mecanismo de controle e que o rob\u00f4 deveria conseguir se mover para frente, para tr\u00e1s e girar 360 graus. Tamb\u00e9m quer\u00edamos conseguir &#8220;coletar amostras&#8221; da superf\u00edcie marciana, ou seja, ligar o aspirador e tirar uma foto usando a c\u00e2mera montada no que viria a ser a torre de instrumentos principal do rover.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Como funciona<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Muitos dos detalhes do nosso jogo para a PyCon deste ano eram diferentes, mas aprendemos uma coisa com o ano passado:<br>o acesso \u00e0 rede poderia ser complicado no local da confer\u00eancia. O endere\u00e7o IP do Raspberry Pi poderia n\u00e3o ser acess\u00edvel publicamente, ent\u00e3o talvez n\u00e3o fosse poss\u00edvel fazer um POST HTTP para ele.<br>&#8211;\u00a0<a href=\"https:\/\/68838d2e8987eb65e005d837--mailgun.netlify.app\/blog\/hardware-fun-building-an-email-controlled-gun-for\">Mailgun na PyCon 2013<\/a><br>Para resolver isso, usamos o Redis para garantir que o rover pudesse recuperar comandos do servidor, desde que o Raspberry Pi tivesse uma conex\u00e3o com a internet. Aqui est\u00e1 como isso se parece conceitualmente:<br><code>+ - - - - - + +-----------+ +------------+ +--------------+ | | | | | | | | SMTP | | HTTP | | | Email client +-----&gt; | Mailgun +-----&gt; | Web server | | | | | route | | | +--------------+ | | | | | | | | +-----+------+ +-----------+ | | | Redis lpush | (local) | | | v | +--------------+ +------------+ | | Redis brpop | | | | | Raspberry Pi |  | Raspery Pi Camera | | GPIO +-------------------+ +-------------------&gt; | Brick Pi | | serial port +-------------------+ +-------------------&gt; | Neato Vac | +-------------------+<\/code><br>Com isso resolvido, trabalhamos nos controles principais.<br>Abaixo est\u00e3o exemplos do c\u00f3digo que usamos para realmente controlar o rob\u00f4:<br><em>controlar a torre da c\u00e2mera com o BrickPi:<\/em><\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    def init(host, password): &quot;&quot;&quot;Init the required components.&quot;&quot;&quot; print &quot;Init BrickPi&quot; BrickPiSetup() BrickPi.MotorEnable[PORT_D] = 1 def camera_control(command, mission_control_address): print &quot;Camera control module received:&quot;, command if command in (&quot;up&quot;, &quot;down&quot;): if command &quot;up&quot;: BrickPi.MotorSpeed[PORT_D] = -100 elif command &quot;down&quot;: # despite the fact that the surface gravity of Mars is only # about 38% of Earth&#039;s there is still less force required to # bring the camera down BrickPi.MotorSpeed[PORT_D] = 50 BrickPiUpdateValues() sleep(0.5) # stop the motor BrickPi.MotorSpeed[PORT_D] = 0 BrickPiUpdateValues() elif command == &quot;take_picture&quot;: camera.capture(file_name) send_picture(file_name, mission_control_address) def send_picture(file_name, mission_control_address) &quot;&quot;&quot;Send picture back to the Mission Control Center.&quot;&quot;&quot; r = requests.post( &quot;https:\/\/api.mailgun.net\/v2\/mailgun.net\/messages&quot;, auth=(&quot;api&quot;, &quot;***&quot;), files=[(&quot;attachment&quot;, open(file_name))], data={&quot;from&quot;: &quot;Mars Rover &quot;, &quot;to&quot;: mission_control_address, &quot;cc&quot;: &quot;nsa@mailgun.net&quot;, # oops &quot;subject&quot;: &quot;A message from Mars&quot;, &quot;text&quot;: &quot;The picture of the surface is attached!&quot;})\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\"><em>Controlar o aspirador:<\/em><\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    def init(host, password): print &quot;Init Vacuum Base!!!&quot; vac_port = serial.Serial(&quot;\/dev\/ttyACM1&quot;) def vac_run_command(command, read_response=True): print &quot;Vacuum base control module received:&quot;, command try: vac_port.write(command) if not read_response: # provided command doesn&#039;t have a response return return read_response() except: # fault tolerance for the WIN! reconnect()\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\"><em>Aceitar solicita\u00e7\u00f5es POST do Mailgun:<\/em><\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    @app.route(&#039;\/mission_control&#039;, methods=[&#039;POST&#039;]) def mission_control(): &quot;&quot;&quot;Commands from Mailgun arrive here.&quot;&quot;&quot; command_message = request.form[&#039;stripped-text&#039;] from_ = request.form[&#039;From&#039;] for command in parse(command_message): robot.run(command, from_) return &quot;10-4&quot;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Vamos precisar de mais Legos<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Com o software pronto, come\u00e7amos a transformar nosso aspirador de p\u00f3 em um Mars Rover.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Come\u00e7amos procurando o melhor lugar para comprar Legos de uma cor s\u00f3 no atacado. Precisar\u00edamos de muitos Legos pretos, cinzas e brancos se f\u00f4ssemos criar um rover aut\u00eantico. Acontece que o\u00a0<a href=\"http:\/\/www.ebay.com\/sch\/i.html?_trksid=p2053587.m570.l1313.TR0.TRC0.H0.Xbulk+white+legos&amp;_nkw=bulk+white+legos&amp;_sacat=0&amp;_from=R40\">eBay \u00e9 o melhor lugar para comprar Legos<\/a>, muitas vezes por quilo. US$\u00a0118 depois, est\u00e1vamos prontos para come\u00e7ar.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"367\" height=\"489\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-1.png\" alt=\"Dois homens e uma crian\u00e7a trabalham juntos em uma mesa comprida coberta por pilhas de blocos de constru\u00e7\u00e3o classificados\" class=\"wp-image-11528\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-1.png 367w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-1-225x300.png 225w\" sizes=\"(max-width: 367px) 100vw, 367px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Montamos uma equipe de elite de engenharia para a miss\u00e3o, incluindo o filho de quatro anos de um dos membros da equipe do Mailgun, e espalhamos todos os Legos que formariam o corpo do rover. Aqui voc\u00ea v\u00ea Anton, Ralph e Luca nos preparativos. Depois de criar o prot\u00f3tipo de alguns dos principais componentes, formalizamos nosso design. O rover teria uma c\u00e2mera oscilante (alimentada por um motor Mindstorm Lego) montada no topo de uma torre de controle com integra\u00e7\u00e3o para\u00a0<a href=\"http:\/\/www.raspberrypi.org\/\">Raspberry Pi<\/a>,\u00a0<a href=\"http:\/\/www.dexterindustries.com\/BrickPi\/\">BrickPi<\/a>\u00a0e bateria reserva. Grande parte do corpo do rover tamb\u00e9m seria coberta por um painel solar USB funcional.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"490\" height=\"368\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-2.png\" alt=\"Diagrama de quadro branco mostrando vistas a\u00e9reas e traseiras de um rob\u00f4 com marcadores para painel solar, c\u00e2mera e Raspberry Pi\" class=\"wp-image-11532\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-2.png 490w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-2-300x225.png 300w\" sizes=\"(max-width: 490px) 100vw, 490px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Alguns trope\u00e7os, algumas risadas e algumas horas depois, est\u00e1vamos no caminho certo para ter um rob\u00f4 montado para demonstrar na apresenta\u00e7\u00e3o do hackday que, por coincid\u00eancia, estava programada para mais tarde naquele dia no escrit\u00f3rio da Rackspace.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"367\" height=\"489\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-3.png\" alt=\"Um homem trabalha em uma constru\u00e7\u00e3o complexa de LEGO constru\u00edda sobre a base de um aspirador de p\u00f3 rob\u00f3tico\" class=\"wp-image-11536\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-3.png 367w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-3-225x300.png 225w\" sizes=\"(max-width: 367px) 100vw, 367px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">E aqui est\u00e1 um close da torre de controle principal. A pe\u00e7a com o adesivo do Mailgun \u00e9 a bateria reserva. O Raspberry Pi e o BrickPi est\u00e3o montados sobre isso, e voc\u00ea pode ver o motor Lego no topo da foto. A c\u00e2mera do Raspberry Pi est\u00e1 um pouco fora de quadro.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"367\" height=\"489\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-4.png\" alt=\"Um rob\u00f4 constru\u00eddo com pe\u00e7as de LEGO e componentes eletr\u00f4nicos, apresentando um logotipo do Mailgun em sua base\" class=\"wp-image-11540\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-4.png 367w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-4-225x300.png 225w\" sizes=\"(max-width: 367px) 100vw, 367px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui est\u00e1 uma vista traseira do rover. Grande parte dos detalhes decorativos cromados foi adicionada por nosso membro mais jovem da miss\u00e3o, incluindo os dois bonecos de Lego. Um deles \u00e9 um marinheiro, e o outro \u00e9 um pirata. No fim das contas, essa seria apenas uma parte da miss\u00e3o que exigiria muita criatividade, como voc\u00ea ver\u00e1 mais adiante.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"490\" height=\"368\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-5.png\" alt=\"Duas minifiguras de LEGO est\u00e3o no conv\u00e9s de um modelo de navio de LEGO feito sob medida\" class=\"wp-image-11544\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-5.png 490w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-5-300x225.png 300w\" sizes=\"(max-width: 490px) 100vw, 490px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Terminamos um longo dia fazendo uma demonstra\u00e7\u00e3o do rover para nosso escrit\u00f3rio. Aqui est\u00e1 Anton analisando o rover finalizado.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"490\" height=\"368\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-6.png\" alt=\"Um homem se agacha e aponta para um pequeno rob\u00f4 enquanto um grupo de pessoas assiste\" class=\"wp-image-11548\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-6.png 490w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-6-300x225.png 300w\" sizes=\"(max-width: 490px) 100vw, 490px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Prezada TSA,<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sab\u00edamos que n\u00e3o poder\u00edamos levar o rover no avi\u00e3o para Montreal com a gente. Parece uma bomba, admitimos isso, e n\u00e3o quer\u00edamos ter uma longa e agrad\u00e1vel conversa com uma equipe de agentes da TSA. Ent\u00e3o, guardamos o rover cuidadosamente em uma mala grande, protegemos com cerca de 30 camisetas 50-50 bonitas e macias da American Apparel que distribuir\u00edamos \u00e0s pessoas na confer\u00eancia que testassem o rover. Tamb\u00e9m inclu\u00edmos um bilhete para a TSA, informando que era um rob\u00f4 feito com um Raspberry Pi. T\u00ednhamos certeza de que abririam a bolsa para dar uma olhada, mas n\u00e3o cont\u00e1vamos com o qu\u00e3o detalhista seria essa olhada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Novo e melhorado&#8230; mas n\u00e3o por escolha<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando chegamos ao nosso hotel em Montreal e abrimos a mala, nosso primeiro pensamento foi: droga, eles devem ter jogado muito a bolsa de um lado pro outro, porque muitas pe\u00e7as se soltaram completamente. No entanto, ap\u00f3s uma inspe\u00e7\u00e3o mais atenta, ficou claro que a TSA havia desmontado o rover, praticamente Lego por Lego. Alguns componentes ainda estavam intactos, mas as estruturas mais complexas, como a estrutura e a torre de controle, foram meticulosamente desmontadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com o caf\u00e9 na m\u00e3o, e a duas horas da abertura da confer\u00eancia, espalhamos os Legos em uma mesa, de novo, e come\u00e7amos a remontar. O problema que enfrentamos foi que n\u00e3o hav\u00edamos trazido Legos extras. Como t\u00ednhamos improvisado o design inicial, n\u00e3o t\u00ednhamos uma planta para seguir e, por isso, cada Lego teria que ser colocado exatamente como estava antes se quis\u00e9ssemos manter o design original.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o \u00e9 preciso dizer que acabamos optando por um design ligeiramente diferente, que acabou usando cerca de 30% menos Legos para criar o mesmo design funcional.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"490\" height=\"368\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-7.png\" alt=\"Um laptop, smartphone, painel solar e v\u00e1rios componentes eletr\u00f4nicos e de pl\u00e1stico em uma mesa branca\" class=\"wp-image-11552\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-7.png 490w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-7-300x225.png 300w\" sizes=\"(max-width: 490px) 100vw, 490px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Embora frustrante no come\u00e7o, a reconstru\u00e7\u00e3o do rover acabou sendo muito divertida. Acabamos conversando com v\u00e1rios entusiastas de Lego durante a manh\u00e3, e algumas pessoas at\u00e9 entraram na brincadeira e ajudaram um pouco. No meio do dia, nosso Mars Rover estava totalmente operacional e foi uma \u00f3tima maneira de conhecer a comunidade do Python. Alguns dos nossos hackers favoritos que conhecemos foram as pessoas mais jovens que vieram \u00e0 PyCon pela primeira vez. Aqui est\u00e1 uma foto tirada pela pr\u00f3pria c\u00e2mera do rover depois que nosso jovem amigo controlou o bot enviando comandos por e-mail do telefone de seu pai. Dir\u00edamos que a miss\u00e3o foi um sucesso!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"540\" height=\"360\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-8.png\" alt=\"Um homem e um menino usando crach\u00e1s sorriem para uma foto em um grande local fechado\" class=\"wp-image-11556\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-8.png 540w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2019\/07\/image-8-300x200.png 300w\" sizes=\"(max-width: 540px) 100vw, 540px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ent\u00e3o, essa \u00e9 a hist\u00f3ria do nosso Mars Rover. N\u00e3o importa o que aconte\u00e7a, a gente sempre se diverte muito na PyCon. Mal podemos esperar pelo ano que vem para fazer tudo de novo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At\u00e9 l\u00e1! Bons envios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A equipe do Mailgun.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nos divertimos muito na PyCon 2013 com nossa arma Nerf gigante movida a e-mail. Fez muito sucesso com o p\u00fablico e, para a PyCon 2014, quer\u00edamos fazer algo ainda mais legal. Ent\u00e3o, \u00e9 claro que dever\u00edamos come\u00e7ar com&#8230; um aspirador de p\u00f3. Neste post do blog, mostramos como fomos de um aspirador de p\u00f3 para um Mars Rover e acabamos nos divertindo muito de novo na PyCon deste ano.<\/p>\n","protected":false},"author":13,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-20104","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-dev-life"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Miss\u00e3o para Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Nos divertimos muito na PyCon 2013 com nossa arma Nerf gigante movida a e-mail. Fez muito sucesso com o p\u00fablico e, para a PyCon 2014, quer\u00edamos fazer algo ainda mais legal.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Miss\u00e3o para Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Nos divertimos muito na PyCon 2013 com nossa arma Nerf gigante movida a e-mail. Fez muito sucesso com o p\u00fablico e, para a PyCon 2014, quer\u00edamos fazer algo ainda mais legal.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/missao-para-marte-pycon-2014\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/missao-para-marte-pycon-2014\\\/\",\"name\":\"Miss\u00e3o para Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/missao-para-marte-pycon-2014\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/missao-para-marte-pycon-2014\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2026-09-14T22:07:07+00:00\",\"description\":\"Nos divertimos muito na PyCon 2013 com nossa arma Nerf gigante movida a e-mail. Fez muito sucesso com o p\u00fablico e, para a PyCon 2014, quer\u00edamos fazer algo ainda mais legal.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/missao-para-marte-pycon-2014\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/missao-para-marte-pycon-2014\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/missao-para-marte-pycon-2014\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/dev-life\\\/missao-para-marte-pycon-2014\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/inicio\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Miss\u00e3o para Marte \u2013 PyCon 2014\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Miss\u00e3o para Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun","description":"Nos divertimos muito na PyCon 2013 com nossa arma Nerf gigante movida a e-mail. Fez muito sucesso com o p\u00fablico e, para a PyCon 2014, quer\u00edamos fazer algo ainda mais legal.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/","og_locale":"pt_BR","og_type":"article","og_title":"Miss\u00e3o para Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun","og_description":"Nos divertimos muito na PyCon 2013 com nossa arma Nerf gigante movida a e-mail. Fez muito sucesso com o p\u00fablico e, para a PyCon 2014, quer\u00edamos fazer algo ainda mais legal.","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/","name":"Miss\u00e3o para Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2026-09-14T22:07:07+00:00","description":"Nos divertimos muito na PyCon 2013 com nossa arma Nerf gigante movida a e-mail. Fez muito sucesso com o p\u00fablico e, para a PyCon 2014, quer\u00edamos fazer algo ainda mais legal.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/pt\/blog\/dev-life\/missao-para-marte-pycon-2014\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/pt\/inicio\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/pt\/blog\/"},{"@type":"ListItem","position":3,"name":"Miss\u00e3o para Marte \u2013 PyCon 2014"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/pt\/#website","url":"https:\/\/www.mailgun.com\/pt\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!","publisher":{"@id":"https:\/\/www.mailgun.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/pt\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/20104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/20104\/revisions"}],"predecessor-version":[{"id":20105,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/20104\/revisions\/20105"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=20104"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=20104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}