<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Jay Looney</title>
    <subtitle>Jay Looney — software engineer building reliable systems across data, infrastructure &amp; security. ~5 years in ICS&#x2F;OT (Verve, Dragos). Open to roles, consulting &amp; advisory.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://2b5e6508.www-jaylooney-dev.pages.dev/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://2b5e6508.www-jaylooney-dev.pages.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2024-11-24T00:00:00+00:00</updated>
    <id>https://2b5e6508.www-jaylooney-dev.pages.dev/atom.xml</id>
    <entry xml:lang="en">
        <title>Fixing WSL Ubuntu on Windows 11 Insider Preview</title>
        <published>2024-11-24T00:00:00+00:00</published>
        <updated>2024-11-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://2b5e6508.www-jaylooney-dev.pages.dev/fixing-wsl-ubuntu-on-windows-11/"/>
        <id>https://2b5e6508.www-jaylooney-dev.pages.dev/fixing-wsl-ubuntu-on-windows-11/</id>
        
        <content type="html" xml:base="https://2b5e6508.www-jaylooney-dev.pages.dev/fixing-wsl-ubuntu-on-windows-11/">&lt;p&gt;I&#x27;ve had an issue for a month or so where WSL hasn&#x27;t been working right, but I&#x27;ve been working around it by getting more comfortable with PowerShell, doing a substantial amount of stuff over SSH to a DigitalOcean Droplet, doing work on other (Linux) computers in the house, and as a last resort... doing development work in raw Windows. It&#x27;s a bit less painful that I thought it would be, especially for languages like Python, Go, and Rust.&lt;&#x2F;p&gt;
