<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Stuart Breckenridge</title><description>Personal blog by Stuart Breckenridge. App development, Apple ecosystem, cycling, and more.</description><link>https://stuartbreckenridge.net/</link><language>en-us</language><atom:link href="https://stuartbreckenridge.net/rss.xml" rel="self" type="application/rss+xml"/><image><url>https://stuartbreckenridge.net/favicon-v20260420.png</url><title>Stuart Breckenridge</title><link>https://stuartbreckenridge.net/</link></image><item><title>Sir Patrick Stewart Dies at 86</title><link>https://stuartbreckenridge.net/2026-11-01-sir-patrick-stewart-dies-at-86/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01M6BRAQ506AME66ED09W60SG3</guid><description>A legend of stage, screen, and the 24th century.</description><pubDate>Sun, 01 Nov 2026 14:31:02 GMT</pubDate><content:encoded>&lt;p&gt;Adrian Horton and Benjamin Lee, &lt;a href=&quot;https://www.theguardian.com/culture/2026/oct/29/patrick-stewart-dead&quot;&gt;The Guardian&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Patrick Stewart, the acclaimed British stage and screen actor renowned for both Shakespeare and sci-fi, has died. He was 86.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;With his authoritative baritone voice and commanding visage, Stewart was already a staple of the British stage by the late 1980s when, at 47, he was cast as a graying Capt Jean-Luc Picard in Star Trek: the Next Generation, the first live-action spin-off of the groundbreaking 1960s TV series. Over seven seasons onboard the Starship Enterprise, Stewart’s even-keeled performance and steely directives – “engage!” and “make it so” – turned him into a global star.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Extremely sad news.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Next Generation&lt;/em&gt; was the Star Trek I grew up with and &lt;em&gt;Picard&lt;/em&gt; Season 3 was the last Star Trek series I re-watched. Stewart&apos;s portrayal of Captain Picard was calm, measured, with a believable and unwavering moral conviction — qualities you&apos;d want in any military or business leader.&lt;/p&gt;
&lt;p&gt;Outside of Star Trek, Stewart also appeared in one of my favourite episodes of &lt;em&gt;Frasier&lt;/em&gt;: &lt;em&gt;The Doctor Is Out&lt;/em&gt;, showing his comedic range...&lt;/p&gt;
&lt;div class=&quot;kg-embed-card&quot;&gt;
  &lt;iframe src=&quot;https://www.youtube.com/embed/ZhGQgbXWo4I&quot; title=&quot;Patrick Stewart as Alistair Burke&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;p&gt;A lifetime of legendary performances.&lt;/p&gt;
