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...
- Dispara la eficiencia de tus búsquedas en memoria con .NET usando SearchValues
José M. Aguilar - Índices y rangos en C# 8 (2 de 2)
José M. Aguilar
.NET
- Microsoft WinApp CLI: la herramienta que unifica el desarrollo para Windows
José Manuel Alarcón - Cómo manejar fallos transitorios en .NET con Polly y ResiliencePipelineBuilder
Isaac Ojeda - Announcing the WinApp VS Code Extension — Run, Debug, and Package Windows Apps in VS Code -
Chiara Mooney - The best way to create email templates in .NET
David Grace - ConfigurationIgnoreAttribute in .NET 11
Steven Giesel - C# Regex: Complete Guide to Regular Expressions in .NET
Nick Cosentino - Docker Support for Isolator
Ricardo Peres - High-Performance Distributed Caching with .NET and Postgres on Azure
Matthew Schwartz - Welcome to SkiaSharp 4.0 Preview 1
David Ortinau - VSTest is Removing its Newtonsoft.Json Dependency
McKenna Barlow - Your Privacy Docs Are Fiction: Let's Fix That with .NET CLI Tools
Martin Stühmer - Harden Your .NET JSON Deserialization with System.Text.Json and JsonSerializerOptions.Strict
Khalid Abuhakmeh - Introducing ReflectionIT.DisposeGenerator — A Modern Source Generator for the Dispose Pattern
Fons Sonnemans - C# / .NET Performance: Why Is It Slow 'Here' and What Should You Optimize First?
Chris Pietschmann - Multi-layer Caching with the Decorator Pattern
Ian Griffiths - Pattern matching in C#: Advanced scenarios you didn't know
Ali Hamza Ansari - Source Generators: The Build Performance Killer Nobody Warned You About
Martin Stühmer - C# Records
Ricardo Peres - LINQ in C#: Complete Guide to Language Integrated Query (.NET 6-9)
Nick Cosentino - C#: Should This Be a Class, Record, Struct, or Interface?
Chris Pietschmann
Publicado por José M. Aguilar a las 8:01 a. m.
Etiquetas: enlaces
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...
- Tech on the Toilet: aprovechando "esos ratillos" para mejorar la calidad de nuestro software
José M. Aguilar - Índices y rangos en C# 8 (1 de 2)
José M. Aguilar
.NET
- FluentValidation en .NET 10 sin ensuciar tus entidades (Clean Architecture + MediatR)
Romny Duarte - Writing Node.js addons with .NET Native AOT
Drew Noakes - .NET 10.0.7 Out-of-Band Security Update
Rahul Bhandari - Removing byte[] allocations in .NET Framework using ReadOnlySpan<T>
Andrew Lock - Who Ran That Migration?
Martin Stühmer - Why I Switched to Primary Constructors for DI in C#
Milan Jovanović - Evaluating CRON and RRule expressions in .NET
Gérald Barré - What's new for .NET in Ubuntu 26.04
Richard Lander - Revisiting C# Scripting with the Westwind.Scripting Templating Library, Part 1 & Putting the Westwind.Scripting Templating Library to work, Part 2
Rick Strahl
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.
Por si te lo perdiste...
- Liberar automáticamente servicios creados de forma manual en ASP.NET Core
José M. Aguilar - Value Converters en Entity Framework Core
José M. Aguilar
.NET
- Hacer logs en .NET hoy
Fernando Escolar - .NET 11 Preview 3 is now available!
Michael Taylor - New Features in .NET 11 Preview 3
Anton Martyniuk - Why I'm Building a Database Engine in C#
Loïc Baumann - Building a VS Code-Style Extension System in C#
- Nick Cosentino
- Introducing dotLLM - Building an LLM Inference Engine in C#
Konrad Kokosa - Agent Skills in .NET: Three Ways to Author, One Provider to Run Them
Sergey Menshykh - LLM Chat in .NET with IChatClient: The Complete Guide
NDepend Team - Validate .NET configuration on startup
David Grace - Suppressing Roslyn Analyzer Warnings Programmatically using DiagnosticSuppressor
Gérald Barré - C# String Comparison: Equals, OrdinalIgnoreCase, StringComparer, and Culture Pitfalls
Nick Cosentino - LINQ Max and nullable value types
Ian Griffiths - How to Implement Command Pattern in C#: Step-by-Step Guide
Nick Cosentino
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.
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...
- Cómo detectar y reaccionar a cambios en settings de ASP.NET Core, en tiempo real
José M. Aguilar - Ámbito local implícito en sentencias using de C#
José M. Aguilar
.NET
- Tu App Necesita Workers Silenciosos: El Patrón que Usa Amazon para No Hacerte Esperar & * Background Jobs en .NET con IHostedService: Procesa Tareas en Segundo Plano
Gerson Azabache Martínez - Using LLMs and MCP in .NET
Ricardo Peres - Configuring contextual options with Microsoft.Extensions.Options.Contextual
Andrew Lock - How .NET handles exceptions internally (and why they're expensive)
Ali Hamza Ansari - URL Pattern Matching in .NET
Gérald Barré - How to build .NET obfuscator
Andrii Kurdiumov - Explore union types in C# 15
Bill Wagner - Convert Anything to Markdown in .NET — Meet ElBruno.MarkItDotNet
Bruno Capuano - Source code generated string enums with exhaustion support
Steven Giesel - What’s New in .NET 11 Preview 1 & 2: Runtime Async, Zstandard, Blazor TempData, and Vector Search
Arulraj Aboorvasamy - Libraries I Stopped Using in .NET (And I Don’t Regret It)
Miguel Teherán - ASP.NET Core: Why I Couldn’t Upgrade FluentValidation Past 11.4 in My Calzolari.Grpc.AspNetCore.Validation Package (and How I Finally Fixed It)
Anthony Giretti - Testing C# Source Generators: A Practical Guide
Nick Cosentino
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...
- Forzar casts imposibles con C#
José M. Aguilar - Constructores con parámetros en entidades EF Core
José M. Aguilar
.NET
- Feature Flags en .NET: Controla tu Código Sin Hacer Deploy
Gerson Azabache Martínez - Singleton vs Static Class in C#: Key Differences Explained
Nick Cosentino - SOLID Principles in C#: Beginner Guide with .NET Examples
Dirk Strauss - Speed Up .NET CI with Test Sharding
Gérald Barré - C# Tip: How to JSON Serialize and Deserialize values as DateTime, DateTimeOffset, DateOnly and TimeOnly
Davide Bellone - Introducing NtpTick: A lightweight NTP client for .NET
Jiří Činčura - Improving .NET Security Code with C# 14 Property Extensions
Wesley Cabus - Build an AI-Powered Excel Translator in C# Using OpenAI and XlsIO
Mohan Chandran - Compile-Time options validation with the OptionsValidator source generator
Bart Wullems - Generating Structured Code Using Azure, OpenAI and .NET
Ricardo Peres

