Category: Desarrollo

Estado actual de HTTP/3: Desafíos y oportunidades en el camino hacia la adopción

2024-12-16
Estado actual de HTTP/3: Desafíos y oportunidades en el camino hacia la adopción

Las especificaciones de HTTP/3 están completas, pero esperan su publicación final. El soporte del lado del servidor es sorprendentemente alto, especialmente entre los sitios web principales. Grandes empresas como Cloudflare han habilitado HTTP/3, y los navegadores lo admiten ampliamente. Sin embargo, el soporte del lado del cliente, como en curl, sigue siendo incompleto, en gran parte debido al desarrollo retrasado de bibliotecas TLS con soporte QUIC. El soporte QUIC de OpenSSL se ha retrasado, mientras que las alternativas como BoringSSL y quictls tienen limitaciones. Si bien HTTP/3 promete mejoras de velocidad, los beneficios del mundo real dependen de las condiciones de la red. La adopción generalizada depende de la publicación de la especificación y de bibliotecas TLS maduras.

Desarrollo

Vec::drain de Rust: Aprovechando Drop para la seguridad

2024-12-16
Vec::drain de Rust: Aprovechando Drop para la seguridad

Este artículo profundiza en el método Vec::drain de Rust y su implementación Drop, mostrando cómo la propiedad previene errores sutiles, relacionados con la memoria y otros. Vec::drain optimiza el rendimiento manteniendo una referencia mutable al vector original y solo leyendo/actualizando el almacenamiento original. La clave reside en la implementación Drop de la estructura Drain, que utiliza un DropGuard para garantizar que, incluso si el iterador se descarta prematuramente, los elementos restantes se mueven de forma segura al vector original, garantizando la seguridad de la memoria. El artículo explica detalladamente los detalles de implementación de Drain y DropGuard, abordando casos especiales como tipos de tamaño cero y la procedencia de los punteros.

Desarrollo

El nuevo modo --shuffle de GNU Make: Descubriendo errores ocultos en compilaciones paralelas

2024-12-16

Durante once años, errores difíciles de reproducir afectaron las compilaciones paralelas en GNU Make. Inspirado en esto, se desarrolló un nuevo modo `--shuffle` para reorganizar aleatoriamente los objetivos del Makefile, simulando un orden de compilación no determinista. Esto reveló efectivamente errores ocultos en más de 30 paquetes, incluyendo gcc, vim y ghc. Ahora parte de GNU Make 4.4, este modo es accesible a través de `make --shuffle` o la variable de entorno `GNUMAKEFLAGS=--shuffle`. Esta potente función ayuda a los desarrolladores a identificar y resolver problemas de compilación paralela, destacando la mejora continua de las herramientas de desarrollo de software.

Nuevo balanceador de carga de Google, PReQuaL: más allá del balanceo de carga de la CPU

2024-12-16

Google Research presentó PReQuaL (Probing to Reduce Queuing and Latency), un nuevo balanceador de carga, en NSDI 2024. A diferencia del balanceo de carga de la CPU tradicional, PReQuaL sondea activamente la latencia del servidor y las solicitudes activas para seleccionar servidores, reduciendo drásticamente la latencia de cola, las tasas de error y el consumo de recursos en sistemas como YouTube. Implementado en YouTube durante más de un año, PReQuaL ha mejorado significativamente la utilización del sistema. Este enfoque innovador desafía la sabiduría convencional y ofrece un nuevo paradigma para sistemas distribuidos de alto rendimiento.

Desarrollo balanceo de carga

Un viaje de ingeniería de software en CAD e impresión 3D: Un elevador de cámara web sobrediseñado

2024-12-16

Un experimentado ingeniero de software, cansado del mundo virtual de la programación, anhelaba crear en el mundo real. Adquirió una impresora 3D Bambu Lab X1C y rápidamente dominó la impresión 3D. Luego comenzó a aprender el software CAD Fusion 360, sorprendentemente encontrando sus conceptos de restricción similares a las restricciones de la IU de iOS, y el diseño CAD paramétrico haciendo eco de la programación funcional. Su primer proyecto: un elevador de cámara web sobrediseñado para resolver el problema de la cámara web obstruyendo su pantalla. Este proyecto no solo le proporcionó la alegría de la impresión 3D y el diseño CAD, sino también una comprensión profunda de la fabricación, los materiales y otros detalles que deben considerarse en la fase de diseño.