</content:encoded></item><item><title>You Can Now Polish Your Devices For Less</title><link>https://stuartbreckenridge.net/2026-08-25-polish-for-less/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01M0WNY5DB1J3AM7KGRD5Q8A1S</guid><pubDate>Tue, 25 Aug 2026 14:42:07 GMT</pubDate><content:encoded>&lt;p&gt;Joe Rossignol, at &lt;a href=&quot;https://www.macrumors.com/2026/08/25/apple-releases-new-polishing-cloth/&quot;&gt;Macrumors&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Apple today released a &lt;a href=&quot;https://www.apple.com/shop/product/mlh74am/a/polishing-cloth&quot;&gt;new version of its Polishing Cloth&lt;/a&gt; on its online store. In the U.S., pricing is now set at $9, down from $19 for the previous version of the cloth.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The reduction in price&lt;sup&gt;&lt;a id=&quot;fn-ref-discount&quot; href=&quot;https://stuartbreckenridge.net/2026-08-25-polish-for-less/#fn-discount&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; is the least Apple could do: the Polishing Cloth is one of their only products not affected by the RAM and storage crisis.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn-discount&quot;&gt;
&lt;p&gt;52.6%!!! &lt;a href=&quot;https://stuartbreckenridge.net/2026-08-25-polish-for-less/#fn-ref-discount&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title>Moving Feed Discovery to /.well-known</title><link>https://stuartbreckenridge.net/2026-05-04-moving-feed-discovery-to-well-known/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01KQSM4R2Q1FT0X2TGN0B167VM</guid><description>Remove the guesswork from feed discovery.</description><pubDate>Mon, 04 May 2026 13:51:46 GMT</pubDate><content:encoded>&lt;p&gt;A few weeks ago I wrote about how RSS discovery is &lt;a href=&quot;https://stuartbreckenridge.net/2026-03-13-making-rss-discoverable/&quot;&gt;hard&lt;/a&gt;. In that particular example I used the BBC, who make things notoriously difficult because they don&apos;t even surface their feeds in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; element of their site. However, since writing that piece, I&apos;ve been thinking about better ways for RSS readers to discover feeds, and it turns out I&apos;m not the only one.&lt;/p&gt;
&lt;p&gt;There&apos;s an &lt;a href=&quot;https://datatracker.ietf.org/doc/html/draft-nottingham-feed-menu-00#name-feed-menu-documents&quot;&gt;Internet-Draft&lt;/a&gt; that proposes moving feed discovery to &lt;code&gt;/.well-known/feed-menu.json&lt;/code&gt;, which I think, in principle, is a great idea. Take the following &lt;em&gt;very common&lt;/em&gt; use case:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the user provides a website &lt;code&gt;https://example.com&lt;/code&gt; to a feed reader&lt;/li&gt;
&lt;li&gt;the feed reader scans &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; and can&apos;t find any feeds&lt;/li&gt;
&lt;li&gt;the feed reader then makes &lt;em&gt;educated&lt;/em&gt; guesses to find feeds, e.g.,&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/feed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/rss&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rss.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/atom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;and so on&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contrast that with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the user provides a website &lt;code&gt;https://example.com&lt;/code&gt; to a feed reader&lt;/li&gt;
&lt;li&gt;the feed reader reads &lt;code&gt;https://example.com/.well-known/feed-menu.json&lt;/code&gt; and immediately has a full rundown of the feeds the site offers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The benefits are clear.&lt;/p&gt;
&lt;h2&gt;What I Would Change About Feed Menu&lt;/h2&gt;
&lt;p&gt;The name. I think &lt;em&gt;Feed Menu&lt;/em&gt; is not serious enough for a standard. I&apos;d prefer something along the lines of &lt;code&gt;/.well-known/syndication.json&lt;/code&gt; or, even simpler, just &lt;code&gt;/.well-known/feeds.json&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I&apos;d also expand each object in &lt;code&gt;feeds&lt;/code&gt; so that it is explicit about title, URL, format, version, and media type.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;publisher&quot;: {
    &quot;name&quot;: &quot;Stuart Breckenridge&quot;,
    &quot;url&quot;: &quot;https://stuartbreckenridge.net/&quot;,
    &quot;contact_url&quot;: &quot;https://stuartbreckenridge.net/about&quot;
  },
  &quot;feeds&quot;: [
    {
      &quot;title&quot;: &quot;Stuart Breckenridge&quot;,
      &quot;url&quot;: &quot;https://stuartbreckenridge.net/feed.json&quot;,
      &quot;format&quot;: &quot;jsonfeed&quot;,
      &quot;version&quot;: &quot;1.1&quot;,
      &quot;rel&quot;: &quot;self&quot;,
      &quot;media_type&quot;: &quot;application/feed+json&quot;,
      &quot;preferred&quot;: true
    },
    {
      &quot;title&quot;: &quot;Stuart Breckenridge&quot;,
      &quot;url&quot;: &quot;https://stuartbreckenridge.net/atom.xml&quot;,
      &quot;format&quot;: &quot;atom&quot;,
      &quot;rel&quot;: &quot;alternate&quot;,
      &quot;media_type&quot;: &quot;application/atom+xml&quot;
    },
    {
      &quot;title&quot;: &quot;Stuart Breckenridge&quot;,
      &quot;url&quot;: &quot;https://stuartbreckenridge.net/rss.xml&quot;,
      &quot;format&quot;: &quot;rss&quot;,
      &quot;version&quot;: &quot;2.0&quot;,
      &quot;rel&quot;: &quot;alternate&quot;,
      &quot;media_type&quot;: &quot;application/rss+xml&quot;
    },
    {
      &quot;title&quot;: &quot;Stuart Breckenridge: Links&quot;,
      &quot;url&quot;: &quot;https://stuartbreckenridge.net/links/feed.json&quot;,
      &quot;format&quot;: &quot;jsonfeed&quot;,
      &quot;version&quot;: &quot;1.1&quot;,
      &quot;rel&quot;: &quot;alternate&quot;,
      &quot;media_type&quot;: &quot;application/feed+json&quot;
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A single GET to &lt;code&gt;/.well-known/feeds.json&lt;/code&gt; would give a feed reader everything it needs.&lt;/p&gt;
</content:encoded></item><item><title>Enhanced Feeds with Byline Data</title><link>https://stuartbreckenridge.net/2026-05-03-enhanced-feeds-with-byline-data/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01KQPWXDVZSHD2X2ZVASCT3NEG</guid><description>One must keep the feeds in order.</description><pubDate>Sun, 03 May 2026 12:27:20 GMT</pubDate><content:encoded>&lt;p&gt;The feeds on this site now support the nascent &lt;a href=&quot;https://www.bylinespec.org/&quot;&gt;Byline&lt;/a&gt; specification. While this is a single-person blog, the change gives supporting feed readers the data they need to differentiate between linked items (&lt;code&gt;curation&lt;/code&gt;), reviews (&lt;code&gt;review&lt;/code&gt;), and announcements (&lt;code&gt;announcement&lt;/code&gt;).&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;channel&amp;gt;
  &amp;lt;title&amp;gt;Stuart Breckenridge&amp;lt;/title&amp;gt;
  &amp;lt;description&amp;gt;Personal blog by Stuart Breckenridge. App development, Apple ecosystem, cycling, and more.&amp;lt;/description&amp;gt;
  &amp;lt;link&amp;gt;https://stuartbreckenridge.net/&amp;lt;/link&amp;gt;
  &amp;lt;language&amp;gt;en-us&amp;lt;/language&amp;gt;
  &amp;lt;atom:link href=&quot;https://stuartbreckenridge.net/rss.xml&quot; rel=&quot;self&quot; type=&quot;application/rss+xml&quot;/&amp;gt;
  &amp;lt;byline:contributors&amp;gt;
    &amp;lt;byline:person id=&quot;stuart&quot;&amp;gt;
      &amp;lt;byline:name&amp;gt;Stuart Breckenridge&amp;lt;/byline:name&amp;gt;
      &amp;lt;byline:context&amp;gt;iOS developer, program manager, cyclist, and writer about apps, Apple, RSS, and technology.&amp;lt;/byline:context&amp;gt;
      &amp;lt;byline:url&amp;gt;https://stuartbreckenridge.net/about&amp;lt;/byline:url&amp;gt;
      &amp;lt;byline:profile href=&quot;https://indieweb.social/@stuarticus&quot; rel=&quot;mastodon&quot;/&amp;gt;
      &amp;lt;byline:profile href=&quot;https://github.com/stuartbreckenridge&quot; rel=&quot;github&quot;/&amp;gt;
      &amp;lt;byline:profile href=&quot;https://bsky.app/profile/stuartbreckenridge.net&quot; rel=&quot;bluesky&quot;/&amp;gt;
      &amp;lt;byline:profile href=&quot;https://threads.net/@stuarticus&quot; rel=&quot;threads&quot;/&amp;gt;
    &amp;lt;/byline:person&amp;gt;
  &amp;lt;/byline:contributors&amp;gt;
  &amp;lt;image&amp;gt;
    &amp;lt;url&amp;gt;https://stuartbreckenridge.net/favicon-v20260420.png&amp;lt;/url&amp;gt;
    &amp;lt;title&amp;gt;Stuart Breckenridge&amp;lt;/title&amp;gt;
    &amp;lt;link&amp;gt;https://stuartbreckenridge.net/&amp;lt;/link&amp;gt;
  &amp;lt;/image&amp;gt;
  &amp;lt;item&amp;gt;
    &amp;lt;title&amp;gt;Enhanced Feeds with Byline Data&amp;lt;/title&amp;gt;
    &amp;lt;link&amp;gt;https://stuartbreckenridge.net/2026-05-03-enhanced-feeds-with-byline-data/?utm_source=rss&amp;amp;utm_medium=feed&amp;lt;/link&amp;gt;
    &amp;lt;guid isPermaLink=&quot;false&quot;&amp;gt;01KQPWXDVZSHD2X2ZVASCT3NEG&amp;lt;/guid&amp;gt;
    &amp;lt;pubDate&amp;gt;Sun, 03 May 2026 12:27:20 GMT&amp;lt;/pubDate&amp;gt;
    &amp;lt;content:encoded&amp;gt; &amp;lt;p&amp;gt;The feeds on this site now support the nascent &amp;lt;a href=&quot;https://www.bylinespec.org/&quot;&amp;gt;Byline&amp;lt;/a&amp;gt; specification. While this is a single-person blog, the change gives supporting feed readers the data they need to differentiate between linked items (&amp;lt;code&amp;gt;curation&amp;lt;/code&amp;gt;), reviews (&amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt;), and announcements (&amp;lt;code&amp;gt;announcement&amp;lt;/code&amp;gt;).&amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt;&amp;lt;code class=&quot;language-xml&quot;&amp;gt; &amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/content:encoded&amp;gt;
    &amp;lt;byline:author ref=&quot;stuart&quot;/&amp;gt;
    &amp;lt;byline:role&amp;gt;creator&amp;lt;/byline:role&amp;gt;
    &amp;lt;byline:perspective&amp;gt;personal&amp;lt;/byline:perspective&amp;gt;
    &amp;lt;/item&amp;gt;
&amp;lt;/channel&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>&apos;One Month In&apos;</title><link>https://stuartbreckenridge.net/2026-05-01-one-month-in/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01KQJY91TN2XPS00QDVV99P51K</guid><description>How things are going.</description><pubDate>Fri, 01 May 2026 23:34:12 GMT</pubDate><content:encoded>&lt;p&gt;Gobbler&apos;s &lt;a href=&quot;https://gobbler.press/blog/one-month-in/&quot;&gt;Month One Update&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Gobbler is one month old. Overall, it’s been a stable first month, with user numbers growing and a few interesting events along the way.&lt;/p&gt;
&lt;h2&gt;Stability&lt;/h2&gt;
&lt;p&gt;According to DigitalOcean, Gobbler had over 99% uptime. There was the odd latency spike from distant regions (think us_east to se_asia), but nothing worrying. The database is also performing well as the number of entries grows (at time of writing, ~150,000).&lt;/p&gt;
&lt;h2&gt;Success, 403s, and 404s When You Least Expect Them&lt;/h2&gt;
&lt;p&gt;Despite initially working fine, &lt;code&gt;*.substack.com&lt;/code&gt; and &lt;code&gt;medium.com&lt;/code&gt; feeds stopped working in their entirety in weeks three and four, respectively. This has largely been resolved by routing fetches to these domains via Cloudflare egress. Gobbler has also been submitted to Cloudflare’s Bot Verification Program, which should make the egress workaround a thing of the past.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;youtube.com&lt;/code&gt; feeds are special. For most of the day they’ll work fine, then they’ll 404 for a few hours, then they’ll work fine again. It’s a &lt;a href=&quot;https://www.reddit.com/r/youtube/comments/1r61jpo/all_youtube_channel_rss_feeds_are_down_return_404/&quot;&gt;known issue&lt;/a&gt; and there doesn’t appear to be a solution.&lt;/p&gt;
&lt;p&gt;The only other problematic sites belong to, or are partnered with, IGN Entertainment. We have reached out to IGN to see if this can be resolved. However, as these sites are protected by Cloudflare, Bot Verification is hopefully the long-term solution.&lt;/p&gt;
&lt;p&gt;Outside of the above, 5% of feeds are not reachable due to network errors, and Gobbler’s article fetch success rate sits at 84%.&lt;/p&gt;
&lt;h2&gt;Improvements in Month 1&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New accounts: switched from email/password to social sign-in (Apple, Microsoft, Google) and app passwords&lt;/li&gt;
&lt;li&gt;Implemented WebSub support&lt;/li&gt;
&lt;li&gt;Improved newsletter rendering&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
</content:encoded><atom:updated>2026-05-03T11:13:00.000Z</atom:updated></item><item><title>Astro 6.1</title><link>https://stuartbreckenridge.net/2026-04-28-astro-6/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01KQA26J1RK66P6CRTCNMB7JAA</guid><description>Astro 5 to 6.1</description><pubDate>Tue, 28 Apr 2026 12:49:35 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve upgraded the site from Astro 5 all the way to Astro 6.1. Everything should be as it was, but what&apos;s gone on behind the scenes is extensive. A short summary of what&apos;s changed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Posts have been reorganised — each post is now its own folder with its images sitting alongside the markdown.&lt;/li&gt;
&lt;li&gt;All post images have been converted from PNG/JPG to WebP &lt;sup&gt;&lt;a id=&quot;fn-ref-1&quot; href=&quot;https://stuartbreckenridge.net/2026-04-28-astro-6/#fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. The legacy versions are still around so existing feed entries don&apos;t break.&lt;/li&gt;
&lt;li&gt;Search results have been visually fixed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unrelated to Astro 6.1, the &lt;code&gt;/atom.xml&lt;/code&gt; feed is now using &lt;a href=&quot;https://websubhub.com&quot;&gt;WebSubHub&lt;/a&gt;, so if your reader supports it, you&apos;ll now see posts close to when they are published.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1-2026-04-28&quot;&gt;
&lt;p&gt;Addresses &lt;a href=&quot;https://news.ycombinator.com/item?id=47482462&quot;&gt;this comment&lt;/a&gt;, which was harsh but fair. &lt;a href=&quot;https://stuartbreckenridge.net/2026-04-28-astro-6/#fn-ref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title>&apos;Someone Bought 30 WordPress Plugins and Planted a Backdoor in All of Them&apos;</title><link>https://stuartbreckenridge.net/2026-04-27-someone-bought-30-wordpress-plugins-and-planted-a-backdoor-in-all-of-them/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01KQ7AKKRWPG96MAEAAQVP5NWS</guid><description>This keeps happening.</description><pubDate>Mon, 27 Apr 2026 11:18:48 GMT</pubDate><content:encoded>&lt;p&gt;Austin Ginder, &lt;a href=&quot;https://anchor.host/someone-bought-30-wordpress-plugins-and-planted-a-backdoor-in-all-of-them/&quot;&gt;Anchor Hosting&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Last week, I wrote about catching a supply chain attack on a WordPress plugin called Widget Logic. A trusted name, acquired by a new owner, turned into something malicious. It happened again. This time at a much larger scale.&lt;/p&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;p&gt;The injected code was sophisticated. It fetched spam links, redirects, and fake pages from a command-and-control server. It only showed the spam to Googlebot, making it invisible to site owners. And here is the wildest part. It resolved its C2 domain through an Ethereum smart contract, querying public blockchain RPC endpoints. Traditional domain takedowns would not work because the attacker could update the smart contract to point to a new domain at any time.&lt;/p&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;p&gt;Two supply chain attacks in two weeks. Both followed the same pattern. Buy a trusted plugin with an established install base, inherit the WordPress.org commit access, and inject malicious code. The Flippa listing for Essential Plugin was public. The buyer’s background in SEO and gambling marketing was public. And yet the acquisition sailed through without any review from WordPress.org.&lt;/p&gt;
&lt;p&gt;WordPress.org has no mechanism to flag or review plugin ownership transfers. There is no “change of control” notification to users. No additional code review triggered by a new committer. The Plugins Team responded quickly once the attack was discovered. But 8 months passed between the backdoor being planted and being caught.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&apos;s truly astonishing that WordPress, despite its scale, has such exploitable supply-chain security. I&apos;m aware of a similar npm supply-chain risk with &lt;a href=&quot;https://gobbler.press&quot;&gt;Gobbler&lt;/a&gt;, though I am using both Dependabot and Socket.dev to mitigate it.&lt;sup&gt;&lt;a id=&quot;fn-ref-1&quot; href=&quot;https://stuartbreckenridge.net/2026-04-27-someone-bought-30-wordpress-plugins-and-planted-a-backdoor-in-all-of-them/#fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1-2026-04-27&quot;&gt;
&lt;p&gt;I am also reminded of my own &lt;a href=&quot;https://stuartbreckenridge.net/2025-07-12-wpfail2ban&quot;&gt;brief stint&lt;/a&gt; with WordPress in mid-2025 — I was quite excited. However, after four days I was already concerned about its security and installed wpfail2ban. &lt;a href=&quot;https://stuartbreckenridge.net/2026-04-27-someone-bought-30-wordpress-plugins-and-planted-a-backdoor-in-all-of-them/#fn-ref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded><atom:updated>2026-04-27T14:08:00.348Z</atom:updated></item><item><title>Filtered Feeds</title><link>https://stuartbreckenridge.net/2026-04-20-filtered-feeds/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01KPN9B4AP3QN3NF7XAMXAJSBG</guid><description>Feeds are now separated in All, Featured, and Linked.</description><pubDate>Mon, 20 Apr 2026 11:10:22 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve separated the content available across the RSS, Atom, and JSON feeds on the site. You can find them all on the &lt;a href=&quot;https://stuartbreckenridge.net/about&quot;&gt;About&lt;/a&gt; page, and I&apos;ve listed them below:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feed&lt;/th&gt;
&lt;th&gt;RSS&lt;/th&gt;
&lt;th&gt;Atom&lt;/th&gt;
&lt;th&gt;JSON&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;All Posts&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/rss.xml&quot;&gt;/rss.xml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/atom.xml&quot;&gt;/atom.xml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/feed.json&quot;&gt;/feed.json&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Featured Articles&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/featured/rss.xml&quot;&gt;/featured/rss.xml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/featured/atom.xml&quot;&gt;/featured/atom.xml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/featured/feed.json&quot;&gt;/featured/feed.json&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linked List&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/links/rss.xml&quot;&gt;/links/rss.xml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/links/atom.xml&quot;&gt;/links/atom.xml&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stuartbreckenridge.net/links/feed.json&quot;&gt;/links/feed.json&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The new feeds are a bit bare right now as I&apos;ve moved this blog from platform to platform so many times, and lost content along the way. I must stop doing that.&lt;/p&gt;
</content:encoded><atom:updated>2026-04-27T11:00:00.000Z</atom:updated></item><item><title>Implementing Webmention</title><link>https://stuartbreckenridge.net/2026-04-19-implementing-webmentions/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01KPJ4DRMYTNMG40FCJJT3KJ0D</guid><description>My latest dabble into Indieweb plumbing.</description><pubDate>Sun, 19 Apr 2026 05:46:42 GMT</pubDate><content:encoded>&lt;p&gt;A few weeks ago I moved this site back to &lt;a href=&quot;https://stuartbreckenridge.net/2026-03-10-hello-astro/&quot;&gt;Astro&lt;/a&gt; and ever since I&apos;ve been curious about the &lt;a href=&quot;https://indieweb.social/@stuarticus/116424975618945377&quot;&gt;state of Webmention&lt;/a&gt; and whether I should implement it. For the &lt;a href=&quot;https://www.w3.org/TR/webmention/#abstract-p-1&quot;&gt;curious&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Webmention is a simple way to notify any URL when you mention it on your site. From the receiver&apos;s perspective, it&apos;s a way to request notifications when other sites mention it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To get this up and running quickly, I&apos;m using &lt;a href=&quot;https://webmention.io&quot;&gt;Webmention.io&lt;/a&gt; for receiving website mentions and &lt;a href=&quot;https://brid.gy&quot;&gt;brid.gy&lt;/a&gt; for monitoring social media interactions and sending them to Webmention.io. In &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, I&apos;ve added:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;link rel=&quot;webmention&quot; href=&quot;https://webmention.io/stuartbreckenridge.net/webmention&quot;&amp;gt;
&amp;lt;link rel=&quot;pingback&quot; href=&quot;https://webmention.io/stuartbreckenridge.net/xmlrpc&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At the bottom of each post, there&apos;s an Astro component that fetches and renders Webmentions from Webmention.io on each page load.&lt;/p&gt;
&lt;p&gt;In terms of posting Webmentions, I&apos;ve updated the small server app, Broadcaster, that monitors the Atom feed for the site and posts to Mastodon and Bluesky. Now, Broadcaster scans post content, identifies links, checks if the linked site publishes a Webmention &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;, and sends a Webmention if it does.  &lt;/p&gt;
&lt;p&gt;This all seems to work but I don&apos;t like relying on Webmention.io. Similar to the approach taken by &lt;a href=&quot;https://behindtheviewfinder.com/posse-1-1-3-full-w3c-webmention-support/&quot;&gt;Wojtek Powiertowski&lt;/a&gt;, I will look to incorporate Webmention &lt;em&gt;listening&lt;/em&gt; into Broadcaster (and, at the same time, I&apos;ll probably have to change its name).&lt;/p&gt;
</content:encoded></item><item><title>&apos;App Store Reviews Are Busted&apos;</title><link>https://stuartbreckenridge.net/2026-04-17-app-store-reviews-are-busted/?utm_source=rss&amp;utm_medium=feed</link><guid isPermaLink="false">01KPDTJV22GFRQFYEWS0DR7N3B</guid><description>Steam has the right idea.</description><pubDate>Fri, 17 Apr 2026 13:37:45 GMT</pubDate><content:encoded>&lt;p&gt;Let&apos;s start with the &lt;a href=&quot;https://blog.terrygodier.com/2026/04/13/app-store-reviews-are-busted.html&quot;&gt;original article&lt;/a&gt; by Terry Godier:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For example, if you have a 4.1 star rating in the App Store, any 4 star review is going to decrease that average. In other words, leaving a 4 star review is essentially leaving a negative review.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://daringfireball.net/linked/2026/04/16/app-store-reviews-are-busted&quot;&gt;John Gruber&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Problem #1 [...] If you’re going to collect and average ratings from users, the system that works best is binary: thumbs-up or thumbs-down. Netflix switched from stars to thumbs in 2017, and YouTube switched all the way back in 2009.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&apos;d add one more to this list, and certainly one that&apos;s more analogous to the App Store: &lt;em&gt;Steam&lt;/em&gt;. Steam&apos;s &lt;a href=&quot;https://store.steampowered.com/reviews/&quot;&gt;thumbs-based model&lt;/a&gt; is far superior. Not only can you rate and review the game (or app), but other users can also rate your review. Potential buyers can then find and filter by the most helpful reviews. It&apos;s a better model for all involved. &lt;strong&gt;See UPDATE #1 below.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Next:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Problem #2 is that even if the App Store switched from stars to thumbs, the system would still be gamified by developers, rewarding, as Godier aptly puts it, not the best apps but instead the apps that are best at “review prompt execution”. Apple should remove the APIs that allow apps to prompt for reviews, and forbid the practice of prompting for them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Apple should remove those APIs, but they won&apos;t, and until they do, we&apos;re playing within that ruleset. Full disclosure, I&apos;ve built what Terry and John are describing, &lt;a href=&quot;https://singaporebuses.app.link/download&quot;&gt;Singapore Buses&lt;/a&gt; does include a review prompt. It&apos;s &lt;em&gt;insidiously&lt;/em&gt; well designed. On the third launch, the app asks for a rating.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE #1&lt;/strong&gt;: I just discovered that the App Store also has a thumbs-up/thumbs-down rating system for &lt;em&gt;reviews of an app&lt;/em&gt;. Long-press a review and a context menu appears with Helpful vs. Not Helpful responses. Its outrageous that this system is hidden behind a long-press.&lt;/p&gt;
</content:encoded><atom:updated>2026-04-18T06:00:00.000Z</atom:updated></item></channel></rss>