<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juan Miguel Arias Mejias</title>
    <description>The latest articles on DEV Community by Juan Miguel Arias Mejias (@juanmiguelar).</description>
    <link>https://dev.to/juanmiguelar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F630851%2F598e7132-18dd-4c12-a68d-b74e0f047505.jpeg</url>
      <title>DEV Community: Juan Miguel Arias Mejias</title>
      <link>https://dev.to/juanmiguelar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juanmiguelar"/>
    <language>en</language>
    <item>
      <title>El origen de la historia</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Sat, 04 Jan 2025 01:14:34 +0000</pubDate>
      <link>https://dev.to/juanmiguelar/el-origen-de-la-historia-1n4p</link>
      <guid>https://dev.to/juanmiguelar/el-origen-de-la-historia-1n4p</guid>
      <description>&lt;p&gt;&lt;strong&gt;¿Primer encuentro con código?&lt;/strong&gt;&lt;br&gt;
Creo que mi primer acercamiento al código ocurrió viendo películas, especialmente aquellas en las que aparecían hackers. Fue hace tanto tiempo que no recuerdo un evento específico, pero sí sé que las escenas con computadoras me parecían fascinantes. Esa curiosidad inicial despertó mi interés por explorar todo lo que se podía hacer con una computadora.&lt;/p&gt;

&lt;p&gt;En ese entonces, teníamos una computadora en casa, que usaba casi exclusivamente para jugar. Mis favoritos eran Age of Empires, Warcraft, y un juego de motos cuyo nombre no logro recordar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué te atrajo de la tecnología?&lt;/strong&gt;&lt;br&gt;
Lo que más me atrajo fue la posibilidad de crear y mejorar la vida de las personas. La capacidad de automatizar procesos tediosos o complicados me pareció algo increíblemente poderoso. Saber que puedes usar la tecnología para resolver problemas reales y aliviar cargas me motivó aún más.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Quién te inspiró?&lt;/strong&gt;&lt;br&gt;
Curiosamente, quien me impulsó a decidirme por la informática fue un profesor de música. Me aconsejó elegir una profesión en la que pudiera dedicar muchas horas sin agotarme. Pensé en cuánto tiempo podía pasar frente a una computadora sin cansarme y me dije: "Esto es para mí".&lt;/p&gt;

&lt;p&gt;Una vez que empecé la carrera, descubrí que realmente me gustaba y que se me daba bien. Así que, aquí estoy, disfrutando del camino que tomé gracias a esa pequeña conversación.&lt;/p&gt;

</description>
      <category>trend</category>
      <category>background</category>
    </item>
    <item>
      <title>Builder pattern / improvements</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Mon, 15 Apr 2024 02:19:32 +0000</pubDate>
      <link>https://dev.to/juanmiguelar/builder-pattern-improvements-3fof</link>
      <guid>https://dev.to/juanmiguelar/builder-pattern-improvements-3fof</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;Today, I want to delve into the Builder pattern—an essential design concept that many developers encounter at some point in their careers. This pattern significantly enhances our ability to construct complex objects in a controlled and scalable manner. However, there's always room for improvement, especially in how we manage the construction process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding the Builder Pattern&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Builder pattern simplifies the creation of complex objects by breaking down the construction process into discrete, manageable steps, handled by a director and a builder. The director controls the order of building steps, while different builders implement the specific details of the object being constructed. Here’s a basic example using a house construction analogy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Director&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="n"&gt;IHouseBuilder&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;newDirector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="n"&gt;IHouseBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Director&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Director&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Director&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;setBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="n"&gt;IHouseBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Director&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;buildHouse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;House&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setDoors&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setWindows&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setRooms&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getHouse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this snippet, the &lt;code&gt;Director&lt;/code&gt; is tasked with building a house by sequentially initiating the construction of doors, windows, and rooms through the builder. This step-by-step approach ensures that each component is completed before the next begins, traditionally taking about 3 seconds for our hypothetical build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimizing with Concurrency&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if we could speed up this process? Instead of constructing each component sequentially, we could leverage concurrency to handle these tasks simultaneously, significantly reducing build time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"golang.org/x/sync/errgroup"&lt;/span&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Director&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="n"&gt;IHouseBuilder&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;newDirector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="n"&gt;IHouseBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Director&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Director&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Director&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;setBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="n"&gt;IHouseBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Director&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;buildHouse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;House&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;eg&lt;/span&gt; &lt;span class="n"&gt;errgroup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Group&lt;/span&gt;

    &lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Go&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setDoors&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Go&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setWindows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Go&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setRooms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;eg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Wait&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;House&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getHouse&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By using Go’s &lt;code&gt;errgroup&lt;/code&gt; package, we can parallelize the construction steps. This alteration allows the building of doors, windows, and rooms to occur simultaneously, potentially cutting down the total build time to approximately 1 second—a significant improvement!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Impact of Concurrency&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Implementing concurrency in your Builder pattern can dramatically enhance efficiency, especially in languages like Go that are designed with concurrency in mind. This method ensures that the end result remains consistent while optimizing the construction process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources and Further Exploration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're interested in experimenting with these concepts, you can access the complete code examples here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/juan-go-patterns/builder/src/main/"&gt;Builder Pattern Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/juan-go-patterns/builderx2/src/main/"&gt;Optimized Builder with Concurrency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to follow me on Instagram &lt;a href="https://instagram.com/i.am.juan.dev"&gt;@i.am.juan.dev&lt;/a&gt; for more insights and updates on software development practices.&lt;/p&gt;

