Category: Desarrollo

Paquetes JSON Experimentales de Go 1.25: Mejora del Rendimiento y Sintaxis Más Estricta

2025-09-10

Go 1.25 introduce los paquetes experimentales `encoding/json/v2` y `encoding/json/jsontext` para mejorar las capacidades de codificación y decodificación JSON en Go. Estos abordan las deficiencias del paquete `encoding/json` existente, como el manejo impreciso de la sintaxis JSON, los cuellos de botella de rendimiento y las deficiencias de la API. Las mejoras incluyen un manejo más estricto de UTF-8 no válido, claves duplicadas y slices/maps nulos. El procesamiento de transmisión mejora significativamente el rendimiento, especialmente la deserialización. Si bien es en gran medida compatible con versiones anteriores, se anima a los desarrolladores a probar con `GOEXPERIMENT=jsonv2` y proporcionar comentarios.

(go.dev)
Desarrollo

arXivLabs: Colaboraciones comunitarias para nuevas funciones de arXiv

2025-09-10
arXivLabs: Colaboraciones comunitarias para nuevas funciones de arXiv

arXivLabs es un marco experimental que permite a los colaboradores desarrollar y compartir nuevas funciones de arXiv directamente en el sitio web. Los participantes, incluidos individuos y organizaciones, comparten los valores de arXiv de apertura, comunidad, excelencia y privacidad de datos del usuario. arXiv está comprometido con estos valores y solo trabaja con socios que los respetan. ¿Tiene alguna idea para mejorar la comunidad de arXiv? Obtenga más información sobre arXivLabs.

Desarrollo

Bottlefire: Imágenes de contenedor convertidas en ejecutables Linux independientes

2025-09-10

Bottlefire convierte imágenes de contenedor en ejecutables Linux independientes y sin dependencias que incluyen Firecracker e inician microVM automáticamente. Los usuarios pueden ejecutar estos ejecutables en cualquier plataforma Linux amd64/arm64 moderna con soporte KVM sin necesidad de privilegios de root ni configuraciones complejas a nivel de sistema. Las microVM de Bottlefire cuentan con red de espacio de usuario de configuración cero, mapeo de puertos y uso compartido de directorios de host a VM, ofreciendo la facilidad de uso de los contenedores. Simplemente descargue y ejecute con un comando curl para una experiencia sorprendentemente optimizada.

Desarrollo

Más allá del depurar con print: 7 superpoderes de los depuradores

2025-09-10
Más allá del depurar con print: 7 superpoderes de los depuradores

¿Cansado de infinitas declaraciones de impresión para depurar? Este artículo revela siete ventajas ocultas de los depuradores: inspeccionar toda la pila de llamadas, evaluar dinámicamente expresiones (como un REPL), capturar excepciones con precisión, alterar el flujo de ejecución sin cambios de código, estandarizar la configuración del proyecto, simplificar la colaboración y proporcionar una integración más fluida para nuevos colaboradores. Los depuradores no son solo herramientas de rastreo de código; son armas poderosas para aumentar la eficiencia del desarrollo y la calidad del código, llevándote de la tediosa depuración con impresiones a un desarrollo eficiente.

Desarrollo

Hipervisor RISC-V en 1.000 líneas de Rust

2025-09-10

Este libro en línea te enseña cómo construir un hipervisor RISC-V mínimo capaz de arrancar sistemas operativos basados en Linux usando Rust. Secuela de 'Sistema Operativo en 1.000 líneas', comienza con programación bare-metal y aprovecha el ecosistema de Rust para simplificar el desarrollo, con el objetivo de un hipervisor tipo 1 en menos de 1.000 líneas de código. Los ejemplos de implementación están disponibles en GitHub.

Desarrollo

Sintetizando el Diseño Orientado a Objetos y Funcional para Promover la Reutilización

2025-09-09

Este artículo de ECOOP de 1998 aborda el desafío de extender tanto las herramientas como los tipos de datos en programas en evolución mediante la combinación de las fortalezas de la programación orientada a objetos y la programación funcional. Los enfoques tradicionales tienen dificultades para soportar ambas: la programación funcional sobresale en la adición de herramientas, mientras que la POO sobresale en la adición de nuevas herramientas o la extensión de conjuntos de datos, pero no ambas simultáneamente. El artículo propone un patrón de diseño compuesto que sintetiza lo mejor de ambos enfoques, sugiriendo nuevas características lingüísticas para lenguajes basados en clases para lograr la extensibilidad sin modificar el código existente.

