<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://www.michaelkc.dk/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.michaelkc.dk/" rel="alternate" type="text/html" /><updated>2026-05-17T06:58:47+00:00</updated><id>https://www.michaelkc.dk/feed.xml</id><title type="html">Michael Kaare Christensen</title><subtitle>Personal site. </subtitle><entry><title type="html">Book - Vibe Coding</title><link href="https://www.michaelkc.dk/2026/05/17/book-vibe-coding.html" rel="alternate" type="text/html" title="Book - Vibe Coding" /><published>2026-05-17T06:43:00+00:00</published><updated>2026-05-17T06:43:00+00:00</updated><id>https://www.michaelkc.dk/2026/05/17/book-vibe-coding</id><content type="html" xml:base="https://www.michaelkc.dk/2026/05/17/book-vibe-coding.html"><![CDATA[<h2 id="vibe-coding-book">Vibe Coding (book)</h2>
<p>I am reading the <a href="https://itrevolution.com/product/vibe-coding-book/">Vibe Coding</a> book.</p>

<h3 id="on-options-p29">On options (p.29)</h3>
<p>I like this framing, which is also used by Gregor Hophe. Try out radical ideas and various implementations at low cost.</p>

<p>One recent example: I had to implement refresh-token-only dPoP support in IdentityServer. Since I (and my coding assistent) initially overlooked that 
using bearer tokens with dPoP refresh tokens is allowed in the main dPoP spec, I had a detour, with a full working implementation, around 
<a href="https://datatracker.ietf.org/doc/draft-rosomakho-oauth-dpop-rt/">dPoP-RT</a>.</p>

<p>When I re-read the dPoP spec and figured out there was a main-spec way, I threw away the old implementation and made a new one.</p>

<p>Both with heavy coding agent assistance; I mainly had to review the second solution and prune a few extras I did not need.</p>

<p>Without coding agents, the first solution would have required so much work that pivoting to the “right” solution would have been a much harder
decision, had I figured it out as late as I did.</p>

<h3 id="on-senior-junior-mentoring-and-the-surgeon-example-p27">On senior-junior mentoring and the surgeon example (p.27)</h3>
<p><a href="https://www.physicianleaders.org/articles/learning-to-work-with-intelligent-machines">Interesting look</a> at what happened with senior-junior mentorship when
surgical robots could fill the jobs juniors were usually required for. I, like the book authors, think this is going to happen in software development too.</p>

<p>While they (at least in this part of the book) focus on how great that is for the seniors (who are freed from communication tax and can move faster), this is going 
to create huge problems for the business when current seniors start retiring. Maybe coding agents will be ready to take over higher-level work (“taste”) reliably then - maybe not…</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Vibe Coding (book) I am reading the Vibe Coding book.]]></summary></entry><entry><title type="html">Interesting stuff I found - May 2026</title><link href="https://www.michaelkc.dk/2026/05/12/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - May 2026" /><published>2026-05-12T21:05:00+00:00</published><updated>2026-05-12T21:05:00+00:00</updated><id>https://www.michaelkc.dk/2026/05/12/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2026/05/12/interesting-stuff-i-found.html"><![CDATA[<h3 id="software-brain">Software Brain</h3>
<p>Not everyone <em>want</em> their workflows automated like many software developers do.</p>

<p><a href="https://www.theverge.com/podcast/917029/software-brain-ai-backlash-databases-automation">Software Brain (Decoder / The Verge)</a></p>

<h3 id="the-west-forgot-how-to-make-things">The West Forgot How to Make Things</h3>
<p>Ukraine taught us that peace does not last, so letting weapon-building skills atrophy during peace time has a cost.</p>

<p>Will the loss of operational knowledge in software development present similar challenges once the current generation of senior engineers retire (along with their pre-AI taste and implicit knowledge from building things manually)?</p>

<p><a href="https://techtrenches.dev/p/the-west-forgot-how-to-make-things">The West Forgot How to Make Things</a></p>

<h3 id="free-models-via-nvidia-build">Free models via NVIDIA Build</h3>
<p>Copilot can run with BYO models, given they have an OpenAI-compatible endpoint. NVIDIA Build offers several larger open-weight models you can use for free.</p>

<p>From the models I have poked at, GLM-4.7 can code (set to retire soon though), but in practice I ended up running  GLM-4.6 (aka BigPickle), which is currently free in OpenCode (and a lot faster). Still, having a rotating buffet of hosted models to experiment with is handy.</p>

<table>
  <tbody>
    <tr>
      <td><a href="https://www.xda-developers.com/ive-been-running-some-biggest-open-weight-llms-free-nvidia-cloud/">I’ve been running some of the biggest open-weight LLMs for free on Nvidia Cloud</a></td>
      <td><a href="https://build.nvidia.com/models?filters=nimType%3Anim_type_preview">NVIDIA Build model catalog</a></td>
    </tr>
  </tbody>
</table>

<h3 id="reduced-rag">Reduced RAG</h3>
<p>Interesting perspective: Frontload metadata extraction (potentially via LLM, e.g. sentiment analysis), capture it,  query it deterministically, then feed results into the LLM for (nondeterministic but heavily grounded) synthesis.</p>

<p><a href="https://www.mostlylucid.net/blog/reduced-rag">Reduced RAG</a></p>

<h3 id="codegen-as-compiler">Codegen as compiler</h3>
<p>Interesting framing: instead of reviewing every line of generated code, build the surrounding apparatus so the output is constrained and verified, like we do with compilers.</p>

<p>I think that analogy is directionally useful, but only up to a point. Compilers are largely deterministic, or at least rules-based, whereas LLMs are not. So the “trust the process, not the artifact” idea is good, but the process probably needs to be much more defensive than the compiler metaphor suggests.</p>

<p><a href="https://skiplabs.io/blog/codegen_as_compiler">Codegen as Compiler</a></p>

<h3 id="net-agent-skills">.NET agent skills</h3>
<p>Nice to see the .NET team publishing a real skills, this is more solid than <code class="language-plaintext highlighter-rouge">dnx ilspycmd</code>. There is a dashboard, plugins, and concrete task coverage around things like MSBuild, NuGet, diagnostics and upgrades. Sometimes I worry about context pollution from too many skills though…</p>

<p><a href="https://github.com/dotnet/skills">dotnet/skills</a></p>

<h3 id="coding-is-dead-but-it-still-smells">Coding is dead, but it still smells</h3>
<p>Adam Tornhill argues that manual coding is shrinking, but software complexity is not, so the need for builders may well expand rather than contract. “After more than 30 years as a programmer, I no longer code manually. Sometime in October 2025 I went 100% agentic, and I’m not planning on going back.” - my journey has been similar. I worry about skill atrophy, but debugging gnarly issues deep in the code keeps me sharp (I hope!).</p>

<p><a href="https://adamtornhill.substack.com/p/coding-is-dead-but-it-still-smells">Coding Is Dead, but It Still Smells</a></p>

<h3 id="passkey-sync-sharing-and-recovery">Passkey sync, sharing and recovery</h3>
<p>When I first read it, I thought they were using <a href="https://cs.au.dk/research/crypto-and-cybersecurity/secure-multiparty-computation">secure multiparty computation</a> - Passkeys seem to be a great use case for that?</p>

<table>
  <tbody>
    <tr>
      <td><a href="https://www.linkedin.com/posts/markrussinovich_the-challenge-with-passkeys-has-always-been-share-7453152451144359936-jWlh/">Mark Russinovich on passkey sharing</a></td>
      <td><a href="https://blogs.windows.com/msedgedev/2026/04/22/engineering-secure-passkey-sync-in-microsoft-password-manager/">Engineering secure passkey sync in Microsoft Password Manager</a></td>
    </tr>
  </tbody>
</table>

<h3 id="pretext">Pretext</h3>
<p>This is one of those projects that makes the web feel a bit magical again - somebody looked at an annoying primitive and decided to rebuild it properly. I do not do a lot of frontend work, but I remember struggling with Masonry back in the day…</p>

<p><a href="https://github.com/chenglou/pretext">pretext</a></p>

<h3 id="chatbots-unsafe-at-any-speed">Chatbots: unsafe at any speed</h3>
<p>Non-deterministic systems are hard to make 100% safe, but there are degrees of wrong :-)</p>

<p><a href="https://www.jsnover.com/blog/2026/03/30/chatbots-unsafe-at-any-speed/">Chatbots: Unsafe at Any Speed</a></p>

<h3 id="more-agent-sandboxing-docker-sandbox--sbx">More agent sandboxing: Docker Sandbox / sbx</h3>
<p>More movement in coding agent sandboxing, which is good. Andrew Lock walks through running agents inside Docker’s sandbox / microVM setup so you can be a bit less terrified when enabling the more autonomous modes.</p>

<p><a href="https://andrewlock.net/running-ai-agents-safely-in-a-microvm-using-docker-sandbox/">Running AI agents safely in a microVM using Docker Sandbox</a></p>

<h3 id="aspire-as-runtime-for-coding-agents">Aspire as runtime for coding agents</h3>
<p>This is a genuinely interesting direction: instead of feeding agents ever more markdown context, give them a runtime for the code that can actually manage processes, ports, env vars, logs and feedback loops.</p>

<p><a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/">Agentic Dev Aspirations</a></p>

<h3 id="building-block-economy">Building-block economy</h3>
<p>Mitchell Hashimoto argues that the winning move is increasingly to build reusable building blocks rather than polished monolith products. That rings true in an agentic world where composition cost keeps dropping.</p>

<p><a href="https://mitchellh.com/writing/building-block-economy">Building Block Economy</a></p>

<h3 id="cybersecurity-in-the-age-of-instant-software">Cybersecurity in the age of instant software</h3>
<p>Bruce Schneier sketching what security might look like once software becomes far more disposable and on-demand. Most people seem to agree that frontier models is a long-time benefit for the blue team, but short-term the red team <a href="https://copy.fail/">must be having</a> <a href="https://www.version2.dk/holdning/kvalitetskontrol-en-anden-dag">a field day</a></p>

<p><a href="https://www.schneier.com/blog/archives/2026/04/cybersecurity-in-the-age-of-instant-software.html">Cybersecurity in the Age of Instant Software</a></p>

<h3 id="quantization">Quantization</h3>
<p>Only skimmed this one, but quantization is an important concept if you want to run large open-weight at reasonable speed on consumer hardware (that much I do know). Some people claim that even “small” models like <code class="language-plaintext highlighter-rouge">Qwen3.6-27B-UD-Q6</code> perform close to frontier-levels, and it would be interesting to try out at various levels of quantization</p>

<p><a href="https://ngrok.com/blog/quantization">Quantization</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Software Brain Not everyone want their workflows automated like many software developers do.]]></summary></entry><entry><title type="html">Interesting stuff I found - April 2026</title><link href="https://www.michaelkc.dk/2026/04/09/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - April 2026" /><published>2026-04-09T08:20:00+00:00</published><updated>2026-04-09T08:20:00+00:00</updated><id>https://www.michaelkc.dk/2026/04/09/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2026/04/09/interesting-stuff-i-found.html"><![CDATA[<h3 id="github-actions-the-stuff-nobody-tells-you">GitHub Actions: The Stuff Nobody Tells You</h3>
<p>Solid guide from someone who works at GitHub with practical advice on avoiding the most common pain points. Since NUKE is going out of maintenance, going back to “pure” GH Actions is on the table, and in any case some things are lightweight enough that it makes sense.</p>

