Category: Desarrollo

Descubrimientos Múltiples: El Caso de los Árboles Prolly

2025-07-01
Descubrimientos Múltiples: El Caso de los Árboles Prolly

Los árboles Prolly, una estructura de datos novedosa crucial para Dolt, no se inventaron una sola vez, sino al menos cuatro veces de forma independiente. Desde el proyecto bup de Avery Pennarun en 2009 (que precede incluso a Noms), hasta la creación del término por Noms en 2015, las 'Árboles de Búsqueda Merkle' de Inria en 2019 y los 'Árboles Merkle Definidos por Contenido' de la Universidad DePaul en 2020, la misma estructura de datos fundamental surgió repetidamente en diferentes contextos. Esto destaca el fenómeno común de los descubrimientos múltiples en la ciencia y subraya el papel de la demanda en la innovación tecnológica. Los autores, de DoltHub, discuten este fenómeno y sus implicaciones para la tecnología futura, utilizando su propia experiencia con los árboles Prolly como un estudio de caso.

Bloqueador de traducción de YouTube de código abierto

2025-07-01
Bloqueador de traducción de YouTube de código abierto

Este complemento de YouTube de código abierto impide la traducción automática en YouTube. Mantiene los títulos y descripciones de los videos en su idioma original, establece como predeterminada la pista de audio original (incluidos los Shorts) y te permite elegir el idioma de los subtítulos (o los desactiva si no están disponibles; los subtítulos generados automáticamente siempre se ignoran), garantizando una experiencia de visualización auténtica.

Desarrollo

Pluto: Un dialecto Lua mejorado

2025-07-01
Pluto: Un dialecto Lua mejorado

Pluto es un potente dialecto de Lua diseñado para la programación de propósito general. Ofrece un desarrollo acelerado a través de una biblioteca estándar mejorada y nuevas características de sintaxis, como instrucciones switch, operadores compuestos y expresiones ternarias. Si bien es ampliamente compatible con Lua 5.4, un modo de compatibilidad resuelve posibles conflictos de nuevas palabras clave. Pluto ejecuta bytecode Lua y la mayoría de las características de Pluto generan bytecode compatible con Lua. La documentación completa, las herramientas y los detalles sobre las mejoras están disponibles en su sitio web de código abierto. Pruébelo en el playground interactivo del navegador o descargue binarios precompilados.

Desarrollo

CLIs Rust mejoradas: Diseño basado en tipos para robustez y mantenimiento

2025-07-01
CLIs Rust mejoradas: Diseño basado en tipos para robustez y mantenimiento

Este artículo defiende un enfoque basado en tipos para construir interfaces de línea de comandos (CLIs) en Rust utilizando la crate clap. En lugar de depender del análisis de cadenas, el autor aboga por definir la interfaz CLI utilizando el sistema de tipos de Rust. Esto ofrece varias ventajas clave: mejora la mantenibilidad y legibilidad del código, reduce el área de superficie de las pruebas y ofrece un mejor soporte de simulacros para las pruebas unitarias, y facilita el versionamiento semántico. El artículo detalla las características derive y env de clap, mostrando cómo definir argumentos de línea de comandos y variables de entorno utilizando tipos, lo que resulta en CLIs más robustas y fáciles de mantener.

Desarrollo

Hooks de Claude Code: Extendiendo la Funcionalidad con Comandos de Shell Personalizados

2025-07-01
Hooks de Claude Code: Extendiendo la Funcionalidad con Comandos de Shell Personalizados

Claude Code introduce hooks, comandos de shell definidos por el usuario que se ejecutan en varias etapas de su ciclo de vida. Esto permite un control determinista sobre el comportamiento de Claude Code, asegurando que acciones como el formateo automático de código, el registro en el log y las verificaciones de permisos personalizados siempre ocurran. Los hooks transforman las sugerencias en código confiable a nivel de aplicación, mejorando la funcionalidad y simplificando los flujos de trabajo. Si bien son poderosos, los usuarios deben priorizar la seguridad y garantizar que los comandos sean seguros y confiables.

Desarrollo

arXivLabs: Colaboraciones comunitarias en funciones de arXiv

