Category: Desarrollo

El Laboratorio de Código Abierto de la Universidad Estatal de Oregón enfrenta una crisis de financiación

2025-05-06
El Laboratorio de Código Abierto de la Universidad Estatal de Oregón enfrenta una crisis de financiación

El Laboratorio de Código Abierto (OSL) de la Universidad Estatal de Oregón (OSU), un proyecto de 22 años, se enfrenta a una grave escasez de fondos que pone en peligro su futuro. El OSL aloja numerosos proyectos de código abierto en todo el mundo y ha desempeñado un papel crucial en el apoyo a proyectos como Gentoo, Drupal y la Fundación Mozilla. La escasez de fondos se debe a los recortes presupuestarios federales, y el rector de la OSU ha expresado su preocupación. El OSL está buscando 250.000 dólares para mantenerse a flote, y la comunidad de código abierto ha expresado un fuerte apoyo, con muchos beneficiarios destacando su importancia.

Desarrollo

nnd: Un depurador rápido y ligero para código nativo de Linux

2025-05-06
nnd: Un depurador rápido y ligero para código nativo de Linux

Presentamos nnd, un depurador para Linux inspirado en RemedyBG, que prioriza la velocidad y un diseño ligero. Cuenta con una interfaz TUI, está construido principalmente desde cero (no se basa en gdb o lldb) y maneja ejecutables grandes de manera eficiente (probado en un ejecutable ClickHouse de 2,5 GB). nnd se centra en la velocidad; las operaciones instantáneas son realmente instantáneas, mientras que las operaciones más largas se manejan de forma asíncrona con barras de progreso. Actualmente, solo admite la depuración de código nativo de Linux x86-64 y carece de depuración remota, soporte para múltiples procesos y retroceso. Se distribuye como un único ejecutable de 6 MB sin dependencias, y se instala fácilmente mediante curl o se compila a partir del código fuente.

Desarrollo

Más allá de la programación por inspiración: Refactorización inspirada para el desarrollo de software sostenible

2025-05-06
Más allá de la programación por inspiración: Refactorización inspirada para el desarrollo de software sostenible

Cansado del subidón pasajero de la 'programación inspirada'? ¡Prueba la 'refactorización inspirada'! A diferencia de la adrenalina de producir código rápidamente, se centra en abordar la deuda técnica y refinar la arquitectura. Dedica 15-20 minutos semanales a explorar tu base de código con ojos frescos, limpiando avisos, eliminando importaciones no utilizadas, optimizando funciones e incluso utilizando LLMs para soluciones más inteligentes. La refactorización inspirada constante lleva a una mejor calidad del código, implementaciones más rápidas, equipos más felices y clientes satisfechos. Elige el crecimiento sostenible en lugar de ráfagas de entusiasmo de corta duración: ¡observa cómo crece la calidad de tu base de código!

Desarrollo

Ubuntu 25.10 adoptará sudo-rs seguro para memoria de forma predeterminada

2025-05-06
Ubuntu 25.10 adoptará sudo-rs seguro para memoria de forma predeterminada

Canonical ha anunciado que Ubuntu 25.10 usará sudo-rs de forma predeterminada, un reemplazo seguro para memoria de la utilidad sudo ampliamente utilizada, escrito en Rust. Este movimiento tiene como objetivo mejorar la seguridad y el mantenimiento de Ubuntu. Desarrollado por la Fundación Trifecta Tech, sudo-rs aborda las preocupaciones de seguridad de memoria inherentes a las implementaciones tradicionales de sudo basadas en C. Este cambio se mantendrá en Ubuntu 26.04 LTS, garantizando la seguridad y estabilidad a largo plazo.

Desarrollo

AnuDB: Una base de datos de documentos JSON ligera y sin servidor para C++

2025-05-06
AnuDB: Una base de datos de documentos JSON ligera y sin servidor para C++

AnuDB es una base de datos de documentos JSON ligera y sin servidor, diseñada para aplicaciones C++, que ofrece un almacenamiento eficiente de documentos JSON mediante la serialización MessagePack. Construida sobre RocksDB, garantiza atomicidad, durabilidad y consistencia. AnuDB proporciona una solución sin esquema con sólidas capacidades de consulta y admite MQTT para la comunicación de datos en tiempo real, ideal para aplicaciones de IoT. El uso de memoria/CPU es configurable y la compatibilidad con Docker simplifica la implementación.

