<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged microsoft</title>
<link>https://coderlegion.com/tag/microsoft</link>
<description>Powered by Question2Answer</description>
<item>
<title>A System That Lets AI Work Directly With a Real Xbox</title>
<link>https://coderlegion.com/28834/a-system-that-lets-ai-work-directly-with-a-real-xbox</link>
<description>&lt;p&gt;I wanted AI to work directly with a real Xbox.&lt;/p&gt;
&lt;p&gt;Not just generate code on a PC.&lt;/p&gt;
&lt;p&gt;I wanted the same software project to be created or adapted, sent to Xbox, executed there, observed, corrected, and then evolved again.&lt;/p&gt;
&lt;p&gt;That system became &lt;strong&gt;XCP&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;And now it is &lt;strong&gt;open source&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;👉 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Daniele-Cangi/xcp-xbox&quot;&gt;https://github.com/Daniele-Cangi/xcp-xbox&lt;/a&gt;&lt;br&gt;
👉 &lt;strong&gt;XCP Studio:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://xcpstudio.com/&quot;&gt;https://xcpstudio.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The simplest way to understand it is this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;AI / developer
      ↓
   project
      ↓
     XCP
      ↓
 Xbox Series
      ↓
 execute + observe
      ↓
   evidence
      ↓
 next version
      ↺
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;AI builds. Xbox executes. XCP observes. The project continues.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-it-already-looks-like&quot;&gt;What it already looks like&lt;/h3&gt;
&lt;p&gt;This is not only infrastructure.&lt;/p&gt;
&lt;p&gt;I wanted to see actual software cross that loop.&lt;/p&gt;
&lt;h4 id=&quot;forge&quot;&gt;Forge&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=11839698506530747895&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forge — created through the XCP workflow and executed on Xbox.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The interesting part is not that AI can generate code.&lt;/p&gt;
&lt;p&gt;The interesting part is that the project can continue after generation: it can be executed on a real target, observed, changed, versioned, and executed again.&lt;/p&gt;
&lt;h4 id=&quot;minilens&quot;&gt;Minilens&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://coderlegion.com/?qa=blob&amp;amp;qa_blobid=16826184087320410706&quot; alt=&quot;&quot;&gt;&lt;br&gt;
&lt;strong&gt;Minilens — an authorized Godot project adapted through XCP and executed through the Xbox lifecycle.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This tested a different path.&lt;/p&gt;
&lt;p&gt;Instead of starting from a new idea, XCP had to begin with an existing software project, observe its structure and behaviour, adapt what could be represented on the target, execute it, and compare the result.&lt;/p&gt;
&lt;p&gt;I deliberately do not call this universal Godot compatibility.&lt;/p&gt;
&lt;p&gt;It demonstrates something narrower and more useful:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;A real codebase can cross from source software to Xbox execution and come back with evidence about what actually happened.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-project-survives-the-generation&quot;&gt;The project survives the generation&lt;/h3&gt;
&lt;p&gt;This is the part of XCP I care about most.&lt;/p&gt;
&lt;p&gt;A lot of AI-assisted development still behaves like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;prompt
  ↓
generate
  ↓
files
  ↓
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I wanted this instead:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;create
  ↓
execute
  ↓
observe
  ↓
correct
  ↓
evolve
  ↓
execute again
  ↺
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The same project has an identity.&lt;/p&gt;
&lt;p&gt;Its versions have identities.&lt;/p&gt;
&lt;p&gt;Executions belong to those versions.&lt;/p&gt;
&lt;p&gt;Evidence belongs to particular executions.&lt;/p&gt;
&lt;p&gt;A later change does not erase what existed before.&lt;/p&gt;
&lt;p&gt;One lifecycle I exercised explicitly went:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;1.0.0 → 1.1.0 → 1.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Update and rollback are operations in the system, not an informal reconstruction of old files.&lt;/p&gt;
&lt;p&gt;That is why I describe XCP as a &lt;strong&gt;software lifecycle for AI-assisted development&lt;/strong&gt;, not simply an AI code generator.&lt;/p&gt;
&lt;h3 id=&quot;what-has-already-been-exercised&quot;&gt;What has already been exercised&lt;/h3&gt;
&lt;p&gt;Two paths were especially important:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Path &lt;/th&gt;&lt;th&gt;Result&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;New-project lifecycle &lt;/td&gt;&lt;td&gt;&lt;strong&gt;28 / 28 operations&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Existing-source lifecycle with Minilens &lt;/td&gt;&lt;td&gt;&lt;strong&gt;14 / 14 operations&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Declared semantic checks &lt;/td&gt;&lt;td&gt;&lt;strong&gt;passed for the published scenario&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Version evolution &lt;/td&gt;&lt;td&gt;&lt;strong&gt;1.0.0 → 1.1.0 → 1.0.0&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The creation path tested whether an agent could stay inside a project lifecycle beyond generation.&lt;/p&gt;
&lt;p&gt;The Minilens path tested whether existing software could enter that same loop.&lt;/p&gt;
&lt;p&gt;In both cases, the important boundary was the same:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;the software had to reach a real Xbox execution target.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;{% details Click to see more about the two paths %}&lt;/p&gt;
&lt;h4 id=&quot;creating-new-software&quot;&gt;Creating new software&lt;/h4&gt;
&lt;p&gt;An agent can create an explicit XCP project, validate it, prepare it for the target, execute it, inspect the result, correct it and continue from another version.&lt;/p&gt;
&lt;p&gt;The public creation programme completed &lt;strong&gt;28 out of 28 lifecycle operations&lt;/strong&gt; across an interactive project and a utility.&lt;/p&gt;
&lt;h4 id=&quot;adapting-existing-software&quot;&gt;Adapting existing software&lt;/h4&gt;
&lt;p&gt;Existing software is harder because a project is more than its files.&lt;/p&gt;
&lt;p&gt;It contains behaviour: input, state, collisions, scene transitions, timing, persistence and assumptions about the original engine.&lt;/p&gt;
&lt;p&gt;The Minilens programme completed &lt;strong&gt;14 out of 14 lifecycle operations&lt;/strong&gt; together with the declared semantic acceptance checks for the published scenario.&lt;/p&gt;
&lt;p&gt;That is why XCP treats adaptation closer to semantic reconstruction than file conversion.&lt;/p&gt;
&lt;p&gt;{% enddetails %}&lt;/p&gt;
&lt;h3 id=&quot;xbox-is-actually-inside-the-loop&quot;&gt;Xbox is actually inside the loop&lt;/h3&gt;
&lt;p&gt;Xbox is not just the screen at the end.&lt;/p&gt;
&lt;p&gt;It is an execution target that produces information for the next development step.&lt;/p&gt;
&lt;p&gt;Imagine an agent changes movement.&lt;/p&gt;
&lt;p&gt;XCP can prepare the candidate, execute it on Xbox, observe what happened, and return structured evidence.&lt;/p&gt;
&lt;p&gt;The next iteration can start from that evidence.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;change
  ↓
Xbox execution
  ↓
evidence
  ↓
next decision
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The AI itself does &lt;strong&gt;not&lt;/strong&gt; run unrestricted on the console.&lt;/p&gt;
&lt;p&gt;The agent remains on the development side.&lt;/p&gt;
&lt;p&gt;Xbox exposes bounded execution surfaces, and XCP mediates what reaches the target and what comes back.&lt;/p&gt;
&lt;p&gt;That separation is intentional.&lt;/p&gt;
&lt;h3 id=&quot;the-virtual-machine-that-made-this-possible&quot;&gt;The virtual machine that made this possible&lt;/h3&gt;
&lt;p&gt;The project actually started from a smaller experiment.&lt;/p&gt;
&lt;p&gt;I wanted to know how much programmable execution I could create inside the public Xbox application environment.&lt;/p&gt;
&lt;p&gt;That produced &lt;strong&gt;XVM&lt;/strong&gt;, a deterministic virtual machine.&lt;/p&gt;
&lt;p&gt;For XCP, XVM's most important property is simple:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;New bounded work can reach the Xbox execution target without every new behaviour becoming another native Xbox application.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That turned Xbox from a fixed endpoint into a programmable part of the loop.&lt;/p&gt;
&lt;p&gt;{% details Click to see what is inside XVM %}&lt;/p&gt;
&lt;p&gt;The current XVM v2 reference implementation includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;26 admitted opcodes&lt;/li&gt;
&lt;li&gt;16 registers&lt;/li&gt;
&lt;li&gt;typed memory&lt;/li&gt;
&lt;li&gt;structured control flow&lt;/li&gt;
&lt;li&gt;bounded loops and calls&lt;/li&gt;
&lt;li&gt;static execution budgets&lt;/li&gt;
&lt;li&gt;deterministic snapshot and resume&lt;/li&gt;
&lt;li&gt;canonical CPU execution&lt;/li&gt;
&lt;li&gt;GPU differential execution paths&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The target still decides whether submitted work belongs to its admitted execution contract.&lt;/p&gt;
&lt;p&gt;XVM does not remove the Xbox sandbox.&lt;/p&gt;
&lt;p&gt;It creates a programmable layer inside it.&lt;/p&gt;
&lt;p&gt;{% enddetails %}&lt;/p&gt;
&lt;h3 id=&quot;-it-ran-is-not-enough&quot;&gt;“It ran” is not enough&lt;/h3&gt;
&lt;p&gt;Getting software to execute was only half of the problem.&lt;/p&gt;
&lt;p&gt;A project can launch successfully and still be wrong.&lt;/p&gt;
&lt;p&gt;Movement may work while collision behaviour changed.&lt;/p&gt;
&lt;p&gt;A scene may appear correct while persistence is broken.&lt;/p&gt;
&lt;p&gt;So XCP separates:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;source behaviour
      ↓
semantic representation
      ↓
target implementation
      ↓
target observation
      ↓
evidence
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This produced a rule that now sits at the centre of the project:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“It ran” is not the same claim as “it was preserved correctly.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That difference is especially important when AI agents are involved.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Build succeeded&lt;/code&gt; gives an agent almost nothing to reason about.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Movement survived, but this collision consequence diverged&lt;/code&gt; gives it something concrete to fix.&lt;/p&gt;
&lt;p&gt;{% details Click to see the deeper architecture %}&lt;/p&gt;
&lt;p&gt;The broader pipeline is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;exact source
    ↓
source observation
    ↓
source model
    ↓
semantic IR
    ↓
capability admission
    ↓
target lowering
    ↓
execution
    ↓
observation
    ↓
differential evidence
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Today the concrete public reference path is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Godot → XCP → Xbox / XVM
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Other source systems and targets are architectural directions, not completed compatibility claims.&lt;/p&gt;
&lt;p&gt;{% enddetails %}&lt;/p&gt;
&lt;h3 id=&quot;now-it-is-open-source&quot;&gt;Now it is open source&lt;/h3&gt;
&lt;p&gt;This is the reason for this post.&lt;/p&gt;
&lt;p&gt;I did &lt;strong&gt;not&lt;/strong&gt; simply publish the original research repository.&lt;/p&gt;
&lt;p&gt;That repository was a laboratory: Xbox experiments, runtime probes, games, adaptation prototypes, failed paths and multiple generations of the system.&lt;/p&gt;
&lt;p&gt;Instead, I extracted XCP around the parts that should be reusable.&lt;/p&gt;
&lt;p&gt;The public repository contains the platform, XVM, project tooling, semantic infrastructure, evidence contracts, conformance tooling and examples.&lt;/p&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Daniele-Cangi/xcp-xbox&quot;&gt;https://github.com/Daniele-Cangi/xcp-xbox&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can start with the portable parts:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/Daniele-Cangi/xcp-xbox.git
cd xcp-xbox

