{"id":19923,"date":"2026-09-14T18:32:52","date_gmt":"2026-09-14T18:32:52","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/mision-a-marte-pycon-2014\/"},"modified":"2026-09-14T18:32:52","modified_gmt":"2026-09-14T18:32:52","slug":"mision-a-marte-pycon-2014","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/","title":{"rendered":"Misi\u00f3n a Marte: PyCon 2014"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Nos lo pasamos en grande en la PyCon 2013 con nuestra\u00a0<a href=\"\/?blog_category=hardware-fun-building-an-email-controlled-gun-for\" target=\"_tabs\" rel=\"noopener noreferrer\">pistola Nerf gigante propulsada por email<\/a>. Caus\u00f3 furor entre el p\u00fablico, as\u00ed que para la PyCon 2014 quer\u00edamos hacer algo a\u00fan m\u00e1s impresionante. Por supuesto, estaba clar\u00edsimo que deb\u00edamos empezar con&#8230; una aspiradora. En este blog te contamos c\u00f3mo pasamos de una aspiradora a un r\u00f3ver marciano y c\u00f3mo volvimos a pasarlo genial este a\u00f1o en la PyCon.<\/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-3580\"><p class=\"h5 m-0\" id=\"toc-title-3580\">\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=\"#unos-comienzos-humildes-una-mision-a-marte\">Unos comienzos humildes&#8230; una misi\u00f3n a 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\">C\u00f3mo 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-a-necesitar-mas-legos\">Vamos a necesitar m\u00e1s 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=\"#querida-tsa\">Querida 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=\"#nuevo-y-mejorado-pero-no-por-eleccion-propia\">Nuevo y mejorado&#8230; pero no por elecci\u00f3n propia<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\"><strong>Unos comienzos humildes&#8230; una misi\u00f3n a Marte<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Anton, nuestro ingeniero el\u00e9ctrico convertido en desarrollador de software, se hab\u00eda comprado un\u00a0<a href=\"http:\/\/www.neatorobotics.com\/products\/\">robot aspirador de Neato\u00a0<\/a>despu\u00e9s de investigar a fondo y comparar Neato con el popular Roomba de iRobot. \u00bfEl factor decisivo? Las aspiradoras Neato tienen una API que permite controlarlas mediante c\u00f3digo. Justo lo que necesit\u00e1bamos para nuestra misi\u00f3n a Marte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una de las muchas cosas que nos gustan de trabajar en Rackspace, la empresa que adquiri\u00f3 Mailgun en 2012, es el \u201chackday\u201d mensual, en el que todo el equipo de ingenier\u00eda de la oficina se re\u00fane para trabajar en cualquier cosa que les resulte interesante, est\u00e9 o no relacionada con un proyecto oficial de Rackspace. Avisamos a un par de colegas de Rackspace y nos pasamos el d\u00eda trabajando en el c\u00f3digo que usar\u00edamos para controlar el robot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ten\u00edamos claro que quer\u00edamos ofrecer la posibilidad de enviar comandos por email al robot como mecanismo de control y que el robot deb\u00eda poder avanzar, retroceder y girar 360 grados. Tambi\u00e9n quer\u00edamos poder \u201ctomar muestras\u201d de la superficie marciana (vamos, encender la aspiradora) y sacar una foto con la c\u00e1mara montada en lo que se convertir\u00eda en la torre de instrumentos principal del r\u00f3ver.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>C\u00f3mo funciona<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Muchos de los detalles de nuestro juego para la PyCon de este a\u00f1o eran distintos, pero hab\u00edamos aprendido algo del a\u00f1o anterior:<br>el acceso a la red pod\u00eda ser complicado en el recinto de la conferencia. Pod\u00eda ser que la direcci\u00f3n IP de la Raspberry Pi no fuera accesible p\u00fablicamente, as\u00ed que quiz\u00e1 no ser\u00eda posible enviarle una solicitud POST HTTP.<br>&#8211;\u00a0<a href=\"https:\/\/68838d2e8987eb65e005d837--mailgun.netlify.app\/blog\/hardware-fun-building-an-email-controlled-gun-for\">Mailgun en la PyCon 2013<\/a><br>Para solucionarlo, usamos Redis para asegurarnos de que el r\u00f3ver pudiera recuperar comandos del servidor siempre que la Raspberry Pi tuviera conexi\u00f3n a Internet. Este es su aspecto conceptual:<br><code>+ - - - - - + +-----------+ +------------+ +--------------+ | | | | | | | | SMTP | | HTTP | | | Cliente de email +-----&gt; | Mailgun +-----&gt; | Servidor web | | | | | ruta | | | +--------------+ | | | | | | | | +-----+------+ +-----------+ | | | Redis lpush | (local) | | | v | +--------------+ +------------+ | | Redis brpop | | | | | Raspberry Pi |  | C\u00e1mara Raspberry Pi | | GPIO +-------------------+ +-------------------&gt; | Brick Pi | | puerto serie +-------------------+ +-------------------&gt; | Aspiradora Neato | +-------------------+<\/code><br>Una vez resuelto este problema, nos centramos en los controles principales.<br>A continuaci\u00f3n incluimos ejemplos del c\u00f3digo que usamos para controlar el robot de verdad:<br><em>Control de la torre de la c\u00e1mara con 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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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>Control de la aspiradora:<\/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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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>Aceptaci\u00f3n de solicitudes POST de 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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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 a necesitar m\u00e1s Legos<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con el software terminado, nos pusimos a convertir nuestra aspiradora en un r\u00f3ver marciano.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Empezamos buscando el mejor sitio para comprar piezas de Lego de un solo color al por mayor. Necesit\u00e1bamos un mont\u00f3n de piezas negras, grises y blancas si quer\u00edamos crear un r\u00f3ver aut\u00e9ntico. Resulta que\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 es el mejor lugar para comprar Legos<\/a>, a menudo al peso. 118\u00a0$ despu\u00e9s, ya pod\u00edamos empezar.<\/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=\"Dos hombres y un ni\u00f1o trabajando juntos en una mesa larga cubierta con montones de bloques de construcci\u00f3n clasificados\" 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\">Reunimos a un equipo de ingenier\u00eda de primera para la misi\u00f3n, en el que se inclu\u00eda el hijo de cuatro a\u00f1os de alguien del equipo de Mailgun, y preparamos todas las piezas de Lego que formar\u00edan el cuerpo del r\u00f3ver. Aqu\u00ed vemos a Anton, Ralph y Luca durante los preparativos. Despu\u00e9s de crear prototipos de algunos de los componentes principales, formalizamos nuestro dise\u00f1o. El r\u00f3ver tendr\u00eda una c\u00e1mara oscilante (propulsada por un motor Lego Mindstorms) montada en la parte superior de una torre de control que integraba\u00a0<a href=\"http:\/\/www.raspberrypi.org\/\">Raspberry Pi<\/a>,\u00a0<a href=\"http:\/\/www.dexterindustries.com\/BrickPi\/\">BrickPi<\/a>\u00a0y una bater\u00eda de respaldo. Gran parte del cuerpo del r\u00f3ver tambi\u00e9n estar\u00eda cubierta por un panel 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 pizarra mostrando vistas a\u00e9reas y traseras de un robot con marcas para panel solar, c\u00e1mara y 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\">Unos cuantos contratiempos, un par de risas y unas horas m\u00e1s tarde, ya est\u00e1bamos a punto de tener un robot montado para hacer una demostraci\u00f3n en la presentaci\u00f3n del \u201chackday\u201d que, casualmente, estaba programada para m\u00e1s tarde ese mismo d\u00eda en la oficina de 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=\"Un hombre trabaja en una compleja construcci\u00f3n de LEGO montada sobre la base de un robot aspirador\" 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\">Aqu\u00ed tienes un primer plano de la torre de control principal. Lo que lleva la pegatina de Mailgun es la bater\u00eda de respaldo. La Raspberry Pi y la BrickPi est\u00e1n montadas encima, y en la parte superior de la foto puedes ver el motor de Lego. La c\u00e1mara de la Raspberry Pi queda justo fuera del encuadre.<\/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=\"Un robot construido con piezas de LEGO y componentes electr\u00f3nicos, que presenta un logotipo de Mailgun en su 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\">Esta es una vista trasera del r\u00f3ver. Gran parte del cromo decorativo lo a\u00f1adi\u00f3 el miembro m\u00e1s joven de la misi\u00f3n, incluidas las dos figuras de Lego. Una de ellas es un marinero y la otra, un pirata. Esta result\u00f3 ser solo una de las partes de la misi\u00f3n que requerir\u00eda mucha creatividad, como ver\u00e1s m\u00e1s adelante.<\/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=\"Dos minifiguras de LEGO sobre la cubierta de un modelo de barco de LEGO construido a 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 un largo d\u00eda haciendo una demostraci\u00f3n del r\u00f3ver en la oficina. Aqu\u00ed vemos a Anton revisando el r\u00f3ver terminado.<\/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=\"Un hombre se agacha y se\u00f1ala un peque\u00f1o robot mientras un grupo de personas observa\" 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>Querida TSA:<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sab\u00edamos que no pod\u00edamos llevar el r\u00f3ver con nosotros en el avi\u00f3n a Montreal. Reconocemos que parece una bomba, y no quer\u00edamos tener una larga y amena charla con el personal de la TSA. As\u00ed que metimos con cuidado el r\u00f3ver en una maleta grande y lo protegimos con unas 30 agradables y suaves camisetas de American Apparel 50-50 que repartir\u00edamos en la conferencia a la gente que diera una vuelta con \u00e9l. Tambi\u00e9n incluimos una nota para la TSA en la que les avis\u00e1bamos de que era un robot construido con una Raspberry Pi. Est\u00e1bamos seguros de que abrir\u00edan la maleta y echar\u00edan un vistazo, pero no cont\u00e1bamos con que lo mirar\u00edan tan de cerca.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Nuevo y mejorado&#8230; pero no por elecci\u00f3n propia<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al llegar a nuestro hotel en Montreal y abrir la maleta, lo primero que pensamos fue que deb\u00edan de haberle dado buenos golpes al equipaje, porque muchas piezas se hab\u00edan soltado del todo. Sin embargo, al mirarlo m\u00e1s de cerca, qued\u00f3 claro que la TSA hab\u00eda desmontado el r\u00f3ver pr\u00e1cticamente pieza por pieza. Algunos componentes segu\u00edan intactos, pero las estructuras m\u00e1s complejas, como el chasis y la torre de control, se hab\u00edan desmontado meticulosamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con un caf\u00e9 en la mano y a dos horas de la inauguraci\u00f3n de la conferencia, volvimos a poner las piezas de Lego sobre una mesa y empezamos a montarlo todo de nuevo. El problema fue que no hab\u00edamos tra\u00eddo piezas de Lego de sobra. Como hab\u00edamos improvisado el dise\u00f1o inicial, no ten\u00edamos ning\u00fan plano, as\u00ed que cada pieza tendr\u00eda que volver a ponerse exactamente como estaba si quer\u00edamos mantener el dise\u00f1o original.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Huelga decir que acabamos optando por un dise\u00f1o un poco diferente en el que, al final, utilizamos en torno a un 30\u00a0% menos de piezas de Lego para crear la misma estructura 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=\"Un port\u00e1til, un smartphone, un panel solar y varios componentes pl\u00e1sticos y electr\u00f3nicos en una mesa blanca\" 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\">Aunque al principio fue frustrante, reconstruir el r\u00f3ver result\u00f3 ser de lo m\u00e1s divertido. Acabamos hablando con un mont\u00f3n de entusiastas de Lego durante la ma\u00f1ana, y hubo quienes incluso se animaron a echarnos una mano. A mediod\u00eda, nuestro r\u00f3ver marciano estaba a pleno funcionamiento y fue una forma estupenda de conocer a la comunidad de Python. Algunas de las personas m\u00e1s \u201chackers\u201d que conocimos fueron j\u00f3venes que ven\u00edan a la PyCon por primera vez. Aqu\u00ed tienes una toma desde la propia c\u00e1mara del r\u00f3ver despu\u00e9s de que nuestro joven amigo controlara el robot enviando comandos por email desde el tel\u00e9fono de su padre. \u00a1Dir\u00edamos que la misi\u00f3n fue todo un \u00e9xito!<\/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=\"Un hombre y un ni\u00f1o que llevan acreditaciones sonr\u00eden para una foto en un gran recinto cubierto\" 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\">Y esa es la historia de nuestro r\u00f3ver marciano. Pase lo que pase, siempre nos lo pasamos en grande en la PyCon. Estamos deseando que llegue el a\u00f1o que viene para volver a hacerlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Hasta entonces! Feliz env\u00edo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El equipo de Mailgun.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nos lo pasamos en grande en la PyCon 2013 con nuestra pistola Nerf gigante propulsada por email. Caus\u00f3 furor entre el p\u00fablico, as\u00ed que para la PyCon 2014 quer\u00edamos hacer algo a\u00fan m\u00e1s impresionante. Por supuesto, estaba clar\u00edsimo que deb\u00edamos empezar con&#8230; una aspiradora. En este blog te contamos c\u00f3mo pasamos de una aspiradora a un r\u00f3ver marciano y c\u00f3mo volvimos a pasarlo genial este a\u00f1o en la PyCon.<\/p>\n","protected":false},"author":13,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-19923","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>Misi\u00f3n a Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Nos lo pasamos en grande en la PyCon 2013 con nuestra pistola Nerf gigante propulsada por email. Caus\u00f3 furor entre el p\u00fablico, as\u00ed que para la PyCon 2014 quer\u00edamos hacer algo a\u00fan m\u00e1s impresionante.\" \/>\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\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Misi\u00f3n a Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Nos lo pasamos en grande en la PyCon 2013 con nuestra pistola Nerf gigante propulsada por email. Caus\u00f3 furor entre el p\u00fablico, as\u00ed que para la PyCon 2014 quer\u00edamos hacer algo a\u00fan m\u00e1s impresionante.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-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\\\/es\\\/blog\\\/dev-life\\\/mision-a-marte-pycon-2014\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mision-a-marte-pycon-2014\\\/\",\"name\":\"Misi\u00f3n a Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mision-a-marte-pycon-2014\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mision-a-marte-pycon-2014\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2026-09-14T18:32:52+00:00\",\"description\":\"Nos lo pasamos en grande en la PyCon 2013 con nuestra pistola Nerf gigante propulsada por email. Caus\u00f3 furor entre el p\u00fablico, as\u00ed que para la PyCon 2014 quer\u00edamos hacer algo a\u00fan m\u00e1s impresionante.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mision-a-marte-pycon-2014\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mision-a-marte-pycon-2014\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/dev-life\\\/mision-a-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\\\/es\\\/blog\\\/dev-life\\\/mision-a-marte-pycon-2014\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Misi\u00f3n a Marte: PyCon 2014\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/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\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Misi\u00f3n a Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun","description":"Nos lo pasamos en grande en la PyCon 2013 con nuestra pistola Nerf gigante propulsada por email. Caus\u00f3 furor entre el p\u00fablico, as\u00ed que para la PyCon 2014 quer\u00edamos hacer algo a\u00fan m\u00e1s impresionante.","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\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/","og_locale":"es_ES","og_type":"article","og_title":"Misi\u00f3n a Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun","og_description":"Nos lo pasamos en grande en la PyCon 2013 con nuestra pistola Nerf gigante propulsada por email. Caus\u00f3 furor entre el p\u00fablico, as\u00ed que para la PyCon 2014 quer\u00edamos hacer algo a\u00fan m\u00e1s impresionante.","og_url":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-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\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/","url":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/","name":"Misi\u00f3n a Marte - PyCon 2014 - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2026-09-14T18:32:52+00:00","description":"Nos lo pasamos en grande en la PyCon 2013 con nuestra pistola Nerf gigante propulsada por email. Caus\u00f3 furor entre el p\u00fablico, as\u00ed que para la PyCon 2014 quer\u00edamos hacer algo a\u00fan m\u00e1s impresionante.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/dev-life\/mision-a-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\/es\/blog\/dev-life\/mision-a-marte-pycon-2014\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"Misi\u00f3n a Marte: PyCon 2014"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/es\/#website","url":"https:\/\/www.mailgun.com\/es\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!","publisher":{"@id":"https:\/\/www.mailgun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/es\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/#\/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\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/19923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/19923\/revisions"}],"predecessor-version":[{"id":19924,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/19923\/revisions\/19924"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=19923"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=19923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}