<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>@Summitt Dweller’s Personal Blog - Development</title>
    <link>https://blog.summittdweller.com/tags/development/</link>
    <description>All entries in Development on Personal Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
    <lastBuildDate>Sat, 25 Jan 2025 08:43:21 -0600</lastBuildDate>
    <atom:link href="https://blog.summittdweller.com/tags/development/" rel="self" type="application/rss+xml" />
    
      
      <item>
        <title>Rebranding CV to HAT with Pagefind</title>
        <link>https://blog.summittdweller.com/posts/2025/01/rebranding-cv/</link>
        <pubDate>Sat, 25 Jan 2025 08:43:21 -0600</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2025/01/rebranding-cv/</guid>
        <description>&lt;p&gt;Today I&amp;rsquo;m rebranding the Tama-Toledo Community Visioning (CV) site to Hometown Action Team (HAT) and adding Pagefind.&lt;/p&gt;
&lt;p&gt;When doing so I get this build error&amp;hellip;&lt;/p&gt;
&lt;!-- hugo: layouts/shortcodes/original.html --&gt;
&lt;div class=&#34;original&#34;&gt;
Warning: Running in pre-1.0 compatibility mode.
Pagefind 1.0 changes the default output directory from /_pagefind/ to /pagefind/
but references to the /_pagefind/ URL were found on your site, and the output directory is unconfigured.
To preserve your setup, the search files have been written twice, to both /_pagefind/ and /pagefind/
&lt;p&gt;To remove this warning, either update your script and style references to the new &lt;code&gt;/pagefind/&lt;/code&gt; URL
or run Pagefind with &lt;code&gt;--output-subdir _pagefind&lt;/code&gt; to ensure pre-1.0 behaviour&lt;/p&gt;
&lt;/div&gt;
&lt;!-- /hugo: layouts/shortcodes/original.html --&gt;
&lt;p&gt;So, I am going to try changing all _pagefind references to just &amp;lsquo;pagefind&amp;rsquo;.  Wish me luck&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>A Newer Pagefind Enabled Blog!</title>
        <link>https://blog.summittdweller.com/posts/2024/12/newer-pagefind-enabled-blog/</link>
        <pubDate>Sun, 22 Dec 2024 10:43:32 -0600</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2024/12/newer-pagefind-enabled-blog/</guid>
        <description>&lt;p&gt;It&amp;rsquo;s deja vu all over again.  My &lt;code&gt;timeline&lt;/code&gt; module doesn&amp;rsquo;t work with the current rendition of &lt;a href=&#34;https://blog.SummittDweller.com&#34;&gt;https://blog.SummittDweller.com&lt;/a&gt; and I can&amp;rsquo;t figure out what&amp;rsquo;s broken.  So, I&amp;rsquo;ve resurrected my &lt;a href=&#34;https://github.com/SummittDweller/blogs-SummittDweller&#34;&gt;old personal blog project&lt;/a&gt; and updated with the meager content it was missing.  That project has a working &lt;code&gt;timeline&lt;/code&gt; but no &lt;code&gt;Pagefind&lt;/code&gt; search, yet.&lt;/p&gt;
&lt;p&gt;So, how might I &lt;strong&gt;ONCE AGAIN&lt;/strong&gt; approach combining Hugo with Pagefind in the cloud?  Well, &lt;a href=&#34;https://web.archive.org/web/20220818082611/https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&#34;&gt;A Powerful Blog Setup with Hugo and NPM&lt;/a&gt;* by Tom Hombergs looked like a promising place to start.  The process that Tom advocates leverages a neat little package called &lt;a href=&#34;https://www.npmjs.com/package/hugo-bin&#34;&gt;hugo-bin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;*&lt;em&gt;The links provided above and below are to a Wayback Machine capture of the original post.&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;once-againthat-was-too-easy&#34;&gt;Once Again&amp;hellip;That Was Too Easy!&lt;/h1&gt;
&lt;p&gt;Wrapping this Hugo blog site in an NPM package was so easy that I forgot to document it&amp;hellip; and maybe I really didn&amp;rsquo;t need too.  Time to catch up, so here&amp;rsquo;s a brief sysnopsis of what I did&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;following-toms-excellent-advice&#34;&gt;Following Tom&amp;rsquo;s Excellent Advice&lt;/h2&gt;
&lt;p&gt;I started by studying &lt;a href=&#34;https://web.archive.org/web/20220818082611/https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&#34;&gt;A Powerful Blog Setup with Hugo and NPM&lt;/a&gt; and quickly found that I could easily follow it almost verbatim.  Since I already had &lt;code&gt;npm&lt;/code&gt; and &lt;code&gt;Hugo&lt;/code&gt; installed I skipped ahead to the section titled &amp;ldquo;Setting Up a Hugo Project&amp;rdquo; and then to the &lt;code&gt;npx&lt;/code&gt; and &lt;code&gt;git&lt;/code&gt; commands there.  My experience, mostly in commands, looked like this on my Mac Mini workstation.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  cd ~/GitHub/
  # Named the new project npm-blog-SummittDweller so it would not confilct with any of my existing `blog...` directories
  mkdir npm-blog-SummittDweller
  cd npm-blog-SummittDweller
  npx hugo new site . --force
  # Copied the contents of my old project into the new one and then removed whatever I no longer needed
  cp -fr ~/GitHub/blogs-SummittDweller/. .  
  # Installed Pagefind...
  npm install pagefind
  git init
  # I created a new empty repo in GitHub called npm-blog-SummittDweller, then...
  git remote add origin https://github.com/SummittDweller/npm-blog-sd 
  git add . 
  git commit -m &amp;#34;Initial commit of new npm-wrapped Hugo project&amp;#34;
  git push
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Having secured a new repo I moved to running Hugo locally, then polishing my &lt;code&gt;package.json&lt;/code&gt; scripts as Tom did.  I now have a &lt;code&gt;package.json&lt;/code&gt; that reads like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
  &amp;#34;name&amp;#34;: &amp;#34;npm-blog-sd&amp;#34;,
  &amp;#34;version&amp;#34;: &amp;#34;1.0.0&amp;#34;,
  &amp;#34;description&amp;#34;: &amp;#34;My personal (SummittDweller) blog built with Hugo inside an NPM package.  December 2024.&amp;#34;,
  &amp;#34;main&amp;#34;: &amp;#34;index.js&amp;#34;,
  &amp;#34;scripts&amp;#34;: {
    &amp;#34;test&amp;#34;: &amp;#34;echo \&amp;#34;Error: no test specified\&amp;#34; &amp;amp;&amp;amp; exit 1&amp;#34;,
    &amp;#34;build&amp;#34;: &amp;#34;npm run hugo:build &amp;amp;&amp;amp; npx pagefind --site public&amp;#34;,
    &amp;#34;do:build&amp;#34;: &amp;#34;hugo -d public &amp;amp;&amp;amp; npx pagefind --site public&amp;#34;,
    &amp;#34;azure:build&amp;#34;: &amp;#34;hugo -d public --baseURL=\&amp;#34;https://azure-static-web-apps-ashy-rock-0f18efc0f\&amp;#34; &amp;amp;&amp;amp; npx pagefind --site public&amp;#34;,
    &amp;#34;clean&amp;#34;: &amp;#34;npm run hugo:clean&amp;#34;,
    &amp;#34;serve&amp;#34;: &amp;#34;npm run hugo:build &amp;amp;&amp;amp; npx pagefind --site public --output-subdir ../static/_pagefind &amp;amp;&amp;amp; npm run hugo:serve&amp;#34;,
    &amp;#34;hugo:build&amp;#34;: &amp;#34;hugo -d public&amp;#34;,
    &amp;#34;hugo:serve&amp;#34;: &amp;#34;hugo server&amp;#34;,
    &amp;#34;hugo:clean&amp;#34;: &amp;#34;rm -rf build resources public&amp;#34;
  },
  &amp;#34;author&amp;#34;: &amp;#34;Mark A. McFate&amp;#34;,
  &amp;#34;license&amp;#34;: &amp;#34;ISC&amp;#34;,
  &amp;#34;dependencies&amp;#34;: {
    &amp;#34;hugo-bin&amp;#34;: &amp;#34;^0.137.0&amp;#34;,
    &amp;#34;pagefind&amp;#34;: &amp;#34;^1.2.0&amp;#34;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;it-works&#34;&gt;It Works!&lt;/h1&gt;
&lt;p&gt;Now I just use &lt;code&gt;npm run serve&lt;/code&gt; to build the Hugo site, index it with Pagefind, and serve it locally at &lt;a href=&#34;http://localhost:1313&#34;&gt;http://localhost:1313&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;a-staging-site-in-azure&#34;&gt;A Staging Site in Azure&lt;/h1&gt;
&lt;p&gt;I can simply push changes to the &lt;code&gt;main&lt;/code&gt; branch of the &lt;code&gt;npm-blog-sd&lt;/code&gt; repo to trigger an Azure (aka GitHub Actions) rebuild, indexing and deployment of the site to &lt;a href=&#34;https://ashy-rock-0f18efc0f.4.azurestaticapps.net&#34;&gt;this address&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;errors&#34;&gt;Errors?&lt;/h1&gt;
&lt;p&gt;So, it took lots of trial-and-error to get the Azure configuration straight.  First there were issues with deployment tokens, so I rewound the project and got that fixed.  Then, since this blog uses SASS I needed to run the &lt;code&gt;extended&lt;/code&gt; version of Hugo, or more specifically, &lt;code&gt;hugo-bin-extended&lt;/code&gt;.   I fixed that, apparently, with the addition of&amp;hellip;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  &amp;#34;dependencies&amp;#34;: {
    &amp;#34;hugo-bin-extended&amp;#34;: &amp;#34;latest&amp;#34;,
    &amp;#34;pagefind&amp;#34;: &amp;#34;^1.2.0&amp;#34;
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;hellip;in &lt;code&gt;package.json&lt;/code&gt;.  That &lt;code&gt;hugo-bin-extended&lt;/code&gt; key replaced &lt;code&gt;hugo-bin&lt;/code&gt; and I set the version to &lt;code&gt;latest&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;last-of-the-errors&#34;&gt;Last of the Errors?&lt;/h2&gt;
&lt;p&gt;The changes mentioned above left me with two deprecation errors&amp;hellip;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ERROR deprecated: site config key paginate was deprecated in Hugo v0.128.0 and will be removed in Hugo 0.141.0. Use pagination.pagerSize instead.
WARN  Raw HTML omitted while rendering &amp;#34;/github/workspace/content/about.md&amp;#34;; see https://gohugo.io/getting-started/configuration-markup/#rendererunsafe
You can suppress this warning by adding the following to your site configuration:
ignoreLogs = [&amp;#39;warning-goldmark-raw-html&amp;#39;]
ERROR deprecated: .Site.Social was deprecated in Hugo v0.124.0 and will be removed in Hugo 0.141.0. Implement taxonomy &amp;#39;social&amp;#39; or use .Site.Params.Social instead.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This &lt;a href=&#34;https://stackoverflow.com/a/5542964&#34;&gt;post&lt;/a&gt; was very helpful for working with my submodule theme!&lt;/p&gt;
&lt;h1 id=&#34;success&#34;&gt;Success!&lt;/h1&gt;
&lt;p&gt;Well, somewhat.  My site at &lt;a href=&#34;https://ashy-rock-0f18efc0f.4.azurestaticapps.net/&#34;&gt;https://ashy-rock-0f18efc0f.4.azurestaticapps.net/&lt;/a&gt; is visible now, but the theme isn&amp;rsquo;t right.  I suspect that is because my &lt;code&gt;hugo.yml&lt;/code&gt; file still sets the &lt;code&gt;baseURL&lt;/code&gt; to &amp;ldquo;&lt;a href=&#34;https://blog.summittdweller.com&#34;&gt;https://blog.summittdweller.com&lt;/a&gt;&amp;rdquo; and we are not quite there yet.  Setting the &lt;code&gt;baseURL&lt;/code&gt; to &amp;ldquo;&lt;a href=&#34;https://ashy-rock-0f18efc0f.4.azurestaticapps.net/%22&#34;&gt;https://ashy-rock-0f18efc0f.4.azurestaticapps.net/&amp;quot;&lt;/a&gt; and let&amp;rsquo;s see what happens&amp;hellip;  &lt;strong&gt;Bingo!&lt;/strong&gt;   Now, I just need to add a search bar to expose the Pagefind results.   Done!&lt;/p&gt;
&lt;!-- hugo: themes/bootstrap-bp-hugo-theme/layouts/shortcodes/attention-box.html --&gt;
&lt;div style=&#34;border: 3px solid red; padding: 1em; margin: 1em; font-size: x-large; text-align: center;&#34;&gt;What follows is obsolete, it&amp;#39;s from `npm-rootstalk`, and does NOT apply to this blog!&lt;/div&gt;
&lt;!-- /hugo: themes/bootstrap-bp-hugo-theme/layouts/shortcodes/attention-box.html --&gt;

&lt;h1 id=&#34;a-new-production-branch&#34;&gt;A New Production Branch&lt;/h1&gt;
&lt;p&gt;Pushing to production is just as simple, I just have to push changes to the new &lt;code&gt;production&lt;/code&gt; branch of the code and my app spec at DigitalOcean (see below) takes care of building, indexing, and deploying to &lt;a href=&#34;https://rootstalk.grinnell.edu&#34;&gt;https://rootstalk.grinnell.edu&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That DO app spec reads like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alerts:
- rule: DEPLOYMENT_FAILED
- rule: DOMAIN_FAILED
domains:
- domain: rootstalk.grinnell.edu
  type: PRIMARY
- domain: prairiejournal.grinnell.edu
  type: ALIAS
envs:
- key: TZ
  scope: RUN_AND_BUILD_TIME
  value: America/Chicago
- key: HUGO_MATOMO_ID
  scope: RUN_AND_BUILD_TIME
  value: &amp;quot;15&amp;quot;
ingress:
  rules:
  - component:
      name: npm-rootstalk
    match:
      path:
        prefix: /
name: npm-rootstalk
region: nyc
static_sites:
- build_command: npm run build
  environment_slug: node-js
  github:
    branch: production
    deploy_on_push: true
    repo: Digital-Grinnell/npm-rootstalk
  name: npm-rootstalk
  source_dir: /
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;It&amp;rsquo;s heavenly!  And that&amp;rsquo;s all for now.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>A New Pagefind Enabled Blog!</title>
        <link>https://blog.summittdweller.com/posts/2024/12/new-pagefind-enabled-blog/</link>
        <pubDate>Wed, 18 Dec 2024 08:31:49 -0600</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2024/12/new-pagefind-enabled-blog/</guid>
        <description>&lt;p&gt;So, &lt;code&gt;node&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt; are maybe not &amp;ldquo;all the rage&amp;rdquo; these days, but they do the job nicely for me.&lt;/p&gt;
&lt;p&gt;So, how might I &lt;strong&gt;ONCE AGAIN&lt;/strong&gt; approach combining Hugo with Pagefind in the cloud?  Well, &lt;a href=&#34;https://web.archive.org/web/20220818082611/https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&#34;&gt;A Powerful Blog Setup with Hugo and NPM&lt;/a&gt;* by Tom Hombergs looked like a promising place to start.  The process that Tom advocates leverages a neat little package called &lt;a href=&#34;https://www.npmjs.com/package/hugo-bin&#34;&gt;hugo-bin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;*&lt;em&gt;The links provided above and below are to a Wayback Machine capture of the original post.&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;that-was-too-easy&#34;&gt;That Was Too Easy!&lt;/h1&gt;
&lt;p&gt;Wrapping this Hugo blog site in an NPM package was so easy that I forgot to document it&amp;hellip; and maybe I really didn&amp;rsquo;t need too.  Time to catch up, so here&amp;rsquo;s a brief sysnopsis of what I did&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;following-toms-excellent-advice&#34;&gt;Following Tom&amp;rsquo;s Excellent Advice&lt;/h2&gt;
&lt;p&gt;I started by studying &lt;a href=&#34;https://web.archive.org/web/20220818082611/https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&#34;&gt;A Powerful Blog Setup with Hugo and NPM&lt;/a&gt; and quickly found that I could easily follow it almost verbatim.  Since I already had &lt;code&gt;npm&lt;/code&gt; and &lt;code&gt;Hugo&lt;/code&gt; installed I skipped ahead to the section titled &amp;ldquo;Setting Up a Hugo Project&amp;rdquo; and then to the &lt;code&gt;npx&lt;/code&gt; and &lt;code&gt;git&lt;/code&gt; commands there.  My experience, mostly in commands, looked like this on my Mac Mini workstation.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~/GitHub/
# Named the new project npm-blog-sd so it would not confilct with any of my existing `blog...` directories
mkdir npm-blog-sd
cd npm-blog-sd
npx hugo new site . --force
# Copied the contents of my old project into the new one and then removed whatever I no longer needed
cp -fr ~/GitHub/blog-sd/. .  
# Installed Pagefind...
npm install pagefind
git init
# I created a new empty repo in GitHub called npm-blog-sd, then...
git remote add origin https://github.com/SummittDweller/npm-blog-sd 
git add . 
git commit -m &amp;quot;Initial commit of new npm-wrapped Hugo project&amp;quot;
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Having secured a new repo I moved to running Hugo locally, then polishing my &lt;code&gt;package.json&lt;/code&gt; scripts as Tom did.  I now have a &lt;code&gt;package.json&lt;/code&gt; that reads like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
  &amp;#34;name&amp;#34;: &amp;#34;npm-blog-sd&amp;#34;,
  &amp;#34;version&amp;#34;: &amp;#34;1.0.0&amp;#34;,
  &amp;#34;description&amp;#34;: &amp;#34;My personal (SummittDweller) blog built with Hugo inside an NPM package.  December 2024.&amp;#34;,
  &amp;#34;main&amp;#34;: &amp;#34;index.js&amp;#34;,
  &amp;#34;scripts&amp;#34;: {
    &amp;#34;test&amp;#34;: &amp;#34;echo \&amp;#34;Error: no test specified\&amp;#34; &amp;amp;&amp;amp; exit 1&amp;#34;,
    &amp;#34;build&amp;#34;: &amp;#34;npm run hugo:build &amp;amp;&amp;amp; npx pagefind --site public&amp;#34;,
    &amp;#34;do:build&amp;#34;: &amp;#34;hugo -d public &amp;amp;&amp;amp; npx pagefind --site public&amp;#34;,
    &amp;#34;azure:build&amp;#34;: &amp;#34;hugo -d public --baseURL=\&amp;#34;https://azure-static-web-apps-ashy-rock-0f18efc0f\&amp;#34; &amp;amp;&amp;amp; npx pagefind --site public&amp;#34;,
    &amp;#34;clean&amp;#34;: &amp;#34;npm run hugo:clean&amp;#34;,
    &amp;#34;serve&amp;#34;: &amp;#34;npm run hugo:build &amp;amp;&amp;amp; npx pagefind --site public --output-subdir ../static/_pagefind &amp;amp;&amp;amp; npm run hugo:serve&amp;#34;,
    &amp;#34;hugo:build&amp;#34;: &amp;#34;hugo -d public&amp;#34;,
    &amp;#34;hugo:serve&amp;#34;: &amp;#34;hugo server&amp;#34;,
    &amp;#34;hugo:clean&amp;#34;: &amp;#34;rm -rf build resources public&amp;#34;
  },
  &amp;#34;author&amp;#34;: &amp;#34;Mark A. McFate&amp;#34;,
  &amp;#34;license&amp;#34;: &amp;#34;ISC&amp;#34;,
  &amp;#34;dependencies&amp;#34;: {
    &amp;#34;hugo-bin&amp;#34;: &amp;#34;^0.137.0&amp;#34;,
    &amp;#34;pagefind&amp;#34;: &amp;#34;^1.2.0&amp;#34;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;it-works&#34;&gt;It Works!&lt;/h1&gt;
