La Guerra de Derechos de Autor Oculta Detrás del Plug and Play de Windows 95

2025-06-29
La Guerra de Derechos de Autor Oculta Detrás del Plug and Play de Windows 95

Implementar Plug and Play en Windows 95 no fue tarea fácil. Para hacer que el hardware antiguo funcionara con la nueva característica, los ingenieros emplearon soluciones ingeniosas. Un ejemplo curioso implicó a fabricantes que agregaron la cadena "Not Copyright Fabrikam Computer" a su BIOS. Este fue un truco inteligente para engañar a la verificación de licencias de LitWare Word Processor, desbloqueando la versión completa sin ser un PC Fabrikam con licencia. Esto destaca los desafíos de la compatibilidad de PC antiguos y los esfuerzos realizados por los fabricantes para obtener licencias de software.

Leer más
Desarrollo

La eliminación 'permanente' de Contoso: No tan permanente después de todo

2025-06-25
La eliminación 'permanente' de Contoso: No tan permanente después de todo

Hace diez meses, eliminé mi cuenta de Contoso y recibí la confirmación de que mi información se había eliminado de forma permanente e irreversible. Ayer, recibí un correo electrónico de Contoso sobre una actualización de la Política de Privacidad. Su afirmación de eliminación permanente fue claramente prematura, ya que todavía poseen mi dirección de correo electrónico. Esto plantea serias dudas sobre la privacidad de los datos y la fiabilidad de las promesas corporativas.

Leer más
Varios

Herencia de Plantillas C++ y Construcción de Copias: Un static_assert Intrigante

2025-06-10
Herencia de Plantillas C++ y Construcción de Copias: Un static_assert Intrigante

Este artículo explora un problema intrigante sobre constructores de copia en la herencia de plantillas C++. La clase `Derived` hereda de la clase `Base`, donde el constructor de copia de `Base` está eliminado. Sin embargo, `Derived` define su propio constructor de copia. Aunque este constructor intenta copiar el objeto `Base` no copiable, `std::is_copy_constructible` todavía devuelve verdadero. Esto se debe a que el compilador solo verifica la presencia de un constructor de copia no eliminado, no su capacidad de instanciación. El autor también discute las diferencias entre los constructores de copia explícitamente definidos e implícitamente definidos, y las implicaciones de mover la definición del constructor de copia fuera de línea.

Leer más

Ejecutar código C# directamente sin archivos de proyecto: .NET 10 Preview 4

2025-05-29
Ejecutar código C# directamente sin archivos de proyecto: .NET 10 Preview 4

.NET 10 Preview 4 presenta una característica innovadora: ahora puedes ejecutar archivos C# directamente usando `dotnet run app.cs` — ¡sin necesidad de archivo de proyecto ni configuración! Esto reduce significativamente la barrera de entrada para C#, haciéndolo ideal para aprendizaje, creación de prototipos o scripts rápidos. Aprovecha las potentes directivas a nivel de archivo, como `#:package`, `#:sdk` y `#:property`, para gestionar paquetes NuGet, SDK y propiedades MSBuild directamente en tu archivo .cs, manteniendo la compatibilidad con los conceptos existentes de MSBuild. Incluso cuando tu script crece hasta convertirse en una aplicación completa, la conversión a una aplicación basada en proyectos es perfecta. Este flujo de trabajo simplificado facilita la experiencia de desarrollo C#, haciéndolo increíblemente accesible y conveniente para utilidades de CLI, scripts de automatización y mucho más.

Leer más

Windows 11 incorpora un nuevo editor de texto de línea de comandos: Edit

2025-05-19
Windows 11 incorpora un nuevo editor de texto de línea de comandos: Edit

Microsoft presenta Edit, un nuevo editor de texto de línea de comandos ligero para Windows de 64 bits. Este editor de código abierto, de menos de 250 KB, cuenta con funciones como soporte para ratón, apertura de varios archivos, buscar y reemplazar, ajuste de palabras y, lo que es crucial, un diseño sin modo para evitar la pronunciada curva de aprendizaje de editores modales como Vim. Se mostrará en el Programa Windows Insider en los próximos meses antes de convertirse en una parte estándar de Windows 11.

Leer más

Íconos nostálgicos de MS-DOS: ¿Más útiles que el Administrador de Programas?

2025-05-16
Íconos nostálgicos de MS-DOS: ¿Más útiles que el Administrador de Programas?