2025-07-01
arXivLabs: Colaboraciones comunitarias en funciones de arXiv

arXivLabs es un marco que permite el desarrollo colaborativo y el intercambio de nuevas funciones de arXiv directamente en el sitio web. Los participantes deben adoptar los valores de arXiv de apertura, comunidad, excelencia y privacidad de datos del usuario. ¿Tienes una idea para mejorar la comunidad de arXiv? Obtén más información sobre arXivLabs.

Desarrollo

Qualcomm de código abierto EUD: Depuración en circuito integrado a través de USB

2025-07-01
Qualcomm de código abierto EUD: Depuración en circuito integrado a través de USB

Qualcomm lanzó silenciosamente el código fuente para su interfaz de depuración USB integrada (EUD), permitiendo a los desarrolladores realizar la depuración SWD directamente a través de USB sin herramientas JTAG externas. EUD, integrado en casi todos los SoC de Qualcomm desde ~2018, proporciona acceso de depuración a CPUs y coprocesadores Hexagon. Si bien el código fuente inicial tenía algunos problemas de compilación, la comunidad los solucionó rápidamente. Actualmente admite chips como Snapdragon 845, 855 y 865, simplificando la depuración de U-Boot y el mundo seguro, pero el soporte de depuración del kernel es limitado y el soporte SMP está incompleto.

Desarrollo

Nimtable: El Panel de Control para Apache Iceberg™

2025-07-01
Nimtable: El Panel de Control para Apache Iceberg™

Nimtable es una plataforma ligera y fácil de usar para monitorear, optimizar y gobernar su data lakehouse basado en Iceberg. Su interfaz web simplifica la navegación por tablas, la ejecución de consultas, el análisis de la distribución de archivos y la optimización de los diseños de almacenamiento. Con soporte para múltiples catálogos (REST Catalog, AWS Glue, tablas AWS S3 y PostgreSQL) e integración perfecta con almacenamiento de objetos como S3, Nimtable ofrece consultas interactivas, asistencia de IA (incluidos resúmenes de tablas generados por IA y sugerencias inteligentes), análisis de la distribución de archivos y funciones de optimización de tablas (como la compactación de archivos y la gestión de la caducidad de instantáneas).

Desarrollo Gestión de Datos

Genéricos con seguridad de tipos en C: Un uso inteligente de uniones

2025-07-01
Genéricos con seguridad de tipos en C: Un uso inteligente de uniones

Este artículo presenta una técnica para implementar estructuras de datos genéricas con seguridad de tipos en C, utilizando uniones para asociar información de tipo a una estructura de datos genérica. El autor ilustra el enfoque con una lista enlazada, mostrando cómo las macros y las uniones permiten la verificación de tipos en tiempo de compilación, evitando la inseguridad de tipos y la hinchazón de código de los métodos genéricos tradicionales. Se realizan comparaciones con enfoques `void*` y miembros de matriz flexibles, culminando en una solución que proporciona seguridad de tipos en tiempo de compilación, lo que resulta en errores de compilación cuando se agregan tipos incorrectos.

Desarrollo

Optimización del compilador LLVM con asistencia de IA: Una historia de serialización ASN.1

2025-07-01

Mientras mantenía una biblioteca Rust para la serialización ASN.1 DER, el autor descubrió código ineficiente en el cálculo de la longitud de los enteros. Experimentó con Claude IA para optimizar el código y usó la herramienta de verificación formal Alive2 para validar los resultados. Sorprendentemente, Claude IA incluso ayudó a generar un parche para una optimización del compilador LLVM, que pasó la revisión de código y finalmente se envió al proyecto LLVM. Esto demuestra el inmenso potencial de la IA en el desarrollo de software, particularmente en la optimización de compiladores, a la vez que destaca la importancia de la revisión manual al usar herramientas de IA.

Desarrollo

Ingeniería inversa de BotID de Vercel: ¿Un sistema de protección contra bots sorprendentemente básico?

2025-06-30