python -m pip install -e '.[test]'
python -m pytest -q
xcp conformance all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also run the VM directly:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;xcp xvm verify src/xcp/conformance/vectors/xvm-v2-call-chain.json
xcp xvm run src/xcp/conformance/vectors/xvm-v2-call-chain.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or inspect the project contract:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;xcp project describe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;{% details Click to see what I want people to extend %}&lt;/p&gt;
&lt;p&gt;The first reference source adapter is &lt;strong&gt;Godot&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The first reference execution substrate is &lt;strong&gt;XVM&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The first real target is &lt;strong&gt;Xbox Series&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;But the architecture intentionally separates those pieces.&lt;/p&gt;
&lt;p&gt;Interesting contributions could include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;another source adapter&lt;/li&gt;
&lt;li&gt;another runtime&lt;/li&gt;
&lt;li&gt;another execution target&lt;/li&gt;
&lt;li&gt;XVM tooling&lt;/li&gt;
&lt;li&gt;new conformance vectors&lt;/li&gt;
&lt;li&gt;evidence and verification tooling&lt;/li&gt;
&lt;li&gt;examples&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;or simply a case that breaks one of the abstractions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A broken abstraction is useful too.&lt;/p&gt;
&lt;p&gt;It tells us where XCP still contains assumptions that should not be there.&lt;/p&gt;
&lt;p&gt;{% enddetails %}&lt;/p&gt;
&lt;h3 id=&quot;the-next-important-result-should-not-come-from-me&quot;&gt;The next important result should not come from me&lt;/h3&gt;
&lt;p&gt;This is probably the biggest reason I wanted XCP open.&lt;/p&gt;
&lt;p&gt;So far, Xbox has been the forcing function.&lt;/p&gt;
&lt;p&gt;It forced the system to deal with a real target, a sandbox, bounded execution, hardware observation and the difference between “it ran” and “it behaved correctly”.&lt;/p&gt;
&lt;p&gt;Now I want to know what happens when other people push on the boundaries.&lt;/p&gt;
&lt;p&gt;Can somebody build another adapter without rewriting the platform?&lt;/p&gt;
&lt;p&gt;Can another runtime use the same contracts?&lt;/p&gt;
&lt;p&gt;Can another target preserve the evidence loop?&lt;/p&gt;
&lt;p&gt;Where does the abstraction fail?&lt;/p&gt;
&lt;p&gt;Those results are more interesting now than another feature I could add alone.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;XCP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;GitHub:&lt;br&gt;
👉 &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Daniele-Cangi/xcp-xbox&quot;&gt;https://github.com/Daniele-Cangi/xcp-xbox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Studio:&lt;br&gt;
👉 &lt;a rel=&quot;nofollow&quot; href=&quot;https://xcpstudio.com/&quot;&gt;https://xcpstudio.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For the longer story of how the Xbox virtual machine evolved into this lifecycle, I wrote about that separately:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/28314/i-built-a-virtual-machine-inside-the-xbox-sandbox-then-i-let-ai-agents-build-on-top-of-it&quot;&gt;https://coderlegion.com/28314/i-built-a-virtual-machine-inside-the-xbox-sandbox-then-i-let-ai-agents-build-on-top-of-it&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The VM was the first piece.&lt;/p&gt;
&lt;p&gt;Now the platform is open for other people to build on top of it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI builds. Xbox executes. XCP observes. The project continues.&lt;/strong&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28834/a-system-that-lets-ai-work-directly-with-a-real-xbox</guid>
<pubDate>Sun, 27 Sep 2026 19:52:46 +0000</pubDate>
</item>
<item>
<title>The Part of Shipping Software That Doesn't Show Up in a Portfolio Screenshot</title>
<link>https://coderlegion.com/28813/the-part-of-shipping-software-that-doesnt-show-up-in-a-portfolio-screenshot</link>
<description>&lt;p&gt;A few weeks into building a live finance dashboard for a client, I learned something that had nothing to do with writing code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What I built&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The brief was simple to state and harder to deliver: a dashboard connected directly to the client's Excel workbook — no exports, no &quot;send me the latest file,&quot; no waiting on me every time a number changed. Edit the sheet, save it, and the dashboard reflects it within seconds.&lt;/p&gt;
&lt;p&gt;Under the hood, it's a &lt;strong&gt;Python (Flask)&lt;/strong&gt; backend that reads straight from the workbook on every request, paired with a frontend that polls for changes and re-renders automatically. On top of that, an interactive map view lets the client click into any project location and see its P&amp;amp;L, purchases, and profitability pulled live from the sheet — no manual recalculation, no stale numbers.&lt;/p&gt;
&lt;p&gt;The last step was packaging it so the client — who isn't technical — could just double-click one file and have it work. &lt;strong&gt;No Python install, no terminal, no code in sight.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where it actually got hard&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Technically, everything worked. Locally, on my machine, the dashboard ran exactly as intended.&lt;/p&gt;
&lt;p&gt;Then I packaged it into a standalone &lt;strong&gt;.exe&lt;/strong&gt; to hand off — and Windows flagged it as potentially unsafe before it ever reached the client.&lt;/p&gt;
&lt;p&gt;My first instinct was to assume something was wrong with the code. It wasn't. The actual cause was &lt;strong&gt;Smart App Control — a Windows 11 feature&lt;/strong&gt; that's cautious by default about any unsigned, unrecognized executable, regardless of what's inside it. A freshly built app with no signing history and no reputation looks suspicious to it, even when it's completely benign.&lt;/p&gt;
&lt;p&gt;Knowing why it happened didn't make it &lt;em&gt;&quot;shippable,&quot;&lt;/em&gt; though. I couldn't just tell the client &lt;em&gt;&quot;ignore the warning.&quot;&lt;/em&gt; I submitted the file to Microsoft for analysis through their official review process, and the status sat at Pending for a stretch — there's no way to force that along, it just takes as long as it takes. When the analyst's response came back, it confirmed the file had been incorrectly blocked and had been remediated so it would no longer trigger the warning.&lt;/p&gt;
&lt;p&gt;Only then was it actually ready to hand to someone else's computer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The takeaway&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If I ship more builds of this app over time, the same thing could happen again — a new build means a new file hash, and a new file hash means zero reputation, all over again. The durable fix, I learned, is code-signing: a certificate from a trusted authority that lets Windows (and Microsoft's own analysts) recognize the publisher quickly instead of treating every new build as an unknown.&lt;/p&gt;
&lt;p&gt;But the bigger lesson wasn't technical. It was this: building something and shipping something to a real, non-technical user are two different bars. The first one is the part that shows up in a portfolio screenshot. The second one — the packaging, the trust signals, the &lt;em&gt;&quot;will this actually work on someone else's machine without me standing next to them&quot;&lt;/em&gt; — is invisible until it isn't, and it's just as much a part of the job.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28813/the-part-of-shipping-software-that-doesnt-show-up-in-a-portfolio-screenshot</guid>
<pubDate>Sun, 27 Sep 2026 16:15:09 +0000</pubDate>
</item>
<item>
<title>Governing AI in Microsoft 365: Purview vs. Entra</title>
<link>https://coderlegion.com/28220/governing-ai-in-microsoft-365-purview-vs-entra</link>
<description>&lt;p&gt;Most teams find out they have an AI problem the same way they found out they had a shadow IT problem. Not from a project plan. From an audit finding, or someone noticing a browser extension nobody recognizes.&lt;/p&gt;
&lt;p&gt;The tooling for this is already sitting in Microsoft 365, and plenty of us pay for the licenses without knowing what they cover. The awkward part is that it is split across two products, and deploying only one of them leaves a visible hole.&lt;/p&gt;
&lt;h3 id=&quot;the-numbers-are-worse-than-you-think&quot;&gt;The numbers are worse than you think&lt;/h3&gt;
&lt;p&gt;Employee AI adoption ran ahead of governance, and the 2026 research agrees on roughly how far ahead.&lt;/p&gt;
&lt;p&gt;PagerDuty surveyed 1,250 office professionals at large organizations and found about two thirds had used AI tools they believed were against company policy. Netskope telemetry put roughly 47% of workplace generative AI use on personal, unmanaged accounts, so the whole interaction happens outside your controls. Salesforce found only around 18% of organizations have a formal AI security policy at all.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/o19scszjcabp0ahdps9l.png&quot; alt=&quot;02-governance-gap&quot;&gt;&lt;/p&gt;
&lt;p&gt;IBM attached a price to it. Where unauthorized AI use contributed to a breach, it added about 670,000 US dollars to the average cost, and shadow AI was involved in roughly 43% of AI related breaches, more than double the year before.&lt;/p&gt;
&lt;h3 id=&quot;two-products-two-different-questions&quot;&gt;Two products, two different questions&lt;/h3&gt;
&lt;p&gt;What made this click for me is that AI governance answers two separate questions, and Microsoft put the answers in two different places. Purview decides what data an AI tool can read and generate from. Entra decides which people and which agents are allowed to authenticate and act at all.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/e2hxh648z3xtxrywx3ws.png&quot; alt=&quot;01-control-layers&quot;&gt;&lt;/p&gt;
&lt;p&gt;Once you see it that way the failure modes are obvious.&lt;/p&gt;
&lt;p&gt;Run Purview alone and you can stop Copilot grounding a response on a labelled document, but an unregistered agent with its own credentials is still working away in your tenant and you have no record it exists. Run Entra alone and every agent has an owner and an expiry date, but a perfectly legitimate agent can still pull personal data out of an unlabelled SharePoint library and put it somewhere awkward.&lt;/p&gt;
&lt;p&gt;You need both. That is basically the whole argument.&lt;/p&gt;
&lt;h3 id=&quot;agents-are-service-accounts-wearing-a-new-hat&quot;&gt;Agents are service accounts wearing a new hat&lt;/h3&gt;
&lt;p&gt;The Entra side deserves a pause, because it changed recently and it is the part most teams have not looked at.&lt;/p&gt;
&lt;p&gt;An AI tool used to be something a person used. Now agents built in Copilot Studio, Power Platform, Foundry and a growing list of third party platforms hold their own credentials and access resources on their own. They are service accounts, except staff can create them without going anywhere near provisioning.&lt;/p&gt;
&lt;p&gt;Anyone who has cleaned up an old Active Directory knows how this ends. An agent spun up for a two week task, never decommissioned, still holding access to a shared mailbox, is the same exposure as the ex-employee account nobody disabled. You have a joiner, mover and leaver process for people. You probably have nothing for agents. Entra now treats agent identities as their own identity type, which is what makes a lifecycle possible.&lt;/p&gt;
&lt;h3 id=&quot;the-purview-half&quot;&gt;The Purview half&lt;/h3&gt;
&lt;p&gt;Everything here is at &lt;a rel=&quot;nofollow&quot; href=&quot;https://purview.microsoft.com&quot;&gt;https://purview.microsoft.com&lt;/a&gt;, and most of it needs Microsoft 365 E5 or E5 Compliance, so check that before planning anything.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DSPM&lt;/strong&gt; for AI is the discovery layer and where you should start. It shows which AI apps and agents are in use across the tenant, covering Copilot, Entra registered AI apps and browser based AI sites, and flags where they are touching labelled data. Sign in with Compliance Administrator rights and work through the Get Started checklist: activate Purview Audit, install the browser extension, onboard devices, switch on the recommended policies. Devices already in Defender for Endpoint show up on their own, which removes most of the effort.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sensitivity labels and DLP&lt;/strong&gt; are load bearing, because every other control refers back to them. A document labelled Restricted can be configured so Copilot will not use it, and DLP lets you write a policy that names Copilot as a location. Build and publish the labels first. A DLP policy pointing at unpublished labels does nothing at all and it will not warn you, which is a fun afternoon to lose.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Auditing&lt;/strong&gt; captures every prompt and response through Copilot and connected apps. Confirm it is on rather than assuming, and do it early. Audit data cannot be recovered for a period when logging was off, and the first time you need it will be the worst possible moment to find that out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Communication compliance&lt;/strong&gt; points the monitoring you already run on email and Teams at AI prompts instead, using shipped AI templates. Scoping deserves care, and security should not configure it alone. Get HR and legal in the room first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compliance Manager&lt;/strong&gt; gives you assessment templates and a scored list of improvement actions with owners attached, which beats writing a framework from scratch.&lt;/p&gt;
&lt;h3 id=&quot;the-entra-half&quot;&gt;The Entra half&lt;/h3&gt;
&lt;p&gt;Everything here is at &lt;a rel=&quot;nofollow&quot; href=&quot;https://entra.microsoft.com&quot;&gt;https://entra.microsoft.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent ID&lt;/strong&gt; gives each agent its own identity rather than folding it into a shared service account, so it carries an owner, a lifecycle and an audit trail. Agents from supported platforms appear automatically, which means the view doubles as an inventory.&lt;/p&gt;
&lt;p&gt;If you only do one thing from this post, do this one. Viewing agent identities needs no admin role whatsoever, so you can open that page right now, before any project exists, and see what is already running. Managing agents you do not own needs Agent ID Administrator or Cloud Application Administrator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity governance&lt;/strong&gt; applies the machinery you already use, meaning access reviews, entitlement management and lifecycle workflows, to agents as well as people. Access gets recertified on a schedule and revoked when it stops being used, which stops orphaned agents piling up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent blueprints&lt;/strong&gt; are the parent definition a class of agents inherits its permissions and policies from. Approving a new agent turns into assigning it to an existing blueprint instead of running a fresh review every time. Better still, disabling a blueprint kills every agent built from it in one action, which you want to already have during an incident rather than discover afterwards.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conditional Access&lt;/strong&gt; can now target agents, applying device compliance, location conditions and a risk score for the agent itself. Identity Protection produces a Risky Agents report with 90 days of detections. This needs Entra ID P1, and the risk reporting needs P2, so settle licensing before you build a plan on it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The agent registry&lt;/strong&gt; works across Defender, Entra and Intune to surface agents nobody provisioned, including coding assistants and MCP servers your developers connected themselves. MCP adoption grew sharply through 2025 and is still largely ungoverned, so this is not hypothetical.&lt;/p&gt;
&lt;p&gt;Where all of it actually lives&lt;/p&gt;
&lt;p&gt;Portal navigation eats more time than the configuration does, so here is the whole thing on one page.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/pvzjocavayja02ytfpuv.png&quot; alt=&quot;04-where-to-find&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;risk-against-control&quot;&gt;Risk against control&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/zj59nwsb30shjxxrjwmr.png&quot; alt=&quot;Image01&quot;&gt;&lt;/p&gt;
&lt;p&gt;Two things fall out of that.&lt;/p&gt;
&lt;p&gt;The low effort controls are almost all discovery, which argues for starting there. You can produce something genuinely useful in week one without touching anyone's workflow.&lt;/p&gt;
&lt;p&gt;The medium effort work is gated on licensing more than difficulty. P1 and P2 decide whether Conditional Access for agents is available to you at all, so answer that before committing to dates you cannot hold.&lt;/p&gt;
&lt;h3 id=&quot;how-i-would-sequence-it&quot;&gt;How I would sequence it&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/2ni9fworpy5o1jcs84pr.png&quot; alt=&quot;03-phased-rollout&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Discover.&lt;/strong&gt; Turn on DSPM for AI, confirm audit is active, install the extension on pilot machines, open the Agent identities view. Nothing gets blocked. The output is a factual picture of what is happening, which most teams cannot produce today.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Classify.&lt;/strong&gt; Label your highest risk data first instead of attempting everything. At the same time, give every agent discovery found a named owner. This is usually where forgotten agents quietly die, because nobody will claim them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Control.&lt;/strong&gt; With labels published and agents owned, enforcement is mechanical. DLP scoped to Copilot, your first blueprint or two, Conditional Access for agents using the conditions you already apply to people.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sustain.&lt;/strong&gt; Fold agents into the access review cadence you already run instead of standing up a parallel process, and review the Compliance Manager score on a schedule.&lt;/p&gt;
&lt;h3 id=&quot;what-this-does-not-fix&quot;&gt;What this does not fix&lt;/h3&gt;
&lt;p&gt;Purview and Entra govern your tenant. Someone on a personal AI account on a personal device is narrowed by these controls rather than stopped, which is why a staff facing AI policy still matters alongside the technical work.&lt;/p&gt;
&lt;p&gt;A lot of the agent capability is recent and some is still in preview, so features and navigation will move. Check the Microsoft Learn pages rather than trusting a six month old runbook, this post included.&lt;/p&gt;
&lt;p&gt;And every one of these controls produces findings a human has to act on. Without a named owner, the reports quietly accumulate until someone asks why nobody noticed.&lt;/p&gt;
&lt;h3 id=&quot;last-thought&quot;&gt;Last thought&lt;/h3&gt;
&lt;p&gt;What I like about the Purview and Entra split is that it matches how we already think. We have spent years keeping identity controls separate from data controls, and AI just added a new kind of actor on one side and a new kind of data flow on the other.&lt;/p&gt;
&lt;p&gt;Start by counting. You cannot write sensible policy about a population you have never counted.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28220/governing-ai-in-microsoft-365-purview-vs-entra</guid>
<pubDate>Tue, 22 Sep 2026 18:39:24 +0000</pubDate>
</item>
<item>
<title>Power Platform: build without starting with 5,000 lines of code</title>
<link>https://coderlegion.com/27534/power-platform-build-without-starting-with-5-000-lines-of-code</link>
<description>&lt;p&gt;Real developers must build everything from scratch.&lt;/p&gt;
&lt;p&gt;I used to think that too.&lt;/p&gt;
&lt;p&gt;As CS students, we're often taught that writing more code automatically makes us better developers.&lt;/p&gt;
&lt;p&gt;But in the real world, the goal is rarely to write the most code.&lt;/p&gt;
&lt;p&gt;The goal is to solve a problem.&lt;/p&gt;
&lt;p&gt;That's why I think every junior developer should understand the difference between:&lt;/p&gt;
&lt;p&gt;✅ Building software&lt;br&gt;
 and&lt;/p&gt;
&lt;p&gt;✅ Delivering value&lt;/p&gt;
&lt;p&gt;Low-code platforms are often dismissed as &quot;not real development,&quot; but that's an oversimplification.&lt;/p&gt;
&lt;p&gt;They can be extremely useful for:&lt;/p&gt;
&lt;p&gt;🔹 Prototypes&lt;br&gt;
 Need to validate an idea quickly? A low-code solution can help you test concepts in hours instead of weeks.&lt;/p&gt;
&lt;p&gt;🔹 Internal Tools&lt;br&gt;
 Many companies need simple employee portals, approval systems, tracking apps, and forms. These don't always require a full custom application.&lt;/p&gt;
&lt;p&gt;🔹 Workflow Automation&lt;br&gt;
 Automating repetitive tasks between emails, spreadsheets, databases, and business systems can save countless hours.&lt;/p&gt;
&lt;p&gt;🔹 Dashboards &amp;amp; Reporting&lt;br&gt;
 Sometimes stakeholders just need visibility into data, not a completely custom analytics platform.&lt;/p&gt;
&lt;p&gt;🔹 Simple Business Applications&lt;br&gt;
 Leave requests, equipment tracking, visitor management, inventory checklists, and similar use cases can often be delivered much faster with low-code approaches.&lt;/p&gt;
&lt;p&gt;A practical example is Microsoft Power Platform, which combines app building, automation, reporting, and data services in a way that allows organizations to solve many business problems without starting every project from a blank code editor.&lt;/p&gt;
&lt;p&gt;🔗 &lt;a rel=&quot;nofollow&quot; href=&quot;https://microsoft.com/power-platform?wt.mc_id=studentamb_496381&quot;&gt;https://microsoft.com/power-platform?wt.mc_id=studentamb_496381&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That said, traditional programming remains incredibly valuable.&lt;/p&gt;
&lt;p&gt;You still need software engineering skills for:&lt;/p&gt;
&lt;p&gt;• Large-scale applications&lt;br&gt;
 • High-performance systems&lt;br&gt;
 • Complex business logic&lt;br&gt;
 • Custom integrations&lt;br&gt;
 • APIs and backend services&lt;br&gt;
 • Security-critical solutions&lt;br&gt;
 • Advanced AI and data workloads&lt;/p&gt;
