Master

Lenguajes & Frameworks

Adoptar?

  • Hace bastante tiempo posicionamos a ReactiveX, una familia de marcos de trabajo de código abierto para la programación reactiva, dentro del anillo "Adoptar" del Radar. En 2017 mencionamos la adición de RxSwift, que trajo la programación reactiva al desarrollo para iOS utilizando Swift. Desde entonces, Apple ha introducido su propia solución de programación reactiva en la forma del marco de trabajo Combine. Este se ha convertido en nuestra elección por defecto para aplicaciones que soportan iOS 13 como entorno de despliegue. Es más fácil de aprender que RxSwift y se integra muy bien con SwiftUI. Si se está planificando convertir una aplicación existente con RxSwift a Combine o hacerlos coexistir, se debería evaluar a RxCombine.

    Historia
  • Nuestros equipos de desarrollo móvil ven que LeakCanary es una buena elección predeterminada para el desarrollo en Android. Esta utilidad detecta las molestas fugas de memoria en Android, es extremadamente simple de integrar y proporciona notificaciones con trazas claras hacia las causas de las fugas. LeakCanary puede ahorrar horas de trabajo tedioso para solucionar problemas de "memoria insuficiente" en múltiples dispositivos. Es por esto que recomendamos añadirla en el juego de herramientas.

    Historia

