Lenguajes & Frameworks
Adoptar
-
Con Playwright puedes escribir pruebas de inicio a fin que se ejecutan en Chrome, Firefox y WebKit. Utilizando el protocolo de herramientas de desarrollo de Chrome (CDP por sus siglas en inglés) Playwright ofrece nuevas funcionalidades y elimina muchos de los problemas vistos con WebDriver. Los navegadores basados en Chromium implementan CDP directamente. Sin embargo, para ser compatible con Firefox y Webkit, el equipo de Playwright tiene que enviar parches a estos navegadores, lo que a veces puede limitar el marco de trabajo.
Entre las muchas funcionalidades de Playwright se incluyen: Esperas automáticas integradas, que resultan en pruebas más confiables y fáciles de entender; contexto del navegador, que te permite probar que la persistencia de la sesión a través de las pestañas funciona correctamente; y la capacidad de simular notificaciones, geolocalización y configuraciones de modo oscuro. Nuestros equipos están impresionados con la estabilidad que proporciona a los paquetes de prueba y les gusta recibir feedback más rápidamente ejecutando las pruebas en paralelo. Otras características que distinguen a Playwright son una mejor compatibilidad con la carga diferida y el rastreo. Aunque Playwright tiene algunas limitaciones — por ejemplo, actualmente la compatibilidad con componentes es experimental — nuestros equipos lo consideran el marco de referencia de pruebas y, en algunos casos, están migrando de Cypress y Puppeteer.
Probar
-
ASP.NET core MVC ha demostrado ser un enfoque potente y flexible para construir aplicaciones web que alojan APIs. Sin embargo, su flexibilidad conlleva un cierto nivel de complejidad, que incluye boilerplate y convenciones que no siempre son evidentes. El enrutamiento proporcionado por ASP.NET permite alojar múltiples servicios en una única aplicación, pero en el mundo actual de funciones serverless y microservicios que pueden ser desplegados de manera independiente, esta flexibilidad podría ser excesiva. .NET Minimal APIs ofrece un enfoque sencillo al implementar una aplicación web con una single-API en el ecosistema .NET. El framework Minimal API puede implementar un endpoint API con solo unas pocas líneas de código. Minimal API se une a la nueva generación de frameworks de API — incluyendo Micronaut, Quarkus and Helidon — que están optimizados para despliegues ligeros y tiempos de inicio rápidos. Nos interesa la combinación de Minimal APIs y .NET 7 Native AOT para implementar microservicios simples y livianos en funciones serverless.
-
Ajv es una popular biblioteca de JavaScript utilizada para validar un objeto de datos usando una estructura definida con un esquema JSON. Ajv es rápida y flexible para validar tipos de datos complejos. Soporta una amplia gama de funciones de esquema, incluyendo palabras clave y formatos personalizados. Es utilizada por muchas aplicaciones y bibliotecas JavaScript de software abierto. Nuestros equipos han usado Ajv para implementar pruebas de contrato guiadas por el consumidor en flujos de CI y, junto con otras herramientas para generar datos simulados con el esquema JSON, es muy potente. En el mundo TypeScript, Zod es una alternativa popular que tiene una API declarativa para definir el esquema y validar los datos.
-
Armeria es un framework de código abierto para crear microservicios. Nuestros equipos lo han utilizado para crear APIs asincrónas y nos gusta bastante el enfoque para abordar aspectos transversales, como el rastreo distribuído o los rompedores de circuito, a través de service decorators. El framework incluye la reutilización de puertos para el tráfico gRPC y REST, entre otras opciones ingeniosas de diseño. Con Armeria, podemos agregar nuevas características en gRPC de manera incremental sobre una base de código existente en REST o viceversa. En general, consideramos que Armeria es un framework flexible para microservicios con varias integraciones fuera de la caja.
-
AWS SAM Serverless Application Model (SAM) es una herramienta de código abierto para crear aplicaciones serverless usando servicios de AWS. Ya en ediciones previas, resaltamos Serverless Framework como una herramienta popular para desplegar servicios serverless en distintos proveedores en la nube, principalmente servicios basados en AWS Lambda. Recientemente, AWS SAM ha ganado popularidad ya que la herramienta ha evolucionado mucho desde sus primeras versiones. Los equipos en Thoughtworks lo encuentran fácil de configurar y también lo usan para escribir tests y depurar servicios basados en el servicio AWS Lambda, ya que permite ejecuciones locales de Lambdas para desarrollo.
-
Dart es un lenguaje de programación desarrollado por Google que soporta la creación de aplicaciones multiplataforma, incluyendo navegadores web, WebAssembly, aplicaciones de escritorio y móvil. Su adopción ha sido impulsada por el predominio de Flutter — un popular conjunto de herramientas de Interfaz de Usuario (UI) multi-plataforma impulsado por Dart — en el espacio de frameworks de aplicaciones móviles nativas multiplataforma. En respuesta al feedback de la comunidad, Dart ha evolucionado desde sus versiones iniciales y ha añadido la integración sólida denull safety en la versión tres, además de un sistema robusto de tipado. Por último, el ecosistema de Dart está creciendo rápidamente, con una comunidad vibrante y un amplio rango de librerías y herramientas disponibles, haciéndolo atractivo para desarrolladores.
-
fast-check es una herramienta de pruebas basada en propiedades para JavaScript y TypeScript, capaz de generar automáticamente datos de prueba de forma que se pueda explorar una amplia gama de datos de entrada sin tener que crear pruebas separadas. Esto facilita el descubrimiento de escenarios extremos. Nuestros equipos están obteniendo buenos resultados con el uso de fast-check en las pruebas de back-end gracias a su buena documentación, facilidad de uso y perfecta integración con los frameworks de pruebas existentes, lo que mejora la eficiencia de las pruebas unitarias.
-
Hace cinco años movimos Kotlin al anillo de adopción y hoy muchos de nuestros equipos confirman que Kotlin no sólo es su opción por defecto en la JVM, sino que ha desplazado a Java casi por completo en el software que escriben. Al mismo tiempo, la sed por microservicios parece estar desapareciendo: hemos observado que la gente empieza a explorar arquitecturas con unidades desplegables más grandes, utilizando frameworks como Spring Modulith entre otros. Conocemos buenos frameworks nativos en Kotlin y hemos mencionado algunos de ellos anteriormente; sin embargo, en algunos casos, la madurez y la riqueza de características del framework Spring es una gran ventaja, y hemos estado utilizando Kotlin con Spring con éxito, normalmente sin problemas o con problemas menores.
-
Mockery es una librería madura de Golang que ayuda a generar implementaciones mock de interfaces simulando comportamientos de dependencias externas. Con métodos de tipado seguro para generar las expectativas de llamadas y flexibilidad para mockear valores de retorno, permite que los tests se centren en la lógica de negocio en lugar de preocuparse por la corrección de dependencias externas. Mockery usa generadores Go y simplifica la gestión de mocks en la suite de pruebas.
-
Hemos usado mayormente GraphQL para agregacion de recursos de lado del servidor y hemos implementado el lado del servidor usando una variedad de tecnologías. Para servicios escritos con Spring Boot nuestros equipos han tenido buenas experiencias con Netflix DGS. Está construido encima de graphql-java y provee funcionalidades y abstracciones en el modelo de programación Spring Boot que facilita el implementar endpoints en GraphQL e integrarlos con características de Spring como Spring Security. A pesar de estar escrito en Kotlin, DGS funciona igualmente bien con Java.
-
Hemos estado utilizando OpenTelemetry como solución durante un tiempo y la hemos recomendado en ediciones anteriores. Su capacidad para capturar, instrumentar y gestionar de manera fluida datos de telemetría entre distintos servicios y aplicaciones ha mejorado nuestra tecnología de observabilidad. La flexibilidad y compatibilidad de OpenTelemetry en distintos entornos la ha convertido en un instrumento muy valioso de nuestra caja de herramientas. Ahora sentimos especial curiosidad por el reciente lanzamiento de la especificación del OpenTelemetry Protocol OTLP, que incluye gRCP y HTTP. Este protocolo estandariza el formato de transmisión de datos de telemetría, que promueve la interoperabilidad y simplifica la integración con otras herramientas de monitorización y análisis. A medida que seguimos explorando el potencial de integración del protocolo, estamos evaluando su impacto a largo plazo en nuestras estrategias de monitoreo y observabilidad y en el panorama general de monitorización.
-
Polars es una librería de DataFrame en memoria, implementada en Rust. A diferencia de otras DataFrames (como pandas), Polars es multiproceso, permite la ejecución perezosa y es segura para operaciones paralelas. Los datos en memoria se organizan en formato Apache Arrow para conseguir operaciones analíticas eficientes y para permitir la interoperabilidad con otras herramientas. Si estás familiarizado con pandas, puedes rápidamente empezar con los bindings Python de Polars. Creemos que Polars, con las implementaciones de Rust y los bindings de Python, es una estructura de datos en memoria de alto rendimiento que te ayudará para tus necesidades analíticas. Nuestros equipos siguen teniendo una buena experiencia con Polars, razón por lo cual lo estamos moviendo a Probar.
-
Pushpin es un proxy inverso que actúa como intermediario entre los clientes y los servidores backend, administrando las conexiones de larga duración como WebSockets y Server-Sent Events. Proporciona una manera de terminar las conexiones de larga duración de los clientes, permitiendo que otros sistemas se abstraigan de esa complejidad. Gestiona eficazmente un gran número de conexiones persistentes y las distribuye automáticamente entre múltiples servidores backend, optimizando el rendimiento y la fiabilidad. Nuestra experiencia usándolo para comunicaciones en tiempo real con dispositivos móviles mediante WebSockets ha sido positiva, y hemos sido capaces de escalarlo horizontalmente para millones de dispositivos.
-
Snowpark es una librería para consultar y procesar datos a gran escala en Snowflake. Nuestros equipos lo usan para escribir código manejable para interactuar con datos que residen en Snowflake — semejante a escribir código Spark pero para Snowflake. En última instancia, es un motor que traduce código a SQL que Snowflake comprende. Se pueden construir aplicaciones que procesan datos en Snowflake sin mover datos hacia el sistema donde se ejecuta el código de la aplicación. Una desventaja: el soporte de test unitarios no es óptimo; nuestros equipos lo compensan escribiendo otro tipo de tests.
Evaluar
-
Perfiles de Referencia — no confundir con perfiles de referencia de Android — son perfiles de Android Runtime que guían la compilación previa. Se crean una vez por versión en una máquina de desarrollo y se envían con la aplicación, lo que los hace disponibles más rápidamente que depender de Perfiles en la Nube, una tecnología más antigua. El runtime utiliza el Perfil de Referencia en una aplicación o biblioteca para optimizar rutas de código importantes, lo que mejora la experiencia para usuarios nuevos y existentes cuando descargan o actualizan la aplicación. Crear Perfiles de Referencia es relativamente sencillo y, según su documentación, puede llevar a mejoras significativas (de hasta un 30%) en el rendimiento.
-
GGML es una librería de aprendizaje automático en C que permite la inferencia de CPU. Esta librería define un formato binario para distribuir modelos grandes de lenguaje (LLMs, por sus siglas en inglés). Para hacerlo, usa cuantificación digital, una técnica que permite que los LLMs ejecuten inferencia de CPU efectiva en hardware de consumo. GGML soporta varias estrategias de cuantificación digital (e.g., cuantificación de 4 bits, 5 bits, y 8 bits), cada una de las cuales ofrece diferentes relaciones coste-beneficio entre eficiencia y rendimiento. Una manera rápida de probar, ejecutar y construir aplicaciones con estos modelos de cuantificación, es un binding de Python llamado C Transformers. Se trata de un wrapper de Python sobre GGML que nos abstrae del repetitivo código necesario para ejecutar inferencia al proveer una API de alto nivel. Hemos usado estas librerías para construir pruebas de concepto y experimentos. Si estás valorando usar LLMs auto alojados, evalúe cuidadosamente estas librerías para su organización.
-
GPTCache es una librería de caché semántica para modelos de lenguajes grandes(LLMs). Vemos la necesidad de una capa de caché delante de los LLM por dos razones principales: mejorar el rendimiento general reduciendo llamadas a API externas y reducir el costo de operación almacenando en caché respuestas similares. A diferencia de los enfoques tradicionales cacheo que buscan coincidencias exactas, lo que las soluciones de cacheo basadas en LLM requieren son coincidencias similares o relacionadas para las consultas de entrada. GPTCache aborda esto con la ayuda de algoritmos de embedding para convertir los inputs en embeddings y luego usar un almacén de datos vectorial para la búsqueda de similitudes en dichos embeddings. Un inconveniente de este diseño es que podrías encontrar falsos positivos durante los aciertos de caché o falsos negativos durante los fallos de caché, por lo que te recomendamos que evalúes cuidadosamente GPTCache para tus aplicaciones basadas en LLM.
-
En muchos idiomas, el género es más visible que en inglés y las palabras cambian según el género. Por ejemplo, al dirigirse a las personas usuarias a menudo es necesario cambiar la forma gramatical por género (inflexionar las palabras) y suele ser común utilizar el género masculino de forma predeterminada. Existe evidencia que esta práctica tiene un impacto negativo en el desempeño y actitud de las personas — y por supuesto, es inapropiado. Utilizar alternativas con género neutro a menudo pueden parecer incómodas. Dirigirse al usuario de manera correcta, es entonces la opción preferida, y con la introducción en Android 14 de Grammatical Inflection API, las personas desarrolladoras de Android, tienen una forma más fácil de hacerlo.
-
htmx es una biblioteca de interfaz de usuario HTML pequeña y ordenada que recientemente se hizo popular aparentemente de la nada. Durante la discusión del Radar, descubrimos que su predecesor intercooler.js existió hace ya diez años. A diferencia de otros marcos de trabajo precompilados y complejos de JavaScript/TypeScript, htmx fomenta el uso directo de atributos HTML para acceder a operaciones como AJAX, transiciones CSS, WebSockets y eventos enviados por el servidor. No hay nada técnicamente sofisticado en htmx, pero su popularidad recuerda la simplicidad del hipertexto en los primeros días de la web. El sitio web del proyecto también incluye algunos ensayos reveladores (y divertidos) sobre hipermedia y desarrollo web, lo que sugiere que el equipo detrás de htmx ha pensado cuidadosamente sobre su propósito y filosofía.
-
Kotlin Kover es un conjunto de herramientas de cobertura de código diseñado específicamente para Kotlin que soporta Kotlin JVM, Multiplatform y proyectos Android. La cobertura de código es importante porque identifica fragmentos no testeados de código, lo que refuerza la fiabilidad del software. A medida que Kover va evolucionando, se destaca su capacidad para generar informes completos en HTML y XML, junto con una precisión inigualable diseñada para Kotlin. Para equipos que trabajan únicamente con Kotlin, les recomendamos que evalúen Kover para aprovechar su potencial para mejorar la calidad del código.
-
LangChain es un framework para construir aplicaciones con modelos de lenguaje de gran tamaño (LLMs). Para construir este tipo de productos en forma práctica, se deben combinar con datos específicos de usuario o dominio que no han formado parte de un entrenamiento anterior. LangChain llena este vacío con características como gestión de prompts, encadenamiento, agentes y cargadores de documentos. El beneficio de contar con plantillas prompt y cargadores de documentos es que pueden acelerar el tiempo de puesta en marcha. Aunque es una opción popular implementar aplicaciones Retrieval-Augmented Generation y el patrón ReAct prompting, LangChain ha sido criticado por ser difícil de usar y demasiado complicado. Al elegir un stack tecnológico para tu aplicación LLM, podrias buscar alternativas similares como Semantic Kernel en este espacio de desarrollo rápido.
-
LlamaIndex es un framework de datos diseñado para facilitar la integración de datos privados o de específicos de dominio con modelos grandes de lenguaje (LLMs). Ofrece herramientas para consumir datos de diversas fuentes — incluyendo APIs, bases de datos y PDFs — y estructura estos datos en un formato que los LLMs pueden consumir fácilmente. Al usar varios tipos demotores, LlamaIndex habilita interacciones en lenguaje natural con estos datos estructurados, haciéndolo accesible para aplicaciones que van desde la búsqueda basada en consultas hasta interfaces conversacionales. De manera similar a LangChain, el objetivo de LlamaIndex es acelerar el desarrollo con LLMs, pero toma un enfoque más parecido a un framework de datos.
-
promptfoo permite la ingeniería de instrucciones basada en pruebas. Cuando integramos Modelos de Lenguaje de Aprendizaje Profundo (LLMs, por sus siglas en inglés) en aplicaciones, ajustar las instrucciones para producir resultados óptimos y consistentes pueden llevar mucho tiempo. Puedes utilizar promptfoo tanto como una interfaz de línea de comandos (CLI) como una biblioteca para probar sistemáticamente instrucciones mediante casos de prueba predefinidos. El caso de prueba, junto con las afirmaciones, se pueden configurar en un archivo de configuración YAML sencillo. Esta configuración incluye las instrucciones que se están probando, el proveedor del modelo, las afirmaciones y los valores de variables que se sustituirán en las instrucciones. promptfoo admite muchas afirmaciones, como verificar la igualdad, la estructura JSON, la similitud, funciones personalizadas e incluso usar un LLM para evaluar las salidas del modelo. Si estás buscando automatizar la retroalimentación sobre la calidad de las instrucciones y el modelo, definitivamente deberías considerar promptfoo.
-
Semantic Kernel Es la versión de código abierto de uno de los componentes principales en la suite de productos Copilot de Microsoft. Es una biblioteca Python que ayuda a construir aplicaciones sobre un LLM, similar a LangChain. El concepto principal de Semantic Kernel es su planificador, que nos permite construir agentes autónomos basados en LLMs los cuales crean un plan para un usuario, y luego lo ejecutan paso a paso con ayuda de plugins.
-
Aunque fuimos promotores iniciales de los microservicios y hemos visto el patrón utilizado con éxito en una gran variedad de sistemas, también hemos observado la aplicación incorrecta y el abuso de los microservicios, a menudo como resultado de la Envidia de microservicios. En lugar de comenzar un nuevo sistema con una colección de procesos desplegados por separado, a menudo es aconsejable empezar con un monolito bien estructurado y descomponerlo en unidades desplegables de manera independiente cuando la aplicación llega al nivel en que los beneficios de los microservicios superen la complejidad adicional inherente en los sistemas distribuidos. Recientemente hemos visto un resurgir del interés en esta aproximación y una definición más detallada de qué, exactamente, constituye un monolito bien estructurado. Spring Modulith es un framework que te ayuda a estructurar tu código de forma que sea más fácil descomponerlo en microservicios cuando llegue el momento adecuado. Proporciona una manera de modularizar tu código de modo que los conceptos lógicos de dominios y contextos acotados (bounded context) se alineen con los conceptos físicos de archivos y estructura de paquetes. Esta alineación facilita la refactorización del monolito cuando sea necesario, así como testear los dominios de manera aislada. Spring Modulith proporciona un mecanismo de eventos dentro del proceso que ayuda a desacoplar aún más los módulos dentro de una única aplicación. Lo mejor de todo es que se integra con ArchUnit y jmolecules para automatizar la verificación de sus reglas de diseño orientadas a dominio.
Resistir
- Nuevo
- Modificado
- Ningún cambio
¿No encontraste algo que esperabas ver?
Cada edición del Radar presenta noticias que reflejan lo que hemos encontrado durante los seis meses anteriores. Es posible que ya hayamos cubierto lo que busca en un Radar anterior. A veces seleccionamos cosas simplemente porque hay demasiadas de las que hablar. También es posible que falte algún dato porque el Radar refleja nuestra experiencia, no se basa en un análisis exhaustivo del mercado.
¿No encontraste algo que esperabas ver?
Cada edición del Radar presenta noticias que reflejan lo que hemos encontrado durante los seis meses anteriores. Es posible que ya hayamos cubierto lo que busca en un Radar anterior. A veces seleccionamos cosas simplemente porque hay demasiadas de las que hablar. También es posible que falte algún dato porque el Radar refleja nuestra experiencia, no se basa en un análisis exhaustivo del mercado.