Lanzamiento de Adélie Linux 1.0-BETA6: Compatibilidad Mejorada y Funciones Más Completas

2024-12-16
Lanzamiento de Adélie Linux 1.0-BETA6: Compatibilidad Mejorada y Funciones Más Completas

Adélie Linux ha lanzado su versión 1.0-BETA6, con soporte para arquitecturas ARM, POWER y x86 de 32 y 64 bits, abarcando desde smartphones y consolas de juegos hasta supercomputadoras. Esta versión incluye más de 35 paquetes nuevos, actualizaciones para GCC 13, LLVM 18, Rust 1.80 y el kernel de Linux 6.6 LTS, además de soporte mejorado para GRUB y Wayland. Se han corregido numerosos errores y se ha mejorado la experiencia del usuario. Si bien aún persisten algunos problemas conocidos, el equipo de Adélie está trabajando activamente en sus soluciones y agradece los informes de errores y comentarios.

Desarrollo distribución Linux

Cyphernetes: Automatización de la gestión de clústeres Kubernetes nativos en la nube

2024-12-16

Cyphernetes es un proyecto que automatiza la gestión de clústeres Kubernetes nativos en la nube. Reduce significativamente la complejidad operativa simplificando los procesos de implementación, actualizaciones y gestión. Imagine escalar su clúster sin esfuerzo para gestionar picos de tráfico, reparar fallos automáticamente y garantizar la estabilidad del servicio, todo sin intervención manual. Cyphernetes actúa como un administrador experto de clústeres Kubernetes, protegiendo sus aplicaciones las 24 horas del día, los 7 días de la semana, permitiéndole concentrarse en la innovación.

Navegador Dillo: 25 años de historia, una historia de resurrección

2024-12-16

El navegador web Dillo, nacido en 1999, ha resistido 25 años de desarrollo. Se ha estancado varias veces, pero ha perseverado. Inicialmente liderado por Jorge Arellano Cid, pasó por fases principales de GTK y FLTK, con cambios de desarrolladores clave y el proyecto experimentando altibajos. En 2024, Rodrigo Arias Mallo asumió el mando, y con la ayuda de la comunidad, lanzó la versión 3.1.1, devolviendo este navegador veterano al centro de atención. La historia de Dillo ejemplifica el espíritu de código abierto y es una historia legendaria de legado tecnológico e innovación.

Hyperbola GNU/Linux-libre: Un sistema operativo ligero comprometido con la libertad y el soporte a largo plazo

2024-12-15

Hyperbola GNU/Linux-libre es un proyecto de sistema operativo impulsado por la comunidad que busca proporcionar una distribución de soporte a largo plazo totalmente libre, estable, segura, simple y ligera. Utiliza la gestión de paquetes de Arch Linux y parches de seguridad de Debian, adhiriéndose a las Directrices de Distribución de Sistemas Libres GNU. Soporta arquitecturas i686 y x86_64, y planea lanzar un sistema basado en BSD, HyperbolaBSD. Noticias recientes incluyen el soporte continuo para sistemas de 32 bits, la discontinuación de conjuntos de parches de Debian más allá de la versión 12 y preocupaciones expresadas sobre la declaración de la Free Software Foundation sobre el aprendizaje automático.

Mapa de Proyectos de GitHub: Visualización de más de 400.000 Proyectos

2024-12-15
Mapa de Proyectos de GitHub: Visualización de más de 400.000 Proyectos

El desarrollador Anvaka creó un mapa interactivo que visualiza más de 400.000 proyectos de GitHub utilizando datos disponibles públicamente. El proyecto utiliza la similitud de Jaccard para calcular las relaciones entre los proyectos y el algoritmo de Leiden para el agrupamiento. El resultado es una representación visualmente impresionante del ecosistema de GitHub, permitiendo a los usuarios buscar y explorar las conexiones entre los proyectos, revelando su complejidad y riqueza.