Notas de diseño de X: Unificación de módulos OCaml

2025-09-09

El autor está diseñando un nuevo lenguaje de programación, X, con el objetivo de combinar la inferencia de tipos y la subtipificación estructural de PolySubML con la mayoría de las funciones de OCaml, abordando especialmente las diferencias sintácticas y conceptuales entre el sistema de módulos de OCaml y los valores ordinarios. La publicación detalla cómo se unifican los módulos OCaml en X, cubriendo aspectos como los miembros de alias en registros, la sintaxis struct y sig, la apertura e inclusión de módulos, la extensión de módulos y la abstracción con tipos existenciales. Propone mejoras al sistema de módulos de OCaml, como evitar las importaciones con comodines. El objetivo final es un lenguaje de programación más simple, fácil de entender y potente.

Desarrollo

¿El fin de la codificación manual? La perspectiva de un desarrollador de Amazon a una Startup

2025-09-09

Después de dejar el equipo de asistente de codificación de IA de Amazon, el autor se unió a Icon, siendo testigo de primera mano de la revolución de la IA en el desarrollo de software. Los procesos lentos de Amazon y las decisiones impulsadas por KPI perjudicaron la eficiencia, a diferencia del enfoque impulsado por IA de Icon, donde los desarrolladores se centran en el diseño y las necesidades del usuario, automatizando gran parte de la codificación. El autor predice que las habilidades de codificación pura serán menos cruciales, mientras que la comprensión del usuario, la estrategia del producto y el marketing se volverán primordiales. Los desarrolladores deben adaptarse, mejorando sus habilidades en estas áreas para mantenerse competitivos en la era de la IA.

Desarrollo

Paquetes DuckDB de npm comprometidos con malware

2025-09-09
Paquetes DuckDB de npm comprometidos con malware

Los paquetes Node.js npm de DuckDB fueron comprometidos por un sofisticado ataque de phishing. Se publicaron versiones maliciosas de cuatro paquetes, que contenían código diseñado para interferir en las transacciones de criptomonedas. Afortunadamente, estas versiones maliciosas aparentemente no se descargaron antes de ser identificadas y obsoletas por el equipo de DuckDB. El equipo respondió rápidamente obsoletizando las versiones maliciosas y lanzando versiones actualizadas y seguras. El ataque implicó un sitio web npm falso convincente que engañó a un mantenedor para que restableciera su 2FA, otorgando a los atacantes la capacidad de publicar los paquetes maliciosos. Este incidente destaca la importancia de las prácticas de seguridad sólidas, incluso para desarrolladores experimentados.

Desarrollo

Ataque de malware en paquete NPM y defensa con LavaMoat

2025-09-09
Ataque de malware en paquete NPM y defensa con LavaMoat

Un ataque reciente inyectó código malicioso en el paquete NPM `is-arrayish`, con el objetivo de robar ETH de transacciones de usuarios. El malware logró esto al sobreescribir funciones del navegador como `fetch`, `XMLHttpRequest` y `window.ethereum.request`. En lugar de un análisis detallado del ataque, el artículo demuestra cómo LavaMoat previene estos ataques. LavaMoat aísla los módulos de cada dependencia en contextos globales léxicos separados (Compartimientos), restringiendo el acceso a variables globales e importaciones especificadas en una política. Esto impide que el código malicioso modifique las direcciones de transacción. Incluso el malware sofisticado tendría dificultades para eludir las defensas de LavaMoat.

Guía Visual del Sistema de Tipos de Rust

2025-09-09
Guía Visual del Sistema de Tipos de Rust

RustCurious.com presenta una guía visual del sistema de tipos de Rust, utilizando un gráfico interactivo para categorizar todos los tipos posibles en Rust. La guía se centra en `lang_items` - tipos y rasgos integrados que admiten sintaxis específica - para desmitificar lo que se puede construir puramente en código de biblioteca. `Vec`, `String` y `HashMap` se excluyen porque son simplemente structs. La clara separación de Rust de un núcleo independiente de la plataforma permite crates no_std, crucial para firmware incrustado y otros sistemas donde no hay un montón dinámico disponible.