<p><a href="https://mainbranch.dev/articles/github-actions-fundamentals/">GitHub Actions: The Stuff Nobody Tells You</a></p>

<h3 id="a-sufficiently-detailed-spec-is-code">A Sufficiently Detailed Spec Is Code</h3>
<p>Gabriel Gonzalez makes the case that sufficiently detailed specifications are, in practice, just code in disguise. 
The implication for agentic coding is that delegating to an agent does not remove the cognitive work - it moves it. Someone still has to think through the system carefully; now that person writes prompts / specs and establish context instead of code.</p>

<p><a href="https://haskellforall.com/2026/03/a-sufficiently-detailed-spec-is-code">A Sufficiently Detailed Spec Is Code</a></p>

<h3 id="slop-creep">Slop Creep</h3>
<p>“Coding agents removed the circuit breaker.” - a clear risk with agentic development, they can keep going fast in bad code, where humans cannot.</p>

<p>The author calls it slop creep: individually reasonable decisions that collectively calcify a codebase.</p>

<p><a href="https://boristane.com/blog/slop-creep-enshittification-of-software/">Slop Creep: Enshittification of Software</a></p>

<h3 id="agent-sandboxes">Agent Sandboxes</h3>
<p>A few projects in the agent sandboxing space worth keeping an eye on. I have dabbled myself with a basic Docker container and WSL as a de-facto sandbox:</p>

<p><strong>Contagent</strong> runs coding agents in a container so they operate narrowly on the current project path rather than the full home directory. A pragmatic middle ground between full autonomy and paranoia, probably better than what I am using now.</p>

<p><strong>OpenSandbox</strong> from Alibaba is a more general-purpose sandbox platform with SDKs in most languages (including .NET) and support for Docker and Kubernetes runtimes.</p>

<p><strong>devenv.sh</strong> is the nix-based developer environment tool. Not itself an agent sandbox, but nix’s reproducibility story is interesting for setting up the work environment.</p>

<table>
  <tbody>
    <tr>
      <td><a href="https://github.com/kanaka/contagent">contagent</a></td>
      <td><a href="https://github.com/alibaba/OpenSandbox">OpenSandbox</a></td>
      <td><a href="https://devenv.sh/">devenv.sh</a></td>
    </tr>
  </tbody>
</table>

<h3 id="ceo-said-a-thing-journalism">“CEO Said A Thing!” Journalism</h3>
<p>This captures a phenomenon that has annoyed me for a while. Once you have the name for it, you see it everywhere: a headline that is just a verbatim restatement of what some exec claimed, with zero context, correction, or pushback. The examples in the article are… illustrative.</p>

<p><a href="https://karlbode.com/ceo-said-a-thing-journalism/">CEO Said A Thing! Journalism</a></p>

<h3 id="encoding-team-standards-for-ai">Encoding Team Standards for AI</h3>
<p>Establishing context for agents is important for good results. Seniors do it implicitly (as discussed last month), but capturing at least some essentials in LLM-accessible docs (and the solution structure itself) can help. Right now I am eyeing a lot of architecture docs I have written in Confluence, considering how to get that into our repos as actionable coding agent guidance.</p>

<p><a href="https://martinfowler.com/articles/reduce-friction-ai/encoding-team-standards.html">Encoding Team Standards for AI</a></p>

<h3 id="package-manager-cooldowns-sadly-not-nuget-yet">Package Manager Cooldowns (Sadly Not NuGet Yet)</h3>
<p>Most major package managers now support “dependency cooldowns” - only installing updated packages after they have been out in the wild for a few days, to give the community a chance to spot supply chain attacks. pnpm, Yarn, Bun, Deno, uv, pip and npm all have some variant of this now.</p>

<p>NuGet has an open issue but nothing shipped yet. Would be a welcome addition.</p>

<table>
  <tbody>
    <tr>
      <td><a href="https://simonwillison.net/2026/Mar/24/package-managers-need-to-cool-down/">Package Managers Need to Cool Down</a></td>
      <td><a href="https://github.com/NuGet/Home/issues/14657">NuGet cooldown issue</a></td>
    </tr>
  </tbody>
</table>

<h3 id="duende-agent-skills-and-mcp-server">Duende Agent Skills and MCP Server</h3>
<p>Duende have published both an agent skills library and an MCP server for their documentation. Since this is a large part of my dayjob, I am trialing it across a few projects.</p>

<p><a href="https://duendesoftware.com/blog/20260402-give-your-ai-coding-assistant-duende-expertise-with-agent-skills-and-mcp-server">Duende Agent Skills and MCP Server</a></p>

<h3 id="emdash---agentic-development-environment">Emdash - Agentic Development Environment</h3>
<p>Emdash runs multiple coding agents in parallel, each isolated in its own git worktree, locally or over SSH. It supports 23 CLI agents and can take Linear, GitHub, or Jira tickets as direct input.</p>

<p>Like Minions from last month, Steve Yegges Gas Town / Gas City and Squad (too ambitious for me atm, but I would like to check out Beads) - I am still not convinced the agent orchestration works as well as people think it does (how do you measure it?), but the amount of innovation being done here is staggering, so I am sure some best practices and frameworks will emerge over time.</p>

<p><a href="https://github.com/generalaction/emdash">Emdash</a></p>

<h3 id="weblate">Weblate</h3>
<p>Open source, web-based continuous localization platform, in production use by 2500+ projects across 165 countries. Self-hostable or SaaS. Has a .NET-friendly REST API. Looks nice, might give it a try.</p>

<table>
  <tbody>
    <tr>
      <td><a href="https://weblate.org/">Weblate</a></td>
      <td><a href="https://github.com/weblateorg/weblate">GitHub</a></td>
    </tr>
  </tbody>
</table>

<h3 id="rising-tides-not-crashing-waves">Rising Tides, Not Crashing Waves</h3>
<p>This paper proposes a useful framing for thinking about AI automation: crashing waves (abrupt capability surges over specific tasks) vs. rising tides (broad, continuous improvement across many tasks). Based on evaluation of 3000+ tasks from the US DOL O*NET database, they find mostly rising tides.</p>

<p>The numbers are interesting: in mid-2024, AI could complete tasks taking humans ~3-4 hours at 50% success. By Q3 2025, that was up to 65%. The projection is 80-95% success on most text-related tasks by 2029. The rising-tide framing matters for how organizations should think about adaptation - it is not one big disruption you plan around, it is a continuous shift you have to keep tracking.</p>

<p><a href="https://arxiv.org/abs/2604.01363v1">Rising Tides vs Crashing Waves (arXiv)</a></p>

<h3 id="azure-functions-test-framework">Azure Functions Test Framework</h3>
<p><code class="language-plaintext highlighter-rouge">WebApplicationFactory</code>-like integration testing for Azure Functions (dotnet-isolated). Supports HTTP triggers, timer/queue/ServiceBus/blob triggers, Durable Functions, and both direct gRPC and ASP.NET Core integration modes - all without opening TCP ports. Pre-1.0 but apparently fully functional for .NET 10 / Worker SDK 2.x.</p>

<p>Integration testing Azure Functions has historically been painful. This looks promising.</p>

<p><a href="https://github.com/bjorkstromm/azure-functions-test-framework">Azure Functions Test Framework</a></p>

<h3 id="beautiful-mermaid">Beautiful Mermaid</h3>
<p>An interactive Mermaid diagram playground from Craft, useful for making coding agents produce ASCII diagrams.</p>

<p><a href="https://agents.craft.do/mermaid">Mermaid Agent</a></p>

<h3 id="steph-angos-vault">Steph Ango’s Vault</h3>
<p>The creator of Obsidian sharing his personal vault setup and the principles behind it. I agree with “file over app” BUT I have trouble escaping the siren song of OneNote. But if I ever want non-Microsoft agents to work with the data, Obsidian is a better option (could also be agent-only repository like <a href="https://x.com/karpathy/status/2039805659525644595?s=46">Karpathy</a> describes)</p>

<p><a href="https://stephango.com/vault">Steph Ango’s Vault</a></p>

<h3 id="cleaner-tests-with-iasynclifetime">Cleaner Tests with IAsyncLifetime</h3>
<p>Expression-bodied single-assertion test methods combined with XUnit’s <code class="language-plaintext highlighter-rouge">IAsyncLifetime</code> for async test setup. The result is tests that are concise and highly targeted - each test body is a single line, and the arrange/act is in <code class="language-plaintext highlighter-rouge">InitializeAsync</code>.</p>

<p>I like this pattern, and will try to adopt it (maybe it could be part of a coding agent skill?).</p>

<p><a href="https://www.danclarke.com/cleaner-tests-with-iasynclifetime/">Cleaner Tests with IAsyncLifetime</a></p>

<h3 id="the-verification-gap">The Verification Gap</h3>
<p>Research from Chris Catalini et al. exploring the “verification gap” - the challenge that as AI-generated content becomes more sophisticated, the cost of verifying that content often exceeds the cost of producing it. The paper looks at this through an economic lens and the implications for trust, fraud, and institutional decision-making.</p>

<p>An alternative view to Steve Yegge and Gas Town - I have a hard time believing in his approach where you vibe everything without looking at it.</p>

<p><a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6298838">The Verification Gap (SSRN)</a></p>

<h3 id="friendship-in-your-thirties-requires-deliberate-effort">Friendship in Your Thirties Requires Deliberate Effort</h3>
<p>This resonated: “The friends didn’t leave — the structure that held them in place did.” Robin Dunbar’s research on friendship decay is cited here: without regular face-to-face contact, a close friendship degrades by one relationship layer within six months. The article argues that the thirties loneliness epidemic is not about social media or introversion - it is a structural shift. School and early career provided proximity and regularity; adult life does not (beyond work).</p>

<p><a href="https://vegoutmag.com/lifestyle/j-a-y-psychology-says-the-loneliness-epidemic-in-peoples-thirties-isnt-caused-by-social-media-or-introversion-its-the-first-decade-where-maintaining-friendships-requires-deliberate-effort-rather-than/">The Loneliness Epidemic in Your Thirties</a></p>

<h3 id="github-copilot-cli-local-models">GitHub Copilot CLI Local Models</h3>
<p>GitHub Copilot CLI now supports local models via OpenAI-compatible providers, so you can do development with the same harness without burning cloud tokens. <code class="language-plaintext highlighter-rouge">qwen3.5:9b</code> seems to run nicely with Ollama - it does make my old RTX 3060 with 12GB VRAM sweat though, and fast, it is not.</p>

<p>Run with ollama:</p>

<p><code class="language-plaintext highlighter-rouge">ollama run qwen3.5:9b-q4_K_M</code></p>

<p>then set up Copilot CLI provider (here with <code class="language-plaintext highlighter-rouge">pwsh</code>):</p>

<p><code class="language-plaintext highlighter-rouge">$env:COPILOT_PROVIDER_BASE_URL="http://localhost:11434/v1"</code></p>

<p><code class="language-plaintext highlighter-rouge">$env:COPILOT_MODEL="qwen3.5:9b-q4_K_M"</code></p>

<p>Then run Copilot CLI and listen for the fan spinning up ;-)</p>

<p><a href="/assets/images/2026-04-copilot-with-local-qwen.webp"><img src="/assets/images/2026-04-copilot-with-local-qwen.webp" alt="GitHub Copilot CLI connected to a local Qwen model" style="display:block; width:100%; max-width:420px; height:auto; margin:1rem auto;" /></a></p>