Desarrollo Sin Servidor

Terminar tareas en grandes empresas tecnológicas: No es lo que piensas

2025-05-06

En las grandes empresas tecnológicas, los ingenieros competentes pueden caer fácilmente en la trampa de mejorar continuamente los sistemas existentes, descuidando la entrega real de valor. Este artículo argumenta que "terminar" el trabajo no significa un refinamiento interminable, sino llegar a un punto en el que los tomadores de decisiones de la empresa estén satisfechos. ¡Declara la victoria y sigue adelante! Esto requiere hacer que tu trabajo sea visible y comprensible para esos tomadores de decisiones, quizás demostrando un impacto financiero. En última instancia, "terminar las tareas" es una construcción social, pero poderosa, que impacta en tu carrera.

Desarrollo

Cuidado con los matices culturales del código: la trampa de mayúsculas turca 'İ'

2025-05-06

Este artículo destaca un error sorprendente: las comparaciones de mayúsculas y minúsculas de cadenas fallan en la cultura turca. La mayúscula de 'i' en turco es la 'İ' con punto, a diferencia de la 'I' inglesa, lo que hace que las comparaciones de cadenas simples fallen. El autor aboga por el uso de `StringComparison.Ordinal` o `StringComparison.OrdinalIgnoreCase` para las comparaciones de cadenas y recomienda el uso de la herramienta de Análisis de Código de Visual Studio para prevenir tales problemas. Se sugiere un enfoque gradual para agregar reglas y gestionarlas mediante archivos de reglas, evitando en última instancia errores de código derivados de diferencias culturales.

Desarrollo error de código

Hyper: Un lenguaje de marcado de IU minimalista que desafía el dominio de React

2025-05-06
Hyper: Un lenguaje de marcado de IU minimalista que desafía el dominio de React

Hyper es un nuevo lenguaje de marcado de IU minimalista diseñado para construir interfaces de usuario complejas con una sintaxis limpia, desafiando la complejidad de React. Las principales diferencias incluyen la naturaleza ligera de Hyper, un código significativamente menor, un mantenimiento más fácil y una separación completa del estilo y la lógica, lo que aumenta la reutilización. El artículo contrasta la construcción de los mismos componentes con React y Hyper, destacando cómo el diseño desacoplado de Hyper y la adhesión a los estándares web resuelven problemas de escalabilidad y mantenimiento de React. El objetivo final es una estructura de pila completa más simple con generación de IU con IA.

Anukari: Problemas de rendimiento del sintetizador de audio físico en tiempo real de macOS

2025-05-06

Anukari, un sintetizador de audio físico 3D en tiempo real basado en GPU, funciona bien en la mayoría de los sistemas macOS. Sin embargo, en algunos dispositivos Apple Silicon de gama alta, su rendimiento disminuye debido a las estrategias de ahorro de energía de la GPU de macOS. El autor intentó solucionar el problema con una estrategia de "el desperdicio acelera" (ejecutando una carga de trabajo adicional en la GPU para aumentar su frecuencia), pero esto falla en dispositivos de gama alta debido a la regulación de frecuencia independiente de múltiples chips de GPU. El autor solicita a la ayuda del equipo de Apple Metal para solucionar este problema y propone posibles soluciones, como extender el concepto de Grupo de Trabajo de Audio a la GPU o agregar una opción sensible al tiempo real a la API Metal.

Desarrollo Síntesis de audio

Argus: Un depurador interactivo para desentrañar errores complejos de Trait en Rust

2025-05-06
Argus: Un depurador interactivo para desentrañar errores complejos de Trait en Rust

El poderoso sistema de tipos de Rust es conocido, pero los errores de tipo complejos pueden ser frustrantes para los desarrolladores. Este artículo presenta Argus, un depurador interactivo que visualiza el árbol de inferencia de Trait de Rust en una interfaz gráfica, ayudando a los desarrolladores a comprender errores de Trait complejos paso a paso. Argus ofrece vistas de abajo hacia arriba y de arriba hacia abajo, junto con la expansión interactiva de tipos largos y rutas, mejorando significativamente la eficiencia de localización de errores. Un estudio de usuario mostró una aceleración de 3,3x en la localización de errores de Trait usando Argus. Argus está disponible como una extensión de VSCode y el código fuente es de código abierto.

