Category: Desarrollo

Python-BPF: Una Nueva Forma de Escribir Programas eBPF en Python

2025-09-15

Python-BPF es una biblioteca de código abierto revolucionaria que permite escribir programas eBPF completamente en Python, compilándolos directamente en archivos de objeto. Esto elimina el enfoque engorroso anterior de incrustar código C dentro de Python. Aprovechando el AST de Python y el LLVM IR para la compilación, Python-BPF admite flujo de control, mapas hash, funciones auxiliares y más, simplificando significativamente el desarrollo de eBPF y ofreciendo una nueva opción lista para producción.

Desarrollo

Titania: Un Lenguaje de Programación para Enseñar Desarrollo de Compiladores

2025-09-15
Titania: Un Lenguaje de Programación para Enseñar Desarrollo de Compiladores

Titania, basada en el lenguaje Oberon-07 de Niklaus Wirth, está diseñada como una herramienta educativa para aprender desarrollo de compiladores. Su sintaxis limpia abarca conceptos esenciales como módulos, procedimientos y tipos de datos, e incluye funciones integradas para operaciones numéricas, manipulación de bits y gestión de memoria. Aprender Titania proporciona una comprensión profunda de los principios de los compiladores y el diseño de lenguajes.

Objetos de Página: Haciendo tus pruebas de IU menos frágiles

2025-09-15
Objetos de Página: Haciendo tus pruebas de IU menos frágiles

Probar páginas web requiere interactuar con elementos, pero manipular directamente el HTML hace que las pruebas sean frágiles. Los Objetos de Página resuelven esto encapsulando una página o fragmento como una API específica de la aplicación. Esto permite interactuar con elementos sin acceder directamente al HTML. El objetivo es imitar las acciones del usuario, proporcionando una interfaz limpia que oculta los widgets subyacentes. Los campos de texto usan accesores de cadena, las casillas de verificación booleanos y los botones métodos orientados a la acción. Los buenos Objetos de Página modelan la perspectiva del usuario, no la estructura interna de la IU, devolviendo tipos de datos básicos u otros Objetos de Página. Existe un debate sobre la inclusión de aserciones dentro de los Objetos de Página. El autor prefiere mantener las aserciones en los scripts de prueba, evitando Objetos de Página hinchados y utilizando bibliotecas de aserción para reducir la redundancia. Este patrón funciona en varias tecnologías de IU, útil no solo para pruebas, sino también como una interfaz de script para aplicaciones.

Desarrollo

Muerte a las Clases de Tipo: Explorando el Sistema de Módulos Backpack en Haskell

2025-09-15

Este artículo explora la sustitución de clases de tipo por el sistema de módulos Backpack en Haskell. El autor demuestra, a través de un ejemplo llamado "Death", cómo definir firmas para tipos como Functor e implementar diferentes instancias (por ejemplo, Maybe e IO). La configuración de Cabal permite la selección flexible de implementaciones, como usar una mónada de estado para simular IO durante las pruebas. Este enfoque, aunque requiere más configuración de Cabal, ofrece mensajes de error más claros, un control más flexible y posibles ventajas de rendimiento. El artículo concluye con una filosofía de programación minimalista, argumentando que la simplificación conduce a una mejor legibilidad y mantenibilidad.

Desarrollo

Instalación Simplificada de Omarchy en CachyOS

2025-09-15
Instalación Simplificada de Omarchy en CachyOS

Este proyecto proporciona un script para instalar la configuración de escritorio Omarchy de DHH en CachyOS, una distribución Arch Linux optimizada para rendimiento. Omarchy, una configuración basada en Hyprland, prioriza la simplicidad y la productividad. El script simplifica la instalación, pero requiere familiaridad con Arch Linux. No instala CachyOS ni maneja el particionamiento, formateo o cifrado; los usuarios deben hacerlo previamente. El script opta por Yay (asistente AUR) y Fish (shell), manteniendo Tealdeer de CachyOS y Mise de Omarchy. Importante: no instala un gestor de visualización ni inicia automáticamente Hyprland a menos que ya esté instalado por CachyOS. No se proporciona ninguna garantía; úsalo bajo tu propio riesgo.

Desarrollo

Análisis de los números de versión de paquetes npm con un script Bun