Esta publicación profundiza en el sistema anti-bot recientemente lanzado por Vercel, BotID, centrándose en su modo básico gratuito. El autor revela que los mecanismos de detección actuales del modo básico son sorprendentemente rudimentarios y fáciles de eludir manipulando las propiedades del navegador. Si bien BotID recopila varias señales, incluidas las huellas digitales del navegador y la información de la GPU, su procesamiento de estas señales es básico, lo que hace que falle en la identificación de bots sofisticados. El autor especula que Vercel está utilizando el modo básico para recopilar datos silenciosamente para entrenar modelos anti-bot más robustos en el futuro. El modo Deep Analysis de pago, que utiliza scripts anti-bot de Kasada, es significativamente más complejo que el modo básico.

Desarrollo

TokenDagger: Implementación de Alto Rendimiento de TikToken de OpenAI

2025-06-30
TokenDagger: Implementación de Alto Rendimiento de TikToken de OpenAI

TokenDagger es una alternativa de alto rendimiento a TikToken de OpenAI, optimizado para el procesamiento de texto a gran escala. Las pruebas de rendimiento muestran que TokenDagger logra una velocidad hasta 4 veces superior en la tokenización de código y un aumento del rendimiento del 2x en comparación con TikToken. Aprovecha un motor de expresiones regulares PCRE2 optimizado y un algoritmo BPE simplificado para mitigar el impacto en el rendimiento de los vocabularios de tokens especiales grandes, TokenDagger proporciona un reemplazo directo. La instalación y las pruebas de rendimiento son sencillas con unos pocos comandos simples.

Desarrollo

Ensō (Vampiro Oculto Keanu) en Beta Pública

2025-06-30
Ensō (Vampiro Oculto Keanu) en Beta Pública

¡La nueva versión de Ensō, con nombre en clave "Vampiro Oculto Keanu", ya está disponible para pruebas públicas! Esta versión se centra en una IU simplificada, una accesibilidad mejorada y una privacidad mejorada. Las nuevas funciones incluyen un "Modo Cafetería" para ocultar texto, varios temas centrados en la accesibilidad y un motor de renderizado de texto refinado. Las actualizaciones futuras incluirán soporte RTL y mucho más, pero esta versión mejora significativamente la experiencia del usuario.

Alias de punteros C y optimización del compilador: Un juego de seguridad del código fuente

2025-06-30
Alias de punteros C y optimización del compilador: Un juego de seguridad del código fuente

Este artículo profundiza en el impacto del alias de punteros en la optimización de programas en C. El alias de punteros se refiere a dos punteros que apuntan al mismo objeto de memoria. Los compiladores, durante la optimización del código, deben realizar un análisis de alias para determinar si los punteros son alias. Un juicio erróneo puede provocar errores en el programa o una degradación del rendimiento. El artículo utiliza un ejemplo de cálculo recíproco para ilustrar que, cuando dos punteros pueden ser alias, el compilador no puede realizar ciertas optimizaciones, ya que esto puede alterar el algoritmo del programa. El autor también analiza los mecanismos en C que ayudan en el análisis de alias, como el calificador de puntero restrict y el calificador volatile, junto con técnicas avanzadas de análisis de alias, como el análisis de alias basado en tipos y el análisis de alias basado en flujo. Finalmente, el autor propone un nuevo modelo de análisis de alias de punteros que considera la vida útil del puntero y el flujo de información, con el objetivo de mejorar la eficiencia de optimización del compilador y la seguridad del programa.

Desarrollo Alias de Punteros

Modelando los límites de velocidad de la API como desigualdades diofánticas

2025-06-30

Este artículo explora un enfoque matemático, utilizando desigualdades diofánticas, para resolver problemas de limitación de velocidad de la API. El autor utiliza un escenario con un límite de 10 solicitudes por hora y tres intentos de reintento por tarea como ejemplo, mostrando cómo transformar el problema de programación de tareas en un problema de viabilidad de enteros. Al analizar el patrón de reintento de tareas y las ventanas de tiempo, el autor establece un modelo de desigualdad y usa Go para escribir un programa que determina si se puede programar una nueva tarea de forma segura sin exceder el límite de velocidad. El artículo también menciona la optimización del algoritmo para reducir la complejidad del tiempo de O(n^2) a O(n*log(n)).

Compilación cruzada de enlaces Raylib Lisp y juegos para Windows desde Linux

2025-06-30