Desarrollo

Domando código heredado: Un resumen de "Working Effectively with Legacy Code" de Michael Feathers

2025-09-09
Domando código heredado: Un resumen de

Este artículo resume las ideas centrales del libro clásico de Michael Feathers, "Working Effectively with Legacy Code". El libro argumenta que el quid del código heredado es la falta de pruebas. Para modificar el código heredado con seguridad, las pruebas deben agregarse primero. Esto es un desafío porque agregar pruebas requiere modificar el código, creando una paradoja. El libro describe los pasos para identificar puntos de cambio (Seams), romper dependencias, escribir pruebas y refactorizar, junto con técnicas de prueba incremental (Sprout y Wrap) y una técnica para comprender rápidamente el código (Scratch Refactoring). El autor enfatiza la importancia de las pruebas unitarias y presenta pruebas de caracterización para capturar el comportamiento del código existente. Finalmente, el artículo aconseja evitar la dependencia directa de las implementaciones de la biblioteca para reducir los costos de mantenimiento.

Nombres de tablas de bases de datos: singular o plural

2025-09-09

Un debate común en el diseño de bases de datos gira en torno a si los nombres de las tablas deben ser singulares o plurales. Si bien los nombres plurales (por ejemplo, 'usuarios') parecen intuitivos, el autor argumenta que los nombres singulares (por ejemplo, 'usuario') ofrecen ventajas significativas. Los nombres singulares mejoran la legibilidad en las uniones SQL y previenen inconsistencias con los ORMs que pluralizan los nombres automáticamente. Mantener los nombres singulares garantiza la consistencia del esquema y evita posibles conflictos de nomenclatura.

Desarrollo

CRDTs: La clave para la Consistencia Eventual Fuerte

2025-09-09
CRDTs: La clave para la Consistencia Eventual Fuerte

Los CRDT (Tipos de Datos Replicados sin Conflictos) son estructuras de datos que se pueden replicar en varios nodos, editar de forma independiente y fusionar sin problemas. Este artículo profundiza en cómo los CRDT logran la Consistencia Eventual Fuerte (SEC), un modelo más robusto que la consistencia eventual tradicional. La SEC garantiza que, incluso con actualizaciones independientes en varios nodos, los conflictos se resuelven de forma automática y determinista, lo que lleva a una baja latencia, una alta tolerancia a fallos y una funcionalidad sin conexión. El autor argumenta que los CRDT son bloques de construcción fundamentales para sistemas consistentemente eventualmente fuertes, con aplicaciones que se extienden mucho más allá de la edición colaborativa y las listas de tareas para varios jugadores, hasta las bases de datos distribuidas y más allá.

Contratos para C: Una Prueba de Concepto

2025-09-09
Contratos para C: Una Prueba de Concepto

Este artículo explora la posibilidad de llevar el concepto de contratos de C++ al lenguaje C. El autor propone una solución utilizando las macros `contract_assert` y `contract_assume` para las comprobaciones de precondición y postcondición, respectivamente. La macro `defer` y la macro `unreachable` de C23 simplifican la expresión de las postcondiciones. El artículo demuestra cómo las funciones inline y las funciones auxiliares pueden agregar comprobaciones de contrato sin alterar las implementaciones principales de las funciones, aprovechando las optimizaciones del compilador. Si bien aún es necesario refinar la especificación de la interfaz, este artículo proporciona una prueba de concepto viable para contratos en C.

Desarrollo

Un Enfoque Elegante para la Detección de Bloqueadores de Anuncios: Un Aviso Discreto

2025-09-09

Cansado de los anuncios en internet que contaminan la web y de los magros ingresos que generan, el autor implementó una solución inteligente: un aviso discreto que sugiere a los usuarios usar bloqueadores de anuncios como uBlock Origin para una mejor experiencia online. El aviso solo aparece si no se detecta ningún bloqueador de anuncios y hay espacio suficiente, ofreciendo un botón de cierre fácil y un mecanismo de cookies para evitar repeticiones. El código es limpio, usando JavaScript y CSS, y considera varios métodos de bloqueo de anuncios y compatibilidad con navegadores.

