Category: Desarrollo

Paralelismo verdadero con estado mutable global en Ruby

2025-03-25

Este artículo explora cómo lograr un verdadero paralelismo con estructuras de datos concurrentes en Ruby, superando la limitación de las primitivas integradas de Ruby que no admiten el estado mutable global para la concurrencia. El autor demuestra un método para lograr esto, que requiere familiaridad con Ruby, Rust y C, junto con algunas herramientas adicionales. Los ejemplos de código están disponibles en GitHub y requieren una versión reciente de Ruby (se recomienda la rama maestra para la compilación local), Rust y compiladores C.

Desarrollo

Riesgo de seguridad en GitHub Actions: La vulnerabilidad de las etiquetas mutables

2025-03-25
Riesgo de seguridad en GitHub Actions: La vulnerabilidad de las etiquetas mutables

Un ataque reciente a la acción de GitHub Actions tj-actions/changed-files puso de manifiesto una vulnerabilidad de seguridad. Al modificar una etiqueta Git mutable, los atacantes pudieron inyectar código malicioso y filtrar secretos de los registros de compilación, que son públicos para los repositorios públicos. El autor comparte un script de shell para auditar las acciones de GitHub Actions utilizadas, enfatizando la importancia de usar ID de commit inmutables para la seguridad. El script analiza los archivos YAML de flujo de trabajo para identificar y contar las acciones, dando prioridad a las de grandes organizaciones o a los scripts escritos por el propio autor en lugar de otras menos confiables. El autor aboga por priorizar las acciones de grandes organizaciones y escribir scripts personalizados siempre que sea posible.

Desarrollo

Aceleración 100x: Reciclaje de memoria y GPUs en Python

2025-03-25
Aceleración 100x: Reciclaje de memoria y GPUs en Python

Esta publicación detalla cómo el autor logró una aceleración de 100x de un programa Python mediante simples optimizaciones de código. El programa inicial utilizaba NumPy para computación paralela, pero era lento e intensivo en memoria debido a una mala gestión de la memoria. Al implementar un simple mecanismo de reciclaje de memoria para liberar variables intermedias no utilizadas, el autor redujo el tiempo de ejecución de 40 segundos a 10 segundos, disminuyendo significativamente el uso de memoria. Posteriormente, utilizando CuPy para trasladar el cálculo a la GPU, el tiempo de ejecución se redujo aún más a 1,5 segundos, demostrando una mejora de rendimiento dramática.

Jakt: Un lenguaje de programación de sistemas seguro para la memoria

2025-03-25
Jakt: Un lenguaje de programación de sistemas seguro para la memoria

Jakt es un nuevo lenguaje de programación de sistemas seguro para la memoria, actualmente se transpila a C++. Emplea estrategias como el conteo automático de referencias, el tipado fuerte y la comprobación de límites para garantizar la seguridad de la memoria, evitando punteros sin procesar. Jakt enfatiza la legibilidad del código con un sistema de módulos flexible y una sintaxis limpia. Admite structs, clases, enums, coincidencia de patrones, genéricos, sobrecarga de operadores y manejo de excepciones, junto con potentes funciones en tiempo de compilación, como la ejecución de funciones en tiempo de compilación. Si bien aún está en desarrollo, Jakt pretende equilibrar el rendimiento, la seguridad y la productividad del desarrollador.

Desarrollo

Macros X: El arma secreta de generación de código del compilador Chapel

2025-03-25

El compilador Chapel utiliza inteligentemente macros X para simplificar drásticamente la generación de código. El artículo utiliza la internamiento de cadenas y la jerarquía de clases AST como ejemplos, mostrando cómo las macros X generan elegantemente grandes cantidades de código repetitivo. Esto incluye declarar e inicializar más de 100 variables de cadena y generar código de patrón de visitante para nodos AST. Las macros X logran esto definiendo macros en archivos de encabezado, que luego se incluyen en el código, aumentando así la mantenibilidad y escalabilidad del código. Incluso la generación de una jerarquía de clases Python se gestiona fácilmente. El artículo concluye discutiendo las ventajas y desventajas de este enfoque, observando que, aunque las dependencias son más fuertes, la naturaleza declarativa hace que el código sea más legible y fácil de mantener.