Probar?

  • Como estamos permanentemente desarrollando aplicaciones web en JavaScript, seguimos apreciando el enfoque de Testing Library para probar aplicaciones; continuamos explorando y ganando experiencia con sus paquetes, más allá de React Testing Library. Angular Testing Library trae todos los beneficios de su familia cuando se prueban componentes de interfaz de usuario de una manera centrada en el usuario, en favor de pruebas más fáciles de mantener enfocadas principalmente en el comportamiento, en vez de probar los detalles de implementación de la interfaz de usuario. Aunque su documentación es limitada, Angular Testing Library proporciona buenas pruebas de muestra que nos ayudaron a comenzar más rápido en varias ocasiones. Hemos tenido un gran éxito con esta biblioteca en nuestros proyectos Angular y aconsejamos experimentar con este sólido enfoque de pruebas.

    Historia
  • AWS Data Wrangler es una biblioteca de código abierto que amplía las capacidades de Pandas a AWS al conectar marcos de datos a los servicios de datos de AWS. Además de Pandas, esta biblioteca aprovecha las capacidades de Apache Arrow y Boto3 para exponer varias APIs para cargar, transformar y guardar datos provenientes de lagos y almacenes de datos. Una limitación importante de esta biblioteca es que no permite realizar pipelines distribuidos para grandes volúmenes de datos. Sin embargo, es capaz de aprovechar servicios de datos nativos, como Athena, Redshift y Timestream, para hacer el trabajo pesado y extraer datos y así expresar transformaciones complejas que se adapten bien a los marcos de datos. Hemos utilizado AWS Data Wrangler en producción y como tal, permite concentrarse en escribir transformaciones sin perder demasiado tiempo en la conectividad a los servicios de datos de AWS.

    Historia
  • A pesar de que JavaScript y su ecosistema dominan el espacio de desarrollo de interfaces de usuario para la web, están surgiendo nuevas oportunidades tras la aparición de WebAssembly. Blazor continúa llamando nuestra atención. Está produciendo buenos resultados para aquellos equipos que construyen interfaces de usuario sofisticadas en C# con WebAssembly. El hecho de que nuestros equipos también puedan utilizar C# en el front-end les permite compartir el código y reutilizar bibliotecas existentes. Eso, junto a las herramientas actuales para depuración y la ejecución de pruebas, como bUnit, hacen que esta tecnología de código abierto merezca ser probada.

    Historia
  • Estamos viendo que más equipos adoptan Python como el lenguaje de preferencia para el desarrollo de soluciones, no sólo para ciencia de datos, sino de servicios de back-end también. En estos casos, estamos teniendo buenas experiencias con FastAPI, un marco de trabajo web moderno y rápido (de alto rendimiento) para la construcción de APIs con Python 3.6 o superior. Además, este marco de trabajo y su ecosistema incluyen funcionalidades como la documentación del API a través de OpenAPI, que permite que los equipos puedan centrar su atención en las funcionalidades de negocio y crear APIs REST rápidamente. Esto convierte a FastAPI en una buena alternativa frente a las soluciones ya existentes.

    Historia
  • Hemos disfrutado mucho de usar TypeScript desde hace ya un buen tiempo y nos encanta la seguridad que el tipado fuerte proprociona. Sin embargo, introducir datos dentro de los límites del sistema de tipos (por ejemplo, a partir de la respuesta de una llamada a un servicio de back-end) puede provocar errores en tiempo de ejecución. Una biblioteca que ayuda a resolver este problemas es io-ts: cierra la brecha entre la revisión de tipos en tiempo de compilación y el consumo de datos externos en tiempo de ejecución, proporcionando funciones de codificación y decodificación. También se puede usar como un verificador personalizado del tipado. A medida que adquirimos más experiencia con io-ts en nuestro trabajo, nuestras impresiones iniciales positivas se confirman y nos sigue gustando la elegancia de su enfoque.

    Historia
  • La introducción de las co-rutinas de Kotlin abrió la puerta a varias innovaciones; Kotlin Flow es una de ellas, directamente integrada en la biblioteca de co-rutinas. Es una implementación de Reactive Streams basada en co-rutinas. A diferencia de RxJava, los flujos son un API nativa de Kotlin, similar a la familiar API de secuencias con métodos que incluyen map y filter. De manera similar a las secuencias, los flujos son "fríos", lo que significa que los valores de las secuencias se construyen únicamente cuando se necesitan. Todo esto hace que el código con múltiples hilos de ejecución sea más fácil de escribir y entender que con otros enfoques. El método toList convierte un flujo en una lista de forma predecible, lo cual es un patrón recurrente en las pruebas.

    Historia
  • Se ha producido un progreso constante desde que escribimos por primera vez sobre Web Components en 2014. LitElement, parte del Proyecto Polymer, es una biblioteca simple que se puede usar para crear componentes web ligeros. Realmente es solo una clase base que elimina la necesidad de un montón de código repetitivo, haciendo que escribir componentes web sea mucho más fácil. Hemos tenido éxito con el uso de LitElement en proyectos y la estamos usando con más frecuencia en nuestros proyectos basados en Web Components, ya que vemos que la tecnología sigue madurando y la biblioteca está siendo bien apreciada.

    Historia
  • Pudimos obtener un poco más de experiencia usando Next.js para bases de código React desde la última vez que escribimos sobre él. Next.js es un marco de trabajo de configuración cero que incluye enrutamiento simplificado, compilación automática y empaquetado con Webpack y Babel, recarga en caliente rápida para conseguir un flujo de trabajo de desarrollo conveniente, entre otras características. Proporciona renderizado del lado del servidor de forma predeterminada, mejora las optimizaciones para motores de búsqueda y los tiempos de carga inicial y soporta la generación estática incremental. Hemos tenido informes de experiencias positivas de los equipos que utilizan Next.js y, dada su gran comunidad, seguimos entusiasmados con la evolución de este marco de trabajo.

    Historia
  • Los módulos bajo demanda para Android son un marco de trabajo que permite, en apps debidamente estructuradas, descargar e instalar APKs personalizados que contienen solo las funcionalidades requeridas. Podría ser buena idea evaluar esta estrategia para apps muy grandes, donde la velocidad de descarga puede ser un problema, o si es probable que el usuario solo requiera usar partes específicas de la funcionalidad en la instalación inicial. También puede ayudar a simplificar el soporte de múltiples dispositivos sin necesidad de diferentes APKs. Un marco de trabajo similar también existe para iOS.

    Historia
  • Streamlit es un marco de trabajo de código abierto para Python usado por científicas de datos para construir aplicaciones interactivas de datos. La personalización de los modelos de aprendizaje automático requiere de tiempo; en vez de tener que lidiar con la aplicación principal (la que usa los modelos), hemos visto que es valioso crear rápidamente prototipos autónomos en Streamlit y obtener retroalimentación durante los ciclos de experimentación. Streamlit se destaca de competidores como Dash por su foco en el prototipado rápido y por el soporte a una amplia variedad de bibliotecas de visualización, como Plotly y Bokeh. Lo estamos usando en algunos proyectos y nos gusta cómo podemos crear visualizaciones interactivas con muy poco esfuerzo.

    Historia
  • Nuestros equipos han descubierto que la biblioteca SWR para React Hooks permite obtener un código más limpio y con mejor desempeño cuando se la utiliza en circunstancias apropiadas. SWR implementa la estrategia para el almacenamiento de datos en caché de HTTP denominada stale-while-revalidate, primero retornando datos desde la caché (obsoletos), luego enviando la petición para obtener nueva información (revalidar) y finalmente refrescando los valores a partir de la respuesta recibida. Advertimos a los equipos a solo usar la estrategia de almacenamiento en caché SWR cuando se espera que una aplicación devuelva datos obsoletos. Además, nótese que HTTP requiere que los cachés respondan a una petición con la respuesta más actualizada, y que solamente en circunstancias cuidadosamente consideradas se permite devolver respuestas obsoletas.

    Historia
  • La asignación de claves SSH públicas es un tema delicado. Si para una aplicación se selecciona una política incorrecta o si no se dispone de una asignación de reserva, esta podría dejar de funcionar de forma inesperada. Estos son los escenarios donde TrustKit es útil. Este es un marco de trabajo de código abierto que facilita la asignación de claves SSH públicas para aplicaciones iOS. También existe un marco de trabajo equivalente para Android. Elegir la estrategia de asignación idónea es cuestión de matices, y en esta guía de primeros pasos es posible encontrar más información al respecto. En cuanto a nuestra experiencia, podemos decir que hemos utilizado TrustKit en varios proyectos de producción con éxito.

    Historia

