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

20 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!
martes, 26 de mayo de 2026
Técnicos trabajando sobre partes específicas de un proyecto complejo

Probablemente alguna vez habréis trabajado en Visual Studio con una solución .NET enorme, con decenas o centenares de proyectos. Es algo habitual en sistemas que tienen ya muchos años de vida, con una arquitectura muy compleja o que han ido creciendo con el tiempo sin un control adecuado.

En estos casos, el entorno de desarrollo tarda una eternidad en cargar la solución y quedar listo para su uso, el rendimiento de Visual Studio se resiente enormemente, con lo que cada acción que realicemos (compilar, ejecutar, depurar, etc.) se vuelve lenta y frustrante, y encima, al navegar por el código, todo se complicará bastante por la cantidad de proyectos y archivos que tendremos que manejar.

Y lo peor de todo es que es para nada. En la mayoría de los casos no es necesario tener todos los proyectos de la solución cargados para poder realizar nuestras tareas, porque lo habitual es que solo trabajemos con un subconjunto de ellos, normalmente bastante pequeño.

Afortunadamente, .NET permite crear filtros de solución (archivos .slnf), algo así como mini-soluciones que incluyen solo los proyectos que nos interesan en cada ocasión, mejorando el rendimiento de los entornos de desarrollo y facilitando la navegación por el código.

En este artículo vamos a ver qué son los filtros de solución, cómo crearlos y cómo usarlos.

lunes, 25 de mayo de 2026
Manitas realizando cálculos complejos para intentar alinear un cuadro con otro

Esta semana se ha lanzado Gemini 3.5 Flash, la nueva versión de los modelos de lenguaje de Google, con mejoras significativas en rendimiento y capacidades. José Manuel Alarcón analiza qué cambios trae esta actualización para los desarrolladores.

Hay casos de uso que funcionan bien y otros que fallan, pero, ¿qué ocurre con los que funcionan a medias? En este artículo, Milan Jovanović analiza cómo diseñar para el fallo parcial en .NET, explorando estrategias para manejar situaciones donde una operación no se completa en su totalidad.

Martin Stühmer nos recuerda que el código que escribimos hoy puede convertirse en un problema para otros, o incluso nosotros mismos, en el futuro, destacando la importancia de escribir código limpio y mantenible.

El posicionamiento en CSS ha sido un desafío para los desarrolladores durante mucho tiempo, especialmente al intentar mostrar tooltips relativos a elementos del DOM. Manikanda Akash Munisamy explora cómo los anchors en CSS podrían poner fin a los cálculos manuales para alinear estos elementos.

Y por último, me ha parecido interesante compartir este artículo de Barry Pollard y Noam Rosenthal sobre las actualizaciones parciales declarativas en Chrome, una nueva característica que permite a los desarrolladores actualizar solo partes específicas de una página web sin necesidad de recargar toda la página, mejorando así la experiencia del usuario.

El resto de enlaces, a continuación.

Por si te lo perdiste...

.NET

lunes, 18 de mayo de 2026
Desarrolladora con muchos monitores en los que aparecen distintas novedades de la semana

Esta semana se ha lanzado la preview 4 de .NET 11, con novedades en el runtime, librerías, SDK, C#, ASP.NET Core, .NET MAUI y Entity Framework Core. Especialmente interesantes la compilación de librerías con el nuevo runtime asíncrono y las incorporaciones a la API Process.

Se ha anunciado que la aplicación de escritorio GitHub Copilot, la visión de Microsoft de lo que será el desarrollo agéntico, está ya disponible como technical preview. Si eres suscriptor de GitHub Copilot Pro o Pro+, puedes comenzar a probarla.

Milan Jovanović ha publicado un artículo muy interesante sobre el versionado de APIs, un tema que siempre genera debate y que él aborda desde una perspectiva muy práctica.

David Ortinau anuncia que el runtime de .NET MAUI abandona Mono y se moverá a CoreCLR en la próxima versión 11, lo que supone un gran paso adelante para esta plataforma, con mejoras en rendimiento, compatibilidad y experiencia de desarrollo.

Los futuros ordenadores cuánticos podrán romper sin demasiado esfuerzo los sistemas de cifrado actuales, lo que hace que la criptografía post-cuántica sea un tema cada vez más importante. Khalid Abuhakmeh ha publicado una guía práctica para implementarla en .NET 10, con ejemplos de algoritmos y librerías disponibles.

Por último, David Fowler ha publicado un artículo muy interesante sobre cómo la IA nos ha hecho más rápidos, pero también creó nuevos cuellos de botella que obligan a cambiar procesos y hábitos.

Muchos más enlaces a contenidos interesantes de esta semana, a continuación.

Por si te lo perdiste...

.NET

