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, 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.