<?xml version="1.0"?>
<?xml-stylesheet href="xsl/style.xsl" type="text/xsl"?>
<?xml-stylesheet href="css/fallback.css" type="text/css" alternate="yes"?>
<rss
  version="2.0"
  xmlns:access="http://www.bloglines.com/about/specs/fac-1.0"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
  xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:ecommerce="http://shopping.discovery.com/erss"
  xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
  xmlns:georss="http://www.georss.org/georss"
  xmlns:gml="http://www.opengis.net/gml"
  xmlns:icbm="http://postneo.com/icbm"
  xmlns:nhc="https://www.nhc.noaa.gov"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:ss="http://purl.org/rss/1.0/modules/servicestatus/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:webfeeds="http://webfeeds.org/rss/1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:yweather="http://weather.yahooapis.com/ns/rss/1.0"
  xsi:noNamespaceSchemaLocation="xsd/rss.xsd"
  xsi:schemaLocation="
    http://backend.userland.com/blogChannelModule xsd/blogchannel.xsd
    http://shopping.discovery.com/erss xsd/erss.xsd
    http://www.bloglines.com/about/specs/fac-1.0 xsd/fac.xsd
    http://www.w3.org/2003/01/geo/wgs84_pos# xsd/geo.xsd
    http://www.georss.org/georss https://schemas.opengis.net/georss/1.0/schema-1.1/georss.xsd
    http://www.opengis.net/gml https://schemas.opengis.net/georss/1.0/schema-1.1/gmlgeorss.xsd
    http://postneo.com/icbm xsd/icbm.xsd
    https://www.nhc.noaa.gov xsd/nhc.xsd
    http://purl.org/rss/1.0/modules/servicestatus/ xsd/servicestatus.xsd
    http://purl.org/rss/1.0/modules/syndication/ xsd/syndication.xsd
    http://webfeeds.org/rss/1.0 xsd/webfeeds.xsd
    http://weather.yahooapis.com/ns/rss/1.0 xsd/yweather.xsd
  "
>
  <channel>
    <title>RSRSSS</title>
    <link>https://envs.net/~lucidiot/rsrsss/feed.xml</link>
    <description>Really Simple Really Simple Syndication Syndication &#8212; An&#160;RSS&#160;feed about RSS&#160;feeds</description>
    <language>en</language>
    <copyright>Creative Commons BY-SA 4.0 International, ~lucidiot</copyright>
    <managingEditor>lucidiot@envs.net (lucidiot)</managingEditor>
    <webMaster>lucidiot@envs.net (lucidiot)</webMaster>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <ttl>10080</ttl>
    <rating><![CDATA[(PICS-1.1
  "http://www.rsaci.org/ratingsv01.html"
  labels generic true
         for "https://envs.net/~lucidiot/rsrsss/"
         on "2025.01.01T00:00+0000"
         ratings (v 0 s 0 n 0 l 1)

  "http://www.icra.org/pics/vocabularyv03/"
  labels generic true
         for "https://envs.net/~lucidiot/rsrsss/"
         on "2025.01.01T00:00+0000"
         ratings (n 0 s 0 v 0 l 1 oa 0 ob 0 oc 0 od 0 oe 0 of 0 og 1 oh 0 c 1)

  "http://www.ticrf.org.tw/chinese/html/06-rating-v11.htm"
  labels generic true
         for "https://envs.net/~lucidiot/rsrsss/"
         on "2025.01.01T00:00+0000"
         ratings (l 0 s 0 v 0 o 0)

  "https://www.devever.net/ns/pics"
  labels generic true
         for "https://envs.net/~lucidiot/rsrsss/"
         on "2025.01.01T00:00+0000"
         ratings (c 0 m 0 d 2 e 3 r 1))]]></rating>

    <admin:errorReportsTo rdf:resource="mailto:lucidiot@envs.net" />
    <admin:generatorAgent rdf:resource="https://tildegit.org/lucidiot/rsrsss/" />

    <atom:link href="https://envs.net/~lucidiot/rsrsss/feed.xml" rel="self" type="application/rss+xml" />

    <blogChannel:blogRoll>https://envs.net/~lucidiot/rsrsss/opml/feeds.opml</blogChannel:blogRoll>

    <creativeCommons:license>https://creativecommons.org/licenses/by-sa/4.0/</creativeCommons:license>

    <dc:format>application/rss+xml</dc:format>

    <ss:aboutStats>https://envs.net/~lucidiot/rsrsss/feed.xml#servicestatus</ss:aboutStats>

    <sy:updatePeriod>weekly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <sy:updateBase>1990-01-01T12:00+01:00</sy:updateBase>

    <webfeeds:partial>false</webfeeds:partial>
    <webfeeds:deprecated>false</webfeeds:deprecated>

    <yweather:location
      city="Syndicate"
      region="Queensland"
      country="Australia"
    />
    <yweather:units
      temperature="c"
      distance="km"
      pressure="mb"
      speed="kph"
    />

    <image>
      <link>https://envs.net/~lucidiot/rsrsss/feed.xml</link>
      <title>RSRSSS</title>
      <url>https://envs.net/~lucidiot/rsrsss/img/image.gif</url>
      <description>RSRSSS logo (an animated, glitchy RSS logo)</description>
      <width>144</width>
      <height>144</height>
    </image>

    <item>
      <title>RSRSSS</title>
      <pubDate>Tue, 15 Dec 2020 07:40:36 +0000</pubDate>
      <guid isPermaLink="false">RSRSSS</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Meta</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://envs.net/~lucidiot/rsrsss/</link>
      <description>Nothing better to start off an RSS feed about RSS feeds than to make itself its first item.</description>
    </item>

    <item>
      <title>Who needs HTML anyway?</title>
      <pubDate>Wed, 16 Dec 2020 07:40:22 +0000</pubDate>
      <guid isPermaLink="false">XSLT</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Meta</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">XSL</category>
      <description><![CDATA[
        <p>I added <a href="https://envs.net/~lucidiot/rsrsss/xsl/style.xsl">an XSLT stylesheet</a> to this RSS feed! This means that when you open this feed in a web browser that does not support subscribing to RSS feeds, you will instead get a nice looking page without me ever writing actual raw HTML. In older or less common web browsers that still support RSS subscriptions (as every good web browser should), such as Pale Moon, you will still get the default page that asks you if you want to subscribe.</p>
        <p>Some of my friends had mentioned adding RSS to their static site generators was hard; how about turning your index page into the RSS feed, and letting browsers generate the HTML for you?</p>
      ]]></description>
    </item>

    <item>
      <title>Regular Flolloping</title>
      <pubDate>Fri, 1 Jan 2021 11:04:02 +0000</pubDate>
      <guid isPermaLink="false">regularflolloping</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://regularflolloping.com/rss.xml</link>
      <description>
        A blog from a friend on the fediverse with a rather low post frequency, but that often presents the issues of technology, of capitalism, or just of having a life using unusual approaches, often full of metaphors.
      </description>
    </item>

    <item>
      <title>javapool updates</title>
      <pubDate>Sat, 9 Jan 2021 17:02:51 +0000</pubDate>
      <guid isPermaLink="false">javapool</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://tilde.town/~m455/javapool.rss</link>
      <description><![CDATA[
        All the topic changes on an IRC channel hosted on tilde.town's internal IRC server, in which we roleplay being in a Java-related hot tub.
        The channel has <a href="http://tilde.town/wiki/socializing/irc/channels/javapool.html" target="_blank">a town wiki page</a> if you want to learn about the lore.
      ]]></description>
    </item>

    <item>
      <title>Things of Interest</title>
      <pubDate>Mon, 18 Jan 2021 17:15:11 +0000</pubDate>
      <guid isPermaLink="false">qntm</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://qntm.org/rss.php</link>
      <description><![CDATA[
        <p>I think I found this blog through tilde.news or lobste.rs, but I couldn't really find the source. I can't find out much about the blog's creator, other than them being a prominent SCP writer.</p>
        <p>This feed indeed has some interesting things, related to SCP, sci-fi (especially time traveling), or programming. I bookmarked the <a href="https://qntm.org/perl_en">Perl introduction</a>, if I ever want to learn Perl and scare my fellow Python developers at work.</p>
      ]]></description>
    </item>

    <item>
      <title>Replacing Yahoo with TinyTinyRSS in Pale Moon</title>
      <pubDate>Sat, 23 Jan 2021 21:11:31 +0000</pubDate>
      <guid isPermaLink="false">palemoon-tinytinyrss</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <description><![CDATA[
        <p>I have been trying to avoid using Firefox and prefer Pale Moon as much as I can, in preparation for the rather pessimistic outcomes I see with <a href="https://arstechnica.com/information-technology/2020/08/firefox-maker-mozilla-lays-off-250-workers-says-covid-19-lowered-revenue/">the current management at Mozilla</a>. It works pretty well for most of my uses, although I sometimes have to fallback to Firefox when I need to use websites that rely heavily on JS and do not use compiler options that would enhance compatibility, like Imgur and GitHub. Using Pale Moon on a 11+ years old ThinkPad X201 Tablet also really shows how resource hungry the Web is.</p>
        <p>Some of my favorite things with Pale Moon include <a href="https://addons.palemoon.org/addon/moonscape/">turning it into Netscape</a>, <a href="https://www.palemoon.org/sync/">sync support</a>, and built-in RSS preview and subscription support via Live Bookmarks. I however have an issue with the RSS preview: it allows you to subscribe not only via Live Feeds but also with other desktop applications that you might have installed, such as Thunderbird, or Yahoo. My issue is that I wanted to add a button to quickly subscribe on envs.net's TinyTinyRSS instance, and after various attempts I could not add it in the user interface.</p>
        <p>Here comes the trusty <code>about:config</code> to the rescue! Looking up <code>yahoo</code> in the configuration values pointed me to two keys in the configuration:</p>
        <dl>
          <dt>browser.contentHandlers.types.0.title</dt>
          <dd>Initially set to <em>My Yahoo!</em>, I changed it to <em>TinyTinyRSS</em>.</dd>
          <dt>browser.contentHandlers.types.0.uri</dt>
          <dd>Initially set to <code>https://add.my.yahoo.com/rss?url=%s</code>, I changed it to <code>https://rss.envs.net/public.php?op=subscribe&amp;feed_url=%s</code>. I found this URL by looking at the bookmarklets configuration in TinyTinyRSS and reading the short JS code that redirects you to TinyTinyRSS.</dd>
        </dl>
        <p>I initially tried to add a button next to the <em>My Yahoo!</em> one by creating two new keys, <code>.types.1.title</code> and <code>.types.1.uri</code>, but that failed. I did not yet look into the Pale Moon source code to see why this could have failed.</p>
        <p>With this change, instead of Yahoo, I can quickly subscribe to anyone's RSS feeds faster than ever. This will definitely not help my backlog of 2600+ articles…</p>
      ]]></description>
    </item>

    <item>
      <title>disable-output-escaping</title>
      <pubDate>Sat, 23 Jan 2021 21:40:04 +0000</pubDate>
      <guid isPermaLink="false">d-o-e</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Meta</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">XSL</category>
      <description><![CDATA[
        <p>While writing the previous post about TinyTinyRSS in Pale Moon, I tried to fix an issue I still had with my XSLT: To make HTML tags in &lt;description&gt; blocks work, I had to break an important part of the RSS specification and add tags directly without escaping them. XSLT stylesheets would decode entities or CDATA blocks, and do not provide a function to selectively re-parse XML tags, so I felt I was stuck. I then found out that this bit of code could get me to output the content of a description tag without getting HTML entities, so getting raw HTML as I want it without causing bugs with Pale Moon's RSS preview or bad RSS validator warnings:</p>
        <pre>&lt;xsl:value-of select="description" disable-output-escaping="yes" /&gt;</pre>
        <p><code>disable-output-escaping</code> <a href="https://www.w3.org/TR/1999/REC-xslt-19991116#disable-output-escaping">is optional</a> according to the W3C specification since version 1. libxslt, Chromium and Internet Explorer do support it, but Firefox <a href="https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor/XSL_Transformations_in_Mozilla_FAQ#can_i_do_disable-output-escaping.3f">chose not to</a>, and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=98168" target="_blank">a Bugzilla ticket</a> for it will celebrate its 20th birthday this year. They do say themselves that this causes issues for RSS support, so I chose to just not care about it. If you are a Firefox user and are seeing raw, unparsed HTML tags in there, I can only suggest using another browser, or just subscribing to this feed and reading this in its home, a RSS aggregator.</p>
      ]]></description>
    </item>

    <item>
      <title>Shameless Self Promotion</title>
      <pubDate>Thu, 4 Feb 2021 19:57:11 +0000</pubDate>
      <guid isPermaLink="false">insom</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.insom.me.uk/feed.xml</link>
      <description>
        A blog from a kind friend of mine that has been running for nearly 18 years, mostly covering electronics and software along with books and personal things. I don't know much about electronics but it is fascinating for me to see things being done with that anyway.
      </description>
    </item>

    <item>
      <title>OPML now available</title>
      <pubDate>Thu, 4 Feb 2021 22:00:11 +0000</pubDate>
      <guid isPermaLink="false">rsrsss-opml</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Meta</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/feeds.opml</link>
      <description><![CDATA[
        <p>I added <a href="https://envs.net/~lucidiot/rsrsss/xsl/opml.xsl">yet another XSLT stylesheet</a> and there is now an OPML subscriptions file available if you are feeling lazy and want to add all the feeds I talk about here. It is built by hand using a Makefile—I need to remember to run it on every new feed…</p>
      ]]></description>
    </item>

    <item>
      <title>sandcats</title>
      <pubDate>Sat, 13 Feb 2021 20:57:58 +0000</pubDate>
      <guid isPermaLink="false">sandcats</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://xfnw.tilde.institute/sandcats/feed.rss</link>
      <description>An RSS feed from a tilde friend that I randomly stumbled upon a few weeks ago, probably on IRC or Mastodon. If you feel like you need some cute sandcat breaks in the middle of your tons of blogs in your feed reader, well there you have it!</description>
    </item>

    <item>
      <title>Directory of directories of directories</title>
      <pubDate>Sat, 13 Feb 2021 21:37:36 +0000</pubDate>
      <guid isPermaLink="false">dirdirdir</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/dirdirdir.opml</link>
      <description><![CDATA[
        I was looking at directories of RSS feeds because I wanted to find more original feeds that I might not find easily from just browsing my friends' blogs or the rest of my small corner of the internet, then I found a few pages that listed directories of RSS feeds, so I made a directory of those directories of RSS feed directories as an OPML file. Those aren't either OPML or RSS files so they use the <code>link</code> outline type which you will probably not be able to use unless you have an <a href="http://outliners.scripting.com/" target="_blank">outline editor</a>.
      ]]></description>
    </item>

    <item>
      <title>BBC Weather</title>
      <pubDate>Fri, 19 Feb 2021 08:15:59 +0000</pubDate>
      <guid isPermaLink="false">bbc-weather</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Weather</category>
      <description><![CDATA[
        <p>While I was looking for unusual RSS feeds, I stumbled upon a way to get weather RSS feeds from the <a href="https://bbc.com/weather" target="_blank">BBC Weather</a> service. If you open the page for a location, you will get a URL in this format:</p>
        <pre><a href="https://www.bbc.com/weather/2644080" target="_blank">https://www.bbc.com/weather/<strong>2644080</strong></a></pre>
        <p>Take this integer suffix, which is the ID of the location, and put it in one of these two URLs to get some RSS feeds:</p>
        <ul>
          <li>
            3-day forecasts:
            <a href="https://weather-broker-cdn.api.bbci.co.uk/en/forecast/rss/3day/2644080" target="_blank">
              <code>https://weather-broker-cdn.api.bbci.co.uk/en/forecast/rss/3day/<strong>2644080</strong></code>
            </a>
          </li>
          <li>
            Latest observations:
            <a href="https://weather-broker-cdn.api.bbci.co.uk/en/observation/rss/2644080" target="_blank">
              <code>https://weather-broker-cdn.api.bbci.co.uk/en/observation/rss/<strong>2644080</strong></code>
            </a>
          </li>
        </ul>
        <p>This procedure is documented <a href="https://www.bbc.com/weather/about/17543675" target="_blank">exactly like so</a> on the BBC help pages!</p>
      ]]></description>
    </item>

    <item>
      <title>fridaypostcard</title>
      <pubDate>Sat, 27 Feb 2021 12:13:52 +0000</pubDate>
      <guid isPermaLink="false">fridaypostcard</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tilde.town/~lucidiot/fridaypostcard.xml</link>
      <description><![CDATA[
        This is one of my earliest attempts at a PSP-compatible RSS feed: a feed for the <code>#fridaypostcard</code> tradition on tilde.town's IRC channel, where every Friday you can post a link to an image with this tag and a cron job picks it up. This feed does not keep track of any history at all and is cleared on every Friday. Despite my attempts, most of the images in this feed cannot be displayed on a PSP. Most image links use Imgur, which requires HTTPS, and the PSP's RSS reader does not support HTTPS at all.
        ]]></description>
    </item>

    <item>
      <title>WordPress feeds</title>
      <pubDate>Wed, 17 Mar 2021 11:54:11 +0000</pubDate>
      <guid isPermaLink="false">wordpress</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <link>https://wordpress.org/support/article/wordpress-feeds/</link>
      <description><![CDATA[
        <p>WordPress sites natively have support for RSS 1.0, RSS 2.0 and Atom feeds, and they have some docs to help you find them. Even if the website does not advertise them, you can try adding some URL parameters or changing some paths:</p>
        <table>
          <thead>
            <tr>
              <th>Feed type</th>
              <th>URL parameters</th>
              <th>URL rewriting</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>All posts</td>
              <td><code>/?feed=rss2</code></td>
              <td><code>/feed/rss2/</code></td>
            </tr>
            <tr>
              <td>All comments</td>
              <td><code>/?feed=comments-rss2</code></td>
              <td><code>/comments/feed/rss2/</code></td>
            </tr>
            <tr>
              <td>Comments on a post</td>
              <td><code>/?p=42&amp;feed=rss2</code></td>
              <td><code>/[post name]/feed/rss2/</code></td>
            </tr>
            <tr>
              <td>In categories</td>
              <td><code>/?cat=1,2,3&amp;feed=rss2</code></td>
              <td><code>/category/cat1,cat2,cat3/feed/rss2/</code></td>
            </tr>
            <tr>
              <td>In tags</td>
              <td><code>/?tag=tag1,tag2,tag3&amp;feed=rss2</code></td>
              <td><code>/tag/tag1,tag2,tag3/feed/rss2/</code></td>
            </tr>
            <tr>
              <td>In all categories</td>
              <td><code>/?cat=1+2+3&amp;feed=rss2</code></td>
              <td><code>/category/cat1+cat2+cat3/feed/rss2/</code></td>
            </tr>
            <tr>
              <td>In tags</td>
              <td><code>/?tag=tag1+tag2+tag3&amp;feed=rss2</code></td>
              <td><code>/tag/tag1+tag2+tag3/feed/rss2/</code></td>
            </tr>
            <tr>
              <td>By author</td>
              <td>Undocumented</td>
              <td><code>/author/[name]/feed/rss2/</code></td>
            </tr>
            <tr>
              <td>Search results</td>
              <td><code>?s=[query]&amp;feed=rss2</code></td>
              <td>&mdash;</td>
            </tr>
          </tbody>
        </table>
        <p>Replace <code>rss2</code> with <code>atom</code> for an Atom feed, and with <code>rdf</code> for an RSS 1.0 feed.</p>
        <p>I added a distinction between RSS 1.0 and RSS 2.0 in <a href="https://tilde.town/~lucidiot/itsb/" target="_blank">ITSB</a> and used it to provide more official feeds from the Antigua and Barbuda Department of Marine Services and Merchant Shipping Inspection and Investigation Division and the mongolian Air Accidents Investigation Bureau.</p>
      ]]></description>
    </item>

    <item>
      <title>Replying to other people in RSS feeds</title>
      <pubDate>Thu, 25 Mar 2021 22:09:27 +0100</pubDate>
      <guid isPermaLink="false">mod_annotation</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <link>http://web.archive.org/web/20090129072752/http://web.resource.org/rss/1.0/modules/annotation/</link>
      <description><![CDATA[
        <p>On <a href="https://gemini.circumlunar.space/" target="_blank">Project Gemini</a>, a protocol in-between HTTP and Gopher, a new community has developed and a lot of original content is being published, relative to Gopher at least. The project sparked renewed interest in those almost-text-only protocols, sometimes offered as alternatives to the web.</p>
        <p>Most people just make blogs on there, called gemlogs. Those gemlogs are frequently practicing a habit that has been disappearing from blogs faster than the blogs themselves disappeared in favor of social media: posts that reply to other people's posts.</p>
        <p>I like email as a discussion method because it works like letters, just with some faster delivery and cheaper postage cost; no typing notifications and no expectations of a very fast reply like on instant messaging platforms, so you have less anxiety and more time to write out your thoughts. the UI of most email clients encourage you to write more, to not just send one line; the text length limit probably exists due to technical limitations, but you wouldn't be able to reach it without writing book after book in a single email. twitter is probably the worst place to debate on, since having much less space to explain yourself means your thoughts immediately get misinterpreted.</p>
        <p>Replying to other people's posts on your own blog or gemlog is basically like e-mail, but the discussion can be read by a lot more people. you get all the benefits of long-form writing and asynchronous communication, combined with sharing with or receiving knowledge from your readers and other people's readers. However, you can hit an issue where the person who posted the text you replied to might be completely unaware of your reply, and might never read it, unlike email.  some standards exist to help with this, such as <a href="https://en.wikipedia.org/wiki/Webmention" target="_blank">Webmentions</a>, or the <a href="https://www.rssboard.org/trackback" target="_blank">trackback namespace</a> for RSS.</p>
        <p>I will let you click the link to read more about trackback; because I am posting today to show you an alternative, if you want to use something that approximatively nothing supports: <a href="http://web.archive.org/web/20090129072752/http://web.resource.org/rss/1.0/modules/annotation/" target="_blank">mod_annotation</a>, a proposed RSS 1.0 module. This, like most RSS 1.0 modules, never reached a status of standard module and disappeared from the Internet, so the only way to find them now is to use the Wayback Machine. I love the Wayback Machine.</p>
        <p>To use this module, first add a new XML namespace to your feed: <code>xmlns:annotate="http://purl.org/rss/1.0/modules/annotate/"</code>. Then, in the <code>&lt;item&gt;</code> tag, add the following tag to reference something else:</p>
        <pre><code>&lt;annotate:reference rdf:resource="https://envs.net/~lucidiot/rsrsss/"/&gt;</code></pre>
        <p>This module was only proposed for RSS 1.0, but most feed readers barely make any distinction between RSS 1.0 and 2.0, so if a feed reader ever supported this module, you could probably use it safely in RSS 2.0 too.</p>
      ]]></description>
    </item>

    <item>
      <title>Replying to other people in Atom feeds</title>
      <pubDate>Fri, 26 Mar 2021 19:05:18 +0100</pubDate>
      <guid isPermaLink="false">atom-threading</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <link>https://tools.ietf.org/html/rfc4685</link>
      <description><![CDATA[
        <p>A continuation of yesterday's post on replies in RSS feeds, due to a simple question: how about Atom?</p>
        <p>Turns out <a href="https://tools.ietf.org/html/rfc4685" target="_blank">RFC 4685</a> defines an XML namespace one can use to define replies. It is rather similar to yesterday's mod_annotation.</p>
        <p>To use this namespace, you will need to first add the namespace to your feed: <code>xmlns:thr="http://purl.org/syndication/thread/1.0"</code>. You then have access to two new elements and two new attributes, and the spec also defines a new <code>rel</code> value:</p>
        <ul>
          <li><code>&lt;thr:in-reply-to&gt;</code> to indicate what you are replying to using the ID indicated in the <code>&lt;id&gt;</code> tag;</li>
          <li><code>&lt;link rel="replies"&gt;</code> to point to a page where some, or all, known replies to a post are listed;</li>
          <li><code>thr:updated</code> to add on the above link the last date when the page was updated;</li>
          <li><code>thr:count</code> to add on the above link the number of known replies listed in the linked page;</li>
          <li><code>&lt;thr:total&gt;</code> to indicate the <strong>total</strong> number of known replies, as the linked replies pages might only contain a portion of them.</li>
        </ul>
        <p>None of those are required. You can repeat the <code>&lt;link rel="replies" /&gt;</code> as many times as you might need, if you have multiple pages. The metadata given by the <code>&lt;thr:total&gt;</code> element and the <code>thr:count</code> and <code>thr:updated</code> attributes is non-authoritative, which means it does not have to be exact.</p>
        <p>If you are using <code>&lt;thr:in-reply-to&gt;</code>, it is recommended to also include the post's link in a <code>&lt;link rel="related"&gt;</code> to allow a graceful fallback for feed readers that might not support the threading extensions.</p>
        <p><a href="https://tools.ietf.org/html/rfc4685" target="_blank">The RFC</a> includes a bunch of examples that should be enough to get you started should you ever want to try using this namespace.</p>
        <h2>Some other formats</h2>
        <p>Before I start writing posts on threading for just every single syndication format, here is some info for two formats I have experimented with in <a href="https://tilde.town/~lucidiot/itsb/" target="_blank">ITSB</a>:</p>
        <p><a href="https://jsonfeed.org/version/1.1" target="_blank">JSON Feed</a> does not have support for threading in its spec, but you could just make your own extension for that. It does not use JSON-LD either, which would have allowed for a similar extension system as XML; but after experiencing the complexity of JSON-LD first hand at my day job and facing the numerous interoperability issues that causes, I can definitely understand that they wouldn't want to.</p>
        <p><a href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa768139(v=vs.85)" target="_blank">Channel Definition Format</a> allows for nested channels, so you could at least create a structured representation of a thread as a tree if you, the original author of the post, knew about all the replies. You cannot, however, specify that you are replying to something yourself. The format does support XML namespace extensions, so you could use <code>thr</code> or mod_annotation.</p>
      ]]></description>
    </item>

    <item>
      <title>Exploring obsolete Japanese syndication formats</title>
      <pubDate>Sat, 03 Apr 2021 16:24:10 +0200</pubDate>
      <guid isPermaLink="false">japanese-formats</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">HINA</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">LIRS</category>
      <description><![CDATA[
        <p>I am always fascinated when I somehow manage to learn a bit about the early days of the Internet in South East Asia. At a time when Unicode barely even existed, when non-Latin alphabet support was just relying on a ton of hacks, a lot of interesting things happened.</p>
        <p>I recently translated some Japanese specifications I found on the Wayback Machine for two obsolete syndication formats. I first had to determine which encoding the specifications were using, because Google Translate was really unhappy with that; I had to convert from Shift-JIS to UTF-16 then to UTF-8, and from EUC-JP to UTF-8. I am using Google Translate because I know absolutely nothing about Japanese; I just take the messy "English" translation and turn it into comprehensible English.</p>
        <p>I first translated <a href="https://envs.net/~lucidiot/hina/" target="_blank">HINA</a>, a format that relies on RFC 822 message headers and was designed for Asahina-Antenna. It appears that in Japan, feed readers were called "antennas". This format is apparently still served by some websites according to a quick online search; I will look into that later, just as I will look into those antennas.</p>
        <p>Today, I translated <a href="https://envs.net/~lucidiot/lirs/" target="_blank">LIRS</a>, a format that uses a gzipped simili-CSV to report the same thing.</p>
        <p>These two formats do not have item descriptions or optional URLs; they are only meant to report changes on external content. They already take into account the notion of feed aggregation. HINA even has image-related data for photo galleries.</p>
        <p>It is pretty hard to trace those formats, first because of the rather obvious language barrier I am facing, and second because the Wayback Machine did not always catch everything, so there are many dead links. Of course, everything is completely dead today. I am however going to keep looking into those formats, and they will soon be implemented in <a href="https://tilde.town/~lucidiot/itsb/" target="_blank">ITSB</a> just for the sake of keeping them alive.</p>
      ]]></description>
    </item>

    <item>
      <title>XKCD</title>
      <pubDate>Mon, 05 Jul 2021 14:44:35 +0200</pubDate>
      <guid isPermaLink="false">xkcd</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.xkcd.com/rss.xml</link>
      <description>
        Quite the classic feed here, but the only criteria for me to feature a feed on here is that it exists, because I want to see both more feed producers and consumers. If you have no idea what XKCD is, well, you are probably missing out on a lot of developer jokes.
      </description>
    </item>

    <item>
      <title>coolguy.website</title>
      <pubDate>Sun, 11 Jul 2021 15:04:28 +0200</pubDate>
      <guid isPermaLink="false">coolguy</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://coolguy.website/rss/index.xml</link>
      <description>A friend of a friend, with a nice-looking website. Their site has some random zines and articles on various topics. Not updated that often, but that's okay, that's a smol personal website and that's the kind of websites I want to see more often.</description>
    </item>

    <item>
      <title>The Daily WTF</title>
      <pubDate>Sun, 18 Jul 2021 05:46:44 +0200</pubDate>
      <guid isPermaLink="false">thedailywtf</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://syndication.thedailywtf.com/TheDailyWtf</link>
      <description>
        While browsing the blog to learn a bit more and have something to say here, I found something that is worth posting there; its forum had a weird French translation, displaying "Il y a 3 ans later" (Three years ago later). Unfortunately, from past experience, I know they tend to filter submissions rather hard, so it did not make it to their articles.
      </description>
    </item>

    <item>
      <title>9 Eyes</title>
      <pubDate>Mon, 26 Jul 2021 09:55:34 +0200</pubDate>
      <guid isPermaLink="false">9eyes</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://9-eyes.com/rss</link>
      <description>Unfortunately not as active as it used to be. This Tumblr blog shares strange, usually funny, pictures found in Google Street View.</description>
    </item>

    <item>
      <title>Brainshit</title>
      <pubDate>Sun, 01 Aug 2021 14:34:33 +0200</pubDate>
      <guid isPermaLink="false">brainshit</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://brainshit.fr/rss</link>
      <description>This is the RSS feed of my own French blog. I often post about various technical shenanginans that you won't see in my other sites, as well as other non-technical content that I don't put anywhere else either.</description>
    </item>

    <item>
      <title>netscape_navigator</title>
      <pubDate>Sun, 08 Aug 2021 16:22:34 +0200</pubDate>
      <guid isPermaLink="false">netscape_navigator</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tilde.town/~netscape_navigator/rss/feed.rss</link>
      <description>A good friend that I share a passion for the 16-bit Windows era with. This particular feed is a web version of their Secure Scuttlebutt logs, and although it has not been updated for a while, I still want to share it because I really dig the design of that website. The images use 216 colors, aka the netscape-compatible color palette, which inspired me to do the same for every image on all of my websites, because that color style is amazing.</description>
    </item>

    <item>
      <title>n-gate</title>
      <pubDate>Mon, 16 Aug 2021 19:21:01 +0200</pubDate>
      <guid isPermaLink="false">n-gate</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://n-gate.com/index.rss</link>
      <description>A blog that is now well-known for its "webshit weekly", which makes fun of the top posts on Hackernews and their comments. It includes whole article contents in the RSS items, so you can read that feed without ever leaving your feed reader.</description>
    </item>

    <item>
      <title>#fridaypostcard</title>
      <pubDate>Sun, 22 Aug 2021 18:45:50 +0200</pubDate>
      <guid isPermaLink="false">fridaypostcard2</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tilde.town/~lucidiot/fridaypostcard.xml</link>
      <description><![CDATA[
        <p>A feed of my own creation which assembles the #fridaypostcards from tilde.town.</p>
        <p><a href="http://tilde.town/~jumblesale/fp.html" target="_blank">Friday postcards</a> are a concept made by ~jumblesale on tilde.town in which you share a URL to an image along with "#fridaypostcard" (and optionally a comment) on IRC, and a bot picks it up and builds an HTML page every Friday.</p>
        <p><a href="http://tilde.town/~jumblesale/fp/archive/">An archive</a> gets generated each week too, but there was no easy way to get postcards in my RSS reader and I had found multiple issues in the way URLs were handled, causing some Imgur URLs to not work among other things. I at first had copy-pasted the original script, but then rewrote it to handle those errors and get every single postcard ever made into one W3C-valid RSS feed.</p>
        <p>You can browse the script that generates this feed <a href="https://tildegit.org/lucidiot/fprss/" target="_blank">on tildegit</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>Pedestrian Observations</title>
      <pubDate>Wed, 15 Sep 2021 19:08:35 +0200</pubDate>
      <guid isPermaLink="false">pedestrianobservations</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://pedestrianobservations.com/feed/</link>
      <description>A public transit researcher that mostly talks about the many issues in public transit. The most common trend you will quickly notice if you start reading regularly is that every American transit planner is either an idiot or forced to make bad decisions by politicians or other idiots, that construction costs are insanely high, and that cars are going to keep their supremacy for a long while. This just reinforces the idea that I should stay in Eurasia and never ever try to go to North America.</description>
    </item>

    <item>
      <title>netscape_navigator's news feed</title>
      <pubDate>Mon, 20 Sep 2021 08:34:26 +0200</pubDate>
      <guid isPermaLink="false">netscape_navigator_news</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://news.rickcarlino.com/rss.rss</link>
      <description><![CDATA[
        <p>I stopped reading technology news from aggregators like Hacker News or lobste.rs, due to their numerous issues as highlighted by n-gate, and I do not read from mainstream tech websites either because 99% of what they publish does not interest me. Additionally, most publications will just wake up my resent for modern technology since it ignores most of its own issues, so I keep my anger at bay by not reading anything.</p>
        <p>A few months ago, ~netscape_navigator showed me his "recent reading" list, for which I requested an RSS feed. He uses it in <a href="https://rickcarlino.com/2017/developer-news-productivity-hack.html" target="_blank">an interesting process</a> to feed on the news while driving using text-to-speech, and just decided to publish his curated news feed. I now generally see this feed as my "wholesome news" feed, because most articles on there are about interesting scientific discoveries, hacking projects, tech history podcasts and articles, etc. There still are some bad news but they are much less related to current politics or other issues of the tech industry like e-waste, america-centrism or racism.</p>
        <p>You could probably argue this is kind of a <a href="https://en.wiktionary.org/wiki/circle_jerk" target="_blank">circle jerk</a>, since I am only reading the news from my friends who are more likely to share the same opinions as me; but this feed does not really have that many news, and I am already well aware of the most important issues in tech since I will still see them being discussed on IRC, tilde.news, Misskey, or at the workplace. They are discussed enough for me to just not want them to pollute my RSS reader as well, a place where I can go with the expectation to either relax or learn things. Having this feed here helps me get more interesting articles from lesser-known English-speaking news websites that I simply never heard of in France, such as <em>Scientific American</em>, or discover new blogs.</p>
        <p>You can also <a href="https://news.rickcarlino.com/">view the articles in a browser</a>, but why would you do that when you have an RSS reader?</p>
      ]]></description>
    </item>

    <item>
      <title>500mile.email</title>
      <pubDate>Mon, 27 Sep 2021 14:45:29 +0200</pubDate>
      <guid isPermaLink="false">500mile.email</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://500mile.email/feed.xml</link>
      <description><![CDATA[
        <p>Have you heard about the <a href="http://web.mit.edu/jemorris/humor/500-miles" target="_blank">500-mile email</a> story? If not, do go read it, it is a classic for nerds. Someone made a website listing various other interesting troubleshooting stories like those, and there is an RSS feed!</p>
        <p>Updates are pretty rare, but it still an interesting feed to have; on the rare occasion that a new article gets there, you know you're in for an great read.</p>
      ]]></description>
    </item>

    <item>
      <title>Publications Office of the European Union</title>
      <pubDate>Tue, 05 Oct 2021 09:02:47 +0200</pubDate>
      <guid isPermaLink="false">op.europa.eu</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <link>https://op.europa.eu/</link>
      <description><![CDATA[
        <p>Did you know that the EU has a publications office, dedicated to all of the EU's legal texts, magazines, or other publications. They used to maintain a website called the EU Bookshop, which allows you to order their publications, some of them for free and with no shipping fees for addresses within the European Union. The site went through a redesign earlier this year, and while I have some complaints, it seems they upgraded their servers and I no longer can create HTTP 502 errors just by clicking a little too fast; and more importantly, you can have RSS feeds.</p>
        <p>If you register for an account, you can save your searches and then either create email alerts about any new publication in the search results, or get an RSS feed of it. I use that to follow various terms like <em>bookmark</em>, <em>postcard</em>, <em>calendar</em> and <em>USB</em>: I know some people who collect bookmarks, the free postcards they make give me nice illustrations for my notebooks, the calendars usually are large A0 posters so I can fill my wall with them, and they used to offer three publications in the form of USB drives, so I stay on the lookout for that. I should probably also add <em>notebook</em> to the lot, because I have a drawer full of free notebooks. My very first Bullet Journal was started on one of those books.</p>
        <p>The website is supposed to only allow you to order one free copy per email address (or per account if you registered, since you can also order without registering), and you will need to confirm your email address if you order as a guest. Since some mail providers like Gmail let you get away with putting dots or dashes in your address and will redirect to your actual email, you can actually get much more from a single address; I was using only the dots and counted in binary to get all the possible unique combinations of dots while ordering a hundred USB keys or nearly a hundred notebooks. I got them all, in a hundred separate envelopes. That was a lot of fun :D</p>
      ]]></description>
    </item>

    <item>
      <title>m455's blog</title>
      <pubDate>Thu, 14 Oct 2021 22:46:05 +0200</pubDate>
      <guid isPermaLink="false">m455</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://m455.casa/feed.rss</link>
      <description><![CDATA[
        <p>Yet another of my friend's blogs. Can you feel that my presence in their social circle influences their decision to provide RSS or Atom feeds?</p>
        <p>This good friend has built his own static site generator, and built a few more, and we sometimes joke that all that he does is build site generators instead of writing actual blog content. But his feed (and thus his blog) sometimes fill up with some interesting articles anyway. You can in particular get some great examples of well written documentation if you want some inspiration to make this often overlooked part of software development a little nicer in your own projects.</p>
      ]]></description>
    </item>

    <item>
      <title>Escargot Today</title>
      <pubDate>Tue, 19 Oct 2021 17:41:48 +0200</pubDate>
      <guid isPermaLink="false">escargot-today</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.escargot.chat/news/rss/</link>
      <description><![CDATA[
        <p>Did you know that Windows Messenger, MSN Messenger, Windows Live Messenger, Messenger Plus! Live, Yahoo Messenger and Mercury Messenger all have not died at all, and that people loved them so much that there is now a Python FOSS server to replace Microsoft's and Yahoo's servers?</p>
        <p><a href="https://escargot.chat" target="_blank">Escargot</a> is a project to revive all of those clients and extra tools, and bring them back into 2021. It is already currently possible to talk between MSN and Yahoo Messenger, and there are plans to maybe, in the long term, support Matrix, XMPP, IRC, or AIM (which already has a server from another project called NINA), to really bring together all of those messaging services.</p>
        <p>As I have been occasionally using a Windows XP laptop as my daily driver for a few days each time, I have kept a MSN Messenger 7.5 instance running. Just one friend got in touch with me using it, but I just like to see it being online in my notification area anyway. I also have installed Mercury Messenger on my phone so I can really stay online on MSN all the damn time. If you want to reach me there, and somehow manage to get an Escargot account and a compatible client installed, you can find my Escargot ID on <a href="https://tilde.town/~lucidiot/contact.html" target="_blank">my contact page</a>.</p>
        <p>I just discovered today that Escargot has an RSS feed for its recent news, Escargot Today. And it does not just include the last 5 or 10 posts like most blogs do, this feed just has every single news entry since 2017, which is neat. There are not that many updates since most of the project's true activity is on <a href="https://gitlab.com/escargot-chat/server" target="_blank">their GitLab repo</a>, but if you plan on playing with this client, this feed will make sure you don't miss out on any breaking changes they might make. You can also access that page on newer versions of MSN since they changed the MSN Today URL to point at their site.</p>
      ]]></description>
    </item>

    <item>
      <title>Subscribing with TinyTinyRSS in SeaMonkey</title>
      <pubDate>Sat, 23 Oct 2021 01:52:34 +0200</pubDate>
      <guid isPermaLink="false">seamonkey-tinytinyrss</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <description><![CDATA[
        <p>Remeber my previous adventures with Pale Moon where I configured it to quickly subscribe to TinyTinyRSS? Well, ~m455 reminded me of the existence of SeaMonkey today. It has a mail client, newsgroups, feed subscriptions, IRC, and a HTML editor, and never dropped FTP support. You can also get Gopher support by installing <a href="https://addons.thunderbird.net/fr/seamonkey/addon/overbiteff/">OverbiteFF</a>; it says SeaMonkey 2.43 and later is not supported, but it worked just fine for me under SeaMonkey 2.49.5.</p>
        <p>Back when I was using Pale Moon, I could not find out how to add a new option without removing the existing ones so I just overwrote Yahoo with TinyTinyRSS. But this time, I got it to work with an extra setting! Here is the configuration in <code>about:config</code> that I managed to use for SeaMonkey:</p>
        <dl>
          <dt>browser.contentHandlers.types.6.title</dt>
          <dd><code>TinyTinyRSS</code></dd>
          <dt>browser.contentHandlers.types.6.type</dt>
          <dd><code>application/vnd.mozilla.maybe.feed</code></dd>
          <dt>browser.contentHandlers.types.6.uri</dt>
          <dd><code>https://rss.envs.net/public.php?op=subscribe&amp;feed_url=%s</code></dd>
        </dl>
      ]]></description>
    </item>

    <item>
      <title>Space Impact</title>
      <pubDate>Sun, 31 Oct 2021 01:12:07 +0200</pubDate>
      <guid isPermaLink="false">space-impact</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://blog.jatan.space/feed</link>
      <description><![CDATA[
        <p>Here is an RSS feed generated by Substack, a service that I have very regularly seen recently due to everyone using it to create paid newsletters. I absolutely despise e-mail newsletters, but they dealt with that problem by adding an RSS 2.0 feed for each newsletter at <code>/feed</code>. As Substack really scares me due to this e-mail part, I have never tried paying for one of those newsletters, so I do not know if that RSS feed would be available too for paid subscribers, maybe with a token. That would make it a very rare kind of paid RSS feeds, something which I know exists as I have seen it in a specification for the PlayStation Portable but that I have never seen in the wild before.</p>
        <p>This particular feed is a free newsletter about space exploration from an Indian writer. He initially had two newsletters, <em>Space Impact</em> and <em>Moon Monday</em>, but they got merged into one. I initially discovered this blog through <em>Moon Monday</em>, a weekly report of everything that is happening related to our exploration of the Moon. The goal of this weekly report is to show that exploring the Moon is still on the table and that we still have a lot to learn about it. Things happen quickly enough that posting once a week is indeed necessary.</p>
        <p>The reporting is generally pretty comprehensive, despite a noticeable bias against <abbr title="Indian Space Research Organization">ISRO</abbr>; the author regularly criticizes his own country's space program as it is often opaque or makes bad decisions. I would like to see more of this critical thinking applied to all the other reported events (which are usually only shown as facts, without much commentary), as there are a lot of issues with Artemis, the American lunar base program, and with <abbr title="International Lunar Research Station">ILRS</abbr>, the Russian and Chinese project.</p>
        <p>NASA going fully commercial on the base, all the way to calling for proposals on spacesuits, vehicles that transport astronauts between their training building to the launch pad, rovers, communication satellites, etc., and potentially allowing companies to mine the Moon, means NASA is bringing capitalism to space along with all its issues. Roscosmos' space budget is being slashed by Putin, because they did not achieve their set objectives in time—obviously, less budget will mean they can do more next year. And China's space program had a lot of issues, since rocket parts sometimes fall onto inhabitants (a huge no for absolutely everyone else), and most of what we know about the program comes from leaks.</p>
        <p>But I would never have learned about all of these issues without having this blog as a starting point, teaching me about the current state of the space industry and scientific community, which have been completely transformed in the last few years. So if you are interested in learning more about space and what we're planning about it, I cannot recommend it enough.</p>
      ]]></description>
    </item>

    <item>
      <title>rachelbythebay</title>
      <pubDate>Tue, 09 Nov 2021 23:31:00 +0100</pubDate>
      <guid isPermaLink="false">rachelbythebay</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://rachelbythebay.com/w/atom.xml</link>
      <description><![CDATA[
        Some interesting tales from a sysadmin, mostly of incidents in production and their mismanagement. It is an interesting read for me sometimes since I do not have any experience in larger companies. The mismanagement part really makes me realize how lucky I am to not have said experience.
      ]]></description>
    </item>

    <item>
      <title>WIN98SE</title>
      <pubDate>Thu, 25 Nov 2021 09:09:53 +0100</pubDate>
      <guid isPermaLink="false">win98se</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://win98se.com/rss</link>
      <description><![CDATA[
        <p>If you look for "aesthetic" pictures on Tumblr, and you filter out all the stuff with a synthwave pink and blue palette or the photoshopped stuff, you'll probably find a lot of Windows 9x screenshots. I found this aptly named blog, full of screenshots, and it's a pretty nice source of inspiration for when I want to do things on my Windows 98 SE virtual machine.</p>
        <p>With those screenshots, I had found some software a few months ago called <a href="https://www.kurtz-fernhout.com/PlantStudio/" target="_blank">PlantStudio</a> and it is impressive. There are some screenshots I haven't really exploited yet, mostly of Japanese software. I really am fond of exploring the Japanese web, be it through some of their attempts at creating internet standards like HINA or through the software they created.</p>
        <p>Speaking of, It makes me a little sad that Japanese websites are slowly switching to the more "modern" designs we see now, like flat design, and are not keeping the condensed, efficient looks they had before. I used to browse Pixiv regularly, and while its new design is a bit more useful to English speakers, I had gotten used to knowing from memory what each link was in Japanese in the old design and the new one made me lose a ton of features. I wish we could just all go back in time and destroy JavaScript to prevent all of this.</p>
      ]]></description>
    </item>

    <item>
      <title>It's Pro Toad and Superb Owl</title>
      <pubDate>Sun, 05 Dec 2021 21:20:40 +0100</pubDate>
      <guid isPermaLink="false">protoad</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://git.tilde.town/dozens/protoadandsuperbowl/raw/branch/master/feed.xml</link>
      <description><![CDATA[
      <p>A plaintext webcomic made by a friend of mine who coined the term <em>Rsszard of Syndication</em> to describe me and seems me as a <a href="http://tilde.town/~dozens/feeds/feeds.png" target="_blank">monster feeding on feeds</a>. Many comics are inspired by conversations we have on IRC, so they share the same kind of weird humor.</p>
      <p>The feed is currently broken due to improper XML quoting, and the repo is being moved from another Gitea instance that has had serious technical issues for a while, so it is a bit messy. I opened <a href="https://tildegit.org/dozens/protoad/issues/1" target="_blank">an issue</a> to get it resolved.</p>
      ]]></description>
    </item>

    <item>
      <title>365 RFCs</title>
      <pubDate>Mon, 13 Dec 2021 15:58:10 +0100</pubDate>
      <guid isPermaLink="false">365rfcs</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://write.as/365-rfcs/feed/</link>
      <description><![CDATA[
        This is a very interesting blog that ran in 2019 with one post a day. Each post studied one <abbr title="Request for Comments">RFC</abbr> at once, starting from the very first one, and its author went as far as visiting the <a href="https://www.computerhistory.org/">Computer History Museum</a> to get access to the original RFCs as they were before they got poorly transcribed into their current online forms, as they included handwritten diagrams. That blog is now dead, but if you want to learn about the history of the Internet, this is a very good resource. This taught me among other things that Telnet is older than the Internet itself.
      ]]></description>
    </item>

    <item>
      <title>computers are bad</title>
      <pubDate>Sun, 19 Dec 2021 19:48:30 +0100</pubDate>
      <guid isPermaLink="false">computer.rip</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://computer.rip/rss.xml</link>
      <description><![CDATA[
        <p>You know you just can't go wrong with a name like that.</p>
        <p>This feed is from a newsletter than also offers an RSS feed and fax delivery. Its author mostly focuses on the history of technology on various subjects, and has taught me as many things as the previously mentioned <a href="https://write.as/365-rfcs/" target="_blank">365 RFCs</a> project.</p>
      ]]></description>
    </item>

    <item>
      <title>One year of feeds</title>
      <pubDate>Tue, 28 Dec 2021 08:38:56 +0100</pubDate>
      <guid isPermaLink="false">oneyear</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Meta</category>
      <description><![CDATA[
        <p>I was preparing to post yet another feed I subscribe to on this feed, then I realized that I've been at it for a while and checked the date of the very first post of this feed. It turns out RSRSSS has had its first anniversary two weeks ago, on December 15<sup>th</sup>!</p>
        <p>I wasn't really expecting to be able to keep up posting some things to this feed for a whole year, especially considering that I have multiple other websites to take care of and that this year has been hectic.</p>
        <p>I still have a pretty long list of things I would like to post about, more interesting posts that just throwing a feed around at random. Let's admit it, when I post a feed, it's just to keep posting regularly when I just don't have the time.</p>
        <p>I have been posting about some of my programming projects over on <a href="https://brainshit.fr" target="_blank">my French blog</a>, and I have been thinking about posts on RSRSSS or on feeds in general later this year. This might give me some fuel to post more on this meta-feed. For now though, I'm posting about parsing geospatial data, and I'll follow that with a dozen articles on some reverse engineering I've been doing. There are so many posts I want to write everywhere and I have so little time and energy…</p>
        <p>I have no idea who is even reading this feed since I don't have any stats and I don't want any, but if you've been reading this for the whole year, well thank you very much. Let's hope RSRSSS stays up for another year!</p>
      ]]></description>
    </item>

    <item>
      <title>Feedplz</title>
      <pubDate>Sun, 02 Jan 2022 04:45:57 +0100</pubDate>
      <guid isPermaLink="false">feedplz</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tool</category>
      <link>https://feedplz.codl.fr/</link>
      <description><![CDATA[
        <p>For the first time in this feed, here's a feed generator!</p>
        <p>There are many tools to generate RSS feeds from HTML pages, and some of them might just be point and click and they might work for pages that are relatively simple. Some work by looking for semantic HTML tags like <code>&lt;article&gt;</code>, or some require you to write some CSS or XPath selectors or just do some code. But my favorite kind of tool is some program or website that is dedicated to serving RSS feeds for some particular websites, for which feeds are regularly asked for but the devs are refusing to. I guess this somehow falls under the category of <a href="https://www.eff.org/deeplinks/2019/10/adversarial-interoperability" target="_blank">adversarial interoperability</a>. Providing an RSS feed for a website against its publisher's will is one of many ways to prevent it from being a completely closed environment, and force it to fit the philosophy of the web, which is to <em>share</em>.</p>
        <p>I have done a few of those feed generators over time, and I even published one of its feeds on here. But I had yet to see someone in my Internet circle do something similar. <a href="https://chitter.xyz/users/codl" target="_blank">@codl</a>, a cool friend, made <a href="https://feedplz.codl.fr/" target="_blank">Feedplz</a>, a service that provides RSS and Atom feeds for <a href="https://www.furaffinity.net/" target="_blank">FurAffinity</a> and <a href="https://ssp-comics.com/" target="_blank">SSP-Comics</a>. If you are interested in those websites, definitely check this service out and give codl some love.</p>
        <p>It's always great to see someone other than me show some interest in feeds, especially to the point of creating new feeds. This service might not have the most well written Python code, or might break easily should any of those websites choose to change something, but it has the merit of existing and of being a reminder that feeds do exist and that some people want them. Just that alone gives me warm fuzzies.</p>
      ]]></description>
    </item>

    <item>
      <title>sfeed</title>
      <pubDate>Sun, 09 Jan 2022 22:31:53 +0100</pubDate>
      <guid isPermaLink="false">sfeed-parser</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tool</category>
      <link>https://codemadness.org/sfeed-simple-feed-parser.html</link>
      <description><![CDATA[
        <p>~elioat made me discover <a href="https://codemadness.org/sfeed-simple-feed-parser.html" target="_blank">sfeed</a>, a tool that parses RSS and Atom feeds and can generate a list of items in multiple formats, including a static HTML page, a <a href="https://twtxt.readthedocs.org/en/stable/" target="_blank">twtxt</a> feed, or an Atom feed. This is what it looks like on Eli's own setup:</p>
        <ul>
          <li><a href="https://txt.eli.li/pb/rss/feeds.html" target="_blank">HTML view</a></li>
          <li><a href="https://txt.eli.li/pb/rss/exported-feeds.opml" target="_blank">An OPML export of all the subscriptions</a></li>
          <li><a href="https://txt.eli.li/pb/rss/feeds.atom" target="_blank">An Atom feed combining every subscription</a></li>
          <li><a href="http://txt.eli.li/pb/rss/feeds.txt" target="_blank">A twtxt feed combining every subscription</a></li>
        </ul>
        <p>While the Atom feed feels a little crude to me, a constant abuser of XML namespaces inside of feeds, I like the idea of what is basically a static site generator whose content comes from feeds. Static sites always feel much more manageable to me, be it as a developer, as a server administrator, or as an archivist. I do have an archivist side, with how much I've been using the Internet Archive in all my projects.</p>
      ]]></description>
    </item>

    <item>
      <title>DeviantArt feeds</title>
      <pubDate>Wed, 19 Jan 2022 21:40:42 +0100</pubDate>
      <guid isPermaLink="false">deviantart</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <link>https://www.deviantart.com/developers/rss</link>
      <description><![CDATA[
        <p>Some websites like YouTube or Tumblr still provide syndication feeds, but rarely advertise them. They would rather see its use die down until they can safely just remove it, because managing a single page that generates a bunch of XML is way too much to ask for in a world full of JavaScript, JSON and social media. Websites whose audience are usually developers like GitHub or GitLab generally do the opposite and serve more feeds because the devs want them. It is quite unfortunate that syndication feeds are now mostly restricted to technical people, and I'm pretty sure Google Reader's death is partly to blame.</p>
        <p>DeviantArt is not aimed at developers but deviants (I guess they're both <em>devs</em>?) but still provides some RSS feeds. With their recent redesign, they have been doing away with most of their comfy and featureful interface to replace it with some laggy experience that's inconsistent with its own mobile apps. Every switch back to a page that still uses the old UI is a breath of fresh air.</p>
        <p>One of those pages is the <a href="https://www.deviantart.com/developers/rss">RSS feeds documentation</a>, which also makes me a little worried that they might do away with RSS feeds at some point. They still do serve RSS feeds anyway, allowing you to search for deviations or journal entries. The feeds use Media RSS, which could make them usable on a Playstation Portable if you know how to work around the SSL issues. There is one base URL for all of the feeds:</p>
        <p><a href="https://backend.deviantart.com/rss.xml" target="_blank"><code>https://backend.deviantart.com/rss.xml</code></a></p>
        <p>The query parameters for the feeds are pretty poorly documented, so here is my attempt at it:</p>
        <dl>
          <dt>limit</dt>
          <dd>How many items to return at once. Defaults to and cannot exceed 60.</dd>
          <dt>q</dt>
          <dd>
            Search query. When omitted, the feed will return the most popular results. The search syntax is <a href="https://www.deviantartsupport.com/en/article/are-there-any-tricks-to-narrowing-down-a-search-on-deviantart" target="_blank">partially documented on the official help center</a>. Additional operators that are not documented on this page include:
            <dl>
              <dt>boost:</dt>
              <dd>The only known value is <code>popular</code>, to sort by most popular.</dd>
              <dt>by:</dt>
              <dd>Synonym for the officially documented <code>username:</code>. Filters by the name of the submitter.</dd>
              <dt>gallery:</dt>
              <dd>Synonym for the officially documented <code>username:</code>. Filters by the name of the submitter.</dd>
              <dt>location_tag:</dt>
              <dd>Filter by a location tag.</dd>
              <dt>in:</dt>
              <dd>Filters by a category. Category names here are pretty poorly documented, especially since DeviantArt is doing away with categories, but they seem to all have a name only in lowercase and with no spaces. For subcategories, use a slash as a path separator: <code>digitalart/drawings</code>.</dd>
              <dt>sort:</dt>
              <dd>
                Change the sorting mode. Values are that are known to work include:
                <dl>
                  <dt>popular</dt>
                  <dd>Sort by most popular first.</dd>
                  <dt>time</dt>
                  <dd>Sort by most recent first.</dd>
                </dl>
                This filter overrides both <code>boost:</code> and <code>special:</code>.
              </dd>
              <dt>special:</dt>
              <dd>
                Special filter? I don't know, it's pretty redundant. Known values include:
                <dl>
                  <dt>popular</dt>
                  <dd>Sort by most popular first.</dd>
                  <dt>newest</dt>
                  <dd>Sort by most recent first.</dd>
                  <dt>critiquable</dt>
                  <dd>Only include deviations that accept critiques. Now causes an HTTP 500 error.</dd>
                </dl>
                Any other value seems to cause an HTTP 500 error.
              </dd>
              <dt>subject_tag:</dt>
              <dd>Filter by a subject tag.</dd>
              <dt>tag:</dt>
              <dd>Filter by a tag.</dd>
            </dl>
          </dd>
          <dt>offset</dt>
          <dd>Offset to start at, for pagination. Defaults to zero. You can also use the <code>&lt;atom link rel="next" /&gt;</code> tags to get pre-made URLs for the next page.</dd>
          <dt>order</dt>
          <dd>
            An integer controlling the sorting. This is overriden by any sorting options specified in <code>q</code>.<br />
            It seems that the only two valid values are <code>9</code> for most popular, and any other integer for newest.
          </dd>
          <dt>type</dt>
          <dd>
            Type of items to retrieve. Values that are known to work include:
            <ul>
              <li>deviation (default)</li>
              <li>journal</li>
            </ul>
          </dd>
        </dl>
        <p>Some of those query parameters were found by digging through a million URLs archived by the Wayback Machine using <a href="https://github.com/internetarchive/wayback/tree/master/wayback-cdx-server" target="_blank">their CDX server</a>.</p>
        <p>If you have any further knowledge that should be added here, feel free to <a href="https://tilde.town/~lucidiot/contact.html" target="_blank">contact me</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>Kerbal Space Agency</title>
      <pubDate>Wed, 26 Jan 2022 20:10:02 +0100</pubDate>
      <guid isPermaLink="false">ksa</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://www.kerbalspace.agency/ksa/?feed=rss2&amp;launch=false&amp;maneuver=false</link>
      <description><![CDATA[
        <p>This feed shows you what happens when a Kerbal Space Program player wants to play <em>realistically</em>. The Kerbal Space Agency is a fictional space agency that tries to play in real Earth time and starts from the very beginning with weather balloons or sounding rockets. The project has been going on for a few years and is mostly active <a href="https://twitter.com/KSA_MissionCtrl" target="_blank">on Twitter</a>, with the website providing summaries, off-character commentary, and a <a href="http://www.kerbalspace.agency/Tracker/tracker.asp" target="_blank">mission tracker</a> that fetches data straight from the save file.</p>
        <p>The project has been much more silent since the pandemic, and there have been no news at all on whether or not it will be coming back, so for now this feed is quite inactive. However, the history there is pretty interesting to read still.</p>
        <p>Since this is a WordPress blog, you can also get the <a href="http://www.kerbalspace.agency/ksa/?feed=atom&amp;launch=false&amp;maneuver=false" target="_blank">Atom feed</a> or the <a href="http://www.kerbalspace.agency/ksa/?feed=rdf&amp;launch=false&amp;maneuver=false">RDF Site Summary feed</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>The USA's definition of an RSS feed</title>
      <pubDate>Mon, 31 Jan 2022 23:16:35 +0100</pubDate>
      <guid isPermaLink="false">govinfo-fail</guid>
      <link>https://www.govinfo.gov/feeds</link>
      <description><![CDATA[
        <p>The <a href="https://www.govinfo.gov/feeds" target="_blank">RSS feeds page</a> of the <em>govinfo</em> service of the United States Government Publishing Office has an interesting definition of an RSS feed:</p>
        <figure>
          <blockquote cite="https://www.govinfo.gov/feeds">
            <p>RSS feeds, (which have the extension ".xml", ".rss", ".sfm", ".cfm", ".rdf", ".aspx", or ".php"), …</p>
          </blockquote>
          <figcaption>—United States Government Publishing Office, <cite><a href="https://www.govinfo.gov/feeds" target="_blank">govinfo RSS feeds</a></cite></figcaption>
        </figure>
        <p>So if you have been coding in PHP, ASP.NET, or ColdFusion, you will now know that you have been writing nothing but RSS feeds the whole time!</p>
        <p>I couldn't find out what truly is the <code>.sfm</code> file extension, so if you know about it, please <a href="https://tilde.town/~lucidiot/contact.html" target="_blank">let me know</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>Requests for Comments</title>
      <pubDate>Wed, 09 Feb 2022 11:40:18 +0100</pubDate>
      <guid isPermaLink="false">rfc-feeds</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.rfc-editor.org/rfcrss.xml</link>
      <description><![CDATA[
        <p>The <a href="https://www.rfc-editor.org/" target="_blank">RFC Editor</a>, where the <abbr title="Requests for Comments">RFCs</abbr> that define Internet protocols are published, provides many ways to retrieve the <a href="https://www.youtube.com/watch?v=SiMHTK15Pik" target="_blank">over nine thousand</a> documents. Among them are <a href="https://www.rfc-editor.org/retrieve/rsync" target="_blank">rsync modules</a>, which I had never heard of before. But most importantly, there is an <a href="https://www.rfc-editor.org/rfcrss.xml" target="_blank">RSS feed</a> and an <a href="https://www.rfc-editor.org/rfcatom.xml" target="_blank">Atom feed</a>!</p>
        <p>I guess having that Atom feed was quite predictable, considering that Atom has been standardized in <a href="https://datatracker.ietf.org/doc/html/rfc4287" target="_blank">RFC 4287</a>. Also note that RFCs should now be written using a specific XML format, also defined in another RFC; <a href="https://datatracker.ietf.org/doc/html/rfc7991">RFC 7991</a> being the current version. It feels quite strange to me to see such "high-level" formats in an RFC; I am more used to seeing RFCs about lower-level protocols like <abbr title="Transmission Control Protocol">TCP</abbr>/<abbr title="Internet Protocol">IP</abbr> or <abbr title="Border Gateway Protocol">BGP</abbr>.</p>
      ]]></description>
    </item>

    <item>
      <title>Emojipedia Blog</title>
      <pubDate>Tue, 15 Feb 2022 01:34:54 +0100</pubDate>
      <guid isPermaLink="false">emojipedia</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://blog.emojipedia.org/rss/</link>
      <description><![CDATA[
        Another proof that Unicode probably goes too far: there is enough to say about emojis that an entire blog is dedicated to them. This is an RSS feed that has been sent to me by a friend, and this feed will definitely not make it into my RSS reader. I am posting this from a PuTTY session on a Windows XP laptop; I can't see any emojis there, so it is completely irrelevant.
      ]]></description>
    </item>

    <item>
      <title>linkbudz</title>
      <pubDate>Sun, 27 Feb 2022 21:21:45 +0100</pubDate>
      <guid isPermaLink="false">linkbudz</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://linkbudz.m455.casa/feed.rss</link>
      <description><![CDATA[
        <p>A new project of <a href="https://m455.casa" target="_blank">~m455</a> involves an IRC bot that listens to the <code>!post</code> command on his private IRC server to let a user post a link with some title to <a href="https://linkbudz.m455.casa" target="_blank">a webpage</a>. The project kicked off nicely by not having any HTML sanitization, so the trolls (and QA engineers I guess) that we are on this IRC server sent tons of JavaScript, CSS overrides, iframes, background music, etc. That broke the RSS feed, but the sanitization is now properly in place and the feed is usable. If you are curious to see what our little corner of the internet finds on other corners of the internet, feel free to look around and subscribe to the feed.</p>
      ]]></description>
    </item>

    <item>
      <title>Gitea's first feeds</title>
      <pubDate>Sun, 06 Mar 2022 21:58:39 +0100</pubDate>
      <guid isPermaLink="false">gitea-user-feed</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <description><![CDATA[
        <p>Gitea 1.16.0 <a href="https://github.com/go-gitea/gitea/pull/16002" target="_blank">adds support</a> for user feeds. Those feeds include the things you see on a user's recent activity page. They are accessible either by setting the <code>Accept</code> header to <code>application/rss+xml</code> or <code>application/atom+xml</code>, or by appending <code>.rss</code> or <code>.atom</code> to a username.</p>
        <p>For example, you can check out the <a href="https://tildegit.org/lucidiot.rss" target="_blank">RSS feed</a> and the <a href="https://tildegit.org/lucidiot.atom" target="_blank">Atom feed</a> for my profile on <a href="https://tildegit.org" target="_blank">tildegit.org</a>, the Gitea instance hosted by and for <a href="https://tildeverse.org" target="_blank">the tildeverse</a>.</p>
        <p>This is a nice first step, though I feel that user feeds are among the least useful of all the feeds that most common Git platforms provide. As I also maintain Alpine Linux packages, help manage <a href="https://breadpunk.club" target="_blank">breadpunk.club</a> and manage my own server at home, the feeds that would matter the most to me are the tags or release notes feeds. Those feeds are the most efficient way to be notified of any new releases on most software, and I have opened <a href="https://github.com/wustho/epy/issues/47" target="_blank">some</a> <a href="https://github.com/iscc/mobi/issues/8" target="_blank">issues</a> in the past to ask some maintainers to use Git tags just so I can use the feed.</p>
        <p>There is <a href="https://github.com/go-gitea/gitea/issues/569" target="_blank">an issue for global feed support</a>, and it is on the 1.17.0 roadmap. I subscribed to it, using the unfortunately email-based GitHub notification system, and will definitely follow it closely.</p>
      ]]></description>
    </item>

    <item>
      <title>Free Steam games</title>
      <pubDate>Sun, 13 Mar 2022 16:57:24 +0100</pubDate>
      <guid isPermaLink="false">grabfreegames</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://grabfreegames.com/rss</link>
      <description><![CDATA[
        <p>I have an account on a Misskey instance. Misskey is some japanese fediverse software with what is probably the heaviest JavaScript frontend of them all and it is full of interesting features. The one feature relevant to this post is called <em>antennas</em>: you can create timelines that will look for any post known to this server that matches a list of words or regular expressions. I used that to look for anything that mentions RSS, to potentially catch some interesting conversations or be able to give some answers to people's questions without having to scroll through every post on the fediverse for hours.</p>
        <p>Most posts are just random automated posts made by bots that were created to convert RSS feeds to ActivityPub, but sometimes I can find some nice things. I got the opportunity to mention <a href="https://envs.net/~lucidiot/hina/" target="_blank">HINA</a> at some point, and this week I found a new feed to add to my reader, <a href="https://grabfreegames.com">Grab Free Games</a>. The website's goal is pretty simple: tell you about any Steam games that are temporarily available for free, so that you can add them immediately to your Steam library and them prompty forget about them and never play them. Truly an amazing tool!</p>
      ]]></description>
    </item>

    <item>
      <title>cosmic.voyage</title>
      <pubDate>Mon, 21 Mar 2022 07:40:08 +0100</pubDate>
      <guid isPermaLink="false">cosmic.voyage</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://cosmic.voyage/rss.xml</link>
      <description><![CDATA[
        <p>A whole tilde has its own global RSS feed! cosmic.voyage is a tilde whose members publish logs from spaceships, outposts, etc. in a sci-fi universe; a large writing project, similarly to <a href="https://scp-wiki.wikidot.com/" target="_blank">the SCP foundation</a>. I keep on telling myself I'll have to read some of it someday, but it just gets added to my long pile of things to read—books, blog posts, magazines, random web pages, etc.</p>
        <p>If you are more of an <abbr title="Internet Engineering Task Force">IETF</abbr> fan, you can also get an <a href="https://cosmic.voyage/atom.xml" target="_blank">Atom feed</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>More explicit feed error reporting with mod_admin</title>
      <pubDate>Mon, 30 May 2022 17:39:56 +0200</pubDate>
      <guid isPermaLink="false">mod_admin</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <link>https://web.resource.org/rss/1.0/modules/admin/</link>
      <description><![CDATA[
        <p>While the <a href="https://www.rssboard.org/rss-specification#optionalChannelElements" target="_blank">RSS specification</a> and <a href="https://www.rssboard.org/rss-profile" target="_blank">RSS profile</a> both specify that the <a href="https://www.rssboard.org/rss-profile#element-channel-managingeditor" target="_blank"><code>&lt;managingEditor&gt;</code></a> and <a href="https://www.rssboard.org/rss-profile#element-channel-webmaster" target="_blank"><code>&lt;webMaster&gt;</code></a> must use e-mail addresses, and both also explicitly state that the <code>webMaster</code> is the e-mail address to contact for technical issues regarding the feed, most developers and users of RSS feeds and feed readers do not seem to have that in mind. Most feeds do not use those tags or might not even use valid e-mail addresses. Since most feed readers are focused on just getting the user to read some articles, and spit out some incomprehensible error or fail silently when something is wrong in a feed, they do not use those tags even when they are correctly specified to let the user ask for help.</p>
        <p>I could go and ask for some enhancements to error reporting on all feed readers, but that would be extremely exhausting, as most work in open-source projects feels to me&mdash;I definitely am not great at communication. Instead, here is a small initiative that RSS feed developers can make to make the internals of their RSS feed generation system more visible and, for a user that is curious enough to be reading the feed's source, point directly to where they can complain at.</p>
        <p>One of the approved <abbr title="RDF Site Summary">RSS</abbr> 1.0 modules, <a href="https://web.resource.org/rss/1.0/modules/admin/" target="_blank"><code>mod_admin</code></a>, also called the Administrative Module, defines an XML namespace, <code>xmlns:admin="http://webns.net/mvcb/"</code>, and two extra tags you can use:</p>
        <dl>
          <dt><code>&lt;<dfn>admin:generatorAgent</dfn>&gt;</code></dt>
          <dd>Should use an URI in a <code>rdf:resource</code> attribute to point to the feed generator. This is redundant with the <abbr title="Really Simple Syndication">RSS</abbr> 2.0 <a href="https://www.rssboard.org/rss-profile#element-channel-generator" target="_blank"><code>&lt;generator&gt;</code></a> tag, and the <a href="https://validator.w3.org/feed/" target="_blank">W3C Feed Validation Service</a> will complain if you use both tags at once, but with this new tag, you can specify a URI instead of some arbitrary string, which could let a feed reader make a link available more easily.</dd>
          <dt><code>&lt;<dfn>admin:errorReportsTo</dfn>&gt;</code></dt>
          <dd>As above, the <code>rdf:resource</code> attribute should point to somewhere to report issues with this feed. This is usually a <code>mailto:</code> URI, but you could also point it to a contact form over HTTP. This is similar to the <a href="https://www.rssboard.org/rss-profile#element-channel-webmaster" target="_blank"><code>&lt;webMaster&gt;</code></a> tag, but the W3C validator does not complain about a redundancy here, so you can safely use both.</dd>
        </dl>
        <p>By adding <code>&lt;admin:generatorAgent&gt;</code> to your feed, you could let some random developer, let's say, <em>me</em>, look at your RSS feed generation code, and maybe find the bug for you. By adding <code>&lt;admin:errorReportsTo&gt;</code>, a tag name that is more explicit than <code>webMaster</code>, with a clickable <code>mailto:</code> link or a link to a contact form, you can make it easier for curious users and random developers to tell you that something is wrong.</p>
        <p>It is obviously not that likely that some random user is going to look at the source of the feed when something is wrong, but considering that content syndication over feeds is dying and that most of its remaining users are the tech-savvy ones, it is not impossible.</p>
        <p>And if, like me, you are using an <abbr title="eXtensible Stylesheet Language Transformation">XSLT</abbr> as your <a href="https://www.w3.org/TR/xml-stylesheet/" target="_blank"><code>&lt;?xml-stylesheet?&gt;</code></a>, you could add a link to report errors with your feed if someone is displaying it in a browser. If you open RSRSSS in your web browser and your browser does not have native support for RSS feeds, then you can find this link at the very bottom of the page.</p>
      ]]></description>
    </item>

    <item>
      <title>Gitea has most feeds, except the most important one</title>
      <pubDate>Mon, 08 Aug 2022 01:28:03 +0200</pubDate>
      <guid isPermaLink="false">gitea-most-feeds</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <description><![CDATA[
        <p>While Gitea's 1.16.0 release <a href="https://github.com/go-gitea/gitea/pull/16002" target="_blank">added support for user feeds</a>, it was laching the feeds for repositories, organizations, releases and commits. The 1.17.0 release <a href="https://github.com/go-gitea/gitea/pull/19055" target="_blank">adds support for feeds on repositories</a> and <a href="https://github.com/go-gitea/gitea/pull/17714" target="_blank">adds support for feeds on organizations</a>, but the feed for releases, the most well-known and most commonly used feed on GitHub, is still missing.</p>
        <p>As mentioned earlier when I talked about the 1.16.0 release, the feeds are accessible either by setting the <code>Accept</code> header to <code>application/rss+xml</code> or <code>application/atom+xml</code> when requesting a user, an organization or a repository's URL, or by appending .rss or .atom to the username, repository name or organization name. Some examples:</p>
        <ul>
          <li>The <a href="https://tildegit.org/lucidiot.rss" target="_blank">RSS feed</a> and the <a href="https://tildegit.org/lucidiot.atom" target="_blank">Atom feed</a> for my account on <a href="https://tildegit.org" target="_blank">Tildegit</a>, the Gitea instance of the <a href="https://tildeverse.org" target="_blank">Tildeverse</a>;</li>
          <li>The <a href="https://tildegit.org/lucidiot/rsrsss.rss" target="_blank">RSS feed</a> and the <a href="https://tildegit.org/lucidiot/rsrsss.atom" target="_blank">Atom feed</a> for the repository hosting RSRSSS;</li>
          <li>The <a href="https://tildegit.org/casa.rss" target="_blank">RSS feed</a> and the <a href="https://tildegit.org/casa.atom" target="_blank">Atom feed</a> for the <a href="https://casa.tildepages.org" target="_blank">Commonhealth of Casakhstan</a>'s Gitea organization on Tildegit.</li>
        </ul>
        <p>I hope that we will see <a href="https://github.com/go-gitea/gitea/issues/19091" target="_blank">the feeds for releases</a> in the next release, so that Gitea adds the one missing feature to make package maintainers happy.</p>
        <p>By the way, <a href="https://tildegit.org/lucidiot/rsrsss.rss" target="_blank">the RSS feed for the RSRSSS repo</a> could be called the Really Simple RSRSSS Repository Syndication feed, or <abbr title="Really Simple Really Simple Really Simple Syndication Syndication Repository Syndication">RSRSRSSSRS</abbr>.</p>
      ]]></description>
    </item>

    <item>
      <title>tilde whirl</title>
      <pubDate>Mon, 15 Aug 2022 13:52:03 +0200</pubDate>
      <guid isPermaLink="false">tilde-whirl</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Podcasting</category>
      <link>http://tilde.town/~dozens/podcast/rss.xml</link>
      <description><![CDATA[
        <p>~dozens has started a podcast with tildeverse citizens as its guests. Since podcasts are fully backed by RSS, well there is an RSS feed available. I helped him iron out some details on the feed, since I had never toyed with RSS feeds for podcasts before and wanted to look at them a bit more in-depth. Maybe if I get enough experience helping <a href="https://casa.tildepages.org/" target="_blank">casakhstan</a> people set up their podcast feeds, I will write about it here…</p>
      ]]></description>
    </item>

    <item>
      <title>The Plain Text Project</title>
      <pubDate>Sun, 21 Aug 2022 09:16:00 +0200</pubDate>
      <guid isPermaLink="false">plain-text-project</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://plaintextproject.online/feed.xml</link>
      <description><![CDATA[
        <p>The Plain Text Project is a blog initiated by Scott Nesbitt, a writer that has been Linux full-time for a while while not considering himself a <em>techie</em>, as in a power user. He shows various ways text files can be used, and includes tutorials on using tools such as <code>pandoc</code>. While the regular touting of Markdown as if it was the most perfect markup ever in most of the links shared on this blog annoys me, the suggestions can be inspiring to build your own plain text systems, and the author encourages using RSS feeds. You can get featured in it as well, by getting a quick interview over email on how you use plaintext.</p>
      ]]></description>
    </item>

    <item>
      <title>tinyapps.org</title>
      <pubDate>Tue, 30 Aug 2022 06:59:11 +0200</pubDate>
      <guid isPermaLink="false">tinyapps</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tinyapps.org/blog/index.rss</link>
      <description><![CDATA[
        <p>tinyapps.org is a website I found through my binging of every single article of the previously featured <em>Plain Text Project</em>. It features an interesting selection of old and very small Windows and Mac software that perform tasks that could seem to be impossible in such a small size, such as a mail client or a web browser. I might have a deeper look through the selection and use some of the tools in my Windows XP setup…</p>
      ]]></description>
    </item>

    <item>
      <title>Feedchievement get!</title>
      <pubDate>Wed, 31 Aug 2022 17:30:53 +0200</pubDate>
      <guid isPermaLink="false">200feeds-badge</guid>
      <description><![CDATA[
        <p>TinyTinyRSS currently shows that I have 202 feeds. Two of those feeds are currently down, and probably permanently, so I can say I just have 200 feeds.</p>
        <p>I mentioned reaching 200 feeds on IRC, and ~dozens awarded me a badge for my <em>outstanding feedchievement</em>!</p>
        <figure>
          <img src="https://envs.net/~lucidiot/rsrsss/img/200feeds-badge.png" alt="drawing of a coat of arms with 200 written on it, surrounded by the words 'outstanding feedchievement', with a scroll in the background." loading="lazy" />
        </figure>
        <p>I have quite the backlog of feeds to share on here. Feel free to harass me if I don't post one each week, because I have no excuse.</p>
      ]]></description>
    </item>

    <item>
      <title>Hide your feed from search engines with Feed Access Control</title>
      <pubDate>Sun, 04 Sep 2022 19:18:30 +0200</pubDate>
      <guid isPermaLink="false">fac-1.0</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <link>https://web.archive.org/web/20080101062756/http://www.bloglines.com/about/specs/fac-1.0</link>
      <description><![CDATA[
        <p><a href="https://web.archive.org/web/20080101062756/http://www.bloglines.com/about/specs/fac-1.0" target="_blank">Feed Access Control 1.0</a> was an extension to both RSS and Atom feeds proposed by <a href="https://en.wikipedia.org/wiki/Bloglines" target="_blank">Bloglines</a>, a now defunct feed aggregator. FAC proposed a single boolean option to allow or deny news aggregators from republishing the feed, including it in search engines, etc.; an equivalent to a <code>robots.txt</code> file.</p>
        <p>To use it within RSS and Atom feeds, you will need to add the namespace to the root tag as usual: <code>xmlns:access="http://www.bloglines.com/about/specs/fac-1.0"</code>. You can then add the <code>access:restriction</code> element as a child of the root element, with the <code>relationship</code> attribute set to <code>allow</code> or <code>deny</code>. When the element is not set, <code>allow</code> will be assumed. If the feed had previously set <code>deny</code>, removing the element will still cause aggregators to keep assuming a denial; <code>allow</code> must be explicitly set to restore indexability.</p>
        <pre>&lt;rss version="2.0" xmlns:access="http://www.bloglines.com/about/specs/fac-1.0"&gt;
  &lt;access:restriction relationship="deny" /&gt;
  &lt;channel&gt;
    &lt;!-- ... --&gt;
  &lt;/channel&gt;
&lt;/rss&gt;</pre>
        <pre>&lt;feed xmlns="http://www.w3.org/2005/Atom" xmlns:access="http://www.bloglines.com/about/specs/fac-1.0"&gt;
  &lt;access:restriction relationship="deny" /&gt;
  &lt;!-- ... --&gt;
&lt;/feed&gt;</pre>
        <p>Note that this is the only case I know of where an RSS extension adds a tag outside of both <code>&lt;channel&gt;</code> and <code>&lt;item&gt;</code>.</p>
      ]]></description>
    </item>

    <item>
      <title>dozens of ~dozens' books</title>
      <pubDate>Sun, 11 Sep 2022 23:13:12 +0200</pubDate>
      <guid isPermaLink="false">dozens-books</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://git.tilde.town/dozens/books/raw/branch/main/feed.xml</link>
      <description><![CDATA[
      <p>~dozens, who never ceases to feed the monster feeding on feeds that I am, had allowed me a year ago to <a href="https://git.tilde.town/dozens/books/commit/b00b383411de888dfa6e76fdd9420d7af0a11ae8" target="_blank">add an RSS feed generator script</a> to <a href="https://git.tilde.town/dozens/books/" target="_blank">his <code>books</code> repository</a>.</p>
      <p>This Git repo hosts <a href="https://git.tilde.town/dozens/books/src/branch/main/books.csv" target="_blank">a CSV file</a> exported from dozens' <a href="https://calibre-ebook.com/" target="_blank">Calibre</a> library. The file is also converted to a <a href="https://en.wikipedia.org/wiki/Recfiles" target="_blank">recfile</a>, and with my help to an RSS feed. This was set up after dozens shared some of his collection with <a href="https://friends.m455.casa/" target="_blank">the casakhstan</a>, and we got interested in it and any new additions to it.</p>
      <p>If you are interested in a book found within this library, feel free to <a href="https://tilde.town/~dozens/#contact" target="_blank">contact ~dozens</a> to request one of the ebooks. <em>You wouldn't download an ebook, wouldn't you?</em></p>
      ]]></description>
    </item>

    <item>
      <title>Astronomy Picture of the Day</title>
      <pubDate>Sun, 18 Sep 2022 18:29:54 +0200</pubDate>
      <guid isPermaLink="false">apod</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://apod.nasa.gov/apod.rss</link>
      <description><![CDATA[
        <p>Here's a pretty well-known feed of pretty images that are pretty great. Since 1995-06-16, every day, APoD gives you a new cool space pic. It's one of those nice, simple feeds that I like to have in my feedreader; I block out an hour of time to read through many posts in my reader, and will start with APoD among others to warm up.</p>
      ]]></description>
    </item>

    <item>
      <title>LSL scripts from Outworldz</title>
      <pubDate>Sun, 25 Sep 2022 02:03:17 +0200</pubDate>
      <guid isPermaLink="false">outworldz-lsl-scripts</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://feeds.feedburner.com/LslScript</link>
      <description><![CDATA[
        <p>I have a list of over a hundred ideas for posts on this feed, and had the next post already planned out, but then I stumbled upon a feed that I clearly couldn't expect. I was trying to find the correct word for the servers that regroup other servers hosting virtual worlds, all compatible with Second Life. Those servers are called <em>hypergrids</em>, and each server grouped within them is called a <em>grid</em>. Each grid contains tiles, also called regions, which are one square kilometer of virtual world. All of this has existed long before companies tried to get involved in the <em>metaverse</em>, and long before cryptocurrency even began to exist. Those worlds are still active, although probably not as much as during Second Life's peak.</p>
        <p>While looking for some sort of authoritative source for the definition of a hypergrid, I found <a href="https://outworldz.com/" target="_blank">Outworldz</a>, a website full of resources related to OpenSimulator, the server software that runs all of those worlds. Its name seems to be a pun on InWorldz, one of the largest commercial OpenSimulator grids, which has existed from 2010 to 2018 before shutting down and seemingly starting from scratch.</p>
        <p>I am quite curious about those old virtual worlds, especially now with all this <em>metaverse</em> bullshit. I browsed around a bit and realized they provide an RSS feed of the LSL scripts shared on this website. LSL, or the Linden Scripting Language, is the scripting language made by Linden Lab for Second Life. Scripting is how most of the virtual worlds come to life; be it enabling automatic transactions, sending messages, embedding YouTube videos to create movie theaters, etc., LSL can become important quite fast if you want to do interesting things in OpenSim. So here it is, a feed that genuinely surprised me, full of interesting content for a community that sounds inactive today, but still definitely exists.</p>
      ]]></description>
    </item>

    <item>
      <title>~lucidiot's ideas</title>
      <pubDate>Mon, 03 Oct 2022 20:05:15 +0200</pubDate>
      <guid isPermaLink="false">lucidiot-ideas</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tilde.town/~lucidiot/ideas/rss.xml</link>
      <description><![CDATA[
        <p>I have a lot of ideas, and a lot of projects. I feel like it is a waste to never act on those ideas, even though they are not that useful or motivating to me, and I struggle to end projects that are not completed because of the <a href="https://en.wikipedia.org/wiki/Sunk_cost#Fallacy_effect" target="_blank">sunk cost fallacy</a>. to lighten the weight of giving up on some ideas or some projects, I started an <em>ideas</em> page, in which I list the ideas I had, and sometimes mention some research I made on them or a project that I abandoned, and why I gave up. It caught the interest of some tilde.town members and I now advocate for everyone to have their own ideas page. To follow the trend of the <a href="https://nownownow.com/" target="_blank"><code>/now</code> page</a> or <a href="https://uses.tech/" target="_blank"><code>/uses</code> page</a>, this could become the <code>/ideas</code> page on your personal website.</p>
        <p>I made my ideas page into an RSS feed after I rewrote the page so it would be generated from a <a href="https://en.wikipedia.org/wiki/Recfiles" target="_blank">recfile</a>, so here it is. If you have made your own ideas page, feel free to <a href="https://tilde.town/~lucidiot/contact.html" target="_blank">let me know</a> and I'll feature you in the section at the bottom of <a href="https://tilde.town/~lucidiot/ideas/" target="_blank">the webpage</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>Categorizing hundreds of feeds</title>
      <pubDate>Sun, 09 Oct 2022 18:14:16 +0200</pubDate>
      <guid isPermaLink="false">categories</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <description><![CDATA[
        <p>I am now reaching nearly 230 feeds in my feedreader, and things are starting to get a little bit out of hand. While I can deal with the backlog of posts just fine as long as I use my feedreader every day, and am slowly working my way towards some sort of <em>Inbox Zero</em>, I was feeling like there could be much better ways to categorize my feeds so that I can process them more efficiently. I was thinking that I could put feeds into categories that would let me know how to read those feeds, with which amount of attention and which mindset.</p>
        <p>For example, feeds that just have pretty images don't need much <a href="https://en.wikipedia.org/wiki/Spoon_theory" target="_blank">spoons</a> to process, while blogs with in-depths reflections on some topics will take more time to read. I can skim through some feeds while barely reading the post titles, but some other feeds have items that are actual tasks to complete. I have seen various posts about people saying you should weed out as much as you can from your feedreader because you will never read everything, but the point is not <em>always</em> to read everything.</p>
        <p>When I was doing my categorizing, I had been asked on IRC about which categories I use and why, so this post is a more thought-out reply.</p>
        <p>I am probably not fully done with categorizing, but I got a pretty good list right now. My current list of categories does represent how I use my feed reader pretty well, and over 90% of the feeds have a category right now. Here's a summary of those categories:</p>
        <dl>
          <dt>Aggregators (10 feeds)</dt>
          <dd>Feeds whose items are mainly reposts from other blogs, or lists of links, etc.; those either send me down random rabbit holes that might lead to subscribing to moar feeds, or I can just skim through them. I usually do a first pass over them when I am going through all of my unread articles just to skip the posts that I want to skip, and leave the more interesting reads for later. I later come back to this category to go through the links and read everything else.</dd>
          <dt>Alpine upstreams (13 feeds)</dt>
          <dd>Feeds for Git tags and releases on GitHub, GitLab or Gitea instances. I maintain some Alpine packages, so I stay up to date on the new releases using those. I only mark those items as read once I have completed the relevant Alpine package's upgrade.</dd>
          <dt>Comics (9 feeds)</dt>
          <dd>Just webcomics; images with usually funny text in it. When I just want to reduce my unread articles count quickly without much thinking, I can go through these.</dd>
          <dt>dozens (19 feeds)</dt>
          <dd>An entire category dedicated to the feeds of just one person. ~dozens has blessed me with the highest amount of feeds from one author. Most of the feeds are from various of his accounts, like on Goodreads, Gitea, archive.org, etc., and I can usually skim through these, but there are multiple blogs in there.</dd>
          <dt>EU Bookshop (4 feeds)</dt>
          <dd>I had mentioned before that the Publications Office of the European Union has an online store that provides RSS feeds of search results. There are a few keywords I monitor, such as USB in case they ever decide to release free USB keys again, so I keep them here.</dd>
          <dt>Friends (25 feeds)</dt>
          <dd>All the feeds from friends other than ~dozens. Quite the hodgepodge of feeds from various online accounts and of blogs that take longer to read.</dd>
          <dt>Images (6 feeds)</dt>
          <dd>Feeds with just some pretty images, and sometimes some interesting facts about those images. Very quick to read through.</dd>
          <dt>ITSB (44 feeds)</dt>
          <dd>A subset of the many feeds I generate in my <a href="https://tilde.town/~lucidiot/itsb/" target="_blank">ITSB</a> project. I like to sometimes read the accident reports I get there, but most of the subscriptions are just so I can check that the feeds appear to be behaving normally and detect errors, so I can just mark the entire category as read if I am not in the mood.</dd>
          <dt>lucidiot (15 feeds)</dt>
          <dd>My own feeds, some generated by my own scripts, and some from my online accounts. Just like ITSB, this lets me troubleshoot them, or at least be aware of what I am sending out to the rest of the world.</dd>
          <dt>Podcasts (3 feeds)</dt>
          <dd>I'm not too much of a fan of podcasts, but some friends have started them, so I keep there separately. They usually require me to have a long chunk of free time available, because I am simply unable to listen to English podcasts while doing anything else, unless I decide to just not try to understand what is being said.</dd>
          <dt>Services (7 feeds)</dt>
          <dd>Status pages or blogs of various services I use, such as <a href="https://escargot.chat" target="_blank">Escargot</a> or OpenStreetMap. I quickly read through them just to stay updated on those services and know about any action I might need to take.</dd>
          <dt>Tech blogs (27 feeds)</dt>
          <dd>Various blogs related to programming, electronics, networking, server administration, etc. Categorizing made me realize that I think I just have too many of those, and often don't care that much about the topics in those blogs, mainly because I care less and less about the state of modern web development. Each time I go through those, I take some time to think about whether or not I want to keep the feeds in here.</dd>
          <dt>Weeds (6 feeds)</dt>
          <dd>Short for <em>web feeds</em>, a bunch of feeds made by my friends and providing RSS-only content. Those are much less formal than blogs, post irregularly, and encourage conversations between us since we all subscribe to each other.</dd>
          <dt>Writing (8 feeds)</dt>
          <dd>Anything that could possibly relate to writing, mostly in a notebook, or that invites me to write in my notebooks for any reason. This includes blogs about bullet journaling, handwriting, productivity, personal development, etc., and I would like to have more of those in my reader.</dd>
          <dt>YouTube (17 feeds)</dt>
          <dd>All my YouTube subscriptions. This works a lot better than actually subscribing to a channel on YouTube since you don't have to care about <em>the bell</em>; you will get notified of each video every time. This also means I don't need a Google account for this. I usually go through this category during lunch break when I work from home.</dd>
          <dt>Uncategorized (15 feeds)</dt>
          <dd>Those are blogs that just do not fit anywhere else. Maybe they go on about completely random topics each time, or they would just be the only feed in their category (for example, I could have <em>Transportation</em> and <em>Space</em> with one feed each), or they live at the intersection of two or more categories and I haven't decided where to put them yet. Alternatively, I might just be wondering whether I should still be subscribing to them, so I don't even bother to categorize them.</dd>
        </dl>
        <p>Some of those categories explain why I am not yet sharing an OPML export of the feeds I currently subscribe to; some feeds have a private token embedded in the URL for authentication, or some are not meant to be shared too publicly. Managing a custom OPML export from TinyTinyRSS would be a bit too much work whenever I subscribe or unsubscribe from a feed. Instead, you'll just get <a href="https://envs.net/~lucidiot/rsrsss/opml/feeds.opml">the feeds featured in RSRSSS</a> as an OPML file, as I slowly work my way through my subscriptions or other feeds that I find interesting and share them on here.</p>
      ]]></description>
    </item>

    <item>
      <title>NASA Earth Observatory</title>
      <pubDate>Sun, 16 Oct 2022 02:31:48 +0200</pubDate>
      <guid isPermaLink="false">nasa-earth</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://earthobservatory.nasa.gov/feeds/earth-observatory.rss</link>
      <description><![CDATA[
        <p>The NASA Earth Observatory is a website meant to share various satellites images of the Earth that NASA collects, especially to raise awareness about climate change or show the extend of large-scale events such as wildfires and droughts. You get to see a whole bunch of pretty pictures, and then realize that most of this just highlights the disaster that we just keep on causing. What a great thing to have in my feedreader!</p>
        <p>There are a few <a href="https://earthobservatory.nasa.gov/subscribe/feeds" target="_blank">more specific feeds</a> if you want just one category of their posts.</p>
      ]]></description>
    </item>

    <item>
      <title>dozens dreams</title>
      <pubDate>Sun, 23 Oct 2022 12:46:33 +0200</pubDate>
      <guid isPermaLink="false">dozens-dreams</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tilde.team/~dozens/dreams/rss.xml</link>
      <description><![CDATA[
        <p>When the COVID–19 pandemic hit, ~dozens started to get different dreams than usual, and started to log them in a blog. <a href="https://tilde.team/~dozens/dreams/about.html" target="_blank">The about page</a> has some interesting information on the why and the how of this blog.</p>
        <p>I have been logging my dreams on and off for multiple years in my notebooks. I had intially started that as a quest to do lucid dreaming, a quest that I gave up on because <a href="https://www.world-of-lucid-dreaming.com/reality-checks.html" target="_blank">reality checks</a> are a really difficult routine to get into and they weren't bringing much of a result. The <em>lucid</em> in <em>lucid dreaming</em> was the original inspiration for my nickname. I kept on logging my dreams after that because I was still interested in remembering my dreams, and I nowadays also use this as an excuse to write at least one line a day in a notebook, since that is a habit I want to keep; when I do not remember a dream, I will still write <em>I did not remember my dreams</em>.</p>
        <p>Getting those random dreams in my feedreader is what got me started in posting my own dream logs <a href="https://envs.net/~lucidiot/dreams/">on my wiki</a>. I might end up separating them at some point, as I am slowly working my way through all the dreams I have logged over the years in many notebooks, translating them and obfuscating them for public consumption.</p>
        <p>My dreams almost always involve me with some family members or friends in a very bizarre situation, but still in keeping with most of the laws of physics, whereas dozens' dreams appear to have a much more malleable world. That might be related to me being much less exposed to fantasy or RPGs and having much less creativity.</p>
      ]]></description>
    </item>

    <item>
      <title>The RSSoker</title>
      <pubDate>Sun, 30 Oct 2022 14:54:21 +0100</pubDate>
      <guid isPermaLink="false">rssoker</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Meta</category>
      <description><![CDATA[
        <p>I am usually known by my friends as that one guy who keeps on telling you to make an RSS feed out of everything. You made a blog? Feed. A list of any kind? Feed. A calendar? Feed. You have anything public that could possibly get some updates over time and could be followed regularly? Feed. <a href="https://redirect.invidious.io/watch?v=0jMHMtk01-g&amp;t=112" target="_blank">We must feed.</a></p>
        <p>dozens, now a recurring character in this feed, summarized me in an original way:</p>
        <blockquote>
          <p>there's an rss devil on my shoulder telling me to make new feeds all the time, and it is lucidiot. on my other shoulder is an rss angel and it is also lucidiot and it is also always telling me make new feeds.<br />
          like how in some storylines the joker just wants batman to be the very best batman he can be. lucidiot is the rss joker to my compulsive writing batman.</p>
          <p>rssoker: everyone is just one bad day away from making another rss feed<br />
          rssatman: you're wrong rssoker<br />
          rssoker: HAHAHAHAHAH</p>
        </blockquote>
      ]]></description>
    </item>

    <item>
      <title>The Old New Thing</title>
      <pubDate>Sun, 06 Nov 2022 22:03:28 +0100</pubDate>
      <guid isPermaLink="false">old-new-thing</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://devblogs.microsoft.com/oldnewthing/feed/</link>
      <description><![CDATA[
        <p>This is the only Microsoft-related blog that I currently subscribe to: a nearly 20 years old blog from Raymond Chen, a software engineer working on Windows. The Old New Thing has nearly-daily posts, some sharing key learnings from replying to customer support requests, some forming long series describing entire CPU architectures, and some just general C++ or Windows related tips. Considering that I do not do any assembly code or C++, the more interesting content for me is either when some bits of Windows history are inserted into the post, or some complex programming concept that I rarely get to meet in my usual programming gets explained. Those posts are still posts that I usually skim through without understanding half of them anyway.</p>
        <p>This blog is mostly known for its random posts on Microsoft jargon (which Chen calls <em>Microspeak</em>) or various pieces of Windows trivia, such as <a href="https://devblogs.microsoft.com/oldnewthing/20121218-00/?p=5803" target="_blank">why Pinball was removed from Windows</a>, and <a href="https://devblogs.microsoft.com/oldnewthing/20181221-00/?p=100535" target="_blank">why it cannot come back even though they want to</a>. More recently, a post on <a href="https://devblogs.microsoft.com/oldnewthing/20220816-00/?p=106994" target="_blank">a song that made hard drives crash</a> resulted in <a href="https://nvd.nist.gov/vuln/detail/CVE-2022-38392" target="_blank">a vulnerability</a> being reported.</p>
      ]]></description>
    </item>

    <item>
      <title>NASA Image of the Day</title>
      <pubDate>Sun, 13 Nov 2022 19:43:38 +0100</pubDate>
      <guid isPermaLink="false">nasa-iotd</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss</link>
      <description><![CDATA[
        The last of the three NASA feeds I currently have in my RSS reader: a more general feed of images related to NASA's various activities. It mostly mentions space, but there are mentions of aeronautics, or various bits of NASA-related events of history. I find it interesting to get random reminders that NASA isn't just about space.
      ]]></description>
    </item>

    <item>
      <title>COOELST CAT COMCIX</title>
      <pubDate>Sun, 20 Nov 2022 03:24:55 +0100</pubDate>
      <guid isPermaLink="false">coolmxmuffin</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://coolmxmuffin.tumblr.com/rss</link>
      <description><![CDATA[
        Quite a few webcomics out there are using Tumblr, sometimes behind custom domains. This one is a pretty simple webcomic that someone made and that I somehow stumbled upon one day, possibly just by seeing a link to one of the posts on the Fediverse. It is intentionally poorly drawn and written and that just adds to the jokes, and usually talks about topics related to the queer community or to neurodivergent people, which is what you commonly find on Tumblr. It posts quite irregularly, but it is nice to see a simple and funny post from time to time in my feedreader, and the intentional low quality does remind you that you do not have to make something that's perfect for it to be enjoyable or interesting.
      ]]></description>
    </item>

    <item>
      <title>status.cafe</title>
      <pubDate>Sun, 04 Dec 2022 18:44:52 +0100</pubDate>
      <guid isPermaLink="false">status.cafe</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://status.cafe/feed.atom</link>
      <description><![CDATA[
        <p>Through the endless treasure trove of <a href="http://tilde.town/~dozens/feeds/" target="_blank">feeds</a> that is dozens, I am guaranteed not to ever be running out of feeds to post about on here. Thanks to him, I discovered <a href="https://status.cafe">status.cafe</a>, a place to share your current status in 140 characters or less. Basically Twitter, but without a concept of notifications or following others; this is a lot more about publishing content than receiving it.</p>
        <p>Each status includes an emoji to summarize your current mood or state, and if you know how to use the browser's developer tools, you can make it use any Unicode character you want. You can show off your current status emoji using a badge, and I have put <a href="https://status.cafe/users/lucidiot/badge.png" target="_blank">mine</a> among the many others on <a href="https://tilde.town/~lucidiot/" target="_blank">my tilde.town page</a>.</p>
        <p>status.cafe provides a whole bunch of Atom feeds; you can subscribe to <a href="https://status.cafe/feed.atom" target="_blank">a feed of everyone at once</a> or the specific feed of each user as <code>https://status.cafe/users/[username].atom</code>. For example, here is <a href="https://status.cafe/users/lucidiot.atom" target="_blank">mine</a>.</p>
        <p>While exploring the information superhighway to learn more about other feeds I wanted to post about on here, I also stumbled upon <a href="https://www.imood.com/" target="_blank">imood</a>, which possibly was a source of inspiration for status.cafe. Statuses are called moods, and have both a personal mood (some sentence that the user writes) and a base mood selected from a set. There are no feeds on this one though, so status.cafe is clearly superior.</p>
      ]]></description>
    </item>

    <item>
      <title>Return to service</title>
      <pubDate>Sun, 21 May 2023 13:48:08 +0200</pubDate>
      <guid isPermaLink="false">return-to-service</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Meta</category>
      <description><![CDATA[
        <p>Due to a long list of personal reasons, I stopped my weekly posting on this feed just a few weeks before the second anniversary of this feed. I have been trying to get back to posting regularly to my various websites, including this feed, with mediocre results. My mental health isn't good enough for me to promise any kind of regular posting from now on, but I will still be making some occasional posts on this feed.</p>
        <p>I am building a small backlog of posts to hopefully allow me to post <em>somewhat</em> regularly, using something even worse than just writing XML by hand as I usually do in here. I created a database using LibreOffice Base on a whim, just because I wanted to play with that one evening, and ended up inserting about 50 feeds that I wanted to post and creating a form to start writing short descriptions of each feed to later post them.</p>
        <p>Today, I somehow conjured the energy to rewrite the <abbr title="eXtensible Stylesheet Language Transformations">XSLT</abbr> that powers the HTML rendering of this feed, on browsers that do not support RSS feeds natively. It looks more refined, and I have some ideas for future extensions such as supporting enclosures, GeoRSS, Event RSS and more. It now also includes some optional JavaScript that fixes the <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#d-o-e">HTML unescaping issue</a> on Firefox, making the feed much more readable. After finishing a first version of this new theme, I decided to finally post again and announce this possible return.</p>
        <p>One of the many reasons why i have so little energy to post is that i feel like most of what i do is meaningless or not interesting to anyone, which is probably to be expected when i explicitly choose to ignore <abbr title="search engine optimization">SEO</abbr> or just when i work on very niche topics. if you want to help me fight the negative voices in my head, feel free to <a href="https://tilde.town/~lucidiot/contact.html" target="_blank">reach out to me</a>. Even just a single sentence to tell me you are reading me is hugely appreciated.</p>
      ]]></description>
    </item>

    <item>
      <title>Hundred Rabbits</title>
      <pubDate>Sun, 28 May 2023 15:11:40 +0200</pubDate>
      <guid isPermaLink="false">100r</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://100r.co/links/rss.xml</link>
      <description><![CDATA[
        <p>Rek Bell and Devine Lu Linvega are two artists living together on a sailboat called Pino, forming the artist collective known as Hundred Rabbits, often abbreviated 100r. They publish their sailing experiences and show a particularly minimalist aesthetic in their various artistic projects, and got quite popular. They have a monthly newsletter where they report updates on their various projects and on the boat, and this newsletter has an RSS feed.</p>
        <p>I have known about 100r for a while, but only follow them by reading this feed because their creations and ideas are often incompatible with my life; I do not live on a boat and do not really enjoy the kind of very minimalist, colorless aesthetic that they follow. Getting those quick monthly reminders of the existence of the concept of permacomputing, and taking a few minutes to watch those people living in what looks like an alternate universe completely separate from mine, can still be interesting in small doses.</p>
      ]]></description>
    </item>

    <item>
      <title>dozens css art</title>
      <pubDate>Sun, 04 Jun 2023 14:52:23 +0200</pubDate>
      <guid isPermaLink="false">dozens-css-art</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://tilde.town/~dozens/cssart/feed.xml</link>
      <description><![CDATA[
        Here is another random project that ~dozens made. As always with every single thing he makes, there's an RSS feed for it! This one has a few webpages showing some art made with CSS properties, with said properties changing every few seconds so you can stare at them for a little while.
      ]]></description>
    </item>

    <item>
      <title>forum.status.cafe</title>
      <pubDate>Sun, 11 Jun 2023 09:02:36 +0200</pubDate>
      <guid isPermaLink="false">forum.status.cafe</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://forum.status.cafe/feed.atom</link>
      <description><![CDATA[
        <p>I mentioned status.cafe before on this feed, but not its forum. It runs a homemade message board system called <a href="https://git.sr.ht/~m15o/vpub" target="_blank">vpub</a> which is quite simple and provides Atom feeds:</p>

        <ul>
          <li><a href="https://forum.status.cafe/feed.atom" target="_blank">Every single post</a></li>
          <li><a href="https://forum.status.cafe/topics/3/feed.atom" target="_blank">All posts in one topic</a></li>
          <li><a href="https://forum.status.cafe/boards/2/feed.atom" target="_blank">All posts in one board</a></li>
        </ul>

        <p>It could also have feeds for all posts by a user or all posts within a forum (a group of boards), but having the option of following this messageboard using a feedreader is still quite neat.</p>

        <p>There also used to be a vpub instance dedicated to vpub itself at <a href="https://vpub.miso.town" target="_blank">vpub.miso.town</a>, but it appears to be offline now. m15o, vpub's creator, said <a href="https://forum.status.cafe/topics/45#212" target="_blank">they are not working on it</a> as well.</p>
      ]]></description>
    </item>

    <item>
      <title>Foxes in Love</title>
      <pubDate>Sun, 18 Jun 2023 18:46:40 +0200</pubDate>
      <guid isPermaLink="false">foxes-in-love</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://foxes-in-love.tumblr.com/rss</link>
      <description><![CDATA[
        Since I recently joined Tumblr again, I do not really need those feeds much, but I still do follow some Tumblr blogs in my feedreader. Among them is this pretty well-known comic involving two foxes being adorable or funny. Just like the other comics, it makes for a nice break after reading longer articles in Liferea.
      ]]></description>
    </item>

    <item>
      <title>From the Pen Cup</title>
      <pubDate>Tue, 27 Jun 2023 00:09:23 +0200</pubDate>
      <guid isPermaLink="false">fromthepencup</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://fromthepencup.wordpress.com/feed/</link>
      <description><![CDATA[
        Here's one of the few blogs I started following when I was looking for more blogs on handwriting. This blog focuses mostly on fountain pens, which I do not use, but also includes posts about writing in general, about notebooks, etc. I also like that this blog is managed by someone older than most of the bloggers in my feedreader, as this brings some more interesting thoughts.
      ]]></description>
    </item>

    <item>
      <title>Lin.ear th.inking</title>
      <pubDate>Sun, 02 Jul 2023 11:40:11 +0200</pubDate>
      <guid isPermaLink="false">linear-thinking</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://lin-ear-th-inking.blogspot.com/feeds/posts/default?alt=rss</link>
      <description><![CDATA[
        <p>Dealing with polygons on images at work has made me discover the world of GIS, and that's how I ended up discovering this blog. This is the blog of Martin Davis, the creator of the Java Topology Suite (JTS).</p>
        <p>The JTS and its C++ port called GEOS power pretty much every geographical information system under the sun. I don't understand much about the math behind GIS stuff, but this blog showcases some of the new features in the JTS with some simple examples. It can help me suggest improvements at work, or get new ideas for weird projects since I like playing with maps now.</p>
        <p>This feed is also available as an <a href="https://lin-ear-th-inking.blogspot.com/feeds/posts/default?alt=atom" target="_blank">Atom feed</a>.
      ]]></description>
    </item>

    <item>
      <title>You wouldn't download a planet</title>
      <pubDate>Sun, 16 Jul 2023 12:06:35 +0200</pubDate>
      <guid isPermaLink="false">planet-osm</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://planet.openstreetmap.org/pbf/planet-pbf-rss.xml</link>
      <description><![CDATA[
        <p>There are a whole lot of feeds for OpenStreetMap, and since I like both OpenStreetMap and, of course, feeds, I will be talking about a bunch of them over multiple posts. To start with, here's a feed of torrents that you can put into any BitTorrent client that supports feeds, like <a href="https://deluge-torrent.org/" target="_blank">Deluge</a>, to automatically download a weekly export of the entire map. That would be over 1.7 terabyte of <a href="https://wiki.openstreetmap.org/wiki/OSM_XML" target="_blank">OpenStreetMap XML</a> data, but they provide a better format called <a href="https://wiki.openstreetmap.org/wiki/PBF_Format" target="_blank">PBF</a> based on <a href="https://protobuf.dev/" target="_blank">protobuf</a>, that reduces this down to about 70 gigabytes.</p>
        <p>Multiple RSS feeds are available, to get the PBF version, the BZ2-compressed XML version, or the entire history of the map and not just its current state. Those are documented <a href="https://wiki.openstreetmap.org/wiki/Planet.osm#BitTorrent_RSS.2FAtom_feed" target="_blank">on the OSM wiki</a>.</p>
        <p>I really like the name of this thing. <em>Planet</em>. You can just… download the whole planet. This is how far we've come as a society. Why stop at <a href="https://www.youtube.com/watch?v=NKJDk2w11H4" target="_blank">downloading a car</a> when you can download a planet?</p>
      ]]></description>
    </item>

    <item>
      <title>The RSS Advisory Board is still alive, and is 20 years old</title>
      <pubDate>Sun, 23 Jul 2023 06:05:46 +0200</pubDate>
      <guid isPermaLink="false">rss-board-mastodon</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">News</category>
      <link>https://mastodon.social/@rssboard.rss</link>
      <description><![CDATA[
        <p>The RSS Advisory Board, the entity that has been publishing and updating the <a href="https://www.rssboard.org/rss-specification" target="_blank">RSS 2.0 specification</a>, has been mostly inactive for many years. Fairly recently, Rogers Cadenhead started posting again on <a href="https://www.rssboard.org/" target="_blank">their blog</a>, and even more recently, they opened <a href="https://mastodon.social/@rssboard" target="_blank">a Mastodon account</a>. You can follow <a href="http://feeds.rssboard.org/rssboard" target="_blank">the board's blog</a> or <a href="https://mastodon.social/@rssboard.rss" target="_blank">its fediverse account</a> using your feedreader of course.</p>
        <p>Just as I noticed this, it turns out that <a href="https://www.rssboard.org/news/220/rss-advisory-board-just-turned-20" target="_blank">the board has turned 20</a> just a few days ago. Happy birthday!</p>
        <p>Discovering this also made me find out that Dave Winer is also on the Fediverse, and is <a href="https://w3c.social/@davew@mastodon.social/110559652591295897" target="_blank">just as bitter as he is rumored to be</a>. I guess the old days of the wars between <abbr title="RDF Site Summary">RSS</abbr> 1, <abbr title="Really Simple Syndication">RSS</abbr> 2 and Atom are still not over.</p>
      ]]></description>
    </item>

    <item>
      <title>piclog</title>
      <pubDate>Sun, 30 Jul 2023 12:04:46 +0200</pubDate>
      <guid isPermaLink="false">piclog</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://piclog.blue/feed.php</link>
      <description><![CDATA[
        <p>From the author of <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#status.cafe" target="_blank">status.cafe</a> and <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#forum.status.cafe" target="_blank">vpub</a>, <a href="https://piclog.blue" target="_blank">piclog.blue</a> is a new service to share pics, embed them into a website, and get RSS feeds from them. Interestingly, unlike all of m15o's other projects up until now, this project provides RSS and not Atom feeds.</p>
        <p>Probably the most exotic part of this image sharing service is that every image is highly compressed: no more than 400×400 pixels in size, and saved as JPEG with a quality of 5%. This probably makes hosting this service a lot easier in terms of bandwidth and storage space, and makes the images look blurry or less detailed. Most piclog users are status.cafe users, so it's interesting to see the photographic equivalent of the things I see fellow status.cafe users post regularly.</p>
        <p>While you can get a feed of <a href="https://piclog.blue/feed.php" target="_blank">every photo from everyone</a>, you can also get feeds for each user, with <code>https://piclog.blue/user-feed.php?id=</code> followed by the integer ID of the relevant user. You can get this ID by opening their profile, since the same ID will be in the profile URL. Here's <a href="https://piclog.blue/user-feed.php?id=2" target="_blank">m15o's feed</a> for example.</p>
        <p>As of posting this, the feeds unfortunately do not use <a href="https://www.rssboard.org/media-rss" target="_blank">Media RSS</a> or embed the image into the description as an <code>&lt;img&gt;</code> tag, so you will have to open each item in your browser to view the image with most feedreaders.</p>
      ]]></description>
    </item>

    <item>
      <title>NTSB</title>
      <pubDate>Thu, 10 Aug 2023 09:15:18 +0200</pubDate>
      <guid isPermaLink="false">ntsb</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tilde.town/~lucidiot/itsb/feeds/ntsb.xml</link>
      <description><![CDATA[
        <p>I already mentioned <a href="https://tilde.town/~lucidiot/itsb/" target="_blank">ITSB</a> multiple times in this feed, my project that generates hundreds of feeds for transport accident investigation reports. But this particular feed is worth a post in itself.</p>
        <p>The NTSB is the one investigation agency I really must have in ITSB. It might just be the largest agency for transportation safety investigations worldwide, and anyone who ever watched a <em>Mayday</em> documentary or looked into plane crashes has heard of it. They produce the largest amount of reports out of all the agencies I found through ITSB.</p>
        <p>Fortunately, they provided an official RSS feed for their released investigation reports. I'm using the past tense though, because they unfortunately decided to shut it down. The feeds were still available for a little while, but they would be completely empty. I have yet to see anyone ever sunsetting a feed properly, by adding a post to warn everyone for a few days before just killing the feed completely, so this issue went unnoticed for a while.</p>
        <p>To generate a feed when there is no official one available, I usually just run <code>curl</code> on a webpage that lists investigation reports, then use <a href="https://github.com/ericchiang/pup" target="_blank">pup</a> to select some HTML elements and convert them to a JSON structure, then mess around with said JSON with <a href="https://stedolan.github.io/jq/" target="_blank">jq</a>, and finally convert that back into XML using <a href="https://pypi.org/project/xmltodict/" target="_blank">xmltodict</a>. But after looking around on the NTSB's website, I went for a much weirder method.</p>
        <p>The NTSB provides a service called <a href="https://data.ntsb.gov/carol-main-public" target="_blank">CAROL</a>, a tool to search through all the investigation reports and safety recommendations the NTSB ever published. Getting a lot of structured data sounds a lot more interesting than having to parse the scant details I can get from unnecessarily complex HTML pages, so I wanted to use that as my source for my custom feed.</p>
        <p>After a lot of experimenting, I ended up writing <a href="https://tildegit.org/lucidiot/itsb/src/branch/main/bin/ntsb-carol" target="_blank">a separate script</a> that exports 1 year of completed investigation reports as a large JSON file. I could have exported 10 or more years of reports, but that resulted in an extremely large RSS feed that would make most feedreaders blow up, so I only got one year.</p>
        <p>I then use <a href="https://tildegit.org/lucidiot/itsb/src/branch/main/jq/ntsb.jq" target="_blank">a 671 lines long jq script</a> to process this JSON file into an RSS feed, including as much information as I can within the <code>&lt;description&gt;</code> so that you sometimes do not need to read the PDF report at all.</p>
        <p>This mess results in a feed that is far, far better than any other feed I have in ITSB, especially any official feed. If every webmaster wants to remove RSS and replace it with newsletters, since that's what I gathered from my few attempts at reaching out to those agencies, maybe the real solution is to push for more open data instead. Let the people who know and use RSS make proper RSS feeds without scraping your website…</p>
      ]]></description>
    </item>

    <item>
      <title>The Cramped</title>
      <pubDate>Sun, 13 Aug 2023 15:39:13 +0200</pubDate>
      <guid isPermaLink="false">thecramped</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.thecramped.com/feed/</link>
      <description><![CDATA[
        <p>As I had mentioned before in this feed, when I look over my over two hundred feeds in my reader, I regularly get the feeling I should have less technology-related blogs in there, and more feeds related to my other interests such as writing. I will probably have some cleaning to do soon to reduce the share of tech blogs that no longer spark joy.</p>
        <p>A while ago, I tried to look for more blogs related to stationery, handwriting, etc., and I found <em>The Cramped</em>. This blog evolved a bit over time, and nowadays the author occasionally shares other people's posts related to writing, notebooks, writing in notebooks, personal knowledge management, etc. This kind of feed is nice to have if I want to discover more blogs! I subscribed to maybe two or three already thanks to it.</p>
      ]]></description>
    </item>

    <item>
      <title>International Institute of Food-Related Protocols</title>
      <pubDate>Sun, 20 Aug 2023 13:54:07 +0200</pubDate>
      <guid isPermaLink="false">iifrp</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://iifrp.org/feed/all-rfcs.xml</link>
      <description><![CDATA[
        <p>Possibly inspired by <a href="https://tools.ietf.org/html/draft-lohsen-ip-burrito-00" target="_blank">IP over Burrito Carriers</a>, the <abbr title="International Institute of Food-Related Protocols">IIFRP</abbr> is a project with little activity where RFCs get published to standardize food in a manner similar to Internet standards. They provide a few feeds to feed standard food to your feedreader, all listed on their <a href="https://iifrp.org/feed" target="_blank">feeds page</a>:</p>
        <ul>
          <li>Their <a href="https://iifrp.org/feed.xml" target="_blank">blog posts</a>, of which there currently are none;</li>
          <li><a href="https://iifrp.org/feed/all-rfcs.xml" target="_blank">All RFCs in any state</a>;</li>
          <li>Only the <a href="https://iifrp.org/feed/adopted-rfcs.xml" target="_blank">adopted RFCs</a>;</li>
          <li>Only the <a href="https://iifrp.org/feed/proposed-rfcs.xml" target="_blank">drafts and proposed RFCs</a>.</li>
        </ul>
        <p>A coworker suggested that maybe we should have a standard for french tacos, since many places selling french tacos commit blasphemy by adding veggies in them, sometimes even adding them <em>by default</em> without warning you. I have some experience <a href="https://tildegit.org/casa/bikeshed/src/branch/main/rfb" target="_blank">writing joke RFCs</a>, so that's something to consider.</p>
      ]]></description>
    </item>

    <item>
      <title>The Olognion</title>
      <pubDate>Thu, 31 Aug 2023 19:17:10 +0200</pubDate>
      <guid isPermaLink="false">olognion</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.theolognion.com/feed/</link>
      <description><![CDATA[
        <p>A mix between <em>The Onion</em> and <em>O(log n)</em>, this website is pretty much The Onion for developers. The satirical news reports are published much less often than before but do make me smile a little each time, before the usual existential dread sets back in.</p>
      ]]></description>
    </item>

    <item>
      <title>Let your haters nuke you over RSS</title>
      <pubDate>Sun, 03 Sep 2023 18:05:52 +0200</pubDate>
      <guid isPermaLink="false">icbm</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Geospatial</category>
      <link>https://web.archive.org/web/20130307033513/http://postneo.com/icbm/</link>
      <description><![CDATA[
        <p>One of the most primitive ways you can specify geospatial information within an RSS feed is also one of the oldest, and it is supported by the W3C validator among others. The <code>icbm</code> XML namespace allows you to specify an <a href="https://en.wikipedia.org/wiki/ICBM_address" target="_blank">ICBM address</a> in either the <code>&lt;channel&gt;</code> or the <code>&lt;item&gt;</code> elements, allowing you to relate a location to either the entire RSS feed or a single specific item on that feed.</p>
        <figure>
          <pre>
&lt;rss version="2.0" xmlns:icbm="http://postneo.com/icbm"&gt;
  &lt;channel&gt;
    &lt;!-- ... --&gt;
    &lt;icbm:latitude&gt;30.0301&lt;/icbm:latitude&gt;
    &lt;icbm:longitude&gt;32.5776&lt;/icbm:longitude&gt;

    &lt;item&gt;
      &lt;!-- ... --&gt;
      &lt;icbm:latitude&gt;31.5077090&lt;/icbm:latitude&gt;
      &lt;icbm:longitude&gt;-82.3115156&lt;/icbm:longitude&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;
</pre>
          <figcaption>Example of a point added to an RSS channel and item using the ICBM namespace</figcaption>
        </figure>
        <p>With this method, you can therefore specify a location where someone may send a nuke if they have been particularly angered by something you published on that feed. Or more commonly, you might want to set a location relevant to the feed, like the location of the <a href="https://xkcd.com/703/" target="_blank">tautology club</a> whose blog has a feed for, or the location of something mentioned within the feed.</p>
        <p>There are other, more recent and more standard methods to refer to geographic coordinates in an RSS feed, and not just specific points. We will go over those some other time.</p>
      ]]></description>
      <icbm:latitude>33.6772827</icbm:latitude>
      <icbm:longitude>-106.4753787</icbm:longitude>
    </item>

    <item>
      <title>Adding geographical coordinates peacefully</title>
      <pubDate>Sun, 10 Sep 2023 17:44:24 +0200</pubDate>
      <guid isPermaLink="false">geo</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Geospatial</category>
      <link>https://www.w3.org/2003/01/geo/</link>
      <description><![CDATA[
        <p>In <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#icbm">the previous post on geospatial stuff in RSS</a>, I showed how to define an <a href="https://en.wikipedia.org/wiki/ICBM_address" target="_blank">ICBM address</a>, to which heads of states may send a nuke if they did not appreciate your post. At around the same time as the <code>icbm</code> namespace got created in a blog post for RSS 2.0, the Semantic Web Interest Group of the W3C devised a <a href="https://www.w3.org/2003/01/geo/" target="_blank">Basic Geo Vocabulary</a> that allows for something very similar to ICBM addresses, but that does not require missiles and is integrated into RDF. It also adds the ability to specify an optional altitude, in meters.</p>
        <p>This is meant to be used in RDF, so you would probably normally use this in a <abbr title="RDF Site Summary">RSS</abbr> 1.0 feed, but as with many other RDF namespaces, nothing really stops you from integrating that into RSS 2.0 or Atom, and many people have done so already.</p>
        <figure>
          <pre>
&lt;rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"&gt;
  &lt;channel&gt;
    &lt;!-- ... --&gt;
    &lt;geo:lat&gt;30.0301&lt;/geo:lat&gt;
    &lt;geo:long&gt;32.5776&lt;/geo:long&gt;

    &lt;item&gt;
      &lt;!-- ... --&gt;
      &lt;geo:lat&gt;31.5077090&lt;/geo:lat&gt;
      &lt;geo:long&gt;-82.3115156&lt;/geo:long&gt;
      &lt;!-- It's Moon time. --&gt;
      &lt;geo:alt&gt;384400000&lt;/geo:alt&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;
</pre>
          <figcaption>Example of a point added to an RSS channel and item using the W3C Geo namespace</figcaption>
        </figure>
        <hr />
        <p>Two years later, in April 2005, GeoURL.org, a service that used to allow finding websites by their associated geographical location, <a href="https://web.archive.org/web/20070323023116/http://geourl.org:80/news/2005/04/26/rssplus.html" target="_blank">introduced the <code>geourl</code> namespace</a>, adding another duplicate namespace on top of <code>icbm</code> and <code>geo</code>. I mention it here too because the W3C validator supports all three namespaces!</p>
        <p>You can use it with <code>xmlns:geourl="http://geourl.org/rss/module/"</code> and the <code>&lt;geourl:latitude&gt;</code> and <code>&lt;geourl:longitude&gt;</code> elements. I would however advise against using it as it increases the complexity for feed parser and feed reader developers; prefer the RDF <code>geo</code> namespace instead, which is more widely known.</p>
        <p>And as a last piece of advice, do not mix the <code>icbm</code>, <code>geo</code> and <code>geourl</code> namespaces within the same channel or item, even if you intend to represent multiple coordinates at the same time! There are more complex but more flexible alternatives, which we will see in later posts, that allow to go beyond a single point.</p>
      ]]></description>
      <geo:lat>40.8953768</geo:lat>
      <geo:long>-73.1427788</geo:long>
      <geo:alt>49</geo:alt>
    </item>

    <item>
      <title>Please the geospatial nerds with GeoRSS Simple</title>
      <pubDate>Mon, 18 Sep 2023 16:01:43 +0200</pubDate>
      <guid isPermaLink="false">georss-simple-1</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Geospatial/GeoRSS</category>
      <link>https://docs.ogc.org/cs/17-002r1/17-002r1.html</link>
      <description><![CDATA[
        <p><a href="https://envs.net/~lucidiot/rsrsss/feed.xml#geo" target="_blank">Previously on this feed</a>, we saw how to refer to geospatial locations using the ICBM, W3C Geo and GeoURL namespaces. Today, we will be looking at how to refer to points again, but soon more than just points, thanks to <a href="https://docs.ogc.org/cs/17-002r1/17-002r1.html">GeoRSS</a>. There's a lot to cover with that standard, so expect a whole lot of geography in the coming weeks.</p>
        <p>GeoRSS is a standard that was developed by a mix of geospatial and syndication people and released in 2006 on georss.org. That website is now gone, but of course, <a href="https://web.archive.org/web/20200909171629/http://georss.org/" target="_blank">the Internet Archive's got our backs.</a> In 2017, that standard got republished by the Open Geospatial Consortium, the gods of geospatial standards, as OGC 17-002r1. I really like that quote from that version of the standard:</p>
        <blockquote cite="https://docs.ogc.org/cs/17-002r1/17-002r1.html">
          <p>The initial goal for designing and documenting GeoRSS was to keep the encoding of geography on the Web from fracturing into various encodings the way RSS ended up, with multiple similar implementations.</p>
          <footer>—<a href="https://docs.ogc.org/cs/17-002r1/17-002r1.html" target="_blank"><cite>OGC GeoRSS Encoding Standard</cite></a>, 2017-08-18</footer>
        </blockquote>
        <p>Considering that the three namespaces we saw in the previous posts appeared before GeoRSS, and that georss.org <a href="http://web.archive.org/web/20190602115923/http://www.georss.org/w3c.html" target="_blank">mentions the W3C Geo namespace</a>, it doesn't seem like they were starting well. However, the few remaining feeds that I know of that include geospatial information do use GeoRSS only, so I guess they won in the end. The fact that only geospatial experts would be using geospatial coordinates within RSS feeds, and that most GIS software only supports GeoRSS or name all of their RSS support GeoRSS, must have helped.</p>
        <p>GeoRSS defines two so-called "serializations", called <em>Simple</em> and <em>GML</em>. In this post, we will only consider GeoRSS Simple; GML requires us to delve deeper into the mess that is geospatial information, so we'll see that at some other point in time. The goal is to have most feed producers, those that are not geospatial experts, use GeoRSS Simple, which is simple enough to be understandable by them, and have geospatial experts use GML, which they probably prefer. You can convert from GeoRSS Simple to GeoRSS GML, but not necessarily the other way around.</p>
        <p>Here's an example of yet another way to represent a point in an RSS feed, but using GeoRSS Simple this time:</p>
        <figure>
          <pre>
&lt;rss version="2.0" xmlns:georss="http://www.georss.org/georss"&gt;
  &lt;channel&gt;
    &lt;!-- ... --&gt;
    &lt;georss:point&gt;18.5166670 33.6666670&lt;/georss:point&gt;

    &lt;item&gt;
      &lt;georss:point&gt;18.5166670,33.6666670&lt;/georss:point&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;
</pre>
          <figcaption>Example of a point added to an RSS channel and item using GeoRSS Simple</figcaption>
        </figure>
        <p>Where the other namespaces use two distinct tags to represent both coordinates of a point, GeoRSS uses only one tag, which is defined as a list of real numbers. While using one or two tags does not matter much when using GPS coordinates, it does start to matter when you care a lot about altitude or work with other coordinate systems. GeoRSS Simple requires WGS84 (GPS) coordinates and represents elevation separately, so it won't ever matter in this serialization, but with GML, it will!</p>
        <p>You may also note that in the first <code>point</code>, I used a space to separate both coordinates, whereas in the second one I used a comma. <a href="https://schemas.opengis.net/georss/1.0/schema-1.1/georss.xsd" target="_blank">The official <abbr title="XML Schema Definition">XSD</abbr></a> for GeoRSS Simple defines the point as holding a list of doubles (decimal numbers stored in 8 bytes) using the XSD <code>&lt;xs:list&gt;</code> element, which defines a list of items as being space-separated only. But <a href="https://docs.ogc.org/cs/17-002r1/17-002r1.html#20" target="_blank">section 7.3</a> of the OGC standard states that a comma is also acceptable, so anyone wishing to parse GeoRSS will have to take that into account.</p>
      ]]></description>
      <georss:point>18.5166670 33.6666670</georss:point>
    </item>

    <item>
      <title>Make pointier points with GeoRSS Simple</title>
      <pubDate>Sun, 24 Sep 2023 21:02:51 +0200</pubDate>
      <guid isPermaLink="false">georss-simple-2</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Geospatial/GeoRSS</category>
      <link>https://docs.ogc.org/cs/17-002r1/17-002r1.html#26</link>
      <description><![CDATA[
        <p><a href="https://envs.net/~lucidiot/rsrsss/feed.xml#georss-simple-1" target="_blank">In a previous post</a>, I introduced GeoRSS Simple, a subset of GeoRSS, and described a fourth way to point to a location in your RSS feeds. With the W3C Geo namespace, we could add altitude information as well, but with GeoRSS, we can go even further beyond that:</p>
        <figure>
          <pre>
&lt;rss version="2.0" xmlns:georss="http://www.georss.org/georss"&gt;
  &lt;channel&gt;
    &lt;item&gt;
      &lt;!-- ... --&gt;
      &lt;georss:point&gt;-33.8735580,151.2344385&lt;/georss:point&gt;
      &lt;georss:featureName&gt;Boat Syndication Australia&lt;/georss:featureName&gt;
      &lt;georss:featureTypeTag&gt;shop&lt;/georss:featureTypeTag&gt;
      &lt;georss:relationshipTag&gt;has-nothing-to-do-with&lt;/georss:relationshipTag&gt;
      &lt;georss:elev&gt;5.25&lt;/georss:elev&gt;
      &lt;georss:floor&gt;0&lt;/georss:floor&gt;
      &lt;georss:radius&gt;4.5&lt;/georss:radius&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;
</pre>
          <figcaption>A point added to an RSS item using GeoRSS Simple, with optional elements</figcaption>
        </figure>
        <p>Here's a description of all of those intriguing optional elements:</p>
        <dl>
          <dt><code>&lt;<dfn>georss:featureName</dfn>&gt;</code></dt>
          <dd>The name of the thing you are referencing with that point. A feature is anything that has a geospatial location; a mountain, a country, a single atom, it doesn't matter.</dd>
          <dt><code>&lt;<dfn>georss:featureTypeTag</dfn>&gt;</code></dt>
          <dd>
            <p>The type of that feature: whether it is a mountain, a country, etc. When unset, it defaults to <code>location</code>. There are no other defined values, as the intent was to let the community form its own taxonomy.</p>
            <p>While neither the original website nor the OGC standard specify any restriction, the official XSD typed it as a <code>QName</code>, meaning an <a href="https://www.w3.org/TR/1999/REC-xml-names-19990114/#ns-qualnames" target="_blank">XML qualified name</a>, or anything you can use as the name of an XML element, with or without a namespace prefix. This means you can use something like <code>sandwich:blt</code>, but not <code>food:sandwich:blt</code> because only one colon is allowed, and you cannot use spaces. All examples in both the original website and the OGC standard never use spaces, instead preferring <a href="https://en.wikipedia.org/wiki/Kebab_case" target="_blank">kebab-case</a>. So you should probably limit yourself to a QName, or maybe just to kebab-case.</p></dd>
          <dt><code>&lt;<dfn>georss:relationshipTag</dfn>&gt;</code></dt>
          <dd>The relationship between the channel or item and the feature. For example, you could have a feed of sightings of toads and owls where the relationship is <code>seen-at</code>, or a feed of drawings where each drawing was <code>inspired-by</code>. The default is <code>is-located-at</code>. The relationship is always from the channel or item to the feature, not the other way around. It has the same confusing definition as a QName as <code>featureTypeTag</code>.</dd>
          <dt><code>&lt;<dfn>georss:elev</dfn>&gt;</code></dt>
          <dd>The elevation, in meters, with decimal and negative values allowed. The OGC standard says nothing about this, but this tag does not make any sense with GeoRSS GML since it supports three-dimensional coordinates.</dd>
          <dt><code>&lt;<dfn>georss:floor</dfn>&gt;</code></dt>
          <dd>The floor of a building, as any integer, including negative values. Since there are <a href="https://en.wikipedia.org/wiki/Storey#Numbering" target="_blank">two different ways to number floors</a> depending on which part of the world you are in, you'll have to guess which is the correct one!</dd>
          <dt><code>&lt;<dfn>georss:radius</dfn>&gt;</code></dt>
          <dd>Geospatial people probably know this better as a <em>buffer</em>. This means the location you are actually referencing is anything that is some amount of meters around the coordinates. For a point, this will create a circle, but since we can go beyond points with GeoRSS, this can add more complicated borders. <a href="https://wiki.gis.com/wiki/index.php/Buffer_(GIS)" target="_blank">This page has some examples</a>.</dd>
        </dl>
        <p>Next time, we will finally do more than just point at things, and use the other geometry types that GeoRSS offers.</p>
      ]]></description>
      <georss:point>-33.8735580 151.2344385</georss:point>
      <georss:featureName>Boat_Syndication_Australia</georss:featureName>
      <georss:featureTypeTag>shop</georss:featureTypeTag>
      <georss:relationshipTag>has-nothing-to-do-with</georss:relationshipTag>
      <georss:elev>5.25</georss:elev>
      <georss:floor>0</georss:floor>
      <georss:radius>4.5</georss:radius>
    </item>

    <item>
      <title>Completely miss the point with GeoRSS Simple</title>
      <pubDate>Sun, 08 Oct 2023 19:45:50 +0200</pubDate>
      <guid isPermaLink="false">georss-simple-3</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Geospatial/GeoRSS</category>
      <link>https://docs.ogc.org/cs/17-002r1/17-002r1.html#23</link>
      <description><![CDATA[
      <p>In <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#georss-simple-2" target="_blank">yet another post</a> of my series on geographical information in RSS, I introduced GeoRSS, and in particular GeoRSS Simple, its simpler version. I only showed a fourth way to add a point to your feeds, but some feeds might need to reference more than just a single point. GeoRSS Simple lets you go further with a few extra types of geometry:</p>
        <dl>
          <dt><code>&lt;<dfn>georss:line</dfn>&gt;</code></dt>
          <dd>In the geospatial world, a line is not just between two points, it's a series of two or more points. In GeoRSS, it is represented by a long list of numbers, always in pairs.</dd>
          <dt><code>&lt;<dfn>georss:box</dfn>&gt;</code></dt>
          <dd>Two pairs of coordinates, representing the lower-left and upper-right corners of a rectangle.</dd>
          <dt><code>&lt;<dfn>georss:polygon</dfn>&gt;</code></dt>
          <dd>This is the geometric, and not the geospatial definition of a polygon. In <abbr title="Geographical Information Systems">GIS</abbr>, a polygon has multiple linear rings: one exterior ring, and zero or more interior rings that draw holes inside of the polygon. A linear ring is the more common definition of a polygon: a line that starts and ends at the same point. Here, we can only have the exterior ring of a polygon, so this is actually a linear ring. It is represented just like a line, as pairs of coordinates. There are at least three points per polygon, and the first and last must be equal.</dd>
        </dl>
        <p>Here are some examples of each of those tags:</p>
        <figure>
          <pre>
&lt;!-- Part of Haaldersbroekerdwarsstraat, a long street name in the Netherlands --&gt;
&lt;georss:line&gt;52.4718867,4.8277792 52.4721926,4.8275892 52.4729501,4.8270419&lt;/georss:line&gt;

&lt;!-- Some random grass not so far away from there --&gt;
&lt;georss:box&gt;52.5662344 4.7976189 52.5676983 4.8013674&lt;/georss:box&gt;

&lt;!-- A building called ESPRESSO at the Very Large Telescope,
because astronomers need coffee to go through the night --&gt;
&lt;georss:polygon&gt;
  -24.6273416,-70.4045081
  -24.6273922,-70.4044894
  -24.6274264,-70.4046014
  -24.6274789,-70.4045820
  -24.6276119,-70.4045330
  -24.6275341,-70.4042780
  -24.6274634,-70.4043041
  -24.6274763,-70.4043463
  -24.6273109,-70.4044074
  -24.6273416,-70.4045081
&lt;/georss:polygon&gt;
</pre>
          <figcaption>A line, a rectangle and a polygon represented with GeoRSS Simple</figcaption>
        </figure>
        <p>You can only specify one of these geometries at once, along with all the optional elements that I described in the previous post. Those new shapes enable some new interesting use cases for feeds:</p>
        <ul>
          <li>Blogging about a cross-country hike, with the GPS track of each day as a <code>&lt;georss:line&gt;</code>.</li>
          <li>A feed warning about upcoming solar eclipses, with a <code>&lt;georss:line&gt;</code> to show where the shadow of the eclipse will be moving on the Earth's surface. Maybe with a <code>&lt;georss:radius&gt;</code> as the radius of the shadow to do some buffering and not only show the center of that shadow.</li>
          <li>A feed of weather reports, with the <code>&lt;channel&gt;</code> including the location of the weather station, or the area where the reports apply.</li>
          <li>A feed of interesting architecture, with a <code>&lt;georss:polygon&gt;</code> around the circumference of each featured building.</li>
          <li>A feed of triangulated radio signals heard by a whole bunch of radio equipment scattered around an area, either as a <code>&lt;georss:point&gt;</code> with a <code>&lt;georss:radius&gt;</code> to show the precision, or as a <code>&lt;georss:polygon&gt;</code> showing a triangle of the receivers that detected the signal.</li>
          <li>A feed for any temporary changes to bus routes and timetables, with a <code>&lt;georss:point&gt;</code> when a stop is skipped or moved, a <code>&lt;georss:line&gt;</code> when a line gets rerouted, etc.</li>
        </ul>
        <p>You can probably use any of the geoportals out there, the websites that list open geographical data mostly from governments, and get plenty more ideas for GeoRSS feeds.</p>
        <p>And since we are now done with GeoRSS Simple, we'll look at GeoRSS GML next time.</p>
      ]]></description>
      <georss:line>52.4718867 4.8277792 52.4721926 4.8275892 52.4729501 4.8270419</georss:line>
      <georss:featureName>Haaldersbroekerdwarsstraat</georss:featureName>
      <georss:featureTypeTag>street</georss:featureTypeTag>
      <georss:relationshipTag>has-nothing-to-do-with</georss:relationshipTag>
    </item>

    <item>
      <title>Become a geospatial nerd with GeoRSS GML</title>
      <pubDate>Sun, 15 Oct 2023 17:40:14 +0200</pubDate>
      <guid isPermaLink="false">georss-gml</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Geospatial/GeoRSS</category>
      <link>https://docs.ogc.org/cs/17-002r1/17-002r1.html#31</link>
      <description><![CDATA[
        <p>In this fourth post explaining GeoRSS, I'll be talking about GeoRSS GML, the second "serialization" of the format. GeoRSS Simple is meant to be easily translated into GeoRSS GML so that your typical RSS feed developer can more easily understand GeoRSS, and geospatial experts can use a format they are more acquainted with: GML.</p>
        <p><dfn><abbr title="Geography Markup Language">GML</abbr></dfn> is an enormous XML schema designed to express any geospatial data under the sun. Geometries, features, coordinate reference systems, units of measurement, time, sensor measurements, data re-fetched automatically over the network, assigning coordinates to images, etc.</p>
        <p>The language is not meant to be used alone, as supporting all of it is equivalent to implementing nearly every bit of geospatial software out there. Instead, GML <em>profiles</em> are defined, which are subsets of GML that are relevant to your needs, and are then used in <em>application schemas</em>, which define the specific XML format you are using that will contain some of that GML profile in it.</p>
        <p>GeoRSS is an application schema using <a href="https://schemas.opengis.net/georss/1.0/schema-1.1/gmlgeorss.xsd" target="_blank">a dedicated GML profile</a> that severely restricts GML so that we don't become too insane. You are limited to four geometries, one less that the five we saw in GeoRSS Simple: points, lines, boxes, and polygons. You do have access to some extra options though, and we'll look into that soon enough.</p>

        <h3>Examples</h3>
        <p>Here is an example I wrote previously for a single point in GeoRSS Simple, but rewritten for GeoRSS GML:</p>
        <figure>
          <pre>
&lt;rss
  version="2.0"
  xmlns:georss="http://www.georss.org/georss"
  xmlns:gml="http://www.opengis.net/gml"
&gt;
  &lt;channel&gt;
    &lt;item&gt;
      &lt;!-- ... --&gt;
      &lt;georss:where&gt;
        &lt;gml:Point&gt;
          &lt;gml:pos&gt;-33.8735580 151.2344385&lt;/gml:pos&gt;
        &lt;/gml:Point&gt;
      &lt;/georss:where&gt;
      &lt;georss:featureName&gt;Boat Syndication Australia&lt;/georss:featureName&gt;
      &lt;georss:featureTypeTag&gt;shop&lt;/georss:featureTypeTag&gt;
      &lt;georss:relationshipTag&gt;has-nothing-to-do-with&lt;/georss:relationshipTag&gt;
      &lt;georss:elev&gt;5.25&lt;/georss:elev&gt;
      &lt;georss:floor&gt;0&lt;/georss:floor&gt;
      &lt;georss:radius&gt;4.5&lt;/georss:radius&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;
</pre>
          <figcaption>Example of a point added to an RSS channel using GeoRSS GML</figcaption>
        </figure>
        <p>The only two differences are that there is now a new <code>gml</code> namespace, and that the <code>georss:point</code> element has been replaced with a <code>georss:where</code> element to hold the point defined with GML. And now for the examples of other geometry types, which you would now place inside of the <code>georss:where</code>:</p>
        <figure>
          <pre>
&lt;!-- Part of Haaldersbroekerdwarsstraat, a long street name in the Netherlands --&gt;
&lt;gml:LineString&gt;
  &lt;gml:posList&gt;52.4718867,4.8277792 52.4721926,4.8275892 52.4729501,4.8270419&lt;/gml:posList&gt;
&lt;/gml:LineString&gt;

&lt;!-- Some random grass not so far away from there --&gt;
&lt;gml:Envelope&gt;
  &lt;gml:lowerCorner&gt;52.5662344 4.7976189&lt;/gml:lowerCorner&gt;
  &lt;gml:upperCorner&gt;52.5676983 4.8013674&lt;/gml:upperCorner&gt;
&lt;/gml:Envelope&gt;

&lt;!-- A building called ESPRESSO at the Very Large Telescope,
because astronomers need coffee to go through the night --&gt;
&lt;gml:Polygon&gt;
  &lt;gml:exterior&gt;
    &lt;gml:LinearRing&gt;
      &lt;gml:posList&gt;
        -24.6273416 -70.4045081
        -24.6273922 -70.4044894
        -24.6274264 -70.4046014
        -24.6274789 -70.4045820
        -24.6276119 -70.4045330
        -24.6275341 -70.4042780
        -24.6274634 -70.4043041
        -24.6274763 -70.4043463
        -24.6273109 -70.4044074
        -24.6273416 -70.4045081
      &lt;/gml:posList&gt;
    &lt;/gml:LinearRing&gt;
  &lt;/gml:exterior&gt;
&lt;/gml:Polygon&gt;
</pre>
          <figcaption>Examples of other geometry types with GeoRSS GML</figcaption>
        </figure>

        <h3>Reference</h3>
        <dl>
          <dt><code>&lt;<dfn>georss:where</dfn>&gt;</code></dt>
          <dd>The wrapper for GML within an RSS feed. While nothing really stops you from using GML directly without GeoRSS within an RSS item, most feedreaders and other parsers will only support GML wrapped into this element. This should not be used at the same time as the GeoRSS Simple geometry elements like <code>&lt;georss:point&gt;</code>.</dd>
          <dt><code>&lt;<dfn>gml:pos</dfn>&gt;</code></dt>
          <dd>A single coordinate pair, as two decimal numbers. The first is the latitude between &ndash;90 and 90°, and the second the longitude between &ndash;180 and 180°, as WGS84.</dd>
          <dt><code>&lt;<dfn>gml:posList</dfn>&gt;</code></dt>
          <dd>A list of 2 or more decimal numbers representing a series of coordinate pairs. There should always be an even number of coordinates.</dd>
          <dt><code>&lt;<dfn>gml:Point</dfn>&gt;</code></dt>
          <dd>A single point, containing a <code>&lt;gml:pos&gt;</code> element to indicate its coordinates.</dd>
          <dt><code>&lt;<dfn>gml:LineString</dfn>&gt;</code></dt>
          <dd>A series of points linked together by straight lines. This should contain a <code>&lt;gml:posList&gt;</code> to list the coordinates of each point.</dd>
          <dt><code>&lt;<dfn>gml:Envelope</dfn>&gt;</code></dt>
          <dd>A rectangle. This must contain a <code>&lt;gml:lowerCorner&gt;</code> and a <code>&lt;gml:upperCorner&gt;</code> to specify its two corners.</dd>
          <dt><code>&lt;<dfn>gml:lowerCorner</dfn>&gt;</code></dt>
          <dd>The lower-left, or southwest, corner of a <code>&lt;gml:Envelope&gt;</code>. Its value is the same as a <code>&lt;gml:pos&gt;</code>.</dd>
          <dt><code>&lt;<dfn>gml:upperCorner</dfn>&gt;</code></dt>
          <dd>The upper-right, or northeast, corner of a <code>&lt;gml:Envelope&gt;</code>. Its value is the same as a <code>&lt;gml:pos&gt;</code>.</dd>
          <dt><code>&lt;<dfn>gml:Polygon</dfn>&gt;</code></dt>
          <dd>In the <abbr title="Geographical Information Systems">GIS</abbr> world, a polygon is composed of multiple rings; at least one exterior ring, and zero or more interior rings that create holes within the exterior ring. This element therefore must have a <code>&lt;gml:exterior&gt;</code> ring. GeoRSS GML forbids any interior rings, since the GeoRSS Simple <code>&lt;georss:polygon&gt;</code> does not support interior rings, so the exterior ring is always alone.</dd>
          <dt><code>&lt;<dfn>gml:exterior</dfn>&gt;</code></dt>
          <dd>The exterior ring of a polygon. This should contain a <code>&lt;gml:LinearRing&gt;</code>.</dd>
          <dt><code>&lt;<dfn>gml:LinearRing</dfn>&gt;</code></dt>
          <dd>A <code>&lt;gml:LineString&gt;</code>, but there has to be at least four points, and the first and last coordinates must be equal, so that the line string forms a ring.</dd>
        </dl>
      ]]></description>
      <georss:where>
        <gml:Polygon>
          <gml:exterior>
            <gml:LinearRing>
              <gml:posList>
                -24.6273416 -70.4045081
                -24.6273922 -70.4044894
                -24.6274264 -70.4046014
                -24.6274789 -70.4045820
                -24.6276119 -70.4045330
                -24.6275341 -70.4042780
                -24.6274634 -70.4043041
                -24.6274763 -70.4043463
                -24.6273109 -70.4044074
                -24.6273416 -70.4045081
              </gml:posList>
            </gml:LinearRing>
          </gml:exterior>
        </gml:Polygon>
      </georss:where>
      <georss:featureName>ESPRESSO</georss:featureName>
      <georss:featureTypeTag>building</georss:featureTypeTag>
      <georss:relationshipTag>author-likes-the-name</georss:relationshipTag>
      <georss:elev>2635</georss:elev>
    </item>

    <item>
      <title>Going around in circles in GeoRSS</title>
      <pubDate>Sun, 22 Oct 2023 19:19:32 +0200</pubDate>
      <guid isPermaLink="false">georss-circle</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Geospatial/GeoRSS</category>
      <description><![CDATA[
        <p>In <a href="https://envs.net/~lucidiot/rsrsss/#georss-gml" target="_blank">yet another incredibly niche blog post</a>, I described GeoRSS GML. While working on this, I got quite confused by circles, enough to decide to just remove any mention of circles in all of the previous GeoRSS posts.</p>
        <p>The <a href="https://docs.ogc.org/cs/17-002r1/17-002r1.html" target="_blank">OGC standard</a>, which is the only currently active standard, and the original archived pages for <a href="https://web.archive.org/web/20200629173428/http://www.georss.org/simple.html" target="_blank">GeoRSS Simple</a> and <a href="https://web.archive.org/web/20200629173624/http://www.georss.org/gml.html" target="_blank">GeoRSS GML</a> do not define any specific element to describe a circle. If you want to represent a circle, you can do so using the <code>&lt;georss:radius&gt;</code> element, which will create a <a href="https://wiki.gis.com/wiki/index.php/Buffer_(GIS)" target="_blank">buffer</a> around a point.</p>
        <figure>
          <pre>
&lt;!-- GeoRSS Simple --&gt;
&lt;georss:point&gt;-24.62759969859908 -70.40503541618583&lt;/georss:point&gt;
&lt;georss:radius&gt;14.74038882&lt;/gml:radius&gt;
&lt;georss:featureName&gt;Antu, VLT-UT1&lt;/georss:featureName&gt;
&lt;georss:featureTypeTag&gt;telescope&lt;/georss:featureTypeTag&gt;
&lt;georss:relationshipTag&gt;has-nothing-to-do-with&lt;/georss:relationshipTag&gt;
&lt;georss:elev&gt;2635&lt;/georss:elev&gt;

&lt;!-- GeoRSS GML --&gt;
&lt;georss:where&gt;
  &lt;gml:Point&gt;
    &lt;gml:pos&gt;-24.62759969859908 -70.40503541618583&lt;/gml:pos&gt;
  &lt;/gml:Point&gt;
&lt;/georss:where&gt;
&lt;georss:radius&gt;14.74038882&lt;/gml:radius&gt;
&lt;georss:featureName&gt;Antu, VLT-UT1&lt;/georss:featureName&gt;
&lt;georss:featureTypeTag&gt;telescope&lt;/georss:featureTypeTag&gt;
&lt;georss:relationshipTag&gt;has-nothing-to-do-with&lt;/georss:relationshipTag&gt;
&lt;georss:elev&gt;2635&lt;/georss:elev&gt;
</pre>
          <figcaption>Examples of a circle represented as a center point and a radius in GeoRSS</figcaption>
        </figure>
        <p>However, <a href="https://schemas.opengis.net/georss/1.0/schema-1.1/gmlgeorss.xsd" target="_blank">the <abbr title="XML Schema Definition">XSD</abbr> defining the GeoRSS GML Profile</a>, and <a href="https://schemas.opengis.net/georss/1.0/schema-1.1/georss.xsd" target="_blank">the one for GeoRSS Simple</a>, both include ways to specify a circle separately. The OGC standard <a href="https://docs.ogc.org/cs/17-002r1/17-002r1.html#7" target="_blank">has links to the schemas</a> and does not state that those schemas are not non-normative, as many other specifications do. That means that in theory, it is completely legal to use them.</p>

        <h3>Reference</h3>
        <dl>
          <dt><code>&lt;<dfn>georss:circle</dfn>&gt;</code></dt>
          <dd>A GeoRSS Simple circle. Circles are defined by their center and their radius, so three numbers should be used here: latitude, longitude as WGS84 coordinates, and the radius in meters.</dd>
          <dt><code>&lt;<dfn>gml:CircleByCenterPoint</dfn>&gt;</code></dt>
          <dd>A GeoRSS GML circle. Must be used within a <code>&lt;georss:where&gt;</code> element. This should have a <code>&lt;gml:pos&gt;</code> element to specify the coordinates of the center point of the circle, and a <code>&lt;gml:radius&gt;</code> element to specify the radius.</dd>
          <dt><code>&lt;<dfn>gml:radius</dfn>&gt;</code></dt>
          <dd>The radius of a circle. This can have an <code>uom</code> attribute to specify the unit of measurement, which is by default <code>m</code> to represent meters.</dd>
          <dt><code><dfn>uom</dfn></code></dt>
          <dd>A unit of measurement. The <a href="https://portal.ogc.org/files/?artifact_id=20509" target="_blank">OGC GML 3.2.1 specification</a> defines its value under section 8.2.3.6. It can be either a string, without any colons, spaces, tabs, carriage returns or line breaks, or a URL. When using strings, following the <a href="https://ucum.org/" target="_blank">Unified Code for Units of Measure</a> is recommended. For example, you could use <code>m</code> for meters, <code>cm</code> for centimeters, <code>[ft_i]</code> for feet (international definition) or <code>[ft_us]</code> for U.S. feets. It is highly likely that most systems will only support meters.</dd>
        </dl>

        <h3>Examples</h3>
        <figure>
          <pre>
&lt;!-- GeoRSS Simple --&gt;
&lt;georss:circle&gt;-24.62759969859908 -70.40503541618583 14.74038882&lt;/georss:circle&gt;
&lt;georss:featureName&gt;Antu, VLT-UT1&lt;/georss:featureName&gt;
&lt;georss:featureTypeTag&gt;telescope&lt;/georss:featureTypeTag&gt;
&lt;georss:relationshipTag&gt;has-nothing-to-do-with&lt;/georss:relationshipTag&gt;
&lt;georss:elev&gt;2635&lt;/georss:elev&gt;

&lt;!-- GeoRSS GML --&gt;
&lt;georss:where&gt;
  &lt;gml:CircleByCenterPoint&gt;
    &lt;gml:pos&gt;-24.62759969859908 -70.40503541618583&lt;/gml:pos&gt;
    &lt;gml:radius uom="m"&gt;14.74038882&lt;/gml:radius&gt;
  &lt;/gml:CircleByCenterPoint&gt;
&lt;/georss:where&gt;
&lt;georss:featureName&gt;Antu, VLT-UT1&lt;/georss:featureName&gt;
&lt;georss:featureTypeTag&gt;telescope&lt;/georss:featureTypeTag&gt;
&lt;georss:relationshipTag&gt;has-nothing-to-do-with&lt;/georss:relationshipTag&gt;
&lt;georss:elev&gt;2635&lt;/georss:elev&gt;
</pre>
          <figcaption>Examples of a circle represented with the secret circle geometries in GeoRSS</figcaption>
        </figure>

        <h3>Notes</h3>
        <p>The <a href="https://doc.arcgis.com/en/arcgis-online/reference/georss.htm" target="_blank">GeoRSS documentation on ArcGIS Online</a> mentions supports for circles on GeoRSS Simple, but excludes them from GeoRSS GML. I would therefore advise against trying to use a <code>CircleByCenterPoint</code>. It is likely that the few GeoRSS implementations out there will only support <code>&lt;georss:circle&gt;</code>, if they support circles at all.</p>
        <p>The <a href="https://validator.w3.org/feed/" target="_blank">W3C Feed Validation Service</a> does not support circles in either its <a href="https://github.com/w3c/feedvalidator/blob/ff89646c3f6869058dfcf5a3cf9b6ead49bbe42d/src/feedvalidator/extension.py#L211-L239" target="_blank">GeoRSS Simple validator</a> or its <a href="https://github.com/w3c/feedvalidator/blob/ff89646c3f6869058dfcf5a3cf9b6ead49bbe42d/src/feedvalidator/extension.py#L732-L740" target="_blank">GeoRSS GML validator</a>.
        <p>Circles were probably either added before <code>&lt;georss:radius&gt;</code> was introduced, or added, then partially removed when someone noticed <code>&lt;georss:radius&gt;</code> could already do the job. Another possibility is that circles and curves are far less supported by GIS software than linear geometries, so they wouldn't be that usable anyway. This raises interesting questions: what happens if you use a circle, but also add a radius around it? Do you get a larger circle? Is the radius ignored? Does it become an approximation of a circle as a polygon, as is common with GIS software that doesn't support circles? Those questions will definitely remain unanswered, as with most things about RSS, the answer of most organizations nowadays will be "who cares?". This is why we can't have nice things.</p>
      ]]></description>

      <georss:circle>-24.62759969859908 -70.40503541618583 14.74038882</georss:circle>
      <georss:featureName>Antu_VLT-UT1</georss:featureName>
      <georss:featureTypeTag>telescope</georss:featureTypeTag>
      <georss:relationshipTag>has-nothing-to-do-with</georss:relationshipTag>
      <georss:elev>2635</georss:elev>
    </item>

    <item>
      <title>Really Spatial Syndication</title>
      <pubDate>Sun, 29 Oct 2023 10:50:02 +0100</pubDate>
      <guid isPermaLink="false">georss-srs</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Geospatial/GeoRSS</category>
      <description><![CDATA[
        <p>I have covered nearly everything about GeoRSS, but not exactly everything. I promise, someday I’ll be posting about something else, but for today, we’ll have to delve deep into the mess that is geolocation.</p>

        <h3>Coordinate systems</h3>
        <p>If I ask you to give me something that will precisely point at some place, any place in the world, including the middle of the ocean, you’re likely to give me so-called <em>GPS coordinates</em>. Those actually are <a href="https://en.wikipedia.org/wiki/World_Geodetic_System#WGS_84" target="_blank">WGS 84</a> coordinates. They represent a location on Earth, assuming the Earth is a perfect ellipsoid (a sphere, but slightly squished at the poles), whose center is the planet’s center of mass. But there are a lot of other ways to produce coordinates. Even now that GPS coordinates are ubiquitous, many other systems are still in use, for historic reasons, due to technological constraints, or for an increased precision.</p>
        <p>Let’s start with a simple one. How do you represent coordinates in three dimensions? We did see earlier that GeoRSS has <code>&lt;georss:elev&gt;</code> to set the elevation in meters, but what if you are trying to represent a line that is sloped? For example, you are making your own Strava and want to show that you went up and down a hill. Your track won’t be perfectly at sea level, it will have an altitude that changes with each point. You need some way to include the altitude along with the latitude and longitude. In a geospatial database, the typical GPS coordinate system in use is numbered <a href="https://epsg.io/4326" target="_blank">EPSG:4326</a>; store this number next to your coordinates and the database knows you are speaking in WGS 84. But if you want to add a third coordinate for altitudes, you will have to use a different version of the system numbered <a href="https://epsg.io/4979" target="_blank">EPSG:4979</a>. It’s the same as GPS, but there’s a third axis for a height, starting from the ellipsoid defined by WGS 84, and measured in meters.</p>

        <h3>Going beyond Earth</h3>
        <p>Let’s go further. With all the hype around a bunch of space agencies trying to build a moon space station and two moon bases and sending rovers and all, we have to start thinking about an equivalent of GPS for other planets, and a way to refer to places on any planet. Fortunately, space agencies have had this problem a long time ago, and they have their solutions.</p>
        <p>If you define your own geographic coordinate system, you can make your own ellipsoid to describe the shape of the planet, set the origin point (the 0° north 0° east point), and define how altitudes are expressed if you want to have a third dimension. On top of that, you can define a projection to flatten your planet, but that’s a whole another can of worms and I won’t deal with that here. You could define a coordinate system for the moon, with an ellipsoid that has the size and shape of the Moon, centered on the Moon’s center of mass, and define wherever you want your origin point to be. And you can do the same thing for basically anything, assuming you can somehow trick geospatial databases into bending a spheroid hard enough to fit your needs.</p>
        <p>And that’s what the <abbr title="International Astronomical Union">IAU</abbr> did. Those are the same people who said Pluto isn’t a planet, so I don’t know if you can really trust them, but I haven’t seen any other coordinate system for other planets that was in widespread use within the space industry. There are lots of <a href="https://spatialreference.org/ref/iau2000/" target="_blank">coordinate systems and projections for planets and moons</a>, including some for Earth because we clearly needed more. For the Moon, you’ll have to use <a href="https://spatialreference.org/ref/iau2000/30100/" target="_blank">IAU2000:30100</a>, aka <em>Moon 2000</em>. This doesn’t mean the Moon is <abbr title="Year 2000">Y2K</abbr>-ready, it just means this was adopted by the IAU in 2000. Moon 2000 is defined in a geospatial database like so:</p>

        <figure>
          <pre>GEOGCS["Moon 2000",
    DATUM["D_Moon_2000",
        SPHEROID["Moon_2000_IAU_IAG", 1737400.0, 0.0]],
    PRIMEM["Greenwich", 0],
    UNIT["Decimal_Degree", 0.0174532925199433]]</pre>
          <figcaption>
        <a href="https://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems" target="_blank">Well-Known Text</a> representation of the Moon 2000 coordinate system
          </figcaption>
        </figure>

        <p>The <code>PRIMEM</code> specifies the primary meridian, at 0°; it is called <em>Greenwich</em> even though it definitely doesn’t exist on the Moon, because nobody cares about its name. We also don’t specify anywhere what the actual location of the origin point is, because databases don’t care about that either. The <code>UNIT</code> specifies that we are using decimal degrees for coordinates, with the long number being the multiplier to convert degrees to radians. Those are almost always present in most coordinate systems.</p>
        <p>What matters for the Moon is the <code>SPHEROID</code>, with its two parameters, the semi-major axis and the inverse flattening. A spheroid is just another name for an ellipsoid.</p>
        <p>In a sphere, the semi-major axis is the radius. In an ellipsoid, that would be the largest radius, as opposed to the semi-minor axis. The inverse flattening defines how hard you should <em>squish</em> the sphere to get an ellipsoid, so it allows calculating the semi-minor axis. Here, we have <code>1737400</code> as the semi-major axis, which matches the radius of the Moon in meters, and <code>0</code> as the inverse flattening, meaning this is a perfect sphere.</p>
        <p>Remember how I mentioned in a previous post that <abbr title="Geography Markup Language">GML</abbr> is designed to represent anything about geospatial data? You can check out the <a href="https://spatialreference.org/ref/iau2000/30100/gml/" target="_blank">GML representation of Moon 2000</a> if you wish to be spooked.</p>

        <h3>From the Moon to WGS 84</h3>
        <p>So let’s say we have some Moon 2000 coordinates, for example <a href="https://en.wikipedia.org/wiki/Tranquility_Base" target="_blank">Tranquility Base</a>, at <a href="https://geohack.toolforge.org/geohack.php?pagename=Tranquility_Base&amp;params=00_41_15_N_23_26_00_E_globe:moon_type:landmark" target="_blank">0.6875°, 23.433333°</a>. How do you put that into GeoRSS?</p>
        <p>Since databases don’t care one bit whether what you are doing makes any sense, you could convert directly from Moon 2000 to WGS 84. That would make the database assume that your coordinates are just on a very weirdly-shaped Earth. Since coordinates are in degrees, the size of the Earth doesn’t matter, and the coordinates will remain unchanged after this conversion; maybe with some slight changes to account for the differently-shaped ellipsoid. You are now in <a href="https://geohack.toolforge.org/geohack.php?pagename=Tranquility_Base&amp;params=00_41_15_N_23_26_00_E_globe:earth_type:landmark" target="_blank">some weird place in Democratic Republic of the Congo</a>.</p>
        <p>To do the proper conversion, you will need to do some trigonometry. Your Moon 2000 coordinates and the Moon 2000 spheroid are related to the center of mass of the Moon. WGS 84 is the same for Earth. Knowing the distance between the Earth and the Moon’s centers of masses, and knowing <a href="https://astronomy.stackexchange.com/a/30434" target="_blank">the position of the Moon on the Earth’s surface</a> at a given date and time, it should be possible to get the offset in degrees to add to the latitude and longitude to said position to get the position of your target on Earth, as well as the altitude from Earth.</p>

        <figure>
          <img src="https://envs.net/~lucidiot/rsrsss/img/earth-moon-projection.svg" />
          <figcaption>Schematic representation of the geometric shenanigans to get WGS 84 coordinates for Tranquility Base</figcaption>
        </figure>

        <p>That’s a mess, and you can do something easier than that: just make it someone else’s problem. GeoRSS GML lets you set a different coordinate system using the <code>srsName</code> attribute. And if you are using any amount of dimensions other than two, you can use <code>srsDimension</code> as well.</p>

        <h3>Examples</h3>
        <p>Here is an example of one of the telescopes of the <abbr title="Very Large Telescope">VLT</abbr>, the same that I mentioned in my post about circles in GeoRSS, but using a third dimension in its coordinates instead of the <code>&lt;georss:elev&gt;</code> tag:</p>

        <figure>
          <pre>&lt;georss:where&gt;
  &lt;gml:Point srsName="urn:ogc:def:crs:EPSG:9.0:4979" srsDimension="3"&gt;
    &lt;gml:pos&gt;-24.62759969859908 -70.40503541618583 2635&lt;/gml:pos&gt;
  &lt;/gml:Point&gt;
&lt;/georss:where&gt;
&lt;georss:featureName&gt;Antu, VLT-UT1&lt;/georss:featureName&gt;
&lt;georss:featureTypeTag&gt;telescope&lt;/georss:featureTypeTag&gt;
&lt;georss:relationshipTag&gt;has-nothing-to-do-with&lt;/georss:relationshipTag&gt;</pre>
          <figcaption>Getting a third dimension in GeoRSS GML</figcaption>
        </figure>

        <p>To specify that I am using <a href="https://epsg.io/4979" target="_blank">EPSG:4979</a>, I am using the <code>srsName</code> attribute with a <abbr title="Uniform Resource Name">URN</abbr>, specifically an <a href="https://www.ogc.org/about-ogc/policies/ogc-urn-policy/" target="_blank"><abbr title="Open Geospatial Consortium">OGC</abbr> URN</a>, which defined that <code>def:crs:</code> defines a coordinate reference system. <code>EPSG</code> says the authority defining this system is the <abbr title="European Petroleum Survey Group">EPSG</abbr>, <code>9.0</code> is the version number of their <a href="https://en.wikipedia.org/wiki/EPSG_Geodetic_Parameter_Dataset" target="_blank">Geodetic Parameter database</a>, and <code>4979</code> is the identifier of the system within that database.</p>
        <p>I am also using <code>srsDimension</code>, which allows specifying how many dimensions the coordinate system has. While this could be guessed from the coordinate system, this allows feed parsers and validators to know that they should expect coordinates of this amount of dimensions without having to know about coordinate systems, which can simplify implementations. Perhaps you can just send the <code>srsName</code> verbatim to some other software library specialized in coordinate systems.</p>
        <p>And here is Tranquility Base! Since the <code>IAU2000</code> coordinate systems and projections do not have a <abbr title="Uniform Resource Name">URN</abbr>, I am instead using a <abbr title="Uniform Resource Locator">URL</abbr> to the GML definition of the coordinate system I want.</p>

        <figure>
          <pre>&lt;georss:where&gt;
  &lt;gml:Point srsName="https://spatialreference.org/ref/iau2000/30100/gml/"&gt;
    &lt;gml:pos&gt;0.6875 23.433333&lt;/gml:pos&gt;
  &lt;/gml:Point&gt;
&lt;/georss:where&gt;
&lt;georss:featureName&gt;Tranquility Base&lt;/georss:featureName&gt;
&lt;georss:featureTypeTag&gt;landing-site&lt;/georss:featureTypeTag&gt;
&lt;georss:relationshipTag&gt;used-as-example&lt;/georss:relationshipTag&gt;</pre>
          <figcaption>Pointing at Tranquility Base in GeoRSS GML</figcaption>
        </figure>

        <h3>Reference</h3>
        <dl>
          <dt><code><dfn>srsName</dfn></code></dt>
          <dd>
            <p>The spatial reference system used for this geometry. This should be either a <abbr title="Uniform Resource Name">URN</abbr> for a common system, for example <code>urn:ogc:def:crs:EPSG:&lt;version&gt;:&lt;identifier&gt;</code>, where <code>&lt;version&gt;</code> is the version number of the <abbr title="European Petroleum Survey Group">EPSG</abbr> database of spatial reference systems, and <code>&lt;identifier&gt;</code> is the number of the system. For <code>EPSG:4979</code>, you could use <code>urn:ogc:def:crs:EPSG:9.0:4979</code>. For an <abbr title="Spatial Reference System">SRS</abbr> that does not have a URN, or has a custom definition, you can use a <abbr title="Uniform Resource Locator">URL</abbr> that points to the definition of this SRS in GML. For <code>IAU2000:30100</code>, you could use <code>https://spatialreference.org/ref/iau2000/30100/gml/</code>.</p>
            <p>The <a href="https://validator.w3.org/feed/" target="_blank">W3C Feed Validation Service</a> allows this attribute, but does not perform any validation on its value.</p>
          </dd>
          <dt><code><dfn>srsDimension</dfn></code></dt>
          <dd>
            <p>The number of dimensions of this spatial reference system. Since the default is the 2-dimensional WGS 84 (EPSG:4326), you will always need to set <code>srsName</code> along with this. This is always implied by the system you are using, but this makes it easier to validate your data since a GeoRSS validator does not have to know how the <abbr title="Spatial Reference System">SRS</abbr> defined, or understand the concept of SRS, to be able to tell if you put the right amount of coordinates in your data.</p>
            <p>You can set both of these attributes on <code>&lt;gml:Point&gt;</code>, <code>&lt;gml:LineString&gt;</code>, <code>&lt;gml:LinearRing&gt;</code>, <code>&lt;gml:Envelope&gt;</code>, <code>&lt;gml:Polygon&gt;</code> or <code>&lt;gml:CircleByCenterPoint&gt;</code>. You can also set these directly on <code>&lt;gml:pos&gt;</code> and <code>&lt;gml:posList&gt;</code>, but the <a href="https://schemas.opengis.net/georss/1.0/schema-1.1/gmlgeorss.xsd" target="_blank"><abbr title="XML Schema Definition">XSD</abbr> for the GeoRSS GML Application Profile</a> says that <cite>"It is expected that this attribute will be specified at the direct position level only in rare cases"</cite>.</p>
            <p>While the <a href="https://validator.w3.org/feed/" target="_blank">W3C Feed Validation Service</a> supports this attribute, it only validates that it is a valid positive integer, not that it matches the specified <abbr title="Spatial Reference System">SRS</abbr>, or that the coordinates specified in the geometries match this attribute. It also does not allow this attribute on <code>&lt;gml:pos&gt;</code> or <code>&lt;gml:posList&gt;</code>.</p>
          </dd>
        </dl>
      ]]></description>
      <georss:where>
        <gml:Point srsName="https://spatialreference.org/ref/iau2000/30100/gml/">
          <gml:pos>0.6875 23.433333</gml:pos>
        </gml:Point>
      </georss:where>
      <georss:featureName>Tranquility_Base</georss:featureName>
      <georss:featureTypeTag>landing-site</georss:featureTypeTag>
      <georss:relationshipTag>used-as-example</georss:relationshipTag>
    </item>

    <item>
      <title>National Hurricane Center and Central Pacific Hurricane Center</title>
      <pubDate>Sun, 05 Nov 2023 13:24:50 +0100</pubDate>
      <guid isPermaLink="false">nhc-cphc</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Weather</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/noaa/nhc.opml</link>
      <description><![CDATA[
        <p>The <abbr title="National Oceanic and Atmospheric Administration">NOAA</abbr>'s National Hurricane Center and Central Pacific Hurricane Center are two distinct official bodies responsible for watching out for cyclones around North America. There used to also be an Eastern Pacific Hurricane Center, with the <abbr title="National Hurricane Center">NHC</abbr> being solely responsible for the Atlantic side of things, but those two got merged. The <abbr title="Central Pacific Hurricane Center">CPHC</abbr>'s website got merged with the NHC's, but they remain distinct entities, perhaps for redundancy if one of them loses to a cyclone.</p>
        <p>The NHC provides a myriad of feeds, with an RSS button available on the header of every webpage, but <a href="https://www.nhc.noaa.gov/aboutrss.shtml" target="_blank">the list of feeds</a> it links to is quite hard to read. Feed autodiscovery is supported, with 11 of their feeds listed as <code>&lt;link /&gt;</code> tags. Among this hodgepodge of feeds, you'll find:</p>
        <ul>
          <li>2-day forecasts for every depression, storm or cyclone under their watch, as images or as text;</li>
          <li>Updates to their KMZ or SHP exports, either individually for each cyclone or for an overview over one of their three regions, for geospatial people, with <a href="https://www.nhc.noaa.gov/gis/rss.php" target="_blank">further docs on how to use them</a>;</li>
          <li>Descriptions of each depression, storm or cyclone as separate items;</li>
          <li>The latest weather report as a podcast (this seems to be inactive);</li>
          <li>Flight plans for any weather reconnaissance flights they might have each day;</li>
          <li><dfn>Discussions</dfn>, longer weather reports written less to follow a standard maritime/aviation weather report and more to be human-readable;</li>
          <li>Monthly overviews of tropical weather;</li>
          <li>Forecasts dedicated to navigation in offshore waters, in high seas, HF radio transmission quality, probable wind speeds for storms, etc.;</li>
          <li>Advisories of incoming hurricanes, or forecasts, or status updates, or <abbr title="International Civil Aviation Organization">ICAO</abbr>-compliant ones.</li>
        </ul>
        <p>That's a lot. Most of these feeds are divided by region (Atlantic, Central Pacific or East Pacific, per <abbr title="World Meteorological Organization">WMO</abbr> conventions), and by "storm wallet". A storm wallet is a large binder or collection of binders that forecasters used to archive all of their data into once each cyclone dissipates, numbered 1 to 5, to match the maximum advisory level reached. In the case of those feeds, this means each storm wallet is actually the current advisory level for the storm. Some feeds also have versions in Spanish, updated by their Puerto Rico office when they feel like it.</p>
        <p>To make it slightly easier for feed aficionados (<em>afeedcionados</em>?) to figure out what they might be interested in, I wrote <a href="https://tildegit.org/lucidiot/rsrsss/src/commit/773c10f95655ae0650d6b72da5eb7c5d9a02bab9/bin/build_nhc_opml" target="_blank">a terrible script</a> to build an <abbr title="Outline Processor Markup Language">OPML</abbr> file listing every available feed. You can access it and add it to your feed reader <a href="https://envs.net/~lucidiot/rsrsss/opml/noaa/nhc.opml" target="_blank">here</a>; feel free to remove the likely numerous duplicates from your reader afterwards.</p>
        <p>Note that some of these feeds include a <code>&lt;gml:Point&gt;</code> element in the items describing weather systems, but it isn't wrapped within a <code>&lt;georss:where&gt;</code> element, making those feeds <a href="https://validator.w3.org/feed/check.cgi?url=https://www.nhc.noaa.gov/rss_examples/gis-ep-20130530.xml" target="_blank">invalid</a>. This strangeness is what made me have a deeper look into GeoRSS in the first place, leading to the series of articles I posted in the last few weeks.</p>
      ]]></description>
    </item>

    <item>
      <title>Spice up your feeds with cyclones</title>
      <pubDate>Sun, 12 Nov 2023 19:29:48 +0100</pubDate>
      <guid isPermaLink="false">nhc-xsd</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">XSD</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Weather</category>
      <link>https://envs.net/~lucidiot/rsrsss/xsd/nhc.xsd</link>
      <description><![CDATA[
        <p>Last time, I posted about the incredible amount of RSS feeds the <abbr title="National Hurricane Center">NHC</abbr> vomits. While trying to delve into those feeds, particularly the ones dubbed as <abbr title="Geographic Information Systems">GIS</abbr> feeds that use <abbr title="Geography Markup Language">GML</abbr>, I found an XML namespace meant to describe cyclones. Way to make your feeds way more epic!</p>
        <p>With the help of <a href="https://www.nhc.noaa.gov/rss_examples/" target="_blank">the NHC's example files</a>, published solely to help developers work with their feeds, and <a href="https://www.nhc.noaa.gov/gis/rss.php" target="_blank">GIS RSS feeds documentation page</a>, I cobbled together an <abbr title="XML Schema Definition">XSD</abbr> to better document this namespace.</p>
        <figure>
          <pre>
&lt;rss
  version="2.0"
  xmlns:nhc="https://www.nhc.noaa.gov/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
    https://www.nhc.noaa.gov
    https://envs.net/~lucidiot/rsrsss/xsd/nhc.xsd
  "
&gt;
  &lt;channel&gt;
    &lt;!-- ... --&gt;
    &lt;item&gt;
      &lt;!-- ... --&gt;
      &lt;nhc:Cyclone&gt;
        &lt;nhc:center&gt;38.43317, -82.02346&lt;/nhc:center&gt;
        &lt;nhc:type&gt;TROPICAL STORM&lt;/nhc:type&gt;
        &lt;nhc:name&gt;FLORIDA MAN&lt;/nhc:name&gt;
        &lt;nhc:wallet&gt;EP3&lt;/nhc:wallet&gt;
        &lt;nhc:atcf&gt;EP872023&lt;/nhc:atcf&gt;
        &lt;nhc:datetime&gt;11:11 AM PDT Wed Jan 25&lt;/nhc:datetime&gt;
        &lt;nhc:movement&gt;NE at 54 mph&lt;/nhc:movement&gt;
        &lt;nhc:pressure&gt;984 mb&lt;/nhc:pressure&gt;
        &lt;nhc:wind&gt;115 mph&lt;/nhc:wind&gt;
        &lt;nhc:headline&gt;...FLORIDA MAN MESSES UP THE TOWN OF HURRICANE, WV...&lt;/nhc:headline&gt;
      &lt;/nhc:Cyclone&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;
</pre>
          <figcaption>Example of a tropical storm added to an RSS item using the NHC XML namespace</figcaption>
        </figure>
        <p>Note that in this example, I am using the <a href="https://www.w3.org/TR/xmlschema-1/#xsi_schemaLocation" target="_blank"><code>xsi:schemaLocation</code></a> attribute to tell any XML schema validators where the <abbr title="XML Schema Definition">XSD</abbr> for the <code>nhc</code> namespace is located. This can help you if you are using an XML editor to write your RSS feeds, or want some automatic validation of the validity of your feeds with namespaces and features that go beyond the <a href="https://validator.w3.org/feed/" target="_blank">W3C Feed Validation Service</a>. Let's have a look at all those new XML elements:</p>
        <dl>
          <dt><code>&lt;<dfn>nhc:Cyclone</dfn>&gt;</code></dt>
          <dd>A tropical weather system: a tropical depression, tropical storm, hurricane, etc. This can only be used on items, not channels, and can only be used once per item.</dd>
          <dt><code>&lt;<dfn>nhc:center</dfn>&gt;</code></dt>
          <dd>WGS84 coordinates of the center of the weather system, as latitude then longitude separated with a comma and optionally spaces.</dd>
          <dt><code>&lt;<dfn>nhc:type</dfn>&gt;</code></dt>
          <dd>Type of the weather system: whether it is a tropical depression, tropical storm, hurricane, etc. Usually written entirely in uppercase.</dd>
          <dt><code>&lt;<dfn>nhc:name</dfn>&gt;</code></dt>
          <dd>Name of the weather system. Usually written entirely in uppercase.</dd>
          <dt><code>&lt;<dfn>nhc:wallet</dfn>&gt;</code></dt>
          <dd>
            <p>The <dfn>storm wallet</dfn>: Back before hurricane forecasting became computerized, all of the hurricane data was stored in binders, called wallets. There are five wallets for each of the three areas of responsibility of the <abbr title="National Hurricane Center">NHC</abbr> and the <abbr title="Central Pacific Hurricane Center">CPHC</abbr>.</p>
            <p>Storm wallets are numbered with two letters representing the area of responsibility, followed by a digit from 1 to 5 matching the storm advisory number. The two-letter codes for areas of responsibility are:</p>
            <dl>
              <dt>AT</dt>
              <dd>Atlantic</dd>
              <dt>CP</dt>
              <dd>Central Pacific</dd>
              <dt>EP</dt>
              <dd>Eastern Pacific</dd>
            </dl>
          </dd>
          <dt><code>&lt;<dfn>nhc:atcf</dfn>&gt;</code></dt>
          <dd>
            <p>Storm identifier in the <abbr title="Automated Tropical Cyclone Forecast">ATCF</abbr> software. This is the software used for hurricane forecasting ever since it became computerized. It can be used to find the raw data from that software on <a href="https://ftp.nhc.noaa.gov/atcf/" target="_blank">the NHC's public file server</a>.</p>
            <p>ATCF IDs begin with a two-letter code for the area of responsibility, followed by a two-digit storm number and the four-digit year in which the storm occurs. The two-letter codes for areas of responsibility are:</p>
            <dl>
              <dt>AL</dt>
              <dd>Atlantic. Note that this is different from the <code>AT</code> code for storm wallets.</dd>
              <dt>CP</dt>
              <dd>Central Pacific</dd>
              <dt>EP</dt>
              <dd>Eastern Pacific</dd>
            </dl>
            <p>Storm numbers 01 to 30 are supposed to be unique storm numbers per season. Storm numbers 80 to 89 are used for training purposes and should be ignored when trying to process real ATCF data. Storm numbers 90 to 99 are areas of interest to forecasters that may not actually be storms and may be reused in the same season.</p>
            <p>I recommend using storm numbers between 80 and 89 if you want to mess around and create fake storms, since those are explicitly designated as training or testing data that should be discarded. Also note that storm numbers 31 to 79 are not assigned, and that they assume there will never be more than 30 storms in one year. I'm sure climate change will fix that.</p>
          </dd>
          <dt><code>&lt;<dfn>nhc:datetime</dfn>&gt;</code></dt>
          <dd>The date and time of the report, using the <a href="https://man7.org/linux/man-pages/man3/strftime.3.html" target="_blank">strftime format</a> <code>%I:%M %p %Z %a %b %d</code>. The commonly used timezones are <a href="https://en.wikipedia.org/wiki/Central_Time_Zone" target="_blank">CDT</a> on the Atlantic reports, <a href="https://en.wikipedia.org/wiki/Pacific_Time_Zone" target="_blank">PDT</a> on Eastern Pacific reports, and <a href="https://en.wikipedia.org/wiki/Hawaii%E2%80%93Aleutian_Time_Zone" target="_blank">HDT</a> on Central Pacific reports.</dd>
          <dt><code>&lt;<dfn>nhc:movement</dfn>&gt;</code></dt>
          <dd>
            <p>The direction and speed of movement of the storm, expressed as a cardinal direction and a speed, usually in the form <code>[direction] at [speed] mph</code>. The direction can be a cardinal (<abbr title="North">N</abbr>, <abbr title="South">S</abbr>, <abbr title="East">E</abbr>, <abbr title="West">W</abbr>), intercardinal (<abbr title="Northeast">NE</abbr>, <abbr title="Southeast">SE</abbr>, <abbr title="Southwest">SW</abbr>, etc.) or secondary intercardinal direction (<abbr title="West-northwest">WNW</abbr>, <abbr title="East-southeast">ESE</abbr>, etc.). Speeds are non-negative integers, and always in miles per hour.</p>
            <p>Note that this is a manually written value, not necessarily intended for machine consumption, and that nothing prevents other values from being set. Other known values include <code>Stationary</code> and <code>Nearly stationary</code>.</p>
          </dd>
          <dt><code>&lt;<dfn>nhc:pressure</dfn>&gt;</code></dt>
          <dd>The atmospheric pressure at the center of the storm, expressed in millibars without decimals, as <code>[pressure] mb</code>.</dd>
          <dt><code>&lt;<dfn>nhc:wind</dfn>&gt;</code></dt>
          <dd>The wind speed in the storm, expressed in miles per hour without decimals, as <code>[speed] mph</code>.</dd>
          <dt><code>&lt;<dfn>nhc:headline</dfn>&gt;</code></dt>
          <dd>A headline for the report, usually written in uppercase, with each sentence surrounded by ellipsis characters ("…", <code>&amp;hellip;</code>, U+2026).</dd>
        </dl>
        <p>All of the child elements of <code>&lt;nhc:Cyclone&gt;</code> are required.</p>
        <p>And as with most of the XML namespaces that I showcase on this feed, I added support for it on the <abbr title="Extensible Stylesheet Language Transformations">XSLT</abbr> that allows this feed to be displayed on most modern web browsers without RSS support. <a href="https://envs.net/~lucidiot/rsrsss/#nhc-xsd" target="_blank">View this post in your browser</a> and admire the additional hurricane information available!</p>
      ]]></description>
      <nhc:Cyclone>
        <nhc:center>40.1509066, -77.0312744</nhc:center>
        <nhc:type>HURRICANE</nhc:type>
        <nhc:name>REALLY STORMY SYNDICATION</nhc:name>
        <nhc:wallet>AT1</nhc:wallet>
        <nhc:atcf>AL812023</nhc:atcf>
        <nhc:datetime>06:29 PM GMT Sun Nov 12</nhc:datetime>
        <nhc:movement>WSW at 88 mph</nhc:movement>
        <nhc:pressure>0 mb</nhc:pressure>
        <nhc:wind>9000 mph</nhc:wind>
        <nhc:headline>...CATASTROPHIC DAMAGE TO SOCIAL MEDIA AS REALLY STORMY SYNDICATION SWEEPS THROUGH THE COUNTRY...</nhc:headline>
      </nhc:Cyclone>
    </item>

    <item>
      <title>p1k3</title>
      <pubDate>Sun, 19 Nov 2023 17:56:05 +0100</pubDate>
      <guid isPermaLink="false">p1k3</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://p1k3.com/feed</link>
      <description><![CDATA[
        <p>~brennen is a fellow <a href="https://tilde.town" target="_blank">townie</a> who plays the long game. His blog exists since 1997, and although the posting frequency has lowered, it is still active today. Look at <a href="https://p1k3.com/all/" target="_blank">the archive</a> and be amazed.</p>
        <p>In the middle of an IRC conversation, I mentioned how I was only reading the blog articles of my friends that I spot in my feedreader, right after mentioning I read 40 of brennen's posts. He proceeded to build an Atom feed with every single post from his website all the way to November of 2020, which is as of writing still available <a href="https://p1k3.com/all.xml" target="_blank">here</a>. If you want to stress test your feedreader, or how much you like to read blog posts, add this feed. Don't expect it to be updated though since it was generated manually just once.</p>
        <p>I went through every single of the 1960 entries of this special feed in just one month, and I read the other few dozen posts that were posted in the years since. It was really fun to follow along as ~brennen grows up. He told me he thought the older entries were embarrassing, and I can understand that since I also feel shame at things I put up online when I was younger, most of which I have deleted ever since. But going through all of his posts was fascinating. I wasn't laughing at young him or thinking any less of present him. I was just watching someone growing up a decade earlier than me, in a different country, with a different culture. I believe there is some great historical value in this online diary, just like how historians are studying the past by reading diaries. I hope ~brennen carries on with this great undertaking and continues shoving random tidbits of his life into this website. This is the World Wide Web at its finest: humans just being human.</p>
      ]]></description>
    </item>

    <item>
      <title>UK Threat Level</title>
      <pubDate>Sun, 26 Nov 2023 00:08:23 +0100</pubDate>
      <guid isPermaLink="false">uk-threat-level</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.mi5.gov.uk/UKThreatLevel/UKThreatLevel.xml</link>
      <description><![CDATA[
        <p>As a citizen of a country that still is within the European Union, I am probably legally required to make fun of the United Kingdom, and Brexit is only one in an ever-growing list of reasons why I might want to do that. But there is one thing that I cannot complain about, and that is their government's website.</p>
        <p>I could not find it anymore, but a while ago, I read a blog post about someone watching someone else use a <abbr title="PlayStation Portable">PSP</abbr> to access GOV.UK on some free Wi-Fi to do whatever business you might have on your government's website. They used that as an example of how good Web design allows accessibility, even to people whose only device might have an incredibly limited browser and who still need to fill out governement forms online. My own experience with browsing the web on a PSP teaches me that accessing any website nowadays is extremely difficult, but I am willing to believe that blog post because GOV.UK's design sounds like it could actually fit on a PSP, or at least still be readable.</p>
        <p>GOV.UK's <a href="https://design-system.service.gov.uk/" target="_blank">design system</a> causes the website to often be listed on lists of "<a href="https://en.wikipedia.org/wiki/Brutalist_architecture" target="_blank">brutalist</a> websites", due to the design being all about clearly displaying what people are looking for, unlike what most heavily monetized blogs or most web apps do now.</p>
        <p>But we're not here to talk about website design of course. Another interesting and much more relevant part of the UK governement website is that they have feeds, and a lot of them. Integrating the UK transport accident investigation branches into <a href="https://tilde.town/~lucidiot/itsb/" target="_blank"><abbr title="International Transport Safety Bureau">https://tilde.town/~lucidiot/itsb/</abbr></a> was trivial, just pick the right filters and get your tailored Atom feed. I have started to randomly stumble upon the feeds of other UK public bodies, and I think I'll have to soon spend more time trying to list all the feeds they have because there's a lot to discover. A lot of feeds, of XML namespaces, of relationships to European projects, and probably more.</p>
        <p>Let's just start with this rather simple feed: you can get updates on the current <a href="https://www.mi5.gov.uk/threat-levels" target="_blank">national terrorist threat level</a> set by the MI5. I was both surprised at the fact that that's a feed, a feed that only gets updated at most twice a year, and at the fact that they have a separate threat level set for Northern Ireland. I'm fairly sure having a separate <a href="https://en.wikipedia.org/wiki/Vigipirate" target="_blank">Vigipirate</a> level in France for Corsican independentists would just be a self-fulfilling prophecy, causing them to attack more.</p>
        <p>I naively hope the UK someday stops all its political bullshit, but only so they can keep feeding me more feeds, and inspire other countries to do the same.</p>
      ]]></description>
    </item>

    <item>
      <title>Chicago Transit Authority alerts</title>
      <pubDate>Sun, 03 Dec 2023 19:57:59 +0100</pubDate>
      <guid isPermaLink="false">cta-opml</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Transport</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/cta.opml</link>
      <description><![CDATA[
        <p>I sometimes find myself a little bored by the list of feeds I would like to share on this feed. Quite a lot of them are blogs, and sharing a lot of blogs quickly gets repetitive. I am far more interested in the more unusual uses of RSS, like the RSS feeds of cyclones I shared a little while ago. So I occasionally look up some random keywords next to "RSS feed" in a search engine. I stumbled upon <a href="https://www.transitchicago.com/rss/default.aspx" target="_blank">the Chicago Transit Authority's RSS feeds</a>, and I was pleased by the sheer amount of them, but also by what they provide.</p>
        <p>I like using RSS feeds as a means of getting not just blog posts. Getting warnings about delays or changes on a commute over RSS sounds really nice. Getting the kind of information that people think they need phone notifications for, or the kind of information companies want to you think you need a mobile app full of data collection for. And most importantly, getting it all into a system designed to handle a large amount of information, to sort it, to filter it, to display it conveniently, instead of just a sort of tray that doesn't fit more than a few notifications.</p>
        <p>This reminds me of a BlackBerry Q5 I used before I switched to OnePlus. BlackBerry OS 10 is just Android with a BlackBerry UI, and its notification center was quite nice and could clearly better handle a large amount of notifications than Android or iOS' default interfaces. I guess this is just what happens when you design something to be used for more than just doomscrolling and swiping left or right on random faces.</p>
        <p>Anyway, since I like to get all the interesting feeds neatly organized into even more XML, <a href="https://tildegit.org/lucidiot/rsrsss/commit/8921e100fac29789c9321af5b57fa2b4cd0444ed/" target="_blank">I wrote a script</a> to generate an OPML file for all the Chicago Transit Authority feeds. Since they provide feeds for both a single line or category of alerts and for all at once, you'll get duplicates if you import that, but at least you will know about all the available feeds.</p>
      ]]></description>
    </item>

    <item>
      <title>UK National Highways alerts</title>
      <pubDate>Sun, 10 Dec 2023 17:33:50 +0100</pubDate>
      <guid isPermaLink="false">uk-highways-opml</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Transport</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/uk-highways.opml</link>
      <description><![CDATA[
        <p>In the same vein as the <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#cta-opml" target="_blank">Chicago Transit Authority alerts</a> <abbr title="Outline Processor Markup Language">OPML</abbr> file I generated, here's another OPML file of transportation alerts, but for England's highways.</p>
        <p>These feeds are quite strange. They use non-namespaced extensions to RSS, which are illegal but will not break most feedreaders, to give some metadata on each item:</p>
        <dl>
          <dt><code>&lt;<dfn>reference</dfn>&gt;</code></dt>
          <dd>A unique identifier for the event. I suppose this could just have been a <code>&lt;guid isPermaLink="false"&gt;</code>.</dd>
          <dt><code>&lt;<dfn>road</dfn>&gt;</code></dt>
          <dd>The number of the road where the event occurs, like <code>M20</code>.</dd>
          <dt><code>&lt;<dfn>region</dfn>&gt;</code></dt>
          <dd>The region where the event occurs, which is equivalent to the region names in the regional feeds list.</dd>
          <dt><code>&lt;<dfn>county</dfn>&gt;</code></dt>
          <dd>The county where the event occurs.</dd>
          <dt><code>&lt;<dfn>latitude</dfn>&gt;</code></dt>
          <dd>The WGS84 latitude of the event's location. This could have been a <code>&lt;georss:point&gt;</code> or a <code>&lt;gml:pos&gt;</code> or a <code>&lt;icbm:latitude&gt;</code> or a <code>&lt;geo:lat&gt;</code>…</dd>
          <dt><code>&lt;<dfn>longitude</dfn>&gt;</code></dt>
          <dd>The WGS84 longitude of the event's location. This could have been a <code>&lt;georss:point&gt;</code> or a <code>&lt;gml:pos&gt;</code> or a <code>&lt;icbm:longitude&gt;</code> or a <code>&lt;geo:long&gt;</code>…</dd>
          <dt><code>&lt;<dfn>eventStart</dfn>&gt;</code></dt>
          <dd>ISO 8601 date of when the event starts. This could have been a <code>&lt;ev:startdate&gt;</code> from the <a href="https://web.resource.org/rss/1.0/modules/event/" target="_blank">RSS 1.0 Event Module</a>.</dd>
          <dt><code>&lt;<dfn>eventEnd</dfn>&gt;</code></dt>
          <dd>ISO 8601 date of when the event ends. This could have been a <code>&lt;ev:enddate&gt;</code> from the <a href="https://web.resource.org/rss/1.0/modules/event/" target="_blank">RSS 1.0 Event Module</a>.</dd>
          <dt><code>&lt;<dfn>overallStart</dfn>&gt;</code></dt>
          <dd>ISO 8601 date of when the cause of the event starts. For incidents, this is the same as <code>&lt;eventStart&gt;</code>. For road works that start before the event occurs (for example, road works that only close a road during a given time of day), this will be a different date.</dd>
          <dt><code>&lt;<dfn>overallEnd</dfn>&gt;</code></dt>
          <dd>ISO 8601 date of when the cause of the event ends. For incidents, this is the same as <code>&lt;eventEnd&gt;</code>. For road works that end after the event occurs (for example, road works that only close a road during a given time of day), this will be a different date.</dd>
        </dl>
        <p>Obviously, not a single feed reader will support these tags.</p>
        <p>A larger issue however is just the sheer amount of items. Adding this OPML into a feedreader made it pull over fourteen thousand items. Now of course there are a lot of duplicates, since there are feeds by road, area, and for the whole network, as well as for incidents, roadworks, or both at once. The <a href="https://m.highwaysengland.co.uk/feeds/rss/AllEvents.xml" target="_blank">everything-everywhere firehose</a> still has three thousand items, with tons and tons of roadworks everywhere.</p>
        <p>Just the <a href="https://m.highwaysengland.co.uk/feeds/rss/UnplannedEvents.xml" target="_blank">incidents-everywhere</a> feed gets a new item from every few minutes to <strong>every few seconds</strong>, which is the fastest update rate I have ever seen on a feed. I guess those feeds really can only be used by software for further processing.</p>
      ]]></description>
    </item>

    <item>
      <title>Xidel, the Swiss Army knife of XML and JSON processing</title>
      <pubDate>Mon, 18 Dec 2023 14:47:48 +0100</pubDate>
      <guid isPermaLink="false">xidel</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tool</category>
      <link>https://www.videlibri.de/xidel.html</link>
      <description><![CDATA[
        <p>You may have noticed that I have started posting the occasional home-grown <abbr title="Outline Processor Markup Language">OPML</abbr> file, to provide <a href="http://opml.org/spec2.opml#subscriptionLists" target="_blank">subscription lists</a> and share many feeds at once. Some of the files include hundreds of feeds, and no, I did not write those files entirely by hand.</p>
        <p>The first OPML file that got generated automatically was for the feeds of the <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#nhc-cphc" target="_blank">National Hurricane Center</a>. It initially used <a href="https://tildegit.org/lucidiot/rsrsss/src/commit/773c10f95655ae0650d6b72da5eb7c5d9a02bab9/bin/build_nhc_opml" target="_blank">a shell script</a> that combined some JavaScript code via Node.js and a call to <a href="https://blacksmoke16.github.io/oq/" target="_blank">oq</a>, a wrapper around <a href="https://jqlang.github.io/jq/" target="_blank">jq</a> that can convert between <abbr title="YAML Ain't a Markup Language">YAML</abbr>, <abbr title="JavaScript Object Notation">JSON</abbr> and <abbr title="eXtensible Markup Language">XML</abbr>.</p>
        <p>The JavaScript code was retrieving the <abbr title="National Hurricane Center">NHC</abbr>'s <a href="https://www.nhc.noaa.gov/aboutrss.shtml" target="_blank">RSS feeds list</a> page and <a href="https://stackoverflow.com/a/1732454/5990435" target="_blank">parsing it using a regular expression</a>. It would then generate a JSON representation of an OPML file, which gets converted to XML almost as described in <a href="https://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html" target="_blank">this nearly 14 years old article</a> by oq. That's how I was used to generating feeds within my <a href="https://tilde.town/~lucidiot/itsb/" target="_blank"><abbr title="International Transport Safety Bureau">ITSB</abbr></a> project.</p>
        <p>But that did not mean I was really happy with this. I do not like having a lot of dependencies in my projects, particularly those that can be heavy or restrictive in terms of CPU architectures. Ideally, I would like to be able to do almost everything on Windows XP, since one of my many other niche interests is in older Windows systems.</p>

        <h3>XProc and XQuery</h3>
        <p>While going through <a href="https://en.wikipedia.org/wiki/Category:XML-based_standards" target="_blank">the XML-based standards category on Wikipedia</a> to look for potentially interesting namespaces for RSS feeds, I stumbled upon <a href="https://xproc.org/" target="_blank">XProc</a>. XProc is an XML schema that lets you define pipelines, particularly to process XML data. This reminded me of <a href="https://tildegit.org/lucidiot/itsb/src/commit/01c48a495059c54022b768e02a199fa8b5474077/itsb.xml" target="_blank">the main XML file of ITSB</a>, which holds both the contents of its homepage and the instructions to generate the hundreds of feeds it serves. A series of <abbr title="eXtensible Stylesheet Language Transformations">XSLT</abbr> turned that file into either the HTML homepage, an OPML containing all the feeds, or a Bash script that can be executed to generate all of the feeds.</p>
        <p>XProc looked like an interesting path to rewrite ITSB entirely and make it go beyond only generating feeds for transport accident investigation reports, which is something I have been thinking about for a while. However, the only mature implementations of XProc appear to be in Java, which is a hard no in most of my projects. Searching for <kbd>xproc</kbd> on GitHub made me find <a href="https://github.com/xquery/xproc.xq" target="_blank">xproc.xq</a>, an XProc implementation that relied on a Java implementation of another strange language, <a href="https://www.w3.org/TR/xquery-31/" target="_blank">XQuery</a>.</p>
        <p>XQuery, the <em>XML Query Language</em>, is an extension of <a href="https://www.w3.org/TR/xpath-31/" target="_blank">XPath</a>, a language that you probably encountered if you have been working with XML for a while. XPath is used within XSLT, and it's often one of the quickest ways to extract something from an XML document with most XML libraries if you don't want to deal with the complexity of converting between the XML paradigm and your programming language's. You can even use it within your browser, with the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate" target="_blank"><code>Document.evaluate()</code></a> method of the <abbr title="Document Object Model">DOM</abbr> <abbr title="Application Programming Interface">API</abbr>.</p>
        <p>While XPath is mostly meant to give a succint way to describe a filter on XML data, XQuery goes beyond that and allows iterating on and processing that XML. You can probably rewrite any XSLT into an XQuery script, and it will probably be easier to read. XQuery allows declaring functions, using variables, etc. and even provides a syntax that reminds me of <abbr title="Structured Query Language">SQL</abbr> and <abbr title="SPARQL Protocol And RDF Query Language">SPARQL</abbr>:</p>
        <figure>
          <pre>for $galaxy in //galaxy, $planet in .//planet
group by $galaxy, $type as xs:string := $planet/@type
where count($planet) > 3
group by $type
let $count := count($galaxy)
stable order by $count descending
count $i
return &lt;type id="{$i}" name="{$type}" count="{$count}" /&gt;
</pre>
          <figcaption>Example of an XQuery <abbr title="For, Let, Where, Order by, Return">FLWOR</abbr> query, pronounced <em>flower</em></figcaption>
        </figure>
        <p>This example, in an imaginary XML document holding the universe, computes how many galaxies have at least three planets of a given type, then returns those planet types, starting with the type with the most galaxies, and including a unique identifier. The ordering is marked as stable, forcing the XQuery implementation to order any types that have the same count in the same order on every execution. This is a quite complicated expression, but you can do way worse in XQuery. This would probably be doable with an XSLT, but it would definitely be very painful.</p>
        <p>The XProc implementation I found in XQuery was using some <a href="https://www.progress.com/marklogic/server" target="_blank">MarkLogic Server</a> extensions. It is a document-oriented database that lets you run either XQuery or JavaScript to query its data, and it is proprietary, so I was definitely not interested in trying to use it. A fun thing to note however is it that it also provided unit tests via <a href="https://robwhitby.github.io/xray/" target="_blank">xray</a>. You know you've got a strong query language when you can have a unit testing framework for it!</p>
        <p>I went looking for an open-source XQuery implementation that does not require Java, and that could provide enough vendor-specific extensions to replace those used within xproc.xq. I first found <a href="http://www.zorba.io/home" target="_blank">Zorba</a>, basically MarkLogic Server but open-source, and it provided an impressive amount of extensions. You can even <a href="http://www.zorba.io/documentation/latest/modules/connectors/sqlite" target="_blank">interact with SQLite databases</a> in it, to use a query language within a query language. Unfortunately, Zorba is an incredible mess to build, so I quickly gave up trying to package it for Alpine Linux and tried to find something else.</p>

        <h3>Xidel</h3>
        <p>I gave up for a little while, then stumbled upon <a href="https://www.videlibri.de/xidel.html" target="_blank">Xidel</a>, an open-source tool written in Pascal that supports applying CSS selectors, XPath queries, XQuery scripts, as well as JSONiq, a JSON equivalent of XPath and XQuery that got merged into XPath and XQuery 3.1. It can make HTTP requests, parse HTML (not just XHTML), submit HTML forms found in pages, interact with the filesystem, run other processes, and more.</p>
        <p>It could allow me to merge every single of the tools that I use in ITSB into just one dependency. And that dependency is just one statically compiled executable that I can easily download automatically in scripts if I need it. And Pascal can be compiled on <a href="https://wiki.freepascal.org/Platform_list" target="_blank">a lot of platforms</a>. Xidel does work on Windows XP!</p>
        <p>I started playing around with it, and very quickly decided to rewrite my NHC OPML generator with it to drop the Node.js, oq and jq dependencies. That is how I ended up with <a href="https://tildegit.org/lucidiot/rsrsss/src/commit/db7bc7d82802c219245ad7d3f40188ce67111b82/xquery/opml/noaa/nhc.xqy" target="_blank">the current implementation of the NHC generator</a>.</p>
        <p>I then <a href="https://tildegit.org/lucidiot/rsrsss/commit/79daa5d69032be42fba8036421a3327db5d28945" target="_blank">rewrote the CSS sprites generator</a>. I use a single image for all of the icons displayed in the web version of RSRSSS, and some CSS to take just a portion of the image each time to get one icon at a time. I also took the time to optimize the CSS.</p>
        <p>That sent me <a href="https://status.cafe/statuses/33023" target="_blank">on a roll</a>, and I started writing a whole bunch of XQuery scripts, including one to <a href="https://tildegit.org/lucidiot/rsrsss/commit/0f0ed2084b59002b9ab1afb8d38f5941ff7fa4a6" target="_blank">use the W3C Feed Validation Service from the command line</a>, and started looking for websites that would give me good OPML files to make.</p>
        <p>That's how there has been a wave of OPML files coming in recently. I just want more excuses to write in XQuery! If I find the motivation to work on ITSB again, I will definitely be introducing Xidel in it and start slowly converting everything to it. I have also considered using it as a static site generator, and for a few other projects.</p>
        <p>In some email exchanges, I have dubbed Xidel the <em>Overwhelmingly Powerful Mother Of All Legendary XML/HTML/JSON Processor of Doom</em> due to how impressed I was with how versatile it, and XQuery, are.</p>
        <p>So, if you find yourself trying to extract data from HTML, XML or JSON documents, do check out <a href="https://www.videlibri.de/xidel.html" target="_blank">Xidel</a>. It might not be as trendy as other tools like jq, but it is a lot more powerful.</p>
      ]]></description>
    </item>

    <item>
      <title>windows93</title>
      <pubDate>Sun, 24 Dec 2023 11:34:37 +0100</pubDate>
      <guid isPermaLink="false">windows93</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://www.windows93.net/rss/</link>
      <description><![CDATA[
        <p>Something like 15 years ago, back when I was still excited by tons of things with computing, and not tired of where the whole industry is going thanks to capitalism, I discovered a service called <em>Desktoptwo</em>, and more generally the concept of a WebOS.</p>
        <p>Desktoptwo was emulating some mix of the Windows, Mac and Linux desktop experiences, in a web browser. You had a few simple apps available like a notepad, and some storage space to keep your files on their servers. You could also use OpenOffice Writer, Calc and Impress: those would open a remote desktop connection within the browser to the actual OpenOffice running on their servers. It was quite impressive for the time.</p>
        <p>At a similar time, I had also played with the Microsoft Office 2007 "Test Drive", powered by Runaware. Using Internet Explorer only, you could for a short amount of time play around with Office 2007 on a Windows XP virtual machine, using Citrix. Runaware also had other demos running, including one for Sage. I remember spending a lot of time just messing with those virtual machines, without knowing anything about the technology that made this possible yet. I was like 10 years old!</p>
        <p>A few years later, I had found eyeOS, yet another WebOS, but that you could self-host this time. It had more applications available, but they were less interesting—the whole thing was more meant to be a demo of what apps you could create with it. They had something akin to an app store. I tried both their own demo instance and hosted my own, as I had learnt a bit more about webservers by that time.</p>
        <p>I now tend to be wary of large piles of JavaScript like those as the current state of the JavaScript ecosystem tends to make everything worse, so I don't generally care much about the current attempts at making a new WebOS, like <a href="https://www.os-js.org/" target="_blank">OS.js</a>… unless they are fun.</p>
        <p>Windows 93 is a pretty well done recreation of the Windows 95 user interface that started in 2014. It has a community that provided plenty of new apps to give the system a lot of content and fill it with weird jokes and "viruses". This is definitely not meant to be a replacement for a desktop OS like Desktoptwo or eyeOS attempted, and just a weird bundle of apps and games that mix the modern web and 30-year-old designs.</p>
        <p>Their RSS feed gives some rare status updates about the project. I thought the project had been pretty much dead by now, since the feed had gotten no updates at all in a long while, but they announced that they are working on a full rewrite. Version 3 will be open source, and it will be based on <a href="https://github.com/windows93dotnet/sys42" target="_blank">Sys42</a>, their own custom framework that skips one of the worst parts of modern JavaScript (Webpack) and allows building any web OS, not just a whimsy Windows 95 clone.</p>
        <p>I am impressed by how much effort people sometimes put into these projects.</p>
      ]]></description>
    </item>

    <item>
      <title>Make an Atom feed for a single HTML page in two minutes</title>
      <pubDate>Sun, 31 Dec 2023 23:38:35 +0100</pubDate>
      <guid isPermaLink="false">html-journal</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tool</category>
      <link>https://journal.miso.town/</link>
      <description><![CDATA[
        <p>If you happen to be writing your blog on a single HTML5 page, or are planning to, then you might be interested in using <a href="https://journal.miso.town/" target="_blank">HTML Journal</a>. This simple tool from the cool <a href="https://m15o.net/" target="_blank">m15o</a> lets you convert your webpage into an Atom feed, provided you follow some rather simple rules:</p>
        <ul>
          <li>Have one, and only one, <code>&lt;h1&gt;</code> tag. That will be your feed's title.</li>
          <li>Have each blog post surrounded in <code>&lt;article&gt;&lt;/article&gt;</code> tags.</li>
          <li>Have each blog post start with an <code>&lt;h2&gt;</code> tag, whose contents should start with an ISO 8601 date: <code>2023-02-31 Climbing the Reichstag dressed as Spider-Man</code>. The date will be the Atom entry's date, and the rest will be the post's title.</li>
          <li>Have literally anything else within that article; that will be the post's content.</li>
        </ul>
        <p>If you like a verbose specification, well <a href="https://m15o.ichi.city/site/subscribing-to-a-journal-page.html" target="_blank">there's one</a>. But the list above is the gist of it really.</p>
        <p>Once you've got your page available somewhere online, you can use <code>https://journal.miso.town/atom?url=</code> followed by your page's URL to get a feed. Or you can use <a href="https://journal.miso.town/journal-to-atom" target="_blank">this form</a> if you can't be bothered with URL-encoding the URL, which is definitely understandable. You can also <a href="https://journal.miso.town/validate-by-url" target="_blank">use a validator</a>.</p>
        <p>There are plenty of HTML-to-RSS tools, including some that use CSS selectors, let you do custom scripting, or are tailored to one specific platform like Twitter. But I really like the simplicity of HTML Journal: Just structure the page in the spirit that HTML5 intends, and suddenly, you've got a feed.</p>
        <hr />
        <p>This is the 100th post on RSRSSS, and it recently became three years old. Thanks for following along, and I'll see you next year!</p>
      ]]></description>
    </item>

    <item>
      <title>Make an Atom feed for a bunch of HTML pages in two minutes</title>
      <pubDate>Sun, 07 Jan 2024 16:45:07 +0100</pubDate>
      <guid isPermaLink="false">html-blog</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tool</category>
      <link>https://blog.miso.town/</link>
      <description><![CDATA[
        <p>Last time, I shared a neat tool called <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#html-journal">HTML Journal</a> to create an Atom feed from a webpage that follows a rather simple structure. But what happens if you have a lot of pages, or can't have your content on a single page? Here comes <a href="https://blog.miso.town/" target="_blank">HTML Blog</a>, from the same creator, with the same spirit. This time, you have the following requirements:</p>
        <ul>
          <li>Have one, and only one, <code>&lt;h1&gt;</code> tag. That will be your feed's title.</li>
          <li>Have an unordered list (<code>&lt;ul&gt;</code>) to list all your pages.</li>
          <li>In each list item (<code>&lt;li&gt;</code>), have a <code>&lt;time&gt;</code> tag to specify the ISO 8601 date of the post. That will be the Atom entry's date.</li>
          <li>In each list item, have a <code>&lt;a&gt;</code> tag. The <code>href</code> should point to the page of your post, and the link's contents will be the post's title.</li>
        </ul>
        <p>Just like with HTML Journal, there is <a href="https://m15o.ichi.city/site/subscribing-to-a-blog.html" target="_blank">a longer specification</a> for this.</p>
        <p>And just like with HTML Journal, you can use <code>https://blog.miso.town/atom?url=</code> followed by the blog's URL, or use <a href="https://blog.miso.town/blog-to-atom" target="_blank">this form</a>, and you get <a href="https://blog.miso.town/validate-by-url" target="_blank">a validator</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>Dev Zines</title>
      <pubDate>Sun, 14 Jan 2024 18:30:27 +0100</pubDate>
      <guid isPermaLink="false">devzines</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://devzines.glitch.me/rss</link>
      <description><![CDATA[
        <p>A list of zines related to software development or just tech in general, along with tools, tutorials, templates to create zines, and events such as zine fairs. An interesting random find from Tumblr. It doesn't seem to be getting many updates unfortunately!</p>
      ]]></description>
    </item>

    <item>
      <title>Another reason why feeds won't die</title>
      <pubDate>Sun, 21 Jan 2024 21:16:10 +0100</pubDate>
      <guid isPermaLink="false">long-live-rss</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Opinion</category>
      <description><![CDATA[
        <p>I will occasionally hear about the neverending debate on whether or not RSS and Atom feeds are dead, or are dying, or will die. This debate has been ongoing ever since the mere concept of feeds started showing up online. The most common arguments nowadays are that nobody uses RSS feeds anymore now that Google Reader has shut down and that everyone just uses social media. But as I have shown a few times in this feed, feeds are far from about to die. Sure, maybe Google Reader shutting down has made feeds less visible, or may have caused a small dip in the number of subscribers to some feeds. Sure, maybe social media makes people care about feeds less, but that's because they just don't care at all about the content of said feeds and don't need tools to handle that content, it's not a technical issue or something that obsoletes feeds.</p>
        <p>But here's an argument that I don't remember ever seeing in this constant bickering: the fact that there are technologies out there that rely on feeds. Moving those away from feeds would be very costly. Here are a few use cases that I found while going down different rabbit holes.</p>

        <h3>Podcasts</h3>
        <p>Podcasts are still very much popular. While most people nowadays will be listening to podcasts through some streaming services like Spotify, iTunes, or podcast-specific platforms, podcasts started out just as <code>&lt;enclosure&gt;</code> tags within RSS feeds, and that's how those platforms fetch them.</p>
        <p>Spotify imports podcasts from RSS feeds and have <a href="https://providersupport.spotify.com/article/podcast-delivery-specification-1-9" target="_blank">a specification</a> for how they parse them. They also <a href="https://support.spotify.com/us/podcasters/article/your-rss-feed/" target="_blank">provide a feed</a> if you are hosting your podcast on Spotify directly, so that you can share it elsewhere. All podcast hosting platforms provide feeds.</p>
        <p>iTunes <a href="https://podcasters.apple.com/support/823-podcast-requirements" target="_blank">relies on feeds</a>. They have <a href="https://help.apple.com/itc/podcasts_connect/#/itcb54353390" target="_blank">their own XML namespace</a>, which is likely to be found on pretty much every podcast feed as that became a <em>de facto</em> standard namespace for podcasts before the <a href="https://podcastnamespace.org/" target="_blank">podcast namespace</a> showed up.</p>
        <p>Google Podcasts <a href="https://support.google.com/podcast-publishers/answer/9889544?hl=en" target="_blank">feeds on feeds</a>, and also allows subscribing to an RSS feed directly without it having to be submitted to Google.</p>

        <h3>News</h3>
        <p>Obviously, a large amount of feeds are dedicated to news. Every single news website out there has an RSS or Atom feed hidden somewhere. Most of them will be sharing a link to it, either with an RSS icon somewhere on the page or with <a href="https://www.rssboard.org/rss-autodiscovery" target="_blank">RSS Autodiscovery</a>, but even if they don't, they still do have a feed. They have to have a feed in order to survive.</p>
        <p>How can I say that so confidently? Well, because <a href="https://support.google.com/news/publisher-center/answer/9545414" target="_blank">Google News feeds on feeds</a>, <a href="https://helpcenter.microsoftstart.com/kb/articles/43-onboarding-a-new-feed-with-fmt" target="_blank">Microsoft Start and MSN.com feed on feeds</a>, <a href="https://support.google.com/faqs/answer/9396344" target="_blank">Google Assistant feeds on feeds</a>, <a href="https://about.flipboard.com/rss-guidelines/" target="_blank">Flipboard feeds on feeds</a>, and just about any other news aggregator uses feeds.</p>
        <p>It's the standard way to aggregate news articles, and a lot of people will start with a news aggregator to get their news, particularly Google News. It has so much weight on how news are accessed from that setting <code>news.google.com</code> as your referrer on HTTP requests can unlock paywalls and that <a href="https://en.wikipedia.org/wiki/Google_News#Compensation_for_disseminating_access_to_news" target="_blank">various laws have been drafted</a> to make Google News pay news publishers.</p>

        <h3>Ads</h3>
        <p>Google has leaned rather heavily on RSS, including for ads. For example, I randomly found <a href="https://support.google.com/admanager/answer/7501017" target="_blank">this sample feed</a> for an ad tech called Dynamic Ad Insertion, which sounds like it is how <del>soulless people</del> marketers can insert ads into livestreams and VOD. <a href="https://support.google.com/merchants/answer/160589" target="_blank">Google Shopping also feeds on feeds</a>. Those feeds can be <a href="https://github.com/w3c/feedvalidator/blob/ff89646c3f6869058dfcf5a3cf9b6ead49bbe42d/testcases/gbase/rss2/vehicles2.xml" target="_blank">really detailed</a> because of <a href="https://web.archive.org/web/20080915080232/http://base.google.com/base/attribute_list.html" target="_blank">Google Base</a>, yet another product they killed. <a href="https://support.google.com/docs/answer/3093337" target="_blank">Google Docs supports feeds</a>. They probably are in other places, but since Google's ads are incredibly obfuscated, I don't even want to try and dig deeper into their unhelpful help to find more examples.</p>
        <p>Google Base's legacy is also found at other companies: Facebook lets advertisers send them a list of products as <a href="https://developers.facebook.com/docs/marketing-api/catalog/reference#example-atom-xml-feed-commerce" target="_blank">RSS and Atom feeds with Google Base attributes</a>.</p>

        <h3><abbr title="Geographic Information Systems">GIS</abbr></h3>
        <p>Real-time information that includes geolocations can be quite important, both in the public and private sectors. Waze for Cities <a href="https://support.google.com/waze/partners/answer/13458165" target="_blank">exports data as GeoRSS</a>. A lot of GIS software will support GeoRSS imports. And the <abbr title="Geography Markup Language">GML</abbr> and <abbr title="Keyhole Markup Language">KML</abbr> formats supports automatic updates. KML, the format behind Google Earth's data, is supported by the <a href="https://validator.w3.org/feed/" target="_blank">W3C Feed Validation Service</a> for a reason.</p>

        <h3>Overcomplicated enterprise apps</h3>
        <p>Probably the only reason why <a href="https://learn.microsoft.com/en-us/dotnet/api/system.servicemodel.syndication.syndicationfeed" target="_blank">the .NET Framework has a feed parser</a> is because of <a href="https://learn.microsoft.com/EN-US/dotnet/framework/wcf/feature-details/wcf-syndication" target="_blank">feed support in <abbr title="Windows Communication Foundation">WCF</abbr>.</a> <abbr title="Windows Communication Foundation">WCF</abbr> aims to represent business processes that mix a whole bunch of other apps together, like how hiring someone will require HR approval on some particular app, then payroll needs to be notified, security issues a badge, etc. You draw the diagrams of the processes in Visual Studio, implement every step as a bunch of .NET code that probably calls out to other apps, and then have a WCF server somewhere to handle that stuff.</p>
        <p>IBM has <a href="https://www.ibm.com/docs/en/baw/23.x?topic=format-interface-atom-feed" target="_blank">an equivalent support in Business Automation Workflow</a>.</p>
        <p>Oracle HCM <a href="https://docs.oracle.com/en/cloud/saas/human-resources/23d/farws/Working_with_Atom.html" target="_blank">provides Atom feeds</a> so that other apps can be notified of changes on more HR stuff.</p>
        <p>Corporate applications are probably among the slowest-moving software out there, so it's very unlikely that those will drop their support for feeds any time soon.</p>

        <h3><abbr title="Too long; didn't read">TL;DR</abbr>: Money</h3>
        <p>Those few examples are far from an exhaustive list and they just show some of the things I have stumbled upon, but they are enough to prove that behind RSS and Atom feeds, there is <em>money</em>. And if a technology has been made necessary to make a profit somewhere, then changing it will be too risky and maintaining it becomes essential to capitalists. Even if the general public completely stops using feeds, they will still be out there somewhere, and thus tools, software libraries will still be out there to support them, and nothing will stop anyone from still using feeds.</p>
      ]]></description>
    </item>

    <item>
      <title>Open Source Musings</title>
      <pubDate>Mon, 29 Jan 2024 19:36:11 +0100</pubDate>
      <guid isPermaLink="false">open-source-musings</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://opensourcemusings.com/feed.xml</link>
      <description><![CDATA[
      <p>There are plenty of websites showcasing various open source software projects, and plenty of websites encouraging you to use Linux, but a blog that strongly goes against <em>techies</em> and instead focuses solely on going FOSS for everyone but them is a bit rarer. <a href="https://scottnesbitt.net" target="_blank">Scott Nesbitt</a> has multiple blogs that I might showcase in here, and also has strong opinions on tech. <em>Open Source Musings</em> is his blog where he shows how he uses Linux to write, edit images, blog, read ebooks, or just browse the web, things that are not aimed at a highly skilled technical audience; how to use Linux when you just want to use a computer every sometimes without being a nerd.</p>
      ]]></description>
    </item>

    <item>
      <title>Houston TranStar</title>
      <pubDate>Sun, 04 Feb 2024 18:10:06 +0100</pubDate>
      <guid isPermaLink="false">transtar-opml</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Transport</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/transtar.opml</link>
      <description><![CDATA[
        <p>I am writing this while sitting on a concrete barrier on a highway. Farmers all around Europe are angry, and in France this results in them blocking some highways. In my city, this means turning the highway into a urban park. People are walking around, cycling, playing tennis, having picnics, or even paragliding, and I am here, writing a blog post about RSS feeds. I mean, what better than a highway to explore the information superhighway and find feeds about other highways?</p>
        <p>I wanted to find a transportation themed feed to post here due to the weird occasion. I found <a href="https://traffic.houstontranstar.org/rss/rss_info.aspx" target="_blank">the Houston TranStar RSS feeds</a>, for information about the various highways around Houston. I made <a href="https://envs.net/~lucidiot/rsrsss/opml/transtar.opml" target="_blank">yet another OPML file</a> to list all of those feeds if you feel like adding them all.</p>
        <p>So I can now say that I have walked onto a highway to write an XQuery script, while watching a cyclist pass by while shouting "The road is ours! The world belongs to us!" This is a very… interesting day.</p>
      ]]></description>
    </item>

    <item>
      <title>Press F for deleted entries on Atom feeds</title>
      <pubDate>Sun, 11 Feb 2024 17:11:12 +0100</pubDate>
      <guid isPermaLink="false">tombstones</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tip</category>
      <link>https://www.rfc-editor.org/rfc/rfc6721.html</link>
      <description><![CDATA[
        <p><a href="https://www.rfc-editor.org/rfc/rfc6721.html" target="_blank">RFC 6721</a>, <em>The Atom "deleted-entry" Element</em>, defines an XML namespace to mark some entries in an Atom feed as having been deleted. Deleting an entry from a feed usually makes no change for feedreaders, as they just assume that a feed only includes a portion of the articles and a deleted article just went over the size limit of the feed. This element is supposed to explicitly tell feedreaders to destroy this entry.</p>
        <p>I particularly like the URL of this namespace.</p>
        <figure>
          <pre>&lt;feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:at="http://purl.org/atompub/tombstones/1.0"
&gt;
  &lt;at:deleted-entry
    ref="tag:example.org,2032:/entries/1"
    when="2032-09-11T12:46:00Z"
  /&gt;

  &lt;at:deleted-entry
    ref="tag:example.org,2032:/entries/2"
    when="2032-09-11T13:03:00Z"
  &gt;
    &lt;at:by&gt;
      &lt;name&gt;Chuck Norris&lt;/name&gt;
      &lt;email&gt;chucknorris@example.org&lt;/email&gt;
    &lt;/at:by&gt;
    &lt;at:comment&gt;Chuck Norris did not like this post.&lt;/at:comment&gt;
  &lt;/at:deleted-entry&gt;
&lt;/feed&gt;</pre>
          <figcaption>Example of deleted entries within an Atom feed</figcaption>
        </figure>
        <p>The specification includes various considerations on ensuring that the entry was indeed deleted by the feed's authors and not someone else, as well as supporting the aggregation of deleted entries from multiple feeds into one. It is also possible to have a separate XML file that only contains the <code>&lt;deleted-entry&gt;</code> tag, which would have a MIME type of <code>application/atomdeleted+xml</code>, with an extension of <code>.atomdeleted</code>. Do check out the RFC if you want to learn more.</p>
        <p>Of course, this is totally unreliable, since any reader that does not support this namespace will ignore it completely, and some potentially evil readers might even highlight the entry as needing to become another example of the <a href="https://en.wikipedia.org/wiki/Streisand_effect" target="_blank">Streisand effect</a>. But in some applications, such as automated processing of Atom feeds for synchronizing some data, knowing for sure that something has been removed can be useful.</p>
        <p>I searched for code that was referencing this namespace and found that a few YouTube Atom feed parsers do handle <code>deleted-entry</code> elements, so it might be possible that YouTube uses those tags. See <a href="https://github.com/suisei-cn/pystargazer/blob/4c677d0695c22e168477ca8ec94f5bb36a5a565b/pystargazer/plugins/youtube/__init__.py#L176" target="_blank">here</a> and <a href="https://github.com/lichess-org/lila/blob/9ffa9d8ff6da37a4a1356f48f3643b44f66e2c08/modules/streamer/src/main/YouTubeApi.scala#L71" target="_blank">here</a>.</p>
        <p>Nothing stops you from adding <code>&lt;at:deleted-entry&gt;</code> elements to RSS feeds as well, just like how other Atom extensions can already be used there. But most feed readers will skip over this namespace in Atom feeds, so it is likely that almost nobody will support this on RSS feeds.</p>
        <p>And if you were expecting actual tombstones from this namespace, well do know that <a href="https://www.eunicetoday.com/taxonomy/term/462/feed" target="_blank">RSS feeds for obituaries</a> are a thing. You're welcome.</p>
      ]]></description>
    </item>

    <item>
      <title>tempr.email</title>
      <pubDate>Sun, 18 Feb 2024 16:13:21 +0100</pubDate>
      <guid isPermaLink="false">tempr-email</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <description><![CDATA[
        <p>Thanks to marketing and analytics, temporary email addresses are too often necessary to keep some amount of control over your inbox. <a href="https://tempr.email/" target="_blank">tempr.email</a>, originally discard.email, is a service that provides such addresses, with a rather wide range of domains as well as the possibility to use your own custom domain. While it is very likely that all of the listed domains are included in lists of temporary email domains used by some websites to block them, you can still hope that at least one of these domains is going to work as the lists used by websites may not be fully up to date. If I need a temporary address, and can't find any credentials on <a href="https://bugmenot.com/" target="_blank">BugMeNot</a>, I will probably be using tempr.email.</p>
        <p>I recently discovered that it has <abbr title="Really Simple Syndication">RSS</abbr> 2.0 and Atom support, to let you monitor for emails received at your trash address. To activate this, you need to use an address on a domain that supports locking addresses with a password. Those domains are marked with the <code>(PW)</code> suffix on the homepage. Pick an address that is unlikely to have already been used, and you can then set a password on the web UI. The password is removed after 3 months of inactivity.</p>
        <p>Once you have a password, you can access the RSS and Atom feeds using the following URLs:</p>
        <ul>
          <li><code>https://tempr.email/en/rss/[email address]:[MD5 hash of your password]</code></li>
          <li><code>https://tempr.email/en/atom/[email address]:[MD5 hash of your password]</code></li>
        </ul>
        <p>For example, if your address is <code>nope@gmai.com</code> and your password is <code>hunter2</code>, then your feeds will be the following:</p>
        <ul>
          <li><code>https://tempr.email/en/rss/nope@gmai.com:2ab96390c7dbe3439de74d0c9b0b1767</code></li>
          <li><code>https://tempr.email/en/atom/nope@gmai.com:2ab96390c7dbe3439de74d0c9b0b1767</code></li>
        </ul>
        <p>Note that if you are trying to use <code>md5sum</code> to compute the MD5 hash, do not forget to use <code>print</code> or <code>printf</code>, not <code>echo</code>, because <code>echo</code> will add a line break character that will also be hashed.</p>
        <figure>
          <pre># Wrong hash!
$ echo hunter2 | md5sum
6a0f0731d84afa4082031e3a72354991  -

# Correct hash
$ printf hunter2 | md5sum
2ab96390c7dbe3439de74d0c9b0b1767  -
</pre>
          <figcaption>Hashing the password with <code>md5sum</code></figcaption>
        </figure>
        <p>That's neat. I like the idea of emails to RSS feeds, since it lets you centralize even more things into your feedreader. There are obvious security concerns here with the automatic password removal, or the fact that MD5 hashes are used, which could imply passwords are stored as MD5 hashes, or worse, a <a href="https://plaintextoffenders.com/" target="_blank">plain text offender</a> status. But it doesn't sound like it would be that difficult to secure your feed a little harder and get any email inbox as an RSS feed.</p>
      ]]></description>
    </item>

    <item>
      <title>webcomic name</title>
      <pubDate>Sun, 25 Feb 2024 14:52:42 +0100</pubDate>
      <guid isPermaLink="false">webcomicname</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://webcomicname.com/rss</link>
      <description><![CDATA[
        <p>This is a quite well-known comic, created by <a href="https://en.wikipedia.org/wiki/Alex_Norris_(cartoonist)" target="_blank">Alex Norris</a> and hosted on Tumblr. Most posts will star a pink blob, with three panels: one introduces a situation, the second adds a problem, and in reaction to it, the pink blob says <cite>oh no</cite> in the final panel. While it was intended as a parody of <em>relatable comics</em>, a genre of webcomics widely shared on social media involving common situations in real life that most of us can relate to, the parody part is not often well understood and many see it as a relatable comic in itself. I did too before actually researching what to say in this description!</p>
        <p>The comic updates less regularly now, but it is not dead at all, and the occasional comic showing up in my feedreader never fails to make me laugh at least a little. A nice addition to a large pile of feeds if you want a break from reading news articles from time to time.</p>
      ]]></description>
    </item>

    <item>
      <title>Sweet Home 3D</title>
      <pubDate>Tue, 05 Mar 2024 14:19:28 +0100</pubDate>
      <guid isPermaLink="false">sweethome3d</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.sweethome3d.com/blog/rss.xml</link>
      <description><![CDATA[
        <p>In 2008, while I was in <em>collège</em> (the French middle school) and before I even knew about the concept of open source software, I discovered Sweet Home 3D on a laptop that my cousins had recovered from a nearby dump.</p>
        <p>That laptop was running Windows XP Pro. My cousins knew about the trick where you can reboot into Safe Mode and get access to a usually passwordless <em>Administrator</em> account, but they were only used to the Home Edition login screen where you can just click into the account, not to the Pro login screen where you have to type the username and password. I tried typing in <kbd>Administrator</kbd> without a password, and did get into the laptop, so we could play games on that laptop during our holidays.</p>
        <p>I brought that laptop to a skate park and drew a scooter on Paint, then put it into an <abbr title="Rich Text Format">RTF</abbr> document next to a cookie recipe, making this the oldest document that I created and still have in my archives.</p>
        <p>A few months later, I stumbled upon Sweet Home 3D again, during a time where I was playing the Sims 2 and 3 with a classmate, and played with it and other 3D software to design random homes. I say design homes, but really I was just creating a new plan, drawing a house, and giving up halfway through or just making Sweet Home 3D render complete nonsense. I think more houses should have all of their furniture upside down, that sounds much more practical.</p>
        <p>Anyway, I still do occasionally play with it nowadays. I found out that it was made by a French developer, and that the French forensics service got them to add more models, so you can now put shotguns in your houses! And most importantly of course, it has a blog with an <a href="https://www.sweethome3d.com/blog/rss.xml" target="_blank">RSS feed</a> and an <a href="https://www.sweethome3d.com/blog/atom.xml" target="_blank">Atom feed</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>Build a service status page as an RSS feed</title>
      <pubDate>Sun, 10 Mar 2024 17:48:57 +0100</pubDate>
      <guid isPermaLink="false">servicestatus</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">XSD</category>
      <link>https://envs.net/~lucidiot/rsrsss/xsd/servicestatus.xsd</link>
      <description><![CDATA[
        <p>It is quite common nowadays for websites, or just any Internet-powered application or service, to have a webpage somewhere reporting on the status of said service, to the extent that many companies and other services exist just to provide those. Those status services often include e-mail alerts that you can subscribe to to get notified of an outage or a planned maintenance on the service. <a href="https://www.atlassian.com/software/statuspage" target="_blank">Statuspage</a> is one such service, one of the most well known due to it having been vored by Atlassian. Statuspage doesn't just provide e-mails though, it also has feeds! An <a href="https://metastatuspage.com/history.rss" target="_blank"><abbr title="Really Simple Syndication">RSS</abbr> feed</a> and an <a href="https://metastatuspage.com/history.atom" target="_blank">Atom feed</a> are available, providing a history of the planned maintenances or incidents.</p>
        <p>Unfortunately, those feeds are annoying to deal with for machines. If you want to tell anything about the service's status somewhere else, scraping data from the feeds will be just as annoying, if not more, than the HTML document. We can do better though, and we have been able to do better for over twenty years.</p>
        <p>The <a href="https://web.resource.org/rss/1.0/modules/servicestatus/" target="_blank"><abbr title="Resource Description Framework">RDF</abbr> Site Summary 1.0 Service Status module</a> is one of many forgotten extensions to <abbr title="RDF Site Summary">RSS</abbr> 1.0. In an incredible plot twist you could never expect from its name, it is meant to report on a service's status, and provides some extra XML elements to help with that.</p>
        <figure>
          <pre>&lt;rss
  version="2.0"
  xmlns:ss="http://purl.org/rss/1.0/modules/servicestatus/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
    http://purl.org/rss/1.0/modules/servicestatus/
    https://envs.net/~lucidiot/rsrsss/xsd/servicestatus.xsd
  "
&gt;
  &lt;channel&gt;
    &lt;!-- ... --&gt;
    &lt;ss:aboutStats&gt;https://envs.net/~lucidiot/rsrsss/feed.xml#servicestatus&lt;/ss:aboutStats&gt;

    &lt;item&gt;
      &lt;!-- ... --&gt;
      &lt;ss:responding&gt;true&lt;/ss:responding&gt;
      &lt;ss:lastChecked&gt;1970-01-01T00:00:00+00:00&lt;/ss:lastChecked&gt;
      &lt;ss:lastSeen&gt;1970-01-01T00:00:00+00:00&lt;/ss:lastSeen&gt;
      &lt;ss:availability&gt;100&lt;/ss:availability&gt;
      &lt;ss:averageResponseTime&gt;0.5&lt;/ss:availableResponseTime&gt;
      &lt;ss:statusMessage&gt;Everything is fine.&lt;/ss:statusMessage&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;</pre>
          <figcaption>Example of an <abbr title="Really Simple Syndication">RSS</abbr> 2.0 feed with every optional Service Status module element in use</figcaption>
        </figure>
        <p>Using those extra elements, you can report in a more machine-readable format on how your service is doing. Every element in this namespace is optional, and you can use them to report on whether your service is working, when that was last checked, when the server last worked, how well it is working, how fast it is working, and leave a message for human consumption, usually to report about how you are doing on fixing a specific issue.</p>
        <p>The above example uses the <a href="https://www.w3.org/TR/xmlschema-1/#xsi_schemaLocation" target="_blank"><code>xsi:schemaLocation</code></a> attribute to point <abbr title="XML Schema Definition">XSD</abbr> validators to <a href="https://envs.net/~lucidiot/rsrsss/xsd/servicestatus.xsd" target="_blank">the schema</a> I wrote to validate this namespace, if you want to validate your feed very hard. The <a href="https://validator.w3.org/feed/" target="_blank">W3C Feed Validation Service</a> is aware of the existence of this namespace, so it won't warn about an unknown namespace, but it does not do any validation on its elements, so you'll need that schema to do any interesting validation.</p>
        <p>The overengineered <a href="https://envs.net/~lucidiot/rsrsss/xsl/style.xsl" target="_blank"><abbr title="Extensible Stylesheet Language Transformation">XSLT</abbr></a> used to display this feed in HTML in modern browsers has been updated and supports this namespace, so you could use it directly to roll a status page that is nothing but an RSS feed, if you don't want to duplicate information. You can <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#servicestatus" target="_blank">open this post in a compatible browser</a> to get a preview.</p>

        <h3>Reference</h3>
        <dl>
          <dt><code>&lt;<dfn>ss:aboutStats</dfn>&gt;</code></dt>
          <dd>
            <p>An <abbr title="Resource Description Framework">RDF</abbr> resource that should describe how the <code>availability</code> and <code>averageResponseTime</code> statistics are calculated in this feed. This should be used only on a <code>channel</code> element.</p>
            <p>Note that <a href="https://stackoverflow.com/a/48195644/5990435" target="_blank">anything is an RDF resource</a>, and there are many ways to serialize an RDF resource as XML. However, <a href="https://web.resource.org/rss/1.0/modules/servicestatus/" target="_blank">the official specification</a> only uses the form where the element just contains a URL, therefore this form is recommended. Feed generator implementers that do not know about RDF and its <a href="https://www.w3.org/TR/rdf-syntax-grammar/" target="_blank">XML representation</a> are likely to only use this form, and feed parser implementers are likely to only support this form.</p>
          </dd>
          <dt><code>&lt;<dfn>ss:responding</dfn>&gt;</code></dt>
          <dd>Whether or not the service is responding.</dd>
          <dt><code>&lt;<dfn>ss:lastChecked</dfn>&gt;</code></dt>
          <dd>The most recent time a check was performed, as a <a href="https://www.w3.org/TR/NOTE-datetime" target="_blank">W3C datetime</a>, a subset of ISO&nbsp;8601. You may want to have both the usual <code>&lt;pubDate&gt;</code> element and this element to share the same values. When the <code>responding</code> element is set to <code>true</code>, this should be exactly equal to <code>lastSeen</code>, meaning that this should be the end time of the last check, not the start time. If this was the start time, then <code>lastSeen</code> would be the end time, and they would not be equal.</dd>
          <dt><code>&lt;<dfn>ss:lastSeen</dfn>&gt;</code></dt>
          <dd>The most recent time a check was successful, as a <a href="https://www.w3.org/TR/NOTE-datetime" target="_blank">W3C datetime</a>, a subset of ISO&nbsp;8601. When the <code>responding</code> element is set to <code>true</code>, this should be exactly equal to <code>lastChecked</code>. When it is <code>false</code>, the difference between <code>lastSeen</code> and <code>lastChecked</code> should give an estimate of how long the service was down for.</dd>
          <dt><code>&lt;<dfn>ss:availability</dfn>&gt;</code></dt>
          <dd>An integer representing the percentage of availability, between 0 and 100. How this availability is calculated is left up to the implementer and should be described by the <code>aboutStats</code> element.</dd>
          <dt><code>&lt;<dfn>ss:averageResponseTime</dfn>&gt;</code></dt>
          <dd>A decimal number representing the average response time of the service in seconds. How this availability is calculated is left up to the implementer and should be described by the <code>aboutStats</code> element.</dd>
          <dt><code>&lt;<dfn>ss:statusMessage</dfn>&gt;</code></dt>
          <dd>A message intended for human consumption giving further details about the service's status. This could for example warn of a planned outage, or give updates on how an ongoing issue is being worked on.</dd>
        </dl>
      ]]></description>

      <ss:responding>true</ss:responding>
      <ss:lastChecked>2024-03-10T17:48:57+01:00</ss:lastChecked>
      <ss:lastSeen>2024-03-10T17:48:57+01:00</ss:lastSeen>
      <ss:availability>100</ss:availability>
      <ss:averageResponseTime>0.42</ss:averageResponseTime>
      <ss:statusMessage>If you can read this, then RSRSSS is definitely working.</ss:statusMessage>
    </item>

    <item>
      <title>EnviroFlash</title>
      <pubDate>Sun, 17 Mar 2024 20:54:51 +0100</pubDate>
      <guid isPermaLink="false">enviroflash</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Air quality</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">CAP</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/enviroflash.opml</link>
      <description><![CDATA[
        <p>Because the United States is a combination of all the bad things about the European Union and the bad things about a single country, anything that involves the federal government is a mess. AirNow is a demonstration of that mess, as a partnership between the <abbr title="Environmental Protection Agency">EPA</abbr> and a whole lot of other entites that provide air quality information, which are such a mess they are just better described (and sometimes officially described) as <em>local partners</em>. They provide three different services:</p>
        <ul>
          <li><a href="https://mdaqmd.enviroflash.org/" target="_blank"><dfn>AirNow-Tech</dfn></a> is the platform where air quality data is sent, and where it can also be extracted, analyzed, used by partners (not just local partners).</li>
          <li><a href="https://docs.airnowapi.org/" target="_blank"><dfn>AirNow API</dfn></a> provides APIs, data exports, etc. from AirNow-Tech. It requires a registration like AirNow-Tech, but this time anyone can register and get approved. The data exports are Atom feeds, but I am not including them since they are hidden behind that registration wall. To me, open data is not open if you have to register!</li>
          <li><a href="https://www.enviroflash.info/" target="_blank"><dfn>EnviroFlash</dfn></a> provides e-mail notifications for current air quality conditions, forecasts, and warnings to the general public. They also serve RSS feeds, as well as Atom feeds including <abbr title="Common Alerting Protocol">CAP</abbr> messages.</li>
        </ul>
        <p>Since EnviroFlash is the only truly open website of the list, this will be the one I am featuring here. <a href="https://feeds.enviroflash.info/" target="_blank">The feeds page</a> provides <a href="https://feeds.enviroflash.info/cap/aggregate.xml" target="_blank">an Atom feed</a> that aggregates all of the <abbr title="Common Alerting Protocol">CAP</abbr> messages nationwide, and lets you select a state. Selecting a state and submitting the form triggers a script that uses <abbr title="Asynchronous JavaScript And XML">AJAX</abbr> to display a table of all the feeds available for that state.</p>
        <p>Some states, like Alaska, have zero cities listed; in total, only 44 states have some feeds available. Each feed is specific to a city, and there are five different feeds for each city:</p>
        <ul>
          <li>The <a href="https://feeds.enviroflash.info/rss/forecast/264.xml" target="_blank">forecasted air quality</a> for today and tomorrow, as an RSS feed;</li>
          <li><a href="https://feeds.enviroflash.info/rss/actionDay/264.xml" target="_blank">Health advisories</a>, also known as "action days", as an RSS feed;</li>
          <li>The <a href="https://feeds.enviroflash.info/rss/realtime/264.xml" target="_blank">latest air quality information</a> for the area, as an RSS feed;</li>
          <li>The <a href="https://feeds.enviroflash.info/cap/264.xml" target="_blank">current air quality alert</a>, as a single <abbr title="Common Alerting Protocol">CAP</abbr> alert;</li>
          <li>An <a href="https://feeds.enviroflash.info/atom/264.xml" target="_blank">Atom feed for the current air quality alert</a>, with either a placeholder entry when there are no alerts, or an entry holding a <abbr title="Common Alerting Protocol">CAP</abbr> alert just like the above one.</li>
        </ul>
        <p>I wrote an XQuery script that lists all of the RSS and Atom feeds as well as the CAP alerts for all cities in all states, resulting in more than 3000 links, in <a href="https://envs.net/~lucidiot/rsrsss/opml/enviroflash.opml" target="_blank">one OPML file</a>. If you need to do some load testing on your feedreader, now you know what to use!</p>
        <p>EnviroFlash has made me discover CAP, the Common Alerting Protocol, a standard that I will look into in more detail in the future and that is designed to make emergency alerts more interoperable. I have already started to look into other sources of CAP alerts to learn by example.</p>
      ]]></description>
    </item>

    <item>
      <title>National Data Buoy Center</title>
      <pubDate>Tue, 02 Apr 2024 12:02:04 +0200</pubDate>
      <guid isPermaLink="false">noaa-ndbc</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/noaa/ndbc.opml</link>
      <description><![CDATA[
        <p>Just like on airplanes, the computers on ships are unlikely to be as modern as what you would expect elsewhere, and they also need high reliability, a goal that is both at odds with most innovations in the tech industry and with changes in general. This is probably one of the reasons why websites that cater to seafarers, or try to provide some form of automation for ships, are so <em>good</em>.</p>
        <p>Did you know that you can send FTP commands by e-mail to the <abbr title="National Oceanic and Atmospheric Administration">NOAA</abbr>'s Ocean Prediction Center to retrieve their data? You'll get an email back with whatever your FTP commands resulted in. There are other similar e-mail based services, because e-mail happens to be quite resilient and lightweight, so it's a great thing to send over satellite. Here's <a href="https://tgftp.nws.noaa.gov/fax/robots.txt" target="_blank">a text file</a> describing a few services, including the <abbr title="Ocean Prediction Center">OPC</abbr>'s own.</p>
        <p>Another of those cool services is the National Data Buoy Center, or NDBC for short. There are over a thousand buoys all over the oceans, both near the coasts and really far away from them, that send back weather or tsunami reports to various agencies, and the NDBC aggregates data from its own buoys and those of its international partners, as well as reports sent by ships. It provides the reports in various formats; text files, <abbr title="JavaScript Object Notation">JSON</abbr>, <abbr title="Keyhole Markup Language">KML</abbr>, etc., but most importantly of course, RSS.</p>
        <p>I <a href="https://tildegit.org/lucidiot/rsrsss/src/commit/a2ed54a98efe2235326a725f0222a493598a9020/xquery/opml/noaa/ndbc.xqy" target="_blank">slapped some XQuery</a> onto those RSS feeds to create yet another excessively large OPML file with over eight hundred feeds. You can get one feed for each buoy, but I found a way to get a feed of every observation at once.</p>
        <p>From <a href="https://www.ndbc.noaa.gov/station_page.php?station=61001" target="_blank">any station's page</a>, you can find a link to all the observations in the area, either as <a href="https://www.ndbc.noaa.gov/radial_search.php?lat1=43.400N&amp;lon1=7.800E&amp;uom=E&amp;dist=250">a webpage</a> or <a href="https://www.ndbc.noaa.gov/rss/ndbc_obs_search.php?lat=43.400N&amp;lon=7.800E" target="_blank">an RSS feed</a>.</p>
        <p>I found that the RSS feed version lets you change the default radius of 100 nautical miles to any other value using the <code>&amp;radius=</code> URL parameter followed by a number of miles. The maximum range is 10820 nautical miles, corresponding to half of the Earth's circumference. Since this is a radius, this means you can indeed select everything!</p>
        <p>Also note that this magical <em>everything</em> feed includes observations from ships, not just buoys, just so you can some extra spam.</p>
        <p>I don't know that much about the maritime industry, but from my understanding from reading accident reports and other weird technical documents, large ships pay to get weather reports tailed to their needs from private companies, and smol ships rely on the weather information of the local coast guard, broadcasted regularly over radio. I don't know if any of those feeds are used by anyone, or what they would be used for, but boy am I glad that that's a thing! There is something really cool about getting RSS items that come from random chunks of metal floating around the oceans.</p>
      ]]></description>
    </item>

    <item>
      <title>Microsoft Support articles</title>
      <pubDate>Sat, 04 May 2024 01:30:04 +0200</pubDate>
      <guid isPermaLink="false">ms-support</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/ms-support.opml</link>
      <description><![CDATA[
        <p>I am waiting for the delivery of a smol computer I got for 35 <abbr title="euros">european dollars</abbr> with shipping, a <a href="https://icecat.biz/en/p/samsung/np-n150-jp04fr/laptops-n150-jp04fr-5935581.html" target="_blank">Samsung N150-JP04FR</a>. The delivery is scheduled for May 7th, which would be 10 years and 1 month minus 1 day since extended support for Windows XP ended. Yep, we recently celebrated the tenth anniversary of XP's death. That will not stop me from using it! My Windows Server 2003 <a href="https://www.asus.com/commercial-desktop/eeebox_pc_eb1012p/" target="_blank">EeeBox</a> has me listed in Active Directory as a <em>Necromancer</em> for a good reason.</p>
        <p>I plan on triple-booting Windows XP, Windows 7 and Alpine Linux on that thing. Windows XP would be the main OS, Windows 7 is there to support XP by giving me access to more modern tools including <a href="https://ghidra-sre.org/" target="_blank">Ghidra</a>, and Alpine is there to support both of those by being actually up-to-date and far less bloated. Since I name all of my Windows systems after industrial disasters, I will be naming this one AZF, in reference to <a href="https://en.wikipedia.org/wiki/Toulouse_chemical_factory_explosion" target="_blank">an explosion at the AZF factory</a> in France, on September 21, 2001.</p>
        <p>While waiting for this new netbook to arrive, I am playing with my three Windows virtual machines, sometimes simultaneously as my main Linux computer could probably handle 20 of them. That makes me go through the various Microsoft documentations quite often, as well as of course the Internet Archive. While getting lost in a maze of broken links recovered through the Wayback Machine, I found a big <em>Subscribe to RSS Feeds</em> button on the <a href="https://support.microsoft.com/" target="_blank">Microsoft Support</a> website, and lo and behold, <a href="https://support.microsoft.com/en-us/rss-feed-picker" target="_blank">feeds</a>!</p>
        <p>They provide both RSS 2.0 and Atom feeds for every product available on their support website. The <code>&lt;select&gt;</code> control that lists those products includes some interesting products such as <code>DO_NOT_USE_Office Online Server</code>. The feeds are available for <a href="https://support.microsoft.com/en-us/worldwide" target="_blank">each language</a> of the website. With 80 languages, 2 feed formats and 204 products, we get <strong>32640 feeds!</strong></p>
        <p>You can thus try to import <a href="https://envs.net/~lucidiot/rsrsss/opml/ms-support.opml" target="_blank">the Microsoft Support feeds OPML file</a>, the largest OPML file I have ever produced. Over five megabytes of feeds! You can probably use that for some really good load testing of your feedreader.</p>
      ]]></description>
    </item>

    <item>
      <title>Transit Maps</title>
      <pubDate>Sun, 12 May 2024 21:20:53 +0200</pubDate>
      <guid isPermaLink="false">transitmaps</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://transitmap.net/feed/</link>
      <description><![CDATA[
        <p>Among the best blogs around are those around people's special interests, things that you would never imagine someone could care so much about. If one of these special interests relates to transportation or infrastructure, then I will probably be interested too.</p>
        <p><a href="https://transitmap.net/" target="_blank">Transit Maps</a> is a blog about… transit maps. The author publishes reviews of official maps past and present, and also offers constructive criticism of unofficial maps that people send to her.</p>
        <p>Getting a new review in my feed reader gives me this sense of awe, this realization that some mundane things that we often take for granted require so much careful thought. You just walk to a map at the station, look at where you are and where you want to go, find your route and move on, and designers are spending countless hours making sure you can do that in a matter of seconds.</p>
        <p>That reminds me of how poorly designed all software must be, simply because so many times, nobody stopped to just think about design. Maybe someday, software will be good, but I don't expect to see that in my lifetime. I will just keep on admiring transit maps instead…</p>
      ]]></description>
    </item>

    <item>
      <title>NirBlog</title>
      <pubDate>Sun, 19 May 2024 18:01:47 +0200</pubDate>
      <guid isPermaLink="false">nirblog</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://blog.nirsoft.net/feed/</link>
      <description><![CDATA[
        <p>As I keep on playing with the computers in <a href="https://envs.net/~lucidiot/computers/#morgue" target="_blank">the Morgue</a>, I find myself often needing various tools to troubleshoot software or to reverse engineer it. I try to have <a href="https://cygwin.com/" target="_blank">Cygwin</a>, <a href="https://learn.microsoft.com/en-us/powershell/" target="_blank">PowerShell</a>, <a href="https://mh-nexus.de/en/hxd/" target="_blank">HxD</a> and <a href="https://www.angusj.com/resourcehacker/" target="_blank">Resource Hacker</a> available wherever I can, but I will end up needing some more utilities at some point, or wanting something easier to use.</p>
        <p>Here comes <a href="https://www.nirsoft.net/" target="_blank">NirSoft</a>, a website by Nir Sofer providing nearly three hundred utilities to retrieve passwords, inspect browser data, monitor networks, manage installed programs, and more. Most of those tools still work on Windows 2000, which means they cover everything but one of the Windows OSes I am interested into, yet keep on being updated to include new features for Windows 10 or 11. You don't need the most modern frameworks to make good software after all.</p>
        <p>The <a href="https://blog.nirsoft.net/" target="_blank">NirBlog</a> is where you will mostly find announcements of major releases and features of those utilities. I find it always interesting to read the release notes of this kind of good software, because you will end up discovering more features that you would have never thought of using before.</p>
      ]]></description>
    </item>

    <item>
      <title>Rubberduck News</title>
      <pubDate>Sun, 26 May 2024 18:13:44 +0200</pubDate>
      <guid isPermaLink="false">rubberduck</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://rubberduckvba.blog/feed/</link>
      <description><![CDATA[
        <p>One thing that I strongly believe in, yet appears to be a very controversial opinion nowadays, is that we, software developers, should encourage users to code. People should feel empowered by computers, should be able to use them as tools to accomplish whatever it is they want, and to unleash their creativity or unlock new abilities. Computers are for creation, and we can leave consumption (if we still really need <em>that much</em> of it) to so-called "smart" phones and tablets.</p>
        <p>Note that encouraging people to code does not necessarily mean that all programming should look like it is easy, especially bad programming. If software bugs can make planes crash, I don't want my grandma to make an autopilot. I just want people to automate tasks that they should never have to do manually.</p>
        <p>Encouraging people to code also means encouraging them to code <em>properly</em>. You can and absolutely should write some very dirty script if it's some one-time use thing that you are going to throw away, but you shouldn't be doing this with a larger project, or with anything that will have to be maintained in any way.</p>
        <p>I'm not the only one to think that way fortunately, and <a href="https://rubberduckvba.com/" target="_blank">Rubberduck</a> is a tool that tries to help in making sure users code properly. It is an add-on to the Visual Basic Editor, the tool built into Microsoft Office so you can write <abbr title="Visual Basic for Applications">VBA</abbr> code. Now, if I mention VBA, IT professionals will be terrified. That's understandable. But VBA is not going to go away from Office for a while, and it is still quite useful to really do anything with Excel or Access, and Excel is certainly not going to stop being the one tool that runs every organization.</p>
        <p>When some users start to get really proficient with Excel, they might start implementing a little bit of VBA, just to do something that would have been impossible, or much harder to do, with just cell formulae. Then over time, their macros grow, they might even have custom forms on top, and you get an entire app based on Excel that is written like a script instead of being properly organized as an app. It becomes unmaintainable.</p>
        <p>You will inevitably find something like this in any large organization. This is why VBA is often seen as a nightmare. Thus, IT people will try to discourage using VBA, and any kind of programming in general. This ban has a consequence, and it is similar to banning drugs: people will still be doing VBA or drugs, or VBA on drugs, but secretly, and you can't regulate its use anymore because you banned it entirely.</p>
        <p>Rubberduck tries to help with this by legalizing VBA and regulating it. It is a static analyzer for <abbr title="Visual Basic Editor">VBE</abbr>, offering many recommendations to avoid the various pitfalls of the language and make the code more readable, and adding plenty of features to make the IDE more modern. It's the equivalent for VBA of all the fancy tools that developers love to use nowadays, like type checkers, linters, etc. It's what happens when you embrace a programming environment, and treat it as equal to any other programming environment.</p>
        <p>You don't even necessarily need to actively encourage users to code in VBA. You can just allow VBA under the conditions that they use Rubberduck, they take on the responsibility to maintain the project, etc., and you can get the situation a bit more under control. This lets power users do what they want. Those who would really benefit so much from some programming that they would be willing to spend a little time doing it as a side job. Those where management, especially American management of course, would never accept to let a professional developer work on it, even though it would make some lives easier. And with some help, it can avoid making the lives of professional developers harder in the future.</p>
        <p>Congratulations to <del>drugs</del> VBA for winning the war on <del>drugs</del> VBA.</p>
      ]]></description>
    </item>

    <item>
      <title>USGS Earthquake Hazards Program</title>
      <pubDate>Sun, 02 Jun 2024 15:50:28 +0200</pubDate>
      <guid isPermaLink="false">usgs-earthquakes</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">KML</category>
      <link>http://envs.net/~lucidiot/rsrsss/opml/usgs/earthquakes.opml</link>
      <description><![CDATA[
        <p>Just before midday on <time datetime="2019-11-11">November 11th, 2019</time>, I was in bed, half asleep. I was completely immobile, cuddling my <a href="https://en.wikipedia.org/wiki/Bl%C3%A5haj" target="_blank">blåhaj</a>, when I heard a loud noise coming from downstairs that made me imagine some very large piece of furniture just fell down to the floor. The bed started shaking strongly as if I was suddenly moving around a lot. This is a loft bed, and I had not tightened its bolts for a while so it could shake around easily. I got a little worried, imagining that maybe someone downstairs just got hurt. A few hours later, I received an email, and understood.</p>
        <p>For a few years now, I have subscribed to the <a href="https://earthquake.usgs.gov/ens/" target="_blank">Earthquake Notification Service</a>, a part of the <abbr title="United States Geological Survey">USGS</abbr> Earthquake Hazards Program. This service allows you to receive emails when an earthquake happens in specific areas, at specific times, of some minimum magnitude. You won't be notified instantly of course; I usually get emails a few hours later, after the seismic data has been analyzed and a new distinct earthquake was properly detected.</p>
        <p>The <abbr title="Earthquake Notification Service">ENS</abbr> notified me that <a href="https://earthquake.usgs.gov/earthquakes/eventpage/us60006a6i/executive" target="_blank">an earthquake</a> occurred in France. It made the news and has <a href="https://fr.wikipedia.org/wiki/S%C3%A9isme_de_2019_dans_le_Sud-Est_de_la_France" target="_blank">a French Wikipedia page</a>, as it was an unusual earthquake. Its magnitude would normally not be of much concern, but it damaged hundreds of homes and hurt 4 people. It also occurred in an area with a usually low, but not absent, seismic activity and high nuclear and industrial risks. It was suggested that the fault was on the brink of rupture, but that a quarry located just above the fault may have triggered it. Human activity as a risk factor for earthquakes is not that much taken into account in evaluating seismic risks yet, so it is likely that this area was riskier than we thought.</p>
        <p>In my city, most people would not have felt anything because we are far away enough for this earthquake to be barely noticeable. There might be a small shake, but you wouldn't remember it or treat it as anything abnormal. As I was a few floors up in a building and in my bed, the vibrations got amplified enough for me to actually detect them, and I can now say that I felt an earthquake. Neat! If I had a bucket list, experiencing an earthquake might have been part of it.</p>
        <p>Anyway, the USGS does not only provide emails for earthquakes. You can also get feeds! I wrote <a href="https://tildegit.org/lucidiot/rsrsss/src/commit/01a50c616c4c7c5859c4edd6bbc78d3fa4fb6a0d/xquery/opml/usgs/earthquakes.xqy" target="_blank">a generator</a> to make an <abbr title="Outline Processor Markup Language">OPML</abbr> file for the available Atom and <abbr title="Keyhole Markup Language">KML</abbr> feeds.</p>
        <p>Those feeds are worldwide, but you can also use <a href="https://earthquake.usgs.gov/fdsnws/event/1/#parameters" target="_blank">an API</a> to make your own feeds with time, magnitude or location filters.</p>
      ]]></description>
    </item>

    <item>
      <title>De Programmatica Ipsum</title>
      <pubDate>Sun, 09 Jun 2024 23:23:11 +0200</pubDate>
      <guid isPermaLink="false">de-programmatica-ipsum</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://deprogrammaticaipsum.com/index.xml</link>
      <description><![CDATA[
        <p>For a while now, I have been filtering through the feeds in my <em>Tech blogs</em> category. Many of them talk about IT industry issues that I deal with on a daily basis, and they can be soul crushing when you know just how easily they would be solved if we stopped doing capitalism and started doing software. There aren't many that provide any kind of interesting point of view or contribute anything to the ongoing issues other than stating that these issues exist, but <a href="https://helloyes.dev/blog/2023/craft-vs-industry/" target="_blank">some do</a> occasionally.</p>
        <p><em>De Programmatica Ipsum</em> is a magazine in the form of a blog. Every month, expect four new posts in your feedreader:<p>
        <ul>
          <li>An introductory post for the latest issue;</li>
          <li>An editorial post on the theme discussed in this issue;</li>
          <li>A book review;</li>
          <li>A video review.</li>
        </ul>
        <p>The editorial post is often full of links to many resources, both historical and current, that can be helpful if you want to explore the theme deeper. I like that with the combination of blog posts, hyperlinks, books and videos, you get a variety of flavours on each topic.</p>
        <p>Many issues explore hot topics or recurring issues in the industry, or interesting aspects of programming history. The editorial post of courses expresses many opinions, meaning that it will inevitably be very controversial because every opinion is controversial to the eyes of Hacker News. I however appreciate the more pragmatic approach here. It's more than just pure non-constructive criticism on a specific recent case with no research, it is a deeper dive into the repetitive patterns on most of the problems with software, over a span of decades. I can clearly sense that the writers are older, more experienced developers, some who might have been there before the advent of the World Wide Web.</p>
        <p>This is a case of a tech blog where the author takes the time to think things through. That blog definitely stays in my feedreader.</p>
      ]]></description>
    </item>

    <item>
      <title>Fire Code Interpretations from the Office of State Fire Marshal of the Department of Insurance of North Carolina</title>
      <pubDate>Mon, 17 Jun 2024 20:10:08 +0200</pubDate>
      <guid isPermaLink="false">ncosfm-code</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.ncosfm.gov/interpretationsfeed</link>
      <description><![CDATA[
        <p>This feed probably ranks pretty high in the list of feeds I would never have imagined stumbling upon or featuring here. This is one of those feeds that I randomly found through some misuses of search engines. If you happen to be working in construction in North Carolina and care about avoiding preventable deaths in your buildings, or (most likely) avoiding fines, and happen to use or want to use RSS feeds, well you must be pretty damn unique. And you might want to get this feed into your feedreader.</p>
        <p>I suppose that this feed must have been put into place at a time when RSS feeds were still cool, or encouraged in some way, and because this is a government website, they maintain it rather than enshittifying it into a newsletter like what companies would do. This might be another argument against privatization: more feeds!</p>
      ]]></description>
    </item>

    <item>
      <title>Satellite Writers</title>
      <pubDate>Sun, 23 Jun 2024 22:04:24 +0200</pubDate>
      <guid isPermaLink="false">satellite-writers</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.are.na/pedro-gil-farias/satellite-writers/feed/rss</link>
      <description><![CDATA[
      <p>When passing by some large graffiti on a wall, your thoughts are probably either about how the delinquents are defacing some buildings and making everything worse for everyone, or how this graffiti is actually beautiful and street art is not recognized enough. You probably never thought about whether you could read that graffiti from space.</p>
      <p>Pedro Gil Farias, a design researcher, apparently did. On Are.na, basically fancy Pinterest, Pedro created <a href="https://www.are.na/pedro-gil-farias/satellite-writers" target="_blank">Satellite Writers</a>, a collection of graffiti seen on Google Earth, and thus captured by satellites.</p>
      <p>This might anger you even more due to either of the aforementioned common thoughts on graffiti, or this might make you think a bit more deeply about how graffiti are just part of what makes a city a city. Either way, I now have a new niche photo feed in my reader!</p>
      ]]></description>
    </item>

    <item>
      <title>NOAA Storm Prediction Center</title>
      <pubDate>Sun, 30 Jun 2024 20:34:39 +0200</pubDate>
      <guid isPermaLink="false">noaa-spc</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Weather</category>
      <link>http://envs.net/~lucidiot/rsrsss/opml/noaa/spc.opml</link>
      <description><![CDATA[
        <p>Some time ago, I <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#nhc-cphc">posted</a> about the <abbr title="National Oceanic and Atmospheric Administration">NOAA</abbr>'s hurricane monitoring offices, the <abbr title="National Hurricane Center">NHC</abbr> and <abbr title="Central Pacific Hurricane Center">CPHC</abbr>. But what about thunderstorms? It's pretty common for them to cause tornadoes in the US (though that's definitely not exclusive to the US), so it is pretty important to know about them.</p>
        <p>So here is an <abbr title="Outline Processor Markup Language">OPML</abbr> file for <a href="https://www.spc.noaa.gov/aboutrss.html">all of the <abbr title="Storm Prediction Center">SPC</abbr>'s feeds</a>. Those feeds are pretty simple and rather well built. No GeoRSS, no custom XML namespace to describe tornadoes or storms. There isn't much to say here really! They provide lengthy explanations of the current weather reports for storms, as well as tornado or fire risks from those storms. The various feeds allow to select only some of their reports, for example tornadoes only.</p>
      ]]></description>
    </item>

    <item>
      <title>Current weather conditions from the National Weather Service</title>
      <pubDate>Sun, 07 Jul 2024 15:54:05 +0200</pubDate>
      <guid isPermaLink="false">nws-current</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Weather</category>
      <link>http://envs.net/~lucidiot/rsrsss/opml/noaa/current.opml</link>
      <description><![CDATA[
        <p>Here we go again, more weather reports. I found <a href="https://forecast.weather.gov/xml/current_obs/seek.php" target="_blank">this page</a> while perusing the <a href="https://search.usa.gov/search?affiliate=nws.noaa.gov" target="_blank">National Weather Service search engine</a>. I have no idea where it is linked from. The <abbr title="National Weather Service">NWS</abbr> is now more focused on making APIs and geospatial web services than merely providing feeds.</p>
        <p>So here is a new homemade <abbr title="Outline Processor Markup Language">OPML</abbr> file, with nearly 2500 feeds grouped by state, providing the current weather conditions observed at American airports. They also provide a homegrown XML format, which you can get if you replace <code>.rss</code> any of the feed URLs in my file with <code>.xml</code>. This format is similar to the <abbr title="National Hurricane Center">NHC</abbr>'s cyclones format, as it is only half-structured; the values are human-readable text instead of using basic machine-readable data types.</p>
        <p>I already have a to-do list with a significant amount of <abbr title="National Oceanic and Atmospheric Administration">NOAA</abbr> feeds to look at, but I can't even make a dent in it, because I just keep on finding more. Don't take this wrong, I am definitely not complaining, as I would much rather have to deal with finding way too much RSS feeds everywhere than not finding any.</p>
      ]]></description>
    </item>

    <item>
      <title>The Dewey blog</title>
      <pubDate>Sun, 18 Aug 2024 16:42:28 +0200</pubDate>
      <guid isPermaLink="false">dewey-blog</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://ddc.typepad.com/025431/atom.xml</link>
      <description><![CDATA[
      <p>I have stumbled upon this feed a few months ago while looking for feeds in domains that would be out of my usual fields of knowledge, and I had decided that I would hold onto it until I could bring a laptop to a library and write about it from there. Just like how I wrote about <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#transtar-opml">Houston TranStar</a> while standing on a highway.</p>
      <p>I live in a city with a network of over a dozen public libraries, and they are building another one soon. It's completely free for all residents, and there exists a loophole if you look very carefully to get a free card for non-residents. I am in the one library of this network that follows the Dewey Decimal Classification the closest, and has shelves that are quite well organized with many references to those numbers. Multiple libraries do not mention the numbers at all, leaving you to guess at what category a book you found online might be in. The fact that this library doesn't makes my experience much easier. I have been quite surprised today at how easily I found the books I am interested in.</p>
      <p>The <abbr title="Dewey Decimal Classification">DDC</abbr> continues to be updated regularly. They recently hosted a meeting to discuss the current classification of Ukrainian history for example. They have <a href="https://ddc.typepad.com/">a TypePad blog</a> that they have been maintaining for a long time. I have found this blog through a reference in some old publications about how RSS feeds could be useful to librarians, and it was the only one still active!</p>
      <p>This feed is available in the <a href="https://ddc.typepad.com/025431/atom.xml">Atom</a>, <a href="https://ddc.typepad.com/025431/index.rdf"><abbr title="RDF Site Summary">RSS</abbr> 1.0</a> and <a href="https://ddc.typepad.com/025431/rss.xml"><abbr title="Really Simple Syndication">RSS</abbr> 2.0</a> formats.</p>
      ]]></description>
    </item>

    <item>
      <title>Google Earth is a feed reader</title>
      <pubDate>Sun, 01 Sep 2024 22:14:04 +0200</pubDate>
      <guid isPermaLink="false">kml</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">KML</category>
      <description>
            <![CDATA[
        <p>I recently began exploring the treasure trove of feeds that are some of the US agencies like the <abbr title="National Weather Service">NWS</abbr> or the <abbr title="United States Geological Survey">USGS</abbr>. Many of those feeds were being used for <abbr title="Geospatial Information Systems">GIS</abbr> data, which makes sense since those agencies deal with data associated to positions on the Earth. While they do use GeoRSS, which is how I ended up featuring it on RSRSSS, they also are often treating <abbr title="Keyhole Markup Language">KML</abbr> files as feeds and describing them as if they were your usual RSS feed.</p>
        <p>The K in KML stands for Keyhole, the company that got vored by Google and created what is now known as Google Earth. To be clear, by Google Earth I mean Google Earth Pro, the desktop version. The web Google Earth is really just a bloated version of the 3D view feature of Google Maps, which got removed to justify the existence of that separate web app. Google Earth Pro, which used to be a paid version of the free Google Earth desktop app, is now free and unmaintained. It still works fine though, probably because it's not fully written in JavaScript. It does work on Windows XP, although it sets my poor laptop on fire. Which is kinda fitting since that laptop is named <code>//MORGUE/LUBRIZOL</code>, after <a href="https://en.wikipedia.org/wiki/Lubrizol_factory_fire_in_Rouen" target="_blank">a fire</a> that occurred in a Lubrizol factory in France.</p>
        <p>Anyway, at first glance, Google Earth is not what I would call a feedreader, and <abbr title="Keyhole Markup Language">KML</abbr> files are not feeds either. However, my dear friend the <a href="https://validator.w3.org/feed/" target="_blank">W3C Feed Validation Service</a> can validate it just like RSS and Atom feeds. Reading through the XML contents of the US feeds I found, and reading the specifications, shows that you can actually use a KML file as if it was an <abbr title="Outline Processor Markup Language">OPML</abbr> file, listing a whole bunch of KML files as if they were feeds and specifying how often Google Earth should refresh them.</p>

        <figure>
          <pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;kml xmlns="http://www.opengis.net/kml/2.2"&gt;
  &lt;NetworkLink&gt;
    &lt;name&gt;My KML feed&lt;/name&gt;
    &lt;visibility&gt;0&lt;/visibility&gt;
    &lt;open&gt;0&lt;/open&gt;
    &lt;description&gt;Open this thing to view the contents of my feed with auto refresh&lt;/description&gt;
    &lt;refreshVisibility&gt;0&lt;/refreshVisibility&gt;
    &lt;flyToView&gt;0&lt;/flyToView&gt;
    &lt;Link&gt;
      &lt;href&gt;https://example.com/feed.kml&lt;/href&gt;
      &lt;refreshMode&gt;onInterval&lt;/refreshMode&gt;
      &lt;refreshInterval&gt;60&lt;/refreshInterval&gt;
    &lt;/Link&gt;
  &lt;/NetworkLink&gt;
&lt;/kml&gt;</pre>
          <figcaption>A <abbr title="Keyhole Markup Language">KML</abbr> file containing a link to another <abbr title="Keyhole Markup Language">KML</abbr> file with automatic refresh</figcaption>
        </figure>

        <p>A <code>NetworkLink</code> is basically a folder that contains a separate KML file, loaded over the network. That file can be refreshed automatically in various ways, including whenever the user moves around in Google Earth. That option can be set to send the current camera settings, and that's intended for performance, so that you don't fetch any data from the other side of the Earth if the user can't see it. But that definitely can be used for tracking purposes, and probably is somewhere because we live in a great world. My example is configured to refresh the remote file automatically once every 60 seconds, without tracking you. You can also right-click on the link in Google Earth and hit the <kbd>Refresh</kbd> button to refresh manually at any time if you feel like it.</p>
        <p>You can create those links within Google Earth with the <kbd>Network Link</kbd> option under the <kbd>Add</kbd> menu. The UI will however not allow you to configure everything, especially how or how not to send the view and camera parameters when moving around.</p>
        <p>You can also put as many links as you want into a single file, place them into folders, or put network links in the remote file. That means you can fully reproduce the behaviors of <abbr title="Outline Processor Markup Language">OPML</abbr> <a href="http://opml.org/spec2.opml#subscriptionLists" target="_blank">subscription lists</a>, or even have a feed that is both a feed and a subscription list at once.</p>
        <p>The linked KML file can be as simple as a single point:</p>

        <figure>
          <pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;kml xmlns="http://www.opengis.net/kml/2.2"&gt;
  &lt;NetworkLinkControl&gt;
    &lt;minRefreshPeriod&gt;60&lt;/minRefreshPeriod&gt;
  &lt;/NetworkLinkControl&gt;
  &lt;Placemark&gt;
    &lt;name&gt;The Keyhole&lt;/name&gt;
    &lt;Point&gt;
      &lt;coordinates&gt;37.4938932, -107.1192137&lt;/coordinates&gt;
      &lt;description&gt;&lt;![CDATA[
        As seen on &lt;a href="https://www.openstreetmap.org/node/358920287"&gt;OpenStreetMap&lt;/a&gt;
      ]]&gt;&lt;/description&gt;
    &lt;/Point&gt;
  &lt;/Placemark&gt;
&lt;/kml&gt;</pre>
          <figcaption>A single point (a placemark) in a <abbr title="Keyhole Markup Language">KML</abbr> file intended for automatic refresh</figcaption>
        </figure>

        <p>Note the <code>NetworkLinkControl</code>, which can be used to control how this file is meant to be used within a <code>NetworkLink</code>. This can give an additional layer of protection, since the properties of the original <code>NetworkLink</code> can be overridden by the server. The <code>minRefreshPeriod</code> ensures users can't just refresh the file every second, they have to wait at least one minute. This of course doesn't stop anyone from <abbr title="Denial of Service">DoS</abbr>ing a server, but prevents them fro doing it over Google Earth.</p>

        <h3>Defining KML syndication</h3>
        <p>Here's a cool demonstration of the capabilities of network links in KML: download <a href="http://mt.mgmaps.com/kml/maps.php" target="_blank">this KML file</a>, and you can get Bing Maps, Yahoo Maps, or OpenStreetMap displayed within Google Earth. I think Google Earth is a great viewer, but I would like it to not depend on Google's servers, since <a href="https://killedbygoogle.com/" target="_blank">we know what Google does with its products</a>. That thing solves my problem! See also <a href="https://wiki.openstreetmap.org/wiki/OSM_in_Google_Earth" target="_blank">the OpenStreetMap wiki page</a> on getting <abbr title="OpenStreetMap">OSM</abbr> in Google Earth.</p>
        <p>That particular demo certainly would not fit the definition of a feed though. So here is a proposed definition of a <em><abbr title="Keyhole Markup Language">KML</abbr> feed</em>:</p>
        <ul>
          <li>A KML feed is a <abbr title="Keyhole Markup Language">KML</abbr> file.</li>
          <li>A KML feed uses <code>NetworkLink</code> to link to another KML file on a server.</li>
          <li>A KML feed uses the <code>onInterval</code> or <code>onExpire</code> refresh modes, which will cause an automatic refresh over either a set interval or after a set expiry time.</li>
          <li>The server may make use of the view and camera settings that can be sent by Google Earth to serve only a portion of the feed at once.</li>
          <li>The server may not make use of the view and camera settings to serve any content different than just slicing up the feed. For example, angling the camera at 45 degrees should not be displaying active volcanoes instead of earthquakes.</li>
        </ul>

        <p>Do note that I am defining the <abbr title="Keyhole Markup Language">KML</abbr> feed as being the static file, the static file that contains just the link to the other file that changes dynamically. That would be more akin to an <abbr title="Outline Processor Markup Language">OPML</abbr> file, which contains links to feeds. However, the dynamically changing <abbr title="Keyhole Markup Language">KML</abbr> file is just a plain old file full of points and whatnot. You can save it, open it while offline in Google Earth, and it will work perfectly fine as if it never was from something that gets updated automatically. Using only the dynamic file removes the <em>feed</em> part. On top of that, most feed publishers will be linking to the static file only, since that's the file that users are expected to open to get all the automatic update functionality, and that specific file is already being called the KML feed.</p>
        <p>Since nothing stops you from putting multiple links at once in one file, or putting links inside of folders or other geographical features, we also need to specify the difference between a regular <abbr title="Keyhole Markup Language">KML</abbr> file that just happens to have some links, a file that acts as a <a href="http://opml.org/spec2.opml#subscriptionLists" target="_blank">subscription list</a>, and a feed.</p>
        <ul>
          <li>A <dfn>KML feed</dfn> contains one and only one <code>NetworkLink</code> object, and no other <em>Feature</em>, <em>Geometry</em> or <code>gx:PlayList</code> objects. It may still contain styling or camera settings.</li>
          <li>A <dfn>KML subscription list</dfn> contains one or more <code>NetworkLink</code> objects. These may be placed within any <em>Container</em>, and containers may be nested into other containers. No other <em>Feature</em>, <em>Geometry</em>, or <code>gx:PlayList</code> objects may be used. It may still contain styling or camera settings.</li>
        </ul>
        <p>From my reading of <a href="https://developers.google.com/kml/documentation/kmlreference" target="_blank">Google's KML reference</a>, which describes Google's extensions as well as Google Earth's usage of <abbr title="Keyhole Markup Language">KML</abbr>, this should about do it. Subscription lists are allowed to have the equivalent of OPML directories, but cannot contain any equivalent of RSS items or Atom entries.</p>

        <p>With those definitions, it is safe to say that yes, Google Earth is indeed a feed reader. As far as I am aware, other planet browsers that support KML like KDE Marble do not support automatic refreshing via <code>NetworkLink</code>, so they cannot operate as feed readers.</p>

        <h3><abbr title="Keyhole Markup Language">KML</abbr> syndication and <abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr></h3>
        <p>That leaves me with one more question to answer: should I start to feature <abbr title="Keyhole Markup Language">KML</abbr> feeds and subscription lists within <abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr>?</p>
        <p>While this feed's title would imply that I only care about <abbr title="Really Simple Syndication">RSS</abbr> 2.0, I regularly feature <abbr title="RDF Site Summary">RSS</abbr> 1.0 feeds as well as Atom feeds here. I have also mentioned <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#japanese-formats"><abbr title="Asahina Antenna Metadata Format">HINA</abbr> and <abbr title="Last-modified Information Relaying Specification">LIRS</abbr></a> a while ago, and regularly feature things that aren't feeds, like <abbr title="Outline Processor Markup Language">OPML</abbr> outlines and <abbr title="Extensible Markup Language">XML</abbr> schemas, and am planning on mentioning other feed formats.</p>
        <p>Most feed readers will only support <abbr title="RDF Site Summary">RSS</abbr> 1.0, <abbr title="Really Simple Syndication">RSS</abbr> 2.0, Atom 1.0 and <abbr title="Outline Processor Markup Language">OPML</abbr> 2.0, and I am not taking much risks by saying that only a very tiny portion of people today would be treating the <em>legacy</em> desktop version of Google Earth as a feed reader. Therefore, KML and any other uncommon feed formats that I might mention are just some niche thing that will mainly entertain you, or teach you about some Internet history, but not something that will add more sources in your feedreader.</p>
        <p>I want to be neither only quickly sharing the feeds of random blogs, nor only be posting about technologies from a parallel universe. I want a little bit of both. So I will use the following guidelines to decide when to and when not to post:</p>
        <ul>
          <li>Sharing a random KML feed, with some boring data that I don't have much to say about and that you would probably expect within Google Earth, like weather information, is boring.</li>
          <li>Sharing a KML feed of literally <em>Boring</em> data, showing the tunnels currently under construction all over the world, makes for a great pun, so that could work because I can't resist puns.</li>
          <li>Sharing the aforementioned feed, explaining why this feed exists, what it's used for, the script that generates it, or the secret <a href="https://developers.google.com/kml/documentation/extendeddata" target="_blank">extended data</a> hidden within it, that's a lot better. You might not use it, but it will be interesting.</li>
          <li>Mentioning the existence of a KML version of an RSS feed on the same post, like how I already mention other formats of an RSS feed, is harmless.</li>
        </ul>
        <p>As always, if you happen to have any suggestions, questions, comments, contributions, compliments, confusions, conveyances, confessions, confections, complaints, contemplations, conjectures, concerns, commendations, condiments, commiserations, conferments, contradictions, compromises, condolences, contraindications, conspirations, contentions, confabulations, contrarieties, conclamations, confidences, contestations, considerations, confitures, other words to add to this convoluted list, or consternations at said concrescence of commas, feel free to <a href="https://tilde.town/~lucidiot/contact.html" target="_blank">reach out</a>. Especially if you actually read through this whole post and were not scared away by the discussion of a Google product or by the XML examples!</p>
      ]]></description>
    </item>

    <item>
      <title>Dreams from the National Dream Center</title>
      <pubDate>Sun, 15 Sep 2024 22:38:02 +0200</pubDate>
      <guid isPermaLink="false">national-dream-center</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://nationaldreamcenter.com/forum18/syndication.php?fid=34</link>
      <description><![CDATA[
        <p><a href="https://envs.net/~lucidiot/rsrsss/feed.xml#dozens-dreams">Previously in this feed</a>, I had told the story of how I started recording my own dreams, and more importantly, how I got into <a href="https://envs.net/~lucidiot/dreams/">publishing my dreams</a> on my wiki after being inspired by ~dozens, the <a href="https://tilde.town/~dozens/feeds/">Great Bringer of Feeds</a>.</p>
        <p>What if instead of having just one person's dreams in your feedreader, you could get the weirdness of a whole community's worth of brains? You can thank the National Dream Center for providing you with <a href="https://nationaldreamcenter.com/forum18/syndication.php?fid=34">a feed that provides just that</a>. You can also get this feed in the <a href="https://nationaldreamcenter.com/forum18/syndication.php?type=atom1.0&amp;fid=34">Atom 1.0</a> format.</p>
        <hr />
        <p><abbr title="Post scriptum">PS</abbr>: If you look carefully at the URL, you will find that there is a <code>fid</code> parameter in it. This is a forum ID, and you could get feeds for all the other forums and sub-forums of the National Dream Center. This sounds like an <abbr title="Outline Processor Markup Language">OPML</abbr> file waiting to happen, but for once, I will abstain myself from making one. The public dreams section is the only truly interesting one anyway. However, the availability of RSS feeds on <a href="https://mybb.com">MyBB</a> forums is definitely something to investigate later.</p>
      ]]></description>
    </item>

    <item>
      <title>Upload to Dailymotion over RSS</title>
      <pubDate>Thu, 26 Sep 2024 08:19:16 +0200</pubDate>
      <guid isPermaLink="false">dmrss</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">MediaRSS</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">DMRSS</category>
      <link>https://dailymotion.com/dmrss</link>
      <description><![CDATA[
        <p>I went for a stroll on my scooter and sat on a bench in a park. It turns out that I sat right in front of a movie theater than specializes in <em>films d'auteur</em>, and that's a close enough spot to give me a good excuse to explore another example of <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#long-live-rss">why feeds won't die</a>.</p>
        <p>A while ago, I got an account on Dailymotion because I didn't want to use YouTube to host some videos, and PeerTube was not a thing at all.</p>
        <p>Dailymotion is a French video hosting service. I don't even know whether it is well-known outside of France; I remember that it was just as popular as YouTube back when it still had star ratings and a yellow subscribe button. It got overtaken by YouTube and switched its business model to mostly cater to news corporations. But it is still possible for anyone to register and upload videos.</p>
        <p>At some point, Dailymotion decided that I, too, was a news corporation uploading videos to embed into my articles, so I got subscribed to a newsletter.</p>
        <p>Every quarter, I got an email informing me of the latest updates to Dailymotion's platforms for <em>partners</em>; features that I just did not have access to at all because I am not an actually verified partner and am not giving Dailymotion any money.</p>
        <p>Through those updates, I found out that partners can contact Dailymotion's tech support to get them to regularly poll an RSS feed, download the videos listed in that feed, and upload them to Dailymotion. Pretty neat, and obviously right up my alley.</p>
        <p>This feature is not available to everyone of course, but some of the documentation is. To allow setting various Dailymotion-specific attributes on the videos, they have devised the <code>dmrss</code> XML namespace. The namespace's URL is also its documentation, which is surprisingly uncommon for XML namespaces as they usually just say "this URL is reserved": <a href="https://www.dailymotion.com/dmrss" rel="noreferrer"><code>https://www.dailymotion.com/dmrss</code></a>. Of course, I wrote <a href="https://envs.net/~lucidiot/rsrsss/xsd/dmrss.xsd">an <abbr title="XML Schema Definition">XSD</abbr></a> for it.</p>
        <p>Supported feeds must use MediaRSS to provide the basic attributes such as a link to the video, and include some required attributes from the <code>dmrss</code> namespace.</p>
        <p>Most of the attributes are meant to set metadata for attribution of music videos, TV shows or movies. Some attributes are more technical, marking the video as private, disabling ads shown during playback, or to request a deletion of the video. They do not use <a href="https://www.rfc-editor.org/rfc/rfc6721.html">RFC 6721</a> to mark videos as deleted, a standard that <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#tombstones">I previously featured</a> in RSRSSS, but that isn't surprising as this Atom extension is not well known, rarely implemented, and is officially only for Atom and not RSS 2.0.</p>
        <p>As a French developer, I am used to seeing the common mistakes that French people make when trying to write in English, and I saw quite a few of them in the namespace's documentation. One of my pet peeves is adding spaces before colons and exclamation points, something I am often fighting against at work with the help of other, rare, good English speakers.</p>
        <p>But apart from these mistakes and the somewhat unusual table structure to represent attributes within elements, this is not the worst XML documentation I've seen; the worst being of course the complete lack of documentation. So congrats on the Dailymotion team for still using RSS, and still updating their uploader.</p>
        <p>If they are still updating it today, then it must mean it is still in use. Feeds won't die any time soon.</p>
      ]]></description>
      <enclosure url="https://envs.net/~lucidiot/rsrsss/xsd/dmrss.xsd" length="17748" type="application/xml" />
    </item>

    <item>
      <title>Library Elf</title>
      <pubDate>Thu, 03 Oct 2024 16:09:55 +0200</pubDate>
      <guid isPermaLink="false">libraryelf</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tool</category>
      <link>http://www.libraryelf.com/</link>
      <description><![CDATA[
        <p>I am once again sitting down in a library just to post about something library-related on RSRSSS. I have found a 20 year-old example of how RSS feeds can be used for more than news and blogs: <a href="http://www.libraryelf.com/" rel="noreferrer">Library Elf</a>.</p>
        <p>This freemium service offers e-mail notifications as well as an RSS feed telling you when a book you placed a hold on is available, or when a book you borrowed is due to be returned. It does so by checking your public library's website once a day or when you browse the site, probably by using some good old scraping.</p>
        <p>It mostly supports libraries in the US and Canada, and its "international" category only includes a few libraries from English-speaking countries, so I won't get to use it. But that's okay, I'm glad there's a thing somewhere out there that has been running for two whole decades and still serves feeds!</p>
        <p>They provide <a href="http://www.libraryelf.com/base/Demo.aspx" rel="noreferrer">a demo</a>, showing what the online version and the emails look like. They also include a link to <a href="http://www.libraryelf.com/base/Feeder.aspx?feed=RSS&amp;user=UDgtVLpVz9ggYqt2eu8a6jwu%2bQYauyGsCPuXT6l5gc8%3d" rel="noreferrer">a demo feed</a>, but it doesn't look like this feed is ever updated, so it doesn't demonstrate much.</p>
      ]]></description>
    </item>

    <item>
      <title>Retrospring Blog</title>
      <pubDate>Wed, 09 Oct 2024 10:07:27 +0200</pubDate>
      <guid isPermaLink="false">retrospring</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://blog.retrospring.net/feed/</link>
      <description><![CDATA[
        <p><a href="https://retrospring.net" rel="noreferrer">Retrospring</a> is an open-source clone of Spring, one of those question/answer-based social networks like Ask.fm. In a nutshell, you can ask questions to people, anonymously or not, and they answer. You can follow people to get a feed of their answers, and you can ask a question to all of your followers (an <em>ask-all</em> in the jargon that developed in the community).</p>
        <p>As I left the fediverse with a rather negative experience, as people remain awful no matter what network you use, I went on Retrospring just to keep one thin connection to the few nice people I knew from there, because many of them were on Retrospring too. It isn't federated and has a smaller user base so I felt less concerned.</p>
        <p>A <abbr title="question and answer">Q&amp;A</abbr>-based social network is quite convenient for me, by being completely asynchronous and not necessarily encouraging instant and short messages. I can write a novel when answering a question, and it is even possible to write novels in the questions themselves, though that can be disabled because that has caused server troubles in the past. I can take all my time to think carefully about my answer. I can put context. I can decide to just discard a question entirely. I can ignore the website for a few weeks, then come back, and not miss anything because all the pending questions are still there, waiting for me.</p>
        <p>With that, there is no fear of missing out. The site gets a lot less distracting because you don't need to be constantly available to reply instantly. More time to think and more space to write means less misunderstandings, so less drama. The design also prioritizes answering your own questions, before interacting with the answers of the people you follow, and way before interacting with the answers of anyone on the website, so it makes it much easier to ignore any drama and harder to <em>cause</em> any drama.</p>
        <p>Thanks to this much calmer approach to social media, I managed to stay there for a while. I sometimes took breaks without much issues, other than having to explain to others that I take breaks, since others usually don't need that.</p>
        <p>I managed to meet two more wonderful people in there. I talk to them outside of the platform now, and got quite close to them. Those two friends can relate to some of my personal issues or might even help me understand them better. I support them through their bad times, and they support me through my own. Friends I think about every day. Friends I love, rather than just merely like. And for that, I am eternally grateful to the creators of Retrospring.</p>
        <p>Retrospring got quite popular recently, with Tumblr, Twitter, <a href="https://rentry.co" rel="noreferrer">Rentry</a> and Fediverse users. So popular, in fact, that its maintainers have decided to <a href="https://blog.retrospring.net/retrospring-is-shutting-down-on-1st-march-2025" rel="noreferrer">shut it down</a> because they couldn't handle it anymore.</p>
        <p>That made me discover that they had <a href="https://blog.retrospring.net/" rel="noreferrer">a blog</a>, so here is <a href="https://blog.retrospring.net/feed/" rel="noreferrer">its feed</a>, if you want to follow them to the end.</p>
        <p>Registrations are now closed, but you can still be part of the club of question askers by <a href="https://retrospring.net/@lucidiot" rel="noreferrer">asking me questions anonymously</a> if you so wish. Or you can join other instances, because thanks to open-source software, anyone can run their own Retrospring. I already have <a href="https://ask.absturztau.be/@lucidiot" rel="noreferrer">reserved a spot</a> on Fragsturztaube, an instance hosted by the same person who ran the Fediverse instance I was on before, and I will be moving there once Retrospring.net shuts down entirely. You can send me questions there too; they will sit in the inbox, and I will start answering them in 2025. I don't like having to manage both accounts at once!</p>
      ]]></description>
    </item>

    <item>
      <title>Sticker Spotter</title>
      <pubDate>Wed, 16 Oct 2024 21:16:44 +0200</pubDate>
      <guid isPermaLink="false">sticker-spotter</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://stickerspotter.com/feed.atom</link>
      <description><![CDATA[
      <p>Here's a feed that changed my view of the world a tiny bit. <a href="https://stickerspotter.com/" rel="noreferrer">Sticker Spotter</a> is a blog with a rather simple premise: to frequently post photos of interesting stickers, mostly those found stuck on streetlamps, traffic lights and other street infrastructure.</p>
      <p>No captions are provided, or titles, or locations. It's nothing but stickers. Stickers in various languages, in various cities. It can be a fun little game to try to understand just what each sticker is about.</p>
      <p>I subscribed to the feed because I like my feed reader backlog to be sprinkled with random photos. These tiny pieces of litter, of vandalism are now spreading to my digital space.</p>
      <p>Since I subscribed, I noticed that when I go outside, especially when I am waiting at a pedestrian crossing, I find myself looking for stickers on the poles or street cabinets. I normally treat stickers as visual clutter and will avoid them like I unconsciously avoid looking at ads (my brain has a built-in ad blocker!), but now I occasionally want to look at them and think about them.</p>
      <p>And I am glad that I found a new way to appreciate the little things around me. So thank you, <a href="https://maique.omg.lol/" rel="noreferrer">random netizen</a>, for making the often anxiety-inducing exploration of the city a little bit more interesting by letting me stumble upon your Atom feed.</p>
      ]]></description>
    </item>

    <item>
      <title>Portable Restroom Operator Monthly</title>
      <pubDate>Fri, 25 Oct 2024 14:54:03 +0200</pubDate>
      <guid isPermaLink="false">pro-monthly</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.promonthly.com/feeds/rss.rss</link>
      <description><![CDATA[
        <p>I didn't feel motivated to post anything this week. Today, I made tea and forced myself to try to post <em>something</em>. I just let my hands type whatever they wanted into a search engine to try to find a new feed to showcase, and of course, my brain gave my hands bad ideas.</p>
        <p>Typing <samp>toilet rss</samp> into DuckDuckGo is how I stumbled upon <abbr title="Portable Restroom Operator">PRO</abbr> Monthly. This is a monthly magazine, but the feed will give you the more frequent news articles from their online version. You may want to subscribe to their print version though, because I can't think of a better thing to read while sitting on the bowl. Or maybe you can put that somewhere in the stack of magazines at the doctor's office and admire the consequences.</p>
        <p>If you are one of those weirdos who are not incredibly passionate about porta-potties, then you might still be able to learn something from this feed. You don't need to worry about what you have to say not being worthy of being posted on your blog, because even professionals literally shitpost.</p>
      ]]></description>
    </item>

    <item>
      <title>Starring the Computer</title>
      <pubDate>Tue, 29 Oct 2024 21:37:48 +0100</pubDate>
      <guid isPermaLink="false">starringthecomputer</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://starringthecomputer.com/stc.rss</link>
      <description><![CDATA[
        <p>It's quite well known that most scenes involving computers in movies and TV shows are very unrealistic. Just watch some CSI episodes. Enhance! Enhance!</p>
        <p>What if there were some good surprises? What if, even though they might not be used realistically, some very interesting computers were starring on a movie? And what if someone was motivated enough to catalog them all?</p>
        <p><a href="https://starringthecomputer.com/" rel="noreferrer">Starring the Computer</a> lists every computer that has been identified in a movie or a TV show, and rates their appearance by importance to the plot, realism and visibility during the scene. It's quite fascinating to see <a href="https://starringthecomputer.com/computers.html" rel="noreferrer">the variety of computers</a> that are featured. And it has a feed for its recent updates, and has been continuously updated since at least 2007, maybe even before that.</p>
        <p>I love these kinds of unexpected small databases that people keep online, even in the current times. Still contributing to the knowledge sharing that the Web was meant for.</p>
        <p>A related link that I wanted to share but that has no relevant feed: there are <a href="https://nmap.org/movies/" rel="noreferrer">a lot of movies</a> that feature Nmap.</p>
      ]]></description>
    </item>

    <item>
      <title>Aggregation is a crime, says World Heritage Convention</title>
      <pubDate>Fri, 08 Nov 2024 12:17:22 +0100</pubDate>
      <guid isPermaLink="false">world-heritage-list</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">GeoRSS</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">KML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/whc.opml</link>
      <description><![CDATA[
        <p>Here is one funny trick that lets you make a lot of RSS aggregators commit crimes. What if you just said that your RSS feed is copyrighted and nobody can republish its contents? Actually, what if, because of copyright's extremely rigid defaults, every single RSS feed cannot be republished?</p>
        <p>You could spend a while arguing for and against this in your head. My own take on this is that this is unenforceable, and so opposed to the entire point of syndication that it just makes no sense. If you don't want your stuff to be shared, don't share it in the first place.</p>
        <p>But you can do better than just a theory. You can put this to the test. Just throw <a href="https://whc.unesco.org/en/syndication" rel="noreferrer">the World Heritage Convention's feeds</a> at your nearest feed aggregator!</p>
        <p>They specify that you must get a written permission to syndicate anything from their website. If you republish the feeds they provide, they will give you that permission for free. If you want to republish anything else, you will have to pay, and they can refuse. You are only allowed to change the <q>display typeface, typeface size, typeface color, and linebreaks</q>, and nothing else.</p>
        <p>Considering the amount of feed aggregators out there that gladly gobble up anything online and spit it back out onto their own feeds, or the amount of SEO-friendly spam that copies other websites, it is certain that these feeds have been illegally copied multiple times. Search for a sentence found in the description of any <code>&lt;item&gt;</code> and you will find them.</p>
        <p>I am waiting for the day I get to feature a decision of the International Court of Justice related to RSS in this feed. Thanks <abbr title="United Nations Educational, Scientific and Cultural Organization">UNESCO</abbr>.</p>
      ]]></description>
    </item>

    <item>
      <title>Bureau of Meteorology of Australia</title>
      <pubDate>Tue, 12 Nov 2024 15:22:28 +0100</pubDate>
      <guid isPermaLink="false">au-bom</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Weather</category>
      <link>http://envs.net/~lucidiot/rsrsss/opml/au-bom.opml</link>
      <description><![CDATA[
        <p>Weather services in so-called first world countries appear to be a good source of feeds. It makes sense, since they probably were among the first public services to go online and thus were there during the XML era.</p>
        <p>The Bureau of Meteorology of the Australian government is no exception to this. It provides three RSS feeds per state, all for severe weather warnings: one for land warnings, one for sea warnings, and one for both.</p>
        <p>Unfortunately, the <abbr title="Bureau of Meteorology">BoM</abbr> seems to start forgetting what RSS feeds are meant for, like many other websites. Their website cannot be accessed from <a href="https://envs.net" target="_blank">envs.net</a>, probably because its IP address is blocked as it is a <abbr title="Virtual Private Server">VPS</abbr>. Their website also cannot be accessed from other IPs if the <code>User-Agent</code> header is missing, contains a known HTTP tool like <code>curl</code>, or matches the regular expression <code>https?:/*\w</code>. There are no exceptions configured for the RSS feed URLs or for well-known feed readers.</p>
        <p>I generated an <abbr title="Outline Processor Markup Language">OPML</abbr> anyway, running the script on my own laptop since it can't run on envs.net. You might have better luck than me getting those feeds to work in your reader. And if you don't and are an Aussie, then perhaps you can help make the world a tiny bit better by complaining to your government.</p>
      ]]></description>
    </item>

    <item>
      <title>HPC:Factor</title>
      <pubDate>Wed, 20 Nov 2024 23:10:55 +0100</pubDate>
      <guid isPermaLink="false">hpc-factor</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/hpcfactor.opml</link>
      <description><![CDATA[
        <p>I am posting this from Alpine Linux on my netbook <a href="https://envs.net/~lucidiot/computers/azf.html">AZF</a>. I was aiming to get a triple-boot going on that netbook, with Windows XP, Windows 7 and Alpine. I installed Windows 7 a few months ago, and Alpine only two weeks ago. There's a backup of an XP system somewhere that I need to restore.</p>
        <p>This netbook is one more step in a half-accidental miniaturization of my devices. Every device that newly enters my home seems to keep on getting smaller. We are now down to a 10" 1024×768 screen. I am getting used to this keyboard well, though I am annoyed by the <kbd>&lt; &gt;</kbd> key, which is only ⅔ the size of a normal key and in an inconvenient, non-standard place. You are reading some <abbr title="eXtensible Hypertext Markup Language">XHTML</abbr> embedded inside an <abbr title="eXtensible Markup Language">XML</abbr> document that I am typing entirely by hand, so I'm sure you can guess that I rely on that key significantly.</p>
        <p>But when it comes to making my devices smol, I could go even further. The <a href="https://en.wikipedia.org/wiki/Sony_Vaio_P_series" rel="noreferrer">Sony Vaio P series</a> comes to mind, with its 8" display that has a <em>larger</em> resolution than my current netbook.</p>
        <p>I could also try running <a href="https://postmarketos.org/" rel="noreferrer">postmarketOS</a> on a repurposed phone. Or I could get a <abbr title="Portable Digital Assistant">PDA</abbr>, running Windows Mobile as that would give me interesting opportunities to mess with <a href="https://envs.net/~lucidiot/computers/#morgue">the Morgue</a> even further. But those wouldn't exactly be <em>computers</em>, they would be mobile devices.</p>
        <p>If I keep to a stricter definition of a computer, then the winners might just be <a href="https://en.wikipedia.org/wiki/Handheld_PC" rel="noreferrer">Handheld PCs</a>. As desktops are meant to be on desks and laptops on your lap, those <em>palmtops</em> are for your palm. Soon your entire body will be convered in computers.</p>
        <p>There is still a small community of handheld PC users, and new software is still being occasionally released for <a href="https://en.wikipedia.org/wiki/Windows_CE" rel="noreferrer">Windows CE</a>, the <abbr title="Operating System">OS</abbr> that Microsoft put on those when they created the brand. It can be found on <a href="https://www.hpcfactor.com" rel="noreferrer">HPC:Factor</a>. I found it randomly when trying to learn more about some very early support for feeds from Microsoft, before XML was even fully standardized.</p>
        <p>I would love to someday get my hands on a Windows CE device and mess with it, especially to learn more about feeds and a strange client-side server-side web programming language. Those two <em>-sides</em> are not a typo. But in the meantime, you can use yet another <abbr title="Outline Processor Markup Language">OPML</abbr> file to check out the RSS feeds of their website and forums, which include hardware and software reviews, software downloads, and a treasure trove for buying, using, developing and troubleshooting a Handheld PC.</p>
      ]]></description>
    </item>

    <item>
      <title>Peachmoon.moe</title>
      <pubDate>Sun, 08 Dec 2024 21:47:21 +0100</pubDate>
      <guid isPermaLink="false">peachmoon</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://peachmoon.moe/atom.xml</link>
      <description><![CDATA[
        <p>As the end of the year approaches, it is a good time to reflect on what happened during that year, on what we are thankful for. One of the things that I am thankful for this year is a deepening online friendship and some of its consequences. One of these consequences is that my friend Mana started her own website, <a href="https://peachmoon.moe" rel="noreferrer">Peachmoon.moe</a>, with a lot of nudging from me, and I got to see it evolve almost all year.</p>
        <p>The very first thing that comes to my mind when thinking about how to describe this website is <em>cute</em>. This is also a very fitting word for Mana herself. Despite her believing that she is bad at computers, bad at drawing, or completely uninteresting, we get a cool website filled with pretty visuals where we can discover her and her thoughts, hobbies, creations, and it is just as fascinating as any personal website of the "web revival" movement. Come to find out about idols, Stardew Valley mods, anime and manga full of cute girls, bullet journaling, visual novels, tiramisu, and more.</p>
        <p>And of course, as with any time a friend lets me talk them into making changes to their website, there's <a href="https://peachmoon.moe/atom.xml" rel="noreferrer">an RSS feed</a>. She accidentally trolled everyone involved in feed format drama by providing an <a href="https://www.rssboard.org/rss-specification" rel="noreferrer"><abbr title="Really Simple Syndication">RSS</abbr> 2.0</a> feed named <samp><a href="https://www.ietf.org/rfc/rfc4287.txt" rel="noreferrer">atom</a>.xml</samp>. <em>Chef's kiss</em>. That feed includes both the <a href="https://peachmoon.moe/blog/" rel="noreferrer">blog posts</a> and the <a href="https://peachmoon.moe/updates/" rel="noreferrer">site updates</a>. You can keep track of everything happening on the website, not just the blogging, a difference that many personal website owners forget about.</p>
        <p>By the way, she has repeatedly attempted to compliment me publicly on that website, which is of course a crime. You can help avenge me by complimenting her back on <a href="https://mana.atabook.org/" rel="noreferrer">her guestbook</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>Rappel Conso</title>
      <pubDate>Sun, 15 Dec 2024 21:44:27 +0100</pubDate>
      <guid isPermaLink="false">rappel-conso</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>http://envs.net/~lucidiot/rsrsss/opml/fr-recalls.opml</link>
      <description><![CDATA[
        <p>A month ago, the <a href="https://x.com/RappelConso/" rel="noreferrer">Twitter account of <em>Rappel Conso</em></a>, a website of the French government that lists all product recalls, tweeted about <a href="https://rappel.conso.gouv.fr/fiche-rappel/16556/Interne" rel="noreferrer">this recall</a> for a triathlon bike. This tweet got surprisingly popular! People seemed to be particularly interested, perhaps concerned, by this recall of a bike that looked surprisingly similar to… cheese.</p>
        <p>Recalls usually include a photo of the affected product to help consumers identify them. The Twitter account includes those photos in the tweets, but for this bike, the photo of half of a Reblochon cheese was attached instead. This photo came from <a href="https://rappel.conso.gouv.fr/fiche-rappel/16601/Interne" rel="noreferrer">a different recall</a> that got published almost simultaneously. Of course, it took no time for everyone to notice such a mistake from a governmental account, and a few hours later, the tweet got removed.</p>
        <p>I see two ways in which this could have happened. The first would be that someone just uploaded the same thumbnail twice accidentally. However, both of those recalls were made volountarily, without involving the authorities, so they would be submitted by the manufacturers themselves, so those thumbnails may have been uploaded by two different people!</p>
        <p>Another alternative, which I see very often in my job, is that a race condition occurred. The code that automatically tweets the recalls probably ran like so:</p>
        <ol>
          <li>Retrieve the latest recall.</li>
          <li>Write the tweet.</li>
          <li>Find a thumbnail for the latest recall.</li>
          <li>If there is a thumbnail, add it to the tweet.</li>
          <li>Send the tweet.</li>
        </ol>
        <p>In most cases, this will work just fine. But if two recalls get submitted at almost the same time and no safeguards are in place when retrieving the thumbnail, you could get the thumbnail of a different recall:</p>
        <ol>
          <li>Someone submits a recall for the bike, triggering the tweet code.</li>
          <li>Retrieve the latest recall (the bike).</li>
          <li>Write the tweet.</li>
          <li>Someone submits a recall for the cheese while this tweet code is running.</li>
          <li>Find a thumbnail for the latest recall (the cheese!).</li>
          <li>If there is a thumbnail, add it to the tweet.</li>
          <li>Send the tweet.</li>
        </ol>
        <p>Most databases have a concept of transactions that should prevent this from happening, and most developers are taught about this in a database class. However, the trend of modern web development is to not care about the database at all, often with bad consequences. This is one of those consequences, and one that was trivially easy to avoid.</p>
        <p>When reviewing code, most of my time is spent thinking about the database queries and imagining situations where this kind of issue could crop up. When testing some code, I also always check the database query history to see if anything weird crops up. Unfortunately, many developers do not have the time or skills to review or test their own code, or their team does not care about reviewing or testing other people's code.</p>
        <p>Maybe we should issue a recall for this recall service, because the confusion from the thumbnails could lead to misidentifying a recalled product?</p>
        <hr />
        <p>Anyway, here's something nicer about Rappel Conso, something finally relevant for this feed. It provides RSS feeds! <samp>/rss</samp> gives you <a href="https://rappel.conso.gouv.fr/rss" rel="noreferrer">every recall</a>, <samp>/rss?q=fromage</samp> gives you <a href="https://rappel.conso.gouv.fr/rss?q=fromage" rel="noreferrer">every cheese recall</a>, and <samp>/rss?categorie=0112</samp> gives you <a href="https://rappel.conso.gouv.fr/rss?categorie=0112" rel="noreferrer">every recall of frogs and snails</a>. This is France after all.</p>
        <p>As is custom here, I made an <abbr title="Outline Processor Markup Language">OPML</abbr> file to list the feeds of the 70 categories and subcategories. I did not try to put every single possible search query, or the file probably wouldn't fit in this universe. I suppose you can use it if you are a very paranoid person buying products in France. Have fun panicking!</p>
      ]]></description>
    </item>

    <item>
      <title>RSS too, is yuri</title>
      <pubDate>Sun, 22 Dec 2024 23:32:25 +0100</pubDate>
      <guid isPermaLink="false">dynasty-scans</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://dynasty-scans.com/feed</link>
      <description><![CDATA[
        <p>Dynasty Scans is a well-known scanlator group, publishing English translations of mostly yuri manga. They will be celebrating their 20th anniversary next year. <a href="https://dynasty-scans.com" rel="noreferrer">Their website</a> is great. It's lightweight and has a lot of features, and the community has also built custom themes and userstyles to improve it further. There is an undocumented JSON API that is accessible without an API key or any severe restriction, making it easy to integrate it within external viewers like <a href="https://tachiyomi.org/" rel="noreferrer">Tachiyomi</a>.</p>
        <p>Their tagging is also more detailed than average, making it easy to find manga of a specific topic, skip the ones that you know you won't like, or find the right meme to repost somewhere. Or the tags themselves can be the memes. Like <a href="https://dynasty-scans.com/tags/insane_amounts_of_title" rel="noreferrer">long titles</a>? Like <a href="https://dynasty-scans.com/tags/insane_amounts_of_hand_holding" rel="noreferrer">hand-holding</a>? Would you like to <a href="https://dynasty-scans.com/tags/become_bread" rel="noreferrer">become bread</a>?</p>
        <p>For this week, I was looking at the feeds of a different website, one that I would have never expected to possibly feature on here. I wanted to state that RSS too, is yuri, to follow <a href="https://fanlore.org/wiki/This_too_is_yuri" rel="noreferrer">a meme</a> that I commonly see on the Fediverse. And while doing so, I wondered if I could find an actual yuri feed. Turns out Dynasty has two Atom feeds for the most recent chapters, <a href="https://dynasty-scans.com/feed" rel="noreferrer">sorted by official release date</a> or <a href="https://dynasty-scans.com/feed?added=1" rel="noreferrer">sorted by the date they were added to the website</a>.</p>
        <p>So there we have it. RSS too, is yuri. Another excellent argument in favor of RSS.</p>
      ]]></description>
    </item>

    <item>
      <title>Pornhub</title>
      <pubDate>Sat, 28 Dec 2024 01:53:33 +0100</pubDate>
      <guid isPermaLink="false">pornhub</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/pornhub.opml</link>
      <description><![CDATA[
        <p>This post discusses pornography but does not depict any directly, and links to some websites with adult content. By reading it or clicking its links, I assume that you know your own local laws enough to tell whether you are actually allowed to read this. I do not have the technological means to violate your privacy and verify this automatically.</p>
        <hr />
        <p>On multiple occasions in the past, I have heard that the main motivators for most of the innovation in computer hardware are the video games and porn industries. This was before artificial &ldquo;intelligence&rdquo; ruined everything of course. We have mentioned video games in the past on <abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr>, notably with the <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#grabfreegames">Grab Free Games post</a>, but we have yet to see porn.</p>
        <p>We came close to it last week with <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#dynasty-scans">the Dynasty Scans feed</a>, as a lot of their tagging revolves around sexual content. People are specific about their kinks after all. But I had featured that feed while I was researching whether porn sites had any RSS feeds, so here we are.</p>
        <p>Pornhub advertises only one feed through <a href="https://www.rssboard.org/rss-autodiscovery" rel="noreferrer">RSS Autodiscovery</a>, for <a href="https://pornhub.com/rss" rel="noreferrer">featured videos</a>. But there are more. I also found a feed for <a href="https://www.pornhub.com/rss-new-videos" rel="noreferrer">the latest videos</a>, and a feed for each category.</p>
        <p>The titles for the category feeds are missing a space, so <a href="https://www.pornhub.com/feed/lesbian" rel="noreferrer">the lesbian category feed</a> is titled <samp>LesbianRSS</samp>, which inspired me for last week's post about RSS being <a href="https://en.wikipedia.org/wiki/Yuri_(genre)" rel="noreferrer">yuri</a>.</p>
        <p>The feeds use a bunch of non-standard tags with no XML namespace that will probably not be understood by any feed reader: <samp>thumb</samp>, <samp>thumb_large</samp>, <samp>duration</samp>, <samp>embed</samp> and <samp>keywords</samp>. That's sad, they could have used <a href="https://www.rssboard.org/media-rss" rel="noreferrer">Media RSS</a> for this. That would have made the feeds <abbr title="PlayStation Portable">PSP</abbr>-compatible, ignoring the SSL issues, or compatible with many podcast players. You could still combine a feedreader with <a href="https://github.com/yt-dlp/yt-dlp" rel="noreferrer">yt-dlp</a> and achieve the same thing anyway.</p>
        <p>I made <a href="https://envs.net/~lucidiot/rsrsss/opml/pornhub.opml" rel="noreferrer">an <abbr title="Outline Processor Markup Language">OPML</abbr> file</a> for all of the feeds that I could find, in all available languages. This totals to 1320 feeds. Not bad.</p>
        <p>What a better way to end the year than to prove once more that RSS is neither dead nor only for blogs by showing it is also for porn? Finally, the joke pronounciation for <abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr> as /ɑɹsɑɹs/ (<em>arse-arse</em>) has some truth to it.</p>
      ]]></description>
    </item>

    <item>
      <title>Platform for Internet Content Selection</title>
      <pubDate>Wed, 01 Jan 2025 00:18:24 +0100</pubDate>
      <guid isPermaLink="false">pics</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">PICS</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">RDF</category>
      <link>https://www.w3.org/PICS/</link>
      <description><![CDATA[
        <p>Damn, we haven't discussed anything RSS since last year. Nevermind that this year started just 18 minutes ago here, this still must be fixed.</p>
        <p><a href="https://envs.net/~lucidiot/rsrsss/feed.xml#pornhub">Last year's last post</a> might just be the best opportunity I can have to discuss one of the few niche features of the <abbr title="Really Simple Syndication">RSS</abbr> 2.0 specification: the <samp>&lt;rating&gt;</samp> element. The current specification barely mentions it under the <a href="https://www.rssboard.org/rss-specification#optionalChannelElements" rel="noreferrer">optional channel elements</a> section, and just barely describes it as the <a href="https://www.w3.org/PICS/">PICS</a> rating for the channel. The RSS Profile, a set of recommendations on how to write feeds or implement feedreaders, has <a href="https://www.rssboard.org/rss-profile#element-channel-rating" rel="noreferrer">more details</a>.</p>
        <p><abbr title="Platform for Internet Content Selection">PICS</abbr> was an attempt by the <abbr title="World Wide Web Consortium">W3C</abbr> to provide a standard way to do parental controls. Websites can use the <samp>PICS-Label</samp> <abbr title="HyperText Transport Protocol">HTTP</abbr> header, or <code>&lt;meta http-equiv="PICS-Label" content="…" /&gt;</code>, to add an <em>advisory label</em> to their website. <a href="https://www.rssboard.org/rss-0-9-1-netscape#rating" rel="noreferrer">Starting with <abbr title="Really Simple Syndication">RSS</abbr> 0.91</a>, this label could also be specified in an RSS feed.</p>
        <p>Advisory labels use a cursed <a href="https://en.wikipedia.org/wiki/Lisp_(programming_language)" rel="noreferrer">Lisp</a>-like language to describe how a website rates against a rating system. A PICS rating system is equivalent to the <abbr title="Entertainment Software Rating Board">ESRB</abbr> or <abbr title="Pan-European Game Information">PEGI</abbr> ratings you see on video games: it defines one or more scales to rate a website's contents, for example on adult content, drug use, gambling, etc. The idea behind PICS is that a website can rate itself against one or more systems, then parental controls on the web browsers can be configured to allow or deny some ratings based on these judgements.</p>
        <p>Internet Explorer is the only web browser known to have implemented this, from IE 4 to 7. IE 7 just so happens to be the version that introduced the <a href="https://en.wikipedia.org/wiki/Windows_RSS_Platform" rel="noreferrer">Windows RSS Platform</a>, so it might be the case that it implements supports for PICS ratings; this is something that I will have to test later. <a href="https://www.devever.net/~hl/pics" rel="noreferrer">This article</a> provides details on PICS and its implementation in IE, with screenshots and code samples, if you want to learn more.</p>
        <p>You could use PICS to rate websites and feeds against anything, but of course it was mainly intended for the usual suspects of parental controls, the things that scare American christians: vulgar words, naked human bodies, sexual education and violence. Drugs, gambling or other addictive behavior were less of a concern to the lobbyists at the time, though some later rating systems included that.</p>
        <p>Most websites did not care about rating themselves, the external rating agencies that provided APIs to rate websites without their intervention are mostly American, and the feature was only available in one browser, so it was not very popular. But it had another significant effect, which I will explore later.</p>
        <p>For now, I have added a PICS rating to this feed. If you are viewing this feed on a browser that does not support RSS natively but supports <abbr title="Extensible Stylesheet Language Transformations">XSLT</abbr>, you can read it in its full <a href="https://en.wikipedia.org/wiki/S-expression" rel="noreferrer">S-expression</a> glory at the top of the page, under the <em>About this feed</em> section. For everyone else, you might want to just view the source of the page.</p>

        <h2><abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr> ratings</h2>
        <p>Note that these ratings only apply to the entire feed and not necessarily to the links it contains. One flaw in the PICS integration into RSS is that it is not possible to rate items separately, so I am going to conveniently ignore last week's post.</p>

        <h3><abbr title="Recreational Software Advisory Council on the Internet">RSACi</abbr> version 1</h3>
        <p>This is the rating system that was provided as <a href="https://www.devever.net/~hl/f/pics/rsaci.rat" rel="noreferrer">a <abbr title="Rating">RAT</abbr> file</a> starting with Internet Explorer 4 on Windows 98.</p>
        <dl>
          <dt>Violence</dt>
          <dd>Level 0 (No violence): There is no depiction of violence per their definition.</dd>
          <dt>Sex</dt>
          <dd>Level 0 (None): There is no sexual activity portrayed per their definition.</dd>
          <dt>Nudity</dt>
          <dd>Level 0 (None): There is no nudity per their definition.</dd>
          <dt>Language</dt>
          <dd>Level 1 (Mild expletives): I do not like using them much in my writing, but I have used some mild words that some language filters could block, like <em>bullshit</em>.</dd>
        </dl>

        <h3><abbr title="Internet Content Rating Association">ICRA</abbr> version 3</h3>
        <p>This rating system <a href="https://www.devever.net/~hl/f/pics/icrav03.rat" rel="noreferrer">was included in Windows XP</a> and enabled by default. The RSACi one was still available but disabled. The PICS definition already describes PICS as outdated: <q cite="https://www.devever.net/~hl/f/pics/icrav03.rat">for use in legacy PICS-based systems</q>.</p>
        <dl>
          <dt>Nudity</dt>
          <dd>Level 0 (None): There are no bare buttocks, breasts or genitals. That would probably boost my audience though.</dd>
          <dt>Sexual material</dt>
          <dd>Level 0 (None): There is no sexual material per their definition. The Internet has however taught me that anything can be someone's fetish, so maybe someone is getting turned on by this feed. Syndicate me daddy!</dd>
          <dt>Violence</dt>
          <dd>Level 0 (None): There is no assault, rape, injury, torture, killing, blood or dismemberment here. Syndication has nothing to do with <a href="https://en.wikipedia.org/wiki/Assassin%27s_Creed_Syndicate" rel="noreferrer">Assassin's Creed Syndicate</a>.</dd>
          <dt>Language</dt>
          <dd>Level 1 (Limited): As mentioned above, I said <em>bullshit</em> before, which could scare the puritans, so there is some mild language. When there is some, I should be using level 2 (Some), unless this is only in an <q cite="https://www.devever.net/~hl/f/pics/icrav03.rat">artistic, medical, educational, sports or news context</q>. I have been described as an <em>Rsszard of Syndication</em> before, and magic is often described as an art, so this is definitely an artistic context. You may also learn some stuff or get some news about syndication here, so it also counts as an educational and news context. Level 1 it is.</dd>
          <dt>Depiction of tobacco use</dt>
          <dd>Level 0 (None): You don't need to smoke to use feeds.</dd>
          <dt>Depiction of alcohol use</dt>
          <dd>Level 0 (None): You don't need to poison yourself to use feeds.</dd>
          <dt>Depiction of drug use</dt>
          <dd>Level 0 (None): You don't need to do drugs to use feeds.</dd>
          <dt>Depiction of weapon use</dt>
          <dd>Level 0 (None): You don't need weapons to use feeds, unless someone is insisting that RSS is already dead.</dd>
          <dt>Depiction of gambling</dt>
          <dd>Level 0 (None): I bet on RSS as a good tool for the Web, but there is no gambling here. Syndication has nothing to do with <a href="https://en.wikipedia.org/wiki/The_Syndicate" rel="noreferrer">The Syndicate</a>.</dd>
          <dt>Content that sets a bad example for young children</dt>
          <dd>Level 0 (None): Using RSS is definitely a good example. Young children should be brainwashed into using RSS as early as possible so that they can fix what the previous generations did to the Web.</dd>
          <dt>Content that creates fear, intimidation, etc.</dt>
          <dd>Level 1 (Limited): The previous statement probably somewhat sounds intimidating, and because I often delve into unknown and cursed technologies, especially those that involve XML, it can provoke fear. As explained for the Language rating, this is in an artistic, educational and news context, so this stays at level 1.</dd>
          <dt>Incitement/depiction of discrimination or harm</dt>
          <dd>Level 0 (None): Though I have my own preferences, all feed formats are welcome here. We don't discriminate between feeds.</dd>
          <dt>User-generated Content</dt>
          <dd>Level 1 (Limited): There technically is user-generated content since there are links everywhere to external feeds, but it is curated, thus moderated.</dd>
        </dl>

        <h3><abbr title="Taiwan Internet Content Rating Promotion Foundation">TICRF</abbr> version 1</h3>
        <p>This is a Taiwanese rating system that <a href="https://www.devever.net/~hl/f/pics/ticrf.rat" rel="noreferrer">also shipped with Windows XP</a>, but was disabled by default. Adding it also requires doing some extra configuration because Internet Explorer's Content Advisor did not support Unicode properly. I added this rating by translating every level in Google Translate, so this is far from perfect. It only has levels 0 and 3: there is some bad content or there isn't.</p>
        <dl>
          <dt>Language (網站內容語言之使用)</dt>
          <dd>Level 0 (18歲以下者可單獨閱讀或由家長陪伴閱讀之容許語言): There is no explicit language. This sounded like a much stricter definition than the more nuanced language filters from other systems.</dd>
          <dt>Sex or nudity (性與裸露之圖文或多媒體)</dt>
          <dd>Level 0 (完全無裸露及在父母陪伴之下可觀看): There is no sexual content or nudity. Of course, last week's post about a porn site is questionable, but the contents of RSRSSS itself are not something that would turn it into a restricted site entirely.</dd>
          <dt>Violence (暴力與流血之圖文或多媒體)</dt>
          <dd>Level 0 (完全無暴力或可由父母陪同觀看之虛構暴力及運動暴力): There is no violence or bloodshed.</dd>
          <dt>Other (其他)</dt>
          <dd>Level 0 (在父母陪同下可閱讀之其他內容): There is nothing else that should not be seen by individuals below 18 years old without parental supervision.</dd>
        </dl>

        <h3>Devever Content Ratings</h3>
        <p>This is an example rating system that was published along with <a href="https://www.devever.net/~hl/pics" rel="noreferrer">the article about PICS</a> that I mentioned earlier. It of course doesn't ship in Windows, but you can add <a href="https://www.devever.net/~hl/f/pics/devever.rat" rel="noreferrer">its rating file</a> to the Content Advisor.</p>
        <dl>
          <dt>Cats</dt>
          <dd>Level 0 (No cats): There are no cats depicted in this feed. Do note that <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#sandcats">one feed of sandcats</a> was once mentioned, but that's a separate site with its own rating, and you are warned that they are cute. Click at your own risk.</dd>
          <dt>Connector Mating</dt>
          <dd>Level 0 (No connector mating): We don't plug things into things here, we only use things already plugged into things to transfer feeds.</dd>
          <dt>Disturbing Technology</dt>
          <dd>Level 2 (Serious kludges): Some of the technologies that I explore here can be quite cursed. PICS is probably one of these, considering it puts S-expressions into an XML file and is quite obsolete. So I suppose that some <q cite="https://www.devever.net/~hl/f/pics/devever.rat">may traumatise the reader for a few hours</q>.</dd>
          <dt>Esotericism</dt>
          <dd>Level 3 (Critically endangered knowledge): It is a very real possibility that some of the technologies I describe here are so obsolete that a few people dying may make the knowledge of them disappear. One old post comes to mind about <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#japanese-formats"><abbr title="Asahina-Antenna Metadata Format">HINA</abbr> and <abbr title="Last-modified Information Relaying Specification">LIRS</abbr></a>, two syndication formats introduced in Japan before RSS took over. Those are so old that they were not well indexed in the Wayback Machine, so there is some knowledge that is likely only in the minds of the few people involved in it.</dd>
          <dt>Rantiness</dt>
          <dd>Level 1 (Mildly acerbic): I have been described as acerbic once, though not in the context of RSRSSS. I have repeatedly expressed some frustration here, that's for sure.</dd>
        </dl>

        <p>If you know of any additional rating systems that I could use, preferably with an existing <a href="https://www.w3.org/TR/REC-PICS-services/" rel="noreferrer">PICS rating service</a> document, feel free to <a href="https://tilde.town/~lucidiot/contact.html">reach out</a>. I might rate my feed against them and add to the <samp>&lt;rating&gt;</samp> element that nobody will ever use on this feed, just to provide a good example of it and preserve it a bit more.</p>
      ]]></description>
    </item>

    <item>
      <title>Learn RSS with Lenovo</title>
      <pubDate>Thu, 09 Jan 2025 05:44:28 +0100</pubDate>
      <guid isPermaLink="false">lenovo-ai-slop</guid>
      <link>https://www.lenovo.com/us/en/glossary/what-is-rss/</link>
      <description><![CDATA[
        <p>Sometime last summer, Lenovo decided that they should do some <abbr title="Search Engine Optimization">SEO</abbr> boosting using <abbr title="Artificial Intelligence">AI</abbr> slop, so they published a ton of pages under a <em>Glossary</em> section because no one ever looks at a glossary. But of course, if you get something to be indexed in a search engine, then some people will eventually find it, so it made the rounds yesterday in my small corner of the Web. Thanks to Lenovo's glossary, you can:</p>
        <ul>
          <li><a href="https://www.lenovo.com/us/en/glossary/what-is-rss/" rel="noreferrer">learn about RSS</a>;</li>
          <li><a href="https://www.lenovo.com/us/en/glossary/what-are-word-games/" rel="noreferrer">find out whether word games are good for your brain</a>;</li>
          <li><a href="https://www.lenovo.com/us/en/glossary/id10t/" rel="noreferrer">troubleshoot ID10T errors</a>;</li>
          <li><a href="https://www.lenovo.com/us/en/glossary/best-minecraft-house-ideas/" rel="noreferrer">get Minecraft house ideas</a>;</li>
          <li><a href="https://www.lenovo.com/us/en/glossary/minecraft-mods/" rel="noreferrer">get the best Minecraft mods</a>;</li>
          <li><a href="https://www.lenovo.com/us/en/glossary/best-skyrim-mods/" rel="noreferrer">get the best Skyrim mods</a>.</li>
        </ul>
        <p>That is definitely what you were looking for by browsing Lenovo's website. And I suppose their attempt at <abbr title="Search Engine Optimization">SEO</abbr> boosting might work, since Google has been returning complete nonsense as their search results ever since they put <abbr title="Artificial Intelligence">AI</abbr> in there, and they can't even figure out why because they cannot even consider the possibility that they shouldn't use that to rank search results. It's incredible to see just how so many Silicon Valley people are quickly rewiring their brains to be even less intelligent that those artificial, pretend, fake intelligences.</p>
        <p>I can't wait to watch this whole thing burn. In the meantime, I will just keep on writing XML documents and XML processing scripts entirely by hand. And next week, we'll look at yet another RSS extension from a better era of the Web.</p>
      ]]></description>
    </item>

    <item>
      <title>Syndicate your weather reports like Yahoo!</title>
      <pubDate>Sat, 18 Jan 2025 00:43:36 +0100</pubDate>
      <guid isPermaLink="false">yweather</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">XSD</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Weather</category>
      <link>https://envs.net/~lucidiot/rsrsss/xsd/yweather.xsd</link>
      <description><![CDATA[
        <p>In a bygone era of the World Wide Web where the bots could be tamed without CloudFlare and some companies still at least pretended to care about providing free information on the information superhighway was Yahoo, a search engine that also delved into many other services like Yahoo! Pipes, the ancestor to <abbr title="If This Then That">IFTTT</abbr> and PowerBI. Yahoo also provided a ton of APIs for free, sometimes without an <abbr title="Application Programming Interface">API</abbr> key, until everything got killed when it got bought and moved around between American media conglomerates and became just an empty shell.</p>
        <p>One of those APIs was the Yahoo Weather API, which provided weather information as an RSS feed. To do so, they were using their own custom <abbr title="eXtensible Markup Language">XML</abbr> namespace. I was much too young to know or care about APIs back then, but I have seen it repeatedly in a bunch of lists of XML namespaces found in RSS feeds. I looked a bit deeper into it, because of course I had to.</p>
        <p>I have gone through <a href="http://web.archive.org/web/20070704225653/http://developer.yahoo.com/weather/" rel="noreferrer">the archived documentation</a> for the Yahoo! Weather RSS feeds from 2007, on a site more lightweight and more readable than most modern websites, and wrote my own <abbr title="XML Schema Definition">XSD</abbr> for it. So if you want your RSS feeds to include Yahoo! Weather-compatible weather data, have a look at <a href="https://envs.net/~lucidiot/rsrsss/xsd/yweather.xsd">the schema</a>.</p>
        <p>And of course, the <abbr title="eXtensible Stylesheet Language Transformation">XSLT</abbr> that shows you a neat webpage when you open this feed with a browser that does not natively support RSS now handles this namespace, so you can check out a fake weather report at the end of this post and some metadata in the <em>About this feed</em> section in the header.</p>

        <h2>Reference</h2>
        <p>The recommended name for this namespace is <samp>yweather</samp>, and its URL is <samp>http://weather.yahooapis.com/ns/rss/1.0</samp>.</p>
        <dl>
          <dt><code>&lt;yweather:location&gt;</code></dt>
          <dd>
            <p>The location where the weather conditions are being reported. This is intended to be used in a <code>&lt;channel&gt;</code> element.</p>
            <p>Note that the Yahoo! Weather API was also repeating this location in <code>&lt;item&gt;</code> elements as GPS coordinates using the <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#geo">Basic Geo Vocabulary</a>. They could have done so on the <code>&lt;channel&gt;</code>!</p>
            <dl>
              <dt><code>city</code></dt>
              <dd>Name of the city whose weather conditions are being reported.</dd>
              <dt><code>region</code></dt>
              <dd>The state, territory or region, if there is one. May be empty.</dd>
              <dt><code>country</code></dt>
              <dd>The country that the city belongs to. This is documented as being a two-character country code, but <a href="https://github.com/kousen/IntroGroovy/blob/8642a3ef2851db08184ce2742fd80776d1c507ec/src/main/groovy/xml/sample_weather.xml#L10" rel="noreferrer">it might not be</a>.</dd>
            </dl>
          </dd>
          <dt><code>&lt;yweather:units&gt;</code></dt>
          <dd>
            <p>The units of measurement used in this report. This could be controlled with the <samp>u</samp> query parameter, to be set to either <samp>c</samp> for Celsius degrees and implicitly metric units, or <samp>f</samp> for Fahrenheit degrees and implicitly wrong units. This is intended to be used in a <code>&lt;channel&gt;</code> element.</p>
            <dl>
              <dt><code>temperature</code></dt>
              <dd>The unit of temperature, either <samp>c</samp> for Celsius degrees or <samp>f</samp> for Fahrenheit degrees.</dd>
              <dt><code>distance</code></dt>
              <dd>The unit of distance, either <samp>km</samp> for kilometers or <samp>mi</samp> for miles.</dd>
              <dt><code>pressure</code></dt>
              <dd>The unit of pressure, either <samp>mb</samp> for millibars or <samp>in</samp> for <abbr title="pounds per square inch">psi</abbr>.
              <dt><code>speed</code></dt>
              <dd>The unit of speed, either <samp>kph</samp> for kilometers per hour or <samp>mph</samp> for miles per hour.</dd>
            </dl>
          </dd>
          <dt><code>&lt;yweather:wind&gt;</code></dt>
          <dd>
            <p>The current wind conditions. This is intended to be used in a <code>&lt;channel&gt;</code> element.</p>
            <dl>
              <dt><code>chill</code></dt>
              <dd>Integer. The wind chill, the perceived temperature as influenced by the wind, in the chosen unit of temperature.</dd>
              <dt><code>direction</code></dt>
              <dd>Integer. The direction in which the wind blows, in angular degrees from 0 to 359.</dd>
              <dt><code>speed</code></dt>
              <dd>Non-negative integer. The speed at which the wind blows, in the chosen unit of speed.</dd>
            </dl>
          </dd>
          <dt><code>&lt;yweather:atmosphere&gt;</code></dt>
          <dd>
            <p>The current atmospheric conditions. This is intended to be used in a <code>&lt;channel&gt;</code> element.</p>
            <dl>
              <dt><code>humidity</code></dt>
              <dd>Integer. Relative humidity, in percent, from 0 to 100.</dd>
              <dt><code>visibility</code></dt>
              <dd>Non-negative integer. Visibility, in hundredths of the chosen unit of distance. One kilometer or one mile will be expressed as <samp>100</samp>.</dd>
              <dt><code>pressure</code></dt>
              <dd>Non-negative decimal number. Barometric pressure, in the chosen unit of pressure.</dd>
              <dt><code>rising</code></dt>
              <dd>
                Integer. The current trend of the barometric pressure:
                <dl>
                  <dt>0</dt>
                  <dd>Steady barometric pressure</dd>
                  <dt>1</dt>
                  <dd>Rising barometric pressure</dd>
                  <dt>2</dt>
                  <dd>Falling barometric pressure</dd>
                </dl>
              </dd>
            </dl>
          </dd>
          <dt><code>&lt;yweather:astronomy&gt;</code></dt>
          <dd>
            <p>The current astronomical conditions. This is intended to be used in a <code>&lt;channel&gt;</code> element.</p>
            <dl>
              <dt><code>sunrise</code></dt>
              <dd>The time of sunrise for the current day, in a <code>h:mm a</code> format per <a href="https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table" rel="noreferrer">Unicode Technical Standard 35 Part 4</a>, for example <samp>6:54 am</samp>.</dd>
              <dt><code>sunset</code></dt>
              <dd>The time of sunset for the current day, in a <code>h:mm a</code> format per <a href="https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table" rel="noreferrer">Unicode Technical Standard 35 Part 4</a>, for example <samp>9:37 pm</samp>.</dd>
            </dl>
          </dd>
          <dt><code>&lt;yweather:condition&gt;</code></dt>
          <dd>
            <p>The current weather conditions. This is intended to be used in the <code>&lt;item&gt;</code> element. It should be unique within this element.</p>
            <dl>
              <dt><code>text</code></dt>
              <dd>Human-readable name of the current weather conditions, for example <samp>Sunny</samp>.</dd>
              <dt><code>code</code></dt>
              <dd>Non-negative integer. A code for the current weather conditions. For example, 0 for a tornado, or 46 for snow showers. Refer to my XSD or to the archived documentation for a full list of codes.</dd>
              <dt><code>temp</code></dt>
              <dd>Integer. The current temperature, in the chosen unit of temperature.</dd>
              <dt><code>date</code></dt>
              <dd>
                <p>The date and time for which the current weather conditions apply, in a <code>EEE, dd MMM yyyy h:mm a zzz</code> format per <a href="https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table" rel="noreferrer">Unicode Technical Standard 35 Part 4</a>, for example <samp>Sat, 20 Aug 2011 6:54 am PST</samp>.</p>
                <p>This is very close to the <a href="https://www.w3.org/Protocols/rfc822/#z28" rel="noreferrer">RFC 822 section 5</a> format used by RSS feeds, but with a 12-hour clock and with different timezone names, for example CET for Central European Time where the RFC only allowed some American time zones. This same format is being used in the <code>&lt;lastBuildDate&gt;</code> element of the <code>&lt;channel&gt;</code> and in the <code>&lt;pubDate&gt;</code> element of the <code>&lt;item&gt;</code>, causing all Yahoo! Weather feeds to be invalid.</p>
              </dd>
            </dl>
          </dd>
          <dt><code>&lt;yweather:forecast&gt;</code></dt>
          <dd>
            <p>The forecasted weather conditions for a future day, as of the time of publication. This is intended to be used in the <code>&lt;item&gt;</code> element, and can be repeated to share forecast information for multiple days.</p>
            <dl>
              <dt><code>text</code></dt>
              <dd>Human-readable name of the forecasted weather conditions, for example <samp>Sunny</samp>.</dd>
              <dt><code>code</code></dt>
              <dd>Non-negative integer. A code for the forecasted weather conditions. For example, 0 for a tornado, or 46 for snow showers. Refer to my XSD or to the archived documentation for a full list of codes.</dd>
              <dt><code>low</code></dt>
              <dd>Integer. The lowest forecasted temperature, in the chosen unit of temperature.</dd>
              <dt><code>high</code></dt>
              <dd>Integer. The highest forecasted temperature, in the chosen unit of temperature.</dd>
              <dt><code>date</code></dt>
              <dd>The date of the day for which the forecasted weather conditions apply, in a <code>dd MMM yyyy</code> format per <a href="https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table" rel="noreferrer">Unicode Technical Standard 35 Part 4</a>, for example <samp>20 Aug 2011</samp>.</dd>
              <dt><code>day</code></dt>
              <dd>The weekday for which the forecasted weather conditions apply, in the <code>eee</code> format per <a href="https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table" rel="noreferrer">Unicode Technical Standard 35 Part 4</a>, for example <samp>Sat</samp>.</dd>
            </dl>
          </dd>
        </dl>

        <h2>Examples</h2>
        <p>Check the source code of this feed. The RSS item you are likely reading this from includes an example of the <code>&lt;yweather:condition&gt;</code> and <code>&lt;yweather:forecast&gt;</code> elements. The channel also includes <code>&lt;yweather:units&gt;</code> and <code>&lt;yweather:location&gt;</code>, but not the others because I just can't be bothered to make up some current weather conditions every time I update this feed.</p>
        <p>For more examples, you may want to check out <a href="https://sourcegraph.com/search?q=lang:xml+http://xml.weather.yahoo.com/ns/rss/1.0" rel="noreferrer">whatever has been committed to GitHub</a> featuring this namespace. This is usually how I learn about dead XML namespaces even when they are not documented.</p>
      ]]></description>
      <yweather:condition
        text="Hurricane"
        code="2"
        temp="1312"
        date="Sat, 18 Jan 2025 12:43 am CET"
      />
      <yweather:forecast
        text="Tornado"
        code="0"
        low="-273"
        high="2137"
        date="19 Jan 2025"
        day="Sun"
      />
    </item>

    <item>
      <title>Analog Office</title>
      <pubDate>Wed, 22 Jan 2025 08:40:31 +0100</pubDate>
      <guid isPermaLink="false">analogoffice</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://analogoffice.net/feed.xml</link>
      <description><![CDATA[
        <p>I had already mentioned this a while ago when discussing <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#categories">how I categorize my feeds</a>: I would like to less feeds related to tech, to curate, filter those more. I also would like to have more feeds related to notebooks, note taking, writing in general, particularly because those can get me to use notebooks more, or to write more, including RSRSSS posts.</p>
        <p>I had mentioned this again when I shared <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#thecramped">The Cramped's feed</a>, and it is through that blog that I discovered <a href="https://analogoffice.net/" rel="noreferrer">Analog Office</a>, a blog dedicated to all things stationery.</p>
        <p>My thing is usually notebooks, but a blog that discusses stationery in general can be interesting to widen my horizons. With this blog, I learnt about <a href="https://analogoffice.net/2022/06/07/office-toy-the.html" rel="noreferrer">automatic numbering machines</a> or <a href="https://analogoffice.net/2022/10/05/office-toy-adding.html" rel="noreferrer">adding machines</a>, and got some great reminders to <a href="https://analogoffice.net/2023/02/13/mess-up-your.html" rel="noreferrer">use the good notebooks</a>, <a href="https://analogoffice.net/2022/12/19/if-you-want.html" rel="noreferrer">rely on notebooks to blog more</a>, or to <a href="https://analogoffice.net/2022/06/29/make-your-paper.html" rel="noreferrer">practice morning pages</a>. This blog also discusses various techniques to organize papers like the <a href="https://analogoffice.net/2023/02/22/from-paper-piles.html" rel="noreferrer">action file</a> and the <a href="https://analogoffice.net/2023/01/11/all-about-tickler.html" rel="noreferrer">tickler file</a>, which I recommend if you deal with a lot of paper daily.</p>
        <p>One thing I particularly like about this blog is how pragmatic most of the advice feels. This is definitely aimed at those who involve a lot of paper in their lives, but it does not go so far as to say you should spend your entire time doing nothing but writing notes and filing them somewhere, as you might see from Zettelkasten aficionados. In a Zettelkasten, it is only if you spend an inordinate amount of time filling it that you might start to reap some benefits from it, and that only works for specific kind of endeavours like conducting academic research. Most people should not use this. On the other hand, simple tricks like the <a href="https://analogoffice.net/2023/02/02/make-an-interest.html" rel="noreferrer">interest grid</a> will be useful for most people.</p>
      ]]></description>
    </item>

    <item>
      <title>The Marginalian</title>
      <pubDate>Tue, 28 Jan 2025 07:28:33 +0100</pubDate>
      <guid isPermaLink="false">themarginalian</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.themarginalian.org/feed/</link>
      <description><![CDATA[
        <p>Lately, various articles in my feed reader have, in a variety of contexts, discussed the notion of the <em>information diet</em>. That is, what you feed your brain. What you read, what you see, what your hear (without necessarily listening), what you touch, how you feel, etc. all contribute to how you think.</p>
        <p>To think well, you need both good raw material, good &ldquo;food for thought&rdquo;, as well as the right tools to think properly, such as being aware of logical fallacies, going through therapy, etc. This is true for any kind of thinking, be it described as rational, abstract, practical, or creative.</p>
        <blockquote cite="https://www.themarginalian.org/2025/01/26/darwin-imagination/">
          <p>The value of the products of our imagination depends of course on the number, accuracy, and clearness of our impressions, on our judgment and taste in selecting or rejecting the involuntary combinations, and to a certain extent on our power of voluntarily combining them.</p>
        </blockquote>
        <p>
          &mdash;Charles Darwin, <cite>The Descent of Man</cite>, <time>1871</time><br />
            cited by Maria Popova, <a href="https://www.themarginalian.org/2025/01/26/darwin-imagination/" rel="noreferrer"><cite>Darwin on How to Evolve Your Imagination</cite></a>, The Marginalian, <time>2025-01-26</time>
        </p>
        <p>I have cared about my information diet for a while, long before I heard of this concept. When I left my parents' home and was no longer required to watch the news on TV at every meal with them, my view of the world had slightly shifted, as some unhealthy part of my diet got removed. I have occasionally watched some news on TV since them and I do not regret not owning a TV at all.</p>
        <p>I also keep some surprisingly good memories of the quarantine in 2020. While that can be attribute to multiple different factors, consciously deciding to stay away as much as possible from reading any news about that pandemic other than any official government instructions protected me from a large amount of anxiety.</p>
        <p>Much more recently, as I learnt about this concept, I started asking myself whether something would be good, or is still good, for my information diet. With multiple international conflicts, as well as the least interesting yet most influential country of the West sliding into fascism even further, caring about one's information diet becomes more and more important.</p>
        <p>I only use social media that either does not mention any topic that may poison my brain, particularly by triggering unnecessary negative emtions, or that gives me a lot of control over it. I block any terms that may be triggering to me, stay away from people who engage in constant Internet drama or share too many news articles, etc. I had to unsubscribe from a feed or two recently as they succumbed to a wave of American despair.</p>
        <p>But caring about the information diet is not just about removing the bad stuff, it's also about adding more of the good stuff. And it is with this in mind that I share here a feed that I subscribed to recently, <a href="https://www.themarginalian.org/" rel="noreferrer">The Marginalian</a>.</p>
        <p>It's not easy to find a feed from my own subscriptions that inspires me enough to share it on <abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr>. Most subscriptions have become so normal that I might forget their true uniqueness or value. Instead, I keep a separate list of ideas of feeds to share instead, or of <abbr title="eXtensible Markup Language">XML</abbr> namespaces to explore, etc., and add to that list when I stumble upon a feed that inspires me even if it might not be something that I would subscribe to. But this feed fits the bill perfectly, as you may notice from the unusual length of this article.</p>
        <p>Since 2006, Maria Popova, a Bulgarian writer, shares on this blog originally called <em>Brain Pickings</em> some food that my brain found to be exquisite. Irregularly, but multiple times a week, Maria will share something thought-provoking, insightful, often on ideas such as the meaning of life, art, spirituality, love, etc.</p>
        <p>Most articles are a discussion of a book, be it a very recently published book with some contemporary takes, or a long-forgotten book of the previous century. But while the age of those books can be felt in the numerous quotes scattered throughout those articles, what they tell us is often still valid in the current age, or perhaps even more direly needed than before.</p>
        <p>This blog runs on WordPress, so it is rather easy to <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#wordpress">build many feeds</a> from it, for a search query or a category. But most articles are using at least half of the available categories, so filtering by category is not particularly useful. I just stick to the <a href="https://www.themarginalian.org/feed/">main feed</a>.</p>
        <p>I let my brain monch all of the good stuff during moments of calm, with little fatigue, when it might be the most receptive. If I find something to sound particularly interesting, to maybe relate to some other ideas I've had, I save some quotes in a random text document, and let them stew for a while. I come back to them when I feel ready to reflect on those properly, copy them in my journal, and write about them.</p>
        <p>A great metric for how thought-provoking something is to me is how much I will journal about it, and any quotes I take from reading this blog have been some of the most productive ones. Just yesterday, I wrote 14 journal pages, an unusually high number, with at least 10 related to quotes from this blog combined with fascinating conversations with <a href="https://peachmoon.moe/" rel="noreferrer">Mana</a>.</p>
        <p>This blog is helping me coalesce some thoughts on various topics such as why I want to move to another city, where I want to move, what I am looking for in a city, what I live for, why I blog, why I get an urge to photograph cities, what I look for in friendships, dealing with being mostly alone, my sexuality, mindfulness, or the information diet itself. And I have barely started digging, both through the blog's thousands of articles and through my thoughts related to them.</p>
        <p>I encourage you to, if you haven't already, pay attention to your information diet. Think about what you are feeding your brain, be it what feeds you subscribe to, how you read them, or what things you experience in the rest of your daily life, as well as how much. Experiment in adding, removing some sources, or changing how, when, where you process them, and see if there's any change in your life. It is likely that you can take some weight off your shoulders just by paying attention to how information is making you look at your own life. And perhaps, you might find that The Marginalian brings some good to you too!</p>
      ]]></description>
    </item>

    <item>
      <title>All Wikimedia Foundation wikis</title>
      <pubDate>Wed, 05 Feb 2025 20:35:04 +0100</pubDate>
      <guid isPermaLink="false">wikimedia-opml</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/wikimedia.opml</link>
      <description><![CDATA[
      <p>I am currently sitting on a high speed train with a 45 minute delay. While I wait to hopefully someday reach my destination, here's a new <abbr title="Outline Processor Markup Language">OPML</abbr> that nobody ever asked for: <a href="https://envs.net/~lucidiot/rsrsss/opml/wikimedia.opml">all 980 feeds of the recent changes of all Wikimedia Foundation wikis</a>.</p>
      <p>I built this thanks to the extra APIs provided by <a href="https://www.mediawiki.org/wiki/Extension:SiteMatrix" rel="noreferrer">Extension:SiteMatrix</a>, a MediaWiki extension. The <code>sitematrix</code> API action that this extension adds lets me list all of their wikis in all their languages in XML, so that a script can access every wiki and look for any <code>&lt;link rel="alternate" /&gt;</code> links, to find the feeds through <a href="https://www.rssboard.org/rss-autodiscovery" rel="noreferrer">RSS Autodiscovery</a>.</p>
      <p>There are more ways to syndicate content from <abbr title="Wikimedia Foundation">WMF</abbr>, so I will have to come back to those wikis some other time.</p>
      ]]></description>
    </item>

    <item>
      <title>The Notebooks of Leonardo Da Vinci</title>
      <pubDate>Sun, 16 Feb 2025 21:16:59 +0100</pubDate>
      <guid isPermaLink="false">davinci</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>http://interconnected.org/more/davinci/2025-02-16.rss</link>
      <description><![CDATA[
      <p>Ever wanted to read the notebooks of Leonardo Da Vinci? Well, do know that you can do so over RSS. Over twenty years ago, <a href="https://interconnected.org/" rel="noreferrer">Matt Webb</a> built a tool that could generate an RSS feed for those notebooks, feeding them to you one page at a time, to allow him to read those while still reading other books.</p>
      <p>To get the feed synchronized properly, use your own starting date in <a href="https://en.wikipedia.org/wiki/ISO_8601" rel="noreferrer">ISO 8601</a> format to build your own feed URL:</p>
      <pre>http://interconnected.org/more/davinci/<strong>YYYY-MM-DD</strong>.rss</pre>
      <p>This is a rather cool idea. You could probably do this for other books, for <abbr title="Portable Document Format">PDF</abbr>s, or any sequence of anything that can be included in a feed. I would like to see this for podcasts for example, as a way to slowly catch up on an existing podcast. If anyone ever creates such a tool, or one already exists, <a href="http://tilde.town/~lucidiot/contact.html" rel="noreferrer">let me know</a>.</p>
      ]]></description>
    </item>

    <item>
      <title>STRSS, the half-arsed RSRSSS</title>
      <pubDate>Sat, 22 Feb 2025 16:31:11 +0100</pubDate>
      <guid isPermaLink="false">strss</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Meta</category>
      <link>https://envs.net/~lucidiot/rsrsss/strss.xml</link>
      <description><![CDATA[
        <p>During an evening about a month ago, I had one of many interesting conversations with the lovely <a href="https://peachmoon.moe/" rel="noreferrer">Mana</a>. I took notes and let it <a href="https://anniemueller.com/posts/percolate" rel="noreferrer">percolate</a> through my brain for a little while, and many of the things that we discussed connected with other ideas I had, inspiring me on many topics. One of these is legacy: what do I want to leave behind?</p>
        <p>I still have a lot to mull over about this, and I hope that Mana will <a href="https://xkcd.com/148/" rel="noreferrer">blag</a> about this so I can have even more food for thought. But an answer that came out almost instantly was <em>contributing to humanity's knowledge</em>. Mostly, making existing knowledge on domains that I care about more discoverable, available, accessible. I think most of my projects fit into this:</p>
        <ul>
          <li>My now defunct French blog had dozens of articles that dug deep in some technical details of some of my other projects, and I know that I taught some concepts to other people, particularly about <abbr title="Structured Query Language">SQL</abbr> or <abbr title="Geospatial Information Systems">GIS</abbr>.</li>
          <li><a href="https://envs.net/~lucidiot/" rel="noreferrer">My wiki</a> has plenty of documentation and links to other documentation on various technologies.</li>
          <li>I recently started <a href="http://fileformats.archiveteam.org/wiki/Special:Contributions/Lucidiot" rel="noreferrer">contributing to the File Formats Wiki</a> with my knowledge of some obscure file formats.</li>
          <li><abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr> also fits this perfectly, by sharing random feeds, documenting feed formats, XML namespaces, etc.</li>
          <li>Even blogging or journaling, could fit this, since I am expressing my thoughts, thoughts that others might not have, a view of the world other than theirs.</li>
        </ul>
        <p>I don't need to be remembered specifically; I expect to be forgotten like the vast majority of humans, and I do not desire popularity, but I would like to help someone access the knowledge. Maybe they will be someone greater than me, and will be able to do something with it.</p>
        <p>At times, thinking about what would be left after I disappear from this world lead me to some far more depressing thoughts about death itself. But overall, I feel more <em>stressed</em> than depressed. There is so much knowledge left for me to share. I have so many notes, so many ideas, so many unfinished projects, and so little time. If I were to disappear right now, there would be so much waste.</p>
        <p>I don't want to disappear now, and there is nothing in my current situation that would predict an imminent death, but I still have to consider the possibility. Reading about meditation led me to various Buddhist concepts, like knowing that death is a part of life and cannot be avoided. Also related is <em>memento mori</em>. Ignoring the possibility of disappearing now would just be fooling myself.</p>
        <p>There is an easy way to reduce some of this stress, and that is to just publish everything to immediately make even the least developed notes I have available. It might not be perfect, but it's still something, some form of legacy, and it can still help someone.</p>
        <p>For probably a few years now, I had on <a href="https://hedgedoc.envs.net" rel="noreferrer">envs.net's HedgeDoc instance</a> some notes that could probably lead to a hundred more RSRSSS posts. Feeds, feed formats, links to documentation, links to lists of even more formats and standards and namespaces, questions, rants, etc. I already had the idea of sharing those in some way somewhere for a while, but didn't know how I could shape that. This recent anxiety over my legacy turned this idea into a <em>Problem</em>.</p>
        <p>Of course, I ended up manually typing up yet another RSS feed about RSS feeds. Say hello to <a href="https://envs.net/~lucidiot/rsrsss/strss.xml" rel="noreferrer">STRSS</a>, Superficial Thoughts on RSS.</p>
        <p>This new feed contains anything and everything. Notes, links with or without context, books, scientific papers, opinions, outlines of future posts, etc., but most importantly, lots of rabbit holes to fall into. Watch out for that! There are no publication dates, no particular order, and it will be updated randomly whenever I feel like it.</p>
        <p>I could have used an <abbr title="Outline Processor Markup Language">OPML</abbr> file for this, or even just a normal <abbr title="Hypertext Markup Language">HTML</abbr> page, or a direct link to my Markdown note on HedgeDoc. But I prefer to have this file stored in the same <a href="https://tildegit.org/lucidiot/rsrsss/" rel="noreferrer">Git repository</a> as the main feed, and OPML outlines are not well suited to writing longer paragraphs, drafts of posts, filled with HTML tags. Writing RSS items also means I do not have to convert between formats when publishing something, and I can reuse the <abbr title="Extensible Stylesheet Language Transformation">XSLT</abbr> I have for RSRSSS there. And since there is no more HedgeDoc, it also means I can work entirely offline, which is definitely a great thing in this over-connected world.</p>
        <p>I'm not sure how to end this post, so I will just let you admire the <abbr title="Superficial Thoughts on RSS">STRSS</abbr> logo:</p>
        <figure>
          <img src="https://envs.net/~lucidiot/rsrsss/img/strss.svg" />
          <figcaption><a href="https://en.wikipedia.org/wiki/ISO_7010" rel="noreferrer">ISO 7010</a> W999 &ndash; Thought syndication hazard</figcaption>
        </figure>
      ]]></description>
    </item>

    <item>
      <title>ISO Standards updates</title>
      <pubDate>Thu, 27 Feb 2025 08:15:08 +0100</pubDate>
      <guid isPermaLink="false">iso</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://www.iso.org/contents/shared/rss/latest-standards.rss</link>
      <description><![CDATA[
        <p>If there's one thing I am certain of after creating <a href="https://envs.net/~lucidiot/rsrsss/strss.xml" rel="noreferrer"><abbr title="Superficial Thoughts on RSS">STRSS</abbr></a>, it's that I definitely care about standards. That's not exactly a surprise. So while writing the feed, I thought, why couldn't I have a whole feed of standards?</p>
        <p>Well, the <abbr title="International Organization for Standardization">ISO</abbr> delivered. Their website is always hard to navigate, but with enough digging, I did find a feed of the <a href="https://www.iso.org/contents/shared/rss/latest-standards.rss" rel="noreferrer">latest updates to ISO standards</a>. You'll need to know by heart how the whole standardization process goes because they will give you no useful description! You'll get to watch standards move towards stages designated by two numbers, with no explanations as to what those numbers are, even though they do have <a href="https://www.iso.org/stage-codes.html" rel="noreferrer">some documentation on that</a>.</p>
        <p>But well, at least they've got a feed. With the constant battle I am having with so many websites to find their feeds or build my own, which got quite intense this week as I did some maintenance on a large feed generator, that's quite an achievement already.</p>
      ]]></description>
    </item>

    <item>
      <title>The Underground</title>
      <pubDate>Fri, 14 Mar 2025 06:39:10 +0100</pubDate>
      <guid isPermaLink="false">the-underground</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://theunderground.blog/feed.xml</link>
      <description><![CDATA[
        <p><a href="https://theunderground.blog" rel="noreferrer">The Underground</a> is a so-called experimental blog that has only been active from December 2023 to May 2024 as of writing. Its whole point is to be a feed-only blog, one that can only be read in a feed reader.</p>
        <p>I found this blog by checking my own feed reader, as a friend had shared a link to it on the previously featured <a href="https://linkbudz.m455.casa/" rel="noreferrer">Linkbudz</a>, along with a remark that this blog pretends to be original when it's not. There have been plenty of feed-only blogs over the years and some tilde friends and I had made our own too.</p>
        <p>I really only wanted to feature this particular blog, even though it appears to now be inactive, because one common feature with all of the feed-only blogs that I have encountered is that they all assume they are unique. Those blogs are so difficult to find, so niche, that they just cannot find each other. That is a little sad, and leaves me wondering whether we should have some "feed-only" category or tag in blog directories.</p>
        <p>I imagine there could be some interesting developments if this type of blog got a bit more popular or at least got its smol community. That would probably keep those blogs active for longer, because the bloggers would realize that they had an audience!</p>
      ]]></description>
    </item>

    <item>
      <title>European Parliament</title>
      <pubDate>Tue, 18 Mar 2025 13:23:42 +0100</pubDate>
      <guid isPermaLink="false">europarl</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://envs.net/~lucidiot/rsrsss/opml/europarl.opml</link>
      <description><![CDATA[
        <p>I am currently sitting on a small brick wall on the east bank of the Ill, in Strasbourg. Right in front of me, on the other side of the river, is the European Parliament, with its large iconic building made of steel and glass and the pedestrian bridge connecting that building to another, lesser known building dedicated to providing all sorts of services to the Parliament workers.</p>
        <p>I wrote <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#the-underground">last week's post</a> while on a train to Strasbourg, and I'm spending the week here. I found a really cool picnic spot here, in front of the river, with very little people passing by or sitting. I had a nice simple lunch here, resting a bit after some hectic few days where I took a lot of photos.</p>
        <p>I remembered that RSRSSS is a thing and that I should post something this week. Since I like to look at feeds related to where I am, like <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#dewey-blog">at a library</a> or <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#transtar-opml">on an empty highway</a>, I tried to think of something local. And well, the European Parliament is currently taking a good half of my field of view here.</p>
        <p>It turns out they have plenty of RSS feeds, in plenty of languages, since the European Union is the leading employer of translators in Europe. So, with <a href="https://envs.net/~lucidiot/computers/tank.html">tank</a> on my lap, in the sun, I wrote a script and got <a href="https://envs.net/~lucidiot/rsrsss/opml/europarl.opml" target="_blank">yet another <abbr title="Outline Processor Markup Language">OPML</abbr></a>.</p>
        <p>Perhaps you will find something to enjoy in the middle of 2736 feeds of European politics, and in the meantime, I will put everything back into my backpack and sail away on my scooter to keep exploring Strasbourg. I might cross the German border this afternoon, we'll see.</p>
      ]]></description>
    </item>

    <item>
      <title>Syndicated consumerism</title>
      <pubDate>Fri, 28 Mar 2025 21:37:42 +0100</pubDate>
      <guid isPermaLink="false">discovery-erss</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">XSD</category>
      <link>https://web.archive.org/web/20090228154924/http://shopping.discovery.com/erss/</link>
      <description><![CDATA[
        <p>Not even RSS can escape the steamroller of consumerism. In late 2006, Discovery Channel's online store came up with the <a href="https://web.archive.org/web/20090228154924/http://shopping.discovery.com/erss/" rel="noreferrer">Ecommerce RSS Module</a>, an <abbr title="Really Simple Syndication">RSS</abbr> 2.0 extension to build feeds of items available for sale, including auctions. As usual, I made <a href="https://envs.net/~lucidiot/rsrsss/xsd/erss.xsd">an <abbr title="XML Schema Definition">XSD</abbr></a> for it. While this is meant only for RSS 2.0, you could probably easily use this in Atom too. For <abbr title="RDF Site Summary">RDF</abbr> 1.0, you are probably better off using something more standard like a <a href="https://schema.org/Product" rel="noreferrer">Schema.org Product</a>.</p>
        <p>I haven't found any feeds using this, not even any from the archived Discovery Channel store, or any feed software that supports this. If you know of any, definitely <a href="https://tilde.town/~lucidiot/contact.html" rel="noreferrer">let me know</a>.</p>
        <h2>Reference</h2>
        <p>All of the elements defined below are to be used within an <abbr title="Really Simple Syndication">RSS</abbr> 2.0 <code>&lt;item&gt;</code> element.</p>
        <dl>
          <dt><code>&lt;ecommerce:listPrice&gt;</code></dt>
          <dd>
            <p>Required. Contains the current price of the item, a decimal number. This can have an optional attribute:</p>
            <dl>
              <dt><code>currency</code></dt>
              <dd>Optional. The <a href="https://en.wikipedia.org/wiki/ISO_4217" rel="noreferrer">ISO 4217</a> currency code the price is expressed in. Defaults to <samp>USD</samp>.</dd>
            </dl>
            <p>Note that the <a href="https://web.archive.org/web/20090228154924/http://shopping.discovery.com/erss/" rel="noreferrer">original specification</a> includes an example where the number is expressed with commas as the English decimal separator: <samp>1,200.00</samp>. I chose not to consider this valid in my <abbr title="XML Schema Definition">XSD</abbr>, as this just allows any string representation of a currency for display instead of using regular numbers that are easier to parse by machines.</p>
          </dd>
          <dt><code>&lt;ecommerce:SKU&gt;</code></dt>
          <dd>
            <p>Required. Stock keeping unit, an internal reference for the product, which can be any string. This can have an optional attribute:</p>
            <dl>
              <dt><code>UPC</code></dt>
              <dd>Optional. A <a href="http://en.wikipedia.org/wiki/Universal_Product_Code" rel="noreferrer">Universal Product Code</a> for this product. Any UPC format is accepted.</dd>
            </dl>
          </dd>
          <dt><code>&lt;ecommerce:auction /&gt;</code></dt>
          <dd>
            <p>Optional. Specifies that this offer is an auction and provides some details about the auction through some attributes:</p>
            <dl>
              <dt><code>bids</code><dt>
              <dd>Required non-negative integer. Number of bids that the item has received.</dd>
              <dt><code>endDate</code><dt>
              <dd>Required. An <a href="https://www.w3.org/Protocols/rfc822/#z28" rel="noreferrer">RFC 822 date and time</a> for the moment the auction ends.</dd>
              <dt><code>buyNowPrice</code><dt>
              <dd>Optional decimal number. The price for skipping the auction and buying the item now.</dd>
              <dt><code>currency</code></dt>
              <dd>Optional. The <a href="https://en.wikipedia.org/wiki/ISO_4217" rel="noreferrer">ISO 4217</a> currency code the aforementioned buy now price is expressed in. Defaults to <samp>USD</samp>.</dd>
            </dl>
          </dd>
          <dt><code>&lt;ecommerce:condition&gt;</code></dt>
          <dd>
            <p>Optional. The condition of the item, as one of three options:</p>
            <ul>
              <li><samp>new</samp></li>
              <li><samp>used</samp></li>
              <li><samp>refurbished</samp></li>
            </ul>
          </dd>
          <dt><code>&lt;ecommerce:manufacturer&gt;</code></dt>
          <dd>
            <p>Optional. Name of the manufacturer of the product. This can have one optional attribute:</p>
            <dl>
              <dt><code>model</code><dt>
              <dd>Model name or identifier for this product.</dd>
            </dl>
          </dd>
          <dt><code>&lt;ecommerce:mass /&gt;</code></dt>
          <dd>
            <p>Optional. Mass, or perhaps weight of the item.</p>
            <dl>
              <dt><code>unit</code><dt>
              <dd>Required string. Unit in which the mass or weight is expressed.</dd>
              <dt><code>weight</code><dt>
              <dd>Required decimal number. Mass or weight of the item.</dd>
            </dl>
            <p>This element is not described in the <a href="https://web.archive.org/web/20090228154924/http://shopping.discovery.com/erss/" rel="noreferrer">original specification</a> as specifying the mass of the item, but the <code>weight</code> attribute is documented as specifying the weight of the item, so it sounds more likely that this expresses a weight. To clarify this, you could use <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#georss-srs">GeoRSS with an <abbr title="Spatial Reference System">SRS</abbr></a> corresponding to the celestial body you are weighing the object on, and use newtons as a unit of actual weight.</p>
          </dd>
          <dt><code>&lt;ecommerce:offerPrice&gt;</code></dt>
          <dd>
            <p>Optional decimal number. Modified price for the item for a temporary offer.</p>
            <dl>
              <dt><code>currency</code></dt>
              <dd>Optional. The <a href="https://en.wikipedia.org/wiki/ISO_4217" rel="noreferrer">ISO 4217</a> currency code the price is expressed in. Defaults to <samp>USD</samp>.</dd>
            </dl>
          </dd>
          <dt><code>&lt;ecommerce:promoText&gt;</code></dt>
          <dd>
            <p>Optional string. Some marketing text to promote the item, typically a single sentence. This can have an attribute:</p>
            <dl>
              <dt><code>type</code><dt>
              <dd>Content type of this element, either <samp>plain</samp> or <samp>html</samp>. Defaults to <samp>plain</samp>.</dd>
            </dl>
            <p>As this element can only contain a string, any HTML content must be encoded with XML entities or with a CDATA block.</p>
          </dd>
          <dt><code>&lt;ecommerce:rating /&gt;</code></dt>
          <dd>
            <p>Optional. Some sort of rating or score for this item, expressed with two attributes:</p>
            <dl>
              <dt><code>possible</code><dt>
              <dd>Required non-negative integer. The highest possible score or rating.</dd>
              <dt><code>scored</code><dt>
              <dd>Required non-negative integer. The score or rating for this item.</dd>
            </dl>
          </dd>
          <dt><code>&lt;ecommerce:shipping&gt;</code></dt>
          <dd>Optional. A string providing some information about the shipping conditions.</dd>
          <dt><code>&lt;ecommerce:size /&gt;</code></dt>
          <dd>
            <p>Optional. The dimensions of the item, expressed through four attributes:</p>
            <dl>
              <dt><code>unit</code><dt>
              <dd>Required string. The unit in which all dimensions are expressed.</dd>
              <dt><code>width</code><dt>
              <dd>Optional decimal number. The width of the item.</dd>
              <dt><code>height</code><dt>
              <dd>Optional decimal number. The height of the item.</dd>
              <dt><code>depth</code><dt>
              <dd>Optional decimal number. The depth of the item.</dd>
            </dl>
          </dd>
          <dt><code>&lt;ecommerce:stockAvailability&gt;</code></dt>
          <dd>
            <p>Optional. Whether or not this item is available in stock. Only two values are permitted:</p>
            <ul>
              <li><samp>available</samp></li>
              <li><samp>out of stock</samp></li>
            </ul>
            <p>An additional attribute can be used:</p>
            <dl>
              <dt><code>quantity</code><dt>
              <dd>Optional non-negative integer. Quantity currently in stock.</dd>
            </dl>
          </dd>
        </dl>
        <h2>Example</h2>
        <figure>
          <pre>&lt;rss
  version="2.0"
  xmlns:ecommerce="http://shopping.discovery.com/erss"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
    http://shopping.discovery.com/erss
    https://envs.net/~lucidiot/rsrsss/xsd/erss.xsd
  "
&gt;
  &lt;channel&gt;
    &lt;!-- ... --&gt;
    &lt;item&gt;
      &lt;!-- ... --&gt;
      &lt;ecommerce:listPrice currency="EUR"&gt;1337.42&lt;/ecommerce:listPrice&gt;
      &lt;ecommerce:SKU UPC="2137-420-1312"&gt;123456&lt;/ecommerce:SKU&gt;
      &lt;ecommerce:auction
        bids="4"
        endDate="Fri, 28 Mar 2025 21:37:42 +0100"
        buyNowPrice="2137.42"
        currency="EUR"
      /&gt;
      &lt;ecommerce:condition&gt;refurbished&lt;/ecommerce:condition&gt;
      &lt;ecommerce:manufacturer model="ERSS"&gt;Discovery&lt;/ecommerce:manufacturer&gt;
      &lt;ecommerce:mass unit="firkins" weight="2.3" /&gt;
      &lt;ecommerce:offerPrice currency="EUR"&gt;1312.69&lt;/ecommerce:offerPrice&gt;
      &lt;ecommerce:promoText type="plain"&gt;Add some consumerism to your feeds now!&lt;/ecommerce:promoText&gt;
      &lt;ecommerce:rating possible="7" scored="5" /&gt;
      &lt;ecommerce:shipping&gt;Instant delivery over the information superhighway&lt;/ecommerce:shipping&gt;
      &lt;ecommerce:size
        unit="millifurlongs"
        width="4.971"
        height="4.971"
        depth="4.971"
      /&gt;
      &lt;ecommerce:stockAvailability quantity="999999"&gt;available&lt;/ecommerce:stockAvailability&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;</pre>
          <figcaption>Example of an <abbr title="Really Simple Syndication">RSS</abbr> 2.0 feed with every optional Ecommerce RSS Module element in use</figcaption>
        </figure>
      ]]></description>
      <enclosure url="https://web.archive.org/web/20090228154924/http://shopping.discovery.com/erss/" type="application/xml" length="11005" />
      <georss:where>
        <gml:Point srsName="urn:ogc:def:crs:EPSG:9.0:4326">
          <gml:pos>38.995099 -77.028309</gml:pos>
        </gml:Point>
      </georss:where>
      <ecommerce:listPrice currency="EUR">1337.42</ecommerce:listPrice>
      <ecommerce:SKU UPC="2137-420-1312">123456</ecommerce:SKU>
      <ecommerce:auction bids="4" endDate="Fri, 28 Mar 2025 21:37:42 +0100" buyNowPrice="2137.42" currency="EUR" />
      <ecommerce:condition>refurbished</ecommerce:condition>
      <ecommerce:manufacturer model="ERSS">Discovery</ecommerce:manufacturer>
      <ecommerce:mass unit="firkins" weight="2.3" />
      <ecommerce:offerPrice currency="EUR">1312.69</ecommerce:offerPrice>
      <ecommerce:promoText type="plain">Add some consumerism to your feeds now!</ecommerce:promoText>
      <ecommerce:rating possible="7" scored="5" />
      <ecommerce:shipping>Instant delivery over the information superhighway</ecommerce:shipping>
      <ecommerce:size unit="millifurlongs" width="4.971" height="4.971" depth="4.971" />
      <ecommerce:stockAvailability quantity="999999">available</ecommerce:stockAvailability>
    </item>

    <item>
      <title>Innovation still happens with RSS</title>
      <pubDate>Sat, 05 Apr 2025 16:24:13 +0200</pubDate>
      <guid isPermaLink="false">blogcat-opml-matching</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Tool</category>
      <link>https://andregarzia.com/2025/04/think-i-implemented-a-unique-feature-in-my-feed-reader.html</link>
      <description><![CDATA[
        <p>It's always nice when an <abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr> post idea just lands straight into my feed reader one morning. This time, it came <a href="https://tilde.news/s/xg4oij/think_i_implemented_unique_feature_my" rel="noreferrer">from tilde.news</a>.</p>
        <p>It is often said that RSS is dead, for various reasons, usually wrong. One of those reasons can be that because there is no innovation, no new features, no new use cases for RSS appearing, then it's dead. The kind of people who believe this are probably also the kind of people who write a new JavaScript framework every fortnight or buy the latest iPhone every time. I've been told this is a very American behavior, of always wanting to have the latest newest shiny thing to show off, even when it is inconvenient or unaffordable.</p>
        <p>It's true that I don't see many innovations happening around RSS, but focusing on all that already exists and hasn't been used tells me there isn't much to add. However, if you focus only on how RSS users use RSS and what they use, you can get some new ideas, and innovation can still happen. It doesn't move fast, it doesn't break things, it just slowly improves things.</p>
        <p>Andre Garzia, author of <a href="https://blogcat.org/" rel="noreferrer">BlogCat</a>, a browser extension that combines a feed reader and a microblogging tool, faced a problem that I too sometimes have. It's common nowadays to browse your RSS feeds on both your phone and your computer, and depending on what you follow and how you consume your feeds, you can't always use some feed reader server like <a href="https://tt-rss.org" rel="noreferrer">Tiny Tiny RSS</a> or <a href="https://www.freshrss.org" rel="noreferrer">FreshRSS</a>. Without a centralized feed reader, how do you keep the feeds in sync?</p>
        <p>This is why BlogCat now includes a feature called <a href="https://andregarzia.com/2025/04/think-i-implemented-a-unique-feature-in-my-feed-reader.html" rel="noreferrer">OPML matching</a>, basically <code>git diff</code> for your feeds, through the <abbr title="Outline Processor Markup Language">OPML</abbr> import/export feature available in the vast majority of feed readers. Give BlogCat the OPML from another app, and let BlogCat subscribe to any feeds that it didn't already have, then import a new OPML into your other app that includes the feeds BlogCat has and your app didn't. It's simple, and it works.</p>
        <p>I would like to see this kind of feature in my feed readers too, especially as I am using multiple computers with multiple different readers and operating systems. But considering some of those are not updated anymore, or will probably not get any new features added, I'm better off trying to make my own thing.</p>
        <p>It's possible to implement a crude OPML synchronization tool with some existing shell utilities:</p>
        <figure>
          <pre>xidel --xpath 'fn:distinct-values(//outline[@type="rss"]/@xmlUrl)' export1.opml | sort &gt; urls1.txt
xidel --xpath 'fn:distinct-values(//outline[@type="rss"]/@xmlUrl)' export2.opml | sort &gt; urls2.txt
comm -3 urls1.txt urls2.txt</pre>
          <figcaption>Find the URLs to synchronize between two OPML subscription lists</figcaption>
        </figure>
        <p>But it takes some creativity to imagine that this could be something a feed reader itself could do, and to make it happen. Well played. I will definitely subscribe to Andre's blog (<a href="https://andregarzia.com/feeds/all.rss.xml" rel="noreferrer">RSS 2.0</a>, <a href="https://andregarzia.com/feeds/all.atom.xml" rel="noreferrer">Atom</a>) and hope to see more cool ideas.</p>
      ]]></description>
    </item>

    <item>
      <title>International Transport Safety Bureau</title>
      <pubDate>Wed, 23 Apr 2025 01:30:02 +0200</pubDate>
      <guid isPermaLink="false">itsb</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">OPML</category>
      <link>https://tilde.town/~lucidiot/itsb/feeds.opml</link>
      <description><![CDATA[
        <p>I haven't been feeling great mentally recently and lost all my momentum to blog anywhere, so I'm just picking something simple from <a href="https://envs.net/~lucidiot/rsrsss/strss.xml" rel="noreferrer"><abbr title="Superficial Thoughts on Really Simple Syndication">STRSS</abbr></a> to get something started again.</p>
        <p>Here is <a href="https://tilde.town/~lucidiot/itsb/feeds.opml" rel="noreferrer">yet another OPML file</a>, for one of my own projects, called the <a href="https://tilde.town/~lucidiot/itsb/" rel="noreferrer">International Transport Safety Bureau</a>. This was my first large RSS-related project, started in late 2019, and it's still online and maintained.</p>
        <p>I keep a non-exhaustive list of official syndication feeds there, from various government agencies around the world dedicated to technical investigations of accidents and incidents in various means of transportation. But many of those websites do not provide any feeds, or any means of accessing their data programmatically, so I also have to resort to building my own, and that's most of the work in this project.</p>
        <p>67 custom feeds are built daily, then both the official and custom feeds are converted to many other feed formats, resulting in 462 feeds being currently served. I could probably double this number by adding the various agencies that I have found but have not yet build a scraper for, and double this again by adding support for even more syndication formats.</p>
        <p>The process that builds all of this is a complete mess of meta-meta-programming that would probably make many developers cry:</p>
        <ol>
          <li><p>I define sections, agencies, feeds, and how to build or where to find those feeds through <a href="https://tildegit.org/lucidiot/itsb/src/commit/cbe9477bb2e25fc84032145889e8ff4d46c63a84/itsb.xml" rel="noreferrer">one XML file</a>, which follows <a href="https://tildegit.org/lucidiot/itsb/src/commit/cbe9477bb2e25fc84032145889e8ff4d46c63a84/itsb.xsd" rel="noreferrer">this <abbr title="XML Schema Definition">XSD</abbr></a>.</p></li>
          <li><p>A <a href="https://en.wikipedia.org/wiki/Cron" rel="noreferrer">cron</a> job starts <a href="https://tildegit.org/lucidiot/itsb/src/commit/cbe9477bb2e25fc84032145889e8ff4d46c63a84/feedgen.sh" rel="noreferrer">a bash script</a>.</p></li>
          <li><p>The bash script runs the XML file through <a href="https://tildegit.org/lucidiot/itsb/src/commit/cbe9477bb2e25fc84032145889e8ff4d46c63a84/xslt/itsb.xsl" rel="noreferrer">one <abbr title="Extensible Stylesheet Language Transformation">XSLT</abbr></a>, which generates another XML file that looks like the original one, but with many additional feeds, for automatic conversions of my defined feeds to other formats. This is the script that takes me from 28 official and 67 custom feeds to 462.</p></li>
          <li><p>This longer XML file is sent to <a href="https://tildegit.org/lucidiot/itsb/src/commit/cbe9477bb2e25fc84032145889e8ff4d46c63a84/xslt/feedgen.xsl" rel="noreferrer">another <abbr title="Extensible Stylesheet Language Transformation">XSLT</abbr></a>. This creates a new long Bash script that contains lots of commands to build the many custom feeds and convert in all formats.</p></li>
          <li>
            <p>This Bash script is immediately executed. It will perform a great many tasks:</p>
            <ul>
              <li>Check that various dependencies are installed.</li>
              <li>Use a lock file to ensure only one instance of the generator can run at a time.</li>
              <li>Test the SSL certificates of various feeds that I have declared as having SSL certificate verification issues. If they are working fine now, I get warned so I can re-enable the verification.</li>
              <li>For each feed, run any of the instructions that I had specified in the XML file. This includes retrieving data with <a href="https://curl.se/" rel="noreferrer">curl</a>, converting HTML to JSON using <a href="https://github.com/ericchiang/pup" rel="noreferrer">pup</a>, converting between JSON and XML using <a href="https://pypi.org/project/xmltodict/" rel="noreferrer">xmltodict</a>, processing JSON through <a href="https://jqlang.org/" rel="noreferrer">jq</a>, and sometimes just <a href="https://tildegit.org/lucidiot/itsb/src/commit/cbe9477bb2e25fc84032145889e8ff4d46c63a84/itsb.xml#L870" rel="noreferrer">calling random shell commands</a> if I need something very specific.</li>
            </ul>
          </li>
          <li><p>The long XML file is run through a few more XSLTs to generate <a href="https://tilde.town/~lucidiot/itsb/" rel="noreferrer">the homepage</a> automatically, as well as today's <abbr title="Outline Processor Markup Language">OPML</abbr> file, and some other formats that I will have to dig into some other time here.</p></li>
        </ol>
        <p>This is a mess, but it's <em>my</em> mess, and it uses lots of cursed technology that I enjoy, so I think it's great. And it has worked for nearly 6 years now!</p>
        <p>Since <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#xidel" rel="noreferrer">my discovery of Xidel and XQuery</a>, I have been trying to simplify some parts of this and reduce the dependencies by <a href="https://tildegit.org/lucidiot/itsb/commit/2788f07f80865358204e28f7718ea3df0aa908e3" rel="noreferrer">rewriting</a> the feed generators in XQuery any time I need to do some maintenance on any of them. This brings some performance improvements since I no longer have any Python in the pipeline, I do not need to do round-trips between XML and JSON, and I can do everything with one process per feed instead of a complex shell pipeline.</p>
        <p>There will still be some custom scripts in some places, for example to <a href="https://tildegit.org/lucidiot/itsb/src/commit/cbe9477bb2e25fc84032145889e8ff4d46c63a84/bin/ntsb-carol" rel="noreferrer">download a large data dump</a> from the <abbr title="National Transportation Safety Board">NTSB</abbr>, but I should be able to eventually somewhat simplify the project, which should then let me complicate it more with even more formats and cursed ideas.</p>
        <p>As a final anecdote, the <a href="https://tildegit.org/lucidiot/itsb/issues" rel="noreferrer">issue tracker</a> for the project has an <a href="https://tildegit.org/lucidiot/itsb/issues?labels=1113" rel="noreferrer"><samp>external cause:politics</samp></a> label. I have seen the effects of China's pressure on Taiwan as some feeds were temporarily offline, and had to remove some Lithuanian feeds due to the Russian invasion in Ukraine. This is the only project I have that can be easily affected by random international conflicts like this, and it surprises me every time it happens.</p>
      ]]></description>
    </item>

    <item>
      <title>~lucidiot's askbox</title>
      <pubDate>Tue, 29 Apr 2025 22:12:50 +0200</pubDate>
      <guid isPermaLink="false">askbox</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tilde.town/~lucidiot/askbox/feed.xml</link>
      <description><![CDATA[
        <p>I had discussed <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#retrospring" rel="noreferrer">in a previous post</a> some shenanigans related to <a href="https://github.com/Retrospring/retrospring" rel="noreferrer">Retrospring</a>, a question/answer-based social network. I had an account on the flagship instance <a href="https://retrospring.net" rel="noreferrer">Retrospring.net</a>, but that instance has been shut down. I moved to <a href="https://ask.absturztau.be" rel="noreferrer">Fragsturztaube</a>, but that instance has also been shut down, and for worse reasons than the former.</p>
        <p>With this, most of the people I knew there have either stopped using Retrospring entirely or switched to various instances in ways that make them hard to track down. I don't want to deal with all the moderation drama going on on the remaining instances due to the hordes of out-of-control <a href="https://rentry.co" rel="noreferrer">Rentry</a> users, and I don't want to waste time with switching instances constantly while losing all of the previous answers I posted. So I made my own thing.</p>
        <p>One of the features that I would have wanted the most on Retrospring before the project stopped was, of course, RSS feeds. I thus made my own ask box system using the usual combination of <a href="https://tilde.town/~lucidiot/askbox/feed.xml" rel="noreferrer">an RSS feed</a> and an <abbr title="XML Stylesheet Language Transformation">XSLT</abbr>.</p>
        <p>You can send questions through anything on my <a href="https://tilde.town/~lucidiot/contact.html" rel="noreferrer">contact page</a>, but the recommended way is through the old-school <code>mailto</code> HTML form provided by the XSLT that helps you email my <a href="https://naver.com" rel="noreferrer">Naver</a> address through your own email client.</p>
        <p>And for the answers previously posted on both Retrospring instances, because I had plenty of time to export them before they disappeared, they are now available as <a href="https://tilde.town/~lucidiot/askbox/retrospring.xml" rel="noreferrer">separate archive feed</a>.</p>
        <p>Feel free to send me questions about anything, not necessarily RSS-specific things. But if you do send me something syndication-related, maybe I will end up replying to it here instead of on the ask box.</p>
      ]]></description>
    </item>

    <item>
      <title>tilde.town blog</title>
      <pubDate>Sat, 24 May 2025 00:53:24 +0200</pubDate>
      <guid isPermaLink="false">tilde-town</guid>
      <category domain="https://envs.net/~lucidiot/rsrsss/">Feed</category>
      <link>https://tilde.town/blog.xml</link>
      <description><![CDATA[
        <p>While troubleshooting some DNS issues on my phone this week, I opened some random websites in a browser. One of them was <a href="https://tilde.town/" rel="noreferrer">tilde.town</a>, whose homepage I had not visited in a while. I stumbled upon an important warning about an upcoming server migration that would take the town offline for most of this weekend. I'm glad I found that warning, considering I had not been informed in any other way. I do not regularly visit the <code>bbj</code> forum even though I probably should, and <abbr title="Internet Relay Chat">IRC</abbr> on the town is too stressful with so many people around, so I am missing the two main places to get updates from.</p>
        <p>But thanks to this warning, I also found out that tilde.town has <a href="https://tilde.town/blog.html" rel="noreferrer">a blog</a>! It has articles from years ago, but for some reason I had never found it before. And it has an RSS feed of course. So I am featuring this now as a way to perhaps warn anyone who relies on some of the things I have on tilde.town, for example <a href="https://tilde.town/~lucidiot/itsb/" rel="noreferrer"><abbr title="International Transport Safety Bureau">ITSB</abbr></a> or <a href="https://tilde.town/~lucidiot/askbox/" rel="noreferrer">the askbox</a>, that those will probably be unavailable this Saturday and Sunday.</p>
        <p>The town is being moved from DigitalOcean towards a new server in a colo hosted by ~insom, a nice townie that I <a href="https://envs.net/~lucidiot/rsrsss/feed.xml#insom" rel="noreferrer">previously featured here</a>. This new <a href="https://tiny.tilde.website/@insom/114501471260322971" rel="noreferrer">pink</a> server will run Debian testing, while we currently have Ubuntu 22.04, so maybe this will break some of my scripts. I often have to rewrite most of my configurations, tools and scripts to adapt to Ubuntu specifically, so we'll see if I have to do this again with Debian or if they are doing better than Ubuntu.</p>
        <p><abbr title="Really Simple Really Simple Syndication Syndication">RSRSSS</abbr> and <a href="https://envs.net/~lucidiot/" rel="noreferrer">my wiki</a> will not be affected, since they are hosted on envs.net. That project does need some <a href="https://pleroma.envs.net/notice/AtPeglTQ5z51SWb2K8" rel="noreferrer">financial support</a> though!</p>
        <p>And just as I finish writing this post, I get a little broadcast message in my shell. I would have likely missed it if that had been my only warning, since it's late enough that I should normally be asleep.</p>
        <figure>
          <pre>Broadcast message from root@tilde.town (pts/114) (Fri May 23 22:45:47 2025):

LISTEN UP!

the town is moving to a new home.

this means a weekend of downtime starting TOMORROW MORNING (the 24th of May)

if you have any urgent town business...see to it soon!

otherwise look forward to a RAGNAROK CELEBRATION tomorrow morning.

CHECK BBJ FOR MORE INFO ON ALL THIS</pre>
        </figure>
      ]]></description>
    </item>
  </channel>
  <access:restriction relationship="allow" />
</rss>