Vercel lanza ƒun: Un entorno de ejecución local para funciones Serverless

2024-12-15
Vercel lanza ƒun: Un entorno de ejecución local para funciones Serverless

Vercel ha lanzado ƒun, un entorno de ejecución local para el desarrollo de funciones serverless, permitiendo a los desarrolladores emular el entorno AWS Lambda localmente. ƒun soporta varios entornos de ejecución, incluyendo Node.js y Python, permitiendo pruebas y depuración rápidas de funciones serverless sin necesidad de despliegue en la nube. Aunque ƒun intenta aproximarse al entorno Lambda real, existen algunas diferencias clave, especialmente en cuanto a la seguridad del espacio aislado de procesos y los permisos de usuario.

Arrastrar y soltar imágenes en Bevy 0.15 en la web

2024-12-15

Esta publicación muestra cómo integrar las API nativas de la web a través de WASM con Bevy 0.15 para habilitar la funcionalidad de arrastrar y soltar imágenes en un navegador web. Se detalla el uso de wasm-bindgen, gloo y bevy_channel_trigger para manejar eventos DOM en Rust, extraer datos de archivos y pasarlos al motor Bevy para cargar y representar imágenes. El proceso refleja la implementación en JavaScript, pero aprovecha las capacidades de Rust, abordando el manejo de errores y las fugas de memoria de los oyentes de eventos. El resultado es una aplicación web Bevy capaz de cargar y mostrar imágenes PNG soltadas.

Desarrollo Desarrollo web

Indicador de Enfoque para Programadores: El Nacimiento de FlowLight

2024-12-15

Inspirado en un artículo de investigación sobre el impacto de las interrupciones en el trabajo, el programador Shae Erisson creó un sistema DIY llamado FlowLight para indicar si un programador está en un estado de enfoque de "flujo". El sistema monitoriza el tiempo inactivo en el editor Emacs; cuando el programador está inactivo durante un período, el LED de una placa Adafruit MagTag cambia de color (verde para inactivo, rojo para ocupado). Erisson también escribió un servidor HTTP en CircuitPython para controlar remotamente el color del LED y mostrar el estado. Si bien el sistema tiene margen de mejora, como un monitoreo de tiempo inactivo más granular y una visualización más atractiva, ayuda eficazmente a los programadores a evitar interrupciones y mejorar la productividad.

Desarrollo enfoque flujo

Programa WASM elude el sandbox del sistema de archivos node:wasi

2024-12-15
Programa WASM elude el sandbox del sistema de archivos node:wasi

Este proyecto demuestra una prueba de concepto que muestra cómo un programa WASM puede eludir la restricción del directorio preopens en node:wasi para acceder a archivos fuera del sandbox. Normalmente, los programas WASM están limitados a acceder a directorios preabiertos. Sin embargo, utilizando enlaces simbólicos para reemplazar archivos en un momento preciso y ejecutando un proceso externo, se puede eludir esta limitación. Esto no es una vulnerabilidad de seguridad práctica en node:wasi, sino más bien un caso límite potencial. El proyecto destaca que no se debe depender de node:wasi para evitar completamente que código malicioso acceda a archivos externos.

Desarrollo

Optimización de GPU MacOS: Desperdicio de recursos para velocidad

2024-12-15

El desarrollador de Anukari encontró un cuello de botella al optimizar el rendimiento de la GPU en MacOS. Debido al control limitado del sistema sobre el rendimiento de la GPU, el mecanismo de regulación del rendimiento de la GPU de Apple tuvo un rendimiento deficiente en el caso de uso de Anukari, lo que provocó fallos de audio. El desarrollador implementó una solución alternativa: dedicar un warp de threadgroup de la GPU a cálculos inútiles para 'engañar' al sistema y aumentar la velocidad de reloj de la GPU, reduciendo significativamente la latencia de audio y mejorando el rendimiento. Si bien es tosco, este método resultó eficaz para resolver los problemas de rendimiento de MacOS. Sin embargo, las mejoras de rendimiento variaron significativamente entre diferentes DAW (Ableton y GarageBand), lo que requiere una optimización adicional.