&lt;p&gt;What I&#x27;ve missed the most is the ability to run k8s with Rancher Desktop and the ability to try out new things like Podman. I&#x27;m finally getting around to fixing it, and what follows is basically a summary of what I learned, and then a stream of consciousness of what I did to fix it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tldr&quot;&gt;TLDR&lt;&#x2F;h2&gt;
&lt;p&gt;TLDR of things I learned while looking into this issue:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Hyper-V
&lt;ul&gt;
&lt;li&gt;Windows &#x2F; Hyper-V Firmware Signatures typically expire on 9&#x2F;15&lt;&#x2F;li&gt;
&lt;li&gt;You can workaround an outdated Hyper-V firmware signature by manually setting the datetime to something before it expired&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Windows Update
&lt;ul&gt;
&lt;li&gt;This tool can lie to you and get stuck in states where the main fix is to turn off all the relevant services, clear their caches, and turn the services back on.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Windows Error Codes
&lt;ul&gt;
&lt;li&gt;Some of these have substantial first-party documentation with detailed troubleshooting steps and explanations&lt;&#x2F;li&gt;
&lt;li&gt;Some have no first-party documentation, but sometimes a kind internet user with &quot;-MSFT&quot; at the end of their username on a Microsoft forum will say &quot;do these actions to fix it&quot; and not explain why.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Windows Performance Analyzer
&lt;ul&gt;
&lt;li&gt;This tool exists, and can be used to read ETL files.&lt;&#x2F;li&gt;
&lt;li&gt;It&#x27;s a bit tricky to read, but it can give you insight into which Windows source files are causing a problem, but you still can&#x27;t read the code to figure it out for yourself.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;microsoft&#x2F;WSL on Github
&lt;ul&gt;
&lt;li&gt;Provides a nice library of diagnostic&#x2F;log collection PowerShell scripts you can use to dig deeper into things.&lt;&#x2F;li&gt;
&lt;li&gt;Sometimes people have reported and had the same issue as you already fixed so you can just borrow the solution from there.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;initial-diagnostic-efforts&quot;&gt;Initial Diagnostic Efforts&lt;&#x2F;h2&gt;
&lt;p&gt;When attempting to run WSL Ubuntu I get the following message&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Invalid Signature.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Error code: Wsl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;Service&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;CreateInstance&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;CreateVm&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;HCS&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0x80090006&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;process exited with code&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 4294967295&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0xffffffff&lt;&#x2F;span&gt;&lt;span&gt;)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;You can now close this terminal with Ctrl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt;D&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;,&lt;&#x2F;span&gt;&lt;span&gt; or press Enter to restart.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Some Diagnostic Efforts:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(base) PS C:\Users\jayml&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; wsl &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;--&lt;&#x2F;span&gt;&lt;span&gt;help&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Output Omitted &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; Brevity&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(base) PS C:\Users\jayml&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; wsl &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;--&lt;&#x2F;span&gt;&lt;span&gt;status&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;Default&lt;&#x2F;span&gt;&lt;span&gt; Distribution: Ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;Default&lt;&#x2F;span&gt;&lt;span&gt; Version: &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(base) PS C:\Users\jayml&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; wsl &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;--&lt;&#x2F;span&gt;&lt;span&gt;version&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WSL version: &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2.3&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;26.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Kernel version: &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;5.15&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;167.4&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WSLg version: &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;65&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MSRDC version: &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1.2&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;5620&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Direct3D version: &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1.611&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;81528511&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DXCore version: &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;10.0&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;26100.1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;240331&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1435.&lt;&#x2F;span&gt;&lt;span&gt;ge&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;release&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Windows version: &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;10.0&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;26217.5000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;winver&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124163848.png&quot; alt=&quot;Image of the program that runs when you call the winver program&quot; title=&quot;winver GUI&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;collecting-peeping-wsl-logs&quot;&gt;Collecting &amp;amp; Peeping WSL Logs&lt;&#x2F;h2&gt;
&lt;p&gt;Not seeing anything super useful or how to get logs from the help I found a guide from Microsoft &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;windows&#x2F;wsl&#x2F;troubleshooting&quot;&gt;Troubleshooting Windows Subsystem for Linux&lt;&#x2F;a&gt; and two existing Github Issues on the microsoft&#x2F;WSL project. I did skim the issues to see what was going on, but I didn&#x27;t thoroughly read them at first because I want to see how far I can get in working it out myself. (with help from documentation :D)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;microsoft&#x2F;WSL&#x2F;issues&#x2F;12036&quot;&gt;Ubuntu stopped working with code 0x80090006&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;microsoft&#x2F;WSL&#x2F;issues&#x2F;10486&quot;&gt;WSL suddenly stopped working error code - Error: 0x80090006 Invalid Signature.&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Microsoft has a bot that explains how to get the logs by running a remote Powershell script as admin&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124164942.png&quot; alt=&quot;The microsoft-github-policy service bot leaves a comment on a github issue about how to collect WSL logs.&quot; title=&quot;microsoft-github-policy-service comment&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Copy &amp;amp; Paste-able text here for ease of use if you need it:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;Invoke-WebRequest&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;UseBasicParsing &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;quot;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;microsoft&#x2F;WSL&#x2F;master&#x2F;diagnostics&#x2F;collect-wsl-logs.ps1&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;OutFile collect&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;wsl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;logs.ps1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;Set-ExecutionPolicy&lt;&#x2F;span&gt;&lt;span&gt; Bypass &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;Scope &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;Process&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;Force&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.\collect&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;wsl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;logs.ps1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And the output from actually running it:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Log collection is running. Please reproduce the problem and once done press any key to save the logs.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Saving logs...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;100&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;  [&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Logs saved &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt;: C:\Users\jayml\WslLogs&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24_16&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;02.&lt;&#x2F;span&gt;&lt;span&gt;zip. Please attach that file to the GitHub issue.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That lead me to a nice collection of diagnostic scripts in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Microsoft&#x2F;WSL&#x2F;blob&#x2F;master&#x2F;diagnostics&#x2F;&quot;&gt;microsoft&#x2F;WSL&#x2F;blob&#x2F;master&#x2F;diagnostics&lt;&#x2F;a&gt; which could be useful in the future :)&lt;&#x2F;p&gt;
&lt;p&gt;I want to poke around in the log file and see if I can figure out what&#x27;s going on before I finish reading the GitHub issues.&lt;&#x2F;p&gt;
&lt;p&gt;After unzipping it I get the following directory:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(base) PS C:\Users\jayml\WslLogs&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24_16&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;02&lt;&#x2F;span&gt;&lt;span&gt;\WslLogs&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24_16&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;02&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Directory: C:\Users\jayml\WslLogs&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24_16&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;02&lt;&#x2F;span&gt;&lt;span&gt;\WslLogs&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24_16&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;02&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mode                 LastWriteTime         Length Name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;----                 -------------         ------ ----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM            &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;650&lt;&#x2F;span&gt;&lt;span&gt; acl.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM           &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1670&lt;&#x2F;span&gt;&lt;span&gt; appxpackage.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM           &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2562&lt;&#x2F;span&gt;&lt;span&gt; bcdedit.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM           &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1356&lt;&#x2F;span&gt;&lt;span&gt; HKCU.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM           &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1582&lt;&#x2F;span&gt;&lt;span&gt; HKLM.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM        &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;3670016&lt;&#x2F;span&gt;&lt;span&gt; logs.etl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM          &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;16930&lt;&#x2F;span&gt;&lt;span&gt; optional&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;components.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM           &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;3038&lt;&#x2F;span&gt;&lt;span&gt; P9NP.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM       &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;30353928&lt;&#x2F;span&gt;&lt;span&gt; windows&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;version.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM         &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;210532&lt;&#x2F;span&gt;&lt;span&gt; Winsock2.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM            &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;160&lt;&#x2F;span&gt;&lt;span&gt; wpr.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM           &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;9342&lt;&#x2F;span&gt;&lt;span&gt; wsl.wprp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM            &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;990&lt;&#x2F;span&gt;&lt;span&gt; wslservice.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM            &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;360&lt;&#x2F;span&gt;&lt;span&gt; wslsupport&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;impl.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-----&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;          11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024  4&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span&gt; PM            &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;574&lt;&#x2F;span&gt;&lt;span&gt; wslsupport&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;proxy.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Not wanting to look through all the files individually I tried &quot;grepping&quot; for a handful of different things until I found the following&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(base) PS C:\Users\jayml\WslLogs&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24_16&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;02&lt;&#x2F;span&gt;&lt;span&gt;\WslLogs&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;2024&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;11&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;24_16&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;52&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;02&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; Get-ChildItem&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;Path &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;quot;.&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; Select-String&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;Pattern &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;quot;CreateVm&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;logs.etl:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;381&lt;&#x2F;span&gt;&lt;span&gt;:�&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;@@&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;44Microsoft.Windows.Lxss.Manager␦sPOω�G�����v�&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;))CreateVmBeginwslVersionPart&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;A_PrivTags&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It&#x27;s clear there&#x27;s some non-printable&#x2F;binary sequences going on in that &lt;code&gt;.etl&lt;&#x2F;code&gt; file, and I only know ETL as Extract-Transform-Load, so I wasn&#x27;t really sure what this was or how to open it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;windows-performance-analyzer&quot;&gt;Windows Performance Analyzer?&lt;&#x2F;h2&gt;
&lt;p&gt;Once again Microsoft docs pull through with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;windows-hardware&#x2F;test&#x2F;wpt&#x2F;opening-and-analyzing-etl-files-in-wpa&quot;&gt;Opening and Analyzing ETL Files in WPA&lt;&#x2F;a&gt; a tool that I had never heard of until now.&lt;&#x2F;p&gt;
&lt;p&gt;After opening the ETL file in WPA (Windows Performance Analyzer) it looks like this&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124171100.png&quot; alt=&quot;WPA Software showing a mostly blank screen, and that the logs.etl file is loaded&quot; title=&quot;I guess this is how you use WPA&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So I need to click around a bit and get my bearings.&lt;&#x2F;p&gt;
&lt;p&gt;I had to double click on the &quot;System Activity&quot; section of &quot;Graph Explorer - logs.etl&quot; to get it to start showing more useful looking stuff.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124171258.png&quot; alt=&quot;Screenshot of WPA software no-longer showing a mostly blank screen, and instead showing a series of events, with what seems to be timestamps, and tables of relevant data. Event Providers, Task Names, Opcode Numbers, Process, etc.&quot; title=&quot;This actually has a trace view, and probably more details than I know how to read.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There is a search function that lets me search for CreateVm&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124171516.png&quot; alt=&quot;Screenshot showing WPA software with a search box containing the text &amp;quot;CreateVm&amp;quot; and it auto-highlighting the &amp;quot;CreateVmBegin&amp;quot; event in the top-left pane of WPA called &amp;quot;Series&amp;quot;, as well as highlighting a line in the bottom pane which is the table containing OpCodes, etc.&quot; title=&quot;It does feel like I&amp;#39;m getting somewhere with this...&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I can see some source files and line numbers where things might be going wrong, but I have no way of actually inspecting that code to see what&#x27;s happening.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124172111.png&quot; alt=&quot;Cropped-in screenshot of the table in WPA showing three rows, the top two contain a path to a source file &amp;quot;C:_w\s\src\windows\common\WslClient.cpp&amp;quot; and line numbers 2126 and 669 respectively and the third row is truncated, but would show the full name of the error msg &amp;quot;Wsl&#x2F;Service&#x2F;CreateInstance&#x2F;CreateVm&#x2F;HCS&#x2F;0x800900...&amp;quot;&quot; title=&quot;If this was Linux I would be able to inspect the code... :(&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There even seems to be an error while attempting to find the error message&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;winrt::hresult_error: The text associated with this error code could not be found.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I was able to poke through and find ever-so-slightly more specific details like the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;onecore\vm\dv\chipset\bios\biosdevice.cpp(411)\vmchipset.dll!00007FFE0C4D91FF: (caller: 00007FF66009D42E) ReturnHr(1) tid(18f8) 80090006 Invalid Signature.  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   Msg:[onecore\vm\common\guestloader\lib\vmfirmwareloader.cpp(79)\vmchipset.dll!00007FFE0C44CA46: (caller: 00007FFE0C47FA9F) Exception(1) tid(18f8) 80090006 Invalid Signature.  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   Msg:[signature state 2]  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124172537.png&quot; alt=&quot;Another screenshot of the table view showing more file names and line numbers with callers and exception Ids, all with the same human readable error message &amp;quot;Invalid Signature.&amp;quot;&quot; title=&quot;More code I unfortunately cannot inspect, with error codes that don&amp;#39;t return google results.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;revisiting-github-issues&quot;&gt;Revisiting GitHub Issues&lt;&#x2F;h2&gt;
&lt;p&gt;I just don&#x27;t seem to be able to trace it to an actual cause, so basically I&#x27;m stuck. Although I got a much deeper peek into how Windows is working under the hood than I ever remember being possible. At this point it&#x27;s back to review the issues filed on Github.&lt;&#x2F;p&gt;
&lt;p&gt;Someone (Microsoft Employee?) suggests that &lt;code&gt;cmfirmwareloader.cpp:79 &quot;signature state 2&quot;&lt;&#x2F;code&gt;  means that the Hyper-V Firmware is expired.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124172951.png&quot; alt=&quot;Comment from Github User OneBlue that says &amp;quot;Looking at the logs you share the root cause seems to be that the hyper-V firmware expired&amp;quot; and &amp;quot;The easiest way to resolve this would be to update Windows to get a more recent Hyper-V firmware image.&amp;quot;&quot; title=&quot;Thanks OneBlue, I&amp;#39;ll try that.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And someone else suggested that manually setting the time to a date prior to what shows up in the &lt;code&gt;winver&lt;&#x2F;code&gt; command will allow it to work.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020240801173416.png&quot; alt=&quot;A set of comments from github users gandyli and rty813. gandyli writes &amp;quot;@rty813 I tried manually gange the system time so that it&amp;#39;s before the expiration date showed in the command &amp;#39;winver&amp;#39;, and it worked.&amp;quot; and rty813 replies &amp;quot;:D it&amp;#39;s indeed a viable temporary solution&amp;quot;&quot; title=&quot;Time to check if this is true. Which if it is a signature validation issue, won&amp;#39;t be suprising&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Which... appears to be true when I tried it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020240801173516.png&quot; alt=&quot;Shows a carefully arranged screenshot where you can see WSL is running in a terminal with the output of a pwd command, and the winver GUI and the time settings app are overlayed on top of it so you can see the winver expiration is 9&#x2F;15&#x2F;2024 and the time settings are manually configured to August 1, 2024&quot; title=&quot;*hacker voice* I&amp;#39;m in.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Although I do have a Canary update available that I&#x27;m going to try and install and see if that works!&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Windows 11 Insider Preview 27729.1000 (rs_prerelease)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;After rebooting it seems the update didn&#x27;t take.... If I check my update history, there&#x27;s actually several failed attempts to install this update&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124183256.png&quot; alt=&quot;Screenshot of the Windows Update history showing several previous instances of of an error, the earliest being &amp;quot;Failed to install on 8&#x2F;1&#x2F;2024 - 0xc1900101&amp;quot;&quot; title=&quot;So... it would seem this has been going on for a while.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fixing-windows-update&quot;&gt;Fixing Windows Update&lt;&#x2F;h2&gt;
&lt;p&gt;Looking up the code &lt;code&gt;0xc1900101&lt;&#x2F;code&gt; I found the following two sources from Microsoft&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;support.microsoft.com&#x2F;en-us&#x2F;windows&#x2F;get-help-with-windows-upgrade-and-installation-errors-ea144c24-513d-a60e-40df-31ff78b3158a&quot;&gt;Get help with Windows upgrade and installation errors&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;troubleshoot&#x2F;windows-client&#x2F;setup-upgrade-and-drivers&#x2F;windows-10-upgrade-resolution-procedures#0xc1900101&quot;&gt;Windows 10 upgrade resolution procedures&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;One of them said to check these some logs in &lt;code&gt;C:\$WINDOWS.~BT\Sources\Rollback&lt;&#x2F;code&gt; for an extended error code, to get more specific with it, but the exact file wasn&#x27;t actually located in that directory so I couldn&#x27;t do that.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-checklist&quot;&gt;The Checklist&lt;&#x2F;h3&gt;
&lt;p&gt;Both seem to indicate that it&#x27;s likely an issue with an incompatible driver. And recommend the following steps.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Have 20GB Free for Updating a 64-bit OS&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Run Windows Update a few times&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Check third-party drivers and download any updates&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Unplug Extra Hardware&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Check Device Manager for Errors&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Remove third-party Security Software&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Repair Hard Drive Errors &lt;code&gt;chkdsk&#x2F;f C:&lt;&#x2F;code&gt; (from cmd.exe)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
Do a Clean Restart into Windows&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Restore and Repair System Files &lt;code&gt;dism &#x2F;Online &#x2F;Cleanup-Image &#x2F;Restorehealth&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;(I&#x27;m returning back to this checklist and checking off items as I do them, in all it took me around an hour to go through everything. Clean restart turned out to be unnecessary in this case.)&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve used DISM before, and I know it can be running for quite a while, so I&#x27;m going to kick it off in the background while I start doing the other checklist items.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;updating-drivers-checking-for-errors-in-device-manager&quot;&gt;Updating Drivers &amp;amp; Checking for Errors in Device Manager&lt;&#x2F;h3&gt;
&lt;p&gt;Since I can use device manager for Checking and Updating Drivers, as well as looking for errors (and it keeps me from bending over to unplug things for a few moments longer) that&#x27;s where I&#x27;ll start.&lt;&#x2F;p&gt;
&lt;p&gt;Weirdly when I tried to launch it both from the &quot;Start Menu&quot;, and Win+R Run as &lt;code&gt;devmgmt.msc&lt;&#x2F;code&gt; I get blocked by UAC claiming &quot;An Administrator has blocked you from running this app&quot; which, since I am the administrator is... &lt;em&gt;highly suspicious&lt;&#x2F;em&gt;, especially since I checked the settings by viewing the Properties of that file in System32.&lt;&#x2F;p&gt;
&lt;p&gt;TODO: Insert photo taken from phone because I can&#x27;t screenshot UAC prompts in any meaningful way.&lt;&#x2F;p&gt;
&lt;p&gt;I was able to launch it successfully from an Admin PowerShell and I don&#x27;t see any errors or updates right away, but one of the first things I notice is that I have VoiceMeeter installed and I haven&#x27;t used that in a few years so I figure I can go ahead and remove it. Both through the Uninstall Apps feature, and Driver-by-Driver if I have to. (I didn&#x27;t have to, using the uninstaller cleared up all the drivers.)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124185901.png&quot; alt=&quot;List of Audio inputs and outputs devices as shown by windows devmgmt.msc with a collection of devices near the bottom named with prefixes that start with &amp;quot;VoiceMeeter &amp;quot;&quot; title=&quot;This is such a niche tool that I&amp;#39;ve used only a handful of times.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Also noticed there are some Bluetooth drivers for devices that I still have but haven&#x27;t used with this system in a number of years, so I&#x27;m removing those as well. From things like Aftershokz or Beats headphones that I use in other contexts. They showed up under &quot;Bluetooth&quot; and &quot;Sound, video and game controllers&quot; and &quot;System devices&quot; with slightly different, but recognizably similar names.&lt;&#x2F;p&gt;
&lt;p&gt;After clearing all that out and rescanning, still no errors or updates, and DISM completed in the background. Now I&#x27;m checking for any 3rd-party security software before I start unplugging anything.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;uninstalling-third-party-security-software&quot;&gt;Uninstalling Third-Party Security Software&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;winget list&lt;&#x2F;code&gt; is a convenient way to list all the installed packages even if they aren&#x27;t managed by winget. Running that command and skimming the list I found the following that could be described as &quot;third-party security software&quot;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Bitwarden 2024.10.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Mullvad VPN 2023.3.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- OWASP Zed Attack Proxy 2.13.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- RustDesk 1.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- qFlipper 1.3.3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- KeePassXC 2.7.7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Malwarebytes version 4.6.17.334&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Tailscale 1.76.6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- OpenSC smartcard framework (64bit) 0.22.0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- sniffnet 1.2.2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- TightVNC 2.8.59.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Angry IP Scanner 3.8.2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Mudfish Cloud VPN v5.7.6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Npcap 1.78&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- OSSEC HIDS 3.7.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Portmaster 0.8.8.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- TeamViewer 15.51.6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Wireshark 4.2.5 x64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- YubiKey Manager 1.2.4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Tactical RMM Agent 1.8.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- STIG Viewer 3 (Machine) 3.3.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- BleachBit 4.4.2.2142 (current user) 4.4.2.2142&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- mitmproxy 11.0.0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I also noticed some other potentially relevant software (as-in &quot;could easily have outdated drivers&quot;)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- X56 H.O.T.A.S 8.0.213.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- ASIO4ALL 2.15&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Peace 1.6.4.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Equalizer APO 1.2.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- OnePlus USB Drivers 1.00&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Samsung Data Migration 4.0.0.18&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Qualcomm USB Drivers For Windows 1.00.57&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Some of these tools I&#x27;m actively using, some of these tools I haven&#x27;t used in a long time, and some of these tools I&#x27;m happy to forget about or install again if it turns out I need them. So I&#x27;ll start uninstalling and record what I&#x27;ve removed here.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- X56 H.O.T.A.S.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- ASIO4ALL, Peace, EqualizerAPO (All Audio Software)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- OnePlus &amp;amp; Qualcomm USB Drivers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Mudfish Cloud VPN (removed a TAP-Win32 Adapter V9 driver while uninstalling)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- RustDesk, TeamViewer, TightVNC, Tactical RMM Agent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- OSSEC HIDS, Sniffnet, OWASP ZAP, mitmproxy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Malwarebytes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;After removing those I ran another &lt;code&gt;winget list&lt;&#x2F;code&gt; to skim through as a check, and it looks good to me, I know there are still software installed with third party drivers e.g. Wireshark+Npcap, but I&#x27;m unwilling to uninstall them unless it&#x27;s actually as a last resort.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;repairing-hard-drive-errors&quot;&gt;Repairing Hard Drive Errors&lt;&#x2F;h3&gt;
&lt;p&gt;At this point I decided to drop into a &lt;code&gt;cmd.exe&lt;&#x2F;code&gt; from the Admin PowerShell to repair hard drive errors, since I figured that was something I could do before unplugging things as well... and I discovered that I can&#x27;t check the disk while another process is using it, which means this can only occur during reboot.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(base) PS C:\Users\jayml&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; cmd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Microsoft Windows [&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;Version&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 10.0&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;26217.5000&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(c) Microsoft Corporation. All rights reserved.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;C:\Users\jayml&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;chkdsk&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;f C:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;The type of the file system is NTFS.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Cannot lock current drive.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Chkdsk cannot run because the volume is &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; use by another&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;process&lt;&#x2F;span&gt;&lt;span&gt;.  Would you like to schedule this volume to be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;checked the next time the system restarts? (Y&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;N) Y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;This volume will be checked the next time the system restarts.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;finally-unplugging-devices&quot;&gt;Finally unplugging devices&lt;&#x2F;h3&gt;
&lt;p&gt;May as well unplug some devices now. When I checked, all that I have plugged in that&#x27;s accessible from outside the chassis was the following:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Keyboard&lt;&#x2F;li&gt;
&lt;li&gt;Mouse&lt;&#x2F;li&gt;
&lt;li&gt;Microphone&lt;&#x2F;li&gt;
&lt;li&gt;YubiKey&lt;&#x2F;li&gt;
&lt;li&gt;2x Display Port Monitors
I keep my webcam unplugged because I use it infrequently.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So I unplugged the Microphone and YubiKey, since I need the Mouse &amp;amp; Keyboard to actually do anything else.&lt;&#x2F;p&gt;
&lt;p&gt;Gonna &quot;Restart Now&quot; from Windows Update and see if the update or &lt;code&gt;chkdsk&lt;&#x2F;code&gt; takes.. And it turns out the chkdsk did start scanning the drive while rebooting. So far I’ve seen Stage 1 but I missed the name and can’t find the names of the stages online and “Fixing (C:) Stage 2” I’m not actually certain whether that implies any errors or if it always says that.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;still-doesn-t-work-but-yay-new-error-code&quot;&gt;Still doesn&#x27;t work, but yay new error code!&lt;&#x2F;h3&gt;
&lt;p&gt;This time it did finish booting rather than hanging at the splash screen. But, there was still an error when attempting to install the update, this time a new error code &lt;code&gt;0x80248007&lt;&#x2F;code&gt; AKA &quot;We made progress!&quot;&lt;&#x2F;p&gt;
&lt;p&gt;The same page listing details for the &lt;code&gt;0xc1900101&lt;&#x2F;code&gt; error code also lists some &lt;code&gt;0x8024&lt;&#x2F;code&gt; error codes but not the exact one I&#x27;m seeing. When searching I can&#x27;t find a completely clear first-party source that explains what this error code &lt;code&gt;0x80248007&lt;&#x2F;code&gt; means and exactly how to fix it. However I did find on the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;answers&#x2F;questions&#x2F;1370761&#x2F;how-to-fix-windows-update-error-code-0x80248007&quot;&gt;Microsoft Learn Forum&lt;&#x2F;a&gt; someone asked a question about it, and user AllenLiu-MSFT left an answer which I cannot figure out how to permalink directly to, but it contains the following advice.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Run the Windows Update Troubleshooter&lt;&#x2F;li&gt;
&lt;li&gt;Clear the Windows Update Cache&lt;&#x2F;li&gt;
&lt;li&gt;Reset the Windows Update Components&lt;&#x2F;li&gt;
&lt;li&gt;Perform a clean boot and then try to install the update&lt;&#x2F;li&gt;
&lt;li&gt;Manually download and install the update from the Microsoft Update Catalog&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;For running the Windows Update troubleshooter their recommended path is
&quot;Settings &amp;gt; Update &amp;amp; Security &amp;gt; Troubleshoot &amp;gt; Additional troubleshooters &amp;gt; Windows Update &amp;gt; Run the troubleshooter&quot;
...following that breadcrumb trail fails for me instantly as the path I take is
&quot;Settings &amp;gt; Windows Update &amp;gt; ???&quot;
There&#x27;s a &quot;Get Help&quot; button which takes me to a blank white screen...
But under Windows Update if I go to &quot;&amp;gt; Advanced Options &amp;gt; Recovery&quot; I have a &quot;Fix problems without resetting your PC&quot; option, which seems to be a troubleshooter of some kind. Although I can now see it has taken me to a totally different place called &quot;Settings &amp;gt; System &amp;gt; Recovery&quot; and this gives me an &quot;Other troubleshooters&quot; option that I can use to launch the &quot;Windows Update Troubleshooter&quot; which actually does appear to take me to the &quot;Get help&quot; screen I originally saw, except now it&#x27;s a search box, and it&#x27;s asking me to sign in.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124201655.png&quot; alt=&quot;Screenshot of the &amp;quot;Get Help&amp;quot; Window that shows a search for &amp;quot;Run the Windows Update Troubleshooter&amp;quot; in the background with a Microsoft &amp;quot;Sign in&amp;quot; popup blocking the useful bits of it.&quot; title=&quot;Hopefully this does something useful.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I am able to sign in and run it, but the actual tool itself failed to run.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124201759.png&quot; alt=&quot;Screenshot of the results of running the troubleshooter, it reads &amp;quot;The Windows Update diagnostic failed to run I&amp;#39;m sorry I was unable to run the Windows Update diagnostic. I might need to transfer you to an agent to help solve your problem. Would you like to talk to agent?&amp;quot; and presents two buttons &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;&quot; title=&quot;It does not do something useful.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t really want to hand off to an agent (even though I know I won&#x27;t change my mind about this I&#x27;m leaving the window open in the background just in case) so...&lt;&#x2F;p&gt;
&lt;h3 id=&quot;clearing-the-windows-update-cache-this-actually-fixed-things&quot;&gt;Clearing the Windows Update Cache (This actually fixed things!)&lt;&#x2F;h3&gt;
&lt;p&gt;Moving down the list to &quot;Clear the Windows Update Cache&quot;, which AllenLiu-MSFT recommends running the following from an Administrator Command Prompt.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;net&lt;&#x2F;span&gt;&lt;span&gt; stop wuauserv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;net&lt;&#x2F;span&gt;&lt;span&gt; stop cryptSvc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;net&lt;&#x2F;span&gt;&lt;span&gt; stop bits&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;net&lt;&#x2F;span&gt;&lt;span&gt; stop msiserver&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;ren&lt;&#x2F;span&gt;&lt;span&gt; C:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt;\W&lt;&#x2F;span&gt;&lt;span&gt;indows&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt;\S&lt;&#x2F;span&gt;&lt;span&gt;oftwareDistribution SoftwareDistribution.old&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;ren&lt;&#x2F;span&gt;&lt;span&gt; C:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt;\W&lt;&#x2F;span&gt;&lt;span&gt;indows&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt;\S&lt;&#x2F;span&gt;&lt;span&gt;ystem32&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt;\c&lt;&#x2F;span&gt;&lt;span&gt;atroot2 catroot2.old&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;net&lt;&#x2F;span&gt;&lt;span&gt; start wuauserv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;net&lt;&#x2F;span&gt;&lt;span&gt; start cryptSvc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;net&lt;&#x2F;span&gt;&lt;span&gt; start bits&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;net&lt;&#x2F;span&gt;&lt;span&gt; start msiserver&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This &quot;removes&quot; those two files from where the Windows Update service looks for them by renaming them, this is presumably so we could restore them if desired. It also stops and starts the following:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Windows Update service&lt;&#x2F;li&gt;
&lt;li&gt;Cryptographic Services service&lt;&#x2F;li&gt;
&lt;li&gt;Background Intelligent Transfer Service service&lt;&#x2F;li&gt;
&lt;li&gt;Windows Installer service&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;It might not mean anything but after stopping &lt;code&gt;wuauserv&lt;&#x2F;code&gt; and &lt;code&gt;cryptSvc&lt;&#x2F;code&gt; both &lt;code&gt;bits&lt;&#x2F;code&gt; and &lt;code&gt;msiserver&lt;&#x2F;code&gt; reported that they were not started. When I went to start everything again they seem to have started just fine. It&#x27;s possible those service processes die when they don&#x27;t have one or both of the Update or Cryptographic service running.&lt;&#x2F;p&gt;
&lt;p&gt;Since we ran those commands I&#x27;m going to hit the Retry button in Windows Update and see how it goes.&lt;&#x2F;p&gt;
&lt;p&gt;It returned a ton of new update packages that weren&#x27;t available before including a slightly newer preview build &lt;code&gt;Windows 11 Insider Preview 27754.1000 (rs_prerelease)&lt;&#x2F;code&gt; I have high hopes for the install succeeding this time, but I&#x27;m willing to keep moving through AllenLiu-MSFT&#x27;s list until it works :D&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124202719.png&quot; alt=&quot;Screenshot of the Windows Update screen that displays a series of updates for Windows itself, PowerShell, etc. In various stages of download progress.&quot; title=&quot;My confidence is waxing.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Most of those downloaded and installed successfully and now I get to restart again and see if the Windows 11 Update works this time..&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124210609.png&quot; alt=&quot;Slightly taller screenshot of the Windows Update screen that includes the &amp;quot;Restart now&amp;quot; button and shows that all the updates are either marked &amp;quot;Completed&amp;quot; or &amp;quot;Pending restart&amp;quot;&quot; title=&quot;I think it&amp;#39;s gonna work!&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;it-s-alive&quot;&gt;It&#x27;s Alive!&lt;&#x2F;h3&gt;
&lt;p&gt;After rebooting it does actually seem to be applying updates this time, that’s another new thing! And once fully rebooted wSinver shows that the Eval copy expires &lt;code&gt;9&#x2F;15&#x2F;2025&lt;&#x2F;code&gt; and WSL&#x2F;Ubuntu properly loads while automatically set to the current datetime.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124214137.png&quot; alt=&quot;Screenshot of WSL running in terminal with the winver GUI arranged on top of it so you can see the new expiration date 9&#x2F;15&#x2F;2025&quot; title=&quot;It worked! Now I can do Docker&#x2F;k8s&#x2F;Podman stuff again. And build a custom WSL&#x2F;NixOS image.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After all this there does appear to still be a DNS resolution issue in WSL&#x2F;Ubuntu, but I don&#x27;t actually need DNS resolution for what I wanted this for, so that will be for future me to figure out when I need it.&lt;&#x2F;p&gt;
&lt;p&gt;Also, happy to report that I&#x27;m now able to run &lt;code&gt;devmgmt.msc&lt;&#x2F;code&gt; through both the Start Menu and Win+R without an unwelcome visit from the UAC fairies.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s unrelated but a little bit curious that during this investigation my WiFi Router&#x2F;Switch reported that the internet was disconnected, but my connection appeared to be working fine.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;2b5e6508.www-jaylooney-dev.pages.dev&#x2F;fixing-wsl-ubuntu-on-windows-11&#x2F;Pasted%20image%2020241124194741.png&quot; alt=&quot;Screenshot showing a small bit of my routers webpage that reads &amp;quot;Internet status: Disconnected&amp;quot;, on the left there&amp;#39;s a classical &amp;quot;globe icon&amp;quot; representing the internet, and on the bottom there&amp;#39;s a red x representing the lack of connectivity.&quot; title=&quot;So I&amp;#39;m not connected but I&amp;#39;m also testing as 800Gb down...&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Find Your Element by Ken Robinson</title>
        <published>2023-10-09T00:00:00+00:00</published>
        <updated>2023-10-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://2b5e6508.www-jaylooney-dev.pages.dev/find-your-element/"/>
        <id>https://2b5e6508.www-jaylooney-dev.pages.dev/find-your-element/</id>
        
        <content type="html" xml:base="https://2b5e6508.www-jaylooney-dev.pages.dev/find-your-element/">&lt;ul&gt;