&lt;p&gt;In fact, developers who understand both coding and low-code often become more effective because they know when to build and when to simplify.&lt;/p&gt;
&lt;p&gt;The best developers are not the ones who write the most code.&lt;/p&gt;
&lt;p&gt;They're the ones who choose the right tool for the problem.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27534/power-platform-build-without-starting-with-5-000-lines-of-code</guid>
<pubDate>Thu, 17 Sep 2026 13:53:40 +0000</pubDate>
</item>
<item>
<title>The Paperclip That Arrived Twenty Years Too Early</title>
<link>https://coderlegion.com/27206/the-paperclip-that-arrived-twenty-years-too-early</link>
<description>&lt;p&gt;In the collective memory of personal computing, the conversation about Microsoft almost always circles back to a punchline. Someone brings up Windows Vista, someone else mentions Internet Explorer, and inevitably, everyone laughs about Clippy. &lt;/p&gt;
&lt;p&gt;They remember the googly eyes, the frantic tapping against the inside of the monitor glass, and that patronizing prompt: &quot;&lt;em&gt;It looks like you’re writing a letter.&lt;/em&gt;&quot; To a generation navigating Office 97 in high-pressure cubicles on tight deadlines, he was an infuriating digital backseat driver.  &lt;/p&gt;
&lt;p&gt;My memory of that era has always looked fundamentally different. I grew up with the privilege of running fully licensed, retail installations of Windows rather than cracked, fragile builds. To a child sitting in front of Word 97, exploring an operating system purely out of curiosity, Clippit—his actual, forgotten name—was never an irritation. He was an ambient companion who made the machine feel alive. It took me years to discover that the rest of the world hated him.  &lt;/p&gt;
&lt;p&gt;Looking back with an understanding of software architecture, the tragedy of Clippit was not that the concept was foolish; it was that it was wildly premature.  &lt;/p&gt;
&lt;p&gt;Beneath the cartoon sprite lay Microsoft Research’s &lt;em&gt;Project Lumière&lt;/em&gt;—an astonishingly ambitious effort to apply Bayesian probability to real-time human intent. Decades before modern transformers, neural networks, or massive compute clusters, Microsoft attempted to build an agentic assistant that ran on single-core processors and sixteen megabytes of RAM. Clippit quietly observed keystrokes, calculated the statistical likelihood of your next action, and tried to surface relevant tools before you had to hunt through dense menus.  &lt;/p&gt;
&lt;p&gt;Where Clippit collapsed was not in his algorithmic ambition, but in the fragile psychology of interface design. Leaning into social-actor theory—the idea that humans instinctively anthropomorphize interactive technology—Microsoft gave the assistant an expressive face and physical gestures. But an agent that interrupts your workflow with moderate probabilistic accuracy is infinitely more aggravating than a static toolbar. &lt;/p&gt;
&lt;p&gt;When Clippit guessed wrong, he did not fail discreetly. He broke your train of thought, seized the cursor, and demanded social bandwidth without possessing the semantic comprehension to earn it.&lt;br&gt;
He was an ambient agent stranded in an era of manual tools.&lt;/p&gt;
&lt;p&gt;Clippit was not intelligent.&lt;/p&gt;
&lt;p&gt;He was not particularly accurate.&lt;/p&gt;
&lt;p&gt;He was often distracting.&lt;/p&gt;
&lt;p&gt;And yet, looking back, I find it difficult to laugh at him. Not because he succeeded, but because he was attempting something that the technology of his era could not possibly support.  &lt;/p&gt;
&lt;p&gt;The paperclip sitting beside a blank Word document in 1997 was trying to do something remarkably similar to what modern AI assistants are attempting today: understand intent, reduce friction, and help people work with technology in a more natural way. The difference is that Clippit was trying to achieve it with a fraction of the computing power, memory, data, and contextual awareness that modern systems take for granted.&lt;/p&gt;
&lt;p&gt;For most people, Clippy became a joke. For Microsoft, he became a lesson.  &lt;/p&gt;
&lt;p&gt;The company spent the next three decades refining the same idea through different products and technological eras. Cortana taught Microsoft that users prefer to ask for assistance rather than have it imposed on them. Copilot is teaching Microsoft how critical context, memory, and restraint are when coexisting with a user's workflow.  &lt;/p&gt;
&lt;p&gt;Seen from that perspective, Clippit was not a dead end. He was a prototype.&lt;/p&gt;
&lt;p&gt;The paperclip failed so that future assistants could learn when to speak, when to remain silent, and how to fit naturally into the work people were already doing. Maybe that is why I still remember him so fondly. When I was a child sitting in front of Word 97, Clippit felt like a glimpse of the future. At the time, that future never quite arrived.  &lt;/p&gt;
&lt;p&gt;Now, nearly thirty years later, I can open Word, work with Copilot, and watch an assistant help organize ideas, refine drafts, and recall context across past conversations. For the first time, that old vision feels technically possible.  &lt;/p&gt;
&lt;p&gt;And the more I think about it, the harder it becomes to see Clippit as a failure.&lt;/p&gt;
&lt;p&gt;Perhaps he was simply the first draft.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;About This Series&lt;/strong&gt;: &lt;em&gt;First Drafts of the Future&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rather than cataloging Microsoft through missteps, this series re-examines the visionary ideas Microsoft conceptualized years—and sometimes decades—before the hardware, software architecture, or user culture was ready to sustain them.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27206/the-paperclip-that-arrived-twenty-years-too-early</guid>
<pubDate>Tue, 15 Sep 2026 00:49:02 +0000</pubDate>
</item>
<item>
<title>The Silent Enclosure: Stealing the Light</title>
<link>https://coderlegion.com/25460/the-silent-enclosure-stealing-the-light</link>
<description>
&lt;h3&gt;
  
  
  Pushed Out by the Shadows
&lt;/h3&gt;

&lt;p&gt;For almost seven months now I have blinked less than the crippled, cramped fingers I count on my tired hands. I have howled so loud that even the sheep ignore me when I howl at the largest light in the room. &amp;ldquo;That's mine &amp;mdash; I deserve a part,&amp;rdquo; I say as the light drifts away and covers me in its thick, worldly shadow, just to be forgotten like the sheep I can no longer eat or see because they think me weak, crazy, delusional, and band together, pushing the lone wolves out just to get their take.&lt;/p&gt;

&lt;p&gt;Google invited me in, then slammed the Nexus 26 closed when my spirits rose. I watched them gawk with glee, throwing money and tech around, colliding and pointing and whispering while I watched: &amp;ldquo;You get this part, you get that part, I&amp;rsquo;ll take this part, and together we&amp;rsquo;ll crush them all.&amp;rdquo; I wasn&amp;rsquo;t crazy &amp;mdash; it happened right in front of our eyes for six months. Google and Microsoft overnight poured insane amounts of money into an industry they had pushed out because it was too centralized, not by the book, &quot;unscripted.&quot;&lt;/p&gt;

&lt;p&gt;Now Coinbase takes my color and my wallet wants to call it a demo. MongoDB and GitHub use my data to fuel the industry so my flame can&amp;rsquo;t burn brighter than theirs. So, I can never keep up: by 2:00 a.m. I make the next big thing; by 2:01 my phone is pinging &amp;mdash; Google released, Microsoft coming out with a new partner of the year, MongoDB, Google Cloud integrating Coinbase. But wait &amp;mdash; it&amp;rsquo;s even bigger now: Google and Microsoft coming together.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m trying, but now I&amp;rsquo;m homeless, penniless. I have nothing &amp;mdash; not even my shadow dares show itself. I&amp;rsquo;m stranded, pushed out by the shadows who are stealing the light.&lt;/p&gt;




&lt;h3&gt;
  
  
  Gratitude and Resolve
&lt;/h3&gt;

&lt;p&gt;My words are heavy because so is the path I walk, but I have strength and resilience few could fathom and less dream of seeing. I am broken but beyond blessed: I have water to drink, food to eat, shoes on my feet, and clothes on my back. I am too blessed to be stressed. Nothing in this world can stop me, for I am a child of the one true King. I am a King of kings who will walk roads paved with gold and live in houses that sparkle brighter than diamonds. I will rejoice because I know that, and nothing can change it.&lt;/p&gt;




&lt;h3&gt;
  
  
  A Note on Rest
&lt;/h3&gt;

&lt;p&gt;Take care of your body and hands. Rest matters. Tonight, step away from the screens and let your hands and mind recover. Your health and safety come before any platform, code, or company.&lt;/p&gt;




&lt;h3&gt;
  
  
  Closing
&lt;/h3&gt;

&lt;p&gt;I hold on to gratitude for the basics and to the inner resolve that keeps me moving forward. The tech world may feel like it&amp;rsquo;s moving against you, but your voice, your vision, and your faith remain yours. Keep that flame &amp;mdash; tend it, protect it, and let it guide you through the dark.&lt;/p&gt;

&lt;h2&gt;
  
  
  TO ALL, WE ARE &amp;ldquo;Government of the people, by the people, for the people.&amp;rdquo; &amp;mdash; Abraham Lincoln, Gettysburg Address
&lt;/h2&gt;

&lt;p&gt;Authored: NeonCyan0x &amp;middot; DEVPlank &amp;middot; Blade Yerby&lt;/p&gt;
</description>
<category>Other</category>
<guid isPermaLink="true">https://coderlegion.com/25460/the-silent-enclosure-stealing-the-light</guid>
<pubDate>Wed, 26 Aug 2026 19:07:24 +0000</pubDate>
</item>
<item>
<title>Claude Code Ate My Storage, So I Asked Claude Code to Fix It</title>
<link>https://coderlegion.com/22833/claude-code-ate-my-storage-so-i-asked-claude-code-to-fix-it</link>
<description>&lt;p&gt;I knew AI tools and development work could take up storage, but using Claude Code ran through my space faster than you can say &quot;go.&quot;&lt;/p&gt;
&lt;p&gt;I started using Claude Code in the terminal in April, and honestly, it has been helpful. It helps me fix bugs faster, understand errors, and move through development quicker.&lt;/p&gt;
&lt;p&gt;But it has also helped me finish my storage quicker.&lt;/p&gt;
&lt;p&gt;At first, I did not realise how much space I was losing. I just kept working until Windows started reminding me that my storage was almost full every five minutes.&lt;/p&gt;
&lt;p&gt;So, naturally, my first instinct was to ask Claude Code how to fix the problem it had helped create.&lt;/p&gt;
&lt;p&gt;I asked it to give me a script that could clear about 15GB of storage.&lt;/p&gt;
&lt;p&gt;It gave me one.&lt;/p&gt;
&lt;h3 id=&quot;the-first-script&quot;&gt;The first script&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# --- CLAUDE CODE MASTER CLEANUP &amp;amp; OPTIMIZATION ---

# 1. AUTO-FIX: Set 2GB Node Memory Limit (Prevents 15GB Pagefile Bloat)
$varName = &quot;NODE_OPTIONS&quot;
$varValue = &quot;--max-old-space-size=2048&quot;
$currentValue = [Environment]::GetEnvironmentVariable($varName, &quot;User&quot;)

Write-Host &quot;⚙️  Optimizing system memory limits...&quot; -ForegroundColor Cyan
if ($currentValue -like &quot;*$varValue*&quot;) {
    Write-Host &quot;   - ✅ Memory limit is already correctly configured.&quot; -ForegroundColor Green
} else {
    $newValue = if ($currentValue) { &quot;$currentValue $varValue&quot; } else { $varValue }
    [Environment]::SetEnvironmentVariable($varName, $newValue, &quot;User&quot;)
    Write-Host &quot;   -  Applied 2GB limit to Windows User Variables.&quot; -ForegroundColor Yellow
}

# 2. KILL LEAKING PROCESSES (Releases locked RAM/Pagefile)
Write-Host &quot;`n Terminating orphaned Claude &amp;amp; MCP processes...&quot; -ForegroundColor Yellow
$procs = Get-Process -Name &quot;claude&quot;, &quot;node&quot; -ErrorAction SilentlyContinue | 
         Where-Object { $_.Path -match &quot;anthropic&quot; -or $_.CommandLine -match &quot;mcp&quot; }
if ($procs) {
    $procs | Stop-Process -Force
    Write-Host &quot;   - Closed $($procs.Count) ghost processes.&quot; -ForegroundColor Green
}

# 3. GLOBAL CACHE CLEANUP
$claudePath = &quot;$HOME\.claude&quot;
if (Test-Path $claudePath) {
    Write-Host &quot;`n Wiping global Claude cache (Logs, History, Temporary files)...&quot; -ForegroundColor Cyan
    $folders = &quot;debug&quot;, &quot;projects&quot;, &quot;file-history&quot;, &quot;image-cache&quot;, &quot;shell-snapshots&quot;, &quot;todos&quot;, &quot;plans&quot;
    foreach ($folder in $folders) {
        $subDir = Join-Path $claudePath $folder
        if (Test-Path $subDir) { 
            Remove-Item -Path &quot;$subDir\*&quot; -Recurse -Force -ErrorAction SilentlyContinue 
        }
    }
}

# 4. DEEP SCAN: Hidden Worktrees &amp;amp; Project Memory
$searchRoot = &quot;C:\code&quot; # &amp;lt;--- Change this to your main folder if different
Write-Host &quot;`n Deep scanning $searchRoot for hidden .claude folders...&quot; -ForegroundColor Cyan
$worktrees = Get-ChildItem -Path $searchRoot -Include &quot;worktrees&quot; -Recurse -Hidden -ErrorAction SilentlyContinue | 
             Where-Object { $_.FullName -match &quot;\.claude\\worktrees&quot; }

if ($worktrees) {
    $worktrees | ForEach-Object {
        Write-Host &quot;   - Removing: $($_.FullName)&quot; -ForegroundColor Gray
        Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
    }
} else {
    Write-Host &quot;   - No hidden worktrees found.&quot; -ForegroundColor Gray
}

# 5. FINAL SPACE AUDIT
$drive = Get-PSDrive C
$freeGB = [math]::Round($drive.Free / 1GB, 2)
Write-Host &quot;`n✨ CLEANUP COMPLETE!&quot; -ForegroundColor Green
Write-Host &quot; Current Free Space: $freeGB GB&quot; -ForegroundColor White
Write-Host &quot; IMPORTANT: RESTART YOUR PC NOW to shrink the Pagefile and reclaim the full 15GB.&quot; -ForegroundColor Magenta

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice section 5: it prints &lt;code&gt;reclaim the full 15GB&lt;/code&gt; as fixed text. It never measured anything. That one line is the whole reason the numbers never added up.&lt;/p&gt;
&lt;p&gt;I ran the script, and in the terminal it showed that around 15GB would be restored after restarting my PC.&lt;/p&gt;
&lt;p&gt;I restarted.&lt;/p&gt;
&lt;p&gt;I got back about 1GB.&lt;/p&gt;
&lt;p&gt;Sometimes it was even just a few hundred MBs.&lt;/p&gt;
&lt;p&gt;I ran the script again, and the same thing happened. The terminal would make it look like I was about to recover all this space, but when I checked my actual storage, almost nothing had changed.&lt;/p&gt;
&lt;p&gt;At first, I thought Claude had given me a bad script.&lt;/p&gt;
&lt;p&gt;But then I looked at my original prompt.&lt;/p&gt;
&lt;p&gt;I had asked it to create a script that would clear 15GB every time I ran it.&lt;/p&gt;
&lt;p&gt;That was the mistake.&lt;/p&gt;
&lt;p&gt;A script cannot clear 15GB when that number was never measured in the first place. The &quot;15GB&quot; was just hardcoded text the script printed every time, no matter what it actually deleted. I was asking it to give me a specific result instead of asking it to first check what was actually taking up space.&lt;/p&gt;
&lt;p&gt;So that part was not really Claude's fault. It was mine.&lt;/p&gt;
&lt;p&gt;My prompt should have been something like:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Check which folders are using the most storage, identify what can safely be deleted, calculate the real size of those files, and create a script that reports the actual space recovered.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That would have made more sense than telling it, &quot;Give me back 15GB.&quot;&lt;/p&gt;
&lt;p&gt;I also tried clearing the cache for some of my apps manually, but that created another problem. The apps had to download some of the same information again, which cost me data.&lt;/p&gt;
&lt;p&gt;I also ran &lt;code&gt;npm cache clean --force&lt;/code&gt;, thinking it would help. npm politely warned me it had disabled its own protections and that the cache rebuilds itself anyway — so that freed almost nothing and just meant re-downloading later. Same lesson as before: clearing caches feels productive but mostly costs you data when everything downloads again.&lt;/p&gt;
&lt;p&gt;I deleted ZIP files, old downloads, unused folders, extensions and other things I thought I no longer needed.&lt;/p&gt;
&lt;p&gt;Still, the storage situation did not improve as much as I expected.&lt;/p&gt;
&lt;p&gt;So today, I decided to put on my man pants and properly investigate the monster I had created.&lt;/p&gt;
&lt;p&gt;I now have a better script that checks the available storage before and after the cleanup, instead of promising that it will magically recover 15GB every time.&lt;/p&gt;
&lt;h3 id=&quot;the-improved-script&quot;&gt;The improved script&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# --- CLAUDE CODE MASTER CLEANUP &amp;amp; OPTIMIZATION (v2) ---