Desarrollo

Ataque masivo a la cadena de suministro de paquetes NPM: millones de descargas comprometidas

2025-09-09
Ataque masivo a la cadena de suministro de paquetes NPM: millones de descargas comprometidas

Un importante ataque a la cadena de suministro se dirigió al ecosistema npm, comprometiendo múltiples paquetes con más de 2.600 millones de descargas semanales. Los atacantes utilizaron correos electrónicos de phishing para obtener acceso a la cuenta de un mantenedor, inyectando posteriormente malware en varios paquetes ampliamente utilizados. Este malware intercepta transacciones de criptomonedas en el navegador, redirigiendo fondos a billeteras controladas por los atacantes. Si bien la equipo de NPM ha eliminado algunas versiones maliciosas, el incidente destaca las vulnerabilidades de las cadenas de suministro de software y la creciente amenaza del phishing y los ataques basados ​​en navegador. El impacto se mitigó en cierta medida, ya que solo afectó a los usuarios con instalaciones nuevas en un período de tiempo limitado.

Desarrollo

El futuro incierto de Nova Launcher: ¿promesa de código abierto en peligro?

2025-09-09
El futuro incierto de Nova Launcher: ¿promesa de código abierto en peligro?

Tras los despidos de casi todo el equipo de Nova Launcher el año pasado, el fundador Kevin Barry ha dejado la empresa después de que se le pidiera que dejara de desarrollar y de abrir el código fuente. El sitio web de Nova está caído, y el futuro del popular lanzador de Android es incierto. Branch Metrics, que adquirió Nova, declaró anteriormente que la apertura del código fuente era una obligación contractual si Barry se iba. Sin embargo, con tanto Barry como el antiguo CEO fuera de la empresa, esta promesa sigue incumplida, lo que ha provocado una petición de la comunidad que exige la apertura del código fuente.

Desarrollo Lanzador Android

El fundador de Nova Launcher se va, se suspenden los planes de código abierto

2025-09-09

Kevin Barry, fundador de Nova Launcher, anunció su salida de Branch y el cese de los esfuerzos para convertir Nova Launcher en código abierto. A pesar del compromiso previo de Branch de liberar el código fuente tras la marcha de Kevin, esta promesa finalmente no se cumplió. Kevin pasó el último año manteniendo Nova Launcher por sí solo y realizó una importante preparación para su lanzamiento de código abierto, incluyendo la limpieza del código y la revisión de licencias. Esta decisión ha generado preocupación y pesar en la comunidad, dejando el futuro de este popular lanzador incierto.

Desarrollo Salida

LLVM IR incorpora tipo byte: Soporte nativo para operaciones de memoria sin procesar

2025-09-09

Un proyecto de Google Summer of Code 2025 en la Infraestructura del Compilador LLVM agregó con éxito un nuevo tipo byte al LLVM IR, representando valores de memoria sin procesar. Esto permite la implementación nativa de intrínsecos de memoria como memcpy, memmove y memcmp, corrige transformaciones no seguras y desbloquea nuevas optimizaciones, todo con un impacto mínimo en el rendimiento. El proyecto abordó la falta de un tipo para representar memoria sin procesar en LLVM, mejorando la corrección y optimización del compilador mediante el seguimiento de la procedencia del puntero y la representación precisa de bits de veneno. El manejo de Clang de los tipos de acceso a memoria sin procesar en C/C++ también se mejoró, junto con correcciones para varias optimizaciones no seguras.

Desarrollo

Recreando el efecto Liquid Glass de la WWDC 2025 de Apple con CSS, SVG y física

2025-09-09
Recreando el efecto Liquid Glass de la WWDC 2025 de Apple con CSS, SVG y física

