<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Privacy on Linux Colorado</title><link>https://www.linuxcolorado.com/tags/privacy/</link><description>Recent content in Privacy on Linux Colorado</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 18 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.linuxcolorado.com/tags/privacy/index.xml" rel="self" type="application/rss+xml"/><item><title>Speaker-Diarized Call Transcription on a CPU — No Cloud, No GPU, No Hugging Face Token</title><link>https://www.linuxcolorado.com/post/2026-08-18-speaker-diarized-call-transcription/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-speaker-diarized-call-transcription/</guid><description>&lt;p&gt;I wanted a speaker-labeled, timestamped transcript of a two-person phone call — the kind an LLM can actually reason about (&amp;ldquo;what did the customer commit to?&amp;rdquo;, &amp;ldquo;when did the price come up?&amp;rdquo;) — without shipping the audio to a cloud speech-to-text service.&lt;/p&gt;
&lt;p&gt;One hard constraint shaped every decision: &lt;strong&gt;it all had to run on hardware already in the rack.&lt;/strong&gt; No new GPU, no API keys, no &amp;ldquo;just use the cloud for the hard part.&amp;rdquo; A 35-watt desktop chip that already earns its keep running other things.&lt;/p&gt;
&lt;p&gt;It worked. And, as usual, the interesting parts weren&amp;rsquo;t in the happy path — they were in &lt;em&gt;why the whisper I already had running couldn&amp;rsquo;t do the job&lt;/em&gt;, how to diarize speakers on a CPU with no Hugging Face token, and a genuinely great debugging story that ends with a &lt;strong&gt;114-byte file&lt;/strong&gt; quietly corrupting every timestamp in the system.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on the transcript examples below:&lt;/strong&gt; the real test call involved an actual third-party business and named individuals who never agreed to be quoted. Every name, company, and phone number in the excerpts here is &lt;strong&gt;synthetic&lt;/strong&gt; — invented for illustration. In many US states, Colorado included, recording calls and reusing what was said carries real legal weight. If you build one of these, redact before you publish. I&amp;rsquo;m practicing what I preach.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Letting Claude Read My Firewall: an OPNsense MCP Server, and What It Found on My Network</title><link>https://www.linuxcolorado.com/post/2026-08-18-opnsense-mcp-network-forensics/</link><pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-opnsense-mcp-network-forensics/</guid><description>&lt;p&gt;I gave Claude a read-only window into my firewall. Not &amp;ldquo;pasted some logs into a chat&amp;rdquo; — an actual &lt;a href="https://modelcontextprotocol.io"&gt;Model Context Protocol&lt;/a&gt; server wrapping the &lt;strong&gt;OPNsense&lt;/strong&gt; API, so Claude Code could call &lt;code&gt;leasesSearchLease&lt;/code&gt;, &lt;code&gt;dnsReverseLookup&lt;/code&gt;, and dozens of other firewall functions on demand. Then I pointed it at a simple question — &lt;em&gt;what is actually on my network, and where does it all phone home?&lt;/em&gt; — and got a genuinely uncomfortable answer.&lt;/p&gt;
&lt;p&gt;This post is two things: how to stand up an OPNsense MCP server in Docker &lt;strong&gt;safely&lt;/strong&gt;, and the little network-forensics session it enabled, which is the real reason to build one.&lt;/p&gt;</description></item></channel></rss>