Evaluar?

  • No acostumbramos presentar cada nueva versión de .NET en el Radar, pero .NET 5 representa un paso significativo para unir .NET Core y .NET Framework en una sola plataforma. Las organizaciones deben empezar a desarrollar una estrategia de migración de sus ambientes de desarrollo (una combinación fragmentada de marcos de trabajo dependiendo del objetivo de despliegue) a una sola versión de .NET 5 (o 6, cuando esté disponible). La ventaja de este enfoque será la de tener una plataforma de desarrollo común sin importar el ambiente deseado: Windows, Linux, dispositivos móviles multiplataforma (vía Xamarin) o navegadores (utilizando Blazor). Si bien el desarrollo políglota se mantendrá como el enfoque preferido en compañías que cuenten con una cultura de ingeniería que pueda soportarlo, otras encontrarán más eficiente estandarizarse en una sola plataforma para el desarrollo en .NET. Por ahora, queremos mantenerlo en el anillo "Evaluar" para ver qué tan bien el marco de trabajo unificado final se desempeña en .NET 6.

    Historia
  • bUnit es una biblioteca para Blazor que facilita la creación de pruebas para componentes Blazor en los marcos de trabajo existentes de pruebas unitarias como NUnit, xUnit o MSTest. Proporciona una fachada alrededor del componente que permite ejecutarlo y probarlo siguiendo el paradigma familiar de pruebas unitarias: esto permite obtener retroalimentación muy rápidamente y además probar los componentes de forma aislada. Si desarrollas utilizando Blazor, recomendamos agregar bUnit a tu juego de herramientas.

    Historia
  • Dagster es un marco de trabajo de código abierto para la orquestación de datos para aprendizaje automático, analíticas y pipelines de datos simples de tipo ETL. A diferencia de otros marcos de trabajo basados en tareas, Dagster tiene en cuenta a los datos que fluyen por el pipeline y puede proporcionar seguridad de tipos. Con la vista unificada de pipelines y activos producidos, Dagster puede programar y orquestar a Pandas, Spark, SQL, o a cualquier otra cosa que Python pueda invocar. Dagster es relativamente nuevo por lo que recomendamos evaluar sus capacidades para tus pipelines de datos.

    Historia
  • Hasta ahora, Flutter ha brindado principalmente soporte para construir aplicaciones nativas en iOS y Android. Sin embargo, la visión del equipo de Flutter es soportar la construcción de aplicaciones en todas las plataformas. Flutter para la Web es un paso en esa dirección: permite construir aplicaciones para iOS, Android y navegadores utilizando la misma base de código. Ha estado disponible por alrededor de un año en el canal "Beta" y recientemente ha alcanzado su forma estable con el lanzamiendo de Flutter 2.0. En esta versión del soporte para la web, el equipo de Flutter se ha enfocado en las aplicaciones web progresivas, aplicaciones de página única (single page apps) y en expandir las aplicaciones móviles ya existentes hacia la web. La aplicación y el código del marco de trabajo (que se escriben ambos en Dart) son compilados a JavaScript, en vez de a código de maquina ARM, que es utilizado en las aplicaciones móviles. El motor web de Flutter permite elegir entre dos renderizadores: HTML (que utiliza HTML, CSS, Canvas y SVG) y CanvasKit (que usa WebAssembly y WebGL para renderizar comandos "paint" de Skia al canvas del navegador). Algunos de nuestros equipos han empezado a usar Flutter para la Web y gustan de los resultados iniciales.

    Historia
  • En la edición anterior del Radar, comentamos sobre el inicio de una etapa de experimentación con el manejo de estado en aplicaciones React. Movimos a Redux de vuelta al anillo "Probar", indicamos que ya no es nuestra elección por defecto, y mencionamos a Recoil, de Facebook. Ahora queremos destacar a Jotai y Zustand, otras bibliotecas para el manejo de estado para React. Su objetivo es ser pequeñas y fáciles de usar; y (tal vez por casualidad) sus nombres son las traducciones de la palabra "estado" en japonés y alemán respectivamente. Mas allá de estas similitudes, hay diferencias en su diseño: el de Jotai se acerca más a Recoil, por cuanto el estado consiste de átomos que se almacenan dentro del árbol de componentes de React, mientras que Zustand almacena el estado fuera de React en un solo objeto de estado, muy parecido a como lo hace Redux. Los autores de Jotai proveen una lista muy útil para decidir cuándo usar cuál.

    Historia
  • Siguiendo la tendencia del desarrollo multiplataforma para móviles, Kotlin Multiplatform Mobile (KMM) es una nueva entrada en este espacio. KMM es un SDK proporcionado por JetBrains que potencia las capacidades multiplataforma de Kotlin y que incluye herramientas y características diseñadas para hacer que la experiencia completa de construcción de aplicaciones multiplataforma para dispositivos móviles sea más agradable y eficiente. Con KMM escribes por una sola vez el código de la lógica del negocio y de la aplicación base y puedes compartirlo con aplicaciones Android e iOS. La escritura de código específico para una plataforma queda solo para cuando es estrictamente necesario (por ejemplo, para aprovechar elementos nativos de la interfaz de usuario) y el código específico se mantiene en vistas diferentes para cada plataforma. Aunque está aún en estado Alpha, Kotlin Multiplatform Mobile está evolucionando rápidamente. Por supuesto, no lo perderemos de vista y esperamos que tu tampoco lo hagas.

    Historia
  • Con la creciente popularidad de las casas inteligentes y dispositivos para llevar puesto (wearable devices), la demanda de interfaces de usuario intuitivas está aumentando. Sin embargo, para quien está involucrado en el desarrollo de dispositivos integrados, en lugar de Android o iOS, el desarrollo de interfaces de usuario puede requerir de mucho esfuerzo. Como una biblioteca de gráficos integrados de código abierto, LVGL se ha vuelto cada vez más popular. LVGL se ha adaptado a las plataformas integradas convencionales como NXP, STM32, PIC, Arduino y ESP32. Requiere de muy poca memoria para operar: 64 kB de memoria flash y 8 kB de RAM son suficientes y se puede ejecutar sin problemas en varios MCUs de tipo Cortex-M0 de bajo consumo. LVGL soporta medios de entrada como la pantalla táctil, ratón y botones, y contiene más de 30 controles, incluido TileView, adecuado para relojes inteligentes. La licencia MIT seleccionada no restringe su uso empresarial o comercial. Las opiniones de nuestros equipos respecto a esta herramienta han sido positivas y uno de nuestros proyectos que utiliza LVGL ya se encuentra en producción, especificamente, en la manufactura de lotes pequeños.

    Historia
  • La creación de formularios para la web continúa siendo uno de los desafíos perpetuos del desarrollo de front-ends, en particular con React. Varios de nuestros equipos han utilizado Formik para facilitar la creación de formularios, sin embargo, algunos están ahora evaluando React Hook Form como una potencial alternativa. React Hooks ya existía cuando React Hook Form fue creado, por lo que se lo puede utlizar como un componente de primera clase: el marco de trabajo registra y monitorea los elementos del formulario como componentes no controlados mediante un hook, reduciendo significativamente la necesidad de volver a renderizar. También es bastante ligero en tamaño y en la cantidad de código de relleno requerida para utilizarlo.

    Historia
  • La creación de modelos a partir de un conjunto de datos de entrenamiento se encuentra en el corazón de muchos métodos de aprendizaje automático. Una vez que el modelo ha sido creado, se puede utilizar muchas veces. Sin embargo, el mundo no es estacionario y con frecuencia los modelos necesitan ser modificados a medida que se hacen disponibles nuevos datos. Solamente volver a ejecutar el paso de creación del modelo puede ser lento y costoso. El aprendizaje incremental soluciona este problema, haciendo posible aprender de flujos de datos incrementalmente para reaccionar más rápido ante los cambios. Como punto adicional, los requerimientos tanto de cómputo como de memoria son menores y predecibles. En nuestras implementaciones hemos tenido buenas experiencias con el marco de trabajo denominado River, aunque hemos añadido verificaciones, a veces manuales, luego de actualizar el modelo.

    Historia
  • El lanzamiento de la funcionalidad para la federación de módulos de Webpack 5 ha sido muy esperado por las desarrolladoras de arquitecturas micro-frontend. Esta característica introduce una forma más estandarizada de optimizar la carga y la administración de las dependencias de los módulos y el código compartido. La federación de módulos permite especificar aquellos que son compartidos, lo que ayuda a eliminar dependencias duplicadas entre múltiples micro-frontends al cargar una sola vez el código utilizado por varios módulos. También permite distinguir entre módulos locales y remotos: los remotos se cargan de forma asíncrona y no son parte del resultado compilado en sí. A diferencia de las dependencias de tiempo de compilación (como los paquetes npm) esto puede simplificar significativamente el despliegue de una actualización de un módulo con varias dependencias. Hay que tener en cuenta que esto requiere empacar todos los micro-frontends con Webpack, en vez de aplicar técnicas como los import maps, que podrían llegar a convertirse en parte del estándar W3C.

    Historia

Resistir?

    ¿No encuentras aquello que querías ver?

    Cada edición del Radar incluye blips que contienen la información encontrada durante los últimos seis meses. Es posible que ya hayamos incluido el tema que estás buscando en Radares anteriores. Hay veces que omitimos algunos temas debido a que hay demasiado de que hablar. O también, puede faltar algo debido a que en el Radar buscamos reflejar nuestra experiencia, no lo basamos en un análisis exhaustivo del mercado.

    Nuevo,Modificado,Ningún cambio