<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Euda - Medium]]></title>
        <description><![CDATA[Desarrollamos software de calidad. Procesos avalados por estándares internacionales. - Medium]]></description>
        <link>https://medium.com/eudaimonia-ar?source=rss----baa259bb68db---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Euda - Medium</title>
            <link>https://medium.com/eudaimonia-ar?source=rss----baa259bb68db---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 04 Jun 2026 14:32:58 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/eudaimonia-ar" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[¡Ayuda! Necesito una app]]></title>
            <link>https://medium.com/eudaimonia-ar/ayuda-necesito-una-app-a15ceefb03ec?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/a15ceefb03ec</guid>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[business-development]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[aplicaciones-móviles]]></category>
            <dc:creator><![CDATA[paudeviaje]]></dc:creator>
            <pubDate>Thu, 09 Mar 2023 16:09:05 GMT</pubDate>
            <atom:updated>2023-03-09T16:09:05.482Z</atom:updated>
            <content:encoded><![CDATA[<h4>Aplicaciones vs páginas web: por qué es importante customizar tu plataforma en base a las necesidades del negocio</h4><h4>Comunicar en la virtualidad</h4><p>Las aplicaciones móviles, redes sociales y páginas web tienen un punto en común: son excelentes herramientas de comunicación. Sin embargo, hay algunas ventajas de las apps (aplicaciones móviles) que deberías tener en cuenta.</p><p>Como empresa, negocio o emprendimiento tenemos múltiples tipos de contenidos para comunicar: videos, eventos, imágenes, textos, audios. Por eso, trasladarlo a una plataforma que combina todos estos elementos en un solo canal es un gran beneficio.</p><p>Las aplicaciones pueden incluir archivos multimedia, textos, datos, realizar llamadas, brindar servicios de geolocalización y mucho más, sacándole provecho a las capacidades que ya vienen integradas en el teléfono. Hay quienes dicen que hoy en día el teléfono inteligente o <em>smartphone </em>es una extensión del propio cuerpo, por lo que, imaginemos toda tu información al alcance de todos, en la palma de la mano de a quien querés llegar.</p><blockquote>“Sin apps, los teléfonos inteligentes y las tabletas serían como vehículos de sofisticados diseños, pero sin gasolina.”</blockquote><p>La particularidad de esta herramienta, no es solamente la capacidad de contener varios formatos y tipos de archivos, sino también su versatilidad para un fácil acceso. Muchas empresas han querido aprovechar esta tecnología, en algunos casos, con suficiente éxito, como son los bancos e incluso instituciones estatales y gubernamentales. La virtualidad puede ser compleja, pero hay herramientas que nos acercan cada vez más: asistentes virtuales, chatbots, entre otras.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dOxVZ-_YiEXoo-N55dAAHg.png" /></figure><h4>Oportunidades de negocio</h4><p>Uber, Rappi, PedidosYa, Spotify, Brubank y más: todas aplicaciones que surgieron a partir de necesidades concretas. Los empresarios encontraron un nuevo nicho para explotar, y el acompañamiento de la tecnología fue clave para poder efectuarlo.</p><p>El<em> e-commerce</em> se encuentra en alza al punto que las tiendas físicas o retail en todo el mundo están buscando nuevas soluciones para mantenerse en pie. O por el contrario, nuevos negocios como <em>showrooms</em> o pequeños emprendimientos aparecen y se promocionan en redes, pero subsisten únicamente en lo digital.</p><p>Sin embargo, ya sea una plataforma para <em>e-commerce, </em>una plataforma para reservar turnos o gestionar paquetes y envíos, la mejor opción es una aplicación personalizada. Si bien las redes o páginas web -como TiendaNube, Wix, entre otras- son muy útiles para los negocios que están empezando, <strong>al momento de crecer es un beneficio tener el poder de customizar tu plataforma y no depender de las limitaciones de estos prestadores.</strong></p><p>Al fin y al cabo, es el medio de contacto más importante con tus clientes. Si no tuviese una página web o aplicación propia, durante el apagón de Facebook, Instagram y Whatsapp muchas ventas cayeron y, más importante, se perdió la comunicación con el cliente.</p><h4><strong>PWA o Progressive Web Apps</strong></h4><p>Actualmente, hay muchas opciones a considerar, como una <a href="https://www.iebschool.com/blog/progressive-web-apps-analitica-usabilidad/">Progressive Web App o PWA</a>, es decir, una aplicación web con características de aplicación. Es el híbrido perfecto entre una app y una página web: puede soportar las mismas funcionalidades que una aplicación -como, por ejemplo, realizar videollamadas, chats, geolocalización- desde una url para usar en cualquier navegador, tanto en el teléfono como en la computadora. Es fácilmente adaptable a todos los formatos y pantallas.</p><p>Entre las ventajas de esta solución, podemos mencionar:</p><ul><li>No es necesario instalar una aplicación desde el Google Play o App Store, ya que funcionan en cualquier navegador como Chrome, Safari, Firefox, etc.</li><li>Puede funcionar sin conexión a internet, en algunos casos. Dependiendo de la funcionalidad que se le da, como una app, no es necesario que tenga conexión a internet para mostrar su contenido.</li><li>Permite enviar notificaciones push a los usuarios, sin que el usuario haya instalado una aplicación.</li></ul><h4>Asesorate SIN COSTO</h4><p>Con tantas variables a tener en cuenta, un asesoramiento personalizado será siempre lo más valioso para que tu negocio crezca. Si te interesa escalar tu negocio no dudes en contactar una entrevista SIN COSTO con nosotros.</p><p>Y si todavía no me creés, mirá este <a href="http://bit.ly/euda_DO">caso de éxito</a> dónde uno de nuestros clientes cuenta cómo lo ayudamos a escalar su negocio:</p><p><a href="https://eudaimonia.com.ar/landing_DO.html">Euda - Caso de Éxito</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a15ceefb03ec" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/ayuda-necesito-una-app-a15ceefb03ec">¡Ayuda! Necesito una app</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[404 error: QA Analyst not found]]></title>
            <link>https://medium.com/eudaimonia-ar/404-error-qa-analyst-not-found-4bba9429e5c8?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/4bba9429e5c8</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[qa]]></category>
            <category><![CDATA[euda]]></category>
            <category><![CDATA[analyst]]></category>
            <dc:creator><![CDATA[Camila Ghidini]]></dc:creator>
            <pubDate>Wed, 06 Jul 2022 16:26:13 GMT</pubDate>
            <atom:updated>2022-07-06T16:26:13.493Z</atom:updated>
            <content:encoded><![CDATA[<p>As the path to a new normality begins after the outbreak of the pandemic, the demand for IT specialists keeps increasing drastically. Considering that most professions do not offer the opportunity to keep working remotely, people are starting to look for new career paths. What seems to be the easiest choice for those in need of a new beginning is becoming a QA Engineer, QA Analyst or software tester. How hard can it be for someone who uses technology on a daily basis to test apps?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KS5cMAEWxj3KJOoX1twMyQ.png" /></figure><h3>The demand for IT specialists</h3><p>As reported by the <a href="https://www.bls.gov/ooh/computer-and-information-technology/home.htm"><em>Bureau of Labor Statistics</em></a>, the employment of IT professionals is expected to grow 13% between 2020 and 2030, surpassing the average growth for occupations. Such an accelerated pace is reasonable considering that computer and information technology jobs benefited from the pandemic due to the new norm of working remotely. In just a few weeks the great majority of employees were forced to adapt to this trend which now seems to keep growing even after offices start to reopen. Reaching higher levels of productivity, and saying goodbye to the dreaded commute are just a few of the advantages. To put it simply, these changes benefited those working in IT since companies adapted easily to a digital workplace by taking advantage of the already used technology -such as Slack, Drive and Google Meet- to communicate remotely. There are no obstacles for companies to follow through with the transition and to even stay remote indefinitely.</p><p>During the current pandemic, employees are rethinking their careers, a common pattern after life-changing events, and as already mentioned above, job opportunities for IT professionals are increasing. The information technology world seems to be the best possible solution with well-paid positions, significant growth opportunities and the chance to work remotely. Such abrupt change is not easy to accomplish but many have found the way to do it.</p><h3>Quality Assurance</h3><p>One way of getting into the tech industry is by becoming a software tester, a QA analyst or a QA engineer. Some may think it is the quickest and easiest way since testing comes hand in hand with career growth. The experience and apprehension provided by this opportunity to explore different angles of the software development process can be later applied to different positions, such as test automation engineer, product manager and even software developer.</p><p>Nowadays, with the countless online courses anyone can become a software tester -at least an average one- and with this solid foundation, companies may hire you in view of the increasing worldwide demand.</p><h3>The complexity of testing</h3><p>Quality Assurance testers are responsible for testing websites or apps in order to find malfunctions or defects, a simple look at the app is not enough. The job consists of comprehensive and thorough tests, which are crucial. After all, it eliminates risks from the release process so companies can focus on their growth.</p><p>Knowing the responsibilities of a QA tester, it is important to understand the skills needed which most online courses tend to omit. First of all, good communication skills are essential, both written and verbal. Testers find themselves documenting use cases and bug reports that must be detailed and easy for the whole team to understand. For instance, developers should not have to ask for more detailed information once they read a bug report, and new employees should be able to become acquainted with a project by reading the use cases. To ensure well-detailed documentation, a tester needs to have a clear idea of UI/UX terminology and behavior driven development (or <a href="http://dannorth.net/introducing-bdd/">BDD</a>).</p><p>Furthermore, as some may believe, using a phone or computer on a daily basis should be enough expertise for the job. However, this could not be further from the truth. A tester must have a broad range of knowledge in software applications, hardware, cloud computing and networks. This includes, for example, understanding the difference between desktop and mobile operating systems, such as Windows, MacOS, Linux, IOS and Android. With the increasing competition in the browser market, new features are added or refined with the intention to differentiate themselves. Consequently, the outcome of a project may vary depending on which browser is used. Therefore, testers need to assure the quality and accessibility of a software in every OS since no one can predict how an user chooses to interact with it.</p><p>Finally, a software tester must familiarize with all the tools used in IT jobs. Starting with a solid understanding of agile methodologies for team collaboration and knowledge of the most popular kanban boards to report bugs and organize work, such as Trello, Jira or Asana, frequently asked in IT hiring processes. Followed by database management systems, for instance, MongoDB Compass, MySQL and phpMyAdmin. In addition, the proficiency in automation tools is valuable: Cucumber with Appium or Selenium for those more advanced or TestProject for beginners. For writing test cases, TestRail is one that might come in handy, and Postman for API testing.</p><p>Personally, this career may be underrated. Even though learning manual QA can be fast, easy and affordable for those seeking a change in their profession, only those eager to learn, ready to persistently build on their skill set, and those who have the aspiration to become an expert at the job will make it. The demand for QA testers is growing but there are not enough qualified people to fill these positions since it takes time and resources to build on the skill.</p><p>If you think you got what it takes to become part of the Euda QA team, do not hesitate to contact us! Good luck!</p><p>Please comment below on some related topics that you would like to read more about.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4bba9429e5c8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/404-error-qa-analyst-not-found-4bba9429e5c8">404 error: QA Analyst not found</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#EudaStyle, long-term quality]]></title>
            <link>https://medium.com/eudaimonia-ar/eudastyle-long-term-quality-7968c75984aa?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/7968c75984aa</guid>
            <category><![CDATA[english]]></category>
            <category><![CDATA[quality-software]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[euda]]></category>
            <category><![CDATA[quality-management]]></category>
            <dc:creator><![CDATA[Euda]]></dc:creator>
            <pubDate>Wed, 11 May 2022 20:18:26 GMT</pubDate>
            <atom:updated>2022-05-11T20:18:26.625Z</atom:updated>
            <content:encoded><![CDATA[<h4>We build software with processes that help your digital project take off</h4><p>Creating an app is a science that needs quality and precision. With more than 12 years of experience innovating, at Euda we use the same top-notch processes as other well-known tech giants. In this article, you’ll find what are the first-class technology and work processes that we use to develop our success stories’ apps.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RRUGbh4pulsIZCq6n5RMnA.jpeg" /></figure><p>There are a lot of things that can go wrong working in IT. For instance, a junior developer accidentally erases a whole production database of an e-commerce app and it affects not only the work of hundreds of people but the final customers. Or, maybe there is a bug that can stop the production of a whole factory, generating huge financial losses. Security is key and this is why we work in a way to ensure all these examples mentioned above never happen.</p><p><strong>Code review</strong> between cross-hierarchy teammates is one of the many actions taken to prevent this. Developers proofread each other’s lines of code before updating it on the system, checking each other’s code for mistakes.</p><p>Another important point is QA, with <strong>manual and automated testing</strong>. Most IT companies provide this service for their products. However, there are some key points to make it even better. For instance, automated tests should be integrated in the pipeline so that they run automatically with every deployment.</p><p>Regarding manual testing, although they may sound similar, there is a huge difference between a bug and a glitch. Bugs are usually coding errors, whereas glitches are errors that happen when the engine does not work as expected. Also, there are some <em>metaapp</em> features that may become bugs if the final users don’t like them. This is why our QA engineers always test with an open mind and anticipate both users’ moves and their expectations of the product.</p><p>One may believe that organizing beforehand to achieve a perfectly calibrated work before starting any project allows us to accomplish better results. However, calibrating work such as an analogical clock may take too long. The formula used in our success stories involves bumpy starts and lots of refining later, and I believe that, in most cases, this is better than no starting at all. Refining tasks is the core of <strong>agile methodologies</strong> and combined with high quality processes is how we carry out extremely complicated projects at Euda.</p><p>We believe that organising work by following the agile methodologies principles is the way to go. Through our work we have come to value:</p><ul><li>Individuals and interactions, over processes and tools</li><li>Working software, over comprehensive documentation</li><li>Customer collaboration, over contract negotiation</li><li>Responding to change, over following a plan</li></ul><p>Find out more information on the Agile manifesto: <a href="https://agilemanifesto.org/">https://agilemanifesto.org</a>/</p><p>Finally, s<strong>afe and independent environments</strong> for development, testing and production ensure safety and quality at every step. Junior developers must learn from others and test in their own local environment and, again, before having access to production their code is reviewed by others.</p><p>Following these principles, we had achieved digital projects’ scalability and product quality. It does not rely only on essentially big and complex teams. we believe that small but organised teams, added to all the good practises highlighted above are the best foundations for great software development.</p><p>Want to be our next success story? Visit <a href="https://www.eudaimonia.com.ar">our website</a> to find out more and do not hesitate to contact us!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7968c75984aa" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/eudastyle-long-term-quality-7968c75984aa">#EudaStyle, long-term quality</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Redirect 301 con CloudFront y Lambda@EDGE]]></title>
            <link>https://medium.com/eudaimonia-ar/redirect-301-con-cloudfront-y-lambda-edge-fdeb874aba0c?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/fdeb874aba0c</guid>
            <category><![CDATA[español]]></category>
            <category><![CDATA[amazon-cloudfront]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[cloudfront]]></category>
            <category><![CDATA[lambda]]></category>
            <dc:creator><![CDATA[Matias Quintana]]></dc:creator>
            <pubDate>Mon, 18 Apr 2022 20:58:29 GMT</pubDate>
            <atom:updated>2022-04-19T14:16:39.076Z</atom:updated>
            <content:encoded><![CDATA[<p>Hace poco tuve un requerimiento que consistía en redirigir una URL registrada en Route53 hacia una Progressive Web Application (PWA) deployada en un Bucket de S3 y distribuida a través de Cloudfront con subdominio propio.</p><p>Para mi sorpresa, AWS no puede realizar esa petición utilizando los servicios antes mencionados de una manera simple. En este artículo les voy a contar cómo hacerlo paso por paso.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fUmQaGspG8-tBmmH_jwm8g.png" /></figure><h3>¿Qué es un Código de estado de respuesta HTTP 301?</h3><p>Existen diversos códigos de estado como respuesta a una petición HTTP, entre ellos el código 301, el cual indica un redireccionamiento permanente de una URL a otra, enviando a todos los usuarios a la nueva URL destino. Comúnmente se utiliza cuando cambiamos de URL una web ya existente.</p><p>Para más información, leer:</p><p><a href="https://developer.mozilla.org/es/docs/Web/HTTP/Status">Códigos de estado de respuesta HTTP - HTTP | MDN</a></p><h3>Manos a la obra</h3><p>Para realizar la redirección solicitada vamos a crear una función Lambda@EDGE que evalúe el host de un request y, si empata con la URL que queremos redirigir, realice un redirect 301 a la URL de nuestra PWA. Esa función vamos a asociarla a la distribución de CloudFront donde se encuentra la PWA.</p><p>Resumiendo, lo que hay que hacer es:</p><ol><li>Ir a <a href="https://aws.amazon.com/es/cloudfront/">CloudFront</a> y agregar nuestra URL, la que queremos redirigir, como un <strong>Alternative domain names</strong>. Para ello, nos dirigimos a nuestra distribución de CloudFront, en la pestaña general editamos los <strong>Settings</strong> y agregamos un <strong>Alternative domain name (CNAME)</strong> colocando la URL a la que vamos a aplicarle el Redirect 301.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-Pmae98DjiAeBzihhn6hsQ.png" /></figure><p>2. Ahora tenemos que vincular nuestra URL a redirigir con la distribución de CloudFront. Para hacerlo, dirigirse a Route53, crear un record tipo A y colocar la misma URL que agregamos en el paso anterior. Vamos a filtrar la distribución de CloudFront buscándola por Alias y veremos que cuando seleccionemos CloudFront automáticamente nos va a aparecer la opción para elegir la distribución de nuestra PWA, gracias a que previamente agregamos ese dominio como <strong>Alternative domain name</strong> a nuestra distribución.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bsJH_CbkRQjxDVQdD8KMQg.png" /></figure><p>3. Por ultimo, realizar un función <strong>lambda@EDGE</strong> y asociarla a nuestra distribución CloudFront para que cuando accedamos mediante la <strong>urlARedirigir</strong> realice una respuesta 301 y nos redirija a la URL original de la PWA. Para esto, vamos a ir a <strong>Lambda</strong> -&gt; Create Function y elegimos <strong>Author from Scratch.</strong> Vamos a utilizar <strong>NodeJs</strong> y una arquitectura <strong>x86</strong> para crear nuestra función.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GBpMiZF2cSxn2uvOvnHBzw.png" /></figure><p>Una vez creada la función nos va a salir un código de muestra, el cuál hay que editar y agregar el siguiente código:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/3cb2672e1399a0bcc7d3423623f83926/href">https://medium.com/media/3cb2672e1399a0bcc7d3423623f83926/href</a></iframe><blockquote>Un detalle importante respecto a la función es que <strong>urlARedirigir</strong> es solo el <strong>HOST</strong> de nuestra URL, por ende su valor <strong>NO </strong>debe contener el protocolo.<br>Ejemplo: <br><strong>URL</strong> = https://exampleUrl.com <br><strong>Host</strong> = exampleUrl.com</blockquote><p>Luego de ingresar el código realizamos un deploy (presionando el botón ubicado arriba del cuadro de código) y debemos realizar una publicación de nuestra función Lambda desde el desplegable <strong>action -&gt; publish new version</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8R1gJFTp0WRtXkvdABtS5Q.png" /></figure><p>Antes de continuar triggereando nuestra función con nuestra distribución de CloudFront, hay que ir a la solapa de <strong>Configuration </strong>y seleccionar <strong>Permission </strong>en la columna de la izquierda. Allí veremos que existe un <strong>ROLE</strong> creado. Clickeamos sobre el nombre del rol y nos va a dirigir al servicio de <strong>IAM</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tcM1mPiVEoo-BLK0-OhZhQ.png" /></figure><p>Dentro del servicio de la configuración del <strong>ROL</strong> en el servicio de <strong>IAM</strong> nos dirigimos a la solapa de <strong>Permissions </strong>y editamos la Policy creada agregándole varios permisos, dejándola así:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/217c661b4ccb445609d88dae018a5ecd/href">https://medium.com/media/217c661b4ccb445609d88dae018a5ecd/href</a></iframe><p>Luego, nos dirigimos a la solapa de <strong>Trust relationships</strong>,<strong> </strong>clickeamos el botón <strong>Edit trust relationship </strong>y editamos la policy para que quede de la siguiente manera:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f6347e05421eb0ae8836693ef1d2ef6a/href">https://medium.com/media/f6347e05421eb0ae8836693ef1d2ef6a/href</a></iframe><p>Una vez realizado este cambio volvemos al servicio de <strong>Lambda</strong> y vamos a nuestra función. Tocamos el botón <strong>Add trigger</strong> y seleccionamos el servicio de <strong>CloudFront</strong>. A continuación, tocamos el botón de <strong>Deploy to Lambda@Edge</strong>. Esto nos va a levantar un <em>popup</em> donde seleccionaremos la distribución de <strong>CloudFront</strong> donde se encuentra nuestra PWA, seleccionaremos <strong>Viewer request</strong> como evento de nuestra distribución y, por último, damos el check confirmando el deploy y presionamos “Deploy”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2qMNPcg7sibFehwAXP0f9A.png" /></figure><p>Una vez deployado el trigger podemos observar que en nuestra pantalla de la función aparece el servicio de <strong>CLoudFront</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TyoLK1PhQ8iN8iSFj96V-w.png" /></figure><p>Por último, si vamos a la sección de <strong>Behavior</strong> de nuestra distribución de <strong>CloudFront</strong> veremos que en la parte de <strong>Functions Associations </strong>se encuentra en el Viewer Request nuestro <strong>Lambda@Edge </strong>recién creado.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KZa1_8n_1RtThkjN-9b-2w.png" /></figure><p>¡Y eso es todo!</p><p>Gracias por haber leído, espero que les sea útil. Pueden dejar sus dudas o comentarios abajo.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fdeb874aba0c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/redirect-301-con-cloudfront-y-lambda-edge-fdeb874aba0c">Redirect 301 con CloudFront y Lambda@EDGE</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[#EudaStyle, calidad a largo plazo]]></title>
            <link>https://medium.com/eudaimonia-ar/eudastyle-calidad-a-largo-plazo-c86a007c412?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/c86a007c412</guid>
            <category><![CDATA[español]]></category>
            <dc:creator><![CDATA[Euda]]></dc:creator>
            <pubDate>Thu, 06 Jan 2022 15:38:59 GMT</pubDate>
            <atom:updated>2022-01-06T15:38:59.777Z</atom:updated>
            <content:encoded><![CDATA[<h4>Desarrollamos software con procesos que hacen que tu proyecto despegue</h4><p>Crear una aplicación es una ciencia que necesita calidad y precisión. Con más de 12 años de experiencia innovando, en Euda utilizamos los mismos procesos de primer nivel que otros gigantes tecnológicos reconocidos. <strong>#EudaStyle</strong>, así es como nos referimos a la cultura que nos define. En este artículo, compartimos las metodologías, procesos y cultura de trabajo que hemos ido construyendo a lo largo de los años, y que creemos fue y continúa siendo la base del éxito de nuestros proyectos pasados y futuros.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D5VnNqlSJHdvpudRT5VIcg.png" /></figure><p>Hay muchas cosas que pueden salir mal trabajando en sistemas. Por ejemplo, un desarrollador junior borra accidentalmente la base de datos de producción completa de una aplicación de<em> e-commerce</em> y afecta no solo el trabajo de cientos de personas sino también a los clientes finales. O tal vez haya un error que pueda detener la producción de toda una fábrica generando enormes pérdidas financieras. La <strong>seguridad</strong> es clave y es por eso que en Euda trabajamos para garantizar que estos ejemplos mencionados anteriormente nunca sucedan.</p><p>La <strong>revisión de código</strong> entre compañeros de equipo de jerarquía cruzada es una de las muchas acciones que se toman para evitar esto. Otros analistas desarrolladores o incluso líderes de proyecto revisan las líneas de código de los demás antes de actualizarlo en el sistema, verificando el código de los demás en busca de errores.</p><p>Otro punto importante es el <strong>control de calidad</strong> con pruebas manuales y automatizadas. La mayoría de las empresas de IT brindan este servicio para sus productos. Sin embargo, hay algunos puntos clave para mejorarlo aún más. Por ejemplo, las pruebas automatizadas deben integrarse en el pipeline de buildeo para que se ejecuten automáticamente con cada implementación.</p><p>Con respecto a las pruebas manuales, los errores o bugs más comunes que aparecen pueden ser tanto errores de codificación, como fallos que se dan cuando el sistema no funciona como se esperaba. Además, hay algunas características de la aplicación que pueden convertirse en errores si a los usuarios finales no les gustan. Nuestros ingenieros de control de calidad (equipo de QA) siempre prueban con una mente abierta y anticipan tanto los movimientos de los usuarios como sus expectativas del producto.</p><p>Organizarnos de antemano para lograr un trabajo perfectamente calibrado antes de iniciar cualquier proyecto nos permite lograr mejores resultados. Sin embargo, el trabajo de calibración para que todo funcione como un reloj analógico, puede llevar demasiado tiempo. La fórmula utilizada en nuestras historias de éxito implica comienzos con baches y mucho refinamiento más adelante, y creo que, en la mayoría de los casos, esto es mejor que no comenzar en absoluto. El refinamiento de tareas es el núcleo de las <strong>metodologías ágiles</strong> y combinado con procesos de alta calidad es como llevamos a cabo proyectos extremadamente complicados en Euda.</p><p>Creemos que organizar el trabajo siguiendo los principios de las metodologías ágiles es el camino a seguir. A través de nuestro trabajo hemos llegado a valorar:</p><ul><li>Individuos e interacciones, sobre procesos y herramientas.</li><li>Software funcionando, sobre documentación exhaustiva.</li><li>Colaboración con el cliente, sobre negociación contractual.</li><li>Respuesta ante el cambio, sobre seguir un plan.</li></ul><p>Para más información sobre el manifiesto Agile: <a href="https://agilemanifesto.org/">https://agilemanifesto.org/</a></p><p>Por último, los <strong>entornos seguros e independientes </strong>son clave para asegurar un software de calidad. Trabajamos en un entorno de desarrollo (“dev”), que es un entorno inestable donde los analistas programadores trabajan directamente, un entorno de prueba (“test”), donde se corren todas las pruebas de calidad, y finalmente el entorno de producción (“prod”), que es el entorno estable al que los usuarios finales tienen acceso.</p><p>Los desarrolladores junior deben aprender de otros y probar en su propio entorno local y, como mencionamos más arriba, otros colaboradores revisan su código antes de volcar su desarrollo en el entorno de producción.</p><p>Siguiendo estos principios, logramos la escalabilidad de los proyectos digitales y la calidad del producto. No depende solo esencialmente de equipos grandes y complejos. Creemos que los equipos más chicos, pero organizados sumados a todas las buenas prácticas destacadas anteriormente, son la mejor base para un gran desarrollo de software.</p><p>¿Quieres ser nuestro próximo caso de éxito? Visitá nuestro <a href="https://www.eudaimonia.com.ar">sitio web</a> para obtener más información y no dudes en ponerte en contacto con nosotros.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c86a007c412" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/eudastyle-calidad-a-largo-plazo-c86a007c412">#EudaStyle, calidad a largo plazo</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Sails development with Docker and Docker Compose]]></title>
            <link>https://medium.com/eudaimonia-ar/sails-development-with-docker-and-docker-compose-df08efdb2655?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/df08efdb2655</guid>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[node]]></category>
            <category><![CDATA[sailsjs]]></category>
            <category><![CDATA[docker-compose]]></category>
            <category><![CDATA[docker]]></category>
            <dc:creator><![CDATA[Federico Vidueiro]]></dc:creator>
            <pubDate>Wed, 14 Apr 2021 14:27:03 GMT</pubDate>
            <atom:updated>2021-04-14T14:27:03.660Z</atom:updated>
            <content:encoded><![CDATA[<p>Docker makes it easy to set up and run a development environment and also simplifies the deployment of your applications. In this article we will see how to setup a Sails development workflow with Docker and Docker Compose.</p><h3>Whats and whys: Docker &amp; Docker Compose</h3><p>The goal of this article is to make setting up a Docker workflow for Sails as simple as possible. Docker makes it easier to set up and run a development environment and also simplifies the deployment.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*noi70lN3qspzEhq1006ITw.jpeg" /></figure><p>First, we’ll get into how Docker and Docker Compose work and its benefits. Then a step by step guide to make our beloved Sails run inside a Docker container. Let’s get started!</p><h4>Containerization</h4><p>Before talking about Docker and Sails we need to understand what is containerization and why we want it.</p><p>Containerization is a form of virtualization, through which applications are run in isolated user spaces called <em>containers</em>. We can think of a container as a lightweight virtual machine (but to be clear, it is not).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dyHQi6Q_XdUkRZ99an68Kw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oF6QqYRhWPw9HF20CUqhMw.png" /><figcaption><em>Comparing Containers and Virtual Machines [1]</em></figcaption></figure><p>But, why do we want it?</p><p>With containerization, everything an application needs to run, let’s say, its binaries, libraries, configuration files and dependencies, are encapsulated and isolated in its container. This makes it easier to set up and run a development environment, and also simplifies the deployment by reducing the chances of missing or different versions of libraries, files or dependencies errors.</p><p>The container itself is abstracted away from the host OS, with only limited access to underlying resources. Isolation has its advantages, for example portability, stability and security.</p><p>So, standard, lightweight, secure… <strong>yes as developers we want containerization!</strong></p><h4>Docker and Docker Compose</h4><p>The word “Docker” refers to several things including an open source project, tools and a company (Docker Inc., the company that primarily supports the project and tools).</p><p>Talking about the tools, Docker is a tool designed to make it easier to create, deploy, and run applications by using containers.</p><p>Container orchestration automates the deployment, management, scaling, and networking of containers. It can help you deploy the same application across different environments without needing to redesign it. As an example, microservices in containers make it easy to orchestrate services, including storage, networking, and security. <strong>Docker Compose is an orchestration tool for Docker containers.</strong> [2]</p><h4>Installing Docker</h4><p>Mac: <a href="https://docs.docker.com/docker-for-mac/install/">https://docs.docker.com/docker-for-mac/install/</a><br>Windows: <a href="https://docs.docker.com/docker-for-windows/install/">https://docs.docker.com/docker-for-windows/install/</a><br>Ubuntu: <a href="https://docs.docker.com/engine/install/ubuntu/">https://docs.docker.com/engine/install/ubuntu/</a><br>Others: <a href="https://docs.docker.com/engine/install/">https://docs.docker.com/engine/install/</a></p><h3>Sails containerization</h3><p>Now, how do we make Sails, our beloved Node framework, run inside a container?</p><h4>Sails CLI image</h4><p>Our container needs an image to run. Let’s create one.</p><p>To do so, create <strong>docker-sails-cli</strong> directory and a file named <strong>Dockerfile</strong> inside it with this content:</p><pre>Dockerfile</pre><pre>FROM node:lts</pre><pre>RUN npm install -g sails@1.4.2</pre><p>The FROM statement declares we are using node latest lts version as base image for ours. The syntax used is `imageName:tag`, if no tag is specified, the default is used. [3]</p><p>At the same time Node lts image is based on Debian Streatch. So this is our project environment, Sails 1.4.2, node 14.15.4 (at the time of writing this) running on a Debian Streatch.</p><p>Now we need to build our image.</p><pre>docker build . -t sails-cli:1.4.2</pre><p>Simple, right?</p><p>Let’s see what we did.</p><pre>docker build <strong>[context]</strong> -t <strong>[tag]</strong></pre><p><strong>context</strong>: The context where we are building. As we are in the same directory as the Dockerfile we use `.`. And also, there’s no need to specify the file name as Dockerfile is the default one.</p><p><strong>tag</strong>: It is optional, but we want to tag the image we just built as we are probably going to have many different images with different versions for different projects.</p><h4>Creating a new Sails project</h4><p>Once we have our Sails CLI image built we are going to use it to create a new Sails project.</p><pre>docker run — rm -v `pwd`:/app -w /app sails-cli:1.4.0 sails new sails-docker-example — no-frontend</pre><p><strong>docker run</strong><em>: </em>Create and run a new container<br><strong> — rm:</strong> Remove container after process finishes as we don’t need the container after that<br><strong>-v:</strong> Mount current working directory (in our host computer) in /app path inside container. As a result we are sharing current directory with the container<br><strong>-w:</strong> Set container current working directory to /app<br><strong>sails-cli:</strong>1.4.0: Our previously built Sails image</p><p><strong>sails new sails-docker-example — no-frontend</strong>: Sails CLI command we want to run in the container.</p><p>As a result, after running `sails new` in the container, we are going to find a new directory created with our new Sails project.</p><p>Now, let’s run our project:</p><pre>cd sails-docker-example</pre><pre>docker run — rm -it -v `pwd`:/app -w /app -p 1337:1337 sails-cli:1.4.0 sails lift</pre><p><strong>-i:</strong> Keep STDIN open even if not attached<br><strong>-t:</strong> Allocate a pseudo-TTY<br><strong>-p:</strong> Maps container 1337 to host computer so we can reach our app through localhost:1337</p><p>It’s alive!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*WxcI8dJPfJ9ZgpZY4-uSPA.gif" /></figure><h4>Running and debugging</h4><p>As you may notice, although our project is running, if you modify a file you will need to stop the container and launch it again to get the changes applied.</p><p>Nodemon to the rescue!</p><pre>docker run — rm -v `pwd`:/app -w /app sails-cli:1.4.0 npm install nodemon — save-dev</pre><p>Now, open <strong>package.json</strong> and in the <strong>scripts</strong> section add a new one, <strong>debug</strong>:</p><pre>json</pre><pre>“scripts”: {</pre><pre>“debug”: “nodemon — inspect=0.0.0.0 app.js”,</pre><pre>“start”: “NODE_ENV=production node app.js”,</pre><pre>…</pre><p>And run again, but this time instead of sails lift we are going to run with npm:</p><pre>docker run — rm -v `pwd`:/app -w /app -p 1337:1337 -p 9229:9229 sails-cli:1.4.0 npm run debug</pre><p>Now, modify a file, save it and verify that the project is restarted automatically.</p><p>Finally, as we are running inside a container we need a way to get the debugger connected to the process, so we are mapping the 9559 port.</p><p>If you use VS Code you can use the following configuration in the launch.json file:</p><pre>{</pre><pre>“version”: “0.2.0”,</pre><pre>“configurations”: [</pre><pre>  {</pre><pre>   “address”: “localhost”,</pre><pre>   “localRoot”: “${workspaceFolder}”,</pre><pre>   “name”: “Attach to Remote”,</pre><pre>   “port”: 9229,</pre><pre>   “remoteRoot”: “/app”,</pre><pre>   “request”: “attach”,</pre><pre>   “skipFiles”: [</pre><pre>   “&lt;node_internals&gt;/**”</pre><pre>   ],</pre><pre>   “type”: “node”,</pre><pre>   “restart”: true</pre><pre>  }</pre><pre> ]</pre><pre>}</pre><h3>Docker compose</h3><p>As we mentioned before Docker Compose is an orchestration tool. Compose allows us to define our infrastructure, let’s say, services, networks, volumes in an YAML file.</p><p>As a first step we will create a very simple file defining our Sails service on it. For this service we will set image, command, ports mapping, volume mounts, working directory, etc, as we did with Docker command line tool.</p><p>Our docker-compose.yml:</p><pre>version: ‘3’</pre><pre>services:</pre><pre>  api:</pre><pre>    image: sails-cli:1.4.0 # same as with docker cli</pre><pre>    # Run npm install before starting sails to keep our dependencies   installed and updated</pre><pre>    command: sh -c “npm install &amp;&amp; npm run debug”</pre><pre>    working_dir: /app # same as <strong>-w</strong> with docker cli</pre><pre>    ports: # same as <strong>-p</strong> with docker cli</pre><pre>      - ‘1337:1337’</pre><pre>      - ‘9229:9229’</pre><pre>    volumes: # same as <strong>-v</strong> with docker cli</pre><pre>      - .:/app</pre><p>Then, we will use docker-compose command to lift our service.</p><pre>docker-compose up</pre><p>The result is the same as running with Docker CLI.</p><p>In case we want to remove the created infrastructure, once stopped, run:</p><pre>docker-compose down</pre><p>This will remove all the containers, networks, volumes created with `docker-compose up`.</p><h3>Database containerization</h3><p>In most cases we will require a database for our project. In this example we will be using MongoDB but it’s possible to do the same with other db engine supported by Sails. [4]</p><p>For those who don’t know, MongoDB is a free and open-source cross-platform document-oriented database program. [5]</p><p>Fortunately MongoDB has an official image that we will be using to add a database service to our project.</p><p>First, we need to add Sails MongoDB adapter to our project. As we did before, we can add and install a dependency to our project with Docker like this:</p><pre>docker run — rm -v `pwd`:/app -w /app sails-cli:1.4.0 npm install sails-mongo</pre><p>Then, modify our project config and set mongo as our default adapter.</p><p>In the config/datastore.js file:</p><pre>.</pre><pre>.</pre><pre>.</pre><pre>default: {</pre><pre>  adapter: require(‘sails-mongo’),</pre><pre>  url: process.env.DB_URL</pre><pre>},</pre><p>Next we need to add MongoDB service to our <strong>docker-compose.yml</strong> and provision Sails service with needed config.</p><p>docker-compose.yml</p><pre>version: ‘3’<br></pre><pre>services:</pre><pre>  api:</pre><pre>   image: sails-cli:1.4.0</pre><pre>   command: sh -c “npm install &amp;&amp; npm run debug”</pre><pre>   working_dir: /app</pre><pre>   ports:</pre><pre>    - ‘1337:1337’</pre><pre>    - ‘9229:9229’</pre><pre>    volumes:</pre><pre>    - .:/app</pre><pre><strong>   env_file:</strong></pre><pre><strong>    - ./sails.env </strong># set env vars using a file<br></pre><pre><strong>  db:</strong></pre><pre><strong>   container_name: mongodb </strong># set name to the container</pre><pre><strong>   image: mongo:4.4 </strong># as of this writing, the latest version is 4.4.3</pre><pre><strong>   volumes:</strong></pre><pre><strong>    - ./mongo:/data/db</strong></pre><p>We added a db service to our compose file, and also set an env file to Sails service. We will use that file to config our database connection.</p><p>sails.env</p><pre>DB_URL=mongodb://root:@mongodb:27017/sails</pre><p>Compose allows us to connect to db using the container name as network address, that is why we can use <strong>mongodb</strong> as the address in our connection url.</p><p><strong>Important note</strong>: we are not enabling MongoDB authentication for this example but it is a good idea to do so for production environments. [6]</p><p>Finally, use `docker-compose up` to run, you will see MongoDB output along with Sails.</p><p>And we are done, a fully Sails development environment running on Docker!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*HPsRQtgOrzT062IZiKf-2Q.gif" /></figure><p><strong>Thank you so much</strong> for reading my post, comments are welcome! Here’s my twitter <a href="https://twitter.com/vidueirof">@vidueirof</a> for any questions you may have.</p><p>[1] <a href="https://www.docker.com/resources/what-container">https://www.docker.com/resources/what-container</a><br>[2] <a href="https://www.docker.com/why-docker">https://www.docker.com/why-docker</a><br>[3] <a href="https://hub.docker.com/_/node">https://hub.docker.com/_/node</a><br>[4] <a href="https://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters">https://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters</a><br>[5] <a href="https://www.mongodb.com">https://www.mongodb.com</a><br>[6] <a href="https://hub.docker.com/_/mongo">https://hub.docker.com/_/mongo</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=df08efdb2655" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/sails-development-with-docker-and-docker-compose-df08efdb2655">Sails development with Docker and Docker Compose</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Eudaimonia, tu socio tecnológico]]></title>
            <link>https://medium.com/eudaimonia-ar/eudaimonia-tu-socio-tecnol%C3%B3gico-1736b633d803?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/1736b633d803</guid>
            <category><![CDATA[techpartners]]></category>
            <category><![CDATA[desarrollo-de-software]]></category>
            <category><![CDATA[español]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[development]]></category>
            <dc:creator><![CDATA[Euda]]></dc:creator>
            <pubDate>Fri, 04 Dec 2020 19:08:34 GMT</pubDate>
            <atom:updated>2021-12-29T15:58:16.998Z</atom:updated>
            <content:encoded><![CDATA[<h3>Euda, tu socio tecnológico</h3><h4>El complemento ideal para startups<em>.</em></h4><p>Entendemos que para emprendedores es difícil saber en quién confiar cuando estás arrancando, por eso ofrecemos paquetes personalizados. Arquitectamos el producto en base a tus necesidades, lo desarrollamos y después podemos mantenerlo con actualizaciones a medida que van surgiendo las nuevas ideas. Somos más como un socio tecnológico que un simple contratista. No se terceriza el desarrollo de tu idea, la llevamos a cabo juntos. 🤝</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cCDwlSWI6oJ_4bpMdteCpw.jpeg" /></figure><p>Ofrecemos un equipo de desarrollo para ahorrar costos y gestión a partir de lo que se conoce como <em>full-service development</em> o un servicio de desarrollo completo. En otras palabras, una amplia gama de servicios de desarrollo de software que implican nuestra participación en el antes, durante y después del desarrollo de cualquier aplicación:</p><ul><li><strong>Branding y Diseño UX/UI:</strong> en primer lugar, se propone una imagen de marca (si no se posee previamente) contemplando posibles mejoras de diseño de la aplicación para que la experiencia de usuario sea óptima. Buscamos marcar la diferencia en el mercado: nos enfocamos en tener la mejor experiencia de usuario y usabilidad, que nos permita generar un sentimiento positivo.</li><li><strong>Desarrollo de software: </strong>en esta etapa sucede la magia. Nuestros desarrollos son personalizados, es decir, pensados para adaptarse las necesidades de cada cliente. Nos especializamos en el desarrollo de <strong>aplicaciones móviles </strong>para Android e iOS. Trabajamos en aplicaciones nativas, híbridas y progresivas, según la naturaleza de cada proyecto. También, desarrollamos <strong>sitios web </strong>personalizados y te ofrecemos la formación necesaria para que tengas el control de tu contenido.</li><li><strong>QA:</strong> antes de publicar cada implementación nuestro equipo de <em>Quality Assurance</em><strong> </strong>realiza exhaustivas pruebas para asegurarse de que todo funcione correctamente, contemplando todos los posibles problemas de usabilidad que puedan surgir.</li><li><strong>Gestión de proyectos:</strong> uno de nuestros <em>project managers</em> acompaña el proyecto de inicio a fin. Es el contacto directo con el cliente, responde a dudas y planifica todas las implementaciones requeridas.</li><li><strong>Soporte y monitoreo:</strong> el trabajo no termina cuando se publica la aplicación o página. Una vez publicada, continuamos monitoreando el uso de la misma con herramientas de análisis que nos permiten medir si los objetivos planteados se cumplen. Además, en caso de que surja algún inconveniente, estamos para brindar el soporte que sea necesario.</li></ul><p>Por último, trabajamos bajo la metodología Scrum que nos permite realizar entregas funcionales al cliente en un lapso de tiempo muy corto, cumpliendo así con las expectativas, para tener mayor productividad y reducir riesgos. Para más información (un poco más técnica) sobre cómo trabajamos, podés consultar nuestra publicación:</p><p><a href="https://medium.com/eudaimonia-ar/c%C3%B3mo-trabajamos-df9555cf6f33">Cómo trabajamos</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1736b633d803" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/eudaimonia-tu-socio-tecnol%C3%B3gico-1736b633d803">Eudaimonia, tu socio tecnológico</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cómo trabajamos]]></title>
            <link>https://medium.com/eudaimonia-ar/c%C3%B3mo-trabajamos-df9555cf6f33?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/df9555cf6f33</guid>
            <category><![CDATA[microservicios]]></category>
            <category><![CDATA[scrum]]></category>
            <category><![CDATA[pull-request]]></category>
            <category><![CDATA[español]]></category>
            <category><![CDATA[pull-request-reviews]]></category>
            <dc:creator><![CDATA[Euda]]></dc:creator>
            <pubDate>Tue, 17 Nov 2020 19:48:19 GMT</pubDate>
            <atom:updated>2020-11-17T21:28:51.501Z</atom:updated>
            <content:encoded><![CDATA[<h4>Un resumen de cómo nos organizamos para desarrollar software: metodología Scrum, revisión de código y arquitectura de microservicios.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bofFcFbvePkugaS-85rxiQ.jpeg" /></figure><p>Para cumplir con los objetivos trabajamos con la combinación de varias metodologías:</p><h4>1. METODOLOGÍA SCRUM</h4><p>Para todas las etapas del desarrollo tomamos algunos principios de la metodología Scrum para organizar nuestro trabajo, adaptándola a cada equipo según sus necesidades específicas. Se trata de cumplir las siguientes etapas:</p><ol><li>Definir los objetivos y dividirlos en tareas.</li><li>Organizar el trabajo en <em>sprints</em> de acuerdo a fases del proyecto.</li><li>Desarrollar en base a microservicios (más abajo te contamos qué es) con reuniones diarias para compartir el progreso y mantenernos al tanto de lo que está haciendo cada miembro del equipo.</li><li>Publicación de los avances en producción.</li><li>Volver a empezar. 🔄</li></ol><p>🛠 Trello o Asana, Jenkins y Git son las herramientas que usamos en todo el proceso.</p><p>Para más información sobre esta metodología, podés consultar el siguiente artículo:</p><p><a href="https://medium.com/eudaimonia-ar/improve-your-performance-with-scrum-methodology-26bd11bb4798">Improve your performance with Scrum Methodology</a></p><h4>2. REVISIÓN DE CÓDIGO</h4><p>Cada implementación de desarrollo que hacemos pasa por un proceso de revisión de código. Solo cuando dos o más compañeros/as aprueban el <em>Pull Request</em> se puede mergear. Esto permite detectar errores rápidamente y evitar sumar <em>bugs </em>al código.</p><p>En cada revisión, el/la <em>reviewer</em> puede dejar comentarios con felicitaciones o correcciones explicando el porqué del error (siempre de forma amable para que el otro lo entienda). Además, en caso de que alguna parte del código sea confusa, puede pedir más explicaciones.</p><p>Hay varios caminos para llegar al mismo resultado y siempre se puede aprender de las decisiones que toma otra persona.</p><p>🛠 Ya que nuestro código se encuentra hosteado en Bitbucket, usamos la sección de<em> Pull Requests</em> de esta plataforma para la revisión.</p><h4>3. MICROSERVICIOS</h4><p>Es el modelo de trabajo en el que basamos todos nuestros desarrollos.</p><p>👉 ¿Qué significa?</p><p>En palabras simples, es hacer el trabajo por partes. Las arquitecturas de microservicios descomponen una aplicación en sus funciones principales, haciendo que sean más fáciles de escalar y más rápidas de desarrollar.</p><p>Es un enfoque para desarrollar una aplicación o software como una serie de pequeños servicios, cada uno ejecutándose de forma autónoma y comunicándose entre sí a través de peticiones a sus API.</p><p>A diferencia de las arquitecturas monolíticas, se evita que la comunicación sea través de una llamada a un método local, ya que todos los servicios se comunican remotamente. La arquitectura basada en microservicios es realmente programación distribuida, porque conseguimos agilidad a la hora de llevar nuestra aplicación desde desarrollo hasta producción, lo que se consigue gracias a técnicas como <em>continuous delivery</em>, <em>continuous deployment</em> y <em>continuous improvement</em>.</p><p>👉 ¿Cuáles son las ventajas de este modelo de trabajo?</p><ul><li>Hace el desarrollo y despliegue de la aplicación mucho <strong>más rápido</strong>.</li><li>Brinda<strong> libertad </strong>para desarrollar y desplegar servicios de forma independiente.</li><li>Cada microservicio se puede desarrollar con un <strong>equipo de trabajo mínimo</strong>. Es fácil de entender y modificar por lo que facilita la<strong> integración </strong>de nuevos miembros al equipo.</li><li>Se pueden usar <strong>diferentes lenguajes</strong> para diferentes módulos.</li><li>La <strong>modificación</strong> de un módulo no afecta al funcionamiento del resto.</li><li>Es más fácil de <strong>escalar e integrar</strong> el trabajo con aplicaciones de terceros.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=df9555cf6f33" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/c%C3%B3mo-trabajamos-df9555cf6f33">Cómo trabajamos</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Certificar Dominios con Letsencrypt y NGINX con Docker Compose]]></title>
            <link>https://medium.com/eudaimonia-ar/certificar-dominios-con-letsencrypt-y-nginx-con-docker-compose-a6a948f47f2f?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/a6a948f47f2f</guid>
            <category><![CDATA[certificado-digital]]></category>
            <category><![CDATA[español]]></category>
            <category><![CDATA[lets-encrypt]]></category>
            <category><![CDATA[nginx]]></category>
            <category><![CDATA[docker-compose]]></category>
            <dc:creator><![CDATA[Matias Quintana]]></dc:creator>
            <pubDate>Fri, 28 Aug 2020 15:53:19 GMT</pubDate>
            <atom:updated>2020-09-03T20:37:43.600Z</atom:updated>
            <content:encoded><![CDATA[<h3>Certificación de dominio con Let’s Encrypt, NGINX y Docker Compose</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Xwr-pf3wmV0JDg2VmdS7qw.jpeg" /></figure><h3>Algunas definiciones</h3><h4>¿Qué es un Certificado SSL?</h4><p>Un certificado SSL es un tipo de certificado digital que proporciona autenticación para un sitio web y habilita una conexión encriptada. Estos certificados comunican al cliente que el host del servicio web demostró la propiedad del dominio a la autoridad de certificación en el momento de la emisión del certificado.</p><p>SSL (Secure Socket Layer) es un protocolo de seguridad que encripta el envío y recepción de información entre el servidor y el cliente. Este crea una capa de conexión segura entre el navegador y el servidor del sitio web al que el usuario se conecta. Cualquier información que pase a través de esta capa está encriptada y es descifrada cuando llega a su destino.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/0*g2k7-Dk6W0_2TgOw" /></figure><h4>Let’s Encrypt</h4><p>Let’s Encrypt es una autoridad de certificación (también conocidas como AC o <em>CA</em> por sus siglas en inglés) gratuita, automatizada, y abierta, que existe para el beneficio del público. Es un servicio provisto por el <a href="https://abetterinternet.org/"><em>Internet Security Research Group (ISRG)</em></a>.</p><p><a href="https://letsencrypt.org/es/">Let&#39;s Encrypt - Certificados SSL/TLS Gratuitos</a></p><h4>Certbot</h4><p>Certbot es un cliente extensible con todas las funciones para <em>Let’s Encrypt CA</em>, o cualquier otra autoridad de certificación que se comunique a través del protocolo <a href="https://github.com/ietf-wg-acme/acme/blob/master/draft-ietf-acme-acme.md">ACME</a>, capaz de automatizar las tareas de obtener certificados y configurar servidores web para usarlos.</p><p><a href="https://certbot.eff.org/">Certbot</a></p><h4>Nginx</h4><p>Es un servidor web/proxy inverso ligero de alto rendimiento y un proxy para protocolos de correo electrónico.​​</p><p><a href="https://www.nginx.com/">Advanced Load Balancer, Web Server, &amp; Reverse Proxy - NGINX</a></p><h3>Cómo certificar</h3><h4>Pre-Requisitos</h4><ul><li>Dominio registrado</li><li>Docker Compose instalado</li></ul><p><em>Compose</em> es una herramienta para definir y ejecutar aplicaciones Docker de varios contenedores. Se usa un archivo YAML para configurar los servicios de tu aplicación y luego, con un solo comando, crea e inicia todos los servicios desde tu configuración. A continuación, un link a la documentación de Docker sobre cómo instalarlo:</p><p><a href="https://docs.docker.com/compose/install/"></a></p><ol><li>Lo primero que haremos es<strong> crear los directorios</strong> donde Certbot alojará la configuración de los certificados y donde pondremos la configuración de nuestro servidor Nginx:</li></ol><pre><em>data/nginx<br>data/certbot/www/.well-known</em></pre><p>Es muy importante que esté creado el directorio <strong><em>.well-known </em></strong>ya que en el mismo se guardará el <em>challenge</em> que Let’s encrypt utiliza para corroborar que tenemos control sobre el dominio. Es útil conocer los diferentes tipos de <em>challenges</em> que existen para elegir el más adecuado según el caso.</p><p>El siguiente link deriva a la documentación para entender un poco más sobre los <em>challenges</em>, es decir, esta validación que Let’s Encrypt utiliza para verificar el control sobre el dominio:</p><p><a href="https://letsencrypt.org/docs/challenge-types/">Challenge Types</a></p><p>2. Luego,<strong> crearemos el archivo de configuración de Nginx</strong> dentro del directorio recién creado, con el siguiente contenido:</p><pre>server {<br>  listen 80;<br>  server_name <strong>NOMBRE_DEL_HOST</strong>;<br>  location / {<br>    return 301 https://<strong> NOMBRE_DEL_HOST</strong>;<br>  }<br>  location /.well-known/acme-challenge/ {<br>    root /var/www/certbot;<br>  }<br>}<br>server {<br>  listen 443 ssl;<br>  server_name <strong>NOMBRE_DEL_HOST</strong>;<br>  location / {<br>    proxy_pass http://<strong>NOMBRE_DEL_HOST</strong>;<strong><br>  </strong>}<br>  ssl_certificate /etc/letsencrypt/live/<strong>NOMBRE_DEL_HOST</strong>/fullchain.pem;<br>  ssl_certificate_key /etc/letsencrypt/live/<strong>NOMBRE_DEL_HOST</strong>/privkey.pem;<br>  include /etc/letsencrypt/options-ssl-nginx.conf;<br>  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;<br>}</pre><p>El archivo de configuración deberá estar en dicho directorio:</p><pre>data/nginx/web.conf</pre><p>3. Una vez listo, pasaremos a <strong>crear el <em>Compose</em></strong> que vamos a utilizar:</p><pre>version: &quot;3&quot;<br>services:<br>  nginx:<br>     image: nginx:1.15-alpine<br>     ports:<br>       - &quot;80:80&quot;<br>       - &quot;443:443&quot;<br>     volumes:<br>       - ./data/nginx:/etc/nginx/conf.d<br>       - ./data/certbot/conf:/etc/letsencrypt<br>       - ./data/certbot/www:/var/www/certbot<br>     command: &quot;/bin/sh -c &#39;while :; do sleep 6h &amp; wait $${!}; nginx -s reload; done &amp; nginx -g \&quot;daemon off;\&quot;&#39;&quot;<br>  <br>  certbot:<br>     image: certbot/certbot<br>     volumes:<br>       - ./data/certbot/conf:/etc/letsencrypt<br>       - ./data/certbot/www:/var/www/certbot<br>     entrypoint: &quot;/bin/sh -c &#39;trap exit TERM; while :; do certbot renew; sleep 12h &amp; wait $${!}; done;&#39;&quot;</pre><p>Creado el <em>Compose</em>, no lo ejecutaremos, porque fallará la creación del Nginx debido a que no se encuentra creado el certificado que declaramos anteriormente en el archivo de configuración de Nginx.</p><p>Vamos a explicar un poco lo que hicimos en ese <em>Compose</em>: cruzamos datos entre Certbot y Nginx mediante los directorios creados anteriormente. Esto se debe a que necesitamos que el contenedor Nginx pueda acceder a los certificados y el <em>challenge</em> creados por el contenedor de Certbot.</p><p>En el contenedor de Certbot agregamos un <strong><em>entrypoint</em></strong> el cual verifica cada 12 horas si se puede renovar el certificado.</p><p>Por su parte, en el contenedor de Nginx agregamos un <strong><em>command</em></strong> el cual permite iniciar Nginx en primer plano y recarga su configuración y certificados cada 6 horas en segundo plano, asegurando que siempre tenga los nuevos certificados que se generen.</p><p>4. Finalmente, debemos <strong>crear el siguiente <em>script</em></strong> cambiando los valores de <strong><em>domains</em> </strong>y <strong><em>email</em></strong>:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/424292a94bb1cbd19646e68baa07b630/href">https://medium.com/media/424292a94bb1cbd19646e68baa07b630/href</a></iframe><p>El script debe estar en el mismo directorio donde se encuentra el <strong><em>docker-compose</em></strong> y el directorio <strong><em>data</em></strong> que creamos anteriormente.</p><p>Vamos a darle permiso de ejecución al <em>script</em> y luego ejecutarlo:</p><pre>chmod +x init-letsencrypt.sh <br>sudo ./init-letsencrypt.sh</pre><p>Como dijimos anteriormente, si queremos utilizar el comando</p><pre>docker-compose up</pre><p>no funcionará porque no se encuentran creados los certificados que seteamos en la configuración de Nginx. Ahí es donde entra en juego el <em>script</em>. Este <em>script</em> lo que hace es crear certificados <em>dummies</em><strong> </strong>utilizando el contenedor de Certbot, para poder inicializar el contenedor de Nginx sin errores. Luego de que el contenedor esté inicializado, elimina los certificados <em>dummies</em>, le pide a Let’sEncrypt certificados para nuestro dominio y reinicia la configuración del contenedor de Nginx para recargar los certificados válidos. De este modo, no va a ser necesario utilizar dicho comando.</p><blockquote><em>Si al ejecutar el </em>script<em> falla la creación de los certificados, es muy importante que lean y resuelvan el inconveniente antes de volver a ejecutarlo, ya que </em><strong><em>Let’sEncrypt bloqueará el dominio </em></strong><em>si hacen más de 5 intentos fallidos.</em></blockquote><p><a href="https://letsencrypt.org/es/docs/rate-limits/">Limitaciones</a></p><p>Por último, cabe aclarar que en este artículo tomé información de varias fuentes, recopilando aquellas que me parecieron más completas para que este paso a paso resulte más fácil y práctico. Espero que les sea útil y cualquier consulta no duden en dejarla en los comentarios. ¡Muchos éxitos!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a6a948f47f2f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/certificar-dominios-con-letsencrypt-y-nginx-con-docker-compose-a6a948f47f2f">Certificar Dominios con Letsencrypt y NGINX con Docker Compose</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Working from home during lockdown]]></title>
            <link>https://medium.com/eudaimonia-ar/working-from-home-during-lockdown-a4ec7543e4b5?source=rss----baa259bb68db---4</link>
            <guid isPermaLink="false">https://medium.com/p/a4ec7543e4b5</guid>
            <category><![CDATA[working-from-home]]></category>
            <category><![CDATA[lockdown]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[work-life-balance]]></category>
            <category><![CDATA[work]]></category>
            <dc:creator><![CDATA[paudeviaje]]></dc:creator>
            <pubDate>Tue, 14 Jul 2020 15:09:08 GMT</pubDate>
            <atom:updated>2020-07-14T15:09:07.978Z</atom:updated>
            <content:encoded><![CDATA[<p>Several months have passed and for those of us who work on IT, we will surely have to work from home for a while longer. It is likely that you have already adapted to remote work, however, it never hurts to review some tips for working remotely, being more productive and feeling better both at work and on a daily basis.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XXYKdulTfB6DPS6f0XmmvA.jpeg" /></figure><h3>Manage times and spaces</h3><p>The first <em>#Eudatip</em> to work from home in quarantine is to plan a routine that includes breaks at limited hours. This can be based on meals, for example, it’s important to plan breakfast, lunch and snacks so that they are always at the same time, and avoid eating in front of the computer! Try to make the work and rest spaces different so that the rest becomes more effective.</p><p>Sometimes the comfort of the home can backfire. If you don’t have colleagues or partners around you, it’s easy to get distracted. There are always other things to do, like doing laundry, dishes, etc. Therefore, you have to do your best to put them on pause until finish or do them during breaks. Setting an alarm on your phone or computer can help you organize better.</p><p>Another tip is to get up and put on an outfit different from the one you wear to sleep. It can be other pajamas, more comfortable pants, whatever you want! The goal is to start the day with renewed energies.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/0*wfOwkleWcup2SJSM.jpg" /></figure><h3>Do not lose communication</h3><p>Keeping fluid contact with your team is vital. Here are some tools and tips that we apply as a company and may help you:</p><ul><li>Slack or any messaging tool of your choice. Communication is very important when you work remotely, especially because if you are not there, your team may forget about you. It is important that <strong>they know that you are available</strong> so that they can contact you. At Eudaimonia every day we greet each other with a “Good day” in the main channel and we say goodbye when our schedule ends.</li><li>Google Hangouts / Meet, if you have a business Gsuite, Zoom or other video conferencing apps. In this context, <strong>meetings are more important than ever</strong>. I’m not saying that several calls are necessary per day or per topic, especially when some issues can usually be solved with just an email. But the meetings that have already been set, daily if possible, must be an opportunity to take advantage of. It works to write down everything you did the day before so that you can share it at the meeting and that everyone is aware of the progress each one made.</li><li>A Kanban, to <strong>sort the tasks and priorities of each project</strong>. If you do not have a defined work plan from the beginning, it is best that as you begin to have requirements to write them in a Kanban. Trello is a very helpful tool, because it allows you to have visibility of what everyone is doing and measure the progress of each project.</li><li>Online news portals to keep you informed. Reading the news every day before starting helps us to <strong>not lose communication with the outside world</strong> and can be used to share interesting articles with your colleagues and <strong>generate conversation</strong>.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/0*Szza0YSayhhXkakT.jpg" /></figure><h3>Knowing when and how to stop</h3><p>This is one of the most difficult things since sometimes we just get carried away and work more than our stipulated time. Chances are that whatever you’re doing after 12–13 hours of continuous work won’t be the best quality, plus you’ll be overloading yourself for the next day. Working remotely could make some people assume that you are available at any time of the day, but you are not.</p><p>On the other hand, a good tip is to end the day with a little exercise. If we jump directly from screen to screen, our eyes get tired and can cause headaches. If you do not like to exercise, with some spinal stretching that you can easily find on youtube is more than enough. There are no excuses! You can find short routines of up to 7 minutes. You’ll feel less contracted and in a better mood.</p><p>To sum up, we know that working from home has its pros and cons, but the key is to keep trying until you find out what works best. Once you do, you’re probably going to be able to work wherever you want. After a while you will realize that you can be much more productive than you thought.</p><p>Have you already put into practice any of these tips? Do you have any to add? Tell us in the comments below.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a4ec7543e4b5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/eudaimonia-ar/working-from-home-during-lockdown-a4ec7543e4b5">Working from home during lockdown</a> was originally published in <a href="https://medium.com/eudaimonia-ar">Euda</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>