&lt;li&gt;Expose yourself to as many new opportunities as possible to discover your unrealized aptitudes.&lt;&#x2F;li&gt;
&lt;li&gt;Strive to have a growth mindset. It will allow you to develop and improve your abilities.&lt;&#x2F;li&gt;
&lt;li&gt;Find your passions, things you do without noticing the passage of time.&lt;&#x2F;li&gt;
&lt;li&gt;Force your own path, along with an understanding of your happiness, instead of blindly seeking wealth, immediate gratification, or other people&#x27;s definitions of happiness.&lt;&#x2F;li&gt;
&lt;li&gt;Don&#x27;t plan your life when you&#x27;re young because life is unpredictable.&lt;&#x2F;li&gt;
&lt;li&gt;Don&#x27;t assume you&#x27;re bad at something because you performed poorly in that subject in school. Standardized tests only measure one kind of human intelligence and schools only cater to a few learning styles.&lt;&#x2F;li&gt;
&lt;li&gt;Every person is special and different because of their genetic makeup (every human who ever existed in history has their own genes) and their environment (everyone has their unique mix of family, friends, and location.)&lt;&#x2F;li&gt;
&lt;li&gt;If you accept you can&#x27;t predict or control the future, you will discover many new opportunities.&lt;&#x2F;li&gt;
&lt;li&gt;Experiencing positive emotions from your passion reduces stress, chronic pain, and addictions. It also improves sleep and concentration.&lt;&#x2F;li&gt;
&lt;li&gt;Finding a group of people who share your passion can be very beneficial, or even necessary, for both you and other members of the group to realize your personal goals.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Google BeyondCorp Notes - Paper 1</title>
        <published>2023-10-09T00:00:00+00:00</published>
        <updated>2023-10-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://2b5e6508.www-jaylooney-dev.pages.dev/google-beyondcorp-notes/"/>
        <id>https://2b5e6508.www-jaylooney-dev.pages.dev/google-beyondcorp-notes/</id>
        
        <summary type="html">&lt;p&gt;This is the notes I took while reading the first BeyondCorp paper.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Purple Cow by Seth Godin</title>
        <published>2023-10-09T00:00:00+00:00</published>
        <updated>2023-10-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://2b5e6508.www-jaylooney-dev.pages.dev/purple-cow/"/>
        <id>https://2b5e6508.www-jaylooney-dev.pages.dev/purple-cow/</id>
        
        <content type="html" xml:base="https://2b5e6508.www-jaylooney-dev.pages.dev/purple-cow/">&lt;ul&gt;