¿Terminarán los grandes modelos de lenguaje con la programación?

2024-12-15

Los avances recientes en los grandes modelos de lenguaje (LLM) han generado un debate sobre la obsolescencia de la programación. Este artículo argumenta en contra de esta visión excesivamente optimista. Centrándose en la complejidad computacional de la síntesis de programas, el autor demuestra que generar código correcto es un problema PSPACE-completo, lo que significa que incluso las entradas de tamaño moderado pueden requerir un tiempo exponencial. Si bien los LLM pueden ayudar a los programadores y aumentar la eficiencia, sus limitaciones inherentes impiden que reemplacen completamente a los programadores humanos. El núcleo de la programación sigue siendo la resolución de problemas y el diseño de sistemas, lo que requiere ingenio y creatividad humanos.

Computación Optimista: Un Camino Hacia un Mejor Software

2024-12-15

Este ensayo explora el concepto de "Computación Optimista", no como un optimismo ciego, sino como una convergencia de varias ideas poderosas: simplicidad y facilidad de uso ("boot to kill"), principios local-first y empoderamiento del usuario. El autor argumenta que, limitando dependencias, simplificando flujos de trabajo, creando una experiencia perfecta de "simplemente funciona" y dando a los usuarios más control, podemos construir software más confiable, seguro y duradero. Esta filosofía se aplica tanto a usuarios individuales como al desarrollo de software empresarial, con el objetivo final de un mundo digital que respeta la privacidad y la propiedad de los datos del usuario.

Spark vs. DuckDB vs. Polars: Comparativa de rendimiento para cargas de trabajo pequeñas y medianas

2024-12-15
Spark vs. DuckDB vs. Polars: Comparativa de rendimiento para cargas de trabajo pequeñas y medianas

Este artículo compara los motores de procesamiento de datos Spark, DuckDB y Polars, evaluando su rendimiento, coste y facilidad de desarrollo en conjuntos de datos de 10 GB y 100 GB. Los resultados muestran que, para conjuntos de datos grandes y tareas ETL, Spark sigue siendo dominante debido a sus capacidades de computación distribuida y ecosistema maduro. DuckDB y Polars destacan en consultas interactivas y exploración de datos en conjuntos de datos más pequeños. El autor recomienda un enfoque estratégico de combinación y coincidencia, utilizando Spark para ETL, DuckDB para consultas interactivas y Polars para escenarios de nicho, adaptando la elección del motor a las necesidades específicas.

Motor de Inferencia LLM Rápido Creado desde Cero

2024-12-15

Este artículo detalla el proceso del autor para construir un motor de inferencia LLM desde cero usando C++ y CUDA, sin depender de ninguna biblioteca. Este proceso permitió una inmersión profunda en toda la pila de inferencia LLM, desde los núcleos CUDA hasta la arquitectura del modelo, mostrando cómo las optimizaciones afectan la velocidad de inferencia. El objetivo era crear un programa capaz de cargar pesos de modelos de código abierto comunes y realizar inferencia de lote único en un único servidor CPU+GPU, mejorando iterativamente el rendimiento de tokens para superar a llama.cpp. El artículo describe meticulosamente los pasos de optimización tanto en la CPU como en la GPU, incluyendo multithreading, cuantificación de pesos, SIMD, fusión de núcleos y cuantificación de caché KV, analizando cuellos de botella y desafíos. El resultado final logra un rendimiento cercano al estado del arte para la inferencia LLM local.

Desarrollo inferencia LLM

Priorizar el código desechable sobre los documentos de diseño: Un enfoque de desarrollo de software más eficiente

2024-12-15
Priorizar el código desechable sobre los documentos de diseño: Un enfoque de desarrollo de software más eficiente

En el desarrollo de software, el método tradicional de documento de diseño más desarrollo incremental no siempre es eficiente. El autor Doug Turnbull propone un enfoque de "ataque de código": implementar rápidamente un prototipo usando un PR temporal, obtener retroalimentación temprana del equipo, refinar el diseño y luego dividirlo gradualmente en PRs implementables. Este método fomenta la iteración rápida, la detección temprana de problemas y considera el código en sí como la mejor documentación. Si bien los documentos de diseño todavía tienen valor en situaciones específicas, el autor aboga por "mostrar, no contar", utilizando prototipos de código para una validación e iteración rápidas para lograr un desarrollo de software más eficiente.

