Enable javascript in your browser for better experience. Need to know to enable it? Go here.
Volumen 30 | Abril 2024

Lenguajes & Frameworks

Lenguajes & Frameworks

Adoptar ?

Probar ?

  • El marco de trabajo Astro está ganando más popularidad en la comunidad. Uno de nuestros equipos ha utilizado Astro para construir sitios web orientados al contenido como blogs y sitios web de mercadeo. Astro es un framework para crear aplicaciones de múltiples páginas que renderiza HTML en el servidor y minimiza la cantidad de JavaScript enviado por la red. Nos gusta que Astro soporta, cuando es apropiado, a componentes activos selectos escritos en cualquier framework de front-end de JavaScript, aunque recomienda enviar solo HTML. Esto lo hace a través de su arquitectura de islas. Las islas son regiones de interactividad dentro de una sola página donde el JavaScript requerido se descarga solo cuando se necesita. Así, la mayoría de las áreas del sitio se convierten en HTML estático, veloz, y las partes de JavaScript están optimizadas para la carga en paralelo. A nuestro equipo le gusta tanto su rendimiento para el renderizado de páginas como la velocidad en el proceso de compilación. La sintaxis para componentes de Astro es una simple extensión de HTML y la curva de aprendizaje es bastante suave.

  • La comparación de DataFrames es una tarea común en la ingeniería de datos, frecuentemente realizada para comparar la salida de dos enfoques de transformación de datos para asegurarse que no hayan ocurrido desviaciones o inconsistencias significativas. DataComPy es una librería de Python que facilita la comparación de dos DataFrames en pandas, Spark y más. La librería va más allá de realizar comparaciones básicas de igualdad al ofrecer información detallada sobre discrepancias a nivel de filas y columnas. DataComPy tiene también la capacidad para especificar tolerancias absolutas o relativas en comparaciones de columnas numéricas, así como diferencias ya conocidas que no hace falta resaltar en su reporte. Algunos de nuestros equipos la utilizan como parte de su suite de smoke testing; la encuentran eficiente al comparar DataFrames extensos y consideran que sus reportes son fáciles de entender y sobre los que actuar.

  • Pinia es una librería y framework de gestión de estados para Vue.js. Utiliza sintaxis declarativa y ofrece su propia API para gestión de estados. Comparada con Vuex, Pinia provee una API simple con menos formalidades, ofrece el Composition-style APIs, y lo más importante, posee soporte de inferencia tipo sólida cuando es utilizada con TypeScript. Pinia es promovido por el equipo de Vue.js como una alternativa verificada para Vuex, y es actualmente la librería oficial de Vue.js para gestión de estados. Nuestros equipos están aprovechando Pinia por su simplicidad y fácil uso de implementación.

  • Las cargas de trabajo actuales de aprendizaje automático (ML, por sus siglas en inglés) requieren cada vez de más recursos de computación. Por muy convenientes que sean, los entornos de desarrollo compuestos de un único nodo como puede ser nuestro portátil no pueden escalar para cumplir con estas demandas. Ray es un framework unificado para escalar la IA y el código Python desde el portátil hasta el clúster. Ray es esencialmente un framework de computación distribuida bien encapsulado con una serie de librerías de IA para simplificar el trabajo de aprendizaje automático (ML). Mediante la integración con otros frameworks (por ejemplo, PyTorch y TensorFlow), puede usarse para construir plataformas de aprendizaje automático a gran escala. Compañías como OpenAI y Bytedance usan Ray intensivamente para el entrenamiento e inferencia de modelos. Nosotros también usamos sus librerías de IA como soporte para el entrenamiento distribuido y para el ajuste de hiperparámetros en nuestros proyectos. Te recomendamos que pruebes Ray cuando tengas que construir proyectos de aprendizaje automático escalables.