&lt;li&gt;Take risks at being remarkable, and don&#x27;t worry about criticism.&lt;&#x2F;li&gt;
&lt;li&gt;Target the people who are both willing to try new things and very vocal at spreading the word to others.&lt;&#x2F;li&gt;
&lt;li&gt;Invent the product with marketing.&lt;&#x2F;li&gt;
&lt;li&gt;Target and measure your marketing effectively.&lt;&#x2F;li&gt;
&lt;li&gt;Don&#x27;t emulate the leader, because you&#x27;ll never learn the process of turning risks into success.&lt;&#x2F;li&gt;
&lt;li&gt;The traditional form of advertising is no longer effective because in today&#x27;s overwhelmingly advertised world capturing the consumer&#x27;s attention is almost impossible.&lt;&#x2F;li&gt;
&lt;li&gt;In today&#x27;s crowded marketplace, there is no room for &quot;ordinary.&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Start With Why by Simon Sinek</title>
        <published>2023-10-09T00:00:00+00:00</published>
        <updated>2023-10-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://2b5e6508.www-jaylooney-dev.pages.dev/start-with-why/"/>
        <id>https://2b5e6508.www-jaylooney-dev.pages.dev/start-with-why/</id>
        
        <content type="html" xml:base="https://2b5e6508.www-jaylooney-dev.pages.dev/start-with-why/">&lt;ul&gt;
