<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-27752126</id><updated>2026-06-02T16:33:35.412+02:00</updated><category term="enlaces"/><category term="trucos"/><category term="desarrollo"/><category term="aspnetmvc"/><category term="novedades"/><category term="asp.net"/><category term="c#"/><category term="aspnetcore"/><category term=".net"/><category term="programación"/><category term="aspnetcoremvc"/><category term="blogging"/><category term="autobombo"/><category term="web"/><category term="blazor"/><category term="curiosidades"/><category term="buenas prácticas"/><category term="noticias"/><category term="servicios on-line"/><category term="aniversario"/><category term="herramientas"/><category term="variablenotfound"/><category term="javascript"/><category term="blazorwasm"/><category term="blazorserver"/><category term="vs2008"/><category term="netcore"/><category term="vb.net"/><category term="eventos"/><category term="humor"/><category term="vacaciones"/><category term="historias"/><category term="mvp"/><category term="patrones"/><category term="variablenotfound.com"/><category term="ajax"/><category term="css"/><category term="jquery"/><category term="sponsored"/><category term="signalr"/><category term="spam"/><category term="xhtml"/><category term="antispam"/><category term="consultas"/><category term="mono"/><category term="componentes"/><category term="inocentadas"/><category term="personal"/><category term="sorteo"/><category term="estándares"/><category term="microsoft"/><category term="frikadas"/><category term="recomendaciones"/><category term="tecnología"/><category term="técnicas de spam"/><category term="viajes"/><category term="10años"/><category term="auges"/><category term="c#6"/><category term="curso"/><category term="diseño"/><category term="google"/><category term="navidad"/><category term="scripting"/><category term="software libre"/><category term="visualstudio"/><category term="webapi"/><category term="depuración"/><category term="efcore"/><category term="frases célebres"/><category term="productividad"/><category term="trabajo"/><category term=".net9"/><category term="bases de datos"/><category term="c#bizarro"/><category term="calidad"/><category term="charlas"/><category term="libros"/><category term="razor"/><category term="software"/><category term="validadores"/><category term="c#8"/><category term="cartujadotnet"/><category term="entity framework"/><category term="katana"/><category term="linq"/><category term="owin"/><category term="proyectos"/><category term="seguridad"/><category term="tutorial"/><category term="tutorial-owin-katana"/><category term="c#7"/><category term="chuletas"/><category term="conceptos"/><category term="interfaces"/><category term="nivel básico"/><category term="optimización"/><category term="rendimiento"/><category term="summit"/><category term="antipatrones"/><category term="azure"/><category term="c#10"/><category term="colaboraciones"/><category term="comentarios"/><category term="desastres"/><category term="html"/><category term="blogger"/><category term="buscadores"/><category term="c#11"/><category term="frameworks"/><category term="instalación"/><category term="json"/><category term="leyes"/><category term="linux"/><category term="middlewares"/><category term="opinión"/><category term="protocolos"/><category term="resumen"/><category term="routing"/><category term="utilidades"/><category term="vs2010"/><category term=".net10"/><category term=".net8"/><category term="alegrías"/><category term="apis"/><category term="aspnet5"/><category term="ayuda"/><category term="blazorinterop"/><category term="c#12"/><category term="c#9"/><category term="epónimos"/><category term="error"/><category term="fiddler"/><category term="grpc"/><category term="historia"/><category term="http"/><category term="ie"/><category term="lambdas"/><category term="localizacion"/><category term="niftydotnet"/><category term=".netcore"/><category term="ado.net"/><category term="c#13"/><category term="cms"/><category term="dsl"/><category term="empresa"/><category term="errores"/><category term="generadores"/><category term="interacción"/><category term="java"/><category term="jorgeturrado"/><category term="jqGrid"/><category term="knockout"/><category term="metaprogramación"/><category term="motores de física"/><category term="nostalgia"/><category term="nuget"/><category term="oscarsotorrio"/><category term="paranoias"/><category term="problema"/><category term="reflexiones"/><category term="signalr21"/><category term="static files"/><category term="syncfusion"/><category term="tags"/><category term="unity"/><category term="vs2019"/><category term="vs2022"/><category term="webmatrix"/><category term="webpages"/><category term="Spectrum"/><category term="actualidad"/><category term="arquitectura"/><category term="asincronía"/><category term="c#14"/><category term="campusmvp"/><category term="creatividad"/><category term="delegados"/><category term="emoticonos"/><category term="equipos"/><category term="extensiones"/><category term="flash"/><category term="innovadores"/><category term="interfaces fluidos"/><category term="jwt"/><category term="navegadores"/><category term="netframework"/><category term="nivel alto"/><category term="office"/><category term="openapi"/><category term="orcas"/><category term="orm"/><category term="phishing"/><category term="portales"/><category term="radarc"/><category term="redes"/><category term="redes sociales"/><category term="redondear esquinas"/><category term="streaming"/><category term="summit2012"/><category term="swagger"/><category term="t4"/><category term="troyanos"/><category term="vs"/><category term="vs2012"/><category term="vsanywhere"/><category term="webforms"/><category term="webgrid"/><category term="windows"/><category term="árboles de expresión"/><category term=".net6"/><category term=".net7"/><category term="10x"/><category term="1337"/><category term="2.0"/><category term="2009"/><category term="SEO"/><category term="analytics"/><category term="análisis"/><category term="aspnet"/><category term="aspnetcore mvc"/><category term="aspnetvnext"/><category term="async"/><category term="autenticación"/><category term="autofac"/><category term="blazorrserver"/><category term="bootcamp"/><category term="bootstrap"/><category term="bytecode"/><category term="c++"/><category term="caching"/><category term="cadenas de conexión"/><category term="calendar"/><category term="chacha"/><category term="chascarrillos"/><category term="chrome"/><category term="closedxml"/><category term="communityday"/><category term="compilador"/><category term="concienciación"/><category term="connection strings"/><category term="conquista del mundo"/><category term="cultura"/><category term="dans"/><category term="data"/><category term="desarrolladores"/><category term="dynamicsections"/><category term="emuladores"/><category term="ensamblador"/><category term="entrevistas"/><category term="envidia"/><category term="escaneo de puertos"/><category term="eswebcamp"/><category term="fluent interfaces"/><category term="genios"/><category term="glimpse"/><category term="gmail"/><category term="haloscan"/><category term="homenaje"/><category term="leet speak"/><category term="liame"/><category term="mobile"/><category term="msdewey"/><category term="msil"/><category term="mvc"/><category term="métodos anónimos"/><category term="net"/><category term="net8"/><category term="nivel medio"/><category term="nupack"/><category term="ofuscación de emails"/><category term="planetas"/><category term="powershell"/><category term="problemas"/><category term="productos"/><category term="quaere"/><category term="razorpages"/><category term="records"/><category term="rest"/><category term="riqueza"/><category term="scrum"/><category term="silverlight"/><category term="technorati"/><category term="ttt"/><category term="typescript"/><category term="virus"/><category term="vs2005"/><category term="vs2015"/><category term="vs2017"/><category term="vs2026"/><category term="vscode"/><category term="xVal"/><title type='text'>Variable not found</title><subtitle type='html'>Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web&#xa;ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default?start-index=26&amp;max-results=25'/><author><name>josé M. Aguilar</name><uri>http://www.blogger.com/profile/11683750380776435448</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1641</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27752126.post-4014942704904635924</id><published>2026-06-01T08:00:00.000+02:00</published><updated>2026-06-01T08:00:00.114+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 650</title><content type='html'>&lt;img alt=&quot;Programador desesperado por lo que le dejó su yo del pasado&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaeyhDbuMHv6Hbs_uhCfL6Sk5v_hEAfUwI4mODxUiBb8XrUgtuMH0M33xHHwD1wj23OUh8FjZfnuzsT_nDGuJtokhGe7BC1M6v-zWkN3J1T1pay7hRQw1AHf1tlaAOMirhroJlpCTb8R94eFC8J-nMp2BaIt_phtTpe6zRc5rzEP8r3n0314a8bg/s800/future-yo.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;Mientras programamos, todos hemos dicho alguna vez &quot;voy a tomar este atajo&quot;, &quot;ya lo solucionaré en el futuro&quot;, &quot;lo dejo &lt;i&gt;hardcodeado&lt;/i&gt; por ahora&quot;... y el código se queda así para siempre. Viene bien reflexionar sobre lo que estas decisiones implican, como las reflexiones de Martin Stühmer sobre lo crueles que somos a veces con nuestro yo del futuro, en un par de posts con títulos muy ilustrativos:&amp;nbsp;&lt;a href=&quot;https://daily-devops.net/posts/code-as-legacy-past-self/&quot; target=&quot;_blank&quot;&gt;My biggest enemy writes my code&lt;/a&gt;&amp;nbsp;y&amp;nbsp;&lt;a href=&quot;https://daily-devops.net/posts/code-as-legacy-empty-promises/&quot; target=&quot;_blank&quot;&gt;I’m done making empty promises&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Interesante también el artículo de Fran Iglesias explicando cómo usar métricas objetivas —no solo intuiciones o “elegancia”— para decidir cuándo y cómo &lt;a href=&quot;https://franiglesias.github.io/metric-driven-refactoring/&quot; target=&quot;_blank&quot;&gt;refactorizar código con el fin de reducir costes de mantenimiento y mejorar la calidad&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Agentes, agentes IA everywhere... Pero, ¿cómo funcionan por detrás los agentes IA? En este post de Waldek Mastykarz nos explica &lt;a href=&quot;https://developer.microsoft.com/blog/how-ai-coding-agents-actually-use-your-technology&quot; target=&quot;_blank&quot;&gt;el flujo de trabajo un agente&lt;/a&gt; para que podamos comprenderlo de forma sencilla.&lt;/p&gt;
&lt;p&gt;También, Chris Pietschmann nos lleva de nuevo a las bases para revisar &lt;a href=&quot;https://www.pietschsoft.com/post/2026/05/24/csharp-should-this-service-be-singleton-scoped-or-transient&quot; target=&quot;_blank&quot;&gt;los ámbitos de vida de servicios en .NET&lt;/a&gt; (Singleton, Scoped y Transient) y entender cuándo usar cada uno de ellos.&lt;/p&gt;&lt;p&gt;Muchos más enlaces interesantes, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/04/obtener-informacion-sobre-el-origen-de.html&quot;&gt;Obtener información sobre el origen de la invocación de un método con los atributos &quot;caller info&quot; de .NET&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/07/tipos-referencia-anulables-en-c-8.html&quot;&gt;Tipos referencia anulables en C# 8&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.developerro.com/2026/05/27/no-build-service-provider/&quot;&gt;No llames a &lt;code&gt;BuildServiceProvider()&lt;/code&gt;&lt;/a&gt;&lt;br /&gt;
Fernando Escolar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://xaml.dev/post/automatically-getting-api-difference-diagrams-in-your-net-prs&quot;&gt;Automatically getting API difference diagrams in your .NET PRs&lt;/a&gt;&lt;br /&gt;
Morten Nielsen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pietschsoft.com/post/2026/05/24/csharp-should-this-service-be-singleton-scoped-or-transient&quot;&gt;C#: Should This Service Be Singleton, Scoped, or Transient?&lt;/a&gt;&lt;br /&gt;
Chris Pietschmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thomasclaudiushuber.com/2026/05/22/the-support-length-for-net-lts-and-sts-versions/&quot;&gt;The Support Length for .NET LTS and STS versions – Thomas Claudius Huber&lt;/a&gt;&lt;br /&gt;
Thomas Claudius Huber&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pietschsoft.com/post/2026/05/24/csharp-when-should-you-use-exceptions-result-objects-validation-errors&quot;&gt;In C#, When Should You Use Exceptions, Result Objects, or Validation Errors?&lt;/a&gt;&lt;br /&gt;
Chris Pietschmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.code4it.dev/python-for-dotnet-developers/data-types-classes-objects-records-interfaces/&quot;&gt;Python for .NET devs: data types, classes, objects, records and interfaces&lt;/a&gt;&lt;br /&gt;
Davide Bellone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ndepend.com/c-nullable-types-explained/&quot;&gt;C# Nullable Types Explained (2026)&lt;/a&gt;&lt;br /&gt;
NDepend Team&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/designing-high-throughput-apis-for-1m-requests-minute-net/&quot;&gt;Designing high-throughput APIs for 1M requests/minute .NET&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.west-wind.com/posts/2026/May/26/Running-ASPNET-Core-Applications-in-an-IIS-Subfolder-Application&quot;&gt;Running ASP.NET Core Applications as a Subfolder Application&lt;/a&gt;&lt;br /&gt;
Rick Strahl&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/blazor-file-manager-ai-summary-organization&quot;&gt;AI-Powered Content Summarization and File Organization in Blazor File Manager&lt;/a&gt;&lt;br /&gt;
Keerthana Rajendran&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://franiglesias.github.io/metric-driven-refactoring/&quot;&gt;Refactoring dirigido por métricas&lt;/a&gt;&lt;br /&gt;
Fran Iglesias&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/code-as-legacy-past-self/&quot;&gt;My Biggest Enemy Writes My Code&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://daily-devops.net/posts/code-as-legacy-empty-promises/&quot;&gt;I&#39;m Done Making Empty Promises&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milanjovanovic.tech/blog/how-to-scale-long-running-api-requests&quot;&gt;How to Scale Long-Running API Requests&lt;/a&gt;&lt;br /&gt;
Milan Jovanović&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/ef-core-without-migrations-its-only-a-matter-of-time&quot;&gt;EF Core without migrations - it&#39;s only a matter of time&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/05/using-executionlog-views-in-sql-server.html&quot;&gt;Using ExecutionLog views in SQL Server Reporting Services to monitor performance&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://woodruff.dev/pagination-in-entity-framework-core-why-skip-take-falls-apart-on-hot-tables/&quot;&gt;Pagination in Entity Framework Core: Why Skip/Take Falls Apart on Hot Tables&lt;/a&gt;&lt;br /&gt;
Chris Woodruff&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/05/ef-core-10smarter-parameterized.html&quot;&gt;EF Core 10–Smarter parameterized collections&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/news/claude-opus-4-8&quot;&gt;Introducing Claude Opus 4.8&lt;/a&gt;&lt;br /&gt;
Anthropic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shbhmrzd.github.io/ai/ml-foundations/llm-training/2026/05/27/how-llms-process-text.html&quot;&gt;How LLMs Work, Part 1: How LLMs Process Text&lt;/a&gt;&lt;br /&gt;
Shubham Raizada&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/how-ai-coding-agents-actually-use-your-technology&quot;&gt;How AI coding agents actually use your technology&lt;/a&gt;&lt;br /&gt;
Waldek Mastykarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ndepend.com/anatomy-of-an-open-source-ai-coding-agent-built-in-net-codealta/&quot;&gt;Anatomy of an Open-Source AI Coding Agent Built in .NET: CodeAlta&lt;/a&gt;&lt;br /&gt;
NDepend Team&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/cross-document-view-transitions-part-2/&quot;&gt;Cross-Document View Transitions: Scaling Across Hundreds of Elements&lt;/a&gt;&lt;br /&gt;
Durgesh Rajubhai Pawar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/revealing-text-with-css-letter-spacing/&quot;&gt;Revealing Text With CSS letter-spacing&lt;/a&gt;&lt;br /&gt;
Preethi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/managing-anchor-associations-with-data-attributes-and-advanced-attr/&quot;&gt;Managing Anchor Associations With Data Attributes and Advanced attr()&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://latish.dev/blog/2026/05/27/measuring-performance-in-frontend-using-fps/&quot;&gt;Measuring Performance in FrontEnd using FPS — Latish Sehgal&lt;/a&gt;&lt;br /&gt;
Latish Sehgal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/05/building-self-correcting-color-systems-contrast-color/&quot;&gt;Algorithmic Theming Engines: Building Self-Correcting Color Systems With contrast-color()&lt;/a&gt;&lt;br /&gt;
Durgesh Pawar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/search&quot;&gt;&amp;lt;search&amp;gt;: HTML generic search element&lt;/a&gt;&lt;br /&gt;
MDN&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/whats-important-12/&quot;&gt;What’s !important&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/the-fundamentals-and-dev-experience-of-css-function/&quot;&gt;The Fundamentals and Dev Experience of CSS @function&lt;/a&gt;&lt;br /&gt;
Jane Ori&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gomakethings.com/articles/how-to-add-icons-to-external-links-with-css/&quot;&gt;How to add icons to external links with CSS&lt;/a&gt;&lt;br /&gt;
Chris Ferdinandi&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/doing-more-with-github-copilot/&quot;&gt;Doing More with GitHub Copilot as a .NET Developer&lt;/a&gt;&lt;br /&gt;
Wendy Breiding&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/visual-studio-may-update-plan-review-refine/&quot;&gt;Visual Studio May Update – Plan, Review, Refine&lt;/a&gt;&lt;br /&gt;
Mark Downie&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.horus.com.uy/blog/net-maui-changes-its-engine-what-it-means-for-your-mobile-app&quot;&gt;.NET MAUI changes its engine: what it means for your mobile app&lt;/a&gt;&lt;br /&gt;
Sebastián Cabrera&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-maui-material-3/&quot;&gt;Give Your .NET MAUI Android Apps a Material 3 Makeover&lt;/a&gt;&lt;br /&gt;
Gerald Versluis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/share-functionality-net-maui-apps&quot;&gt;Share Functionality in Your .NET MAUI Apps&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/05/un-rato-con-mi-amigo-jose-manuel.html&quot;&gt;Un informático en el lado del mal: Un rato con mi amigo José Manuel Alarcón de CampusMVP&lt;/a&gt;&lt;br /&gt;
Chema Alonso&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/technical-writing-in-the-ai-age/&quot;&gt;Technical Writing in the AI Age&lt;/a&gt;&lt;br /&gt;
Geoff Graham&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/4014942704904635924/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/4014942704904635924' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/4014942704904635924'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/4014942704904635924'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/06/enlaces-interesantes-650.html' title='Enlaces interesantes 650'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaeyhDbuMHv6Hbs_uhCfL6Sk5v_hEAfUwI4mODxUiBb8XrUgtuMH0M33xHHwD1wj23OUh8FjZfnuzsT_nDGuJtokhGe7BC1M6v-zWkN3J1T1pay7hRQw1AHf1tlaAOMirhroJlpCTb8R94eFC8J-nMp2BaIt_phtTpe6zRc5rzEP8r3n0314a8bg/s72-c/future-yo.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-1842248561462320400</id><published>2026-05-26T08:01:00.000+02:00</published><updated>2026-05-26T08:57:14.582+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="trucos"/><category scheme="http://www.blogger.com/atom/ns#" term="visualstudio"/><title type='text'>Filtros de solución en Visual Studio y .NET (.slnf)</title><content type='html'>&lt;img alt=&quot;Técnicos trabajando sobre partes específicas de un proyecto complejo&quot; class=&quot;main-post-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN8Sa8QxS5S0WQO05SwI10_olhA7hhReZw24zAX6n0wF4F1k-BXwZK5TgOwPsfA1GLiefFlj6eyGRDgyDbcBEQtf7Jdlc4yFb8Xzn_8-HgAbGK5CBX5ums2gk0AP_mHZx88QxKkYbhWAIjbzqsq5tVZnRjDWLARjINdBYo-KTKX2wiwxtIzDX27Q/s800/solution-filters.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;En este artículo vamos a ver qué son los filtros de solución, cómo crearlos y cómo usarlos.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;¿Qué son los filtros de solución?&lt;/h2&gt;
&lt;p&gt;Los filtros de solución fueron introducidos hace ya unos años, con Visual Studio 2019 y .NET Core 3.1. Se trata de una forma de crear  vistas personalizadas de una solución donde solo se incluyen los proyectos con los que queremos trabajar en cada momento.&lt;/p&gt;
&lt;p&gt;En la práctica, son simples archivos de JSON con extensión &lt;code&gt;.slnf&lt;/code&gt; que contienen una referencia a una solución normal (archivo &lt;code&gt;.sln&lt;/code&gt; o &lt;code&gt;.slnx&lt;/code&gt;) y la lista de proyectos que queremos incluir en el filtro. Una vez creados, podemos abrir estos archivos directamente desde Visual Studio o nuestro editor favorito, y &lt;strong&gt;solo cargarán los proyectos que hayamos incluido en el filtro&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Como ejemplo, a continuación se muestra el contenido de un filtro de solución, llamado &lt;code&gt;OneToFour.slnf&lt;/code&gt;, que incluye solo los proyectos 1, 2, 3 y 4 de una solución con 300 proyectos llamada &lt;code&gt;VeryBigSolution.slnx&lt;/code&gt; (vale, quizás es un escenario algo exagerado, pero sirve para ilustrar la idea):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;solution&quot;: {
    &quot;path&quot;: &quot;VeryBigSolution.slnx&quot;,
    &quot;projects&quot;: [
      &quot;Project01/Project01.csproj&quot;,
      &quot;Project02/Project02.csproj&quot;,
      &quot;Project03/Project03.csproj&quot;,
      &quot;Project04/Project04.csproj&quot;
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Imaginaos el cambio que supone manejar solo 4 proyectos en lugar de los 300 que tiene la solución original. La carga de la solución en Visual Studio será mucho más rápida, así como el rendimiento general del entorno de desarrollo y las acciones habituales que realizamos en él, como compilar, ejecutar, depurar, navegar por el código, etc.&lt;/p&gt;
&lt;p&gt;
  &lt;img alt=&quot;Solución filtrada con 4 proyectos de 300&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHbSLbkCg_BrLv-cgKrcUywBagjSLYlpJ-tiku-iVG261c-2sAzFVn7dURIUbNElKOlmPyuUi6IYQ7aitmzqNx-v9VfdMbtIKgf6fitkQQxG0-j3POcSeKyOZD0F3BFf0L5AdWYOtTRgDQhsQ05EiDHLF3dVB-TcJyiw_a98ehttAoAe4mrNjpEQ/s405/onetofour.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Los archivos &lt;code&gt;.slnf&lt;/code&gt; son &lt;strong&gt;soportados también a nivel de &lt;em&gt;framework&lt;/em&gt;&lt;/strong&gt; desde .NET Core 3.1, lo que quiere decir que podemos lanzar comandos de CLI como &lt;code&gt;dotnet build&lt;/code&gt;, &lt;code&gt;dotnet test&lt;/code&gt;, o incluso &lt;code&gt;msbuild&lt;/code&gt; apuntando a un archivo de filtro de solución, y se ejecutarán solo con los proyectos que estén incluidos en dicho filtro.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;D:\Projects\VeryBigSolution&amp;gt;dotnet build OneToFour.slnf
Restore complete (0,6s)
  Project03 net10.0 succeeded (0,1s) → Project03\bin\Debug\net10.0\Project03.dll
  Project02 net10.0 succeeded (0,1s) → Project02\bin\Debug\net10.0\Project02.dll
  Project04 net10.0 succeeded (0,2s) → Project04\bin\Debug\net10.0\Project04.dll
  Project01 net10.0 succeeded (0,2s) → Project01\bin\Debug\net10.0\Project01.dll

Build succeeded in 1,1s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En realidad, es parecido a lo que conseguiríamos creando soluciones normales (&lt;code&gt;.sln&lt;/code&gt;/&lt;code&gt;.slnx&lt;/code&gt;) con distintos subconjuntos de proyectos. Sin embargo, si lo hiciéramos de esta forma, tendríamos que encargarnos de gestionar varias soluciones, con sus configuraciones, perfiles y otras cosas; en cambio, con los filtros de solución, solo tenemos que mantener una solución normal y varios archivos de filtro que la referencien, por lo que todo será más sencillo y fácil de mantener.&lt;/p&gt;
&lt;p&gt;Por ultimo, es conveniente aclarar que por cada solución podemos tener tantos archivos &lt;code&gt;.slnf&lt;/code&gt; como queramos, cada uno con un subconjunto diferente de proyectos. De esta forma, podríamos tener un filtro para cada área funcional del sistema, para cada equipo de desarrollo, para cada tarea concreta que tengamos que realizar, etc.&lt;/p&gt;
&lt;h2&gt;¿Cómo crear un filtro de solución?&lt;/h2&gt;
&lt;p&gt;Al tratarse de archivos &lt;code&gt;.json&lt;/code&gt;, bastaría con crearlos manualmente con un editor de texto cualquiera, siempre que sigamos la estructura que hemos visto antes.&lt;/p&gt;
&lt;p&gt;Sin embargo, Visual Studio también nos ofrece una forma muy sencilla de crearlos a través del entorno gráfico. Para ello, lo único que tenemos que hacer es abrir la solución normal (archivo &lt;code&gt;.sln&lt;/code&gt; o &lt;code&gt;.slnx&lt;/code&gt;), usar el menú contextual del Explorador de Soluciones para descargar los proyectos que no nos interesen, y finalmente ir a &lt;code&gt;Archivo &amp;gt; Guardar como solución filtrada...&lt;/code&gt; y elegir un nombre para el nuevo filtro de solución.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Salvar un subconjunto de proyectos como filtro de solución&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIEwXtqHVEuWQuGJ1Y7Clmmdrw_BZnCuzP2fdrYRo-b5aQCAZGnybOIYeCXcRckHWBmkbCfqCdZdKHQ6VJpLG5lqSyhv1yyAXw8YjFez9RxDDsGNs71p_Ngoon33n1AyClX3gNjzyK4B47PofELoa_JMbvSk28wGNUh64ZqJsUXLp1lEWrB4sZDg/s1338/save-as-solution-filter.png&quot; width=&quot;80%&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A partir de aquí, ya la cosa pasa a ser completamente artesana. Si queremos añadir nuevos proyectos al filtro o eliminar algunos existentes, tendremos que retocar el archivo &lt;code&gt;.slnf&lt;/code&gt; manualmente, o bien volver a generarlo desde Visual Studio siguiendo el procedimiento descrito antes.&lt;/p&gt;&lt;p&gt;¡Espero que os resulte útil!&lt;/p&gt;&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/1842248561462320400/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/1842248561462320400' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/1842248561462320400'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/1842248561462320400'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/05/filtros-de-solucion-en-visual-studio-y.html' title='Filtros de solución en Visual Studio y .NET (.slnf)'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN8Sa8QxS5S0WQO05SwI10_olhA7hhReZw24zAX6n0wF4F1k-BXwZK5TgOwPsfA1GLiefFlj6eyGRDgyDbcBEQtf7Jdlc4yFb8Xzn_8-HgAbGK5CBX5ums2gk0AP_mHZx88QxKkYbhWAIjbzqsq5tVZnRjDWLARjINdBYo-KTKX2wiwxtIzDX27Q/s72-c/solution-filters.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-5449924744766004764</id><published>2026-05-25T08:00:00.000+02:00</published><updated>2026-05-25T08:00:00.117+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 649</title><content type='html'>&lt;img alt=&quot;Manitas realizando cálculos complejos para intentar alinear un cuadro con otro&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3oYonELPBTnW8YGsoyzMH1GX-nQnQG5OwgEbMJZMAugM_lzdImFn71QRfoG1V0iR_pi_wpdxEpp9TlTB7gPYsy3q3iSDN0QVxsuPuqGzn0Ex23Vy5W0NlzLEtQlSvgxdzLWNxp1RG50jLfmTdKhiIuwhJig8FqOkgMz8g-KMrNF5SCau872NdpA/s800/anchor-positioning.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;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 &lt;a href=&quot;https://www.campusmvp.es/recursos/post/gemini-3-5-flash-que-cambia-de-verdad-para-desarrolladores.aspx&quot; target=&quot;_blank&quot;&gt;qué cambios trae esta actualización para los desarrolladores&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.milanjovanovic.tech/blog/when-your-use-case-half-succeeds-designing-for-partial-failure-in-dotnet&quot; target=&quot;_blank&quot;&gt;diseñar para el fallo parcial en .NET&lt;/a&gt;, explorando estrategias para manejar situaciones donde una operación no se completa en su totalidad.&lt;/p&gt;
&lt;p&gt;Martin Stühmer nos recuerda que &lt;a href=&quot;https://daily-devops.net/posts/code-as-legacy/&quot; target=&quot;_blank&quot;&gt;el código que escribimos hoy puede convertirse en un problema&lt;/a&gt; para otros, o incluso nosotros mismos, en el futuro, destacando la importancia de escribir código limpio y mantenible.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.syncfusion.com/blogs/post/css-anchor-positioning&quot; target=&quot;_blank&quot;&gt;los anchors en CSS&lt;/a&gt; podrían poner fin a los cálculos manuales para alinear estos elementos.&lt;/p&gt;
&lt;p&gt;Y por último, me ha parecido interesante compartir este artículo de Barry Pollard y Noam Rosenthal sobre las &lt;a href=&quot;https://developer.chrome.com/blog/declarative-partial-updates&quot; target=&quot;_blank&quot;&gt;actualizaciones parciales declarativas en Chrome&lt;/a&gt;, 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.&lt;/p&gt;&lt;p&gt;El resto de enlaces, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/04/comparacion-natural-de-cadenas-en-net-10.html&quot;&gt;Comparación natural de cadenas en .NET 10&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/07/null-coalescing-assigment-el-nuevo.html&quot;&gt;Null coalescing assigment &quot;??=&quot;, el nuevo operador de asignación en C# 8&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/nuget-package-pruning-in-dotnet-10/&quot;&gt;NuGet Package Pruning: Cleaner Dependencies and Actionable Vulnerability Reports&lt;/a&gt;&lt;br /&gt;
Nikolche Kolev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/6066abb6-640a-4225-ac33-3f4d5a1a1d16&quot;&gt;Zstandard compression in .NET 11&lt;/a&gt;&lt;br /&gt;
Steven Giesel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/exploring-the-dotnet-11-preview-2-dotnet-gets-union-types/&quot;&gt;.NET finally gets union types🎉&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kant2002.github.io/en/obfuscators/2026/05/20/how-to-build-obfuscator-part-iii.html&quot;&gt;How to build .NET obfuscator&lt;/a&gt;&lt;br /&gt;
Andrii Kurdiumov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/improving-csharp-memory-safety/&quot;&gt;Improving C# Memory Safety&lt;/a&gt;&lt;br /&gt;
Jaren Duan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/announcing-agent-governance-toolkit-mcp-extensions-for-dotnet/&quot;&gt;Announcing Agent Governance Toolkit MCP Extensions for .NET&lt;/a&gt;&lt;br /&gt;
Jack Batzner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/your-ilogger-is-lying-to-you/&quot;&gt;Six Ways ILogger Silently Fails in Production&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/05/21/reflection-performance-in-net-10-benchmarks-caching-and-delegates&quot;&gt;Reflection Performance in .NET 10: Benchmarks, Caching, and Delegates&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor / Aspire&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/open-source-syncfusion-toolkit-for-blazor&quot;&gt;Introducing Syncfusion Toolkit for Blazor: Free Open-Source Blazor Components&lt;/a&gt;&lt;br /&gt;
Saravanan G.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/blazor-how-to-set-a-base-component-for-all-razor-components-using-viewstart-razo.htm&quot;&gt;Blazor - How to set a base component for all Razor components&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/how-to-upload-files-in-an-asp-net-core-web-api/&quot;&gt;How to upload files in an ASP.NET Core Web API&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/migrate-from-asp-net-to-asp-net-core/&quot;&gt;How to Migrate from ASP.NET Framework to ASP.NET Core&lt;/a&gt;&lt;br /&gt;
Gopinath Karunanithi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/aspire/dev-loop-tribal-knowledge/&quot;&gt;Your dev loop is full of tribal knowledge&lt;/a&gt;&lt;br /&gt;
David Fowler&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/foundry/how-to-run-evals-for-model-router/&quot;&gt;How to run evals for the model router&lt;/a&gt;&lt;br /&gt;
Sanjeev Jagtap&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milanjovanovic.tech/blog/when-your-use-case-half-succeeds-designing-for-partial-failure-in-dotnet&quot;&gt;When Your Use Case Half-Succeeds: Designing for Partial Failure in .NET&lt;/a&gt;&lt;br /&gt;
Milan Jovanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/code-as-legacy/&quot;&gt;The Code You Write Today Is Someone&#39;s Problem Tomorrow&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.couchbase.com/blog/json-database/&quot;&gt;What Is a JSON Database and Why Are They Useful?&lt;/a&gt;&lt;br /&gt;
Matthew Groves&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/databases/sql-server/t-sql-programming-sql-server/demystifying-pivot-and-unpivot-in-t-sql/&quot;&gt;Demystifying PIVOT and UNPIVOT in T-SQL&lt;/a&gt;&lt;br /&gt;
Edward Pollack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/rinat_kozin_d0a2ef43e7824/two-tables-zero-migrations-full-linq-a-net-data-engine-thats-been-running-our-production-for-2482&quot;&gt;An EF Core alternative for .NET apps with complex object graphs — full LINQ, no migrations, no DbContext&lt;/a&gt;&lt;br /&gt;
Rinat Kozin&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/gemini-3-5-flash-que-cambia-de-verdad-para-desarrolladores.aspx&quot;&gt;Gemini 3.5 Flash: qué cambia de verdad para desarrolladores&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/npu-vs-gpu-que-son-en-que-se-diferencian-y-cual-necesitas-segun-lo-que-programes.aspx&quot;&gt;NPU vs GPU: qué son, en qué se diferencian y cuál necesitas según lo que programes&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-5/&quot;&gt;Gemini 3.5: frontier intelligence with action&lt;/a&gt;&lt;br /&gt;
Koray Kavukcuoglu &amp;amp; Jeff Dean &amp;amp; Oriol Vinyals &amp;amp; Noam Shazeer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-omni/&quot;&gt;Introducing Gemini Omni&lt;/a&gt;&lt;br /&gt;
Koray Kavukcuoglu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/agentic-agile-why-agent-development-needs-agile-not-just-prompts&quot;&gt;Agentic-Agile: Why Agent Development Needs Agile (Not Just Prompts)&lt;/a&gt;&lt;br /&gt;
Neil Van Heukelem&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pmichaels.net/introduction-to-lm-studio/&quot;&gt;Introduction to LM Studio&lt;/a&gt;&lt;br /&gt;
Paul Michaels&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/css-anchor-positioning&quot;&gt;CSS Anchor Positioning: The End of Manual Tooltip Calculations?&lt;/a&gt;&lt;br /&gt;
Manikanda Akash Munisamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/cross-document-view-transitions-part-1/&quot;&gt;Cross-Document View Transitions: The Gotchas Nobody Mentions&lt;/a&gt;&lt;br /&gt;
Durgesh Rajubhai Pawar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.logrocket.com/typescript-utility-types-probably-underusing/&quot;&gt;TypeScript utility types you&#39;re probably underusing&lt;/a&gt;&lt;br /&gt;
Muhammed Ali&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jvns.ca/blog/2026/05/15/moving-away-from-tailwind--and-learning-to-structure-my-css-/&quot;&gt;Moving away from Tailwind, and learning to structure my CSS&lt;/a&gt;&lt;br /&gt;
Julia Evans&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.logrocket.com/typescript-v6-migration-guide/&quot;&gt;TypeScript v6 is here: A full migration guide&lt;/a&gt;&lt;br /&gt;
Amazing Enyichi Agu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/engineering/architecture-optimization/from-latency-to-instant-modernizing-github-issues-navigation-performance/&quot;&gt;From latency to instant: Modernizing GitHub Issues navigation performance&lt;/a&gt;&lt;br /&gt;
Peter Ritchie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://csswizardry.com/2026/05/better-browser-caching-with-no-vary-search/&quot;&gt;Better Browser Caching with No-Vary-Search&lt;/a&gt;&lt;br /&gt;
Harry Roberts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/05/mathematical-layouts-sibling-index-sibling-count/&quot;&gt;Advanced Tree Counting: Mathematical Layouts With sibling-index() And sibling-count()&lt;/a&gt;&lt;br /&gt;
Durgesh Pawar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://patrickbrosset.com/articles/2026-05-20-whats-missing-in-css-layout/&quot;&gt;What&#39;s missing in CSS layout&lt;/a&gt;&lt;br /&gt;
Patrick Brosset&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.chrome.com/blog/declarative-partial-updates&quot;&gt;Declarative partial updates&lt;/a&gt;&lt;br /&gt;
Barry Pollard &amp;amp; Noam Rosenthal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/choose-css-selectors-for-production&quot;&gt;Choosing CSS Selectors for Production: Specificity, Modern Pseudo-Classes, and Maintainable Styles&lt;/a&gt;&lt;br /&gt;
Arunachalam Kandasamy Raja&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/the-state-of-css-centering-in-2026/&quot;&gt;The State of CSS Centering in 2026&lt;/a&gt;&lt;br /&gt;
Temani Afif&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/plan-before-you-build-introducing-the-plan-agent-in-visual-studio/&quot;&gt;Plan Before You Build: Introducing the Plan agent in Visual Studio&lt;/a&gt;&lt;br /&gt;
Jonatas Siqueira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogs.windows.com/windows-insider/2026/05/15/improving-windows-quality-making-taskbar-and-start-more-personal/&quot;&gt;Improving Windows quality: Making Taskbar and Start more personal&lt;/a&gt;&lt;br /&gt;
Diego Baca&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/real-time-weather-dashboard-maui-tab-view&quot;&gt;Build a Real-Time Weather Dashboard with .NET MAUI Tab View&lt;/a&gt;&lt;br /&gt;
Sneha Kumar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/installing-basics-telerik-ui-net-maui-ai-coding-assistant&quot;&gt;Installing and Basics of Telerik UI for .NET MAUI AI Coding Assistant&lt;/a&gt;&lt;br /&gt;
Héctor Pérez&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/05/invaders-must-die-cheating-space.html&quot;&gt;Un informático en el lado del mal: Invaders Must Die!: &quot;Cheating&quot; Space Invaders con Inteligencia Artificial para ganar en mi Spectrum&lt;/a&gt;&lt;br /&gt;
Igor Lukic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/stack-overflow-when-we-stop-asking/&quot;&gt;Stack Overflow: When We Stop Asking&lt;/a&gt;&lt;br /&gt;
Sunkanmi Fafowora&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/05/four-levels-customer-understanding/&quot;&gt;Four Levels Of Customer Understanding&lt;/a&gt;&lt;br /&gt;
Vitaly Friedman&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/5449924744766004764/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/5449924744766004764' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/5449924744766004764'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/5449924744766004764'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/05/enlaces-interesantes-649.html' title='Enlaces interesantes 649'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3oYonELPBTnW8YGsoyzMH1GX-nQnQG5OwgEbMJZMAugM_lzdImFn71QRfoG1V0iR_pi_wpdxEpp9TlTB7gPYsy3q3iSDN0QVxsuPuqGzn0Ex23Vy5W0NlzLEtQlSvgxdzLWNxp1RG50jLfmTdKhiIuwhJig8FqOkgMz8g-KMrNF5SCau872NdpA/s72-c/anchor-positioning.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-6859155207891338708</id><published>2026-05-18T08:01:00.000+02:00</published><updated>2026-05-18T08:01:00.118+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 648</title><content type='html'>&lt;img alt=&quot;Desarrolladora con muchos monitores en los que aparecen distintas novedades de la semana&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; lazy=&quot;&quot; loading=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_XrcGXzHgornk1SgQdIHjUV2QPfebXNeBCdruMcHabZWNccwvYTNvt_n9joJgtex-hXL1PKqHuIYN-RwtfabuLYcHAit0quX5lGO-tSR68VvwN3741BE8ROp12rEFgRwUu08zLUmSojC7JhgxAM44rTqgcF4isEnXSs6FxzFb3WSNUYakRGxEHQ/s800/enlaces-648.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;Esta semana se ha lanzado la &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-11-preview-4/&quot; target=&quot;_blank&quot;&gt;preview 4 de .NET 11&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;Se ha anunciado que &lt;a href=&quot;https://github.blog/changelog/2026-05-14-github-copilot-app-is-now-available-in-technical-preview/&quot; target=&quot;_blank&quot;&gt;la aplicación de escritorio GitHub Copilot&lt;/a&gt;, la visión de Microsoft de lo que será el desarrollo agéntico, está ya disponible como &lt;em&gt;technical preview&lt;/em&gt;. Si eres suscriptor de GitHub Copilot Pro o Pro+, puedes comenzar a probarla.&lt;/p&gt;
&lt;p&gt;Milan Jovanović ha publicado un artículo muy interesante sobre &lt;a href=&quot;https://www.milanjovanovic.tech/blog/api-versioning-should-be-your-last-resort&quot; target=&quot;_blank&quot;&gt;el versionado de APIs&lt;/a&gt;, un tema que siempre genera debate y que él aborda desde una perspectiva muy práctica.&lt;/p&gt;
&lt;p&gt;David Ortinau anuncia que el &lt;em&gt;runtime&lt;/em&gt; de &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-maui-moves-to-coreclr-in-dotnet-11/&quot; target=&quot;_blank&quot;&gt;.NET MAUI abandona Mono y se moverá a CoreCLR&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://duendesoftware.com/blog/20260514-post-quantum-cryptography-in-dotnet-10&quot; target=&quot;_blank&quot;&gt;guía práctica para implementarla en .NET 10&lt;/a&gt;, con ejemplos de algoritmos y librerías disponibles.&lt;/p&gt;
&lt;p&gt;Por último, David Fowler ha publicado un artículo muy interesante sobre &lt;a href=&quot;https://www.linkedin.com/pulse/ai-made-us-faster-problem-david-fowler-mgnzc/&quot; target=&quot;_blank&quot;&gt;cómo la IA nos ha hecho más rápidos, pero también creó nuevos cuellos de botella&lt;/a&gt; que obligan a cambiar procesos y hábitos.&lt;/p&gt;
&lt;p&gt;Muchos más enlaces a contenidos interesantes de esta semana, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/03/javascriptizando-c-chequeo-de-nulos.html&quot;&gt;JavaScriptizando C#: chequeo de nulos usando conversores implícitos&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/06/etiquetado-de-consultas-en-entity.html&quot;&gt;Etiquetado de consultas en Entity Framework Core&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-11-preview-4/&quot;&gt;.NET 11 Preview 4 is now available!&lt;/a&gt;&lt;br /&gt;
.NET Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/process-api-improvements-in-dotnet-11/&quot;&gt;Process API Improvements in .NET 11&lt;/a&gt;&lt;br /&gt;
Adam Sitnik&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/00fcb870-6bf7-4f97-824f-8eab1b8838be&quot;&gt;BackgroundService exceptions now propagate in .NET 11&lt;/a&gt;&lt;br /&gt;
Steven Giesel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/05/08/linq-filtering-in-c-where-any-all-contains-and-oftype&quot;&gt;LINQ Filtering in C#: Where, Any, All, Contains, and OfType&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://www.devleader.ca/2026/05/12/linq-aggregation-in-c-count-sum-min-max-average-and-aggregate&quot;&gt;LINQ Aggregation in C#: Count, Sum, Min, Max, Average, and Aggregate&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duendesoftware.com/blog/20260512-the-field-keyword-in-csharp-14&quot;&gt;The field Keyword in C# 14: Write Less, Validate More&lt;/a&gt;&lt;br /&gt;
Khalid Abuhakmeh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://benbowen.blog/post/inspecting_3d_objects/&quot;&gt;Inspecting 3D objects (incl. gltf) with a 28-line C# script • Ben Bowen&#39;s Blog&lt;/a&gt;&lt;br /&gt;
Ben Bowen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/stop-pretending-timeprovider-doesnt-exist/&quot;&gt;Stop Pretending TimeProvider Doesn&#39;t Exist&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duendesoftware.com/blog/20260514-post-quantum-cryptography-in-dotnet-10&quot;&gt;Post-Quantum Cryptography in .NET 10: A Practical Guide&lt;/a&gt;&lt;br /&gt;
Khalid Abuhakmeh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pmichaels.net/mcp-server-dotnet/&quot;&gt;Creating a Simple MCP Server in .NET&lt;/a&gt;&lt;br /&gt;
Paul Michaels&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/vikrant_bagal_afae3e25ca7/10-net-open-source-libraries-every-developer-should-know-in-2026-1g2h&quot;&gt;10 .NET Open Source Libraries Every Developer Should Know in 2026&lt;/a&gt;&lt;br /&gt;
Vikrant Bagal&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/refactoring-asp-net-core-api-clean-architecture&quot;&gt;Refactoring an ASP.NET Core API with clean architecture&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.infoq.com/articles/asp-net-core-side-car/&quot;&gt;Implementing the Sidecar Pattern in Microservices-Based ASP.NET Core Applications&lt;/a&gt;&lt;br /&gt;
Joydip Kanjilal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/propagating-opentelemetry-context-in-dotnet.htm&quot;&gt;Propagating OpenTelemetry context in .NET&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/exploring-the-dotnet-11-preview-1-running-background-tasks-in-blazor-with-web-workers/&quot;&gt;Running background tasks in Blazor with Web Workers&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.west-wind.com/posts/2026/May/13/Getting-the-Client-IP-Address-in-ASPNET-Core&quot;&gt;Getting the Client IP Address in ASP.NET Core&lt;/a&gt;&lt;br /&gt;
Rick Strahl&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/05/11/fixing-a-blazor-app-with-vs-codess-new-agent-browser-sharing.aspx&quot;&gt;Fixing a Blazor App with VS Code&#39;s New Agent Browser Sharing&lt;/a&gt;&lt;br /&gt;
David Ramel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/streaming-server-events-sse-blazor&quot;&gt;Streaming Server Events with SSE and Blazor&lt;/a&gt;&lt;br /&gt;
Héctor Pérez&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/05/using-aws-locally-with-ministack-and-net.html&quot;&gt;Using AWS Locally with MiniStack and .NET&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/appsonazureblog/introducing-azure-container-apps-express/4519150&quot;&gt;Introducing Azure Container Apps Express!&lt;/a&gt;&lt;br /&gt;
Simon J.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/azure-sdk/exponential-backoff-circuit-breaker-azure-functions/&quot;&gt;Exponential backoff and circuit breaker for Service Bus-triggered Azure Functions&lt;/a&gt;&lt;br /&gt;
Swapnil Nagar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://martinfowler.com/articles/what-is-code.html&quot;&gt;What Is Code?&lt;/a&gt;&lt;br /&gt;
Unmesh Joshi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pietschsoft.com/post/2026/05/08/csharp-inheritance-vs-composition-when-to-use-each&quot;&gt;C#: Inheritance vs Composition — When to Use Each and Why AI Can&#39;t Decide for You&lt;/a&gt;&lt;br /&gt;
Chris Pietschmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mlu-explain.github.io/decision-tree/&quot;&gt;Decision Trees: The unreasonable power of nested decision rules&lt;/a&gt;&lt;br /&gt;
Jared Wilber &amp;amp; Lucía Santamaría&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milanjovanovic.tech/blog/api-versioning-should-be-your-last-resort&quot;&gt;API Versioning Should Be Your Last Resort&lt;/a&gt;&lt;br /&gt;
Milan Jovanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeopinion.com/debugging-event-driven-systems-5-problems-teams-create/&quot;&gt;Debugging Event-Driven Systems: 5 Problems Teams Create&lt;/a&gt;&lt;br /&gt;
Peter Ritchie&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/isaacojeda/ef-core-la-explosion-cartesiana-hiciste-todo-bien-y-aun-asi-el-query-es-un-desastre-22do&quot;&gt;EF Core: La explosión cartesiana — Hiciste todo bien y aun así el query es un desastre&lt;/a&gt;&lt;br /&gt;
Isaac Ojeda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/the-complete-guide-to-mastering-dapper-micro-orm-in-net/&quot;&gt;The complete guide to mastering Dapper micro-ORM in .NET&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/agent-skills-vs-custom-instructions-en-codigo-ia-cuando-usar-cada-una.aspx&quot;&gt;Agent Skills vs Custom Instructions en código IA: cuándo usar cada una&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/ai-made-us-faster-problem-david-fowler-mgnzc/&quot;&gt;AI Made Us Faster. That Was the Problem&lt;/a&gt;&lt;br /&gt;
David Fowler&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://platform.uno/blog/composition-stack-for-ai-assisted-net-development/&quot;&gt;Composition Stack for AI-Assisted .NET Development&lt;/a&gt;&lt;br /&gt;
Matt Mattei&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/why-keyboard-users-cant-scroll-your-overflow-containers/&quot;&gt;Why Keyboard Users Can&#39;t Scroll Your Overflow Containers&lt;/a&gt;&lt;br /&gt;
Godstime Aburu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/computing-and-displaying-discounted-prices-in-css/&quot;&gt;Computing and Displaying Discounted Prices in CSS&lt;/a&gt;&lt;br /&gt;
Preethi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/soon-we-can-finally-banish-javascript-to-the-shadowrealm/&quot;&gt;Soon We Can Finally Banish JavaScript to the ShadowRealm&lt;/a&gt;&lt;br /&gt;
Mat Marquis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/callout-ui-with-css-offset-border/&quot;&gt;Callout UI with CSS Offset &amp;amp; Border&lt;/a&gt;&lt;br /&gt;
Preethi Sam&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/repeating-square-dots-backgrounds-in-css/&quot;&gt;Repeating Square Dots Backgrounds in CSS&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.chrome.com/blog/install-element-ot&quot;&gt;Install web apps with the new HTML install element&lt;/a&gt;&lt;br /&gt;
Patrick Bosset&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/whats-important-11/&quot;&gt;What’s !important&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/how-to-control-infinite-css-animations-part-2-of-2/&quot;&gt;How to Control Infinite CSS Animations (Part 2 of 2)&lt;/a&gt;&lt;br /&gt;
Temani Afif&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://claude.com/blog/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start&quot;&gt;How Claude Code works in large codebases: Best practices and where to start&lt;/a&gt;&lt;br /&gt;
Claude Team&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/news-insights/company-news/github-copilot-individual-plans-introducing-flex-allotments-in-pro-and-pro-and-a-new-max-plan/&quot;&gt;GitHub Copilot individual plans: Introducing flex allotments in Pro and Pro+, and a new Max plan&lt;/a&gt;&lt;br /&gt;
Joe Binder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2026-05-14-github-copilot-app-is-now-available-in-technical-preview/&quot;&gt;GitHub Copilot app is now available in technical preview&lt;/a&gt;&lt;br /&gt;
GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/dotnet/2026/05/11/the-resharper-2026-2-eap-any-ai-agent-in-visual-studio/&quot;&gt;The ReSharper 2026.2 Early Access Program Begins: Bringing More AI Agents into Visual Studio&lt;/a&gt;&lt;br /&gt;
Rachel Appel&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-maui-moves-to-coreclr-in-dotnet-11/&quot;&gt;.NET MAUI Moves to CoreCLR in .NET 11&lt;/a&gt;&lt;br /&gt;
David Ortinau&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/ai-assisted-rich-text-editor-dotnet-maui&quot;&gt;Build an AI-Powered&amp;nbsp;Rich Text Editor&amp;nbsp;in&amp;nbsp;.NET MAUI with&amp;nbsp;AI&amp;nbsp;AssistView&lt;/a&gt;&lt;br /&gt;
Tamilarasan Gunasekaran&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/how-to-verify-network-connectivity-net-maui&quot;&gt;How to Verify Network Connectivity in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://jmalarcon.es/posts/nuevo-ludismo-monet&quot;&gt;Un cuadro de Monet y el nuevo ludismo&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20260512-00/?p=112316&quot;&gt;Why do Windows client editions on 32-bit x86 systems artificially limit RAM to 4 GB?&lt;/a&gt;&lt;br /&gt;
Raymond Chen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/6859155207891338708/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/6859155207891338708' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/6859155207891338708'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/6859155207891338708'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/05/enlaces-interesantes-648.html' title='Enlaces interesantes 648'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_XrcGXzHgornk1SgQdIHjUV2QPfebXNeBCdruMcHabZWNccwvYTNvt_n9joJgtex-hXL1PKqHuIYN-RwtfabuLYcHAit0quX5lGO-tSR68VvwN3741BE8ROp12rEFgRwUu08zLUmSojC7JhgxAM44rTqgcF4isEnXSs6FxzFb3WSNUYakRGxEHQ/s72-c/enlaces-648.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-2730744101145625569</id><published>2026-05-12T08:01:00.076+02:00</published><updated>2026-05-17T11:59:58.602+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aniversario"/><category scheme="http://www.blogger.com/atom/ns#" term="blogging"/><title type='text'>¡Variable not found cumple 20 años! ¿Y ahora, qué?</title><content type='html'>&lt;img alt=&quot;Yo mismo, escribiendo este post&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEEDeRf5ZoRRIBw7lHSJWKKCDT8YqsZe6A1O4YuG8SZcyyOrmOqcANhl5FuFpszfSlGnXJFx41TqLR6Cua-vyXqDnh27g8ysGcw6sgCJ9rGHaZb9VQm-RXpuc07D-owxxeb02WffYV6F1q-Q7kJU0lR1rb7rfMtdYhy8xCzgXjWKz-0WbwMQw2Dw/s800/20years.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Han pasado veinte años&lt;/b&gt; desde que escribí &lt;a href=&quot;https://www.variablenotfound.com/2006/05/paren-el-tren-que-me-subo.html&quot; target=&quot;_blank&quot;&gt;el primer post en Variable Not Found&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;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é.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Muchas gracias a todos los que me habéis acompañado en este viaje&lt;/strong&gt;, 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.&lt;/p&gt;
&lt;p&gt;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,&lt;b&gt; la cosa sigue pintando muy mal&lt;/b&gt;: 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 😢&lt;/p&gt;
&lt;p&gt;¿Vale la pena seguir adelante? Pues no lo tengo nada claro...&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;¿Es el fin de los blogs técnicos?&lt;/h2&gt;
&lt;p&gt;Realmente, si mirara hacia fuera y viera que el resto de blogs técnicos siguen existiendo y manteniendo su audiencia, podría pensar que el problema es mío: quizás mis contenidos ya no son interesantes para la comunidad, quizás no estoy haciendo un buen trabajo promocionándolos, o quién sabe.&lt;/p&gt;
&lt;p&gt;Pero la realidad es que &lt;strong&gt;el descalabro de los blogs técnicos es generalizado&lt;/strong&gt;. Solo hay que ver que muchos de los sitios que antes eran referentes en la comunidad han cerrado o han dejado de publicar con una regularidad razonable. Cada vez es más difícil encontrar contenido de calidad y actualizado con frecuencia.&lt;/p&gt;
&lt;p&gt;Esto podría deberse a varios factores, como el auge de las redes sociales y canales alternativos (vídeos, podcasts, streaming...), la saturación de contenido en internet o la falta de tiempo y motivación para mantener un blog. Pero, sobre todo, creo que &lt;strong&gt;la dramática caída en el número de visitantes está consiguiendo que el esfuerzo de mantener un blog no merezca la pena&lt;/strong&gt;. Al fin y al cabo, esto tiene sentido si hay alguien al otro lado, ¿no?&lt;/p&gt;
&lt;p&gt;El factor que más está contribuyendo al vertiginoso descenso de las visitas a mi blog es la dramática caída en el uso de buscadores, algo de lo que dependía el tráfico de la mayoría de sitios de contenido técnico especializado. En mi caso, más del 80% del tráfico de Variable Not Found procedía de búsquedas orgánicas, así que es lógico que este batacazo salpique directamente a las métricas. A día de hoy, &lt;strong&gt;solo un 16% de los visitantes llega a través de buscadores&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pero analizando las estadísticas de visitantes del blog, hay más datos que encienden las alarmas. En el último año, las páginas vistas han caído un 21%, aunque curiosamente el número de usuarios distintos ha subido un 58%:&lt;/p&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Periodo&lt;/th&gt;
&lt;th&gt;Usuarios distintos&lt;/th&gt;
&lt;th&gt;Páginas vistas&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2022-2023&lt;/td&gt;
&lt;td&gt;90.000 (-16%)&lt;/td&gt;
&lt;td&gt;150.000 (-17%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2023-2024&lt;/td&gt;
&lt;td&gt;62.000 (-31%)&lt;/td&gt;
&lt;td&gt;121.000 (-19%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024-2025&lt;/td&gt;
&lt;td&gt;29.000 (-53%)&lt;/td&gt;
&lt;td&gt;80.000 (-34%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-2026&lt;/td&gt;
&lt;td&gt;46.000 (+58%)&lt;/td&gt;
&lt;td&gt;64.000 (-21%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Es decir, hay más visitantes, pero menos comprometidos con el sitio y sus contenidos. ¿Extraño, verdad?&lt;/p&gt;
&lt;p&gt;Se puede explicar si echamos un vistazo al origen de los visitantes. Sospechosamente, más del 70% de los visitantes proceden de países como China o Singapur, algo raro teniendo en cuenta que mis contenidos no son precisamente los más amigables para esa audiencia. El año pasado, este porcentaje era solo del 3%, lo que indica que algo ha cambiado radicalmente en el último año.&lt;/p&gt;
&lt;p&gt;Pero, además, sumémosle que el tráfico directo (es decir, que no viene de búsquedas, ni redes sociales ni enlaces externos) también sobrepasa el 70% del total, mientras que el año pasado era del 18%. Es decir, que la mayoría de los visitantes han comenzado a llegar a mi sitio sin pasar por ningún intermediario, lo que es muy raro teniendo en cuenta que no tengo una marca personal especialmente fuerte, ni una comunidad muy activa, ni los hábitos de consumo actuales incluyen visitar directamente los sitios web.&lt;/p&gt;
&lt;p&gt;La conclusión es clara: &lt;strong&gt;gran parte del tráfico de Variable Not Found procede de &lt;em&gt;bots,&lt;/em&gt;&amp;nbsp;&lt;em&gt;crawlers, scrapers&lt;/em&gt;&lt;/strong&gt;, y otros bichillos de la fauna digital, probablemente alimentando modelos de IA con esta información. Modelos que más adelante podrán responder a sus usuarios usando esta información, pero que no aportan ningún valor a mi sitio ni a mi trabajo.&lt;/p&gt;
&lt;p&gt;Porque lo que es indudable, y además imparable, es que los desarrolladores utilizamos casi exclusivamente la IA para resolver nuestras dudas. &lt;strong&gt;La era de buscar en Google y leer un post para resolver un problema concreto se ha acabado&lt;/strong&gt;. Además, esto también se aprecia viendo el declive de otras comunidades de preguntas y respuestas como StackOverflow, CodeProject o Foros del Web, que han visto caer su tráfico de forma dramática en los últimos años.&lt;/p&gt;
&lt;p&gt;No sé si otros blogs técnicos estarán observando esta misma tendencia en sus estadísticas, pero me temo que será así, puntos porcentuales arriba o abajo. Y en este caso, &lt;strong&gt;el futuro de los blogs técnicos no pinta nada bien&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Y hay otro detalle que también me preocupa: siempre he dicho que una de las principales utilidades de mi blog era la de servir como un cuaderno de notas donde apuntar lo que iba aprendiendo, y, de paso, que otros pudieran aprovecharlo. Yo era mi principal usuario, y visitaba mi blog con frecuencia para consultar mis propias anotaciones. Pero cuando veo que la mayoría de las veces &lt;strong&gt;incluso yo mismo no acudo a mi blog a consultar las dudas&lt;/strong&gt; porque es más cómodo preguntárselo a mi modelo favorito, creo que algo no va bien.&lt;/p&gt;
&lt;p&gt;No es demasiado motivador, ¿verdad?&lt;/p&gt;
&lt;h2&gt;¿Tiene sentido seguir adelante con Variable Not Found?&lt;/h2&gt;
&lt;p&gt;Pues no lo tengo nada claro, la verdad. Ya en el análisis del año pasado comentaba que el futuro no pintaba nada bien, y que &lt;strong&gt;temía que el blog quedara como pienso para alimentar las IAs, y parece que no me equivocaba demasiado&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Sigo disfrutando mucho escribiendo, principalmente porque me obliga a estudiar y aprender en profundidad sobre los temas que me interesan y porque pienso que a alguien le ayudará, pero si realmente no hay nadie al otro lado, ¿tiene sentido seguir invirtiendo tiempo y esfuerzo en ello? ¿No podría simplemente tomar notas para mi consumo personal y dedicar el tiempo que requiere gestionar el blog (que no es poco) a aprender otras cosas que me interesan?&lt;/p&gt;&lt;p&gt;En cualquier caso, dejarlo no sería una decisión sencilla. Variable Not Found forma parte de mi vida desde hace veinte años, y uno no puede desprenderse de algo así de un día para otro. Eso sí, cuando tenga que hacerlo, pasaré página orgulloso de haber llegado hasta aquí y con la satisfacción de haber intentado devolver a la comunidad una mínima parte de lo que ella me ha dado.&lt;/p&gt;&lt;p&gt;En fin, seamos positivos: de momento seguiré escribiendo como siempre, aunque, sinceramente, no sé por cuánto tiempo más. Que digo yo que alguien tendrá que dar de comer a las IAs, ¿no? 😁&lt;/p&gt;
&lt;p&gt;Nuevamente, &lt;b&gt;muchas gracias a todos por estar ahí&lt;/b&gt;. Vayamos a donde vayamos, siempre os agradeceré el apoyo que me habéis brindado a lo largo de estos veinte años.&lt;/p&gt;&lt;p&gt;¡Seguimos viéndonos por aquí!&lt;/p&gt;&lt;div&gt;Publicado en: &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;www.variablenotfound.com&lt;/a&gt;.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/2730744101145625569/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/2730744101145625569' title='31 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/2730744101145625569'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/2730744101145625569'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/05/variable-not-found-cumple-20-anos-y.html' title='¡Variable not found cumple 20 años! ¿Y ahora, qué?'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEEDeRf5ZoRRIBw7lHSJWKKCDT8YqsZe6A1O4YuG8SZcyyOrmOqcANhl5FuFpszfSlGnXJFx41TqLR6Cua-vyXqDnh27g8ysGcw6sgCJ9rGHaZb9VQm-RXpuc07D-owxxeb02WffYV6F1q-Q7kJU0lR1rb7rfMtdYhy8xCzgXjWKz-0WbwMQw2Dw/s72-c/20years.jpg" height="72" width="72"/><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-7317718708638150045</id><published>2026-05-11T08:01:00.001+02:00</published><updated>2026-05-11T08:01:00.113+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 647</title><content type='html'>&lt;img alt=&quot;Desarrollador pensando si crear su nuevo tipo usando class, record, struct o interface&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5L4FFizeW_EaUzdV2yiwEvEgBOsiN428SSig8nuLUYYzpI7zspmp9vO1b8TSyO3jNovmPoVzhoRX1Yb2kqyz-9II7Ii4oIex6yFpnU8boCXty4VRQ5MV4uETtEfc2QvQIVqTwl6SRfyhE8UQ2m7ILS6lw8r_N_GiNSn2r_LzJF5FAec4u9NZOog/s800/newtypeoptions.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Por destacar algunos, encontramos a Isaac Ojeda hablando de &lt;a href=&quot;https://dev.to/isaacojeda/ef-core-n1-una-query-en-dev-mil-queries-en-produccion-2kg4&quot; target=&quot;_blank&quot;&gt;cómo evitar el temido problema N+1&lt;/a&gt; en Entity Framework Core, todo un clásico que merece ser recordado de vez en cuando-&lt;/p&gt;
&lt;p&gt;Y otro clásico: cuando queremos crear un nuevo tipo en C#, &lt;a href=&quot;https://www.pietschsoft.com/post/2026/05/07/csharp-class-record-struct-or-interface-how-to-choose&quot; target=&quot;_blank&quot;&gt;¿debería ser una clase, un record, una struct o una interfaz?&lt;/a&gt; Chris Pietschmann nos da su opinión al respecto, y una guía práctica para elegir la mejor opción en cada caso.&lt;/p&gt;
&lt;p&gt;Martin Stühmer nos advierte sobre &lt;a href=&quot;https://daily-devops.net/posts/dotnet-source-generators-hidden-costs/&quot; target=&quot;_blank&quot;&gt;los costes ocultos de los Source Generators en .NET&lt;/a&gt;, una tecnología muy potente pero que puede afectar al rendimiento de la compilación si no se usa con cuidado.&lt;/p&gt;
&lt;p&gt;Mario Rodriguez nos cuenta uno de los cambios que más pueden impactar en equipos y empresas este año: &lt;a href=&quot;https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/&quot; target=&quot;_blank&quot;&gt;GitHub Copilot pasa a un modelo de facturación por uso&lt;/a&gt;. Si trabajas con esta IA a diario, este enlace es casi de lectura obligatoria.&lt;/p&gt;
&lt;p&gt;Khalid Abuhakmeh pone el foco en un problema tan común como traicionero en producción: &lt;a href=&quot;https://duendesoftware.com/blog/20260429-aspnet-core-cookie-size-limits&quot; target=&quot;_blank&quot;&gt;los límites de tamaño de cookies en ASP.NET Core&lt;/a&gt;, con causas y soluciones prácticas para evitar sustos en aspectos como autenticación y sesiones.&lt;/p&gt;
&lt;p&gt;Oren Eini &lt;a href=&quot;https://ayende.com/blog/203975-a/learning-to-code-1990s-vs-2026/&quot; target=&quot;_blank&quot;&gt;contrasta cómo se aprendía a programar en los 90 con la forma de hacerlo en la actualidad&lt;/a&gt;, y cómo la IA está transformando —y a veces debilitando— la comprensión profunda que necesitan los desarrolladores de hoy.&lt;/p&gt;
&lt;p&gt;Esto y mucho más, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/03/dispara-la-eficiencia-de-tus-busquedas.html&quot;&gt;Dispara la eficiencia de tus búsquedas en memoria con .NET usando SearchValues&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/06/indices-y-rangos-en-c-8-2-de-2.html&quot;&gt;Índices y rangos en C# 8 (2 de 2)&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/microsoft-winapp-cli-la-herramienta-que-unifica-el-desarrollo-para-windows.aspx&quot;&gt;Microsoft WinApp CLI: la herramienta que unifica el desarrollo para Windows&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/isaacojeda/como-manejar-fallos-transitorios-en-net-con-polly-y-resiliencepipelinebuilder-4fk4&quot;&gt;Cómo manejar fallos transitorios en .NET con Polly y ResiliencePipelineBuilder&lt;/a&gt;&lt;br /&gt;
Isaac Ojeda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/ifdef-windows/announcing-the-winapp-vs-code-extension-run-debug-and-package-windows-apps-in-vs-code/&quot;&gt;Announcing the WinApp VS Code Extension — Run, Debug, and Package Windows Apps in VS Code -&lt;/a&gt;&lt;br /&gt;
Chiara Mooney&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/best-way-create-email-templates&quot;&gt;The best way to create email templates in .NET&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/18a61100-6074-43ac-86ae-573ad66a2c8a&quot;&gt;ConfigurationIgnoreAttribute in .NET 11&lt;/a&gt;&lt;br /&gt;
Steven Giesel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/04/24/c-regex-complete-guide-to-regular-expressions-in-net&quot;&gt;C# Regex: Complete Guide to Regular Expressions in .NET&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/04/docker-support-for-isolator.html&quot;&gt;Docker Support for Isolator&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/high-performance-distributed-caching-dotnet-postgres-azure/&quot;&gt;High-Performance Distributed Caching with .NET and Postgres on Azure&lt;/a&gt;&lt;br /&gt;
Matthew Schwartz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/welcome-to-skia-sharp-40-preview1/&quot;&gt;Welcome to SkiaSharp 4.0 Preview 1&lt;/a&gt;&lt;br /&gt;
David Ortinau&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/vs-test-is-removing-its-newtonsoft-json-dependency/&quot;&gt;VSTest is Removing its Newtonsoft.Json Dependency&lt;/a&gt;&lt;br /&gt;
McKenna Barlow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/privacy-audit-automation-dotnet-cli/&quot;&gt;Your Privacy Docs Are Fiction: Let&#39;s Fix That with .NET CLI Tools&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duendesoftware.com/blog/20260430-harden-your-dotnet-json-deserialization&quot;&gt;Harden Your .NET JSON Deserialization with System.Text.Json and JsonSerializerOptions.Strict&lt;/a&gt;&lt;br /&gt;
Khalid Abuhakmeh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reflectionit.nl/blog/2026/intro-disposegenerator&quot;&gt;Introducing ReflectionIT.DisposeGenerator — A Modern Source Generator for the Dispose Pattern&lt;/a&gt;&lt;br /&gt;
Fons Sonnemans&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pietschsoft.com/post/2026/04/29/csharp-dotnet-performance-what-to-optimize-first&quot;&gt;C# / .NET Performance: Why Is It Slow &#39;Here&#39; and What Should You Optimize First?&lt;/a&gt;&lt;br /&gt;
Chris Pietschmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://endjin.com/blog/multi-layer-caching-with-the-decorator-pattern&quot;&gt;Multi-layer Caching with the Decorator Pattern&lt;/a&gt;&lt;br /&gt;
Ian Griffiths&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/pattern-matching-in-c-advanced-scenarios-you-didnt-know/&quot;&gt;Pattern matching in C#: Advanced scenarios you didn&#39;t know&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/dotnet-source-generators-hidden-costs/&quot;&gt;Source Generators: The Build Performance Killer Nobody Warned You About&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/05/c-records.html&quot;&gt;C# Records&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/05/07/linq-in-c-complete-guide-to-language-integrated-query-net-69&quot;&gt;LINQ in C#: Complete Guide to Language Integrated Query (.NET 6-9)&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pietschsoft.com/post/2026/05/07/csharp-class-record-struct-or-interface-how-to-choose&quot;&gt;C#: Should This Be a Class, Record, Struct, or Interface?&lt;/a&gt;&lt;br /&gt;
Chris Pietschmann&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pietschsoft.com/post/2026/04/25/aspnet-core-how-to-structure-a-growing-application-so-it-stays-maintainable&quot;&gt;ASP.NET: How to Structure a Growing Application So It Stays Maintainable&lt;/a&gt;&lt;br /&gt;
Chris Pietschmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/api-versioning-in-dotnet-10-applications/&quot;&gt;Combining API versioning with OpenAPI in .NET 10 applications&lt;/a&gt;&lt;br /&gt;
Sander ten Brinke Author&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duendesoftware.com/blog/20260429-aspnet-core-cookie-size-limits&quot;&gt;ASP.NET Core Cookie Size Limits in Production: Causes and Fixes&lt;/a&gt;&lt;br /&gt;
Khalid Abuhakmeh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blazingcode.dev/articles/blazingmvvm-production-mvvm-for-every-blazor-hosting-model&quot;&gt;Blazing.Mvvm - Production MVVM for Every Blazor Hosting Model&lt;/a&gt;&lt;br /&gt;
Graeme Grant&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/how-to-migrate-controllers-to-minimal-apis&quot;&gt;How to migrate from controllers to Minimal APIs&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pietschsoft.com/post/2026/05/01/csharp-dotnet-cleanest-way-to-add-cross-cutting-concerns&quot;&gt;The Cleanest Way to Introduce a New Cross-Cutting Concern&lt;/a&gt;&lt;br /&gt;
Chris Pietschmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/disable-http-caching-by-default-in-asp-net-core-apis.htm&quot;&gt;Disable HTTP caching by default in ASP.NET Core APIs&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blazorhelpwebsite.com/ViewBlogPost/20085&quot;&gt;SimpleChat: A Provider-Agnostic AI Chat Starter for Blazor&lt;/a&gt;&lt;br /&gt;
Michael Washington&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/copilot-studio-dotnet-10-migration/&quot;&gt;Copilot Studio gets faster with .NET 10 on WebAssembly&lt;/a&gt;&lt;br /&gt;
Daniel Roth&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/&quot;&gt;SQL MCP Server as an App Service&lt;/a&gt;&lt;br /&gt;
Mathew Kishe&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/azuregovernanceandmanagementblog/introducing-the-azure-resource-manager-mcp-server/4517521&quot;&gt;Introducing the Azure Resource Manager MCP Server!&lt;/a&gt;&lt;br /&gt;
Steven Bucher&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/isaacojeda/ports-adapters-como-aislar-tu-nucleo-de-todo-lo-que-puede-cambiar-51jl&quot;&gt;Ports &amp;amp; Adapters: cómo aislar tu núcleo de todo lo que puede cambiar&lt;/a&gt;&lt;br /&gt;
Isaac Ojeda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeopinion.com/just-use-postgres-as-a-queue/&quot;&gt;Just Use Postgres as a Queue?&lt;/a&gt;&lt;br /&gt;
Derek Comartin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/cli-security-testing-audit/&quot;&gt;Security Tests That Prove Themselves&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/05/01/bridge-design-pattern-in-c-complete-guide-with-examples&quot;&gt;Bridge Design Pattern in C#: Complete Guide with Examples&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adrianbailador.github.io/blog/57-cqrs-without-mediatr-dotnet/&quot;&gt;CQRS Without MediatR: Hand-Rolled Command and Query Handlers in .NET | Adrian Bailador&lt;/a&gt;&lt;br /&gt;
Adrian Bailador&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/isaacojeda/ef-core-n1-una-query-en-dev-mil-queries-en-produccion-2kg4&quot;&gt;EF Core: N+1 — Una query en dev, mil queries en producción&lt;/a&gt;&lt;br /&gt;
Isaac Ojeda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/ef-core-performance-tuning-dotnet&quot;&gt;How to Fix Slow EF Core Queries: Practical Performance Tuning&lt;/a&gt;&lt;br /&gt;
Arulraj Aboorvasamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/azure-cosmos-db-conf-2026-recap-lessons-from-production&quot;&gt;Azure Cosmos DB Conf 2026 Recap: Lessons from Production&lt;/a&gt;&lt;br /&gt;
Mark Brown&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/databases/sql-server/managed-identities-in-sql-server-2025-a-complete-guide/&quot;&gt;What are managed identities in SQL Server 2025? A complete guide&lt;/a&gt;&lt;br /&gt;
Greg Low&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/creating-more-realistic-tests-memory-databases-aspnet-core&quot;&gt;More Realistic Tests with In-Memory Databases ASP.NET Core&lt;/a&gt;&lt;br /&gt;
Assis Zang&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/eliminacion-de-datos-personales-con-ia-el-modelo-open-source-de-openai-que-se-ejecuta-en-local.aspx&quot;&gt;Eliminación de datos personales con IA: el modelo Open Source de OpenAI que se ejecuta en local&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/la-factura-de-ia-por-qu%C3%A9-el-talento-pesa-m%C3%A1s-que-los-david-tgalc/&quot;&gt;La factura de la IA: por qué el talento pesa más que los tokens&lt;/a&gt;&lt;br /&gt;
David Carrero&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/gpt-5-5-instant/&quot;&gt;GPT-5.5 Instant: smarter, clearer, and more personalized&lt;/a&gt;&lt;br /&gt;
OpenAI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/&quot;&gt;GitHub Copilot is moving to usage-based billing&lt;/a&gt;&lt;br /&gt;
Mario Rodriguez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.google/innovation-and-ai/technology/developers-tools/multi-token-prediction-gemma-4/&quot;&gt;Multi-token-prediction in Gemma 4&lt;/a&gt;&lt;br /&gt;
Olivier Lacombe &amp;amp; Maarten Grootendorst&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/&quot;&gt;Governing MCP tool calls in .NET with the Agent Governance Toolkit&lt;/a&gt;&lt;br /&gt;
Jack Batzner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/microsoft-agent-framework-building-blocks-for-ai-part-3/&quot;&gt;Microsoft Agent Framework - Building Blocks for AI Part 3&lt;/a&gt;&lt;br /&gt;
Jeremy Likness&lt;/li&gt;
&lt;li&gt;Running GitHub Copilot CLI Offline with Local Models: &lt;a href=&quot;https://elbruno.com/2026/05/03/running-github-copilot-cli-offline-with-local-models-a-cpu-only-reality-check/&quot;&gt;A CPU-Only Reality Check&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://elbruno.com/2026/05/06/running-github-copilot-cli-offline-with-local-models-gpu-edition/&quot;&gt;GPU Edition&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/ai-assisted-coding-a-practical-guide-for-software-engineers/&quot;&gt;AI-Assisted Coding: A Practical Guide for Software Engineers&lt;/a&gt; &amp;amp; * &lt;a href=&quot;https://frontendmasters.com/blog/ai-amplifies-everything-a-team-leads-guide-to-ai-assisted-development/&quot;&gt;AI Amplifies Everything: A Team Lead’s Guide to AI-Assisted Development&lt;/a&gt;&lt;br /&gt;
Durgesh Rajubhai Pawar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/05/01/quadratic-regression-with-pseudo-inverse-training-using-csharp.aspx&quot;&gt;Quadratic Regression with Pseudo-Inverse Training Using C#&lt;/a&gt;&lt;br /&gt;
James McCaffrey&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/durable-workflows-in-microsoft-agent-framework/&quot;&gt;Durable Workflows in the Microsoft Agent Framework&lt;/a&gt;&lt;br /&gt;
Shyju Krishnankutty&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/claudeignore-dotnet/&quot;&gt;.claudeignore Doesn&#39;t Exist. Here&#39;s What Does.&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/advancing-voice-intelligence-with-new-models-in-the-api/&quot;&gt;Advancing voice intelligence with new models in the API&lt;/a&gt;&lt;br /&gt;
OpenAI&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/using-nonexistent-nth-letter-selector-now/&quot;&gt;Let’s Use the Nonexistent ::nth-letter Selector Now&lt;/a&gt;&lt;br /&gt;
Lee Meyer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/build-a-web-based-production-planning-spreadsheet-in-react&quot;&gt;Build a Web-Based Production Planning Spreadsheet in React&lt;/a&gt;&lt;br /&gt;
Sumathi Uthayakumar&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/almanac/functions/c/contrast/&quot;&gt;contrast()&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://css-tricks.com/almanac/functions/c/contrast-color/&quot;&gt;contrast-color()&lt;/a&gt;&lt;br /&gt;
Gabriel Shoyombo&lt;/li&gt;&lt;ul&gt;
&lt;/ul&gt;

&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/whats-important-10/&quot;&gt;What’s !important#10: HTML-in-Canvas, Hex Maps, E-ink Optimization, and More&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/fixed-height-cards-more-fragile-than-they-look/&quot;&gt;Fixed-Height Cards: More Fragile Than They Look&lt;/a&gt;&lt;br /&gt;
Kevine Nzapdi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/css-n-of-selectors-for-conditional-validation/&quot;&gt;CSS &lt;code&gt;n of&lt;/code&gt; Selectors for Conditional Validation&lt;/a&gt;&lt;br /&gt;
Preethi Sam&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gomakethings.com/generative-colors-with-css/&quot;&gt;Generative colors with CSS&lt;/a&gt;&lt;br /&gt;
Chris Ferdinandi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/the-importance-of-native-randomness-in-css/&quot;&gt;The Importance of Native Randomness in CSS&lt;/a&gt;&lt;br /&gt;
Alvaro Montoro&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yuanchuan.dev/multi-stroke-text-effect-in-css&quot;&gt;Multi-stroke text effect in CSS&lt;/a&gt;&lt;br /&gt;
Yuan Chuan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/zigzag-css-grid-layouts/&quot;&gt;Making Zigzag CSS Layouts With a Grid + Transform Trick&lt;/a&gt;&lt;br /&gt;
Durgesh Rajubhai Pawar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://allthingssmitty.com/2026/04/20/why-i-dont-chain-everything-in-javascript-anymore/&quot;&gt;Why I don&#39;t chain everything in JavaScript anymore&lt;/a&gt;&lt;br /&gt;
Matt Smith&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/animating-focus-with-view-transitions/&quot;&gt;Animating Focus with View Transitions&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/a-scrollytelling-gift-for-mum-on-mothers-day-2026/&quot;&gt;A Scrollytelling Gift for Mum on Mother’s Day 2026&lt;/a&gt;&lt;br /&gt;
Lee Meyer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/using-css-corner-shape-for-folded-corners/&quot;&gt;Using CSS&amp;nbsp;corner-shape&amp;nbsp;For Folded Corners&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/how-to-control-infinite-css-animations-part-1-of-2/&quot;&gt;How to Control Infinite CSS Animations (Part 1 of 2)&lt;/a&gt;&lt;br /&gt;
Temani Afif&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/04/agent-hooks-github-copilot-lint-formato-automatico/&quot;&gt;Control de calidad en Agentic DevOps: automatiza linting y formateo con hooks&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/05/vs-code-tunnels-sin-instalar-vs-code-accede-a-tu-maquina-remota-desde-el-navegador/&quot;&gt;VS Code Tunnels sin instalar VS Code: accede a tu máquina remota desde el navegador&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.woodruff.dev/resharper-made-vs-code-a-real-option-for-my-net-work/&quot;&gt;ReSharper Made VS Code a Real Option for My .NET Work&lt;/a&gt;&lt;br /&gt;
Chris Woodruff&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/new-features-in-git-2-54-easier-rebasing-hooks-and-statistcs/&quot;&gt;New features in Git 2.54: easier rebasing, hooks, and statistics&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/&quot;&gt;Visual Studio April Update – Cloud Agent Integration&lt;/a&gt;&lt;br /&gt;
Mark Downie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/04/28/visual-studio-2026-gives-intellisense-priority-over-copilot.aspx&quot;&gt;Visual Studio 2026 Gives IntelliSense Priority in Longstanding Copilot Completion Clash&lt;/a&gt;&lt;br /&gt;
David Ramel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/typescript-7-beta-now-enabled-by-default-in-visual-studio-2026-18-6-insiders-3/&quot;&gt;TypeScript 7 Beta Now Enabled by Default in Visual Studio 2026 18.6 Insiders 3&lt;/a&gt;&lt;br /&gt;
Daniel Flöijer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/commandline/the-new-run-dialog-faster-cleaner-and-more-capable/&quot;&gt;The new Run dialog: faster, cleaner, and more capable&lt;/a&gt;&lt;br /&gt;
Clint Rutkas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/sdk-style-support-for-extension-projects/&quot;&gt;SDK-Style Support for Extension Projects&lt;/a&gt;&lt;br /&gt;
Andrea Viel&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/use-native-device-features-dotnet-maui&quot;&gt;Integrating Native Device Features in .NET MAUI with Built‑In APIs&lt;/a&gt;&lt;br /&gt;
Shalini Suresh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/integrating-haptic-feedback-net-maui&quot;&gt;Integrating Haptic Feedback in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://jmalarcon.es/posts/estrategia-google-inversion-anthropic&quot;&gt;¿Por qué Google financia a su mayor rival? El juego de ajedrez detrás de lo de Anthropic&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ayende.com/blog/203975-a/learning-to-code-1990s-vs-2026/&quot;&gt;Learning to code, 1990s vs 2026&lt;/a&gt;&lt;br /&gt;
Oren Eini&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/7317718708638150045/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/7317718708638150045' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7317718708638150045'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7317718708638150045'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/05/enlaces-interesantes-647.html' title='Enlaces interesantes 647'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5L4FFizeW_EaUzdV2yiwEvEgBOsiN428SSig8nuLUYYzpI7zspmp9vO1b8TSyO3jNovmPoVzhoRX1Yb2kqyz-9II7Ii4oIex6yFpnU8boCXty4VRQ5MV4uETtEfc2QvQIVqTwl6SRfyhE8UQ2m7ILS6lw8r_N_GiNSn2r_LzJF5FAec4u9NZOog/s72-c/newtypeoptions.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-6963594273154501947</id><published>2026-04-27T08:01:00.065+02:00</published><updated>2026-04-27T08:01:00.114+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 646</title><content type='html'>&lt;img alt=&quot;Avión moderno llamado TypeScript 7 adelantando a toda velocidad a otro avión más antiguo TypeScript 6&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-01438Vmwm75h3tK28M2m2K-z4C0lovy2WzORRZvL8E7SJ_HT4WZiE_pcY9t1S85yG_-QUkWsk41-nspYC_HIe2avmTNUIzN8gcbFzhFUNZsG6yAC9twVDzmCInZCjFEkTArHnHYcZpKrzCla3Mk1M6OzQ0lfSSfc2ADxj9v9bQ0gxVkgPinCdg/s800/ts7-beta.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt;Entre los contenidos interesantes de esta semana, se ha anunciado &lt;a href=&quot;https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-beta/&quot; target=&quot;_blank&quot;&gt;la beta del esperado TypeScript 7.0&lt;/a&gt; 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 &quot;beta&quot; 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 &quot;side by side&quot; con las versiones actuales.&lt;/p&gt;
&lt;p&gt;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&lt;a href=&quot;https://www.milanjovanovic.tech/blog/why-i-switched-to-primary-constructors-for-di-in-csharp&quot; target=&quot;_blank&quot;&gt; por qué los usa al aplicar Inyección de Dependencias&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;¿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 &lt;a href=&quot;https://jmalarcon.es/posts/ia-y-trabajo-quien-gana-quien-sobra&quot; target=&quot;_blank&quot;&gt;cómo la inteligencia artificial está transformando el trabajo real&lt;/a&gt;, lejos de los discursos apocalípticos o utópicos, y qué deberíamos hacer al respecto.&lt;/p&gt;&lt;p&gt;Por cierto, si usas un plan individual de GitHub Copilot, esto te interesa. &lt;a href=&quot;https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/&quot; target=&quot;_blank&quot;&gt;Se vienen cambios para proteger la calidad del servicio&lt;/a&gt; ante el aumento de la demanda actual: nuevos registros en pausa, límites de uso más estrictos, modelos retirados...&lt;/p&gt;&lt;p&gt;Igor Roztropiński reflexiona sobre la complejidad del desarrollo frontend moderno, y &lt;a href=&quot;https://binaryigor.com/modern-frontend-complexity.html&quot; target=&quot;_blank&quot;&gt;se pregunta si es esencial o realmente innecesaria&lt;/a&gt;, proponiendo otros enfoques para reducirlo.&lt;/p&gt;
&lt;p&gt;Gerson Azabache nos recuerda que los microservicios &lt;a href=&quot;https://bravedeveloper.com/2026/04/19/el-dia-que-entendi-que-los-microservicios-no-eran-la-solucion-para-todo/&quot; target=&quot;_blank&quot;&gt;no son un objetivo sino una herramienta&lt;/a&gt;, y no encajan en todo tipo de proyectos.&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://www.campusmvp.es/recursos/post/por-que-la-ia-de-anthropic-se-llama-claude-y-que-tiene-que-ver-con-el-padre-del-mundo-digital.aspx&quot; target=&quot;_blank&quot;&gt;qué hay detrás de este nombre&lt;/a&gt;, todo un homenaje al padre de la teoría de la información y uno de los pioneros de la informática moderna.&lt;/p&gt;
&lt;p&gt;El resto de enlaces a contenidos interesantes, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/03/tech-on-toilet-aprovechando-esos.html&quot;&gt;Tech on the Toilet: aprovechando &quot;esos ratillos&quot; para mejorar la calidad de nuestro software&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/06/indices-y-rangos-en-c-8-1-de-2.html&quot;&gt;Índices y rangos en C# 8 (1 de 2)&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/romnyd/fluentvalidation-en-net-10-sin-ensuciar-tus-entidades-clean-architecture-mediatr-cd7&quot;&gt;FluentValidation en .NET 10 sin ensuciar tus entidades (Clean Architecture + MediatR)&lt;/a&gt;&lt;br /&gt;
Romny Duarte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/writing-nodejs-addons-with-dotnet-native-aot/&quot;&gt;Writing Node.js addons with .NET Native AOT&lt;/a&gt;&lt;br /&gt;
Drew Noakes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-10-0-7-oob-security-update/&quot;&gt;.NET 10.0.7 Out-of-Band Security Update&lt;/a&gt;&lt;br /&gt;
Rahul Bhandari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/removingbyte-array-allocations-in-dotnet-framework-using-readonlyspan-t/&quot;&gt;Removing byte[] allocations in .NET Framework using ReadOnlySpan&amp;lt;T&amp;gt;&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/audit-trail-dotnet-cli-tools/&quot;&gt;Who Ran That Migration?&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milanjovanovic.tech/blog/why-i-switched-to-primary-constructors-for-di-in-csharp&quot;&gt;Why I Switched to Primary Constructors for DI in C#&lt;/a&gt;&lt;br /&gt;
Milan Jovanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/evaluating-cron-and-rrule-expressions-in-dotnet.htm&quot;&gt;Evaluating CRON and RRule expressions in .NET&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/whats-new-for-dotnet-in-ubuntu-2604/&quot;&gt;What&#39;s new for .NET in Ubuntu 26.04&lt;/a&gt;&lt;br /&gt;
Richard Lander&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.west-wind.com/posts/2026/Apr/20/Revisiting-C-Scripting-with-the-WestwindScripting-Templating-Library-Part-1&quot;&gt;Revisiting C# Scripting with the Westwind.Scripting Templating Library, Part 1&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://weblog.west-wind.com/posts/2026/Apr/23/Putting-the-WestwindScripting-Templating-Library-to-work-Part-2&quot;&gt;Putting the Westwind.Scripting Templating Library to work, Part 2&lt;/a&gt;&lt;br /&gt;
Rick Strahl&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/ai-smart-search-blazor-file-manager&quot;&gt;AI-Powered File Search in Blazor File Manager: Semantic and Tag-Based&lt;/a&gt;&lt;br /&gt;
Keerthana Rajendran&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/simplest-way-secure-minimal-api-with-swagger&quot;&gt;The simplest way to secure a Minimal API (With Swagger)&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/blazor-basics-getting-started-blazor-development-vs-code&quot;&gt;Blazor Basics: Getting Started with Blazor Development in VS Code&lt;/a&gt;&lt;br /&gt;
Claudio Bernasconi&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/04/19/el-dia-que-entendi-que-los-microservicios-no-eran-la-solucion-para-todo/&quot;&gt;El día que entendí que los microservicios no eran la solución para todo&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.techworld-with-milan.com/p/the-20-software-engineering-laws&quot;&gt;The 20 Software Engineering Laws&lt;/a&gt;&lt;br /&gt;
Dr Milan Milanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/multi-factor-authentication-azure-ad-b2c/&quot;&gt;Security Cosplay: Your Password-Only Admin Panel Isn&#39;t Fooling Anyone&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://daily-devops.net/posts/compliance-verification-dotnet-cli/&quot;&gt;Certified, Filed, Forgotten: The Compliance Trainwreck&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/12-practices-for-optimizing-postgresql-queries-for-large-datasets/&quot;&gt;12 practices for optimizing PostgreSQL queries for large datasets&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/por-que-la-ia-de-anthropic-se-llama-claude-y-que-tiene-que-ver-con-el-padre-del-mundo-digital.aspx&quot;&gt;Por qué la IA de Anthropic se llama Claude (y por qué sin &quot;Claude&quot; no existiría la tecnología actual)&lt;/a&gt;&lt;br /&gt;CampusMVP&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/04/jailbreaking-nano-banana-just-for-fun.html&quot;&gt;Jailbreaking Nano Banana Just for Fun &amp;amp; Laughs&lt;/a&gt;&lt;br /&gt;
Chema Alonso&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/introducing-chatgpt-images-2-0/&quot;&gt;Introducing ChatGPT Images 2.0&lt;/a&gt;&lt;br /&gt;
openAI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/introducing-gpt-5-5/&quot;&gt;Introducing GPT-5.5&lt;/a&gt;&lt;br /&gt;
OpenAI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/news/claude-design-anthropic-labs&quot;&gt;Introducing Claude Design by Anthropic Labs \ Anthropic&lt;/a&gt;&lt;br /&gt;
Anthropic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/&quot;&gt;Changes to GitHub Copilot Individual plans&lt;/a&gt;&lt;br /&gt;
Joe Binder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/securing-mcp-a-control-plane-for-agent-tool-execution&quot;&gt;Securing MCP: A Control Plane for Agent Tool Execution&lt;/a&gt;&lt;br /&gt;
Jack Batzner&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-beta/&quot;&gt;Announcing TypeScript 7.0 Beta&lt;/a&gt;&lt;br /&gt;
Gary Hepting&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://binaryigor.com/modern-frontend-complexity.html&quot;&gt;Modern Frontend Complexity: essential or accidental?&lt;/a&gt;&lt;br /&gt;
Igor Roztropiński&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/markdown-astro/&quot;&gt;Markdown + Astro = ❤️&lt;/a&gt;&lt;br /&gt;
Zell Liew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/the-web-is-fun-again-first-experiments-with-html-in-canvas/&quot;&gt;The Web Is Fun Again: First Experiments with HTML in Canvas&lt;/a&gt;&lt;br /&gt;
Amit Sheen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://allthingssmitty.com/2026/04/20/why-i-dont-chain-everything-in-javascript-anymore/&quot;&gt;Why I don&#39;t chain everything in JavaScript anymore&lt;/a&gt;&lt;br /&gt;
Matt Smith&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/recreating-apples-vision-pro-animation-in-css/&quot;&gt;Recreating Apple’s Vision Pro Animation in CSS&lt;/a&gt;&lt;br /&gt;
John Rhea&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/constructable-stylesheets-and-adoptedstylesheets-one-parse-every-shadow-root/&quot;&gt;Constructable Stylesheets and adoptedStyleSheets: One Parse, Every Shadow Root&lt;/a&gt;&lt;br /&gt;
Rob Levin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/angular-grid-scale-how-kendo-ui-handles-millions-rows&quot;&gt;Angular Grid at Scale: How Kendo UI Handles Millions of Rows&lt;/a&gt;&lt;br /&gt;
Dany Paredes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/langchainjs-for-beginners&quot;&gt;LangChain.js for Beginners: A Free Course to Build Agentic AI Apps with JavaScript&lt;/a&gt;&lt;br /&gt;
Yohan Lasorsa&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tenphi.me/blog/why-i-spent-years-trying-to-make-css-states-predictable/&quot;&gt;Why I spent years trying to make CSS states predictable — tenphi.me&lt;/a&gt;&lt;br /&gt;
Andrey Yamanov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.readwriterachel.com/things-i-learned/2026/04/23/back-to-basics-react-variables.html&quot;&gt;3 ways to store variables in React, and why you shouldn&#39;t sleep on useRef&lt;/a&gt;&lt;br /&gt;
Rachel Kaufman&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://elbruno.com/2026/04/20/%f0%9f%9a%80-meet-t2i-the-elbruno-text2image-cli/&quot;&gt;Meet t2i — The ElBruno.Text2Image CLI&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://jmalarcon.es/posts/ia-y-trabajo-quien-gana-quien-sobra&quot;&gt;IA y trabajo: quién gana (y quién sobra) en la nueva era laboral&lt;/a&gt;&lt;br /&gt;José Manuel Alarcón&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20260421-00/?p=112247&quot;&gt;Sure, xor&#39;ing a register with itself is the idiom for zeroing it out, but why not sub?&lt;/a&gt;&lt;br /&gt;Raymond Chen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/6963594273154501947/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/6963594273154501947' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/6963594273154501947'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/6963594273154501947'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/04/enlaces-interesantes-646.html' title='Enlaces interesantes 646'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-01438Vmwm75h3tK28M2m2K-z4C0lovy2WzORRZvL8E7SJ_HT4WZiE_pcY9t1S85yG_-QUkWsk41-nspYC_HIe2avmTNUIzN8gcbFzhFUNZsG6yAC9twVDzmCInZCjFEkTArHnHYcZpKrzCla3Mk1M6OzQ0lfSSfc2ADxj9v9bQ0gxVkgPinCdg/s72-c/ts7-beta.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-908126781594666489</id><published>2026-04-20T07:45:00.040+02:00</published><updated>2026-04-20T07:45:00.121+02:00</updated><title type='text'>Enlaces interesantes 645</title><content type='html'>&lt;img alt=&quot;Desarrollador programando un cerebro con C#&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiscZxz99dEMaMIZxtt5UPEMcRbum19GLOGQganYziJY44PjWB3d1UdxwgD5eSYr-B2k2fvczX7Uy10ghUG-fNrRfHc87aBOccnw0fSSncJD2XWtFtmlB6VUVwiO968vma515pifL7IRIVLEZQ09I53w3-VQ5TqQor5htk6ekTL89RycgN5Qo6fag/s800/inferencia-csharp.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt;Vamos una semana más con los enlaces a contenidos que me han llamado la atención durante los últimos días.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Entre ellos, vale la pena destacar que se ha anunciado la &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-11-preview-3/&quot; target=&quot;_blank&quot;&gt;tercera preview de .NET 11&lt;/a&gt;, con novedades en C#, librerías, runtime, SDK, ASP.NET Core, Entity Framework y más. &lt;a href=&quot;https://antondevtips.com/blog/new-features-in-dotnet-11-preview-3&quot; target=&quot;_blank&quot;&gt;Las explica bastante bien Anton Martyniuk en su blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;¿Los modelos LLM heredan comportamientos de sus &quot;padres&quot;? José Manuel Alarcón comparte un estudio reciente que sugiere que&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/pulse/el-pedigr%C3%AD-de-los-modelos-ia-y-c%C3%B3mo-heredan-sesgos-alarc%C3%B3n-agu%C3%ADn-ixpge/&quot; target=&quot;_blank&quot;&gt;los modelos de lenguaje heredan sesgos cuando son entrenados con contenidos sintéticos&lt;/a&gt;. Muy interesante y da para reflexionar un rato sobre lo que viene. 
&lt;/p&gt;
&lt;p&gt;También me ha parecido muy llamativo el proyecto personal de Konrad Kokosa, &lt;a href=&quot;https://kokosa.dev/blog/2026/dotllm/&quot; target=&quot;_blank&quot;&gt;dotLLM, un motor de inferencia LLM escrito por completo en C#&lt;/a&gt;. En su blog explica cómo lo ha construido y los retos a los que se ha enfrentado.&lt;/p&gt;&lt;p&gt;Si trabajáis con Visual Studio y aún no habéis tenido ocasión de probar &lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/stop-hunting-bugs-meet-the-new-visual-studio-debugger-agent/&quot; target=&quot;_blank&quot;&gt;el agente de depuración de GitHub Copilot&lt;/a&gt;, en este post de Harshada Hole encontraréis un vídeo que muestra su uso (podéis ponerle el audio en español).&lt;/p&gt;&lt;p&gt;Y Martin Stühmer nos recuerda que&amp;nbsp;&lt;a href=&quot;https://daily-devops.net/posts/managed-identity-rbac-azure-resources/&quot; target=&quot;_blank&quot;&gt;almacenar secretos en appsettings.json es una mala idea&lt;/a&gt;, y muestra cómo podemos migrar a una solución más segura usando herramientas de Azure como Managed Identity y RBAC.&lt;/p&gt;&lt;div&gt;El resto de enlaces, a continuación.&lt;/div&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/03/liberar-automaticamente-servicios.html&quot;&gt;Liberar automáticamente servicios creados de forma manual en ASP.NET Core&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/05/value-converters-en-entity-framework.html&quot;&gt;Value Converters en Entity Framework Core&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.developerro.com/2026/04/15/logs-dotnet-hoy/&quot;&gt;Hacer logs en .NET hoy&lt;/a&gt;&lt;br /&gt;
Fernando Escolar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-11-preview-3/&quot;&gt;.NET 11 Preview 3 is now available!&lt;/a&gt;&lt;br /&gt;
Michael Taylor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/new-features-in-dotnet-11-preview-3&quot;&gt;New Features in .NET 11 Preview 3&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nockawa.github.io/blog/why-building-database-engine-in-csharp/&quot;&gt;Why I&#39;m Building a Database Engine in C#&lt;/a&gt;&lt;br /&gt;
Loïc Baumann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/04/12/building-a-vs-codestyle-extension-system-in-c&quot;&gt;Building a VS Code-Style Extension System in C#&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kokosa.dev/blog/2026/dotllm/&quot;&gt;Introducing dotLLM - Building an LLM Inference Engine in C#&lt;/a&gt;&lt;br /&gt;
Konrad Kokosa&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/agent-framework/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them/&quot;&gt;Agent Skills in .NET: Three Ways to Author, One Provider to Run Them&lt;/a&gt;&lt;br /&gt;
Sergey Menshykh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ndepend.com/llm-chat-in-net-with-ichatclient-the-complete-guide/&quot;&gt;LLM Chat in .NET with IChatClient: The Complete Guide&lt;/a&gt;&lt;br /&gt;
NDepend Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/validate-dotnet-configuration-startup&quot;&gt;Validate .NET configuration on startup&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/suppressing-roslyn-analyzer-warnings-programmatically-using-diagnosticsuppressor.htm&quot;&gt;Suppressing Roslyn Analyzer Warnings Programmatically using DiagnosticSuppressor&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/04/14/c-string-comparison-equals-ordinalignorecase-stringcomparer-and-culture-pitfalls&quot;&gt;C# String Comparison: Equals, OrdinalIgnoreCase, StringComparer, and Culture Pitfalls&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://endjin.com/blog/csharp-linq-max-nullable-values&quot;&gt;LINQ Max and nullable value types&lt;/a&gt;&lt;br /&gt;
Ian Griffiths&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/04/16/how-to-implement-command-pattern-in-c-stepbystep-guide&quot;&gt;How to Implement Command Pattern in C#: Step-by-Step Guide&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/blazor-ai-content-creation-app-structured-prompting&quot;&gt;Build an AI Content Creation App in Blazor with AI AssistView&lt;/a&gt;&lt;br /&gt;
Arulraj Aboorvasamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/purpose-limitation-api-design/&quot;&gt;Purpose Limitation in API Design: Leaking Data You Shouldn&#39;t&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/managed-identity-rbac-azure-resources/&quot;&gt;&quot;We Store Secrets in appsettings.json&quot;: A Horror Story in Five Acts&lt;/a&gt;&lt;br /&gt;Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://heather.cafe/posts/too_much_xor_swap_trick/&quot;&gt;Too much Discussion of the XOR swap trick&lt;/a&gt;&lt;br /&gt;
Chris Jefferson&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeopinion.com/why-clean-code-is-killing-your-velocity/&quot;&gt;Why “Clean Code” is Killing Your Velocity&lt;/a&gt;&lt;br /&gt;
Peter Ritchie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developersvoice.com/blog/architecture/clean-architecture-vertical-slices-refactoring-guide/&quot;&gt;Clean Code to Clean Architecture: Refactoring Fat Controllers into Vertical Slices in ASP.NET Core&lt;/a&gt;&lt;br /&gt;
Sudhir Mangla&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://json5.org/&quot;&gt;JSON5 – JSON for Humans&lt;/a&gt;&lt;br /&gt;
JSON5&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/ef-core-query-translation-why-does-some-linq-never-become-sql/&quot;&gt;EF Core query translation: Why does some LINQ never become SQL?&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/take-your-postgresql-backed-apps-to-the-next-level&quot;&gt;Take your PostgreSQL-backed apps to the next level&lt;/a&gt;&lt;br /&gt;
Ismael Mejía&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/04/ef-migrations-best-practices/&quot;&gt;EF Core Migrations Best Practices&lt;/a&gt;&lt;br /&gt;
Peter Ritchie&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/news/claude-opus-4-7&quot;&gt;Introducing Claude Opus 4.7&lt;/a&gt;&lt;br /&gt;
Anthropic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/running-ai-agents-with-customized-templates-in-docker-sandbox/&quot;&gt;Running AI agents with customized templates using docker sandbox&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/04/github-pages-seguridad-csp/&quot;&gt;Seguridad en GitHub Pages con CSP&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/7-view-transitions-recipes-to-try/&quot;&gt;7 View Transitions Recipes to Try&lt;/a&gt;&lt;br /&gt;
Sunkanmi Fafowora&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/ai-generated-ui-is-inaccessible-by-default/&quot;&gt;AI-Generated UI Is Inaccessible by Default&lt;/a&gt;&lt;br /&gt;
Durgesh Rajubhai Pawar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/the-radio-state-machine/&quot;&gt;The Radio State Machine&lt;/a&gt;&lt;br /&gt;
Amit Sheen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://csswizardry.com/2026/04/font-family-doesnt-fall-back-the-way-you-think/&quot;&gt;font-family Doesn’t Fall Back the Way You Think – CSS Wizardry&lt;/a&gt;&lt;br /&gt;
Harry Roberts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/building-a-ui-without-breakpoints/&quot;&gt;Building a UI Without Breakpoints&lt;/a&gt;&lt;br /&gt;
Amit Sheen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/the-javascript-module-system-architecture/&quot;&gt;A Well-Designed JavaScript Module System is Your First Architecture Decision&lt;/a&gt;&lt;br /&gt;
Amejimaobari Victor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/whats-important-9/&quot;&gt;What’s !important&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/10-best-angular-ui-libraries&quot;&gt;The 10 Best Angular UI Libraries&lt;/a&gt;&lt;br /&gt;
Dany Paredes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/modo-fleet-en-github-copilot-cli-guia-practica-para-lanzar-agentes-en-paralelo.aspx&quot;&gt;Modo &quot;fleet&quot; en GitHub Copilot CLI: guía práctica para lanzar agentes en paralelo&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/siddharthvaddem/openscreen&quot;&gt;openscreen: Create stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use&lt;/a&gt;&lt;br /&gt;
Siddharth Vaddem&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/stop-hunting-bugs-meet-the-new-visual-studio-debugger-agent/&quot;&gt;Stop Hunting Bugs: Meet the New Visual Studio Debugger Agent Workflow&lt;/a&gt;&lt;br /&gt;
Abhas Bhattacharya&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/azure-mcp-tools-now-ship-built-into-visual-studio-2022-no-extension-required/&quot;&gt;Azure MCP tools now ship built into Visual Studio 2022 — no extension required&lt;/a&gt;&lt;br /&gt;
Yun Jung Choi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ndepend.com/the-road-to-visual-studio-2027/&quot;&gt;The Road to Visual Studio 2027&lt;/a&gt;&lt;br /&gt;
NDepend Team&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://redth.github.io/MAUI.Sherpa/&quot;&gt;MAUI Sherpa — Your Guide to .NET MAUI Development&lt;/a&gt;&lt;br /&gt;
Jonathan Dick&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/dotnet-maui-listview-vs-collectionview&quot;&gt;.NET MAUI ListView vs CollectionView: How Syncfusion ListView Performs Better&lt;/a&gt;&lt;br /&gt;
Anandh Ganesan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/managing-state-in-dotnet-maui&quot;&gt;.NET MAUI State Management: From ViewModels to App Stores&lt;/a&gt;&lt;br /&gt;
Sri Radhesh Nag Subash Sankar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/building-instagram-style-like-animation-net-maui&quot;&gt;Building an Instagram-Style Like Animation in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20260414-00/?p=112231&quot;&gt;Why was there a red telephone at every receptionist desk?&lt;/a&gt;&lt;br /&gt;
Raymond Chen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/908126781594666489/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/908126781594666489' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/908126781594666489'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/908126781594666489'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/04/enlaces-interesantes-645.html' title='Enlaces interesantes 645'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiscZxz99dEMaMIZxtt5UPEMcRbum19GLOGQganYziJY44PjWB3d1UdxwgD5eSYr-B2k2fvczX7Uy10ghUG-fNrRfHc87aBOccnw0fSSncJD2XWtFtmlB6VUVwiO968vma515pifL7IRIVLEZQ09I53w3-VQ5TqQor5htk6ekTL89RycgN5Qo6fag/s72-c/inferencia-csharp.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-5925834364849040631</id><published>2026-04-14T08:02:00.002+02:00</published><updated>2026-04-14T08:02:00.115+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="optimización"/><category scheme="http://www.blogger.com/atom/ns#" term="trucos"/><title type='text'>Mejora el rendimiento de string.Format() usando CompositeFormat</title><content type='html'>&lt;img alt=&quot;Desarrolladores manipulando cadenas&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBYsMWimvhZzlEbNnftT_i70mUEzguFLWNBHPSMrVSQ9Qq_Z2KxfxsrZ-zBE2jgTIsm2ftnJTTA3bZUOP16ntP4Dtxf6tgomZCjZW_KqJZYM8-guzjUMAoERWCR7i-UyMDcPHSwv8DqIIShT_xzFsnUmT5xPgkIarpoXBu7AKF6Emesfh_n7R_jw/s320/CompositeFormat.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;En .NET, todos hemos usado &lt;code&gt;string.Format()&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;En este artículo exploraremos cómo mejorar el rendimiento de &lt;code&gt;string.Format()&lt;/code&gt; utilizando la clase &lt;code&gt;CompositeFormat&lt;/code&gt; en .NET, que nos permite evitar el coste de analizar la cadena de formato cada vez que se llama al método.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;El problema con &lt;code&gt;string.Format()&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Observemos un ejemplo típico de uso de &lt;code&gt;string.Format()&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;for(var i = 0; i &amp;lt; 100_000; i++)
{
    var str = string.Format(&quot;Loop {0} started at {1}&quot;, i, DateTime.Now);
    Console.WriteLine(str);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Como podemos ver, en cada iteración del bucle se llama a &lt;code&gt;string.Format()&lt;/code&gt; para obtener el mensaje que justo después es mostrado en la consola. El problema aquí es que &lt;strong&gt;cada llamada a &lt;code&gt;string.Format()&lt;/code&gt; es independiente de las anteriores&lt;/strong&gt;, lo que implica que, en cada vuelta, la cadena de formato &lt;code&gt;&quot;Loop {0} started at {1}&quot;&lt;/code&gt; debe ser &lt;em&gt;parseada&lt;/em&gt; para detectar los marcadores de posición, y luego reemplazarlos con los valores correspondientes.&lt;/p&gt;
&lt;p&gt;De forma intuitiva, podemos ver claro que se trata de dos tareas diferentes: primero se analiza la cadena de formato y luego se realiza el reemplazo de valores. La segunda de ellas es inevitable, pero, ¿podríamos evitar la primera reutilizando el resultado del &lt;em&gt;parseado&lt;/em&gt; de la cadena de formato entre las distintas llamadas?&lt;/p&gt;
&lt;h2&gt;Introducing &lt;code&gt;CompositeFormat&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;La clase &lt;code&gt;CompositeFormat&lt;/code&gt;, introducida en .NET 8, nos permite hacer precisamente eso. En lugar de llamar a &lt;code&gt;string.Format()&lt;/code&gt; directamente, podemos crear una instancia de &lt;code&gt;CompositeFormat&lt;/code&gt; con la cadena de formato &lt;em&gt;parseada&lt;/em&gt;, y luego reutilizar esa instancia para formatear múltiples mensajes.&lt;/p&gt;
&lt;p&gt;Aquí tenéis un ejemplo de cómo hacerlo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;var format = CompositeFormat.Parse(&quot;Loop {0} started at {1}&quot;);
for (int i = 0; i &amp;lt; 100_000; i++)
{
    var str = string.Format(null, format, i, DateTime.Now);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Como podéis ver, la cadena de formato se analiza una sola vez al crear la instancia de &lt;code&gt;CompositeFormat&lt;/code&gt;, y luego se reutiliza en cada iteración del bucle. Esto reduce significativamente el coste de procesamiento, especialmente cuando el número de iteraciones es alto. Incluso podría mejorarse ligeramente si el objeto &lt;code&gt;CompositeFormat&lt;/code&gt; se crea una única vez, como variable estática, y se reutiliza en todas las llamadas.&lt;/p&gt;
&lt;p&gt;Si utilizamos &lt;a href=&quot;https://www.variablenotfound.com/2018/09/benchmarkdotnet-aranando-microsegundos.html&quot;&gt;BenchmarkDotNet&lt;/a&gt; para medir el rendimiento de estos enfoques, obtenemos los siguientes resultados:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.7462/25H2/2025Update/HudsonValley2)
Intel Core i9-9900K CPU 3.60GHz (Coffee Lake), 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.101
  [Host]     : .NET 10.0.1 (10.0.1, 10.0.125.57005), X64 RyuJIT x86-64-v3
  DefaultJob : .NET 10.0.1 (10.0.1, 10.0.125.57005), X64 RyuJIT x86-64-v3

| Method                    | Mean     | Error    | StdDev   | Gen0      | Allocated |
|-------------------------- |---------:|---------:|---------:|----------:|----------:|
| UsingStandardStringFormat | 20.24 ms | 0.103 ms | 0.091 ms | 1812.5000 |   14.5 MB |
| UsingCompositeFormat | 17.97 ms | 0.096 ms | 0.089 ms | 1218.7500 |   9.92 MB |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El &lt;strong&gt;uso de la CPU se ha reducido en un 11,2%&lt;/strong&gt;, y la cantidad de &lt;strong&gt;memoria asignada se redujo en un 31,6%&lt;/strong&gt;, unos números nada despreciables.&lt;/p&gt;
&lt;p&gt;Es importante tener en cuenta que el beneficio &lt;strong&gt;podría variar dependiendo de la complejidad de la cadena de formato&lt;/strong&gt;. Por ejemplo, consideremos una cadena de formato más rebuscada como la siguiente, donde mostramos los mismos dos parámetros varias veces, pero con diferentes formatos:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;ID:{0:D5} | Hex:0x{0:X8} | Padded:[{0,8}] | Num:{0:N0} | 
Time:{1:yyyy-MM-dd HH:mm:ss.fff} | Short:{1:dd/MM/yy} | ISO:{1:O}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Al ejecutar las mismas pruebas con esta cadena de formato más compleja, obtenemos los siguientes resultados:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;| Method                    | Mean     | Error    | StdDev   | Gen0      | Allocated |
|-------------------------- |---------:|---------:|---------:|----------:|----------:|
| UsingStandardStringFormat | 59.31 ms | 0.292 ms | 0.259 ms | 4666.6667 |  38.06 MB |
| UsingCompositeFormat      | 47.32 ms | 0.300 ms | 0.281 ms | 3727.2727 |  30.44 MB |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En este caso, observamos una &lt;strong&gt;reducción del 20% en el uso de CPU&lt;/strong&gt;, que demuestra que el proceso de &lt;em&gt;parseado&lt;/em&gt; de la cadena es más costoso cuando no se reutiliza. El uso de la memoria usando &lt;code&gt;CompositeFormat&lt;/code&gt; también mejora un 20% respecto a &lt;code&gt;string.Format()&lt;/code&gt;, aunque en menor medida que antes debido a que el tamaño de las cadenas resultantes es mayor en ambos casos, y esto hace que la diferencia porcentualmente sea menor.&lt;/p&gt;
&lt;h2&gt;Punto extra: ¿por qué las cadenas interpoladas son mejores que ambas opciones?&lt;/h2&gt;
&lt;p&gt;Aunque &lt;code&gt;CompositeFormat&lt;/code&gt; pueda parecer la panacea para mejorar el rendimiento de &lt;code&gt;string.Format()&lt;/code&gt;, en realidad, las cadenas interpoladas (&lt;code&gt;$&quot;...&quot;&lt;/code&gt;) son una opción aún mejor en términos de rendimiento y legibilidad.&lt;/p&gt;
&lt;p&gt;De hecho, en general, deberíamos utilizar cadenas interpoladas (&lt;code&gt;$&quot;...&quot;&lt;/code&gt;) en lugar de &lt;code&gt;string.Format()&lt;/code&gt; o &lt;code&gt;CompositeFormat&lt;/code&gt; siempre que sea posible. Las cadenas interpoladas son más legibles y se resuelven en tiempo de compilación, por lo que el compilador puede optimizarlas mejor y generar un código más eficiente. Podemos verlo en el siguiente &lt;em&gt;benchmark&lt;/em&gt; comparativo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;| Method                  | Mean     | Error    | StdDev   | Gen0      | Allocated |
|------------------------ |---------:|---------:|---------:|----------:|----------:|
| StandardStringFormat    | 60.85 ms | 0.412 ms | 0.385 ms | 4666.6667 |  38.06 MB |
| UsingCompositeFormat    | 47.47 ms | 0.382 ms | 0.357 ms | 3727.2727 |  30.44 MB |
| UsingInterpolatedString | 37.34 ms | 0.236 ms | 0.197 ms | 3785.7143 |  30.44 MB |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Según los resultados, las cadenas interpoladas son un &lt;strong&gt;38,7% más rápidas que &lt;code&gt;string.Format()&lt;/code&gt;&lt;/strong&gt; y un &lt;strong&gt;21,3% más rápidas que &lt;code&gt;CompositeFormat&lt;/code&gt;&lt;/strong&gt;. Además, el uso de memoria es similar al de &lt;code&gt;CompositeFormat&lt;/code&gt;, lo que las convierte en la opción preferida cuando la cadena de formato es conocida de antemano.&lt;/p&gt;
&lt;p&gt;Para el resto de los casos, siempre y cuando el formateo de la cadena se encuentre en bucles o &lt;em&gt;hot paths&lt;/em&gt;, &lt;code&gt;CompositeFormat&lt;/code&gt; será la opción más eficiente. Pero ojo, ¡no hay que volverse locos con las micro-optimizaciones!&lt;/p&gt;

Publicado en: &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;www.variablenotfound.com&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/5925834364849040631/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/5925834364849040631' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/5925834364849040631'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/5925834364849040631'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/04/mejora-el-rendimiento-de-stringformat.html' title='Mejora el rendimiento de string.Format() usando CompositeFormat'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBYsMWimvhZzlEbNnftT_i70mUEzguFLWNBHPSMrVSQ9Qq_Z2KxfxsrZ-zBE2jgTIsm2ftnJTTA3bZUOP16ntP4Dtxf6tgomZCjZW_KqJZYM8-guzjUMAoERWCR7i-UyMDcPHSwv8DqIIShT_xzFsnUmT5xPgkIarpoXBu7AKF6Emesfh_n7R_jw/s72-c/CompositeFormat.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-3837292177887920600</id><published>2026-04-13T08:01:00.002+02:00</published><updated>2026-04-14T08:31:14.007+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 644</title><content type='html'>

&lt;img alt=&quot;Dos desarrolladores cargando con el peso de la deuda técnica generada por la IA&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBAupKEqFdp5SuckJABdQd8rgHx2vNY1mcdiJYXdrV4lHeWWlcaewgAhUNWSXkgqwCg1uGJnGE6GpHZFw9KEg-Lz_DkfIs9MYvsWpPr2-iecyqXtybzpV5vnI0eToeBcfyyLJnPlYzmouqKQYBHc-o0GgbCzKe1BGUV7AMxRYOYZ0Zvo5-I1aC5g/s800/ia-tech-debt.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Pero como siempre, destacaremos unos cuantos.&lt;/p&gt;
&lt;p&gt;José Manuel Alarcón nos habla de que el uso de&lt;a href=&quot;https://www.campusmvp.es/recursos/post/la-ia-genera-deuda-tecnica-causas-riesgos-y-como-evitarlos-guia-completa-para-tecnicos.aspx&quot; target=&quot;_blank&quot;&gt; la IA sin un control adecuado podría introducir deuda técnica en nuestros proyectos&lt;/a&gt;, y nos ofrece una guía para evitarla.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://elguerre.com/2026/03/30/ai-agents-vs-skills-commands-in-claude-code-codex-copilot-cli-gemini-cli-stop-mixing-them-up/&quot; target=&quot;_blank&quot;&gt;diferencias entre agentes, skills y comandos&lt;/a&gt; en el contexto de herramientas como Claude Code, Codex, Copilot CLI y Gemini CLI.&lt;/p&gt;
&lt;p&gt;Fernando Escolar nos recuerda &lt;a href=&quot;https://www.developerro.com/2026/04/01/tyding-up-your-code/&quot; target=&quot;_blank&quot;&gt;la importancia de mejorar continuamente nuestro código&lt;/a&gt; con pequeños cambios, que, aunque no sean espectaculares, pueden marcar una gran diferencia en la calidad y mantenibilidad de nuestro software.&lt;/p&gt;
&lt;p&gt;Gerson Azabache nos habla de &lt;a href=&quot;https://bravedeveloper.com/2026/03/29/tu-app-necesita-workers-silenciosos-el-patron-que-usa-amazon-para-no-hacerte-esperar/&quot; target=&quot;_blank&quot;&gt;&quot;workers&quot; o tareas en segundo plano&lt;/a&gt; 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 &lt;a href=&quot;https://bravedeveloper.com/2026/04/05/background-jobs-en-net-con-ihostedservice-procesa-tareas-en-segundo-plano/&quot; target=&quot;_blank&quot;&gt;cómo implementarlos en .NET&lt;/a&gt; con IHostedService.&lt;/p&gt;
&lt;p&gt;Y para terminar, todo un clásico: ¿quieres mostrar una dirección de correo electrónico en tu sitio web sin que los &lt;em&gt;spammers&lt;/em&gt; se ceben con ella? Spencer Mortensen nos cuenta las &lt;a href=&quot;https://spencermortensen.com/articles/email-obfuscation/&quot; target=&quot;_blank&quot;&gt;técnicas de ofuscación de correo electrónico que siguen funcionando en 2026&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;El resto de contenidos interesantes, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/02/como-detectar-y-reaccionar-cambios-en.html&quot;&gt;Cómo detectar y reaccionar a cambios en settings de ASP.NET Core, en tiempo real&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/05/ambito-local-implicito-en-sentencias.html&quot;&gt;Ámbito local implícito en sentencias using de C#&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/03/29/tu-app-necesita-workers-silenciosos-el-patron-que-usa-amazon-para-no-hacerte-esperar/&quot;&gt;Tu App Necesita Workers Silenciosos: El Patrón que Usa Amazon para No Hacerte Esperar&lt;/a&gt; &amp;amp; * &lt;a href=&quot;https://bravedeveloper.com/2026/04/05/background-jobs-en-net-con-ihostedservice-procesa-tareas-en-segundo-plano/&quot;&gt;Background Jobs en .NET con IHostedService: Procesa Tareas en Segundo Plano&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/04/using-llms-and-mcp-in-net.html?m=1&quot;&gt;Using LLMs and MCP in .NET&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/configuring-contextual-options-with-microsoft-extensions-options-contextual/&quot;&gt;Configuring contextual options with Microsoft.Extensions.Options.Contextual&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/how-net-handles-exceptions-internally-and-why-theyre-expensive/&quot;&gt;How .NET handles exceptions internally (and why they&#39;re expensive)&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/url-pattern-matching-in-dotnet.htm&quot;&gt;URL Pattern Matching in .NET&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kant2002.github.io/en/obfuscators/2026/04/02/how-to-build-obfuscator-part-i.html&quot;&gt;How to build .NET obfuscator&lt;/a&gt;&lt;br /&gt;
Andrii Kurdiumov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/csharp-15-union-types/&quot;&gt;Explore union types in C# 15&lt;/a&gt;&lt;br /&gt;
Bill Wagner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elbruno.com/2026/04/04/%f0%9f%93%9d-convert-anything-to-markdown-in-net-meet-elbruno-markitdotnet/&quot;&gt;Convert Anything to Markdown in .NET — Meet ElBruno.MarkItDotNet&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/3acc78ff-5ae2-4be3-af7e-62bfcbf3fb6d&quot;&gt;Source code generated string enums with exhaustion support&lt;/a&gt;&lt;br /&gt;
Steven Giesel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/dotnet-11-preview-whats-new&quot;&gt;What’s New in .NET 11 Preview 1 &amp;amp; 2: Runtime Async, Zstandard, Blazor TempData, and Vector Search&lt;/a&gt;&lt;br /&gt;
Arulraj Aboorvasamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mteheran.dev/libraries-i-stopped-using-in-net-and-i-dont-regret-it-35f8679196c8&quot;&gt;Libraries I Stopped Using in .NET (And I Don’t Regret It)&lt;/a&gt;&lt;br /&gt;
Miguel Teherán&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://anthonygiretti.com/2026/04/08/asp-net-core-why-i-couldnt-upgrade-fluentvalidation-past-11-4-in-my-calzolari-grpc-aspnetcore-validation-package-and-how-i-finally-fixed-it/&quot;&gt;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)&lt;/a&gt;&lt;br /&gt;
Anthony Giretti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/04/08/testing-c-source-generators-a-practical-guide&quot;&gt;Testing C# Source Generators: A Practical Guide&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/load-save-image-blazor-image-editor-sql-server&quot;&gt;How to Load and Save Images in Blazor Image Editor with SQL Server&lt;/a&gt;&lt;br /&gt;
Satheeskumar S.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/instantiating-objects-accessing-properties-blazor&quot;&gt;Instantiating Objects and Accessing Properties in Blazor&lt;/a&gt;&lt;br /&gt;
Héctor Pérez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/aspnet-core-2-3-end-of-support/&quot;&gt;ASP.NET Core 2.3 end of support announcement&lt;/a&gt;&lt;br /&gt;
Daniel Roth&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/blazor-basics-building-responsive-blazor-apps-css-media-queries&quot;&gt;Blazor Basics: Building Responsive Blazor Apps with CSS Media Queries&lt;/a&gt;&lt;br /&gt;
Claudio Bernasconi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mitchelsellers.com/blog/article/using-blazor-sections-for-complex-situations&quot;&gt;Using Blazor Sections For Complex Situations&lt;/a&gt;&lt;br /&gt;
Mitchel Sellers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developersvoice.com/blog/dotnet/mastering-distributed-rate-limiting-asp-net-core/&quot;&gt;Mastering ASP.NET Core Rate Limiting: From Middleware to Distributed Redis Strategies&lt;/a&gt;&lt;br /&gt;
Sudhir Mangla&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://azure.github.io/AppService/2026/03/31/continued-investment.html&quot;&gt;Continued Investment in Azure App Service&lt;/a&gt;&lt;br /&gt;
Byron Tardif&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/infrastructure-as-code-compliance-bicep/&quot;&gt;Why Your Azure Portal Clicks Will Fail the Next Audit&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://azure.github.io/AppService/2026/04/06/quickdeploy.html&quot;&gt;A simpler way to deploy your code to Azure App Service for Linux&lt;/a&gt;&lt;br /&gt;
Tulika Chaudharie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://azure.github.io/AppService/2026/04/09/Agentic_IIS_Migration_to_Managed_Instance_On_AppService.html&quot;&gt;Agentic IIS Migration to Managed Instance on Azure App Service&lt;/a&gt;&lt;br /&gt;
Gaurav Seth&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.developerro.com/2026/04/01/tyding-up-your-code/&quot;&gt;Tidying up your code&lt;/a&gt;&lt;br /&gt;
Fernando Escolar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/devops-para-principiantes-que-significan-dia-0-1-y-2-y-por-que-el-dia-2-puede-durar-cinco-anios.aspx&quot;&gt;DevOps para principiantes: ¿Qué significan Día 0, 1 y 2 y por qué el Día 2 puede durar cinco años?&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;Code Organization and Maintainability: &lt;a href=&quot;https://www.devleader.ca/2026/03/27/factory-method-pattern-best-practices-in-c-code-organization-and-maintainability&quot;&gt;Factory Method Pattern Best Practices in C#&lt;/a&gt; &amp;amp; * &lt;a href=&quot;https://www.devleader.ca/2026/04/01/observer-pattern-best-practices-in-c-code-organization-and-maintainability&quot;&gt;Observer Pattern Best Practices in C#&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/right-to-erasure-implementation-patterns/&quot;&gt;&quot;Just Delete the User&quot;: Famous Last Words Before the GDPR Audit&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://essenceia.github.io/projects/floating_dragon/&quot;&gt;Floating point from scratch: Hard Mode&lt;/a&gt;&lt;br /&gt;
Julia Desmazes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/04/un-hardening-tip-de-bbdd-de-mi-lost.html&quot;&gt;Un informático en el lado del mal: Un &quot;Hardening Tip&quot; de BBDD - de mi Lost &amp;amp; Found&lt;/a&gt;&lt;br /&gt;
Chema Alonso&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/why-your-entity-framework-core-app-needs-query-filters&quot;&gt;Why your Entity Framework Core app needs query filters&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/mapping-database-views-in-ef-core-without-breaking-migrations/&quot;&gt;Mapping database views in EF Core without breaking migrations&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/ef-core-transactions-stop-data-getting-out-of-sync&quot;&gt;EF Core transactions: Stop your data getting out of sync&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.woodruff.dev/how-to-delete-and-update-millions-of-rows-in-ef-core-without-loading-a-single-entity/&quot;&gt;How to Delete and Update Millions of Rows in EF Core Without Loading a Single Entity&lt;/a&gt;&lt;br /&gt;
Chris Woodruff&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/la-ia-genera-deuda-tecnica-causas-riesgos-y-como-evitarlos-guia-completa-para-tecnicos.aspx&quot;&gt;¿La IA genera deuda técnica? Causas, riesgos y cómo evitarlos&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mariocortes.net/la-trampa-del-70-30-el-espejismo-del-rendimiento-cognitivo-en-la-era-de-la-ia/&quot;&gt;La trampa del 70/30: El espejismo del rendimiento cognitivo en la era de la IA&lt;/a&gt;&lt;br /&gt;
Mario Cortés&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/personas-y-agentes-colaboran-compiten-por-el-mismo-de-diaz-martin-vsh3e/&quot;&gt;Personas y agentes no colaboran. Compiten por el mismo cuello de botella&lt;/a&gt;&lt;br /&gt;
Alberto Díaz Martín&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/03/frontiermath-inteligencia-artificial.html&quot;&gt;FrontierMath: Inteligencia Artificial resolviendo problemas de matemáticas aún no resueltos&lt;/a&gt;&lt;br /&gt;
Chema Alonso&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elguerre.com/2026/03/30/ai-agents-vs-skills-commands-in-claude-code-codex-copilot-cli-gemini-cli-stop-mixing-them-up/&quot;&gt;AI Agents vs Skills (&amp;amp; Commands) in Claude Code, Codex, Copilot CLI &amp;amp; Gemini CLI: Stop Mixing Them&amp;nbsp;Up&lt;/a&gt;&lt;br /&gt;
Juan Luis Guerrero&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/rag-vs-fine-tuning-in-gpt-approach&quot;&gt;RAG vs Fine-Tuning: How to Choose the Right GPT Approach&lt;/a&gt;&lt;br /&gt;
Manikanda Akash Munisamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ploeh.dk/2026/03/30/programming-languages-for-ai/&quot;&gt;Programming languages for AI&lt;/a&gt;&lt;br /&gt;
Mark Seemann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/context-engineering-smart-ai-prompts&quot;&gt;Context Engineering: Improving AI Code Output in Your IDE&lt;/a&gt;&lt;br /&gt;
Kaviya Priya Rajakumar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/04/03/migrating-from-semantic-kernel-to-microsoft-agent-framework-in-c&quot;&gt;Migrating from Semantic Kernel to Microsoft Agent Framework in C#&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dirkstrauss.com/claude-code-windows-migration-guide/&quot;&gt;Claude Code Windows Migration Guide: Move Your Setup&lt;/a&gt;&lt;br /&gt;
Dirk Strauss&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/top-llm-api-comparison-2026&quot;&gt;Best LLM APIs&amp;nbsp;in 2026: Comparing OpenAI, Claude, Gemini, Azure, Bedrock, Mistral &amp;amp; DeepSeek&lt;/a&gt;&lt;br /&gt;
Arunachalam Kandasamy Raja&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/&quot;&gt;Introducing SQL MCP Server&lt;/a&gt;&lt;br /&gt;
Jerry Nixon&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/form-automation-tips-for-happier-user-and-clients/&quot;&gt;Form Automation Tips for Happier User and Clients&lt;/a&gt;&lt;br /&gt;
Iqra Naaem&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/the-drill-down-menu-with-details-and-scope/&quot;&gt;The Drill-Down Menu with Details and @scope&lt;/a&gt;&lt;br /&gt;
Preethi Sam&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://csswizardry.com/2026/04/what-is-css-containment-and-how-can-i-use-it/&quot;&gt;What Is CSS Containment and How Can I Use It?&lt;/a&gt;&lt;br /&gt;
Harry Roberts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://spencermortensen.com/articles/email-obfuscation/&quot;&gt;Email obfuscation: What works in 2026?&lt;/a&gt;&lt;br /&gt;
Spencer Mortensen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.i-programmer.info/programming/113-javascript/18770-jquery-4-reinventing-events.html&quot;&gt;jQuery 4 - Reinventing Events&lt;/a&gt;&lt;br /&gt;
Ian Elliot&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/complex-css-shapes-with-shape-function/&quot;&gt;Making Complex CSS Shapes Using shape()&lt;/a&gt;&lt;br /&gt;
Temani Afif&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/what-to-know-in-javascript-2026-edition/&quot;&gt;What To Know in JavaScript (2026 Edition)&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/css-multi-column-layout-wrapping-features/&quot;&gt;New CSS Multi-Column Layout Features in Chrome&lt;/a&gt;&lt;br /&gt;
Abhishek Pratap Singh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/creating-puzzle-peices-in-css/&quot;&gt;Let’s Get Puzzled!&lt;/a&gt;&lt;br /&gt;
Amit Sheen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inngest.com/blog/hanging-promises-for-control-flow&quot;&gt;You can&#39;t cancel a JavaScript promise (except sometimes you can)&lt;/a&gt;&lt;br /&gt;
Aaron Harper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/clipboard-operations-in-react-spreadsheet&quot;&gt;How to Implement Cut, Copy, and Paste Support in React Spreadsheet&lt;/a&gt;&lt;br /&gt;
Parthasarathy Ranjan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/alternatives-to-the-important-keyword/&quot;&gt;Alternatives to the !important Keyword&lt;/a&gt;&lt;br /&gt;
Saleh Mubashar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/name-only-containers-the-scoping-we-needed/&quot;&gt;Name-Only Containers: The Scoping We Needed&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sitr.us/2026/04/06/big-ideas-of-typescript.html/&quot;&gt;The 6 Big Ideas of Typescript • sitr.us&lt;/a&gt;&lt;br /&gt;
Jesse Hallett&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/selecting-a-date-range-in-css/&quot;&gt;Selecting a Date Range in CSS&lt;/a&gt;&lt;br /&gt;
Preethi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/svg-filters-guide-getting-started-with-the-basics/&quot;&gt;SVG Filters Guide: Getting Started with the Basics&lt;/a&gt;&lt;br /&gt;
Ana Tudor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/how-i-lost-madcss/&quot;&gt;How I Lost MadCSS&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/04/como-funciona-launch-json-vscode/&quot;&gt;Cómo funciona launch.json en VS Code: configuraciones, compounds y arranques secuenciales&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencode.ai/&quot;&gt;OpenCode | El agente de codificación IA de código abierto&lt;/a&gt;&lt;br /&gt;
OpenCode Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/vibecodingpub/jetbrains-air-the-future-of-multi-agent-coding-or-just-more-ai-noise-5450e648a962&quot;&gt;JetBrains Air: The Future of Multi-Agent Coding, or Just More AI Noise?&lt;/a&gt;&lt;br /&gt;
Saeed Zarinfam&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/visual-studio-march-update-build-your-own-custom-agents/&quot;&gt;Visual Studio March Update - Build Your Own Custom Agents&lt;/a&gt;&lt;br /&gt;
Mark Downie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/bookmark-studio-evolving-bookmarks-in-visual-studio/&quot;&gt;Bookmark Studio: evolving bookmarks in Visual Studio&lt;/a&gt;&lt;br /&gt;
Mads Kristensen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/&quot;&gt;Your Migration&#39;s Source of Truth: The Modernization Assessment&lt;/a&gt;&lt;br /&gt;
Jeffrey Fritz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/running-ai-agents-safely-in-a-microvm-using-docker-sandbox/&quot;&gt;Running AI agents safely in a microVM using docker sandbox&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.postman.com/how-to-mock-apis-locally-during-development/&quot;&gt;How to Mock APIs Locally During Development&lt;/a&gt;&lt;br /&gt;
Quinton Wall&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/universal-doc-viewing-maui-pdf-viewer&quot;&gt;Tired of Multiple Viewers? Build a Universal Document Viewer in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Deepak G.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/speed-up-dotnet-maui-popup&quot;&gt;Why .NET MAUI Popups Lag and How to Fix Performance Issues&lt;/a&gt;&lt;br /&gt;
Kompelli Sravan Kumar Kompelli Lakshman&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/redefining-software-engineering-profession-gy74e/&quot;&gt;Redefining the Software Engineering Profession for AI&lt;/a&gt;&lt;br /&gt;
Mark Russinovich &amp;amp; Scott Hanselman&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/3837292177887920600/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/3837292177887920600' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/3837292177887920600'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/3837292177887920600'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/04/enlaces-interesantes-643.html' title='Enlaces interesantes 644'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBAupKEqFdp5SuckJABdQd8rgHx2vNY1mcdiJYXdrV4lHeWWlcaewgAhUNWSXkgqwCg1uGJnGE6GpHZFw9KEg-Lz_DkfIs9MYvsWpPr2-iecyqXtybzpV5vnI0eToeBcfyyLJnPlYzmouqKQYBHc-o0GgbCzKe1BGUV7AMxRYOYZ0Zvo5-I1aC5g/s72-c/ia-tech-debt.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-699572947616277491</id><published>2026-03-30T08:02:00.001+02:00</published><updated>2026-03-30T08:02:00.123+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 643</title><content type='html'>&lt;img alt=&quot;Dos policías arrestando a un desarrollador que estaba usando una IA para generar su código&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjswXYBJ2wj0x55d5vp9hjgo65jA6J5yE6wbOOIM2GW6NevtVzF_djzmgT2ZXFTlKgyLY2XhYzAbhGJfz2M-6ahSZC3ylbOU9Njw4dI930iscW3PzQ6j9siPdcKOFoQbHVWK_OYl8gJv9tGwtfBLjBTeIpykYADqevrRp31jBur5g4bArGq7btVmg/s800/arrested.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;Pues nos vamos de Semana Santa con unos cuantos enlaces interesantes para entretenernos durante las vacaciones, en caso de haberlas 😎&lt;/p&gt;
&lt;p&gt;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? ¿&lt;a href=&quot;https://blog.ploeh.dk/2026/03/23/will-you-go-to-prison-for-an-ai/&quot; target=&quot;_blank&quot;&gt;podríamos ir a prisión por un código generado por una IA&lt;/a&gt;? Spoiler: ándate con cuidado, por si acaso.&lt;/p&gt;
&lt;p&gt;José Manuel Alarcón nos cuenta esta semana &lt;a href=&quot;https://www.campusmvp.es/recursos/post/proyectos-greenfield-y-brownfield-en-software.aspx&quot; target=&quot;_blank&quot;&gt;qué son los proyectos greenfield y brownfield&lt;/a&gt;, términos usados últimamente con mucha frecuencia. Y de paso, también nos envía una llamada de atención sobre &lt;a href=&quot;https://www.campusmvp.es/recursos/post/github-copilot-como-evitar-que-use-tu-codigo-para-entrenar-sus-modelos.aspx&quot; target=&quot;_blank&quot;&gt;el cambio de política de datos de GitHub&lt;/a&gt;, que les permitirá en poco tiempo utilizar nuestro código para entrenar a sus modelos de IA, y nos cuenta cómo evitarlo.&lt;/p&gt;
&lt;p&gt;Daniel Rosenwasser ha &lt;a href=&quot;https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/&quot; target=&quot;_blank&quot;&gt;anunciado TypeScript 6.0&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;Nick Cosentino nos lleva a las bases explicando las &lt;a href=&quot; https://www.devleader.ca/2026/03/23/singleton-vs-static-class-in-c-key-differences-explained&quot; target=&quot;_blank&quot;&gt;diferencias entre el patrón Singleton y las clases estáticas en C#&lt;/a&gt; y cuándo deberíamos usarlas.&lt;/p&gt;
&lt;p&gt;Y la frikada de la semana la encontramos en el blog de Chema Alonso, que nos cuenta cómo es posible &lt;a href=&quot;https://www.elladodelmal.com/2026/03/doom-over-dns-o-como-guardar-descarga-y.html&quot; target=&quot;_blank&quot;&gt;guardar, descargar y ejecutar el juego Doom desde el DNS de Cloudflare&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;El resto de enlaces a contenidos que no puedes perderte, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/02/forzar-casts-imposibles-con-c.html&quot;&gt;Forzar casts imposibles con C#&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/05/constructores-con-parametros-en.html&quot;&gt;Constructores con parámetros en entidades EF Core&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/03/22/feature-flags-en-net-controla-tu-codigo-sin-hacer-deploy/&quot;&gt;Feature Flags en .NET: Controla tu Código Sin Hacer Deploy&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/03/23/singleton-vs-static-class-in-c-key-differences-explained&quot;&gt;Singleton vs Static Class in C#: Key Differences Explained&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dirkstrauss.com/solid-principles-in-csharp/&quot;&gt;SOLID Principles in C#: Beginner Guide with .NET Examples&lt;/a&gt;&lt;br /&gt;
Dirk Strauss&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/split-dotnet-test-projects-into-shards-with-meziantou-shardedtest.htm&quot;&gt;Speed Up .NET CI with Test Sharding&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.code4it.dev/csharptips/json-serialize-deserialize-dates/&quot;&gt;C# Tip: How to JSON Serialize and Deserialize values as DateTime, DateTimeOffset, DateOnly and TimeOnly&lt;/a&gt;&lt;br /&gt;
Davide Bellone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tabsoverspaces.com/233966-introducing-ntptick-a-lightweight-ntp-client-for-dotnet&quot;&gt;Introducing NtpTick: A lightweight NTP client for .NET&lt;/a&gt;&lt;br /&gt;
Jiří Činčura&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duendesoftware.com/blog/20260324-improving-dotnet-security-code-with-csharp-14-property-extensions&quot;&gt;Improving .NET Security Code with C# 14 Property Extensions&lt;/a&gt;&lt;br /&gt;
Wesley Cabus&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/excel-ai-translator-csharp-openai&quot;&gt;Build an AI-Powered Excel Translator in C# Using OpenAI and XlsIO&lt;/a&gt;&lt;br /&gt;
Mohan Chandran&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/03/compile-time-options-validation-with.html&quot;&gt;Compile-Time options validation with the OptionsValidator source generator&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/03/generating-structured-code-using-azure.html&quot;&gt;Generating Structured Code Using Azure, OpenAI and .NET&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/03/08/versionamiento-de-apis-conceptos-estrategias-y-trade-offs/&quot;&gt;Versionamiento de APIs: conceptos, estrategias y trade-offs&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://bravedeveloper.com/2026/03/15/versionamiento-de-apis-en-net-guia-practica-de-implementacion/&quot;&gt;Versionamiento de APIs en .NET: guía práctica de implementación&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/designing-business-rules-that-dont-leak-into-controllers/&quot;&gt;Designing business rules that don&#39;t leak into controllers&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/privacy-health-checks-data-access-patterns/&quot;&gt;Privacy Health Checks: Beyond Database Connectivity&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/aspnetcore-output-cache-how-to-speed-up-your-api-with-in-memory-cache-and-redis&quot;&gt;ASP.NET Core Output Cache: How to Speed Up Your API with In-Memory Cache and Redis&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/03/01/top-3-errores-comunes-al-hacer-apis-en-net-y-como-evitarlos/&quot;&gt;Top 3 Errores comunes al hacer APIs en .NET (y cómo evitarlos)&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milanjovanovic.tech/blog/scaling-signalr-with-redis-backplane&quot;&gt;Scaling SignalR With a Redis Backplane&lt;/a&gt;&lt;br /&gt;
Milan Jovanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/aspire/aspire-13-2-announcement/&quot;&gt;Announcing Aspire 13.2&lt;/a&gt;&lt;br /&gt;
Maddy Montaquila&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nodogmablog.bryanhogan.net/2026/03/a-simple-net-cli-web-server/&quot;&gt;A Simple .NET CLI Web Server&lt;/a&gt;&lt;br /&gt;
Bryan Hogan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/03/24/build-an-aspnet-core-ai-assistant-api-with-github-copilot-sdk-in-c&quot;&gt;Build an ASP.NET Core AI Assistant API with GitHub Copilot SDK in C#&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/whats-new-blazor-net-11-preview-releases-1-2&quot;&gt;What’s New for Blazor in .NET 11 Preview Releases 1 and 2&lt;/a&gt;&lt;br /&gt;
Jon Hilton&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://azure.github.io/AppService/2026/03/25/Aspire-GA.html&quot;&gt;Aspire on Azure App Service is now Generally Available&lt;/a&gt;&lt;br /&gt;
Tulika Chaudharie&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://preview.developer.vonage.com/en/blog/what-are-websockets-and-how-are-they-different-from-http&quot;&gt;What Are WebSockets and How Are They Different From HTTP?&lt;/a&gt;&lt;br /&gt;
Liz Acosta&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/continuous-deployment-security-gates/&quot;&gt;Stop Deploying Garbage to Production&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/11644/composite-index-in-sql-server/&quot;&gt;Composite Index SQL: How to Improve Query Speed&lt;/a&gt;&lt;br /&gt;
Deepak Vohra&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/azuredbsupport/cpu-percentage-vs-sql-instance-cpu-percent-the-portal%E2%80%99s-favorite-misunderstandin/4503765&quot;&gt;CPU percentage vs SQL instance CPU percent: The Portal’s Favorite Misunderstanding&lt;/a&gt;&lt;br /&gt;
Shaurya Singh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-work-with-dapper-in-net/&quot;&gt;How to Work With Dapper in .Net&lt;/a&gt;&lt;br /&gt;
Grant Riordan&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/cuando-la-ia-intenta-arreglar-el-mismo-bug-diez-veces-diaz-martin-pgw0e/&quot;&gt;Cuando la IA intenta arreglar el mismo bug diez veces… el problema ya no es el bug&lt;/a&gt;&lt;br /&gt;
Alberto Díaz Martín&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/tips-y-buenas-pr%C3%A1cticas-usando-ia-juan-irigoyen-ap8oe/&quot;&gt;Tips y buenas prácticas usando IA&lt;/a&gt;&lt;br /&gt;
Juan Irigoyen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/ten-months-with-cca-in-dotnet-runtime/&quot;&gt;Ten Months with Copilot Coding Agent in dotnet/runtime&lt;/a&gt;&lt;br /&gt;
Ron Darziv&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ploeh.dk/2026/03/23/will-you-go-to-prison-for-an-ai/&quot;&gt;Will you go to prison for an AI?&lt;/a&gt;&lt;br /&gt;
Mark Seemann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elbruno.com/2026/03/27/stop-wasting-tokens-smart-tool-routing-for-llms-with-mcptoolrouter/&quot;&gt;Stop Wasting Tokens: Smart Tool Routing for LLMs with MCPToolRouter&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript / Design&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/&quot;&gt;Announcing TypeScript 6.0&lt;/a&gt;&lt;br /&gt;
Erkan Okman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/redux-vs-zustand-react-state-management&quot;&gt;Redux vs Zustand: Choosing the Right React State Manager&lt;/a&gt;&lt;br /&gt;
Manikanda Akash Munisamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/experimenting-with-scroll-driven-corner-shape-animations/&quot;&gt;Experimenting With Scroll-Driven corner-shape Animations&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/two-circles-one-arrow-and-anchor-positioning/&quot;&gt;Two Circles, One Arrow, and Anchor Positioning&lt;/a&gt;&lt;br /&gt;
Temani Afif&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/shadow-dom-focus-delegation-getting-delegatesfocus-right/&quot;&gt;Shadow DOM Focus Delegation: Getting&amp;nbsp;delegatesFocus&amp;nbsp;Right&lt;/a&gt;&lt;br /&gt;
Rob Levin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/03/testing-font-scaling-accessibility-figma-variables/&quot;&gt;Testing Font Scaling For Accessibility With Figma Variables&lt;/a&gt;&lt;br /&gt;
Ruben Ferreira Duarte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://debugmode.net/2026/03/26/contravariance-on-typescript-function-parameters/&quot;&gt;Contravariance on TypeScript Function&amp;nbsp;Parameters&lt;/a&gt;&lt;br /&gt;
Dhananjay Kumar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/github-copilot-como-evitar-que-use-tu-codigo-para-entrenar-sus-modelos.aspx&quot;&gt;¿Tu IA aprende de ti?: Cómo evitar que GitHub Copilot use tu código para entrenar a sus modelos&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/03/dependabot-te-dice-que-es-vulnerable-pero-es-explotable-de-verdad/&quot;&gt;Dependabot te dice que es vulnerable… ¿pero es explotable de verdad?&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/dotnet/2026/03/20/resharper-2026-1-release-candidate/&quot;&gt;ReSharper 2026.1 Release Candidate Released!&lt;/a&gt;&lt;br /&gt;
Sasha Ivanova&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/syncfusion-essential-studio-ui-edition-dev-essentials&quot;&gt;Essential Studio UI Edition Now Available For Dev Essentials Subscribers&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://www.syncfusion.com/blogs/post/syncfusion-essential-studio-enterprise-edition&quot;&gt;Essential Studio Enterprise Edition Now Available For Select Visual Studio Enterprise and Professional Subscribers&lt;/a&gt;&lt;br /&gt;
Meena Alagiah&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dirkstrauss.com/visual-studio-shortcuts/&quot;&gt;Visual Studio Shortcuts: Complete Guide to Coding Faster&lt;/a&gt;&lt;br /&gt;
Dirk Strauss&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://haacked.com/archive/2026/03/25/resolve-merge-conflicts/&quot;&gt;Resolve Merge Conflicts the Easy Way&lt;/a&gt;&lt;br /&gt;
Phil Haack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://textslashplain.com/2026/03/24/windows-choose-where-to-get-apps/&quot;&gt;Windows: Choose Where To Get&amp;nbsp;Apps&lt;/a&gt;&lt;br /&gt;
Eric Lawrence&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/proyectos-greenfield-y-brownfield-en-software.aspx&quot;&gt;¿Qué son los proyectos greenfield y brownfield en software (y por qué se oyen tanto, también en España)?&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/03/doom-over-dns-o-como-guardar-descarga-y.html&quot;&gt;Doom over DNS: O cómo guardar, descargar y ejecutar Doom desde el DNS (de Cloudflare)&lt;/a&gt;&lt;br /&gt;
Chema Alonso&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20260324-00/?p=112159&quot;&gt;Windows 95 defenses against installers that overwrite a file with an older version&lt;/a&gt;&lt;br /&gt;
Raymond Chen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devlead.se/posts/2026/2026-03-22-quarter-billion-nuget-downloads&quot;&gt;A quarter of a billion NuGet downloads&lt;/a&gt;&lt;br /&gt;
Mattias Karlsson&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/699572947616277491/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/699572947616277491' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/699572947616277491'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/699572947616277491'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/03/enlaces-interesantes-643.html' title='Enlaces interesantes 643'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjswXYBJ2wj0x55d5vp9hjgo65jA6J5yE6wbOOIM2GW6NevtVzF_djzmgT2ZXFTlKgyLY2XhYzAbhGJfz2M-6ahSZC3ylbOU9Njw4dI930iscW3PzQ6j9siPdcKOFoQbHVWK_OYl8gJv9tGwtfBLjBTeIpykYADqevrRp31jBur5g4bArGq7btVmg/s72-c/arrested.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-572769011502028625</id><published>2026-03-23T08:02:00.029+01:00</published><updated>2026-03-23T08:02:00.112+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 642</title><content type='html'>&lt;img alt=&quot;Doctor diseccionando un robot para conocer su anatomía&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJSOTvYPiln0iLA1qktKZKeD3JxR9-H1zXV_A1pXhaRkNO45iaqzEzL_ueUSnDqQ5jam5pZ9sWml_TfW-6z7ebQ4YimbnwZ8VM6Mx8Z9moRkZiXKzesjxBO46uZEzPQsYAadbLvOB3-Jzvh3GoyNtQwJmrHPaSRpOZaXhv2hEwGt1Xw8MwmFGxTw/s800/agent-anatomy.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;En primer lugar, Fernando Escolar nos explica detalladamente las&amp;nbsp;&lt;a href=&quot;https://www.developerro.com/2026/03/18/anatomia-agente-ia/&quot; target=&quot;_blank&quot;&gt;distintas piezas que componen un agente de IA&lt;/a&gt;, y cómo se relacionan entre sí.&lt;/p&gt;&lt;div&gt;Braulio Díez, &lt;a href=&quot;https://www.youtube.com/watch?v=Y6ZuGI1jgfs&quot; target=&quot;_blank&quot;&gt;citando a Sabina&lt;/a&gt;, reflexiona sobre &lt;a href=&quot;https://elbraulio.net/posts/subvencioname-un-pico-de-ia&quot; target=&quot;_blank&quot;&gt;el modelo de negocio de los proveedores de IA&lt;/a&gt; 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.&lt;/div&gt;
&lt;p&gt;Miguel Durán comparte un proyecto personal que ha creado para &lt;a href=&quot;https://www.canirun.ai/&quot; target=&quot;_blank&quot;&gt;comprobar qué modelos de IA podemos ejecutar en nuestra máquina&lt;/a&gt; local, muy útil para usar IA generativa sin pasar por caja y sin enviar datos hacia fuera.&lt;/p&gt;
&lt;p&gt;Por último, Addy Osmani nos habla de la &lt;a href=&quot;https://medium.com/@addyosmani/comprehension-debt-the-hidden-cost-of-ai-generated-code-285a25dac57e&quot; target=&quot;_blank&quot;&gt;deuda de comprensión que se genera al usar código generado por IA&lt;/a&gt;, y cómo esto puede afectar a los desarrolladores a largo plazo.&lt;/p&gt;
&lt;p&gt;El resto de enlaces, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/02/aprovecha-al-maximo-los-archivos-http.html&quot;&gt;Aprovecha al máximo los archivos .http en Visual Studio usando variables dinámicas&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/05/backing-fields-en-entity-framework-core.html&quot;&gt;Backing fields en Entity Framework Core&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/c-sharp-class-types-explained-examples&quot;&gt;C# class types explained with examples&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/adospace/CoreSync&quot;&gt;CoreSync: a .NET library that provides data synchronization between databases&lt;/a&gt;&lt;br /&gt;
Adolfo Marinucci&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/9be39ff1-b7fc-4814-abd4-5ea41a07f8d7&quot;&gt;records ToString and inheritence&lt;/a&gt;&lt;br /&gt;
Steven Giesel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/implementing-rfc-compliant-http-caching-for-httpclient-in-dotnet.htm&quot;&gt;Implementing RFC-compliant HTTP caching for HttpClient in .NET&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dirkstrauss.com/csharp-14-new-features-dotnet-10/&quot;&gt;C# 14 New Features: A Developer Guide for .NET 10&lt;/a&gt;&lt;br /&gt;
Dirk Strauss&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://minidump.net/writing-a-net-gc-in-c-part-9/&quot;&gt;Writing a .NET Garbage Collector in C#  - Part&amp;nbsp;9: Frozen segments and new allocation strategy&lt;/a&gt;&lt;br /&gt;
Kevin Gosse&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elbruno.com/2026/03/19/%f0%9f%a4%96-local-llm-chat-completions-in-net-just-c/&quot;&gt;Local LLM Chat Completions in .NET — Just C#&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/03/implementing-strategy-pattern-with-net.html&quot;&gt;Implementing the Strategy Pattern with .NET Dependency Injection&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/code-blocks-in-blazor-rich-text-editor&quot;&gt;Code Blocks in Blazor Rich Text Editor: Setup and Best Practices&lt;/a&gt;&lt;br /&gt;
Saravanan G.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/blazor-basics-implementing-theme-switch-blazor-dark-mode&quot;&gt;Blazor Basics: Implementing a Theme Switch in Blazor (Dark Mode)&lt;/a&gt;&lt;br /&gt;
Claudio Bernasconi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/health-checks-operational-monitoring/&quot;&gt;Green Dashboard, Dead Application&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/backup-recovery-azure-sql-database/&quot;&gt;Your Azure SQL Backups Won&#39;t Save You (Here&#39;s Why)&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.shankuehn.io/post/lost-your-ssh-key-to-an-azure-vm-don-t-panic-here-s-the-fix&quot;&gt;Lost Your SSH Key to an Azure VM? Don’t Panic. Here’s the Fix.&lt;/a&gt;&lt;br /&gt;
Shannon B. Kuehn&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thomasmaurer.ch/2026/03/how-to-evaluate-test-and-demo-azure-local/&quot;&gt;How to Evaluate, Test, and Demo Azure Local&lt;/a&gt;&lt;br /&gt;
Thomas Maurer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://navegapolis.com/website/scrum-en-la-era-de-la-ia-la-sintesis-que-viene/&quot;&gt;Scrum en la era de la IA: la síntesis que viene&lt;/a&gt;&lt;br /&gt;
Juan Palacio Bañeres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/03/14/decorator-design-pattern-in-c-complete-guide-with-examples&quot;&gt;Decorator Design Pattern in C#: Complete Guide with Examples&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.manager.dev/p/the-unwritten-laws-of-software-engineering&quot;&gt;The unwritten laws of software engineering&lt;/a&gt;&lt;br /&gt;
Anton Zaides&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bigmachine.io/articles/ai/look-bro-i-know-how-to-write-good-code/&quot;&gt;Look Bro, I Know How to Write Good Code&lt;/a&gt;&lt;br /&gt;
Rob Conery&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/03/how-to-seed-data-to-ef-core.html&quot;&gt;How to Seed Data to EF Core&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.c-sharpcorner.com/article/dapper-in-depth-with-asp-net-core-10/&quot;&gt;Dapper in Depth with ASP.NET Core 10&lt;/a&gt;&lt;br /&gt;
Soumyadip Majumder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milanjovanovic.tech/blog/optimizing-bulk-database-updates-in-dotnet&quot;&gt;Optimizing Bulk Database Updates in .NET: From Naive to Lightning-Fast&lt;/a&gt;&lt;br /&gt;
Milan Jovanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/when-not-to-use-the-repository-pattern-in-ef-core/&quot;&gt;When NOT to use the repository pattern in EF Core&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/entity-framework-extensions-options-explained&quot;&gt;Entity Framework Extensions Options Explained: Everything You Can Customize&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/11638/make-deployable-sql-scripts-idempotent/&quot;&gt;Deploy SQL Scripts Effectively in Production&lt;/a&gt;&lt;br /&gt;
Jared Westover&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/sqlserver/microsoft-data-sqlclient-7-0-is-here-a-leaner-more-modular-driver-for-sql-server/4503173&quot;&gt;Microsoft.Data.SqlClient 7.0 Is Here: A Leaner, More Modular Driver for SQL Server&lt;/a&gt;&lt;br /&gt;
David Levy&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://elbraulio.net/posts/subvencioname-un-pico-de-ia&quot;&gt;Subvencioname un pico de IA&lt;/a&gt;&lt;br /&gt;
Braulio Díez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.developerro.com/2026/03/18/anatomia-agente-ia/&quot;&gt;Anatomía de un agente de IA&lt;/a&gt;&lt;br /&gt;
Fernando Escolar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.canirun.ai/&quot;&gt;CanIRun.ai — Can your machine run AI models?&lt;/a&gt;&lt;br /&gt;
Miguel Durán&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/introducing-openai%E2%80%99s-gpt-5-4-mini-and-gpt-5-4-nano-for-low-latency-ai/4500569&quot;&gt;Introducing OpenAI’s GPT-5.4 mini and GPT-5.4 nano for low-latency AI&lt;/a&gt;&lt;br /&gt;
OpenAI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/agent-framework/whats-new-in-agent-skills-code-skills-script-execution-and-approval-for-python/&quot;&gt;What&#39;s New in Agent Skills: Code Skills, Script Execution, and Approval for Python&lt;/a&gt;&lt;br /&gt;
Sergey Menshykh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/03/18/random-forest-regression-using-csharp.aspx&quot;&gt;Random Forest Regression Using C#&lt;/a&gt;&lt;br /&gt;
James McCaffrey&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ardalis.com/ai-benefits---but-at-what-cost/&quot;&gt;AI Benefits - But at What Cost?&lt;/a&gt;&lt;br /&gt;
Steve Smith&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://costlyinfra.com/blog/how-large-language-models-are-built-and-work&quot;&gt;How Large Language Models Are Built and Work — Complete Technical Guide&lt;/a&gt;&lt;br /&gt;
CostlyInfra&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://medium.com/@addyosmani/comprehension-debt-the-hidden-cost-of-ai-generated-code-285a25dac57e&quot;&gt;Comprehension Debt — the hidden cost of AI generated code&lt;/a&gt;&lt;br /&gt;Addy Osmani&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript / Frontend&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.enmilocalfunciona.io/angular-hacia-la-programacion-funcional/&quot;&gt;Angular 16 y programación funcional para código limpio&lt;/a&gt;&lt;br /&gt;
David Filipe Lopes Domingues&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://alvaromontoro.com/blog/68092/native-random-values-in-css&quot;&gt;Native Random Values in CSS&lt;/a&gt;&lt;br /&gt;
Alvaro Montoro&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/4-reasons-that-make-tailwind-great-for-building-layouts/&quot;&gt;4 Reasons That Make Tailwind Great for Building Layouts&lt;/a&gt;&lt;br /&gt;
Zell Liew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://piccalil.li/blog/building-dynamic-toggletips-using-anchored-container-queries/&quot;&gt;Building dynamic toggletips using anchored container queries&lt;/a&gt;&lt;br /&gt;
Daniel Schwartz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/flexbox-masonry-layout-explained-with-math/&quot;&gt;Flexbox Masonry Layout (Explained with Math)&lt;/a&gt;&lt;br /&gt;
Ibrahim Bendebka&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://basewatch.dev/&quot;&gt;BaseWatch — Track CSS &amp;amp; Browser Feature Support, Get Baseline Alerts&lt;/a&gt;&lt;br /&gt;
Filippo Tinnirello&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/javascript-for-everyone-destructuring/&quot;&gt;JavaScript for Everyone: Destructuring&lt;/a&gt;&lt;br /&gt;
Mat Marquis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/image-gallery-with-popovers-and-aim-anchor-interpolated-morph/&quot;&gt;Image Gallery with Popovers and AIM (Anchor-Interpolated Morph)&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/03/modal-separate-page-ux-decision-tree/&quot;&gt;Modal vs. Separate Page: UX Decision Tree&lt;/a&gt;&lt;br /&gt;
Vitaly Friedman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://timdeschryver.dev/blog/introducing-angular-testing-library-zoneless&quot;&gt;Introducing Angular Testing Library Zoneless&lt;/a&gt;&lt;br /&gt;
Tim Deschryver&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/text-scaling-support-in-chrome-canary/&quot;&gt;Text scaling support in Chrome Canary&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/03/dropdowns-scrollable-containers-why-break-how-fix/&quot;&gt;Dropdowns Inside Scrollable Containers: Why They Break And How To Fix Them Properly&lt;/a&gt;&lt;br /&gt;
Godstime Aburu&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/awesome-github-copilot-just-got-a-website-and-a-learning-hub-and-plugins&quot;&gt;Awesome GitHub Copilot just got a website, and a learning hub, and plugins!&lt;/a&gt;&lt;br /&gt;
Matt Soucoup&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/blogs/2026/03/13/how-VS-Code-Builds-with-AI&quot;&gt;How VS Code Builds with AI&lt;/a&gt;&lt;br /&gt;
Pierce Boggan&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://avaloniaui.net/blog/maui-avalonia-preview-1&quot;&gt;MAUI Avalonia Preview 1&lt;/a&gt;&lt;br /&gt;
Tim Miller&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/pin-clustering-in-dotnet-maui-maps/&quot;&gt;Pin Clustering in .NET MAUI Maps&lt;/a&gt;&lt;br /&gt;
David Ortinau&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/accessibility-net-maui-what-how-to-implement&quot;&gt;How to Implement Accessibility in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rajapet.com/2026/03/18/veryactivedebugprofile/&quot;&gt;When Visual Studio Forgets Your Phone: Building an Automated Solution&lt;/a&gt;&lt;br /&gt;
Chris Miller&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ostebaronen.dk/2026/03/logging-in-maui-apps.html&quot;&gt;Logging in .NET MAUI Apps&lt;/a&gt;&lt;br /&gt;
Tomasz Cielecki&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/accelerating-dotnet-maui-with-ai-agents/&quot;&gt;Accelerating .NET MAUI Development with AI Agents&lt;/a&gt;&lt;br /&gt;
Agus Riyadi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/extract-data-from-pdf-dotnet-maui-ios&quot;&gt;How to Extract Data from PDFs in .NET MAUI iOS Apps Using C#&lt;/a&gt;&lt;br /&gt;
Sumathi Uthayakumar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/blazor-hybrid-pdf-viewer-winforms-wpf-maui&quot;&gt;Build Once, Run Everywhere: Blazor Hybrid PDF Viewer for WinForms, WPF, and .NET MAUI&lt;/a&gt;&lt;br /&gt;
Parthipan R.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/java-26-menos-es-mas-guia-completa-de-novedades-para-desarrolladores.aspx&quot;&gt;Java 26: menos es más — Guía completa de novedades para desarrolladores&lt;/a&gt;&lt;br /&gt;
CampusMVP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/572769011502028625/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/572769011502028625' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/572769011502028625'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/572769011502028625'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/03/enlaces-interesantes-642.html' title='Enlaces interesantes 642'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJSOTvYPiln0iLA1qktKZKeD3JxR9-H1zXV_A1pXhaRkNO45iaqzEzL_ueUSnDqQ5jam5pZ9sWml_TfW-6z7ebQ4YimbnwZ8VM6Mx8Z9moRkZiXKzesjxBO46uZEzPQsYAadbLvOB3-Jzvh3GoyNtQwJmrHPaSRpOZaXhv2hEwGt1Xw8MwmFGxTw/s72-c/agent-anatomy.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-7618447111229845268</id><published>2026-03-17T08:02:00.000+01:00</published><updated>2026-03-17T08:02:00.118+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="trucos"/><title type='text'>¡Ojo a los parámetros IEnumerable&amp;lt;T&amp;gt;!</title><content type='html'>&lt;img alt=&quot;Desarrollador tomando muchas precauciones al trabajar con un método que recibe un parámetro IEnumerable&amp;lt;int&amp;gt;&quot; class=&quot;main-post-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJRZ3O-Y9cRmpojpLFxFWZpfGynNAF57QZgQMISplKPOVMO0d-8pelxjz4PaL62CP8DhkvtQiM9hVYihK5NsFIt-zDUdjYch2EKXsK2JrYUYqZfUzcE3TyhCzhpSXtkgrIAJXeYMb8XXadsxQpuZWSrwM5URzJgD4oWtxLkf3XWdhvz9SQ5g8fgg/s800/ienumerable.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;En .NET, es bastante habitual que nuestros métodos o funciones reciban objetos de tipo &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;Por ejemplo, es muy frecuente realizar múltiples enumeraciones sobre la misma instancia de &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;, 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;En este artículo exploraremos distintos escenarios que pueden darse y cómo podemos evitarlos.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;¿Qué es una enumeración múltiple?&lt;/h2&gt;
&lt;p&gt;Una enumeración múltiple ocurre cuando &lt;strong&gt;un método o función recorre una secuencia de datos más de una vez&lt;/strong&gt;. Esto puede suceder de forma explícita, por ejemplo, si tenemos dos bucles &lt;code&gt;foreach&lt;/code&gt; que iteran sobre la misma secuencia, o de forma implícita, como cuando llamamos a varios métodos como &lt;code&gt;Count()&lt;/code&gt;, &lt;code&gt;ToList()&lt;/code&gt;, &lt;code&gt;Last()&lt;/code&gt;, etc. sobre la misma colección.&lt;/p&gt;
&lt;p&gt;Cuando se trata de una colección en memoria, como una lista o un array, no suele haber problema al realizar enumeraciones múltiples, ya que estas estructuras permiten recorrerlas tantas veces como sea necesario sin incurrir en un coste significativo.&lt;/p&gt;
&lt;p&gt;Sin embargo, si la secuencia es generada dinámicamente, como una consulta LINQ a una base de datos o aquellas producidas por un iterador, cada operación de enumeración puede implicar un &lt;strong&gt;coste considerable, tanto en términos de rendimiento como de recursos&lt;/strong&gt;, lo que hace que la enumeración múltiple pueda ser problemática.&lt;/p&gt;
&lt;p&gt;Pero además, el contenido de la secuencia puede variar entre distintas enumeraciones, lo que puede llevar a resultados inconsistentes o errores inesperados. Es lo que llamamos &quot;secuencias no replicables&quot;.&lt;/p&gt;
&lt;h2&gt;¿Qué es una secuencia no replicable?&lt;/h2&gt;
&lt;p&gt;Una secuencia no replicable es aquella que &lt;strong&gt;no puede ser recorrida múltiples veces de manera segura&lt;/strong&gt;. Un ejemplo típico es una consulta LINQ que se ejecuta contra una base de datos, datos procedentes de un &lt;em&gt;stream&lt;/em&gt; o una secuencia generada por un iterador que produce valores bajo demanda. En ninguno de esos casos podemos garantizar que la secuencia se mantenga igual entre diferentes enumeraciones, o incluso que esté disponible para una segunda enumeración (por ejemplo, los datos podrían haber cambiado en la base de datos).&lt;/p&gt;
&lt;p&gt;Por ejemplo, observad una función como la siguiente, que recibe un objeto &lt;code&gt;IEnumerable&amp;lt;int&amp;gt;&lt;/code&gt;, muestra el número de elementos recibidos e itera dos veces sobre ellos para procesarlos:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;static void Process(IEnumerable&amp;lt;int&amp;gt; numbers)
{
    Console.WriteLine($&quot;Processing {numbers.Count()} numbers&quot;);
    Console.WriteLine(&quot;First pass&quot;);
    foreach (var number in numbers)
    {
        Console.WriteLine($&quot;  Doing something with {number}&quot;);
        DoSomething(number);
    }

    Console.WriteLine(&quot;Second pass&quot;);
    foreach (var number in numbers)
    {
        Console.WriteLine($&quot;  Doing another thing with {number}&quot;);
        DoAnotherThing(number);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si el objeto enviado a la función &lt;code&gt;Process()&lt;/code&gt; se encontraba ya en memoria, por ejemplo en forma de una lista (&lt;code&gt;List&amp;lt;int&amp;gt;&lt;/code&gt;) o array (&lt;code&gt;int[]&lt;/code&gt;), el código anterior funcionará sin problemas. La ejecución será consistente y predecible, los elementos se contarán de forma correcta y ambos bucles &lt;code&gt;foreach&lt;/code&gt; los recorrerán, por lo que la salida en consola será idéntica en las dos vueltas.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;Process([1, 2, 3]);
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;Processing 3 numbers 
First pass
  Doing something with 1
  Doing something with 2
  Doing something with 3
Second pass
  Doing another thing with 1
  Doing another thing with 2
  Doing another thing with 3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sin embargo, imaginad que lo que enviamos es una consulta LINQ que se ejecuta contra una base de datos. En ese caso, la llamada a &lt;code&gt;Count()&lt;/code&gt; ejecutará la consulta para obtener el número de elementos. Tras ello, el primer &lt;code&gt;foreach&lt;/code&gt; ejecutará de nuevo la consulta y obtendrá los resultados, y el segundo &lt;code&gt;foreach&lt;/code&gt; volverá a ejecutarla. Esto, &lt;b&gt;además de suponer potencialmente un problema de rendimiento, puede devolver en cada caso un conjunto diferente de resultados&lt;/b&gt; o incluso lanzar una excepción si la conexión a la base de datos ya no está disponible.&lt;/p&gt;
&lt;p&gt;Lo mismo puede ocurrir si la secuencia es generada por un iterador que produce valores bajo demanda, como en el siguiente ejemplo. Como podéis ver, se trata de una función generadora que devuelve entre 3 y 7 números aleatorios en el rango 1-9 cada vez que se itera sobre ella:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;static IEnumerable&amp;lt;int&amp;gt; GenerateNumbers()
{
    for (int i = 0; i &amp;lt; Random.Shared.Next(3, 8); i++)
    {
        yield return Random.Shared.Next(1, 10);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En este caso, cada llamada a &lt;code&gt;GenerateNumbers()&lt;/code&gt; produce una secuencia diferente de números. Por lo tanto, si pasamos esta función generadora a nuestro método &lt;code&gt;Process()&lt;/code&gt;, veremos que cada vez que enumeramos la secuencia obtenemos resultados distintos, tanto en el número de elementos como en los propios valores:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;Process(GenerateNumbers());
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;Processing 2 numbers
First pass
  Doing something with 9
  Doing something with 8
  Doing something with 2
  Doing something with 3
  Doing something with 4
  Doing something with 9
  Doing something with 8
Second pass
  Doing another thing with 5
  Doing another thing with 3
  Doing another thing with 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Observad que, en este caso, cada enumeración de la secuencia ha producido un conjunto diferente de números, lo que puede llevar a comportamientos inesperados en nuestro código, como el que vemos en la salida anterior.&lt;/p&gt;
&lt;p&gt;Por tanto, cuando escribimos un método o función que acepta parámetros de tipo &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;, debemos ser conscientes de que &lt;strong&gt;estamos abriendo la puerta a que un consumidor realice invocaciones enviando secuencias no replicables&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;¿Qué son las secuencias infinitas?&lt;/h2&gt;
&lt;p&gt;Otra situación problemática es cuando la secuencia recibida es infinita. Esto puede ocurrir, por ejemplo, si la secuencia es generada por un iterador que produce valores de forma indefinida, como la siguiente:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;static IEnumerable&amp;lt;int&amp;gt; InfiniteNumbers()
{
    int i = 0;
    while (true)
    {
        yield return (i++) % 10;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta secuencia generará números indefinidamente, repitiendo los dígitos del 0 al 9, por lo que &lt;b&gt;cualquier intento de recorrerla por completo derivará en un bucle infinito&lt;/b&gt;. De hecho, si pasamos esta secuencia a nuestro método &lt;code&gt;Process()&lt;/code&gt;, la llamada a &lt;code&gt;Count()&lt;/code&gt; intentará contar todos los elementos y dará lugar a un bloqueo de la aplicación.&lt;/p&gt;
&lt;h2&gt;¿Qué podemos hacer para evitar estos problemas?&lt;/h2&gt;
&lt;p&gt;Afortunadamente, hay soluciones sencillas para evitar los comportamientos inesperados cuando trabajamos con parámetros de tipo &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La opción más recomendable sería intentar &lt;strong&gt;refactorizar el método para que no sea necesario realizar más de una enumeración de la secuencia recibida&lt;/strong&gt;. En el caso anterior es complicado porque el &lt;code&gt;Count()&lt;/code&gt; inicial ya implica una enumeración, pero quizás funcionalmente podría ser prescindible o sustituible por otro enfoque similar:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;static void Process(IEnumerable&amp;lt;int&amp;gt; numbers)
{
    var count = 0;
    foreach (var number in numbers)
    {
        count++;
        Console.WriteLine($&quot;  Doing something with {number}&quot;);
        DoSomething(number);
        Console.WriteLine($&quot;  Doing another thing with {number}&quot;);
        DoAnotherThing(number);
    }
    Console.WriteLine($&quot;{count} numbers processed&quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sin duda esta es la mejor opción porque &lt;strong&gt;evita todos los problemas de raíz, sin sacrificar rendimiento ni la flexibilidad de recibir un objeto de tipo &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/strong&gt;. Además, permitiría detener la enumeración en cualquier momento, cuando ya no sea necesario procesar más elementos, sin necesidad de recorrer la secuencia completa.&lt;/p&gt;
&lt;p&gt;Sin embargo, no siempre será posible.&lt;/p&gt;
&lt;p&gt;Otra opción es bajar el nivel de abstracción y &lt;b&gt;cambiar el tipo de datos del parámetro&lt;/b&gt;, para asegurar que solo se puedan enviar colecciones que ya estén materializadas en memoria y que, por tanto, sean replicables. Por ejemplo, podríamos cambiar la firma del método para recibir objetos &lt;code&gt;IReadOnlyCollection&amp;lt;T&amp;gt;&lt;/code&gt; o &lt;code&gt;IReadOnlyList&amp;lt;T&amp;gt;&lt;/code&gt;, lo que garantiza que la colección es fija y puede ser recorrida múltiples veces sin problemas.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La diferencia principal entre &lt;code&gt;IReadOnlyCollection&amp;lt;T&amp;gt;&lt;/code&gt; e &lt;code&gt;IReadOnlyList&amp;lt;T&amp;gt;&lt;/code&gt; es que la primera solo garantiza que la colección tiene un tamaño definido y puede ser contada, mientras que la segunda también permite acceder a los elementos por índice. En este caso, cualquiera de las dos opciones sería válida.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;static void Process(IReadOnlyCollection&amp;lt;int&amp;gt; numbers)
{
    ... // El resto del código permanece igual
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A veces, esto &lt;strong&gt;requerirá que los consumidores del método tengan que adaptar su código para enviar colecciones materializadas&lt;/strong&gt;, pero a cambio evitamos cualquier riesgo de múltiples enumeraciones inesperadas. También estaremos protegiéndonos contra secuencias infinitas, ya que ningún consumidor podrá enviar una secuencia que no tenga un tamaño definido.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;// Código del consumidor
var items = GenerateNumbers().ToList(); // Materializamos la secuencia
Process(items);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si ninguna de las opciones anteriores es viable, siempre podemos optar por &lt;strong&gt;materializar la secuencia recibida al inicio del método&lt;/strong&gt;, almacenándola en una lista o &lt;em&gt;array&lt;/em&gt;. De esta forma, nos aseguramos de que cualquier enumeración posterior se realice sobre una colección fija y replicable.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;static void Process(IEnumerable&amp;lt;int&amp;gt; numbers)
{
    var materializedNumbers = numbers.ToList(); // Materializamos la secuencia
    ... // El resto del código permanece igual, pero usando materializedNumbers
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El inconveniente de esto es que, si la secuencia original es muy grande, podríamos estar consumiendo una &lt;strong&gt;cantidad significativa de memoria&lt;/strong&gt;. Tampoco tendremos protección contra secuencias infinitas, ya que la llamada a &lt;code&gt;ToList()&lt;/code&gt; intentará recorrer toda la secuencia para materializarla.&lt;/p&gt;
&lt;h2&gt;Conclusión&lt;/h2&gt;
&lt;p&gt;En resumen, cuando trabajamos con parámetros de tipo &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;, debemos ser conscientes de los posibles problemas que pueden surgir debido a múltiples enumeraciones o secuencias infinitas. Adoptar buenas prácticas y elegir la estrategia adecuada según el contexto nos ayudará a evitar errores y a escribir código más robusto y predecible.&lt;/p&gt;


Publicado en: &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;www.variablenotfound.com&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/7618447111229845268/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/7618447111229845268' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7618447111229845268'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7618447111229845268'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/03/ojo-los-parametros-ienumerable.html' title='¡Ojo a los parámetros IEnumerable&amp;lt;T&amp;gt;!'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJRZ3O-Y9cRmpojpLFxFWZpfGynNAF57QZgQMISplKPOVMO0d-8pelxjz4PaL62CP8DhkvtQiM9hVYihK5NsFIt-zDUdjYch2EKXsK2JrYUYqZfUzcE3TyhCzhpSXtkgrIAJXeYMb8XXadsxQpuZWSrwM5URzJgD4oWtxLkf3XWdhvz9SQ5g8fgg/s72-c/ienumerable.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-7964099262990766247</id><published>2026-03-16T08:02:00.030+01:00</published><updated>2026-03-16T08:02:00.116+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 641</title><content type='html'>&lt;img alt=&quot;Semáforo en avenidas muy concurridas&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIotZwm2Fx6-ec93jArYo_Zz-cKyi-rdk_civ2knS9mI3PBHs5JRD2zg_mJDskE9j7ySWe0dAgP3eW_e4BL1-NrJHL3s6DsteLN6qA-HJn_33NnMqNRRfbqzhvuBL7ZIjQYVM5YuITro22-tsqkNkAoRmNhqaTb7b2ZuBPSWjE0KHj38peMRz08w/s800/sync.jpg&quot; width=&quot;100%&quot; /&gt;


&lt;p&gt;Esta semana me he topado con bastantes contenidos interesantes 😊&lt;/p&gt;
&lt;p&gt;Por citar algunos, ya tenemos aquí la &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-11-preview-2/&quot; target=&quot;_blank&quot;&gt;segunda preview de .NET 11&lt;/a&gt;, con novedades interesantes como el &lt;em&gt;runtime&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;Bipin Joshi nos habla de las &lt;a href=&quot;https://www.binaryintellect.net/articles/bb02912b-6f50-4b6a-a91d-38a559064f42.aspx&quot; target=&quot;_blank&quot;&gt;Minimal APIs una vez pasó el hype inicial&lt;/a&gt;: qué nos aportan, las ventajas e inconvenientes de su ausencia de código ceremonial y sus escenarios de uso ideales.&lt;/p&gt;
&lt;p&gt;Gurveer Arora continúa exprimiendo el potencial de HTML y CSS con su serie NoJS, y en esta ocasión nos trae un &lt;a href=&quot;https://blog.scottlogic.com/2026/03/09/noJS-3-flappy-bird.html&quot; target=&quot;_blank&quot;&gt;clon de Flappy Bird hecho sin una sola línea de JavaScript&lt;/a&gt;. Porque poderse, se puede.&lt;/p&gt;
&lt;p&gt;También me ha parecido interesante la lectura de &lt;a href=&quot;https://component-model.bytecodealliance.org/&quot; target=&quot;_blank&quot;&gt;The WebAssembly Component Model&lt;/a&gt;, una arquitectura para la construcción de librerías y aplicaciones interoperables utilizando WebAssembly.&lt;/p&gt;
&lt;p&gt;Y Ricardo Peres continúa explorando las &lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/03/net-synchronisation-apis-part-2-out-of.html&quot; target=&quot;_blank&quot;&gt;APIs de sincronización en .NET&lt;/a&gt;, y en esta ocasión nos habla de las herramientas que tenemos a nuestra disposición para sincronizar distintos procesos, como &lt;code&gt;Mutex&lt;/code&gt;, &lt;code&gt;Semaphore&lt;/code&gt; y &lt;code&gt;EventWaitHandle&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;El resto de enlaces, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/02/cuidado-con-las-excepciones-no.html&quot;&gt;¡Cuidado con las excepciones no controladas de servicios en segundo plano (BackgroundService) en ASP.NET Core!&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/04/antipatrones-de-asincronia-en-c.html&quot;&gt;Antipatrones de asincronía en C#&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-11-preview-2/&quot;&gt;.NET 11 Preview 2 is now available!&lt;/a&gt;&lt;br /&gt;
.NET Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/splitting-the-netescapades-enumgenerators-packages-the-road-to-a-stable-release/&quot;&gt;Splitting the NetEscapades.EnumGenerators packages: the road to a stable release&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/5a750fbf-cbf1-44dc-b864-70bedd8a29a9&quot;&gt;FullJoin in .NET 11&lt;/a&gt;&lt;br /&gt;
Steven Giesel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/03/net-synchronisation-apis-part-2-out-of.html&quot;&gt;.NET Synchronisation APIs - Part 2 - Out-of-Process Synchronisation&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/minimal-apis-fix-missing-openapi-response-documentation&quot;&gt;Minimal APIs: Fix missing OpenAPI response documentation&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/create-fillable-pdf-forms-in-dotnet-pdf-library&quot;&gt;How to Create Fillable PDF Forms in C# for Server-Side .NET Apps&lt;/a&gt;&lt;br /&gt;
Arun Kumar Chandrakesan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/development/dotnet-development/how-to-use-refresh-tokens-in-asp-net-core-a-complete-guide/&quot;&gt;How to use refresh tokens in ASP.NET Core&lt;/a&gt;&lt;br /&gt;
Joydip Kanjilal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://auth0.com/blog/secure-csharp-mcp-server-with-auth0/&quot;&gt;Secure a C# MCP Server with Auth0&lt;/a&gt;&lt;br /&gt;
Andrea Chiarelli&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.binaryintellect.net/articles/bb02912b-6f50-4b6a-a91d-38a559064f42.aspx&quot;&gt;Minimal APIs After the Hype: What Remains When Boilerplate Is Gone?&lt;/a&gt;&lt;br /&gt;
Bipin Joshi&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://damienbod.com/2026/03/09/invite-guest-users-in-a-entra-id-multi-tenant-setup/&quot;&gt;Invite Guest users in a Entra ID Multi-tenant&amp;nbsp;setup&lt;/a&gt;&lt;br /&gt;
Damien Bowden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://markheath.net/post/2026/2/9/azure-blob-storage-etag-concurrency&quot;&gt;Protecting Against Concurrent Updates in Azure Blob Storage with ETags&lt;/a&gt;&lt;br /&gt;
Mark Heath&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/querying-and-performing-transactions-across-multiple-database-schemas-in-a-modular-monolith&quot;&gt;Querying and Performing Transactions Across Multiple Database Schemas in a Modular Monolith&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/data-retention-azure-storage-lifecycle/&quot;&gt;Nobody Runs Your Cleanup Script (And Regulators Know It)&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://irina.codes/async-does-not-mean-scalable/&quot;&gt;Async Does Not Mean Scalable&lt;/a&gt;&lt;br /&gt;
Irina Scurtu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/error-handling-security-information-disclosure/&quot;&gt;Your Stack Traces Are Love Letters to Attackers&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milanjovanovic.tech/blog/5-architecture-tests-you-should-add-to-your-dotnet-projects&quot;&gt;5 Architecture Tests You Should Add to Your .NET Projects&lt;/a&gt;&lt;br /&gt;
Milan Jovanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeopinion.com/vertical-slices-doesnt-mean-share-nothing/&quot;&gt;Vertical Slices doesn’t mean “Share Nothing”&lt;/a&gt;&lt;br /&gt;
Derek Comartin&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/isaacojeda/ef-core-tu-query-funciona-tus-pruebas-pasan-y-estas-leyendo-50000-filas-para-devolver-3-1c9e&quot;&gt;EF Core: tu query funciona, tus pruebas pasan… y estás leyendo 50,000 filas para devolver 3&lt;/a&gt;&lt;br /&gt;
Isaac Ojeda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/11633/optimize-sql-server-tempdb/&quot;&gt;SQL Server TempDB: What it is and how it works&lt;/a&gt;&lt;br /&gt;
M. A. A. Mehedi Hasan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/databases/sql-server/identity-vs-sequence-in-sql-server-which-should-you-use/&quot;&gt;IDENTITY vs SEQUENCE in SQL Server - which should you use?&lt;/a&gt;&lt;br /&gt;
Greg Low&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/11634/sql-string-functions-for-data-transformation/&quot;&gt;SQL String Functions for Data Transformation&lt;/a&gt;&lt;br /&gt;
Muhammad Hassan Arshad&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://erikej.github.io/sqlserver/localdb/2026/03/13/localdb-sqlserver-2025.html&quot;&gt;Fixing SQL Server 2025 LocalDB in Visual Studio 2026: Enabling REGEXP and VECTOR Support&lt;/a&gt;&lt;br /&gt;
Erik Ejlskov Jensen&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/el-nuevo-paradigma-de-la-ingenier%C3%ADa-software-juan-irigoyen-tk9ie/&quot;&gt;El nuevo paradigma de la Ingeniería de Software con IA&lt;/a&gt;&lt;br /&gt;
Juan Irigoyen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://composio.dev/blog/mcp-vulnerabilities-every-developer-should-know&quot;&gt;MCP Vulnerabilities Every Developer Should Know&lt;/a&gt;&lt;br /&gt;
Composio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/build-a-real-world-example-with-microsoft-agent-framework-microsoft-foundry-mcp-and-aspire&quot;&gt;Build a real-world example with Microsoft Agent Framework, Microsoft Foundry, MCP and Aspire&lt;/a&gt;&lt;br /&gt;
Justin Yoo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/03/11/quadratic-regression-with-sgd-training-using-javascript.aspx&quot;&gt;Quadratic Regression with SGD Training Using JavaScript&lt;/a&gt;&lt;br /&gt;
James McCaffrey&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bloomberg.github.io/js-blog/post/standardizing-source-maps/&quot;&gt;Source Maps: Shipping Features Through Standards&lt;/a&gt;&lt;br /&gt;
Jon Kuperman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/abusing-customizable-selects/&quot;&gt;Abusing Customizable Selects&lt;/a&gt;&lt;br /&gt;
Patrick Brosset&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bloomberg.github.io/js-blog/post/temporal/&quot;&gt;Temporal: The 9-Year Journey to Fix Time in JavaScript&lt;/a&gt;&lt;br /&gt;
Jason Williams&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/the-value-of-z-index/&quot;&gt;The Value of z-index&lt;/a&gt;&lt;br /&gt;
Amit Sheen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/form-associated-custom-elements-in-practice/&quot;&gt;Form-Associated Custom Elements in Practice&lt;/a&gt;&lt;br /&gt;
Rob Levin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/the-enforced-accessibility-of-the-geolocation-element/&quot;&gt;The Enforced Accessibility of the Geolocation Element&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://component-model.bytecodealliance.org/&quot;&gt;The WebAssembly Component Model&lt;/a&gt;&lt;br /&gt;
Bytecode Alliance&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/03/beyond-border-radius-css-corner-shape-property-ui/&quot;&gt;Beyond border-radius: What The CSS corner-shape Property Unlocks For Everyday UI&lt;/a&gt;&lt;br /&gt;
Brecht De Ruyte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vite.dev/blog/announcing-vite8&quot;&gt;Vite 8.0 is out! ​&lt;/a&gt;&lt;br /&gt;
Vite Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/03/moving-from-moment-to-temporal-api/&quot;&gt;Moving From Moment.js To The JS Temporal API&lt;/a&gt;&lt;br /&gt;
Joe Attardi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.chrome.com/blog/scoped-registries?hl=en&quot;&gt;Make custom elements behave with scoped registries&lt;/a&gt;&lt;br /&gt;
Jayson Chen &amp;amp; Patrick Brosset&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://patrickbrosset.com/articles/2026-03-09-using-css-animations-as-state-machines-to-remember-focus-and-hover-states-with-css-only/&quot;&gt;Using CSS animations as state machines to remember focus and hover states with CSS only&lt;/a&gt;&lt;br /&gt;
Patrick Brosset&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.scottlogic.com/2026/03/09/noJS-3-flappy-bird.html&quot;&gt;NoJS 3 - The dawn of Flappy Bird. Making a Flappy Bird clone using pure HTML and CSS, no JavaScript&lt;/a&gt;&lt;br /&gt;
Gurveer Arora&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bocoup.com/blog/the-webs-most-tolerated-feature&quot;&gt;The Web’s Most Tolerated Feature&lt;/a&gt;&lt;br /&gt;
Mike Pennisi&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/kubernetes-controlador-de-nodos-node-readiness-controller.aspx&quot;&gt;Kubernetes soluciona el caos de la programación de pods con su nuevo controlador de nodos&lt;/a&gt;&lt;br /&gt;
CampusMVP&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/03/mi-configuracion-de-dev-container-para-desarrollar-plugins-de-wordpress/&quot;&gt;Mi configuración de Dev Container para desarrollar plugins de WordPress&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/extend-your-coding-agent-with-dotnet-skills/&quot;&gt;Extend your coding agent with .NET Skills&lt;/a&gt;&lt;br /&gt;
Tim Heuer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/modernize-dotnet-anywhere-with-ghcp/&quot;&gt;Modernize .NET Anywhere with GitHub Copilot&lt;/a&gt;&lt;br /&gt;
Mika Dumont&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://platform.uno/blog/configuring-claude-code-for-real-net-projects/&quot;&gt;Configuring Claude Code for Real .NET Projects&lt;/a&gt;&lt;br /&gt;
Matt Mattei&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/profile-picture-editor-maui&quot;&gt;Build a Profile Picture Editor in .NET MAUI with the Image Editor&lt;/a&gt;&lt;br /&gt;
Karthick Mani&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/5-ux-tips-net-maui-developers&quot;&gt;5 UX Tips for .NET MAUI Developers&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/7964099262990766247/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/7964099262990766247' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7964099262990766247'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7964099262990766247'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/03/enlaces-interesantes-641.html' title='Enlaces interesantes 641'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIotZwm2Fx6-ec93jArYo_Zz-cKyi-rdk_civ2knS9mI3PBHs5JRD2zg_mJDskE9j7ySWe0dAgP3eW_e4BL1-NrJHL3s6DsteLN6qA-HJn_33NnMqNRRfbqzhvuBL7ZIjQYVM5YuITro22-tsqkNkAoRmNhqaTb7b2ZuBPSWjE0KHj38peMRz08w/s72-c/sync.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-4042273022300497592</id><published>2026-03-09T08:05:00.027+01:00</published><updated>2026-03-09T08:05:00.116+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 640</title><content type='html'>&lt;img alt=&quot;Desarrollador haciendo ejercicio mientras trabaja&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJtbBrLgpP7EVAh-0mfablzmXSOBejWqVZF-oMO6qDBQV5kayceWa73oWLtDmsP4188EzTAjkdsVz38LZ-brYEmo071_MdZ5vMWlEyB7OQ38C9rtkFXQfb1V3JHJWa9csKzp_JsSyHFubp_m6wkKOctPW4LGDr1Z3f6QYd3gH8kFOyDn2hWuBxIA/s800/mens-sana.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;Ya he publicado los enlaces a contenidos interesantes que he ido descubriendo a lo largo de la semana pasada 😊&lt;/p&gt;
&lt;p&gt;En esta entrega, destacamos el repaso de Martin Stühmer a los &lt;a href=&quot;https://daily-devops.net/posts/session-management-aspnet-authentication/&quot; target=&quot;_blank&quot;&gt;errores más comunes en la gestión de sesiones en aplicaciones ASP.NET Core&lt;/a&gt; y cómo evitarlos para mejorar su seguridad de nuestras aplicaciones.&lt;/p&gt;
&lt;p&gt;Se ha lanzado la versión 1.0 del &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/release-v10-of-the-official-mcp-csharp-sdk/&quot; target=&quot;_blank&quot;&gt;SDK oficial de MCP para C#&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;Y seguimos con más lanzamientos, Jetbrains han anunciado &lt;a href=&quot;https://blog.jetbrains.com/dotnet/2026/03/05/resharper-for-visual-studio-code-cursor-and-compatible-editors-is-out/&quot; target=&quot;_blank&quot;&gt;ReSharper para Visual Studio Code, Cursor y editores compatibles&lt;/a&gt;. Como fan incondicional de esta herramienta desde hace años, me alegra que ahora esté también disponible más allá de Visual Studio.&lt;/p&gt;
&lt;p&gt;Por último, Gerson Azabache nos recuerda &lt;a href=&quot;https://bravedeveloper.com/2026/02/22/quieres-programar-mejor-empieza-por-entrenar-tu-cuerpo/&quot; target=&quot;_blank&quot;&gt;la importancia de hacer ejercicio&lt;/a&gt;, especialmente para los desarrolladores, que pasamos muchas horas sentados frente al ordenador y a menudo descuidamos nuestra salud física.&lt;/p&gt;
&lt;p&gt;Muchos más enlaces a contenidos interesantes, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/01/gestion-centralizada-de-paquetes-nuget.html&quot;&gt;Gestión centralizada de paquetes NuGet en soluciones y proyectos .NET&lt;/a&gt;&lt;br /&gt;José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/03/si-las-shadow-properties-no-existen.html&quot;&gt;Si las shadow properties no existen como propiedades en la entidad, ¿cómo podemos inicializarlas en el seed de Entity Framework Core?&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/why-ienumerable-can-kill-performance-in-hot-paths/&quot;&gt;Why IEnumerable Can Kill Performance in Hot Paths&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meziantou.net/creating-case-sensitive-folders-on-windows-using-csharp.htm&quot;&gt;Creating case-sensitive folders on Windows using C#&lt;/a&gt;&lt;br /&gt;
Gérald Barré&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://minidump.net/writing-a-net-gc-in-c-part-8/&quot;&gt;Writing a .NET Garbage Collector in C#&lt;/a&gt;&lt;br /&gt;
Kevin Gosse&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/yarp-as-api-gateway-in-dotnet&quot;&gt;YARP as API Gateway in .NET: 7 Real-World Scenarios You Should Know&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/03/aspnet-core-tryparse-error-when-using.html&quot;&gt;TryParse error when using Minimal APIs&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/how-to-secure-asp-net-core-apis-basic-authentication&quot;&gt;How to secure ASP.NET Core APIs with Basic Authentication&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elguerre.com/2026/03/03/stop-re-entering-your-token-in-swagger-ui-enablepersistauthorization-in-asp-net-core/&quot;&gt;Stop Re-Entering Your Token in Swagger UI: EnablePersistAuthorization in ASP.NET&amp;nbsp;Core&lt;/a&gt;&lt;br /&gt;
Juan Luis Guerrero&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duendesoftware.com/blog/20260303-rate-limiting-identityserver-endpoints&quot;&gt;Rate Limiting IdentityServer Endpoints&lt;/a&gt;&lt;br /&gt;
Maarten Balliauw&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/03/cleaner-minimal-api-endpoints-with.html&quot;&gt;Cleaner Minimal API Endpoints with [AsParameters]&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/customizing-new-reconnectmodal-component-blazor-10&quot;&gt;Customizing the New ReconnectModal Component in Blazor 10&lt;/a&gt;&lt;br /&gt;
Héctor Pérez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/session-management-aspnet-authentication/&quot;&gt;Your Logout Button Is Lying: ASP.NET Session Security Done Right&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.west-wind.com/posts/2026/Mar/02/Azure-Trusted-Signing-Revisited-with-Dotnet-Sign&quot;&gt;Azure Trusted Signing Revisited with Dotnet Sign&lt;/a&gt;&lt;br /&gt;
Rick Strahl&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/introducing-gpt-5-4-in-microsoft-foundry/4499785&quot;&gt;Introducing GPT-5.4 in Microsoft Foundry&lt;/a&gt;&lt;br /&gt;
Naomi Moneypenny&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/03/01/when-to-use-factory-method-pattern-in-c-decision-guide-with-examples&quot;&gt;When to Use Factory Method Pattern in C#: Decision Guide with Examples&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://www.devleader.ca/2026/03/03/prototype-design-pattern-in-c-complete-guide-with-examples&quot;&gt;Prototype Design Pattern in C#: Complete Guide with Examples&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.woodruff.dev/fencing-tokens-and-generation-clock-in-net-stop-zombie-leaders-from-writing/&quot;&gt;Fencing Tokens and Generation Clock in .NET: Stop Zombie Leaders From Writing&lt;/a&gt;&lt;br /&gt;
Chris Woodruff&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://consultwithgriff.com/dapper-nvarchar-implicit-conversion-performance-trap/&quot;&gt;How C# Strings Silently Kill Your SQL Server Indexes in Dapper&lt;/a&gt;&lt;br /&gt;
Kevin W. Griffin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/03/managing-multiple-sql-server-instances.html&quot;&gt;Managing multiple SQL Server instances from SQL Server Management Studio&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/es-ES/index/gpt-5-3-instant/&quot;&gt;GPT-5.3 Instant: conversaciones cotidianas más fluidas y útiles&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://openai.com/index/introducing-gpt-5-4/&quot;&gt;Introducing GPT-5.4&lt;/a&gt;&lt;br /&gt;
OpenAI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mlu-explain.github.io/decision-tree/&quot;&gt;Decision Trees&lt;/a&gt;&lt;br /&gt;
Jared Wilber &amp;amp; Lucía Santamaría&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://matthias-kainer.de/blog/posts/so-whats-the-next-word-then-/&quot;&gt;So whats the next word, then?&lt;/a&gt;&lt;br /&gt;
Matthias Kainer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/semantic-kernel/give-your-agents-domain-expertise-with-agent-skills-in-microsoft-agent-framework/&quot;&gt;Give Your Agents Domain Expertise with Agent Skills in Microsoft Agent Framework&lt;/a&gt;&lt;br /&gt;
Sergey Menshykh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/release-v10-of-the-official-mcp-csharp-sdk/&quot;&gt;Release v1.0 of the official MCP C# SDK&lt;/a&gt;&lt;br /&gt;
Mike Kistler&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/model-context-protocol-csharp-sdk&quot;&gt;Model Context Protocol (MCP): Building AI Integrations in .NET Using the C# SDK&lt;/a&gt;&lt;br /&gt;
Arulraj Aboorvasamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MicrosoftDocs/Agent-Skills&quot;&gt;MicrosoftDocs/Agent-Skills: Curated Agent Skills for Microsoft &amp;amp; Azure – giving AI coding assistants structured, real-time expertise from Microsoft Learn docs&lt;/a&gt;&lt;br /&gt;
Microsoft&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.enmilocalfunciona.io/tanstack-query-viste-la-camisa-de-angular/&quot;&gt;TanStack Query en Angular: caché y rendimiento&lt;/a&gt;&lt;br /&gt;
David Filipe Lopes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-rc/&quot;&gt;Announcing TypeScript 6.0 RC&lt;/a&gt;&lt;br&gt;
Daniel Rosenwasser&lt;/li&gt;  
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/popover-api-or-dialog-api-which-to-choose/&quot;&gt;Popover API or Dialog API: Which to Choose?&lt;/a&gt;&lt;br /&gt;
Zell Liew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.dev/blog/baseline-navigation-api&quot;&gt;Navigation API - a better way to navigate, is now Baseline Newly Available&lt;/a&gt;&lt;br /&gt;
Ray Rungta&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/the-odometer-effect-in-css/&quot;&gt;The Odometer Effect (without JavaScript)&lt;/a&gt;&lt;br /&gt;
Preethi Sam&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.dev/blog/web-platform-02-2026?hl=en&quot;&gt;New to the web platform in February&lt;/a&gt;&lt;br /&gt;
Rachel Andrew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://christianheilmann.com/2026/02/28/quick-tip-hosting-html-css-js-demos-from-source-code-on-github-pages/&quot;&gt;Quick tip: hosting HTML/CSS/JS demos from source code on GitHub Pages&lt;/a&gt;&lt;br /&gt;
Christian Heilmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lemire.me/blog/2026/02/28/you-can-use-newline-characters-in-urls/&quot;&gt;You can use newline characters in URLs&lt;/a&gt;&lt;br /&gt;
Daniel Lemire&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.angular.dev/security-advisory-addressing-recent-vulnerabilities-in-angular-c2656249b799&quot;&gt;Security Advisory: Addressing Recent Vulnerabilities in Angular&lt;/a&gt;&lt;br /&gt;
Angular Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tympanus.net/codrops/2026/03/02/sticky-grid-scroll-building-a-scroll-driven-animated-grid/&quot;&gt;Sticky Grid Scroll: Building a Scroll-Driven Animated Grid&lt;/a&gt;&lt;br /&gt;
Theo Plawinski&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/singleton-not-understanding-angular-services-right-way&quot;&gt;Singleton or Not? Understanding Angular Services&lt;/a&gt;&lt;br /&gt;
Dhananjay Kumar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/the-different-ways-to-select-html-in-css/&quot;&gt;The Different Ways to Select &amp;lt;html&amp;gt; in CSS&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/the-big-gotcha-of-anchor-positioning/&quot;&gt;The Big Gotcha of Anchor Positioning&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/ai-and-ml/github-copilot/from-idea-to-pull-request-a-practical-guide-to-building-with-github-copilot-cli/&quot;&gt;From idea to pull request: A practical guide to building with GitHub Copilot CLI&lt;/a&gt;&lt;br /&gt;
Ari LiVigni&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elbruno.com/2026/03/04/%e2%8f%b0-clocktray-hide-or-show-your-windows-clock-with-one-click/&quot;&gt;ClockTray – Hide or Show Your Windows Clock with One Click (yes, in C#)&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/dotnet/2026/03/05/resharper-for-visual-studio-code-cursor-and-compatible-editors-is-out/&quot;&gt;ReSharper for Visual Studio Code, Cursor, and Compatible Editors Is Out&lt;/a&gt;&lt;br /&gt;
Sasha Ivanova &amp;amp; Alexander Kurakin&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/stream-live-data-maui-datagrid-firebase&quot;&gt;How to Stream Real-Time Data into a .NET MAUI DataGrid Using Firebase&lt;/a&gt;&lt;br /&gt;
Shalini Suresh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/net-10-secondary-toolbar-items-ios-macos-net-maui&quot;&gt;.NET 10: Secondary Toolbar Items for iOS, macOS in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/02/22/quieres-programar-mejor-empieza-por-entrenar-tu-cuerpo/&quot;&gt;¿Quieres programar mejor? Empieza por entrenar tu cuerpo&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewkchan.dev/posts/crawler.html&quot;&gt;Crawling a billion web pages in just over 24 hours&lt;/a&gt;&lt;br /&gt;
Andrew Chan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/4042273022300497592/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/4042273022300497592' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/4042273022300497592'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/4042273022300497592'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/03/enlaces-interesantes-640.html' title='Enlaces interesantes 640'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJtbBrLgpP7EVAh-0mfablzmXSOBejWqVZF-oMO6qDBQV5kayceWa73oWLtDmsP4188EzTAjkdsVz38LZ-brYEmo071_MdZ5vMWlEyB7OQ38C9rtkFXQfb1V3JHJWa9csKzp_JsSyHFubp_m6wkKOctPW4LGDr1Z3f6QYd3gH8kFOyDn2hWuBxIA/s72-c/mens-sana.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-4637831056624096227</id><published>2026-03-03T08:05:00.006+01:00</published><updated>2026-03-06T16:38:24.293+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#bizarro"/><title type='text'>C# bizarro, episodio 7: crisis de identidad</title><content type='html'>&lt;img alt=&quot;Dos personas conectadas a una máquina para cambiar su identidad&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVDZ8FUPBTQwyR0jPkZrFJgh3ihOx3qLq_Ync1GhkaBjWRzNatN_xjhuOLjEg4ts71wi2j4N_-GLkrzc-DzEvSCpyVKFQAdRMU32u9ntxV3GU_OFAIR1foAiZ4WY7_8m2otZ8qvdkzpCYWDc6qQIMZsymXfqurhpw8pbb4ic5dSigWZ4YQT8XVRg/s1024/identity-crisis.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;Vamos con una entrega más (siete llevamos ya) de la serie &lt;a href=&quot;https://www.variablenotfound.com/search/label/c%23bizarro&quot;&gt;C# bizarro&lt;/a&gt;, estos divertidos posts donde ponemos a prueba nuestros conocimientos del lenguaje mientras exploramos algunas de sus características extrañas o poco conocidas.&lt;/p&gt;
&lt;p&gt;En esta ocasión, os propongo que le echéis un vistazo al siguiente código, en especial a su método &lt;code&gt;ChangeIdentity()&lt;/code&gt;, que pretende cambiar la identidad de una persona por la de otra que le llega como parámetro:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;var john = new Person() { Name = &quot;John&quot; };
var peter = new Person() { Name = &quot;Peter&quot; };

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

struct Person
{
    public string Name;

    public void ChangeIdentity(Person otherPerson)
    {
        this = otherPerson; // WFT!?!?
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En efecto, en el cuerpo del método &lt;strong&gt;estamos asignando un nuevo valor a &lt;code&gt;this&lt;/code&gt;&lt;/strong&gt;. ¿Pensáis que esto compilará? Y en caso afirmativo, ¿qué veríamos en la consola al ejecutarlo, &lt;code&gt;true&lt;/code&gt; o &lt;code&gt;false&lt;/code&gt;?&lt;/p&gt;
&lt;details&gt;
&lt;summary style=&quot;cursor: pointer; margin-bottom: 10px;&quot;&gt;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 &lt;b style=&quot;text-decoration: underline;&quot;&gt;pulsar aquí para leer la solución&lt;/b&gt; 👇👇&lt;/summary&gt;
&lt;p&gt;El código, efectivamente, &lt;strong&gt;compila sin problema&lt;/strong&gt;. Aunque la asignación de &lt;code&gt;this&lt;/code&gt; pueda parecer extraña, es perfectamente válida en C# porque estamos &lt;strong&gt;en el interior del método de instancia de una estructura&lt;/strong&gt;. No compilaría, en cambio, si &lt;code&gt;Person&lt;/code&gt; fuera una clase.&lt;/p&gt;
&lt;p&gt;Esto se debe a que internamente &lt;strong&gt;las estructuras son tipos valor&lt;/strong&gt;, por lo que &lt;code&gt;this&lt;/code&gt; representa una copia completa del valor de la estructura en memoria. Al asignar &lt;code&gt;this = otherPerson&lt;/code&gt;, estamos copiando el valor de &lt;code&gt;otherPerson&lt;/code&gt;&amp;nbsp;sobre&amp;nbsp;&lt;code&gt;this&lt;/code&gt;, lo que en la práctica significa que estamos copiando el valor de todos los campos de la estructura origen&amp;nbsp;sobre la actual, aunque sin tener que hacerlo de forma manual 🙂&lt;/p&gt;
&lt;p&gt;En clases, sin embargo, &lt;code&gt;this&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;Ahora vamos con la segunda parte de la pregunta, ¿qué veremos en la consola al ejecutar el código que utiliza el método &lt;code&gt;ChangeIdentity()&lt;/code&gt;?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;var john = new Person() { Name = &quot;John&quot; };
var peter = new Person() { Name = &quot;Peter&quot; };

john.ChangeIdentity(peter);
Console.WriteLine(john.Equals(peter));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Seguro que habéis adivinado que la respuesta es &lt;code&gt;true&lt;/code&gt;. Fijaos que si hubiésemos utilizado clases en lugar de estructuras, el resultado habría sido &lt;code&gt;false&lt;/code&gt;, ya que &lt;code&gt;john&lt;/code&gt; y &lt;code&gt;peter&lt;/code&gt; serían punteros a objetos distintos en memoria y la igualdad por referencia nunca sería cierta. Pero al ser estructuras, &lt;strong&gt;la comprobación de igualdad se realiza por valor&lt;/strong&gt;, es decir, comparando los valores de todos sus campos.&lt;/p&gt;
&lt;p&gt;Y dado que anteriormente hemos copiado los valores de todos los campos de &lt;code&gt;peter&lt;/code&gt; sobre la estructura &lt;code&gt;john&lt;/code&gt;, ambos objetos son idénticos en memoria y, por tanto, la operación de comparación devuelve &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Qué, ¿lo habíais adivinado? 😄&lt;/p&gt;
&lt;/details&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/4637831056624096227/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/4637831056624096227' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/4637831056624096227'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/4637831056624096227'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/03/c-bizarro-episodio-7-crisis-de-identidad.html' title='C# bizarro, episodio 7: crisis de identidad'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVDZ8FUPBTQwyR0jPkZrFJgh3ihOx3qLq_Ync1GhkaBjWRzNatN_xjhuOLjEg4ts71wi2j4N_-GLkrzc-DzEvSCpyVKFQAdRMU32u9ntxV3GU_OFAIR1foAiZ4WY7_8m2otZ8qvdkzpCYWDc6qQIMZsymXfqurhpw8pbb4ic5dSigWZ4YQT8XVRg/s72-c/identity-crisis.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-7146324157199649666</id><published>2026-03-02T08:01:00.027+01:00</published><updated>2026-03-02T08:01:00.119+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 639</title><content type='html'>&lt;img alt=&quot;Desarrollador bastante desesperado mientras depura un código&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOWsJgt7acfWUe8IuVAkl87PGOseYwIloL1Ew62wIkcGl9nOo0Ge_GnBw_Z8xZsDe9LynYhvwwzKfHJPJghx4Yy9us_w2gGAF4I0UtrLzywR4L9dqaRYe7LWoEQ5w7gRBoRNPL9Mil2zmV16l-rXCtXEhFB7lhVGpPJmL4lbxqSQ7jXPuor-R8Sw/s800/debugging.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Juan Irigoyen comparte sus &lt;a href=&quot; https://www.linkedin.com/pulse/optimizaci%C3%B3n-en-sql-server-ia-juan-irigoyen-gwo0e/&quot; target=&quot;_blank&quot;&gt;experiencias utilizando IA para optimizar SQL Server&lt;/a&gt;, en un interesante recorrido por la preparación de un agente Claude capaz de analizar y optimizar consultas SQL, con resultados bastante prometedores.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://jeremydmiller.com/2026/02/24/on-debugging-problems/&quot; target=&quot;_blank&quot;&gt;el proceso de depuración&lt;/a&gt;, compartiendo consejos para abordar los problemas de manera efectiva-&lt;/p&gt;
&lt;p&gt;Y para terminar, una frikada épica a la que llego a través de Microsiervos: &lt;a href=&quot;https://lyra.horse/x86css/&quot; target=&quot;_blank&quot;&gt;un procesador x86 completo implementado únicamente con CSS&lt;/a&gt;, sin una sola línea de código JavaScript, y que es capaz de ejecutar código ensamblador compilado para ese procesador.&lt;/p&gt;&lt;p&gt;El resto de contenidos interesantes, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2025/01/trocear-predicados-para-mejorar-la.html&quot;&gt;Trocear predicados para mejorar la legibilidad&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/03/shadow-properties-en-entity-framework.html&quot;&gt;Shadow properties en Entity Framework Core&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/02/01/logging-profesional-en-net-con-serilog-minimalismo-bien-hecho/&quot;&gt;Logging Profesional en .NET con Serilog: Minimalismo Bien Hecho&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/02/22/when-to-use-builder-pattern-in-c-decision-guide-with-examples&quot;&gt;When to Use Builder Pattern in C#: Decision Guide with Examples&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-blog/smarter-way-learn-dotnet-without-reading-docs&quot;&gt;A smarter way to learn .NET without reading the docs&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/02/dotnet-11-preview1/&quot;&gt;.NET 11 Preview 1 Arrives with Runtime Async, Zstandard Support, and C# 15 Features&lt;/a&gt;&lt;br /&gt;
Almir Vuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/recording-metrics-in-process-using-meterlistener/&quot;&gt;Recording metrics in-process using MeterListener&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/02/cleaner-switch-expressions-with-pattern.html&quot;&gt;Cleaner switch expressions with pattern matching in C#&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/vector-data-in-dotnet-building-blocks-for-ai-part-2/&quot;&gt;Vector Data in .NET - Building Blocks for AI Part 2&lt;/a&gt;&lt;br /&gt;
Jeremy Likness&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tabsoverspaces.com/233961-is-it-faster-to-index-into-an-array-or-use-switch-statement-for-lookups&quot;&gt;Is it faster to index into an array or use switch statement for lookups?&lt;/a&gt;&lt;br /&gt;
Jiří Činčura&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/02/25/semantic-kernel-in-c-complete-ai-orchestration-guide&quot;&gt;Semantic Kernel in C#: Complete AI Orchestration Guide&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/02/net-synchronisation-apis-part-1-in.html&quot;&gt;.NET Synchronisation APIs - Part 1&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pvs-studio.com/en/blog/posts/1348/&quot;&gt;Brave new C#&lt;/a&gt;&lt;br /&gt;
PVS-Studio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ndepend.com/developing-an-mcp-server-with-c-a-complete-guide/&quot;&gt;Developing an MCP Server with C#: A Complete Guide&lt;/a&gt;&lt;br /&gt;
NDepend Team&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/consent-management-aspnet-identity/&quot;&gt;Cookie Banners Won&#39;t Save You From ISO 27701&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.woodruff.dev/stop-wrestling-with-javascript-htmxrazor-gives-asp-net-core-the-component-library-it-deserves/&quot;&gt;Stop Wrestling with JavaScript: htmxRazor Gives ASP.NET Core the Component Library It Deserves&lt;/a&gt;&lt;br /&gt;
Chris Woodruff&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/appsonazureblog/how-to-troubleshoot-azure-functions-not-visible-in-azure-portal/4495873&quot;&gt;How to Troubleshoot Azure Functions Not Visible in Azure Portal&lt;/a&gt;&lt;br /&gt;
Vikas Gupta&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/azuredevcommunityblog/optimising-ai-costs-with-microsoft-foundry-model-router/4494776&quot;&gt;Optimising AI Costs with Microsoft Foundry Model Router&lt;/a&gt;&lt;br /&gt;
Lee Stott&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://franiglesias.github.io/rename/&quot;&gt;Rename, para entender mejor&lt;/a&gt;&lt;br /&gt;
Fran Iglesias&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeopinion.com/read-replicas-are-not-cqrs-stop-confusing-this/&quot;&gt;Read Replicas Are NOT CQRS (Stop Confusing This)&lt;/a&gt;&lt;br /&gt;
Peter Ritchie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/how-to-avoid-code-duplication-in-vertical-slice-architecture-in-dotnet&quot;&gt;How to Avoid Code Duplication in Vertical Slice Architecture in .NET&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.ploeh.dk/2026/02/23/tdd-as-induction/&quot;&gt;TDD as induction&lt;/a&gt;&lt;br /&gt;
Mark Seemann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jeremydmiller.com/2026/02/24/on-debugging-problems/&quot;&gt;On Debugging Problems&lt;/a&gt;&lt;br /&gt;
Jeremy D. Miller&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/optimizaci%C3%B3n-en-sql-server-ia-juan-irigoyen-gwo0e/&quot;&gt;Optimización en Sql Server usando IA&lt;/a&gt;&lt;br /&gt;
Juan Irigoyen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://erikdarling.com/emulating-getdate-on-azure-sql-database/&quot;&gt;Emulating GETDATE() on Azure SQL Database&lt;/a&gt;&lt;br /&gt;
Joe Obbish&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/polymorphic-relationships-in-ef-core-three-approaches/&quot;&gt;Polymorphic Relationships in EF Core: Three Approaches&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/11614/select-top-in-sql-server/&quot;&gt;The Hidden Work Behind SELECT TOP in SQL Server&lt;/a&gt;&lt;br /&gt;
Jared Westover&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/isaacojeda/primeros-pasos-con-microsoft-agent-framework-construyendo-un-chatbot-de-soporte-con-c-46m0&quot;&gt;Primeros pasos con Microsoft Agent Framework: construyendo un chatbot de soporte con C#&lt;/a&gt;&lt;br /&gt;
Isaac Ojeda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elbruno.com/2026/02/23/microsoft-agent-framework-is-release-candidate-lets-go-%f0%9f%94%a5%f0%9f%a4%96/&quot;&gt;Microsoft Agent Framework is Release Candidate! Let’s Go&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/3779312&quot;&gt;Redefining the Software Engineering Profession for AI&lt;/a&gt;&lt;br /&gt;
Mark Russinovich &amp;amp; Scott Hanselman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elguerre.com/2026/02/28/tip-how-to-add-mcp-servers-to-claude-code-and-gemini-cli-on-windows/&quot;&gt;[TIP] How to Add MCP Servers to Claude Code and Gemini CLI on&amp;nbsp;Windows&lt;/a&gt;&lt;br /&gt;
Juan Luis Guerrero&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://benhatsor.medium.com/playing-css-defined-animations-with-javascript-99573ef4738b&quot;&gt;Playing CSS-defined animations with JavaScript&lt;/a&gt;&lt;br /&gt;
Ben Hatsor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/loading-smarter-svg-vs-raster-loaders-in-modern-web-design/&quot;&gt;Loading Smarter: SVG vs. Raster Loaders in Modern Web Design&lt;/a&gt;&lt;br /&gt;
Mariana Beldi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/virtual-scroll-driven-3d-scenes/&quot;&gt;Virtual Scroll-Driven 3D Scenes&lt;/a&gt;&lt;br /&gt;
Gunnar Bachelor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hacks.mozilla.org/2026/02/goodbye-innerhtml-hello-sethtml-stronger-xss-protection-in-firefox-148/&quot;&gt;Goodbye innerHTML, Hello setHTML: Stronger XSS Protection in Firefox 148 - Mozilla Hacks&lt;/a&gt;&lt;br /&gt;
Tom Schuster, Frederik Braun &amp;amp; Christoph Kerschbaumer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/a-complete-guide-to-bookmarklets/&quot;&gt;A Complete Guide to Bookmarklets&lt;/a&gt;&lt;br /&gt;
Declan Chidlow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/an-exploit-in-css/&quot;&gt;An Exploit ... in CSS?!&lt;/a&gt;&lt;br /&gt;
Lee Meyer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mescius.com/blogs/guide-to-jakobs-law-web-development&quot;&gt;A Guide to Jakob’s Law in Web Development&lt;/a&gt;&lt;br /&gt;
Adrew Peterson&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/react-19-suspense-for-data-fetching&quot;&gt;React 19 Suspense for Data Fetching: A New Model for Async UI&lt;/a&gt;&lt;br /&gt;
Prashant Yadav&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/a-better-web-streams-api/&quot;&gt;We deserve a better streams API for JavaScript&lt;/a&gt;&lt;br /&gt;
James M. Snell&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/yet-another-way-to-center-an-absolute-element/&quot;&gt;Yet Another Way to Center an (Absolute) Element&lt;/a&gt;&lt;br /&gt;
Juan Diego Rodríguez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tip.com/if-trick/&quot;&gt;The Hidden Trick of Style Queries and if()&lt;/a&gt;&lt;br /&gt;
Temani Afif&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tympanus.net/codrops/2026/02/26/building-async-page-transitions-in-vanilla-javascript/&quot;&gt;Building Async Page Transitions in Vanilla JavaScript&lt;/a&gt;&lt;br /&gt;
Valentin Mor&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/02/08/curl-para-desarrolladores-net-guia-practica-real-y-profesional/&quot;&gt;cURL para desarrolladores .NET: guía práctica, real y profesional&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/changelog/2026-02-25-github-copilot-cli-is-now-generally-available/&quot;&gt;GitHub Copilot CLI is now generally available&lt;/a&gt;&lt;br /&gt;
GitHub Copilot Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/the-dongle-died-at-midnight/&quot;&gt;The Dongle Died at Midnight – WinForms Agent Saved my German Mom&#39;s Business Trip&lt;/a&gt;&lt;br /&gt;
Klaus Loeffelmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/enterprise-ui-with-mcp-servers&quot;&gt;Introducing Agentic UI Builder: Build Complete Enterprise UIs with Syncfusion MCP Servers&lt;/a&gt;&lt;br /&gt;
Lokeshwaran Ragavan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.docker.com/blog/run-openclaw-securely-in-docker-sandboxes/&quot;&gt;Run OpenClaw Securely in Docker Sandboxes&lt;/a&gt;&lt;br /&gt;
Oleg Selajev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.xaml.io/post/xaml-io-v0-6/&quot;&gt;XAML.io v0.6: Share Running .NET Code With a Link&lt;/a&gt;&lt;br /&gt;
XAM.io Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/educatordeveloperblog/stop-drawing-architecture-diagrams-manually-meet-the-open-source-ai-architecture/4496271&quot;&gt;Stop Drawing Architecture Diagrams Manually: Meet the Open-Source AI Architecture Review Agents&lt;/a&gt;&lt;br /&gt;
Shivam Goyal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/blogs/2026/02/26/long-distance-nes&quot;&gt;VS Code: Building Long-Distance Next Edit Suggestions&lt;/a&gt;&lt;br /&gt;
Vikram Duvvur, Gaurav Mittal &amp;amp; Benjamin Simmonds&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/simplifying-grid-layout-net-maui-using-extension-methods&quot;&gt;Simplifying Grid Layout in .NET MAUI Using Extension Methods&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thewissen.io/csharp-expressions-in-net-maui-xaml/&quot;&gt;C# Expressions in XAML: throw out your converters&lt;/a&gt;&lt;br /&gt;
Steven Thewissen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/email-toast-reminders-maui-scheduler&quot;&gt;How to Add Email and Toast Reminders to a .NET MAUI Scheduler&lt;/a&gt;&lt;br /&gt;
Yuvaraj Gajaraj&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://shiftmag.dev/developers-your-ego-is-the-real-bug-in-the-system-7657/&quot;&gt;What is egoless programming?&lt;/a&gt;&lt;br /&gt;
Ivan Kranjec&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lyra.horse/x86css/&quot;&gt;x86 CPU made in CSS&lt;/a&gt;&lt;br /&gt;
Lyra Rebane&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/7146324157199649666/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/7146324157199649666' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7146324157199649666'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7146324157199649666'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/03/enlaces-interesantes-639.html' title='Enlaces interesantes 639'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOWsJgt7acfWUe8IuVAkl87PGOseYwIloL1Ew62wIkcGl9nOo0Ge_GnBw_Z8xZsDe9LynYhvwwzKfHJPJghx4Yy9us_w2gGAF4I0UtrLzywR4L9dqaRYe7LWoEQ5w7gRBoRNPL9Mil2zmV16l-rXCtXEhFB7lhVGpPJmL4lbxqSQ7jXPuor-R8Sw/s72-c/debugging.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-8082408171120713411</id><published>2026-02-23T08:02:00.030+01:00</published><updated>2026-02-23T08:02:00.119+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 638</title><content type='html'>&lt;img alt=&quot;Desarrollador trabajando concentrado mientras alrededor pasan muchas cosas&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnBSoO56QpMdSUXvcqk0rZQG60wBf1ejaNFvWhfcUVcoQCr35QSyybDbmP_y1IDqPBIyXdfurMLDjwWojchEFmkqL_vt1YZiSzgXuWCVF_sVQwtuNopb5fRtMOfy7AmjOQabv2wxxJQBjc78akbnp1EP2LB3Qk7yG0cLP6iMaUtsjRSLk9YgP-KA/s800/flow-programming.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;Otra semana de contenidos interesantes en la web 🙂&lt;/p&gt;
&lt;p&gt;Según Milan Milanović, &lt;a href=&quot;https://newsletter.techworld-with-milan.com/p/you-can-code-only-4-hours-per-day&quot; target=&quot;_blank&quot;&gt;solo 3–4 horas al día son realmente productivas al programar&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;Bruno Capuano nos &lt;a href=&quot;https://elbruno.com/2026/02/13/local-embeddings-in-net-the-easy-way/&quot; target=&quot;_blank&quot;&gt;habla sobre la generación de embeddings&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;¿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 &lt;a href=&quot;https://www.code4it.dev/blog/readonly-vs-immutable-vs-frozen/&quot; target=&quot;_blank&quot;&gt;son cosas muy diferentes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La primera preview de .NET 11 ya trae algunas novedades interesantes. Steven Giesel nos muestra que &lt;a href=&quot;https://steven-giesel.com/blogPost/1fb10ed2-df84-4080-b660-72c04a4cc674&quot; target=&quot;_blank&quot;&gt;el nuevo runtime async es una realidad&lt;/a&gt;, y que va a mejorar mucho el rendimiento de las aplicaciones asíncronas.&lt;/p&gt;
&lt;p&gt;El resto de enlaces a contenidos interesantes, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2024/12/propiedades-semi-automaticas-en-c.html&quot;&gt;Propiedades semi-automáticas en C#&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/02/evaluacion-en-cliente-de-ef-core-sus.html&quot;&gt;Evaluación en cliente de EF Core: sus peligros y cómo evitarla&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/01/25/logging-profesional-en-net-disena-telemetria-no-prints/&quot;&gt;Logging profesional en .NET: Diseña Telemetría, no Prints&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/441e0a21-9869-49e4-beac-b30bb9f9494c&quot;&gt;Collection Expression Arguments in C# 15 are &quot;out&quot;&lt;/a&gt;&lt;br /&gt;
Steven Giesel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mfkl.github.io/2026/02/11/vlc-plugin-csharp.html&quot;&gt;Writing a native VLC plugin in C#&lt;/a&gt;&lt;br /&gt;
Martin Finkel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nestenius.se/ai/introducing-the-coding-agent-explorer-net/&quot;&gt;Introducing the Coding Agent Explorer (.NET)&lt;/a&gt;&lt;br /&gt;
Tore Nestenius&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/1fb10ed2-df84-4080-b660-72c04a4cc674&quot;&gt;New runtime async is hitting .NET 11&lt;/a&gt;&lt;br /&gt;Steven Giesel&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://laurentkempe.com/2026/02/14/exploring-net-11-preview-1-runtime-async-a-dive-into-the-future-of-async-in-net/&quot;&gt;Exploring .NET 11 Preview 1 Runtime Async: A dive into the Future of Async in .NET&lt;/a&gt;&lt;br /&gt;
Laurent Kempé&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/02/14/how-to-implement-abstract-factory-pattern-in-c-stepbystep-guide&quot;&gt;How to Implement Abstract Factory Pattern in C#: Step-by-Step Guide&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/creating-standard-and-observable-instruments/&quot;&gt;Creating standard and &quot;observable&quot; instruments&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.code4it.dev/blog/readonly-vs-immutable-vs-frozen/&quot;&gt;Readonly vs Immutable vs Frozen in C#: differences and (a lot of) benchmarks&lt;/a&gt;&lt;br /&gt;
Davide Bellone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.i-programmer.info/programming/100-c/870-multicast-delegates-and-events.html&quot;&gt;Deep C# - Multicast Delegates and Events&lt;/a&gt;&lt;br /&gt;
Mike James&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://endjin.com/blog/2026/02/t4-templates-on-modern-dotnet-10&quot;&gt;T4 templates on modern .NET&lt;/a&gt;&lt;br /&gt;
Ian Griffiths&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/02/hangfire/&quot;&gt;Getting Started with .NET Scheduling in Hangfire&lt;/a&gt;&lt;br /&gt;
Peter Ritchie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/dependency-management-nuget-security/&quot;&gt;NuGet Packages: The Suppliers You Forgot to Audit&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/swagger-missing-dotnet-10-how-to-add-it-back&quot;&gt;Swagger&#39;s missing in .NET 10&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.14/&quot;&gt;What&#39;s new for the Microsoft Fluent UI Blazor library 4.14&lt;/a&gt;&lt;br /&gt;
Vincent Baaij&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://damienbod.com/2026/02/16/add-application-security-to-the-swiyu-generic-management-verifier-apis-using-oauth/&quot;&gt;Add application security to the swiyu generic management verifier APIs using&amp;nbsp;OAuth&lt;/a&gt;&lt;br /&gt;
Damien Bowden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/02/13/aspnet-core-with-needlr-simplified-web-application-setup&quot;&gt;ASP.NET Core with Needlr: Simplified Web Application Setup&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/how-to-set-up-production-ready-monitoring-with-aspnetcore-health-checks&quot;&gt;How to Set Up Production-Ready Monitoring With ASP.NET Core Health Checks&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/creating-drag-drop-listboxes-blazor&quot;&gt;Creating Drag-and-Drop ListBoxes in Blazor&lt;/a&gt;&lt;br /&gt;
Héctor Pérez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/02/16/building-real-world-web-apps-with-aspnet-core-razor-pages.aspx&quot;&gt;Building Real-World Web Apps with ASP.NET Core Razor Pages&lt;/a&gt;&lt;br /&gt;
David Ramel&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/network-isolation-azure-vnet/&quot;&gt;Your Azure SQL Is Public Right Now. ISO 27017 Demands You Fix It&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.systemdesign.one/p/timsort-algorithm&quot;&gt;Timsort Algorithm&lt;/a&gt;&lt;br /&gt;
Neo Kim&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/databases/sql-server/long-running-query-detection-in-sql-server/&quot;&gt;SQL Server Long-Running Query Detection: How to Find and Monitor Slow Queries&lt;/a&gt;&lt;br /&gt;
Edward Pollack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/karenpayneoregon/aspnet-core-warmup-ef-core-58gl&quot;&gt;ASP.NET Core warmup EF Core&lt;/a&gt;&lt;br /&gt;
Karen Payne&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/es-ES/index/introducing-gpt-5-3-codex-spark/&quot;&gt;Presentamos GPT‑5.3‑Codex‑Spark&lt;/a&gt;&lt;br /&gt;
OpenAI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-pro/&quot;&gt;Gemini 3.1 Pro: Announcing our latest Gemini AI model&lt;/a&gt;&lt;br /&gt;
Gemini Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elbruno.com/2026/02/13/local-embeddings-in-net-the-easy-way/&quot;&gt;Local Embeddings in .NET — The Easy Way&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://elbruno.com/2026/02/14/%f0%9f%a7%a0-building-rag-in-net-with-local-embeddings-3-approaches-zero-cloud-calls/&quot;&gt;Building RAG in .NET with Local Embeddings — 3 Approaches, Zero Cloud Calls&lt;/a&gt; &amp;amp; * &lt;a href=&quot;https://elbruno.com/2026/02/16/%f0%9f%96%bc%ef%b8%8f-local-image-embeddings-in-net-clip-onnx/&quot;&gt;Local Image Embeddings in .NET — CLIP + ONNX&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/ai/2026/02/the-most-popular-ai-tools-what-developers-use-and-why/&quot;&gt;The Most Popular AI Tools: What Developers Use and Why&lt;/a&gt;&lt;br /&gt;
Conrad Schwellnus&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://christianheilmann.com/2026/02/16/webmcp-a-much-needed-way-to-make-agents-play-with-rather-than-against-the-web/&quot;&gt;WebMCP – a much needed way to make agents play with rather than against the web&lt;/a&gt;&lt;br /&gt;
Christian Heilmann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://theredbeard.io/blog/i-intercepted-3177-api-calls-across-4-ai-coding-tools/&quot;&gt;I Intercepted 3,177 API Calls Across 4 AI Coding Tools. Here&#39;s What&#39;s Actually Filling Your Context Window.&lt;/a&gt;&lt;br /&gt;
Lars de Ridder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/02/17/decision-tree-regression-from-scratch.aspx&quot;&gt;Decision Tree Regression from Scratch Without Pointers or Recursion Using C#&lt;/a&gt;&lt;br /&gt;
James McCaffrey&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/foundry/microsoft-agent-framework-reaches-release-candidate/&quot;&gt;Microsoft Agent Framework Reaches Release Candidate&lt;/a&gt;&lt;br /&gt;
Shawn Henry&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/semantic-kernel/migrate-your-semantic-kernel-and-autogen-projects-to-microsoft-agent-framework-release-candidate/&quot;&gt;Migrate your Semantic Kernel and AutoGen projects to Microsoft Agent Framework Release Candidate&lt;/a&gt;&lt;br /&gt;
Dmytro Struk &amp;amp; Shawn Henry&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.enmilocalfunciona.io/accesibilidad-web-del-futuro-nuevas-pautas-ia-y-diseno-sin-barreras/&quot;&gt;Accesibilidad web 2026: WCAG 2.2, IA y ley europea&lt;/a&gt;&lt;br /&gt;
Marco Romero&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/performance-optimized-video-embeds-with-zero-javascript/&quot;&gt;Performance-Optimized Video Embeds with Zero JavaScript&lt;/a&gt;&lt;br /&gt;
Stefan Bauer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/jquery-4-support-whats-new-how-kendo-ui-has-you-covered&quot;&gt;jQuery 4.0.0 Support: What’s New + Kendo UI Has You Covered&lt;/a&gt;&lt;br /&gt;
Nikolay Penev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/fun-with-typescript-generics/&quot;&gt;Fun with TypeScript Generics&lt;/a&gt;&lt;br /&gt;
Adam Rackis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/anchored-menus-and-a-lesson-in-scoping/&quot;&gt;Anchored Menus and a Lesson in Scoping&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/optimizing-javascript-edge-runtime&quot;&gt;Optimizing JavaScript for the Edge Runtime&lt;/a&gt;&lt;br /&gt;
Jonathan Gamble&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://matklad.github.io/2026/02/14/justifying-text-wrap-pretty.html&quot;&gt;Justifying text-wrap: pretty&lt;/a&gt;&lt;br /&gt;
Alex Kladov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/react-animation-libraries-comparison&quot;&gt;Choosing a React Animation Library: Performance Trade-Offs in Real Apps&lt;/a&gt;&lt;br /&gt;
Sumankumar G.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/spiral-scrollytelling-in-css-with-sibling-index/&quot;&gt;Spiral Scrollytelling in CSS With sibling-index()&lt;/a&gt;&lt;br /&gt;
Lee Meyer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/interop-2026/&quot;&gt;Interop 2026&lt;/a&gt;&lt;br /&gt;
Geoff Graham&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.dev/blog/web-platform-01-2026?hl=en&quot;&gt;New to the web platform in January&lt;/a&gt;&lt;br /&gt;
Rachel Andrew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.raymondcamden.com/2026/02/16/three-plug-n-play-css-libraries&quot;&gt;Three Plug-N-Play CSS Libraries&lt;/a&gt;&lt;br /&gt;
Raymond Camden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/distinguishing-components-and-utilities-in-tailwind/&quot;&gt;Distinguishing &quot;Components&quot; and &quot;Utilities&quot; in Tailwind&lt;/a&gt;&lt;br /&gt;
Zell Liew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.angular.dev/angular-21-internal-mechanics-aria-and-ai-powered-coding-eefc4b05ddb6&quot;&gt;Angular 21: Internal Mechanics, ARIA, and AI-Powered Coding!&lt;/a&gt;&lt;br /&gt;
Angular Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.postman.com/api-security-best-practices/&quot;&gt;API Security Best Practices: A Developer’s Guide to Protecting Your APIs&lt;/a&gt;&lt;br /&gt;
The Postman Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/potentially-coming-to-a-browser-near-you/&quot;&gt;Potentially Coming to a Browser&amp;nbsp;:near()&amp;nbsp;You&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/death-to-scroll-fade/&quot;&gt;Death to Scroll Fade!&lt;/a&gt;&lt;br /&gt;
Chris Coyier&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/tus-contenedores-no-son-tan-seguros-como-crees-estrategias-de-mitigacion-para-docker-y-kubernetes.aspx&quot;&gt;Tus contenedores no son tan seguros como crees: estrategias de mitigación para Docker y Kubernetes&lt;/a&gt;&lt;br /&gt;
CampusMVP&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/azure-sql/dear-copilot-azure-sql/&quot;&gt;Dear Copilot, can you help me with SQL?&lt;/a&gt;&lt;br /&gt;
Thiago Henrique da Silva&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/csharp-expressions-xaml-dotnet11-maui&quot;&gt;.NET 11 Preview for .NET MAUI: Simplify XAML with Inline C# Expressions&lt;/a&gt;&lt;br /&gt;
Sri Radhesh Nag Subash Sankar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/02/automatas-victorianos-gargantas-de.html&quot;&gt;Autómatas victorianos, gargantas de cuero y redes neuronales: Anatomía secreta de las máquinas parlantes&lt;/a&gt;&lt;br /&gt;
María Gómez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.techworld-with-milan.com/p/you-can-code-only-4-hours-per-day&quot;&gt;You can code only 4 hours per day. Here’s why.&lt;/a&gt;&lt;br /&gt;
Milan Milanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/saaspocalipsis-el-mercado-ya-ha-descontado-algo-que-a%C3%BAn-diaz-martin-nvove/&quot;&gt;SaaSpocalipsis: el mercado ya ha descontado algo que muchos desarrolladores aún no han interiorizado&lt;/a&gt;&lt;br /&gt;
Alberto Díaz Martín&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/8082408171120713411/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/8082408171120713411' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/8082408171120713411'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/8082408171120713411'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/02/enlaces-interesantes-638.html' title='Enlaces interesantes 638'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnBSoO56QpMdSUXvcqk0rZQG60wBf1ejaNFvWhfcUVcoQCr35QSyybDbmP_y1IDqPBIyXdfurMLDjwWojchEFmkqL_vt1YZiSzgXuWCVF_sVQwtuNopb5fRtMOfy7AmjOQabv2wxxJQBjc78akbnp1EP2LB3Qk7yG0cLP6iMaUtsjRSLk9YgP-KA/s72-c/flow-programming.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-2501636360588131926</id><published>2026-02-17T08:05:00.002+01:00</published><updated>2026-02-17T08:05:00.116+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><category scheme="http://www.blogger.com/atom/ns#" term="lambdas"/><category scheme="http://www.blogger.com/atom/ns#" term="trucos"/><title type='text'>Lambdas estáticas en C#: cómo y cuándo usarlas</title><content type='html'>&lt;img alt=&quot;Una lambda petrificada&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5XgeOfMHYNGjthWsJGe1DHPOlWOAy0c-OHBq1h7C-q4d1x1_2YWLQIMIjfAr2j8Zm5GbagCW4JCJMnEW4q5xiV91XwbMjoL2Jetoe3ZY9klyaucZIoTuPfFDclbWEo-wxDBWBbAy1lVfAw5lrkHyW93Vm4QdYDln2lU9dQe3nmklTvb1_5kw9_g/s800/static-lambda.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;No es algo que se utilice habitualmente, y a veces incluso es un detalle desconocido por los desarrolladores, pero &lt;strong&gt;las funciones &lt;em&gt;lambda&lt;/em&gt; de C# pueden ser estáticas&lt;/strong&gt;. 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.&lt;/p&gt;
&lt;p&gt;De hecho, el uso de &lt;em&gt;lambdas&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;En este post vamos a ver qué son las &lt;em&gt;lambdas&lt;/em&gt; estáticas, cómo se implementan y cuándo y por qué deberíamos usarlas.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Lambdas estáticas&lt;/h2&gt;
&lt;p&gt;Al igual que ocurre con los métodos o funciones en C#, las funciones &lt;em&gt;lambda&lt;/em&gt; pueden ser estáticas, es decir, pueden &lt;strong&gt;vivir fuera del contexto de una instancia&lt;/strong&gt; de clase, y se implementan simplemente añadiendo la palabra clave &lt;code&gt;static&lt;/code&gt; delante de la definición de la &lt;em&gt;lambda&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;var suma = static (x, y) =&amp;gt; x + y;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto mismo podemos verlo en escenarios más complejos, como en consultas LINQ sobre colecciones u orígenes de datos, ya sea usándolas &lt;a href=&quot;https://www.variablenotfound.com/2009/03/c-desmitificando-las-expresiones-lambda_29.html&quot;&gt;como delegados&lt;/a&gt; o bien &lt;a href=&quot;https://www.variablenotfound.com/2009/03/c-desmitificando-las-expresiones-lambda_2829.html&quot;&gt;como árboles de expresión&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;int[] nums = [1, 2, 3, 4, 5];
var sum = nums.Where(static x =&amp;gt; x % 2 == 0).Sum(); // Suma los pares
Console.WriteLine(sum); // Imprime 6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En cualquier caso, la declaración de una &lt;em&gt;lambda&lt;/em&gt; como estática hace que aparezcan ciertas restricciones en su implementación. En primer lugar, las &lt;em&gt;lambdas&lt;/em&gt; estáticas &lt;strong&gt;no pueden capturar variables de instancia&lt;/strong&gt;, pues &lt;strong&gt;no tienen acceso a &lt;code&gt;this&lt;/code&gt; ni a las variables o métodos de instancia&lt;/strong&gt; de la clase en la que se definen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tampoco pueden capturar variables locales ni parámetros&lt;/strong&gt; del método que las contiene, a menos que se pasen explícitamente como argumentos.&lt;/p&gt;
&lt;p&gt;En otras palabras, &lt;strong&gt;deben ser funciones puras, que dependen únicamente de sus parámetros de entrada&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Esto, que a priori puede parecer una limitación, en realidad es una de las principales ventajas de las &lt;em&gt;lambdas&lt;/em&gt; estáticas, ya que, al no depender de ningún factor externo, su comportamiento será más predecible y fácil de implementar y depurar.&lt;/p&gt;
&lt;p&gt;Observa por ejemplo el siguiente caso, en el que la &lt;em&gt;lambda&lt;/em&gt; &lt;code&gt;duplicate&lt;/code&gt; captura la variable &lt;code&gt;factor&lt;/code&gt; del contexto que la contiene, y hace que su valor dependa de ella:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;int factor = 2;
var duplicate = (int x) =&amp;gt; x * factor; // No captura el valor de &#39;factor&#39;, 
                                       // sino la referencia a la variable

Console.WriteLine(duplicate(2)); // Imprime 4
factor = 3;
Console.WriteLine(duplicate(2)); // Imprime 6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fíjate que aunque llamamos a la &lt;em&gt;lambda&lt;/em&gt; &lt;code&gt;duplicate&lt;/code&gt; con el mismo parámetro, el resultado es diferente porque la variable &lt;code&gt;factor&lt;/code&gt; ha cambiado su valor en el segundo caso.&lt;/p&gt;
&lt;p&gt;Esto puede provocar errores difíciles de detectar y depurar. De hecho, el entorno de desarrollo (IDE) nos avisa de que la &lt;em&gt;lambda&lt;/em&gt; está capturando una variable del contexto cuyo valor es modificado, por lo que puede provocar efectos inesperados:&lt;/p&gt;
&lt;p&gt;
  
  &lt;img alt=&quot;Captura de variable en lambda&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglnkdSn-kSeTLs-O5vigFwILWN7RZWIE0b7msafA_m_5L4V-aKxZAB5kp90G6igOal48sA-XfBrKKimtgvwcVl7x9PhuqpOWryIQxKnbtDjKFMsbjEZJ2slnOqPf7ZQIjTp0l0l_F10mc-ez9ipLuzMxeN8d2E0ENf97MekFOKMQRCNTDzNb3R5A/s928/warning-capture.png&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;Al convertir la &lt;em&gt;lambda&lt;/em&gt; en estática, el compilador nos avisará de que no puede capturar variables del contexto, por lo que nos veremos obligados a usar constantes o bien a pasar los valores como parámetros; en cualquiera de los dos casos, &lt;strong&gt;la &lt;em&gt;lambda&lt;/em&gt; será siempre una función pura y su comportamiento será totalmente predecible&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;int factor = 2;
var duplicate = static (int x) =&amp;gt; x * factor; // Error CS8820: A static anonymous function
                                              // cannot contain a reference to &#39;factor&#39;.

var duplicate = static (int x) =&amp;gt; x * 2; // Correcto, factor es un valor constante
var multiply = static (int x, int factor) =&amp;gt; x * factor; // Correcto, factor se pasa como parámetro
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pero además, es importante saber que, cuando se invoca una &lt;em&gt;lambda&lt;/em&gt; que captura alguna referencia externa, el compilador genera un objeto de cierre (o &lt;em&gt;closure&lt;/em&gt;) para almacenar esas referencias, lo que implica una sobrecarga adicional en tiempo de ejecución y un mayor consumo de memoria.&lt;/p&gt;
&lt;p&gt;Por tanto, cuando usemos &lt;em&gt;lambdas&lt;/em&gt; estáticas, además de tener un código más seguro y determinista, podemos estar seguros de que no se generará ningún objeto de cierre, por lo que el rendimiento y consumo de memoria serán óptimos.&lt;/p&gt;
&lt;h2&gt;Benchmarks&lt;/h2&gt;
&lt;p&gt;El impacto del uso de objetos de cierre en el rendimiento y consumo de memoria puede ser significativo en escenarios donde se usan muchas &lt;em&gt;lambdas&lt;/em&gt; que capturan referencias, como en bucles o en operaciones con colecciones. Esto puede verse en el siguiente resultado de un &lt;em&gt;benchmark&lt;/em&gt;, donde comparamos cuatro escenarios diferentes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;una &lt;em&gt;lambda&lt;/em&gt; normal sin capturas,&lt;/li&gt;
&lt;li&gt;otra &lt;em&gt;lambda&lt;/em&gt; normal que captura una propiedad de instancia,&lt;/li&gt;
&lt;li&gt;una tercera que captura una variable local,&lt;/li&gt;
&lt;li&gt;y una &lt;em&gt;lambda&lt;/em&gt; estática sin capturas.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;| Method                       | Mean      | Error     | StdDev    | Median    | Gen0   | Allocated |
|----------------------------- |----------:|----------:|----------:|----------:|-------:|----------:|
| NormalLambdaWithNoCapture    | 0.0031 ns | 0.0033 ns | 0.0027 ns | 0.0023 ns |      - |         - |
| NormalLambdaWithCapture      | 4.8063 ns | 0.0654 ns | 0.0612 ns | 4.8035 ns | 0.0077 |      64 B |
| NormalLambdaWithLocalCapture | 7.0980 ns | 0.1036 ns | 0.0969 ns | 7.0805 ns | 0.0105 |      88 B |
| StaticLambda                 | 0.0039 ns | 0.0035 ns | 0.0033 ns | 0.0046 ns |      - |         - |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lo primero que llama la atención es que las &lt;em&gt;lambdas&lt;/em&gt; normales que capturan referencias (ya sean de instancia o locales) son muchísimo más lentas que las que no capturan nada, y además generan consumo de memoria (reservan memoria en el &lt;em&gt;heap&lt;/em&gt; y provocan recolecciones de basura).&lt;/p&gt;
&lt;p&gt;Las &lt;em&gt;lambdas&lt;/em&gt; que no capturan referencias prácticamente consiguen el mismo rendimiento, con una diferencia inapreciable. Y, eso sí, ninguna de las dos genera sobrecarga ni consumo de memoria.&lt;/p&gt;
&lt;h2&gt;Entonces, ¿cuándo deberíamos usar lambdas estáticas?&lt;/h2&gt;
&lt;p&gt;En general, salvo que necesitemos capturar referencias del contexto, será conveniente &lt;b&gt;utilizar &lt;em&gt;lambdas&lt;/em&gt; estáticas siempre&lt;/b&gt;, ya que nos aseguramos de que nuestro código es más seguro y predecible, sin perder en eficiencia o consumo de memoria.&lt;/p&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/2501636360588131926/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/2501636360588131926' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/2501636360588131926'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/2501636360588131926'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/02/lambdas-estaticas-en-c-como-y-cuando.html' title='Lambdas estáticas en C#: cómo y cuándo usarlas'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5XgeOfMHYNGjthWsJGe1DHPOlWOAy0c-OHBq1h7C-q4d1x1_2YWLQIMIjfAr2j8Zm5GbagCW4JCJMnEW4q5xiV91XwbMjoL2Jetoe3ZY9klyaucZIoTuPfFDclbWEo-wxDBWBbAy1lVfAw5lrkHyW93Vm4QdYDln2lU9dQe3nmklTvb1_5kw9_g/s72-c/static-lambda.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-7700779729150897977</id><published>2026-02-16T08:05:00.057+01:00</published><updated>2026-02-16T08:31:17.412+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 637</title><content type='html'>&lt;img alt=&quot;Desarrollador senior recordando cómo era programar cuarenta años atrás&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY3kHFgv4iJMziP_hWMBW9vYDtjPlKPFIh90aGdau-C6kSl9Rv__dcbdRuoEuo1HXMwtM29bL5oCcr611I2UJzQxDgf1zjAt7IOtBwxNOVbfUljfgqWpntoSnddZQ6peeQXlGa8Bv6SGw93dwlqgly3SqfADiVNugNyHwfsh-Zf89_6TgMnJrZeg/s800/ya-no-es-lo-mismo.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Ha llegado la &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-11-preview-1/&quot; target=&quot;_blank&quot;&gt;primera preview de .NET 11&lt;/a&gt;, con un buen puñado de novedades en el &lt;i&gt;runtime&lt;/i&gt;, 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.&lt;/p&gt;
&lt;p&gt;Tenemos un doblete de Ricardo Peres sobre Entity Framework Core. Primero, profundiza en la &lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/02/modern-mapping-with-ef-core.html&quot; target=&quot;_blank&quot;&gt;forma de mapear distintos tipos de relaciones y las novedades que se han introducido en las últimas versiones&lt;/a&gt; para facilitar esta tarea, y luego nos habla sobre la &lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/02/ef-core-state-validation.html&quot; target=&quot;_blank&quot;&gt;validación de estado de entidades&lt;/a&gt; en este framework.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.campusmvp.es/recursos/post/github-copilot-cuando-usar-los-modos-ask-edit-agent-y-plan-segun-la-tarea.aspx&quot; target=&quot;_blank&quot;&gt;nos lo explica en este artículo&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Y siguiendo con dobletes, el mismo autor nos trae un interesante artículo analizando cómo determinadas &lt;a href=&quot;https://www.campusmvp.es/recursos/post/el-sesgo-de-negatividad-de-reddit-y-como-puede-influir-en-tu-trabajo-como-programador.aspx&quot; target=&quot;_blank&quot;&gt;narrativas negativas amplificadas en redes sociales pueden generar frustración y malas decisiones&lt;/a&gt; en desarrolladores júnior, y propone estrategias prácticas para reconocer ese sesgo y protegerse de él.&lt;/p&gt;
&lt;p&gt;Por último, James Randall comparte &lt;a href=&quot;https://www.jamesdrandall.com/posts/the_thing_i_loved_has_changed/&quot; target=&quot;_blank&quot;&gt;cómo ha cambiado la programación en 40 años y cómo ha cambiado también su relación con ella&lt;/a&gt;. Si tienes ya unos añitos, probablemente te sentirás identificado.&lt;/p&gt;
&lt;p&gt;El resto de enlaces, a continuación.&lt;/p&gt;

&lt;h1&gt;Por si te lo perdiste...&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/02/invalidar-el-contenido-cacheado-por-el.html&quot;&gt;Invalidar el contenido cacheado por el tag helper &quot;cache&quot; de ASP.NET Core MVC&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2024/12/abrir-gmail-y-google-calendar-con-una.html&quot;&gt;Abrir Gmail y Google Calendar con una cuenta específica, y cómo anclarlos en la barra de tareas de Windows&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-11-preview-1/&quot;&gt;.NET 11 Preview 1 is now available!&lt;/a&gt;&lt;br /&gt;
.NET Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.developerro.com/2026/02/11/authentication-autorization/&quot;&gt;Autentication y Authorization en .NET&lt;/a&gt;&lt;br /&gt;
Fernando Escolar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/02/08/abstract-factory-vs-factory-method-pattern-in-c-key-differences-explained&quot;&gt;Abstract Factory vs Factory Method Pattern in C#: Key Differences Explained&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotnettips.wordpress.com/2026/02/08/boost-your-net-projects-with-spargine-global-phone-number-and-postal-code-validation-made-easy/&quot;&gt;Global Phone Number and Postal Code Validation Made&amp;nbsp;Easy&lt;/a&gt;&lt;br /&gt;
David McCarter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/pimplementing-strongly-typed-ids-in-net-for-safer-domain-models/&quot;&gt;Implementing strongly-typed IDs in .NET for safer domain models&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/how-to-start-a-new-dotnet-project-in-2026&quot;&gt;How to Start a New .NET Project in 2026&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/02/09/automatic-service-discovery-in-c-with-needlr-how-it-works&quot;&gt;Automatic Service Discovery in C# with Needlr: How It Works&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://minidump.net/writing-a-net-gc-in-c-part-7/&quot;&gt;Writing a .NET Garbage Collector in C# - Part 7: Marking handles&lt;/a&gt;&lt;br /&gt;
Kevin Gosse&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/tips-to-secure-asp-dotnet-core-apps&quot;&gt;ASP.NET Core Security Explained: Modern Authentication, Authorization, and JWT&lt;/a&gt;&lt;br /&gt;
Arulraj Aboorvasamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://damienbod.com/2026/02/09/isolate-the-swiyu-public-beta-management-apis-using-yarp/&quot;&gt;Isolate the swiyu Public Beta management APIs using&amp;nbsp;YARP&lt;/a&gt;&lt;br /&gt;
Damien Bowden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/secure-image-upload-in-blazor-rte-jwt&quot;&gt;Secure Image Uploads in Blazor Rich Text Editor Using JWT&lt;/a&gt;&lt;br /&gt;
Saravanan G.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/customizing-validation-messages-blazor-forms&quot;&gt;Customizing Validation Messages in Blazor Forms&lt;/a&gt;&lt;br /&gt;
Héctor Pérez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developersvoice.com/blog/csharp/mastering-asp-net-core-request-pipeline-patterns/&quot;&gt;Mastering the ASP.NET Core Request Pipeline: Middleware, Endpoint Filters, and Scalable API Architecture&lt;/a&gt;&lt;br /&gt;
Sudhir Mangla&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duendesoftware.com/blog/20260210-implementing-zero-trust-with-resource-isolation&quot;&gt;Implementing Zero Trust with Resource Isolation&lt;/a&gt;&lt;br /&gt;
Maarten Balliauw&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blazorise.com/news/release-notes/200&quot;&gt;Announcing Blazorise 2.0&lt;/a&gt;&lt;br /&gt;
Mladen Macanović&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/02/cloudflare-for-startups-hasta-250000.html&quot;&gt;Cloudflare for Startups: Hasta 250.000 USD en servicios para tu proyecto&lt;/a&gt;&lt;br /&gt;
Chema Alonso&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/azureobservabilityblog/announcing-application-insights-sdk-3-x-for-net/4493988&quot;&gt;Announcing Application Insights SDK 3.x for .NET&lt;/a&gt;&lt;br /&gt;
MattMC&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bravedeveloper.com/2026/01/15/cuando-usar-findasync-o-firstordefaultasync-en-ef-core/&quot;&gt;Cuando usar FindAsync o FirstOrDefaultAsync en EF Core&lt;/a&gt;&lt;br /&gt;
Gerson Azabache Martínez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/02/modern-mapping-with-ef-core.html&quot;&gt;Modern Mapping with EF Core&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://developmentwithadot.blogspot.com/2026/02/ef-core-state-validation.html&quot;&gt;EF Core State Validation&lt;/a&gt;&lt;br /&gt;
Ricardo Peres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-tutorials/how-leftjoin-rightjoin-work-ef-core-dotnet-10&quot;&gt;How LeftJoin and RightJoin Work in EF Core .NET 10&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tabsoverspaces.com/233960-entity-framework-core-10-provider-for-firebird-is-ready&quot;&gt;Entity Framework Core 10 provider for Firebird is ready&lt;/a&gt;&lt;br /&gt;
Jiří Činčura&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.sqlauthority.com/2026/02/09/sql-server-execution-plans-and-indexing-strategies-quick-guide/&quot;&gt;SQL SERVER – Execution Plans and Indexing Strategies – Quick Guide&lt;/a&gt;&lt;br /&gt;
Pinal Dave&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/modernizationbestpracticesblog/azure-sql%E2%80%99s-native-json-type-optimized-for-performance/4486952&quot;&gt;Azure SQL’s Native JSON Type: Optimized for Performance&lt;/a&gt;&lt;br /&gt;
Shrusti Kolsur&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/data-minimization-entity-framework/&quot;&gt;Stop Hoarding Personal Data in Entity Framework&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/02/haz-que-tus-custom-agents-sean-subagents-de-github-copilot/&quot;&gt;Haz que tus custom agents sean subagents de GitHub Copilot&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/foundry/dotnet-ai-skills-executor-azure-openai-mcp/&quot;&gt;Building an AI Skills Executor in .NET with Azure OpenAI&lt;/a&gt;&lt;br /&gt;
Rand Random&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jamiemaguire.net/index.php/2026/02/08/microsoft-agent-framework-exposing-an-existing-ai-agent-as-an-mcp-tool/&quot;&gt;Microsoft Agent Framework: Exposing an Existing AI Agent as an MCP Tool – Jamie Maguire&lt;/a&gt;&lt;br /&gt;
Jamie Maguire&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/es-ES/index/testing-ads-in-chatgpt/&quot;&gt;Testing ads in ChatGPT&lt;/a&gt;&lt;br /&gt;
OpenAI&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-beta/&quot;&gt;Announcing TypeScript 6.0 Beta&lt;/a&gt;&lt;br /&gt;
Daniel Rosenwasser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/trying-to-make-the-perfect-pie-chart-in-css/&quot;&gt;Trying to Make the Perfect Pie Chart in CSS&lt;/a&gt;&lt;br /&gt;
Juan Diego Rodríguez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mescius.com/blogs/what-to-expect-in-angular-22&quot;&gt;What to Expect in Angular 22&lt;/a&gt;&lt;br /&gt;
Kelly Vatter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/htmx-with-react-nextjs-server-driven-ui&quot;&gt;Integrating HTMX with React and Next.js for Dynamic HTML Updates&lt;/a&gt;&lt;br /&gt;
Satheeskumar S.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/open-and-render-docx-files-with-react&quot;&gt;How to Open and Render DOCX Files in the Browser with React&lt;/a&gt;&lt;br /&gt;
Ramkumar Ravy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/approximating-contrast-color-with-other-css-features/&quot;&gt;Approximating contrast-color() With Other CSS Features&lt;/a&gt;&lt;br /&gt;
Kevin Hamer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/image-optimization-angular-applications&quot;&gt;Image Optimization in Angular Applications&lt;/a&gt;&lt;br /&gt;
Christian Nwamba&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/making-a-responsive-pyramidal-grid-with-modern-css/&quot;&gt;Making a Responsive Pyramidal Grid With Modern CSS&lt;/a&gt;&lt;br /&gt;
Temani Afif&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/github-copilot-cuando-usar-los-modos-ask-edit-agent-y-plan-segun-la-tarea.aspx&quot;&gt;GitHub Copilot: cuándo usar los modos Ask, Edit, Agent y Plan según la tarea&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.windowscentral.com/microsoft/windows-11/5-open-source-apps-everyone-should-use-on-windows-11&quot;&gt;5 open-source Windows 11 apps you didn&#39;t know you needed&lt;/a&gt;&lt;br /&gt;
Mauro Huculak&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.advancedinstaller.com/convert-html-to-exe.html&quot;&gt;How to Convert an HTML to an EXE file&lt;/a&gt;&lt;br /&gt;
Alex Marin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/github-copilot-testing-for-dotnet-available-in-visual-studio/&quot;&gt;GitHub Copilot Testing for .NET Brings AI-powered Unit Tests to Visual Studio 2026&lt;/a&gt;&lt;br /&gt;
McKenna Barlow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/unlock-language-specific-rich-symbol-context-using-new-find_symbol-tool/&quot;&gt;Unlock language-specific rich symbol context using new find_symbol tool&lt;/a&gt;&lt;br /&gt;
Mike Gine&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/build-supply-chain-dashboard-in-maui&quot;&gt;Visualizing Supply Chain Metrics in .NET MAUI with Charts and Gauges&lt;/a&gt;&lt;br /&gt;
Hariram Subramanian&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/best-practices-for-responsive-maui-app&quot;&gt;Why Your .NET MAUI Layout Breaks Across Devices and How to Fix It&lt;/a&gt;&lt;br /&gt;
Anandh Ganesan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/exploring-compiled-bindings-net-maui&quot;&gt;Exploring Compiled Bindings in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/support-ticket-dashboard-in-maui-grid&quot;&gt;Building a Support Ticket Dashborad with .NET MAUI DataGrid&lt;/a&gt;&lt;br /&gt;
Farjana Parveen&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/el-sesgo-de-negatividad-de-reddit-y-como-puede-influir-en-tu-trabajo-como-programador.aspx&quot;&gt;Desarrollador junior y frustrado con tu trabajo: cómo evitar el sesgo de negatividad online&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jamesdrandall.com/posts/the_thing_i_loved_has_changed/&quot;&gt;I Started Programming When I Was 7. I&#39;m 50 Now, and the Thing I Loved Has Changed&lt;/a&gt;&lt;br /&gt;
James Randall&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;



Publicado en: &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;www.variablenotfound.com&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/7700779729150897977/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/7700779729150897977' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7700779729150897977'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7700779729150897977'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/02/enlaces-interesantes-637.html' title='Enlaces interesantes 637'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY3kHFgv4iJMziP_hWMBW9vYDtjPlKPFIh90aGdau-C6kSl9Rv__dcbdRuoEuo1HXMwtM29bL5oCcr611I2UJzQxDgf1zjAt7IOtBwxNOVbfUljfgqWpntoSnddZQ6peeQXlGa8Bv6SGw93dwlqgly3SqfADiVNugNyHwfsh-Zf89_6TgMnJrZeg/s72-c/ya-no-es-lo-mismo.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-6422439800951149229</id><published>2026-02-09T08:02:00.022+01:00</published><updated>2026-02-09T08:02:00.110+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 636</title><content type='html'>&lt;img alt=&quot;Agente OpenClaw realizando distintas tareas mientras el usuario hace crucigramas&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8cg0uer7klF2TNT6WLhVzOJDUjMGEYtgEkpFigrDF4oGO5ztpW_9nU3O-L8EhRhRbotRXEBCqaNJeUJsq2LyDCvAztTIqQ0OzoR0SXtQ4NGVtC2egjxehwV6SfPx_qGjsyif40lcv2VK1HiDyyRm747V8fOT8nJabUg0AFEwCXTe5DtbySVEf9g/s800/openclaw.jpg&quot; width=&quot;100%&quot; /&gt;



&lt;p&gt;En los enlaces interesantes de esta semana, creo que vale la pena destacar &lt;a href=&quot;https://openclaw.ai/blog/introducing-openclaw&quot; target=&quot;_blank&quot;&gt;el post de Peter Steinberger anunciando OpenClaw&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;También, gracias a Kevin W. Griffin, esta semana he descubierto &lt;a href=&quot;https://consultwithgriff.com/sql-pagination-count-over-trick/&quot; target=&quot;_blank&quot;&gt;la función COUNT(*) OVER() de SQL Server&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;Teresa Torres, por su parte, ha publicado un post muy interesante explicando &lt;a href=&quot;https://www.producttalk.org/how-does-chatgpt-work/&quot; target=&quot;_blank&quot;&gt;cómo funciona ChatGPT&lt;/a&gt;, con un lenguaje bastante más accesible para humanos &quot;normales&quot; que lo que solemos encontrar por la red.&lt;/p&gt;
&lt;p&gt;Por último, David Grace nos recuerda que &lt;a href=&quot;https://www.roundthecode.com/dotnet-blog/are-exceptions-exposing-vulnerabilities-dotnet-app&quot; target=&quot;_blank&quot;&gt;nuestras excepciones pueden exponer información sensible&lt;/a&gt; que podría ser utilizada por algún desalmado, y cómo evitarlo utilizando herramientas proporcionadas por ASPNET Core.&lt;/p&gt;
&lt;p&gt;El resto de enlaces, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2024/11/el-codigo-fuente-de-net-muy-mano.html&quot;&gt;El código fuente de .NET muy a mano: source.dot.net&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/02/registro-y-obtencion-de-multiples.html&quot;&gt;Registro y obtención de múltiples implementaciones de servicios en ASP.NET Core, y un caso práctico&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/creating-strongly-typed-metics-with-a-source-generator/&quot;&gt;Exploring the (underwhelming) System.Diagnostics.Metrics source generators&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devleader.ca/2026/02/03/automatic-dependency-injection-in-c-the-complete-guide-to-needlr&quot;&gt;Automatic Dependency Injection in C#: The Complete Guide to Needlr&lt;/a&gt;&lt;br /&gt;
Nick Cosentino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-framework-3-5-moves-to-standalone-deployment-in-new-versions-of-windows/&quot;&gt;.NET Framework 3.5 Moves to Standalone Deployment in new versions of Windows&lt;/a&gt;&lt;br /&gt;
Tara Overfield &amp;amp; Brett Lopez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/cryptography-dotnet-data-protection/&quot;&gt;Your Encryption Is Broken — .NET Data Protection Done Right&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.west-wind.com/posts/2026/Feb/04/Reliably-Refreshing-the-WebView2-Control&quot;&gt;Reliably Refreshing the WebView2 Control&lt;/a&gt;&lt;br /&gt;
Rick Strahl&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2&quot;&gt;Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)&lt;/a&gt;&lt;br /&gt;
Steve Gordon&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor / Aspire&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://damienbod.com/2026/02/02/use-client-assertions-in-asp-net-core-using-openid-connect-oauth-dpop-and-oauth-par/&quot;&gt;Use client assertions in ASP.NET Core using OpenID Connect, OAuth DPoP and OAuth&amp;nbsp;PAR&lt;/a&gt;&lt;br /&gt;
Damien Bowden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/ai-powered-smart-textarea-aspdotnetcore&quot;&gt;AI-Powered Smart TextArea for ASP.NET Core: Smarter Typing with Intelligent Autocompletion&lt;/a&gt;&lt;br /&gt;
Arun Kumar Chandrakesan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/getting-started-with-dotnet-aspire-13-building-and-deploying-an-app&quot;&gt;Getting Started With .NET Aspire 13: Building and Deploying an App With PostgreSQL, Redis, and Docker Compose&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-blog/are-exceptions-exposing-vulnerabilities-dotnet-app&quot;&gt;Are exceptions exposing vulnerabilities in your .NET App?&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/aspire/securing-dotnet-aspire-apps-with-microsoft-entra-id/&quot;&gt;Securing Aspire Apps with Microsoft Entra ID&lt;/a&gt;&lt;br /&gt;
Jean-Marc Prieur&lt;span&gt;&lt;!--more--&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/secrets-management-azure-keyvault/&quot;&gt;Your appsettings.json Is a Compliance Violation&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeopinion.com/your-idempotent-code-is-lying-to-you/&quot;&gt;Your Idempotent Code Is Lying To You&lt;/a&gt;&lt;br /&gt;
Derek Comartin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://amandeepsp.github.io/blog/hnsw/&quot;&gt;Hierarchical Navigable Small Worlds&lt;/a&gt;&lt;br /&gt;
Amandeep Singh&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://consultwithgriff.com/sql-pagination-count-over-trick/&quot;&gt;SQL Server Pagination with COUNT(*) OVER() Window Function&lt;/a&gt;&lt;br /&gt;
Kevin Griffin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.brentozar.com/archive/2026/02/i-just-dont-understand-why-you-dont-update-ssms/&quot;&gt;I Just Don’t Understand Why You Don’t Update SSMS&lt;/a&gt;&lt;br /&gt;
Brent Ozar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/11602/sql-concatenate-string-using-double-pipe/&quot;&gt;SQL Concatenate String using Double Pipe (||) Operator in SQL Server 2025&lt;/a&gt;&lt;br /&gt;
Rajendra Gupta&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/azure-sql/soft-delete-in-azure-sql/&quot;&gt;Enable Soft Delete in Azure SQL&lt;/a&gt;&lt;br /&gt;
Jerry Nixon&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/02/%f0%9f%94%8c-mcp-server-como-proxy-de-otro-mcp-server/&quot;&gt;MCP Server como Proxy de otro MCP Server&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/es-ES/index/introducing-the-codex-app/&quot;&gt;Presentamos la aplicación Codex&lt;/a&gt;&lt;br /&gt;
OpenAI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/news/claude-opus-4-6&quot;&gt;Claude Opus 4.6&lt;/a&gt;&lt;br /&gt;
Anthropic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openclaw.ai/blog/introducing-openclaw&quot;&gt;Introducing OpenClaw&lt;/a&gt;&lt;br /&gt;
Peter Steinberger&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/openclaw-full-tutorial-for-beginners/&quot;&gt;OpenClaw Full Tutorial for Beginners&lt;/a&gt;&lt;br /&gt;
Beau Carnes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/02/02/linear-regression-with-pseudo-inverse-training-using-javascript.aspx&quot;&gt;Linear Regression with Pseudo-Inverse Training Using JavaScript&lt;/a&gt;&lt;br /&gt;
James McCaffrey&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.producttalk.org/how-does-chatgpt-work/&quot;&gt;How Does ChatGPT Work? A Guide for the Rest of Us&lt;/a&gt;&lt;br /&gt;
Teresa Torres&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript / UX&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/incremental-hydration-in-angular-apps&quot;&gt;Incremental Hydration in Angular: Build SSR Apps That Feel Instantly Interactive&lt;/a&gt;&lt;br /&gt;
Ankit Sharma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/build-a-pdf-viewer-editor-in-angular&quot;&gt;Build a Full-Featured PDF Editor in Angular for Modern Web Apps&lt;/a&gt;&lt;br /&gt;
Arun Kumar Chandrakesan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/02/combobox-vs-multiselect-vs-listbox/&quot;&gt;Combobox vs. Multiselect vs. Listbox: How To Choose The Right One&lt;/a&gt;&lt;br /&gt;
Vitaly Friedman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cassidoo.co/post/css-corner-shape/&quot;&gt;Making interesting borders with CSS corner-shape&lt;/a&gt;&lt;br /&gt;
Peter Ritchie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/react-basics-memoization-react&quot;&gt;React Basics: Memoization in React&lt;/a&gt;&lt;br /&gt;
David Adeneye Abiodun&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/css-bar-charts-using-modern-functions/&quot;&gt;CSS Bar Charts Using Modern Functions&lt;/a&gt;&lt;br /&gt;
Preethi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/vue-basics-comprehensive-guide-vue-3-directives&quot;&gt;Vue Basics: A Comprehensive Guide to Vue 3 Directives&lt;/a&gt;&lt;br /&gt;
David Adeneye Abiodun&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/02/css-scope-alternative-naming-conventions/&quot;&gt;CSS @scope: An Alternative To Naming Conventions And Heavy Abstractions&lt;/a&gt;&lt;br /&gt;
Blake Lundquist&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/why-your-ui-wont-update-debugging-stale-data-and-caching-in-react-apps/&quot;&gt;Why Your UI Won’t Update: Debugging Stale Data and Caching in React Apps&lt;/a&gt;&lt;br /&gt;
Oluwadamisi Samuel&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;No-Hassle Visual Studio Code Theming: &lt;a href=&quot;https://css-tricks.com/no-hassle-visual-studio-code-theming-building-an-extension/&quot;&gt;Building an Extension&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://css-tricks.com/no-hassle-visual-code-theming-publishing-an-extension/&quot;&gt;Publishing an Extension&lt;/a&gt;&lt;br /&gt;
Zell Liew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/roadmap-for-ai-in-visual-studio-february/&quot;&gt;Roadmap for AI in Visual Studio (February)&lt;/a&gt;&lt;br /&gt;
Rhea Patel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/winget-configuration-set-up-your-dev-machine-in-one-command&quot;&gt;WinGet Configuration: Set up your dev machine in one command&lt;/a&gt;&lt;br /&gt;
Rob Bernstein&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codetraveler.io/2026/01/29/introducing-bindable-property-source-generators/&quot;&gt;Introducing Bindable Property Source Generators&lt;/a&gt;&lt;br /&gt;
Brandon Minnick&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/maui-combobox-json-rest-api&quot;&gt;Loading Dynamic Data into a .NET MAUI ComboBox with JSON and REST APIs&lt;/a&gt;&lt;br /&gt;
Sudarsan Muthuselvan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/replicating-valentine-inspired-login-ui-net-maui&quot;&gt;Replicating a Valentine-Inspired Login UI in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/evolucion-de-los-puestos-de-trabajo-tecnologicos-en-espana-2022-2026.aspx&quot;&gt;Tendencias clave en puestos de trabajo tecnológicos en España (2022-2026)&lt;/a&gt;&lt;br /&gt;
CampusMVP&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.googleblog.com/introducing-the-developer-knowledge-api-and-mcp-server/&quot;&gt;Introducing the Google Developer Knowledge API and MCP Server&lt;/a&gt;&lt;br /&gt;
Jess Kuras&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/6422439800951149229/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/6422439800951149229' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/6422439800951149229'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/6422439800951149229'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/02/enlaces-interesantes-636.html' title='Enlaces interesantes 636'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8cg0uer7klF2TNT6WLhVzOJDUjMGEYtgEkpFigrDF4oGO5ztpW_9nU3O-L8EhRhRbotRXEBCqaNJeUJsq2LyDCvAztTIqQ0OzoR0SXtQ4NGVtC2egjxehwV6SfPx_qGjsyif40lcv2VK1HiDyyRm747V8fOT8nJabUg0AFEwCXTe5DtbySVEf9g/s72-c/openclaw.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-3590103656004345361</id><published>2026-02-03T08:05:00.001+01:00</published><updated>2026-02-03T08:05:00.118+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="buenas prácticas"/><category scheme="http://www.blogger.com/atom/ns#" term="recomendaciones"/><title type='text'>¿Cuántos parámetros son demasiados parámetros?</title><content type='html'>&lt;img alt=&quot;Un profesor en una pizarra mostrando funciones con distinto número de parámetros&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiscTryQJPQkC0QmeHY4bGVET8KVC_tTGz6DGOopBe_uCjobAUKVLNtKyNS1_Ivz2adncBWJSxIYq-kFmHvKl-dKT28Jpes9L75iipisLhEZPR9lEy4jyNsRFIhfiGFb2-06NXa_OmXTfmhvhMIk-vvnuXBhEsDNfsEmy4YfEH-Pt_76Ck5psHViw/s800/cuantos-parametros.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.variablenotfound.com/2008/05/qu-huele-tu-cdigo.html&quot;&gt;&lt;em&gt;code smell&lt;/em&gt;&lt;/a&gt; llamado &quot;Long Parameter List&quot; o &quot;Lista de Parámetros Larga&quot;, todo un clásico en el aromático arte de la programación ;)&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Los problemas de tener demasiados parámetros&lt;/h2&gt;
&lt;p&gt;Un método o función que recibe demasiados parámetros se considera generalmente un &lt;em&gt;code smell&lt;/em&gt;. No es un error en sí mismo, pero suele indicar que algo no está bien diseñado y que probablemente necesite una revisión o refactorización.&lt;/p&gt;
&lt;p&gt;El problema más evidente de tener demasiados parámetros es que automáticamente es &lt;strong&gt;más difícil de leer y entender&lt;/strong&gt;. Cada parámetro adicional añade complejidad y puede hacer que el propósito del método o función sea menos claro, lo que puede llevar a confusiones y errores al utilizarlo. También, &lt;strong&gt;el código será más extenso&lt;/strong&gt;, lo que puede extender el aroma a otros &lt;em&gt;smells&lt;/em&gt; como &lt;a href=&quot;https://luzkan.github.io/smells/long-method&quot;&gt;Long Method&lt;/a&gt;, &lt;a href=&quot;https://luzkan.github.io/smells/primitive-obsession&quot;&gt;Primitive obsession&lt;/a&gt;, &lt;a href=&quot;https://luzkan.github.io/smells/feature-envy&quot;&gt;Feature Envy&lt;/a&gt; y más fragancias desagradables.&lt;/p&gt;
&lt;p&gt;Además, si los parámetros son de tipos similares o tienen nombres poco descriptivos, es fácil que al invocar la función &lt;strong&gt;se ordenen de forma incorrecta&lt;/strong&gt;, lo que en muchos casos puede provocar errores difíciles de detectar y corregir.&lt;/p&gt;
&lt;p&gt;Y por supuesto, puede generar &lt;strong&gt;problemas de mantenimiento y escalabilidad&lt;/strong&gt; del código. Si un método o función tiene muchos parámetros, cualquier cambio en su firma (añadir, eliminar o modificar parámetros) puede requerir cambios en múltiples ubicaciones, lo que aumenta la complejidad y el riesgo de introducir nuevos errores.&lt;/p&gt;
&lt;p&gt;Pero también tiene implicaciones en el diseño de nuestro software. Usar demasiados parámetros puede ser un indicativo de que estamos &lt;strong&gt;violando el principio de responsabilidad única&lt;/strong&gt; (SRP, por sus siglas en inglés), lo que significa que está haciendo demasiadas cosas a la vez y debería ser dividido en métodos más pequeños y específicos. Podría indicar igualmente una &lt;strong&gt;baja cohesión&lt;/strong&gt;, porque es posible que los parámetros no estén relacionados entre sí y el ámbito del método sea demasiado amplio.&lt;/p&gt;
&lt;h2&gt;Pero, ¿cuántos parámetros son demasiados?&lt;/h2&gt;
&lt;p&gt;Como comentaba algo más arriba, no existe una respuesta única y definitiva a esta pregunta, pero sí hay algunas recomendaciones generales que pueden servirnos de guía.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://es.wikipedia.org/wiki/Robert_C._Martin&quot;&gt;Robert C. Martin&lt;/a&gt;, también conocido como &quot;Uncle Bob&quot;, sugiere que &lt;strong&gt;el número ideal de parámetros es cero&lt;/strong&gt;. Está claro, si un método no recibe ningún parámetro, no dependerá de ningún dato externo, por lo que no existirá código de validación, ni transformaciones de datos, ni la lógica dependerá de ellos. En definitiva, el método será más simple y directo y, a lo sumo, podrá operar con datos internos de su objeto o valores constantes; el código será más conciso, fácil de leer y entender. Todo ventajas 😉&lt;/p&gt;
&lt;p&gt;Sin embargo, en el mundo real es un objetivo difícil de alcanzar, por lo que en la mayoría de escenarios, que nuestros métodos o funciones no tengan parámetros es más una aspiración teórica que otra cosa.&lt;/p&gt;
&lt;p&gt;A partir de ese límite ideal, está claro que conforme va creciendo el número de parámetros, la complejidad del método también aumenta, y con ella la dificultad para entenderlo y mantenerlo. En su clásico libro &lt;a href=&quot;https://archive.org/details/cleancodehandboo0000unse&quot;&gt;Clean Code&lt;/a&gt;, Martin dice que &lt;strong&gt;usar más de tres parámetros debería requerir una justificación bien argumentada&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En general, la comunidad de desarrolladores está más o menos de acuerdo en que &lt;strong&gt;el ideal es que un método o función no reciba más de 3 o 4 parámetros&lt;/strong&gt;. A partir de ahí, el código comienza a ser difícil de leer y mantener y es cuando se empieza a considerar que estamos ante un &quot;code smell&quot; que puede traernos problemas.&lt;/p&gt;
&lt;p&gt;Steve McConnell, en su libro &quot;Code Complete&quot;, establece que &lt;strong&gt;el máximo número de parámetros debería rondar los siete&lt;/strong&gt;, basándose en el número mágico de la psicología cognitiva, propuesto por George A. Miller en 1956, que sugiere que el número de elementos que una persona puede retener en su memoria a corto plazo es de aproximadamente siete (más o menos dos).&lt;/p&gt;
&lt;p&gt;Por tanto, la cosa queda así:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Número de parámetros&lt;/th&gt;
&lt;th&gt;Comentario&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Ideal, aunque poco probable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1-3&lt;/td&gt;
&lt;td&gt;Bien, fácil de entender y mantener&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4-7&lt;/td&gt;
&lt;td&gt;Sólo en casos justificados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8+&lt;/td&gt;
&lt;td&gt;❌ Evitar a toda costa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pero ojo, porque, como siempre, existen casos que pueden romper estas reglas generales. Un ejemplo clásico podría ser una función como la siguiente:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public int SumNineNumbers(
    int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9) 
{
    return n1 + n2 + n3 + n4 + n5 + n6 + n7 + n8 + n9;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si su misión es realizar una acción concreta que requiere un determinado número de valores de entrada, ¿sería incorrecto definirla con nueve parámetros? ¿O es lo que esperaríamos, dado el nombre de la propia función? En mi opinión, en este caso estaría totalmente justificado; cualquier refactorización para reducir el número de parámetros sería introducir una complejidad innecesaria.&lt;/p&gt;
&lt;h2&gt;¿Y qué alternativas tenemos?&lt;/h2&gt;
&lt;p&gt;Cuando ya estamos ante un método o función que define o va a definir demasiados parámetros, es importante detenernos a pensar cómo podemos mejorarlo.&lt;/p&gt;
&lt;p&gt;En primer lugar, debemos &lt;strong&gt;preguntarnos por qué nuestro código necesita tantos datos de entrada&lt;/strong&gt;. ¿Estamos haciendo quizás demasiadas cosas en el mismo método? ¿Tiene demasiadas dependencias? Si es así, es posible que estemos violando el principio de responsabilidad única (SRP) y deberíamos considerar dividirlo en varios más pequeños y específicos.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;// Refactorizar esto:
public void ProcessAndNotifyOrder(
    string orderId, string customerName, DateTime orderDate, 
    string notificationEmail, string notificationMessage)
{
    // Lógica para procesar el pedido
    // Lógica para notificar al cliente
}

// A esto:
public void ProcessOrder(string orderId, string customerName, DateTime orderDate)
{
    // Lógica para procesar el pedido
}
public void NotifyCustomer(string notificationEmail, string notificationMessage)
{
    // Lógica para notificar al cliente
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pero si realmente necesitamos recibir todos esos argumentos, existen distintas técnicas que pueden ayudarnos a reducir el número de parámetros y evitar problemas.&lt;/p&gt;
&lt;p&gt;Por ejemplo, &lt;strong&gt;si estamos recibiendo siempre el resultado de haber usado un método, función o propiedad, quizás esa llamada debería realizarse desde dentro de nuestro propio código&lt;/strong&gt;, como se muestra a continuación:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;// Refactorizar esto:
public void Log(string message, string level, string source, DateTime now)
{
    // Lógica para registrar el mensaje
}

// A esto:
public void Log(string message, string level, string source)
{
    DateTime now = DateTime.Now; // Obtenemos el timestamp dentro del método
    // Lógica para registrar el mensaje
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;También, &lt;strong&gt;si nuestro método o función recibe parámetros booleanos, deberíamos considerar revisarlo&lt;/strong&gt;. Como vimos hace tiempo en el post &quot;&lt;a href=&quot;https://www.variablenotfound.com/2022/03/usar-booleanos-si-no-veces.html&quot;&gt;¿Usar booleanos? ¿Sí, no, a veces?&lt;/a&gt;&quot;, este tipo de parámetros suele introducir ambigüedad y confusión, ya que no siempre está claro qué significa cada valor. En su lugar, quizás podríamos usar dos funciones diferentes, cada una con un propósito claro y específico:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;// Refactorizar esto:
public void Log(string message, string level, string source, bool isError)
{
    // Lógica para registrar el mensaje
}

// A esto:
public void LogInfo(string message, string level, string source)
{
    // Lógica para registrar el mensaje
}
public void LogError(string message, string level, string source)
{
    // Lógica para registrar el mensaje
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Otra posibilidad, que seguro habréis visto con cierta frecuencia, es el caso de métodos que reciben argumentos procedentes de un mismo objeto. En estos casos, podríamos considerar &lt;b&gt;recibir el objeto completo&lt;/b&gt; en lugar de sus propiedades individuales:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Refactorizar esto:
public void ProcessOrder(
    string orderId, string customerName, string customerEmail, DateTime orderDate)
{
    // Lógica para procesar el pedido
}

// A esto:
public void ProcessOrder(Order order)
{
    // Lógica para procesar el pedido
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Otra solución bastante habitual es &lt;strong&gt;usar la refactorización conocida como &lt;a href=&quot;https://refactoring.com/catalog/introduceParameterObject.html&quot;&gt;Introduce Parameter Object&lt;/a&gt;&lt;/strong&gt;. Esta técnica consiste en agrupar varios parámetros relacionados en un único objeto, lo que reduce el número de parámetros y mejora la legibilidad del código.&lt;/p&gt;
&lt;p&gt;Por ejemplo, podemos ver el resultado de aplicar esta técnica en el siguiente código:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Refactorizar esto:
public Task&amp;lt;IEnumerable&amp;lt;Customer&amp;gt;&amp;gt; GetCustomersAsync(
    int pageNumber, int pageSize, string sortBy, string filter, bool includeInactive)
{
    // Lógica para obtener los clientes
}

// A esto:
public Task&amp;lt;IEnumerable&amp;lt;Customer&amp;gt;&amp;gt; GetCustomersAsync(CustomerQuery query)
{
    // Lógica para obtener los clientes
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aparte, si el objeto de parámetros es muy complejo, puede ser útil &lt;strong&gt;combinar este enfoque con el &lt;a href=&quot;https://es.wikipedia.org/wiki/Builder_(patr%C3%B3n_de_dise%C3%B1o)&quot;&gt;patrón Builder&lt;/a&gt;&lt;/strong&gt;, que permite construirlo paso a paso. Por ejemplo, podríamos tener un código como el siguiente:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Refactorizar esto:
var query = new CustomerQuery
{
    PageNumber = 1,
    PageSize = 20,
    SortBy = &quot;Name&quot;,
    IncludeInactive = false,
    IncludeOrders = false,
    IncludeAddresses = true
};
var customers = await GetCustomersAsync(query);

// A esto:
var query = new CustomerQueryBuilder()
    .WithPageNumber(1)
    .WithPageSize(20)
    .SortedByName()
    .IncludeAddresses()
    .Build();
var customers = await GetCustomersAsync(query);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;¡Espero que os haya resultado interesante!&lt;/p&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/3590103656004345361/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/3590103656004345361' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/3590103656004345361'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/3590103656004345361'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/02/cuantos-parametros-son-demasiados.html' title='¿Cuántos parámetros son demasiados parámetros?'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiscTryQJPQkC0QmeHY4bGVET8KVC_tTGz6DGOopBe_uCjobAUKVLNtKyNS1_Ivz2adncBWJSxIYq-kFmHvKl-dKT28Jpes9L75iipisLhEZPR9lEy4jyNsRFIhfiGFb2-06NXa_OmXTfmhvhMIk-vvnuXBhEsDNfsEmy4YfEH-Pt_76Ck5psHViw/s72-c/cuantos-parametros.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-7749817062724807075</id><published>2026-02-02T08:05:00.029+01:00</published><updated>2026-02-02T08:05:00.145+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 635</title><content type='html'>&lt;img alt=&quot;Enlaces interesantes&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioNKKwlH_UIMUUYydoGKsLjD1BdHD07ynUL_zws2V6tU2WnCTm4oNjqhLMyb3FFC2r51vRwTbh38sWICFyeMFVeatWdh2Lt9AEPrnBnRX_g9_7lcQ3QWuk8qZaYwg1siwVkKKIAFXjK-iLwbl4WTS9WZfvioNnPqYAuWEwB_hucOhfJ7xSVbMxVQ/s800/gurus.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;Aquí tenemos la colección de enlaces a contenidos interesantes que he recopilado a lo largo de la semana pasada 🙂&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.campusmvp.es/recursos/post/Hassabis-Amodei-Davos-2026.aspx&quot; target=&quot;_blank&quot;&gt;la llegada de la AGI y su impacto en el desarrollo de software y otras áreas&lt;/a&gt;. Muy interesante.&lt;/p&gt;
&lt;p&gt;Continuando con gurús, Anders Hejlsberg, el arquitecto detrás de C# y TypeScript, compartió en una entrevista reciente algunas &lt;a href=&quot;https://github.blog/developer-skills/programming-languages-and-frameworks/7-learnings-from-anders-hejlsberg-the-architect-behind-c-and-typescript/&quot; target=&quot;_blank&quot;&gt;lecciones aprendidas a lo largo de su carrera&lt;/a&gt;: retroalimentación temprana, renunciar a preferencias personales, colaboración abierta y muchas otras.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://elbraulio.net/posts/la-punta-del-iceberg&quot; target=&quot;_blank&quot;&gt;la punta del iceberg&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Volviendo a terrenos más técnicos, encontramos un artículo de Grant Riordan sobre &lt;a href=&quot;https://www.freecodecamp.org/news/how-to-implement-type-safe-unions-in-c-with-oneof/&quot; target=&quot;_blank&quot;&gt;cómo implementar uniones de tipos seguros en C#&lt;/a&gt; utilizando la biblioteca OneOf. Muy útil para quienes buscan mejorar la seguridad de tipos en sus aplicaciones.&lt;/p&gt;
&lt;p&gt;Y muy interesante también &lt;a href=&quot;https://github.com/CodingWithCalvin/VS-ProjectRenamifier&quot; target=&quot;_blank&quot;&gt;la extensión Renamifier para Visual Studio&lt;/a&gt;, creada por Calvin Allen, que permite renombrar proyectos de forma segura, evitando las tareas manuales y problemas habituales asociados con este proceso.&lt;/p&gt;
&lt;p&gt;El resto de artículos, a continuación.&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/02/la-interfaz-imiddleware-middlewares.html&quot;&gt;La interfaz IMiddleware: Middlewares tipados per request en ASP.NET Core&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2024/11/los-nuevos-metodos-linq-en-net-9.html&quot;&gt;Los nuevos métodos LINQ en .NET 9: CountBy(), AggregateBy() e Index()&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-blog/missed-these-12-csharp-features&quot;&gt;Missed these 12 new C# features?&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-to-implement-type-safe-unions-in-c-with-oneof/&quot;&gt;How to Implement Type Safe Unions in C# With OneOf&lt;/a&gt;&lt;br /&gt;
Grant Riordan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/01/passing-parameters-to-hosted-mcp-server.html&quot;&gt;Passing parameters to a hosted MCP Server in C#&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/creating-and-consuming-metrics-with-system-diagnostics-metrics-apis/&quot;&gt;Creating and consuming metrics with System.Diagnostics.Metrics APIs&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/microsoft-agent-framework-preview-ai&quot;&gt;Microsoft Agent Framework (Preview): AI Agent Development for .NET&lt;/a&gt;&lt;br /&gt;
Arulraj Aboorvasamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opensilver.net/announcements/3-3/&quot;&gt;Introducing OpenSilver 3.3: Blazor Components Now Run Directly Inside XAML Applications&lt;/a&gt;&lt;br /&gt;
OpenSilver Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-ai-essentials-the-core-building-blocks-explained/&quot;&gt;.NET AI Essentials - The Core Building Blocks Explained&lt;/a&gt;&lt;br /&gt;
Jeremy Likness&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elbruno.com/2026/01/28/building-an-mcp-app-with-c-a-color-picker-sample/&quot;&gt;Building an MCP App with C# – A Color Picker Sample&lt;/a&gt;&lt;br /&gt;
Bruno Capuano&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developersvoice.com/blog/dotnet/modern-internationalization-patterns-for-dotnet/&quot;&gt;Internationalization Architecture for Global .NET Applications&lt;/a&gt;&lt;br /&gt;
Sudhir Mangla&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes&quot;&gt;The Grand Mystery of the Missing 18 Bytes&lt;/a&gt;&lt;br /&gt;
Steve Gordon&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://damienbod.com/2026/01/26/force-step-up-authentication-in-web-applications/&quot;&gt;Force step up authentication in web&amp;nbsp;applications&lt;/a&gt;&lt;br /&gt;
Damien Bowden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/access-control-aspnet-core/&quot;&gt;Your [Authorize] Attribute Is Compliance Theater&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blazorise.com/blog/building-a-design-system-on-top-of-blazorise&quot;&gt;Building a Design System on Top of Blazorise&lt;/a&gt;&lt;br /&gt;
Mladen Macanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/new-in-net-10-and-c-14-multi-tenant-rate-limiting/&quot;&gt;New in .NET 10 and C# 14: Multi-Tenant Rate Limiting&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/getting-started-blazor-diagram-component&quot;&gt;Getting Started with the Blazor Diagram Component&lt;/a&gt;&lt;br /&gt;
Héctor Pérez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/audit-logging-azure-app-insights/&quot;&gt;Audit Logging That Survives Your Next Security Incident&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://timdeschryver.dev/blog/changing-how-aspnet-generates-openapi-schema-names&quot;&gt;Changing how ASP.NET generates OpenAPI schema names&lt;/a&gt;&lt;br /&gt;
Tim Deschryver&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Azure / Cloud&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.darifer.net/index.php/2026/01/25/que-novedades-nos-trae-azure-local-2601/&quot;&gt;¿Qué novedades nos trae Azure Local 2601?&lt;/a&gt;&lt;br /&gt;
David Rivera&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/01/dotnet-10-available-for-aws/&quot;&gt;.NET 10 Becomes Available on AWS Lambda as Managed Runtime and Base Image&lt;/a&gt;&lt;br /&gt;
Almir Vuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/appsonazureblog/minimum-usage-in-azure-app-testing/4490658&quot;&gt;Minimum Usage in Azure App Testing&lt;/a&gt;&lt;br /&gt;
Nikita Nallamothu&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/engineering/from-pixels-to-characters-the-engineering-behind-github-copilot-clis-animated-ascii-banner/&quot;&gt;From pixels to characters: The engineering behind GitHub Copilot CLI’s animated ASCII banner&lt;/a&gt;&lt;br /&gt;
Aaron Winston&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/best-practices-creating-user-friendly-data-grids&quot;&gt;Best Practices for Creating User-Friendly Data Grids&lt;/a&gt;&lt;br /&gt;
Suzanne Scacca&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.woodruff.dev/patterns-of-distributed-systems-in-c-and-net-a-new-series-for-people-who-ship-real-systems/&quot;&gt;Patterns of Distributed Systems in C# and .NET: A New Series for People Who Ship Real Systems&lt;/a&gt;&lt;br /&gt;
Chris Woodruff&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/why-every-ef-core-developer-needs-to-try-entity-framework-extensions&quot;&gt;Why Every EF Core Developer Needs to Try Entity Framework Extensions&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developersvoice.com/blog/database/modernizing-stored-procedures-for-net-architects/&quot;&gt;Modernizing Stored Procedure-Heavy Applications: When to Move Logic to .NET&lt;/a&gt;&lt;br /&gt;
Sudhir Mangla&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://erikej.github.io/dotnet/dacfx/sqlserver/visualstudio/2026/01/29/sqlproj-power-tools-guide.html&quot;&gt;Getting Started with SQL Database Project Power Tools&lt;/a&gt;&lt;br /&gt;
Erik Ejlskov Jensen&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.campusmvp.es/recursos/post/Hassabis-Amodei-Davos-2026.aspx&quot;&gt;Hassabis-Amodei en Davos 2026: El día después de la AGI y su impacto en el desarrollado de software&lt;/a&gt;&lt;br /&gt;
José Manuel Alarcón&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.elladodelmal.com/2026/01/cyphering-prompts-para-evadir.html&quot;&gt;Cyphering Prompts &amp;amp; Answers para evadir Guardarraíles&lt;/a&gt;&lt;br /&gt;
Chema Alonso&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/educatordeveloperblog/the-hidden-memory-architecture-of-llms/4485367&quot;&gt;The Hidden Memory Architecture of LLMs&lt;/a&gt;&lt;br /&gt;
Hazem Ali&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://david-gilbertson.medium.com/shrinking-a-language-detection-model-to-under-10-kb-b729bc25fd28&quot;&gt;Shrinking a language detection model to under 10 KB&lt;/a&gt;&lt;br /&gt;
David Gilbertson&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/01/google-translategemma-models/&quot;&gt;Google Introduces TranslateGemma Open Models for Multilingual Translation&lt;/a&gt;&lt;br /&gt;
Daniel Domínguez&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/there-is-no-need-to-trap-focus-on-a-dialog-element/&quot;&gt;There is No Need to Trap Focus on a Dialog Element&lt;/a&gt;&lt;br /&gt;
Zell Liew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2026/01/unstacking-css-stacking-contexts/&quot;&gt;Unstacking CSS Stacking Contexts&lt;/a&gt;&lt;br /&gt;
Gabriel Shoyombo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/how-to-style-the-new-search-text-and-other-highlight-pseudo-elements/&quot;&gt;How to Style the New ::search-text and Other Highlight-y Pseudo-Elements&lt;/a&gt;&lt;br /&gt;
Daniel Schwarz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/vue-basics-ultimate-guide-vue-3-reactivity&quot;&gt;Vue Basics: Ultimate Guide to Vue 3 Reactivity&lt;/a&gt;&lt;br /&gt;
David Adeneye Abiodun&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/relicss/&quot;&gt;ReliCSS&lt;/a&gt;&lt;br /&gt;
Geoff Graham&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://howbrowserswork.com/&quot;&gt;How Browsers Work&lt;/a&gt;&lt;br /&gt;
Dmytro Krasun&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.returngis.net/2026/01/como-generar-changelogs-automaticos-para-tus-releases-en-github/&quot;&gt;Cómo generar changelogs automáticos para tus releases en GitHub&lt;/a&gt;&lt;br /&gt;
Gisela Torres&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bartwullems.blogspot.com/2026/01/testing-your-mcp-server-with-visual.html&quot;&gt;Testing your MCP server with Visual Studio HTTP Files&lt;/a&gt;&lt;br /&gt;
Bart Wullems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/visualstudio/visual-studio-january-update-enhanced-editor-experience/&quot;&gt;Visual Studio January Update&lt;/a&gt;&lt;br /&gt;
Simona Liao&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.sonnes.cloud/visual-studio-enterprise-partner-benefits-a-heads-up/&quot;&gt;Visual Studio Enterprise Partner Benefits – a Heads-Up!&lt;/a&gt;&lt;br /&gt;
Michael Morten Sonne&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/dotnet/2026/01/29/resharper-and-rider-2025-3-2/&quot;&gt;ReSharper and Rider 2025.3.2 Updates Out Now!&lt;/a&gt;&lt;br /&gt;
Anna Ruban&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/CodingWithCalvin/VS-ProjectRenamifier&quot;&gt;ProjectRenamifier: A Visual Studio extension that allows you to safely rename a project&lt;/a&gt;&lt;br /&gt;
Calvin Allen&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI / Cross-platform&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://platform.uno/blog/welcoming-web-content-to-native-apps/&quot;&gt;Welcoming Web Content to Native Apps&lt;/a&gt;&lt;br /&gt;
Sam Basu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/6-net-maui-properties-you-didnt-know-work-buttons&quot;&gt;6 .NET MAUI Properties You Didn’t Know Work with Buttons&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://elbraulio.net/posts/la-punta-del-iceberg&quot;&gt;La punta del Iceberg&lt;/a&gt;&lt;br /&gt;
Braulio Díez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/developer-skills/programming-languages-and-frameworks/7-learnings-from-anders-hejlsberg-the-architect-behind-c-and-typescript/&quot;&gt;7 learnings from Anders Hejlsberg: The architect behind C# and TypeScript&lt;/a&gt;&lt;br /&gt;
Aaron Winston&lt;/li&gt;&lt;/ul&gt;



Publicado en: &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;www.variablenotfound.com&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/7749817062724807075/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/7749817062724807075' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7749817062724807075'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/7749817062724807075'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/02/enlaces-interesantes-635.html' title='Enlaces interesantes 635'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioNKKwlH_UIMUUYydoGKsLjD1BdHD07ynUL_zws2V6tU2WnCTm4oNjqhLMyb3FFC2r51vRwTbh38sWICFyeMFVeatWdh2Lt9AEPrnBnRX_g9_7lcQ3QWuk8qZaYwg1siwVkKKIAFXjK-iLwbl4WTS9WZfvioNnPqYAuWEwB_hucOhfJ7xSVbMxVQ/s72-c/gurus.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-3182818175454911325</id><published>2026-01-26T08:05:00.032+01:00</published><updated>2026-01-29T08:31:04.034+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="enlaces"/><title type='text'>Enlaces interesantes 634</title><content type='html'>&lt;img alt=&quot;Sala de servidores de Cloudflare analizando el tráfico de Internet&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJS38_oN1MYACzHIhJGlUz_UaEZL0EWIdPFkMEsmM-xttBn3zmerEVnKYgtrEEgEP_mZsJmQVRbiuJerxwukR8_LSbWmHrtXkiyJlFNHFPgLbRypOa-0PoV8GnE2pCLOdtp66-_pweUxCy6nV6XYiDAFa1i1FwfY1bmUTM5J6_OqM7pMEkTaRDXg/s825/internet.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Y por destacar, en primer lugar, &lt;a href=&quot;https://elbraulio.net/posts/lo-que-diga-claudia&quot; target=&quot;_blank&quot;&gt;la interesante reflexión de Braulio Díez sobre las nuevas posibilidades y peligros que ofrece la IA generativa&lt;/a&gt; en el ámbito de la programación, y algunas predicciones sobre lo que veremos en 2026 a este respecto.&lt;/p&gt;
&lt;p&gt;La invalidación de una caché distribuida es un problema complejo. Milan Jovanović nos explica &lt;a href=&quot;https://www.milanjovanovic.tech/blog/solving-the-distributed-cache-invalidation-problem-with-redis-and-hybridcache&quot; target=&quot;_blank&quot;&gt;cómo solucionarlo usando Redis e HybridCache&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Davide Bellone abre un &lt;a href=&quot;https://www.code4it.dev/blog/code-opinion-async-suffix/&quot; target=&quot;_blank&quot;&gt;interesante debate sobre la necesidad (o no) de usar el sufijo Async en los métodos asíncronos de C#&lt;/a&gt;. Yo soy de Async, ¿y tú?&lt;/p&gt;
&lt;p&gt;También vale mucho la pena dedicar un ratillo a leer el informe de Cloudflare &lt;a href=&quot;https://radar.cloudflare.com/year-in-review/2025&quot; target=&quot;_blank&quot;&gt;2025 Year in Review&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)&lt;/p&gt;
&lt;h4&gt;Por si te lo perdiste...&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2024/11/mejora-el-rendimiento-de-hybridcache.html&quot;&gt;Mejora el rendimiento de HybridCache mediante la reutilización de objetos&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.variablenotfound.com/2019/01/el-hosting-in-process-de-aspnet-core-22.html&quot;&gt;El hosting in-process de ASP.NET Core&lt;/a&gt;&lt;br /&gt;
José M. Aguilar&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://anthonygiretti.com/2026/01/19/net-10-zip-and-gzip-api-improvements/&quot;&gt;.NET 10: Zip and GZip API Improvements&lt;/a&gt;&lt;br /&gt;
Anthony Giretti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milanjovanovic.tech/blog/solving-the-distributed-cache-invalidation-problem-with-redis-and-hybridcache&quot;&gt;Solving the Distributed Cache Invalidation Problem with Redis and HybridCache&lt;/a&gt;&lt;br /&gt;
Milan Jovanović&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://anthonygiretti.com/2026/01/19/net-10-post-quantum-cryptography-comes-to-net/&quot;&gt;.NET 10: Post-Quantum Cryptography Comes to .NET&lt;/a&gt;&lt;br /&gt;
Anthony Giretti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://henriquesd.medium.com/net-10-and-c-14-unbound-generic-types-and-nameof-b6b64ae1eb9a&quot;&gt;.NET 10 and C# 14 — Unbound generic types and nameof&lt;/a&gt;&lt;br /&gt;
Henrique Siebert Domareski&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/making-foreach-on-an-ienumerable-allocation-free-using-reflection-and-dynamic-methods/&quot;&gt;Making foreach on an IEnumerable allocation-free using reflection and dynamic methods&lt;/a&gt;&lt;br /&gt;
Andrew Lock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://antondevtips.com/blog/10-reasons-to-upgrade-to-dotnet-10&quot;&gt;10 Reasons to Upgrade to .NET 10&lt;/a&gt;&lt;br /&gt;
Anton Martyniuk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.code4it.dev/blog/code-opinion-async-suffix/&quot;&gt;Code opinion: why I prefer avoiding the Async suffix in C# asynchronous methods&lt;/a&gt;&lt;br /&gt;
Davide Bellone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.elmah.io/new-in-net-10-and-c-14-fast-model-validation-for-apis/&quot;&gt;New in .NET 10 and C# 14: Fast Model Validation for APIs&lt;/a&gt;&lt;br /&gt;
Ali Hamza Ansari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daily-devops.net/posts/iso-standards-intro-dotnet-developers/&quot;&gt;Why ISO Standards Actually Matter for .NET Developers&lt;/a&gt;&lt;br /&gt;
Martin Stühmer&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;ASP.NET Core / ASP.NET / Blazor&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://saas101.tech/modern-authentication-in-2026-how-to-secure-your-net-8-and-angular-apps-with-keycloak/&quot;&gt;Modern Authentication in 2026: How to Secure Your .NET 8 and Angular Apps with Keycloak&lt;/a&gt;&lt;br /&gt;
UnknownX&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://damienbod.com/2026/01/18/implementing-level-of-identification-loi-with-asp-net-core-identity-and-duende/&quot;&gt;Implementing Level of Identification (LoI) with ASP.NET Core Identity and&amp;nbsp;Duende&lt;/a&gt;&lt;br /&gt;
Damien Bowden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.woodruff.dev/enterprise-patterns-for-asp-net-core-minimal-api-data-transfer-object-pattern/&quot;&gt;Enterprise Patterns for ASP.NET Core Minimal API: Data Transfer Object Pattern&lt;/a&gt;&lt;br /&gt;
Chris Woodruff&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roundthecode.com/dotnet-blog/five-minimal-api-myths-and-real-truth&quot;&gt;5 Minimal API myths and the real truth&lt;/a&gt;&lt;br /&gt;
David Grace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developersvoice.com/blog/dotnet/scalable_webhook_delivery_security_asp_net_core/&quot;&gt;Building Webhooks in ASP.NET Core: Delivery Guarantees, Retries, Security, and Scalable Architecture&lt;/a&gt;&lt;br /&gt;
Sudhir Mangla&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/getting-started-blazor-skeleton-component&quot;&gt;Getting Started with the Blazor Skeleton Component&lt;/a&gt;&lt;br /&gt;
Héctor Pérez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blazorise.com/blog/responsive-layout-strategies-using-blazorise-grid-and-breakpoints&quot;&gt;Responsive Layout Strategies Using Blazorise Grid &amp;amp; Breakpoints&lt;/a&gt;&lt;br /&gt;
Mladen Macanović&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;h4&gt;Conceptos / Patrones / Buenas prácticas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeopinion.com/you-cant-future-proof-software-architecture/&quot;&gt;You Can’t Future-Proof Software Architecture&lt;/a&gt;&lt;br /&gt;
Derek Comartin&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Data&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/azuredbsupport/using-clientconnectionid-to-correlate-net-connection-attempts-in-azure-sql/4477124&quot;&gt;Using ClientConnectionId to Correlate .NET Connection Attempts in Azure SQL&lt;/a&gt;&lt;br /&gt;
Kalyan Singh Bondili&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcommunity.microsoft.com/blog/sqlserver/announcing-github-copilot-code-completions-in-sql-server-management-22-2-1/4488252&quot;&gt;Announcing GitHub Copilot code completions in SQL Server Management 22.2.1&lt;/a&gt;&lt;br /&gt;
Erin Stellato&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Machine learning / IA&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://elbraulio.net/posts/lo-que-diga-claudia&quot;&gt;Lo que diga Claudia&lt;/a&gt;&lt;br /&gt;
Braulio Díez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mssqltips.com/sqlservertip/11586/generative-ai-attention-mechanism/&quot;&gt;Introduction to Generative AI: Attention Mechanism&lt;/a&gt;&lt;br /&gt;
Harris Amjad&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Web / HTML / CSS / Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://instatunnel.my/blog/the-wasm-breach-escaping-backend-webassembly-sandboxes&quot;&gt;The Wasm Breach: Escaping Backend WebAssembly Sandboxes&lt;/a&gt;&lt;br /&gt;
InstaTunnel Team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/whats-new-in-next-js-16-turbo-builds-smart-caching-ai-debugging&quot;&gt;What&#39;s new in Next.js 16: Turbo Builds, Smart Caching, AI Debugging&lt;/a&gt;&lt;br /&gt;
Arulraj Aboorvasamy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://platform.uno/blog/the-state-of-webassembly-2025-2026/&quot;&gt;The State of WebAssembly – 2025 and 2026&lt;/a&gt;&lt;br /&gt;
Gerard Gallant&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/i-learned-the-first-rule-of-aria-the-hard-way/&quot;&gt;I Learned The First Rule of ARIA the Hard Way&lt;/a&gt;&lt;br /&gt;
Hashim Quraishi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/how-execution-context-works-in-javascript-handbook/&quot;&gt;How Execution Context Works in JavaScript – A Handbook for Devs&lt;/a&gt;&lt;br /&gt;
Sumit Saha&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/javascript-pdf-library-2025-volume-4-release&quot;&gt;Create, Edit, and Sign PDFs in JavaScript - No Backend Required&lt;/a&gt;&lt;br /&gt;
Anand Panchamoorthi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.w3.org/TR/2026/CR-webnn-20260122/&quot;&gt;Updated Candidate Recommendation: Web Neural Network (WebNN) API&lt;/a&gt;&lt;br /&gt;
W3C&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.logrocket.com/css-in-2026/&quot;&gt;CSS in 2026: The new features reshaping frontend development&lt;/a&gt;&lt;br /&gt;
Jemima Abu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/responsive-hexagon-grid-using-modern-css/&quot;&gt;Responsive Hexagon Grid Using Modern CSS&lt;/a&gt;&lt;br /&gt;
Temani Afif&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webkit.org/blog/17758/when-will-css-grid-lanes-arrive-how-long-until-we-can-use-it/&quot;&gt;When will CSS Grid Lanes arrive? How long until we can use it?&lt;/a&gt;&lt;br /&gt;
Jen Simmons&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Visual Studio / Complementos / Herramientas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mike-irving.co.uk/web-design-blog/?blogid=133&quot;&gt;.NET 10 support in Visual Studio 2022&lt;/a&gt;&lt;br /&gt;
Mike Irving&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.codingwithcalvin.net/introducing-git-ranger-extension/&quot;&gt;Introducing the &#39;Git Ranger&#39; Visual Studio extension!&lt;/a&gt;&lt;br /&gt;
Calvin Allen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualstudiomagazine.com/articles/2026/01/20/top-5-ai-tools-for-visual-studio-2026.aspx&quot;&gt;Top 5 AI Tools for Visual Studio 2026&lt;/a&gt;&lt;br /&gt;
David Ramel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/cppblog/now-in-public-preview-github-copilot-build-performance-for-windows/&quot;&gt;Now in Public Preview: GitHub Copilot build performance for Windows&lt;/a&gt;&lt;br /&gt;
David Li&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jesseliberty.com/2026/01/22/essential-programmer-utilities/&quot;&gt;Essential Programmer Utilities&lt;/a&gt;&lt;br /&gt;
Jesse Liberty&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.poppastring.com/blog/colordriven-code-navigation&quot;&gt;Color‑Driven Code Navigation&lt;/a&gt;&lt;br /&gt;
Mark Downie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.microsoft.com/blog/bringing-work-context-to-your-code-in-github-copilot&quot;&gt;Bringing work context to your code in GitHub Copilot&lt;/a&gt;&lt;br /&gt;
Kayla Cinnamon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/ai/2026/01/codex-in-jetbrains-ides/&quot;&gt;Codex Is Now Integrated Into JetBrains IDEs&lt;/a&gt;&lt;br /&gt;
Anton Semenkin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-agent-kit-ai-coding-assistants/&quot;&gt;Introducing the Azure Cosmos DB Agent Kit: Your AI Pair Programmer Just Got Smarter&lt;/a&gt;&lt;br /&gt;
Sajeetharan Sinnathurai&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;.NET MAUI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.syncfusion.com/blogs/post/multi-step-wizard-dotnet-maui-tab-view&quot;&gt;Building a Gated Multi-Step Wizard in .NET MAUI with Tab View&lt;/a&gt;&lt;br /&gt;
Sneha Kumar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.telerik.com/blogs/adding-external-fonts-net-maui&quot;&gt;Adding External Fonts in .NET MAUI&lt;/a&gt;&lt;br /&gt;
Leomaris Reyes&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Otros&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/oldnewthing/20260119-06/?p=111995&quot;&gt;What was the secret sauce that allows for a faster restart of Windows 95 if you hold the shift key?&lt;/a&gt;&lt;br /&gt;
Raymond Chen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://radar.cloudflare.com/year-in-review/2025#post-quantum-encryption&quot;&gt;Cloudflare Radar 2025 Year in Review&lt;/a&gt;&lt;br /&gt;
Cloudflare&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/3182818175454911325/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/3182818175454911325' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/3182818175454911325'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/3182818175454911325'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/01/enlaces-interesantes-634.html' title='Enlaces interesantes 634'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJS38_oN1MYACzHIhJGlUz_UaEZL0EWIdPFkMEsmM-xttBn3zmerEVnKYgtrEEgEP_mZsJmQVRbiuJerxwukR8_LSbWmHrtXkiyJlFNHFPgLbRypOa-0PoV8GnE2pCLOdtp66-_pweUxCy6nV6XYiDAFa1i1FwfY1bmUTM5J6_OqM7pMEkTaRDXg/s72-c/internet.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27752126.post-4226690196518028022</id><published>2026-01-20T08:05:00.002+01:00</published><updated>2026-01-20T08:05:00.119+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="trucos"/><title type='text'>Usar factorías para devolver la misma instancia desde el contenedor de servicios de .NET</title><content type='html'>&lt;img alt=&quot;Desarrollador inyectando componentes en un sistema&quot; border=&quot;0&quot; class=&quot;post-header-image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz6fcGWm3Krvoxg2G04FtJAbnMNeVSYhRN61SqLzv_yHBF0x_f6geEv42ndwt04nEaBEW0D2u3_ecQERet9LmChxuLDIZMwjveB6bPgA3W5ybxRmJshZUUrD6gwnHwJH9cZmHAMh30UnjDaMkgmU_UbtO-X99sScZ43VOAHOw9xDgFk46it1AM6w/s800/factorias.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt;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:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;// Registramos el servicio asociado a una interfaz:
builder.Services.AddScoped&amp;lt;IInvoiceIssuer, InvoiceServices&amp;gt;();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;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 &lt;a href=&quot;https://es.wikipedia.org/wiki/Principio_de_segregaci%C3%B3n_de_la_interfaz&quot;&gt;segregación de interfaces&lt;/a&gt; (la &quot;I&quot; de los principios &lt;a href=&quot;https://es.wikipedia.org/wiki/SOLID&quot;&gt;SOLID&lt;/a&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;// 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&amp;lt;IInvoiceIssuer, InvoiceServices&amp;gt;();
builder.Services.AddScoped&amp;lt;IInvoiceSender, InvoiceServices&amp;gt;();
builder.Services.AddScoped&amp;lt;IInvoicePrinter, InvoiceServices&amp;gt;();
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pero fijaos que &lt;strong&gt;esto está introduciendo un sutil problema&lt;/strong&gt;: cada vez que se inyecte una de estas interfaces, se creará una nueva instancia de &lt;code&gt;InvoiceServices&lt;/code&gt;, 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:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;public class DoSomething
{
    public DoSomething(IInvoiceIssuer issuer, IInvoiceSender sender, IInvoicePrinter printer)
    {
        // Aquí se habrán creado tres instancias de InvoiceServices
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;¿Cómo podemos solucionarlo?&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Para estos casos, podemos usar el parámetro &lt;code&gt;implementationFactory&lt;/code&gt; que encontramos en los métodos &lt;code&gt;AddScoped()&lt;/code&gt;, &lt;code&gt;AddSingleton()&lt;/code&gt; y &lt;code&gt;AddTransient()&lt;/code&gt; de &lt;code&gt;IServiceCollection&lt;/code&gt;. Este parámetro es un delegado que podemos usar para crear la instancia a retornar cuando se requiera un objeto del tipo solicitado. Pero lo más interesante es que, dado que recibe como parámetro una referencia al proveedor de servicios, podemos utilizarlo para obtener la instancia de otro servicio ya registrado:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;builder.Services.AddScoped&amp;lt;IInvoiceIssuer, InvoiceServices&amp;gt;(
    services =&amp;gt; 
    {
        // Usamos &quot;services&quot; para obtener el servicio ya registrado,
        //  en vez de instanciar uno nuevo cada vez
        ...
    }   
);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En nuestro caso, podríamos registrar el servicio &lt;code&gt;InvoiceServices&lt;/code&gt; una única vez de forma genérica, definiendo su tiempo de vida (&lt;em&gt;singleton&lt;/em&gt;, &lt;em&gt;scoped&lt;/em&gt;, &lt;em&gt;transient&lt;/em&gt;) y sin asociarlo a ninguna interfaz concreta. Luego, a la hora de registrar las distintas abstracciones, usar el proveedor de servicios para obtener una instancia del tipo registrado:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cs&quot;&gt;// Registramos el servicio una única vez:
builder.Services.AddScoped&amp;lt;InvoiceServices&amp;gt;();

// A continuación, usamos para cada interfaz la factoría, 
// que retorna la instancia del servicio registrado:
builder.Services.AddScoped&amp;lt;IInvoiceIssuer, InvoiceServices&amp;gt;(
    services =&amp;gt; services.GetRequiredService&amp;lt;InvoiceServices&amp;gt;()
);

builder.Services.AddScoped&amp;lt;IInvoiceSender, InvoiceServices&amp;gt;(
    services =&amp;gt; services.GetRequiredService&amp;lt;InvoiceServices&amp;gt;()
);

builder.Services.AddScoped&amp;lt;IInvoicePrinter, InvoiceServices&amp;gt;(
    services =&amp;gt; services.GetRequiredService&amp;lt;InvoiceServices&amp;gt;()
);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Obviamente, si se crean o no instancias nuevas de &lt;code&gt;InvoiceServices&lt;/code&gt; dependerá de cómo se haya registrado este servicio en el contenedor de dependencias. Por ejemplo, si está registrada como &lt;em&gt;singleton&lt;/em&gt;, se devolverá siempre la misma instancia, independientemente de cómo se haya registrado la interfaz; si es &lt;em&gt;transient&lt;/em&gt;, se creará una nueva instancia cada vez que se solicite. En el caso anterior, como se ha registrado como &lt;em&gt;scoped&lt;/em&gt;, se devolverá la misma instancia en el ámbito actual (si estamos en una petición ASP.NET Core, mientras ésta esté siendo procesada).&lt;/p&gt;
&lt;p&gt;Sencillo, ¿eh?&lt;/p&gt;
&lt;p&gt;Publicado en &lt;a href=&quot;https://www.variablenotfound.com&quot;&gt;Variable not found&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://www.variablenotfound.com/feeds/4226690196518028022/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment/fullpage/post/27752126/4226690196518028022' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/4226690196518028022'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/27752126/posts/default/4226690196518028022'/><link rel='alternate' type='text/html' href='https://www.variablenotfound.com/2026/01/usar-factorias-para-devolver-la-misma.html' title='Usar factorías para devolver la misma instancia desde el contenedor de servicios de .NET'/><author><name>José María Aguilar</name><uri>http://www.blogger.com/profile/08255861077355617652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz6fcGWm3Krvoxg2G04FtJAbnMNeVSYhRN61SqLzv_yHBF0x_f6geEv42ndwt04nEaBEW0D2u3_ecQERet9LmChxuLDIZMwjveB6bPgA3W5ybxRmJshZUUrD6gwnHwJH9cZmHAMh30UnjDaMkgmU_UbtO-X99sScZ43VOAHOw9xDgFk46it1AM6w/s72-c/factorias.jpg" height="72" width="72"/><thr:total>2</thr:total></entry></feed>