<?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: Emmanuel / Manny (eapl.me)</title>
    <description>The latest articles on DEV Community by Emmanuel / Manny (eapl.me) (@eapl).</description>
    <link>https://dev.to/eapl</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%2F3376380%2F5c17c846-7316-4d88-a40f-b7d5f5a4af90.png</url>
      <title>DEV Community: Emmanuel / Manny (eapl.me)</title>
      <link>https://dev.to/eapl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eapl"/>
    <language>en</language>
    <item>
      <title>Reto 2 - El caso de las tablas no tan iguales 📄🔍</title>
      <dc:creator>Emmanuel / Manny (eapl.me)</dc:creator>
      <pubDate>Sun, 07 Sep 2025 18:43:03 +0000</pubDate>
      <link>https://dev.to/eapl/reto-2-el-caso-de-las-tablas-no-tan-iguales-2e9a</link>
      <guid>https://dev.to/eapl/reto-2-el-caso-de-las-tablas-no-tan-iguales-2e9a</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/eapl/presentando-el-retodelasemana-43c3"&gt;Conoce más del reto de la semana&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Descripción del reto
&lt;/h1&gt;

&lt;p&gt;Estamos remplazando una herramienta antigua, con una nueva versión (usando el lenguaje de moda, claro). Debemos validar que ambas herramientas devuelvan resultados idénticos.&lt;br&gt;
Por la naturaleza del proceso, la magia de los números flotantes, y otras cosas que nadie sabe explicar, los números no serán exactamente iguales, aunque si están dentro de un rango, podemos decir que son idénticos.&lt;/p&gt;

&lt;p&gt;También, ambas herramientas devuelven los valores "desordenados", es decir, el primer elemento para una herramienta puede estar en cualquier otra posición para la otra.&lt;/p&gt;
&lt;h2&gt;
  
  
  Veamos un ejemplo
&lt;/h2&gt;

&lt;p&gt;La primera herramienta nos devolvió los siguientes resultados (en formato CSV):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|--------|-------|-----|
| Name   | X     | Y   |
|--------|-------|-----|
| Cat    | 106   | 450 |
| Dog    | 300   | 200 |
| Snake  | 45    | 100 |
|--------|-------|-----|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La segunda herramienta nos da lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|----------|----------|-------|-----|
| X        | Y        | Name  | Tag |
|----------|----------|-------|-----|
| 299.9999 | 200.0001 | Dog   |     |
| 45.003   | 99.9999  | Snake |     |
| 106.0005 | 499.9999 | Cat   |     |
|----------|----------|-------|-----|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El rango para considerar que un número es idéntico a otro es 0.001.&lt;br&gt;
En este caso el valor X del Cat es 106.0005 en una herramienta y 106 en la otra. Podemos considerar que son idénticos.&lt;/p&gt;

&lt;p&gt;También el valor Y de Skate es 99.9999 y 100 en la otra. También son idénticos.&lt;/p&gt;

&lt;p&gt;Finalmente, el valor Tag que devuelve una herramienta está vacío, por lo que podemos ignorar que esa columna no existe en la tabla de la otra herramienta. Es decir, no estamos considerando los valores vacíos en la comparación.&lt;/p&gt;

&lt;p&gt;Bajo estas condiciones, podemos decir que ambas tablas tienen valores idénticos.&lt;br&gt;
En caso de que una tabla tuviera más registros que otra, o cualquiera de sus valores sean distintos, debemos indicarlo, y también señalar la condición en la que son diferentes.&lt;/p&gt;

&lt;p&gt;¿Cómo lo resolverías?&lt;/p&gt;

&lt;h1&gt;
  
  
  Algunas pistas
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Empieza pensando ¿Cómo puedes identificar que un registro es similar a otro, considerando todas sus columnas? (Te puede ayudar el concepto de las &lt;a href="https://www.wikiwand.com/es/articles/Clave_primaria" rel="noopener noreferrer"&gt;llaves primarias&lt;/a&gt; en las bases de datos)&lt;/li&gt;
&lt;li&gt;¿Cómo podemos identificar que dos números diferentes son idénticos si su diferencia está dentro del rango que definimos?&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>retodelasemana</category>
    </item>
    <item>
      <title>Reto 1 - Emparejar puntos</title>
      <dc:creator>Emmanuel / Manny (eapl.me)</dc:creator>
      <pubDate>Sun, 31 Aug 2025 18:24:35 +0000</pubDate>
      <link>https://dev.to/eapl/reto-1-emparejar-puntos-5b7f</link>
      <guid>https://dev.to/eapl/reto-1-emparejar-puntos-5b7f</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/eapl/presentando-el-retodelasemana-43c3"&gt;Conoce más del reto de la semana&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En mi empleo actual encontré un reto que me tuvo pensando por varios días, pues me pareció muy curioso, y encontré una manera elegante de resolverlo. Espero que también lo encuentres interesante.&lt;/p&gt;

&lt;h1&gt;
  
  
  Descripción del reto
&lt;/h1&gt;