martes, 12 de mayo de 2026
Yo mismo, escribiendo este post

En 2006 estábamos en pleno apogeo de los blogs personales de contenido técnico. La comunidad de desarrolladores estaba creciendo a pasos agigantados, y los blogs eran una de las formas más populares de compartir conocimientos, experiencias y descubrimientos. Yo era un gran consumidor de estos contenidos y seguía fielmente a autores que, aún hoy, son referentes para mí en muchos aspectos.

Y aunque no sabía muy bien a dónde iba, el 8 de mayo decidí subirme a ese tren con la ilusión de aportar mi pequeño granito de arena a la comunidad y devolverle al menos una pequeña parte de lo que tanto me había dado a lo largo de los años.

Han pasado veinte años desde que escribí el primer post en Variable Not Found.

En este tiempo he publicado más de 1.600 entradas en las que he compartido mis conocimientos, experiencias y descubrimientos sobre desarrollo web, centrado sobre todo, aunque no exclusivamente, en el ecosistema de Microsoft. Los más de seis millones de visualizaciones que han tenido mis posts a lo largo de los años me han dado la oportunidad de alcanzar una audiencia global y conectar con personas de todo el mundo que comparten mi pasión por la tecnología, y llegar profesionalmente a lugares que nunca imaginé.

Muchas gracias a todos los que me habéis acompañado en este viaje, habéis leído mis posts, dejado comentarios, compartido mis contenidos y, en general, apoyado mi trabajo de alguna manera. Sin vosotros, nada de esto habría sido posible.

Pero como de costumbre, me gusta aprovechar estas fechas para mirar con frialdad y reflexionar sobre cómo vamos evolucionando y a dónde nos dirigimos. Porque, al igual que el año pasado, la cosa sigue pintando muy mal: el número de visitas sigue cayendo en picado, y la mayoría de los lectores que quedan por aquí son robots obteniendo el contenido publicado 😢

¿Vale la pena seguir adelante? Pues no lo tengo nada claro...

lunes, 11 de mayo de 2026
Desarrollador pensando si crear su nuevo tipo usando class, record, struct o interface

Tras un mini parón por vacaciones, vuelvo a la carga con los enlaces interesantes, esta vez recopilados durante las dos últimas semanas, por lo es especialmente abundante. Cerca de 90 referencias a los que creo que vale la pena echar el vistazo para estar al día de lo que se cuece en .NET, ASP.NET Core, IA, Javascript, CSS y muchos otros temas relacionados con el desarrollo de software.

Por destacar algunos, encontramos a Isaac Ojeda hablando de cómo evitar el temido problema N+1 en Entity Framework Core, todo un clásico que merece ser recordado de vez en cuando-

Y otro clásico: cuando queremos crear un nuevo tipo en C#, ¿debería ser una clase, un record, una struct o una interfaz? Chris Pietschmann nos da su opinión al respecto, y una guía práctica para elegir la mejor opción en cada caso.

Martin Stühmer nos advierte sobre los costes ocultos de los Source Generators en .NET, una tecnología muy potente pero que puede afectar al rendimiento de la compilación si no se usa con cuidado.

Mario Rodriguez nos cuenta uno de los cambios que más pueden impactar en equipos y empresas este año: GitHub Copilot pasa a un modelo de facturación por uso. Si trabajas con esta IA a diario, este enlace es casi de lectura obligatoria.

Khalid Abuhakmeh pone el foco en un problema tan común como traicionero en producción: los límites de tamaño de cookies en ASP.NET Core, con causas y soluciones prácticas para evitar sustos en aspectos como autenticación y sesiones.

Oren Eini contrasta cómo se aprendía a programar en los 90 con la forma de hacerlo en la actualidad, y cómo la IA está transformando —y a veces debilitando— la comprensión profunda que necesitan los desarrolladores de hoy.

Esto y mucho más, a continuación.

Por si te lo perdiste...

.NET

lunes, 27 de abril de 2026
Avión moderno llamado TypeScript 7 adelantando a toda velocidad a otro avión más antiguo TypeScript 6

Entre los contenidos interesantes de esta semana, se ha anunciado la beta del esperado TypeScript 7.0 implementado en Go, prometiendo mejoras de rendimiento en compilación de hasta 10 veces respecto a las versiones anteriores. Y según comentan, que la "beta" no engañe: esta versión es ya bastante estable y en muchos escenarios podríamos empezar a usarla ya y disfrutar de sus mejoras, porque además podemos instalarla "side by side" con las versiones actuales.

Por otro lado, he de decir que los constructores primarios de C# no son mi opción por defecto cuando implemento una clase. Pero bueno, como hay que estar abierto a los cambios, me ha parecido interesante el post de Milan Jovanović donde explica por qué los usa al aplicar Inyección de Dependencias.

