<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jonwear.com - Notes</title>
    <link>https://jonwear.com/notes/</link>
    <description>Quick reference notes from jonwear.com</description>
    <language>en-us</language>
    <lastBuildDate>Mon, 06 Apr 2026 19:41:03 -0400</lastBuildDate>
    <item>
      <title>A Survey of Anglican History</title>
      <link>https://jonwear.com/notes/anglican-history-podcast/</link>
      <description>&lt;p&gt;I was confirmed in the Episcopal Church on January 31st, 2026.  I&#39;d been attending services for several years prior to that at &lt;a href=&#34;https://stpaulschestnuthill.org&#34;&gt;St. Paul&#39;s Chestnut Hill&lt;/a&gt;.  I read books (lots of books) and attended confirmation classes.  Anyway, during Lent this year (2026) I decided to give up espresso and music.  Not as easy as I thought it would be. I ended up listening to a lot of podcasts and drinking &lt;em&gt;a lot&lt;/em&gt; of coffee.  I looked for Episcopal podcasts, and while there are several, many of them no longer publish new episodes or do not cover the history of the church that I&#39;m interested in.&lt;/p&gt;&#xA;&lt;p&gt;I started reading Wikipedia articles and then realized I could make a podcast for this.  I could pull &lt;a href=&#34;https://en.wikipedia.org/wiki/Christianity_in_Roman_Britain&#34;&gt;Wikipedia articles&lt;/a&gt; (with proper attribution of course), clean them up so they would read better, clone my voice using &lt;a href=&#34;https://github.com/ai-joe-git/pocket-tts-server&#34;&gt;pocket-tts-server&lt;/a&gt;, make some background music via &lt;a href=&#34;https://suno.com&#34;&gt;suno.com&lt;/a&gt;, write some scripts that merge the text with the music at the right volumes using &lt;a href=&#34;https://ffmpeg.org&#34;&gt;ffmpeg&lt;/a&gt; scripts and...done (there are a few other steps, but nothing &lt;a href=&#34;https://claude.com/product/claude-code&#34;&gt;Claude Code&lt;/a&gt; can&#39;t handle).  It&#39;s hosted on a small &lt;a href=&#34;https://www.hetzner.com&#34;&gt;Hetzner&lt;/a&gt; server and I get caching from &lt;a href=&#34;https://www.cloudflare.com&#34;&gt;Cloudflare&lt;/a&gt; since the RSS feed is served via a Cloudflare tunnel.  I have a podcast that I want to listen to covering the topics I choose.  Takes about 3 minutes to make a new episode.&lt;/p&gt;&#xA;&lt;p&gt;I&#39;m working to make the voice cloning more natural.  There are odd cadences (too fast, too slow) now and then and sometimes the pronunciation is off, but it works for me.  If it works for anyone else, great.  But it&#39;s a podcast tailored to what I wanted to learn about &lt;em&gt;and&lt;/em&gt; I learned a lot of technical things getting it all set up.&lt;/p&gt;&#xA;&lt;p&gt;Podcast is here, &lt;a href=&#34;https://podcasts.apple.com/us/podcast/a-survey-of-anglican-history/id1890756025&#34;&gt;A Survey of Anglican History&lt;/a&gt;, but also on Spotify, Youtube, Amazon and other podcasts platforms.&lt;/p&gt;&#xA;</description>
      <pubDate>Mon, 06 Apr 2026 14:00:00 +0000</pubDate>
      <guid>https://jonwear.com/notes/anglican-history-podcast/</guid>
    </item>
    <item>
      <title>Workout Plan</title>
      <link>https://jonwear.com/notes/workout-plan/</link>
      <description>&lt;h2&gt;Weekly Training Plan with Fallback Levels&lt;/h2&gt;&#xA;&lt;p&gt;This plan is designed to be &lt;strong&gt;failure-tolerant&lt;/strong&gt;.&lt;br /&gt;&#xA;The goal is consistency, not perfection.&lt;/p&gt;&#xA;&lt;p&gt;If a full session does not happen, you &lt;strong&gt;drop down a level&lt;/strong&gt;, not to zero.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Weekly Structure (Anchor)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Monday / Wednesday / Friday:&lt;/strong&gt; Cardio&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Tuesday / Thursday:&lt;/strong&gt; Strength&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Weekend:&lt;/strong&gt; Off or optional easy walking&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;CARDIO DAYS (MWF)&lt;/h1&gt;&#xA;&lt;h2&gt;Level 1 — Full Cardio Stack (Ideal)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Zone 2 run:&lt;/strong&gt; 20 minutes (outdoors)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Row erg:&lt;/strong&gt; 5 min on / 2 min rest / 5 min on (moderate, controlled)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Jump rope:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 min on&lt;/li&gt;&#xA;&lt;li&gt;30 sec rest&lt;/li&gt;&#xA;&lt;li&gt;1 min on&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is the target session.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Level 2 — Anchor Only (Very Acceptable)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Zone 2 run:&lt;/strong&gt; 20 minutes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If this is all you do, the day &lt;strong&gt;counts&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Level 3 — Indoor / Low-Friction&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Row erg:&lt;/strong&gt; 12–15 minutes, continuous&lt;/li&gt;&#xA;&lt;li&gt;Easy to moderate pace&lt;/li&gt;&#xA;&lt;li&gt;No intervals&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Use this when weather, time, or motivation blocks running.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Level 4 — Bare Minimum (Non-Zero Day)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Row erg:&lt;/strong&gt; 6–8 minutes easy&lt;br /&gt;&#xA;&lt;strong&gt;OR&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Brisk walk:&lt;/strong&gt; 10 minutes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Purpose: maintain habit and circulation.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Cardio Rules&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Never “make up” missed cardio later&lt;/li&gt;&#xA;&lt;li&gt;Never skip because it “doesn’t count”&lt;/li&gt;&#xA;&lt;li&gt;Zone 2 stays truly easy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;STRENGTH DAYS (TR)&lt;/h1&gt;&#xA;&lt;h2&gt;Current Strength Pattern&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pyramid ladders&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Exercises:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pull-ups&lt;/li&gt;&#xA;&lt;li&gt;Weighted squats&lt;/li&gt;&#xA;&lt;li&gt;Push-ups&lt;/li&gt;&#xA;&lt;li&gt;Planks (seconds)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Current ladder:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;1–5–1&lt;/strong&gt; (up to 5, then back down)&lt;/li&gt;&#xA;&lt;li&gt;Progressing toward &lt;strong&gt;1–6–1&lt;/strong&gt; over time&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Level 1 — Full Strength Session (Ideal)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Complete the &lt;strong&gt;full planned ladder&lt;/strong&gt; for all movements&lt;br /&gt;&#xA;(e.g. 1–5–1, progressing to 1–6–1)&lt;/li&gt;&#xA;&lt;li&gt;Controlled pace&lt;/li&gt;&#xA;&lt;li&gt;Normal rest between sets&lt;/li&gt;&#xA;&lt;li&gt;Stop immediately if form degrades&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is the session that drives primary strength progress.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Level 2 — Anchor Strength Session (Highly Acceptable)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Complete a &lt;strong&gt;reduced ladder&lt;/strong&gt; for all movements&lt;br /&gt;&#xA;(e.g. &lt;strong&gt;1–3–1 or 1–4–1&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Slower pace and/or longer rest as needed&lt;/li&gt;&#xA;&lt;li&gt;Stop immediately after completing the descent&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This preserves consistency and movement quality while reducing total load.&#xA;It still counts as meaningful training.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Level 3 — Partial Strength&lt;/h2&gt;&#xA;&lt;p&gt;Choose &lt;strong&gt;one&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pull-up pyramid only&lt;/li&gt;&#xA;&lt;li&gt;Push-up pyramid only&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Focus on quality, not speed.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h2&gt;Level 4 — “Just Touch It”&lt;/h2&gt;&#xA;&lt;p&gt;Choose one:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2–3 submax sets of pull-ups&lt;/li&gt;&#xA;&lt;li&gt;2–3 submax sets of push-ups&lt;/li&gt;&#xA;&lt;li&gt;A single &lt;strong&gt;1–4–1&lt;/strong&gt; pyramid&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Purpose: joint signal and continuity.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h3&gt;Strength Rules&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do not add intensity to compensate for missed volume&lt;/li&gt;&#xA;&lt;li&gt;If elbows or shoulders feel off, stop early&lt;/li&gt;&#xA;&lt;li&gt;Missing volume is fine; missing weeks is not&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Simple Decision Rules&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Time &amp;lt; 20 min:&lt;/strong&gt; Level 3 or 4&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Energy &amp;lt; 5/10:&lt;/strong&gt; Level 2&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Energy ≥ 7/10:&lt;/strong&gt; Level 1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;No negotiation required.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Core Principle&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Something easy today beats something perfect tomorrow.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The plan succeeds as long as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MWF remain cardio days&lt;/li&gt;&#xA;&lt;li&gt;TR remain strength days&lt;/li&gt;&#xA;&lt;li&gt;You never let “all or nothing” win&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is a system built to last.&lt;/p&gt;&#xA;</description>
      <pubDate>Tue, 06 Jan 2026 13:00:00 +0000</pubDate>
      <guid>https://jonwear.com/notes/workout-plan/</guid>
    </item>
    <item>
      <title>Webmention Tutorial by Reilly Spitzfaden</title>
      <link>https://jonwear.com/notes/webmention-tutorial-reference/</link>
      <description>&lt;p&gt;Wow, posting to Mastodon with the little web experiements really pays off.  I made a post about using web mentions and then &lt;a href=&#34;https://artlung.com&#34;&gt;Joe&lt;/a&gt; gives me this &lt;a href=&#34;https://reillyspitzfaden.com/wiki/tutorials/webmention-tutorial/&#34;&gt;great resource&lt;/a&gt; by &lt;a href=&#34;https://route66.social/@reillypascal@hachyderm.io&#34;&gt;Reilly&lt;/a&gt;.  Thanks to both of you!&lt;/p&gt;&#xA;</description>
      <pubDate>Mon, 05 Jan 2026 15:00:00 +0000</pubDate>
      <guid>https://jonwear.com/notes/webmention-tutorial-reference/</guid>
    </item>
    <item>
      <title>Go Error Handling Pattern</title>
      <link>https://jonwear.com/notes/go-error-handling/</link>
      <description>&lt;p&gt;A common pattern for handling errors in Go with context wrapping:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;func doSomething() error {&#xA;    result, err := someOperation()&#xA;    if err != nil {&#xA;        return fmt.Errorf(&amp;quot;failed to do something: %w&amp;quot;, err)&#xA;    }&#xA;    return nil&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Using &lt;code&gt;%w&lt;/code&gt; allows error unwrapping with &lt;code&gt;errors.Is()&lt;/code&gt; and &lt;code&gt;errors.As()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;Multiple Error Checks&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;func processFile(path string) error {&#xA;    f, err := os.Open(path)&#xA;    if err != nil {&#xA;        return fmt.Errorf(&amp;quot;open file: %w&amp;quot;, err)&#xA;    }&#xA;    defer f.Close()&#xA;&#xA;    data, err := io.ReadAll(f)&#xA;    if err != nil {&#xA;        return fmt.Errorf(&amp;quot;read file: %w&amp;quot;, err)&#xA;    }&#xA;&#xA;    // use data...&#xA;    return nil&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</description>
      <pubDate>Mon, 05 Jan 2026 14:00:00 +0000</pubDate>
      <guid>https://jonwear.com/notes/go-error-handling/</guid>
    </item>
    <item>
      <title>Webmention Send Test</title>
      <link>https://jonwear.com/notes/send-test/</link>
      <description>&lt;p&gt;Testing that webmention sending works by linking to my own &lt;a href=&#34;https://jonwear.com/articles/human-text-and-robot-html/&#34;&gt;first post&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
      <pubDate>Mon, 05 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://jonwear.com/notes/send-test/</guid>
    </item>
    <item>
      <title>Webmention Test</title>
      <link>https://jonwear.com/notes/webmention-test/</link>
      <description>&lt;p&gt;This is a test note to verify webmention sending is working.&lt;/p&gt;&#xA;&lt;p&gt;Testing link to &lt;a href=&#34;https://webmention.rocks/receive/1&#34;&gt;webmention.rocks&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
      <pubDate>Mon, 05 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://jonwear.com/notes/webmention-test/</guid>
    </item>
  </channel>
</rss>