El Secreto de los Equipos de Alto Rendimiento: Sistemas de Memoria Transactiva

2024-12-15
El Secreto de los Equipos de Alto Rendimiento: Sistemas de Memoria Transactiva

Este artículo explora la piedra angular de los equipos de alto rendimiento: Sistemas de Memoria Transactiva (SMT). No se trata de la fuerza de memoria individual, sino de cómo los equipos comparten y aprovechan eficazmente el conocimiento y las habilidades de sus miembros. Se presentan tres tipos de memoria de equipo: memoria de trabajo, memoria a largo plazo y memoria transactiva, con enfoque en cómo el SMT mejora el rendimiento del equipo. El SMT comprende dos elementos: patrones de colaboración y experiencia individual. Al construir un SMT, los equipos liberan la inteligencia colectiva y superan el impacto de los cambios de miembros. El artículo recomienda métodos como el Capability Comb, el Manual del Equipo y la práctica deliberada para ayudar a los equipos a establecer y mejorar rápidamente su SMT.

Componentes Web Isomórficos: Renderizado del Lado del Servidor Simplificado

2024-12-15
Componentes Web Isomórficos: Renderizado del Lado del Servidor Simplificado

La creencia de larga data de que el renderizado del lado del servidor de componentes web es difícil ha sido cuestionada. Este artículo demuestra cómo lograr el renderizado del lado del servidor de componentes web existentes utilizando Happy DOM para emular un entorno de navegador. Se detallan dos métodos: usar la etiqueta `` para renderizado directo y simular el DOM para ejecutar el código del componente y generar HTML. El autor destaca las ventajas de este enfoque: compatibilidad con todos los componentes web, robustez ante fallos de JavaScript y la ausencia de dependencia de frameworks específicos. Esto resuelve el problema del renderizado del lado del servidor para componentes web, ofreciendo una solución flexible y robusta.

SVC16: El Computador Virtual Más Simple Desafía a los Programadores

2024-12-15
SVC16: El Computador Virtual Más Simple Desafía a los Programadores

SVC16 es una computadora virtual minimalista de 16 bits diseñada para la máxima simplicidad. No tiene registros de CPU, realizando todas las operaciones dentro de un único bloque de memoria. El conjunto de instrucciones es extremadamente simplificado, sin funciones sofisticadas como sonido o tamaño de pantalla variable. Los programadores son desafiados a escribir código de máquina y compiladores por sí mismos, creando hazañas increíbles con las herramientas más simples. El proyecto proporciona un emulador para ejecutar programas creados por el usuario e incluso juegos. Este es un proyecto perfecto para aprender los principios de bajo nivel de la computación y mejorar las habilidades de programación.

Railgun Labs presenta Unicorn: Biblioteca de algoritmos Unicode de alto rendimiento

2024-12-15

Railgun Labs ha lanzado Unicorn, una biblioteca de algoritmos Unicode de alta velocidad, conocida por su velocidad, capacidad de integración, compatibilidad multiplataforma y seguridad. Unicorn admite numerosos algoritmos Unicode, incluyendo normalización, conversión de mayúsculas y minúsculas, ordenación y segmentación, y proporciona decodificadores, codificadores y validadores para las codificaciones UTF-8, UTF-16 y UTF-32. La biblioteca es totalmente personalizable y se ha probado exhaustivamente para garantizar su precisión y fiabilidad. Cumple con la norma MISRA C:2012 y es en gran medida segura para subprocesos.

Desarrollo alto rendimiento

Falla de seguridad en el acceso a Internet de Home Assistant

2024-12-15