Desarrollo

La Redención del Programador: De la Obsesión por el Código a Dejar Ir

2025-05-06

Este ensayo narra el viaje del autor, desde escribir scripts simples hasta una necesidad obsesiva de refactorizar todo el software. Inicialmente impulsado por la resolución de problemas, evolucionó hacia una compulsión por el control, viendo cada parte del software como un proyecto que necesita mejoras. El autor reflexiona sobre la psicología subyacente: usar la programación como escape, búsqueda de control y autoconsuelo. Finalmente, el autor se da cuenta de que no todos los problemas necesitan solución y aprende la habilidad madura de dejar ir.

Ordenación Bitónica 30% más rápida en CUDA: Aprovechando el Shuffle de Warp

2025-05-06

Esta publicación de blog detalla una implementación CUDA del algoritmo de ordenación bitónica, logrando un aumento del 30% en el rendimiento mediante el uso inteligente de la instrucción `__shfl_sync`. El autor explica los principios de la ordenación bitónica, la programación SIMD y los detalles específicos de la implementación CUDA. La optimización clave radica en reemplazar la comunicación de memoria compartida tradicional con `__shfl_sync`, eliminando la sobrecarga de sincronización y mejorando significativamente la eficiencia. La publicación también insinúa el potencial de utilizar esta ordenación de 32 elementos acelerada para acelerar la ordenación de secuencias más grandes, prometiendo un seguimiento sobre la optimización de la fusión de 32 vías.

Gestión de Memoria en Rust: Técnicas Avanzadas

2025-05-06
Gestión de Memoria en Rust: Técnicas Avanzadas

Esta es la quinta publicación de una serie sobre gestión de memoria en Rust, profundizando en técnicas avanzadas para manejar operaciones de memoria complejas. Comenzando con un ejemplo simple de iterador, la publicación explica las intrincadas reglas de propiedad y préstamo de Rust, aclarando por qué `for y in x` mueve la propiedad de `x` y cómo usar una referencia `&x` evita esto. El impacto de las llamadas a métodos en la gestión de memoria se analiza a continuación, detallando cómo varias llamadas a métodos pueden provocar errores del verificador de préstamos y presentando soluciones: descartar y volver a tomar prestado, almacenar un identificador, hacer una copia y reestructurar el código. La publicación concluye con una breve introducción a los tiempos de vida en Rust y los tiempos de vida no léxicos, mostrando cómo las anotaciones de tiempos de vida evitan referencias colgantes y cómo Rust usa mecanismos similares para garantizar tanto la seguridad de memoria como la seguridad de subprocesos.

Open WebUI añade una cláusula de protección de marca a su licencia

2025-05-06

Open WebUI, un proyecto independiente de IA de código abierto, ha añadido una cláusula de protección de marca a su licencia BSD-3 a partir de la versión 0.6.6. Esto se debe a un aumento de actores malintencionados que se apropiaron del proyecto, eliminaron la marca y lo vendieron con fines comerciales. La nueva cláusula no afecta a los usuarios legítimos, pero impide que aquellos que tergiversan el proyecto y obtienen beneficios sin contribuir. Permite modificaciones y redistribución, pero exige una atribución clara a menos que se cumplan condiciones específicas (por ejemplo, menos de 50 usuarios, colaborador con permiso o licencia empresarial). Open WebUI sigue siendo en gran medida de código abierto, buscando equilibrar el espíritu de la comunidad con la sostenibilidad del proyecto.

arXivLabs: Proyectos experimentales con colaboradores de la comunidad

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

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

Desarrollo

Extensión de VS Code: Agrega automáticamente palabras clave async/await

2025-05-05
Extensión de VS Code: Agrega automáticamente palabras clave async/await

Esta extensión de VS Code agrega automáticamente las palabras clave `async/await` que faltan al guardar un archivo TypeScript. Se requiere un archivo `tsconfig.json` en la carpeta del proyecto. La extensión agrega inteligentemente las palabras clave `async` y `await` para garantizar que las funciones asíncronas se ejecuten correctamente. Para evitar que se agregue `await` a una función asíncrona específica, agregue el comentario `// no-await` al final de la llamada a la función. La primera conversión puede ser lenta, pero las conversiones posteriores serán más rápidas.