Un usuario compartió su perspectiva sobre un conjunto de iconos de MS-DOS, argumentando que son más prácticos que el conjunto predeterminado del Administrador de Programas. Ejemplos incluyen iconos para el Compilador Microsoft Basic, Microsoft Project y Close-Up 4.0, destacando su uso histórico. El autor señala fallas de diseño, como logotipos obsoletos de MS-DOS o superposiciones inadecuadas. Esto genera una discusión sobre el diseño de interfaz de usuario de software antiguo y nostalgia.

Leer más

Misterio del Retraso en el Inicio de Sesión de Windows 7: ¿Los Fondos de Color Sólido son los Culpables?

2025-04-29
Misterio del Retraso en el Inicio de Sesión de Windows 7: ¿Los Fondos de Color Sólido son los Culpables?

El autor, un usuario de fondos de color sólido desde Windows 95, descubrió un retraso de 30 segundos en la pantalla de bienvenida de Windows 7 al usar un fondo de pantalla de color sólido. Esto no se debe a un tiempo de inicio de sesión más largo, sino a un tiempo de espera que se activa cuando el sistema espera una señal que indica que la carga del fondo de pantalla ha finalizado. Los fondos de color sólido, al carecer de información de mapa de bits, impiden que se envíe esta señal. Un problema similar existe con la política de grupo "Ocultar iconos del escritorio", donde un error de codificación impide que se envíe la señal de listo. Microsoft solucionó esto en Windows 7 unos meses después de su lanzamiento. El autor también explica su preferencia por las configuraciones predeterminadas, lo que simplifica los informes de errores y su resolución.

Leer más

¡Nunca suspenda un hilo en su propio proceso!

2025-04-15
¡Nunca suspenda un hilo en su propio proceso!

Un cliente encontró un problema de bloqueo de baja frecuencia y larga duración: su hilo de interfaz de usuario llamaba al kernel y simplemente se bloqueaba. El volcado del kernel no pudo mostrar un rastreo de pila del modo de usuario porque la pila se había descartado. La investigación reveló un hilo watchdog que periódicamente suspendía el hilo de la interfaz de usuario para capturar rastreos de pila, pero esta vez se bloqueó durante más de cinco horas. La causa raíz: un interbloqueo. El hilo watchdog, intentando obtener un rastreo de pila, necesitaba un bloqueo de tabla de funciones, pero el hilo de la interfaz de usuario estaba suspendido, manteniendo el bloqueo. El artículo enfatiza que nunca se debe suspender un hilo dentro de su propio proceso, ya que esto aumenta el riesgo de interbloqueos debido a la contención de recursos. Para suspender un hilo y capturar su pila, hágalo desde otro proceso para evitar interbloqueos.

Leer más

El Misterio del Adaptador Pasivo de Ratón USB a PS/2

2025-03-28
El Misterio del Adaptador Pasivo de Ratón USB a PS/2

Los ratones USB antiguos a menudo incluían un adaptador verde para convertir el conector USB tipo A a PS/2. Este no era un adaptador inteligente; era puramente mecánico, sin circuitos. El propio ratón hacía la conversión, detectando el tipo de señal (USB o PS/2) y ajustándose en consecuencia. Es análogo a un adaptador de corriente simple: la inteligencia reside en el dispositivo, no en el adaptador. Por lo tanto, si encuentra uno de estos, recuerde que es solo un conector físico; la conversión real ocurre dentro del ratón de bus dual.

Leer más

Depurando una condición de carrera: la trampa de RtlRunOnceExecuteOnce

2025-03-23
Depurando una condición de carrera: la trampa de RtlRunOnceExecuteOnce

Un compañero encontró un complicado problema de concurrencia durante una sesión semanal de depuración: una sección crítica falló en prevenir que dos hilos entraran en el mismo bloque de código, llevando a un fallo de registro doble de `TraceLoggingRegister`. La depuración profunda reveló la causa raíz: la función de inicialización `InitializeCriticalSectionOnce` para `RtlRunOnceExecuteOnce` devolvió incorrectamente `STATUS_SUCCESS` (0). Esto llevó a `RtlRunOnceExecuteOnce` a creer que la inicialización falló, causando que reinicializara la sección crítica en cada llamada, desencadenando la condición de carrera. La solución fue cambiar el valor de retorno a `TRUE`, o más elegantemente, reemplazar `CRITICAL_SECTION` con `SRWLOCK`. Este caso destaca cómo errores sutiles en el valor de retorno pueden llevar a consecuencias graves y subraya la importancia de elegir la primitiva de sincronización apropiada.

Leer más
Desarrollo

Compilador TypeScript Nativo: Mejora del Rendimiento 10 veces mayor

2025-03-11
Compilador TypeScript Nativo: Mejora del Rendimiento 10 veces mayor

