Category: Desarrollo

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

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 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

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

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

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

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

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 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.

Vim: Un lenguaje de programación más allá de un editor

2024-12-15

Vim es más que un simple editor de texto; es un lenguaje para interactuar con tu computadora. Su estructura de comandos concisa y eficiente es fácil de aprender y recordar, y también fácil de interpretar para una computadora. Si bien Vim en sí mismo es potente, su fortaleza principal radica en el hecho de que su modo se ha integrado en casi todos los editores de código convencionales, permitiendo a los desarrolladores elegir flexiblemente la interfaz del editor que prefieran, mientras mantienen el eficiente lenguaje de comandos de Vim. Por lo tanto, NeoVim, como la implementación más completa y consistente del lenguaje Vim, es valioso por proporcionar este eficiente lenguaje de edición, no solo el editor en sí.

Desarrollo

Lenguajes de programación: Equilibrio entre seguridad y potencia

2024-12-15

Este artículo explora la compensación entre seguridad y potencia en los lenguajes de programación. La visión tradicional es que los lenguajes potentes, como C con su gestión manual de memoria, son inherentemente inseguros. Sin embargo, el autor argumenta que esto está desactualizado. La investigación moderna en lenguajes de programación muestra que una mayor expresividad permite tanto seguridad como potencia. La evolución de las macros en Lisp, Scheme y Racket ejemplifica esto, demostrando cómo un diseño mejorado puede mejorar las capacidades de las macros manteniendo la seguridad. El sistema de macros de Racket se presenta como una mejor práctica, combinando código higiénico con capacidades de manipulación potentes. El artículo concluye que los sistemas seguros y fiables construyen software más potente y fiable, y recomienda recursos para seguir aprendiendo sobre macros de Racket.

Gestión de dependencias de Python: Un incendio descontrolado

2024-12-15

Este artículo profundiza en la complejidad de la gestión de dependencias de Python, comparándola con la construcción de una fogata en un bosque seco. El autor argumenta que las dependencias de Python no son simplemente una cuestión de `pip install`; abarcan paquetes de proyecto, paquetes del sistema, el sistema operativo, el hardware y el entorno en sí. La buena gestión de dependencias es crucial para la reproducibilidad, garantizando resultados consistentes en diferentes entornos. El artículo detalla el control de versiones, el aislamiento del entorno, los archivos de definición, los archivos de bloqueo y otros conceptos clave. Luego, proporciona una comparación exhaustiva de varias herramientas, incluidas pip, venv, virtualenv, pip-tools, Pipenv, Poetry, PDM, pyenv, pipx, uv, Conda, Mamba, conda-lock y Pixi, analizando sus fortalezas, debilidades y casos de uso. Finalmente, el autor ofrece recomendaciones de herramientas en función de diferentes escenarios (privilegios administrativos, tipos de dependencias, sistemas operativos, etc.) y analiza las tendencias futuras en la gestión de dependencias de Python.

La biblioteca C de LLVM acelera las GPU: Ejecutando código C en GPUs

2024-12-14

El proyecto LLVM ha lanzado una biblioteca C para GPU que permite a los desarrolladores ejecutar funciones libc y libm directamente en la GPU dentro del código C/C++. La biblioteca admite dos modos principales: como una biblioteca complementaria para lenguajes de descarga como OpenMP, CUDA o HIP; y compilando directamente código C/C++ para el objetivo GPU. El artículo detalla cómo usar ambos modos, incluidas las opciones de compilación, la vinculación y las compilaciones específicas para GPU de AMD y NVIDIA. Esta biblioteca permite a los desarrolladores aprovechar el poder de procesamiento paralelo de las GPU, mejorando significativamente el rendimiento sin necesidad de un conocimiento profundo de modelos de programación de GPU complejos.

Desarrollo Programación GPU

Buzee: Aplicación de búsqueda de texto completo de código abierto lanzada

2024-12-14

Buzee es una aplicación de búsqueda de texto completo multiplataforma construida con Rust y Svelte. Permite la búsqueda rápida de archivos locales, carpetas, historial del navegador y más, incluso extrayendo texto de PDFs e imágenes usando OCR. Desarrollado durante dos años, este proyecto muestra una arquitectura robusta que utiliza Tauri para el rendimiento, SQLite y Tantivy para la indexación y un front-end Svelte limpio. Si bien es rico en funciones, aún tiene algunas áreas para desarrollo futuro, y el autor lo está lanzando como código abierto para que otros contribuyan.

Enrutadores de subred Tailscale: Solución sencilla para conexiones de red complejas

2024-12-14

Tailscale normalmente requiere la instalación de un cliente en cada dispositivo, pero esto no siempre es factible para dispositivos integrados o VPC existentes. Ahí es donde entran en juego los enrutadores de subred. Permiten que los dispositivos se comuniquen usando la potente tecnología de traversal NAT de Tailscale, independientemente de si ejecutan Tailscale o no. Este artículo explica cómo funcionan los enrutadores de subred Tailscale, incluida la instalación y configuración en Windows y Linux. Para migraciones de redes grandes o la conexión de VPC de AWS, los enrutadores de subred ofrecen una manera rápida y sencilla de empezar. El uso personal es gratuito y no cuenta para los límites de dispositivos.

Ataque a la cadena de suministro afecta a Ultralytics: Análisis de incidente de seguridad de PyPI

2024-12-14

El proyecto Python Ultralytics sufrió recientemente un ataque a la cadena de suministro. Los atacantes comprometieron los flujos de trabajo de GitHub Actions del proyecto y robaron un token de API de PyPI, lo que resultó en versiones contaminadas 8.3.41, 8.3.42, 8.3.45 y 8.3.46. El ataque no explotó una vulnerabilidad de PyPI, sino el caché de GitHub Actions. PyPI, utilizando la Publicación de Confianza y los registros de transparencia de Sigstore, identificó y eliminó rápidamente el malware. El incidente destacó deficiencias en las configuraciones de tokens de API y entornos de GitHub. El artículo enfatiza la seguridad de las forjas de software y los flujos de trabajo de compilación/publicación, proporcionando recomendaciones de seguridad para los desarrolladores: usar Publicadores de Confianza, bloquear dependencias, evitar patrones inseguros y habilitar la autenticación multifactorial.

1 2 3 4 6 8