¿La IA es una moda pasajera, o lo cambia todo? Pienses lo que pienses, lo que es seguro es la tenemos encima, y tenemos que saber cómo lidiar con esta nueva situación. José Manuel Alarcón reflexiona sobre cómo la inteligencia artificial está transformando el trabajo real, lejos de los discursos apocalípticos o utópicos, y qué deberíamos hacer al respecto.

Por cierto, si usas un plan individual de GitHub Copilot, esto te interesa. Se vienen cambios para proteger la calidad del servicio ante el aumento de la demanda actual: nuevos registros en pausa, límites de uso más estrictos, modelos retirados...

Igor Roztropiński reflexiona sobre la complejidad del desarrollo frontend moderno, y se pregunta si es esencial o realmente innecesaria, proponiendo otros enfoques para reducirlo.

Gerson Azabache nos recuerda que los microservicios no son un objetivo sino una herramienta, y no encajan en todo tipo de proyectos.

Y por último, ¿el modelo Claude se llama así por puro chovinismo francés? Seguro que muchos pensábamos que sí. Pero CampusMVP nos cuenta qué hay detrás de este nombre, todo un homenaje al padre de la teoría de la información y uno de los pioneros de la informática moderna.

El resto de enlaces a contenidos interesantes, a continuación.

Por si te lo perdiste...

.NET

lunes, 20 de abril de 2026
Desarrollador programando un cerebro con C#

Vamos una semana más con los enlaces a contenidos que me han llamado la atención durante los últimos días. 

Entre ellos, vale la pena destacar que se ha anunciado la tercera preview de .NET 11, con novedades en C#, librerías, runtime, SDK, ASP.NET Core, Entity Framework y más. Las explica bastante bien Anton Martyniuk en su blog.

¿Los modelos LLM heredan comportamientos de sus "padres"? José Manuel Alarcón comparte un estudio reciente que sugiere que los modelos de lenguaje heredan sesgos cuando son entrenados con contenidos sintéticos. Muy interesante y da para reflexionar un rato sobre lo que viene.

También me ha parecido muy llamativo el proyecto personal de Konrad Kokosa, dotLLM, un motor de inferencia LLM escrito por completo en C#. En su blog explica cómo lo ha construido y los retos a los que se ha enfrentado.

Si trabajáis con Visual Studio y aún no habéis tenido ocasión de probar el agente de depuración de GitHub Copilot, en este post de Harshada Hole encontraréis un vídeo que muestra su uso (podéis ponerle el audio en español).

Y Martin Stühmer nos recuerda que almacenar secretos en appsettings.json es una mala idea, y muestra cómo podemos migrar a una solución más segura usando herramientas de Azure como Managed Identity y RBAC.

El resto de enlaces, a continuación.

Por si te lo perdiste...

.NET

martes, 14 de abril de 2026
Desarrolladores manipulando cadenas

En .NET, todos hemos usado string.Format() cientos de veces. Se trata de una de esas herramientas que llevamos desde siempre en nuestro cinturón y usamos sin pensar demasiado en las implicaciones de rendimiento que puede tener su uso intensivo en escenarios críticos.

Sin embargo, cuando lo utilizamos en aplicaciones de alto rendimiento, en bucles con muchas iteraciones o en sistemas con limitaciones de recursos, es importante pararse un poco a pensar sobre cómo optimizar su uso.

En este artículo exploraremos cómo mejorar el rendimiento de string.Format() utilizando la clase CompositeFormat en .NET, que nos permite evitar el coste de analizar la cadena de formato cada vez que se llama al método.

lunes, 13 de abril de 2026
Dos desarrolladores cargando con el peso de la deuda técnica generada por la IA

Tras una semana de parón debido a las fiestas, volvemos con una nueva entrega de enlaces interesantes. En esta ocasión, al tratarse de dos semanas de cosecha, tenemos una recopilación bastante cargadita de contenidos a los que vale la pena echar un vistazo.

Pero como siempre, destacaremos unos cuantos.

José Manuel Alarcón nos habla de que el uso de la IA sin un control adecuado podría introducir deuda técnica en nuestros proyectos, y nos ofrece una guía para evitarla.

Con tanta novedad en el mundo de las herramientas IA para desarrolladores, a veces no es fácil distinguir conceptos que a priori parecen similares, pero en realidad son muy diferentes. Para ayudarnos un poco con esto, Juan Luis Guerrero nos explica las diferencias entre agentes, skills y comandos en el contexto de herramientas como Claude Code, Codex, Copilot CLI y Gemini CLI.

Fernando Escolar nos recuerda la importancia de mejorar continuamente nuestro código con pequeños cambios, que, aunque no sean espectaculares, pueden marcar una gran diferencia en la calidad y mantenibilidad de nuestro software.