2025-09-15

Este script Bun analiza los números de versión de los paquetes npm. Obtiene todos los ID de paquetes de la API de replicación npm y luego recupera la información de versión de cada paquete de la API de registro npm. El script calcula el número total de versiones y el número más grande dentro de los números de versión para cada paquete, filtrando los paquetes problemáticos conocidos. Luego, muestra listas de paquetes con más versiones y los números más grandes en sus versiones. Esto ayuda a identificar patrones y problemas potenciales en la gestión de versiones de paquetes npm.

arXivLabs: Creando nuevas funciones de arXiv con la colaboración de la comunidad

2025-09-15
arXivLabs: Creando nuevas funciones de arXiv con la colaboración de la comunidad

arXivLabs es un marco que permite a los desarrolladores colaborar con la comunidad de arXiv para crear y compartir nuevas funciones directamente en el sitio web de arXiv. Los participantes deben aceptar los valores de arXiv de apertura, comunidad, excelencia y privacidad de los datos de los usuarios. ¿Tiene alguna idea para mejorar la comunidad de arXiv? ¡Aprenda más sobre arXivLabs!

Desarrollo

GrapheneOS: Un sistema operativo Android centrado en la seguridad

2025-09-14
GrapheneOS: Un sistema operativo Android centrado en la seguridad

GrapheneOS (GOS) es un sistema operativo basado en Android que se centra en la seguridad y solo es compatible con dispositivos Google Pixel. Utiliza perfiles de usuario múltiples para proporcionar una privacidad robusta, con cifrado y permisos independientes para cada perfil, creando eficazmente sistemas aislados dentro de tu teléfono. Los usuarios pueden controlar finamente los permisos de cada perfil, incluso detener completamente la ejecución en segundo plano. La instalación es sencilla, las actualizaciones son fluidas y la gestión de permisos de aplicaciones es potente. Si bien es ligeramente menos intuitivo que Android estándar, GOS ofrece un control sin precedentes para usuarios preocupados por la seguridad y la privacidad, convirtiéndose en una alternativa atractiva.

Desarrollo

Kernel de Sistema Operativo de Tiempo Compartido Mínimo en RISC-V con Zig

2025-09-14
Kernel de Sistema Operativo de Tiempo Compartido Mínimo en RISC-V con Zig

Esta publicación describe un kernel de sistema operativo de tiempo compartido mínimo, implementado en RISC-V utilizando el lenguaje de programación Zig. El proyecto, una nueva versión de una tarea de sistemas operativos de grado, aprovecha las herramientas modernas y la arquitectura RISC-V. Incluye hilos definidos estáticamente, llamadas al sistema entre hilos y programación round-robin mediante interrupciones del temporizador. Se implementa una virtualización básica de hilos, donde cada hilo tiene una pila y un contexto de registro privados. El código es de código abierto, y el autor proporciona un recorrido detallado de la implementación y explicaciones del código, convirtiéndolo en un recurso valioso para estudiantes de software de sistemas y arquitectura de computadoras.

Desarrollo

Caches Inline de SpiderMonkey: Más Allá del Caché Simple

2025-09-14

Esta publicación profundiza en la implementación de las cachés en línea (IC) dentro del motor JavaScript SpiderMonkey. A diferencia del almacenamiento en caché tradicional, la IC de SpiderMonkey es una técnica de código automodificable. Inserta una serie de stubs en los sitios de llamada, seleccionando dinámicamente rutas de ejecución eficientes en función de los tipos de entrada. La primera llamada ejecuta una ruta de respaldo y genera stubs correspondientes en función del resultado. Las llamadas posteriores del mismo tipo alcanzan la caché, mejorando significativamente la eficiencia. El artículo utiliza la suma de JavaScript como ejemplo para explicar cómo funciona la IC y menciona la arquitectura CacheIR más reciente de SpiderMonkey, que abstrae los detalles de las IC para permitir el intercambio entre diferentes compiladores.

Desarrollo caché en línea

SV2TTS en tiempo real: Aprendizaje por Transferencia para la Síntesis de Texto a Voz Multilocutor

2025-09-14
SV2TTS en tiempo real: Aprendizaje por Transferencia para la Síntesis de Texto a Voz Multilocutor