Desarrollo

Polypane: Construye, depura y prueba sitios web en un solo lugar

2025-03-25
Polypane: Construye, depura y prueba sitios web en un solo lugar

Polypane es una poderosa herramienta de desarrollo web que te permite construir, depurar y probar todos los aspectos de tu sitio web sin cambiar de contexto. Admite diseño receptivo, comprobaciones de accesibilidad, verificación de meta etiquetas y pruebas de rendimiento. Visualiza todos los viewports a la vez, desde pantallas móviles hasta monitores 5K; obtén comentarios instantáneos sobre la estructura, los metadatos y la accesibilidad; y prueba fácilmente diferentes vistas, como el modo oscuro y claro. Todas las acciones se reflejan en todos los dispositivos para un flujo de trabajo optimizado.

Hann: Una biblioteca ultrarrápida de búsqueda de vecinos más cercanos aproximados para Go

2025-03-25
Hann: Una biblioteca ultrarrápida de búsqueda de vecinos más cercanos aproximados para Go

Hann es una biblioteca de búsqueda de vecinos más cercanos aproximados (ANN) de alto rendimiento para Go. Ofrece varias estructuras de datos de índice (HNSW, PQIVF, RPT) para búsquedas de similitud eficientes en espacios de alta dimensionalidad, actuando como un componente central para bases de datos vectoriales. Impulsa tus aplicaciones Go con capacidades de búsqueda de similitud en memoria rápida. Admite varios cálculos de distancia (Euclidiana, Manhattan, coseno), guardado y carga de índice y operaciones masivas.

El Proyecto de Búsqueda Marginalia recibe una segunda subvención de NLNet

2025-03-25

¡El proyecto de búsqueda Marginalia ha recibido una segunda subvención de NLNet! Esta financiación apoyará la mayor parte de la hoja de ruta del proyecto para 2025. El desarrollo a tiempo completo ha estado en marcha desde el verano de 2023, y esta subvención asegura más tiempo de desarrollo y extiende significativamente el cronograma del proyecto. Más detalles a seguir.

La revisión de aplicaciones de Apple: ¿Un obstáculo para los desarrolladores?

2025-03-25
La revisión de aplicaciones de Apple: ¿Un obstáculo para los desarrolladores?

Este artículo critica el proceso de revisión de la App Store de Apple, argumentando que su ineficiencia dificulta a los desarrolladores aprovechar las herramientas de IA para el desarrollo y lanzamiento rápidos de aplicaciones. Con el auge de las herramientas de desarrollo asistidas por IA, la velocidad de desarrollo de software ha aumentado drásticamente, pero el proceso de revisión de aplicaciones de Apple sigue siendo engorroso, lo que lleva a los desarrolladores a plataformas alternativas, como React Native o implementaciones en la nube. El autor sugiere que si Apple no mejora su proceso de revisión de aplicaciones, corre el riesgo de perder desarrolladores y, en consecuencia, afectar su posición en el mercado.

Desarrollo

Codificador Agéntico Minimalista en 200 Líneas de TypeScript

2025-03-25

Un codificador agéntico minimalista, mycoder-mini, construido usando el LLM Claude 3 de Anthropic, se implementa en solo 200 líneas de TypeScript. Recibe indicaciones del usuario, genera comandos de shell a través de Claude 3, los ejecuta e itera hasta que la tarea se completa. Si bien está limitado por la ejecución sincrónica, la falta de integración con el navegador y un conjunto de herramientas restringido, mycoder-mini demuestra claramente los principios básicos de la codificación agéntica, proporcionando un excelente punto de partida para aprender y explorar sistemas más sofisticados.

IngressNightmare: Vulnerabilidades críticas que afectan a miles de clústeres de Kubernetes

2025-03-25
IngressNightmare: Vulnerabilidades críticas que afectan a miles de clústeres de Kubernetes