&lt;li&gt;Thinking inside out (starting with why), not outside in (starting with what.) Communicate the &lt;em&gt;why&lt;&#x2F;em&gt; as it fosters a sense of belonging.&lt;&#x2F;li&gt;
&lt;li&gt;The goal is to do business with people who believe what you believe.&lt;&#x2F;li&gt;
&lt;li&gt;People don&#x27;t buy &lt;em&gt;what&lt;&#x2F;em&gt; you do, they buy &lt;em&gt;why&lt;&#x2F;em&gt; you do it. What you do simply proves what you believe.&lt;&#x2F;li&gt;
&lt;li&gt;Excited employees and customers who believe in your cause are the most powerful resources an organization can have.&lt;&#x2F;li&gt;
&lt;li&gt;Financial incentives or punishments do not motivate people on a deep and emotional level.&lt;&#x2F;li&gt;
&lt;li&gt;Customer manipulation may work in the short term, but it doesn&#x27;t foster trust and is ultimately counterproductive.&lt;&#x2F;li&gt;
&lt;li&gt;The Golden Circle consists of three concentric circles, The &lt;em&gt;what&lt;&#x2F;em&gt; is the outer layer, the &lt;em&gt;how&lt;&#x2F;em&gt; is the middle layer, and the &lt;em&gt;why&lt;&#x2F;em&gt; is the core.&lt;&#x2F;li&gt;
&lt;li&gt;Making a profit is a result of the &lt;em&gt;what&lt;&#x2F;em&gt; and the &lt;em&gt;how&lt;&#x2F;em&gt;, not the &lt;em&gt;why&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;The Law of Diffusion on innovation breaks down to 2.5% innovators, 13.5% early adapters, 34% early majority, 34% late majority and 16% laggards. If you want mass-market success, you have to achieve a 15-18% tipping point.&lt;&#x2F;li&gt;
&lt;li&gt;The early majority won&#x27;t accept something until early adopters have tried it and accepted, and you won&#x27;t get early adapters until they believe in what you have.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mechanics of an Assembly Program</title>
        <published>2022-02-20T00:00:00+00:00</published>
        <updated>2022-02-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://2b5e6508.www-jaylooney-dev.pages.dev/mechanics-of-an-assembly-program/"/>
        <id>https://2b5e6508.www-jaylooney-dev.pages.dev/mechanics-of-an-assembly-program/</id>
        
        <content type="html" xml:base="https://2b5e6508.www-jaylooney-dev.pages.dev/mechanics-of-an-assembly-program/">&lt;pre class=&quot;mermaid&quot;&gt;graph TD
	subgraph program
	stack --&amp;gt; heap
	heap --&amp;gt; bss
	bss --&amp;gt; data
	data --&amp;gt; text
	end&lt;&#x2F;pre&gt;
