<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://www.johnborwick.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.johnborwick.com/" rel="alternate" type="text/html" /><updated>2026-02-14T12:26:04-05:00</updated><id>https://www.johnborwick.com/feed.xml</id><title type="html">John’s web site</title><subtitle>Neat stuff John likes.</subtitle><author><name>John Borwick</name></author><entry><title type="html">Leveling up my org-roam system</title><link href="https://www.johnborwick.com/2026/02/14/org-roam-level-up.html" rel="alternate" type="text/html" title="Leveling up my org-roam system" /><published>2026-02-14T00:00:00-05:00</published><updated>2026-02-14T00:00:00-05:00</updated><id>https://www.johnborwick.com/2026/02/14/org-roam-level-up</id><content type="html" xml:base="https://www.johnborwick.com/2026/02/14/org-roam-level-up.html"><![CDATA[<p>
I've used <a href="https://www.orgroam.com">org-roam</a> for a while now for my personal Zettelkasten. This started with <a href="/2022/07/31/leaving-evernote.html">me leaving Evernote</a> for Notion. Notion was a good tool, but it's still not a tool that I control/manage. If Notion goes out of business or changes its model in 10 years, I don't want to have to redo my system again.
</p>

<p>
So, I've been using org-roam.
</p>
<div id="outline-container-org9695265" class="outline-2">
<h2 id="org9695265">emacs setup &amp; functionality</h2>
<div class="outline-text-2" id="text-org9695265">
<p>
My <code>settings.org</code> setup is like this:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">; needed for =org-roam-deadgrep=
(use-package deadgrep)