<p><a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models">Using your own LLM models in GitHub Copilot CLI</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[GitHub Actions: The Stuff Nobody Tells You Solid guide from someone who works at GitHub with practical advice on avoiding the most common pain points. Since NUKE is going out of maintenance, going back to “pure” GH Actions is on the table, and in any case some things are lightweight enough that it makes sense.]]></summary></entry><entry><title type="html">Interesting stuff I found - March 2026</title><link href="https://www.michaelkc.dk/2026/03/07/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - March 2026" /><published>2026-03-07T13:49:00+00:00</published><updated>2026-03-07T13:49:00+00:00</updated><id>https://www.michaelkc.dk/2026/03/07/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2026/03/07/interesting-stuff-i-found.html"><![CDATA[<h3 id="michaelkcextensionsconfigurationdoppler">Michaelkc.Extensions.Configuration.Doppler</h3>
<p>Not found, but created - a .NET configuration provider for <a href="https://www.doppler.com/">Doppler</a>, something they seemingly intended on delivering 4 years ago, but never finished. It turned out somebody already <a href="https://github.com/anktsrkr/DopplerConfigurationProvider">did this</a> but it was a fun little exercise in agentic coding, so I wrapped it up. Maybe you like Apache license better than MIT ;-)</p>

<p>In the sample, I also demonstrate a technique I have previously used with Azure Key Vault, where an <a href="https://github.com/michaelkc/Michaelkc.Extensions.Configuration.Doppler/blob/main/samples/SampleApp/Program.cs#L8">entire JSON configuration object is loaded out of a single key</a>. This allows easy transformation from appsettings.json to Doppler (and with Doppler the editing experience is okayish, unlike Key Vault where you more or less need custom tooling to pull it off)</p>

<p>It also gave me a chance to apply <a href="https://andrewlock.net/easily-publishing-nuget-packages-from-github-actions-with-trusted-publishing/">nuget trusted publishing</a></p>

<p><a href="https://github.com/michaelkc/Michaelkc.Extensions.Configuration.Doppler">Michaelkc.Extensions.Configuration.Doppler</a></p>

<p><a href="https://www.nuget.org/packages/Michaelkc.Extensions.Configuration.Doppler">Michaelkc.Extensions.Configuration.Doppler package</a></p>

<h3 id="a-language-for-agents">A Language For Agents</h3>
<p>Agents prefer strong typing, loose syntax. Python (significant whitespace) and dynamic languages in general are not ideal.</p>

<p>To the list I would add compiled languages where source is not available outright, but that can be <a href="https://github.com/davidfowl/dotnet-skillz/blob/main/skills/ilspy-decompile/SKILL.md">somewhat mitigated with skills</a>.</p>

<p><a href="https://lucumr.pocoo.org/2026/2/9/a-language-for-agents/">A Language For Agents</a></p>

<h3 id="nordic-ansi-keyboards-on-laptops">“Nordic” ANSI keyboards on laptops</h3>
<p>My old Thinkpad is dying, and I am in the market for a new one. To my dismay, <a href="https://www.doc.ic.ac.uk/~nuric/posts/hardware/why-do-some-uk-laptops-come-with-a-us-ansi-keyboard-layout/">HP and Asus has started supplying the nordic market with ANSI-keyboard</a> (one-row enter key vs the traditional two-row ISO variant), with nordic characters painted on.</p>

<p>This bums me out, as <a href="https://www.xda-developers.com/hp-omnibook-ultra-flip-review/">HP is making some really slick hardware at a good price point</a>. But not going to retrain all that muscle memory. I guess Lenovo will get my business again…</p>

<p>EDIT 24/03: Picked up a <a href="https://psref.lenovo.com/Detail/Yoga_Slim_7_14ILL10?M=83JX00AAMX">Lenovo Yoga Aura 14” with Intel U7-258V and 32 GB ram</a> for 5.500 DKR (~USD 850), 
by trading in an old<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> PC.</p>

<h3 id="minions">Minions</h3>
<p>Price for best name for “semi-autonomous coding agents” goes to Stripe - I hope “Minions” will take as an industry standard. But what is up with that page background?</p>

<p><a href="https://stripe.dev/blog/minions-stripes-one-shot-end-to-end-coding-agents">Minions: Stripe’s one-shot, end-to-end coding agents</a></p>

<h3 id="pelis-agent-factory">Peli’s Agent Factory</h3>
<p>Similar in spirit to Minions, but built on regular GitHub Actions / GitHub Copilot (or Codex/Claude/Gemini), the agent factory looks really interesting. 
I have started trialing some of the workflows on a non-critical repo.</p>

<p><a href="https://github.github.com/gh-aw/blog/2026-01-12-welcome-to-pelis-agent-factory/">Welcome to Peli’s Agent Factory</a></p>

<h3 id="ai-benefits---but-at-what-cost">AI Benefits - But at What Cost?</h3>
<p>I have dialed down my attempts to keep up with the latest LLM coding news, as drinking from the firehose is very tiresome. Still, being 95%+ of my Tech Feed on Linkedin and Twitter, a lot of stuff goes by, and I try to pick up the important stuff. But at this point, I would rather focus on actually using it for building real features, rather than chase the latest “Ralph Wiggum”-style hyperbole.</p>

<p>Anyway, this perspective on the actual costs of the AI infrastructure is interesting. You can only keep up turning $100 into $10 at scale for so long - but at this point I think it is hard to predict if the endgame is going to be price hikes, cheaper-per-token models (ideally runnable on consumer hardware) or AGI (unlikely but…)</p>

<p><a href="https://ardalis.com/ai-benefits---but-at-what-cost/">AI Benefits - But at What Cost?</a></p>

<h3 id="two-beliefs-about-coding-agents">Two Beliefs About Coding Agents</h3>
<p>“Most talented developers do not appreciate the impact of the intuitive knowledge they bring to their coding agent.”</p>

<p>I think this is accurate. When I see <a href="https://x.com/unclebobmartin/status/2032798591501078576">Uncle Bob</a>, David Fowler and <a href="https://kellabyte.substack.com/p/building-a-distributed-sql-database">Kelly Sommers</a> report great success with agentic coding, I am sure they are pouring tonnes of knowledge into their prompting. I do the same; over the last two days I had Copilot code up first an implementation of <a href="https://datatracker.ietf.org/doc/draft-rosomakho-oauth-dpop-rt/">dPoP-RT</a> then of <a href="https://datatracker.ietf.org/doc/html/rfc9449">dPoP with Bearer access tokens</a>, both on top of Duende IdentityServer. If I had not been quite specific about what I wanted during planning, I am not sure the resulting implementations would have useful. Then again, I <em>am</em> sure that I could not deliver that as a potentially shippable feature in a day without LLM assistance.</p>

<p><a href="https://www.dbreunig.com/2026/02/25/two-things-i-believe-about-coding-agents.html">Two Beliefs About Coding Agents</a></p>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>How old? Let’s just say its CPU was dual core <a href="https://en.wikipedia.org/wiki/Bobcat_(microarchitecture)">Bobcat</a> <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[Michaelkc.Extensions.Configuration.Doppler Not found, but created - a .NET configuration provider for Doppler, something they seemingly intended on delivering 4 years ago, but never finished. It turned out somebody already did this but it was a fun little exercise in agentic coding, so I wrapped it up. Maybe you like Apache license better than MIT ;-)]]></summary></entry><entry><title type="html">Interesting stuff I found - February 2026</title><link href="https://www.michaelkc.dk/2026/02/02/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - February 2026" /><published>2026-02-02T15:00:00+00:00</published><updated>2026-02-02T15:00:00+00:00</updated><id>https://www.michaelkc.dk/2026/02/02/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2026/02/02/interesting-stuff-i-found.html"><![CDATA[<h3 id="google-technical-writing-course">Google Technical Writing course</h3>
<p>I am chewing through the course. Good tips, maybe you could distill it to a technical writing agent/reviewer?</p>

<p><a href="https://developers.google.com/tech-writing">Google Technical Writing</a></p>

<h3 id="azure-verified-bicep-modules">Azure Verified (Bicep) Modules</h3>
<p>When I was last deep in Bicep, sharing module definitions was difficult (GitHub submodules…), and best practice guidance was non-existant. 
It seems things got a lot better, and there is now lots of “Azure Verified Modules” (AVM) to get you going on the right path, and it is possible to consume modules via URL reference
(not sure how the supply chain attack story is though…)</p>

<p>Still not convinced that declarative languages are the way to go for resource definition, I think the Aspire/Azure CDK people are closer to the optimal solution.
At any rate, I am 100% convinced you need a strategy for applying your infra definition code continuously (periodically, also when nothing changes), otherwise it will bit rot and you will be afraid to apply it when it matters.</p>

<p><a href="https://azure.github.io/Azure-Verified-Modules/usage/quickstart/bicep/">Bicep AVM Quickstart Guide</a></p>

<h3 id="passkeys">Passkeys</h3>
<p>Working with a passkey rollout plan, and I am digesting the tome linked below, to come up with personas and a scenario test plan.</p>

<p>When they work, passkeys are wonderful and secure. 
But I think the mental model is very difficult to grasp for the average user - which can quickly translate to support needs when things start going south.</p>

<p><a href="https://www.imperialviolet.org/tourofwebauthn/tourofwebauthn.html">Tour of WebAuthn</a></p>

<h3 id="azure-key-vault-emulator">Azure Key Vault Emulator</h3>
<p>Microsoft now supplies an Azure Service Bus emulator, but still no Key Vault emulator. This guy did the hard work, and that will come in handy with local-dev Aspire 
and not least using it in a TestContainer and the <a href="https://www.youtube.com/watch?v=nHUwqsRtPCU">real-port hosting option for WebApplicationFactory in .NET 10</a>.</p>

<p><a href="https://github.com/james-gould/azure-keyvault-emulator?tab=readme-ov-file#running-the-emulator-with-net-aspire">Azure KeyVault Emulator</a></p>

<h3 id="evaluating-llm-coding-agent-innovations">Evaluating LLM coding agent innovations</h3>
<p>Pete Hodgson argues that the real issues in LLM coding is context management and bad design taste. He uses that to evaluate which of the flavor-of-the-month techniques (e.g. Ralph) and innovations to track closely</p>

<p><a href="https://blog.thepete.net/blog/2026/01/29/assessing-the-latest-ai-coding-hotness/">Assessing the Latest AI Coding Hotness</a></p>

<h3 id="agentsmd-docs-index-vs-skills">AGENTS.md docs index vs skills</h3>
<p>Picking up on the above, context engineering is obviously super important. Especially when it comes to new versions of frameworks, on which the LLM is not properly trained.
Vercel faced that issue with a new version of <code class="language-plaintext highlighter-rouge">next.js</code>, and ran experiments with Claude to see if skills were the right way to inject the appropriate context. 
It turns out coding agents do not call skills reliably, so a compressed index of the <code class="language-plaintext highlighter-rouge">next.js</code> markdown docs in AGENTS.md worked better.</p>

<p><a href="https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals">AGENTS.md outperforms skills in our agent evals</a></p>

<h3 id="writing-a-good-agentsmd">Writing a good AGENTS.md</h3>
<p>Also in that area, this article considers what to put in <code class="language-plaintext highlighter-rouge">AGENTS.md</code>, and reminds that at least Claude (and presumably also Copilot, OpenCode etc.) will often ignore it if it determines it is not relevant.</p>

<p>I really try to grok the principles people are uncovering, and am experimenting a lot.</p>