Wiz Research descubrió una serie de vulnerabilidades de ejecución remota de código no autenticadas (denominadas #IngressNightmare) en Ingress NGINX Controller para Kubernetes. La explotación otorga acceso no autorizado a todos los secretos en todos los espacios de nombres, lo que podría provocar la toma de control del clúster. Aproximadamente el 43% de los entornos en la nube son vulnerables, con más de 6.500 clústeres afectados, incluidas empresas de la lista Fortune 500, que exponen públicamente componentes vulnerables. Es fundamental aplicar parches de inmediato. Las mitigaciones incluyen la actualización a la última versión de Ingress NGINX Controller o la desactivación del componente del controlador de admisión.

El SDK de Freedesktop elimina la extensión OpenH264: litigio de patentes y riesgos de seguridad

2025-03-25
El SDK de Freedesktop elimina la extensión OpenH264: litigio de patentes y riesgos de seguridad

Este artículo detalla la eliminación de la extensión OpenH264 del SDK de Freedesktop. Inicialmente, para solucionar problemas de patentes H.264, se utilizó libopenh264 de Cisco mediante una extensión Flatpak. Sin embargo, este enfoque presentó desafíos: un certificado SSL inválido, riesgos de seguridad y actualizaciones difíciles. El SDK de Freedesktop integró la decodificación H.264 en la extensión codecs-extra, que incluye otras bibliotecas de codecs y se instala automáticamente como una extensión de tiempo de ejecución. Esto resolvió los numerosos problemas asociados con la extensión OpenH264, reduciendo la sobrecarga de mantenimiento y mejorando la seguridad.

Desarrollo SDK de Freedesktop

Reconstruyendo la Biblioteca Estándar de C++ desde cero: El proyecto Pystd

2025-03-25
Reconstruyendo la Biblioteca Estándar de C++ desde cero: El proyecto Pystd

Cansado de los pésimos tiempos de compilación y la ilegibilidad de la Biblioteca Estándar de C++ (STL), un desarrollador open-source decidió construir un reemplazo desde cero: Pystd. Inspirándose en la biblioteca estándar de Python, implementó gradualmente el manejo de archivos, la manipulación de cadenas, la validación UTF-8, los mapas hash, los vectores y la ordenación. El resultado: una aplicación funcional en menos de 1000 líneas de código, comparable a la versión STL. Pystd cuenta con tiempos de compilación significativamente más rápidos y tamaños de ejecutables menores. Un esquema de versionamiento único (por ejemplo, pystd2025) asegura una perfecta estabilidad ABI, facilitando las actualizaciones y el mantenimiento futuro.

El Arte Perdido de los Mensajes de Commit: Una Guía para Commits Git Eficaces

2025-03-25

Este artículo critica la práctica común de escribir mensajes de commit de Git vagos, como "corregir error" o "actualizar código". Destaca la importancia de los mensajes de commit claros para la colaboración en equipo y la depuración futura. El artículo detalla un formato estandarizado para los mensajes de commit, incluyendo tipo (feat, fix, chore, etc.), alcance, descripción breve, puntos detallados y pie de página, con varios ejemplos. El autor anima a los desarrolladores a cultivar el hábito de escribir mensajes de commit de alta calidad para crear un historial de proyecto claro y comprensible.

Desarrollo Mensajes de Commit

Triforce: Un Formador de Haz para Portátiles con Apple Silicon

2025-03-25
Triforce: Un Formador de Haz para Portátiles con Apple Silicon

Triforce implementa un formador de haz adaptativo de Respuesta de Distorsión Mínima y Varianza para la matriz de micrófonos que se encuentra en los portátiles Apple Silicon. Las matrices de micrófonos de Apple (triángulo o línea recta) son demasiado sensibles y omnidireccionales, lo que requiere la formación de haces para aislar las señales deseadas y reducir el ruido de fondo. Este proyecto tiene como objetivo proporcionar un formador de haz accesible, potencialmente menos eficiente que la implementación de Apple, pero con dependencias mínimas y abierto a contribuciones de la comunidad.

Desarrollo formación de haz

Vibe-Eyes: Dando visión a los LLMs en juegos de navegador

2025-03-25
Vibe-Eyes: Dando visión a los LLMs en juegos de navegador

Vibe-Eyes es un servidor MCP innovador que permite a los Modelos de Lenguaje Grandes (LLMs) 'ver' lo que sucede en juegos y aplicaciones basados en navegador. Utiliza una arquitectura cliente-servidor: un cliente ligero de navegador captura el contenido del lienzo e información de depuración, enviándola a través de WebSockets a un servidor Node.js. El servidor vectoriza las imágenes en SVG compactos, poniéndolos a disposición de los LLMs a través del Protocolo de Contexto del Modelo (MCP). Esto permite a los LLMs 'ver' la aplicación y proporcionar asistencia de depuración rica en contexto, mejorando significativamente la eficiencia de la 'codificación vibe'.

Desarrollo

Es hora de dejar de construir bases de datos KV

2025-03-25
Es hora de dejar de construir bases de datos KV

El autor critica las bases de datos Key-Value por ser excesivamente simplistas y carecer de poder expresivo, lo que las hace difíciles de usar. Si bien son populares entre los proveedores de motores de almacenamiento, las bases de datos KV son simplemente bloques de construcción para modelos de datos razonables, obligando a los usuarios a construirlos desde cero, a menudo con resultados subóptimos. El autor propone un término medio: una base de datos integrada con registros tipados, separando los esquemas lógicos y físicos, pero escribiendo consultas contra el esquema físico. Esto evita los planificadores de consultas complejos, admite cambios de esquema asíncronos e intercambio de diseños. Este enfoque equilibra la independencia de datos con la simplicidad necesaria para los sistemas integrados, ofreciendo una alternativa convincente tanto para las tiendas KV simples como para las complejidades de las bases de datos relacionales completas.

Desarrollo

Modelica: Modelado Elegante de Sistemas Ciberfísicos Complejos

2025-03-25

Modelica es un lenguaje para el modelado de sistemas ciberfísicos, que admite la conexión acausal de componentes regidos por ecuaciones matemáticas para el modelado a partir de principios primeros. Su estructura orientada a objetos facilita la reutilización de modelos y simplifica el modelado de sistemas complejos con componentes mecánicos, eléctricos, electrónicos, magnéticos, hidráulicos, térmicos, de control, de potencia o de proceso. Los recursos de aprendizaje incluyen guías en línea, libros y la Biblioteca Estándar Modelica, que ofrece convenciones de codificación y numerosos modelos existentes para el aprendizaje y la práctica. El uso de Modelica requiere una herramienta que implemente el lenguaje y acceso a bibliotecas de modelos.

MRubyD: Máquina virtual mruby en C# para integración perfecta con motores de juegos

2025-03-24
MRubyD: Máquina virtual mruby en C# para integración perfecta con motores de juegos

MRubyD es una nueva máquina virtual mruby implementada en C# puro, diseñada para una integración perfecta con motores de juegos basados en C#. Aprovechando las características modernas de C#, ofrece un alto rendimiento y extensibilidad, priorizando la compatibilidad con la API de Ruby. Actualmente en versión de vista previa, algunas características como los tipos y métodos integrados, así como la visibilidad privada/protegida, están en desarrollo. Instale mediante `dotnet add package MRubyD` y explore sus funcionalidades a través de los ejemplos proporcionados. Requiere el compilador mruby nativo para compilar el código fuente .rb en bytecode .mrb.

Desarrollo

Biblioteca de Autorización Flexible: RBAC, ABAC y ReBAC Combinados

2025-03-24
Biblioteca de Autorización Flexible: RBAC, ABAC y ReBAC Combinados

Una biblioteca de autorización flexible que combina políticas de control de acceso basadas en roles (RBAC), basadas en atributos (ABAC) y basadas en relaciones (ReBAC). Admite la composición de políticas (AND, OR, NOT), el seguimiento detallado de la evaluación y una API de constructor fluida, con seguridad de tipos y soporte asincrónico. Agrega fácilmente múltiples políticas, como RBAC y ABAC, y crea políticas personalizadas usando PolicyBuilder. Los ejemplos demuestran RBAC, ReBAC y combinadores de políticas.

Desarrollo autorización

FaunaDB cierra sus puertas y se convierte en código abierto tras recibir US$ 27 millones en financiación

2025-03-24
FaunaDB cierra sus puertas y se convierte en código abierto tras recibir US$ 27 millones en financiación

FaunaDB, una startup de bases de datos que recaudó US$ 27 millones en financiación, anunció que cerrará sus servicios a finales de mayo y se convertirá en un proyecto de código abierto. La empresa, que contaba con 25.000 desarrolladores utilizando su base de datos serverless, que combinaba la potencia relacional y la flexibilidad de los documentos, citó la naturaleza intensiva en capital de escalar un servicio de base de datos global y el entorno de mercado actual como razones para el cierre. Los clientes existentes se migrarán del servicio en los próximos meses. La versión de código abierto incluirá la tecnología principal de la base de datos, con soporte para documentos JSON con características relacionales como uniones, claves externas y aplicación de esquemas, junto con su lenguaje de consulta FQL. Algunos observadores sugieren que un enfoque de código abierto desde el principio podría haber llevado a un mayor éxito.

Desarrollo

Vulnerabilidad Crítica en Kubernetes Ingress-Nginx: Riesgo de Ejecución de Código Arbitrario

2025-03-24

Se han descubierto múltiples vulnerabilidades críticas en Kubernetes Ingress-Nginx, siendo la más grave (CVE-2025-1974) con una puntuación CVSS de 9.8, lo que permite la ejecución de código arbitrario y la posible fuga de secretos en todo el clúster. Todas las versiones anteriores a la v1.11.5 y la v1.12.1 se ven afectadas. Se recomienda actualizar inmediatamente a la versión más reciente o deshabilitar temporalmente el controlador de admisión de validación para reducir el riesgo.

Desarrollo

El Sueño Pastoral del Programador: ¿Escapar del Código, Abrazar la Tierra?

2025-03-24

Muchos programadores sueñan con dejar sus teclados y dedicarse al trabajo manual, como la carpintería o la agricultura. Este artículo explora las razones detrás de este fenómeno, sugiriendo que surge del agotamiento en las prácticas de trabajo modernas del software y una reevaluación del ideal del "hombre hecho a sí mismo" en la cultura estadounidense. El autor, basándose en su experiencia personal, analiza las complejidades de este anhelo, reconociendo tanto la idealización romántica de la vida rural como sus duras realidades. En última instancia, el autor argumenta que encontrarle sentido al trabajo no reside únicamente en la producción económica, sino también en la construcción de comunidad y en un espíritu de servicio.

Desarrollo

El Desafío Prospero: Renderizado de Superficies Implícitas con Rendimiento Extremo

2025-03-24
El Desafío Prospero: Renderizado de Superficies Implícitas con Rendimiento Extremo

El Desafío Prospero invita a los desarrolladores a renderizar una superficie implícita definida por 7866 expresiones matemáticas lo más rápido posible. Los participantes exploran varias técnicas de optimización, incluyendo el preprocesamiento de expresiones, la aceleración Numba, el cómputo en GPU y la compilación LLVM, utilizando herramientas como Python, Numpy, CUDA y compiladores JIT. Las soluciones han logrado tiempos de renderizado en milisegundos y han reducido significativamente el consumo de memoria. El desafío fomenta la experimentación y el intercambio de resultados para avanzar el estado del arte en el renderizado de superficies implícitas.

Construyendo una API de correo electrónico idempotente con River

2025-03-24

Este artículo demuestra cómo construir una API de correo electrónico segura e idempotente usando River. Muchos servicios de correo electrónico carecen de APIs que garanticen la idempotencia, lo que lleva a correos electrónicos duplicados o perdidos. Al aprovechar las funciones de River y combinar ID de cuenta únicos con claves de idempotencia, el autor logra el envío de correos electrónicos idempotentes. Incluso con errores de red que causan reintentos, se garantiza que el correo electrónico se envíe solo una vez. El artículo detalla la implementación, cubriendo la definición de argumentos de trabajo, la creación de trabajadores, el manejo de solicitudes duplicadas y la seguridad de coincidencia de parámetros. La API resultante es concisa, eficiente y lista para producción, evitando muchos problemas comunes de envío de correo electrónico.

Lilly: Una alternativa simplificada a Vim/Neovim

2025-03-24
Lilly: Una alternativa simplificada a Vim/Neovim

Lilly es un editor de texto en desarrollo, cuyo objetivo es ser una alternativa ligera a Vim y Neovim. Se centra en las funciones esenciales, eliminando el complejo ecosistema de plugins Lua para una experiencia de usuario más simple y accesible. Ya se ha lanzado una versión pre-alfa, y las pruebas muestran cero fugas de memoria. Se agradecen las contribuciones y comentarios.

Desarrollo alternativa a Vim

Dominando Delphi 5: Una retrospectiva de 25 años

2025-03-24

Marco Cantu ha lanzado una edición anotada de 2025 gratuita de su clásico 'Dominando Delphi 5'. El libro de 1139 páginas presenta 475 notas al pie y docenas de nuevas capturas de pantalla que comparan las interfaces antiguas y nuevas del IDE y las aplicaciones. Si bien parte del código no se compila, la mayoría de los programas aún se ejecutan, un testimonio del legado perdurable de Delphi. Este regalo a la comunidad celebra el 30º aniversario de Delphi y ofrece un viaje nostálgico a través de su historia.

Desarrollo

PicoRuby: Una Implementación Ligera de Ruby para Microcontroladores

2025-03-24
PicoRuby: Una Implementación Ligera de Ruby para Microcontroladores

PicoRuby es una implementación ligera de mruby con una pequeña huella: 256 KB de ROM y menos de 128 KB de RAM (arquitectura de 32 bits). Altamente portable, solo depende de bibliotecas C estándar y admite microcontroladores como el Raspberry Pi Pico. Aunque todavía está en desarrollo, proporciona documentación de la API, videos de demostración y herramientas de compilación. El comando `rake` compila tres ejecutables: `picorbc` (compila Ruby a código de VM mruby), `picoruby` (ejecuta código Ruby directamente) y `r2p2` (para uso específico). Desarrollado por HASUMI Hitoshi y Monstarlab con financiación de la Ruby Association.

Desarrollo Ruby embebido

Magic Todo: Lista de Tareas Inteligente con IA

2025-03-24

Magic Todo es una aplicación de lista de tareas inteligente que no solo permite registrar tareas como una lista de tareas común, sino que también divide automáticamente las tareas en pasos según un nivel de picante (🌶️) que se define. Cuanto más picante, más detallada la división. Categoriza automáticamente las tareas de nivel superior con emojis y ofrece filtrado por categoría o estado de finalización. Cada elemento proporciona funciones de edición, eliminación, agregar subtareas y estimación, con reordenación por arrastrar y soltar. Las funciones adicionales incluyen sincronización de dispositivos, opciones de exportación, deshacer/rehacer y acciones masivas.

LangGraph: Creando un asistente de codificación de IA flexible y con las mejores prácticas

2025-03-24
LangGraph: Creando un asistente de codificación de IA flexible y con las mejores prácticas

Qodo creó un asistente de codificación de IA utilizando el framework LangGraph, equilibrando la flexibilidad con el cumplimiento de las mejores prácticas de codificación. Inicialmente, utilizaron flujos predefinidos para tareas de codificación, pero con la llegada de LLMs más potentes como Claude Sonnet 3.5, cambiaron al enfoque basado en grafos de LangGraph. LangGraph permite crear agentes que van desde totalmente abiertos hasta flujos determinísticos completamente estructurados, lo que permite a Qodo ajustar la estructura de sus flujos en función de las capacidades del LLM. La API limpia del framework, los componentes reutilizables y la administración de estado integrada simplificaron el desarrollo y admiten la persistencia, los puntos de control y los puntos de ramificación. Si bien la documentación y las pruebas presentan algunos desafíos, LangGraph proporcionó una base sólida para que Qodo creara un asistente de codificación de IA robusto.

Desarrollo
1 2 130 131 132 134 136 137 138 214 215