&lt;p&gt;What is the point of Assembly programs anyway? What do they actually do?
They turn into machine instructions for a particular CPU architecture.
The backend of almost any programming language, especially compiled programming langauges involves some sort of assembler&#x2F;assembly language.&lt;&#x2F;p&gt;
&lt;p&gt;Is Assembly a programming language?
Not really... There are a handful of Assemblers and thus a handful of &quot;Assembly Languages.&quot; Usually someone would refer to the assembler itself, such as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nasm.us&#x2F;doc&#x2F;nasmdocc.html&quot;&gt;NASM&lt;&#x2F;a&gt; or TASM when referencing an assembly langauge, but you could also consider something like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;llvm.org&#x2F;docs&#x2F;LangRef.html&quot;&gt;LLVM IR&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gcc.gnu.org&#x2F;onlinedocs&#x2F;gccint&#x2F;RTL.html&quot;&gt;GNU RTL IR&lt;&#x2F;a&gt; to be an assembly langauge.&lt;&#x2F;p&gt;
&lt;p&gt;The critical difference from an Assembly language to a typical programming language is that Assembly languages are very &quot;low level&quot; and provide very minimal abstractions over hardware. In order to directly write code in an assembly language, you need to know details about how the target CPU actually works. These days most CPUs involve concepts like &quot;Registers&quot; or &quot;Program Counter&quot;, and so assembly langauges offer those absractions to the user.&lt;&#x2F;p&gt;
&lt;p&gt;High Level &#x2F; Non-ASM Program
This is an example of a piece of code which has a high level of abstraction over the hardware, it deals with the concept of addition, and it deals with it in a way where you don&#x27;t actually have to think about what the CPU is doing to accomplish it.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;int&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;int&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt; a&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; int&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt; b&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;	return&lt;&#x2F;span&gt;&lt;span&gt; a &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; b;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;int&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;	return&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;123&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 456&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; &#x2F;&#x2F; Output will be: 579&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Low Level &#x2F; ASM Program&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;asm&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;section .data&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ; Data Segment&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;; Initialized Data is stored here, these are values you know ahead of time.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;section .bss&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ; Memory Reservations - &amp;quot;Block Started by Symbol&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;; Reservations in the BSS section are named locations in memory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;; of a specified size.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;; Data here is reserved but not &amp;quot;initialized&amp;quot;, meaning&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;; it doesn&amp;#39;t have values&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;section .text&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ; Code goes in the text section&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;global main &lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt;; Declare the Entrypoint for Linking&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;main:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;	; Store 123 in the EAX Register&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;	mov&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; eax&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;123&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ; 32-bit Extended Accumulator&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;	; Store 456 in the EBX Register&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;	mov&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; ebx&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;456&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ; 32-bit Extended Base&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;	; Add the EAX and EBX registers together&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;	add&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; eax&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt;ebx&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ; Value is stored in ECX, 32-bit Extended Counter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;	mov&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; ecx&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt;edx&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ; Move it to the 32-bit Data Register&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;	int&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0x80&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ; Processor Interrupt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;ret&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To be continued...&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Testing Python Code</title>
        <published>2019-05-28T00:00:00+00:00</published>
        <updated>2019-05-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://2b5e6508.www-jaylooney-dev.pages.dev/testing-python-code/"/>
        <id>https://2b5e6508.www-jaylooney-dev.pages.dev/testing-python-code/</id>
        
        <content type="html" xml:base="https://2b5e6508.www-jaylooney-dev.pages.dev/testing-python-code/">&lt;p&gt;The following is a selection of some Python testing libraries, commandline tools, etc. that I use, find cool, and have found real utility in when testing Python Code.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;unittest&quot;&gt;unittest&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;unittest.html&quot;&gt;unittest module&lt;&#x2F;a&gt;