&lt;p&gt;Now I just use &lt;code&gt;npm run serve&lt;/code&gt; to build the Hugo site, index it with Pagefind, and serve it locally at &lt;a href=&#34;http://localhost:1313&#34;&gt;http://localhost:1313&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;a-staging-site-in-azure&#34;&gt;A Staging Site in Azure&lt;/h1&gt;
&lt;p&gt;I can simply push changes to the &lt;code&gt;main&lt;/code&gt; branch of the &lt;code&gt;npm-blog-sd&lt;/code&gt; repo to trigger an Azure (aka GitHub Actions) rebuild, indexing and deployment of the site to &lt;a href=&#34;https://ashy-rock-0f18efc0f.4.azurestaticapps.net&#34;&gt;this address&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;errors&#34;&gt;Errors?&lt;/h1&gt;
&lt;p&gt;So, it took lots of trial-and-error to get the Azure configuration straight.  First there were issues with deployment tokens, so I rewound the project and got that fixed.  Then, since this blog uses SASS I needed to run the &lt;code&gt;extended&lt;/code&gt; version of Hugo, or more specifically, &lt;code&gt;hugo-bin-extended&lt;/code&gt;.   I fixed that, apparently, with the addition of&amp;hellip;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  &amp;#34;dependencies&amp;#34;: {
    &amp;#34;hugo-bin-extended&amp;#34;: &amp;#34;latest&amp;#34;,
    &amp;#34;pagefind&amp;#34;: &amp;#34;^1.2.0&amp;#34;
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;hellip;in &lt;code&gt;package.json&lt;/code&gt;.  That &lt;code&gt;hugo-bin-extended&lt;/code&gt; key replaced &lt;code&gt;hugo-bin&lt;/code&gt; and I set the version to &lt;code&gt;latest&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;last-of-the-errors&#34;&gt;Last of the Errors?&lt;/h2&gt;
&lt;p&gt;The changes mentioned above left me with two deprecation errors&amp;hellip;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ERROR deprecated: site config key paginate was deprecated in Hugo v0.128.0 and will be removed in Hugo 0.141.0. Use pagination.pagerSize instead.
WARN  Raw HTML omitted while rendering &amp;#34;/github/workspace/content/about.md&amp;#34;; see https://gohugo.io/getting-started/configuration-markup/#rendererunsafe
You can suppress this warning by adding the following to your site configuration:
ignoreLogs = [&amp;#39;warning-goldmark-raw-html&amp;#39;]
ERROR deprecated: .Site.Social was deprecated in Hugo v0.124.0 and will be removed in Hugo 0.141.0. Implement taxonomy &amp;#39;social&amp;#39; or use .Site.Params.Social instead.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This &lt;a href=&#34;https://stackoverflow.com/a/5542964&#34;&gt;post&lt;/a&gt; was very helpful for working with my submodule theme!&lt;/p&gt;
&lt;h1 id=&#34;success&#34;&gt;Success!&lt;/h1&gt;
&lt;p&gt;Well, somewhat.  My site at &lt;a href=&#34;https://ashy-rock-0f18efc0f.4.azurestaticapps.net/&#34;&gt;https://ashy-rock-0f18efc0f.4.azurestaticapps.net/&lt;/a&gt; is visible now, but the theme isn&amp;rsquo;t right.  I suspect that is because my &lt;code&gt;hugo.yml&lt;/code&gt; file still sets the &lt;code&gt;baseURL&lt;/code&gt; to &amp;ldquo;&lt;a href=&#34;https://blog.summittdweller.com&#34;&gt;https://blog.summittdweller.com&lt;/a&gt;&amp;rdquo; and we are not quite there yet.  Setting the &lt;code&gt;baseURL&lt;/code&gt; to &amp;ldquo;&lt;a href=&#34;https://ashy-rock-0f18efc0f.4.azurestaticapps.net/%22&#34;&gt;https://ashy-rock-0f18efc0f.4.azurestaticapps.net/&amp;quot;&lt;/a&gt; and let&amp;rsquo;s see what happens&amp;hellip;  &lt;strong&gt;Bingo!&lt;/strong&gt;   Now, I just need to add a search bar to expose the Pagefind results.   Done!&lt;/p&gt;
&lt;!-- hugo: themes/bootstrap-bp-hugo-theme/layouts/shortcodes/attention-box.html --&gt;
&lt;div style=&#34;border: 3px solid red; padding: 1em; margin: 1em; font-size: x-large; text-align: center;&#34;&gt;What follows is obsolete, it&amp;#39;s from `npm-rootstalk`, and does NOT apply to this blog!&lt;/div&gt;
&lt;!-- /hugo: themes/bootstrap-bp-hugo-theme/layouts/shortcodes/attention-box.html --&gt;

&lt;h1 id=&#34;a-new-production-branch&#34;&gt;A New Production Branch&lt;/h1&gt;
&lt;p&gt;Pushing to production is just as simple, I just have to push changes to the new &lt;code&gt;production&lt;/code&gt; branch of the code and my app spec at DigitalOcean (see below) takes care of building, indexing, and deploying to &lt;a href=&#34;https://rootstalk.grinnell.edu&#34;&gt;https://rootstalk.grinnell.edu&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That DO app spec reads like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alerts:
- rule: DEPLOYMENT_FAILED
- rule: DOMAIN_FAILED
domains:
- domain: rootstalk.grinnell.edu
  type: PRIMARY
- domain: prairiejournal.grinnell.edu
  type: ALIAS
envs:
- key: TZ
  scope: RUN_AND_BUILD_TIME
  value: America/Chicago
- key: HUGO_MATOMO_ID
  scope: RUN_AND_BUILD_TIME
  value: &amp;quot;15&amp;quot;
ingress:
  rules:
  - component:
      name: npm-rootstalk
    match:
      path:
        prefix: /
name: npm-rootstalk
region: nyc
static_sites:
- build_command: npm run build
  environment_slug: node-js
  github:
    branch: production
    deploy_on_push: true
    repo: Digital-Grinnell/npm-rootstalk
  name: npm-rootstalk
  source_dir: /
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;It&amp;rsquo;s heavenly!  And that&amp;rsquo;s all for now.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Spinning Up StaticCMS</title>
        <link>https://blog.summittdweller.com/posts/2024/01/2024-01-13-spinning-up-staticcms/</link>
        <pubDate>Sat, 13 Jan 2024 15:40:23 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2024/01/2024-01-13-spinning-up-staticcms/</guid>
        <description>&lt;p&gt;Today is Saturday, January 13, 2024, and I won&amp;rsquo;t be able to watch the KC Chief&amp;rsquo;s wildcard playoff game vs. the Miami Dolphins tonight because it is streaming ONLY on Peacock, and I refuse to pay them for the &amp;ldquo;privilege&amp;rdquo; to watch it live.  So, I&amp;rsquo;m going to do something productive instead.  Let&amp;rsquo;s see if I can spin up an instance of &lt;a href=&#34;https://www.staticcms.org/&#34;&gt;StaticCMS&lt;/a&gt; to provide an OPEN CMS for the content editor(s) behind the &lt;a href=&#34;https://Wieting.TamaToledo.com&#34;&gt;Wieting Theatre website&lt;/a&gt;.  &lt;/p&gt;
&lt;h2 id=&#34;the-plan&#34;&gt;The Plan&lt;/h2&gt;
&lt;p&gt;So, the plan here involves establishing a &amp;ldquo;local-only&amp;rdquo; CMS for the &lt;a href=&#34;https://Wieting.TamaToledo.com&#34;&gt;Wieting Theatre website&lt;/a&gt; and running it on the new Ubuntu server in the Wieting&amp;rsquo;s projection booth.  Editors should will be given login credentials to that server where they can run a local copy of the website (it&amp;rsquo;s a Hugo static site) AND a local copy of the CMS editor, make changes, preview them, and commit the changes to the project&amp;rsquo;s GitHub repo.  The website, hosted with &lt;em&gt;AWS Amplify&lt;/em&gt; is then automatically updated based on the updated content.&lt;/p&gt;
&lt;h3 id=&#34;along-the-way&#34;&gt;Along the Way&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s worth noting that while looking at &lt;a href=&#34;https://www.staticcms.org&#34;&gt;StaticCMS&lt;/a&gt; I also stumbled upon &lt;a href=&#34;https://mortenson.coffee/work/tabcms/&#34;&gt;tabcms - A CMS that runs in your browser tab&lt;/a&gt; which might be of interest if &amp;ldquo;The Plan&amp;rdquo; doesn&amp;rsquo;t work.&lt;/p&gt;
&lt;h2 id=&#34;first-steps---start-with-a-template&#34;&gt;First Steps - Start with a Template&lt;/h2&gt;
&lt;p&gt;I choose the guidance at &lt;a href=&#34;https://www.staticcms.org/docs/start-with-a-template&#34;&gt;Start with a Template&lt;/a&gt; to get started.  My aim is to clone that repo and build it locally &amp;ldquo;as-is&amp;rdquo;, then see if I can drop my existing &lt;a href=&#34;https://github.com/SummittServices/wieting-ss&#34;&gt;wieting-ss&lt;/a&gt; repo into the &lt;code&gt;site&lt;/code&gt; directory and continue to make it work locally.&lt;/p&gt;
&lt;p&gt;If that works, I&amp;rsquo;ll repeat the same on the Wieting&amp;rsquo;s Ubuntu server and keep pushing forward.  Wish me luck?&lt;/p&gt;
&lt;h3 id=&#34;getting-started&#34;&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;Following the &lt;a href=&#34;https://github.com/StaticJsCMS/static-cms-hugo-netlify-template#local-development&#34;&gt;Local Development&lt;/a&gt; guidance found me cloning this &lt;a href=&#34;https://github.com/StaticJsCMS/static-cms-hugo-netlify-template&#34;&gt;template&lt;/a&gt; then&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-netlify-template ‹main› 
╰─$ npm install 
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.

added 1567 packages, and audited 1568 packages in 2m

426 packages are looking for funding
  run `npm fund` for details

2 moderate severity vulnerabilities

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-netlify-template ‹main*› 
╰─$ npm start

&amp;gt; static-cms-hugo-netlify-template@1.0.0 start
&amp;gt; run-p start:**


&amp;gt; static-cms-hugo-netlify-template@1.0.0 start:webpack
&amp;gt; webpack-dev-server --config webpack.dev.js --hot --stats-error-details


&amp;gt; static-cms-hugo-netlify-template@1.0.0 start:hugo
&amp;gt; hugo -d ../dist -s site -vw

WARN  --verbose was deprecated in Hugo v0.114.0 and will be removed in a future release. use --logLevel info
Start building sites … 
hugo v0.120.1-16fb2cae88eb6add7d12e9fbfcf01d8670e60a35 darwin/amd64 BuildDate=2023-10-30T16:44:31Z VendorInfo=gohugoio

INFO  copy static: syncing static files to /
INFO  build: running step process duration 962.376µs
INFO  build: running step assemble duration 4.712758ms
INFO  build: running step render duration 16.982673ms
INFO  build: running step postProcess duration 8.3µs

                   | EN  
-------------------+-----
  Pages            | 10  
  Paginator pages  |  0  
  Non-page files   |  0  
  Static files     | 43  
  Processed images |  0  
  Aliases          |  1  
  Sitemaps         |  1  
  Cleaned          |  0  

Built in 68 ms
Watching for changes in /Users/mark/GitHub/static-cms-hugo-netlify-template/site/{content,data,layouts,static}
Watching for config changes in /Users/mark/GitHub/static-cms-hugo-netlify-template/site/config.toml
Press Ctrl+C to stop
&amp;lt;i&amp;gt; [webpack-dev-server] Project is running at:
&amp;lt;i&amp;gt; [webpack-dev-server] Loopback: http://localhost:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] On Your Network (IPv4): http://192.168.0.183:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] On Your Network (IPv6): http://[fe80::1]:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] Content not from webpack is served from &#39;/Users/mark/GitHub/static-cms-hugo-netlify-template/dist&#39; directory
&amp;lt;i&amp;gt; [webpack-dev-server] 404s will fallback to &#39;/index.html&#39;
&amp;lt;i&amp;gt; [webpack-dev-middleware] wait until bundle finished: /
assets by path *.js 18.3 MiB
  asset cms.js 18 MiB [emitted] (name: cms)
  asset main.js 300 KiB [emitted] (name: main)
asset main.css 113 KiB [emitted] (name: main)
asset admin/index.html 521 bytes [emitted]
asset fonts/.keep 0 bytes [emitted] [from: src/fonts/.keep] [copied]
Entrypoint main 413 KiB = main.css 113 KiB main.js 300 KiB
Entrypoint cms 18 MiB = cms.js
runtime modules 72.3 KiB 38 modules
modules by path ./node_modules/ 16.9 MiB 82 modules
modules by path ./src/ 133 KiB (javascript) 113 KiB (css/mini-extract)
  modules by path ./src/js/ 15.2 KiB 9 modules
  modules by path ./src/css/*.scss 118 KiB (javascript) 113 KiB (css/mini-extract)
    ./src/css/main.scss 2.78 KiB [built] [code generated]
    ./node_modules/to-string-loader/src/to-string.js!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/css/main.scss 429 bytes [built] [code generated]
    ./node_modules/mini-css-extract-plugin/dist/loader.js??ruleSet[1].rules[2].use[1]!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/css/main.scss 332 bytes [built] [code generated]
    + 2 modules
  ./src/index.js 124 bytes [built] [code generated]
asset modules 5.46 KiB
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.28 KiB [built] [code generated] [build time executed]
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.33 KiB [built] [code generated] [build time executed]
  data:image/jpeg;base64,/9j/4QAYRXhpZgAA.. 1.55 KiB [built] [code generated] [build time executed]
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.3 KiB [built] [code generated] [build time executed]
webpack 5.89.0 compiled successfully in 6191 ms
INFO  Received System Events: [CREATE        &amp;quot;/Users/mark/GitHub/static-cms-hugo-netlify-template/site/data/webpack.json&amp;quot; WRITE         &amp;quot;/Users/mark/GitHub/static-cms-hugo-netlify-template/site/data/webpack.json&amp;quot;]

Change detected, rebuilding site.
2024-01-13 10:55:38.259 -0600
Data changed WRITE         &amp;quot;/Users/mark/GitHub/static-cms-hugo-netlify-template/site/data/webpack.json&amp;quot;
Data changed WRITE         &amp;quot;/Users/mark/GitHub/static-cms-hugo-netlify-template/site/data/webpack.json&amp;quot;
INFO  build: running step process duration 114.033µs
INFO  build: running step assemble duration 277ns
INFO  build: running step render duration 6.244639ms
INFO  build: running step postProcess duration 1.831µs
Total in 6 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The demo site is indeed working at &lt;code&gt;http://localhost:3000/&lt;/code&gt; and a vist to &lt;code&gt;http://localhost:3000/admin&lt;/code&gt; does indeed open a &lt;em&gt;StaticCMS&lt;/em&gt; login that&amp;rsquo;s prompting me with the following image.&lt;/p&gt;
&lt;p&gt;&lt;!-- hugo: layouts/_default/_markup/render-image.html --&gt;
&lt;figure&gt;
  &lt;img src=&#34;images/2024/01/Screenshot-2024-01-13-at-11.00.45.png&#34; alt=&#34;Screenshot-2024-01-13-at-11.00.45&#34;&gt;
  &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;!-- /hugo: layouts/_default/_markup/render-image.html --&gt;&lt;/p&gt;
&lt;h3 id=&#34;lets-go-local&#34;&gt;Let&amp;rsquo;s Go Local!&lt;/h3&gt;
&lt;p&gt;Next, I&amp;rsquo;m going to try and switch what we have above to &amp;ldquo;go local&amp;rdquo; using &lt;a href=&#34;https://www.staticcms.org/docs/local-backend&#34;&gt;this guidance&lt;/a&gt; provided in the &lt;em&gt;StaticCMS&lt;/em&gt; documenation.  Fingers crossed for good luck&amp;hellip;&lt;/p&gt;
&lt;h3 id=&#34;eureka-it-works&#34;&gt;Eureka! It Works!&lt;/h3&gt;
&lt;p&gt;So, I made the &lt;code&gt;local_backend&lt;/code&gt; config changes as prescribed in &lt;code&gt;site/static/admin/config.yml&lt;/code&gt; and that file now looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;local_backend: 
  # when using a custom proxy server port
  url: http://localhost:8082/api/v1
  # when accessing the local site from a host other than &#39;localhost&#39; or &#39;127.0.0.1&#39;
  allowed_hosts: [&#39;192.168.0.1&#39;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I also added a new &lt;code&gt;.env&lt;/code&gt; file in the project root directory with a single line reading &lt;code&gt;PORT=8082&lt;/code&gt;, matching the port number specified in the &lt;code&gt;url:&lt;/code&gt; value from &lt;code&gt;config.yml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now, with &lt;code&gt;npx @staticcms/proxy-server&lt;/code&gt; running in a local terminal I&amp;rsquo;m able to run &lt;code&gt;npm start&lt;/code&gt; (in my &lt;em&gt;VSCode&lt;/em&gt; terminal) to launch the site at &lt;code&gt;localhost:3000&lt;/code&gt;.  Having done that I&amp;rsquo;m able to visit &lt;code&gt;http://localhost:3000/admin&lt;/code&gt; where I get a new &lt;em&gt;StaticCMS&lt;/em&gt; splash screen with a simple &lt;code&gt;Login&lt;/code&gt; button, not a &lt;em&gt;Netlify&lt;/em&gt; button.  Yay!&lt;/p&gt;
&lt;h3 id=&#34;even-better-news&#34;&gt;Even Better News?&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;StaticCMS&lt;/em&gt; was built from &lt;em&gt;NetlifyCMS&lt;/em&gt; so the &lt;code&gt;site/static/admin/config.yml&lt;/code&gt;.  I think I&amp;rsquo;ll be able to use the &lt;code&gt;collections:&lt;/code&gt; portion of my old &lt;code&gt;admin/config.yml&lt;/code&gt; file from &lt;a href=&#34;https://github.com/SummittDweller/wieting-one-click-hugo-cms&#34;&gt;wieting-one-click-hugo-cms&lt;/a&gt; to get a headstart on setting that up!&lt;/p&gt;
&lt;p&gt;Next step&amp;hellip; let&amp;rsquo;s see if I can drop the &lt;code&gt;site&lt;/code&gt; directory from &lt;a href=&#34;https://github.com/SummittServices/wieting-ss&#34;&gt;wieting-ss&lt;/a&gt; into this local project and still have a functioning local site.  Again, fingers crossed for luck.&lt;/p&gt;
&lt;h1 id=&#34;fresh-restart&#34;&gt;Fresh Restart&lt;/h1&gt;
&lt;p&gt;In order to start fresh I went back to the &lt;a href=&#34;https://github.com/StaticJsCMS/static-cms-hugo-netlify-template&#34;&gt;StaticJsCMS/static-cms-hugo-netlify-template&lt;/a&gt; repo and created a new fork (not a clone) in my &lt;code&gt;Summitt-Services&lt;/code&gt; team space at &lt;a href=&#34;https://github.com/Summitt-Services/static-cms-hugo-local-template&#34;&gt;https://github.com/Summitt-Services/static-cms-hugo-local-template&lt;/a&gt;.  In the new fork I changed the &lt;code&gt;-netlify-&lt;/code&gt; portion of the name to &lt;code&gt;-local-&lt;/code&gt; as this new project is intended to have no &lt;em&gt;Netlify&lt;/em&gt; association, only a &amp;ldquo;local&amp;rdquo; CMS will be supported.&lt;/p&gt;
&lt;p&gt;Next, I cloned the new fork to my workstation and got it working locally again using the same steps I had taken above.&lt;/p&gt;
&lt;h2 id=&#34;copying-wieting-ss-to-static-cms-hugo-local-template&#34;&gt;Copying &lt;code&gt;wieting-ss&lt;/code&gt; to &lt;code&gt;static-cms-hugo-local-template&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;For safe-keeping I created a new branch named &lt;code&gt;wieting&lt;/code&gt; in &lt;code&gt;~/GitHub/static-cms-hugo-local-template&lt;/code&gt; where I did this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹wieting*› 
╰─$ rsync -aruvi ../wieting-ss/. site/.
...
&amp;gt;f++++++++++ themes/vanilla-bootstrap-hugo-theme/static/js/checkTweetDate.js
&amp;gt;f++++++++++ themes/vanilla-bootstrap-hugo-theme/static/js/feather.min.js
&amp;gt;f++++++++++ themes/vanilla-bootstrap-hugo-theme/static/js/jquery-3.3.1.slim.min.js

sent 282,877,469 bytes  received 470,944 bytes  9,605,030.95 bytes/sec
total size is 470,527,158  speedup is 1.66
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Will it work?  Let&amp;rsquo;s see&amp;hellip; NOPE.  It does produce a site but the old &amp;ldquo;Kaldi&amp;rdquo; content is still all I see.  I even changed the &lt;code&gt;backend.branch:&lt;/code&gt; value from &lt;code&gt;main&lt;/code&gt; to &lt;code&gt;wieting&lt;/code&gt;, but that did nothing.  So, I&amp;rsquo;ve captured the output here so that I can have a look at what&amp;rsquo;s happening.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹wieting*› 
╰─$ npm start                               

&amp;gt; static-cms-hugo-netlify-template@1.0.0 start
&amp;gt; run-p start:**


&amp;gt; static-cms-hugo-netlify-template@1.0.0 start:webpack
&amp;gt; webpack-dev-server --config webpack.dev.js --hot --stats-error-details


&amp;gt; static-cms-hugo-netlify-template@1.0.0 start:hugo
&amp;gt; hugo -d ../dist -s site -vw

WARN  --verbose was deprecated in Hugo v0.114.0 and will be removed in a future release. use --logLevel info
Start building sites … 
hugo v0.120.1-16fb2cae88eb6add7d12e9fbfcf01d8670e60a35 darwin/amd64 BuildDate=2023-10-30T16:44:31Z VendorInfo=gohugoio

INFO  copy static: syncing static files to /
INFO  build: running step process duration 4.236952ms
INFO  build: running step assemble duration 13.684119ms
WARN  found no layout file for &amp;quot;json&amp;quot; for kind &amp;quot;section&amp;quot;: You should create a template file which matches Hugo Layouts Lookup Rules for this combination.
INFO  build: running step render duration 58.753135ms
INFO  build: running step postProcess duration 8.744µs

                   | EN   
-------------------+------
  Pages            |  66  
  Paginator pages  |   7  
  Non-page files   |   0  
  Static files     | 541  
  Processed images |   0  
  Aliases          |   7  
  Sitemaps         |   1  
  Cleaned          |   0  

Built in 579 ms
Watching for changes in /Users/mark/GitHub/static-cms-hugo-local-template/site/{archetypes,content,data,layouts,package.json,static,themes}
Watching for config changes in /Users/mark/GitHub/static-cms-hugo-local-template/site/config.toml, /Users/mark/GitHub/static-cms-hugo-local-template/site/config/_default
Press Ctrl+C to stop
&amp;lt;i&amp;gt; [webpack-dev-server] Project is running at:
&amp;lt;i&amp;gt; [webpack-dev-server] Loopback: http://localhost:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] On Your Network (IPv4): http://192.168.0.183:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] On Your Network (IPv6): http://[fe80::1]:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] Content not from webpack is served from &#39;/Users/mark/GitHub/static-cms-hugo-local-template/dist&#39; directory
&amp;lt;i&amp;gt; [webpack-dev-server] 404s will fallback to &#39;/index.html&#39;
&amp;lt;i&amp;gt; [webpack-dev-middleware] wait until bundle finished: /
assets by path *.js 18.3 MiB
  asset cms.js 18 MiB [emitted] (name: cms)
  asset main.js 300 KiB [emitted] (name: main)
asset main.css 113 KiB [emitted] (name: main)
asset admin/index.html 521 bytes [emitted]
asset fonts/.keep 0 bytes [emitted] [from: src/fonts/.keep] [copied]
Entrypoint main 413 KiB = main.css 113 KiB main.js 300 KiB
Entrypoint cms 18 MiB = cms.js
runtime modules 72.3 KiB 38 modules
modules by path ./node_modules/ 16.9 MiB 82 modules
modules by path ./src/ 133 KiB (javascript) 113 KiB (css/mini-extract)
  modules by path ./src/js/ 15.2 KiB 9 modules
  modules by path ./src/css/*.scss 118 KiB (javascript) 113 KiB (css/mini-extract)
    ./src/css/main.scss 2.78 KiB [built] [code generated]
    ./node_modules/to-string-loader/src/to-string.js!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/css/main.scss 429 bytes [built] [code generated]
    ./node_modules/mini-css-extract-plugin/dist/loader.js??ruleSet[1].rules[2].use[1]!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/css/main.scss 332 bytes [built] [code generated]
    + 2 modules
  ./src/index.js 124 bytes [built] [code generated]
asset modules 5.46 KiB
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.28 KiB [built] [code generated] [build time executed]
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.33 KiB [built] [code generated] [build time executed]
  data:image/jpeg;base64,/9j/4QAYRXhpZgAA.. 1.55 KiB [built] [code generated] [build time executed]
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.3 KiB [built] [code generated] [build time executed]
webpack 5.89.0 compiled successfully in 5563 ms
INFO  Received System Events: [CHMOD         &amp;quot;/Users/mark/GitHub/static-cms-hugo-local-template/site/data/webpack.json&amp;quot; WRITE         &amp;quot;/Users/mark/GitHub/static-cms-hugo-local-template/site/data/webpack.json&amp;quot;]

Change detected, rebuilding site.
2024-01-13 13:15:08.329 -0600
Data changed WRITE         &amp;quot;/Users/mark/GitHub/static-cms-hugo-local-template/site/data/webpack.json&amp;quot;
INFO  build: running step process duration 186.604µs
INFO  build: running step assemble duration 244ns
WARN  found no layout file for &amp;quot;json&amp;quot; for kind &amp;quot;section&amp;quot;: You should create a template file which matches Hugo Layouts Lookup Rules for this combination.
INFO  build: running step render duration 31.514265ms
INFO  build: running step postProcess duration 7.661µs
Total in 31 ms
^C&amp;lt;i&amp;gt; [webpack-dev-server] Gracefully shutting down. To force exit, press ^C again. Please wait...
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;corrections-needed&#34;&gt;Corrections Needed&lt;/h2&gt;
&lt;p&gt;So, the first thing I see here is that the new &lt;code&gt;site&lt;/code&gt; directory contains the template&amp;rsquo;s &lt;code&gt;content/_index.md&lt;/code&gt; file which naturally becomes the site&amp;rsquo;s home page.  It contains only &amp;ldquo;Kaldi&amp;rdquo; content. So I tried removing that &lt;code&gt;_index.md&lt;/code&gt; file and that changed the home page &amp;ldquo;title&amp;rdquo;, but very little else.&lt;/p&gt;
&lt;p&gt;I think returing to the &lt;code&gt;main&lt;/code&gt; branch of this project and starting over again but using only the content of &lt;code&gt;wieting-ss&lt;/code&gt; in the new &lt;code&gt;site/&lt;/code&gt; directory might be wise.  I did it like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub
╰─$ rm -fr static-cms-hugo-local-template
╭─mark@Marks-Mac-Mini ~/GitHub
╰─$ git clone https://github.com/Summitt-Services/static-cms-hugo-local-template.git
Cloning into &#39;static-cms-hugo-local-template&#39;...
remote: Enumerating objects: 574, done.
remote: Counting objects: 100% (155/155), done.
remote: Compressing objects: 100% (50/50), done.
remote: Total 574 (delta 122), reused 125 (delta 102), pack-reused 419
Receiving objects: 100% (574/574), 22.14 MiB | 23.94 MiB/s, done.
Resolving deltas: 100% (248/248), done.
╭─mark@Marks-Mac-Mini ~/GitHub
╰─$ cd static-cms-hugo-local-template
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main›
╰─$ cp -fr site/static/admin ~
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main›
╰─$ rm -fr site
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main*›
╰─$ mkdir site
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main*›
╰─$ cp -fr ../wieting-ss/. site/.
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main*›
╰─$ cp -f ~/admin/config.yml site/static/admin/.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next I launched the proxy server like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main*›
╰─$ npx @staticcms/proxy-server
info: Static CMS File System Proxy Server configured with /Users/mark/GitHub/static-cms-hugo-local-template
info: Static CMS Proxy Server listening on port 8082
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then in my &lt;em&gt;VSCode&lt;/em&gt; terminal this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main*› 
╰─$ npm start

&amp;gt; static-cms-hugo-netlify-template@1.0.0 start
&amp;gt; run-p start:**


&amp;gt; static-cms-hugo-netlify-template@1.0.0 start:webpack
&amp;gt; webpack-dev-server --config webpack.dev.js --hot --stats-error-details


&amp;gt; static-cms-hugo-netlify-template@1.0.0 start:hugo
&amp;gt; hugo -d ../dist -s site -vw

WARN  --verbose was deprecated in Hugo v0.114.0 and will be removed in a future release. use --logLevel info
Start building sites … 
hugo v0.120.1-16fb2cae88eb6add7d12e9fbfcf01d8670e60a35 darwin/amd64 BuildDate=2023-10-30T16:44:31Z VendorInfo=gohugoio

INFO  copy static: syncing static files to /
INFO  build: running step process duration 3.193622ms
INFO  build: running step assemble duration 25.748629ms
WARN  found no layout file for &amp;quot;json&amp;quot; for kind &amp;quot;section&amp;quot;: You should create a template file which matches Hugo Layouts Lookup Rules for this combination.
INFO  build: running step render duration 70.992512ms
INFO  build: running step postProcess duration 9.94µs
&amp;lt;i&amp;gt; [webpack-dev-server] Project is running at:
&amp;lt;i&amp;gt; [webpack-dev-server] Loopback: http://localhost:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] On Your Network (IPv4): http://192.168.0.183:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] On Your Network (IPv6): http://[fe80::1]:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] Content not from webpack is served from &#39;/Users/mark/GitHub/static-cms-hugo-local-template/dist&#39; directory
&amp;lt;i&amp;gt; [webpack-dev-server] 404s will fallback to &#39;/index.html&#39;

                   | EN   
-------------------+------
  Pages            |  57  
  Paginator pages  |   0  
  Non-page files   |   0  
  Static files     | 499  
  Processed images |   0  
  Aliases          |   1  
  Sitemaps         |   1  
  Cleaned          |   0  

Built in 1034 ms
Watching for changes in /Users/mark/GitHub/static-cms-hugo-local-template/site/{archetypes,content,layouts,package.json,static,themes}
Watching for config changes in /Users/mark/GitHub/static-cms-hugo-local-template/site/config/_default
Press Ctrl+C to stop
&amp;lt;i&amp;gt; [webpack-dev-middleware] wait until bundle finished: /
assets by path *.js 18.3 MiB
  asset cms.js 18 MiB [emitted] (name: cms)
  asset main.js 300 KiB [emitted] (name: main)
asset main.css 113 KiB [emitted] (name: main)
asset admin/index.html 521 bytes [emitted]
asset fonts/.keep 0 bytes [emitted] [from: src/fonts/.keep] [copied]
Entrypoint main 413 KiB = main.css 113 KiB main.js 300 KiB
Entrypoint cms 18 MiB = cms.js
runtime modules 72.3 KiB 38 modules
modules by path ./node_modules/ 16.9 MiB 82 modules
modules by path ./src/ 133 KiB (javascript) 113 KiB (css/mini-extract)
  modules by path ./src/js/ 15.2 KiB 9 modules
  modules by path ./src/css/*.scss 118 KiB (javascript) 113 KiB (css/mini-extract)
    ./src/css/main.scss 2.78 KiB [built] [code generated]
    ./node_modules/to-string-loader/src/to-string.js!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/css/main.scss 429 bytes [built] [code generated]
    ./node_modules/mini-css-extract-plugin/dist/loader.js??ruleSet[1].rules[2].use[1]!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/css/main.scss 332 bytes [built] [code generated]
    + 2 modules
  ./src/index.js 124 bytes [built] [code generated]
asset modules 5.46 KiB
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.28 KiB [built] [code generated] [build time executed]
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.33 KiB [built] [code generated] [build time executed]
  data:image/jpeg;base64,/9j/4QAYRXhpZgAA.. 1.55 KiB [built] [code generated] [build time executed]
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.3 KiB [built] [code generated] [build time executed]
webpack 5.89.0 compiled successfully in 6771 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Again, it works.  Only this time the Wieting website appears at &lt;a href=&#34;http://localhost:3000&#34;&gt;http://localhost:3000&lt;/a&gt; and &lt;a href=&#34;http://localhost:3000/admin&#34;&gt;http://localhost:3000/admin&lt;/a&gt; works too, but with the wrong configuration.  Still, that&amp;rsquo;s a WIN!&lt;/p&gt;
&lt;h2 id=&#34;time-to-save-my-progress&#34;&gt;Time To Save My Progress&lt;/h2&gt;
&lt;p&gt;I really don&amp;rsquo;t want to dump 4000+ new files, many of them specific to the Wieting website, into my pristine (and working) &lt;a href=&#34;https://github.com/Summitt-Services/static-cms-hugo-local-template&#34;&gt;https://github.com/Summitt-Services/static-cms-hugo-local-template&lt;/a&gt; GitHub repository.  So, I&amp;rsquo;m going to clean up my local project by removing that which is no longer needed, and then I&amp;rsquo;m going to remove the &lt;code&gt;.git&lt;/code&gt; directory and create/populate a new &lt;a href=&#34;https://github.com/SummittDweller/wieting-staticCMS&#34;&gt;wieting-staticCMS&lt;/a&gt; private repository.  After creating that empty repository the process looked like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main*› 
╰─$ rm -fr site/.git 
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template ‹main*› 
╰─$ rm -fr .git
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template 
╰─$ git init
Initialized empty Git repository in /Users/mark/GitHub/static-cms-hugo-local-template/.git/
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template 
╰─$ git add .
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template 
╰─$ git commit -m &amp;quot;first commit&amp;quot;
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template 
╰─$ git branch -M main
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template 
╰─$ git remote add origin https://github.com/SummittDweller/wieting-staticCMS.git
╭─mark@Marks-Mac-Mini ~/GitHub/static-cms-hugo-local-template 
╰─$ git push -u origin main
...
Enumerating objects: 2979, done.
Counting objects: 100% (2979/2979), done.
Delta compression using up to 6 threads
Compressing objects: 100% (2855/2855), done.
Writing objects: 100% (2979/2979), 95.87 MiB | 2.65 MiB/s, done.
Total 2979 (delta 638), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (638/638), done.
To https://github.com/SummittDweller/wieting-staticCMS.git
 * [new branch]      main -&amp;gt; main
branch &#39;main&#39; set up to track &#39;origin/main&#39;.
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;wieting-staticcms&#34;&gt;wieting-staticCMS&lt;/h1&gt;
&lt;p&gt;With the new GitHub repo in place let&amp;rsquo;s take it for a local spin.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub
╰─$ git clone https://github.com/SummittDweller/wieting-staticCMS.git
Cloning into &#39;wieting-staticCMS&#39;...
remote: Enumerating objects: 2979, done.
remote: Total 2979 (delta 0), reused 0 (delta 0), pack-reused 2979
Receiving objects: 100% (2979/2979), 95.87 MiB | 26.77 MiB/s, done.
Resolving deltas: 100% (638/638), done.
Updating files: 100% (4834/4834), done.
╭─mark@Marks-Mac-Mini ~/GitHub
╰─$ cd wieting-staticCMS
╭─mark@Marks-Mac-Mini ~/GitHub/wieting-staticCMS ‹main›
╰─$ npm install
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.

added 1567 packages, and audited 1568 packages in 1m

426 packages are looking for funding
  run `npm fund` for details

2 moderate severity vulnerabilities

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
╭─mark@Marks-Mac-Mini ~/GitHub/wieting-staticCMS ‹main›
╰─$ npx @staticcms/proxy-server
info: Static CMS File System Proxy Server configured with /Users/mark/GitHub/wieting-staticCMS
info: Static CMS Proxy Server listening on port 8082
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, in a differnt terminal window&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/wieting-staticCMS ‹main›
╰─$ npm start

&amp;gt; static-cms-hugo-netlify-template@1.0.0 start
&amp;gt; run-p start:**


&amp;gt; static-cms-hugo-netlify-template@1.0.0 start:hugo
&amp;gt; hugo -d ../dist -s site -vw


&amp;gt; static-cms-hugo-netlify-template@1.0.0 start:webpack
&amp;gt; webpack-dev-server --config webpack.dev.js --hot --stats-error-details

WARN  --verbose was deprecated in Hugo v0.114.0 and will be removed in a future release. use --logLevel info
Start building sites …
hugo v0.120.1-16fb2cae88eb6add7d12e9fbfcf01d8670e60a35 darwin/amd64 BuildDate=2023-10-30T16:44:31Z VendorInfo=gohugoio

INFO  copy static: syncing static files to /
INFO  build: running step process duration 3.975463ms
INFO  build: running step assemble duration 19.211854ms
WARN  found no layout file for &amp;quot;json&amp;quot; for kind &amp;quot;section&amp;quot;: You should create a template file which matches Hugo Layouts Lookup Rules for this combination.
INFO  build: running step render duration 54.091014ms
INFO  build: running step postProcess duration 8.597µs

                   | EN
-------------------+------
  Pages            |  57
  Paginator pages  |   0
  Non-page files   |   0
  Static files     | 499
  Processed images |   0
  Aliases          |   1
  Sitemaps         |   1
  Cleaned          |   0

Built in 717 ms
Watching for changes in /Users/mark/GitHub/wieting-staticCMS/site/{archetypes,content,layouts,package.json,static,themes}
Watching for config changes in /Users/mark/GitHub/wieting-staticCMS/site/config/_default
Press Ctrl+C to stop
&amp;lt;i&amp;gt; [webpack-dev-server] Project is running at:
&amp;lt;i&amp;gt; [webpack-dev-server] Loopback: http://localhost:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] On Your Network (IPv4): http://192.168.0.183:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] On Your Network (IPv6): http://[fe80::1]:3000/
&amp;lt;i&amp;gt; [webpack-dev-server] Content not from webpack is served from &#39;/Users/mark/GitHub/wieting-staticCMS/dist&#39; directory
&amp;lt;i&amp;gt; [webpack-dev-server] 404s will fallback to &#39;/index.html&#39;
&amp;lt;i&amp;gt; [webpack-dev-middleware] wait until bundle finished: /
assets by path *.js 18.3 MiB
  asset cms.js 18 MiB [emitted] (name: cms)
  asset main.js 300 KiB [emitted] (name: main)
asset main.css 113 KiB [emitted] (name: main)
asset admin/index.html 521 bytes [emitted]
asset fonts/.keep 0 bytes [emitted] [from: src/fonts/.keep] [copied]
Entrypoint main 413 KiB = main.css 113 KiB main.js 300 KiB
Entrypoint cms 18 MiB = cms.js
runtime modules 72.3 KiB 38 modules
modules by path ./node_modules/ 16.9 MiB 82 modules
modules by path ./src/ 133 KiB (javascript) 113 KiB (css/mini-extract)
  modules by path ./src/js/ 15.2 KiB 9 modules
  modules by path ./src/css/*.scss 118 KiB (javascript) 113 KiB (css/mini-extract)
    ./src/css/main.scss 2.78 KiB [built] [code generated]
    ./node_modules/to-string-loader/src/to-string.js!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/css/main.scss 429 bytes [built] [code generated]
    ./node_modules/mini-css-extract-plugin/dist/loader.js??ruleSet[1].rules[2].use[1]!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/css/main.scss 332 bytes [built] [code generated]
    + 2 modules
  ./src/index.js 124 bytes [built] [code generated]
asset modules 5.46 KiB
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.28 KiB [built] [code generated] [build time executed]
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.33 KiB [built] [code generated] [build time executed]
  data:image/jpeg;base64,/9j/4QAYRXhpZgAA.. 1.55 KiB [built] [code generated] [build time executed]
  data:image/png;base64,iVBORw0KGgoAAAAN.. 1.3 KiB [built] [code generated] [build time executed]
webpack 5.89.0 compiled successfully in 6051 ms
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And again, &lt;strong&gt;IT WORKS!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Time to merge the old CMS config from &lt;code&gt;site/static/.admin-netlify/config.yml&lt;/code&gt; into the new config at &lt;code&gt;site/static/admin/config.yml&lt;/code&gt;.   Then a few changes will be needed since the site&amp;rsquo;s content structure has changed somewhat from the old days.  &lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Time for a New Static CMS Approach</title>
        <link>https://blog.summittdweller.com/microposts/2023/12/time-for-a-new-static-cms-approach/</link>
        <pubDate>Sat, 23 Dec 2023 12:04:41 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/12/time-for-a-new-static-cms-approach/</guid>
        <description>&lt;p&gt;Wow, it&amp;rsquo;s been way too long since I posted here.  So much has happened, and been missed along the way.  Time to fix that and I&amp;rsquo;m going to start with a re-write of the &lt;a href=&#34;https://wieting.TamaToledo.com&#34;&gt;Wieting Theatre website&lt;/a&gt; using &lt;a href=&#34;https://www.npmjs.com/package/@staticcms/core&#34;&gt;staticcms/core&lt;/a&gt;.  Watch for a full blog post coming soon!&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Improving My Azure Blob Storage</title>
        <link>https://blog.summittdweller.com/microposts/2023/11/improving-my-azure-blob-storage/</link>
        <pubDate>Mon, 20 Nov 2023 19:00:04 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/11/improving-my-azure-blob-storage/</guid>
        <description>&lt;p&gt;I use Azure Blob Storage quite a bit these days, at work and here at home.  Recently a student I&amp;rsquo;ve been working with turned my attention to &lt;a href=&#34;https://learn.microsoft.com/en-us/training/modules/blob-storage-image-upload-static-web-apps/1-introduction&#34;&gt;this post from Microsoft&lt;/a&gt; and this week I&amp;rsquo;m going to take a crack at putting it to use, perhaps in association with this blog.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Building My First Steamlit App</title>
        <link>https://blog.summittdweller.com/posts/2023/07/building-my-first-steamlit-app/</link>
        <pubDate>Mon, 24 Jul 2023 18:44:51 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2023/07/building-my-first-steamlit-app/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve been wanting to give &lt;a href=&#34;https://streamlit.io/&#34;&gt;Streamlit&lt;/a&gt; a try for some time now.  Recently, I found &lt;a href=&#34;https://github.com/Jcharis/Streamlit_DataScience_Apps&#34;&gt;Streamlit DataScience Apps&lt;/a&gt;, a &lt;em&gt;GitHub&lt;/em&gt; repo full of &lt;em&gt;Streamlit&lt;/em&gt; apps, written by &lt;a href=&#34;https://github.com/Jcharis/Streamlit_DataScience_Apps/commits?author=Jcharis&#34;&gt;Jcharis&lt;/a&gt;.  In particular, I thought I would take the &lt;a href=&#34;https://github.com/Jcharis/Streamlit_DataScience_Apps/tree/master/Job_Search_App_with_Streamlit_Forms_n_GithubAPI&#34;&gt;Job_Search_App_with_Streamlit_Forms_n_GithubAPI&lt;/a&gt; code for a spin.&lt;/p&gt;
&lt;p&gt;First step, I created a new &lt;code&gt;~/GitHub/&lt;/code&gt; code directory on my Mac; I named my directory &lt;code&gt;~/GitHub/job-search-app-with-streamlit-forms&lt;/code&gt;.  The plan was to work in that directory inside &lt;em&gt;VSCode&lt;/em&gt; with all the project requirements housed in a Python virtual environment (&lt;code&gt;.venv&lt;/code&gt;) there.&lt;/p&gt;
&lt;p&gt;The command stream in my terminal looked like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~
╰─$ cd ~/GitHub
╭─mark@Marks-Mac-Mini ~/GitHub
╰─$ mkdir job-search-app-with-streamlit-forms
╭─mark@Marks-Mac-Mini ~/GitHub
╰─$ cd job-search-app-with-streamlit-forms
╭─mark@Marks-Mac-Mini ~/GitHub/job-search-app-with-streamlit-forms
╰─$ code .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That last command opened the new directory in &lt;em&gt;VSCode&lt;/em&gt; where I had all the tools I needed, including a new terminal window.  In that window I continued with&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/job-search-app-with-streamlit-forms 
╰─$ python3 -m venv .venv

╭─mark@Marks-Mac-Mini ~/GitHub/job-search-app-with-streamlit-forms 
╰─$ source .venv/bin/activate

(.venv) ╭─mark@Marks-Mac-Mini ~/GitHub/job-search-app-with-streamlit-forms 
╰─$ pip3 install streamlit

Collecting streamlit
  Downloading streamlit-1.25.0-py2.py3-none-any.whl (8.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 26.6 MB/s eta 0:00:00
Collecting altair&amp;lt;6,&amp;gt;=4.0
  Downloading altair-5.0.1-py3-none-any.whl (471 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 471.5/471.5 kB 13.9 MB/s eta 0:00:00
Collecting blinker&amp;lt;2,&amp;gt;=1.0.0
  Downloading blinker-1.6.2-py3-none-any.whl (13 kB)
Collecting cachetools&amp;lt;6,&amp;gt;=4.0
  Downloading cachetools-5.3.1-py3-none-any.whl (9.3 kB)
Collecting click&amp;lt;9,&amp;gt;=7.0
  Downloading click-8.1.6-py3-none-any.whl (97 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 kB 3.7 MB/s eta 0:00:00
Collecting importlib-metadata&amp;lt;7,&amp;gt;=1.4
  Downloading importlib_metadata-6.8.0-py3-none-any.whl (22 kB)
Collecting numpy&amp;lt;2,&amp;gt;=1.19.3
  Downloading numpy-1.25.1-cp311-cp311-macosx_10_9_x86_64.whl (20.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 20.0/20.0 MB 30.2 MB/s eta 0:00:00
Collecting packaging&amp;lt;24,&amp;gt;=16.8
  Downloading packaging-23.1-py3-none-any.whl (48 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.9/48.9 kB 1.6 MB/s eta 0:00:00
Collecting pandas&amp;lt;3,&amp;gt;=1.3.0
  Downloading pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl (11.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.6/11.6 MB 38.2 MB/s eta 0:00:00
Collecting pillow&amp;lt;10,&amp;gt;=7.1.0
  Downloading Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl (3.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 23.5 MB/s eta 0:00:00
Collecting protobuf&amp;lt;5,&amp;gt;=3.20
  Downloading protobuf-4.23.4-cp37-abi3-macosx_10_9_universal2.whl (400 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 400.3/400.3 kB 12.9 MB/s eta 0:00:00
Collecting pyarrow&amp;gt;=6.0
  Downloading pyarrow-12.0.1-cp311-cp311-macosx_10_14_x86_64.whl (24.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.7/24.7 MB 19.0 MB/s eta 0:00:00
Collecting pympler&amp;lt;2,&amp;gt;=0.9
  Downloading Pympler-1.0.1-py3-none-any.whl (164 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 164.8/164.8 kB 5.9 MB/s eta 0:00:00
Collecting python-dateutil&amp;lt;3,&amp;gt;=2.7.3
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 7.9 MB/s eta 0:00:00
Collecting requests&amp;lt;3,&amp;gt;=2.18
  Downloading requests-2.31.0-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.6/62.6 kB 2.3 MB/s eta 0:00:00
Collecting rich&amp;lt;14,&amp;gt;=10.14.0
  Downloading rich-13.4.2-py3-none-any.whl (239 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 239.4/239.4 kB 8.8 MB/s eta 0:00:00
Collecting tenacity&amp;lt;9,&amp;gt;=8.1.0
  Downloading tenacity-8.2.2-py3-none-any.whl (24 kB)
Collecting toml&amp;lt;2,&amp;gt;=0.10.1
  Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
Collecting typing-extensions&amp;lt;5,&amp;gt;=4.1.0
  Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
Collecting tzlocal&amp;lt;5,&amp;gt;=1.1
  Downloading tzlocal-4.3.1-py3-none-any.whl (20 kB)
Collecting validators&amp;lt;1,&amp;gt;=0.2
  Downloading validators-0.20.0.tar.gz (30 kB)
  Preparing metadata (setup.py) ... done
Collecting gitpython!=3.1.19,&amp;lt;4,&amp;gt;=3.0.7
  Downloading GitPython-3.1.32-py3-none-any.whl (188 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.5/188.5 kB 6.9 MB/s eta 0:00:00
Collecting pydeck&amp;lt;1,&amp;gt;=0.8
  Downloading pydeck-0.8.0-py2.py3-none-any.whl (4.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.7/4.7 MB 28.7 MB/s eta 0:00:00
Collecting tornado&amp;lt;7,&amp;gt;=6.0.3
  Downloading tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl (422 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 422.6/422.6 kB 12.7 MB/s eta 0:00:00
Collecting jinja2
  Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 kB 5.4 MB/s eta 0:00:00
Collecting jsonschema&amp;gt;=3.0
  Downloading jsonschema-4.18.4-py3-none-any.whl (80 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.0/81.0 kB 3.0 MB/s eta 0:00:00
Collecting toolz
  Downloading toolz-0.12.0-py3-none-any.whl (55 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 55.8/55.8 kB 2.1 MB/s eta 0:00:00
Collecting gitdb&amp;lt;5,&amp;gt;=4.0.1
  Downloading gitdb-4.0.10-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.7/62.7 kB 2.1 MB/s eta 0:00:00
Collecting zipp&amp;gt;=0.5
  Downloading zipp-3.16.2-py3-none-any.whl (7.2 kB)
Collecting pytz&amp;gt;=2020.1
  Using cached pytz-2023.3-py2.py3-none-any.whl (502 kB)
Collecting tzdata&amp;gt;=2022.1
  Downloading tzdata-2023.3-py2.py3-none-any.whl (341 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 341.8/341.8 kB 10.8 MB/s eta 0:00:00
Collecting six&amp;gt;=1.5
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting charset-normalizer&amp;lt;4,&amp;gt;=2
  Downloading charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl (125 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.1/125.1 kB 4.5 MB/s eta 0:00:00
Collecting idna&amp;lt;4,&amp;gt;=2.5
  Downloading idna-3.4-py3-none-any.whl (61 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 kB 2.1 MB/s eta 0:00:00
Collecting urllib3&amp;lt;3,&amp;gt;=1.21.1
  Downloading urllib3-2.0.4-py3-none-any.whl (123 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.9/123.9 kB 4.5 MB/s eta 0:00:00
Collecting certifi&amp;gt;=2017.4.17
  Downloading certifi-2023.7.22-py3-none-any.whl (158 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 158.3/158.3 kB 5.7 MB/s eta 0:00:00
Collecting markdown-it-py&amp;gt;=2.2.0
  Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.5/87.5 kB 3.3 MB/s eta 0:00:00
Collecting pygments&amp;lt;3.0.0,&amp;gt;=2.13.0
  Downloading Pygments-2.15.1-py3-none-any.whl (1.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 23.0 MB/s eta 0:00:00
Collecting pytz-deprecation-shim
  Downloading pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl (15 kB)
Collecting decorator&amp;gt;=3.4.0
  Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)
Collecting smmap&amp;lt;6,&amp;gt;=3.0.1
  Downloading smmap-5.0.0-py3-none-any.whl (24 kB)
Collecting MarkupSafe&amp;gt;=2.0
  Downloading MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl (13 kB)
Collecting attrs&amp;gt;=22.2.0
  Downloading attrs-23.1.0-py3-none-any.whl (61 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.2/61.2 kB 2.1 MB/s eta 0:00:00
Collecting jsonschema-specifications&amp;gt;=2023.03.6
  Downloading jsonschema_specifications-2023.7.1-py3-none-any.whl (17 kB)
Collecting referencing&amp;gt;=0.28.4
  Downloading referencing-0.30.0-py3-none-any.whl (25 kB)
Collecting rpds-py&amp;gt;=0.7.1
  Downloading rpds_py-0.9.2-cp311-cp311-macosx_10_7_x86_64.whl (311 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 311.9/311.9 kB 9.3 MB/s eta 0:00:00
Collecting mdurl~=0.1
  Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Installing collected packages: pytz, zipp, urllib3, tzdata, typing-extensions, tornado, toolz, toml, tenacity, smmap, six, rpds-py, pympler, pygments, protobuf, pillow, packaging, numpy, mdurl, MarkupSafe, idna, decorator, click, charset-normalizer, certifi, cachetools, blinker, attrs, validators, requests, referencing, pytz-deprecation-shim, python-dateutil, pyarrow, markdown-it-py, jinja2, importlib-metadata, gitdb, tzlocal, rich, pydeck, pandas, jsonschema-specifications, gitpython, jsonschema, altair, streamlit
  DEPRECATION: validators is being installed using the legacy &#39;setup.py install&#39; method, because it does not have a &#39;pyproject.toml&#39; and the &#39;wheel&#39; package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the &#39;--use-pep517&#39; option. Discussion can be found at https://github.com/pypa/pip/issues/8559
  Running setup.py install for validators ... done
Successfully installed MarkupSafe-2.1.3 altair-5.0.1 attrs-23.1.0 blinker-1.6.2 cachetools-5.3.1 certifi-2023.7.22 charset-normalizer-3.2.0 click-8.1.6 decorator-5.1.1 gitdb-4.0.10 gitpython-3.1.32 idna-3.4 importlib-metadata-6.8.0 jinja2-3.1.2 jsonschema-4.18.4 jsonschema-specifications-2023.7.1 markdown-it-py-3.0.0 mdurl-0.1.2 numpy-1.25.1 packaging-23.1 pandas-2.0.3 pillow-9.5.0 protobuf-4.23.4 pyarrow-12.0.1 pydeck-0.8.0 pygments-2.15.1 pympler-1.0.1 python-dateutil-2.8.2 pytz-2023.3 pytz-deprecation-shim-0.1.0.post0 referencing-0.30.0 requests-2.31.0 rich-13.4.2 rpds-py-0.9.2 six-1.16.0 smmap-5.0.0 streamlit-1.25.0 tenacity-8.2.2 toml-0.10.2 toolz-0.12.0 tornado-6.3.2 typing-extensions-4.7.1 tzdata-2023.3 tzlocal-4.3.1 urllib3-2.0.4 validators-0.20.0 zipp-3.16.2

[notice] A new release of pip is available: 23.0.1 -&amp;gt; 23.2.1
[notice] To update, run: pip install --upgrade pip

(.venv) ╭─mark@Marks-Mac-Mini ~/GitHub/job-search-app-with-streamlit-forms 
╰─$ pip install --upgrade pip

Requirement already satisfied: pip in ./.venv/lib/python3.11/site-packages (23.0.1)
Collecting pip
  Downloading pip-23.2.1-py3-none-any.whl (2.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 12.6 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.0.1
    Uninstalling pip-23.0.1:
      Successfully uninstalled pip-23.0.1
Successfully installed pip-23.2.1

(.venv) ╭─mark@Marks-Mac-Mini ~/GitHub/job-search-app-with-streamlit-forms 
╰─$ pip3 install requests

Requirement already satisfied: requests in ./.venv/lib/python3.11/site-packages (2.31.0)
Requirement already satisfied: charset-normalizer&amp;lt;4,&amp;gt;=2 in ./.venv/lib/python3.11/site-packages (from requests) (3.2.0)
Requirement already satisfied: idna&amp;lt;4,&amp;gt;=2.5 in ./.venv/lib/python3.11/site-packages (from requests) (3.4)
Requirement already satisfied: urllib3&amp;lt;3,&amp;gt;=1.21.1 in ./.venv/lib/python3.11/site-packages (from requests) (2.0.4)
Requirement already satisfied: certifi&amp;gt;=2017.4.17 in ./.venv/lib/python3.11/site-packages (from requests) (2023.7.22)

(.venv) ╭─mark@Marks-Mac-Mini ~/GitHub/job-search-app-with-streamlit-forms 
╰─$ streamlit app
Usage: streamlit [OPTIONS] COMMAND [ARGS]...
Try &#39;streamlit --help&#39; for help.

Error: No such command &#39;app&#39;.

(.venv) ╭─mark@Marks-Mac-Mini ~/GitHub/job-search-app-with-streamlit-forms 
╰─$ streamlit run app.py

  You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8501
  Network URL: http://192.168.0.183:8501

  For better performance, install the Watchdog module:

  $ xcode-select --install
  $ pip install watchdog
            
2023-07-24 20:58:17.240 Uncaught app exception
Traceback (most recent call last):
  File &amp;quot;/Users/mark/GitHub/job-search-app-with-streamlit-forms/.venv/lib/python3.11/site-packages/streamlit/runtime/scriptrunner/script_runner.py&amp;quot;, line 552, in _run_script
    exec(code, module.__dict__)
  File &amp;quot;/Users/mark/GitHub/job-search-app-with-streamlit-forms/app.py&amp;quot;, line 116, in &amp;lt;module&amp;gt;
    main()
  File &amp;quot;/Users/mark/GitHub/job-search-app-with-streamlit-forms/app.py&amp;quot;, line 43, in main
    nav1,nav2,nav3 = st.beta_columns([3,2,1])
                     ^^^^^^^^^^^^^^^
AttributeError: module &#39;streamlit&#39; has no attribute &#39;beta_columns&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mackenzie says I need to remove the &lt;code&gt;beta_&lt;/code&gt; in two places in the code&amp;hellip; Done.&lt;/p&gt;
&lt;p&gt;Launching the app again with &lt;code&gt;streamlit run app.py&lt;/code&gt; after a moment or two it works!&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Upgrading Matomo PHP</title>
        <link>https://blog.summittdweller.com/posts/2023/06/upgrading-matomo-php/</link>
        <pubDate>Mon, 12 Jun 2023 19:30:18 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2023/06/upgrading-matomo-php/</guid>
        <description>&lt;p&gt;This afternoon I&amp;rsquo;m adding &lt;code&gt;https://digital.grinnell.edu&lt;/code&gt; (site ID is 17) to my own Matomo instance and I&amp;rsquo;m prompted to upgrade PHP on that Matomo droplet (DigitalOcean).  I did so quite easily following &lt;a href=&#34;https://www.digitalocean.com/community/questions/upgrade-php-from-7-2-to-7-4-on-centos-8-and-apache&#34;&gt;Upgrade PHP from 7.2 to 7.4 on CentOS 8 and Apache&lt;/a&gt;.  I&amp;rsquo;ve also updated my Drupal version, and some modules, in &lt;a href=&#34;https://digital.grinnell.edu&#34;&gt;https://digital.grinnell.edu&lt;/a&gt; along with adding the &lt;code&gt;matomo&lt;/code&gt; module, but that module is now reporting:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    The validation of &amp;quot;http://analytics.summittservices.com/matomo.php&amp;quot; failed with error &amp;quot;Error opening socket ssl://analytics.summittservices.com:443&amp;quot; (HTTP code 0).
    The validation of &amp;quot;https://analytics.summittservices.com/matomo.php&amp;quot; failed with error &amp;quot;Error opening socket ssl://analytics.summittservices.com:443&amp;quot; (HTTP code 0).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hmmm&amp;hellip;wonder what&amp;rsquo;s up with that?&lt;/p&gt;
&lt;p&gt;So, I tried this&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Last login: Mon Jun 12 19:21:45 2023 from 162.243.190.66
[root@centos-s-1vcpu-1gb-nyc1-01 ~]# sudo certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/summittservices.com-0001.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Renewing an existing certificate for summittservices.com and analytics.summittservices.com
Reloading nginx server after certificate renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/summittservices.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Renewing an existing certificate for summittservices.com and www.summittservices.com
Reloading nginx server after certificate renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded: 
  /etc/letsencrypt/live/summittservices.com-0001/fullchain.pem (success)
  /etc/letsencrypt/live/summittservices.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;hellip;and&amp;hellip; NO more validation errors!  Yay!&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Streamlit Apps Fork</title>
        <link>https://blog.summittdweller.com/microposts/2023/06/streamlit-apps-fork/</link>
        <pubDate>Mon, 05 Jun 2023 12:31:46 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/06/streamlit-apps-fork/</guid>
        <description>&lt;p&gt;This morning I found some new &lt;em&gt;Streamlit&lt;/em&gt; resources from developer &lt;strong&gt;Jcharis&lt;/strong&gt;, and I forked his &lt;a href=&#34;https://github.com/Jcharis/Streamlit_DataScience_Apps&#34;&gt;Jcharis/Streamlit_DataScience_Apps&lt;/a&gt; to make my own copy at &lt;a href=&#34;https://github.com/SummittDweller/Streamlit_DataScience_Apps&#34;&gt;SummittDweller/Streamlit_DataScience_Apps&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now I&amp;rsquo;m going to try and get the component &lt;em&gt;Simple_CRuD_Blog_App_with_Streamlit&lt;/em&gt; working locally as a proof-of-concept.  Since I can&amp;rsquo;t &amp;ldquo;clone&amp;rdquo; the single project repo, and a &amp;ldquo;sparse checkout&amp;rdquo; seems wasteful since I&amp;rsquo;ll never push back to the original project, I&amp;rsquo;m going to &lt;code&gt;git init&lt;/code&gt; an entirely new local named &lt;em&gt;simple-CRuD-blog-app-with-streamlit&lt;/em&gt; and just copy/paste the contents.&lt;/p&gt;
&lt;p&gt;It works!&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Fixing Wieting Guild Pages</title>
        <link>https://blog.summittdweller.com/posts/2023/06/fixing-wieting-guild-pages/</link>
        <pubDate>Sat, 03 Jun 2023 23:20:26 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2023/06/fixing-wieting-guild-pages/</guid>
        <description>&lt;p&gt;Just the other day I got an updated copy of the Wieting Theatre&amp;rsquo;s volunteer roster and assignment schedule.  As I&amp;rsquo;m trying to post them to the &lt;a href=&#34;https://wieting-guild.tamatoledo.com&#34;&gt;theatre&amp;rsquo;s management website&lt;/a&gt; (it&amp;rsquo;s password protected) I keep having issues with &lt;code&gt;npm&lt;/code&gt; and dependencies that won&amp;rsquo;t compile.  The fix, thus far has included a local command stream like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd wieting-guild-pages
git pull
code .
npm run build
npm run start 
  --&amp;gt; failed
npm update
npm audit fix
npm run build
npm run start
  --&amp;gt; failed
npm audit fix --force
npm run build
  --&amp;gt; failed
npm install axios
npm run build
  --&amp;gt; failed
npm update
npm run build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The last errors had this in common:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[11ty] Unhandled rejection in promise: (more in DEBUG output)
[11ty] connect ETIMEDOUT 54.243.162.8:443 (via Error)
[11ty] 
[11ty] Original error stack trace: Error: connect ETIMEDOUT 54.243.162.8:443
[11ty]     at AxiosError.from (/Users/mark/GitHub/wieting-guild-pages/node_modules/axios/dist/node/axios.cjs:836:14)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One explanation I found:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The ETIMEDOUT error is thrown by the Node.js runtime when a connection or HTTP request is not closed properly after some time. You might encounter this error from time to time if you configured a timeout on your outgoing HTTP requests. The general solution to this issue is to catch the error and repeat the request, preferably using an exponential backoff strategy so that a waiting period is added between subsequent retries until the request eventually succeeds, or the maximum amount of retries is reached. If you encounter this error frequently, try to investigate your request timeout settings and choose a more appropriate value for the endpoint if possible.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I also found a GitHub issues/bug report related to Axios and this error at &lt;a href=&#34;https://github.com/SillyTavern/SillyTavern/issues/432&#34;&gt;https://github.com/SillyTavern/SillyTavern/issues/432&lt;/a&gt;.  So, maybe it&amp;rsquo;s not just me?&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Streamlit Ghost Azure Resources</title>
        <link>https://blog.summittdweller.com/microposts/2023/06/streamlit-ghost-azure-resources/</link>
        <pubDate>Thu, 01 Jun 2023 13:49:18 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/06/streamlit-ghost-azure-resources/</guid>
        <description>&lt;p&gt;I&amp;rsquo;ve got Mackenzie looking at Streamlit as a means of building a mobile-friendly app that I can use to create posts like this one.  That app will need to allow me to edit  a TITLE and Markdown BODY fields, capture location and time, and post all of that information to my personal blog&amp;hellip; preferably from my cell phone.  I&amp;rsquo;ve captured some possible resources and guidance in &lt;a href=&#34;https://www.one-tab.com/page/71iaDADxT-eLEOx15qeVnQ&#34;&gt;https://www.one-tab.com/page/71iaDADxT-eLEOx15qeVnQ&lt;/a&gt;.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Wrap EVERYTHING in NPM!</title>
        <link>https://blog.summittdweller.com/posts/2023/05/wrap-everything-in-npm/</link>
        <pubDate>Fri, 19 May 2023 22:27:00 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2023/05/wrap-everything-in-npm/</guid>
        <description>&lt;p&gt;So, &lt;code&gt;node&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt; seem to be all the rage these days, and perhaps for good reason.  I recently fell in love with &lt;a href=&#34;https://www.11ty.dev&#34;&gt;Eleventy/11ty&lt;/a&gt; over &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt; because it&amp;rsquo;s Javascript, not Go, and it&amp;rsquo;s elegantly simple with tons of flexibility.  I recently tried to add &lt;em&gt;Pagefind&lt;/em&gt; search to a Hugo static web site (see &lt;a href=&#34;https://static.grinnell.edu/dlad-blog/posts/143-significant-rootstalk-retooling/&#34;&gt;https://static.grinnell.edu/dlad-blog/posts/143-significant-rootstalk-retooling/&lt;/a&gt;).  If &lt;em&gt;Rootstalk&lt;/em&gt;, an Azure Static Web App was framed in &lt;code&gt;node.js&lt;/code&gt;, as both &lt;em&gt;Eleventy&lt;/em&gt; and &lt;em&gt;Pagefind&lt;/em&gt; are, there would be no problem.  The Azure scripts used to deploy those frameworks are far more customizable than Hugo, and there&amp;rsquo;s documentation to prove it.&lt;/p&gt;
&lt;p&gt;So, how might I approach combining Hugo with Pagefind in the cloud?  Well, &lt;a href=&#34;https://web.archive.org/web/20220818082611/https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&#34;&gt;A Powerful Blog Setup with Hugo and NPM&lt;/a&gt;* by Tom Hombergs looked like a promising place to start.  The process that Tom advocates leverages a neat little package called &lt;a href=&#34;https://www.npmjs.com/package/hugo-bin&#34;&gt;hugo-bin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;*&lt;em&gt;The links provided above and below are to a Wayback Machine capture of the original post.&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;that-was-too-easy&#34;&gt;That Was Too Easy!&lt;/h1&gt;
&lt;p&gt;Wrapping my Hugo site in an NPM package was so easy that I forgot to document it&amp;hellip; and maybe I really didn&amp;rsquo;t need too.  Time to catch up, so here&amp;rsquo;s a brief sysnopsis of what I did&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;following-toms-excellent-advice&#34;&gt;Following Tom&amp;rsquo;s Excellent Advice&lt;/h2&gt;
&lt;p&gt;I started by studying &lt;a href=&#34;https://web.archive.org/web/20220818082611/https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&#34;&gt;A Powerful Blog Setup with Hugo and NPM&lt;/a&gt; and quickly found that I could easily follow it almost verbatim.  Since I already had &lt;code&gt;npm&lt;/code&gt; and &lt;code&gt;Hugo&lt;/code&gt; installed I skipped ahead to the section titled &amp;ldquo;Setting Up a Hugo Project&amp;rdquo; and then to the &lt;code&gt;npx&lt;/code&gt; and &lt;code&gt;git&lt;/code&gt; commands there.  My experience, mostly in commands, looked like this on my Mac Mini workstation.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~/GitHub/
# Named the new project npm-rootstalk so it would not confilct with any of my existing `rootstalk...` directories
mkdir npm-rootstalk      
cd npm-rootstalk
npx hugo new site . --force
# Copied the contents of my old project into the new one and then removed whatever I no longer needed
cp -fr ~/GitHub/rootstalk/. .  
# Installed Pagefind...
npm install pagefind
git init
# I created a new empty repo in GitHub called npm-rootstalk, then...
git remote add origin https://github.com/Digital-Grinnell/npm-rootstalk 
git add . 
git commit -m &amp;quot;Initial commit of new npm-wrapped Hugo project&amp;quot;
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Having secured a new repo I moved to running Hugo locally, then polishing my &lt;code&gt;package.json&lt;/code&gt; scripts as Tom did.  I now have a &lt;code&gt;package.json&lt;/code&gt; that reads like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;name&amp;quot;: &amp;quot;npm-rootstalk&amp;quot;,
  &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,
  &amp;quot;description&amp;quot;: &amp;quot;Rootstalk website built with Hugo and the Lightbi theme inside an NPM package.  May 2023.&amp;quot;,
  &amp;quot;main&amp;quot;: &amp;quot;index.js&amp;quot;,
  &amp;quot;scripts&amp;quot;: {
    &amp;quot;test&amp;quot;: &amp;quot;echo \&amp;quot;Error: no test specified\&amp;quot; &amp;amp;&amp;amp; exit 1&amp;quot;,
    &amp;quot;build&amp;quot;: &amp;quot;npm run hugo:build &amp;amp;&amp;amp; npx pagefind --source public&amp;quot;,
    &amp;quot;do:build&amp;quot;: &amp;quot;hugo -d public &amp;amp;&amp;amp; npx pagefind --source public&amp;quot;,
    &amp;quot;azure:build&amp;quot;: &amp;quot;hugo -d public --baseURL=\&amp;quot;https://yellow-wave-0e513e510.3.azurestaticapps.net/\&amp;quot; &amp;amp;&amp;amp; npx pagefind --source public&amp;quot;,
    &amp;quot;clean&amp;quot;: &amp;quot;npm run hugo:clean&amp;quot;,
    &amp;quot;serve&amp;quot;: &amp;quot;npm run hugo:build &amp;amp;&amp;amp; npx pagefind --source public --bundle-dir ../static/_pagefind &amp;amp;&amp;amp; npm run hugo:serve&amp;quot;,
    &amp;quot;hugo:build&amp;quot;: &amp;quot;hugo -d public&amp;quot;,
    &amp;quot;hugo:serve&amp;quot;: &amp;quot;hugo server&amp;quot;,
    &amp;quot;hugo:clean&amp;quot;: &amp;quot;rm -rf build resources public&amp;quot;
  },
  &amp;quot;author&amp;quot;: &amp;quot;Mark A. McFate&amp;quot;,
  &amp;quot;license&amp;quot;: &amp;quot;ISC&amp;quot;,
  &amp;quot;dependencies&amp;quot;: {
    &amp;quot;hugo-bin&amp;quot;: &amp;quot;^0.102.0&amp;quot;,
    &amp;quot;pagefind&amp;quot;: &amp;quot;^0.12.0&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;it-works&#34;&gt;It Works!&lt;/h1&gt;
&lt;p&gt;Now I just use &lt;code&gt;npm run serve&lt;/code&gt; to build the Hugo site, index it with Pagefind, and serve it locally at &lt;a href=&#34;http://localhost:1313&#34;&gt;http://localhost:1313&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;a-staging-site-in-azure&#34;&gt;A Staging Site in Azure&lt;/h1&gt;
&lt;p&gt;I can simply push changes to the &lt;code&gt;main&lt;/code&gt; branch of the &lt;code&gt;npm-rootstalk&lt;/code&gt; repo to trigger an Azure (aka GitHub Actions) rebuild, indexing and deployment of the site to &lt;a href=&#34;https://yellow-wave-0e513e510.3.azurestaticapps.net/&#34;&gt;this address&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;a-new-production-branch&#34;&gt;A New Production Branch&lt;/h1&gt;
&lt;p&gt;Pushing to production is just as simple, I just have to push changes to the new &lt;code&gt;production&lt;/code&gt; branch of the code and my app spec at DigitalOcean (see below) takes care of building, indexing, and deploying to &lt;a href=&#34;https://rootstalk.grinnell.edu&#34;&gt;https://rootstalk.grinnell.edu&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That DO app spec reads like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alerts:
- rule: DEPLOYMENT_FAILED
- rule: DOMAIN_FAILED
domains:
- domain: rootstalk.grinnell.edu
  type: PRIMARY
- domain: prairiejournal.grinnell.edu
  type: ALIAS
envs:
- key: TZ
  scope: RUN_AND_BUILD_TIME
  value: America/Chicago
- key: HUGO_MATOMO_ID
  scope: RUN_AND_BUILD_TIME
  value: &amp;quot;15&amp;quot;
ingress:
  rules:
  - component:
      name: npm-rootstalk
    match:
      path:
        prefix: /
name: npm-rootstalk
region: nyc
static_sites:
- build_command: npm run build
  environment_slug: node-js
  github:
    branch: production
    deploy_on_push: true
    repo: Digital-Grinnell/npm-rootstalk
  name: npm-rootstalk
  source_dir: /
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;It&amp;rsquo;s heavenly!  And that&amp;rsquo;s all for now.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>First Matomo Update</title>
        <link>https://blog.summittdweller.com/microposts/2023/05/first-matomo-update/</link>
        <pubDate>Mon, 15 May 2023 18:33:16 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/05/first-matomo-update/</guid>
        <description>&lt;p&gt;Been prompted to do this for a couple of weeks so I finally took-the-plunge.  &lt;a href=&#34;https://analytics.summittservices.com/index.php?module=CoreUpdater&amp;amp;action=newVersionAvailable&#34;&gt;https://analytics.summittservices.com/index.php?module=CoreUpdater&amp;amp;action=newVersionAvailable&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Wow, that was way too easy.  I wonder if it really worked?&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>A Pagefind Problem?</title>
        <link>https://blog.summittdweller.com/posts/2023/05/a-pagefind-problem/</link>
        <pubDate>Wed, 10 May 2023 14:33:09 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2023/05/a-pagefind-problem/</guid>
        <description>&lt;h1 id=&#34;not-just-a-hugo-issue&#34;&gt;Not Just a Hugo Issue&lt;/h1&gt;
&lt;p&gt;Take note of the question mark at the end of the title, otherwise it could be somewhat misleading.  This is not really a problem with Hugo, but one with cloud deployment of Hugo static apps, particularly as an Azure Static Web App.&lt;/p&gt;
&lt;h1 id=&#34;the-nutshell&#34;&gt;The Nutshell&lt;/h1&gt;
&lt;p&gt;As you may know from &lt;a href=&#34;https://static.grinnell.edu/dlad-blog/posts/143-significant-rootstalk-retooling/&#34;&gt;post 143&lt;/a&gt;, I have successfully installed and configured &lt;a href=&#34;https://pagefind.app/&#34;&gt;Pagefind&lt;/a&gt; in &lt;a href=&#34;https://rootstalk.grinnell.edu&#34;&gt;Rootstalk&lt;/a&gt;, but thus far it only works locally.  When I try to deploy Pagefind to the cloud, specifically as an Azure Static Web App, I can&amp;rsquo;t make it work because there&amp;rsquo;s no apparent way to invoke the necessary &lt;code&gt;npx pagefind...&lt;/code&gt; command AFTER Hugo compiles the site, but BEFORE the site gets deployed.  Azure leverages GitHub Actions to build Hugo sites, but that process also involves some custom/proprietary Azure scripts.  Therein lies the problem.&lt;/p&gt;
&lt;p&gt;The Azure script auto-detects the presence of a Hugo project, or any one of many other platforms.  That makes the process super-easy to use, but nearly impossible to &amp;ldquo;customize&amp;rdquo;.  Azure does provide some configuration variables to influence the script behavior, most notably there&amp;rsquo;s an &lt;code&gt;app_build_command&lt;/code&gt; variable that looks promising, but it only works for &lt;code&gt;node&lt;/code&gt; builds, and not for Hugo.&lt;/p&gt;
&lt;h1 id=&#34;three-possible-solutions&#34;&gt;Three Possible Solutions&lt;/h1&gt;
&lt;p&gt;I can reasonably see three possible solutions to this dilema.  In order of simplicity they are:&lt;/p&gt;
&lt;h2 id=&#34;1-skip-azure-and-deploy-only-to-digitalocean&#34;&gt;1. Skip Azure and Deploy Only to DigitalOcean&lt;/h2&gt;
&lt;p&gt;Ultimately, Rootstalk&amp;rsquo;s production instance is a DigitalOcean (DO) static web app, Azure is only used for &amp;ldquo;staging&amp;rdquo; of a locally viable Rootstalk instance.  DO doesn&amp;rsquo;t use GitHub Actions, a drawback in my book, so its build script, called an &amp;ldquo;App Spec&amp;rdquo; in DO, is a little more &amp;ldquo;open&amp;rdquo;.  The critical portion of the App Spec I use to deploy Rootstalk in DO reads like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;static_sites:
- build_command: hugo -d public
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s it, just a simple &lt;code&gt;hugo -d public&lt;/code&gt; command.  So, in theory I should be able to just change that to read:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;static_sites:
- build_command: hugo -d public &amp;amp;&amp;amp; npm_config_yes=true npx pagefind --source &amp;quot;public&amp;quot; --bundle-dir ../static/_pagefind
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It&amp;rsquo;s basically just a &amp;ldquo;compound&amp;rdquo; command to run &lt;code&gt;npx&lt;/code&gt; immediately after &lt;code&gt;hugo&lt;/code&gt; is done compiling.&lt;/p&gt;
&lt;p&gt;The problem with this very simple solution, assuming it even works, is that it&amp;rsquo;s somewhat unique to Rootstalk which is already deployed to DigitalOcean.  Other Hugo projects, and I have many like &lt;a href=&#34;https://static.grinnell.edu/dlad-blog&#34;&gt;this blog&lt;/a&gt;, that need Azure or another cloud provider other than DO, would not benefit from this fix.&lt;/p&gt;
&lt;h3 id=&#34;update-12-may-2023-same-problem-exists-in-digitalocean&#34;&gt;Update 12-May-2023: Same Problem Exists in DigitalOcean&lt;/h3&gt;
&lt;p&gt;Well, I tried.  I attempted to push my Pagefind additions to Rootstalk forward directly into production on DigitalOcean.  Unfortunately, that failed in similar fashion to what I saw in Azure.  It all works locally, but DigitalOcean, like Azure, has no way of &amp;ldquo;detecting&amp;rdquo; that my Hugo project has an NPM component, and therefore takes no steps to build NPM or Pagefind into my solution.&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;m moving on to option #2 below.  Wish me luck.&lt;/p&gt;
&lt;h2 id=&#34;2-wrap-hugo-in-npm&#34;&gt;2. Wrap Hugo in &lt;code&gt;npm&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;So, &lt;code&gt;node&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt; seem to be all the rage these days, and perhaps for good reason.  I recently fell in love with &lt;a href=&#34;https://www.11ty.dev&#34;&gt;Eleventy/11ty&lt;/a&gt; because it&amp;rsquo;s Javascript, not Go, and it&amp;rsquo;s elegantly simple with tons of flexibility.  If my Azure Static Web App was framed in &lt;code&gt;node.js&lt;/code&gt;, as both &lt;em&gt;Eleventy&lt;/em&gt; and &lt;em&gt;Pagefind&lt;/em&gt; are, there would be no problem.  The Azure scripts used to deploy those frameworks are far more customizable than Hugo, and there&amp;rsquo;s documentation to prove it.&lt;/p&gt;
&lt;p&gt;So, how might I approach something like this?  Well, &lt;a href=&#34;https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&#34;&gt;A Powerful Blog Setup with Hugo and NPM&lt;/a&gt; by Tom Hombergs looks like a promising place to start.  The process that Tom advocates leverages a neat little package called &lt;a href=&#34;https://www.npmjs.com/package/hugo-bin&#34;&gt;hugo-bin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If strategy #1 fails I&amp;rsquo;ll certainly give this #2 a try.  Even if #1 works, I might give this strategy a spin if/when I re-tool &lt;a href=&#34;https://static.grinnell.edu/dlad-blog&#34;&gt;this blog&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;update-29-may-2023-npm-is-great&#34;&gt;Update 29-May-2023: NPM is GREAT!&lt;/h2&gt;
&lt;p&gt;Since my first option (above) failed very quickly, I moved on to this option and I honestly think I might transition every static site that I have to be wrapped inside NPM, it works wonderfully and is a really attractive solution for so many ills!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to document my experience with NPM wrapped around Hugo and will post that document here soon, probably as &lt;a href=&#34;https://blog.summittdweller.com/wrap-everything-in-npm/&#34;&gt;Wrap EVERYTHING in NPM!&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;3-transition-from-hugo-to-eleventy&#34;&gt;3. Transition from Hugo to Eleventy&lt;/h2&gt;
&lt;p&gt;Reasonable?  Yes.  A lot of work?  That&amp;rsquo;s relative.  The right thing to do?  Probably.&lt;/p&gt;
&lt;p&gt;So, it&amp;rsquo;s already been done, see &lt;a href=&#34;https://blog.summittdweller.com/this-blog-in-eleventy-ghost/&#34;&gt;This Blog in Eleventy + Ghost&lt;/a&gt; and &lt;a href=&#34;https://blog.summittdweller.com/glad-i-found-pagefind/&#34;&gt;Searching for a Search Solution&lt;/a&gt;.  That&amp;rsquo;s all I&amp;rsquo;m going to say about this option, a definite maybe.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;That&amp;rsquo;s all folks&amp;hellip; for now.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Wrapping Hugo in NPM</title>
        <link>https://blog.summittdweller.com/microposts/2023/05/wrapping-hugo-in-npm/</link>
        <pubDate>Tue, 09 May 2023 23:13:09 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/05/wrapping-hugo-in-npm/</guid>
        <description>&lt;p&gt;I ran into a big road block with implementation of Pagefind in &lt;em&gt;Rootstalk&lt;/em&gt; today&amp;hellip; everything works fine in development, but I can&amp;rsquo;t easily deploy to &lt;em&gt;Azure&lt;/em&gt; because there&amp;rsquo;s no way to &amp;ldquo;inject&amp;rdquo; Pagefind into an Azure Static Web App build before the &amp;ldquo;public&amp;rdquo; content gets deployed.  I can generate the Pagefind parts after deployment, but that does me no good.&lt;/p&gt;
&lt;p&gt;Tomorrow I need to have a look at my &lt;em&gt;Rootstalk&lt;/em&gt; DigitalOcean deployment to see if what I already have might work there (DO uses a build script that I can add an &lt;code&gt;npx...&lt;/code&gt; command to).  If that fails I need to look back at &lt;a href=&#34;https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&#34;&gt;https://www.blogtrack.io/blog/powerful-blog-setup-with-hugo-and-npm/&lt;/a&gt; to see if there&amp;rsquo;s a solution there for me.&lt;/p&gt;
&lt;p&gt;-/-/-/&lt;/p&gt;
&lt;p&gt;location: Toledo, IA&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Searching for a Search Solution</title>
        <link>https://blog.summittdweller.com/posts/2023/04/glad-i-found-pagefind/</link>
        <pubDate>Thu, 20 Apr 2023 17:02:00 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2023/04/glad-i-found-pagefind/</guid>
        <description>&lt;p&gt;A few months ago I sat in on a &lt;a href=&#34;https://cfe.dev/sessions/static-search-with-pagefind/&#34;&gt;CFE.dev webinar&lt;/a&gt; and I was really impressed with what I saw.  I made a note to come back and look closer at &lt;a href=&#34;https://pagefind.app/&#34;&gt;Pagefind&lt;/a&gt;, and my new blog &amp;ndash; this blog that you&amp;rsquo;re presumably reading right now &amp;ndash; really needed a search feature, so the &amp;ldquo;Search&amp;rdquo; box on this page (I hope it&amp;rsquo;s there) is the outcome.&lt;/p&gt;
&lt;h2 id=&#34;glad-i-found-pagefind&#34;&gt;Glad I Found Pagefind&lt;/h2&gt;
&lt;p&gt;So, I started looking closely at search options and considered things like &lt;a href=&#34;https://lunrjs.com/&#34;&gt;Lunr&lt;/a&gt;, which I&amp;rsquo;ve used before, and &lt;a href=&#34;https://solr.apache.org/&#34;&gt;Solr&lt;/a&gt;, which I both love and hate (because of its JAVA roots).  Pagefind was, of course, also on that short list and it quickly solidified its position at the top of the list when I found &lt;a href=&#34;https://mikefallows.com/posts/adding-search-to-eleventy-site/&#34;&gt;Adding search to an Eleventy site&lt;/a&gt; by &lt;a href=&#34;https://mikefallows.com/about/&#34;&gt;Mike&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mike doesn&amp;rsquo;t explain the setup in detail, but this comment really resonated with me so I decided to follow the same path:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Weirdly, I&amp;rsquo;ve found that I seem to read the posts on this site more than I write them. I say read, but I just mean referring to the stuff I&amp;rsquo;ve written because it has left my head.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Mike does provide a link to the reference he used, namely &lt;a href=&#34;https://rknight.me/using-pagefind-with-eleventy-for-search/&#34;&gt;Using PageFind with Eleventy for Search&lt;/a&gt; by &lt;a href=&#34;https://rknight.me/&#34;&gt;Robb Knight&lt;/a&gt;.  I found Robb&amp;rsquo;s guidance and experience to be VERY helpful.  Thank you, Robb!&lt;/p&gt;
&lt;h2 id=&#34;implementing-robbs-approach&#34;&gt;Implementing Robb&amp;rsquo;s Approach&lt;/h2&gt;
&lt;p&gt;I won&amp;rsquo;t bother duplicating what Robb explains quite well, but this wasn&amp;rsquo;t a 10-minute solution for me, probably because I&amp;rsquo;m really still learning &lt;em&gt;Javascript&lt;/em&gt; and &lt;em&gt;Eleventy&lt;/em&gt;, and also because I&amp;rsquo;m using a &lt;em&gt;Ghost&lt;/em&gt; back-end with packages managed via &lt;em&gt;Yarn&lt;/em&gt; rather than &lt;em&gt;npm&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;So, in the few sections that follow I&amp;rsquo;ll try to briefly described what&amp;rsquo;s different about my approach versus Robb&amp;rsquo;s, along with what didn&amp;rsquo;t, and what ultimately did work.&lt;/p&gt;
&lt;h2 id=&#34;yarn-not-npm&#34;&gt;&lt;code&gt;yarn&lt;/code&gt;, Not &lt;code&gt;npm&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;The first significant difference I encountered was the requirement that this blog project uses &lt;code&gt;yarn&lt;/code&gt;, not &lt;code&gt;npm&lt;/code&gt; for package management.  Eventually I found that I just needed to replace Robb&amp;rsquo;s &lt;code&gt;npm install pagefind&lt;/code&gt; command with a &lt;code&gt;yarn add pagefind&lt;/code&gt; equivalent.  I don&amp;rsquo;t really understand the details of that difference, but it worked.&lt;/p&gt;
&lt;h2 id=&#34;eleventyafter-never-fires&#34;&gt;eleventy.after Never Fires?&lt;/h2&gt;
&lt;p&gt;The biggest hurdle for me was trying to get this bit of Robb&amp;rsquo;s code to work.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const { execSync } = require(&#39;child_process&#39;)

module.exports = function(eleventyConfig) {
  eleventyConfig.on(&#39;eleventy.after&#39;, () =&amp;gt; {
    execSync(`npx pagefind --source _site --glob \&amp;quot;**/*.html\&amp;quot;`, { encoding: &#39;utf-8&#39; })
  })
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In my case the &lt;code&gt;--source&lt;/code&gt; parameter needed to be &lt;code&gt;dist&lt;/code&gt; since this blog is generated into a directory by that name, and my configuration object is simply &lt;code&gt;config&lt;/code&gt; rather than &lt;code&gt;eleventyConfig&lt;/code&gt;.  I made those simple changes and added my snippet to the &lt;code&gt;.eleventy.js&lt;/code&gt; file, but found that it never triggered.  I even replaced the &lt;code&gt;execSync&lt;/code&gt; function call with a simple &lt;code&gt;console.log&lt;/code&gt; statement and still got nothing.  And still to this day, I have no idea why that didn&amp;rsquo;t work.&lt;/p&gt;
&lt;p&gt;That snippet of code is supposed to be responsible for indexing all of the &lt;code&gt;.html&lt;/code&gt; files after &lt;em&gt;Eleventy&lt;/em&gt; has generated them.  Well, I found out that everything else was working properly, but the &lt;code&gt;_pagefind&lt;/code&gt; bundle generated by that indexing operation was just &amp;ldquo;missing&amp;rdquo;, since the index never was created.  That made me wonder what would happen if I &amp;ldquo;forced&amp;rdquo; the system to index my content in a different manner&amp;hellip;and that wonder ultimately worked.&lt;/p&gt;
&lt;h2 id=&#34;using-npx-pagefind-to-index-content&#34;&gt;Using &lt;code&gt;npx pagefind...&lt;/code&gt; to Index Content&lt;/h2&gt;
&lt;p&gt;Having studied some of the &lt;a href=&#34;https://pagefind.app/docs/&#34;&gt;Pagefind documentation&lt;/a&gt; I wondered what adding some post-processing to my build workflow might do, something like &lt;code&gt;npx pagefind --source dist&lt;/code&gt;?  That ultimately worked, but not in that original form.&lt;/p&gt;
&lt;p&gt;I found that when I ran &lt;code&gt;yarn start&lt;/code&gt; to locally rebuild the site, there was no generated &lt;code&gt;./dist/_pagefind&lt;/code&gt; bundle present, so I got no &amp;ldquo;Search&amp;rdquo; user interface elements, but there was an empty &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; where that belonged.  So, with my localhost instance still running I opened a new terminal and ran &lt;code&gt;npx pagefind --source dist&lt;/code&gt; in the project directory. Voila! The &lt;code&gt;./dist/_pagefind&lt;/code&gt; bundle magically appeared and the &amp;ldquo;Search&amp;rdquo; control was instantly visible in my localhost window!  It was working, and it was beautiful.&lt;/p&gt;
&lt;h2 id=&#34;added-a-pagefind-script-didnt-work&#34;&gt;Added a &lt;code&gt;pagefind&lt;/code&gt; Script&amp;hellip; Didn&amp;rsquo;t Work&lt;/h2&gt;
&lt;p&gt;Ok, with the above breakthrough in-hand I made this addition to the &lt;code&gt;scripts:&lt;/code&gt; key in my &lt;code&gt;package.json&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  &amp;quot;pagefind&amp;quot;: &amp;quot;npx pagefind --source dist&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then I added the following to the end of my &lt;code&gt;steps:&lt;/code&gt; key in &lt;code&gt;.github/workflows/build-and-deploy.yml&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  - run: yarn pagefind
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This worked to some extent, but wasn&amp;rsquo;t reliable and absolutely didn&amp;rsquo;t work when deployed to my &lt;em&gt;DigitalOcean&lt;/em&gt; app.  The inner-workings of &lt;code&gt;yarn&lt;/code&gt; and build caching in these environments is still a DEEP mystery to me!&lt;/p&gt;
&lt;h2 id=&#34;extending-my-encrypt-script&#34;&gt;Extending My &lt;code&gt;encrypt&lt;/code&gt; Script&lt;/h2&gt;
&lt;p&gt;What does work, both locally and on &lt;em&gt;DigitalOcean&lt;/em&gt;, is essentially an &amp;ldquo;extension&amp;rdquo; of my old &lt;code&gt;encrypt&lt;/code&gt; script.  My old build workflow included these two elements of &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;build-and-deploy.yml&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    &amp;quot;encrypt&amp;quot;: &amp;quot;staticrypt ./dist/rebuild.html &#39;***hidden***&#39; --short -o ./dist/rebuild.html -f ./src/auth/login.html -t &#39;Summitt Dweller Blog - Rebuild&#39; -i &#39;Please enter the passphrase.&amp;lt;br/&amp;gt;Hint: gh0st&#39; --label-error &#39;Sorry, Ella says no. Try again.&#39;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;hellip;and&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  - run: yarn encrypt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I took note of the relative path spec for &lt;code&gt;./dist/rebuild.html&lt;/code&gt; in the &lt;code&gt;encrypt&lt;/code&gt; command, reasoned that I should run &lt;code&gt;pagefind&lt;/code&gt; in a similar fashion &amp;ndash; but just before encryption &amp;ndash; and came up with this change in &lt;code&gt;package.json&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    &amp;quot;encrypt&amp;quot;: &amp;quot;npx pagefind --source ./dist &amp;amp;&amp;amp; staticrypt ./dist/rebuild.html &#39;***hidden***&#39; --short -o ./dist/rebuild.html -f ./src/auth/login.html -t &#39;Summitt Dweller Blog - Rebuild&#39; -i &#39;Please enter the passphrase.&amp;lt;br/&amp;gt;Hint: gh0st&#39; --label-error &#39;Sorry, Ella says no. Try again.&#39;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;It works!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When I&amp;rsquo;m running locally my &lt;code&gt;build-and-deploy.yml&lt;/code&gt; doesn&amp;rsquo;t apply so in that case I typically will do this IF I want my search index (and encryption) updated:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yarn start
yarn encrypt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When I rebuild in production on &lt;em&gt;DigitalOcean&lt;/em&gt; my &lt;code&gt;build-and-deploy.yml&lt;/code&gt; configuration IS run so including &lt;code&gt;npx pagefind...&lt;/code&gt; as part of the &lt;code&gt;yarn encrypt&lt;/code&gt; step does the trick.&lt;/p&gt;
&lt;h2 id=&#34;time-to-test&#34;&gt;Time to Test&amp;hellip;&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m going to save this post now and rebuild this blog on &lt;em&gt;DigitalOcean&lt;/em&gt;, where with any luck, a search for a term like &amp;ldquo;DEEP&amp;rdquo; should return this post, and maybe one or two others.  Drum roll please&amp;hellip;  &lt;strong&gt;Huzzah!&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;man-do-i-feel-stupid&#34;&gt;Man, Do I Feel Stupid&lt;/h2&gt;
&lt;p&gt;Previously I mentioned that my additon of a &lt;code&gt;package.json&lt;/code&gt; script named &lt;code&gt;pagefind&lt;/code&gt; didn&amp;rsquo;t work, and that my &lt;em&gt;DigitalOcean&lt;/em&gt; builds kept trying to do &lt;code&gt;yarn encrypt&lt;/code&gt; after &lt;code&gt;yarn build&lt;/code&gt;.  Well, turns out that&amp;rsquo;s because &lt;code&gt;build-and-deploy.yml&lt;/code&gt;, where I had inserted the &lt;code&gt;yarn pagefind&lt;/code&gt; step IS NOT in control of building my &lt;em&gt;DigitalOcean&lt;/em&gt; app.  In fact, it&amp;rsquo;s a &lt;code&gt;.github&lt;/code&gt; workflow so I&amp;rsquo;m really not sure what role that file plays, if any?&lt;/p&gt;
&lt;p&gt;I went looking in my &lt;em&gt;DigitalOcean&lt;/em&gt; app configuration settings for &lt;code&gt;yarn encrypt&lt;/code&gt; and found it, in the app&amp;rsquo;s &amp;ldquo;App Settings&amp;rdquo; subsection titled &amp;ldquo;App Spec&amp;rdquo;.  When I view that &amp;ldquo;App Spec&amp;rdquo; I see this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alerts:
- rule: DEPLOYMENT_FAILED
- rule: DOMAIN_FAILED
domains:
- domain: blog.summittdweller.com
  type: PRIMARY
  zone: summittdweller.com
envs:
- key: TZ
  scope: RUN_AND_BUILD_TIME
  value: America/Chicago
name: blog-summittdweller-11ty-ghost
region: nyc
static_sites:
- build_command: |-
    yarn build
    yarn encrypt
  environment_slug: node-js
  github:
    branch: main
    deploy_on_push: true
    repo: SummittDweller/blog-eleventy-ghost
  name: blog-eleventy-ghost
  output_dir: dist
  routes:
  - path: /
  source_dir: /
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note the two &lt;code&gt;build_command:&lt;/code&gt; elements.  Let&amp;rsquo;s change those two steps to three, like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- build_command: |-
    yarn build
    yarn pagefind
    yarn encrypt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that I captured the &amp;ldquo;App Spec&amp;rdquo; in a file named &lt;code&gt;blog-summittdweller-11ty-ghost.yaml&lt;/code&gt; and I&amp;rsquo;ve saved that file in the project directory (where I hope it will do no harm).  &lt;strong&gt;Attention: After making the aforementioned addition I almost forgot to upload this file back to &lt;em&gt;DigitalOcean&lt;/em&gt; to replace our existing App Spec!&lt;/strong&gt;  Don&amp;rsquo;t be stupid like me!&lt;/p&gt;
&lt;p&gt;Next, I needed a corresponding change in &lt;code&gt;package.json&lt;/code&gt;, specifically these two lines (like I had them before, duh):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  &amp;quot;pagefind&amp;quot;: &amp;quot;npx pagefind --source ./dist&amp;quot;,
  &amp;quot;encrypt&amp;quot;: &amp;quot;staticrypt ./dist/rebuild.html &#39;***hidden***&#39; --short -o ./dist/rebuild.html -f ./src/auth/login.html -t &#39;Summitt Dweller Blog - Rebuild&#39; -i &#39;Please enter the passphrase.&amp;lt;br/&amp;gt;Hint: gh0st&#39; --label-error &#39;Sorry, Ella says no. Try again.&#39;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;push-to-rebuild&#34;&gt;Push to Rebuild&lt;/h2&gt;
&lt;p&gt;Ok, having modified &lt;strong&gt;and UPLOADED&lt;/strong&gt;&lt;code&gt;blog-summittdweller-11ty-ghost.yaml&lt;/code&gt;, and having modified &lt;code&gt;package.json&lt;/code&gt;, it came time to commit and push all my changes to see what happens.  Another drum roll, please&amp;hellip;&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Implementing Pagefind Here</title>
        <link>https://blog.summittdweller.com/microposts/2023/04/implementing-pagefind-here/</link>
        <pubDate>Wed, 19 Apr 2023 05:38:32 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/04/implementing-pagefind-here/</guid>
        <description>&lt;p&gt;Last evening I followed &lt;a href=&#34;https://rknight.me/using-pagefind-with-eleventy-for-search/&#34;&gt;Using PageFind with Eleventy for Search&lt;/a&gt; to try and implement robust search capability in this blog.  I&amp;rsquo;m working in a new &lt;code&gt;pagefind&lt;/code&gt; branch of the code to pull this off.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Engaging `s3cmd` to Download and Resize Images from DO Spaces</title>
        <link>https://blog.summittdweller.com/posts/2023/04/engaging-s3cmd-to-download-and-resize-images-from-do-spaces/</link>
        <pubDate>Sun, 16 Apr 2023 14:57:16 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/posts/2023/04/engaging-s3cmd-to-download-and-resize-images-from-do-spaces/</guid>
        <description>&lt;p&gt;Earlier in this blog there&amp;rsquo;s a &lt;code&gt;micropost&lt;/code&gt; that lays out the problem at hand.  In a nutshell, most of the photos I saved in &lt;em&gt;DigitalOcean Spaces&lt;/em&gt; are too big to be effective in this blog.  They suck up lots of time and bandwidth every time this blog gets rebuilt, and then they are rendered at a fraction of their original size. This is exceptionall wasteful and unnecessary.&lt;/p&gt;
&lt;p&gt;So, my task this morning is to install, configure, and engage the &lt;a href=&#34;https://s3tools.org/s3cmd&#34;&gt;s3cmd&lt;/a&gt; tools to help get this done.  There&amp;rsquo;s &lt;em&gt;DigitalOcean&lt;/em&gt;-specific guidance provided in &lt;a href=&#34;https://docs.digitalocean.com/products/spaces/reference/s3cmd/&#34;&gt;Setting Up s3cmd 2.x with DigitalOcean Spaces&lt;/a&gt; so that&amp;rsquo;s where I will begin.  Here goes&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;installing-s3cmd&#34;&gt;Installing &lt;code&gt;s3cmd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;This looks to be very simple and straightforward, &lt;code&gt;brew install s3cmd&lt;/code&gt; should do the trick. In a substantially abridged form, that looked like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/blog-eleventy-ghost ‹main›
╰─$ brew install s3cmd
Running `brew update --auto-update`...
==&amp;gt; Auto-updated Homebrew!
==&amp;gt; Updated Homebrew from 4.0.10 (931327df1) to 4.0.13 (ac0663ae5).
Updated 4 taps (dart-lang/dart, sass/sass, homebrew/core and homebrew/cask).
...
You have 55 outdated formulae and 1 outdated cask installed.
...
==&amp;gt; Installing s3cmd
==&amp;gt; Pouring s3cmd--2.3.0.ventura.bottle.1.tar.gz
🍺  /usr/local/Cellar/s3cmd/2.3.0: 837 files, 11.4MB
==&amp;gt; Running `brew cleanup s3cmd`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That took about 10 minutes, but should be worth it.&lt;/p&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Next, to begin configuration I need to fetch the access key:value pair for &lt;code&gt;images-summittdweller&lt;/code&gt; that I created 4 years ago. I have the credentials necessary to view that information at &lt;a href=&#34;https://cloud.digitalocean.com/account/api/spaces&#34;&gt;https://cloud.digitalocean.com/account/api/spaces&lt;/a&gt; so that&amp;rsquo;s what I&amp;rsquo;ve done.&lt;/p&gt;
&lt;p&gt;Whoa, that didn&amp;rsquo;t work! I tried to use old access keys but apparently they are in the wrong format?  So, I created a new key named &lt;code&gt;key-for-s3cmd&lt;/code&gt; and applied that (see below) and it works.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/GitHub/blog-eleventy-ghost ‹main›
╰─$ s3cmd --configure

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key [images-summittdweller]: ***This is a secret***
Secret Key [4YPWYNXZZXFDIR6CRPHG]: ***An even bigger secret***
Default Region [US]:

Use &amp;quot;s3.amazonaws.com&amp;quot; for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [nyc3.digitaloceanspaces.com]:

Use &amp;quot;%(bucket)s.s3.amazonaws.com&amp;quot; to the target Amazon S3. &amp;quot;%(bucket)s&amp;quot; and &amp;quot;%(location)s&amp;quot; vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.nyc3.digitaloceanspaces.com]:

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password [SummittDweller]:
Path to GPG program [/usr/local/bin/gpg]:

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]:

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can&#39;t connect to S3 directly
HTTP Proxy server name:

New settings:
  Access Key: ***This is a secret***
  Secret Key: ***An even bigger secret***
  Default Region: US
  S3 Endpoint: nyc3.digitaloceanspaces.com
  DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.nyc3.digitaloceanspaces.com
  Encryption password: SummittDweller
  Path to GPG program: /usr/local/bin/gpg
  Use HTTPS protocol: True
  HTTP Proxy server name:
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] Y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Success. Encryption and decryption worked fine :-)

Save settings? [y/N] y
Configuration saved to &#39;/Users/mark/.s3cfg&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;using-s3cwd&#34;&gt;Using &lt;code&gt;s3cwd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;The &amp;ldquo;More Information&amp;rdquo; section at the end of the document I used above says that&amp;hellip; &amp;ldquo;You can use our &lt;a href=&#34;https://docs.digitalocean.com/products/spaces/reference/s3cmd-usage/&#34;&gt;quick reference on s3cmd usage&lt;/a&gt; to get started.&amp;rdquo;  Ok, let&amp;rsquo;s have a look&amp;hellip; very nice!  I&amp;rsquo;m moving immediately to the &lt;a href=&#34;https://docs.digitalocean.com/products/spaces/reference/s3cmd-usage/#save-files-to-your-local-computer&#34;&gt;Save files to your local computer&lt;/a&gt; bits.&lt;/p&gt;
&lt;h3 id=&#34;fetching-files-of-the-august-2020-derecho&#34;&gt;Fetching Files of the August 2020 Derecho&lt;/h3&gt;
&lt;p&gt;The photos I saved of damage from our August 2020 Derecho, in a &lt;code&gt;images-summittdweller/2020-Aug-10-Derecho&lt;/code&gt; bucket, are rather depressing and certainly don&amp;rsquo;t need to be super high-res for the web, so let&amp;rsquo;s retrieve those and practice this workflow there first.&lt;/p&gt;
&lt;p&gt;The quick reference linked above says to use a command of the form &lt;code&gt;s3cmd get s3://spacename/path/ --recursive&lt;/code&gt; to get all files from a particular folder.  In my case, that&amp;rsquo;s&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/Downloads/2020-derecho-photos
╰─$ s3cmd get s3://images-summittdweller/2020-Aug-10-Derecho/ --recursive

WARNING: Empty object name on S3 found, ignoring.
download: &#39;s3://images-summittdweller/2020-Aug-10-Derecho/Derecho - 1.png&#39; -&amp;gt; &#39;./Derecho - 1.png&#39;  [1 of 82]
 23486944 of 23486944   100% in    1s    21.04 MB/s  done
download: &#39;s3://images-summittdweller/2020-Aug-10-Derecho/Derecho - 10.png&#39; -&amp;gt; &#39;./Derecho - 10.png&#39;  [2 of 82]
 20861132 of 20861132   100% in    0s    23.45 MB/s  done
...
download: &#39;s3://images-summittdweller/2020-Aug-10-Derecho/Photo-2020-08-20-19-51.jpeg&#39; -&amp;gt; &#39;./Photo-2020-08-20-19-51.jpeg&#39;  [81 of 82]
 6277783 of 6277783   100% in    0s    16.86 MB/s  done
ERROR: Creation of file &#39;./for-the-web/&#39; failed (Reason: Is a directory)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ok, 81 images downloaded.  That was sooooooooo much better than the 1000-or-so clicks it would have taken to do that manually!  The only gottcha&amp;hellip; that last error message about not downloading the &lt;code&gt;for-the-web&lt;/code&gt; directory, which is currently empty anyway.  Before I go farther, I&amp;rsquo;m going to open that &lt;em&gt;DigitalOcean Spaces&lt;/em&gt; bucket and change the errant directory name to &lt;code&gt;web-ready&lt;/code&gt;; that&amp;rsquo;s where my &amp;ldquo;thumbnail&amp;rdquo; copies of all these images will be uploaded shortly.&lt;/p&gt;
&lt;h2 id=&#34;next-step-resize-those-images&#34;&gt;Next Step, Resize Those Images&lt;/h2&gt;
&lt;p&gt;I found some concise and timely advice in the first web post I Googled: &lt;a href=&#34;https://www.idownloadblog.com/2013/10/19/how-to-resize-multiple-images-mac/&#34;&gt;How to quickly resize multiple images at once on Mac&lt;/a&gt;. It uses exactly the tool I had in mind, the Mac-native &lt;code&gt;Preview&lt;/code&gt; app.&lt;/p&gt;
&lt;p&gt;Before begining that process I wanted to see just how much space my 81 images occupy, like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/Downloads/2020-derecho-photos
╰─$ du -sh
2.7G	.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2.7G isn&amp;rsquo;t all that much, but it&amp;rsquo;s still much bigger than it needs to be.  I&amp;rsquo;m firing up &lt;code&gt;Preview&lt;/code&gt; now to see if I can reduce all images proportionally to a maximum width of 800 pixels.  Be back in a couple of minutes&amp;hellip;&lt;/p&gt;
&lt;p&gt;Drum roll please&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;╭─mark@Marks-Mac-Mini ~/Downloads/2020-derecho-photos
╰─$ du -sh
163M	.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Not bad at all.  Only took a couple of minutes and it reduced the total image size from 2.7G down to 163M. Not too shabby.&lt;/p&gt;
&lt;h2 id=&#34;uploads-complete-next&#34;&gt;Uploads Complete&amp;hellip; Next?&lt;/h2&gt;
&lt;p&gt;In order to upload the resized images back to &lt;em&gt;DigitalOcean Spaces&lt;/em&gt;, I simply used the nice graphical interface available to me at &lt;a href=&#34;https://cloud.digitalocean.com/spaces/images-summittdweller?path=2020-Aug-10-Derecho%2Fweb-ready&#34;&gt;https://cloud.digitalocean.com/spaces/images-summittdweller?path=2020-Aug-10-Derecho%2Fweb-ready&lt;/a&gt; and the &lt;code&gt;Upload&lt;/code&gt; option there.  It worked nicely, but for whatever reason two of the images failed to upload: &lt;code&gt;Derecho - 38.png&lt;/code&gt; and &lt;code&gt;Derecho - 39.png&lt;/code&gt;.  After a little review, and retries, I could not figure out why these wouldn&amp;rsquo;t upload but that&amp;rsquo;s OK because they are both largely redundant with &lt;code&gt;Derecho - 40.png&lt;/code&gt;, so we&amp;rsquo;ll just stick with that one.&lt;/p&gt;
&lt;p&gt;So, in the original folder image &lt;code&gt;Derecho - 1.png&lt;/code&gt; has an endpoint of &lt;code&gt;https://images.summittdweller.com/2020-Aug-10-Derecho/Derecho%20-%201.png&lt;/code&gt;.  Makes sense.  In my new &lt;code&gt;web-ready&lt;/code&gt; directory the reduced-size copy of the same image naturally has an endpoint of &lt;code&gt;https://images.summittdweller.com/2020-Aug-10-Derecho/web-ready/Derecho%20-%201.png&lt;/code&gt;.  Fortunately, that&amp;rsquo;s a &amp;ldquo;match&amp;rdquo; except for the addition of the &lt;code&gt;web-ready&lt;/code&gt; subdirectory in the path.  Exactly what I hoped would happen.&lt;/p&gt;
&lt;p&gt;This means the next step is to&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;alter-content-to-include-the-web-ready-path&#34;&gt;Alter Content to Include the &lt;code&gt;web-ready&lt;/code&gt; Path&lt;/h2&gt;
&lt;p&gt;I used the admin search (magnifying glass) feature of the &lt;em&gt;Ghost&lt;/em&gt; instance behind &lt;a href=&#34;__GHOST_URL__/ghost/#/dashboard&#34;&gt;this blog&lt;/a&gt; to find all references to &lt;code&gt;https://images.summittdweller.com/2020-Aug-10-Derecho&lt;/code&gt; and it found: NOTHING.  Yikes.  Turns out all of the references were in one post, and it was draft.  So I edited the draft &amp;ldquo;manually&amp;rdquo; and published it.  Now let&amp;rsquo;s try that search again&amp;hellip; NOPE.  So, the text inside those &lt;code&gt;figure&lt;/code&gt; tags evidently isn&amp;rsquo;t discoverable.  ☹️  Just as well since I think a different approach is needed.&lt;/p&gt;
&lt;h2 id=&#34;not-web-ready-originals&#34;&gt;Not &lt;code&gt;web-ready&lt;/code&gt;, &lt;code&gt;originals&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Since editing the content (posts) to pick up the new &lt;code&gt;web-ready&lt;/code&gt; directory is a royal pain, what I&amp;rsquo;m going to do now is create a new &lt;code&gt;originals&lt;/code&gt; sub-directory in each bucket, download all the images, resize them locally as I did above, but replace the existing high-resolution images with the smaller copies AFTER I make a backup the original images in a new &lt;code&gt;originals&lt;/code&gt; directory.  That way I don&amp;rsquo;t have to edit any of my posts in order to get the smaller web-ready images, but I won&amp;rsquo;t lose the originals either.  &lt;strong&gt;Beautimous&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;belay-that-order&#34;&gt;Belay That Order!&lt;/h2&gt;
&lt;p&gt;While I&amp;rsquo;m confident this approach (above) will work, it may not be necessary.  I looked, for example, in &lt;code&gt;images-summittdweller/Norway-Photos-2019/Bergen - Hordaland, June 19, 2019&lt;/code&gt; expecting to find some large images, but there were none over 800px in width.  In fact, I believe they are all under 640px wide, so nothing to do there, and that&amp;rsquo;s a good thing.&lt;/p&gt;
&lt;h2 id=&#34;thats-all-folks&#34;&gt;That&amp;rsquo;s All Folks&lt;/h2&gt;
&lt;p&gt;A detailed search of &lt;code&gt;images-summittdweller&lt;/code&gt; didn&amp;rsquo;t turn up any more enromous images that might get pushed to the web, so&amp;hellip; &amp;ldquo;That&amp;rsquo;s All Folks&amp;rdquo;, for now at least.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Reduce Spaces Stored Image Sizes</title>
        <link>https://blog.summittdweller.com/microposts/2023/04/reduce-azure-stored-image-sizes/</link>
        <pubDate>Sun, 16 Apr 2023 13:28:11 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/04/reduce-azure-stored-image-sizes/</guid>
        <description>&lt;p&gt;Ok, I get the sense that constantly pulling enormous digital images from &lt;em&gt;DigitalOcean Spaces&lt;/em&gt; to rebuild this blog is unnecessarily chewing up lots of bandwidth.  Today I&amp;rsquo;d like to begin fixing that by creating a utility, probably in &lt;em&gt;Python&lt;/em&gt;, to grab all those images one-by-one, make a smaller copy of each, and put those copies back into a &lt;code&gt;web-ready&lt;/code&gt; subdirectory in &lt;em&gt;Spaces&lt;/em&gt;, or something like that.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a wealth of probably pertinent information to be had in &lt;a href=&#34;https://docs.digitalocean.com/reference/api/spaces-api/&#34;&gt;https://docs.digitalocean.com/reference/api/spaces-api/&lt;/a&gt;.  Unfortunately, &lt;em&gt;Spaces&lt;/em&gt; isn&amp;rsquo;t compatible with DO&amp;rsquo;s own command line utility, &lt;a href=&#34;https://github.com/digitalocean/doctl&#34;&gt;doctl&lt;/a&gt;, but it is compatible with &lt;a href=&#34;https://docs.digitalocean.com/products/spaces/reference/s3cmd/&#34;&gt;s3cmd&lt;/a&gt; and the link I&amp;rsquo;ve provided documents how to get started with that.  🙂&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; See &lt;a href=&#34;https://blog.summittdweller.com/engaging-s3cmd-to-download-and-resize-images-from-do-spaces/&#34;&gt;Engaging &lt;code&gt;s3cmd&lt;/code&gt; to Download and Resize Images from DO Spaces&lt;/a&gt; for my solution.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>New GPX Merge</title>
        <link>https://blog.summittdweller.com/microposts/2023/04/new-gpx-merge/</link>
        <pubDate>Sat, 15 Apr 2023 13:42:58 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/04/new-gpx-merge/</guid>
        <description>&lt;p&gt;Last evening I rode my bike to/from soccer so this morning I wanted to &amp;ldquo;merge&amp;rdquo; those two track logs before publishing them to &lt;a href=&#34;https://hikes.SummittDweller.com&#34;&gt;https://hikes.SummittDweller.com&lt;/a&gt;.  So, I found and forked &lt;a href=&#34;https://github.com/locked-fg/gpxmerger&#34;&gt;https://github.com/locked-fg/gpxmerger&lt;/a&gt; to &lt;a href=&#34;https://github.com/SummittDweller/gpxmerger&#34;&gt;https://github.com/SummittDweller/gpxmerger&lt;/a&gt; and after tweaking my own code IT WORKS!&lt;/p&gt;
&lt;p&gt;The command I ran to make my first &amp;ldquo;merge&amp;rdquo; was: &lt;code&gt;python3 gpxmerger.py &amp;quot;/Users/mark/Downloads/2023-04-14 16:32 - 3m 11s.gpx&amp;quot; &amp;quot;/Users/mark/Downloads/2023-04-14 20:40 - 3m 27s.gpx&amp;quot;&lt;/code&gt;.  I think I might tweak the script soon to just pull all of the &lt;code&gt;.gpx&lt;/code&gt; files from a specified directory.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: My fork of the project now accepts a single &lt;code&gt;target_directory&lt;/code&gt; argument and uses &amp;ldquo;glob&amp;rdquo; to grab all the &lt;code&gt;.gpx&lt;/code&gt; files in that directory.&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Maybe Paperless NGX</title>
        <link>https://blog.summittdweller.com/microposts/2023/04/maybe-paperless-ngx/</link>
        <pubDate>Wed, 12 Apr 2023 03:42:01 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/04/maybe-paperless-ngx/</guid>
        <description>&lt;p&gt;Today&amp;rsquo;s income tax prep adventures has me believing that I need a new instance of &lt;a href=&#34;https://docs.paperless-ngx.com/setup/#bare_metal&#34;&gt;Paperless, maybe Paperless-NGX&lt;/a&gt; this time?  Now if I can just get Mackenzie to stand up and configure a new bare-metal Linux server. 🙃&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Updated Rootstalk with Landscape Orientation Message</title>
        <link>https://blog.summittdweller.com/microposts/2023/04/updated-rootstalk-with-landscape-orientation-message/</link>
        <pubDate>Mon, 10 Apr 2023 16:59:19 +0000</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/04/updated-rootstalk-with-landscape-orientation-message/</guid>
        <description>&lt;p&gt;I pushed some &lt;em&gt;Rootstalk&lt;/em&gt; updates into production (&lt;a href=&#34;https://Rootstalk.Grinnell.edu&#34;&gt;https://Rootstalk.Grinnell.edu&lt;/a&gt;) this morning and am making note of that here since I don&amp;rsquo;t have this slick &lt;code&gt;micropost&lt;/code&gt; capability on my professional blog. 🙃&lt;/p&gt;
</description>
      </item>
      
    
      
      <item>
        <title>Rename Azure Subscription</title>
        <link>https://blog.summittdweller.com/microposts/2023/02/2023-02-03-rename-azure-subscription-html/</link>
        <pubDate>Sat, 04 Feb 2023 09:36:17 -0600</pubDate>
        <author>Mark McFate</author>
        <guid>https://blog.summittdweller.com/microposts/2023/02/2023-02-03-rename-azure-subscription-html/</guid>
        <description>&lt;p&gt;Today I plan to follow the guidance found in &lt;a href=&#34;https://techgenix.com/rename-azure-subscriptions/&#34;&gt;Rename Azure Subscriptions and Find Your Environments Faster&lt;/a&gt; to fix the name of my personal &lt;em&gt;Azure subscription 1&lt;/em&gt;, and maybe more.  That&amp;rsquo;s a horrible name, I know!&lt;/p&gt;
&lt;p&gt;Done!  The new subscription name is &lt;em&gt;SummittDweller Pay-As-You-Go&lt;/em&gt;.  Much better!&lt;/p&gt;
</description>
      </item>
      
    
  </channel>
</rss>