Desarrollo

Adiós al consumo excesivo de CPU de Kubernetes: Automatización de contenedores ligera con Podman

2025-05-05
Adiós al consumo excesivo de CPU de Kubernetes: Automatización de contenedores ligera con Podman

En 2018, el autor experimentó con Kubernetes para la orquestación de contenedores. Si bien disfrutó de la implementación automatizada, el alto consumo de recursos de Kubernetes resultó problemático. Finalmente, descubrió Podman, una alternativa ligera a Docker. Combinado con systemd e inicio de sesión persistente del usuario, logró actualizaciones automatizadas similares a las de Kubernetes, pero con un consumo de recursos significativamente reducido, haciendo que su servidor funcione más rápido y de manera más eficiente en cuanto a energía. Este artículo comparte la experiencia del autor al migrar de Kubernetes a Podman y cómo utilizar Podman, systemd e inicio de sesión persistente del usuario para actualizaciones automatizadas de contenedores, ofreciendo una nueva perspectiva para los desarrolladores que buscan soluciones de orquestación de contenedores ligeras.

Biblioteca de IU Tkinter declarativa para Python: tkintergalactic

2025-05-05
Biblioteca de IU Tkinter declarativa para Python: tkintergalactic

tkintergalactic es una biblioteca de IU Tkinter declarativa para Python, inspirada en el enfoque de DOM virtual de React. Está bien tipada, se mapea estrechamente al Tcl/Tk subyacente para facilitar la depuración y tiene cero dependencias. Si bien aún está incompleta, su pequeño tamaño la hace fácil de entender. Los ejemplos demuestran la creación de ventanas simples, botones, cuadros de texto y listas, utilizando el administrador de diseño packer. Las mejoras futuras incluyen un algoritmo de comparación más eficiente, una gestión de estado mejorada y soporte para elementos de IU más complejos.

Desarrollo

Nakama: Servidor Distribuido para Juegos y Aplicaciones en Tiempo Real Escalables

2025-05-05
Nakama: Servidor Distribuido para Juegos y Aplicaciones en Tiempo Real Escalables

Nakama es un servidor distribuido de alto rendimiento creado para construir juegos y aplicaciones en tiempo real escalables. Ofrece funciones como registro de usuarios, funcionalidades sociales (amigos, grupos), chat, varios modos multijugador (en tiempo real y por turnos), tablas de clasificación, torneos, grupos, validación de compras en la aplicación y notificaciones. Los desarrolladores pueden extender la funcionalidad del servidor usando Lua, TypeScript/JavaScript o Go. Nakama admite la implementación de Docker y proporciona binarios nativos y bibliotecas de clientes para varias plataformas (.NET, Unity, JavaScript, Java, Unreal Engine, etc.). También incluye una interfaz de usuario web para administración y monitoreo.

Configurando el servidor de lenguaje Python en el editor Kate para entornos virtuales

2025-05-05

Esta publicación detalla la configuración de un servidor de lenguaje Python en el editor Kate para que funcione con entornos virtuales. El autor observa que, si bien existe la documentación de Kate, el proceso de configuración puede ser complicado. El artículo describe la creación de un script bash, `pylsp_in_env`, para detectar y activar automáticamente entornos virtuales. Este script se integra luego con `python-lsp-server` y `python-lsp-ruff` (para lint y formateo Ruff). La configuración final se logra especificando el script `pylsp_in_env` y el argumento de ruta `%{Project:NativePath}` en el archivo de configuración LSP de Kate.

Redfly.ai: Revolucionando el rendimiento de la base de datos con almacenamiento en caché agnóstico de esquema

2025-05-05
Redfly.ai: Revolucionando el rendimiento de la base de datos con almacenamiento en caché agnóstico de esquema

