<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Bytes of Michael Bishop</title>
  <subtitle>Full content feed for Michael Bishop&#39;s web log.</subtitle>
  <link href="https://michaelbishop.me/feed.xml" rel="self" />
  <link href="https://michaelbishop.me/" />
  <updated>2026-03-27T22:23:53Z</updated>
  <id>https://michaelbishop.me/</id>
  <author>
    <name>Michael Bishop</name>
  </author>
  <entry>
    <title>LastFM Recently Played with Eleventy</title>
    <link href="https://michaelbishop.me/article/lastfm-eleventy.html" />
    <updated>2023-12-26T19:36:33Z</updated>
    <id>https://michaelbishop.me/article/lastfm-eleventy.html</id>
    <content type="html">&lt;p&gt;I made some improvements to my &lt;a href=&quot;https://michaelbishop.me/listening&quot;&gt;Listening&lt;/a&gt; page which was one of the first things I built when I got this site up and running. I’ve been using LastFM for years to track my listening habits and I wanted to be able to display that information on my site. I’ve been using the &lt;a href=&quot;https://www.last.fm/api&quot;&gt;LastFM API&lt;/a&gt; to pull in my recently played tracks and display them on my site.&lt;/p&gt;
&lt;p&gt;First, using 11ty Fetch plugin I have a file in my &lt;code&gt;__data&lt;/code&gt; directory &lt;code&gt;lastfm.js&lt;/code&gt; that pulls in my recently played tracks from LastFM. You need to install fetch &lt;code&gt;npm install @11ty/eleventy-fetch&lt;/code&gt; and then you can use it in your project. It doesn’t need to be added to your &lt;code&gt;.eleventy.js&lt;/code&gt; file.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; EleventyFetch &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;@11ty/eleventy-fetch&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;dotenv&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;API_KEY&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;LFM_API_KEY&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; url &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&amp;amp;user=miklb&amp;amp;api_key=&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;API_KEY&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;amp;limit=20&amp;amp;format=json&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/* This returns a promise */&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;EleventyFetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;url&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;duration&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;1h&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// save for 1 hour&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;json&quot;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// we’ll parse JSON for you&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note I’m storing my API key in a &lt;code&gt;.env&lt;/code&gt; file and using the &lt;a href=&quot;https://www.npmjs.com/package/dotenv&quot;&gt;dotenv&lt;/a&gt; package to load it into my project.&lt;/p&gt;
&lt;p&gt;Then in my  &lt;a href=&quot;https://raw.githubusercontent.com/miklb/michaelbishop/main/content/pages/listening.md&quot;&gt;template&lt;/a&gt; I’m using the data from that file to display the recently played tracks.&lt;/p&gt;
&lt;p&gt;One of the issues I had was that LastFM was returning duplicate tracks. I wanted to display the most recent 20 tracks but not have duplicates. I was able to use Liquid to filter the data and only display unique tracks.&lt;/p&gt;
&lt;pre class=&quot;language-liquid&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-liquid&quot;&gt;&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; recentTracks&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  lastfm&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;recenttracks&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;track &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; uniqueTrackNames &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; uniqueTracks &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; track &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; recentTracks &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;unless&lt;/span&gt; uniqueTrackNames &lt;span class=&quot;token operator&quot;&gt;contains&lt;/span&gt; track&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
   &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; uniqueTrackNames &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; uniqueTrackNames &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function filter&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; track&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; uniqueTracks &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; uniqueTracks &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function filter&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; track &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt; 
  &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;endunless&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;endfor&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;recently-played&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; 
  &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; track &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; uniqueTracks &lt;span class=&quot;token keyword&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For some reason I was getting an empty track in the first position of the array, so I’m using the &lt;code&gt;offset&lt;/code&gt; filter to skip that track.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>My State of WordPress</title>
    <link href="https://michaelbishop.me/article/wordpress-twenty-twenty-four.html" />
    <updated>2024-05-29T19:39:04Z</updated>
    <id>https://michaelbishop.me/article/wordpress-twenty-twenty-four.html</id>
    <content type="html">&lt;p&gt;&lt;em&gt;[I discovered WordPress late 2004. I created an account on &lt;a href=&quot;http://wordpress.org&quot;&gt;wordpress.org&lt;/a&gt; in 2005. I’ve explored many different CMSs and frameworks, even contributed to a few. Building websites with WordPress has afforded me a journey I wouldn’t trade for anything. But at the end of the day it’s just a tool. ]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dbushell.com/2024/05/13/modern-wordpress-an-update/&quot;&gt;David Bushnell’s&lt;/a&gt; post about the current state of WordPress themes popped up in my feed earlier this week (I’m linking to his follow-up based on inital feedback). I have had quite the opposite opinion about the state of WordPress themes.&lt;/p&gt;
&lt;p&gt;Mind you, I have been as critical as anyone from my various little soapboxes about the changes and Full Site Editing. Blocks were maturing and growing on me, but the FSE was horrendous. So much so I pinged Matt Mullenweg on Twitter about it. That led to an opportunity to do a walk through with some folks at Automattic&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://michaelbishop.me/article/wordpress-twenty-twenty-four.html#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;. I think the opportunity to see a real world user experience with someone who was as famliar with WordPress as I am was helpful. But I thought including a &lt;em&gt;beta&lt;/em&gt; feature in core WordPress was counter to everything I knew about WordPress. And product development.&lt;/p&gt;
&lt;p&gt;But it got better. And with the latest releases and Twenty-Twent-Four, I think WordPress is in a better place.&lt;/p&gt;
&lt;p&gt;First, WordPress has always been a tool that has been used in a bazillion different ways. I’ve contributed my share. And earlier in its lifecylce (it just turned 21) it was a bit more frameworky for enterprising hackers. But the platform has matured. So it’s quite possible WordPress is just overkill for your project at this point. I believe WordPress in it’s current state is a product for regularly publshing multimedia content—allowing for some level of art direction in the editing process. Yes, all of the standard things we expect on a website like forms and shopping carts and whatnot. But at it’s core WP has always been about putting words and pictures on the web.&lt;/p&gt;
&lt;p&gt;Second, there has always been two types of WordPress theme development. One where a designer/developer/team creates a theme for a specific client or project. Maybe use a framework like Genesis. Possibly a custom plugin for custom post types and taxonomies. The other is the theme that is created for the masses. The ones that are included in the WordPress core. Ones where most folks never touch a theme file. I’m addressing the former.&lt;/p&gt;
&lt;p&gt;From about 5.7 to 6.3 WP was moving in a direction that was I would agree with most of what David said. But with changes in 6.4 and 6.5, I think for how Gutenberg and WordPress are evolving, Twenty Twenty-Four is a great theme that now gives “boutique” custom theme development an opportunity to flourish with the block editor.&lt;/p&gt;
&lt;p&gt;In my opinion Twenty-Twenty-Four is a really well designed example of how you can create your own custom block theme. A blueprint for an agency to build out their own block theme using their own design system. How to build the constraints and styles for the blocks. Predefine a color palette and typography. Predefine patterns of blocks. Add alternate styles for the blocks allowing for that art direction. Nothing precludes you from enqueing your own styles and scripts. it’s just not necessary for the theme to function.&lt;/p&gt;
&lt;p&gt;To address the shortcode syntax in the latest iterations of theme files, yeah, it’s a bit to get used to. But once you start thinking of this as a block theme and not a traditional theme, it makes a little more sense. Besides, WP theme functions were all just php wrappers for core functions querying the database. This is just a different way to do it. You don’t &lt;em&gt;need&lt;/em&gt; to write the syntax. You can build page or pattern in the visual editor and then copy/export the code and commit it to your theme. &lt;strong&gt;After&lt;/strong&gt; you’ve confirmed all of the other constraints are in place. Again, the idea behind a block theme is styling and defining the constraints of the blocks allowing them to be used in a variety of ways. Patterns are a collection of blocks. Pages are a collection of patterns.&lt;/p&gt;
&lt;p&gt;If you start to think of the possibilites of what can be done in the browser to create a post or page, you’ll see the potential of what can be done with a block theme. If you are wanting to build out a custom site that is just a bunch of fields of content and you fully control how that content is displayed on the front end, then you’re probably better off with a headless CMS or static sites. I am sold on &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt; and &lt;a href=&quot;https://cloudcannon.com&quot;&gt;CloudCannon&lt;/a&gt; for that use case&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://michaelbishop.me/article/wordpress-twenty-twenty-four.html#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;. But if you want to give your client the ability to create a page that looks like a magazine spread, then WordPress is a great tool for that.&lt;/p&gt;
&lt;p&gt;That’s not to say everything is rosy. The block editor as it ships currently with WordPress does not support CSS &lt;code&gt;grid&lt;/code&gt;. Everything is based on &lt;code&gt;flexbox.&lt;/code&gt; If you add the &lt;a href=&quot;https://wordpress.org/plugins/gutenberg/&quot;&gt;Gutenberg plugin&lt;/a&gt; for bleeding edge, you will discover that grid support is being developed. For the stage of development it is in, it’s fairly robust. You can build a grid container and then use either &lt;code&gt;grid&lt;/code&gt; or &lt;code&gt;flexbox&lt;/code&gt; containers in each grid cell. There’s basic support for rows. I haven’t looked at the discussions on the feature to know the full plan or when it might start to ship with core. But it will be one less hurdle for those wanting to use the block editor for more complex layouts. Another experimental feature being worked on in Gutenberg is forms. Currently you can create a basic form that either sends an email or &lt;code&gt;POST&lt;/code&gt; to a URL. As with &lt;code&gt;grid&lt;/code&gt; it’s experimental and I have no clue to a timeline this would ship with core. But it’s coming and you &lt;em&gt;can&lt;/em&gt; start using it today.&lt;/p&gt;
&lt;p&gt;There are also a few blocks that are missing from core that are common elements used in web design. Icons for one. I explored a lot of different options there and landed on &lt;a href=&quot;https://wordpress.org/plugins/coblocks/&quot;&gt;Coblocks&lt;/a&gt;. For a couple of reasons. It’s not a kitchen sink and the blocks are well designed and keep up with core. It’s a GoDaddy product they have have promised&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://michaelbishop.me/article/wordpress-twenty-twenty-four.html#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; not to make this into some kind of freemium model. You still have full control over style and remember, you can disable any block you don’t want the content creators to have access to. Core too. Just because out of the box there are a ton of blocks and patterns doesn’t mean your client sites have to have them all. Or preclude the creation of custom blocks or the addition of other blocks.&lt;/p&gt;
&lt;p&gt;Again, this was meant to say that if you cannot set aside the way you used to do things in WordPress for the sites you were building a decade or more ago,  the Twenty-Twenty-Four theme isn’t what you want. If you want to embrace the block editor and build out a custom theme for a client, you’d be hard pressed to find a better example. The biggest mistake I see folks make with WordPress is going down a dead end road of custom and “premium” theme frameworks that do not align with core development and wind up being a fork of WordPress.&lt;/p&gt;
&lt;p&gt;Using Twenty-Twenty-Four as a blueprint for a custom block theme is a way to ensure you are in alignment with core development and have a theme that will be supported for the long term.&lt;/p&gt;
&lt;p&gt;(Obligatory if you’re looking for help migrating/adopting a block theme, or would like to explore a custom CMS solution with Eleventy, please &lt;a href=&quot;mailto:michael@webjanitor.consulting&quot;&gt;drop me an email&lt;/a&gt; )&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;this was specific to using &lt;a href=&quot;http://WP.com&quot;&gt;WP.com&lt;/a&gt; and not self-hosted WordPress. Disabling FSE wasn’t an option. &lt;a href=&quot;https://michaelbishop.me/article/wordpress-twenty-twenty-four.html#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;CloudCannon actually supports a visual editor as well but I’ve not explored it closely. &lt;a href=&quot;https://michaelbishop.me/article/wordpress-twenty-twenty-four.html#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Famous last words I know, but I don’t see the finacial incentive for a company the size of GoDaddy to make this a freemium model. They employ folks that work on this and core and help integrate their own hosting products. I’m not saying they are altruistic, or it couldn’t be sold off or left to rot, but for now it fills a niche. &lt;a href=&quot;https://michaelbishop.me/article/wordpress-twenty-twenty-four.html#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Where I&#39;m at with AI</title>
    <link href="https://michaelbishop.me/articles/current-ai-hot-take.html" />
    <updated>2024-06-24T02:15:14Z</updated>
    <id>https://michaelbishop.me/articles/current-ai-hot-take.html</id>
    <content type="html">&lt;p&gt;My extent of actively using “artificial intelligence” is limited to a few tests with chatGPT last year and the adoption of using GitHub CoPilot&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://michaelbishop.me/articles/current-ai-hot-take.html#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;. I say “actively” in that its use is intentional and not just a byproduct of using a service. And while I agree with the general sentiment of folks who eschew the scraping of original content and commodification of user data, I think the technology itself is just a tool. I believe Apple is demonstrating that in their use of Apple Intelligence. I won’t try to go into details, I’ll defer to the excellent piece by John Gruber - &lt;a href=&quot;https://daringfireball.net/2024/06/wwdc24_apple_intelligence&quot;&gt;WWDC: Apple Intelligence&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;First, their models are almost entirely based on personal context, by way of an on-device semantic index. In broad strokes, this on-device semantic index can be thought of as a next-generation Spotlight. Apple is focusing on what it can do that no one else can on Apple devices, and not really even trying to compete against ChatGPT et al for world-knowledge context. They’re focusing on unique differentiation, and eschewing commoditization.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Had I not read Simon Willison’s post this week &lt;a href=&quot;https://simonwillison.net/2024/Jun/21/search-based-rag/&quot;&gt;Building search-based RAG using Claude, Datasette and Val Town&lt;/a&gt; I might not have gotten it. While some of the details are over my head, the concept of taking data in an existing sqllite database and using it to “answer questions” vs generic training data is the key. The fact that it’s this close to someone like me being able to take a public data set and use it to answer questions is what I’m talking about.&lt;/p&gt;
&lt;p&gt;And I’m cool with being able to query my own data in a natural language model. The rest is hype.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;It’s great for rubber ducking and exploring new ideas. I’ve also used it to undo spaghetti code and debug some other folks’ code. It’s not going to replace anyone anytime soon. &lt;a href=&quot;https://michaelbishop.me/articles/current-ai-hot-take.html#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Catching Up on RSS</title>
    <link href="https://michaelbishop.me/article/catching-up-on-rss.html" />
    <updated>2023-11-08T19:29:42Z</updated>
    <id>https://michaelbishop.me/article/catching-up-on-rss.html</id>
    <content type="html">&lt;p&gt;My RSS consumption these days is using &lt;a href=&quot;https://netnewswire.com&quot;&gt;NetNewsWire&lt;/a&gt; synced through iCloud. I’ve always prefered reading my feeds on my laptop, probably because I’ve never picked up an iPad after having a 1st gen. But I also started reading RSS years before reading them anywhere but the desktop was an option.&lt;/p&gt;
&lt;p&gt;I sort them oldest to newest and use the keyboard—I use arrow keys—to navigate through the list. I used to read everything in the app, but more recently as more folks are posting from their personal sites, I like to click over and read the longer posts in its native format. Especially web folks. It’s a great way to see what everyone is doing with their sites. View a little source.&lt;/p&gt;
&lt;p&gt;NetNewsWire has the preference to open links in the background and the keyboard shortcut &lt;code&gt;b&lt;/code&gt; will open the active item in the browser. That way, I can triage my feeds without suffering from inbox overload. I’d rather suffer from browser tab overload. At least that way when I need a diversion, I have a curated set of links ready to go.&lt;/p&gt;
&lt;p&gt;From there I read the post and if it’s something I think I’d like to reference in the future, bookmark in Safari. Now that I’ve gotten the site back up, I might add bookmarks as a collection and start posting the meaty reference material here. Regardless I’ll be sharing links to stuff that stands out to me.&lt;/p&gt;
&lt;p&gt;As I started typing this out I decided to go ahead and put my &lt;a href=&quot;https://github.com/miklb/opml&quot;&gt;OPML file up on GitHub&lt;/a&gt;. I’ll try to keep it up to date. I’m not sure how useful it will be to anyone, but it’s there. I don’t delete feeds so there’s a lot in there for nostalgia’s sake.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>International Symposium on Making Websites Real Good</title>
    <link href="https://michaelbishop.me/article/11ty-international-symposium-on-making-websites-real-good/" />
    <updated>2024-05-09T14:45:12Z</updated>
    <id>https://michaelbishop.me/article/11ty-international-symposium-on-making-websites-real-good/</id>
    <content type="html">&lt;p&gt;Today marks the day for the &lt;a href=&quot;https://conf.11ty.dev/&quot;&gt;11ty International Symposium on Making Websites Real Good&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’m going to try and live blog the event here rather than on social media or post a bunch of small notes on my site through to Mastodon and Bluesky.&lt;/p&gt;
&lt;p&gt;I’ll start by saying I think the philosophy behind 11ty is exactly how people want to build for the web. It’s simplicity is sublime but you can supercharge and really do what ever you want with it. For front end, there aren’t really any rules? Pick from a handful of templating languages, use what ever CSS you’re heart desires. Data? Where ever you want it.&lt;/p&gt;
&lt;p&gt;Aren’t you tired of spending all of your time on caching web pages and dealing with servers? Get it out of the way up front and focus on the content and the design. Lower the technical debt.&lt;/p&gt;
&lt;p&gt;The chat is great and if you understand who and what Mat Marquis has done for responsive images on the web, this says it all:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;eleventy made it so I personally do not have to think about responsive images anymore&lt;br&gt;
&lt;cite&gt;Mat Marquis&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“No Moat by Design”&lt;/p&gt;
&lt;p&gt;Top quote from chat about the question of when 3.0 will be released: “sustainable development, not arbitrary deadlines” (Eric Bailey)&lt;/p&gt;
&lt;p&gt;Every person who does any web development or design should be required to watch this Miriam Suzanne talk. &amp;quot;“Let the browser work out the details. If we can avoid touching it, we should.”&lt;/p&gt;
&lt;p&gt;Paul Everitt - “Never went to the browser and never went to the console.log” is a pretty good selling point.&lt;/p&gt;
&lt;p&gt;(I’m not linking to the speakers for speed but their profiles and links are on the conference site)&lt;/p&gt;
&lt;p&gt;During the break there’s a beautiful video highlighting all of the people who are using 11ty. The diversity of design is inspiring.&lt;/p&gt;
&lt;p&gt;chrome user experience&lt;/p&gt;
&lt;p&gt;I could write a whole post about Dan Sinker but suffice to say it was the exact kind of inspiration I needed.&lt;/p&gt;
&lt;p&gt;My small connection to him was when he was doing imeachment.fyi He wanted a relative “how many weeks” its been on the site. But the caveat was it had to be Liquid. He didn’t care about your javascript solution. He wasn’t interested in a different platform. Man after my own heart. So I took a look. He was using GitHub Pages with a custom YAML file that he wrote each day’s notes in. It worked for him. He wasn’t going to change that and if it couldn’t be done in Liquid, fuck it. Really after my heart. I took a stab and cobbled together some Liquid using his data model and found a solution. Sort of. I didn’t account for the impeachment to run into the next year. I hacked a one year fix in but I’m sure if you visit it now it’s broken. But that’s not the point. He made the point again today in his talk. Make things. Don’t be afraid of a few rough edges. I’ll add rough edges  wear down with use.&lt;/p&gt;
&lt;p&gt;Work &lt;em&gt;with&lt;/em&gt; the grain of  the web. - Chris Ferdinandi&lt;/p&gt;
&lt;p&gt;Watching people grok HTML web components in real time in the chat is nice.&lt;/p&gt;
&lt;p&gt;I need to revisit the code in the components I’ve made.&lt;/p&gt;
&lt;p&gt;make weird things on the internet - ivan zhao&lt;/p&gt;
&lt;p&gt;I appreciate that the last speaker, Sara Joy, is speaking to something most sites have either dealt (sort of) with or will need to deal with from an accessibility first stand point. Dark mode is something that I appreciate beyond aesthetics, particularly as my vision has declined as I’ve aged.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Lasting Impressions</title>
    <link href="https://michaelbishop.me/articles/lasting-impressions.html" />
    <updated>2023-03-10T01:14:35Z</updated>
    <id>https://michaelbishop.me/articles/lasting-impressions.html</id>
    <content type="html">&lt;p&gt;I have been yearning for several years to start creating some kind of physical art. I experimented with mixed media, namely newspaper headlines and paper making, but it didn’t scratch the itch.&lt;/p&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://michaelbishop.me/assets/img/W1kk3n8zSs-4032.avif 4032w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelbishop.me/assets/img/W1kk3n8zSs-4032.webp 4032w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://michaelbishop.me/assets/img/W1kk3n8zSs-4032.jpeg&quot; alt=&quot;Gyotoaku print of a sheepshead.&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;&lt;/picture&gt;
&lt;p&gt;The past year I have been consumed by fishing. I want to be a small scale boat to table commercial fisherman and that has been a more difficult goal to achieve than it looked like on paper at the beginning of 2022. I also knew that there would be some seasonality to it with a lot of bad weather days mixed in. I wasn’t sure if that time would be filled with web consulting or making stuff.&lt;/p&gt;
&lt;p&gt;I was familiar with fish printing in so much as I’d seen photos and maybe one video years ago. But in early October I started picturing them in my head, which always leads to a lot of searching on the web. I skimmed through a dozen or so YouTube videos and went to Walmart for some cheap supplies and dive in. Sketch paper and tissue paper, black acrylic paint and some cheap brushes.&lt;/p&gt;
&lt;p&gt;My next attempts were a positive step forward. The ink seemed the problem so I switched from acrylic paint to traditional sumi ink. However with several attempts under my belt I went back and watched some more videos. That led to a journey around paper. Rice paper led to washi and now I’m on my third type of paper. I feel this will be a longer journey but the latest mulberry paper I ordered feels like I’m heading in the right direcetion.&lt;/p&gt;
&lt;p&gt;My inspiration has been &lt;a href=&quot;https://fishingforgyotaku.com/art-artist&quot;&gt;Dwight Huang&lt;/a&gt;. Watching someone approach the art from a natural and reverent place I felt a much stronger pull to explore the art.&lt;/p&gt;
&lt;div class=&quot;iframe-video&quot;&gt;&lt;iframe title=&quot;vimeo-player&quot; src=&quot;https://player.vimeo.com/video/304210699?h=2e2c71a88b&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;And just to be clear, the only fish I’m printing so far&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://michaelbishop.me/articles/lasting-impressions.html#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; are ones I’ve caught that meet state regulations from a public pier. They all become dinner or bait, nothing is killed purely for the sake of making a print. That’s an important point to me. Dock to art to table.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;I hope to reach a level that allows me to print for others to have a print of a memorable catch. &lt;a href=&quot;https://michaelbishop.me/articles/lasting-impressions.html#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title>Hand Rolled</title>
    <link href="https://michaelbishop.me/article/hand-rolled.html" />
    <updated>2023-03-10T01:14:35Z</updated>
    <id>https://michaelbishop.me/article/hand-rolled.html</id>
    <content type="html">&lt;p&gt;From my &lt;a href=&quot;https://github.com/miklb/michaelbishop/blob/main/README.md&quot;&gt;README.md&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’ve thought long and hard on how &lt;strong&gt;I&lt;/strong&gt; want to make websites for &lt;strong&gt;me&lt;/strong&gt;. This is where I’ve landed. Eleventy as a static site generator and PostCSS for styling development. I am borrowing heavily from work I’ve previously done with Jekyll-IndieWeb.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As I’ve narrowed things down publishing images is a big thing for me. I want semantic, responsive and accessible images. Looking at the tools available for Eleventy, no matter how I sliced it I didn’t like the options afforded me out of the box. I don’t have the javascript chops to whip up what I wanted. But after revisiting snippets in VS Code, it dawned on me that it would easier to create a couple of snippets to insert a &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; with a &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; element with placeholder text. I don’t expect to publish full articles on my phone, mostly notes and photos. At which point I believe I’d rather do um, &lt;em&gt;art direction&lt;/em&gt; from the laptop cropping and processing images with Pixelmator Pro.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Test. test. test January 2025</title>
    <link href="https://michaelbishop.me/article/january-2025/" />
    <updated>2025-01-21T20:49:50Z</updated>
    <id>https://michaelbishop.me/article/january-2025/</id>
    <content type="html">&lt;p&gt;Here’s what I’ve decided. This site will be RSS or in the browser only. No auto cross posting to Bluesky or Fediverse or what ever might come next. I can pull in my Bluesky posts or GitHub activity or what ever else I’m doing “out there” but what I post here is for here.&lt;/p&gt;
&lt;p&gt;20 years. That’s how long I’ve been putting words and pictures on the web. I’ve done a lot of other things during that time but my fascination and desire to make a living doing it hasn’t changed. I still think it’s magic.&lt;/p&gt;
&lt;p&gt;I haven’t posted much here or worked on any of the things I’ve said I was going to work on because I have another blog. That has nothing and everything to do with what I’ve learned the last 20 years and maybe is a culmination of everything I’ve learned (or more importantly, still need to learn). After my experience with Code for America and the local Code for Tampa Bay brigade, I still wanted to help. Do the smart, right thing. Advocate through digital services for the vulnerable. I didn’t make any inroads with local government while I was involved with C4TB, I tried numerous times to reach out with ideas about projects other brigades were working on, particularly Adopt-a-Drain. I was blown off at every stop. I marked that up to my naivety of the non-profit world as well as burned bridges before my involvement. The weekend hack-a-thon, &amp;quot;tech will solve it” hype did no one any favors with career technologists stuck with antiquated procurement processes, dwindling budgets and subject to shitty third party vendors software. I’d like to think at this point I’ve built a little trust and now only stymied by the business/non-profit side of the equation. Along the way, I began following City Council to try and figure out where I might be able to help. Where to volunteer. Where to try and step up, use what privileges and tools I have to help. I was unsuccessful. Folks either didn’t care for me or weren’t interested in what I was advocating. But I kept following, asking questions, frustrated there wasn’t some place to find them. I questioned processes and the rules. And through that I began writing out my thoughts and observations about the week-to-week as well as major decisions being made. I didn’t want to just rant on Twitter or firing off emails every two days to City Council. Instead &lt;a href=&quot;https://tampamonitor.com/&quot;&gt;I put it all on a blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That led to wanting to bring awareness to the types of issues Council was voting on every week. Not everyone is interested in &lt;strong&gt;every&lt;/strong&gt; topic, but what ever issue it is you are passionate about, at some point it intersects with the city. From a macro level with the budget to individual contracts through land use changes these are opportunities for you, me, us to shape how our city grows and changes. I believe in bottom up change and am trying to be a part of that. I realize not everyone—few—are going to agree with me on most issues, but I would at least like for everyone to be working off the same information and facts Which leads to discussions about open data and transparency and we begin to come full to the “tech” side of where I started.&lt;/p&gt;
&lt;p&gt;I have built a couple of things, or in the process thereof related to city data. First, there’s an RSS feed for city calendar events that I found full of interesting items, but they showed up so late in the feed there wasn’t any time to even consider them. (I’ve not been great about getting out the last fews years for a variety of reasons I hope to rectify this year to some degree. Maybe when it starts to warm…) I reached out to the Technology &amp;amp; Innovation department and asked if there was a full feed of events or some other way to see the future events. I was directed to a json feed that contained the info I was looking for and cobbled together an &lt;a href=&quot;https://github.com/miklb/tampa-events-ical&quot;&gt;ical feed&lt;/a&gt; that could be subscribed to. I shared that with the team that provided the json feed and received positive feedback. Last month, a team member from T&amp;amp;I sent a &lt;a href=&quot;https://github.com/miklb/tampa-events-ical/pull/1&quot;&gt;pull-request&lt;/a&gt; letting me know the idea was such a hit they wanted to implement it on their side but wanted to share back the improvements they made which included breaking out different sub-calendars from the firehose. I haven’t checked to see if they’ve added links on &lt;a href=&quot;http://tampa.gov&quot;&gt;tampa.gov&lt;/a&gt; yet, but the calendar feeds are still mirrored here, &lt;a href=&quot;https://miklb.github.io/tampa-events-ical/dist/&quot;&gt;Tampa Events ical feeds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another idea that has been brewing in my head and occasionally even as code, came from listening to public comments at City Council. There has been a back-and-forth between community leaders and city staff over “public notice” for re-zonings and land use changes including variance requests. Tampa has “overlay” districts that aren’t as strict as historic district designation, but do carry certain design criteria related to a broader historic area of town. These are particularly of interest to some folks. At the time, city staff pointed to a &lt;a href=&quot;https://experience.arcgis.com/experience/2cbabe99312b4570a76def640f0bfc77/&quot;&gt;map of current development applications&lt;/a&gt; as a way for the community to know what is going on in their neighborhood. I love digital maps. I built a &lt;a href=&quot;https://tampamonitor.com/tampa-land-use-map/&quot;&gt;City of Tampa zoning and future land use map&lt;/a&gt;. But dots on a map aren’t a great way to explore the information or see what’s new. Which led me on a journey to find the source of the map data and bring it to the web in a more explorable way. Potentially generate a weekly list of new projects. But the goal was to give the folks that want to know what’s going on, for what ever reason, to be able to view and filter the applications by type and neighborhood. That led to the data being made available in table form that can be exported from the map page to them feeding the data into ArcGIS and providing an &lt;a href=&quot;https://city-tampa.opendata.arcgis.com/datasets/tampa::development-coordination-locations/about&quot;&gt;api endpoint&lt;/a&gt;. From there I played around with ways to serve it and settled on using &lt;a href=&quot;http://datasette.io/&quot;&gt;Datasette&lt;/a&gt; with a script I built using GitHub CoPilot and Claude LLM. It pulls the data from the feed once a day, pipes the geojson into a SQLite database, and serves it on the web. The deploy action is currently broken, but the code is &lt;a href=&quot;https://github.com/miklb/tampa-dev-coord&quot;&gt;open on GitHub&lt;/a&gt;. I’m pulling down the latest database that does get updated in an action and doing manual deploys for the time being. It’s still in what I would call alpha phase but the data can be explored now. &lt;a href=&quot;https://dev-coord.tampamonitor.com&quot;&gt;Current Tampa development coordination applications.&lt;/a&gt; I hope to move it to beta this week. This has also been shared with the data team with the city and they shared their appreciation for my efforts. I demoed it to another team on the Accela and development coordination side. One person called it impressive and I think it also gave them some tangible ways they can think about better presenting the data at the city level. Until then I’ll keep tinkering with this tool and hopefully help some folks keep up with changes in their neighborhood. A lot of times not knowing what’s going on with a possible development is worse than knowing.&lt;/p&gt;
&lt;p&gt;So that’s not nothing and why my attention to my personal site and being Indie Web hasn’t been a priority. I’m also still actively looking for steady work. It’s not been pretty for me. I didn’t bounce back professionally after the pandemic and the need for a web generalist who prefers HTML/CSS/JS in that order isn’t in high demand. I can be reached at &lt;code&gt;howdy&lt;/code&gt; at this domain if you know of an opportunity or would like to discuss how I could help you with your web project. Ideally I would find something that allowed me to continue what I am doing with Tampa Monitor and data/mapping work. I recently came across a group in Chicago, &lt;a href=&quot;https://datamade.us/about-us/&quot;&gt;DataMade&lt;/a&gt;. I’d love to be a part of like that in Tampa. With help, I think I could build it. But this was brain dump and reflection and mostly a test if my deploy still worked. Be kind to yourself.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>What Happened to miklb?</title>
    <link href="https://michaelbishop.me/article/what-happened-to-miklb/" />
    <updated>2023-11-07T00:19:59Z</updated>
    <id>https://michaelbishop.me/article/what-happened-to-miklb/</id>
    <content type="html">&lt;p&gt;Trying to retell how I started blogging is too long of a story, one I probably told on the old blog. Miklb’s Mindless Ramblings. It started out with WordPress, switched to &lt;a href=&quot;https://github.com/habari/habari&quot;&gt;Habari&lt;/a&gt;, then migrated to Jekyll, then back to WordPress before shutting it down last month.&lt;/p&gt;
&lt;p&gt;The abbreviation of “Michael B” came as as result of limits on characters allowed in usernames and having a common name. But wanting something &lt;em&gt;unique&lt;/em&gt;. When it came time to register a domain, combinations of michael and bishop were nonexistent in 2005. I settled on &lt;a href=&quot;http://miklb.com&quot;&gt;miklb.com&lt;/a&gt;, and it’s been my online identity ever since. But I wanted a fresh start. I had snagged &lt;a href=&quot;http://michaelbishop.me&quot;&gt;michaelbishop.me&lt;/a&gt; a few years ago, and it was time to put it to use. But I languished in how I wanted to build the site and struggled with offline issues.&lt;/p&gt;
&lt;p&gt;As to the handle “miklb”, I still have the Twitter account and GitHub account. I’m not sure I’ll ever be able to shake it. Ironically I recently signed up for Letterboxd and couldn’t find a user name and guess what I settled on?&lt;/p&gt;
&lt;p&gt;I have an archive of the content from there, and might go through it and repost anything that is still relevant. A lot is cruft about outdated technology that’s no longer relevant. I may just throw up a static snapshot on a subdmomain for posterity.&lt;/p&gt;
&lt;p&gt;I’ll write up what I’m working on here in a follow up post. I’m also testing using a tag for “pinning” posts to the home page.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>In Defense of PostCSS as a Super Basic CSS Processing SetUp</title>
    <link href="https://michaelbishop.me/article/postcss-superbasic-css-processing.html" />
    <updated>2024-01-03T17:17:14Z</updated>
    <id>https://michaelbishop.me/article/postcss-superbasic-css-processing.html</id>
    <content type="html">&lt;p&gt;Over on Frontend Masters, Chris Coyier wrote up his &lt;a href=&quot;https://frontendmasters.com/blog/fine-ill-use-a-super-basic-css-processing-setup/&quot;&gt;super basic CSS processing Setup&lt;/a&gt; and I found myself nodding at most of his points. Not to take anything away from his suggested setup, but I use &lt;a href=&quot;https://postcss.org&quot;&gt;PostCSS&lt;/a&gt;in a very similar fashion.&lt;/p&gt;
&lt;p&gt;While Lightning CSS has minification built it and PostCSS doesn’t, Lightning CSS doesn’t have &lt;code&gt;watch&lt;/code&gt; built in and requires an additional tool and config. At that point, I don’t see much difference than adding a couple of PostCSS plugins and config.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; i &lt;span class=&quot;token parameter variable&quot;&gt;-D&lt;/span&gt; postcss postcss-cli postcss-import postcss-preset-env cssnano&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So yeah, there’s a few more packages to install but they’re plugins for postcss and travel well together as far as dependency management goes.&lt;/p&gt;
&lt;p&gt;Now that we have them installed, we need a config. (&lt;code&gt;postcss.config.js&lt;/code&gt;) Using Chris’s demo repo as an example&lt;/p&gt;
&lt;pre class=&quot;language-js&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token literal-property property&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ctx&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;options&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;map&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token literal-property property&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    ‘postcss&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;token literal-property property&quot;&gt;’&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ‘css’ &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    ‘postcss&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;nested’&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    ‘postcss&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;preset&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;env’&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;cssnano&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;preset&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; ‘&lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;’ &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that we are setting a path to the directory of our CSS files.&lt;/p&gt;
&lt;p&gt;So now we can add put this in a script we can run. &lt;code&gt;-w&lt;/code&gt; is for &lt;code&gt;watch&lt;/code&gt;, it will watch for changes,  &lt;code&gt;-m&lt;/code&gt; for &lt;code&gt;map&lt;/code&gt; if that’s your thing (when using multiple CSS files/imports it’s handy for debugging, I know some folks argue against it in production) and then &lt;code&gt;-o&lt;/code&gt; for &lt;code&gt;out&lt;/code&gt; followed by the the filename we want for our compiled CSS.&lt;/p&gt;
&lt;p&gt;Now we can add it to our &lt;code&gt;package.json&lt;/code&gt; file.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;“scripts”&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token literal-property property&quot;&gt;“css”&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; “postcss css&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;css &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;w &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;m &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;o style&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;css”
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;npm run css&lt;/code&gt; will build your CSS, watch for changes and update &lt;code&gt;style.css&lt;/code&gt; as necessary (Control-C to exit).&lt;/p&gt;
&lt;p&gt;Personally, I am almost exclusively building sites with &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt; so I use this in conjunction with it’s &lt;code&gt;—serve&lt;/code&gt; command.  This doesn’t do any “live reloading” of the styles, so yeah, occasionally I’ll need to &lt;code&gt;command R&lt;/code&gt; refresh a page if I’m doing a lot of fiddling but it’s been the most rock solid experience I’ve had.&lt;/p&gt;
&lt;p&gt;I’ll note that &lt;a href=&quot;https://github.com/csstools/postcss-plugins/tree/main/plugin-packs/postcss-preset-env&quot;&gt;PostCSS Preset-Env&lt;/a&gt; has a lot of configuration options but I’m using the defaults. You can also provide a &lt;code&gt;.browserlistrc&lt;/code&gt; file which it will use, however I’m leaving them at defaults in the example. For that matter, &lt;a href=&quot;https://github.com/postcss/postcss-import&quot;&gt;PostCSS Import&lt;/a&gt; allows for importing from mulitple sources including &lt;code&gt;node_modules&lt;/code&gt;, however that requires a little different config.&lt;/p&gt;
&lt;p&gt;Certainly you can add in the &lt;code&gt;live.js&lt;/code&gt; Chris recommends but honestly I didn’t see how it was configued in the demo.&lt;/p&gt;
&lt;p&gt;All that said, it’s nice there are multiple options to allow you to write modern CSS and let the tool handle backporting for browser support. That’s what drove me to my solution in the first place.&lt;/p&gt;
&lt;p&gt;I forked Chris’ demo repo and updated it with my PostCSS solution. You can view the &lt;a href=&quot;https://github.com/miklb/simple-postcss-setup&quot;&gt;sample project&lt;/a&gt; on GitHub.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Another Approach to Webmentions in Eleventy</title>
    <link href="https://michaelbishop.me/article/eleventy-webmentions.html" />
    <updated>2023-12-26T16:37:32Z</updated>
    <id>https://michaelbishop.me/article/eleventy-webmentions.html</id>
    <content type="html">&lt;p&gt;If you’re not familiar with &lt;a href=&quot;https://indieweb.org/Webmention&quot;&gt;webmentions&lt;/a&gt;, they’re a way to notify another site you’ve mentioned them, or liked their content or whatever. It’s a way to connect sites together. I’ve used them previously with &lt;a href=&quot;http://miklb.com&quot;&gt;miklb.com&lt;/a&gt;, but had been slow to implement them here.&lt;/p&gt;
&lt;p&gt;As is my nature, I looked for prior art and there were a couple of really great resources. Sia has the most detailed &lt;a href=&quot;https://www.sia.codes/posts/webmentions-eleventy/&quot;&gt;post&lt;/a&gt; I found. However, it is written for using Nunjucks as well as a hand-rolled caching sytem. I’m using Liquid and had already experimented with using Eleventy Fetch for my &lt;a href=&quot;https://michaelbishop.me/listening/&quot;&gt;Listening&lt;/a&gt; page and LastFM data so I wanted to see if I could get away with it again.&lt;/p&gt;
&lt;p&gt;I’ll note, that over time my approach may fall over if I ever get a lot of webmentions. Sia’s approach only checks for recent webmentions whereas with Fetch I’m pulling in all of them and filtering per post. Hopefully somone will see this and suggest a way to use Fetch but only check for new webmentions since last check.&lt;/p&gt;
&lt;p&gt;Otherwise, I’m using &lt;a href=&quot;http://Webmention.io&quot;&gt;Webmention.io&lt;/a&gt; same as Sia and I’d recommend using her documentation to get started.&lt;/p&gt;
&lt;p&gt;The primary difference is I’m using Liquid to filter the webmentions per post using the &lt;a href=&quot;https://www.11ty.dev/docs/filters/&quot;&gt;Liquid Filter&lt;/a&gt; &lt;code&gt;where&lt;/code&gt; to filter the webmentions by the &lt;code&gt;wm-target&lt;/code&gt; property. Liquid also has a built in &lt;code&gt;size&lt;/code&gt; filter which I’m using to display the number of webmentions. The code is still in a bit of flux but you can see my &lt;a href=&quot;https://github.com/miklb/michaelbishop/blob/main/_includes/webmentions.html&quot;&gt;webmentions.html&lt;/a&gt; file in my repo. I am pulling the data into a global &lt;a href=&quot;https://github.com/miklb/michaelbishop/blob/main/_data/webmentions.json&quot;&gt;__data file&lt;/a&gt; which makes the data available at &lt;code&gt;webmentions&lt;/code&gt; in my templates.&lt;/p&gt;
&lt;p&gt;Key bits to point out from this snippet&lt;/p&gt;
&lt;pre class=&quot;language-liquid&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-liquid&quot;&gt;    &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; webmentionUrl &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; site&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;url &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function filter&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token object&quot;&gt;page&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;url &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function filter&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;.html&#39;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; filteredWebmentions &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; webmentions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;children &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function filter&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;wm-target&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; webmentionUrl &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; likes &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; filteredWebmentions &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function filter&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;wm-property&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;like-of&quot;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;assign&lt;/span&gt; likeSize &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; likes &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function filter&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I use &lt;code&gt;.html&lt;/code&gt; file extensions (though I do have pretty permalinks) but my &lt;code&gt;page.url&lt;/code&gt; includes the file extension. YMMV but it won’t hurt to include it. Second, note that with &lt;a href=&quot;http://Webmention.io&quot;&gt;Webmention.io&lt;/a&gt;, the mentions are in &lt;code&gt;webmentions.children&lt;/code&gt;. &lt;code&gt;filteredWebmentions&lt;/code&gt; is an object of all webmentions for the current page (or post).&lt;/p&gt;
&lt;p&gt;From there, you can filter again by &lt;code&gt;wm-property&lt;/code&gt; to separate likes, reposts, replies, etc. We can then loop through the filtered webmentions and display them as needed. &lt;code&gt;{% for webmention in likes %}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;As with most stuff on this site it’s a work in progress but I wanted to document what I’ve done so far. I truly believe unlocking webmentions on more sites as we move towards federation and decentralization of the web is a good thing. I’m happy to answer any questions or help troubleshoot if you’re trying to implement webmentions on your site.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Automating Bridgy Syndication with Netlify Functions</title>
    <link href="https://michaelbishop.me/article/netlify-post-deploy-syndication.html" />
    <updated>2026-01-08T14:14:33Z</updated>
    <id>https://michaelbishop.me/article/netlify-post-deploy-syndication.html</id>
    <content type="html">&lt;p&gt;I have been exploring ways to easily post to the site and syndicate to Bluesky for a few years. The obvious solution is &lt;a href=&quot;https://micropub.spec.indieweb.org/&quot;&gt;Micropub&lt;/a&gt; and &lt;a href=&quot;https://brid.gy&quot;&gt;Bridgy&lt;/a&gt; however the missing piece was how to automate all of the steps. The other thing I wanted was to avoid including the post link in the syndicated note. That creates a problem for Bridgy to “discover” the notes for backfeed. It requires a syndication link. Years ago using Jekyll I wired up (hacked) a solution using Travis CI to get the response from Bridgy and commit it back to the repo. Until last week, I hadn’t found a solution to replicate that workflow.&lt;/p&gt;
&lt;p&gt;Thanks to discovering &lt;a href=&quot;https://github.com/benjifs/serverless-micropub&quot;&gt;benjifs/serverless-micropub&lt;/a&gt; I revisited the idea and built a Netlify Function to handle the last mile.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;When you post via Micropub with &lt;code&gt;mp-syndicate-to&lt;/code&gt; targets, the post gets created with the syndication targets in frontmatter. But nothing actually &lt;em&gt;sends&lt;/em&gt; those webmentions. And even if it did, you’d want the syndication URLs (the Bluesky post URL, the Fediverse post URL) written back to your content for display and for Bridgy’s backfeed to work.&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;A background function triggered by Netlify’s deploy webhook:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;After a successful deploy, Netlify hits &lt;code&gt;/post-deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The function queries GitHub for recently changed content files&lt;/li&gt;
&lt;li&gt;For each file with &lt;code&gt;mp-syndicate-to&lt;/code&gt; but no &lt;code&gt;syndication&lt;/code&gt; yet, it sends webmentions to Bridgy&lt;/li&gt;
&lt;li&gt;Captures the syndication URLs from Bridgy’s response&lt;/li&gt;
&lt;li&gt;Commits the updated frontmatter back to the repo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;That commit triggers another build&lt;/strong&gt;, and the rebuilt post now displays “Also posted on” links&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The whole loop closes automatically. Post from your Micropub client, wait for two builds (initial post, then syndication update), and your content shows up on Bluesky and Mastodon with the syndication links displayed on your site.&lt;/p&gt;
&lt;h2&gt;How It Works&lt;/h2&gt;
&lt;p&gt;The function looks for frontmatter like this:&lt;/p&gt;
&lt;pre class=&quot;language-yaml&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;mp-syndicate-to&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://fed.brid.gy/&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://brid.gy/publish/bluesky&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After sending webmentions, it adds:&lt;/p&gt;
&lt;pre class=&quot;language-yaml&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;syndication&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://bsky.app/profile/me.bsky.social/post/abc123&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In your template, you can then render these as &lt;code&gt;u-syndication&lt;/code&gt; links. Here’s the Liquid I’m using:&lt;/p&gt;
&lt;pre class=&quot;language-liquid&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-liquid&quot;&gt;&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; syndication &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;syndication-links&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Also posted on:&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; url &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; syndication &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; url &lt;span class=&quot;token operator&quot;&gt;contains&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;bsky.app&#39;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; url &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;u-syndication&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;syndication&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Bluesky&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;elsif&lt;/span&gt; url &lt;span class=&quot;token operator&quot;&gt;contains&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;mastodon&#39;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; url &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;u-syndication&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;syndication&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Fediverse&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; url &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;u-syndication&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;syndication&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; url &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;endif&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;endfor&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token liquid language-liquid&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%-&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;endif&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;-%}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The key bits in the function:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses the GitHub API to scan recent commits for changed &lt;code&gt;.md&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;Parses YAML frontmatter to find syndication targets&lt;/li&gt;
&lt;li&gt;Sends standard webmentions to Bridgy endpoints&lt;/li&gt;
&lt;li&gt;Bridgy returns the syndication URL in the response (Location header or JSON body)&lt;/li&gt;
&lt;li&gt;Commits the updated file back via GitHub API&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Setup&lt;/h2&gt;
&lt;p&gt;You’ll need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt;: &lt;code&gt;ME&lt;/code&gt;, &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;, &lt;code&gt;GITHUB_USER&lt;/code&gt;, &lt;code&gt;GITHUB_REPO&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Netlify redirect&lt;/strong&gt;: &lt;code&gt;/post-deploy&lt;/code&gt; → &lt;code&gt;/.netlify/functions/post-deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy webhook&lt;/strong&gt;: Netlify Dashboard → Notifications → Outgoing webhook on deploy succeeded&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Code&lt;/h2&gt;
&lt;p&gt;I’ve extracted this into a standalone repo you can adapt for your own site:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/miklb/netlify-post-deploy-syndication&quot;&gt;miklb/netlify-post-deploy-syndication&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It’s a single function file with clearly marked configuration sections. Customize &lt;code&gt;getPostUrl()&lt;/code&gt; for your permalink structure and &lt;code&gt;getBridgyEndpoint()&lt;/code&gt; for your syndication targets.&lt;/p&gt;
&lt;h2&gt;Why This Approach&lt;/h2&gt;
&lt;p&gt;The function approach hits the sweet spot—runs automatically, has access to GitHub for read/write, and logs are easy to check in the Netlify dashboard.&lt;/p&gt;
&lt;p&gt;It pairs nicely with serverless-micropub. The micropub function handles creating posts, this function handles syndicating them. Clean separation.&lt;/p&gt;
&lt;h2&gt;A Note on Webmentions in Post Content&lt;/h2&gt;
&lt;p&gt;There’s another piece to the puzzle: sending webmentions for links &lt;em&gt;within&lt;/em&gt; your post content. For that I’m using &lt;a href=&quot;https://github.com/CodeFoodPixels/netlify-plugin-webmentions&quot;&gt;netlify-plugin-webmentions&lt;/a&gt;, which scans your feed after each build and sends webmentions to any mentioned URLs.&lt;/p&gt;
&lt;p&gt;However, I ran into an issue where URL timeouts during webmention discovery would fail the entire build. Not great when you’re linking to a slow site or one that’s temporarily down.&lt;/p&gt;
&lt;p&gt;I’ve forked the plugin to log warnings instead of throwing errors: &lt;strong&gt;&lt;a href=&quot;https://github.com/miklb/netlify-plugin-webmentions&quot;&gt;miklb/netlify-plugin-webmentions&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To use the fork:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-D&lt;/span&gt; github:miklb/netlify-plugin-webmentions&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then in &lt;code&gt;netlify.toml&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-toml&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token table class-name&quot;&gt;plugins&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token key property&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;netlify-plugin-webmentions&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This overrides the Netlify app plugin with the forked version. I’ve submitted a PR to the upstream project, but in the meantime the fork keeps my builds from failing due to external site issues.&lt;/p&gt;
&lt;h2&gt;The Full Flow&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Post via Micropub&lt;/strong&gt; → serverless-micropub commits to GitHub&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;First build&lt;/strong&gt; → Post goes live, netlify-plugin-webmentions sends webmentions for linked content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy webhook&lt;/strong&gt; → post-deploy function sends webmentions to Bridgy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bridgy responds&lt;/strong&gt; → Function commits syndication URLs to frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Second build&lt;/strong&gt; → Post now shows “Also posted on” links, Bridgy can discover for backfeed&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/webmention-test/" />
    <updated>2023-11-05T03:42:59Z</updated>
    <id>https://michaelbishop.me/notes/webmention-test/</id>
    <content type="html">&lt;p&gt;&lt;a href=&quot;https://webmention.rocks/test/1&quot;&gt;Test 1&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/2&quot;&gt;Test 2&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/3&quot;&gt;Test 3&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/4&quot;&gt;Test 4&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/5&quot;&gt;Test 5&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/6&quot;&gt;Test 6&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/7&quot;&gt;Test 7&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/8&quot;&gt;Test 8&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/9&quot;&gt;Test 9&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/10&quot;&gt;Test 10&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/11&quot;&gt;Test 11&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/12&quot;&gt;Test 12&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/13&quot;&gt;Test 13&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/14&quot;&gt;Test 14&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/15&quot;&gt;Test 15&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/16&quot;&gt;Test 16&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/17&quot;&gt;Test 17&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/18&quot;&gt;Test 18&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/19&quot;&gt;Test 19&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/20&quot;&gt;Test 20&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/21&quot;&gt;Test 21&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/22&quot;&gt;Test 22&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://webmention.rocks/test/23/page&quot;&gt;Test 23&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/word-for-word/" />
    <updated>2024-02-06T00:50:29Z</updated>
    <id>https://michaelbishop.me/note/word-for-word/</id>
    <content type="html">&lt;p&gt;Tonight I’m reminded what a service C-SPAN is. In particular the daily “Word for Word” email that goes out every evening. Here’s what they are saying. That’s it.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=maybe&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/wordpress-hosting-2024/" />
    <updated>2024-04-08T02:38:28Z</updated>
    <id>https://michaelbishop.me/note/wordpress-hosting-2024/</id>
    <content type="html">&lt;p&gt;I’m doing more WP work these days and while it’s been fun to throw in some Jamstack I need to dogfood some WP too. Think I’m going to move to &lt;a href=&quot;http://WP.com&quot;&gt;WP.com&lt;/a&gt; for hosting. I’m paying $7 a month for bare bones VPS. I learned from Chris Coyier &lt;a href=&quot;https://chriscoyier.net/2024/04/04/wordpress-com-has-studio-a-native-app-for-running-wordpress-locally-and-github-deployments/&quot;&gt;WP.com has GitHub Deployments&lt;/a&gt; and when I looked at the pricing annually, it makes sense.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=maybe&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/20231102102735.html" />
    <updated>2023-11-04T20:11:57Z</updated>
    <id>https://michaelbishop.me/note/20231102102735.html</id>
    <content type="html">&lt;p&gt;There are many notes but this is the first one.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://brid.gy/publish/mastodon&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/front-matter-vscode-cms.html" />
    <updated>2024-06-11T02:50:25Z</updated>
    <id>https://michaelbishop.me/note/front-matter-vscode-cms.html</id>
    <content type="html">&lt;p&gt;New to me, a VSCode extension that helps you manage your static site content. Worth it alone for managing tags and front matter. &lt;a href=&quot;https://github.com/estruyf/vscode-front-matter&quot;&gt;Front Matter VSCode CMS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/apple-jam/" />
    <updated>2024-01-05T16:21:44Z</updated>
    <id>https://michaelbishop.me/note/apple-jam/</id>
    <content type="html">&lt;p&gt;Not the focus of the post, but always a great reminder. The post is right up my alley too. HTML Web Components and sharing what you’re &lt;a href=&quot;https://michaelbishop.me/listening.html&quot;&gt;listening&lt;/a&gt; to.&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;While not great, it works for me and well, this website is for me, not you.&lt;/p&gt;
&lt;footer&gt;
&lt;cite&gt;
&lt;a href=&quot;https://paulrobertlloyd.com/2024/005/a1/jams/&quot;&gt;These are my jams · Paul Robert Lloyd&lt;/a&gt;
&lt;/cite&gt;
&lt;footer&gt;
&lt;/footer&gt;&lt;/footer&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/apple-weather.html" />
    <updated>2024-06-23T20:36:11Z</updated>
    <id>https://michaelbishop.me/note/apple-weather.html</id>
    <content type="html">&lt;p&gt;I’m one of those folks that still lament the loss of DarkSky. I waffle now between Carrot and the Apple Weather app. Dr. Drang nails one of the first and biggest UI issues I had—the 10 day temp graphs. &lt;a href=&quot;https://leancrew.com/all-this/2024/06/the-unbearable-sorrow-of-apple-weather/&quot;&gt;The unbearable sorrow of Apple Weather&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/applebot-ai.html" />
    <updated>2024-06-22T03:37:14Z</updated>
    <id>https://michaelbishop.me/note/applebot-ai.html</id>
    <content type="html">&lt;p&gt;For now I’m not allowing any AI scrapers as much as you can using &lt;a href=&quot;https://michaelbishop.me/robots.txt&quot;&gt;robots.txt&lt;/a&gt;, including adding &lt;a href=&quot;https://support.apple.com/en-us/119829&quot;&gt;Applebot-Extended&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/articles-asides-titles/" />
    <updated>2024-02-22T02:33:28Z</updated>
    <id>https://michaelbishop.me/notes/articles-asides-titles/</id>
    <content type="html">&lt;p&gt;Today’s inner monologe was a debate over whether it would be better to use &lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt; instead of &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; for &lt;em&gt;notes&lt;/em&gt;—posts without titles. Naming things is hard, writing titles harder. (Would that be the title?) We don’t write titles on social media updates/tweets/skeets/whatever, so why should we on our own sites? Which lead to questioning if articles need titles semantically. And all of that started when I was thinking about permalinks and calling articles with titles “articles” and articles without titles “notes”.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/audioeye-drops-suit/" />
    <updated>2024-01-03T19:35:58Z</updated>
    <id>https://michaelbishop.me/notes/audioeye-drops-suit/</id>
    <content type="html">&lt;p&gt;Glad to see &lt;a href=&quot;https://adrianroselli.com/2024/01/audioeye-has-dropped-its-suit-against-me.html&quot;&gt;AudioEye dropped their suit&lt;/a&gt; against Adrian.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/ben-balter-tweets/" />
    <updated>2023-11-16T00:13:34Z</updated>
    <id>https://michaelbishop.me/notes/ben-balter-tweets/</id>
    <content type="html">&lt;p&gt;There are a few options for archiving your tweets and Ben Balter has released a new project on GitHub—&lt;a href=&quot;https://github.com/benbalter/tweets&quot;&gt;tweets&lt;/a&gt;. Pretty straight forward publishing on GH Pages.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/blogs-social-magic/" />
    <updated>2023-12-28T18:14:17Z</updated>
    <id>https://michaelbishop.me/note/blogs-social-magic/</id>
    <content type="html">&lt;p&gt;I concur.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Blogs and social networks talking to each other is still kind of magic.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.manton.org/2023/12/28/bluesky-replies-via.html&quot; class=&quot;u-in-reply-to&quot; rel=&quot;in-reply-to&quot;&gt;Manton Reece - Bluesky Replies via Bridgy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/bluesky-bridgy-2/" />
    <updated>2024-02-06T01:17:16Z</updated>
    <id>https://michaelbishop.me/notes/bluesky-bridgy-2/</id>
    <content type="html">&lt;p&gt;Another test for &lt;a href=&quot;http://brid.gy&quot;&gt;brid.gy&lt;/a&gt; &amp;amp; Bluesky. Hadn’t authorized posting and not sure how the Netlify webmention plugin handles sending subsequent webmentions. Defintely will want to start sending my own webmentions so I can get the syndication url back from &lt;a href=&quot;http://brid.gy&quot;&gt;brid.gy&lt;/a&gt;. I hate litering social media feed with backlinks.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=maybe&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/bluesky-bridgy-3/" />
    <updated>2024-02-06T01:28:01Z</updated>
    <id>https://michaelbishop.me/notes/bluesky-bridgy-3/</id>
    <content type="html">&lt;p&gt;One more time with feeling.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/bluesky-bridgy-4.html" />
    <updated>2024-02-06T00:50:29Z</updated>
    <id>https://michaelbishop.me/note/bluesky-bridgy-4.html</id>
    <content type="html">&lt;p&gt;OK, this should do the trick. Posting to this to my site, syndicating to Mastodon and now Bluesky.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=maybe&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/bluesky-bridgy/" />
    <updated>2024-02-06T00:50:29Z</updated>
    <id>https://michaelbishop.me/note/bluesky-bridgy/</id>
    <content type="html">&lt;p&gt;Testing Bridgy Publish to Bluesky. Take 2. Had to enable Bluesky publish on &lt;a href=&quot;http://brid.gy&quot;&gt;brid.gy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=true&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/bluesky-official.html" />
    <updated>2024-02-06T00:50:29Z</updated>
    <id>https://michaelbishop.me/note/bluesky-official.html</id>
    <content type="html">&lt;p&gt;One last test post. If you see this on Bluesky, reply and say hi. I’ll show you a neat trick.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;br&gt;
Syndicated on: &lt;a href=&quot;https://bsky.app/profile/michaelbishop.me/post/3kkrfq4z3t62c&quot; class=&quot;u-syndication&quot;&gt;Bluesky&lt;/a&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/bridgy-test-one/" />
    <updated>2023-11-04T20:11:57Z</updated>
    <id>https://michaelbishop.me/notes/bridgy-test-one/</id>
    <content type="html">&lt;p&gt;So it begins the testing for using &lt;a href=&quot;http://Brid.gy&quot;&gt;Brid.gy&lt;/a&gt; and webmentions. It’s been almost 5 years since I last set something up and while the underlying tech hasn’t changed, my memory on some of it has faded.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://brid.gy/publish/mastodon&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/bridgy-test-two/" />
    <updated>2023-11-05T02:03:30Z</updated>
    <id>https://michaelbishop.me/notes/bridgy-test-two/</id>
    <content type="html">&lt;p&gt;Having fun trying to figure out how to get a date for the note that I can generate a unique timestamp for. Created seems to build time. Trying &lt;code&gt;git Created&lt;/code&gt; now. Note this is for Eleventy and a supplied value. I wrote a filter to convert the date to unixtime stamp for a permalink value for notes with no title.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/bridgyfed-techcrunch.html" />
    <updated>2024-06-06T18:33:56Z</updated>
    <id>https://michaelbishop.me/note/bridgyfed-techcrunch.html</id>
    <content type="html">&lt;p&gt;Nice to see @snarfed.org work on Bridgy Fed working with Mastodon and Bluesky in &lt;a href=&quot;https://techcrunch.com/2024/06/05/bluesky-and-mastodon-users-can-now-talk-to-each-other-with-bridgy-fed/&quot;&gt;TechCrunch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Changelog 0.4.0</title>
    <link href="https://michaelbishop.me/notes/changelog/0.4.0/" />
    <updated>2024-03-13T03:36:12Z</updated>
    <id>https://michaelbishop.me/notes/changelog/0.4.0/</id>
    <content type="html">&lt;p&gt;I’m still not sure how I want this site to look, but I’ve been more focused on a foundation and less on content and “design.” I like simple. I’m not sure if what I’ve done is simple, more like raw. But I have fallen in love wtih &lt;a href=&quot;https://utopia.fyi/&quot;&gt;Utopia&lt;/a&gt; and this &lt;a href=&quot;https://web.dev/articles/building/a-color-scheme&quot;&gt;color scheme builder&lt;/a&gt; from Adam Argyle. What I like about both are they aren’t “frameworks” or “libraries”. It’s all just CSS custom properties that you can use in however you mark up your templates platform agnostic.&lt;/p&gt;
&lt;p&gt;Utopia has a PostCSS plugin however it didn’t work for me. I put off debugging that for a future project and copied and pasted the generated properties. I also need to do some more reading about &lt;code&gt;subgrid&lt;/code&gt; as I’m not sure it behaves how I expect.&lt;/p&gt;
&lt;p&gt;I found Adam’s post after &lt;a href=&quot;https://developer.mozilla.org/en-US/blog/color-palettes-css-color-mix/&quot;&gt;reading about &lt;code&gt;color-mix&lt;/code&gt; palettes&lt;/a&gt;. But I like how Adam’s system has worked out text vs background and handles light and dark themes. All based on the HSL values for a primary—brand—color. I’m a &lt;code&gt;prefers-color-scheme: dark&lt;/code&gt; user, so extra apologies to anyone viewing this in light mode. But now I can start to think about content and how I want to post. I’m thinking &lt;a href=&quot;https://getindiekit.com&quot;&gt;Indiekit&lt;/a&gt;. Paul just published an Eleventy preset plugin. Really just need to get it up and running.&lt;/p&gt;
&lt;p&gt;Which I’ll end with a reminder from &lt;a href=&quot;https://adactio.com/journal/20968&quot;&gt;Jeremy Keith&lt;/a&gt; from his IndieWebCamp wrap-up (organized by the aforementioned Paul Robert Lloyd)—“What you do with your own website is entirely up to you.”&lt;/p&gt;
&lt;p&gt;@todo: fix webmention display&lt;br&gt;
@todo: resolve permalink for notes (unix timestamp from gitCommitDate is fragile in CI/CD)&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=maybe&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/common-purpose/" />
    <updated>2023-11-16T00:32:00Z</updated>
    <id>https://michaelbishop.me/notes/common-purpose/</id>
    <content type="html">&lt;p&gt;I really loved this line Chris Coyier highlighted in his post about Bill Watterson’s &lt;a href=&quot;https://chriscoyier.net/2023/11/15/the-mysteries&quot; class=&quot;u-in-reply-to&quot; rel=&quot;in-reply-to&quot;&gt;The Mysteries&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
    &lt;p&gt;“Working through differences toward a common purpose is practically an act of defiance these days.”&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/copilot-fail.html" />
    <updated>2024-07-08T17:55:04Z</updated>
    <id>https://michaelbishop.me/note/copilot-fail.html</id>
    <content type="html">&lt;p&gt;CoPilot fail: telling me &lt;code&gt;hasOwn&lt;/code&gt; “seems to be a typo or a custom method” and that I need to use &lt;code&gt;hasOwnProperty&lt;/code&gt; except that’s not what the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn&quot;&gt;docs say&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: &lt;code&gt;Object.hasOwn()&lt;/code&gt; is intended as a replacement for &lt;code&gt;Object.prototype.hasOwnProperty()&lt;/code&gt;.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/divitis-tailwind-soup/" />
    <updated>2024-02-12T16:14:36Z</updated>
    <id>https://michaelbishop.me/notes/divitis-tailwind-soup/</id>
    <content type="html">&lt;p&gt;Reading a blog post from a designer I really admire and went to take a look at their markup. Holy divitis Batman! Straight up tailwind soup. No &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;. No &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; just &lt;code&gt;&amp;lt;divs&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; all the way down. It’s really hard to want to care about this stuff when people who are really good at it don’t seem to care.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/eleventy-themes/" />
    <updated>2023-11-06T22:37:40Z</updated>
    <id>https://michaelbishop.me/notes/eleventy-themes/</id>
    <content type="html">&lt;p&gt;11ty doesn’t have the concept of themes. I’m good with that. But what I’m considering, from a data portability standpoint as well as allowing work to the site to be separate from content is the concept of a theme. And making it easier for others to use it. Trick would be to get 11ty to read content from a directory outside of &lt;code&gt;_src&lt;/code&gt;. Or to have a separate repo for the posts/content and &lt;code&gt;_data&lt;/code&gt; as a submodule in &lt;code&gt;_src&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/ellas-soul-food-sunday.html" />
    <updated>2024-06-10T00:29:43Z</updated>
    <id>https://michaelbishop.me/note/ellas-soul-food-sunday.html</id>
    <content type="html">&lt;p&gt;Got my first food buzz since the last time I was in New Orleans 7 years ago. Awesome that it was from the Soul Food Sunday BBQ &amp;amp; sides from Ella’s down the street. KC BBQ doing its thing, just right smoky, creamy mac &amp;amp; cheese with collards spiked with plenty of vinegar but enough salt &amp;amp; heat to bring it all together in one bite.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/embed-components-a-roselli/" />
    <updated>2024-01-10T03:28:48Z</updated>
    <id>https://michaelbishop.me/notes/embed-components-a-roselli/</id>
    <content type="html">&lt;p&gt;Adrian Roselli documents &lt;a href=&quot;https://adrianroselli.com/2024/01/embed-slides-youtube-videos-and-more.html&quot;&gt;best practices for embedding content&lt;/a&gt; with a bonus example of an HTML Web Component for Youtube videos. Neat trick parsing the video identifier from the default link for building the iframe. I liked the Bonus! treat.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/fed-bridgy-bluesky/" />
    <updated>2024-05-10T16:01:00Z</updated>
    <id>https://michaelbishop.me/note/fed-bridgy-bluesky/</id>
    <content type="html">&lt;p&gt;Inspired by yesterday, taking some time to fix up stuff around the personal site. (also testing where things are with BridgyFed)&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/fed-mastodon/" />
    <updated>2023-12-17T23:31:02Z</updated>
    <id>https://michaelbishop.me/notes/fed-mastodon/</id>
    <content type="html">&lt;p&gt;Finally figured out how to follow people on Mastodon from my own site. I’m using &lt;a href=&quot;https://fed.brid.gy/&quot;&gt;fed.brid.gy&lt;/a&gt;, which in essesnce is a bridge between the &lt;a href=&quot;https://indieweb.org/&quot;&gt;IndieWeb&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fediverse&quot;&gt;Fediverse&lt;/a&gt;. You follow using &lt;a href=&quot;http://fed.brid.gy&quot;&gt;fed.brid.gy&lt;/a&gt; and it creates a feed of your follows you can subscribe to in your reader of choice. I just add it to my feeds in NetNewsWire and I’m good to go.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/gift-of-time/" />
    <updated>2023-11-10T16:21:03Z</updated>
    <id>https://michaelbishop.me/notes/gift-of-time/</id>
    <content type="html">&lt;p&gt;What a beautiful thing to say.&lt;/p&gt;
&lt;blockquote cite=&quot;https://ploum.net/2023-11-10-the-gift-of-time.html&quot;&gt;
    &lt;p&gt;Free software offers free time, free life extension to many human living now and maybe in the future.&lt;/p&gt;
    &lt;footer&gt;— &lt;cite&gt;Ploum&lt;/cite&gt;&lt;/footer&gt;
&lt;/blockquote&gt;
&lt;p&gt;Read the full post &lt;a href=&quot;https://ploum.net/2023-11-10-the-gift-of-time.html&quot; class=&quot;u-in-reply-to&quot; rel=&quot;in-reply-to&quot;&gt;The Gift of Time&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/grouper-offline/" />
    <updated>2024-03-04T16:09:29Z</updated>
    <id>https://michaelbishop.me/note/grouper-offline/</id>
    <content type="html">&lt;p&gt;Born &amp;amp; raised in Tampa, over 35 years professionally serving and cooking grouper at every level. Yesterday, thanks to my friends, I was able to get offshore for the first time and catch one.&lt;/p&gt;
&lt;p&gt;Also, 10 hours without cell/internet? A++++++ Would do again.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Gyotaku Updates</title>
    <link href="https://michaelbishop.me/notes/gyotaku_updates_3-15/" />
    <updated>2024-04-16T01:32:24Z</updated>
    <id>https://michaelbishop.me/notes/gyotaku_updates_3-15/</id>
    <content type="html">&lt;p&gt;&amp;lt;img src=“sheepshead-12-23.jpeg” alt=“Gyotoaku print of a sheepshead.”&amp;quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;I’ve been holding off on posting more prints in my Etsy shop, because A–I’ve been busy and B–I’ve been busy. But also because I need to organize them and take more pics. To that end, I’ve ordered a circular polarizing lens for my iPhone, which should help with the glare from the cheap frames I have for stagging. I also grabbed some shipping tubes in bulk to make it easier to ship the prints. I also realized it would be a safe way to organize them so I can post multiple prints at once.&lt;/p&gt;
&lt;p&gt;There’s a species that runs late spring, striped mojarra, that I’m gearing up for. I also have some print making supplies I plan on ordering. Really looking forward to expirementing with creating my own ink. Buying the pine soot in stick form and working it into water to have better control over the moisture, particularly when working outdoors and understanding how it reacts with the different papers. Which has been its own deep dive. Very excited to see what this season brings.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=maybe&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/hills-to-die-on/" />
    <updated>2024-02-11T17:29:13Z</updated>
    <id>https://michaelbishop.me/notes/hills-to-die-on/</id>
    <content type="html">&lt;p&gt;I really need to remember to pick which hills I’m going to die on sooner.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/hire-me/" />
    <updated>2023-12-28T19:07:42Z</updated>
    <id>https://michaelbishop.me/notes/hire-me/</id>
    <content type="html">&lt;p&gt;Just going to put this out into the universe that I’m really looking for a job. Something web related I can do from Tampa.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/ideas-in-food/" />
    <updated>2024-01-04T20:28:20Z</updated>
    <id>https://michaelbishop.me/notes/ideas-in-food/</id>
    <content type="html">&lt;p&gt;One of my favorite all time favorite blogs is back posting. The beauty of collecting RSS feeds for 20 years. Their approach to food has deeply influenced how I cook.&lt;a href=&quot;https://blog.ideasinfood.com/ideas_in_food/2024/01/sugar-brioche.html&quot;&gt; Ideas in Food - Sugar Brioche&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Syndicated on: &lt;a href=&quot;https://bsky.app/profile/michaelbishop.me/post/3ki6mev6d2k2g&quot; class=&quot;u-syndication&quot;&gt;Bluesky&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/lazyweb-blog-copyrights.html" />
    <updated>2024-06-11T17:02:31Z</updated>
    <id>https://michaelbishop.me/note/lazyweb-blog-copyrights.html</id>
    <content type="html">&lt;p&gt;#lazyweb what’s the current best practice for copyright/licenses on a blog?&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/letterboxd-appletv/" />
    <updated>2023-12-25T19:05:18Z</updated>
    <id>https://michaelbishop.me/notes/letterboxd-appletv/</id>
    <content type="html">&lt;p&gt;Ohhhh, I like having Letterboxd on the Apple TV. That might get me to go pro. I want to track what I’ve watched but haven’t been good about logging. Being able to do it from the TV might help.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/looking-past-succes/" />
    <updated>2024-01-16T18:53:15Z</updated>
    <id>https://michaelbishop.me/notes/looking-past-succes/</id>
    <content type="html">&lt;p&gt;I think this is a lesson we could probably apply to a lot of web development.&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;The recipe worked. I had achieved the success I was looking for years ago. But it took trying again to realize the greatness of the work we had already put in.&lt;/p&gt;
&lt;footer&gt;
&lt;cite&gt; [IDEAS IN FOOD: New-Don Revisited](https://blog.ideasinfood.com/ideas_in_food/2024/01/new-don-revisited.html) &lt;/cite&gt;
&lt;footer&gt;
&lt;/footer&gt;&lt;/footer&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/mask-composite.html" />
    <updated>2024-06-19T19:59:07Z</updated>
    <id>https://michaelbishop.me/note/mask-composite.html</id>
    <content type="html">&lt;p&gt;I’ve played around some with SVG masks and CSS masking, but this post from Andy Bell on &lt;a href=&quot;https://piccalil.li/blog/mask-image-is-pretty-handy/&quot;&gt;Mask image&lt;/a&gt; introduced me to a new CSS property: &lt;code&gt;mask-composite&lt;/code&gt;. Layer two masks and you can add, subtract, intersect or exclude them. Rad.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/mastodon-rss/" />
    <updated>2023-12-19T03:24:00Z</updated>
    <id>https://michaelbishop.me/note/mastodon-rss/</id>
    <content type="html">&lt;p&gt;Speaking of NetNewsWire and Mastodon, Brent Simmons wrote some thoughts about &lt;a href=&quot;https://inessential.com/2023/12/17/on_mastodon_support_in_netnewswire&quot; class=&quot;u-in-reply-to&quot;&gt;Mastodon support in NetNewsWire&lt;/a&gt;. I’m enjoying being able to follow Mastodon accounts using &lt;a href=&quot;http://fed.brid.gy&quot;&gt;fed.brid.gy&lt;/a&gt; and reading them in NetNewsWire. Folks may also want to look at &lt;a href=&quot;https://granary.io&quot;&gt;Granary&lt;/a&gt; for converting Mastodon feeds to other formats.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/neostandard.html" />
    <updated>2024-05-31T17:27:18Z</updated>
    <id>https://michaelbishop.me/note/neostandard.html</id>
    <content type="html">&lt;p&gt;Catching up on my feeds and I see &lt;a href=&quot;https://mastodon.social/@voxpelli/112525896276661651&quot;&gt;@voxpelli&lt;/a&gt; announced a new &lt;a href=&quot;https://github.com/neostandard/neostandard&quot;&gt;JS linter&lt;/a&gt;. I have wanted to implement a linter for my Eleventy work and with the need to convert to ESM this should be a good time to start.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/netilify-wm/" />
    <updated>2024-02-06T18:43:55Z</updated>
    <id>https://michaelbishop.me/notes/netilify-wm/</id>
    <content type="html">&lt;p&gt;Just discovered there’s a default &lt;code&gt;WEBMENTION_LIMIT&lt;/code&gt; for the Netlify webmention plugin that’s set to &lt;code&gt;1&lt;/code&gt;. Meaning it will by default only send a webmention for the first link in a post. I think. Still testing.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/open-bluesky.html" />
    <updated>2024-02-06T00:50:29Z</updated>
    <id>https://michaelbishop.me/note/open-bluesky.html</id>
    <content type="html">&lt;p&gt;Bluesky is now open to the public. Somehow I don’t see the folks who are on Twitter still migrating. I’ll miss them.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/pull-quote-update.html" />
    <updated>2024-07-13T02:10:44Z</updated>
    <id>https://michaelbishop.me/note/pull-quote-update.html</id>
    <content type="html">&lt;p&gt;Took everything I’ve learned from&lt;br&gt;
&lt;a href=&quot;https://leanwebclub.com&quot;&gt;Lean Web Club&lt;/a&gt; so far and rewrote the pull-quote web component I’d (embarrassingly) cobbled together a few months ago. All kinds of style hooks &amp;amp; added the &lt;code&gt;right&lt;/code&gt; attribute to float either side. Demo link in readme. &lt;a href=&quot;https://github.com/miklb/pull-quote/&quot;&gt;GitHub - GitHub - miklb/pull-quote: a little HTML web component to add pull quotes · GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Pull Quote Web Component</title>
    <link href="https://michaelbishop.me/note/pull-quote.html" />
    <updated>2024-02-11T17:29:13Z</updated>
    <id>https://michaelbishop.me/note/pull-quote.html</id>
    <content type="html">&lt;p&gt;Whipped up a little web component to create pull quotes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/miklb/pull-quote&quot;&gt;GitHub - GitHub - miklb/pull-quote: a little HTML web component to add pull quotes · GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/reply-chris-charts/" />
    <updated>2024-01-31T03:56:13Z</updated>
    <id>https://michaelbishop.me/notes/reply-chris-charts/</id>
    <content type="html">&lt;p&gt;I don’t know if this reply will work but &lt;a href=&quot;https://mastodon.social/@Chris/111847648374546577&quot; class=&quot;u-in-reply-to&quot; rel=&quot;in-reply-to&quot;&gt;@chris@mastodon.social&lt;/a&gt;but I’m interested in this too. I have an eleventy site I built using charts.js and I stick the table into a &lt;code&gt;details&lt;/code&gt; with &lt;a href=&quot;https://zachleat.github.io/table-saw/&quot;&gt;table-saw&lt;/a&gt; but I haven’t dug deep on acessibility.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/rip-steve-albini.html" />
    <updated>2024-05-09T22:16:15Z</updated>
    <id>https://michaelbishop.me/note/rip-steve-albini.html</id>
    <content type="html">&lt;p&gt;The news hit hard. Music has been an important part of my life since my late teens and Steve Albini’s influence on the music I listen to is incalcuable. I’m not a musician and never wanted to be in a band, but over the last couple of years, the last year in particular, I wanted to be like him. Be a fucking earnest professional with a strong set of ethics and to speak up for those that can’t.&lt;/p&gt;
&lt;p&gt;I came across this quote in one of the many &lt;a href=&quot;https://defector.com/everyone-has-a-steve-albini-album&quot;&gt;tributes&lt;/a&gt; written over the last day.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“I want to do things in a certain way that I can be proud of, that is sustainable and is fair and equitable to everybody that I interact with. If I can do that, then that’s a success, and success means that I get to do it again tomorrow.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=maybe&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/safari-view-transitions.html" />
    <updated>2024-06-11T02:18:45Z</updated>
    <id>https://michaelbishop.me/note/safari-view-transitions.html</id>
    <content type="html">&lt;p&gt;This is not a drill &lt;a href=&quot;https://webkit.org/blog/15443/news-from-wwdc24-webkit-in-safari-18-beta/&quot;&gt;WebKit added support for the View Transitions API in Safari 18 beta&lt;/a&gt;. “Safari supports the CSS View Transitions Module Level 1 specification.” 🎉&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/sell-art/" />
    <updated>2024-01-12T05:05:59Z</updated>
    <id>https://michaelbishop.me/notes/sell-art/</id>
    <content type="html">&lt;p&gt;Today taught me I very much would like to make and sell art as a job. Which I’ve learned is much different than just making art.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/sheepshead-12-23/" />
    <updated>2023-12-24T02:12:58Z</updated>
    <id>https://michaelbishop.me/notes/sheepshead-12-23/</id>
    <content type="html">&lt;p&gt;I haven’t written up much yet about my latest passion and I haven’t fixed up photo posting so this post is a test.&lt;br&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://michaelbishop.me/assets/img/hBpjMkp5GO-1280.avif 1280w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelbishop.me/assets/img/hBpjMkp5GO-1280.webp 1280w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://michaelbishop.me/assets/img/hBpjMkp5GO-1280.jpeg&quot; alt=&quot;Gyotoaku print of a sheepshead.&quot; width=&quot;1280&quot; height=&quot;960&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/sidebar-footnotes.html" />
    <updated>2024-06-12T18:23:22Z</updated>
    <id>https://michaelbishop.me/note/sidebar-footnotes.html</id>
    <content type="html">&lt;p&gt;I have always wanted to use more footnotes&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://michaelbishop.me/note/sidebar-footnotes.html#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;. And I have always &lt;em&gt;coveted&lt;/em&gt; folks who have managed to pull off having their footnotes hang out in the sidebar. Just feels like a better reading experience for an aside, which is how I mostly use them. Michelle Barker &lt;a href=&quot;https://css-irl.info/another-anchor-positioning-demo-multiple-anchors/&quot;&gt;demos&lt;/a&gt; how the coming-soon CSS Anchor Positioning will make it easier to accomplish. Unfortunately I’m not sure where Webkit/Safari is with implementing. But checking out the demo in latest Chrome, I hope it’s soon.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;I use a combination of a VSCode extension and a markdown-it plugin with Eleventy. &lt;a href=&quot;https://michaelbishop.me/note/sidebar-footnotes.html#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/sure-another-project.html" />
    <updated>2024-06-11T17:02:31Z</updated>
    <id>https://michaelbishop.me/note/sure-another-project.html</id>
    <content type="html">&lt;p&gt;Me, with a dozen unfinished projects: “I should start a new blog with that domain I’ve been sitting on for 7 years.”&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/technical-writing-guidebook/" />
    <updated>2024-01-06T02:55:46Z</updated>
    <id>https://michaelbishop.me/notes/technical-writing-guidebook/</id>
    <content type="html">&lt;p&gt;A few years back the lack of effort in documentating an open source project bit me pretty hard. Since then I’ve really grown to appreciate technical writing and good documentation. What a lovely resource.&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;You may wonder: how can I write technical content? Do I need to be a great coder? Do I need to have a background in writing? Let me answer those last two questions now: no. Writing is all about communication, as I discuss throughout Software Technical Writing: A Guidebook. If you have some technical skills and enjoy refining your communication skills, you have the mindset you need to write technical content.&lt;/p&gt;
&lt;footer&gt;
&lt;cite&gt;&lt;a href=&quot;https://michaelbishop.me/notes/technical-writing-guidebook/%E2%80%9Chttps:/jamesg.blog/2024/01/03/software-technical-writing/)%E2%80%9D&quot;&gt;Software Technical Writing: A Guidebook | James&#39; Coffee Blog&lt;/a&gt;&lt;/cite&gt;
&lt;footer&gt;
&lt;/footer&gt;&lt;/footer&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/test-11-2-24/" />
    <updated>2024-11-29T12:25:12Z</updated>
    <id>https://michaelbishop.me/notes/test-11-2-24/</id>
    <content type="html">&lt;p&gt;test.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/test_7-24/" />
    <updated>2024-11-29T12:25:12Z</updated>
    <id>https://michaelbishop.me/notes/test_7-24/</id>
    <content type="html">&lt;p&gt;A post without a title or permalink.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/testing-webmention-send/" />
    <updated>2024-02-06T00:50:29Z</updated>
    <id>https://michaelbishop.me/notes/testing-webmention-send/</id>
    <content type="html">&lt;p&gt;Testing a theory.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/thank-you-chris/" />
    <updated>2024-01-08T16:28:40Z</updated>
    <id>https://michaelbishop.me/notes/thank-you-chris/</id>
    <content type="html">&lt;p&gt;I shared my PostCSS post on Twitter &amp;amp; Bluesky and tagged the author. Mostly out of habit, but sure, to ping them. No expecations. A like was nice. Much to my surprise checking my RSS feeds last night I saw my name in a post following up on the discussion. Thank you.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/trout-fishing-unpluggged/" />
    <updated>2024-02-11T17:29:13Z</updated>
    <id>https://michaelbishop.me/note/trout-fishing-unpluggged/</id>
    <content type="html">&lt;p&gt;Today I hiked a mile into a nature preserve, then waded out thigh deep into Tampa Bay and caught trout all afternoon. Highly recommend unplugging and recharging. And I’ll get to make more art.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
&lt;p&gt;Syndicated on: &lt;a href=&quot;https://bsky.app/profile/michaelbishop.me/post/3kmbv2yyauy2u&quot; class=&quot;u-syndication&quot;&gt;Bluesky&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Twilight Cardinals</title>
    <link href="https://michaelbishop.me/notes/twilight-cardinals/" />
    <updated>2024-05-08T00:39:50Z</updated>
    <id>https://michaelbishop.me/notes/twilight-cardinals/</id>
    <content type="html">&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://michaelbishop.me/assets/img/RbXs_AVHDz-1898.avif 1898w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://michaelbishop.me/assets/img/RbXs_AVHDz-1898.webp 1898w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://michaelbishop.me/assets/img/RbXs_AVHDz-1898.jpeg&quot; alt=&quot;Adult female cardinal on a hanging feeder with juvenile cardinal perched above.&quot; width=&quot;1898&quot; height=&quot;1898&quot;&gt;&lt;/picture&gt;
&lt;p&gt;I’ve been a passive bird watcher since just before the pandemic. I started with a feeder on the font porch and have since added a few more around the house. Primarly around my backporch after I screened it in and added a fan. I spend as much time as I can out there, and the birds have become a constant source of joy. I picked up these &lt;a href=&quot;https://a.co/d/5anOs7a&quot;&gt;hanging feeders/bird baths&lt;/a&gt; off Amazon for $10 a piece and they’re great&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://michaelbishop.me/notes/twilight-cardinals/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;. The hanger is &lt;em&gt;repurposed&lt;/em&gt; galvanized pipe that used to be under the house.&lt;/p&gt;
&lt;p&gt;So there’s a mated pair of cardinals that come around every evening like clock work around dusk. Blame the copious amounts of &lt;em&gt;The National&lt;/em&gt; I’ve been listening to lately, but I’ve taken to calling them the Twilight Cardinals. This year they’ve brought their offspring around. I’ve seen the juvenile since it was closer to a fledling. Barely able to balance on the pipe squawking with its beak wide open. Now it’s able to stable itself and balance on the edge of the feeder.&lt;/p&gt;
&lt;p&gt;Maybe because it was the first to appear this spring—the Tufted Titmouse juvies are starting to mix in and today an akward Red-bellied Woodpecker juvenile showed up—but this cardinal has made me reflect on the world in a way I haven’t in a while. Aging in the face of the young yet feeling as akward. Just trying to keep my balance and not fall off the perch.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky?bridgy_omit_link=maybe&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;I’d always had traditional silo feeders until I mounted an old pie pan to a post to compromise with the squirels. I put some whole peanuts and sunflower seeds in it and the birds loved it. Come raining season I’ll probably search out one that is screen bottomed. &lt;a href=&quot;https://michaelbishop.me/notes/twilight-cardinals/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/under-the-bridge/" />
    <updated>2024-05-10T23:45:02Z</updated>
    <id>https://michaelbishop.me/note/under-the-bridge/</id>
    <content type="html">&lt;p&gt;Well, I didn’t &lt;em&gt;think&lt;/em&gt; there was any good new series on righ now and then I found &lt;em&gt;Under the Bridge&lt;/em&gt; on Hulu. Lily Gladstone is amazing and it has a kick ass soundtrack.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/understanding-the-medium/" />
    <updated>2024-02-27T00:16:33Z</updated>
    <id>https://michaelbishop.me/notes/understanding-the-medium/</id>
    <content type="html">&lt;p&gt;I’m a nobody and my attitudes towards web development have been generally eschewed for the last decade. So it’s been really refreshing to read more folks speak out about the state of the web. I’ve been especially nodding along to Chris Ferdinandi over on his blog, &lt;a href=&quot;https://gomakethings.com/&quot;&gt;Go Make Things&lt;/a&gt;. Like this today, &lt;a href=&quot;https://gomakethings.com/understanding-the-medium/&quot;&gt;Understanding the Medium&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But the idea that the fix is to remove the need for front-end web professionals to write or understand CSS entirely is patently absurd.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Utopia</title>
    <link href="https://michaelbishop.me/note/utopia/" />
    <updated>2024-02-20T03:51:14Z</updated>
    <id>https://michaelbishop.me/note/utopia/</id>
    <content type="html">&lt;p&gt;I have spent a lot of time reading and researching how folks are doing fluid type these days. I’ve settled on &lt;a href=&quot;https://utopia.fyi&quot;&gt;Uptopia&lt;/a&gt; because it doesn’t force any classes or markup. It’s not a “framework.” I also like it’s built in support for PostCSS. Set a few defaults and it generates a fluid type and spacing system in the form of custom properties. Variables you can apply to your existing markup. Instead of guessing with &lt;code&gt;em&lt;/code&gt; for padding or margin you have a consistent step scale to work with.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class=&quot;u-bridgy&quot; href=&quot;https://brid.gy/publish/bluesky&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;data class=&quot;p-bridgy-omit-link&quot; value=&quot;maybe&quot;&gt;&lt;/data&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/web-share-note-1/" />
    <updated>2023-12-19T03:23:21Z</updated>
    <id>https://michaelbishop.me/note/web-share-note-1/</id>
    <content type="html">&lt;p&gt;Inspired by @zachleat.com’s evangelism of HTML Web Components I played around with turning Aaron Gustafson’s &lt;a href=&quot;https://www.aaron-gustafson.com/notebook/sharing-in-the-age-of-3p-cookie-mageddon&quot; class=&quot;u-in-reply-to&quot;&gt;progressively enhacing his share button&lt;/a&gt; into a component. It’s totally Aaron’s code so I’m not sure about formally releasing it. But I’ve seen the light.&lt;br&gt;
If you see Aaron, tell him I said thanks and if he’s cool with it I’ll clean it up and release it. &lt;a href=&quot;https://github.com/miklb/web-share-button&quot;&gt;Repo link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Syndicated on: &lt;a href=&quot;https://bsky.app/profile/michaelbishop.me/post/3kgulabu2yz24&quot; class=&quot;u-syndication&quot;&gt;Bluesky&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/note/webmention-mentions/" />
    <updated>2024-01-09T20:26:22Z</updated>
    <id>https://michaelbishop.me/note/webmention-mentions/</id>
    <content type="html">&lt;p&gt;Fixed up Webmentions a little more. Added generic &lt;code&gt;mention-of&lt;/code&gt;type which encompasses pingpacks with &lt;a href=&quot;http://webmention.io&quot;&gt;webmention.io&lt;/a&gt;. Decided to use &lt;a href=&quot;https://paulrobertlloyd.com/2023/298/a1/indieweb_identity/&quot;&gt;Paul Robert Loyd’s Webmention svg icon&lt;/a&gt; for a default img when no author img available.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;u-bridgy-fed&quot; href=&quot;https://fed.brid.gy/&quot; hidden=&quot;from-humans&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/timestamp-test/" />
    <updated>2023-11-04T21:19:54Z</updated>
    <id>https://michaelbishop.me/notes/timestamp-test/</id>
    <content type="html">&lt;p&gt;Will this timestamp filter work?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1774650233/" />
    <updated>2026-03-27T22:23:53Z</updated>
    <id>https://michaelbishop.me/notes/1774650233/</id>
    <content type="html">&lt;p&gt;personal blog bug fix Friday. is that a thing?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1774571472/" />
    <updated>2026-03-27T00:31:11Z</updated>
    <id>https://michaelbishop.me/notes/1774571472/</id>
    <content type="html">&lt;p&gt;I’ve been thinking I need a read-only version of Bluesky and the compose button is a link to my  notes app. Even if I want to reply so it goes on my site first.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1774381866/" />
    <updated>2026-03-24T19:51:06Z</updated>
    <id>https://michaelbishop.me/notes/1774381866/</id>
    <content type="html">&lt;p&gt;I feel like the responses I get from city IT now are just a series of Chatgpt responses and it’s disheartening.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1773967242/" />
    <updated>2026-03-20T00:40:42Z</updated>
    <id>https://michaelbishop.me/notes/1773967242/</id>
    <content type="html">&lt;p&gt;The logic for this video timestamp sync to the transcript clock time has been fun to figure out. Uses chapter markers and times in transcript to estimate pre-roll. I’m grabbing audio snippets from YT, run through Whisper to get match to transcript text for final offset calc.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1773787126/" />
    <updated>2026-03-17T22:38:46Z</updated>
    <id>https://michaelbishop.me/notes/1773787126/</id>
    <content type="html">&lt;p&gt;Built my first map with Protomaps (PMTiles) and not looking back. Thanks to @palewi.re for pointing me that direction &lt;a href=&quot;https://palewi.re/docs/first-pmtiles-map/&quot;&gt;palewi.re - First PMTiles Map — First PMTiles Map  documentation&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1773452807/" />
    <updated>2026-03-14T01:46:46Z</updated>
    <id>https://michaelbishop.me/notes/1773452807/</id>
    <content type="html">&lt;p&gt;added a new tool to the local data toolbox—scraping property appraiser data 👀&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1773285510/" />
    <updated>2026-03-12T03:18:30Z</updated>
    <id>https://michaelbishop.me/notes/1773285510/</id>
    <content type="html">&lt;p&gt;Quick test of something &lt;a href=&quot;https://adactio.com/journal/22450&quot;&gt;adactio.com - Adactio: Journal—A web font strategy&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1773244121/" />
    <updated>2026-03-11T15:48:40Z</updated>
    <id>https://michaelbishop.me/notes/1773244121/</id>
    <content type="html">&lt;p&gt;I mentioned Acme Weather for bringing back accurate rain notifications, but another feature is “alternative graphs” to give indication of possible variation in prediction. Michael Tsai has a nice collection of quotes about the feature. &lt;a href=&quot;https://mjtsai.com/blog/2026/03/10/acme-weather-1-0/&quot;&gt;mjtsai.com - Michael Tsai - Blog  -  Acme Weather 1.0&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1773242974/" />
    <updated>2026-03-11T15:29:34Z</updated>
    <id>https://michaelbishop.me/notes/1773242974/</id>
    <content type="html">&lt;p&gt;You know the cool thing about all of these AI agent skills? It’s just plain text markdown with code snippets. A series of README files. Ones a human can also read and follow to learn how to do something—if written well.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1773183115/" />
    <updated>2026-03-10T22:51:54Z</updated>
    <id>https://michaelbishop.me/notes/1773183115/</id>
    <content type="html">&lt;p&gt;internet friends please help. I need a new home office printer. 3-in-1 ideally with decent color. recs?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1771615653/" />
    <updated>2026-02-20T19:27:32Z</updated>
    <id>https://michaelbishop.me/notes/1771615653/</id>
    <content type="html">&lt;p&gt;So much of what developers build are new ways to yak shave. Yet you hand them a yak sized cordless Norelco and they’re all like, “no bro, I only yak shave with a straight razor” as you note a part of a missing finger.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1771103281/" />
    <updated>2026-02-14T21:08:01Z</updated>
    <id>https://michaelbishop.me/notes/1771103281/</id>
    <content type="html">&lt;p&gt;Happy Valentimes. I fixed the toilet.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1770935399/" />
    <updated>2026-02-12T22:29:58Z</updated>
    <id>https://michaelbishop.me/notes/1770935399/</id>
    <content type="html">&lt;p&gt;Working at a house on the river today &amp;amp; saw a regal Great Horned Owl and a first for me Black-eyed Warbler. Unfortunately no pics.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1770925707/" />
    <updated>2026-02-12T19:48:27Z</updated>
    <id>https://michaelbishop.me/notes/1770925707/</id>
    <content type="html">&lt;p&gt;LLMs are not the cause of toxic behavior in open source.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1770862688/" />
    <updated>2026-02-12T02:18:08Z</updated>
    <id>https://michaelbishop.me/notes/1770862688/</id>
    <content type="html">&lt;p&gt;I don’t like the whole eggs in one basket but the potential of using Cloudflare infra (Pages, Workers, D1, R2 and Zero Trust) to build dynamic web apps is my kind of playground.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1770137952/" />
    <updated>2026-02-03T16:59:12Z</updated>
    <id>https://michaelbishop.me/notes/1770137952/</id>
    <content type="html">&lt;p&gt;Got the best compliment about something small I’m building. “It’s idiot proof.”&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1770059056/" />
    <updated>2026-02-02T19:04:16Z</updated>
    <id>https://michaelbishop.me/notes/1770059056/</id>
    <content type="html">&lt;p&gt;So that’s awesome. My idea of using Cloudflare Zero Trust for a custom admin for a static site worked.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1769663674/" />
    <updated>2026-01-29T05:14:34Z</updated>
    <id>https://michaelbishop.me/notes/1769663674/</id>
    <content type="html">&lt;p&gt;Currently exploring using 11ty to build a single page admin/posting interface wired up to a Cloudflare Worker. Protected using Cloudflare Access. Netlify’s Idenyity is deprecated, everything I’ve looked at requires GitHub account for auth.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1769554331/" />
    <updated>2026-01-27T22:52:11Z</updated>
    <id>https://michaelbishop.me/notes/1769554331/</id>
    <content type="html">&lt;p&gt;Let it be known this homegrown Florida boy is not doing well with this cold weather. A week of this might kill me.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1769292234/" />
    <updated>2026-01-24T22:03:53Z</updated>
    <id>https://michaelbishop.me/notes/1769292234/</id>
    <content type="html">&lt;p&gt;Checking the weather before going out on the water tonight &amp;amp; the overnight low will be warmer than the high any day next week.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1769188786/" />
    <updated>2026-01-23T17:19:45Z</updated>
    <id>https://michaelbishop.me/notes/1769188786/</id>
    <content type="html">&lt;p&gt;fixed a bug and accidentally created dupes of a post. Trying to get in the habit of posting to my site first. Bluesky is great but…&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1769185573/" />
    <updated>2026-01-23T16:26:13Z</updated>
    <id>https://michaelbishop.me/notes/1769185573/</id>
    <content type="html">&lt;p&gt;Where do I find the meta discourse about the Berlin underground featured in this season’s Hijack?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1769032025/" />
    <updated>2026-01-21T21:47:04Z</updated>
    <id>https://michaelbishop.me/notes/1769032025/</id>
    <content type="html">&lt;p&gt;Looking for recs on brand &amp;amp; source for the &lt;em&gt;good&lt;/em&gt; tinned sardines.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1769011262/" />
    <updated>2026-01-21T16:01:01Z</updated>
    <id>https://michaelbishop.me/notes/1769011262/</id>
    <content type="html">&lt;p&gt;In other news, in True Surf, a game from World Surf League, the waves at Nazare are epic and will be pumping 35-40ft later today.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1768187855/" />
    <updated>2026-01-12T03:17:35Z</updated>
    <id>https://michaelbishop.me/notes/1768187855/</id>
    <content type="html">&lt;p&gt;This post from Rands has been bouncing around my head all weekend. Going to try and find that one stick this week. &lt;a href=&quot;https://randsinrepose.com/archives/the-stick-in-the-stream/&quot;&gt;Rands in Repose - The Stick in the Stream – Rands in Repose&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767994585/" />
    <updated>2026-01-09T21:36:25Z</updated>
    <id>https://michaelbishop.me/notes/1767994585/</id>
    <content type="html">&lt;p&gt;I characterized my use of LLMs today as “I know an idea (when building something) is bad a lot sooner.” I should add I have a lot of bad ideas.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767927839/" />
    <updated>2026-01-09T03:03:58Z</updated>
    <id>https://michaelbishop.me/notes/1767927839/</id>
    <content type="html">&lt;p&gt;Writing documentation is an art and will be more valuable as we lean more on the machines. Nice work from Julia Evans “A data model for Git (and other docs updates)” &lt;a href=&quot;https://jvns.ca/blog/2026/01/08/a-data-model-for-git/&quot;&gt;Julia Evans - A data model for Git (and other docs updates)&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767843419/" />
    <updated>2026-01-08T03:36:58Z</updated>
    <id>https://michaelbishop.me/notes/1767843419/</id>
    <content type="html">&lt;p&gt;One last test to see if links in content syndicated through Bridgy unfurl. Please ignore &lt;a href=&quot;https://tampamonitor.com/tampa-city-council/preview/1-8-26-soho-flood-relief-project-back-on-agenda-as-council-catches-up-on-unfinished-business/&quot;&gt;The Tampa Monitor - 1/8/26 – SoHo Flood Relief Project Back on Agenda as Council Catches Up on Unfinished Business – The Tampa Monitor&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767834904/" />
    <updated>2026-01-08T01:15:04Z</updated>
    <id>https://michaelbishop.me/notes/1767834904/</id>
    <content type="html">&lt;p&gt;I recently discovered one of favorite blogs &lt;a href=&quot;https://blog.ideasinfood.com&quot;&gt;Ideas in Food&lt;/a&gt; was dead but fortunately it seems they are moving/moved to the top level domain https//ideasinfood.com&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767823443/" />
    <updated>2026-01-07T22:04:03Z</updated>
    <id>https://michaelbishop.me/notes/1767823443/</id>
    <content type="html">&lt;p&gt;Look at me using an outline and mind map to start a writing project.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767128099/" />
    <updated>2025-12-30T20:54:58Z</updated>
    <id>https://michaelbishop.me/notes/1767128099/</id>
    <content type="html">&lt;p&gt;Let’s see what happens when we press this button.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767079714/" />
    <updated>2025-12-30T07:28:33Z</updated>
    <id>https://michaelbishop.me/notes/1767079714/</id>
    <content type="html">&lt;p&gt;One last test for the night.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767074727/" />
    <updated>2025-12-30T06:05:26Z</updated>
    <id>https://michaelbishop.me/notes/1767074727/</id>
    <content type="html">&lt;p&gt;Testing Micropub from Drafts.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767071560/" />
    <updated>2025-12-30T05:12:40Z</updated>
    <id>https://michaelbishop.me/notes/1767071560/</id>
    <content type="html">&lt;p&gt;If all goes well, this should show up on Bluesky.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/notes/1767067040/" />
    <updated>2025-12-30T03:57:20Z</updated>
    <id>https://michaelbishop.me/notes/1767067040/</id>
    <content type="html">&lt;p&gt;Testing out this &lt;a href=&quot;https://github.com/benjifs/serverless-micropub&quot;&gt;serverless-micropub&lt;/a&gt; endpoint for Netlify.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/replies/1774571486/" />
    <updated>2026-03-27T00:31:25Z</updated>
    <id>https://michaelbishop.me/replies/1774571486/</id>
    <content type="html">&lt;p&gt;I’ve been thinking I need a read-only version of Bluesky and the compose button is a link to my  notes app. Even if I want to reply so it goes on my site first.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/replies/1773291904/" />
    <updated>2026-03-12T05:05:03Z</updated>
    <id>https://michaelbishop.me/replies/1773291904/</id>
    <content type="html">&lt;p&gt;Fixed?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/replies/1773287509/" />
    <updated>2026-03-12T03:51:49Z</updated>
    <id>https://michaelbishop.me/replies/1773287509/</id>
    <content type="html">&lt;p&gt;One more reply test for the night.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://michaelbishop.me/replies/1773286099/" />
    <updated>2026-03-12T03:28:18Z</updated>
    <id>https://michaelbishop.me/replies/1773286099/</id>
    <content type="html">&lt;p&gt;How are &lt;a href=&quot;https://adactio.com/journal/22450&quot;&gt;markdown links&lt;/a&gt; handled then?&lt;/p&gt;
</content>
  </entry>
</feed>