Gerson Azabache nos habla de "workers" o tareas en segundo plano para lograr que nuestras aplicaciones respondan de forma rápida y eficiente, consiguiendo una experiencia de usuario más fluida, y luego nos enseña cómo implementarlos en .NET con IHostedService.

Y para terminar, todo un clásico: ¿quieres mostrar una dirección de correo electrónico en tu sitio web sin que los spammers se ceben con ella? Spencer Mortensen nos cuenta las técnicas de ofuscación de correo electrónico que siguen funcionando en 2026.

El resto de contenidos interesantes, a continuación.

Por si te lo perdiste...

.NET

lunes, 30 de marzo de 2026
Dos policías arrestando a un desarrollador que estaba usando una IA para generar su código

Pues nos vamos de Semana Santa con unos cuantos enlaces interesantes para entretenernos durante las vacaciones, en caso de haberlas 😎

Y como siempre me gusta destacar algunos, comencemos por Mark Seemann, que trata un tema algo controvertido, pero interesante: si usamos agentes IA para generar nuestro código sin supervisión, ¿quién es responsable de ese código? ¿podríamos ir a prisión por un código generado por una IA? Spoiler: ándate con cuidado, por si acaso.

José Manuel Alarcón nos cuenta esta semana qué son los proyectos greenfield y brownfield, términos usados últimamente con mucha frecuencia. Y de paso, también nos envía una llamada de atención sobre el cambio de política de datos de GitHub, que les permitirá en poco tiempo utilizar nuestro código para entrenar a sus modelos de IA, y nos cuenta cómo evitarlo.

Daniel Rosenwasser ha anunciado TypeScript 6.0, la última versión del lenguaje antes de dar el esperado salto a Go, previsto para TypeScript 7.0. En esta nueva versión se han incluido mejoras en el lenguaje y el sistema de tipos y soporte para nuevas APIs.

Nick Cosentino nos lleva a las bases explicando las diferencias entre el patrón Singleton y las clases estáticas en C# y cuándo deberíamos usarlas.

Y la frikada de la semana la encontramos en el blog de Chema Alonso, que nos cuenta cómo es posible guardar, descargar y ejecutar el juego Doom desde el DNS de Cloudflare.

El resto de enlaces a contenidos que no puedes perderte, a continuación.

Por si te lo perdiste...

.NET

lunes, 23 de marzo de 2026
Doctor diseccionando un robot para conocer su anatomía

La semana pasada encontré gran cantidad de contenidos interesantes sobre desarrollo web, .NET, IA, acceso a datos, MAUI y otros temas, aunque me gustaría destacar varios artículos, todos relacionados con la inteligencia artificial, a los que, como mínimo, deberías echarles un vistazo.

En primer lugar, Fernando Escolar nos explica detalladamente las distintas piezas que componen un agente de IA, y cómo se relacionan entre sí.

Braulio Díez, citando a Sabina, reflexiona sobre el modelo de negocio de los proveedores de IA como OpenAI o Anthropic, y cómo pueden permitirse perder cantidades ingentes de dinero en sus operaciones, en busca de un beneficio futuro astronómico.

Miguel Durán comparte un proyecto personal que ha creado para comprobar qué modelos de IA podemos ejecutar en nuestra máquina local, muy útil para usar IA generativa sin pasar por caja y sin enviar datos hacia fuera.

Por último, Addy Osmani nos habla de la deuda de comprensión que se genera al usar código generado por IA, y cómo esto puede afectar a los desarrolladores a largo plazo.

El resto de enlaces, a continuación.

Por si te lo perdiste...

.NET

martes, 17 de marzo de 2026
Desarrollador tomando muchas precauciones al trabajar con un método que recibe un parámetro IEnumerable<int>

En .NET, es bastante habitual que nuestros métodos o funciones reciban objetos de tipo IEnumerable<T> con la intención de que iteremos sobre ellos para lograr el comportamiento deseado. Esta abstracción es muy poderosa, ya que nos permite trabajar con cualquier colección o secuencia de datos sin preocuparnos por su implementación concreta, pero, si no somos cuidadosos, puede llevarnos a errores y comportamientos inesperados.

Por ejemplo, es muy frecuente realizar múltiples enumeraciones sobre la misma instancia de IEnumerable<T>, algo que a veces puede ocurrir de forma inconsciente, y se convierte en un problema cuando la secuencia es muy extensa o su contenido no es replicable. De hecho, muchas herramientas y entornos de desarrollo nos advierten sobre este problema durante la edición y compilación para que estemos atentos.

Otro problema común es asumir que la secuencia es finita, algo que no tiene por qué ser siempre cierto. Las enumeraciones en este caso pueden llevar a bucles infinitos o a un consumo excesivo de recursos.