Este proyecto de código abierto implementa la síntesis de texto a voz (SV2TTS) multilingüe en tiempo real utilizando el aprendizaje por transferencia desde la verificación del hablante, basado en la tesis de maestría del autor. Es un marco de aprendizaje profundo en tres etapas: crear una representación digital de la voz a partir de clips de audio cortos, y luego usar esta representación para generar voz a partir de texto arbitrario. Si bien el proyecto es antiguo y puede tener una calidad inferior a las alternativas comerciales, admite Windows y Linux, y se recomienda la aceleración de GPU. Se proporcionan instrucciones detalladas de instalación y uso, junto con soporte para varios conjuntos de datos.

Desentrañando las funciones y cierres en Rust: Una inmersión profunda

2025-09-14
Desentrañando las funciones y cierres en Rust: Una inmersión profunda

Las funciones y los cierres en Rust son una fuente de confusión para muchos principiantes. Esta publicación profundiza en los mecanismos subyacentes del sistema de funciones y cierres de Rust, explicando las relaciones entre los elementos de función, los punteros de función y los tres rasgos de cierre: Fn, FnMut y FnOnce. Revela cómo el compilador transforma los cierres en structs anónimos y las optimizaciones del compilador detrás de las llamadas a funciones aparentemente simples. Comprender estos mecanismos subyacentes permite a los desarrolladores escribir código Rust más eficiente y libre de errores, al comprender cómo los diferentes modos de captura de cierre impactan en el comportamiento.

Desarrollo

Backpropagation Eficiente: Simplificando Derivadas de Transformaciones Lineales con Einsum

2025-09-14

Esta publicación presenta un ingenioso truco de backpropagation que simplifica la derivación de cualquier expresión einsum mediante un simple intercambio de letras. Einsum es una forma concisa de expresar transformaciones lineales como la multiplicación de matrices, productos punto, productos de Hadamard y más. El artículo utiliza la multiplicación de matrices como ejemplo, mostrando cómo realizar la propagación hacia adelante y hacia atrás usando einsum y verificando los resultados con JAX. Este método evita derivaciones complejas, simplificando significativamente los cálculos de backpropagation en el aprendizaje profundo.

Constructor de consultas de observabilidad: Cuatro años de iteración centrados en la experiencia del usuario

2025-09-14
Constructor de consultas de observabilidad: Cuatro años de iteración centrados en la experiencia del usuario

Una empresa iteró tres veces en su constructor de consultas durante cuatro años. Las versiones iniciales se basaron en suposiciones erróneas, lo que provocó problemas de usabilidad incluso para ingenieros sénior. Las versiones V3 y V4 simplificaron demasiado, careciendo de expresiones booleanas complejas y soporte eficaz para registros. A través de un amplio soporte al usuario y comentarios, reconocieron la importancia de la experiencia del usuario y lanzaron la versión V5. El principio central del V5: 'Dejar de tomar decisiones por los usuarios'. Empodera a los usuarios con más control y una interfaz más intuitiva, con capacidades potentes como anidamiento arbitrario, reglas de precedencia y consultas entre tipos de datos. El V5 recibió comentarios extremadamente positivos; los usuarios incluso abandonaron el SQL sin procesar a favor del constructor. Los planes futuros incluyen actualizaciones incrementales que agregan subconsultas y uniones, mejorando continuamente la experiencia del usuario.

El sorprendente regreso de Perl al Top 10 de TIOBE: El resurgimiento de un lenguaje clásico

2025-09-14

La reciente entrada de Perl en el top 10 del índice TIOBE, después de un período de relativa calma, ha generado debates significativos. Este resurgimiento no se debe únicamente a avances técnicos, sino a una confluencia de factores. El gran volumen de libros sobre Perl disponibles en Amazon, superando a los de lenguajes como PHP y Rust, proporciona una base significativa de recursos de aprendizaje. Además, el desarrollo continuo de Perl 5, junto con la desaparición de Perl 6 (Raku), ha resuelto la incertidumbre de la comunidad durante mucho tiempo. Fundamentalmente, Perl mantiene sus puntos fuertes en el procesamiento de texto, la integración perfecta con Linux/shell y la sintaxis expresiva, manteniendo su relevancia en la manipulación de datos y la administración de sistemas. Aunque criticado por su sintaxis a veces oscura, la flexibilidad y el poder de Perl continúan resonando en áreas de nicho.