&lt;p&gt;I encourage you to explore the potential of integrating concurrency into your Builder implementations. It’s a powerful way to enhance performance and efficiency in your projects. Happy coding!&lt;/p&gt;

</description>
      <category>go</category>
    </item>
    <item>
      <title>Factory Method</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Sun, 10 Apr 2022 21:25:41 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/factory-method-3509</link>
      <guid>https://dev.to/4geeksacademy/factory-method-3509</guid>
      <description>&lt;p&gt;Hola, hoy venimos con un patrón de diseño creacional. &lt;/p&gt;

&lt;p&gt;El Factory Method, es un patrón que nace de la necesidad de abstraer la lógica de creación de un objeto. Es más fácil entenderlo con un ejemplo.&lt;/p&gt;

&lt;p&gt;Pongamos en situación que estamos dándole mantenimiento a un sistema de logística, en donde el método de entrega siempre ha sido por tierra y todo bien, el sistema funciona de esta manera por varios años sin problemas. Llega el día, en que nuestra empresa decide diversificar las operación y se toma la decisión de ofrecer logística marítima. &lt;/p&gt;

&lt;p&gt;Vaya... parece que tenemos un problema, el sistema solamente esta enfocado a logística terrestre ¿Cómo haremos para resolver este problema? y sobre todo, ¿Cómo haremos para mejorar la escalabilidad del sistema? de manera que puedan haber tantos métodos de logística como se quiera sin mayores modificaciones. &lt;/p&gt;

&lt;p&gt;El Factory Method, nos puede ayudar en esta ocasión, es un patrón de diseño creacional listo para abstraer la lógica de la creación.&lt;/p&gt;

&lt;p&gt;Ok, estamos listos para implementarlo. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg7t7gz6xg1nc3v78ab3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg7t7gz6xg1nc3v78ab3.png" alt="Boat" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este caso, necesitamos pensar en cómo llamaremos de manera general al grupo que envuelve el &lt;strong&gt;camión&lt;/strong&gt; o el &lt;strong&gt;bote&lt;/strong&gt;. Quizás &lt;strong&gt;Transporte&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yt3pcd9mv9zu8q0flvt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yt3pcd9mv9zu8q0flvt.png" alt="Truck" width="500" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También necesitamos pensar en cómo llamaremos de manera general al grupo que envuelve la logística &lt;strong&gt;Terrestre&lt;/strong&gt; y el &lt;strong&gt;Marítima&lt;/strong&gt;. Quizás &lt;strong&gt;Logística&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Estamos listos. &lt;/p&gt;

&lt;p&gt;Por la parte del Transporte tendríamos el siguiente diagrama: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqutdgz9img5rh4bvr1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqutdgz9img5rh4bvr1y.png" alt="Diagrama transporte" width="612" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y por la parte de Logística tendríamos el siguiente:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90yflh5a362x8e7n6v9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90yflh5a362x8e7n6v9d.png" alt="Diagrama Logistica" width="762" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En mi GitHub podrán ver la implementación en Golang. &lt;a href="https://github.com/juanmiguelar/CreationalPatternsGo/tree/main/FactoryMethod"&gt;Enlace&lt;/a&gt;&lt;br&gt;
Muchas gracias por leer&lt;br&gt;
Les dejo mis redes: &lt;a href="https://linkr.bio/juanmiguelar"&gt;Enlace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imágenes y ejemplo tomado de: &lt;a href="https://refactoring.guru/design-patterns/factory-method"&gt;Enlace&lt;/a&gt;&lt;/p&gt;

</description>
      <category>design</category>
      <category>pattern</category>
      <category>go</category>
      <category>backend</category>
    </item>
    <item>
      <title>Estructura de datos: Pila</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Wed, 06 Apr 2022 03:17:32 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/estructura-de-datos-pila-25pn</link>
      <guid>https://dev.to/4geeksacademy/estructura-de-datos-pila-25pn</guid>
      <description>&lt;p&gt;Hola! Soy yo de nuevo&lt;/p&gt;