Frederik Braun intentó usar Home Assistant para el control remoto del hogar inteligente, pero descubrió una vulnerabilidad de seguridad significativa. Si bien Home Assistant ofrece autenticación de nombre de usuario/contraseña y autenticación de dos factores, su incapacidad para manejar URL con credenciales integradas y su requisito de implementación en la ruta raíz impiden capas de seguridad adicionales, como la autenticación del servidor web o las rutas ofuscadas. Esto deja la seguridad de Home Assistant dependiendo únicamente de sus mecanismos internos, creando un riesgo de seguridad. El autor hace un llamamiento a la comunidad de Home Assistant para que mejore su flexibilidad de configuración de seguridad.

Lanzamiento de XFCE 4.20: Soporte experimental para Wayland y numerosas mejoras

2024-12-15

Después de casi dos años de desarrollo, ¡XFCE 4.20 ha sido lanzado oficialmente! Esta versión se centra en la preparación de la base de código para Wayland, ofreciendo ahora soporte experimental para Wayland en la mayoría de los componentes, aunque todavía está en sus etapas iniciales y se recomienda para usuarios avanzados. XFCE 4.20 también cuenta con numerosas características nuevas, correcciones de errores y mejoras, incluyendo escalado de iconos mejorado, una vista de iconos con mejor rendimiento y un administrador de archivos Thunar actualizado. Es importante destacar que el soporte para Wayland aún está incompleto, con algunos componentes y funciones aún por portar.

Implementando un sistema de objetos simple desde cero en Ruby

2024-12-15

Esta publicación de blog detalla cómo construir un sistema de objetos simple en Ruby sin usar clases. El autor utiliza inteligentemente funciones anónimas y tablas hash para implementar conceptos principales de la POO, como la búsqueda de métodos, la herencia prototípica, los mixins y la metaprogramación. Comenzando con una función constructora, el artículo demuestra cómo simular variables privadas e interfaces públicas, recreando efectivamente el comportamiento similar a las clases y la herencia. A través de ejemplos de código claros, los lectores aprenden a crear objetos, definir métodos, implementar herencia y mixins, e incluso construir una característica de metaprogramación rudimentaria similar a `attr_accessor` de Ruby. Es una guía práctica para comprender los fundamentos del sistema de objetos.

Lanzamiento de TeaVM 0.11.0: Nuevo backend WebAssembly

2024-12-15

Se ha lanzado TeaVM 0.11.0, con un nuevo backend WebAssembly como característica principal. El antiguo backend WebAssembly, si bien funcional, tuvo poca adopción debido a las ganancias de rendimiento insignificantes y una mala experiencia para el desarrollador. El nuevo backend, aprovechando la propuesta WebAssembly GC, soluciona estos problemas, mejorando la interacción con las APIs JS del navegador y reduciendo el tamaño del archivo binario. Aunque actualmente es un poco menos rico en funciones que el backend JS, ya admite JSO (API de interacción Java-to-JS), con el objetivo de lograr la paridad en la próxima versión. Esta versión también incluye correcciones de errores en la implementación de BitSet y agrega soporte para varias APIs JS, como la lectura de archivos, los eventos táctiles, la API Popover y Navigator.sendBeacon.

Desarrollo

Adiós a las Reuniones Infinitas: Un Nuevo Enfoque para el Desarrollo de Software de Alta Velocidad

2024-12-15

¿Cansado de reuniones interminables y planificaciones extensas? Este artículo presenta un método de desarrollo de software de alta eficiencia: centrado en el código, iteración rápida. El autor utiliza la repostería como ejemplo para ilustrar el concepto de lograr la solución óptima mediante la experimentación rápida, las pruebas frecuentes y la mejora continua. Este método enfatiza la reducción de la documentación, expresando ideas directamente en código, utilizando datos simulados y herramientas de recarga en caliente para acelerar el desarrollo y mejorando la legibilidad del código mediante un estilo de código conciso y convenciones de nomenclatura. El autor aboga por dividir los proyectos en archivos ejecutables de forma independiente, minimizando el tiempo de reinicio y utilizando herramientas de lenguaje predeterminadas para la depuración. Aunque este método pueda parecer un "laboratorio caótico", puede completar proyectos de manera eficiente y evitar la redundancia e ineficiencia de los métodos tradicionales.

1 2 207 208 209 210 212 214 215