Desarrollo

UltraPlot: Un envoltorio conciso de Matplotlib para gráficos impresionantes

2025-09-14
UltraPlot: Un envoltorio conciso de Matplotlib para gráficos impresionantes

UltraPlot es un envoltorio conciso de Matplotlib diseñado para crear gráficos hermosos y de calidad para publicación. Construido sobre ProPlot y actualizado para Matplotlib moderno (3.9.0+), simplifica la creación de diseños complejos de múltiples paneles, gráficos cartesianos, proyecciones y mapas, barras de color y leyendas, inserciones y paneles, y mapas de color visualmente atractivos. Fácilmente instalable a través de pip o conda, con documentación completa disponible.

Desarrollo

El Futuro de la Programación Visual: Más Allá de Nodos y Cables

2025-09-14
El Futuro de la Programación Visual: Más Allá de Nodos y Cables

Este artículo explora las limitaciones de la programación visual, argumentando que durante mucho tiempo ha estado atrapada en el paradigma de nodos y cables, descuidando el principio de "la forma sigue a la función". Utilizando CellPond como ejemplo, el autor destaca que su éxito radica en definir primero la función subyacente (solo cuatro operaciones), con la forma surgiendo naturalmente. El autor profundiza en el triple significado de "función": naturaleza intrínseca, racionalidad y álgebra, y argumenta que la programación visual debería centrarse en aprovechar la capacidad de reconocimiento de patrones del córtex visual humano para modelar problemas, en lugar de simplemente imitar la programación textual. El artículo propone modelar problemas como entidades y relaciones, y utilizar elementos visuales (color, agrupamiento, movimiento) para representar los cambios de estado, rompiendo así las limitaciones de la programación visual existente y creando herramientas de programación más potentes.

Desarrollo

Propuesta Safe C++ Abandonada: El Comité C++ Prioriza Perfiles

2025-09-14

Hace un año, la propuesta Safe C++ tenía como objetivo agregar un subconjunto seguro a C++, ofreciendo garantías sólidas como Rust, sin romper el código C++ existente. Sin embargo, la propuesta fue rechazada por el comité C++ a favor del enfoque de Perfiles. Los Perfiles definen modos restringidos de C++ para garantizar propiedades de seguridad. Es una solución más pragmática y fácil de adoptar que Safe C++, aunque puede ofrecer garantías de seguridad menos completas. En última instancia, se considera una vía más realista hacia el futuro.

Desarrollo Perfiles

Lexy: Una biblioteca de analizador C++ que rivaliza con analizadores PEG

2025-09-14
Lexy: Una biblioteca de analizador C++ que rivaliza con analizadores PEG

Lexy es una biblioteca de analizador C++ de alto rendimiento que equilibra rendimiento y control. En comparación con otros analizadores PEG como Boost.Spirit y PEGTL, Lexy evita el retroceso implícito controlando las condiciones de bifurcación, mejorando el rendimiento y simplificando el manejo de errores. Lexy admite funciones avanzadas como la recuperación de errores, el análisis de precedencia de operadores y permite el análisis de copia cero directamente en sus propias estructuras de datos. Si bien la gramática de Lexy es más verbosa que la de Boost.Spirit, es más adecuada para gramáticas más grandes. Los tiempos de compilación son razonables, y el diseño modular ayuda a optimizar la velocidad de compilación.

Desarrollo

pass: Un gestor de contraseñas de línea de comandos simple, seguro y extensible

2025-09-14

pass es un gestor de contraseñas de línea de comandos que utiliza el cifrado GPG y sigue la filosofía Unix. Cada contraseña se almacena en un archivo cifrado con GPG con el nombre del sitio web o recurso. Estos archivos se pueden organizar en carpetas, copiar fácilmente entre ordenadores y gestionar con herramientas estándar de línea de comandos. pass proporciona comandos sencillos para añadir, editar, generar y recuperar contraseñas, con soporte para copiar al portapapeles y seguimiento de cambios basado en Git. Los usuarios gestionan el almacén de contraseñas utilizando comandos estándar del shell Unix junto con pass, sin necesidad de nuevos formatos de archivo o paradigmas. Admite extensiones y cuenta con una comunidad activa con numerosos clientes e interfaces gráficas.