&lt;p&gt;En esta ocasión venimos a escribir sobre la estructura de datos pila. &lt;/p&gt;

&lt;p&gt;La pila o "stack" del ingles, es la contra parte de la &lt;a href="https://dev.to/4geeksacademy/estructura-de-datos-cola-2879"&gt;cola&lt;/a&gt;(te recomiendo que leas el articulo anterior), se describe así: &lt;strong&gt;El primer dato que entra es el último en salir o el último dato que ingresa es el primero en salir.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lo podemos ver de esta forma. Cuando tenemos una pila de platos sucios, los apilamos, en espera de ser lavados. Cuando colocamos solamente uno, se vería de la siguiente forma:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1 - Plato sucio -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Como no hemos estado atentos a la pileta, de repente ingresan 2 platos sucios a la vez ¡Y no hemos procesado ni uno!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;3 - Plato sucio -&lt;br&gt;
2 - Plato sucio -&lt;br&gt;
1 - Plato sucio -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Deberíamos de ponernos a ello y empezar a limpiarlos, en esta ocasión siguiendo el algoritmo de pila, el cuál nos dice que &lt;strong&gt;el último plato sucio que haya sido ingresado es el primero que debo de lavar&lt;/strong&gt;. ¡Pues a trabajar!&lt;/p&gt;

&lt;p&gt;- / - &lt;em&gt;Sonidos de limpieza&lt;/em&gt; - / -&lt;/p&gt;

&lt;p&gt;Listo, hemos lavado uno ¿Cómo se ve nuestra pila ahora?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;2 - Plato sucio -&lt;br&gt;
1 - Plato sucio -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lavemos otro!&lt;/p&gt;

&lt;p&gt;- / - &lt;em&gt;Sonidos de limpieza&lt;/em&gt; - / -&lt;/p&gt;

&lt;p&gt;¡Ufff, qué trabajo más arduo! Debería de solamente quedarnos un plato sucio pendiente, y según el algoritmo de pila, &lt;strong&gt;debería de quedarnos el primer plato que ingresó&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1 - Plato sucio -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Efectivamente, &lt;strong&gt;el plato pendiente es el primero que ingresó a la pila&lt;/strong&gt;. Bueno, será momento de lavarlo, nadie lo hará por nosotros.&lt;/p&gt;

&lt;p&gt;- / - &lt;em&gt;Sonidos de limpieza&lt;/em&gt; - / -&lt;/p&gt;

&lt;p&gt;¡Te felicito de haber llegado aquí! Has sido capaz de lavar toda la pila, vaya logro.&lt;/p&gt;

&lt;p&gt;Por acá te dejo el vídeo tutorial de la implementación en Golang: &lt;a href="https://www.youtube.com/watch?v=IDNc_qb5110"&gt;https://www.youtube.com/watch?v=IDNc_qb5110&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Además te dejo el repositorio: &lt;a href="https://github.com/juanmiguelar/Stack-golang"&gt;https://github.com/juanmiguelar/Stack-golang&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Y por si fuera poco, te dejo mis redes:&lt;br&gt;
&lt;a href="https://linkr.bio/juanmiguelar"&gt;https://linkr.bio/juanmiguelar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gracias por leer&lt;br&gt;
Pasa bonita vida&lt;/p&gt;

</description>
      <category>data</category>
      <category>go</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Estructura de datos: Cola</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Mon, 04 Apr 2022 01:52:48 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/estructura-de-datos-cola-2879</link>
      <guid>https://dev.to/4geeksacademy/estructura-de-datos-cola-2879</guid>
      <description>&lt;p&gt;Hola!&lt;/p&gt;

&lt;p&gt;Hace un tiempo no escribo en este portal. Me gustaría regresar con un tema fundamental de la programación, &lt;strong&gt;estructuras de datos&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Las estructuras de datos son simplemente, formas diferentes de organizar los datos. Estas surgen de la necesidad de resolver problemas que son muy comunes o repetitivos en la labor del programador. &lt;/p&gt;

&lt;p&gt;Vamos a centrarnos en la &lt;strong&gt;cola&lt;/strong&gt; o "queue" del ingles. &lt;/p&gt;

&lt;p&gt;La Cola, es una estructura de datos que se comporta de forma similar a una cola o fila en el banco, tomando en cuenta que en esta analogía, los datos son las personas, que llegan para ser atendidas.&lt;/p&gt;