El equipo de TypeScript anunció un puerto nativo del compilador y las herramientas de TypeScript para mejorar drásticamente el rendimiento. Esta implementación nativa se proyecta para acelerar drásticamente el inicio del editor, reducir la mayoría de los tiempos de compilación en 10 veces y reducir sustancialmente el uso de memoria. Las pruebas iniciales muestran mejoras en la velocidad de compilación de más de 10 veces para varios proyectos grandes (por ejemplo, VS Code, Playwright). El futuro TypeScript nativo (previsto como TypeScript 7) admitirá refactorizaciones más avanzadas, análisis de código más profundo y sentará las bases para las herramientas de desarrollo de IA de próxima generación. TypeScript 6 (basado en JS) seguirá manteniéndose para garantizar una transición fluida.

Leer más

Problema sutil de invocación de C++/WinRT y su solución

2025-03-09
Problema sutil de invocación de C++/WinRT y su solución

Una solicitud de extracción de C++/WinRT solucionó una ambigüedad en la llamada a `invoke` en `winrt::impl::promise_base::set_completed`, causada por la búsqueda dependiente de argumentos (ADL). La actualización a corrutinas C++20 expandió el espacio de búsqueda ADL, encontrando inesperadamente `std::invoke` en lugar de `winrt::impl::invoke`. El artículo detalla el mecanismo ADL y proporciona un parche para versiones anteriores de C++/WinRT: declarando una función `invoke` más adecuada en el espacio de nombres `winrt::Windows::Foundation` para guiar al compilador. Este parche también incluye una afirmación estática para garantizar que se elimine automáticamente después de actualizar C++/WinRT.

Leer más
Desarrollo

La Trampa del 'Otro' en los Enumerados: Compatibilidad de Versiones y Enumerados Abiertos

2025-03-02
La Trampa del 'Otro' en los Enumerados: Compatibilidad de Versiones y Enumerados Abiertos

Este artículo analiza los inconvenientes de usar un valor 'Otro' (por ejemplo, WidgetFlavor::Otro) en los enumerados de C++. Agregar nuevos valores a un enumerado presenta un desafío: cómo manejarlos y mantener la compatibilidad con versiones anteriores del código. El autor sugiere evitar el uso de 'Otro' y declarar el enumerado como abierto, permitiendo que los programas gestionen los valores no reconocidos de forma independiente. Esto soluciona elegantemente los problemas de compatibilidad de versiones, evitando confusiones al agregar nuevos valores y garantizando transiciones suaves entre el código antiguo y el nuevo.

Leer más

Mejoras importantes en MSVC Address Sanitizer (ASan)

2025-02-25
Mejoras importantes en MSVC Address Sanitizer (ASan)

Microsoft ha mejorado significativamente la calidad de MSVC Address Sanitizer (ASan). Han subido con éxito las partes principales de ASan a LLVM, permitiendo una integración más rápida de las mejoras de la comunidad LLVM. Además, han integrado ASan en la base de código de MSVC, incluyendo el compilador, el enlazador y las herramientas, permitiendo la detección de problemas de seguridad de memoria en la integración continua. Visual Studio 2022 versión 17.13 incluye numerosas correcciones, reduciendo los falsos positivos, mejorando los informes de errores y gestionando escenarios multiprocesos.

Leer más
Desarrollo

Instalador de Windows 95: La historia sorprendentemente compleja de un pequeño SO

2025-02-17
Instalador de Windows 95: La historia sorprendentemente compleja de un pequeño SO

Este artículo revela la complejidad oculta del programa de instalación de Windows 95. Para crear un instalador aparentemente simple, el equipo tuvo que construir un minissistema operativo desde cero dentro de MS-DOS, incluyendo bibliotecas gráficas, un administrador de ventanas, soporte multilingüe e incluso compatibilidad con Windows 3.1. Finalmente, se dieron cuenta de que era mucho más eficiente usar el tiempo de ejecución existente de Windows 3.1, evitando enormes esfuerzos de desarrollo. La historia destaca la importancia de la reutilización de código en la ingeniería de software y expone la naturaleza sorprendentemente compleja del programa de instalación de Windows 95.

Leer más
Desarrollo

La Pantalla 'Ahora es Seguro Apagar el Ordenador': Un Viaje de Nostalgia al Windows 95

2025-02-16
La Pantalla 'Ahora es Seguro Apagar el Ordenador': Un Viaje de Nostalgia al Windows 95

¿Recuerdas el mensaje 'Ahora es seguro apagar el ordenador' en Windows 95? Esta historia narra un divertido episodio en un avión donde un pasajero de al lado reiniciaba repetidamente su portátil tras ver la pantalla 'Windows se ha apagado', sin darse cuenta de que tenía que apagar la máquina manualmente. Esto destaca la falta de administración de energía en los ordenadores antiguos y explica por qué Windows 95 incluyó el mensaje: un recordatorio amable de que era seguro presionar el botón de encendido.