<p><a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md">Writing a good CLAUDE.md</a></p>

<h3 id="writing-a-great-agentsmd">Writing a great AGENTS.md</h3>
<p>From good to great, Matt Nigh from GitHub chimes in with an analysis of 2,500 <code class="language-plaintext highlighter-rouge">AGENTS.md</code> files and concludes that it must cover 6 core areas:</p>

<p>I got the link from <a href="https://addyosmani.com/blog/good-spec/">How to write a good spec for AI agents</a>, but I was turned off by his misquoting of the lethal trifecta (AI slop?) - and who seriously uses GPT 4 for anything now?</p>

<p><a href="https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/">How to write a great agents.md: Lessons from over 2,500 repositories</a></p>

<h3 id="oh-my-posh-visual-configurator">Oh-my-posh visual configurator</h3>
<p>Nice, vibe-coded app for building out your terminal. I will give it a shot if I tire of the default Aliens theme, which I recently started applying to all my machines with the <a href="https://ohmyposh.dev/docs/dsc">Oh-my-posh DSC provider</a>.
(my basic setup of Aliens can be DSC-applied with <a href="https://gist.github.com/michaelkc/3b784329c0732e28f1cbc72d4cce27bf">this file</a>)</p>

<p><a href="https://montemagno.com/introducing-oh-my-posh-visual-configurator-finally-a-drag-and-drop-terminal-theme-builder/">Introducing Oh My Posh Visual Configurator</a></p>

<h3 id="winget-dsc-configuration">WinGet (DSC) Configuration</h3>
<p>Picking up on that, nice to see some docs on DSC / <code class="language-plaintext highlighter-rouge">winget configure</code>- that would have been nice 14 days ago when I sifted through it!
Relationship between winget and DSC v2/v3 is still spotty (see comments), and there really need to be more non-imperative providers for dev stuff beyond “switch on dark mode”. Basically nothing seems to have happened on that front since <a href="https://www.youtube.com/watch?v=vvdnel6ffTc">the build video</a>.</p>

<p>But with more eyeballs, maybe it will gain some traction?</p>

<p><a href="https://developer.microsoft.com/blog/winget-configuration-set-up-your-dev-machine-in-one-command">WinGet Configuration: Set up your dev machine in one command</a></p>

<h3 id="context-switching-with-ai-agents">Context switching with AI agents</h3>
<p>Nice treatise on how to handle the excessive context switching that arise from constantly waiting on (multiple) agent workstreams. 
The middle ground between  “too slow to stare and wait, too fast to do meaningful work in the meantime” is a bad place, always has been
(for builds, deploys, reviews etc. etc.)</p>

<p><a href="https://strategizeyourcareer.com/p/this-ai-problem-is-the-biggest-risk-for-software-engineers-in-2026">The biggest obstacle for engineer productivity in 2026</a></p>

<h3 id="real-world-apps-or-medium-clone-built-in--everything">Real-world apps (or: Medium clone built in … everything)</h3>
<p>Interesting concept: Build the same app in different stacks. Great as a learning tool and to compare approaches</p>

<p><a href="https://github.com/realworld-apps/">RealWorld Example Apps</a></p>

<h3 id="playwright-cli">Playwright CLI</h3>
<p>Spent a bit of time with an open browser window to the left, Playwright CLI in a VSCode windows (with Grok Code Fast, so free model) to the right. It is fun to describe what to do and have the agent do it in realtime.
It seems there is quite a pivot from MCP to CLI-based skills at the moment.</p>

<p><a href="https://github.com/microsoft/playwright-cli">Playwright CLI</a></p>

<h3 id="addy-osmanis-llm-coding-workflow">Addy Osmani’s LLM Coding Workflow</h3>
<p>Addy Osmani’s LLM coding workflow closely mirrors my own approach. He emphasizes clear plans before coding, small iterative chunks, extensive context, human oversight with testing and frequent commits.</p>

<p><a href="https://addyo.substack.com/p/my-llm-coding-workflow-going-into">My LLM coding workflow going into 2026</a></p>

<h3 id="the-art-of-kpop-demon-hunters">The art of KPop Demon Hunters</h3>

<p>Very nicely done, love the music and looking forward to the <a href="https://www.lego.com/en-us/aboutus/news/2026/february/lego-kpop-demon-hunters-sets">lego sets</a>.</p>

<p><a href="https://theartofkpopdemonhunters.com/">The art of KPop Demon Hunters</a></p>

<h3 id="ai-assisted-coding-same-game-different-dice">AI-assisted coding: Same game, different dice</h3>

<p>The article presents a contrarian view arguing that most AI teams see only 0.8x-1.2x productivity gains (not the promised 10x), and that success comes from fundamental practices like TDD, modular design, and small iterative chunks. I think that is a bit pessimistic, especially for resource constrained teams that struggle to fill all roles, but good balance to all the hype.</p>

<p><a href="https://codemanship.wordpress.com/2026/01/05/the-ai-ready-software-developer-conclusion-same-game-different-dice/">The AI-Ready Software Developer: Conclusion – Same Game, Different Dice</a></p>

<h3 id="canonical-logs-and-structured-logging">Canonical logs and structured logging</h3>

<p>Excellent summary of canonical logs and related concepts, though implementing this pattern in .NET is challenging since standard libraries default to traditional structured logging rather than canonical logs.</p>

<p><a href="https://loggingsucks.com/">Logging Sucks</a>
<a href="https://www.evlog.dev/">Evlog - Event-based logging tool</a></p>

<h3 id="vibe-coding-paralysis-and-managing-workstreams">Vibe coding paralysis and managing workstreams</h3>
<p>Trying to do too much at once with AI tools can lead to cognitive overload and unfinished work; it’s important to track what you’re building and read the generated code to maintain confidence and keep your skills sharp.</p>

<p><a href="https://x.com/francedot/status/2017858253439345092">Vibe coding paralysis: When infinite productivity breaks your brain (Francesco Bonacci on X)</a></p>

<h3 id="summarizesh-fast-scriptable-summaries">Summarize.sh: Fast, Scriptable Summaries</h3>
<p>Summarize.sh is great at summarizing YouTube videos (and other types of content). I got it working with Azure AI Foundry GPT-5-mini with a bit of tinkering.</p>

<p><a href="https://summarize.sh/">Summarize.sh</a></p>

<h3 id="sundhedsdatabanken">Sundhedsdatabanken</h3>
<p>Drill into Danish medicine consumption in PowerBI. The Danish government has been tracking this stuff for 40 years, it opens up a lot of interesting possibilities for science.</p>

<p><a href="https://sundhedsdatabank.dk/medicin/medicinsalg-og-udgifter">Sundhedsdatabanken</a></p>

<h3 id="google-a2-vs-microsoft-agents-sdk">Google A2 vs Microsoft Agents SDK</h3>
<p>Erik Meijer contrasts Google’s A2 for dynamic with Microsoft Adaptive Cards (which I had never head of). Agentic UI is surely something that will become important as semi-autonomous  agents starts to gain traction.</p>

<p><a href="https://developers.googleblog.com/introducing-a2">Google introduces A2 for dynamic UIs</a>
<a href="https://adaptivecards.microsoft.com/">Microsoft Adaptive Cards</a>
<a href="https://x.com/headinthebox/status/2001093741655019863">Erik Meijer’s post on X</a></p>

<h3 id="https-evolution-forced-by-reality">HTTP’s evolution: forced by reality</h3>
<p>Great overview of how HTTP changed over decades, each version adapting to new constraints like latency, mobile, and unreliable networks—never by design, always by necessity.</p>

<p><a href="https://www.mostlylucid.net/blog/http-over-the-decades">HTTP Over the Decades: A Story of Physics, Latency, and Grudging Adaptation</a></p>

<h3 id="2025-llms-agents-and-everything-else">2025: LLMs, agents, and everything else</h3>
<p>Massive roundup of LLM developments, trends, and tools from 2025—so much happened it’s hard to keep up, and the links alone show the scale of change.</p>

<p><a href="https://simonwillison.net/2025/Dec/31/the-year-in-llms/">Simon Willison’s 2025 LLM Year in Review</a></p>

<h3 id="grounded-ai-adoption-mitchell-hashimotos-journey">Grounded AI adoption: Mitchell Hashimoto’s journey</h3>

<p>Interesting and grounded take on the journey to see value in agentic coding, without drinking all of the “Ralph Wiggum” kool-aid.</p>

<p><a href="https://mitchellh.com/writing/my-ai-adoption-journey">My AI Adoption Journey – Mitchell Hashimoto</a></p>

<h3 id="shannon---autonomous-llm-pentester">Shannon - autonomous LLM pentester</h3>
<p>Shannon is an LLM-powered, autonomous pentester. Have not tried it out, but would be interesting to see it work against <a href="https://hack-yourself-first.azurewebsites.net/">Supercar Showdown</a></p>

<p><a href="https://github.com/KeygraphHQ/shannon">Shannon automated pentester</a></p>

<h3 id="brace-for-the-fening">Brace for the f***ening</h3>
<p>What if the Tech CEOs ends up being right and white collar work disappears quickly? <a href="https://hachyderm.io/@scottgal/116092529976187527">The most likely case</a> is that they are inflating expectations to keep investments flowing (into the bubble) but what if…?</p>

<p><a href="https://justin.searls.co/posts/brace-for-the-fuckening/">Brace for the f***ening</a></p>

<h3 id="outcome-engineering-and-the-o16g-manifesto">Outcome engineering and the o16g Manifesto</h3>
<p>I respect Charity Majors, so I am inclined to take this seriously weight on this, even though it seems a bit ahead of things as they are. I certainly think there are other blockers than pure cost in development still.</p>

<p><a href="https://o16g.com/">The o16g Manifesto</a></p>

<h3 id="large-language-models-will-never-be-intelligent-expert-says">Large Language Models Will Never Be Intelligent, Expert Says</h3>
<p>It is hard not to be confused, I am thinking “two movies, one screen” here.</p>

<p><a href="https://futurism.com/artificial-intelligence/large-language-models-willnever-be-intelligent">Large Language Models Will Never Be Intelligent</a></p>

<h3 id="amp-drops-vscode-plugins-for-cli">Amp drops VSCode plugins for CLI</h3>
<p>Amp is killing its VSCode and Cursor extensions, shifting focus to a pure CLI approach.</p>

<p><a href="https://ampcode.com/news/the-coding-agent-is-dead">Amp announcement: The Coding Agent Is Dead</a></p>

<h3 id="local-ci">Local CI</h3>
<p>Safia, like DHH, advocates for “local CI” as the future of validation, moving away from slow PR-based loops. I think it makes sense if you run that verification in containers, and have a mechanism to attest that it happened (to prevent sloppiness).</p>

<p><a href="https://x.com/captainsafia/status/2012302910571561061">Safia on local CI</a></p>

<h3 id="the-ai-vampire-who-profits-from-10x-output">The AI Vampire: Who profits from 10x output?</h3>
<p>If AI coding agents can deliver 10x productivity, what is the cost? And who will profit?</p>

<p><a href="https://steve-yegge.medium.com/the-ai-vampire-eda6e4f07163">The AI Vampire: Steve Yegge on value capture and burnout</a></p>

<h3 id="software-is-far-from-dead">Software is far from dead</h3>
<p>Steven Sinofsky argues that AI won’t kill software, but rather increase the demand for it by moving functionality up the stack and making domain expertise more critical.</p>

