<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://da5is.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://da5is.github.io/" rel="alternate" type="text/html" /><updated>2026-03-23T14:13:02+00:00</updated><id>https://da5is.github.io/feed.xml</id><title type="html">da5is.github.io</title><subtitle></subtitle><entry><title type="html">Microsoft Foundry Local - Disconnected</title><link href="https://da5is.github.io/ai/foundry/azure/2026/03/20/AzureFoundryLocal-Disconnected.html" rel="alternate" type="text/html" title="Microsoft Foundry Local - Disconnected" /><published>2026-03-20T00:00:00+00:00</published><updated>2026-03-20T00:00:00+00:00</updated><id>https://da5is.github.io/ai/foundry/azure/2026/03/20/AzureFoundryLocal-Disconnected</id><content type="html" xml:base="https://da5is.github.io/ai/foundry/azure/2026/03/20/AzureFoundryLocal-Disconnected.html"><![CDATA[<p>This post shows you how to deploy Microsoft Foundry Local onto a disconnected machine with no access to the internet.  This requires having a machine with access to the internet to stage the model and installation media and a way of getting those items to the disconnected machine.</p>

<h2 id="from-a-machine-with-access-to-the-internet">From a machine with access to the Internet:</h2>

<ol>
  <li>Install Foundry Local as normal.</li>
  <li>Download the required model via <code class="language-plaintext highlighter-rouge">foundry model download qwen2.5-0.5b-instruct-generic-cpu:4</code> substituting <code class="language-plaintext highlighter-rouge">qwen2.5-0.5b-instruct-generic-cpu:4</code> for the model of your choosing.
Navigate to the Foundry cache location - this is discovered via running <code class="language-plaintext highlighter-rouge">foundry cache location</code> and defaults to <code class="language-plaintext highlighter-rouge">c:\users\username\.foundry\cache\models</code> where <code class="language-plaintext highlighter-rouge">username</code> is the currently logged in user,
Copy <code class="language-plaintext highlighter-rouge">foundry.modelinfo.json</code> and the <code class="language-plaintext highlighter-rouge">vendor\model folder</code> to the transfer media (USB key or what you’re using to move it across the airgap).
At this point, you would have the json file and a folder named Microsoft in the transfer media with a model folder in the Microsoft folder (such as <code class="language-plaintext highlighter-rouge">\Microsoft\qwen2.5-0.5b-instruct-generic-cpu-4</code>).
Download the foundry local offline installer from <a href="https://github.com/microsoft/Foundry-Local/releases">Releases · microsoft/Foundry-Local</a> and copy that to the transfer media.</li>
</ol>

<h2 id="on-the-air-gapped-machine">On the air-gapped machine</h2>

<ol>
  <li>Install Foundry Local from the transfer media (for an x86 Windows machine, this would be within PowerShell by running <code class="language-plaintext highlighter-rouge">Add-AppPackage -path FoundryLocal-x64-0.8.119.msix</code>).</li>
  <li>Copy the <code class="language-plaintext highlighter-rouge">foundry.modelinfo.json</code> file and the <code class="language-plaintext highlighter-rouge">vendor\model</code> folder into a new folder on the disconnected machine such as <code class="language-plaintext highlighter-rouge">c:\users\username\Models</code>.</li>
  <li>Change the cache location via <code class="language-plaintext highlighter-rouge">foundry cache cd c:\users\username\Models</code>.</li>
  <li>You can then run the model normally from the cache using <code class="language-plaintext highlighter-rouge">foundry model run qwen2.5-0.5b-instruct-generic-cpu:4</code>.</li>