Leer más
Tecnología

Anécdota de la reunión de especificaciones USB: La prima del azul translúcido

2025-02-10
Anécdota de la reunión de especificaciones USB: La prima del azul translúcido

En una reunión de especificaciones USB, una empresa presentó sus unidades de disquete USB, ofreciendo sorprendentemente versiones separadas para PC y Mac. Los miembros del comité estaban perplejos, ya que la especificación garantizaba que la misma unidad funcionara en ambos sistemas. El representante explicó que las unidades eran electrónicamente idénticas; la única diferencia era que la versión para Mac venía en plástico azul translúcido y costaba más. Esto reflejaba la tendencia popular del plástico translúcido del iMac en ese momento y destacaba cómo algunos fabricantes aprovechaban las diferencias de diseño para obtener precios premium.

Leer más

El 'Recolector de Basura Nulo' en el Software de Misiles: ¿Fugas de Memoria? ¡No es un Problema!

2025-02-07
El 'Recolector de Basura Nulo' en el Software de Misiles: ¿Fugas de Memoria? ¡No es un Problema!

Un desarrollador relata una aplicación inteligente de un 'recolector de basura nulo' en el software de misiles. Debido al tiempo de vuelo limitado y a la abundante memoria de hardware, las fugas de memoria en el programa no eran una preocupación. Los ingenieros calcularon el potencial de fuga de memoria durante el vuelo y agregaron el doble de esa cantidad de memoria para garantizar que el programa no se bloqueara antes de la finalización de la misión. Este enfoque aprovechó inteligentemente las restricciones de tiempo de ejecución del programa, resolviendo eficazmente el problema de las fugas de memoria: una especie de 'recolección de basura definitiva'.

Leer más

Reestructuración de la Criptografía de Go 1.24: Logrando el Cumplimiento de FIPS 140-3

2025-02-06

Go 1.24 refactorizó significativamente sus paquetes de criptografía para lograr el cumplimiento de FIPS 140-3. Este es un gran paso adelante, con una implementación en Go puro (y ensamblador Go) de un módulo criptográfico validado por FIPS 140-3, eliminando la dependencia de cgo o llamadas al sistema. Microsoft Go 1.24 también se actualizó, agregando soporte de vista previa para macOS y soporte mejorado para Azure Linux, pero mantiene el uso de bibliotecas del sistema para la criptografía, divergiendo del enfoque oficial de Go. Nuevas variables de entorno como GODEBUG=fips140=on y GOFIPS140=latest controlan el modo FIPS; el tiempo de ejecución lo habilita automáticamente en sistemas compatibles con FIPS (Azure Linux, Windows).

Leer más
Desarrollo

Un fallo de diseño y una tetera oculta en el protector de pantalla 3D Pipes de Windows

2024-12-28
Un fallo de diseño y una tetera oculta en el protector de pantalla 3D Pipes de Windows

El querido protector de pantalla 3D Pipes de Windows, conocido por sus hipnóticas animaciones de tuberías, esconde un secreto poco conocido: una tetera que aparece raramente. Esta tetera es un homenaje a la tetera de Utah, un objeto de referencia estándar en gráficos por computadora, pero su increíblemente baja tasa de aparición llevó a quejas de los usuarios sobre baja productividad. El artículo también revela que, en versiones anteriores de Windows, el protector de pantalla causaba un alto uso de la CPU en los servidores debido al renderizado de software, recomendando un protector de pantalla de pantalla negra para servidores.

Leer más

Errores del compilador de C++: Errores sin sentido de una declaración de función

2024-12-12
Errores del compilador de C++: Errores sin sentido de una declaración de función

Un desarrollador que añadía soporte XAML a una aplicación C++ encontró una serie de errores del compilador simplemente incluyendo el archivo de cabecera winrt/Windows.UI.Xaml.h. Los errores provenían de lo que parecía ser una declaración de función normal: `template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };` La causa raíz era una macro preexistente llamada ErrorMessage en el proyecto del desarrollador, que entraba en conflicto con el nombre de la función. Esta macro creaba un objeto ErrorMessageString y devolvía un puntero a una cadena de mensaje de error. La falta de límites de la macro hizo que el compilador interpretara erróneamente la declaración de la función como una invocación de macro, lo que resultó en errores como "argumentos insuficientes". La solución consistió en deshabilitar la macro usando #pragma undef antes de incluir el encabezado o eliminar la macro por completo y reemplazarla con una función en línea.

Leer más