<p><a href="https://www.a16z.news/p/death-of-software-nah">Death of Software. Nah.</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Google Technical Writing course I am chewing through the course. Good tips, maybe you could distill it to a technical writing agent/reviewer?]]></summary></entry><entry><title type="html">Interesting stuff I found - January 2026</title><link href="https://www.michaelkc.dk/2026/01/05/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - January 2026" /><published>2026-01-05T11:08:00+00:00</published><updated>2026-01-05T11:08:00+00:00</updated><id>https://www.michaelkc.dk/2026/01/05/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2026/01/05/interesting-stuff-i-found.html"><![CDATA[<h3 id="gisthost">GistHost</h3>
<p>An updated version of GistPreview, which allows hosting single-file HTML pages on GitHub as gists. The author use them for storing Claude Code transcripts</p>

<p><a href="https://simonwillison.net/2026/Jan/1/gisthost/">GistHost</a></p>

<h3 id="ralph-wiggum-agentic-coding">“Ralph Wiggum” agentic coding</h3>
<p>As I understand it the core philosophy here is to come up with an implementation plan (like spec-driven), then convert it to individually implementable features and run the agent in a non-interactive, sequential loop to implement the plan.</p>

<strike>The Ralph Wiggum part is then to look where the agent falters and add explicit instructions in `AGENTS.md` (combined with prompting it to do some housekeeping of its own instructions as well).

The latter part I have used myself with Copilot, when it had trouble working with translation files.</strike>

<p>The Ralph Wiggum part is the iteration with the same prompt on the same problem until a stop condition is met. The idea being that the agent will then build upon partial solutions in previous loops, and be able to run unattended for longer.
<a href="https://dev.to/sivarampg/the-ralph-wiggum-approach-running-ai-coding-agents-for-hours-not-minutes-57c1">This article</a> explains it well.</p>

<p><a href="https://lukeparker.dev/stop-chatting-with-ai-start-loops-ralph-driven-development">Stop Chatting with AI. Start Loops (Ralph Driven Development)</a></p>

<h3 id="mitchell-hashimoto-on-feature-design">Mitchell Hashimoto on “Feature Design”</h3>
<p>Not a big fan of video content, but this one is gold. It walks through the crucial process of taking a step back when feature requests come in and:</p>

<ul>
  <li>identify the underlying issue the requester hopes the feature will solve</li>
  <li>figure out how to address multiple such issues with a new feature that aligns with the product vision</li>
  <li>spec out the new feature using a “human–machine interface first” approach</li>
</ul>

<p><a href="https://x.com/mitchellh/status/2001810354096214059">Feature Design</a></p>

<h3 id="textareamy">textarea.my</h3>
<p>A <a href="https://github.com/antonmedv/textarea">distraction-free, bare-bones text editor</a> that saves content base64-encoded in the url</p>

<p><a href="https://textarea.my">textarea.my</a></p>

<h3 id="the-price-of-intelligence---three-risks-inherent-in-llms">The Price of Intelligence - Three risks inherent in LLMs.</h3>
<p>Supplementing the treatise on exfiltration risks in <a href="https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/">the lethal trifecta</a>, this article discusses inherent issues in LLMs themselves, such as hallucination.</p>

<p><a href="https://cacm.acm.org/practice/the-price-of-intelligence/">The Price of Intelligence</a></p>

<h3 id="the-misconceptions-about-vibe-coding">The Misconceptions About Vibe-Coding</h3>
<p>Some good takes here, specifically that</p>
<ul>
  <li>vibe coded apps are the new Excel (good for individual stuff, not so good when moving to multi-user, deployed apps)</li>
  <li>the people threatened the most by vibe coding are entrepeneurs with simple SaaS offerings, not developers</li>
  <li>developers stay relevant by moving up the complexity stack (architecture, review)</li>
  <li>vibe-coding’s ceiling is determined by your ability to validate the output</li>
</ul>

<p><a href="https://blog.fka.dev/blog/2025-12-06-the-misconceptions-about-vibe-coding/">The Misconceptions About Vibe-Coding</a></p>

<h3 id="ai-rollout-satire--ai-underpants-gnomes">AI rollout satire (&amp; AI Underpants Gnomes)</h3>
<p>Had a good laughh at <a href="https://x.com/gothburz/status/1999124665801880032">this</a> and it led me to this piece by Jeffrey Snover. 
That is a more serious treatise on how many companies adopt generative AI out of fear of “missing the boat”, 
with no clue how to derive value. That was how I felt when I saw the Gordon agent in Docker…</p>

<p><a href="https://www.jsnover.com/blog/2025/11/18/ai-underpants-gnomes-the-missing-step-in-your-strategy/">AI Underpants Gnomes: The Missing Step in Your Strategy</a></p>

<h3 id="ai-native-software-engineering--the-ralph-loop">AI-native software engineering &amp; the Ralph loop</h3>
<p>Some hyperbole, but very interesting. I did dabble a bit with reverse engineering approaches (not products) to skills, with some success.
I previously speculated that the outcome disparity people experience with agentic coding might be due to language choice and the models ability to work with your choice. Maybe it is time to trial work in alleged S-Tier languages like Typescript instead of F-Tier .NET ?</p>

<p>I am definitely going to watch the videos <a href="https://www.youtube.com/watch?v=Jr2auYrBDA4&amp;t=8s">1</a> <a href="https://www.youtube.com/watch?v=ZBkRBs4O1VM">2</a> and try out <a href="https://ghuntley.com/agent/">the workshop</a>.</p>

<p><a href="https://x.com/jaimefjorge/status/2011381315929583747">AI-native software engineering &amp; the Ralph loop</a></p>

<h3 id="mitmproxy">mitmproxy</h3>
<p>Spent a bit of time getting <code class="language-plaintext highlighter-rouge">mitmproxy</code> running today.</p>

<p>Basics:</p>

<ul>
  <li>install with <code class="language-plaintext highlighter-rouge">winget install 9NWNDLQMNZD7</code></li>
  <li>trust root cert via <a href="http://mitm.it">mitm.it</a></li>
  <li>capture trace for specific domain patterns
    <ul>
      <li><code class="language-plaintext highlighter-rouge">mitmproxy -p 9595 --allow-host .*mydomain1.com  --allow-host .*mydomain2.org --no-show-ignored-hosts --store-streamed-bodies --save-stream-file ./capture.mitm</code></li>
    </ul>
  </li>
  <li>configure Windows proxy to use <code class="language-plaintext highlighter-rouge">http://localhost:9595</code>
    <ul>
      <li><code class="language-plaintext highlighter-rouge">reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f</code>
<code class="language-plaintext highlighter-rouge">reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d http://localhost:9595 /f</code></li>
    </ul>
  </li>
  <li>do what you want traced and stop <code class="language-plaintext highlighter-rouge">mitmproxy</code></li>
  <li>disable Windows proxy
    <ul>
      <li><code class="language-plaintext highlighter-rouge">reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f</code></li>
    </ul>
  </li>
  <li>load up <code class="language-plaintext highlighter-rouge">capture.mitm</code> in <code class="language-plaintext highlighter-rouge">mitmweb</code></li>
</ul>

<h3 id="wezterm">WezTerm</h3>
<p>While Windows Terminal is great, it is good to have competition in the space on Windows. Wezterm comes with <a href="https://wezterm.org/features.html">interesting features</a> I want to dig into.</p>

<p>Install with <code class="language-plaintext highlighter-rouge">winget install wez.wezterm</code></p>

<p><a href="https://wezterm.org/index.html">WezTerm</a></p>

<h3 id="blazor-hot-reloading">Blazor Hot Reloading</h3>
<p>I am shifting to UI adjustment work as we wrap up a project at work, and that led me to investigate the state of Blazor Hot Reloading. It is much, much better than when I looked last, 
and works even when not debugging. One gotcha is that “hot reload on save” is not enabled by default in VS 2026; you must press <code class="language-plaintext highlighter-rouge">ALT-F10</code> to hot reload (or enable it in options).</p>

<p>Also I noticed that the browser refresh script injected is now an actual script file, which might mean that running with a CSP locally might finally be doable (it used to be direct script injection).</p>

<p><a href="https://learn.microsoft.com/en-us/visualstudio/debugger/hot-reload?view=visualstudio&amp;pivots=programming-language-dotnet">Write and debug running code with Hot Reload in Visual Studio</a></p>

<h3 id="resetting-packagelockjson-on-git-checkout">Resetting package.lock.json on git checkout</h3>
<p>I was doing a lot of branch switching today, and got annoyed with Git complaining</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git checkout main
error: Your local changes to the following files would be overwritten by checkout:
        src/DotNetProject1/packages.lock.json
        src/DotNetProject2/packages.lock.json
Please commit your changes or stash them before you switch branches.
Aborting
</code></pre></div></div>
<p>I want to regenerate lockfiles on build, to ensure that I build with the exact same transitive package versions on the build server as I developed locally. 
But the file contents are not important to me; when the branch is switched it should ignore any pending changes to the lockfiles lingering from the old branch.
It will be regenerated as soon as I build anyway.</p>

<p>This <code class="language-plaintext highlighter-rouge">co</code> Git alias, courtesy of Copilot with some nudging, does the trick:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[alias]
  co = "!f() { set -e; CANDIDATES=$(git ls-files -m -o --exclude-standard --full-name -- \"**/packages.lock.json\" || true); if [ -z \"$CANDIDATES\" ]; then CANDIDATES=$(git ls-files --full-name -- \"**/packages.lock.json\" || true); fi; OLDIFS=\"$IFS\"; IFS=$(printf '\n'); for f in $CANDIDATES; do [ -z \"$f\" ] || { git restore --staged --worktree -- \"$f\" 2&gt;/dev/null || true; git checkout -- \"$f\" 2&gt;/dev/null || true; git clean -f -- \"$f\" 2&gt;/dev/null || true; }; done; IFS=\"$OLDIFS\"; git checkout \"$@\"; }; f"
</code></pre></div></div>
<p>Add it to <code class="language-plaintext highlighter-rouge">~/..gitconfig.aliases</code> (when using <a href="https://haacked.com/archive/2019/02/14/including-git-aliases/">Phil Haack’s Git aliases</a>)</p>

<p>It slows down the checkout process quite a bit though, but if that ends up annoying me I might make a separate alias for “fast” switching (or just use <code class="language-plaintext highlighter-rouge">checkout</code>).</p>

<h3 id="upscaling-images---upscayl">Upscaling images - upscayl</h3>
<p>I had to print some low-resolution images today, and experimented with putting them through AI upscaling. Upscayl runs locally (or you can pay for cloud), is free, open source (models possibly only open-weight?) and worked great for my use case.
Only gotchas is that you must have an NVIDIA card for it to work, but most of my machines do…</p>

<p><a href="https://github.com/upscayl/upscayl/">Upscayl</a></p>

<h3 id="ai-personal-assistants">AI personal assistants</h3>
<p>Things are heating up with <a href="https://docs.clawd.bot/">ClawdBot</a>, which got a lot of hype this week. I am not personally ready to connect bleeding edge code and models with questionable safeguards to my critical workflows just yet, but I certainly see the allure of finally feeling close to realizing the “personal agent does stuff for me” vision.
While other people work out the kinks, I am dabbling a bit with <a href="https://block.github.io/goose/">Goose</a>, where things are somewhat less exposed and you are more in control of what is happening (like Copilot).</p>

