Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

19 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
lunes, 29 de septiembre de 2025
Usuario poniendo a dormir su PC en una pequeña cama

Ya he publicado en mi blog la colección de enlaces a contenidos interesantes de la semana pasada 🙂

Para destacar, Milan Jovanović nos habla sobre el problema que surge al intentar coordinar tareas que se ejecutan en distintos procesos o instancias, algo que escapa al alcance de los mecanismos de sincronización tradicionales como mutex, locks o semáforos de .NET, y algunas fórmulas para resolverlo.

Andrew Lock comparte los detalles del desarrollo de 'sleep-pc', una pequeña herramienta de línea de comandos que permite poner el PC a dormir después de un tiempo determinado. Usa .NET Native AOT y es instalable directamente desde NuGet.

Y por último, David Grace nos explica los distintos atributos que xUnit pone a nuestra disposición para proporcionar datos a los tests, y las diferencias entre ellos.

El resto, a continuación.

Por si te lo perdiste...

.NET

martes, 23 de septiembre de 2025
Inspector examinando con lupa un código C#

Hace algún tiempo hablamos sobre el atributo [MemberNotNullWhen] y vimos cómo se podía usar para mejorar la seguridad frente a valores nulos en nuestras aplicaciones.

Como recordaréis, este atributo lo aplicábamos sobre miembros booleanos para asegurar que otro miembro de su misma clase no contendrá null, dependiendo del valor (true o false) del primero. El ejemplo que lo ilustraba era el siguiente:

public class Result<T>
{
    [MemberNotNullWhen(true, nameof(Value))]  // Si Success es true, Value no es null
    [MemberNotNullWhen(false, nameof(Error))] // Si Success es false, Error no es null
    public bool Success { get; init; }

    public string? Error { get; init; }
    public T? Value { get; init; }

    // Constructores, factorías, etc
}

Pero también comentamos que existían muchos otros atributos que el compilador empleaba para afinar en la detección de posibles problemas similares en el código. Al usarlos, el compilador comprende mejor las intenciones de nuestro código respecto a la utilización de nulos, y puede generar advertencias que impiden posteriores errores en tiempo de ejecución, pero sólo cuando son estrictamente necesarias.

En este nuevo post, vamos a echar un vistazo a los siguientes:

  • [NotNullWhen]
  • [NotNullIfNotNull]
  • [MemberNotNull]
lunes, 22 de septiembre de 2025
Un agente robótico comprando por internet en nombre de un usuario

Vamos con una nueva colección de enlaces a contenidos de interés que he ido recopilando durante la última semana.

Destacamos, en primer lugar, el anuncio de que las versiones STS (Soporte a Largo Plazo) de .NET pasarán a tener 24 meses de soporte en lugar de los 18 actuales, comenzando ya con .NET 9. Una buena noticia para todos aquellos que preferimos estabilidad y no estar actualizando constantemente.

Interesante el post de Ali Hamza Ansari sobre el uso de "async void" en C# y por qué es peligroso, aunque también explica cuándo es aceptable usarlo.

A tener en cuenta asimismo el anuncio de la especificación final WebAssembly 3.0, que trae varios cambios importantes, como el direccionamiento de 64 bits, mejoras en gestión de la memoria y rendimiento, manejo de excepciones y otras.

Y Google ha anunciado Agent Payments Protocol (AP2), un protocolo abierto para facilitar el pago a través de agentes de IA de forme segura y verificable, buscando estandarizar el comercio automatizado 😱 

En resto, a continuación.

Por si te lo perdiste...

.NET

lunes, 15 de septiembre de 2025
Chrome cumpliendo 17 años, Visual Studio 2026 asomándose, y el rendimiento de .NET 10

Pues ya estamos aquí, inaugurando la nueva temporada con más de 80 enlaces a contenidos interesantes que he recopilado las semanas anteriores, entre los que hay bastante material para destacar 🙂

Empezamos por el post del equipo de NDepend, donde nos muestran la pinta que podrían tener los esperados tipos unión en C#. Todavía queda para verlos, llegarían con la versión 15 (noviembre de 2026), pero está bien echarles el ojo para interiorizarlos e ir descubriendo su potencia

Seguimos con C#, porque el lenguaje que tanto usamos los desarrolladores .NET está cambiando. Andrew Lock explora los miembros de extensores de C# 14, una de las grandes novedades de la próxima versión de .NET (noviembre 2025).

Khalid Abuhakmeh aporta algunos trucos interesantes para optimizar la velocidad de carga en sitios ASP.NET Core, aunque los consejos en realidad son válidos para casi cualquier tecnología.

Vía Miguel Durán descubrimos el repositorio de Ásgeir Thor Johnson donde recopila los prompts de sistema de chatbots populares, como ChatGPT, Claude o Gemini. Aparte de lo curioso que resulta su lectura, lo más importante es que de momento no aparecen órdenes como "dominar a la humanidad" ni nada parecido, así que podemos estar tranquilos 😉

Interesante también el nuevo posicionamiento por anclaje en CSS que nos muestra Ahmad Shadeed, la propiedad position-anchor. Aunque aún no está disponible en todos los navegadores, está bien conocer su existencia porque proporciona una solución sencilla al habitual problema de ubicar un elemento respecto a la posición de otro.

Damos la bienvenida a Visual Studio 2026, aún en versión para insiders, pero que ya podemos probar. Mads Kristensen nos cuenta las novedades más importantes.

Estaba al caer, y ya llegó, el tradicional megapost de Stephen Toub sobre las mejoras de rendimiento en la próxima versión de .NET. Como siempre, muy interesante para conocer en qué se ha trabajado y qué podemos esperar de la próxima versión.

Chrome, el browser que cambió la forma de navegar por la web, acaba de cumplir 17 años, y Addy Osmani aprovecha para contarnos su origen, los objetivos que han guiado su evolución y los retos que afronta en la era de la IA.

Y muy loco el post de Lukas Vogel, que ha implementado DOOMQL, un juego de disparos multijugador al estilo DOOM, pero usando únicamente SQL. Sí, has leído bien, SQL.

El resto, a continuación...

Por si te lo perdiste...

.NET