Después de más de 20 años construyendo aplicaciones basadas en datos, el equipo de redfly.ai abordó los problemas de rendimiento, escalabilidad y costo de las bases de datos. ¿Su solución? El primer sistema de almacenamiento en caché agnóstico de esquema del mundo. Al almacenar en caché de manera eficiente todas las lecturas y usar la base de datos principalmente para almacenamiento, redfly.ai evita la mayoría de los desafíos de las bases de datos basadas en disco. Actualmente admite SQL Server y Postgres, con planes para un soporte más amplio de bases de datos y plataformas en la nube, redfly.ai tiene como objetivo proporcionar a los desarrolladores una solución de acceso a datos de alto rendimiento y rentable.

Journelly: Una nueva aplicación iOS que combina notas, diario y redes sociales

2025-05-05
Journelly: Una nueva aplicación iOS que combina notas, diario y redes sociales

Journelly es una nueva aplicación iOS que combina los mejores aspectos de las aplicaciones de toma de notas, diario y redes sociales. Después de intentos anteriores fallidos de crear una aplicación de toma de notas exitosa, el desarrollador incorporó la facilidad de navegación y uso compartido que se encuentra en las redes sociales, priorizando la funcionalidad sin conexión y utilizando Org/Markdown para la portabilidad de datos y la privacidad del usuario. Journelly ofrece sincronización iCloud opcional y permite a los usuarios categorizar entradas con hashtags. Si bien actualmente es minimalista, las actualizaciones futuras prometen características adicionales, manteniendo el compromiso de evitar anuncios, seguimiento y permisos excesivos.

El Mito del Maestro Full-Stack: Por Qué la Tecnología Profunda Necesita una Reparación en la Canalización

2025-05-05
El Mito del Maestro Full-Stack: Por Qué la Tecnología Profunda Necesita una Reparación en la Canalización

Dominar toda la pila de software es increíblemente difícil, no solo técnicamente, sino también debido a una grave escasez de talento. Muchas comunidades de código abierto de bajo nivel enfrentan una base de colaboradores envejecida, con pocos ingenieros jóvenes ingresando al campo. Esto se debe en parte a la falta de atractivo del trabajo a nivel de sistema en comparación con las aplicaciones de IA modernas. El artículo explora los factores que contribuyen a esto, incluida la educación insuficiente, la subvaloración de las tecnologías fundamentales y la falla de la industria para cultivar adecuadamente el talento. La empresa del autor está abordando activamente esto mediante la colaboración con universidades, la participación en proyectos de código abierto y la reducción de la barrera de contribución. Piden un esfuerzo colectivo de la industria para nutrir el talento y asegurar el desarrollo continuo de sistemas de software sofisticados.

Desarrollo

VectorVFS: Tu sistema de archivos como base de datos vectorial

2025-05-05

VectorVFS es un paquete ligero de Python que transforma tu sistema de archivos Linux en una base de datos vectorial aprovechando los atributos extendidos nativos del VFS (Sistema de Archivos Virtual). En lugar de mantener un índice separado o una base de datos externa, VectorVFS almacena incrustaciones vectoriales directamente junto a cada archivo, convirtiendo tu estructura de directorios existente en un almacén de incrustaciones eficiente y semánticamente buscable. VectorVFS admite los Codificadores de Percepción (PE) de Meta, que incluyen codificadores de imagen/vídeo para la comprensión del lenguaje visual, superando a InternVL3, Qwen2.5VL y SigLIP2 en tareas de imagen de cero disparos. Admite CPU y GPU, pero si tienes una gran colección de imágenes, puede tardar un tiempo la primera vez en incrustar todos los elementos si no usas una GPU. Nota: Esta es la primera versión de VectorVFS y estamos ampliando los modelos y los tipos de datos. Actualmente, solo admitimos Codificadores de Percepción (PE) e imágenes.

Desarrollo

Intuición Geométrica Detrás del Teorema de la Función Inversa y la Transformación de Legendre

2025-05-05

Este artículo proporciona una explicación intuitiva y geométrica del teorema de la función inversa y la transformación de Legendre. Evitando derivaciones de fórmulas áridas, el autor utiliza métodos visuales como transformaciones de gráficos y reflexiones para aclarar la relación entre la derivada de una función inversa y su función original, y cómo la transformación de Legendre resuelve integrales de funciones inversas. Usando arctan x como ejemplo, el artículo explica claramente la aplicación de estas importantes herramientas matemáticas, destacando su amplio uso en áreas como la física.