Este artículo profundiza en la recreación del impresionante efecto de IU Liquid Glass presentado en la WWDC 2025 de Apple. Utiliza mapas de desplazamiento CSS, SVG y cálculos de refracción basados en física para lograr una aproximación convincente. El autor explica los principios de la refracción, detallando cómo la luz se curva al pasar por diferentes materiales y cómo las funciones matemáticas describen la forma de la superficie del vidrio. Los mapas de desplazamiento SVG se utilizan entonces para simular el efecto de refracción. El artículo culmina en la creación de componentes de IU, como lupas, cuadros de búsqueda, interruptores y deslizadores, con el efecto Liquid Glass. Tenga en cuenta que el rendimiento óptimo se observa actualmente en Chrome debido a la compatibilidad del navegador con filtros SVG como filtro de fondo.

Desarrollo

Ataque masivo a la cadena de suministro de npm: 2000 millones de descargas semanales comprometidas

2025-09-09
Ataque masivo a la cadena de suministro de npm: 2000 millones de descargas semanales comprometidas

El 8 de septiembre, investigadores de seguridad descubrieron un ataque masivo a la cadena de suministro que afectó a 18 paquetes npm populares, acumulando más de 2000 millones de descargas semanales. El malware intercepta silenciosamente la actividad criptográfica y Web3 en los navegadores, manipulando las interacciones de la billetera y redirigiendo los fondos a cuentas controladas por los atacantes. El atacante comprometió la cuenta del mantenedor mediante correos electrónicos de phishing, actualizando los paquetes de forma silenciosa. Si bien algunos paquetes afectados se han limpiado, se recomienda precaución; utilice prácticas seguras de gestión de paquetes npm.

Desarrollo

Sitios web conscientes de la red: haciendo que tu sitio sea más ecológico

2025-09-08

Este artículo explora el concepto de 'sitios web conscientes de la red', que ajustan el rendimiento del sitio web en función del porcentaje de energía renovable en la red eléctrica del usuario para reducir las emisiones de carbono. El autor demuestra la implementación de la conciencia de la red en los frameworks 11ty y Astro utilizando un ejemplo de página de visualización de productos de comercio electrónico, detallando la implementación técnica, los desafíos y las direcciones futuras. La idea central es ajustar dinámicamente la funcionalidad del sitio web en función de la limpieza de la energía de la red, simplificando las páginas y reduciendo el consumo de recursos en redes 'sucias' para disminuir la huella de carbono del sitio web. Si bien enfrenta desafíos de costos de API y colaboración entre pilas, esta tecnología tiene el potencial de convertirse en una herramienta significativa para mejorar la sostenibilidad del sitio web.

Desarrollo

Ejecutando LLMs localmente en macOS: Una guía escéptica

2025-09-08

Esta entrada de blog detalla la experiencia del autor ejecutando modelos de lenguaje grandes (LLMs) localmente en su máquina macOS. Si bien expresa escepticismo sobre las exageraciones que rodean a los LLMs, el autor proporciona una guía práctica para instalar y usar herramientas como llama.cpp y LM Studio. La guía abarca la elección de modelos apropiados en función de factores como el tamaño, el tiempo de ejecución, la cuantización y las capacidades de razonamiento. El autor enfatiza los beneficios de privacidad y la menor dependencia de las empresas de IA que conlleva la implementación local de LLM, ofreciendo consejos y trucos, como utilizar MCP para ampliar la funcionalidad y gestionar la ventana de contexto para evitar la pérdida de información. La entrada también aborda las preocupaciones éticas en torno al estado actual de la industria de la IA.

Desarrollo

¿Gestores de paquetes: La caja de Pandora de la programación?

2025-09-08

Este artículo examina críticamente las desventajas de los gestores de paquetes en los lenguajes de programación. El autor argumenta que los gestores de paquetes automatizan el "infierno de las dependencias", enmascarando la complejidad del proyecto y llevando a una confianza excesiva en el código de terceros. Especialmente en lenguajes que carecen de bibliotecas estándar robustas, las definiciones inconsistentes de paquetes por diferentes gestores pueden incluso llevar a "gestores de gestores de paquetes". El autor aboga por la gestión manual de dependencias, creyendo que esto obliga a los desarrolladores a pensar críticamente sobre las dependencias y mejora la estabilidad y el mantenimiento del código. Si bien reconoce el coste de tiempo, el autor argumenta que la seguridad y el control superan la conveniencia de la automatización, utilizando la biblioteca estándar completa de Go como ejemplo.