En este artículo exploraremos distintos escenarios que pueden darse y cómo podemos evitarlos.

lunes, 16 de marzo de 2026
Semáforo en avenidas muy concurridas

Esta semana me he topado con bastantes contenidos interesantes 😊

Por citar algunos, ya tenemos aquí la segunda preview de .NET 11, con novedades interesantes como el runtime asíncrono, soporte nativo para trazas alineadas con OpenTelemetry, mejorillas en Blazor, soporte para OpenAPI 3.2.0, nuevas plantillas de proyecto, mejoras en rendimiento y más. Si quieres conocer todos los detalles, no te pierdas el anuncio oficial.

Bipin Joshi nos habla de las Minimal APIs una vez pasó el hype inicial: qué nos aportan, las ventajas e inconvenientes de su ausencia de código ceremonial y sus escenarios de uso ideales.

Gurveer Arora continúa exprimiendo el potencial de HTML y CSS con su serie NoJS, y en esta ocasión nos trae un clon de Flappy Bird hecho sin una sola línea de JavaScript. Porque poderse, se puede.

También me ha parecido interesante la lectura de The WebAssembly Component Model, una arquitectura para la construcción de librerías y aplicaciones interoperables utilizando WebAssembly.

Y Ricardo Peres continúa explorando las APIs de sincronización en .NET, y en esta ocasión nos habla de las herramientas que tenemos a nuestra disposición para sincronizar distintos procesos, como Mutex, Semaphore y EventWaitHandle.

El resto de enlaces, a continuación.

Por si te lo perdiste...

.NET

lunes, 9 de marzo de 2026
Desarrollador haciendo ejercicio mientras trabaja

Ya he publicado los enlaces a contenidos interesantes que he ido descubriendo a lo largo de la semana pasada 😊

En esta entrega, destacamos el repaso de Martin Stühmer a los errores más comunes en la gestión de sesiones en aplicaciones ASP.NET Core y cómo evitarlos para mejorar su seguridad de nuestras aplicaciones.

Se ha lanzado la versión 1.0 del SDK oficial de MCP para C#. Aún no he tenido tiempo de probarlo, pero así al vistazo parece que puede facilitarnos un poco la vida a la hora de integrar nuestras aplicaciones con modelos de lenguaje y otros servicios de IA.

Y seguimos con más lanzamientos, Jetbrains han anunciado ReSharper para Visual Studio Code, Cursor y editores compatibles. Como fan incondicional de esta herramienta desde hace años, me alegra que ahora esté también disponible más allá de Visual Studio.

Por último, Gerson Azabache nos recuerda la importancia de hacer ejercicio, especialmente para los desarrolladores, que pasamos muchas horas sentados frente al ordenador y a menudo descuidamos nuestra salud física.

Muchos más enlaces a contenidos interesantes, a continuación.

Por si te lo perdiste...

.NET

martes, 3 de marzo de 2026
Dos personas conectadas a una máquina para cambiar su identidad

Vamos con una entrega más (siete llevamos ya) de la serie C# bizarro, estos divertidos posts donde ponemos a prueba nuestros conocimientos del lenguaje mientras exploramos algunas de sus características extrañas o poco conocidas.

En esta ocasión, os propongo que le echéis un vistazo al siguiente código, en especial a su método ChangeIdentity(), que pretende cambiar la identidad de una persona por la de otra que le llega como parámetro:

var john = new Person() { Name = "John" };
var peter = new Person() { Name = "Peter" };

john.ChangeIdentity(peter);
Console.WriteLine(john.Equals(peter));

struct Person
{
    public string Name;

    public void ChangeIdentity(Person otherPerson)
    {
        this = otherPerson; // WFT!?!?
    }
}

En efecto, en el cuerpo del método estamos asignando un nuevo valor a this. ¿Pensáis que esto compilará? Y en caso afirmativo, ¿qué veríamos en la consola al ejecutarlo, true o false?

Deteneos un poco en el código y pensad en la respuesta, que, aunque tiene algo de truco, seguro que podéis encontrarla porque no es muy retorcida. Pero si se resiste o no lo tenéis claro, siempre podréis pulsar aquí para leer la solución 👇👇

El código, efectivamente, compila sin problema. Aunque la asignación de this pueda parecer extraña, es perfectamente válida en C# porque estamos en el interior del método de instancia de una estructura. No compilaría, en cambio, si Person fuera una clase.

Esto se debe a que internamente las estructuras son tipos valor, por lo que this representa una copia completa del valor de la estructura en memoria. Al asignar this = otherPerson, estamos copiando el valor de otherPerson sobre this, lo que en la práctica significa que estamos copiando el valor de todos los campos de la estructura origen sobre la actual, aunque sin tener que hacerlo de forma manual 🙂