Bracket: Un sistema de torneo fácil de usar en Python asíncrono

2025-05-05
Bracket: Un sistema de torneo fácil de usar en Python asíncrono

Bracket es un sistema de torneo fácil de usar construido con Python asíncrono (FastAPI) y Next.js (usando la biblioteca Mantine). Admite formatos de eliminación simple, todos contra todos y suizo, permitiendo torneos de varias etapas con programación de arrastrar y soltar, paneles personalizables y gestión de equipos/jugadores. Hay una demostración disponible y la implementación es sencilla mediante Docker. Se admiten varios idiomas (a través de Crowdin).

Codificación ≠ Programación: La Perspectiva de un Ganador del Premio Turing sobre la Abstracción

2025-05-05
Codificación ≠ Programación: La Perspectiva de un Ganador del Premio Turing sobre la Abstracción

Leslie Lamport, un ganador del Premio Turing de 84 años, pronunció un discurso principal enfatizando la diferencia crucial entre codificación y programación. Argumentó que el pensamiento abstracto antes de la codificación es fundamental, lo que lleva a menos errores y código más eficiente. Su propio lenguaje de especificación TLA+, utilizado en el desarrollo de la nave espacial Rosetta, sirve como un excelente ejemplo, demostrando una reducción significativa del código y mejoras arquitectónicas. Lamport critica la tendencia de los programadores a concentrarse en los lenguajes en lugar del diseño abstracto, abogando por diseñar primero el modelo abstracto del programa y luego codificarlo. Este enfoque minimiza la depuración y la revisión, lo que resulta en un código más limpio y fácil de mantener.

CodeCafé: Codificación colaborativa en tiempo real en tu navegador

2025-05-05
CodeCafé: Codificación colaborativa en tiempo real en tu navegador

CodeCafé es un entorno de desarrollo colaborativo en tiempo real, directamente en tu navegador. Diseñado para hacer la programación en parejas, la enseñanza y el desarrollo web colaborativo tan sencillos como compartir un pensamiento, CodeCafé aborda las limitaciones de las herramientas existentes para la codificación en tiempo real. Ofrece un espacio de codificación basado en navegador con funciones como vista previa en vivo perfecta en píxeles, una experiencia de edición familiar similar a la de VS Code y configuración cero. Impulsado por un sistema personalizado de Transformación Operacional (OT), permite una colaboración fluida, al estilo de Google Docs, incluso con múltiples ediciones simultáneas. El backend utiliza Java Spring Boot y una API WebSocket, mientras que el frontend utiliza React, TypeScript y otras tecnologías modernas.

La búsqueda de la red neuronal más linda: Una aventura en Cortex-M0

2025-05-05

El autor intenta ejecutar una pequeña red neuronal en un microcontrolador Cortex-M0 con recursos limitados para la estimación de pose. Los intentos iniciales utilizando frameworks como TensorFlow Lite Micro y MicroFlow resultaron demasiado voluminosos y dependientes de operaciones de punto flotante. Finalmente, decidió construir una red neuronal basada puramente en enteros desde cero utilizando JAX y escribir manualmente el código de inferencia. El viaje estuvo lleno de desafíos, y el autor comparte valiosas lecciones aprendidas, ofreciendo información útil para los desarrolladores que buscan ejecutar redes neuronales en dispositivos con recursos limitados.

Atajos de macOS: Una historia de progreso estancado

2025-05-05
Atajos de macOS: Una historia de progreso estancado

Tres años después, los Atajos de macOS siguen siendo una decepción, quedando muy por debajo de las expectativas. El autor John Voorhees revisa su evaluación anterior de Atajos, destacando su dependencia de herramientas como AppleScript y Keyboard Maestro para realizar tareas complejas, una prueba de sus limitaciones inherentes. Si bien la flexibilidad de macOS permite soluciones alternativas potentes combinando varias herramientas, este hecho subraya la falta de progreso de Apple en el desarrollo de Atajos. Las deficiencias como la mala implementación de instrucciones condicionales agravan aún más el problema. El autor argumenta que el 'proceso de años' de Apple ha superado hace mucho tiempo la tolerancia razonable, dejando el futuro de Atajos en macOS incierto.

Desarrollo Atajos
1 2 96 97 98 100 102 103 104 214 215