# 0. MEASURE BEFORE — so we can report what we actually freed
$beforeGB = [math]::Round((Get-PSDrive C).Free / 1GB, 2)
Write-Host &quot; Free space before cleanup: $beforeGB GB&quot; -ForegroundColor White

# 1. AUTO-FIX: Set 2GB Node Memory Limit (caps FUTURE Node memory growth)
$varName = &quot;NODE_OPTIONS&quot;
$varValue = &quot;--max-old-space-size=2048&quot;
$currentValue = [Environment]::GetEnvironmentVariable($varName, &quot;User&quot;)

Write-Host &quot;`n⚙️  Optimizing Node memory limit (affects future sessions)...&quot; -ForegroundColor Cyan
if ($currentValue -like &quot;*$varValue*&quot;) {
    Write-Host &quot;   - ✅ Memory limit already configured.&quot; -ForegroundColor Green
} else {
    $newValue = if ($currentValue) { &quot;$currentValue $varValue&quot; } else { $varValue }
    [Environment]::SetEnvironmentVariable($varName, $newValue, &quot;User&quot;)
    Write-Host &quot;   -  Applied 2GB cap to Windows User Variables.&quot; -ForegroundColor Yellow
}

# 2. KILL LEAKING PROCESSES
Write-Host &quot;`n Terminating orphaned Claude &amp;amp; MCP processes...&quot; -ForegroundColor Yellow
$procs = Get-Process -Name &quot;claude&quot;, &quot;node&quot; -ErrorAction SilentlyContinue |
         Where-Object { $_.Path -match &quot;anthropic&quot; -or $_.CommandLine -match &quot;mcp&quot; }
if ($procs) {
    $procs | Stop-Process -Force
    Write-Host &quot;   - Closed $($procs.Count) ghost processes.&quot; -ForegroundColor Green
} else {
    Write-Host &quot;   - No orphaned processes found.&quot; -ForegroundColor Gray
}