&lt;p&gt;Si la fila del banco esta vacía y llega una persona, pues lo más normal es que la primera persona que llegue sea la primera persona en ser atendida. Este es el principio fundamental de las colas. Primero que entra primero que sale. &lt;strong&gt;Primer dato que ingresa a la cola, primer dato que sale.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Digamos entonces, nuestra cola va a ser representada por una colección, de la siguiente forma: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si viene un dato a la cola, un dato que queremos encolar, por ejemplo un numero, se vería de la siguiente forma:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[1]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Y si este proceso se repite algunas veces:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[1, 2, 3]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tenemos una colección de 3 ítems, que se han colado haciendo fila para ser procesados, en el momento que quiera procesar los datos, debo desencolar uno. En esta ocasión al hacerlo, debería de salir el primer dato que haya sido ingresado, de la siguiente forma:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[2, 3]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como podemos notar, el primer dato que ingresó fue el número 1 y este ha sido el primero que ha salido. Si repetimos el proceso, quedaría de la siguiente forma nuestra cola:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[3]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;De nuevo, se ve cómo es que el último que ingresó a la cola es el último en ser atendido. &lt;/p&gt;

&lt;p&gt;Si te animas a implementar este comportamiento de cola, te animo a checar el video tutorial que he creado en Youtube. &lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=ssqtGs9rkcg"&gt;Implementación de cola en golang&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gracias por leerme, Juan Miguel Arias Mejías&lt;/p&gt;

&lt;p&gt;Te dejo mis redes: &lt;a href="https://linkr.bio/juanmiguelar"&gt;enlace&lt;/a&gt;&lt;br&gt;
Pasa bonita vida.&lt;/p&gt;

</description>
      <category>datastructure</category>
      <category>go</category>
    </item>
    <item>
      <title>Detectar imágenes con inteligencia artificial</title>
      <dc:creator>Juan Miguel Arias Mejias</dc:creator>
      <pubDate>Sun, 23 May 2021 22:44:09 +0000</pubDate>
      <link>https://dev.to/4geeksacademy/detectar-imagenes-con-inteligencia-artificial-4bnk</link>
      <guid>https://dev.to/4geeksacademy/detectar-imagenes-con-inteligencia-artificial-4bnk</guid>
      <description>&lt;p&gt;Hola, soy Juan Miguel!&lt;/p&gt;

&lt;p&gt;Quisiera iniciar mis entradas en este blog con uno de los temas que más me atraen, la inteligencia artificial. &lt;/p&gt;

&lt;p&gt;Les advierto, para realizar este tutorial es necesario contar con conocimientos básicos en python y github. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iniciemos!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Primero el problema: se nos presenta un requerimiento de reconocer el contenido de un conjunto de imágenes ingresadas por un usuario.&lt;/p&gt;

&lt;p&gt;¿Cómo podríamos hacer esto? &lt;/p&gt;

&lt;p&gt;Pues, si somos programadores muy avanzados quizás podríamos realizar el algoritmo para reconocer el contenido de las imágenes, pero gracias a la maravillosa comunidad de desarrolladores de software, esto no es necesario. Existe &lt;a href="https://github.com/OlafenwaMoses/ImageAI"&gt;ImageAI&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  ImageAI
&lt;/h3&gt;

&lt;p&gt;Herramienta perfecta para el reconocimiento de imágenes y por supuesto, gratis para probarla y jugar con ella. Vamos a ello!&lt;/p&gt;

&lt;p&gt;Tengo preparado un repositorio listo! Va a ser increíblemente sencillo, créeme; &lt;a href="https://github.com/juanmiguelar/ImageAI_Lab"&gt;Link al repo&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Qué podremos encontrar en el repositorio?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59n4adi8c9lpmmgjp97v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59n4adi8c9lpmmgjp97v.png" alt="image" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;brain.py&lt;/strong&gt;: Archivo de python listo para probarse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;giraffe.jpg, godzilla.jpg, house.jpg&lt;/strong&gt;: Imágenes para probar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mobilenet_v2.h5&lt;/strong&gt;: A este archivo, quizás podríamos llamarle la &lt;em&gt;inteligencia&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cuando descarguemos este repositorio necesitamos ejecutar los siguientes comandos para poder correr el brain.py:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install tensorflow==2.4.0
pip install imageai --upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Debemos tomar en cuenta que la inteligencia que estamos utilizando en este tutorial no es muy avanzada, pero &lt;a href="https://github.com/OlafenwaMoses/ImageAI/blob/master/imageai/Classification/README.md"&gt;aqui&lt;/a&gt; les dejo el enlace para que prueben con otras más precisas. &lt;/p&gt;

&lt;p&gt;Les dejo un vídeo para guiarles en todo el proceso.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/jj4_pFJBt8I"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Un saludo!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/juanmiguelar/"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/juanmiguelar"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>beginners</category>
      <category>github</category>
    </item>
  </channel>
</rss>