<p>EDIT: <a href="https://www.reddit.com/r/ClaudeCode/comments/1qnsn9t/how_a_single_email_turned_my_clawdbot_into_a_data/">How a Single Email Turned My ClawdBot Into a Data Leak </a> and <a href="https://dev.to/sivarampg/from-clawdbot-to-moltbot-how-a-cd-crypto-scammers-and-10-seconds-of-chaos-took-down-the-4eck">From Clawdbot to Moltbot: How a C&amp;D, Crypto Scammers, and 10 Seconds of Chaos Took Down the Internet’s Hottest AI Project </a>. Making a chat/email-accessible personal agent with the right balance between safety and usability is hard. Reading the article, I wonder who dumps money they cannot afford to loose into new crypto-coins like that? I do not feel sorry for them.</p>

<h3 id="scott-adams">Scott Adams</h3>
<p>Scott Adams found out if the world really is a simulation as he often speculated. This obituary mirrors my feelings on the matter well. If you can overlook the post-Trump years and subsequent horrible political views (and that is hard), his books and writings contain many valueable life-lessons, like <a href="https://web.archive.org/web/20131122191323/https://dilbert.com/blog/entry/goals_vs_systems/">Systems over goals</a>. I will always remember old Dilbert fondly.</p>

<p><a href="https://plausiblyexogenous.substack.com/p/my-journey-with-scott-adams">Andreas Backhaus - My journey with Scott Adams</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[GistHost An updated version of GistPreview, which allows hosting single-file HTML pages on GitHub as gists. The author use them for storing Claude Code transcripts]]></summary></entry><entry><title type="html">Interesting stuff I found - December 2025</title><link href="https://www.michaelkc.dk/2025/12/03/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - December 2025" /><published>2025-12-03T10:31:00+00:00</published><updated>2025-12-03T10:31:00+00:00</updated><id>https://www.michaelkc.dk/2025/12/03/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2025/12/03/interesting-stuff-i-found.html"><![CDATA[<h3 id="nuke-in-trouble-how-about-dagger">NUKE in trouble? How about Dagger</h3>
<p>I am heavily invested in <a href="https://nuke.build/">NUKE build</a>, however its author has been having a bad time with <a href="https://github.com/nuke-build/nuke/discussions/1564#discussioncomment-15001502">nasty community engagement</a>.</p>

<p>I hope he will consider taking it commercial, as the product brings a lot of value.</p>

<p>That did, however, prompt me to consider alternatives. The core issue is the well known difficulty of developing and testing GitHub Action workflows locally, which leads to a long stream of error correcting commits when you work with CI.</p>

<p>NUKE mostly solves this, by capturing the build script in strongly-typed, imperative .NET/C# (no more YAML debugging), and allows you to easily run the pipeline locally. 
<a href="https://docs.dagger.io/">Dagger</a> offers an alternative solution for the same problem; here an underlying execution engine is used to orchestrate functions written in Go/Typescript (or untyped alternatives) that chain together.</p>

<p>It allows you to take input (e.g. code in repo) to output (e.g. versioned deployment artifact, such as a container image) and can potentially also be used for code-based CD of those artifacts.</p>

<p>I made a <a href="https://github.com/michaelkc/dagger-dotnet-spike/">small spike of building a basic .NET solution</a> (with heavy aid from Copilot)</p>

<p>In principle, this sounds great, but lack of .NET support and lack of Microsoft engagement in the Daggerverse for common tasks curbs my enthusiasm a bit. Staying with NUKE for now, but keeping an eye on Dagger.</p>

<p><a href="https://bakson.dev/2023/07/03/deploy-azure-webapp-dagger.html">CI/CD with Dagger and Azure</a></p>

<h3 id="fizzy---a-fresh-take-on-kanban">Fizzy - a fresh take on Kanban</h3>
<p>The BaseCamp folks made a Kanban board / task tracker, free for up to 1000 cards. Also the code is open source (like they did with Campfire), 
which I would think is really valueable for upcoming Ruby programmers. At least I always wished for access to commercially-viable codebases to 
learn from early in my career, but that was unfortunately not commonly available for .NET in the early 2000s…</p>

<p><a href="https://www.fizzy.do/">Fizzy</a></p>

<h3 id="how-to-write-a-great-agentsmd">How to write a great agents.md</h3>
<p>Nice, actionable guidance.</p>

<p><a href="https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/">How to write a great agents.md: Lessons from over 2,500 repositories</a></p>

<h3 id="the-engineers-who-cant-use-ai-agents-dont-have-a-tools-problem">The Engineers Who Can’t Use AI Agents Don’t Have a Tools Problem</h3>
<p>Postulates that to use AI (coding) agents efficiently, you have to be able to</p>

<ul>
  <li>understand what you are building</li>
  <li>externalize that understanding in writing</li>
</ul>

<p>That is defintely true, but not the whole picture (as in: more is needed, context, experience etc.). It made me think of Kent Becks <a href="https://tidyfirst.substack.com/p/90-of-my-skills-are-now-worth-0">90% of My Skills Are Now Worth $0…but the other 10% are worth 1000x</a></p>

<p>EDIT: See also Adam Tornhills take <a href="https://www.linkedin.com/posts/adam-tornhill-71759b48_my-quick-and-very-subjective-take-on-ai-coding-activity-7402723654834569216-2zt6/">I tend to delete 80% of the generated code. The remaining 20% I refactor</a></p>

<p><a href="https://agentdrivendevelopment.com/the-engineers-who-cant-use-ai-agents-dont-have-a-tools-problem/">The Engineers Who Can’t Use AI Agents Don’t Have a Tools Problem</a></p>

<p>EDIT: And another take: <a href="https://lucumr.pocoo.org/2025/9/29/90-percent/">90 percent</a></p>

<h3 id="azure-cdk-progress">Azure CDK progress</h3>
<p>Previously-mentioned Azure CDK seem to be maturing nicely. They are not pushing it very hard, so I guess the intended usage is more via the higher-level deployment story of Aspire?</p>

<p><a href="https://www.nuget.org/packages/Azure.Provisioning#readme-body-tab">Azure CDK</a></p>

<h3 id="using-spiffe-as-an-oauth-client-credential">Using SPIFFE as an OAuth client credential</h3>
<p>I have not worked with SPIFFE (or mTLS for that matter), only the somewhat-related managed identities inside Azure and GitHub OIDC. But eliminating secrets is great for security, so nice to see traction on standardizing this stuff. 
Perhaps Azure PaaS platform managed identities can offer SPIFFE capabilities in the future for federating passwordless workload identities?</p>

<p><a href="https://datatracker.ietf.org/doc/draft-ietf-oauth-spiffe-client-auth/">SPIFFE client auth</a></p>

<h3 id="adapting-open-source-practices-in-the-wrong-context">Adapting open source practices in the wrong context</h3>
<p>Great quote, which I fully agree with:</p>
<blockquote>
  <p>Open source practices are the MOST wasteful way to deliver software.
They exist to manage the fact that there is no trust and there are no shared incentives.
When used in an enterprise, they are are wasteful and even dangerous.</p>
</blockquote>

<p>I once encountered a team that had adopted Git Flow for what was basically a web-based SaaS. Predictably, this ran completely off the rails in zero-value overhead. 
They were able to adapt their processes to a better place afterwards, but reckless implementation of open source practices
in the wrong context (just like implementing FAANG architecture in the wrong context) remains a danger.</p>

<p>I also like the <a href="https://gist.github.com/bdfinst/496d06b057c44edae7fd88d906e78f67">Contrast best practices between OS and enterprise</a> list.</p>

<p><a href="https://www.linkedin.com/posts/bryan-finster_contrast-best-practices-between-os-and-enterprise-activity-7399522364876840961-CmNj/">Bryan Finster on LinkedIn</a></p>

<h3 id="mistral-vibe-cli--devstral-small-2">Mistral Vibe CLI &amp; Devstral Small 2</h3>
<p>Nice to see European AI is still there.</p>

<p>I have not tried Devstral Small 2 (or Qwen 3 coder flash for that matter), but a laptop-runnable coding model have a lot of appeal.  My experiments with OpenCode/Cline and 
Grok Code Fast has not been very successful, but not sure if that is mostly the model or the agent…maybe time to give the small models a shot.</p>

<p>It has been many years since I have been able to code efficiently offline; in the old days it was Google, these days it is the coding agent.</p>

<p>For work (with GitHub Copilot), nothing I have tried beat Claude Sonnet 4.5 and Claude Opus 4.5. Although I did read that Gemini had an edge on large, legacy codebases.</p>

<p><a href="https://mistral.ai/news/devstral-2-vibe-cli">Devstral2 &amp; Mistral Vibe CLI</a></p>

<h3 id="same-model-different-results-why-coding-agents-arent-interchangeable">Same Model, Different Results: Why Coding Agents Aren’t Interchangeable</h3>
<p>Nice overview of some of the tricks Claude Code use to steer the behaviour of the underlying LLM, and reflections on what makes different agents work differently on top of the same model.</p>

<p><a href="https://blog.thepete.net/blog/2025/12/10/same-model-different-results-why-coding-agents-arent-interchangeable/">Why Coding Agents Aren’t Interchangeable</a></p>

<h3 id="vibe-engineering-justhtml">Vibe Engineering JustHTML</h3>
<p>Great account of vibe engineering in action. I am building an application currently, not a library, but I have similar experience. The process shines when you can guide the agent with key design choices, then it can fill out the blanks.</p>

<p><a href="https://friendlybit.com/python/writing-justhtml-with-coding-agents/">How I wrote JustHTML using coding agents</a></p>

<h3 id="how-i-built-a-production-app-with-claude-code">How I Built a Production App with Claude Code</h3>
<p>Interesting observations from Josh Anderson - that agent coding collapse with huge context is a message I have heard before, however I recently say someone report that Gemini 3 Pro works well when things get large. 
It is in preview in GitHub Copilot now, but did not work very well in my (extremely limited, 2-3 prompts) testing today (on a small solution).</p>

<p><a href="https://leadershiplighthouse.substack.com/p/how-i-built-a-production-app-with">How I Built a Production App with Claude Code</a></p>

<h3 id="github-actions-has-a-package-manager-and-it-might-be-the-worst">GitHub Actions Has a Package Manager, and It Might Be the Worst</h3>
<p>On the atrocious security posture of GitHub Actions. To mitigate, I try to stick to GitHub/Microsoft provided actions (in the hope that they know what they are doing) + NUKE + a few, carefully reviewed, forked and SHA-pinned actions.</p>

<p><a href="https://nesbitt.io/2025/12/06/github-actions-package-manager.html">GitHub Actions Has a Package Manager, and It Might Be the Worst</a></p>

<h3 id="mcp-2025-11-25-spec">MCP 2025-11-25 spec</h3>
<p>Digging through it today, I understand the basics of MCP but need to know more about the details. MCP is everywhere right now, 
and the potential (and potential risk) is huge.</p>

<p><a href="https://modelcontextprotocol.io/specification/2025-11-25">MCP 2025-11-25</a></p>

<h3 id="pydoll---evasion-first-browser-automation">Pydoll - Evasion-first browser automation</h3>
<p>TIL there are alternatives to Playwright/Selenium browser automation that actively try to evade detection. Evil-ish, reminds me of the AI companies ignoring <code class="language-plaintext highlighter-rouge">robots.txt</code>.</p>