En clases, sin embargo, this es una referencia (o puntero) inmutable a la instancia del objeto en memoria, por lo que no se puede reasignar para ponerla apuntando a otro objeto.

Ahora vamos con la segunda parte de la pregunta, ¿qué veremos en la consola al ejecutar el código que utiliza el método ChangeIdentity()?

var john = new Person() { Name = "John" };
var peter = new Person() { Name = "Peter" };

john.ChangeIdentity(peter);
Console.WriteLine(john.Equals(peter));

Seguro que habéis adivinado que la respuesta es true. Fijaos que si hubiésemos utilizado clases en lugar de estructuras, el resultado habría sido false, ya que john y peter serían punteros a objetos distintos en memoria y la igualdad por referencia nunca sería cierta. Pero al ser estructuras, la comprobación de igualdad se realiza por valor, es decir, comparando los valores de todos sus campos.

Y dado que anteriormente hemos copiado los valores de todos los campos de peter sobre la estructura john, ambos objetos son idénticos en memoria y, por tanto, la operación de comparación devuelve true.

Qué, ¿lo habíais adivinado? 😄

Publicado en Variable not found.

lunes, 2 de marzo de 2026
Desarrollador bastante desesperado mientras depura un código

Una semana más, vamos con los enlaces a contenidos interesantes que he ido recopilando durante estos días, entre los que destaco algunos posts.

Juan Irigoyen comparte sus experiencias utilizando IA para optimizar SQL Server, en un interesante recorrido por la preparación de un agente Claude capaz de analizar y optimizar consultas SQL, con resultados bastante prometedores.

La depuración puede ser una labor compleja, intensa, a veces frustrante y otras gratificante, pero sin duda forma parte de nuestro día a día. En este artículo, Jeremy D. Miller reflexiona sobre el proceso de depuración, compartiendo consejos para abordar los problemas de manera efectiva-

Y para terminar, una frikada épica a la que llego a través de Microsiervos: un procesador x86 completo implementado únicamente con CSS, sin una sola línea de código JavaScript, y que es capaz de ejecutar código ensamblador compilado para ese procesador.

El resto de contenidos interesantes, a continuación.

Por si te lo perdiste...

.NET

lunes, 23 de febrero de 2026
Desarrollador trabajando concentrado mientras alrededor pasan muchas cosas

Otra semana de contenidos interesantes en la web 🙂

Según Milan Milanović, solo 3–4 horas al día son realmente productivas al programar, porque el resto del tiempo se pierde por límites cognitivos, reuniones e interrupciones. Si conseguimos optimizar ese tiempo, mejorará nuestro rendimiento y la calidad del software que desarrollemos, mucho más que intentar trabajar más horas.

Bruno Capuano nos habla sobre la generación de embeddings, tanto de texto como de imágenes, en nuestro equipo local, y nos presenta una biblioteca de código abierto que ha desarrollado para facilitar esta tarea en .NET.

¿En qué se diferencian las colecciones Readonly de las Immutables? ¿Y qué son las colecciones Frozen? Pues aunque parezcan lo mismo, Davide Bellone nos muestra que son cosas muy diferentes.

La primera preview de .NET 11 ya trae algunas novedades interesantes. Steven Giesel nos muestra que el nuevo runtime async es una realidad, y que va a mejorar mucho el rendimiento de las aplicaciones asíncronas.

El resto de enlaces a contenidos interesantes, a continuación.

Por si te lo perdiste...

.NET

martes, 17 de febrero de 2026
Una lambda petrificada

No es algo que se utilice habitualmente, y a veces incluso es un detalle desconocido por los desarrolladores, pero las funciones lambda de C# pueden ser estáticas. Y no es porque sea algo nuevo, pues esta característica se introdujo en la versión 9.0 del lenguaje en 2020... simplemente son esos pequeños detalles que se van añadiendo al lenguaje sin hacer mucho ruido, y que a veces pasan desapercibidos.

De hecho, el uso de lambdas estáticas puede ayudarnos a escribir un código más seguro y predecible, además de tener cierto impacto en el rendimiento de nuestras aplicaciones, por lo que merece la pena conocerlas y saber cuándo y cómo usarlas.

En este post vamos a ver qué son las lambdas estáticas, cómo se implementan y cuándo y por qué deberíamos usarlas.

lunes, 16 de febrero de 2026
Desarrollador senior recordando cómo era programar cuarenta años atrás

Mucho contenido interesante en la recopilación de enlaces de esta semana, entre los que me gustaría destacar algunas lecturas a las que, como mínimo, vale la pena echar un vistazo.

Ha llegado la primera preview de .NET 11, con un buen puñado de novedades en el runtime, librerías, SDK, C#, ASP.NET y Blazor. En el post del anuncio oficial podéis encontrar el listado completo y enlaces para profundizar en cada una de ellas.