</ol>]]></content><author><name></name></author><category term="ai" /><category term="foundry" /><category term="azure" /><summary type="html"><![CDATA[This post shows you how to deploy Microsoft Foundry Local onto a disconnected machine with no access to the internet. This requires having a machine with access to the internet to stage the model and installation media and a way of getting those items to the disconnected machine.]]></summary></entry><entry><title type="html">Compiling Wave Terminal for Windows ARM</title><link href="https://da5is.github.io/ai/apps/2026/03/20/Compiling-Wave-Terminal-For-Windows-ARM.html" rel="alternate" type="text/html" title="Compiling Wave Terminal for Windows ARM" /><published>2026-03-20T00:00:00+00:00</published><updated>2026-03-20T00:00:00+00:00</updated><id>https://da5is.github.io/ai/apps/2026/03/20/Compiling-Wave-Terminal-For-Windows-ARM</id><content type="html" xml:base="https://da5is.github.io/ai/apps/2026/03/20/Compiling-Wave-Terminal-For-Windows-ARM.html"><![CDATA[<p>If you’re running Windows on ARM and noticed that <a href="https://www.waveterm.dev/">Wave Terminal</a> doesn’t provide a native binary, it’s a fairly straightforward compilation process if you want to build it yourself.</p>

<ol>
  <li>Install Visual Studio Community Edition via <code class="language-plaintext highlighter-rouge">winget install XPDCFJDKLZJLP8</code> and select ‘Desktop Development with C++’.</li>
  <li>Install the required build dependencies if you don’t have them already.
    <ul>
      <li><code class="language-plaintext highlighter-rouge">winget install task.task</code> - winget detects and installs the ARM version of task; Scoop does not as of 2026-03-23.</li>
      <li><code class="language-plaintext highlighter-rouge">scoop install go</code> - scoop remains my prefered method of installing software on Windows</li>
      <li><code class="language-plaintext highlighter-rouge">scoop install zig</code></li>
    </ul>
  </li>
  <li>Add an <code class="language-plaintext highlighter-rouge">overrides</code> entry to <code class="language-plaintext highlighter-rouge">package.json</code> to force <code class="language-plaintext highlighter-rouge">node-gyp@^12.2.0</code> (otherwise you get an error due to node-gyp@11.5.0 only recognizing Visual Studio 2022 and prior).</li>
</ol>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">"overrides"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"node-gyp"</span><span class="p">:</span><span class="w"> </span><span class="s2">"^12.2.0"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>At this point, the ‘BUILD.md’ instructions from the repository should complete successfully - so, following those, you just need to run <code class="language-plaintext highlighter-rouge">task init</code> and <code class="language-plaintext highlighter-rouge">task package</code>.</p>]]></content><author><name></name></author><category term="ai" /><category term="apps" /><summary type="html"><![CDATA[If you’re running Windows on ARM and noticed that Wave Terminal doesn’t provide a native binary, it’s a fairly straightforward compilation process if you want to build it yourself.]]></summary></entry><entry><title type="html">Using Obsidian Copilot with a Local LLM</title><link href="https://da5is.github.io/ai/2025/04/27/UsingObsidianCopilotWithLocalLLM.html" rel="alternate" type="text/html" title="Using Obsidian Copilot with a Local LLM" /><published>2025-04-27T00:00:00+00:00</published><updated>2025-04-27T00:00:00+00:00</updated><id>https://da5is.github.io/ai/2025/04/27/UsingObsidianCopilotWithLocalLLM</id><content type="html" xml:base="https://da5is.github.io/ai/2025/04/27/UsingObsidianCopilotWithLocalLLM.html"><![CDATA[<p>This is a quick document to walk through configuring Obsidian Copilot with LM Studio for local models and embeddings if you want to run the AI pieces fully locally.</p>