Comparación de funciones: Dos potentes aplicaciones de gestión de fotos y vídeos

2025-09-08
Comparación de funciones: Dos potentes aplicaciones de gestión de fotos y vídeos

Esta comparación analiza las funciones de dos aplicaciones de gestión de fotos y vídeos. Ambas admiten la carga y visualización de vídeos y fotos, copia de seguridad automática, prevención de duplicados, copia de seguridad selectiva de álbumes, descarga a dispositivos locales, soporte multiusuario, álbumes y álbumes compartidos, barras de desplazamiento desplazables, soporte de formatos RAW, visualización de metadatos (EXIF, mapa), búsqueda por metadatos, objetos, rostros y CLIP, desplazamiento virtual, soporte OAuth, copia de seguridad y reproducción de LivePhoto/MotionPhoto, estructuras de almacenamiento definidas por el usuario, uso compartido público, archivado y favoritos, mapa global, uso compartido con socios, reconocimiento facial y agrupamiento, recuerdos (hace x años), fotos apiladas y vista de carpetas. Sin embargo, una aplicación carece de funciones administrativas, copia de seguridad en segundo plano, visualización de imágenes de 360 grados, etiquetas y soporte sin conexión.

Escritura de Historias Visuales: Narración Interactiva mediante Manipulación Visual

2025-09-08
Escritura de Historias Visuales: Narración Interactiva mediante Manipulación Visual

Visual Story-Writing es un sistema que permite a los usuarios editar historias manipulando representaciones visuales de eventos, personajes y sus acciones. Utiliza GPT-4 para sugerir ediciones de texto basadas en cambios en la visualización (por ejemplo, mover un personaje, conectar personajes). Construido con TypeScript, React y Vite, requiere una clave de API de OpenAI e incluye tutoriales en vídeo y un artículo en arXiv.

Desarrollo

El desarrollador de la aplicación ICEBlock ignora vulnerabilidades de seguridad críticas

2025-09-08
El desarrollador de la aplicación ICEBlock ignora vulnerabilidades de seguridad críticas

La aplicación ICEBlock, descargada más de un millón de veces, permite denuncias anónimas de avistamientos del ICE. Sin embargo, su desarrollador, Joshua Aaron, ha ignorado vulnerabilidades de seguridad críticas en su servidor Apache. El investigador de seguridad Micah Lee alertó a Aaron repetidamente y le proporcionó soluciones, pero Aaron las ignoró e incluso bloqueó las cuentas de Lee. Esto genera serias preocupaciones sobre la seguridad de los datos de los usuarios y destaca el enfoque irresponsable de la aplicación en materia de seguridad.

Lectura de código: un superpoder para la caza de errores

2025-09-08

Esta publicación describe un cambio significativo en la carrera del autor: de la codificación iterativa a la detección proactiva de errores. En lugar de depender únicamente de la iteración basada en pruebas, el autor aboga por la lectura cuidadosa del código para identificar problemas de forma preventiva. La clave, argumenta el autor, es leer atentamente el código, construir un modelo mental completo del programa y luego identificar las diferencias entre ese modelo y el código real en Git. La publicación sugiere concentrarse en el flujo de control y las estructuras de datos, e identificar patrones potencialmente propensos a errores en el código. Este enfoque reduce drásticamente los errores y mejora la calidad del código.

Desarrollo lectura de código

Convertir Quejas en Contribuciones: Una Guía para Líderes

2025-09-08
Convertir Quejas en Contribuciones: Una Guía para Líderes

Las quejas persistentes en los equipos afectan la moral y la productividad. Este artículo explora la psicología detrás de las quejas, incluyendo el refuerzo, la indefensión aprendida, el locus de control, los sesgos cognitivos y la necesidad de pertenencia. En lugar de reprimir o solucionar las quejas, se insta a los líderes a utilizar preguntas para involucrar a los miembros del equipo en las soluciones. Se sugieren herramientas prácticas como reformular las quejas, las discusiones en grupos pequeños, la recolección de quejas y los rituales de reunión para transformar la energía negativa en acción constructiva. El enfoque está en cambiar de la culpa a la responsabilidad y fomentar una cultura de contribución.

Desarrollo
1 2 7 8 9 11 13 14 15 214 215