&lt;p&gt;Hay una serie de puntos en un espacio en 2 dimensiones. Cada punto tiene una coordenada aproximada (que después será confirmada con más precisión), un texto que lo describe, y un identificador único (UUID).&lt;/p&gt;

&lt;p&gt;Recibiremos una tabla como la siguiente, en formato CSV:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|--------|-------|-------------|--------------------------------------|
| X      | Y     | Text        | UUID                                 |
|--------|-------|-------------|--------------------------------------|
| 100    | 250   | PLACEHOLDER | fb202d64-2d1a-4c43-9927-63b12ecfa175 |
| 150    | 300   | PLACEHOLDER | c90ee93a-b6c9-4bad-b046-1cea3a9912ca |
| 118    | 45    | Object 1    | 2ef679df-3eba-4396-ba99-32aca2bbbdd9 |
| 129.34 | 98.01 | Object 2    | d9f17009-7f0c-47ee-ae98-387a7777e590 |
|--------|-------|-------------|--------------------------------------|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para los elementos provisionales (Con texto 'PLACEHOLDER') sabemos que más adelante nos darán la posición exacta, y además reemplazaremos el texto temporal con el correcto.&lt;/p&gt;

&lt;p&gt;La confirmación de los puntos vendrá en otra tabla como esta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|---------|---------|-------|
| X       | Y       | Text  |
|---------|---------|-------|
| 100.108 | 249.981 | 1001  |
| 150.057 | 300.087 | 1002  |
|---------|---------|-------|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entonces en la primera tabla se debe buscar el punto confirmado más cercano, reemplazarse sus coordenadas, y también su valor.&lt;/p&gt;

&lt;p&gt;Al combinar las dos tablas, el resultado será el siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|---------|---------|-------------|--------------------------------------|
| X       | Y       | Text        | UUID                                 |
|---------|---------|-------------|--------------------------------------|
| 100.108 | 250.981 | 1001        | fb202d64-2d1a-4c43-9927-63b12ecfa175 |
| 150.057 | 300.087 | 1002        | c90ee93a-b6c9-4bad-b046-1cea3a9912ca |
| 118     | 45      | Object 1    | 2ef679df-3eba-4396-ba99-32aca2bbbdd9 |
| 129.34  | 98.01   | Object 2    | d9f17009-7f0c-47ee-ae98-387a7777e590 |
|---------|---------|-------------|--------------------------------------|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explicado de otra manera, cada punto confirmado se buscará en la primera tabla para emparejar con el punto más cercano. Cuando se encuentre se reemplaza la coordenada y su texto. Por ejemplo, para el punto confirmado (100.108, 249.981) tendremos el placeholder más cercano en (100, 250) que corresponde al texto "1001".&lt;/p&gt;

&lt;p&gt;Se trabajarán unos 10,000 puntos. El procesamiento debería tomar menos de 1 segundo.&lt;/p&gt;

&lt;p&gt;¿Cómo lo resolverías?&lt;/p&gt;

&lt;h1&gt;
  
  
  Algunas pistas
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Empieza pensando ¿Cómo puedes calcular la distancia entre dos puntos? ¿Ya existe alguna dependencia en tu lenguaje que te puede ayudar?&lt;/li&gt;
&lt;li&gt;Asume que siempre habrá un punto suficientemente cercano que corresponda con otro punto confirmado.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>retodelasemana</category>
    </item>
    <item>
      <title>Presentando el #retoDeLaSemana</title>
      <dc:creator>Emmanuel / Manny (eapl.me)</dc:creator>
      <pubDate>Sun, 31 Aug 2025 17:41:35 +0000</pubDate>
      <link>https://dev.to/eapl/presentando-el-retodelasemana-43c3</link>
      <guid>https://dev.to/eapl/presentando-el-retodelasemana-43c3</guid>
      <description>&lt;p&gt;¡Hola! Soy Manny, líder de equipos técnicos y arquitecto Web.&lt;/p&gt;

&lt;p&gt;Desde hace muchos años me ha gustado mucho compartir lo que he aprendido en estos años como desarrollador. Ya sea como una clase formal, una mentoría, o incluso una entrada en un blog.&lt;br&gt;
Una de las mejores maneras que he encontrado para interiorizar un nuevo concepto es poner manos a la obra y resolver el problema, en vez de solamente pensar sobre ello de forma abstracta.&lt;/p&gt;

&lt;p&gt;Es por ello que en este hashtag #retoDeLaSemana estaré compartiendo un reto que me haya encontrado en mi proyecto actual, o alguno que me hizo aprender algo interesante.&lt;/p&gt;

&lt;p&gt;Te invito a compartir tus soluciones. Yo te escribiré algunas ideas para resolverlo, y si te interesa la solución completa paso a paso, estará disponible en mi tienda en línea, como una pequeña lección para tu crecimiento profesional.&lt;/p&gt;

&lt;p&gt;¡Te espero!&lt;/p&gt;

</description>
      <category>retodelasemana</category>
      <category>desarrollo</category>
    </item>
  </channel>
</rss>