Desarrollo cifrado gpg

Consecuencias catastróficas de pthread_cancel en cURL 8.16.0 y su eliminación

2025-09-13

cURL 8.16.0 introdujo el uso de pthread_cancel para interrumpir getaddrinfo(), con el objetivo de mejorar el rendimiento. Sin embargo, este cambio provocó graves fugas de memoria. Esto se debe a que getaddrinfo() puede ser cancelado mientras lee el archivo /etc/gai.conf, lo que lleva a que no se libere la memoria asignada. Debido a la dificultad para resolver este problema y al potencial de graves problemas de estabilidad, el equipo de cURL decidió eliminar esta funcionalidad en #18540, recomendando a los usuarios que utilicen la biblioteca c-ares como alternativa, a pesar de algunas limitaciones funcionales.

Desarrollo fuga de memoria

Bajo el Capó de los Compiladores JIT de Ruby

2025-09-13
Bajo el Capó de los Compiladores JIT de Ruby

Este artículo profundiza en el funcionamiento interno de los compiladores JIT de Ruby, como YJIT y ZJIT. Explica cómo el código compilado JIT coexiste con el bytecode y cómo Ruby cambia entre los modos de ejecución. El artículo también aclara cómo Ruby decide qué métodos compilar (basado en el conteo de llamadas) y cuándo el código compilado JIT regresa al intérprete (por ejemplo, activación de TracePoint o métodos principales redefinidos). En esencia, el compilador JIT de Ruby logra un equilibrio entre rendimiento y corrección a través de un mecanismo ingenioso.

Desarrollo

Ejecutando una VM 486 en el Sipeed Tang: La hazaña de un aficionado

2025-09-13

El autor portó con éxito el núcleo ao486 PC de MiSTer al FPGA Sipeed Tang 138K, creando un proyecto llamado 486Tang. Esto marca la primera vez que ao486 se porta con éxito a un FPGA que no es de Altera. El puerto presentó numerosos desafíos, incluyendo la gestión de la memoria (utilizando SDRAM para la memoria principal, DDR3 para el búfer de fotogramas), el almacenamiento en disco (acceso directo a la tarjeta SD) y un complejo proceso de depuración. Para superar las dificultades de la depuración de hardware, el autor utilizó inteligentemente Verilator para la simulación de subsistemas y del sistema completo, utilizando mensajes de depuración del BIOS de Bochs y marcas de rastreo personalizadas para identificar problemas. Finalmente, a través de una serie de optimizaciones de rendimiento, como la reducción del árbol de reinicio y del abanico, la optimización de la búsqueda de instrucciones y la optimización de TLB, 486Tang logró aproximadamente los niveles de rendimiento de un 486SX-20. Este proyecto muestra las impresionantes habilidades de desarrollo de FPGA y la capacidad de resolución de problemas del autor.

Desarrollo

Vicinae: Un lanzador de escritorio de alto rendimiento que desafía a Raycast

2025-09-13
Vicinae: Un lanzador de escritorio de alto rendimiento que desafía a Raycast

Vicinae es un lanzador de escritorio nativo de alto rendimiento, construido con C++ y Qt, inspirado en Raycast. Cuenta con una API de extensión mayormente compatible que utiliza React/TypeScript del lado del servidor, eliminando la necesidad de un navegador o Electron. Las características incluyen indexación de archivos con búsqueda de texto completo, un selector de emojis inteligente, una calculadora, un rastreador de historial del portapapeles encriptado, accesos directos, integración con el administrador de ventanas y un sistema de temas personalizable. Si bien algunas funciones pueden tener soporte limitado en ciertas plataformas, Vicinae tiene como objetivo proporcionar a los desarrolladores y usuarios avanzados un acceso rápido y centrado en el teclado a las acciones comunes del sistema.

Mago: Analizador estático, formateador y linter de PHP extremadamente rápido, escrito en Rust

2025-09-13
Mago: Analizador estático, formateador y linter de PHP extremadamente rápido, escrito en Rust