Tenemos un doblete de Ricardo Peres sobre Entity Framework Core. Primero, profundiza en la forma de mapear distintos tipos de relaciones y las novedades que se han introducido en las últimas versiones para facilitar esta tarea, y luego nos habla sobre la validación de estado de entidades en este framework.

GitHub Copilot es indudablemente una herramienta alucinante, pero a veces no es fácil saber qué modo de uso es el más adecuado para cada tarea. José Manuel Alarcón nos lo explica en este artículo

Y siguiendo con dobletes, el mismo autor nos trae un interesante artículo analizando cómo determinadas narrativas negativas amplificadas en redes sociales pueden generar frustración y malas decisiones en desarrolladores júnior, y propone estrategias prácticas para reconocer ese sesgo y protegerse de él.

Por último, James Randall comparte cómo ha cambiado la programación en 40 años y cómo ha cambiado también su relación con ella. Si tienes ya unos añitos, probablemente te sentirás identificado.

El resto de enlaces, a continuación.

Por si te lo perdiste...

.NET

lunes, 9 de febrero de 2026
Agente OpenClaw realizando distintas tareas mientras el usuario hace crucigramas

En los enlaces interesantes de esta semana, creo que vale la pena destacar el post de Peter Steinberger anunciando OpenClaw, el nuevo nombre de Moltbot, que a su vez fue un nuevo nombre para Clawd. En cualquier caso, una plataforma abierta que, con sus luces y sus sombras, ha traído aire fresco al mundo de los agentes personales inteligentes alojados en nuestra propia infraestructura.

También, gracias a Kevin W. Griffin, esta semana he descubierto la función COUNT(*) OVER() de SQL Server, que permite obtener el número total de filas en una consulta sin necesidad de hacer una consulta previa adicional, muy útil para paginación de datos.

Teresa Torres, por su parte, ha publicado un post muy interesante explicando cómo funciona ChatGPT, con un lenguaje bastante más accesible para humanos "normales" que lo que solemos encontrar por la red.

Por último, David Grace nos recuerda que nuestras excepciones pueden exponer información sensible que podría ser utilizada por algún desalmado, y cómo evitarlo utilizando herramientas proporcionadas por ASPNET Core.

El resto de enlaces, a continuación.

Por si te lo perdiste...

.NET

martes, 3 de febrero de 2026
Un profesor en una pizarra mostrando funciones con distinto número de parámetros

Muchas veces habéis escrito métodos o funciones en las que recibís un parámetro, dos parámetros, tres, cuatro... Y seguro que alguna vez habéis llegado a un punto en el que habéis tenido la sensación de que el número de parámetros se os ha ido de las manos. En este momento, estaremos percibiendo el code smell llamado "Long Parameter List" o "Lista de Parámetros Larga", todo un clásico en el aromático arte de la programación ;)

Porque, indudablemente, cuando un método o función recibe demasiados parámetros puede volverse difícil de leer, entender y mantener, y son muy propensos a errores de codificación, sobre todo si los tipos de datos de los parámetros son similares o si su orden no es claro o intuitivo.

Pero, ¿cuántos parámetros son demasiados parámetros? ¿Cinco? ¿Diez? ¿Veinte? Como suele ocurrir, no existe una respuesta única y categórica sobre el tema, aunque sí existen algunas recomendaciones que pueden ayudarnos a tomar una decisión cuando nos enfrentamos a esta situación.

lunes, 2 de febrero de 2026
Enlaces interesantes

Aquí tenemos la colección de enlaces a contenidos interesantes que he recopilado a lo largo de la semana pasada 🙂

En esta ocasión, me gustaría destacar el artículo de Jose Manuel Alarcón sobre la charla de Demis Hassabis y Dario Amodei, CEOs de Google DeepMind y Anthropic respectivamente, en el Foro Económico Mundial de Davos 2026, donde hablaron sobre la llegada de la AGI y su impacto en el desarrollo de software y otras áreas. Muy interesante.

Continuando con gurús, Anders Hejlsberg, el arquitecto detrás de C# y TypeScript, compartió en una entrevista reciente algunas lecciones aprendidas a lo largo de su carrera: retroalimentación temprana, renunciar a preferencias personales, colaboración abierta y muchas otras.

También vale la pena echar un vistazo al post de Braulio Díez, donde describe la a la que se enfrentan a diario las personas que deciden emprender en el mundo tecnológico, ya sea como autónomos o como empresa. Y es que, muy a menudo, desde fuera solo vemos la punta del iceberg.

Volviendo a terrenos más técnicos, encontramos un artículo de Grant Riordan sobre cómo implementar uniones de tipos seguros en C# utilizando la biblioteca OneOf. Muy útil para quienes buscan mejorar la seguridad de tipos en sus aplicaciones.