<p><a href="https://github.com/autoscrape-labs/pydoll?tab=readme-ov-file">Pydoll</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[NUKE in trouble? How about Dagger I am heavily invested in NUKE build, however its author has been having a bad time with nasty community engagement.]]></summary></entry><entry><title type="html">Interesting stuff I found - November 2025</title><link href="https://www.michaelkc.dk/2025/11/02/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - November 2025" /><published>2025-11-02T16:25:00+00:00</published><updated>2025-11-02T16:25:00+00:00</updated><id>https://www.michaelkc.dk/2025/11/02/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2025/11/02/interesting-stuff-i-found.html"><![CDATA[<h3 id="when-the-shapes-dont-fit-modelling-team-interaction-anti-patterns-with-honesty">When the Shapes Don’t Fit: Modelling Team Interaction Anti-Patterns with Honesty</h3>
<p>I like [Team Topologies] as a shared language for talking and thinking about how teams work. Part of that is talking about what is not working, and how to improve, which this article touches upon.</p>

<p><a href="https://www.linkedin.com/pulse/when-shapes-dont-fit-modelling-team-interaction-honesty-rich-allen-fynhe/">When the Shapes Don’t Fit</a></p>

<h3 id="generate-github-copilot-instructions">Generate GitHub Copilot instructions</h3>
<p>Good little tip from Burke Holland: GitHub Copilot in VSCode can auto-generate <code class="language-plaintext highlighter-rouge">.github/copilot-instructions.md</code> via canned meta-instructions and a review of your codebase. A simple step to take, barring more heavyweight, emerging practices like memory and stuff like Repomix.</p>

<p><a href="https://www.linkedin.com/posts/burkeholland_your-ai-assistant-might-be-guessing-more-ugcPost-7348420055400931329-RK4V/">Your AI assistant might be guessing more than helping</a></p>

<h3 id="hitting-fresh-github-bugs">Hitting fresh GitHub bugs</h3>
<p>I was working on a fork of a custom Windows taskbar (to create a transparent zone other windows cannot maximize into, for use when I auto-hide the Windows taskbar to save my OLED screen from burn-in) and happened upon this bug. 
It is pretty specific, in that it occurs</p>

<ul>
  <li>if your repo was created 2025-11-25 (writing this on the 26th)</li>
  <li>if your repo is trying to create a release with <code class="language-plaintext highlighter-rouge">GITHUB_TOKEN</code></li>
</ul>

<p><a href="https://github.com/orgs/community/discussions/180369">Bug Report: Publishing a release via GitHub actions fails for repos created on 2025-11-25</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[When the Shapes Don’t Fit: Modelling Team Interaction Anti-Patterns with Honesty I like [Team Topologies] as a shared language for talking and thinking about how teams work. Part of that is talking about what is not working, and how to improve, which this article touches upon.]]></summary></entry><entry><title type="html">Interesting stuff I found - October 2025</title><link href="https://www.michaelkc.dk/2025/10/06/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - October 2025" /><published>2025-10-06T19:05:00+00:00</published><updated>2025-10-06T19:05:00+00:00</updated><id>https://www.michaelkc.dk/2025/10/06/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2025/10/06/interesting-stuff-i-found.html"><![CDATA[<h3 id="dhh-on-why-he-does-not-have-15-minutes-for-a-quick-call">DHH on why he does not have 15 minutes for a “quick call”</h3>
<p>Not a fan of video content, but I know this sentiment exactly. A 15 minute meeting at 13:00 can ruin an entire day of deep work.
It goes back to the difference between <a href="https://www.paulgraham.com/makersschedule.html">makers schedule and managers schedule</a> - meetings cost makers more.
Funny enough, I reflected on my experience today, and 2 x 5 minute interruptions in person in the office was significantly less disuptive than a
chat message “do you have 15 minutes for a quick call”. Food for thought.</p>

<p><a href="https://www.linkedin.com/posts/david-heinemeier-hansson-374b18221_when-i-politely-decline-scheduling-a-quick-activity-7379092346325487616-gzSy">When I politely decline scheduling a ‘quick call’</a></p>

<h3 id="the-architect-elevator">The Architect Elevator</h3>
<p>Participated in the <a href="https://architectelevator.com/workshops/">workshop</a>, great stuff. Gregor has seen it all, and can challenge your thinking like few others. I come away energized and with lots of food for thought, 
in the areas of political capital and how to spend it, ways to expand the solution space and how to be high level with depth - to name but a few.
I had a blast, colleagues were not quite as enthusiastic though (too many anecdotes for their taste), so YMMV. If you are a fan of the books, definitely go.</p>

<h3 id="azure-dev-summit">Azure Dev Summit</h3>
<p>Microsoft returned to Europe with a developer conference, and it was a great one. Portugal is lovely (first time there), and there was loads of great content. Standout sessions were</p>

<ul>
  <li><a href="https://www.strathweb.com/">Filip W</a>’s session on patterns for Small Language Models (and fine tuning them)</li>
  <li><a href="https://blog.safia.rocks/">Safia Abdalla</a>’s mini-workshop on re-implementing ASP.NET Core Minimal API (the framework) from scratch (2 hours!)</li>
  <li><a href="https://www.linkedin.com/in/bartdesmet/">Bart De Smet</a>’s session on implementing a C# feature in the Roslyn compiler (1 hour!)</li>
</ul>

<p>and a great workshop (with demo of <a href="https://github.com/sethjuarez/sustineo">Sustineo</a>) about the new (LLM) Agents framework and LLM agents in general by <a href="https://www.linkedin.com/in/sethjuarez/">Seth Juarez</a></p>

<h3 id="gh-500-esi-training">GH-500 ESI Training</h3>
<p>Triple-up on training, I did the <a href="https://learn.microsoft.com/en-us/credentials/certifications/resources/study-guides/gh-500">GH-500</a> workshop virtually with a Microsoft trainer today. 
Strange pacing in the material, some of it very basic, some of the stuff around CodeQL very deep and difficult to grasp in a few overloaded slides, but the trainer did his best to make it work.
And I walked away with a better idea of how MS virtual training works.</p>

<p>The labs were somewhat broken (e.g. “do not introduce the synthetic bug in main but make a branch and a PR” … “fix the bug you introduced in main”), but I found it interesting that they were automated with GitHub Actions, 
that analyzed your progress and updated the lab instructions based on this.</p>

<p>I previously did the MS Learn test exam for GH-500, and it seems way too easy compared to something like AZ-204. Not sure if this reflects the actual exam, but maybe I should give it a shot…</p>

<h3 id="paperless-ngx">Paperless-ngx</h3>
<p>I have long considered scanning my old physical documents to PDF. Paperless-ngx offers a web interface for ingestion/OCR/tagging of scanned documents (and other document types), and might be a useful part of that.</p>

<p><a href="https://docs.paperless-ngx.com/">Paperless-ngx</a></p>

<h3 id="the-doom-loop">The Doom loop</h3>
<p>Not as in “Knee-deep in the dead”, but as in what happens when you try to get frontier models to solve problems for which their training data was insufficient. E.g. non-tool assisted multiplication, 
representing unusual imagery like “a wine glass filled to the brink” or esoteric application code. Fortunately (?) there is a lot of boilerplate involved in development still…</p>

<p><a href="https://codemanship.wordpress.com/2025/10/25/the-ai-ready-software-developer-9-well-trodden-paths/">The Doom loop</a></p>

<h3 id="net-promoter-score">Net Promoter Score</h3>
<p><a href="https://en.wikipedia.org/wiki/Net_promoter_score">NPS</a> is getting more and more traction, but I cannot help but wonder if 
<a href="https://www.reddit.com/media?url=https%3A%2F%2Fpreview.redd.it%2F72e03vux9aj11.jpg%3Fwidth%3D640%26crop%3Dsmart%26auto%3Dwebp%26s%3Da7f2f183508eb68a32c57e4867b07607e2260f13">cultural bias</a> or 
<a href="https://x.com/GantLaborde/status/1981161493979857290">survey fatigue</a> is setting up organizations for disappointment and false conclusions…</p>

<h3 id="macrodata-refinement-keycaps-from-severance">Macrodata Refinement Keycaps (from Severance)</h3>
<p>Finished watching <a href="https://www.imdb.com/title/tt11280740/">Severance</a> today, and I found out you can get a set of matching 
<a href="https://spkeyboards.com/products/sa-macrodata-refinement">Macrodata Refinement-style keycaps</a>. 
I like the retro style, but they are expensive, and I use <a href="https://www.daskeyboard.com/daskeyboard-4-ultimate/">blank keycaps</a>…</p>

<h3 id="cline--grok-code-fast-1">Cline + Grok Code Fast 1</h3>
<p>I am <a href="https://www.youtube.com/watch?v=JeNS1ZNHQs8">vibe coding</a> an new version of my PhoneShare app, that I use to capture and LLM 
summarize links from social media (which mostly happens on LinkedIn these days after Twitter imploded).</p>

<p>The app started out from a oneshot with M365 Copilot + GPT-5 which sorta worked, but I had little luck when I tried to follow up 
with GitHub Copilot, <a href="https://github.com/PaodingSoftware/senatus-en/blob/main/docs/github-spec-kit-is-just-too-complex.md">Senatus</a> 
and the free GPT-1 / GPT-5-Mini models (my Premium model requests are provided by work, so I do not want to use that for hobby projects). 
It seemed to be stuck in “the Doom loop”. So I was looking for alternatives.</p>

<p>After a quick look at market leader Cursor, which I considered subscribing to, I found <a href="https://cline.bot/">Cline</a>, specifically the terminal coding agent. 
And it turns out that currently, usage with <a href="https://x.ai/news/grok-code-fast-1">grok-code-fast-1</a> is completely free 
(even though Elon went crazy, I do not mind spending his money on tokens)
The results were pretty good - it picked up on the Senatus plan, found the failing tests GPT-5 had created and, given appropriate number of “fix the tests” inputs,
it did.
Since the new architecture is a complete split of a static web app Front End with configureable backend, I might publish the repo when I am done. 
But I guess I should look at the actual code first :-)</p>

<h3 id="oras---use-container-registries-for-non-container-image-artifacts">ORAS - use container registries for non-container-image artifacts</h3>
<p>As part of my thinking on how to replace Octopus with GitHub flows, there is a need to store binaries with metadata (and perhaps other artifacts like SBOM) between 
the build and release stages (as per <a href="https://octopus.com/blog/build-your-binaries-once">Build Binaries Only Once</a>)</p>

<p>Some workloads naturally use container images for this, but since I use .NET and Azure App Service a lot, simple zip deployment is often all that is needed. 
I have seen examples of using GitHub Releases for this purpose, and while it works, I would really like to store binaries in a single place (like the Octopus feeds), 
with the ability to apply my own retention policies and access control, separate of source access.</p>

<p>That lead me to <a href="https://oras.land/">ORAS</a> which offers the ability to store arbitrary files as versioned container registry repositories. You install it with</p>

<p><code class="language-plaintext highlighter-rouge">winget install oras</code></p>

<p>then authenticate with</p>

<p><code class="language-plaintext highlighter-rouge">oras login &lt;container registry url&gt;</code></p>

<p>push the file(s) with something like</p>

<p><code class="language-plaintext highlighter-rouge">oras push &lt;container registry url&gt;/my-application:1.1.1001 --artifact-type application/zip --annotation "org.opencontainers.image.title=My Deployment artifacts" --annotation "..."  MyApplication.1.1.1001.zip</code></p>

<p>and can then download it where you need to deploy it with</p>

<p><code class="language-plaintext highlighter-rouge">oras pull &lt;container registry url&gt;/my-application:1.1.1001</code></p>