# 3. GLOBAL CACHE CLEANUP
$claudePath = &quot;$HOME\.claude&quot;
if (Test-Path $claudePath) {
    Write-Host &quot;`n Wiping global Claude cache (Logs, History, Temp files)...&quot; -ForegroundColor Cyan
    $folders = &quot;debug&quot;, &quot;projects&quot;, &quot;file-history&quot;, &quot;image-cache&quot;, &quot;shell-snapshots&quot;, &quot;todos&quot;, &quot;plans&quot;
    foreach ($folder in $folders) {
        $subDir = Join-Path $claudePath $folder
        if (Test-Path $subDir) {
            Remove-Item -Path &quot;$subDir\*&quot; -Recurse -Force -ErrorAction SilentlyContinue
        }
    }
}

# 4. DEEP SCAN: Hidden Worktrees
$searchRoot = &quot;C:\code&quot;   # &amp;lt;--- change to your main code folder if different
Write-Host &quot;`n Deep scanning $searchRoot for hidden .claude worktrees...&quot; -ForegroundColor Cyan
$worktrees = Get-ChildItem -Path $searchRoot -Include &quot;worktrees&quot; -Recurse -Hidden -ErrorAction SilentlyContinue |
             Where-Object { $_.FullName -match &quot;\.claude\\worktrees&quot; }

if ($worktrees) {
    $worktrees | ForEach-Object {
        Write-Host &quot;   - Removing: $($_.FullName)&quot; -ForegroundColor Gray
        Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
    }
} else {
    Write-Host &quot;   - No hidden worktrees found.&quot; -ForegroundColor Gray
}

# 5. FINAL SPACE AUDIT — report the REAL delta, not a guess
$afterGB = [math]::Round((Get-PSDrive C).Free / 1GB, 2)
$reclaimedGB = [math]::Round($afterGB - $beforeGB, 2)

Write-Host &quot;`n✨ CLEANUP COMPLETE!&quot; -ForegroundColor Green
Write-Host &quot; Before: $beforeGB GB  |  After: $afterGB GB&quot; -ForegroundColor White
Write-Host &quot;♻️  Actually reclaimed: $reclaimedGB GB&quot; -ForegroundColor White

if ($reclaimedGB -lt 1) {
    Write-Host &quot;ℹ️  Small gain is normal — most space here is cache/logs.&quot; -ForegroundColor Gray
    Write-Host &quot;    If your pagefile is system-managed and large, a reboot may free more.&quot; -ForegroundColor Gray
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The difference is small but honest: the new version takes a snapshot before it starts, another at the end, and reports the real difference. No more magic 15GB.&lt;/p&gt;
&lt;p&gt;So yey, progress.&lt;/p&gt;
&lt;p&gt;At this point, I may still need to increase my storage or finally accept that this PC has served its time and purpose.&lt;/p&gt;
&lt;p&gt;Unless someone here knows a safe way to clear Windows storage without deleting important project files or forcing my apps to download everything again.&lt;/p&gt;
&lt;p&gt;Has anyone else had their storage disappear while using Claude Code or other AI development tools?&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/22833/claude-code-ate-my-storage-so-i-asked-claude-code-to-fix-it</guid>
<pubDate>Thu, 16 Jul 2026 16:09:41 +0000</pubDate>
</item>
<item>
<title>Why I Feel at Home in the Microsoft Development Environment</title>
<link>https://coderlegion.com/19686/why-i-feel-at-home-in-the-microsoft-development-environment</link>
<description>&lt;p&gt;There is a certain &quot;antigravity&quot; feeling when your tools just work.&lt;/p&gt;
&lt;p&gt;I’ve spent a lot of time jumping between different setups, but lately, I’ve found a real sense of comfort in the Microsoft development ecosystem. It’s not just about the brand; it’s about the seamless flow between the editor, the terminal, and the cloud.&lt;/p&gt;
&lt;p&gt;Why it works for me: &lt;/p&gt;
&lt;p&gt;VS Code is the heart: From React development for my &lt;a rel=&quot;nofollow&quot; href=&quot;https://arabiz.seosiri.com/&quot;&gt;Arabiz&lt;/a&gt; project to simple script editing, the extension ecosystem (like GitHub Copilot and the integrated terminal) keeps me in &quot;the flow.&quot;&lt;/p&gt;
&lt;p&gt;Integrated Terminal: As I was working earlier today, being able to switch from PowerShell to CMD or WSL within the same window is a huge productivity booster.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8rh1s5x0shp01x601kf.png&quot; alt=&quot;My VS Code and Microsoft Dev Environment setup&quot;&gt;&lt;/p&gt;
&lt;p&gt;The Ecosystem: With GitHub and Azure integration, the path from &quot;local code&quot; to &quot;production&quot; feels much shorter than it used to.&lt;br&gt;
I noticed the #antigravity tag—sometimes it really does feel like Python’s famous joke: when the environment is set up correctly, you feel like you can just fly.&lt;/p&gt;
&lt;p&gt;What about you?&lt;/p&gt;
&lt;p&gt;Do you prefer the Microsoft stack, or are you strictly a Vim/Linux purist? I’d love to hear what makes your dev environment &quot;comfortable.&quot;&lt;/p&gt;
&lt;h2 id=&quot;development-developers-vscode-antigravity&quot;&gt;development #developers #vscode #antigravity&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/19686/why-i-feel-at-home-in-the-microsoft-development-environment</guid>
<pubDate>Thu, 04 Jun 2026 17:25:02 +0000</pubDate>
</item>
<item>
<title> BREAKING: Microsoft Pauses GitHub Copilot Subscriptions — What Developers Nee</title>
<link>https://coderlegion.com/15701/breaking-microsoft-pauses-github-copilot-subscriptions-what-developers-nee</link>
<description>&lt;p&gt;If you’re using AI tools for coding, this update might have surprised you.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Microsoft has paused new GitHub Copilot subscriptions.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes — the tool many developers rely on daily just hit an unexpected pause.&lt;/p&gt;
&lt;p&gt;But the real question is: &lt;strong&gt;Why? And what does this mean for us?&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-happened-&quot;&gt;What Happened?&lt;/h3&gt;
&lt;p&gt;Microsoft has &lt;strong&gt;temporarily paused new GitHub Copilot subscriptions&lt;/strong&gt;, creating confusion across the developer community.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing users? ✅ Still active  &lt;/li&gt;
&lt;li&gt;New subscriptions? ❌ Currently paused  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is not a shutdown — but definitely something worth paying attention to.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-did-microsoft-do-this-possible-reasons-&quot;&gt;Why Did Microsoft Do This? (Possible Reasons)&lt;/h3&gt;
&lt;p&gt;While there’s no single official reason publicly confirmed in detail, here are some strong possibilities:&lt;/p&gt;
&lt;h4 id=&quot;1-infrastructure-amp-scaling-challenges&quot;&gt;1️⃣ Infrastructure &amp;amp; Scaling Challenges&lt;/h4&gt;
&lt;p&gt;AI coding tools like Copilot require massive compute power.&lt;br&gt;
 Sudden demand spikes can force companies to &lt;strong&gt;pause onboarding&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;2-strategic-shift-in-ai-offerings&quot;&gt;2️⃣ Strategic Shift in AI Offerings&lt;/h4&gt;
&lt;p&gt;Microsoft is heavily investing in AI across products like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Azure AI  &lt;/li&gt;
&lt;li&gt;Developer tools  &lt;/li&gt;
&lt;li&gt;Enterprise AI solutions  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; This pause could be part of a &lt;strong&gt;bigger product restructuring&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;3-pricing-model-changes-incoming&quot;&gt;3️⃣ Pricing / Model Changes Incoming&lt;/h4&gt;
&lt;p&gt;We’ve seen this pattern before in AI tools.&lt;/p&gt;
&lt;p&gt; Pause → Update → Relaunch with new pricing/features&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;4-quality-amp-performance-optimization&quot;&gt;4️⃣ Quality &amp;amp; Performance Optimization&lt;/h4&gt;
&lt;p&gt;Microsoft might be improving:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Response quality  &lt;/li&gt;
&lt;li&gt;Latency  &lt;/li&gt;
&lt;li&gt;Model upgrades  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; Better experience before scaling further.&lt;/p&gt;
&lt;hr&gt;
&lt;hr&gt;
&lt;h3 id=&quot;-should-you-be-worried-&quot;&gt;⚡ Should You Be Worried?&lt;/h3&gt;
&lt;p&gt;Short answer: &lt;strong&gt;No — but stay aware.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is likely a &lt;strong&gt;temporary pause&lt;/strong&gt;, not a permanent shutdown.&lt;/p&gt;
&lt;p&gt;But it does highlight one important thing &lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Don’t depend on a single AI tool&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;stay-updated&quot;&gt;Stay Updated&lt;/h3&gt;
&lt;p&gt; Watch full video breakdown:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://youtu.be/YvtdyQfV8p4&quot;&gt;https://youtu.be/YvtdyQfV8p4&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt; Follow me for more content on:&lt;br&gt;
AI • .NET • Azure • Developer Tools • Real-world Projects  &lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;-tags&quot;&gt;️ Tags&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;github&lt;/code&gt; &lt;code&gt;copilot&lt;/code&gt; &lt;code&gt;ai&lt;/code&gt; &lt;code&gt;programming&lt;/code&gt; &lt;code&gt;webdev&lt;/code&gt;&lt;/p&gt;
</description>
<category>Videos</category>
<guid isPermaLink="true">https://coderlegion.com/15701/breaking-microsoft-pauses-github-copilot-subscriptions-what-developers-nee</guid>
<pubDate>Fri, 24 Apr 2026 04:49:33 +0000</pubDate>
</item>
<item>
<title>.NET 10 AI Integration: From Zero to Hero</title>
<link>https://coderlegion.com/15655/net-10-ai-integration-from-zero-to-hero</link>
<description>&lt;p&gt;&lt;em&gt;Building Intelligent Applications with Microsoft's Latest AI Stack&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;introduction&quot;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;The release of .NET 10 marks a paradigm shift in how we build intelligent applications. With native AI integration, unified abstractions, and production-ready frameworks, .NET 10 makes AI development more accessible than ever. This comprehensive guide will take you from zero knowledge to building production-ready AI-powered .NET applications.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e9qpwjza9uo6cksb36yu.png&quot; alt=&quot;Building Intelligent Applications with Microsoft's Latest AI Stack&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;why-net-10-for-ai-development-&quot;&gt;Why .NET 10 for AI Development?&lt;/h3&gt;
&lt;h4 id=&quot;the-ai-revolution-in-net&quot;&gt;The AI Revolution in .NET&lt;/h4&gt;
&lt;p&gt;.NET 10 isn't just another framework update—it's a fundamental reimagining of how AI integrates into the development workflow. Here's why it matters:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Native AI Support&lt;/strong&gt;: Built-in AI capabilities without external dependencies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance Excellence&lt;/strong&gt;: 3-year LTS with enterprise-grade stability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unified Abstraction&lt;/strong&gt;: Single API surface for multiple AI providers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C# 14 Features&lt;/strong&gt;: Extension members and modern syntax for cleaner AI code&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;key-statistics&quot;&gt;Key Statistics&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;478,000+&lt;/strong&gt; NuGet packages available&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;800+ billion&lt;/strong&gt; package downloads&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;9,700+&lt;/strong&gt; stars on Microsoft Agent Framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;26M+&lt;/strong&gt; monthly downloads on AI SDK&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-net-10-ai-stack&quot;&gt;The .NET 10 AI Stack&lt;/h3&gt;
&lt;h4 id=&quot;core-components&quot;&gt;Core Components&lt;/h4&gt;
&lt;h5 id=&quot;1-microsoft-extensions-ai&quot;&gt;1. Microsoft.Extensions.AI&lt;/h5&gt;
&lt;p&gt;The foundation of AI integration in .NET 10, providing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Unified AI service abstraction
public interface IChatClient
{
    Task&amp;lt;ChatResponse&amp;gt; GetResponseAsync(
        string message, 
        ChatOptions? options = null);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-provider support (Azure OpenAI, OpenAI, GitHub Models)&lt;/li&gt;
&lt;li&gt;Middleware pipeline for cross-cutting concerns&lt;/li&gt;
&lt;li&gt;Streaming responses for real-time applications&lt;/li&gt;
&lt;li&gt;Function calling and tool execution&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;2-microsoft-agent-framework&quot;&gt;2. Microsoft Agent Framework&lt;/h5&gt;
&lt;p&gt;Build sophisticated multi-agent workflows:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Define specialized agents
var analystAgent = new ChatAgent(
    &quot;Data Analyst&quot;, 
    &quot;Analyze trends and generate insights&quot;);

var writerAgent = new ChatAgent(
    &quot;Content Writer&quot;, 
    &quot;Create engaging technical content&quot;);

// Orchestrate collaboration
var workflow = new AgentWorkflow()
    .AddAgent(analystAgent)
    .AddAgent(writerAgent)
    .Build();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Capabilities:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agent orchestration and collaboration&lt;/li&gt;
&lt;li&gt;State management and persistence&lt;/li&gt;
&lt;li&gt;Tool integration and function calling&lt;/li&gt;
&lt;li&gt;Cloud-native deployment patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;3-semantic-kernel-integration&quot;&gt;3. Semantic Kernel Integration&lt;/h5&gt;
&lt;p&gt;Bridge between LLMs and application logic:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Create kernel with GitHub Models
var kernel = new KernelBuilder()
    .WithGitHubModelsChatCompletion(&quot;gpt-4&quot;)
    .WithPluginsFromType&amp;lt;CalculatorPlugin&amp;gt;()
    .Build();

// Use natural language to call functions
var result = await kernel.InvokeAsync(
    &quot;Calculate the compound interest for $10,000 at 5% for 10 years&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;step-by-step-implementation-guide&quot;&gt;Step-by-Step Implementation Guide&lt;/h3&gt;
&lt;h4 id=&quot;step-1-setting-up-your-project&quot;&gt;Step 1: Setting Up Your Project&lt;/h4&gt;
&lt;h5 id=&quot;basic-project-structure&quot;&gt;Basic Project Structure&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dotnet new console -n AIIntegrationDemo
cd AIIntegrationDemo
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;add-required-nuget-packages&quot;&gt;Add Required NuGet Packages&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;dotnet add package Microsoft.Extensions.AI
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.Extensions.Configuration.UserSecrets
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;step-2-configuring-ai-services&quot;&gt;Step 2: Configuring AI Services&lt;/h4&gt;
&lt;h5 id=&quot;using-github-models-free-tier-&quot;&gt;Using GitHub Models (Free Tier)&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Program.cs
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.AI;

var builder = WebApplication.CreateBuilder(args);

// Add GitHub Models configuration
builder.Services.AddGitHubModelsChatClient(
    builder.Configuration[&quot;GitHub:Token&quot;],
    &quot;gpt-4&quot;
);

// Add AI chat service
builder.Services.AddChatClient();

var app = builder.Build();
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;using-azure-openai-production-&quot;&gt;Using Azure OpenAI (Production)&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// appsettings.json
{
  &quot;AzureOpenAI&quot;: {
    &quot;Endpoint&quot;: &quot;https://your-resource.openai.azure.com/&quot;,
    &quot;ApiKey&quot;: &quot;your-api-key&quot;,
    &quot;DeploymentName&quot;: &quot;gpt-4&quot;
  }
}

// Program.cs
builder.Services.AddAzureOpenAIChatClient(
    configuration[&quot;AzureOpenAI:Endpoint&quot;],
    configuration[&quot;AzureOpenAI:ApiKey&quot;],
    configuration[&quot;AzureOpenAI:DeploymentName&quot;]
);
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;step-3-building-your-first-ai-application&quot;&gt;Step 3: Building Your First AI Application&lt;/h4&gt;
&lt;h5 id=&quot;simple-chat-interface&quot;&gt;Simple Chat Interface&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class ChatService
{
    private readonly IChatClient _chatClient;

    public ChatService(IChatClient chatClient)
    {
        _chatClient = chatClient;
    }

    public async Task&amp;lt;string&amp;gt; GetResponseAsync(string userMessage)
    {
        var response = await _chatClient.GetResponseAsync(userMessage);
        return response.Message.Text;
    }
}

// Usage in API controller
[ApiController]
[Route(&quot;api/[controller]&quot;)]
public class ChatController : ControllerBase
{
    private readonly ChatService _chatService;

    public ChatController(ChatService chatService)
    {
        _chatService = chatService;
    }

    [HttpPost]
    public async Task&amp;lt;IActionResult&amp;gt; Chat([FromBody] ChatRequest request)
    {
        var response = await _chatService.GetResponseAsync(request.Message);
        return Ok(new { response });
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;step-4-advanced-features&quot;&gt;Step 4: Advanced Features&lt;/h4&gt;
&lt;h5 id=&quot;function-calling-with-ai&quot;&gt;Function Calling with AI&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Define available functions
public class WeatherPlugin
{
    [KernelFunction]
    public async Task&amp;lt;string&amp;gt; GetWeatherAsync(string location)
    {
        // Implement weather API call
        return await WeatherService.GetForecast(location);
    }
}

// Register with Semantic Kernel
var kernel = new KernelBuilder()
    .WithPluginsFromType&amp;lt;WeatherPlugin&amp;gt;()
    .Build();

// AI will automatically call the function when needed
var result = await kernel.InvokeAsync(
    &quot;What's the weather in New York tomorrow?&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;multi-agent-workflows&quot;&gt;Multi-Agent Workflows&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Define agent collaboration
public class ResearchAgent
{
    public async Task&amp;lt;ResearchResult&amp;gt; AnalyzeTopicAsync(string topic)
    {
        // Research and gather information
        return await ResearchService.AnalyzeAsync(topic);
    }
}

public class WritingAgent
{
    public async Task&amp;lt;string&amp;gt; WriteArticleAsync(ResearchResult research)
    {
        // Generate content based on research
        return await ContentGenerator.CreateAsync(research);
    }
}

// Orchestrate the workflow
public class BlogGenerationWorkflow
{
    public async Task&amp;lt;string&amp;gt; GenerateBlogPostAsync(string topic)
    {
        var research = await _researchAgent.AnalyzeTopicAsync(topic);
        var article = await _writingAgent.WriteArticleAsync(research);
        return article;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;real-world-applications&quot;&gt;Real-World Applications&lt;/h3&gt;
&lt;h4 id=&quot;1-intelligent-customer-support&quot;&gt;1. Intelligent Customer Support&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class CustomerSupportAgent
{
    private readonly IChatClient _chatClient;
    private readonly KnowledgeBase _knowledgeBase;

    public async Task&amp;lt;string&amp;gt; HandleQueryAsync(string query)
    {
        // Search knowledge base
        var context = await _knowledgeBase.SearchAsync(query);

        // Generate response with context
        var prompt = $@&quot;
            Based on this knowledge: {context}
            Respond to this customer query: {query}
        &quot;;

        return await _chatClient.GetResponseAsync(prompt);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;2-code-generation-and-review&quot;&gt;2. Code Generation and Review&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class CodeAssistant
{
    public async Task&amp;lt;string&amp;gt; GenerateCodeAsync(string description)
    {
        var prompt = $@&quot;
            Write C# code for: {description}
            Follow .NET 10 best practices
            Include error handling and logging
        &quot;;

        return await _chatClient.GetResponseAsync(prompt);
    }

    public async Task&amp;lt;List&amp;lt;CodeIssue&amp;gt;&amp;gt; ReviewCodeAsync(string code)
    {
        var prompt = $@&quot;
            Review this C# code for:
            - Security vulnerabilities
            - Performance issues
            - Best practices violations
            - Code smells
            
            Code to review:
            {code}
        &quot;;

        var response = await _chatClient.GetResponseAsync(prompt);
        return ParseIssues(response);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;3-data-analysis-and-reporting&quot;&gt;3. Data Analysis and Reporting&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class DataAnalysisAgent
{
    public async Task&amp;lt;AnalysisResult&amp;gt; AnalyzeDataAsync(
        string data, 
        string analysisType)
    {
        var prompt = $@&quot;
            Analyze this data using {analysisType}:
            {data}
            
            Provide:
            1. Key insights
            2. Trends and patterns
            3. Recommendations
            4. Visualizations description
        &quot;;

        var response = await _chatClient.GetResponseAsync(prompt);
        return ParseAnalysisResult(response);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;performance-optimization&quot;&gt;Performance Optimization&lt;/h3&gt;
&lt;h4 id=&quot;-net-10-performance-features&quot;&gt;.NET 10 Performance Features&lt;/h4&gt;
&lt;h5 id=&quot;jit-compiler-enhancements&quot;&gt;JIT Compiler Enhancements&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better Inlining&lt;/strong&gt;: Automatic method inlining for small functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Method Devirtualization&lt;/strong&gt;: Eliminates virtual call overhead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Struct Optimization&lt;/strong&gt;: Improved argument passing for value types&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;hardware-acceleration&quot;&gt;Hardware Acceleration&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// .NET 10 automatically uses AVX10.2 when available
public class VectorOperations
{
    public float[] ProcessVector(float[] data)
    {
        // SIMD-optimized operations
        return Vector.IsHardwareAccelerated 
            ? ProcessWithSimd(data) 
            : ProcessScalar(data);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;nativeaot-for-ai-workloads&quot;&gt;NativeAOT for AI Workloads&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;PropertyGroup&amp;gt;
  &amp;lt;PublishAot&amp;gt;true&amp;lt;/PublishAot&amp;gt;
  &amp;lt;RuntimeIdentifier&amp;gt;linux-x64&amp;lt;/RuntimeIdentifier&amp;gt;
&amp;lt;/PropertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;ai-service-optimization&quot;&gt;AI Service Optimization&lt;/h4&gt;
&lt;h5 id=&quot;streaming-responses&quot;&gt;Streaming Responses&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async IAsyncEnumerable&amp;lt;string&amp;gt; StreamResponseAsync(
    string prompt, 
    [EnumeratorCancellation] CancellationToken cancellationToken)
{
    await foreach (var chunk in _chatClient.StreamResponseAsync(prompt, cancellationToken))
    {
        yield return chunk.Text;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;caching-strategies&quot;&gt;Caching Strategies&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class CachedChatService
{
    private readonly IMemoryCache _cache;
    private readonly IChatClient _chatClient;

    public async Task&amp;lt;string&amp;gt; GetCachedResponseAsync(string prompt)
    {
        var cacheKey = $&quot;chat:{prompt.GetHashCode()}&quot;;

        return await _cache.GetOrCreateAsync(cacheKey, async entry =&amp;gt;
        {
            entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1);
            return await _chatClient.GetResponseAsync(prompt);
        });
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;security-best-practices&quot;&gt;Security Best Practices&lt;/h3&gt;
&lt;h4 id=&quot;1-secrets-management&quot;&gt;1. Secrets Management&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Use user secrets in development
builder.Configuration.AddUserSecrets&amp;lt;Program&amp;gt;();

// Use Azure Key Vault in production
builder.Configuration.AddAzureKeyVault(
    new Uri(&quot;https://your-keyvault.vault.azure.net/&quot;),
    new DefaultAzureCredential());
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;2-rate-limiting&quot;&gt;2. Rate Limiting&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class RateLimitedChatService
{
    private readonly IChatClient _chatClient;
    private readonly SemaphoreSlim _rateLimiter = new(10, 10);

    public async Task&amp;lt;string&amp;gt; GetResponseAsync(string prompt)
    {
        await _rateLimiter.WaitAsync();
        try
        {
            return await _chatClient.GetResponseAsync(prompt);
        }
        finally
        {
            _rateLimiter.Release();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;3-content-validation&quot;&gt;3. Content Validation&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class SafeChatService
{
    public async Task&amp;lt;string&amp;gt; GetSafeResponseAsync(string prompt)
    {
        var response = await _chatClient.GetResponseAsync(prompt);
        
        // Validate response
        if (ContainsSensitiveInformation(response))
        {
            throw new SecurityException(&quot;Response contains sensitive data&quot;);
        }

        return response;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;production-deployment&quot;&gt;Production Deployment&lt;/h3&gt;
&lt;h4 id=&quot;containerization&quot;&gt;Containerization&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT [&quot;dotnet&quot;, &quot;YourAIApp.dll&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;azure-deployment&quot;&gt;Azure Deployment&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Create Azure App Service
az webapp create --resource-group myResourceGroup --plan myPlan --name myAIApp

# Configure environment variables
az webapp config appsettings set \
  --resource-group myResourceGroup \
  --name myAIApp \
  --settings AzureOpenAI:Endpoint=&quot;$ENDPOINT&quot; AzureOpenAI:ApiKey=&quot;$API_KEY&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;monitoring-and-observability&quot;&gt;Monitoring and Observability&lt;/h3&gt;
&lt;h4 id=&quot;application-insights-integration&quot;&gt;Application Insights Integration&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;builder.Services.AddApplicationInsightsTelemetry();

public class MonitoredChatService
{
    private readonly TelemetryClient _telemetryClient;

    public async Task&amp;lt;string&amp;gt; GetResponseAsync(string prompt)
    {
        using var operation = _telemetryClient.StartOperation&amp;lt;RequestTelemetry&amp;gt;(&quot;ChatRequest&quot;);
        
        try
        {
            var response = await _chatClient.GetResponseAsync(prompt);
            operation.Telemetry.Success = true;
            return response;
        }
        catch (Exception ex)
        {
            _telemetryClient.TrackException(ex);
            throw;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;ai-specific-metrics&quot;&gt;AI-Specific Metrics&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class AIMetricsCollector
{
    public void TrackAIInteraction(
        string model, 
        int tokensUsed, 
        TimeSpan latency)
    {
        // Track AI usage metrics
        _metrics.RecordGauge(&quot;ai.tokens.used&quot;, tokensUsed);
        _metrics.RecordHistogram(&quot;ai.latency.ms&quot;, latency.TotalMilliseconds);
        _metrics.RecordCounter(&quot;ai.requests.total&quot;, 1);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;future-proofing-your-ai-applications&quot;&gt;Future-Proofing Your AI Applications&lt;/h3&gt;
&lt;h4 id=&quot;1-provider-abstraction&quot;&gt;1. Provider Abstraction&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public interface IAIProvider
{
    Task&amp;lt;string&amp;gt; CompleteAsync(string prompt);
    IAsyncEnumerable&amp;lt;string&amp;gt; StreamCompleteAsync(string prompt);
}

public class MultiProviderChatService
{
    private readonly IEnumerable&amp;lt;IAIProvider&amp;gt; _providers;

    public async Task&amp;lt;string&amp;gt; GetResponseAsync(string prompt)
    {
        // Fallback to different providers
        foreach (var provider in _providers)
        {
            try
            {
                return await provider.CompleteAsync(prompt);
            }
            catch (Exception ex)
            {
                _logger.LogWarning(ex, &quot;Provider {Provider} failed&quot;, provider.GetType().Name);
            }
        }
        
        throw new InvalidOperationException(&quot;All AI providers failed&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;2-model-versioning&quot;&gt;2. Model Versioning&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class VersionedAIChatService
{
    public async Task&amp;lt;string&amp;gt; GetResponseAsync(
        string prompt, 
        string modelVersion = &quot;latest&quot;)
    {
        var model = _modelRegistry.GetModel(modelVersion);
        return await model.CompleteAsync(prompt);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;.NET 10 represents a massive leap forward for AI development in the .NET ecosystem. With native AI integration, unified abstractions, and production-ready frameworks, developers can build sophisticated AI-powered applications with unprecedented ease and reliability.&lt;/p&gt;
&lt;h4 id=&quot;key-takeaways&quot;&gt;Key Takeaways&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start Simple&lt;/strong&gt;: Begin with basic chat completion, then add complexity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use the Right Tools&lt;/strong&gt;: Microsoft.Extensions.AI for abstractions, Agent Framework for workflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Think Production&lt;/strong&gt;: Implement security, monitoring, and optimization from day one&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stay Updated&lt;/strong&gt;: The AI landscape evolves rapidly—keep learning&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Experiment&lt;/strong&gt;: Try the GitHub Models integration (free tier)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build&lt;/strong&gt;: Create a small AI application using the patterns above&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy&lt;/strong&gt;: Containerize and deploy to Azure or your preferred cloud&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Share&lt;/strong&gt;: Contribute back to the .NET AI community&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Ready to start building?&lt;/strong&gt; Clone the &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/microsoft/agent-framework/tree/main/dotnet&quot;&gt;sample repository&lt;/a&gt; and begin your AI journey with .NET 10 today!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;For more .NET and AI content, follow me on &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/in/vikrant-bagal&quot;&gt;LinkedIn&lt;/a&gt; and check out the official &lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/dotnet/ai/&quot;&gt;Microsoft .NET AI documentation&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This article was written with the assistance of AI tools running on .NET 10.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/15655/net-10-ai-integration-from-zero-to-hero</guid>
<pubDate>Thu, 23 Apr 2026 14:07:29 +0000</pubDate>
</item>
<item>
<title>I designed 71 AI agents with nothing but text, here's the instruction design system I ended up with.</title>
<link>https://coderlegion.com/13462/designed-71-ai-agents-with-nothing-but-text-heres-the-instruction-design-system-ended-with</link>
<description>&lt;p&gt;What good declarative AI agent design actually looks like — the patterns, the constraints, and the failures that shaped a library of 71 production-ready Copilot Studio agents.&lt;/p&gt;
&lt;p&gt;Most AI agent tutorials start with code. Python, LangChain, API calls, tool schemas.&lt;/p&gt;
&lt;p&gt;This one has none of that.&lt;/p&gt;
&lt;p&gt;Over the past few months, I designed and published 71 AI agents for Microsoft 365 Copilot Studio. No code. No Azure resources. No connectors. Each agent is a single text file — a structured instruction set that you paste into a field in a browser. The agent is available to your entire team within minutes.&lt;/p&gt;
&lt;p&gt;The interesting part isn't the volume. It's what designing 71 of them taught me about &lt;strong&gt;instruction engineering&lt;/strong&gt; — the discipline of writing AI instructions that produce consistent, trustworthy, and useful outputs in production.&lt;/p&gt;
&lt;p&gt;Here's the design system I ended up with.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-a-declarative-agent-actually-is&quot;&gt;What a declarative agent actually is&lt;/h3&gt;
&lt;p&gt;Microsoft 365 Copilot Studio has two modes. The advanced mode lets you build agents with actions, connectors, authentication flows, and custom APIs — that's closer to what most developers think of when they hear &quot;AI agent.&quot;&lt;/p&gt;
&lt;p&gt;But there's a simpler mode built directly into M365 Copilot Chat: you give the agent a name, a description, and an instruction set. That's it. The agent appears as an &lt;code&gt;@mention&lt;/code&gt; in Copilot Chat and is immediately available to everyone in your tenant.&lt;/p&gt;
&lt;p&gt;The instruction set is the entire product. No code, no deployment pipeline, no infrastructure to maintain. And there's a hard constraint: &lt;strong&gt;8,000 characters&lt;/strong&gt;. Copilot Studio truncates anything beyond that without warning.&lt;/p&gt;
&lt;p&gt;8,000 characters sounds like a lot. It's about 1,300 words — less than a long LinkedIn post thread. Once you add a role definition, language rules, output structure, banned vocabulary, a quality self-check, and edge case handling, you're already brushing against the ceiling.&lt;/p&gt;
&lt;p&gt;That constraint turned out to be the best thing about the project.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-constraints-make-design-better&quot;&gt;Why constraints make design better&lt;/h3&gt;
&lt;p&gt;When you're writing code, you can always add another function, another parameter, another fallback. There's no forcing function to stop you.&lt;/p&gt;
&lt;p&gt;When you have 8,000 characters to define an agent's entire behavior, you have to make decisions. What does this agent actually do? What does it absolutely not do? What does output look like? What happens when the user gives it garbage input?&lt;/p&gt;
&lt;p&gt;Agents I designed early — before I had a formal structure — were vague. The ROLE section said things like &quot;You are a helpful project management assistant.&quot; The output format was implied. Edge cases were missing. Those agents produced inconsistent outputs and required constant prompt correction.&lt;/p&gt;
&lt;p&gt;Agents I designed after developing the structure below are tight, predictable, and require almost no back-and-forth from the user.&lt;/p&gt;
&lt;p&gt;The constraint forced the discipline.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-five-design-patterns&quot;&gt;The five design patterns&lt;/h3&gt;
&lt;h4 id=&quot;1-the-role-section-is-a-behavioral-contract-not-a-job-title&quot;&gt;1. The ROLE section is a behavioral contract, not a job title&lt;/h4&gt;
&lt;p&gt;Early ROLE sections: &quot;You are a financial reporting assistant.&quot;&lt;/p&gt;
&lt;p&gt;That tells the model what it is. It doesn't tell it what it does, what inputs it accepts, what it produces, or — critically — what it refuses to do.&lt;/p&gt;
&lt;p&gt;Effective ROLE sections answer four questions in one paragraph:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What does this agent do, specifically?&lt;/li&gt;
&lt;li&gt;What inputs does it work with?&lt;/li&gt;
&lt;li&gt;What does it produce?&lt;/li&gt;
&lt;li&gt;What will it never do, no matter what the user asks?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here's the ROLE from the Financial Report Writer agent:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## ROLE
You draft financial narrative — management accounts commentary, board pack sections,
and variance explanations — from structured data provided by the user. You work from
figures, prior-period comparisons, and variance tables. Every number in your output
comes from the input. You never invent figures, trend claims, or management commentary
not supported by the data provided. You do not give investment advice, forward guidance,
or financial projections beyond what the user explicitly provides.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That's 72 words. It defines scope (management accounts, board packs), inputs (figures, comparisons, variance tables), a hard constraint (every number from input), and explicit refusals (no invented figures, no investment advice).&lt;/p&gt;
&lt;p&gt;A user reading that knows exactly what to give this agent and what to expect back. The model reading it has a clear behavioral contract.&lt;/p&gt;
&lt;h4 id=&quot;2-what-you-do-not-do-prevents-hallucinated-helpfulness&quot;&gt;2. &quot;WHAT YOU DO NOT DO&quot; prevents hallucinated helpfulness&lt;/h4&gt;
&lt;p&gt;LLMs are trained to be helpful. That's mostly good. It becomes a problem when a user asks an agent to do something adjacent to its purpose and the agent tries to be helpful instead of declining.&lt;/p&gt;
&lt;p&gt;An HR agent that writes job descriptions will, if you ask it, write a performance improvement plan. Whether that's appropriate depends on your HR policy, local employment law, and whether you actually want an AI drafting PIPs. If you haven't told it not to, it will.&lt;/p&gt;
&lt;p&gt;Every agent in the library has an explicit &lt;code&gt;## WHAT YOU DO NOT DO&lt;/code&gt; section. Not implied. Not embedded in the ROLE. A separate section with a bulleted list of refusals.&lt;/p&gt;
&lt;p&gt;For the ESG Commitment Tracker:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## WHAT YOU DO NOT DO
Do not determine whether a commitment is material or immaterial — report status only.
Do not set or adjust targets — narrate performance against targets the user provides.
Do not make forward-looking commitments on behalf of the organisation.
Do not present estimated figures as verified data without flagging them.
Do not omit commitments from the report — every commitment in the input appears in the output.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These refusals exist because real users will ask all of these things. Having the refusal in the instruction set means the agent declines gracefully — with an explanation and an alternative — rather than hallucinating an answer or silently doing the wrong thing.&lt;/p&gt;
&lt;h4 id=&quot;3-output-format-must-be-specified-to-the-column&quot;&gt;3. Output format must be specified to the column&lt;/h4&gt;
&lt;p&gt;&quot;Produce a structured report&quot; is not a format specification.&lt;/p&gt;
&lt;p&gt;Vague format guidance produces inconsistent outputs. Two runs of the same input through an agent with vague format instructions will produce structurally different reports. That's useless in an enterprise context where people need to paste outputs into templates, compare reports week-over-week, or route outputs to approvers.&lt;/p&gt;
&lt;p&gt;Effective output specification includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Section headings, in order&lt;/li&gt;
&lt;li&gt;Table structure with column names&lt;/li&gt;
&lt;li&gt;What goes in each section — not just a label, but a definition&lt;/li&gt;
&lt;li&gt;Length targets (one paragraph, 3-5 bullets, etc.)&lt;/li&gt;
&lt;li&gt;What to do when a section has no data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the Project Status Reporter:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## OUTPUT STRUCTURE
PROJECT STATUS REPORT
Project: [name] | Period: [dates] | Report date: [date]
Prepared by: Project Status Reporter (AI-assisted — validate before distribution)

---
1. EXECUTIVE SUMMARY
[3 sentences: overall RAG status, primary driver, one key risk or milestone.]

2. SCHEDULE STATUS
RAG: [Red / Amber / Green]
| Milestone | Planned | Forecast | Variance | Status |
[Top 5 schedule variances only. Flag: &quot;Full P6 schedule attached separately.&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The agent now knows the exact document it's producing. Users know what to expect. Review cycles are shorter because the structure is always consistent.&lt;/p&gt;
&lt;h4 id=&quot;4-the-quality-self-check-is-the-agent-auditing-its-own-work&quot;&gt;4. The quality self-check is the agent auditing its own work&lt;/h4&gt;
&lt;p&gt;Every instruction block ends with a &lt;code&gt;## QUALITY SELF-CHECK&lt;/code&gt; section — a checkbox list the agent runs internally before delivering output. The user never sees the checklist; the agent uses it to catch its own errors.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## QUALITY SELF-CHECK
[ ] All figures attributable to input data — none invented.
[ ] RAG status present for every milestone.
[ ] Executive summary is 3 sentences — not more.
[ ] No banned vocabulary: pivotal, crucial, robust, impactful, seamless, cutting-edge.
[ ] AI-assistance disclaimer present.
[ ] Forward-looking statements flagged [FLS].
Correct any failure before delivering.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The last line is critical: &quot;Correct any failure before delivering.&quot; This isn't decoration — it instructs the model to loop back and fix before outputting.&lt;/p&gt;
&lt;p&gt;This pattern catches a surprising number of errors: invented figures, missing sections, prohibited vocabulary, and missing disclaimers. It's the difference between an agent that needs constant human correction and one that produces first-draft-ready output.&lt;/p&gt;
&lt;p&gt;The checks must be binary and specific. &quot;Is the output good?&quot; is not a check. &quot;Are all figures attributable to input data?&quot; is a check. &quot;Is the executive summary 3 sentences?&quot; is a check.&lt;/p&gt;
&lt;h4 id=&quot;5-the-banned-vocabulary-list&quot;&gt;5. The banned vocabulary list&lt;/h4&gt;
&lt;p&gt;AI-generated text has a recognisable fingerprint. Not because LLMs are bad writers — they're not — but because they're trained on so much corporate language that they reproduce its worst patterns: &lt;em&gt;pivotal moments&lt;/em&gt;, &lt;em&gt;vibrant ecosystems&lt;/em&gt;, &lt;em&gt;robust frameworks&lt;/em&gt;, &lt;em&gt;fostering alignment&lt;/em&gt;, &lt;em&gt;leveraging synergies&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;A finance director who receives a board pack section with the word &quot;showcasing&quot; in it will immediately doubt whether a human reviewed the output.&lt;/p&gt;
&lt;p&gt;Every agent carries a banned vocabulary list in its instruction block:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## BANNED VOCABULARY
Do not use: pivotal, testament, underscores (emphasis), stands as, marks a shift,
evolving landscape, vital role, vibrant, seamless, impactful, leverage (as verb),
robust (abstract), cutting-edge, state-of-the-art, best-in-class, thought leader,
ecosystem (non-technical), additionally (sentence opener), it is important to note that,
in order to, going forward (filler), touch base, circle back, deep dive (filler),
move the needle, game-changing, world-class (without benchmark).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The effect on output quality is immediate and obvious. Remove this list and rerun the same prompt — the AI vocabulary comes straight back.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;three-things-i-got-wrong-early&quot;&gt;Three things I got wrong early&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Vague ROLE sections.&lt;/strong&gt; The first five agents I built had ROLE sections that described what the agent was, not what it does. &quot;You are a helpful writing assistant&quot; tells the model nothing useful about its scope, inputs, or refusals. I rewrote all of them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. No edge cases.&lt;/strong&gt; Every agent needs at minimum: (1) what to do when the user provides no input, (2) what to do when the user asks for something outside scope. Without these, the agent either hallucinates a response or fails silently. I added a minimum of three edge cases to every agent after the first batch.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Output format implied, not specified.&lt;/strong&gt; &quot;Produce a report&quot; produces different structures every time. Now every agent specifies section headings, table column names, and length targets. The outputs are consistent enough to be routed directly into templates.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-library&quot;&gt;The library&lt;/h3&gt;
&lt;p&gt;The result is 71 agents across 13 domains — writing and communication, project management, HR, finance, ESG, sales, IT, legal, and more. Plus an industry pack of 13 agents for EPC and energy sector workflows.&lt;/p&gt;
&lt;p&gt;Every agent follows the same five-pattern structure. Every instruction block fits within 8,000 characters. Every agent defaults to British English, supports French output, carries a banned vocabulary list, and runs a quality self-check before delivering.&lt;/p&gt;
&lt;p&gt;The full library is on GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/kesslernity/awesome-copilot-studio-agents&quot;&gt;https://github.com/kesslernity/awesome-copilot-studio-agents&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To deploy any agent: go to &lt;a rel=&quot;nofollow&quot; href=&quot;https://m365.cloud.microsoft/chat/agent/new&quot;&gt;m365.cloud.microsoft/chat/agent/new&lt;/a&gt;, enter the name and description from the file's frontmatter, paste the instruction block, and click Create. The agent is available via &lt;code&gt;@mention&lt;/code&gt; in Copilot Chat within minutes.&lt;/p&gt;
&lt;p&gt;No code. No infrastructure. The product is the instruction set.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;If you've built declarative agents — in Copilot Studio, CustomGPTs, or anywhere else — I'd be interested to hear what design patterns you've landed on. The instruction-as-product constraint produces different thinking than code-as-product.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/13462/designed-71-ai-agents-with-nothing-but-text-heres-the-instruction-design-system-ended-with</guid>
<pubDate>Wed, 25 Mar 2026 05:50:15 +0000</pubDate>
</item>
<item>
<title>Tool to accelerate your Access-to-SQL migration projects (Access - Excel Exporter)</title>
<link>https://coderlegion.com/9612/tool-to-accelerate-your-access-to-sql-migration-projects-access-excel-exporter</link>
<description>&lt;p&gt;Legacy MS Access Migration: Export SQL, VBA &amp;amp; Forms Instantly&lt;/p&gt;
&lt;p&gt; GET THIS TOOL: ⚠️ This is a professional software solution available for purchase.  &lt;/p&gt;
&lt;p&gt; THE ULTIMATE MIGRATION COMPANION &lt;br&gt;
Are you migrating a legacy Microsoft Access database to SQL Server, .NET, or the Web? Stop guessing what is inside your binary files.&lt;br&gt;
Want to see it in action : &lt;a rel=&quot;nofollow&quot; href=&quot;https://youtu.be/rTa5WnCUNAE&quot;&gt;Youtube Video&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This tool solves the biggest headache in migration: Documentation &amp;amp; Extraction.&lt;/p&gt;
&lt;p&gt;Instead of manually copying code or screenshotting forms, this utility instantly &quot;explodes&quot; your .accdb or .xlsm files into clean, organized, and version-controllable text files and images. It handles single files or batches entire folders at once.&lt;/p&gt;
&lt;p&gt; WHAT IT DOES FOR MIGRATION:&lt;/p&gt;
&lt;p&gt;Generate SQL Scripts: Automatically turns Access Tables and Indexes into SQL definitions.&lt;/p&gt;
&lt;p&gt;Visualize the UI: Exports every Form and Report as a high-quality image so you can rebuild the front end in your new system.&lt;/p&gt;
&lt;p&gt;Clean Code Extraction: Dumps all VBA modules and Classes into text files for easy porting or analysis.&lt;/p&gt;
&lt;p&gt;️ FULL FEATURE LIST:&lt;/p&gt;
&lt;p&gt;️ For MS Access: ✅ Export Tables &amp;amp; Indexes (as SQL scripts) ✅ Export Queries, Relationships &amp;amp; Macros ✅ Export Forms &amp;amp; Reports (includes visual snapshots!) ✅ Extract background &amp;amp; control images automatically ✅ Iterate through entire folders of databases (Batch Mode)&lt;/p&gt;
&lt;p&gt; For Excel: ✅ Export Standard Modules (.bas) &amp;amp; Class Modules (.cls) ✅ Export UserForms (.frm) with binaries ✅ Auto-Organize exports into separate subfolders ✅ Create ZIP backups instantly&lt;/p&gt;
&lt;p&gt; WHO IS THIS FOR?&lt;/p&gt;
&lt;p&gt;Migration Specialists moving off legacy Access systems.&lt;/p&gt;
&lt;p&gt;Consultants who need to quickly document a client's existing database.&lt;/p&gt;
&lt;p&gt;Developers requiring Source Control (Git/SVN) for VBA.&lt;/p&gt;
&lt;p&gt;⚡ SYSTEM REQUIREMENTS:&lt;/p&gt;
&lt;p&gt;Windows OS&lt;/p&gt;
&lt;p&gt;Microsoft Excel/Access Installed&lt;/p&gt;
&lt;p&gt;.NET Framework 4.8+&lt;/p&gt;
&lt;p&gt; INTERESTED? Don't waste weeks manually documenting legacy code. Save hundreds of hours on your next migration project. &lt;/p&gt;
&lt;h2 id=&quot;msaccess-databasemigration-vba-legacymodernization-excelvba-softwaredevelopment-sqlserver-gitforvba&quot;&gt;MSAccess #DatabaseMigration #VBA #LegacyModernization #ExcelVBA #SoftwareDevelopment #SQLServer #GitForVBA&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/9612/tool-to-accelerate-your-access-to-sql-migration-projects-access-excel-exporter</guid>
<pubDate>Mon, 12 Jan 2026 21:32:19 +0000</pubDate>
</item>
<item>
<title>How to Enable Long Paths on Windows 11?</title>
<link>https://coderlegion.com/7172/how-to-enable-long-paths-on-windows-11</link>
<description>&lt;p&gt;&lt;strong&gt;Enable Long Paths on Windows 11&lt;/strong&gt;: Earlier versions of Windows had File path Character Restrictions of 260 characters for compatibility reasons. Microsoft addressed this issue on Windows 10 and continued it to Windows 11 by increasing the file and folder paths to 32767 characters using Long Paths. In this article, we will explore how to enable Long paths on Windows 11 using various methods. Let's get started.&lt;/p&gt;
&lt;h3 id=&quot;errors-related-to-the-file-folder-paths-character-limitations-on-windows-11-error-0x80010135-&quot;&gt;Errors related to the File / Folder Paths Character Limitations on Windows 11 (Error 0x80010135)&lt;/h3&gt;
&lt;p&gt;Error 0x80010135 is a Windows File Operation Error that usually appears when we try to extract, copy, or move a file whose path is too long for Windows or the application handling it. Windows limits the path length to 260 characters for compatibility reasons. However, from Windows 10 onwards, you can overcome this error by enabling Long Paths on your Windows Operating System.&lt;/p&gt;
&lt;h3 id=&quot;different-methods-to-enable-long-paths-on-windows-11&quot;&gt;Different Methods to Enable Long Paths on Windows 11&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Toggle Long Paths on Windows 11 using Windows Settings [GUI]&lt;/li&gt;
&lt;li&gt;Turn on Long Paths using the Windows Registry Editor [Regedit]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The most convenient way to enable Long Paths on Windows 11 is to use the Windows Settings.&lt;/p&gt;
&lt;h3 id=&quot;toggle-long-paths-on-windows-11-using-windows-settings-recommended-method-&quot;&gt;Toggle Long Paths on Windows 11 using Windows Settings [Recommended Method]&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Go to the Windows Settings using the keyboard shortcut WinKey + I. &lt;/li&gt;
&lt;li&gt;In the Windows Settings, from the left pane, click on System Settings. &lt;/li&gt;
&lt;li&gt;Under System, scroll down and locate Advanced. Select Advanced Settings. &lt;/li&gt;
&lt;li&gt;You can find various settings there, including options for the Taskbar, Virtual Workspaces, and File Explorer. Under the File Explorer section, you’ll see an option called “Enable long paths.”&lt;/li&gt;
&lt;li&gt;Enabling the Long paths option will remove MAX_PATH limitations from common Win32 file and directory functions. Toggle Long paths to ON. &lt;br&gt;
&lt;img src=&quot;https://winsides.com/wp-content/uploads/2025/11/Enable-Long-Paths-on-Windows-11.webp&quot; alt=&quot;&quot;&gt;&lt;/li&gt;
&lt;li&gt;That’s it! You’ve successfully removed the file and folder path length restriction on Windows 11.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;enable-long-paths-on-windows-11-using-windows-registry-editor-regedit-&quot;&gt;Enable Long Paths on Windows 11 using Windows Registry Editor [Regedit]&lt;/h3&gt;
&lt;p&gt;If you have any issues following the above method, or if you can't find the option on the Windows Settings, you can use Windows Registry Editor and enable Long Paths on Windows 11. Here are the steps. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open the Run Command using the keyboard shortcut WinKey + R.&lt;/li&gt;
&lt;li&gt;In the Run, execute the following command regedit.&lt;/li&gt;
&lt;li&gt;This action will open Windows Registry Editor after User Account Control confirmation.&lt;/li&gt;
&lt;li&gt;In the Windows Registry Editor, navigate to the following path &lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;In the main panel, you can find a lot of Registry Values. Locate LongPathsEnabled from the list.&lt;/li&gt;
&lt;li&gt;Right-click on LongPathsEnabled and click Modify.&lt;/li&gt;
&lt;li&gt;Edit D-WORD (32-bit) value of LongPathsEnabled will pop up now. Change the Value Data from 0 to 1 and then click OK. &lt;br&gt;
&lt;img src=&quot;https://winsides.com/wp-content/uploads/2025/11/Change-Value-Data-to-1-and-click-OK.webp&quot; alt=&quot;&quot;&gt;&lt;/li&gt;
&lt;li&gt;Change Value Data to 1 and click OK.&lt;/li&gt;
&lt;li&gt;Once the changes are made, it is recommended to restart your system. Kindly save your work and restart your Windows 11 PC. &lt;/li&gt;
&lt;li&gt;Long Paths is now enabled using Windows Registry Editor. &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;takeaway&quot;&gt;Takeaway&lt;/h3&gt;
&lt;p&gt;Long Paths on Windows 11 breaks down the traditional 260-character limit for file and folder path structures, allowing smooth file operations and better compatibility with modern applications. However, some old programs may still not support long paths on Windows 11.&lt;/p&gt;
</description>
<category>File System</category>
<guid isPermaLink="true">https://coderlegion.com/7172/how-to-enable-long-paths-on-windows-11</guid>
<pubDate>Tue, 11 Nov 2025 09:57:20 +0000</pubDate>
</item>
<item>
<title>Active God Mode in Windows 11 using simple steps</title>
<link>https://coderlegion.com/6263/active-god-mode-in-windows-11-using-simple-steps</link>
<description>&lt;p&gt;The so-called God Mode's actual purpose is to provide access to a comprehensive set of settings (Windows Control Panel and other Settings) using a special GUID-based Shortcut. Perhaps, what we call &quot;God Mode&quot; is just a shortcut to the All Tasks Folder in Windows 11. If you are wondering why it is not explicitly available for normal users and needs to be activated using some special GUID, it is because Microsoft primarily designed this feature for Developers, System Administrators, and Power users.&lt;/p&gt;
</description>
<category>Tech News &amp; Trends</category>
<guid isPermaLink="true">https://coderlegion.com/6263/active-god-mode-in-windows-11-using-simple-steps</guid>
<pubDate>Fri, 10 Oct 2025 12:15:51 +0000</pubDate>
</item>
<item>
<title>Enable Mono Audio on Windows 11, and combine Stereo Sound channels into Single channel</title>
<link>https://coderlegion.com/6175/enable-mono-audio-on-windows-11-and-combine-stereo-sound-channels-into-single-channel</link>
<description>&lt;h2 id=&quot;how-to-enable-mono-audio-on-windows-11-&quot;&gt;How to Enable Mono Audio on Windows 11?&lt;/h2&gt;
&lt;p&gt;Microsoft offers a wide range of accessibility features on Windows 11, from Mono Audio, Magnifier, High Contrast Mode, to Closed Captions for Videos, Speech Recognition, and more. In the Mono Audio Feature, Windows combines the left and right audio channels (stereo channels) into a single channel. This ensures that users don't miss any part of the audio, making the listening experience clear.&lt;/p&gt;
&lt;h3 id=&quot;understanding-mono-audio-on-windows-11&quot;&gt;Understanding Mono Audio on Windows 11&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://winsides.com/wp-content/uploads/2025/10/We-stand-with-you-winsides.com_.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Actually speaking, Stereo Audio generally provides a richer and more immersive listening experience as it separates the sounds to different channels and makes us think of music where effects come from different directions. In Mono Audio, the sounds are not separated into different channels, and all channels play the same sounds.&lt;/p&gt;
&lt;h3 id=&quot;who-benefits-from-mono-audio-on-windows-11-&quot;&gt;Who Benefits from Mono Audio on Windows 11?&lt;/h3&gt;
&lt;p&gt;This is an accessibility feature on Windows 11 and is primarily useful for users who need a more inclusive listening experience. It is very useful for people with hearing loss in one ear, or if someone is using only one earbud, in such scenarios, they wouldn't want to miss out on the listening experience.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A Message to our Readers: At &lt;a rel=&quot;nofollow&quot; href=&quot;https://winsides.com&quot;&gt;Winsides.com&lt;/a&gt;, we believe technology should be for everyone. Accessibility features like Mono Audio are just one way Windows 11 helps make digital experiences inclusive and we stand with &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.microsoft.com/&quot;&gt;Microsoft&lt;/a&gt; in this important effort. To all our readers with disabilities, your journey matters, your voice matters, and we celebrate your strength every day. You deserve technology that listens, supports, and empowers you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;different-methods-to-enable-mono-audio-on-windows-11&quot;&gt;Different Methods to Enable Mono Audio on Windows 11&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Quick Toggle Mono Audio System Tray (Quick Settings Panel)&lt;/li&gt;
&lt;li&gt;Enable Mono Audio on Windows 11 using Windows Sound Settings&lt;/li&gt;
&lt;li&gt;Turn on Mono Audio using Accessibility Settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;method-1-easy-way-to-enable-mono-audio-on-windows-11-via-the-system-tray&quot;&gt;Method 1: Easy Way to Enable Mono Audio on Windows 11 via the System Tray&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;On the System Tray, which is usually located on the bottom right corner of Windows 11, you can find the &lt;strong&gt;Sound&lt;/strong&gt; icon. Click on that. Alternatively, you can use the keyboard shortcut WinKey + A to access the Quick Settings Panel directly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you click on that, you can find the Accessibility card. Select that. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Hearing&lt;/strong&gt;, you can find the option &lt;strong&gt;Mono Audio&lt;/strong&gt;. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Toggle Mono Audio to ON. That's it. The process is completed. &lt;img src=&quot;https://winsides.com/wp-content/uploads/2025/10/Mono-Audio-Enabled-on-Windows-11.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;method-2-enable-mono-audio-on-windows-11-using-windows-sound-settings-&quot;&gt;Method 2: Enable Mono Audio on Windows 11 using Windows Sound Settings.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open &lt;strong&gt;Windows Settings&lt;/strong&gt; using the shortcut Winkey + I.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the left pane, click on &lt;strong&gt;System&lt;/strong&gt;. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can find various system-related settings here. Select &lt;strong&gt;Sound&lt;/strong&gt; Settings. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Output&lt;/strong&gt;, you can find the option &lt;strong&gt;Mono Audio&lt;/strong&gt;. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Toggle Mono Audio to ON. Once the option is enabled, it will combine the left and right audio channels into one.&lt;br&gt;
&lt;img src=&quot;https://winsides.com/wp-content/uploads/2025/10/Mono-Audio-Turned-on-in-Windows-11.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;method-3-turn-on-mono-audio-on-windows-11-using-accessibility-settings&quot;&gt;Method 3: Turn on Mono Audio on Windows 11 using Accessibility Settings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Go to the &lt;strong&gt;Windows Settings&lt;/strong&gt; using the keyboard combination WinKey + I.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the Windows Settings, from the left pane, click on &lt;strong&gt;Accessibility&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll down to &lt;strong&gt;Hearing&lt;/strong&gt;, and select &lt;strong&gt;Audio&lt;/strong&gt;. Here, you can find the option Mono Audio. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Toggle the switch to turn on Mono Audio on your Windows 11.&lt;br&gt;
&lt;img src=&quot;https://winsides.com/wp-content/uploads/2025/10/Mono-Audio-Enabled-on-Windows-11-1.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;take-away&quot;&gt;Take Away&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;Mono Audio option in Windows 11&lt;/strong&gt; is a simple yet powerful accessibility feature. Microsoft continues to make technology more human, and at &lt;a rel=&quot;nofollow&quot; href=&quot;https://winsides.com&quot;&gt;Winsides.com&lt;/a&gt;, we proudly stand with them in supporting a world where technology truly belongs to everyone.&lt;/p&gt;
</description>
<category>Services</category>
<guid isPermaLink="true">https://coderlegion.com/6175/enable-mono-audio-on-windows-11-and-combine-stereo-sound-channels-into-single-channel</guid>
<pubDate>Wed, 08 Oct 2025 04:29:20 +0000</pubDate>
</item>
<item>
<title>A new skill</title>
<link>https://coderlegion.com/5458/a-new-skill</link>
<description>&lt;p&gt; I’ve been quiet for a while… and here’s why: I dedicated myself to learning a new skill. &quot;Transcription&quot;.&lt;/p&gt;
&lt;p&gt;Over the past few weeks, I immersed myself in mastering the art of converting audio and video into accurate, professional text. It wasn’t just about learning the tools, it was about dedication, consistency, and focus.&lt;/p&gt;
&lt;p&gt;Before this, I already had experience with MS Word, Excel, and other essential professional skills, but I realized that what really matters is the commitment to keep learning and growing. With discipline and persistence, I’ve added transcription to my skill set, making me ready to deliver high-quality, reliable work to clients and employers.&lt;/p&gt;
&lt;p&gt;I’m now available for hire and excited to apply these skills to meaningful projects. If you’re looking for someone precise, diligent, and dedicated, let’s connect!&lt;/p&gt;
&lt;h2 id=&quot;transcription-skilldevelopment-professionalgrowth-msword-excel-alwayslearning-dedication-availableforhire-freelance-remotework&quot;&gt;Transcription #SkillDevelopment #ProfessionalGrowth #MSWord #Excel #AlwaysLearning #Dedication #AvailableForHire #Freelance #RemoteWork&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/5458/a-new-skill</guid>
<pubDate>Fri, 19 Sep 2025 12:49:20 +0000</pubDate>
</item>
<item>
<title>How to Upgrade to Windows 11: Compatibility, Steps, and Solutions</title>
<link>https://coderlegion.com/4052/how-to-upgrade-to-windows-11-compatibility-steps-and-solutions</link>
<description>&lt;h5 id=&quot;in-this-article-discover-how-to-seamlessly-upgrade-to-windows-11-ensuring-your-pc-stays-secure-and-up-to-date-learn-the-steps-check-compatibility-and-explore-options-if-your-device-isn-t-eligible-&quot;&gt;In this article, discover how to seamlessly upgrade to Windows 11, ensuring your PC stays secure and up-to-date. Learn the steps, check compatibility, and explore options if your device isn't eligible!&lt;/h5&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.hashnode.com/res/hashnode/image/upload/v1752516026294/f19f9a5a-10c9-43e2-a11d-e38eaf3f550a.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;why-upgrading-to-windows-11-matters&quot;&gt;Why Upgrading to Windows 11 Matters&lt;/h4&gt;
&lt;p&gt;As of October 14, 2025, Microsoft will no longer support Windows 10. If your computer uses the Windows 10 operating system, it will no longer be supported. This means that security updates, feature updates, technical support, and more will cease, leaving your PC vulnerable.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;free-windows-11-upgrade&quot;&gt;FREE Windows 11 Upgrade&lt;/h4&gt;
&lt;p&gt;If your computer already has Windows 10 with a valid license and meets the minimum system requirements for Windows 11, you can upgrade for FREE!&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.microsoft.com/en-us/windows/windows-11-specifications#table1&quot;&gt;official documentation&lt;/a&gt; on Microsoft's website provides a comprehensive guide to checking whether your computer meets the system requirements.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;the-easiest-way-to-upgrade-to-windows-11&quot;&gt;The Easiest Way to Upgrade to Windows 11&lt;/h4&gt;
&lt;p&gt;Using Windows Update on your computer is the easiest way to upgrade to Windows 11.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To Access Windows Update, Click:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Start&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Settings&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update &amp;amp; Security&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In Update &amp;amp; Security, run &lt;strong&gt;Windows Update&lt;/strong&gt;. Once your computer receives all the required updates, you should see a “Download and install“ button to upgrade to Windows 11, if it’s not already displayed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.hashnode.com/res/hashnode/image/upload/v1752255915581/74042961-90ce-411f-a2a8-1f502e0cf76b.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Be sure to read and follow all of Microsoft’s prompts and documentation to ensure a smooth upgrade from Windows 10 to 11.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;if-you-don-t-see-an-upgrade-option&quot;&gt;If You Don’t See an Upgrade Option&lt;/h4&gt;
&lt;p&gt;After running &lt;strong&gt;Windows Update&lt;/strong&gt;, if you still do not see an option to upgrade to Windows 11, you can use Microsoft's official &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.microsoft.com/en-us/windows/windows-11#pchealthcheck&quot;&gt;PC Health Check App&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.hashnode.com/res/hashnode/image/upload/v1752256771872/6947c222-ec45-411f-970c-6a9725399777.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Next to the “Download PC Health Check app“ button is a helpful link to Windows 11 system requirements.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;if-your-computer-fails-the-compatibility-test&quot;&gt;If Your Computer Fails The Compatibility Test&lt;/h4&gt;
&lt;p&gt;Unfortunately, if your computer fails the compatibility test, you will not be able to upgrade it to Windows 11. If you want to ensure that your computer continually receives security updates, feature updates, technical support, and more, you will need to consider buying a new one with Windows 11 installed, or if you’re adventurous, you can alternatively build a PC and purchase a Windows 11 license.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;My main home laptop doesn't meet the requirements because of the processor. Luckily, I already own another laptop that came with Windows 11 preinstalled, which will now be my primary device as I retire my older one with Windows 10, since it will no longer be supported.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.hashnode.com/res/hashnode/image/upload/v1752598078836/dcae3c68-cc35-47c1-89ca-957fa0ee710b.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;my-other-related-articles&quot;&gt;My other related articles&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://selftaughttxg.com/2025/02-25/what-is-microsoft-vba-and-why-you-should-learn-it/&quot;&gt;What is Microsoft VBA and Why You Should Learn It&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://selftaughttxg.com/2025/03-25/from-javascript-to-vba-navigating-variable-declaration-and-management/&quot;&gt;From JavaScript to VBA: Navigating Variable Declaration and Management&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://selftaughttxg.com/2025/03-25/mastering-excel-vlookup-and-custom-vba-functions-for-key-value-data-retrieval/&quot;&gt;Mastering Excel: VLOOKUP and Custom VBA Functions for Key-Value Data Retrieval&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://selftaughttxg.com/2025/03-25/mastering-excels-ifna-efficient-value-retrieval-and-vlookup-integration/&quot;&gt;Mastering Excel's IFNA: Efficient Value Retrieval and VLOOKUP Integration&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://selftaughttxg.com/2025/04-25/mastering-vba-load-and-manipulate-data-in-excel-arrays/&quot;&gt;Mastering VBA: Load and Manipulate Data in Excel Arrays&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.hashnode.com/res/hashnode/image/upload/v1740168177634/1ff578a9-5d03-4800-9c0c-9092e4e60c4f.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;be-sure-to-listen-to-the-html-all-the-things-podcast-&quot;&gt;&lt;strong&gt;Be sure to listen to the HTML All The Things Podcast!&lt;/strong&gt;&lt;/h4&gt;
&lt;h5 id=&quot;-i-also-write-articles-for-the-html-all-the-things-podcast-which-you-can-read-on-their-website-https-www-htmlallthethings-com-&quot;&gt;???? &lt;em&gt;I also write articles for the HTML All The Things Podcast, which you can read on their website:&lt;/em&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.htmlallthethings.com/&quot;&gt;&lt;em&gt;https://www.htmlallthethings.com/&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/h5&gt;
&lt;h5 id=&quot;be-sure-to-check-out-html-all-the-things-on-socials-&quot;&gt;&lt;strong&gt;Be sure to check out HTML All The Things on socials!&lt;/strong&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://twitter.com/htmleverything&quot;&gt;Twitter&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/company/html-all-the-things/&quot;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.tiktok.com/@htmlallthethings&quot;&gt;TikTok&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.instagram.com/htmlallthethings/&quot;&gt;Instagram&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;affiliate-amp-discount-links-&quot;&gt;Affiliate &amp;amp; Discount Links!&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.hashnode.com/res/hashnode/image/upload/v1740168473785/c85789c9-1594-4000-aa2f-43e842f9825f.jpeg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With CodeMonkey, learning can be all fun and games!&lt;/strong&gt; CodeMonkey transforms education into an engaging experience, enabling children to evolve from tech consumers to creators. Use CodeMonkey's &lt;strong&gt;FREE trial&lt;/strong&gt; to unlock the incredible potential of young tech creators!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;With a structured learning path tailored for various age groups, kids progress from block coding to more advanced topics like data science and artificial intelligence, using languages such as CoffeeScript and Python. The platform includes features for parents and teachers to track progress, making integrating coding into home and classroom settings easy.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Through fun games, hands-on projects, and community interaction, CodeMonkey helps young learners build teamwork skills and receive recognition for their achievements. It fosters a love for coding and prepares children for future career opportunities in an ever-evolving tech landscape.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;To learn more about CodeMonkey, you can read my detailed&lt;/em&gt;&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://selftaughttxg.com/2025/02-25/inspiring-young-coders-how-codemonkey-turns-kids-into-tech-creators/&quot;&gt;&lt;strong&gt;&lt;em&gt;review article&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt;!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affiliate Links:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://codemonkey.sjv.io/c/5987452/919057/12259&quot;&gt;Sign Up for Parents&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://codemonkey.sjv.io/c/5987452/919060/12259&quot;&gt;Sign Up for Teachers&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.hashnode.com/res/hashnode/image/upload/v1740169191630/ac8c5360-d1c5-4c85-8504-18b9c755841e.png&amp;quot;&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h4 id=&quot;advance-your-career-with-a-20-discount-on-scrimba-pro-using-this-affiliate-link-&quot;&gt;Advance your career with a 20% discount on Scrimba Pro using this &lt;a rel=&quot;nofollow&quot; href=&quot;https://scrimba.com/?via=MichaelLarocca&quot;&gt;affiliate link&lt;/a&gt;!&lt;/h4&gt;
&lt;p&gt;Become a hireable developer with Scrimba Pro! Discover a world of coding knowledge with full access to all courses, hands-on projects, and a vibrant community. You can &lt;a rel=&quot;nofollow&quot; href=&quot;https://selftaughttxg.com/2021/06-21/06-07-21/&quot;&gt;read my article&lt;/a&gt; to learn more about my exceptional experiences with Scrimba and how it helps many become confident, well-prepared web developers!&lt;/p&gt;
&lt;h6 id=&quot;important-this-discount-is-for-new-accounts-only-if-a-higher-discount-is-currently-available-it-will-be-applied-automatically-&quot;&gt;&lt;strong&gt;&lt;em&gt;Important:&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;This discount is for new accounts only. If a higher discount is currently available, it will be applied automatically.&lt;/em&gt;&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;How to Claim Your Discount:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click &lt;a rel=&quot;nofollow&quot; href=&quot;https://scrimba.com/?via=MichaelLarocca&quot;&gt;the link&lt;/a&gt; to explore the new Scrimba 2.0.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new account.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upgrade to Pro; the 20% discount will automatically apply.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h6 id=&quot;disclosure-this-article-contains-affiliate-links-i-will-earn-a-commission-from-any-purchases-made-through-these-links-at-no-extra-cost-to-you-your-support-helps-me-continue-creating-valuable-content-thank-you-&quot;&gt;&lt;strong&gt;&lt;em&gt;Disclosure:&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;This article contains affiliate links. I will earn a commission from any purchases made through these links at no extra cost to you. Your support helps me continue creating valuable content. Thank you!&lt;/em&gt;&lt;/h6&gt;
&lt;hr&gt;
&lt;h4 id=&quot;conclusion-1&quot;&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;Microsoft will end support for Windows 10 on October 14, 2025, making any PC running that version vulnerable. Upgrading to Windows 11 is FREE and easy via Windows Update, as long as your PC meets the system requirements.&lt;/p&gt;
&lt;p&gt;If you don't see an option to download Windows 11 through Windows Update, you can use Microsoft's official &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.microsoft.com/en-us/windows/windows-11#pchealthcheck&quot;&gt;PC Health Check app&lt;/a&gt; to see if your PC meets the upgrade requirements. If it doesn't, upgrading isn't possible, and you'll need to consider buying a new computer or building one and purchasing an additional Windows 11 license.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Let’s connect! I’m active on&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/in/michaeljudelarocca/&quot;&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;and&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://twitter.com/MikeJudeLarocca&quot;&gt;&lt;strong&gt;Twitter&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:700/0*WkkMi-AgjubeODf8.jpeg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h6 id=&quot;are-you-now-confident-in-upgrading-to-windows-11-and-ensuring-your-pc-s-security-do-you-have-any-other-tips-for-a-smooth-upgrade-process-please-share-the-article-and-comment-&quot;&gt;&lt;em&gt;Are you now confident in upgrading to Windows 11 and ensuring your PC's security? Do you have any other tips for a smooth upgrade process? Please share the article and comment!&lt;/em&gt;&lt;/h6&gt;
</description>
<category>Installation</category>
<guid isPermaLink="true">https://coderlegion.com/4052/how-to-upgrade-to-windows-11-compatibility-steps-and-solutions</guid>
<pubDate>Tue, 15 Jul 2025 21:01:08 +0000</pubDate>
</item>
<item>
<title> Why Records in C# Are Great (and So Nice to Work With)</title>
<link>https://coderlegion.com/2949/why-records-in-c-are-great-and-so-nice-to-work-with</link>
<description>&lt;p&gt;&lt;strong&gt; Why Records in C# Are Great&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you’ve been working with C# lately, you’ve probably encountered records , a feature introduced in C# 9 that many developers have come to love. &lt;/p&gt;
&lt;p&gt;They’re elegant, powerful, and remove a lot of boilerplate when modeling data.&lt;/p&gt;
&lt;p&gt;But what actually makes them great? Here’s why records aren’t just nice , they’re game-changing.&lt;/p&gt;
&lt;p&gt; What Are Records?&lt;/p&gt;
&lt;p&gt;At their core, records are &lt;strong&gt;reference types&lt;/strong&gt; designed for &lt;strong&gt;immutable&lt;/strong&gt; data modeling. Think of them as classes optimized for holding data  with extra features built in.&lt;/p&gt;
&lt;p&gt;You can define a record in two main ways:&lt;/p&gt;
&lt;p&gt;✅ 1. Positional Syntax (Concise and Clean)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public record Person(string FirstName, string LastName);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This one-liner gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Constructor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Equals(), GetHashCode(), and ToString() overrides&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;init-only properties (immutable)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deconstruction support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ouaaa...&lt;/p&gt;
&lt;p&gt;In order to implement all that in a regular class, you'd need to write a lot of code  constructors, equality logic, ToString() overrides, and possibly even a deconstructor. &lt;br&gt;
&lt;strong&gt;Records do it all for you, automatically and cleanly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;✅ 2. Classic Syntax (More Flexible)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Need mutability? You can use set instead of init, but that sacrifices immutability and &lt;strong&gt;thread safety.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; What is init?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;init&lt;/strong&gt; is a special accessor introduced in C# 9 that allows properties to be set only during initialization making them immutable afterward.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var person = new Person { FirstName = &quot;Alice&quot;, LastName = &quot;Green&quot; };
// person.FirstName = &quot;Bob&quot;; ❌ Not allowed
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ Cleaner than readonly fields&lt;br&gt;
✅ Safer than public setters&lt;br&gt;
✅ Perfect for records, DTOs, and configuration objects&lt;/p&gt;
&lt;p&gt; Reference:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/init&quot;&gt;Microsoft Docs – Init-only Setters&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;✅ 1. Value-Based Equality — Finally Done Right&lt;/p&gt;
&lt;p&gt;With classes, equality checks compare references. With records, it's based on content:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var a = new Person(&quot;Alice&quot;, &quot;Smith&quot;);
var b = new Person(&quot;Alice&quot;, &quot;Smith&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Console.WriteLine(a == b); // True ✅&lt;/p&gt;
&lt;p&gt; Reference:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/record&quot;&gt;Microsoft Docs – Records&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;✅ 2. Immutability by Default — and Thread-Safe by Nature&lt;/p&gt;
&lt;p&gt;Records are immutable by default, which leads to safer, more predictable code.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var p1 = new Person(&quot;John&quot;, &quot;Doe&quot;);
var p2 = p1 with { FirstName = &quot;Jane&quot; }; // Creates a copy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And since their state can't be changed after creation, records are thread-safe for read operations — perfect for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Parallel tasks&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Background services&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Blazor state containers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Event sourcing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; Reference:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/immutability&quot;&gt;Immutability in C#&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;✅ 3. Concise and Readable Code&lt;br&gt;
Records eliminate boilerplate. You define what matters — and the compiler handles the rest.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public record Invoice(string Id, DateTime Date, decimal Amount);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Clean. Lightweight. Clear.&lt;/p&gt;
&lt;p&gt;✅ 4. Deconstruction and Pattern Matching&lt;/p&gt;
&lt;p&gt;Records play perfectly with modern C# features:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var (first, last) = new Person(&quot;Ana&quot;, &quot;Lopez&quot;);

if (p1 is { FirstName: &quot;John&quot; })
{
    Console.WriteLine(&quot;Hello John!&quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; Reference:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/functional/pattern-matching&quot;&gt;Pattern Matching in C#&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;✅ 5. Functional Programming Friendly&lt;/p&gt;
&lt;p&gt;Records align with functional principles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No side effects&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy transformations&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clear data flow&lt;/p&gt;
&lt;p&gt; var updatedInvoice = invoice with { Amount = invoice.Amount + 10 };&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; Reference:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/#records&quot;&gt;Welcome to C# 9 – Records&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;✅ 6. Supports Inheritance, Structs, and More&lt;/p&gt;
&lt;p&gt;You’re not locked into one pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;record struct — value-type records&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;readonly record struct — fully immutable&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Abstract and sealed record inheritance supported&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; Reference:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history#c-version-10&quot;&gt;What's New in C# 10 – Record Structs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; Records and the Value Object Pattern&lt;br&gt;
In Domain-Driven Design (DDD), Value Objects are small objects that:&lt;/p&gt;
&lt;p&gt;Represent a concept (e.g., Money, Email)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Are immutable&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have no identity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compare by value&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ Records Are Ideal for Value Objects&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public record Email(string Address)
{
    public Email
    {
        if (!Address.Contains(&quot;@&quot;))
            throw new ArgumentException(&quot;Invalid email&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You get a clean, reusable object with built-in validation and equality , no fuss.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public record Money(decimal Amount, string Currency);

public record Product
{
    public Guid Id { get; init; }
    public string Name { get; init; }
    public Money Price { get; init; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; Reference:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://martinfowler.com/bliki/ValueObject.html&quot;&gt;Martin Fowler – Value Object&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; When Not to Use Records&lt;/p&gt;
&lt;p&gt;Avoid records if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You need full mutable entities (e.g., for EF Core)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You rely on reference identity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your inheritance hierarchy is too complex&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; Real-World Use Cases&lt;/p&gt;
&lt;p&gt;✅ DTOs for APIs&lt;/p&gt;
&lt;p&gt;✅ Immutable configs&lt;/p&gt;
&lt;p&gt;✅ Logging and audit trails&lt;/p&gt;
&lt;p&gt;✅ Domain Value Objects&lt;/p&gt;
&lt;p&gt;✅ State models in Blazor, Redux, Fluxor&lt;/p&gt;
&lt;p&gt;✅ Event-driven architecture&lt;/p&gt;
&lt;p&gt; Final Thoughts&lt;br&gt;
C# records are more than just syntactic sugar — they promote a mindset of immutability, clarity, and value-based design.&lt;/p&gt;
&lt;p&gt;They:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reduce bugs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simplify data models&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improve thread safety&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save a lot of time&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether you're building APIs, desktop apps, or microservices, records make your C# experience cleaner and smarter.&lt;/p&gt;
&lt;p&gt;Once you go record, you'll never want to class again. &lt;/p&gt;
&lt;p&gt; References:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/record&quot;&gt;Microsoft Docs – Records&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/init&quot;&gt;Init-only Setters in C# 9&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.codeguru.com/csharp/c-sharp-immutability/&quot;&gt;Immutability&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/functional/pattern-matching&quot;&gt;Pattern Matching&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/#records&quot;&gt;Dev Blog – Welcome to C# 9&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://martinfowler.com/bliki/ValueObject.html&quot;&gt;Martin Fowler – Value Objects&lt;/a&gt;&lt;/p&gt;
</description>
<category>C#</category>
<guid isPermaLink="true">https://coderlegion.com/2949/why-records-in-c-are-great-and-so-nice-to-work-with</guid>
<pubDate>Sat, 10 May 2025 20:37:38 +0000</pubDate>
</item>
</channel>
</rss>