Evaluar ?

  • Algunas aplicaciones y juegos móviles pueden consumir tantos recursos que causan el estrangulamiento térmico (thermal throttling) del dispositivo en pocos minutos. En este estado, la frecuencia de la CPU y la GPU se reducen para ayudar su enfriamiento, aunque provoca la reducción de la frecuencia de imagen (frame rate) en los juegos. Cuando la condición térmica mejora, la frecuencia de imagen aumenta nuevamente y el ciclo se repite, provocando una pobre experiencia en el uso del software. Android Adaptability, un nuevo conjunto de librerías, permite que las personas desarrolladoras de aplicaciones implementen mecanismos de adaptación a los cambios de rendimiento y de condiciones térmicas de los dispositivos. El Android Dynamic Performance Framework (ADPF) incluye a la Thermal API para suministrar información sobre el estado térmico del dispositivo y a la Hint API para ayudar a Android a escoger de manera óptima el punto de operación y ubicación de núcleos en la CPU. Los equipos que usan Unity encontrarán útil al paquete Unity Adaptive Performance ya que funciona con ambas APIs.

  • Anteriormente, hablamos de la técnica Encriptación homomórfica que permite ejecutar análisis y cálculos directamente sobre los datos encriptados.Concrete ML es una de esas herramientas de código abierto que permite aprendizaje automático con preservación de la privacidad. Construido sobre Concrete, esto simplifica el uso del encriptado totalmente homomórfico (FHE) para científicos de datos, para ayudar a convertir automáticamente los modelos de aprendizaje automático en su equivalente homomórfico. Los modelos integrados de los aprendizajes automáticos de Concrete ML tienen APIs que son casi idénticas a sus contrapartes scikit-learn. También se puede convertir redes de PyTorch a FHE con APIs de conversión de Concrete ML. Tomar en cuenta, sin embargo, que FHE con Concrete ML puede ser lento sin hardware optimizado.

  • Crabviz es un complemento para Visual Studio Code para crear gráficos de llamadas. Los gráficos son interactivos, algo esencial al trabajar con bases de código moderadamente grandes como las de microservicios, y muestran tipos, métodos, funciones e interfaces agrupadas por archivo y también presentan las relaciones de llamadas a funciones y las de implementación de interfaces. Ya que Crabviz está basado en el Language Server Protocol, soporta un sin número de lenguajes, siempre que el servidor correspondiente al lenguaje esté instalado. Al mismo tiempo esto significa que Crabviz está limitado al análisis de código estático, lo cual puede ser insuficiente en algunos casos. El complemento está escrito en Rust y está disponible en la tienda de extensiones de Visual Studio Code.

  • Crux es un marco de desarrollo de aplicaciones multiplataforma de código abierto escrito en Rust. Inspirado en la arquitectura Elm, Crux organiza el código de lógica empresarial en el núcleo y en la capa de UI en marcos de desarrollo nativos como SwiftUI, Jetpack Compose, React/Vue o marcos de desarrollo basados en WebAssembly (como Yew). Con Crux, puedes escribir código de comportamiento, libre de efectos secundarios, en Rust y compartirlo entre iOS, Android y la web.

  • La reciente versión pública preliminar de Databricks Asset Bundles (DABs), incluida con Databricks CLI versión 0.205 y superiores, se está convirtiendo en la forma recomendada oficialmente de empaquetar activos de Databricks para control de código fuente, pruebas y despliegue. Ha comenzado a reemplazar dbx entre nuestros equipos. DABs soporta el empaquetado de la configuración de flujos de trabajo, trabajos y tareas, así como el código a ser ejecutado en esas tareas, como un paquete que puede ser desplegado en múltiples entornos. Cuenta con plantillas para tipos comunes de activos y soporta plantillas personalizadas. Si bien DABs incluye plantillas para blocs de notas y soporta su despliegue en producción, seguimos recomendando no producir notebooks y en su lugar animamos a escribir intencionadamente código de producción con prácticas de ingeniería que respalden las necesidades de mantenibilidad, resiliencia y escalabilidad de dichas cargas de trabajo.

  • Electric es un framework local-first de sincronización para aplicaciones web y móviles. Local-first es un paradigma de desarrollo donde el código de nuestra aplicación conversa directamente con una base de datos local embebida, mientras sincroniza los datos en segundo plano a través de una replicación activa-activa con la base de datos central. Con Electric, tenemos SQLite como la opción local embebida y PostgreSQL para el almacenamiento central. Si bien el paradigma local-first mejora ampliamente la experiencia del usuario, no está exento de desafíos, y los inventores de CRDT han trabajado en el framework Electric para reducir estos dolores.

  • LiteLLM es una librería para la perfecta integración con diversas APIs de proveedores de large language model(LLM) que estandarizan interacciones a través de un formato de API de OpenAI. Soporta una amplia gama de proveedores y modelos y ofrece una interfaz única para funciones de acabado, incrustación y generación de imágenes funcionales. LiteLLM simplifica la integración al traducir las variables de entrada para coincidir con los requisitos específicos de la puerta de enlace de cada proveedor. Esto es particularmente valioso en el panorama actual, donde la falta de especificaciones de API para proveedores LLM complica la inclusión de múltiples LLMs en proyectos. Nuestros equipos han aprovechado LiteLLM para intercambiar modelos subyacentes en aplicaciones LLM, abordando retos de integración significativos. Sin embargo, es crucial reconocer que modelos de respuesta a prompts idénticos varían, demostrando que un método de invocación único podría no optimizar completamente el rendimiento del completado. Denotar que LiteLLM tiene distintas características, como un servidor proxy, que no se encuentran dentro del alcance de este resumen.

  • Seguimos siendo precavidos respecto a apresurarnos a afinar grandes modelos linguisticos (LLMs) a menos que sea absolutamente crítico — ya que conlleva una sobrecarga significativa en terminos de coste y experiencia. Sin embargo, creemos que LLaMA-Factory puede ser útil cuando se requiera un ajuste preciso. Se trata de un marco de entrenamiento y ajuste fácil de usar, de código abierto, para los LLM. Con soporte para LLaMA, BLOOM, Mistral, Baichuan, Qwen y ChatGLM, hace que un concepto tan complejo como el ajuste preciso sea relativamente accesible. Nuestros equipos utilizaron con éxito LLaMA-Factory's LoRA tuning para un modelo de LLaMA 7B, así que si necesitas hacer ajustes a tus modelos, vale la pena evaluar este marco.

  • MLX es un array-framework de código abierto, diseñado para aprendizaje automático eficiente y flexible en procesadores Apple silicon. Permite que los científicos de datos e ingenieros de aprendizaje automático (ML) puedan acceder a la GPU integrada, permitiéndoles elegir el hardware que mejor se adapte a sus necesidades. El diseño de MLX está inspirado por frameworks tales como NumPy, PyTorch y Jax, por nombrar algunos. Una de las diferencias claves de MLX, es su modelo de memoria unificada, que elimina el exceso de transferencias de datos entre CPU y GPU, resultando en una ejecución más rápida. Esta funcionalidad hace posible correr los modelos en dispositivos tales como los iPhones, abriendo una tremenda oportunidad para aplicaciones de inteligencia artificial en dispositivos. Aunque de nicho, la comunidad de desarrolladores ML encontrará que vale la pena seguirlo.

  • Mojo es un nuevo lenguaje de programación de tipo AI-first. Propone cerrar la brecha entre la investigación y la producción al combinar la sintaxis y el ecosistema de Python con programación de sistemas y características de metaprogramación. Es el primer lenguaje en tomar ventaja del nuevo compilador de backend MLIR y contiene características geniales como abstracciones sin costo, ajuste automático, destrucción ambiciosa, optimización de llamadas de cola y mejor ergonomía de “una instrucción, múltiples datos” (SIMD). Nos gusta bastante Mojo y te animamos a probarlo. El SDK de Mojo está actualmente disponible para sistemas operativos de Ubuntu y macOS.

  • Otter es una librería de caché libre de contención en Go. Aunque Go cuenta con varias librerías de este tipo, queremos destacar a Otter por dos razones: su excelente throughput y su ingeniosa implementación del algoritmo S3-FIFO para obtener una buena tasa de aciertos de caché. Otter también admite tipos genéricos, por lo que puedes usar cualquier tipo comparable como claves y cualquier tipo como valores.

  • Pkl es un lenguaje y herramienta de configuración creada para uso interno de Apple y ahora de código abierto. La característica clave de Pkl es su tipo y sistema de validación, lo que permite detectar errores de configuración antes de la implementación. Genera archivos JSON, .plist, YAML y .properties y tiene una amplia integración con lenguajes e IDEs, incluida la generación de código.

  • El impacto de Rust continúa creciendo, y muchas de las herramientas de compilación y de línea de comandos que hemos cubierto recientemente están escritas en Rust. Ahora, también estamos viendo un movimiento en el uso de Rust para el desarrollo de UI. La mayoría de los equipos que prefieren usar el mismo lenguaje para el código que se ejecuta en el navegador y en el servidor optan por usar JavaScript o TypeScript. Sin embargo, con WebAssembly puedes usar Rust en el navegador, y esto se está volviendo más común ahora. Frameworks como Leptos y sauron se centran en el desarrollo web, mientras que Dioxus y varios otros admiten el desarrollo de aplicaciones multiplataforma móviles y de escritorio además del desarrollo web.

  • vLLM es un motor de servicio e inferencia de alto rendimiento y memoria eficiente para modelos lingüísticos grandes (LLM), que es particularmente eficiente gracias a su implementación de procesamiento por lotes continuos para solicitudes entrantes. Admite varias opciones de despliegue, incluyendo el despliegue de inferencia distribuida con tensores en paralelo usando Ray como servidor en tiempo de ejecución, despliegue en la nube con SkyPilot y despliegue con NVIDIA Triton, Docker y LangChain. Nuestros equipos han tenido una buena experiencia ejecutando servicios de trabajo de vLLM dockerizados en una máquina virtual on-prem, integrando un servidor API de OpenAI compatible, que a su vez se aprovecha de una variedad de aplicaciones, incluyendo complementos de IDE para asistencia en codificación y chatbots. Nuestros equipos utilizan vLLM para ejecutar modelos como CodeLlama 70B, CodeLlama 7B y Mixtral. Además es notable la capacidad de escalamiento del motor: solo son necesarios un par de cambios de configuración para pasar de ejecutar un modelo 7B a uno 70B. Si está buscando generar LLM, vale la pena explorar vLLM.

  • Voyager es una librería de navegación hecha para Jetpack Compose de Android. Soporta diferentes tipos de navegación, incluyendo Linear, BottomSheet, Tab y Nested, y su modelo de pantalla se integra con marcos de trabajo populares como Koin y Hilt. Cuando se usa Jetpack Compose en un proyecto multiplataforma, Voyager es una buena elección para implementar un patrón común de navegación en todas las plataformas compatibles. El desarrollo en Voyager se ha reanudado y en Diciembre de 2023 la librería alcanzó la versión 1.0.

  • wgpu es una librería gráfica para Rust basada en el API WebGPU, notable por su capacidad para manejar gráficos de propósito general y realizar tareas de cálculo en la GPU de manera eficiente. Esta librería pretende llenar el vacío dejado por la eliminación progresiva de estándares gráficos más antiguos, como OpenGL y WebGL. Introduce un enfoque moderno para el desarrollo de gráficos que abarca tanto aplicaciones nativas como proyectos basados en web. Su integración con WebAssembly permite además, que aplicaciones gráficas y de cálculo se ejecuten en el navegador. wgpu representa un paso adelante para hacer que la programación avanzada de gráficos avanzados sea más accesible para los desarrolladores web con una variedad de aplicaciones, desde juegos hasta la creación de animaciones web sofisticadas, posicionando wgpu como una tecnología interesante a evaluar.

  • Zig es un nuevo lenguaje que comparte muchos atributos con C, pero con tipificación más fuerte, asignación de memoria más fácil y soporte para espacios de nombres, entre un conjunto de otras características. El objetivo de Zig es proporcionar un lenguaje muy sencillo con compilación directa que minimiza efectos secundarios y ofrece una ejecución predecible y fácil de rastrear. Zig también proporciona acceso simplificado a la capacidad de compilación cruzada de LLVM. Algunos de nuestros desarrolladores han encontrado esta característica tan valiosa que están usando Zig como un compilador cruzado, aunque no estén escribiendo código Zig. Vemos equipos en la industria usando Zig para ayudar a construir cadenas de herramientas C/C++. Zig es un lenguaje novedoso y vale la pena investigarlo para aplicaciones donde se esté considerando el uso de C o ya se esté utilizando.