<p>I have only scratched the surface here, but it looks very promising.</p>

<h3 id="yet-another-password-generator">Yet another password generator</h3>
<p>I use a lot of passwords still, and while there are plenty of generators out there, I figured that making one myself could be a fun vibe coding exercise.
I had Copilot / Sonnet create the code, and M365 Copilot security review it, to arrive at the final solution. 
It is deliberately kept simple, ~450 lines of unminified Javascript, and all additional resources used (Pico CSS and some custom styles) are also kept unminified for easy review.
In addition, a CSP policy prevents loading anything off-origin just in case.</p>

<p>(yet another) <a href="https://www.michaelkc.dk/passwords/">Secure Password Generator</a></p>

<h3 id="unregistry---skip-the-container-registry">Unregistry - skip the container registry</h3>
<p>More to my taste than the ephemeral registry I wrote about previously is Unregistry, where you make the daemon on the remote end where you want your image to end up host a registry you can push the (missing layers of the) container image to.
I do not have a use case right now, but one to look into next time I am dabbling with containers at home (via David Fowler)</p>

<p><a href="https://github.com/psviderski/unregistry">Unregistry</a></p>

<h3 id="mcp-as-generic-non-agent-plugins">MCP as generic, non-agent plugins</h3>
<p>Another lens to view MCP as “USB-C for APIs”, a universal interface, allowing your non-agentic apps to piggyback on the huge amount of functionality being exposed as MCP servers. Some of the comments predicts impending collapse, when the MCP server
vendors sour on the value proposition for them in exposing their functionality and data this way.</p>

<p><a href="https://worksonmymachine.ai/p/mcp-an-accidentally-universal-plugin">MCP: An (Accidentally) Universal Plugin System</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[DHH on why he does not have 15 minutes for a “quick call” Not a fan of video content, but I know this sentiment exactly. A 15 minute meeting at 13:00 can ruin an entire day of deep work. It goes back to the difference between makers schedule and managers schedule - meetings cost makers more. Funny enough, I reflected on my experience today, and 2 x 5 minute interruptions in person in the office was significantly less disuptive than a chat message “do you have 15 minutes for a quick call”. Food for thought.]]></summary></entry><entry><title type="html">Interesting stuff I found - September 2025</title><link href="https://www.michaelkc.dk/2025/09/01/interesting-stuff-i-found.html" rel="alternate" type="text/html" title="Interesting stuff I found - September 2025" /><published>2025-09-01T05:49:00+00:00</published><updated>2025-09-01T05:49:00+00:00</updated><id>https://www.michaelkc.dk/2025/09/01/interesting-stuff-i-found</id><content type="html" xml:base="https://www.michaelkc.dk/2025/09/01/interesting-stuff-i-found.html"><![CDATA[<h3 id="refactoring-stubborn-legacy-codebases">Refactoring Stubborn, Legacy Codebases</h3>
<p>Stripe rediscovers that strong typing is great, unfortunately their code base is in Ruby so they have to write a type checker themselves :P</p>

<p>I do like the approach of gradual rollout though, and the architectural-constraints-as-code approach is something I also use on complex projects 
(usually <a href="https://github.com/BenMorris/NetArchTest/">NetArchTest</a> but I am not sure it is maintained anymore?)</p>

<p><a href="https://www.infoq.com/presentations/refactoring-legacy-codebases/">Refactoring Stubborn, Legacy Codebases</a></p>

<h3 id="mackies-pizza">Mackie’s Pizza</h3>
<p>If you live in Aarhus, you probably remember Mackie’s Pizza. It turns out one of the people who made pizza there now has a food truck</p>

<p><a href="https://mackiespizzatruck.dk/om-mackies/">Mackie’s Pizza</a></p>

<h3 id="tunit">TUnit</h3>
<p>Another contender in the NUnit/MSTest/XUnit space. Since I maintain code in both .NET Framework Classic and .NET 8+, a framework that can work in both is appealing.
Not sure how Playwright integration looks atm, but one to watch.</p>

<p><a href="https://andrewlock.net/converting-an-xunit-project-to-tunit/">Converting an xUnit test project to TUnit</a></p>

<h3 id="decision-tree-for-app-authentication">Decision tree for app authentication</h3>
<p>One of the greatest features of public cloud is the ability to simply not have any passwords to steal, i.e. managed identities. While I have previously been bitten 
by the fact that Azure Managed Identities do not have a SLA (and they started running slowly), I still promote and use them heavily.</p>

<p>Workload identity federation is also great if your platform supports it. Certs are a bit of a pain, but still better than rotating client secrets…</p>

<p><a href="https://x.com/merill/status/1718897891018965266?t=sx3hI-hS2SAT4K5KNsvbyA">Decision tree for app authentication</a></p>

<h3 id="autohidemousecursor">AutoHideMouseCursor</h3>
<p>I have purchased an OLED screen, and of course I now have burn-in anxiety. So I have switched everything to dark mode, and am looking for tools to remove static elements from the screen.
AutoHideMouseCursor is an older but no-nonsense tool that will hide the mouse cursor after N seconds</p>

<p><a href="https://www.softwareok.com/?seite=Microsoft/AutoHideMouseCursor">AutoHideMouseCursor</a></p>

<h3 id="translucenttb">TranslucentTB</h3>
<p>Also in the “burn-in prevention” category, this tool allows control of the task bar. Install with</p>

<p><code class="language-plaintext highlighter-rouge">winget install 9pf4kz2vn4w9</code></p>

<p><a href="https://github.com/TranslucentTB/TranslucentTB">TranslucentTB</a></p>

<h3 id="rooting-every-entra-tenant">Rooting every Entra tenant</h3>
<p>Insane vulnerability. I remember early Azure and the ACS, and have gone many rounds with SAML-based actor tokens - never without signatures though!
I guess it all still exists behind the scenes.</p>

<p>Really shows why security infra legacy and bridging is not just a maintenance burden - it is also a ripe opportunity for holes and unintended access paths to creep in.</p>

<p><a href="https://dirkjanm.io/obtaining-global-admin-in-every-entra-id-tenant-with-actor-tokens/">One Token to rule them all - obtaining Global Admin in every Entra ID tenant via Actor tokens</a></p>

<h3 id="azure-rg-janitor">Azure RG Janitor</h3>
<p>Nice little example of using Spectre.Console and the dotnet 10 features around scripting C#. I like TUIs almost as much as my favorite iconoclast <a href="https://www.youtube.com/watch?v=gcwzWzC7gUA">DHH</a> does.</p>

<p><a href="https://gist.github.com/davidfowl/5e049dcbdeaa485fbafdbc0b9feeaab7">cleanup-rg.cs</a></p>

<h3 id="aikido-safe-chain">Aikido Safe Chain</h3>
<p>NPM <a href="https://www.microsoft.com/en-us/securityengineering/sdl/s2c2f">Supply chain security</a> is a huge issue, this tool looks like an easy way to at least stop some of the malicious stuff being pushed again and again.</p>

<p><a href="https://www.aikido.dev/blog/introducing-safe-chain">Aikido Safe Chain</a></p>

<h3 id="cloudkitchens-study-on-genai-devex">CloudKitchens Study on GenAI DevEx</h3>
<p>A nice point-of-view on pratical usage of AI coding agents. I have not tried Cursor, but I find it interesting that they rate Copilot highly - need to look into that, as my use so far has not left me impressed.</p>

<p><a href="https://techblog.cloudkitchens.com/p/study-and-update-on-genai-devex">Study on GenAI DevEx</a></p>

<h3 id="from-cqrs-and-back---netflix-tudum">From CQRS and back - Netflix Tudum</h3>
<p>Reading the article, I also question if this is not a case of too many resources leading to extreme over-engineering. I would think cloud services like CosmosDB (of which I am sure there is an alternative in AWS where Netflix lives) 
could handle the scale with read-your-writes, and even if it cannot, I would imagine ample opportunity to leverage output caching before reaching for dedicated read models with Kafka in between.</p>

<p>I guess the takeaway is like Kelly writes: “Consistency at scale is easier than ever.”. Many architectural patterns exists to handle extreme scale, which in itself is a shrinking concept as cloud services, networks and even <a href="https://www.eveonline.com/news/view/a-history-of-eve-database-server-hardware">on-prem hardware</a> gets more and more powerful.</p>

<p><a href="https://www.infoq.com/news/2025/08/netflix-tudum-cqrs-raw-hollow/">Netflix revamps Tudum with RAW Hollow</a> (via the brilliant <a href="https://x.com/kellabyte/status/1957933408698400931">Kelly Sommers</a>)</p>

<h3 id="az-204">AZ-204</h3>
<p>Passed the exam this month. I found the <a href="https://www.whizlabs.com/">Whizlabs</a> material and practice tests quite nice for preparation, and reasonably priced, so a completely unbiased recommendation from here. Together with Microsoft Learn (which can be <a href="https://learn.microsoft.com/en-us/credentials/support/exam-duration-exam-experience#accessing-microsoft-learn-during-your-certification-exam">used during the exam</a> but <a href="https://certs.msfthub.wiki/guide/takingtheexams/#microsoft-learn-during-your-exam">beware</a>), that was what I needed to pass.</p>

<h3 id="liberating-structures--open-practice-library">Liberating structures &amp; Open Practice Library</h3>
<p>I do not have a use case right now, but these team practices seem like a nice catalog to get inspiration from, if you need to run team sessions or tighten up some internal processes.</p>

<p><a href="https://www.liberatingstructures.com/">Liberating structures</a> 
<a href="https://openpracticelibrary.com">Open Practice Library</a> 
via <a href="https://www.linkedin.com/posts/ghohpe_architectelevator-liberatingstructures-activity-7361507837325295616-ljJj">Gregor Hophe</a> - looking forward to attending his workshop next week!</p>

<h3 id="vibe-coding-a-me-ware-tool---wslcd">Vibe coding a “me-ware” tool - wslcd</h3>
<p>I was annoyed that I could not <code class="language-plaintext highlighter-rouge">cd</code> to Windows paths (like <code class="language-plaintext highlighter-rouge">C:\foo\bar</code>) copied from <a href="https://www.ghisler.com">Total Commander</a> to the inside of WSL (which mounts them under <code class="language-plaintext highlighter-rouge">/mnt/&lt;drive letter&gt;</code>). Copilot had little trouble conjuring up <a href="https://github.com/michaelkc/wslcd">wslcd</a>. I have not even looked at the code (beyond basic “is it deleting my drive” review), and it seems to be working well.</p>

<p>A fun exercise, and “my” first, actually useful Golang project. Perhaps long term using <a href="https://github.com/ajeetdsouza/zoxide">zoxide</a> or even Mark Russinovich’ new <a href="https://learn.microsoft.com/en-us/sysinternals/downloads/jcd">jcd</a> would be a better option, but for now this tool solves exactly what annoyed me.</p>

<h3 id="azure-front-door-gateway-timeout-issues">Azure Front Door Gateway Timeout issues</h3>
<p>We have been troubleshooting an incident with Azure Front Door, which seems to have <a href="https://learn.microsoft.com/en-ie/answers/questions/1331370/front-door-responds-with-origintimeout-after-4-sec">lingered for a while</a>. I hope Microsoft will eventually produce a more robust solution of the root causes than retries…</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Refactoring Stubborn, Legacy Codebases Stripe rediscovers that strong typing is great, unfortunately their code base is in Ruby so they have to write a type checker themselves :P]]></summary></entry></feed>