Mago es una herramienta extremadamente rápida para lint, formateo y análisis estático de PHP, escrita en Rust. Inspirada en el ecosistema de Rust, aporta velocidad, fiabilidad y una experiencia de desarrollador excepcional a proyectos PHP de todos los tamaños. Incluye funciones de lint, análisis estático, correcciones automáticas, formateo, comprobaciones semánticas y visualización de AST. Mago pretende ser una alternativa unificada y más rápida a herramientas existentes como PHP-CS-Fixer, Psalm, PHPStan y PHP_CodeSniffer.

Desarrollo

Primeras impresiones de Gleam: Analizando registros antiguos de AIM

2025-09-13

El autor utiliza el lenguaje de programación funcional relativamente nuevo, Gleam, para analizar sus antiguos registros de AOL Instant Messenger de hace dos décadas. La publicación detalla su proceso de aprendizaje, cubriendo el manejo de argumentos de línea de comando, la compilación, las pruebas y las técnicas de programación funcional como la coincidencia de patrones y los operadores de canalización. El autor comparte sus experiencias positivas con la elegante sintaxis de canalización de Gleam, pero también señala deficiencias como su biblioteca estándar limitada y el manejo de errores un poco torpe.

Desarrollo

OpenJDK 25 incorpora un perfilador de CPU experimental

2025-09-13
OpenJDK 25 incorpora un perfilador de CPU experimental

Después de más de tres años de desarrollo, un perfilador de tiempo de CPU experimental se ha incluido en OpenJDK 25. Basado en JFR, este nuevo perfilador ofrece mediciones más precisas del consumo de ciclos de CPU, abordando las deficiencias del perfilador de tiempo de ejecución existente, especialmente su muestreo inadecuado en sistemas multinúcleo y su manejo menos que ideal de aplicaciones limitadas por E/S. Aunque actualmente está limitado a Linux, proporciona a los desarrolladores una herramienta poderosa para el análisis de rendimiento, permitiendo la optimización de la utilización de la CPU y la mejora del rendimiento de la aplicación.

Codificación con IA: ¿Exageración o herramienta?

2025-09-13

El autor argumenta que las herramientas actuales de codificación con IA son esencialmente compiladores avanzados, cuya efectividad está sobrevalorada. Se basan en bases de código y patrones existentes, no en una verdadera "codificación con IA". Si bien la IA puede aumentar la productividad, las ganancias reales son limitadas y existen muchas restricciones, como la imprecisión de la entrada de lenguaje natural y los flujos de trabajo no deterministas. El autor critica la inversión excesiva en la codificación con IA y aboga por centrarse en mejorar la infraestructura fundamental, como los lenguajes de programación, los compiladores y las bibliotecas, en lugar de perseguir la exageración.

Actualización del crate `image` de Rust: se agrega compatibilidad con la orientación EXIF para el cambio de tamaño de imágenes

2025-09-13
Actualización del crate `image` de Rust: se agrega compatibilidad con la orientación EXIF para el cambio de tamaño de imágenes

El crate de procesamiento de imágenes `image` de Rust ha lanzado la versión v0.25.8, agregando compatibilidad con los datos de orientación EXIF. Esto corrige un problema común en el que el cambio de tamaño de las imágenes ignoraba la orientación, lo que resultaba en miniaturas giradas o volteadas. La nueva función `apply_orientation` corrige la orientación de la imagen antes del cambio de tamaño, asegurando que la miniatura coincida con la original. Esto es particularmente útil cuando se trabaja con imágenes de cámaras y teléfonos, eliminando la molestia de las imágenes desalineadas.

Desarrollo

compile_flagz: Mejora del soporte IDE para C/C++ en sistemas de compilación Zig

2025-09-13

El sistema de compilación de Zig ofrece potentes capacidades de compilación cruzada para proyectos C/C++, pero el soporte del editor a menudo se queda atrás debido a la falta de rutas de inclusión. compile_flagz soluciona esto generando un archivo `compile_flags.txt`, un formato estándar utilizado por servidores de lenguaje como clangd. Este archivo proporciona la configuración de compilación necesaria, permitiendo funciones como la finalización del código y el resaltado de errores. El autor detalla su uso e implementación, mostrando su eficacia en un proyecto de descompilación de juegos (ROLLER). También se proporciona una guía de inicio rápido.

Desarrollo
1 2 3 4 5 6 8 10 11 12 214 215