<ol>
  <li>Install <a href="https://lmstudio.ai/">LM Studio</a> from their website or via winget (<code class="language-plaintext highlighter-rouge">winget install ElementLabs.LMStudio</code>).</li>
  <li>Install the community plugin <a href="https://github.com/logancyang/obsidian-copilot">Obsidian Copilot</a>.</li>
  <li>Launch LM Studio and click on the magnifying glass icon in the left hand blade called “Discover.”</li>
  <li>Search for a model that will fit in your computer’s memory capacity - for the remainder of this walk through, I will use the model <a href="https://model.lmstudio.ai/download/lmstudio-community/gemma-3-4B-it-qat-GGUF">gemma-3-4b-it-qat</a>.</li>
  <li>Click on the console tab on the left hand blade called “Developer.”  Click the button in the top middle of the page that says “Select a model to load (Ctrl +L)”.  Load both the model you deployed in step 4 and the default embedding, text-embedding-nomic-embed-text-v1.5.</li>
  <li>Click on the button in the top left that says “Settings” and enable CORS.  Click the slider next to “Status: Stopped” to start the local model server.  After this, it should say “Status: Running.”</li>
  <li>In Obsidian, navigate to the Obsidian Copilot settings.  Click on the tab marked “Model.”  Uncheck all current models (unless you intend to use them) - this will eliminate some errors that would otherwise be displayed.</li>
  <li>Under “Chat Models”, click the button marked “+ Add Custom Model.”
    <ol>
      <li>Give the model the name it’s listed as in LM Studio - in this case, it’s “gemma-3-4b-it-qat”.</li>
      <li>For provider, select “LM Studio.”</li>
      <li>Leave “Base URL” blank.</li>
      <li>For an API key, put in a few characters (it is unimportant in this case).</li>
      <li>Enable CORS, click “Verify” to validate that the configuration is correct, then click “Add Model.”</li>
    </ol>
  </li>
  <li>Scroll down under “Embedding Models”, click on the button marked “+ Add Custom Model.”
    <ol>
      <li>Give the model the name it’s listed as in LM Studio - in the default case, it’s “text-embedding-nomic-embed-text-v1.5”.</li>
      <li>For provider, select “LM Studio.”</li>
      <li>Leave “Base URL” blank.</li>
      <li>For an API key, put in a few characters (it is unimportant in this case).</li>
      <li>Enable CORS, click “Verify” to validate that the configuration is correct, then click “Add Model.”</li>
    </ol>
  </li>
  <li>Return to the “Basic” tab in the settings panel and select the models you created for “Default Chat Model” and “Embedding Model.”</li>
</ol>]]></content><author><name></name></author><category term="ai" /><summary type="html"><![CDATA[This is a quick document to walk through configuring Obsidian Copilot with LM Studio for local models and embeddings if you want to run the AI pieces fully locally.]]></summary></entry><entry><title type="html">It’s Always DNS - Resolve-DNSName</title><link href="https://da5is.github.io/dns/2025/03/06/ItsAlwaysDNS-Resolve-DNSName-copy-2.html" rel="alternate" type="text/html" title="It’s Always DNS - Resolve-DNSName" /><published>2025-03-06T00:00:00+00:00</published><updated>2025-03-06T00:00:00+00:00</updated><id>https://da5is.github.io/dns/2025/03/06/ItsAlwaysDNS-Resolve-DNSName%20copy%202</id><content type="html" xml:base="https://da5is.github.io/dns/2025/03/06/ItsAlwaysDNS-Resolve-DNSName-copy-2.html"><![CDATA[<blockquote>
  <p>“If you’ve done any DNS work in the past you may have leveraged the tool nslookup. While this tool does perform DNS queries, it is not representative of how Windows resolves DNS queries.<br /><br />NSlookup is a self-contained executable that does not leverage the Windows DNS client resolver. Its behavior doesn’t match the OS.<br /><br />If you would like to perform DNS queries from the command line, I recommend using the PowerShell cmdlet, Resolve-DnsName which does use the native Windows DNS Client resolver.” - <a href="https://techcommunity.microsoft.com/blog/coreinfrastructureandsecurityblog/introduction-to-network-trace-analysis-4-dns-its-always-dns/4005803">Introduction to Network Trace Analysis 4: DNS (it’s always DNS)</a></p>
</blockquote>

<p>This was news to me - oddly enough, it came in handy less than a few days after that page was posted. I was troubleshooting an <a href="https://learn.microsoft.com/en-us/azure/vpn-gateway/azure-vpn-client-optional-configurations">Azure VPN P2S DNS issue where NRPT was being used for resolution</a>. Resolve-DNSName resolved properly, nslookup didn’t.</p>]]></content><author><name></name></author><category term="dns" /><summary type="html"><![CDATA[Once again, DNS behavior surprised me on Windows. If you're using nslookup instead of resolve-dnsname, you may not be getting the actual DNS response that's being used from your application...]]></summary></entry></feed>