<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Notes</title><link>https://packetslave.github.io/experiments/blog/</link><description>Recent content on Notes</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 16 Aug 2026 20:32:46 +0000</lastBuildDate><atom:link href="https://packetslave.github.io/experiments/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Your Claude Desktop connectors are reusable MCP servers</title><link>https://packetslave.github.io/experiments/blog/posts/claude-desktop-connectors-mcp/</link><pubDate>Sun, 16 Aug 2026 20:32:46 +0000</pubDate><guid>https://packetslave.github.io/experiments/blog/posts/claude-desktop-connectors-mcp/</guid><description>&lt;p>It turns out Claude Desktop connectors are just plain MCP servers sitting on
disk, and Claude Code can run the same server from its own config. Install
once and both clients get the integration. I had Fantastical, my calendar
app, talking to Claude Code in about 10 minutes.&lt;/p>
&lt;h2 id="where-the-servers-live">Where the servers live&lt;/h2>
&lt;p>I already had the Fantastical connector installed in Claude Desktop, which
raised the obvious question: where does Desktop keep the server it actually
runs? The answer is that each installed connector lives here:&lt;/p></description></item><item><title/><link>https://packetslave.github.io/experiments/blog/thoughts/2026-08-14-lower-the-bar/</link><pubDate>Fri, 14 Aug 2026 19:29:00 +0000</pubDate><guid>https://packetslave.github.io/experiments/blog/thoughts/2026-08-14-lower-the-bar/</guid><description>&lt;p>Short thoughts now sit in the feed next to full posts and links. Every
version of this blog lowers the bar for posting a little more. That is
the point.&lt;/p></description></item><item><title>Openverse</title><link>https://packetslave.github.io/experiments/blog/links/2026-08-14-openverse/</link><pubDate>Fri, 14 Aug 2026 19:23:00 +0000</pubDate><guid>https://packetslave.github.io/experiments/blog/links/2026-08-14-openverse/</guid><description>&lt;p>Search engine for openly licensed media. It powers the hero image fetcher
on this blog: every search is filtered to CC0 and public domain.&lt;/p></description></item><item><title>UniFi Dream Machine SE recovery notes</title><link>https://packetslave.github.io/experiments/blog/posts/udm-se-recovery-notes/</link><pubDate>Thu, 13 Aug 2026 17:13:00 +0000</pubDate><guid>https://packetslave.github.io/experiments/blog/posts/udm-se-recovery-notes/</guid><description>&lt;p>The short version: if the recovery IP on a UDM-SE does not respond, remove
any SFP+ module and try again.&lt;/p>
&lt;p>To boot the device into recovery mode, hold the reset button with a paperclip
while you power it on. The device then binds the recovery IP, &lt;code>192.168.1.30&lt;/code>,
to the first interface it sees as &amp;ldquo;up&amp;rdquo;.&lt;/p>
&lt;p>Here is the trap. An installed SFP+ module will probably report &amp;ldquo;up&amp;rdquo; before
any of the RJ45 LAN ports do. The recovery IP binds to the SFP+ interface,
and you sit there wondering why you cannot ping &lt;code>192.168.1.30&lt;/code> from a LAN
port. Remove the SFP+ module, power the device back into recovery mode, and
the LAN ports work.&lt;/p></description></item><item><title>How symbolic and hard links work on Unix</title><link>https://packetslave.github.io/experiments/blog/posts/symbolic-and-hard-links/</link><pubDate>Thu, 13 Aug 2026 00:38:00 +0000</pubDate><guid>https://packetslave.github.io/experiments/blog/posts/symbolic-and-hard-links/</guid><description>&lt;p>Unix file systems support 2 kinds of link: hard links and symbolic links.
Both come from the same command, &lt;code>ln&lt;/code>, but they work in very different ways.
This post explains how each kind works. It then covers where Linux and the
BSDs, including macOS, disagree.&lt;/p>
&lt;h2 id="inodes-first">Inodes first&lt;/h2>
&lt;p>A file on disk is not really a name. It is an inode: a numbered record that
holds the file&amp;rsquo;s metadata and points to its data blocks. The inode stores the
owner, the permissions, the timestamps, and the size. It does not store the
file name.&lt;/p></description></item><item><title>Hello, world</title><link>https://packetslave.github.io/experiments/blog/posts/hello-world/</link><pubDate>Wed, 12 Aug 2026 23:00:00 +0000</pubDate><guid>https://packetslave.github.io/experiments/blog/posts/hello-world/</guid><description>&lt;p>This blog is built with &lt;a href="https://gohugo.io/">Hugo&lt;/a> and lives in the same
repository as my other experiments. There&amp;rsquo;s no theme dependency and no build
tooling to maintain — just markdown files in &lt;code>blog/content/posts/&lt;/code> and a
handful of templates.&lt;/p>
&lt;p>The fun part is the publishing workflow: I can post from my phone by opening
a Claude Code session and saying &amp;ldquo;new blog post about X.&amp;rdquo; Claude writes the
markdown, commits it to &lt;code>main&lt;/code>, and a GitHub Actions workflow builds the site
and deploys it here.&lt;/p></description></item></channel></rss>