Resistir ?

  • En el anterior Radar mencionamos algunas críticas sobre LangChain. Desde entonces, queremos ser aún más precavidos con su uso. Aunque este marco de desarrollo ofrece un poderoso conjunto de funcionalidades para construir aplicaciones con Modelos de Lenguaje de Gran Tamaño (LLMs), creemos que es difícil de utilizar y demasiado complejo. LangChain ganó popularidad y atención muy pronto, lo que lo convirtió en la opción por defecto para muchos desarrolladores. Sin embargo, como LangChain está intentando evolucionar y mantenerse actualizado con el acelerado ritmo del cambio, se está volviendo cada vez más difícil para los desarrolladores navegar esos cambios de conceptos y patrones. También nos parece que el diseño de la API es inconsistente y verboso. Como tal, muchas veces esconde lo qué está ocurriendo realmente debajo de la superficie, haciendo difícil para los desarrolladores comprender y controlar cómo los LLMs y los varios patrones asociados a ellos funcionan realmente. Estamos moviendo LangChain al anillo de Resistir para reflejar esto. En muchos de los casos de uso, hemos encontrado que una implementación con un uso mínimo de frameworks especializados es suficiente. Dependiendo de tu caso de uso, quizás quieras considerar otros frameworks como Semantic Kernel, Haystack o LiteLLM

 
  • languages-and-frameworks quadrant with radar rings Adoptar Probar Evaluar Resistir Adoptar Probar Evaluar 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.

Descarga el PDF

 

 

 

English | Español | Português | 中文

Suscríbete al boletín informativo de Technology Radar

 

 

 

 

Suscríbete ahora

Visita nuestro archivo para leer los volúmenes anteriores