Este artículo detalla el proceso de compilación cruzada de código C y un programa SBCL Lisp para Windows desde Linux, utilizando Wine para ejecutar un SBCL de Windows en un Emacs basado en Linux, y cargando archivos .dll en la imagen Lisp para producir un ejecutable .exe. El autor describe la compilación cruzada de código C usando mingw-w64-toolchain, la configuración de la biblioteca Raylib para la compilación cruzada para generar archivos .dll, la instalación y el uso de SBCL en Wine, el aprovechamiento de vend para la gestión de dependencias y, finalmente, el uso de sb-ext:save-lisp-and-die para crear el ejecutable de Windows.

Desarrollo

arXivLabs: Proyectos experimentales con colaboradores de la comunidad

2025-06-30
arXivLabs: Proyectos experimentales con colaboradores de la comunidad

arXivLabs es un marco que permite a los colaboradores desarrollar y compartir nuevas funciones de arXiv directamente en nuestro sitio web. Tanto las personas como las organizaciones que trabajan con arXivLabs han abrazado y aceptado nuestros valores de apertura, comunidad, excelencia y privacidad de los datos de los usuarios. arXiv está comprometido con estos valores y solo trabaja con socios que los respetan. ¿Tienes una idea para un proyecto que agregará valor a la comunidad de arXiv? Obtén más información sobre arXivLabs.

Desarrollo

Manejo de Errores en Rust: Evolucionando de Enums Monolíticos a Conjuntos de Errores Elegantes

2025-06-30

El manejo de errores en Rust ha sido un punto de controversia. El enfoque tradicional de definir enums de error masivos por módulo o crate conduce a código hinchado y difícil de mantener. Este artículo explora alternativas: representar errores individuales con structs y gestionar conjuntos de errores utilizando herramientas como el crate `error_set`. `error_set` simplifica la definición y conversión de enums de error mediante macros, soportando la composición y las relaciones de subconjuntos entre conjuntos de errores para un manejo de errores más limpio y eficiente. Si bien aún se necesita trabajo adicional para errores complejos que requieren información adicional, `error_set` proporciona un enfoque más elegante y mantenible para el manejo de errores en Rust.

Desarrollo

Despachador de Eventos en Proceso Rápido para Go

2025-06-30
Despachador de Eventos en Proceso Rápido para Go

Este paquete de Go ofrece un despachador de eventos en proceso de alto rendimiento, ideal para desacoplar módulos y permitir el manejo asíncrono de eventos. Con velocidades de 4 a 10 veces más rápidas que los canales (¡procesando millones de eventos por segundo!), admite operaciones tanto síncronas como asíncronas, con un enfoque en la simplicidad. Perfecto para desacoplar módulos intraptocesos, pub/sub ligero y escenarios de alto rendimiento, pero no es adecuado para la comunicación entre procesos, la persistencia de eventos o el enrutamiento avanzado.

Escalando la creación de contenedores de clientes con la API de Depot

2025-06-30
Escalando la creación de contenedores de clientes con la API de Depot

Muchas plataformas SaaS necesitan ejecutar código en nombre de sus clientes, lo que presenta desafíos en la creación de contenedores. Esta publicación muestra cómo construir herramientas con la API de Depot para crear entornos de compilación aislados para una plataforma SaaS multiinquilino. Utilizando un cliente Go, puedes crear proyectos, administrar cachés de proyectos, recuperar métricas de compilación y registros. La API de Depot utiliza Buf.build, ofreciendo bibliotecas de clientes para varios lenguajes, lo que facilita la integración en infraestructuras existentes. El artículo detalla la creación, eliminación y restablecimiento de cachés de proyectos, la recuperación de métricas de compilación y detalles de las etapas, permitiendo en última instancia una infraestructura de contenedores de clientes escalable y segura.

Dataclasses de Python: `kw_only=True` para mayor mantenibilidad y extensibilidad

2025-06-30

Los dataclasses de Python ofrecen una forma conveniente de crear clases de datos, pero el método `__init__` predeterminado utiliza argumentos posicionales, lo que puede provocar dificultades de mantenimiento y extensión. Este artículo presenta el parámetro `kw_only=True`, que obliga al uso de argumentos de palabra clave, evitando problemas causados por cambios en el orden de los argumentos y permitiendo que las subclases añadan campos obligatorios de forma flexible. Si bien este parámetro se introdujo en Python 3.10, el artículo también proporciona una solución para la compatibilidad con versiones anteriores.

