Menú

Lenguajes & Frameworks

Adoptar?

  • Arrow es promocionado como el complemento funcional de la biblioteca estándar de Kotlin. De hecho, el paquete de abstracciones de alto nivel listas para usar que ofrece Arrow ha demostrado ser tan útil que nuestros equipos ahora lo tienen como su elección por defecto para trabajar con Kotlin. Recientemente, en preparación para el lanzamiento de la versión 1.0, el equipo de Arrow introdujo varios cambios, entre los que se incluyen nuevos módulos y también algunas deprecaciones y eliminaciones.

    Historia
  • jest-when es una biblioteca ligera en JavaScript que complementa a Jest y ayuda a comparar los argumentos de las invocaciones a funciones simuladas (mocked functions). Jest es una gran herramienta para probar la tecnología en general; jest-when permite definir expectativas sobre argumentos específicos en las funciones simuladas, lo que posibilita escribir pruebas unitarias más robustas de módulos con muchas dependencias. Es fácil de usar y provee gran soporte para múltiples comparadores (matchers), razón por la cual nuestros equipos han hecho de jest-when su opción por defecto en este campo.

    Historia

Probar?

  • En el caso en el que sea necesario realizar una implementación usando Node.js vemos que Fastify es una opción con la cual nuestros equipos se sienten contentos de trabajar. Este framework web ofrece facilidad en el manejo de validaciones de peticiones y respuestas, soporte para TypeScript y un ecosistema de complementos que brinda a nuestros equipos una experiencia más sencilla para el desarrollo de software. Si bien es una buena opción en el ecosistema de Node.js, nos mantenemos firmes en nuestro consejo anterior: evitar los escenarios de uso excesivo de Node.

    Historia
  • Con la creciente complejidad de las aplicaciones de página única (single-page applications, SPAs) con JavaScript, manejar la previsibilidad del estado es cada vez más importante. La inmutabilidad puede ayudar a garantizar que nuestras aplicaciones se comporten de forma consistente, pero por desgracia, JavaScript no ofrece soporte integrado para estructuras de datos profundamente inmutables (véase la propuesta de registros y tuplas para ECMAScript). Immer (“siempre” en Alemán) es un pequeño paquete que nos permite trabajar con estado inmutable de forma más conveniente. Está basado en el mecanismo de copia en escritura (copy-on-write), tiene una API mínima y opera sobre objetos y arreglos normales de JavaScript. Esto significa que el acceso a los datos es transparente y no se requiere de grandes esfuerzos de refactorización para introducir inmutabilidad en una base de código existente. Muchos de nuestros equipos ya lo utilizan en sus bases de código JavaScript y les gusta más que Immutable.js, razón por la cual lo promovemos al anillo Probar.

    Historia
  • Hemos decidido regresar a Redux al anillo de Probar para mostrar que ya no es considerada como la solución predeterminada para la gestión del estado en aplicaciones React. Nuestra experiencia muestra que Redux aún es un framework valioso en muchos casos aunque lleva a escribir un código más verboso y difícil de mantener, en comparación con otros enfoques. El añadir Redux Sagas a la mezcla generalmente contribuye a este problema. Como alternativa se pueden utilizar las características incorporadas en las versiones recientes de React para gestionar el estado sin necesidad de frameworks adicionales. No obstante, nos gustaría resaltar que una vez alcanzado el punto en el que la gestión del estado comienza a hacerse compleja, podría ser apropiado usar Redux o tal vez incluso Recoil, publicada recientemente por Facebook.

    Historia
  • La popularidad del lenguaje de programación Rust sigue aumentando, al punto de haber sido nombrado, por las personas desarrolladoras, como el lenguaje “más querido” en Stack Overflow durante cinco años consecutivos. A nosotros también nos gusta. Es un lenguaje expresivo, rápido y seguro que va aumentando su utilidad a medida que su ecosistema crece. Por ejemplo, Rust se está empezando a utilizar para aplicaciones de ciencia de datos y aprendizaje automatico, entregando un aumento significativo del rendimiento. También, Materialize es una base de datos orientada a la transmisión de flujos de datos con baja latencia escrita en Rust.

    Historia
  • single-spa es un framework para JavaScript que permite consolidar múltiples micro-frontends en una aplicación individual. Aunque advertimos sobre la anarquía de los micro-frontends (el uso de micro-frontends como excusa para mezclar y combinar múltiples frameworks) single-spa soporta precisamente eso. Entendemos que existen casos legítimos tales como la actualización a una nueva versión de un framework a través de múltiples micro-frontends, en los cuales la integración a través de múltiples frameworks es necesaria. Nuestros equipos han considerado a single-spa como la mejor opción para la integración de micro-frontends, y se ha encontrado que trabaja bien con SystemJS y administrando diferentes versiones de una dependencia en particular.

    Historia
  • El ecosistema de Kotlin sigue creciendo y más bibliotecas de componentes están aprovechando las características de este lenguaje para reemplazar a sus alternativas basadas en Java. Strikt es una una biblioteca de aserciones que permite escribir comprobaciones en las pruebas con un estilo muy fluido. Utiliza bloques de Kotlin y funciones lambda para ayudar a que las pruebas sean menos verbosas mientras mantienen su legibilidad. Strikt también permite la construcción de aserciones personalizadas para hacer que las pruebas sean más específicas al dominio.

    Historia
  • En ediciones anteriores del Radar, hemos hablado de varias bibliotecas para la gestión del estado, pero XState toma un enfoque ligeramente distinto. Es un framework simple en JavaScript y TypeScript para crear máquinas de estado finito y visualizarlas como gráficos de estado. Se integra con los frameworks reactivos más populares de JavaScript (Vue.js, Ember.js, React.js y RxJS) y está basado en el estándar W3C para máquinas de estado finito. Otra característica notable es la serialización de las definiciones de las máquinas. Algo que nos ha sido útil al crear máquinas de estado finito en otros contextos (particularmente al escribir lógica de juegos) es la habilidad de visualizar los estados y sus posibles transiciones; nos gusta que es realmente sencillo hacerlo con el visualizador de XState.

    Historia

