Lenguajes & Frameworks
Adoptar
-
Nuestro equipo ve ahora a Gradle Kotlin DSL como tecnología por defecto para iniciar nuevos proyectos usando Gradle, preferentemente sobre Groovy. Equipos que ya estén utilizando Groovy deberían considerar migrar. Kotlin provee mejor soporte para refactorización y edición más simple en IDEs, y nuestros equipos reportan que produce código que es más fácil de leer y mantener. Dado que algunos IDEs ahora soportan la migración, debería ser relativamente rápido experimentar con la sustitución del Groovy existente. En algunas situaciones Kotlin puede ser más lento que Groovy; sin embargo, para muchos proyectos, es poco probable que impacte al equipo.
-
PyTorch sigue siendo nuestra elección de framework para machine learning (ML). La mayoría de nuestros equipos prefieren PyTorch a TensorFlow. PyTorch expone el funcionamiento interno de ML que TensorFlow oculta, haciéndolo más sencillo de depurar. Con gráficos computacionales dinámicos, la optimización de modelos es mucho más fácil en comparación con cualquier otro framework de ML. La amplia disponibilidad de modelos de última generación (State-of-the-Art, SOTA, por sus siglas en inglés) y la facilidad para implementar documentos de investigación hacen que PyTorch destaque. Cuando se trata de ML gráfico, PyTorch Geometric es un ecosistema más maduro y nuestros equipos han tenido excelentes experiencias con él. PyTorch también ha ido cerrando las brechas en lo que respecta a la implementación y escalado de modelos; nuestros equipos han usado con éxito, por ejemplo, TorchServe para desplegar en producción modelos previamente entrenados. Dado que muchos equipos utilizan PyTorch de forma predeterminada para sus necesidades de deep-learning de extremo a extremo, con gusto recomendamos adoptar PyTorch.
Probar
-
dbt-unit-testing es un paquete dbt que permite escribir pruebas unitarias para un modelo y su lógica creando mocks de sus dependencias. Esto aporta rigurosidad a la ingeniería para obtener un feedback rápido durante el desarrollo al ecosistema de datos. Nuestros equipos usan este paquete con Snowflake para practicar el desarrollo guiado por pruebas (TDD), aunque solo fue factible para transformaciones simples. La biblioteca ciertamente tiene algunas dificultades en cuanto a la depuración de pruebas fallidas, pero la capacidad de escribir pruebas unitarias a transformadores a medida que desarrollamos el modelo proporcionó una limpia experiencia de desarrollo.
-
Cuando se añaden capacidades de uso de cámara a las aplicaciones Android, el equipo desarrollador debe estar atento a problemas. La recientemente estrenada API de Jetpack CameraViewfinder mejora significativamente la experiencia de desarrollo en este aspecto. Internamente éste utiliza un TextureView (vista de textura) o un SurfaceView (vista de superficie) para mostrar la imagen que entrega la cámara y aplicar transformaciones que muestran el visor de la cámara, arregla aspecto de ratio, escala y rotación de ser necesario. También se proveen fondos optimizados para aparatos que se doblan. Pese a que no es una característica mayor, lo destacamos para asegurarnos de que los equipos estén al tanto de su existencia.
-
Jetpack DataStore Es una nueva solución de almacenamiento de datos para almacenar datos de forma asíncrona, consistente y transaccional. Tiene dos implementaciones: Preferences DataStore para pares clave-valor sin tipado y Proto DataStore para tipos de datos complejos usando Protobufs. Por defecto se utiliza con Kotlin coroutines y Flow pero hay disponible soporte adicional para RXJava 2 y 3. La documentación recomienda que consideres migrar a DataStore si actualmente estás usando SharedPreferences, y estamos de acuerdo con esa recomendación.
-
Mikro ORM es un framework de mapeo objeto-relacional (ORM) que tiene un interesante enfoque centrado en TypeScript. Al utilizar TypeScript en todo el stack, genera una experiencia de desarrollo consistente desde el navegador hasta el backend, lo que facilita a los desarrolladores escribir y mantener el código. En particular, el rendimiento de Mikro ORM es excelente, lo que permite una ejecución rápida de consultas y minimiza la latencia. Si bien Mikro ORM ofrece características atractivas, es esencial tener en cuenta las limitaciones generales asociadas con los mapeadores relacionales de objetos. Los frameworks ORM son a menudo complejos y ofrecen solo una abstracción propensa a filtraciones sobre un almacén de datos relacionales, por lo que usar uno siempre es un balance de compromisos.
-
Mucha gente habla más de un idioma y usa idiomas distintos en diferentes contextos. Los dispositivos y plataformas que pueden ejecutar aplicaciones piden habitualmente a los usuarios seleccionar un idioma para el sistema y luego hacen que las aplicaciones usen ese idioma. En teléfonos móviles, particularmente, las personas usuarias pueden preferir que algunas aplicaciones usen otro idioma distinto al especificado por el sistema; Apple introdujo una opción de idioma por aplicación en iOS hace algún tiempo. Los equipos de desarrollo de aplicaciones Android, sin embargo, han tenido que implementar soluciones propias dentro de sus aplicaciones si querían proporcionar esta opción - hasta ahora. Android 13 introduce una nueva opción del sistema, preferencia de idioma por aplicación, y una API pública, haciendo fácil para las personas desarrolladoras ofrecer esta funcionalidad. Para mantener la retrocompatibilidad, APIs equivalentes están disponibles en AndroidX mediante AppCompatDelegate. Animamos a los equipos de desarrollo a reemplazar sus soluciones propias y usar esta nueva funcionalidad en sus aplicaciones.
-
Quarto es un sistema de publicación científica y técnica de código abierto. Con él, podemos crear notebooks computacionales que permiten escribir documentos en markdown, incrustar código y emitir el resultado de ese código en el documento final. Se puede usar para crear informes de análisis de datos reproducibles y personalizables, los cuales se pueden compartir fácilmente en una variedad de formatos. Nuestros equipos de ciencia de datos utilizaron Quarto para compartir informes de análisis de datos que contienen visualizaciones (plots) y tablas. Les gustó poder usar R y Python para generar estos informes dinámicos y luego exportarlos como HTML para compartirlos con las partes interesadas. Si estás buscando compartir tu investigación y análisis dentro o fuera de tu organización, te recomendamos que evalúes Quarto.
-
En el corazón de muchos enfoques de machine learning se encuentra la creación de modelos partiendo de un conjunto de datos de entrenamiento. Una vez creado el modelo, puede ser usado una y otra vez. A pesar de ello, el mundo continúa girando y a menudo el modelo necesita cambiar a medida que se dispone de nuevos datos. Volver a ejecutar el paso de creación del modelo simplemente puede ser lento y costoso. El aprendizaje incremental aborda este problema, haciendo posible aprender incrementalmente de streams de datos para reaccionar rápido a los cambios. Como beneficio adicional, los requisitos de cómputo y memoria son menores y más predecibles. Nuestra experiencia práctica con River continúa siendo positiva. Vowpal Wabbit, que puede ser una alternativa, tiene una curva de aprendizaje mucho más pronunciada, y el API tipo Scikit ofrecida por River hace que River sea más accesible a los equipos de ciencia de datos.
-
Stencil.js es una librería que permite a los desarrolladores crear componentes web reutilizables utilizando herramientas bien establecidas como TypeScript, JSX y JSDoc. Según las experiencias de nuestros equipos, Stencil.js es una muy buena opción para crear sistemas de diseño independientes de la plataforma. Para los pocos navegadores que no son compatibles con las funciones de los navegadores modernos, Stencil.js garantiza la compatibilidad mediante el reemplazo de funciones y APIs no compatibles a demanda.
-
Synthetic Data Vault (SDV) es un ecosistema de bibliotecas para generación de datos sintéticos que pueden aprender la distribución de un conjunto de datos para generar datos sintéticos con el mismo formato y las mismas propiedades estadísticas que la fuente. En el pasado, hablamos sobre las desventajas de usar datos reales en ambientes de pruebas. Sin embargo, los matices en la distribución de datos en producción difícilmente pueden ser replicadas manualmente, trayendo como resultado sorpresas y defectos. Hemos tenido buenas experiencias utilizando SDV para generar grandes volúmenes de datos para pruebas de rendimiento. SDV se comporta bien con el modelado de una sola tabla. Sin embargo, los tiempos de generación de datos crecen considerablemente en la medida que el número de tablas con restricciones de claves foráneas aumentan. Aún así, SDV ofrece una gran ventaja para pruebas de rendimiento local. Es una buena herramienta para la generación de datos sintéticos y vale la pena su consideración para distintas necesidades de pruebas.
-
Vitest es un framework de pruebas unitarias para Javascript. Hasta ahora, muchos equipos confiaban en Jest pero Jest no se lleva bien con Vite, una herramienta moderna para desarrollar front-end. El uso conjunto de Jest y Vite forzaba a los equipos el uso de dos flujos de trabajo — una para compilación y desarrollo y otra para pruebas unitarias — lo que requería una configuración tediosa de los flujos de trabajo con configuraciones duplicadas. Estos problemas se solucionan con Vitest. Está diseñado específicamente para Vite y utiliza Vite como paquete. Como característica adicional, Vitest tiene APIs compatibles con Jest, lo que hace posible usar Vitest como reemplazo directo de Jest en varias configuraciones de compilación. Sin embargo, usar Vite y Vitest juntos brinda una mejor experiencia de desarrollo y, aunque Vitest es rápido, según nuestra experiencia, no es necesariamente más rápido que usar Jest.
Evaluar
-
.NET 7 Native AOT es un gran paso adelante en una larga línea de enfoques para desplegar Aplicaciones .NET de forma nativa. Elimina por completo IL y JIT en tiempo de ejecución. Introducida en .NET 7, esta mejora es particularmente significativa para ejecutar aplicaciones .NET en funciones serverless. Esta nueva opción de despliegue elimina el problema del arranque en frío, que ha sido un problema persistente para .NET en plataformas sin servidor como AWS Lambda y Azure Functions. Con Native AOT, puede generar un binario desplegable más pequeño que los métodos anteriores, lo que resulta en tiempos de arranque en frío más rápidos. AWS ha adoptado oficialmente Native AOT, apoyándolo con sus Amazon Lambda Tools. Esta nueva opción de implementación pone a .NET 7 a la par con TypeScript/JavaScript en términos de tiempos de arranque en frío, lo que la convierte en una opción viable para organizaciones con una infraestructura orientada en gran medida a .NET.
-
.NET MAUI es un nuevo framework multiplataforma para crear aplicaciones móviles nativas y de escritorio con C# y XAML. Permite la creación de aplicaciones que pueden ejecutarse en Android, iOS, macOS y Windows a partir de un solo código base. Sin embargo, como nueva tecnología, el ecosistema alrededor de MAUI aún no es tan maduro como el de React Native u otros sistemas multiplataforma, y sólo soporta C#. Adicionalmente, MAUI puede tener que encarar los desafíos que experimentan las organizaciones que han usado Xamarin en el pasado, como escasas herramientas multiplataforma, problemas de integración en dispositivos móviles, disponibilidad de desarrolladoras y un ecosistema inmaduro.
Aunque Microsoft anunció su compromiso con MAUI como un framework de desarrollo de código abierto y orientado principalmente a móviles, su éxito aún está por demostrarse. Si ya estás usando Xamarin, podría considerar MAUI como una mejora potencial. No obstante, si C# o Xamarin aún no forman parte de sus herramientas, sería prudente acercarse a MAUI con cierta cautela hasta que la tecnología sea ampliamente adoptada y probada en el mercado.
-
dbt-expectations es un paquete de extensión para dbt inspirado en Great Expectations. La calidad de los datos es un principio importante de la gobernanza de datos, por lo que, cuando se trata de gobernanza de datos automatizada es importante crear controles integrados que marquen anomalías o problemas de calidad en los pipelines de datos. Al igual que las pruebas unitarias se ejecutan en un pipeline de compilación, dbt-expectations realiza aserciones durante la ejecución de un pipeline de datos. En el mundo de dbt, puede ejecutar pruebas de calidad de datos al estilo de Great Expectations en su almacén directamente dentro de dbt. Nuestros equipos han estado explorando esto, y tenía sentido resaltarlo.
-
Hemos utilizado Directus como un sistema de gestión de contenidos (CMS) headless. Aunque tenemos opciones en lo que se refiere a productos CMS headless, necesitábamos una solución auto alojada con una gestión enriquecida de activos digitales y flujos de autoría de contenidos. En esta evaluación encontramos que Directus se ajusta bien a nuestras necesidades; nos gusta bastante su procesamiento de datos basado en eventos y la automatización a través de flujos.
-
El lenguaje Rust ha estado ganando popularidad en los últimos años por sus características de seguridad, rendimiento y concurrencia. Sin embargo, han faltado herramientas Rust certificadas para aplicaciones en mercados donde la seguridad es crítica como es el caso de la industria automotriz. Este vacío está siendo cubierto por Ferrocene, una herramienta de compilador de Rust. Ferrocene promete cumplir con el estándar de seguridad funcional ISO26262 para sistemas electrónicos en vehículos de carretera; y los esfuerzos para calificar este lenguaje y sus herramientas para su uso en estos dominios ya está en marcha. Estamos emocionados por su progreso y la disponibilidad de este tipo de herramientas que cumplan con la seguridad acelerará sin duda la adopción de Rust en la industria automotriz.
-
Flutter for embedded hace que sea relativamente fácil crear y mantener una UI moderna similar a las aplicaciones móviles, pero para sistemas integrados como "human-machine interface" (HMI) en automóviles, refrigeradores y otros electrodomésticos. Esto es posible con Flutter ahora admite integradores personalizados, lo que permite la portabilidad a diferentes plataformas. Las apps están escritas en el lenguaje de programación Dart utilizando el SDK y ecosistema de Flutter. Hemos estado construyendo prototipos con él — a nuestras personas desarrolladoras les encanta la experiencia de desarrollo y a nuestros clientes les gusta la agilidad, la velocidad y la experiencia de usuario moderna que brinda.
-
En ingeniería de datos estamos viendo una selección desconcertante de herramientas y tecnologías. Especialmente para los ingenieros menos experimentados, puede tener sentido trabajar con una capa de abstracción para adentrarse a las herramientas, y así concentrarse en la tarea en cuestión sin tener que aprender varias API específicas de la tecnología y tener la opción de cambiar las tecnologías subyacentes sin demasiado esfuerzo. Fugue es esa capa de abstracción. Proporciona una interfaz unificada para computación distribuida, lo que permite ejecutar código en Python, pandas y SQL en Spark, Dask, Ray y DuckDB con menos sobreescritura. Sin embargo, si tu equipo ya se ha decidido por un conjunto de tecnologías, y si están familiarizados con sus API y están inmersos en ajustar y optimizar sus sistemas de backend, una capa de abstracción de este tipo proporciona menos valor en nuestra experiencia.
-
Galacean Engine es un motor interactivo web-first y mobile-first, diseñado para proporcionar una manera fluida de renderizar arquitectura y animación basadas en componentes de manera compatible con dispositivos móviles. Con su enfoque en el rendering ligero y de alto rendimiento, se ha convertido en una opción cada vez más popular para los equipos de desarrollo que crean juegos móviles atractivos. Es un motor basado en TypeScript que, según los desarrolladores, supera a las alternativas.
-
LangChain es un framework para construir aplicaciones con grandes modelos lingüísticos (LLMs, por sus siglas en inglés). Estos modelos han desencadenado una carrera para incorporar la IA generativa en varios casos de uso. Sin embargo, utilizar estos LLMs de forma aislada puede no ser suficiente: hay que combinarlos con tus activos diferenciadores para construir un producto impactante. LangChain cubre este nicho con algunas funcionalidades interesantes, incluyendo la gestión de avisos, el encadenamiento, generación de datos aumentada, y un rico conjunto de agentes para determinar qué acciones realizar y en qué orden. Esperamos que más herramientas y marcos evolucionen con los LLMs, y recomendamos evaluar LangChain.
-
mljar-supervised es un paquete AutoML de Python que ayuda a comprender y explicar datos tabulares. Nuestros equipos de ciencia de datos están entusiasmados con él y lo utilizan para automatizar el análisis exploratorio de datos. Abstrae la forma común de preprocesar los datos, construir los modelos de machine learning (ML) y realizar ajustes de hiperparámetros para encontrar el mejor modelo. La explicabilidad y la transparencia son principios importantes y ahí es donde brilla mljar-supervised. Permite ver exactamente cómo se construye el pipeline de ML con un detallado informe en formato markdown (marcado ligero) para cada modelo de ML. Definitivamente es un paquete AutoML interesante que vale la pena evaluar para sus necesidades de ML.
-
nanoGPT es un framework para entrenamiento y fine-tuning de transformadores generativos preentrenados de tamaño medio (GPT). El autor, Andrej Karpathy, hace referencia a las publicaciones Attention is All You Need y OpenAI's GPT-3 para construir un GPT desde cero usando PyTorch. Con todo el revuelo en torno a la IA generativa, queremos destacar nanoGPT por su simplicidad y enfoque en articular claramente los componentes básicos de la arquitectura GPT.
-
En versiones anteriores del radar, presentamos plataformas de prueba y validación de datos como Great Expectations que pueden ser usados para validar supuestos y probar la calidad de los datos entrantes utilizados para entrenamiento o clasificación. A veces, sin embargo, lo que necesitas es una simple librería de código para implementar verificaciones de pruebas y controles de calidad directamente en los pipelines. pandera es una librería en Python para probar y validar datos a través de una amplia gama de tipos de frames como pandas, Dask o PySpark. pandera puede implementar aserciones simples sobre campos o pruebas de hipótesis basadas en modelos estadísticos. La amplia gama de librerías de frames compatibles implica que las pruebas pueden ser escritas una vez y luego aplicada a una variedad de formatos de datos subyacentes. pandera puede usarse también para generar datos sintéticos para probar modelos ML.
-
Uno de los retos de crear una experiencia rica e interactiva basada en el navegador es el minimizar el tiempo desde la primera petición hasta una completa interactividad para el usuario. Al iniciar, la aplicación puede requerir descargar grandes cantidades de JavaScript al navegador o ejecutar un proceso largo para restaurar el estado de la aplicación en el servidor. Qwik es un nuevo framework de front-end que serializa el estado de la aplicación para que pueda ser renderizada en el servidor sin necesidad de rehidratar y reproducir la lógica de la aplicación. Esto se logra a través de reanudabilidad (resumability), que involucra el pausar la ejecución en el servidor para reanudarla en el cliente. Al igual que otros frameworks de front-end modernos, tales como Astro o Svelte, Qwik también agiliza los tiempos de carga iniciales de una página al minimizar la cantidad de JavaScript a cargar. En el caso de Qwik, la descarga inicial de la aplicación es principalmente HTML, con la mayoría de JavaScript cargado dinámicamente bajo demanda, si es posible, desde una caché local.
-
SolidJS Es una librería declarativa de JavaScript para crear interfaces de usuario. Este último año hemos visto un incremento en la visibilidad y popularidad de SolidJS entre desarrolladores, particularmente en aquellos interesados en crear interacciones de usuario más ricas. SolidJS compila sus plantillas a nodos reales del DOM (en lugar de usar vDOM) y las actualiza con reacciones muy granulares, lo que reduce las actualizaciones innecesarias en el DOM, dando lugar a un mayor rendimiento y una mejor experiencia de usuario. Cuenta con una API simple y con buen soporte para TypeScript, que puede ayudar a atrapar errores durante el desarrollo. Otro beneficio de SolidJS es el pequeño tamaño del paquete, que es ideal para construir aplicaciones webs rápidas y livianas y beneficia el enfoque mobile-first. SolidJS es un framework relativamente nuevo, por lo que no tiene una comunidad o ecosistema tan grande como otros frameworks. Sin embargo, a juzgar por el creciente número de librerías y herramientas útiles, parece que está creciendo en popularidad. Su sistema de actualización reactivo, su modelado funcional de componentes y su sistema de plantillas hace a SolidJS una atractiva elección a evaluar. Estamos viendo interés por parte de muchos equipos y comunidades.
-
Uno de los temas que constantemente capta nuestra atención en nuestras conversaciones es el de los monorepos. En algunas compañías los han adoptado para toda la organización, mientras que en otras han aplicado el concepto en determinadas aplicaciones concretas como aplicaciones móviles o desarrollos que combinan IU/BFF. Independientemente de si los monorepos son apropiados o cuándo, la industria parece estar reconsiderando herramientas que puedan gestionar de manera efectiva grandes bases de código y construirlas de manera eficiente como unidades desplegables. Turborepo es una herramienta relativamente nueva en esta categoría que ofrece una alternativa a Nx o Lerna para grandes bases de código en JavaScript o TypeScript. Uno de los retos con el manejo de los repositorios grandes es poder ejecutar su construcción de manera suficientemente rápida para no interrumpir el flujo del desarrollador o reducir su eficiencia. Turborepo está escrito en Rust lo que le proporciona un alto rendimiento; también realiza la construcción de manera incremental y cachea los pasos intermedios para lograr aun más velocidad. Sin embargo, obliga a cambios en el flujo del desarrollador que llevan tiempo aprender y probablemente es más adecuado para grandes bases de código en las que existen múltiples procesos de construcción independientes donde se pueda garantizar un enfoque diferente. Hemos encontrado que la documentación es escasa, lo que ha llevado a algunos equipos a seguir utilizando de momento herramientas más establecidas. Sin embargo, merece la pena evaluar si Turborepo y su más nuevo acompañante, Turbopack (actualmente en beta), continúan evolucionando.
-
Al trabajar en la API experimental WebVR, se hizo obvio que tendría más sentido tener una API combinada para VR y AR. En lugar de cambiar significativamente la API para WebVR, se creó una nueva especificación: WebXR. En esencia es la API para dispositivos WebXR la que provee capacidades clave para escribir aplicaciones VR y AR en navegadores web. La API es extensible, y al momento de escribir esto no es totalmente compatible con todos los navegadores. Nuestros equipos han usado WebXR en varias ocasiones y podemos ver los beneficios descritos por Immersive Web Working Group. Cuando trabajamos en prototipos, nos gusta especialmente que la experiencia esté inmediatamente disponible en el navegador web. El equipo de desarrollo no tiene que pasar por el proceso del app-store y los usuarios pueden jugar con la experiencia sin la necesidad de instalar una aplicación. Dado el estado de la API y el hecho de que está escondida detrás de una configuración en algunos navegadores, no la hemos visto más allá de las pruebas de concepto y prototipos.
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.