ships with python since 2.7 and includes some basic
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;unittest.html#unittest-test-discovery&quot;&gt;test discovery&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;import&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; unittest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;class&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; TestStringMethods&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-inherited-class&quot;&gt;unittest&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-inherited-class&quot;&gt;TestCase&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; test_upper&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;self&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-language&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;assertEqual&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;#39;foo&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;upper&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(),&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt; &amp;#39;FOO&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; test_isupper&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;self&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-language&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;assertTrue&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;#39;FOO&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;isupper&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-language&quot;&gt;        self&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;assertFalse&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;#39;Foo&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;isupper&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;if&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-variable&quot;&gt; __name__&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt; &amp;#39;__main__&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    unittest.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;main&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;doctest&quot;&gt;doctest&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;doctest.html&quot;&gt;doctest module&lt;&#x2F;a&gt;
also comes with python, but works in an entirely different way.
It reads docstrings and parses them for content that looks like an
interactive python session. It will try to execute the line that looks
like someone typed it, and compare it to the line that looks like the
expected result.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; factorial&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;n&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-python z-string z-quoted z-docstring z-multi z-python&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;Return the factorial of n, an exact integer &amp;gt;= 0.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    &amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;[factorial(n) for n in range(6)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    [1, 1, 2, 6, 24, 120]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    &amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;factorial(30)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    265252859812191058636308480000000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    &amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;factorial(-1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    Traceback (most recent call last):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;        ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    ValueError: n must be &amp;gt;= 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    Factorials of floats are OK, but the float must be an exact integer:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    &amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;factorial(30.1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    Traceback (most recent call last):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;        ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    ValueError: n must be exact integer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    &amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;factorial(30.0)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    265252859812191058636308480000000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    It must also not be ridiculously large:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    &amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;factorial(1e100)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    Traceback (most recent call last):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;        ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-quoted z-docstring z-multi z-python&quot;&gt;    OverflowError: n too large&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-python&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    import&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; math&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-keyword z-operator z-logical&quot;&gt;    if not&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; n&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;        raise&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;quot;n must be &amp;gt;= 0&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; math.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;floor&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(n)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; n:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;        raise&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;quot;n must be exact integer&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; n&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;+&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; n:&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt;  # catch a value like 1e300&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;        raise&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; OverflowError&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt;&amp;quot;n too large&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    result&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    factor&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; factor&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; n:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        result&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; *=&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; factor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        factor&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; result&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;if&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-variable&quot;&gt; __name__&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string z-quoted&quot;&gt; &amp;quot;__main__&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    import&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; doctest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    doctest.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;testmod&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I think this is useful as expressive documentation of
some use cases of a module or function, but not as a primary unit-testing
strategy. Essentially this just confirms that the examples in your
documentation do work, and proof of that can actually be really strong if
used well.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;py-test&quot;&gt;py.test&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.pytest.org&#x2F;en&#x2F;latest&#x2F;&quot;&gt;Pytest&lt;&#x2F;a&gt; is the poster-child awesome
testing project that is just more convenient to use than unittest, and has many
plugins available to support any kind of scenario you could come up with. A
huge convenience comes in the form of how it actually renders the output in your console.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;# content of test_sample.py&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; inc&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;x&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; +&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; test_answer&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;():&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    assert&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt; inc&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;3&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;From this example you can see it&#x27;s very simple to get started with pytest, even more simple than unittest.
Additionally, you can create some very complicated and expressive testing infrastructure with pytest.
In fact literally every other testing module mentioned here can be integrated with pytest in a convenient way.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hypothesis&quot;&gt;hypothesis&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hypothesis.readthedocs.io&#x2F;en&#x2F;latest&#x2F;&quot;&gt;hypothesis&lt;&#x2F;a&gt; module is almost like a fuzzer-gone-testing-framework.
It helps to generate lots of different input meeting some defined constraints and essentially enables you to fuzz your
program with each test run. It only reports on failing inputs, and will almost certainly help you catch edge-cases you
wouldn&#x27;t otherwise catch.&lt;&#x2F;p&gt;
&lt;p&gt;The following code will generate input that is considered a valid str in python.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;from&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; hypothesis&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; import&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; given&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;from&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; hypothesis.strategies&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; import&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; text&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;@given&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;text&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; test_decode_inverts_encode&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt;    assert&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt; decode&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-generic z-python&quot;&gt;encode&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;(s))&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt; s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I have friends who will argue that testing at least from frameworks should be idempotent or a functional map of a state of some code.
Mostly I think that&#x27;s a cop-out and it seems silly. Hypothesis returns enough information for you to reproduce the errors that it created.
And it may create some errors that a human programmer isn&#x27;t going to define on their own and overall I think it&#x27;s a net benefit.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tox&quot;&gt;tox&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tox.readthedocs.io&#x2F;en&#x2F;latest&#x2F;&quot;&gt;Tox&lt;&#x2F;a&gt; is a sort of automation tool I think originally created for CI pipelines which allows you to
test your python code against multiple versions of python with ease. It uses multiple actual versions of python and also
virtual environments to isolate dependencies for each instance of a test run. This can help make sure your code is compatible
with Python 2 and Python 3. However, Python 2 is deprecated officially January 1, 2020 so ideally projects will no longer
need this kind of compatibility testing, although I&#x27;m sure there will be at least a handful of projects that remain
supported in that way for a while.&lt;&#x2F;p&gt;
&lt;p&gt;That being the state of things, not everyone needs this, but I like using it anyway.&lt;&#x2F;p&gt;
&lt;p&gt;To choose which versions of python you want to test against, you create a file called tox.ini in the same dir as your
&lt;code&gt;setup.py&lt;&#x2F;code&gt; file.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;[tox]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;envlist&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; py27,py36&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;[testenv]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;# install pytest in the virtualenv where commands will be executed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;deps&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; pytest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;commands&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;    # NOTE: you can run any command line tool here - not just tests&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    pytest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;coverage-py&quot;&gt;Coverage.py&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;coverage.readthedocs.io&#x2F;en&#x2F;latest&#x2F;&quot;&gt;Coverage.py&lt;&#x2F;a&gt; is a code coverage tool,
it measures code coverage with runtime analysis. It produces reports that look like this&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; coverage report&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;Name&lt;&#x2F;span&gt;&lt;span&gt;                      Stmts   Miss  Cover   Missing&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;-------------------------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;my_program.py&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;                20      4&lt;&#x2F;span&gt;&lt;span&gt;    80%   33-35,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 39&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;my_other_module.py&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;           56      6&lt;&#x2F;span&gt;&lt;span&gt;    89%   17-23&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;-------------------------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;TOTAL&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;                        76     10&lt;&#x2F;span&gt;&lt;span&gt;    87%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This can useful for making guarantees that your test suite is exercising enough of the code to give you a necessary level of confidence.
I know a lot of people chase code coverage by attempting to make a 1 to 1 mapping of tests and units, but I think
that just leads to low quality tests. One of the reasons I like &lt;code&gt;hypothesis&lt;&#x2F;code&gt;, and also the strategy, Behavior Driven Development
is that it makes more sense to test that a &quot;larger&quot; portion of your code is exhibiting the correct and consistent Behavior
than it is to ensure that each small piece of code has a test case related to it in some way.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;radon&quot;&gt;Radon&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;radon.readthedocs.io&#x2F;en&#x2F;latest&#x2F;&quot;&gt;Radon&lt;&#x2F;a&gt; is a Comprehensive metrics suite giving you Cyclomatic Complexity,
Maintainability Index, and other things about your code that can be statistically analyzed.&lt;&#x2F;p&gt;
&lt;p&gt;The accuracy and utility of the formulae used to produce many of these metrics may be questionable but I still find it valuable
as a general guide to helping me produce clearer and more concise code.&lt;&#x2F;p&gt;
&lt;p&gt;By default the command line tool gives letter grades to your modules and functions&#x2F;methods, which looks like this&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; radon cc sympy&#x2F;solvers&#x2F;solvers.py&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -a -nc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;sympy&#x2F;solvers&#x2F;solvers.py&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 346:0 solve - F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 1093:0 _solve - F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 1434:0 _solve_system - F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 2647:0 unrad - F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 110:0 checksol - F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 2238:0 _tsolve - F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 2482:0 _invert - F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 1862:0 solve_linear_system - E&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 1781:0 minsolve_linear_system - D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 1636:0 solve_linear - D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    F&lt;&#x2F;span&gt;&lt;span&gt; 2382:0 nsolve - C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt; blocks (classes, functions, methods) analyzed.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;Average&lt;&#x2F;span&gt;&lt;span&gt; complexity: F (61.0)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It can be coerced into giving you more information or qualitatively different kinds of information to better guide the
changes that would improve those scores. Usually a low score is due to something like a deeply nested loop or conditional.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