Evaluar?

  • Cuando escribimos sobre la realidad virtual más allá de los juegos hace algunos años, no intentamos predecir la velocidad ni el nivel en el que podríamos encontrar soluciones de realidad virtual en otros campos además de los videojuegos. En retrospectiva, hemos visto interés e incremento en la adopción, que sin embargo ha sido más lenta de lo que algunas personas pensamos. Una de las razones podría tener que ver con las herramientas: Unity y Unreal son dos motores muy maduros y capaces para desarrollar aplicaciones de realidad virtual; también hemos hablado de Godot. Sin embargo, estos motores son bastante diferentes de lo que la mayoría de los equipos de desarrollo web y empresarial conocen. Tras mucho indagar, nos hemos dado cuenta de que las soluciones de realidad virtual basadas en la web han hecho grandes avances y nuestra experiencia con Babylon.js ha sido positiva. Babylon.js está escrito en TypeScript y renderiza sus aplicaciones en el navegador, lo que permite ofrecer una experiencia familiar y conocida para muchos equipos de desarrollo. Además, Babylon.js es un software de código abierto, estable y es un proyecto bien financiado, lo que le da estabilidad en el largo plazo y lo convierte en una opción aún más interesante.

    Historia
  • Si bien JavaScript y su ecosistema dominan el espacio del desarrollo de interfaces de usuario web, están surgiendo nuevas oportunidades con la llegada de WebAssembly. Blazor nos parece una opción interesante para construir interfaces de usuario web interactivas con C#. Nos gusta especialmente este marco de trabajo de código abierto porque permite ejecutar código C# en el navegador mediante WebAssembly, aprovechando el motor en tiempo de ejecución .NET Standard y su ecosistema, además de librerías personalizadas desarrolladas en ese lenguaje de programación. Además, Blazor permite la interacción bidireccional con código en JavaScript en el navegador si se requiere.

    Historia
  • Flutter Driver es una biblioteca para pruebas de integración para aplicaciones hechas con Flutter. Con Flutter Driver puedes configurar y manejar las pruebas en dispositivos reales o en emuladores. Nuestros equipos continúan escribiendo pruebas unitarias y pruebas de dispositivos para asegurar que se implementan la mayoría de las funcionalidades de negocio en las aplicaciones de Flutter. Sin embargo, para probar las interacciones reales, como lo harían las usuarias, estamos evaluando Flutter Driver y creemos que también deberías hacerlo.

    Historia
  • Si bien somos grandes promotores en lo que respecta a definir políticas de seguridad como código, las herramientas disponibles en este ámbito han sido bastante limitadas. Si estás utilizando productos de HashiCorp (como Terraform o Vault) y no te importa pagar por las versiones empresariales, tienes la opción de usar HashiCorp Sentinel. Sentinel es, de hecho, un lenguaje de programación completo para definir e implementar decisiones sobre políticas basadas en contexto. Por ejemplo, en Terraform puede utilizarse para comprobar violaciones de políticas de seguridad antes de aplicar los cambios de infraestructura. En Vault, Sentinel puede usarse para definir un control de acceso más granular a las APIs. Este enfoque tiene todos los beneficios de encapsulamiento, mantenibilidad, legibilidad y extensibilidad que ofrecen los lenguajes de programación de alto nivel, creando una alternativa atractiva a las políticas de seguridad declarativas tradicionales. Sentinel pertenece a la misma clase de herramientas que Open Policy Agent pero es propietaria, de código cerrado y solo funciona con los productos de HashiCorp.

    Historia
  • Hermes es un motor de JavaScript optimizado para la inicialización rápida de aplicaciones React Native en Android. Los motores de JavaScript, como V8, tienen compiladores (just in time, JIT) que perfilan el código en tiempo de ejecución para producir instrucciones optimizadas. Hermes, sin embargo, utiliza un enfoque distinto compilando el código JavaScript en bytecode optimizado de manera anticipada (ahead of time, AOT). Como resultado se obtiene un tamaño de imagen APK más pequeño, menos consumo de memoria y tiempos de arranque reducidos. Estamos evaluando a Hermes cuidadosamente en algunas apps de React Native y recomendamos realizar lo mismo para sus desarrollos.

    Historia
  • Hemos disfrutado mucho usando TypeScript desde hace ya algún tiempo y nos encanta la seguridad que ofrece el tipado fuerte. Sin embargo, introducir datos dentro de los límites impuestos por el sistema de tipos, por ejemplo desde una llamada a un servicio de back-end, puede llevar a obtener errores en tiempo de ejecución. Una biblioteca que ayuda a resolver este problema es io-ts. Cubre el vacío existente entre la comprobación de tipos en tiempo de compilación y el consumo de datos externos en tiempo de ejecución, ofreciendo funciones para codificar y decodificar datos. También puede usarse como una protección personalizada de tipos. Según nuestros equipos, es una solución elegante a un problema bastante escurridizo.

    Historia
  • En el pasado hemos hablado sobre el perfeccionamiento de las herramientas que permiten aplicar buenas prácticas de ingeniería en proyectos de ciencia de datos. Kedro es otra buena adición a este espacio. Es un framework de desarrollo para flujos de trabajo en proyectos de ciencia de datos que trae un enfoque estandarizado para la construcción de pipelines de datos y para aprendizaje automático listos para producción. Nos gusta su enfoque en las prácticas de ingeniería de software y en el buen diseño, con énfasis en el desarrollo dirigido por pruebas (TDD), modularidad, versionamiento y prácticas de buena higiene como lo es el mantener las credenciales fuera de la base de código.

    Historia
  • Se ha hecho un progreso constante desde la primera vez que escribimos sobre Componentes Web en el 2014. LitElement, que forma parte del Polymer Project, es una biblioteca simple que se puede usar para crear componentes web ligeros. En realidad, es solo una clase base que elimina la necesidad de escribir gran parte del código repetitivo más común, lo que simplifica el desarrollo de componentes web. Hemos tenido éxito relativamente rápido al usarlo en proyectos y estamos emocionados de ver madurar la tecnología.

    Historia
  • Las aplicaciones web, especialmente las que son creadas para uso interno en las empresas, suelen ser construidas en dos partes. La primera, que se ejecuta en el navegador, corresponde a la interfaz de usuario y a alguna lógica de negocio. La segunda, que corre en el servidor, corresponde al resto de la lógica de negocio, la autenticación y persistencia de datos. Normalmente, ambas partes se comunican utilizando JSON sobre HTTP. Los endpoints no deberían confundirse por una API real ya que son apenas un detalle de implementación de una aplicación que está dividida en dos ambientes. Al mismo tiempo, ofrecen un punto de unión a través del cual se puede probar cada parte de manera individual. Cuando se prueba el código JavaScript, el servidor puede ser simulado a nivel de red mediante herramientas como Mountebank. Un método alternativo es interceptar las peticiones en el navegador. Nos gusta lo que propone Mock Service Worker porque con los service workers se provee una abstracción que es familiar para las personas desarrolladoras. Este enfoque permite una configuración más simple y mayor rapidez en la ejecución de las pruebas. Sin embargo, como estas pruebas no validan el funcionamiento de la capa de red, sugerimos implementar algunas pruebas de punta a punta (end-to-end) como parte de una pirámide de pruebas saludable.

    Historia
  • Cada vez más equipos que utilizan React están reevaluando sus opciones para el manejo del estado, algo que también mencionamos en nuestra reevaluación de Redux. Facebook (creadora de React) ha publicado recientemente Recoil, un nuevo framework para el manejo del estado que surgió de una aplicación interna que tenía que tratar con grandes cantidades de datos. A pesar que actualmente no tenemos mucha experiencia práctica con Recoil, vemos su potencial y promesa. Su API es sencilla y fácil de aprender y se siente como React idiomático. A diferencia de otros enfoques, Recoil proporciona una forma eficiente y flexible de tener un estado compartido dentro de una aplicación: soporta estados creados dinámicamente mediante consultas y datos derivados así como la observación del estado en toda la aplicación sin afectar la separación del código.

    Historia
  • Los modelos modernos de ML son muy complejos y requieren de gran cantidad de conjuntos de datos para entrenamiento etiquetados para que puedan aprender de ellos. Snorkel comenzó en el laboratorio de IA de Stanford con la consideración de que etiquetar datos manualmente es muy costoso y, muchas veces, no es factible. Snorkel nos permite etiquetar datos de entrenamiento de forma programada a través de la creación de funciones de etiquetado. Snorkel utiliza técnicas de aprendizaje supervisadas para evaluar la precisión y correlación entre estas funciones de etiquetado y luego las vuelve a examinar y combina sus etiquetas de salida, produciendo como resultado etiquetas de entrenamiento de alta calidad. Desde entonces, los creadores de Snorkel han creado una plataforma comercial llamada Snorkel Flow. Si bien Snorkel ya no se desarrolla activamente, sigue siendo importante por sus ideas sobre el uso de métodos poco supervisados para el etiquetado de datos.

    Historia
  • Streamlit es un framework de código abierto para Python utilizado por especialistas en ciencia de datos para construir aplicaciones de visualización de datos que tengan un excelente aspecto. Streamlit destaca sobre 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 por ejemplo Plotly y Bokeh. Esta herramienta es una excelente alternativa si se necesita realizar presentaciones rápidas durante el ciclo de experimentación. En ThoughtWorks la estamos utilizando en algunos proyectos y nos encanta la manera en que podemos construir visualizaciones interactivas con muy poco esfuerzo.

    Historia
  • Siguen apareciendo nuevos frameworks para el desarrollo de interfaz de usuario y Svelte se perfila como un prometedor nuevo framework basado en componentes. A diferencia de otros frameworks que aprovechan el DOM virtual, Svelte compila el código a JavaScript estándar que actualiza quirúrgicamente el DOM directamente. No obstante, Svelte es simplemente un framework basado en componentes; si el plan es construir una aplicación con muchas funcionalidades, considera utilizarlo en conjunto con Sapper.

    Historia
  • SWR es una biblioteca de React Hooks para obtener datos remotos. Implementa la estrategia para el almacenamiento de datos en caché de HTTP denominada stale-while-revalidate. SWR primero devuelve los datos desde la caché (obsoletos), luego envía la petición para obtener información (revalidar) y finalmente actualiza los valores a partir de la respuesta actualizada. Los componentes reciben un flujo de datos, primero obsoletos, luego actualizados, de forma constante y automática. Nuestros equipos de desarrollo han tenido buenas experiencias utilizando SWR, mejorando de forma dramática la experiencia de uso al tener siempre datos en la pantalla. Sin embargo, advertimos a los equipos para que sólo utilicen la estrategia de almacenamiento en caché de SWR cuando sea aceptable que la aplicación devuelva datos obsoletos. Ten en cuenta que el protocolo HTTP exige que los cachés respondan a una petición con la respuesta más actualizada que sea apropiada para la petición, y sólo en circunstancias cuidadosamente estudiadas se permite la devolución de una respuesta obsoleta.

    Historia
  • Testing Library es una familia de paquetes para probar aplicaciones en numerosos frameworks como React, Vue, React Native y Angular, entre otros. Estas bibliotecas ayudan a probar los componentes de interfaz de usuario desde la perspectiva del usuario, animando a probar su comportamiento en lugar de los detalles de implementación, como la presencia de elementos en la interfaz de usuario en un momento determinado. Uno de los beneficios de este enfoque es que las pruebas son más confiables, y estamos seguros que esto es su principal diferenciador. Recomendamos evaluar esta familia de bibliotecas para probar las aplicaciones web con cualquier framework. Aunque nuestra experiencia directa se limita a React Testing Library y a Angular Testing Library, en general, nos ha impresionado lo que hemos visto.

    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