Y muy interesante también la extensión Renamifier para Visual Studio, creada por Calvin Allen, que permite renombrar proyectos de forma segura, evitando las tareas manuales y problemas habituales asociados con este proceso.

El resto de artículos, a continuación.

Por si te lo perdiste...

.NET

lunes, 26 de enero de 2026
Sala de servidores de Cloudflare analizando el tráfico de Internet

La entrega semanal de los enlaces interesantes ya está disponible, con cerca de cincuenta referencias a contenidos a los que creo que merece la pena echar un vistazo.

Y por destacar, en primer lugar, la interesante reflexión de Braulio Díez sobre las nuevas posibilidades y peligros que ofrece la IA generativa en el ámbito de la programación, y algunas predicciones sobre lo que veremos en 2026 a este respecto.

La invalidación de una caché distribuida es un problema complejo. Milan Jovanović nos explica cómo solucionarlo usando Redis e HybridCache.

Davide Bellone abre un interesante debate sobre la necesidad (o no) de usar el sufijo Async en los métodos asíncronos de C#. Yo soy de Async, ¿y tú?

También vale mucho la pena dedicar un ratillo a leer el informe de Cloudflare 2025 Year in Review, donde, desde su privilegiada posición, analizan lo que ven pasar por sus redes. Spoiler: mucho tráfico, mucha IA, mucho ataque DDoS, incremento de uso de encriptación post-cuántica, etc.

Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)

Por si te lo perdiste...

.NET

martes, 20 de enero de 2026
Desarrollador inyectando componentes en un sistema

Normalmente, cuando registramos un servicio en el inyector de dependencias de .NET, lo hacemos una única vez. A veces registramos directamente el servicio, aunque lo habitual es que lo asociemos a una interfaz, de forma que en futuro podamos sustituir la implementación sin tener que cambiar el resto del código:

// Registramos el servicio asociado a una interfaz:
builder.Services.AddScoped<IInvoiceIssuer, InvoiceServices>();

Sin embargo, nada impide que el mismo servicio lo registremos varias veces asociándolo a distintas abstracciones, sobre todo si tenemos nuestras clases de servicio son muy extensas y estamos haciendo segregación de interfaces (la "I" de los principios SOLID):

// Registramos el servicio asociado a varias interfaces, de forma
// que en otros servicios sólo será necesario inyectar la interfaz 
// concreta que necesitemos:
builder.Services.AddScoped<IInvoiceIssuer, InvoiceServices>();
builder.Services.AddScoped<IInvoiceSender, InvoiceServices>();
builder.Services.AddScoped<IInvoicePrinter, InvoiceServices>();
...

Pero fijaos que esto está introduciendo un sutil problema: cada vez que se inyecte una de estas interfaces, se creará una nueva instancia de InvoiceServices, lo cual, además de consumir más recursos, puede ser un problema si a su vez el servicio depende de otros componentes que no puedan o deban ser compartidos:

public class DoSomething
{
    public DoSomething(IInvoiceIssuer issuer, IInvoiceSender sender, IInvoicePrinter printer)
    {
        // Aquí se habrán creado tres instancias de InvoiceServices
    }
}

¿Cómo podemos solucionarlo?

lunes, 19 de enero de 2026
Desarrollador con un Spectrum celebrando el vigésimo aniversario de jQuery

Ya tenemos lista la recopilación de enlaces a contenidos que he ido descubriendo a lo largo de la semana pasada. Como siempre, mucha información interesante para seguir aprendiendo y estar al día.

Merece la pena destacar el post de José Manuel Alarcón descubriéndonos por qué muchos desarrolladores usamos el punto y coma, y dónde está su origen.

Muy interesante y curioso el artículo interactivo de Alex Harri sobre la representación de imágenes usando caracteres ASCII, el ASCII-art de toda la vida.

Y me ha llamado la atención el vigésimo aniversario de jQuery, todo un clásico que, aunque ha dejado de ser la opción por defecto para muchos, sigue siendo la biblioteca más usada de la web, y continúa su evolución presentando la versión 4.0.0.

En resto de contenidos, a continuación.

Por si te lo perdiste...

.NET

lunes, 12 de enero de 2026
Top 10 posts 2025 en Variable not found

Desde hace ya casi veinte años, reservo el primer post de enero para compartir con vosotros los contenidos más leídos del año anterior, sobre todo para asegurarme de que no os habéis perdido ninguno de ellos 😊

Así que, como no podía ser de otra forma, aquí tenéis los top posts de 2025, una lista prácticamente copada por artículos relacionados con .NET y C#, especialmente en sus últimas versiones, que han sido los grandes protagonistas del año en el blog.