Desarrollo

La Mala Interpretación de Knuth: 'La Optimización Prematura es la Raíz de Todo Mal'

2025-06-30
La Mala Interpretación de Knuth: 'La Optimización Prematura es la Raíz de Todo Mal'

Este artículo profundiza en el significado real de la famosa cita de Donald Knuth: "La optimización prematura es la raíz de todo mal". Al analizar ejemplos del artículo de Knuth sobre el uso de instrucciones goto e la implementación de multiconjuntos, el autor demuestra que la cita no desanima por completo las pequeñas optimizaciones. Experimentos que comparan diferentes implementaciones revelan que incluso las optimizaciones menores (como el desdoblamiento de bucles) pueden generar ganancias de rendimiento significativas para el código crítico y las funciones de biblioteca utilizadas con frecuencia, dependiendo de los resultados de las pruebas de rendimiento. El autor aboga, en última instancia, por el uso de funciones de biblioteca estándar bien optimizadas para evitar esfuerzos de optimización innecesarios y aprovechar las capacidades de optimización de los compiladores modernos.

Desarrollo

El Libro de Shaders: Una Guía Paso a Paso para Shaders de Fragmentos

2025-06-30
El Libro de Shaders: Una Guía Paso a Paso para Shaders de Fragmentos

El Libro de Shaders, escrito por Patricio Gonzalez Vivo y Jen Lowe, es una guía paso a paso para comprender los shaders de fragmentos. Aborda con suavidad las complejidades de este tema abstracto. El libro incluye biografías de los autores y agradecimientos a numerosos contribuidores y traductores que hicieron posibles las versiones en varios idiomas.

Desarrollo

Eludiendo la Detección de Máquina Virtual de Malware: Simulando un ventilador de CPU mediante SMBIOS personalizado

2025-06-30

El malware a menudo comprueba la ausencia de componentes de hardware que normalmente no se emulan en máquinas virtuales (como un ventilador de CPU) para evitar el análisis. Esta publicación detalla cómo eludir esta detección modificando los datos SMBIOS de la máquina virtual para simular un ventilador de CPU. El autor explica minuciosamente los pasos para entornos Xen y QEMU/KVM, incluida la obtención de datos SMBIOS, la creación de un archivo SMBIOS personalizado y la configuración de la VM. La publicación también destaca la necesidad de manejar adicionalmente los datos del SMBIOS Tipo 28 (sonda de temperatura) en Xen para un engaño exitoso del WMI.

Desarrollo

NativeJIT: Un Compilador JIT de Alto Rendimiento para Bing

2025-06-30
NativeJIT: Un Compilador JIT de Alto Rendimiento para Bing

NativeJIT es una biblioteca de código abierto y multiplataforma para la compilación just-in-time de alto rendimiento de expresiones que involucran estructuras de datos C. Desarrollada por el equipo de Bing para su uso en el motor de búsqueda Bing, es crucial para la puntuación de documentos basada en coincidencias de palabras clave y la intención del usuario. Ligera y rápida, solo depende del tiempo de ejecución C++ estándar y se ejecuta en Linux, OSX y Windows. Su código optimizado, particularmente su asignación de registros, permite el procesamiento eficiente de consultas a gran escala.

Desarrollo

Computadora de Desarrollo Económica con Ampere Altra

2025-06-30
Computadora de Desarrollo Económica con Ampere Altra

Necesitando una máquina de desarrollo con soporte para tamaño de página de 64k, el autor construyó un sistema basado en Ampere Altra. Eligió una placa base AsrockRack ALTRA8BUD-1L2T, un procesador Q80-30 usado (80 núcleos, 3,0 GHz), un refrigerador Arctic Freezer 4U-M y ocho módulos de RAM SK Hynix HMA82GR7CJR8N-XN de 16 GB. Después de algunos problemas, el sistema arrancó correctamente. También seleccionó una caja y una fuente de alimentación adecuadas, añadiendo almacenamiento NVME y una tarjeta gráfica. El coste total fue de alrededor de 1800 €, ligeramente por encima del presupuesto. Los planes futuros incluyen la instalación de Fedora 42, la creación de máquinas virtuales RHEL y CentOS Stream, experimentos con diferentes GPU y el uso como escritorio.