; These are outside use-package so they can be overridden
(setopt org-roam-directory (expand-file-name "FIXME-PATH-TO-ORG-ROAM"))
(setopt org-roam-capture-templates
          '(("d" "default" plain "%?" :target
	    (file+head "%&lt;%Y%m%d%H%M%S&gt;-${slug}.org" "#+title: ${title}

- tags :: ")
	    :unnarrowed t)))

 (use-package org-roam
    :after org
    :commands org-roam-db-query
    :custom
    (org-roam-mode-sections
	  (list #'org-roam-backlinks-section
		#'org-roam-reflinks-section
		;; #'org-roam-unlinked-references-section
		))

    (org-roam-node-display-template
        (concat "${title:*} "
                (propertize "${tags:10}" 'face 'org-tag)))
    :config
    (org-roam-setup)
    (defun org-roam-node-insert-immediate (arg &amp;rest args)
      (interactive "P")
      (let ((args (cons arg args))
            (org-roam-capture-templates (list (append (car org-roam-capture-templates)
                '(:immediate-finish t)))))
    (apply #'org-roam-node-insert args)))

    (defun org-roam-deadgrep (arg)
      (interactive "MSearch term: ")
      (deadgrep arg org-roam-directory))

    ; see https://gist.github.com/borwickatuw/098b0d3a3b599f3f00c069309e8fd462
    (require 'org-roam-copy)
    ; https://github.com/org-roam/org-roam/issues/991#issuecomment-882010053
    (add-to-list 'magit-section-initial-visibility-alist (cons 'org-roam-node-section 'hide))

    :bind (("C-c n f" . org-roam-node-find)
           ("C-c n r" . org-roam-node-random)		    
           ("C-c n c" . org-roam-capture)
           ("C-c n g" . org-roam-graph)
	   ("C-c n s" . org-roam-deadgrep)
	   ("C-c n y" . org-roam-copy-node)
           (:map org-mode-map
                 (

		  ("C-c n i" . org-roam-node-insert)
		  ("C-c n I" . org-roam-node-insert-immediate)
                  ("C-c n o" . org-id-get-create)
                  ("C-c n t" . org-roam-tag-add)
                  ("C-c n a" . org-roam-alias-add)
		  ("C-c n l" . org-roam-buffer-toggle)	   
		  ))))
</pre>
</div>

<p>
In practice, here's what all that does:
</p>

<ul class="org-ul">
<li><code>C-c n</code> is the <code>org-roam</code> prefix</li>
<li><code>C-c n f</code> finds a node</li>
<li>When in org-roam, <code>C-c n i</code> inserts a reference</li>
<li>Searching will show the tags for the node</li>
<li><i>John B. addition:</i> <code>C-c n s</code> does a "deadgrep" search through org-roam content</li>
<li><i>John B. addition</i>: <code>C-c n y</code> will call <code>org-roam-copy</code>. This will find the node and then go to the <code>:COPY:</code> property and copy its content. For example, if you have a node <code>My work phone number</code> and you put your number in the <code>:COPY:</code> property then when you use <code>C-c n y</code> and find the node, your clipboard will get the phone number. Basically this is a quick copy&amp;paste for non-sensitive content</li>
</ul>
</div>
</div>
<div id="outline-container-orgff1b66b" class="outline-2">
<h2 id="orgff1b66b">Adding more data into org-roam</h2>
<div class="outline-text-2" id="text-orgff1b66b">
<p>
Recently, I've been adding more data into org-roam:
</p>
</div>
<div id="outline-container-org75953e9" class="outline-3">
<h3 id="org75953e9">contacts</h3>
<div class="outline-text-3" id="text-org75953e9">
<p>
This one is actually a few years old. I use <code>vdirsyncer</code> to sync my Google contacts to my local computer. I then have a one-way sync from vdirsyncer into org-roam. This lets me pull contact details into org-roam. I can then annotate the entries, e.g. to make a note when I last called a vendor.
</p>
</div>
</div>
<div id="outline-container-orgdb11567" class="outline-3">
<h3 id="orgdb11567">emails</h3>
<div class="outline-text-3" id="text-orgdb11567">
<p>
This one is way more experimental; I had Claude Code create some scripts that in turn called <code>ollama</code> to parse some of my old emails and identify other contacts I needed to add.
</p>
</div>
</div>
<div id="outline-container-org7425dcc" class="outline-3">
<h3 id="org7425dcc">mnemosyne</h3>
<div class="outline-text-3" id="text-org7425dcc">
<p>
I have a <a href="https://www.johnborwick.com/wiki/life%20archive.html">life archive</a> where I keep copies of stuff. I created a job that will generate an org-roam file <code>mnemosyne</code> for this archive, including the top- and second-level directory structures. Each top-level directory gets its own org-roam ID/node.
</p>
</div>
</div>
<div id="outline-container-org95efc80" class="outline-3">
<h3 id="org95efc80">notion</h3>
<div class="outline-text-3" id="text-org95efc80">
<p>
This is a one-time import from notion. It is pretty messy because I wanted to select exactly what content to migrate. For example, I wanted <i>some</i> of the Notion databases to come across but as a single org-roam page.
</p>
</div>
</div>
<div id="outline-container-orgede7a06" class="outline-3">
<h3 id="orgede7a06">pinboard</h3>
<div class="outline-text-3" id="text-orgede7a06">
<p>
This is an ongoing sync job that creates a "pinboard" org-roam entry. That entry has all my pinboard bookmarks in it along with their tags. This content is marked read-only in org-roam. Each item is also an org-roam node. This way I can reference content without needing to pull a whole copy of the content into org-roam. This also reinforces that pinboard is the "correct" location for external bookmarks.
</p>

<p>
p.s. this is also insurance for if pinboard.in goes away one day.
</p>
</div>
</div>
<div id="outline-container-orgd73dae7" class="outline-3">
<h3 id="orgd73dae7">wiki</h3>
<div class="outline-text-3" id="text-orgd73dae7">
<p>
This makes a read-only copy of all the org files that generate <a href="https://johnborwick.com/wiki/">https://johnborwick.com/wiki/</a>. I want to be able to reference these in org-roam.
</p>
</div>
</div>
<div id="outline-container-orgd6832fa" class="outline-3">
<h3 id="orgd6832fa">youtube</h3>
<div class="outline-text-3" id="text-orgd6832fa">
<p>
I list playlists in a config file and then this generates a read-only org-roam file for each playlist. This also has code to look up private video titles (for videos that have been made private since I added them to a playlist, such as a version of David Bowie's "Life on Mars").
</p>
</div>
</div>
</div>
<div id="outline-container-org595aae5" class="outline-2">
<h2 id="org595aae5">org-roam auditing</h2>
<div class="outline-text-2" id="text-org595aae5">
<p>
Turn out that org-roam content can really go stale/bad, especially when you're dumping a ton of content into it! I have several jobs to help with this:
</p>

<ul class="org-ul">
<li><code>audit.py</code>: Fixes structural issues such as sub-headings without parent headings</li>
<li><code>broken_refs.py</code>: Finds references to files or org-roam IDs where the target doesn't exist. Also looks for stray <code>[[</code> characters</li>
<li><code>orphan_media.py</code>: Finds media that isn't linked anywhere</li>
<li><code>web_content.py</code>: Finds org-roam content that's really copied from a web site. (My Notion import, especially, had a lot of copied HTML content from web sites.) I can then interactively remove this content &amp; add it to pinboard.</li>
</ul>
</div>
</div>
<div id="outline-container-org063020a" class="outline-2">
<h2 id="org063020a">Using org-roam on my phone</h2>
<div class="outline-text-2" id="text-org063020a">
<p>
So, org-roam doesn't work great on the phone. There <i>are</i> org-mode readers but they don't respect the org-roam <code>id:</code> links. So, last year I built a basic exporter. It collates the org-roam files into one gigantic org file, converts the ID links into anchors, and then runs <code>pandoc</code> on them. I then put the file in Dropbox.
</p>

<p>
Unfortunately, I now have an iPhone and the iPhone doesn't want Safari to open a local file. So, I have recently switched to generating an <code>.epub</code> file. I can then open this on the phone.
</p>

<p>
Additionally, I added a git post-commit hook to my org-roam directory, so that this epub file gets regenerated. Here's the hook:
</p>

<div class="org-src-container">
<pre class="src src-bash">#!/bin/bash
set -e

PLIST=~/Library/LaunchAgents/com.johnborwick.org-roam-export.plist
PLIST_SOURCE=FIXME-PATH-TO/com.johnborwick.org-roam-export.plist
LABEL=com.johnborwick.org-roam-export

if ! launchctl list "$LABEL" &gt;/dev/null 2&gt;&amp;1; then
    if [ ! -f "$PLIST" ]; then
        test -f "$PLIST_SOURCE" || { echo "ERROR: $PLIST_SOURCE not found" &gt;&amp;2; exit 1; }
        cp "$PLIST_SOURCE" "$PLIST"
    fi
    launchctl load "$PLIST"
fi

touch ~/.local/share/org-roam-export-trigger
</pre>
</div>

<p>
This bootstraps a <code>launchctl</code> job that watches that <code>org-roam-export-trigger</code> file. When that file changes, it kicks off the job. This is necessary because I have a hook in Emacs to commit to git when I save an org-roam file. Emacs will wait on the hook to finish running, even if you use <code>nohup</code> and stuff.
</p>

<p>
Here's the plist file:
</p>

<div class="org-src-container">
<pre class="src src-plist">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
&lt;dict&gt;
    &lt;key&gt;Label&lt;/key&gt;
    &lt;string&gt;com.johnborwick.org-roam-export&lt;/string&gt;
    &lt;key&gt;ProgramArguments&lt;/key&gt;
    &lt;array&gt;
        &lt;string&gt;FIXME-PATH-TO/run_org_roam_export.sh&lt;/string&gt;
    &lt;/array&gt;
    &lt;key&gt;WatchPaths&lt;/key&gt;
    &lt;array&gt;
        &lt;string&gt;/Users/john/.local/share/org-roam-export-trigger&lt;/string&gt;
    &lt;/array&gt;
    &lt;key&gt;StandardOutPath&lt;/key&gt;
    &lt;string&gt;/tmp/org-roam-export.log&lt;/string&gt;
    &lt;key&gt;StandardErrorPath&lt;/key&gt;
    &lt;string&gt;/tmp/org-roam-export.log&lt;/string&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</pre>
</div>

<p>
In turn, the <code>run_org_roam_export.sh</code> script runs my <code>org_roam_export.hy</code> script.
</p>
</div>
</div>
<div id="outline-container-orgcc7561d" class="outline-2">
<h2 id="orgcc7561d">Leveled up!</h2>
<div class="outline-text-2" id="text-orgcc7561d">
<p>
With all of this, I feel like I really have a clear, connected system now:
</p>

<ul class="org-ul">
<li>Readwise Reader is for reading non-books (I have separate jobs that will synchronize Readwise Reader with pinboard unread bookmarks)</li>
<li>A book tool (currently Hardcover) tracks the books I want to read</li>
<li>org-roam has all my reference content</li>
<li>I can link to org-roam from elsewhere in Emacs</li>
<li>I can access the org-roam content via iOS's Books app (sort of)</li>
</ul>
</div>
</div>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[org-roam importers, audits, and exports, built with Claude Code's help.]]></summary></entry><entry><title type="html">Creating personal MCP servers</title><link href="https://www.johnborwick.com/2026/02/08/mcp-servers.html" rel="alternate" type="text/html" title="Creating personal MCP servers" /><published>2026-02-08T00:00:00-05:00</published><updated>2026-02-08T00:00:00-05:00</updated><id>https://www.johnborwick.com/2026/02/08/mcp-servers</id><content type="html" xml:base="https://www.johnborwick.com/2026/02/08/mcp-servers.html"><![CDATA[<p>
I have started to use <a href="https://claude.ai/">Claude</a> and Claude Code a fair bit. I went to a conference in December 2025 where people were talking about MCP servers, and I didn't understand what they were, so I used Claude Code to explore them. It turns out it's not that hard to create your own personal MCP servers!
</p>

<p>
As background, <a href="https://modelcontextprotocol.io/docs/getting-started/intro">the Model Context Protocol (MCP)</a> is a way for AI to talk with a system. You use a tool, such as Claude Desktop, and you tell it about MCP servers. The MCP servers provide an endpoint for Claude Desktop to use. For example, if you had an MCP server for Chipotle, the MCP server might let an AI tool look up restaurants by location, get a list of the menu items, or maybe even place an order. MCP servers are kind of like API servers except they're specific to AI tools.
</p>
<div id="outline-container-orga72dee7" class="outline-2">
<h2 id="orga72dee7">Current locally-created MCP servers</h2>
<div class="outline-text-2" id="text-orga72dee7">
<p>
Tools can provide their own MCP servers, but it's also possible to create your own. I currently have these:
</p>

<ol class="org-ol">
<li><code>fclibrary-mcp</code>: This lets me search the Forsyth County public library's collections.</li>
<li><code>hardcover-mcp</code>: This lets me search my book lists on <a href="https://hardcover.app">Hardcover</a>, add books, and update book status. I can't say much about Hardcover except that I switched from Goodreads to it to get API access<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>.</li>
<li><code>notmuch-mcp</code>: This lets me search my <code>notmuch</code> email.</li>
<li><code>org-mcp</code>: This lets me search and edit my org-mode content, including my tasks and projects.</li>
<li><code>orgroam-mcp</code>: This lets me search and edit my org-roam content, which is basically my personal <a href="https://en.wikipedia.org/wiki/Zettelkasten">Zettelkasten</a></li>
<li><code>pinboard-mcp</code>: This lets me search and edit my saved bookmarks</li>
<li><code>readwise-mcp</code>: This lets me search, add tags, and otherwise edit my Readwise Reader content</li>
</ol>

<p>
I didn't write the code for any of these; I worked with Claude Code to create the MCP servers themselves. I did set standards, e.g. they're all Python-based.
</p>

<p>
I then added all of these to Claude Desktop so I could use them. Claude Desktop runs these as binaries when it starts, after you update its <code>.json</code> config file, which is a little weird? It's a pipe-based connection not a network connection.
</p>
</div>
</div>
<div id="outline-container-org6494ca0" class="outline-2">
<h2 id="org6494ca0">Use cases</h2>
<div class="outline-text-2" id="text-org6494ca0">
<p>
Here are some specific examples of things I've done with these:
</p>

<ul class="org-ul">
<li>Claude Desktop has added tags to my Readwise Reader untagged, unread content, and moved less-relevant/timely content from my "Inbox" to "Later". (I am slowly working through a backlog of years of unread content that I pulled from my pinboard.in unread bookmarks last year.)</li>
<li>Claude Desktop can look at my unread books from Hardcover and search for whether they are available at the library. It can also recommend new books and add them to my unread list.</li>
<li>Claude Desktop can add tasks to org projects.</li>
</ul>
</div>
</div>
<div id="outline-container-org6c8cba1" class="outline-2">
<h2 id="org6c8cba1">MCP server layout</h2>
<div class="outline-text-2" id="text-org6c8cba1">
<p>
Here's roughly how one MCP server is laid out:
</p>

<div class="org-src-container">
<pre class="src src-nil">$ find .
orgroam-mcp/
   CONTEXT.md
   pyproject.toml
   orgroam_mcp/
      orgroam_mcp/__init__.py
      orgroam_mcp/server.py
</pre>
</div>

<p>
The <code>CONTEXT.md</code> file is literally passed to Claude Desktop. It uses natural language to describe the "tools" along with examples.
</p>

<p>
The <code>pyproject.toml</code> is because I want to have separate Python <code>uv</code> environments per server. Here's the dependencies for this project:
</p>

<div class="org-src-container">
<pre class="src src-toml">dependencies = [
    "mcp[cli]&gt;=1.25,&lt;2",
    "orgparse&gt;=0.4",
    "mcp-shared",
]
</pre>
</div>

<p>
(<code>mcp-shared</code> is another library within the repo for things like logging.)
</p>

<p>
The <code>server.py</code> uses <code>FastMCP</code>:
</p>

<div class="org-src-container">
<pre class="src src-python">mcp = FastMCP("orgroam-mcp", instructions=_load_instructions())
</pre>
</div>

<p>
Then there's a function for each MCP tool:
</p>

<div class="org-src-container">
<pre class="src src-python">@mcp.tool()
def search_notes(query: str, limit: int = 20) -&gt; str:
</pre>
</div>

<p>
So for some of these (notably the library-querying MCP server), the Python functions are in turn calling other APIs. In this particular case, <code>orgroam-mcp</code> is reading files on the filesystem in my org-roam directory.
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">

<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
Goodreads <a href="https://help.goodreads.com/s/article/Does-Goodreads-support-the-use-of-APIs">turned off their API in 2020</a>. 
</p></div></div>


</div>
</div>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[Using Claude to create MCP servers]]></summary></entry><entry><title type="html">Running in Washington, DC</title><link href="https://www.johnborwick.com/2024/04/14/dc.html" rel="alternate" type="text/html" title="Running in Washington, DC" /><published>2024-04-14T00:00:00-04:00</published><updated>2024-04-14T00:00:00-04:00</updated><id>https://www.johnborwick.com/2024/04/14/dc</id><content type="html" xml:base="https://www.johnborwick.com/2024/04/14/dc.html"><![CDATA[<p>
We recently took a trip to Washington, DC! I'm very motivated to explore new places by running. Here's how I figured out the routes I wanted to take!
</p>

<div id="outline-container-org9695045" class="outline-2">
<h2 id="org9695045">Run criteria</h2>
<div class="outline-text-2" id="text-org9695045">
<p>
I'm generally looking for runs that:
</p>

<ul class="org-ul">
<li><b>have few stoplights!</b></li>
<li>let me see interesting things</li>
<li>don't overlap much</li>
<li>are up to 10 miles in length</li>
<li>are roads or "solid green line" trails, vs. dotted green line trails</li>
<li>are not overly muddy</li>
<li>look OK on Strava and/or Garmin Connect heatmaps</li>
</ul>

<p>
I typically am using trail running shoes, but I do try to notice what might be paved.
</p>
</div>
</div>

<div id="outline-container-org31b7992" class="outline-2">
<h2 id="org31b7992">Initial research</h2>
<div class="outline-text-2" id="text-org31b7992">
<p>
I've found <a href="https://greatruns.com">greatruns.com</a> to have a good list of runs, e.g. <a href="https://greatruns.com/location/washington-dc/">their DC page</a> lists several runs.
</p>

<p>
I also Google the city, e.g. <code>running washington dc</code>, <code>best runs washington dc</code>, or <code>running washington dc site:reddit.com</code> to look for runs.
</p>
</div>
</div>

<div id="outline-container-orgc47c3a1" class="outline-2">
<h2 id="orgc47c3a1">Building the run</h2>
<div class="outline-text-2" id="text-orgc47c3a1">
<p>
I want to put the trail into my Garmin watch. To do this, I start with <a href="https://onthegomap.com/#/create">onthegomap.com</a> and enter in a trail.
</p>

<p>
If I can't make a path connect, that could indicate that there are bridges or other issues. I use Google street maps to look at key parts of a potential trail, especially if there are complicated-looking turns.
</p>

<p>
I try to build in some wiggle room in the distance, especially if I don't totally understand the route.
</p>

<p>
I'll use the onthegomap.com elevation display to see what I'm signing up for. For example, in my Rock Creek trail run, there was one big climb to get from the valley to DC's streets.
</p>

<p>
Sometimes I'll plan to take a taxi/Lyft to the start point. If so, I look for places that are easier for a drop-off. I might pull up Lyft to confirm I can select the start point OK.
</p>

<p>
After I have the route, I export the map "as GPX" from onthegomap.com and import that into Garmin connect (either on my phone or via a computer).
</p>

<p>
Quick double-checks when building the run:
</p>

<ul class="org-ul">
<li>Ensure that the route is the correct orientation! Both onthegomap.com and Garmin Connect have "reverse route" options.</li>
<li>Ensure turn-by-turn directions are on, which is my default</li>
<li>I look at Strava's global heatmaps and sometimes Garmin connect's heatmaps to get a sense of whether the trail I've built is weird. If few people are taking the trail, there's probably a reason (e.g. it's very hilly or not well marked).</li>
</ul>
</div>
</div>

<div id="outline-container-org4e90bb2" class="outline-2">
<h2 id="org4e90bb2">Using the route</h2>
<div class="outline-text-2" id="text-org4e90bb2">
<p>
I check the Google weather and precipitation hour-by-hour report, looking for:
</p>

<ul class="org-ul">
<li>What's the temperature?</li>
<li>Am I going to be in the sun?</li>
<li>How much precipitation will there be?</li>
</ul>

<p>
If it's more than 0.01" precipitation per hour, then I'll wear a rain jacket.
</p>

<p>
When I'm starting the run, I pull the map up on my Garmin watch using the "navigate" option. During the run I'll be checking:
</p>

<ul class="org-ul">
<li>When is the next turn?</li>
<li>What is the remaining distance?</li>
</ul>
</div>
</div>

<div id="outline-container-org2c25d0f" class="outline-2">
<h2 id="org2c25d0f">My DC runs</h2>
<div class="outline-text-2" id="text-org2c25d0f">
</div>
<div id="outline-container-org03c99ae" class="outline-3">
<h3 id="org03c99ae">The Mall + Hains Point</h3>
<div class="outline-text-3" id="text-org03c99ae">
<div class="strava-embed-placeholder" data-embed-type="activity" data-embed-id="11127150273" data-style="standard"></div><script src="https://strava-embeds.com/embed.js"></script>

<p>
The big surprise for this run was the <a href="https://www.cherryblossom.org/pre-race/events/10-mile/">DC Cherry Blossom 10 mile race</a>! I accidentally ran on the same path for much of my run, just in the opposite direction. This meant I ran on the grass a lot.
</p>
</div>
</div>

<div id="outline-container-org159d53a" class="outline-3">
<h3 id="org159d53a">The C&amp;O canal trail</h3>
<div class="outline-text-3" id="text-org159d53a">
<div class="strava-embed-placeholder" data-embed-type="activity" data-embed-id="11141643471" data-style="standard"></div><script src="https://strava-embeds.com/embed.js"></script>

<p>
The drop-off for this was pretty sketch, in that it was a small parking lot on a very busy road. I also realized that if the bridge from the drop-off point to the path was not there, I'd be hosed. Fortunately, everything worked out!
</p>

<p>
I had originally planned to go north when the trail ended, but I couldn't figure out the turn very well and Google Maps didn't have a street view for the trail ahead of time. I also had messed up my watch navigation so it wasn't giving me turn-by-turn directions!
</p>
</div>
</div>

<div id="outline-container-org59019d3" class="outline-3">
<h3 id="org59019d3">Rock Creek trail</h3>
<div class="outline-text-3" id="text-org59019d3">
<div class="strava-embed-placeholder" data-embed-type="activity" data-embed-id="11164408139" data-style="standard"></div><script src="https://strava-embeds.com/embed.js"></script>

<p>
This was a nice path. I realized the night before that some parts might be pretty muddy. I also ended up running on a (closed) road for several miles. That said, it was a very pleasant run. My biggest concern was wearing a cotton short sleeve shirt while it was running; that said, it didn't rain enough that I became soaked.
</p>
</div>
</div>
</div>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[Finding routes in a new city.]]></summary></entry><entry><title type="html">Updating the blog</title><link href="https://www.johnborwick.com/2024/03/09/blog.html" rel="alternate" type="text/html" title="Updating the blog" /><published>2024-03-09T00:00:00-05:00</published><updated>2024-03-09T00:00:00-05:00</updated><id>https://www.johnborwick.com/2024/03/09/blog</id><content type="html" xml:base="https://www.johnborwick.com/2024/03/09/blog.html"><![CDATA[<p>
I finally updated the blog theme! I moved from "minima" to <a href="https://mademistakes.com/work/jekyll-themes/minimal-mistakes/">minimal-mistakes</a>. The new theme has pagination and search built-in!
</p>
<div id="outline-container-orgc38de1e" class="outline-2">
<h2 id="orgc38de1e">Why change?</h2>
<div class="outline-text-2" id="text-orgc38de1e">
<p>
I am using Jekyll for my site but don't understand it very well. I like that it generates a static site and that I don't need to know much about how that happens! :-)
</p>

<p>
Probably the fanciest thing I've done, basically copying from others, is on the wiki index page:
</p>

<p>

</p>
<div class="org-src-container">
<pre class="src src-html">&lt;ul&gt;
{% assign sorted_pages = site.pages | sort: 'title' %}
{% for site_page in sorted_pages %}
  {% if site_page.layout == 'wiki' and site_page.name != 'index.html' %}
  &lt;li&gt;&lt;a href="{{ site_page.url }}"&gt;{{ site_page.title }}&lt;/a&gt;&lt;/li&gt;
  {% endif %}
{% endfor %}
&lt;/ul&gt;
</pre>
</div>
<p>

</p>

<p>
(This lists all the wiki pages in alphabetical order by title.)
</p>

<p>
With the minima theme, I had started to investigate pagination but needed to figure it out myself.
</p>

<p>
Additionally, I installed minima many years ago and figured I'd need to upgrade the whole stack, including Jekyll. It seemed like a good time to try a new theme that might have more "batteries included."
</p>
</div>
</div>
<div id="outline-container-org4f3abb3" class="outline-2">
<h2 id="org4f3abb3">Workflow</h2>
<div class="outline-text-2" id="text-org4f3abb3">
<p>
My workflow continues to be:
</p>

<ol class="org-ol">
<li>Write a post in org-mode</li>
<li>Compile the post into HTML via <a href="https://orgmode.org/manual/Exporting.html">org-mode exporting</a>. The destination directory is Jekyll</li>
<li>Run jekyll to build the HTML for the site</li>
<li><code>rsync</code> that site to my hosting provider</li>
</ol>

<p>
This workflow works pretty OK, except that relative linking between pages is a bit weird. (Ideally links would be org-mode links that get converted appropriately into jekyll relative links.)
</p>
</div>
</div>
<div id="outline-container-orga2fb667" class="outline-2">
<h2 id="orga2fb667">Structure</h2>
<div class="outline-text-2" id="text-orga2fb667">
<p>
The structure is:
</p>

<ul class="org-ul">
<li><code>jb.com</code> folder
<ul class="org-ul">
<li><code>.git</code>: version control for site</li>
<li><code>_site</code>: target HTML site</li>
<li><code>jekyll</code>: Jekyll version of site</li>
<li><code>org</code>: org-mode version of site (the directory where I add content)</li>
<li><code>Makefile</code></li>
</ul></li>
</ul>

<p>
The Makefile has:
</p>

<div class="org-src-container">
<pre class="src src-makefile">site:
	JEKYLL_ENV=production cd jekyll &amp;&amp; bundle exec jekyll build -d ../_site

clean:
	find org/wiki -name '*.html' -exec rm "{}" \;

upload: site
	rsync -avz --delete _site/ FIXME/
</pre>
</div>
</div>
</div>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[Switching to a new theme]]></summary></entry><entry><title type="html">Packing for the UK</title><link href="https://www.johnborwick.com/2023/08/29/uk-trip.html" rel="alternate" type="text/html" title="Packing for the UK" /><published>2023-08-29T00:00:00-04:00</published><updated>2023-08-29T00:00:00-04:00</updated><id>https://www.johnborwick.com/2023/08/29/uk-trip</id><content type="html" xml:base="https://www.johnborwick.com/2023/08/29/uk-trip.html"><![CDATA[<p>
We recently took a two-week trip to the UK, including London, Edinburgh, and Oxford. This was my first international trip in over ten years, so I want to write down a few lessons learned.
</p>

<p>
I took two bags: a Timbuk2 bag that converts between a suitcase and a bookbag, and a Tom Binh bag that converts between a shoulder bag and a bookbag. When I have both, the Timbuk2 is the bookbag and the other bag is the shoulder bag. This lets me walk around without rolling anything behind me.
</p>

<p>
Here's what was initially in the Timbuk2 bag:
</p>

<ul class="org-ul">
<li>24 Clif Builder bars</li>
<li>3 pairs of quick-dry clothes</li>
<li>5" diameter sink stopper</li>
<li>Extra razors</li>
<li>Knit hat</li>
<li>Meditation cushion</li>
<li>Pajamas</li>
<li>Rain pants</li>
<li>Rick Steves clothesline</li>
<li>Rick Steves travel wash</li>
<li>Running stuff:
<ul class="org-ul">
<li>4 Gu gel packets</li>
<li>Heart rate monitor</li>
<li>one tube of electrolyte pills</li>
<li>Pair of running clothes + running shoes</li>
</ul></li>
<li>Toiletries bag</li>
</ul>

<p>
Here's what was initially in the Tom Binh bag:
</p>

<ul class="org-ul">
<li>12 Clif Builder bars</li>
<li>Cable bag with:
<ul class="org-ul">
<li><a href="https://www.amazon.com/gp/product/B0BYRLPQL3?ie=UTF8&amp;th=1">EPICKA Universal Travel Adapter</a>: USB-C and USB charging</li>
<li>Garmin USB-C charger</li>
<li>USB-C charging cable for phone w/ adapter for micro-USB/Kindle</li>
</ul></li>
<li>inflatable neck pillow</li>
<li>Kindle</li>
<li>lozenges, small Advil container, Sudafed</li>
<li>magazine</li>
<li>Nalgene water bottle</li>
<li>noise cancelling headphones</li>
<li>journal</li>
<li>pens</li>
<li>rain jacket</li>
<li>Rick Steves umbrella</li>
<li>Two manila envelopes: "UPCOMING" and "TODAY" for printed out tickets to things</li>
<li>water cover for bag</li>
</ul>


<p>
At the end, here's what changed:
</p>

<ul class="org-ul">
<li>Carrying books and souvenirs</li>
<li>Carrying a second journal</li>
<li>Most of the Clif Builder bars were gone; the remainder were just in the Tom Binh bag</li>
<li>Dr. Bronner's soap for laundry; ran out of Rick Steves travel wash</li>
</ul>


<p>
My other lessons learned for next time are:
</p>

<ul class="org-ul">
<li>Consider not taking headphones</li>
<li>Consider packing enough to do laundry after seven days at a laundromat</li>
<li>Consider taking a USB-A to USB-C adapter to be able to charge when there's a USB-A port, e.g. on the plane</li>
<li>I don't sleep well with a neck pillow</li>
<li>Laundry doesn't dry in Scotland</li>
<li>Sink stopper was useless</li>
<li>Take an ultralight first-aid kit</li>
</ul>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[What I learned from packing for a two week trip.]]></summary></entry><entry><title type="html">Configuring the Garmin Forerunner 245 Music</title><link href="https://www.johnborwick.com/2022/12/03/garmin-forerunner-245.html" rel="alternate" type="text/html" title="Configuring the Garmin Forerunner 245 Music" /><published>2022-12-03T00:00:00-05:00</published><updated>2022-12-03T00:00:00-05:00</updated><id>https://www.johnborwick.com/2022/12/03/garmin-forerunner-245</id><content type="html" xml:base="https://www.johnborwick.com/2022/12/03/garmin-forerunner-245.html"><![CDATA[<p>
I purchased my first smart watch, a Garmin Forerunner 245, this August. At the time I didn't know anything about the Garmin ecosystem. I chose the Forerunner because I'd used a Forerunner 305 a long time ago, and because the 245 seemed like a good balance of features for the price. (It cost around $250 because the Forerunner 255 had already come out.) My thinking was that the Forerunner would be useful but also help me better understand Garmin's feature set and smart watch features in general.
</p>

<p>
Here I describe how the Garmin ecosystem and Forerunner 245 work, including how I've set up things, in case they're helpful to other people considering a smart watch or people who have a Garmin device and are looking for ways to use it more effectively.
</p>

<p>
From here on when I say "watch" I mean the Garmin Forerunner 245. Also, I'm going to be highlighting what I think matters, but there's a lot more than can be setup on the watch than what I describe.
</p>

<div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org42a3c43">Garmin and user interfaces</a></li>
<li><a href="#orgb391385">Watch equipment and synchronization</a></li>
<li><a href="#org6050d10">Garmin Connect</a></li>
<li><a href="#orgff46097">Key watch settings</a></li>
<li><a href="#orgd70613a">Watch interface configuration</a></li>
<li><a href="#org5e06550">Activities</a>
<ul>
<li><a href="#org037fe70">Activity data screens</a></li>
</ul>
</li>
<li><a href="#org2366829">Activity: Row Indoor</a></li>
<li><a href="#org79e3e1b">Activity: Running</a>
<ul>
<li><a href="#orgc4be719">Running training workouts</a></li>
<li><a href="#orgdb81912">Running courses and PacePro</a></li>
<li><a href="#orge919961">Race distance information</a></li>
<li><a href="#org5d3b546">Cooling down</a></li>
</ul>
</li>
<li><a href="#org673fcc8">Activity: Hike 2+ and maps</a></li>
<li><a href="#org886a5c9">Activity: Strength</a></li>
<li><a href="#org0962549">Activity: Treadmill</a></li>
<li><a href="#org8b88506">Controls</a></li>
<li><a href="#orgfc880be">Music</a></li>
<li><a href="#org4336b5b">Watch faces</a></li>
<li><a href="#org036dffe">Widgets</a></li>
<li><a href="#org1bce0a0">Conclusion</a></li>
</ul>
</div>
</div>

<div id="outline-container-org42a3c43" class="outline-2">
<h2 id="org42a3c43">Garmin and user interfaces</h2>
<div class="outline-text-2" id="text-org42a3c43">
<p>
My experience is that the watch and associated programs are not necessarily intuitive. You have to adapt to Garmin, to a large extent. However, once you start to figure out how Garmin has designed things, the interface starts to make more sense.
</p>

<p>
For example, this watch does not have a touchscreen. You hit buttons. This can really help when you're running and need to do something and don't want to slow down to touch the screen. However, it does mean you have to learn what the buttons do.
</p>

<p>
The watch has five buttons:
</p>

<dl class="org-dl">
<dt>Upper-left button</dt><dd>short-press for backlight; longer-press for controls; really long press for emergency notifications.</dd>
<dt>Middle-left button</dt><dd>short-press for widget scrolling; longer-press for watch configuration.</dd>
<dt>Lower-left button</dt><dd>short-press for widget scrolling; longer-press for music menu.</dd>
<dt>Upper-right button</dt><dd>activities. (If in an activity, this stops the activity.)</dd>
<dt>Lower-right button</dt><dd>go back home. (If in an activity, this becomes the lap button.)</dd>
</dl>

<p>
The watch has a couple of "modes," from my perspective:
</p>

<dl class="org-dl">
<dt>Home</dt><dd>this is the "not in an activity" mode, where you see your watch faces.</dd>
<dt>Activity</dt><dd>if you were home and pressed the upper-right button, you can now select a type of activity (e.g. "run"). Each activity then has its own configuration and watch faces.</dd>
<dt>Controls</dt><dd>you see this only when long-pressing the upper-left button. This is a wheel of controls, e.g. a stopwatch, that you can access from any mode.</dd>
<dt>Music</dt><dd>you get to this from long-pressing the lower-left button. This lets you select music. You can exit with the lower-right button.</dd>
<dt>Settings</dt><dd>you see this when long-pressing the middle-left button. This lets you control various settings depending on the mode you were in when you pressed it</dd>
<dt>Widgets</dt><dd>this is when you were home and then hit the middle-left button or lower-left button. You're now scrolling through widgets. You can select the widget to see more via the upper-right button.</dd>
</dl>
</div>
</div>

<div id="outline-container-orgb391385" class="outline-2">
<h2 id="orgb391385">Watch equipment and synchronization</h2>
<div class="outline-text-2" id="text-orgb391385">
<p>
The watch comes with a USB charger that's 2-3 feet long. For how I use it, the watch needs to be charged once a week. Charging takes me an hour.
</p>

<p>
The watch is designed to pair with a phone via Bluetooth. The phone needs the "Garmin Connect" app on it. I'll talk more about Garmin Connect in a minute.
</p>

<p>
The phone <i>can</i> also have the "Connect IQ" app on it. This is totally separate from "Garmin Connect." Connect IQ lets you add third-party tools to your watch, such as additional watch faces.
</p>

<p>
The watch can also connect to a computer via the USB charger. The computer needs to run the "Garmin Express" program. Garmin Express is a bit of a clunky program; it reminds me of much older synchronization programs (like Palm Pilot level synchronization programs). To the best of my knowledge, everything that the Garmin Express program does can be done via the Garmin website + the phone's "Garmin Connect" app.
</p>

<p>
If you have a Music version of the device, you can also pair Bluetooth headphones with the watch. Music is stored <b>on the watch</b>.
</p>
</div>
</div>

<div id="outline-container-org6050d10" class="outline-2">
<h2 id="org6050d10">Garmin Connect</h2>
<div class="outline-text-2" id="text-org6050d10">
<p>
You can access Garmin Connect via your phone, or via <a href="https://connect.garmin.com">connect.garmin.com</a>. Garmin Connect has a slight logical separation between <i>your</i> information and <i>your device's</i> information. I assume this is because you might have several Garmin devices that you want to have roll up into one interface.
</p>
</div>
</div>

<div id="outline-container-orgff46097" class="outline-2">
<h2 id="orgff46097">Key watch settings</h2>
<div class="outline-text-2" id="text-orgff46097">
<p>
Here are a few of my key watch settings.
</p>

<p>
From Garmin Connect &gt; Device settings:
</p>

<ul class="org-ul">
<li><p>
Activity Tracking &gt; Goals &gt; Daily Steps &gt; "Use Auto Goal"
</p>

<p>
This will calculate how many steps needed to reach my daily goal based on what I've been doing recently.
</p></li>
<li><p>
User Settings &gt; Personal Information
</p>

<p>
I set my "normal sleep time"
</p></li>
</ul>

<p>
On the watch itself, I set my heart rate zones by going to settings &gt; User Profile &gt; Heart Rate and then
</p>
<ul class="org-ul">
<li>Setting max heart rate</li>
<li>Setting resting heart rate (based on "use average")</li>
<li><p>
Zones: setting "Based On %HRR"
</p>

<p>
This way the zones are set dynamically.
</p></li>
</ul>
</div>
</div>

<div id="outline-container-orgd70613a" class="outline-2">
<h2 id="orgd70613a">Watch interface configuration</h2>
<div class="outline-text-2" id="text-orgd70613a">
<p>
Several types of things can be configured on your watch:
</p>

<dl class="org-dl">
<dt>Activities</dt><dd>the types of sporting activities you can select</dd>
<dt>Activity-specific configuration</dt><dd>the watch face(s) and other settings available when you select a certain activity</dd>
<dt>Controls</dt><dd>what shows up if you long-press the upper left button, e.g. "stopwatch."</dd>
<dt>Music</dt><dd>If you have a Music version of the device then there's a set of menus for selecting your music</dd>
<dt>Watch face(s)</dt><dd>what you see when you look at your watch</dd>
<dt>Widgets</dt><dd>what you see when you hit the middle left and lower left buttons</dd>
</dl>
</div>
</div>

<div id="outline-container-org5e06550" class="outline-2">
<h2 id="org5e06550">Activities</h2>
<div class="outline-text-2" id="text-org5e06550">
<p>
You can control your "favorite" activities plus a list of activities. Activities are either delivered out of the box or can be downloaded/installed via Garmin Connect IQ. Here's what I have:
</p>

<p>
<b>Favorites</b>
</p>
<ul class="org-ul">
<li>Row Indoor</li>
<li>Run</li>
<li>Walk</li>
</ul>
<p>
<b>All</b>
</p>
<ul class="org-ul">
<li>Calisthenics: I made this by copying the "strength" activity. I use this for tracking when I follow along with YouTube bodyweight strength training videos.</li>
<li>Cardio</li>
<li><a href="https://apps.garmin.com/en-US/apps/116a5b59-29ae-4397-a70e-907d7e5f8e44">Hike 2+</a>: I installed this app per recommendations online about good hiking apps. The Forerunner 245 does not have a built-in hiking activity.</li>
<li>Strength</li>
<li>Treadmill</li>
</ul>
</div>

<div id="outline-container-org037fe70" class="outline-3">
<h3 id="org037fe70">Activity data screens</h3>
<div class="outline-text-3" id="text-org037fe70">
<p>
For all my activities, I have reordered the data screens so that the first screen is my heart rate.
</p>
</div>
</div>
</div>

<div id="outline-container-org2366829" class="outline-2">
<h2 id="org2366829">Activity: Row Indoor</h2>
<div class="outline-text-2" id="text-org2366829">
<p>
My row indoor data screens (in order) are
</p>
<ul class="org-ul">
<li>Heart rate / Strokes / Stroke rate / Timer</li>
<li>Heart rate</li>
<li>Clock</li>
</ul>

<p>
I put everything I want to see on the first screen and I only use that screen, because there's not a good way to change screens when rowing.
</p>
</div>
</div>

<div id="outline-container-org79e3e1b" class="outline-2">
<h2 id="org79e3e1b">Activity: Running</h2>
<div class="outline-text-2" id="text-org79e3e1b">
<p>
My running data screens (in order) are
</p>

<ul class="org-ul">
<li>Heart rate</li>
<li>Distance / Timer / Pace</li>
<li>Lap distance / Lap time / Lap pace</li>
<li>Clock</li>
<li>Map</li>
</ul>

<p>
When I use a special feature (e.g. a workout or PacePro), that then adds additional screens.
</p>
</div>

<div id="outline-container-orgc4be719" class="outline-3">
<h3 id="orgc4be719">Running training workouts</h3>
<div class="outline-text-3" id="text-orgc4be719">
<p>
I've created one training workout (via Garmin Connect &gt; Training &gt; Workouts), "10x0.25 intervals." It's defined as:
</p>
<ol class="org-ol">
<li><p>
Step type: warm up. Type: Lap Button Press
</p>

<p>
This means track my pace etc but don't have any goals. When I hit the lap button, this is over.
</p></li>
<li>10x repeat:
<ol class="org-ol">
<li>Run with a distance target of 0.25 miles and an intensity target of type "pace" of 7:15-8:15.</li>
<li>Step type: recover. Duration = Lap Button Press</li>
</ol></li>
</ol>

<p>
Whenever I change the intensity target (e.g. it used to be 8:30-9:30), I have to manually sync the workout with the phone via Garmin Connect on the phone app.
</p>
</div>
</div>

<div id="outline-container-orgdb81912" class="outline-3">
<h3 id="orgdb81912">Running courses and PacePro</h3>
<div class="outline-text-3" id="text-orgdb81912">
<p>
I've also created "courses" (via Garmin Connect &gt; Training &gt; Courses) for the races I've done, and then I created "PacePro Pacing Strategies" for them (via Garmin Connect &gt; Training &gt; PacePro Pacing Strategies). The pacing strategies let you set your goal time and how fast you want to run each segment of the race. You can then synchronize these with your phone. At the race, you can select the PacePro strategy; you hit the start button and then the strategy tells you if you're on/off target for your segment pace and total pace.
</p>
</div>
</div>

<div id="outline-container-orge919961" class="outline-3">
<h3 id="orge919961">Race distance information</h3>
<div class="outline-text-3" id="text-orge919961">
<p>
On a longer race, you probably want to see what the race says your distance is, rather than what GPS says your distance is. There's a 3rd party data field (that I haven't used yet) for this: "<a href="https://racescreen.org">Race Screen</a>." To use it, you have to disable auto laps. (By default, the watch laps every 1 mile.) You then the lap button when you see a race distance marker (e.g. when you see a "1 mile" marker on a course). Race Screen will then update the displayed distance/lap information based on the marker. 
</p>
</div>
</div>

<div id="outline-container-org5d3b546" class="outline-3">
<h3 id="org5d3b546">Cooling down</h3>
<div class="outline-text-3" id="text-org5d3b546">
<p>
When I'm done with a run, I complete the run activity. If I'm cooling down, I will then start a separate "walk" activity, i.e. I don't usually include the cool down as part of the same run activity. This means I have a whole bunch of run activities followed by walking activities.
</p>
</div>
</div>
</div>

<div id="outline-container-org673fcc8" class="outline-2">
<h2 id="org673fcc8">Activity: Hike 2+ and maps</h2>
<div class="outline-text-2" id="text-org673fcc8">
<p>
This third-party app works differently than the built-in apps. It is designed for long battery life. When you push the "lap" button, you add a waypoint. The app will show you how far away you are from the waypoints. It will also track your elevation, where you are on a map, your heart rate, and other data.
</p>

<p>
Please note that on the Forerunner 245 the maps are blank: you can see your path but there's no topographical map or roads or anything. Other activities (not Hike 2+) do have an option to retrace your steps, where the watch will tell you how to follow your path back to the start.
</p>
</div>
</div>

<div id="outline-container-org886a5c9" class="outline-2">
<h2 id="org886a5c9">Activity: Strength</h2>
<div class="outline-text-2" id="text-org886a5c9">
<p>
I use the "strength" activity for weightlifting. However, I don't actually put my sets or other data into the watch; I use <a href="http://www.fitnotesapp.com">FitNotes</a>, which is an excellent Android weightlifting app.
</p>
</div>
</div>

<div id="outline-container-org0962549" class="outline-2">
<h2 id="org0962549">Activity: Treadmill</h2>
<div class="outline-text-2" id="text-org0962549">
<p>
The treadmill activity has an option when you save the activity, "Save and calibrate." This lets you key in what the treadmill said your distance was. The watch will then correct its distance according to what the treadmill said.
</p>
</div>
</div>

<div id="outline-container-org8b88506" class="outline-2">
<h2 id="org8b88506">Controls</h2>
<div class="outline-text-2" id="text-org8b88506">
<p>
Here are my controls, in order:
</p>

<ul class="org-ul">
<li>Assistance</li>
<li>Phone</li>
<li>Sync</li>
<li>Do Not Disturb</li>
<li>Lock/Unlock Keys</li>
<li>Stopwatch</li>
<li>Timers</li>
<li>Find My Phone</li>
<li>Power Off</li>
<li>Save Location</li>
<li>Alarm Clock</li>
</ul>

<p>
I like having the stopwatch and timers next to one another.
</p>

<p>
I removed the controls I that I don't use much.
</p>
</div>
</div>

<div id="outline-container-orgfc880be" class="outline-2">
<h2 id="orgfc880be">Music</h2>
<div class="outline-text-2" id="text-orgfc880be">
<p>
I generally run without listening to anything. However, for a longer treadmill run, I loaded one episode of <a href="https://podcasts.apple.com/us/podcast/the-runcast-with-john-richards/id76069540">The Runcast by KEXP</a> on my watch. It seemed like the watch did remember where I paused so I didn't have to seek when I listened to it again.
</p>

<p>
That said, I don't have much experience with the music part of my watch. At the time I purchased it, for some reason the music version was slightly cheaper than the non-music version.
</p>
</div>
</div>

<div id="outline-container-org4336b5b" class="outline-2">
<h2 id="org4336b5b">Watch faces</h2>
<div class="outline-text-2" id="text-org4336b5b">
<p>
The watch face I use is close to the standard one. It displays:
</p>

<ul class="org-ul">
<li>Icons (e.g. battery level, is phone connected)</li>
<li>Time</li>
<li>3 data points:
<ul class="org-ul">
<li># of steps</li>
<li>Calendar day and day of week</li>
<li>Heart rate</li>
</ul></li>
</ul>

<p>
I display my heart rate mainly to see whether the heart rate sensor is working.
</p>

<p>
I did download two watch faces:
</p>

<dl class="org-dl">
<dt><a href="https://apps.garmin.com/en-US/apps/ea602765-74fa-4655-8e06-21c3c20c759a">OCD D Void</a></dt><dd>This just says "Garmin"</dd>
<dt><a href="https://apps.garmin.com/en-US/apps/db470b72-5980-4db0-9d3e-c9016e5574a9">Void</a></dt><dd>This shows an analog clock</dd>
</dl>

<p>
I use these if I don't want people to see my regular watch face data (e.g. I don't want them to see my current heart rate).
</p>
</div>
</div>

<div id="outline-container-org036dffe" class="outline-2">
<h2 id="org036dffe">Widgets</h2>
<div class="outline-text-2" id="text-org036dffe">
<p>
Activities and widgets are the two easiest-to-use watch features, so I've put some time into how I want the widgets configured. I have the below widgets set up, in this order:
</p>

<ul class="org-ul">
<li>Health Stats</li>
<li>Performance</li>
<li>My Day</li>
<li>Pulse Ox</li>
<li>History</li>
<li><a href="https://apps.garmin.com/en-US/apps/175aa69f-945e-4030-9de4-3723e1bd30dd">Air Quality</a></li>
<li>Weather</li>
<li>Notifications</li>
</ul>

<p>
You can access widgets using the left middle button or the right middle button, going in a circle. So, whatever's at the top of the list or the bottom of the list is easiest to access. My thinking is that the top part of the list is "my health stuff" and the bottom part of the list is "my environment stuff."
</p>

<p>
I use Health Stats often to see my heart rate, body battery, and stress level information.
</p>

<p>
I use Performance way more than I thought I would. I check on all data here. I also look at this pretty frequently via the Garmin Connect app.
</p>

<p>
My Day is a shortcut to access your current day's activities as well as to see your goals e.g. number of steps.
</p>

<p>
I turned off Pulse Ox monitoring (to conserve battery) but I can check it manually with this widget.
</p>

<p>
History is a way to see previous activities via the watch. (My Day only shows the current day's activities.)
</p>

<p>
Air Quality was very helpful when Seattle's air quality was really bad.
</p>

<p>
Weather shows the weather today and for the next few days.
</p>

<p>
I really don't use Notifications and should probably remove it; if I want to see notifications I use my phone.
</p>
</div>
</div>


<div id="outline-container-org1bce0a0" class="outline-2">
<h2 id="org1bce0a0">Conclusion</h2>
<div class="outline-text-2" id="text-org1bce0a0">
<p>
I hope this extremely detailed write-up was helpful, either as someone who has a Garmin watch or as someone who's trying to understand how Garmin thinks about smart watches!
</p>
</div>
</div>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[A technical walk-through of my watch settings.]]></summary></entry><entry><title type="html">Running with the Garmin Forerunner 245</title><link href="https://www.johnborwick.com/2022/11/30/running.html" rel="alternate" type="text/html" title="Running with the Garmin Forerunner 245" /><published>2022-11-30T00:00:00-05:00</published><updated>2022-11-30T00:00:00-05:00</updated><id>https://www.johnborwick.com/2022/11/30/running</id><content type="html" xml:base="https://www.johnborwick.com/2022/11/30/running.html"><![CDATA[<p>
I've been into exercise <a href="/2021/02/06/exercise.html">on and off</a> in the past. Now's an "on" phase.
</p>

<div id="outline-container-orged3282c" class="outline-2">
<h2 id="orged3282c">How I started exercising again</h2>
<div class="outline-text-2" id="text-orged3282c">
<p>
I think the precipitating event this time was watching the documentary <a href="https://www.imdb.com/title/tt11790780/">The Alpinist</a>. Marc-André Leclerc, the free solo climber in that documentary, lived his life around climbing. He lived in a van in the woods near where he climbed. He climbed constantly. The filmmakers even get stood up for an interview because Marc-André decided to go climbing. I saw that he didn't "make time" to climb; he tried to "make time" to do anything else besides climb. Climbing was his default.
</p>

<p>
That changed my perception of exercise. I usually have thought of exercise as a habit or a chore that I want to try and make time for. However, like many people, I'm pretty busy; when I think about exercise as another to-do item, I start to assess it vs. other to-do items and I tend to drop off.
</p>

<p>
In my previous exercise post I also talk about "The Lefkoe Method," which is a good technique for questioning your fundamental assumptions and beliefs so that you can change them. I've been doing this on and off for a while as well. So between my questioning of beliefs and seeing The Alpinist, maybe something clicked.
</p>
</div>
</div>

<div id="outline-container-orgf0fdad0" class="outline-2">
<h2 id="orgf0fdad0">Getting a smart watch</h2>
<div class="outline-text-2" id="text-orgf0fdad0">
<p>
Every few months I'd tried different "interventions," or changes to try and disrupt a system, to see if they'd help me exercise. I observed that I thought of myself as a "fit" person, but that my belief about myself was from my level of physical activity many years ago. I was not objective in assessing my fitness. That led me to purchasing a fitness watch: the Garmin Forerunner 245.
</p>

<p>
I've never had a smart watch before, although I did own a Forerunner 305 back in the late 2000s. I wasn't sure what Garmin's niche was vs., say, Samsung's smart watches. I didn't totally understand that the Forerunner was a running-centric watch&#x2014;"for runner," get it?
</p>
</div>
</div>

<div id="outline-container-orgdf3b396" class="outline-2">
<h2 id="orgdf3b396">Watch data</h2>
<div class="outline-text-2" id="text-orgdf3b396">
<p>
Once the watch arrived, I started to get data about myself. This objective data has helped me counter my narrative for myself by showing me exactly how in shape I am. The measurements I've found useful include
</p>

<dl class="org-dl">
<dt>"Body battery"</dt><dd>This is a proxy for how worn out you are. It has been helpful for me.</dd>
<dt>"Stress" level</dt><dd>I have no idea how scientific this is, but the watch will show me how stressed I am (physiologically). I can see that hours after a run my levels are still high, for example.</dd>
<dt>Current heart rate</dt><dd>I didn't know the effect on me of going up four flights of stairs quickly, besides knowing I was out of breath. This helped me observe how activities became easier as I got more in shape.</dd>
<dt>Heart rate zones</dt><dd>The Garmin/watch ecosystem can calculate these zones, which helps with understanding how intense my current activity is</dd>
<dt>Intensity minutes</dt><dd>How many minutes you've worked out, but anything in a heart rate zone counts double.</dd>
<dt>Recovery time</dt><dd>This shows how much time the watch thinks you need before you recover.</dd>
<dt>Resting heart rate</dt><dd>I didn't know what my resting heart rate was, although I'd taken it with a pulse oximeter occasionally.</dd>
<dt>Training load</dt><dd>This shows how much activity you've done over the past 7 days.</dd>
<dt>VO2 max</dt><dd>I had no idea what VO2 max was when I got this watch. However, now I understand that it's a core cardio fitness indicator especially for running.</dd>
</dl>
</div>
</div>

<div id="outline-container-org1271230" class="outline-2">
<h2 id="org1271230">Starting to use the watch</h2>
<div class="outline-text-2" id="text-org1271230">
<p>
I set a goal for myself to get at least 210 "intensity minutes" a week. I then found times to exercise, which at the beginning included
</p>

<ul class="org-ul">
<li>gym workouts</li>
<li>rowing machine (at home)</li>
<li>running, especially on the weekend</li>
<li>walking over lunch</li>
</ul>

<p>
I re-joined the local gym so that I could have another workout option. This was also helpful when Seattle was filled with smoke back in September; I could run on the treadmill at the gym.
</p>

<p>
I got to where I would walk about 3.5 miles at lunch to a vegan burger place (Next Level Burger) and back. I started to find more opportunities to run as well.
</p>

<p>
I'm very fortunate to have some good exercise knowledge from past experience, such as
</p>

<ul class="org-ul">
<li>Run three times a week: once at a tempo run, once with intervals, and once on an easy long run</li>
<li>Don't push it on the running and try not to run too many miles a week</li>
<li>Cross-train with weights, e.g. using Starting Strength</li>
<li>Follow along with Youtube exercise videos to get core/upper body training, especially if the gym's too difficult</li>
<li>Walking can be done anytime</li>
</ul>
</div>
</div>

<div id="outline-container-orgc5aa90c" class="outline-2">
<h2 id="orgc5aa90c">Running progress</h2>
<div class="outline-text-2" id="text-orgc5aa90c">
<p>
I'm very happy to say that my running progress has paid off!
</p>

<p>
My first run with the watch was September 13, where I ran at an average pace of 14:46/mile: I walked a lot. I can see the data: I ran for 19 minutes at an 11 minute pace, my heart rate got up to ~170, and then I walked.
</p>

<p>
I kept at it. By late October I went to a conference and I made running after the end of each day a focus and reward. I really enjoyed it! I wanted to run farther so I could explore the city more, and did several long runs.
</p>

<p>
The next weekend I ran my first 5K in a couple of years in 30 minutes. Then for Thanksgiving I ran a 60 minute 10K! I have also accomplished some of my big running goals, including running on the I-90 floating bridge to Mercer Island, and taking the light rail to work and then running back home.
</p>

<p>
I have faster and more confident in my running. My heart rate no longer spikes after a couple of miles; I can keep a consistent pace. I'm even doing actual intervals running at an 8 minute pace!
</p>

<p>
It is extremely helpful to me that the watch recommends exercises. These are a great default for when I'm not sure what I do. For the model of watch that I have, it gives a suggested running workout each day, e.g. "run at a 10:30 pace for 55 minutes."
</p>
</div>
</div>

<div id="outline-container-org7d3c9ce" class="outline-2">
<h2 id="org7d3c9ce">Exercise as motivator</h2>
<div class="outline-text-2" id="text-org7d3c9ce">
<p>
I've also gotten to where running is its own reward. It makes me feel good, and I like seeing what I can accomplish.
</p>

<p>
It's also very validating to have data showing my progress! My past times exercising, my only real data came from running a 5K race and getting a time. Now I can see on my watch exactly what my current pace is; even if it feels like I'm running a 10 minute pace, if the watch says 11 minute pace then I get feedback that maybe my body is telling me what I want to hear so that I slow down.
</p>
</div>
</div>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[Centering exercise in my life.]]></summary></entry><entry><title type="html">2021-22 Seattle music playlist</title><link href="https://www.johnborwick.com/2022/08/08/seattle-music-2022.html" rel="alternate" type="text/html" title="2021-22 Seattle music playlist" /><published>2022-08-08T00:00:00-04:00</published><updated>2022-08-08T00:00:00-04:00</updated><id>https://www.johnborwick.com/2022/08/08/seattle-music-2022</id><content type="html" xml:base="https://www.johnborwick.com/2022/08/08/seattle-music-2022.html"><![CDATA[<p>
As I've done in <a href="/2020/08/18/seattle-music-2020.html">the past</a>, I've put together a music playlist for the last year representing music I've learned about as well as music that I feel represents the year.
</p>

<p>
(FYI the language is not censored.)
</p>

<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=IuxwLV-13bQ&amp;list=PLLaBkBZlDaYzKewY70dJasqMnMjsxfY24&amp;index=1">Seattle 2021-22</a>

<ul class="org-ul">
<li>Sammus - Mighty Morphing</li>
<li>Dry Cleaning - Scratchcard Lanyard</li>
<li>Fontaines D.C. - Jackie Down The Line</li>
<li>Elizabeth M. Drummond - Crisis</li>
<li>Bruno Mars, Anderson .Paak, Silk Sonic - Fly As Me</li>
<li>Wet Leg - Angelica</li>
<li>Dua Lipa - Don't Start Now</li>
<li>Porridge Radio - Back To The Radio</li>
<li>Metric - Help I'm Alive</li>
</ul></li>
</ul>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[Help I'm alive!]]></summary></entry><entry><title type="html">Leaving Evernote</title><link href="https://www.johnborwick.com/2022/07/31/leaving-evernote.html" rel="alternate" type="text/html" title="Leaving Evernote" /><published>2022-07-31T00:00:00-04:00</published><updated>2022-07-31T00:00:00-04:00</updated><id>https://www.johnborwick.com/2022/07/31/leaving-evernote</id><content type="html" xml:base="https://www.johnborwick.com/2022/07/31/leaving-evernote.html"><![CDATA[<p>
I've been an Evernote user since around 2009. When I first started using it, Evernote was cutting edge in a lot of ways:
</p>

<ul class="org-ul">
<li>Evernote supported many types of notes: typed notes, pictures, audio notes, and more</li>
<li>Evernote was rock solid reliable</li>
<li>files did not have to be structured</li>
<li>tags were still new-ish as a concept</li>
</ul>

<p>
Evernote's logo is an elephant, with the idea being that an elephant never forgets.
</p>

<p>
I have since added thousands of notes to Evernote and I've been a paid user since close to the beginning. I've read blog posts and even books on how to use Evernote more effectively. As some example use cases:
</p>

<ul class="org-ul">
<li>key documents, such as tax receipts</li>
<li>notes to myself for how to do things, e.g. "pre-/post- vacation checklist"</li>
<li>photos of where I parked at the airport, so I don't forget</li>
<li>pictures from games</li>
<li>receipts</li>
<li>share notes with other family members also using Evernote</li>
</ul>

<p>
I have been really entangled in Evernote. To some extent it became a junk drawer for me&#x2014;or maybe a creepy attic? I had a ton of content in there that I didn't want to face.
</p>

<p>
All that said, over the last few years, Evernote has gotten less reliable for me:
</p>

<ul class="org-ul">
<li>Android Evernote app has lost pictures that I have taken with it: I click the widget to take pictures, then take pictures, then click save, and then nothing happens</li>
<li>I try to send files to Evernote via the macOS app and/or the Android app and Evernote doesn't seem to import them</li>
<li>the "new" Evernote client <i>constantly</i> wants to update, like every time you open it it wants to update</li>
<li>this client does not allow you to export more than 50 notes at a time</li>
</ul>

<p>
In my case, I have also been looking at all the proprietary systems I use to ensure I am comfortable with where my data is. See also my "<a href="https://www.johnborwick.com/wiki/life%20archive.html">life archive</a>" system.
</p>

<p>
All this boiled over last week, when I lost 50+ pictures I was trying to send to Evernote. This should have been a simple use case: I click on Evernote to take pictures; I take the pictures; the pictures go into a note. But it wasn't: I got a spinny icon for each picture and then eventually a message that the note was too big.
</p>

<p>
I've had this issue in the past, e.g. a while ago I took a picture of a document and then destroyed it but it turns out Evernote hadn't actually saved the image. I decided I needed to confront Evernote (finally).
</p>

<div id="outline-container-orgeb8cbe2" class="outline-2">
<h2 id="orgeb8cbe2">How I switched</h2>
<div class="outline-text-2" id="text-orgeb8cbe2">
<p>
First, I identified a replacement tool: <a href="https://www.notion.so">Notion</a>. The key things that I liked about Notion were:
</p>

<ul class="org-ul">
<li>ability to collaborate with other Notion users</li>
<li>ability to export usable content</li>
<li>ability to synchronize</li>
<li>features that I had never been able to consider with Evernote, such as arbitrary levels of nesting</li>
<li>seemed to be some traction/other users</li>
</ul>

<p>
Since using it, I've already learned about other features such as the ability to create "databases" e.g. of places I want to hike.
</p>

<p>
Here's how I switched.
</p>
</div>

<div id="outline-container-orgfc83c20" class="outline-3">
<h3 id="orgfc83c20">Create Notion account/workspace</h3>
<div class="outline-text-3" id="text-orgfc83c20">
<p>
I created an account/workspace and played around with it a bit. 
</p>
</div>
</div>

<div id="outline-container-org6d908b9" class="outline-3">
<h3 id="org6d908b9">Export Evernote notebooks</h3>
<div class="outline-text-3" id="text-org6d908b9">
<p>
I had to do this using <a href="https://help.evernote.com/hc/en-us/articles/360052560314-Install-an-older-version-of-Evernote">the Evernote Legacy client</a>, so that I could export more than 50 notes at a time.
</p>

<ol class="org-ol">
<li>Select all notes and export all to a file in <code>enex</code> format, e.g. "Evernote backup.enex". This is for emergency use and is not needed for conversion.</li>
<li>Create a folder on my computer called "Evernote notebooks."</li>
<li>Go through each Evernote notebook, one at a time, select all notes, and export those into the "Evernote notebooks" folder as <code>enex</code> files.</li>
</ol>
</div>
</div>

<div id="outline-container-org320ff29" class="outline-3">
<h3 id="org320ff29">Convert notebooks using <code>enex2notion</code></h3>
<div class="outline-text-3" id="text-org320ff29">
<p>
Notion's built-in Evernote importer did not work for me.
</p>

<p>
Fortunately, I found <code>enex2notion</code>. This is a great Python-based conversion tool! For setup:
</p>

<div class="org-src-container">
<pre class="src src-sh">mkvirtualenv enex2notion
pip install enex2notion
</pre>
</div>

<p>
(This is predicated on you having virtualenv-wrapper.)
</p>

<p>
Then get <a href="https://vzhd1701.notion.site/Find-Your-Notion-Token-5f57951434c1414d84ac72f88226eede">your notion token</a>.
</p>

<p>
Now go into the "Evernote folders" notebook and run this script:
</p>

<div class="org-src-container">
<pre class="src src-sh"><span style="color: #a0a1a7; font-weight: bold;">#</span><span style="color: #a0a1a7;">!/bin/</span><span style="color: #a626a4;">sh</span>
<span style="color: #e44649;">set</span> -e
mkdir -p moved

<span style="color: #e44649;">export</span> <span style="color: #8b4513;">TOKEN</span>=<span style="color: #50a14f;">"</span><span style="color: #ffffff; background-color: #666600; font-weight: bold;">FIXME</span><span style="color: #50a14f;">-PUT-TOKEN-HERE"</span>

<span style="color: #a626a4;">for</span> i<span style="color: #a626a4;"> in</span> *.enex
<span style="color: #a626a4;">do</span>
    enex2notion --token $<span style="color: #8b4513;">TOKEN</span> --add-meta --mode PAGE <span style="color: #50a14f;">\</span>
                --condense-lines --done-file done-tracking <span style="color: #50a14f;">"$i"</span>
    mv -i <span style="color: #50a14f;">"$i"</span> moved/
<span style="color: #a626a4;">done</span>
</pre>
</div>

<p>
<b>Please note</b>: <code>set -e</code> makes the script stop on error, which is very important!
</p>

<p>
This script runs <code>enex2notion</code> on each <code>enex</code> file and then moves it into the "moved" folder. Here's what the <code>enex2notion</code> options do:
</p>

<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">


<colgroup>
<col  class="org-left" />

<col  class="org-left" />
</colgroup>
<tbody>
<tr>
<td class="org-left"><code>--token</code></td>
<td class="org-left">specifies your notion token</td>
</tr>

<tr>
<td class="org-left"><code>--add-meta</code></td>
<td class="org-left">adds a metadata block to each note</td>
</tr>

<tr>
<td class="org-left"><code>--mode</code></td>
<td class="org-left">PAGE or DB. I like the page layout more for imports</td>
</tr>

<tr>
<td class="org-left"><code>--condense-lines</code></td>
<td class="org-left">Reduces the number of "blocks" per note</td>
</tr>

<tr>
<td class="org-left"><code>--done-file</code></td>
<td class="org-left">This helps with resuming if the script cancels</td>
</tr>
</tbody>
</table>

<p>
This script works very well! It's not 100%, and I recommend you keep Evernote around until you can verify that the import worked to your liking. But it worked really effectively for me.
</p>
</div>
</div>

<div id="outline-container-orgd8c3f38" class="outline-3">
<h3 id="orgd8c3f38">Take a backup</h3>
<div class="outline-text-3" id="text-orgd8c3f38">
<p>
I highly recommend using <a href="https://www.notion.so/help/export-your-content">Notion's export</a> when you're done, so you have a backup before you start messing with stuff.
</p>
</div>
</div>
</div>

<div id="outline-container-org97e6395" class="outline-2">
<h2 id="org97e6395">Lessons learned</h2>
<div class="outline-text-2" id="text-org97e6395">
<p>
I'm in a very different place with respect to information management vs. where I was in 2009 when I was starting to use Evernote. As I've gone through all my imported Evernote notes in Notion, I handle them differently based on the type of content:
</p>

<dl class="org-dl">
<dt>Contact data</dt><dd>these can go into Google contacts, or they can go into a Notion "contacts" database I created.</dd>
<dt>Life archive related</dt><dd>for example, family history information. These go into my life archive instead.</dd>
<dt>Links</dt><dd>these go into pinboard (the web site) instead</dd>
<dt>Receipts</dt><dd>these can often be destroyed.</dd>
<dt>Recipes</dt><dd>these go into Paprika (the app) instead</dd>
</dl>

<p>
Within Notion, I have several top-level pages:
</p>

<dl class="org-dl">
<dt>Inbox</dt><dd>just like for Evernote, this is where new content goes when I'm not sure where to put it yet. (Or, maybe it can be deleted after I act on it!)</dd>
<dt>active task reference</dt><dd>content related to current active tasks, e.g. information about an appointment I need to schedule.</dd>
<dt>ideation</dt><dd>ideas about stuff.</dd>
<dt>reference</dt><dd>information I may need to reference, e.g. facts about cars.</dd>
<dt>archive</dt><dd>historic content that still needs to be in Notion vs. another system, e.g. a copy of my Hallmark movie reviews.</dd>
</dl>

<p>
It can also be helpful to have a page <code>keep until 2025</code>, <code>keep until 2026</code> etc where you put notes that you might want to keep for a while but then will destroy. That way you don't have to go through all your content looking for old stuff.
</p>
</div>
</div>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[Switching from Evernote to Notion after 13 years.]]></summary></entry><entry><title type="html">2020-21 Seattle music playlist</title><link href="https://www.johnborwick.com/2021/08/28/seattle-music-2021.html" rel="alternate" type="text/html" title="2020-21 Seattle music playlist" /><published>2021-08-28T00:00:00-04:00</published><updated>2021-08-28T00:00:00-04:00</updated><id>https://www.johnborwick.com/2021/08/28/seattle-music-2021</id><content type="html" xml:base="https://www.johnborwick.com/2021/08/28/seattle-music-2021.html"><![CDATA[<p>
As I've done in <a href="/2020/08/18/seattle-music-2020.html">the past</a>, I've put together a music playlist for the last year representing music I've learned about as well as music that I feel represents the year.
</p>

<ul class="org-ul">
<li><a href="https://www.youtube.com/playlist?list=PLLaBkBZlDaYy31x4VdIvehDg3obyzeeLY">Seattle 2020-21</a>

<ul class="org-ul">
<li>Say Hi - Obsidian Oblivion</li>
<li>Fontaines D.C. - A Hero's Death</li>
<li>Sampa The Great - OMG</li>
<li>IDLES - WAR</li>
<li>Car Seat Headrest - Can't Cool Me Down</li>
<li>Sault - I Just Want to Dance</li>
<li>Corridor - Domino</li>
<li>Hotels - Queens (West African Peanut Soup)</li>
<li>Tune-Yards - hold yourself.</li>
<li>FOALS - Exits</li>
<li>Phoebe Bridgers - I Know the End</li>
</ul></li>
</ul>]]></content><author><name>John Borwick</name></author><summary type="html"><![CDATA[Eleven songs summarizing the last year.]]></summary></entry></feed>