Análisis de Rendimiento LLVM-MCA: Trampas de la Optimización de Vectorización

2025-06-29
Análisis de Rendimiento LLVM-MCA: Trampas de la Optimización de Vectorización

El autor encontró un problema de degradación del rendimiento al vectorizar código usando ARM NEON. El código inicial usaba cinco instrucciones de carga (5L), mientras que la versión optimizada usaba dos instrucciones de carga y tres instrucciones de extensión (2L3E) para reducir los accesos a la memoria. Sorprendentemente, la versión 2L3E fue más lenta. Usando LLVM-MCA para el análisis de rendimiento, se descubrió que 2L3E causaba cuellos de botella en las unidades de ejecución de la CPU, una utilización de recursos desequilibrada y dependencias de instrucciones más fuertes, lo que llevaba a una regresión del rendimiento. La versión 5L tuvo un mejor rendimiento debido a su uso más equilibrado de los recursos y las instrucciones de carga independientes. Este estudio de caso destaca cómo las optimizaciones aparentemente sólidas pueden resultar en una degradación del rendimiento si no se consideran la contención de recursos de la CPU y las dependencias de las instrucciones; LLVM-MCA resulta una herramienta valiosa para analizar estos problemas.

Desarrollo vectorización

Filtros de Bloom: Una Estructura de Datos Probabilística para la Búsqueda Eficiente de Miembros de Conjuntos

2025-06-29

Los filtros de Bloom son estructuras de datos probabilísticas diseñadas para probar la pertenencia a conjuntos de forma rápida y eficiente en memoria. Utilizan múltiples funciones hash para asignar elementos a bits en un vector de bits. Si todos los bits correspondientes son 1, el elemento *puede* estar presente; de lo contrario, definitivamente está ausente. Aunque propensos a falsos positivos, su velocidad y eficiencia espacial los hacen ideales para conjuntos de datos grandes. Este artículo detalla los principios de los filtros de Bloom, la selección de la función hash, el dimensionamiento, las aplicaciones y ejemplos de implementación en varios sistemas.

Desarrollo

Octelium: Una plataforma revolucionaria de acceso de confianza cero

2025-06-29
Octelium: Una plataforma revolucionaria de acceso de confianza cero

Octelium es una plataforma unificada, gratuita y de código abierto, autohospedada, para el acceso a recursos de confianza cero, diseñada como una alternativa moderna a las VPN y herramientas similares. Es increíblemente versátil, funcionando como una VPN de configuración cero, plataforma ZTNA, infraestructura de túneles seguros, puerta de enlace de API, puerta de enlace de IA, PaaS para alojamiento seguro y anónimo de aplicaciones en contenedores, puerta de enlace de Kubernetes e incluso una infraestructura de homelab. Octelium ofrece una arquitectura de confianza cero (ZTA) escalable para el acceso seguro basado en la identidad, consciente de la capa de aplicación (L7), sin secretos, a través de túneles WireGuard/QUIC y acceso público sin cliente.

Desarrollo Confianza Cero

La Guerra de Derechos de Autor Oculta Detrás del Plug and Play de Windows 95

2025-06-29
La Guerra de Derechos de Autor Oculta Detrás del Plug and Play de Windows 95

Implementar Plug and Play en Windows 95 no fue tarea fácil. Para hacer que el hardware antiguo funcionara con la nueva característica, los ingenieros emplearon soluciones ingeniosas. Un ejemplo curioso implicó a fabricantes que agregaron la cadena "Not Copyright Fabrikam Computer" a su BIOS. Este fue un truco inteligente para engañar a la verificación de licencias de LitWare Word Processor, desbloqueando la versión completa sin ser un PC Fabrikam con licencia. Esto destaca los desafíos de la compatibilidad de PC antiguos y los esfuerzos realizados por los fabricantes para obtener licencias de software.

Desarrollo
1 2 49 50 51 53 55 56 57 214 215