Compare commits

...

4 Commits

Author SHA1 Message Date
~lucidiot 6b7d1bcc45 Post about Houston TranStar 2024-02-04 18:12:00 +01:00
~lucidiot 0078e52dcb Support enclosures in XSLT 2024-02-03 21:07:00 +01:00
~lucidiot b3966b61aa Add Houston TranStar OPML generator 2024-02-01 15:53:29 +01:00
~lucidiot d05f2d9064 Post on RSS being money 2024-02-01 15:46:32 +01:00
4 changed files with 107 additions and 9 deletions

View File

@ -2206,6 +2206,69 @@ return <type id="{$i}" name="{$type}" count="{$count}" />
<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>
</channel>
<access:restriction relationship="allow" />
</rss>

BIN
img/sprites/enclosure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

13
xquery/opml/transtar.xqy Normal file
View File

@ -0,0 +1,13 @@
import module namespace rsrsss = "https://envs.net/~lucidiot/rsrsss/rsrsss-functions" at "../functions.xqy";
rsrsss:make-opml(
"Houston TranStar feeds",
doc('https://traffic.houstontranstar.org/rss/rss_info.aspx')//a[contains(@href, "rss")][ends-with(@href, ".xml")]
! <outline
type="rss"
xmlUrl="{@href}"
text="{text()}"
version="RSS"
language="en-us"
/>
)

View File

@ -634,7 +634,7 @@
</details>
</xsl:if>
<xsl:if test="category or guid or source or author or comments or slash:comments or (icbm:latitude and icbm:longitude) or (geo:lat and geo:long) or (geourl:latitude and geourl:longitude)">
<xsl:if test="guid or comments or slash:comments or category or author or enclosure or source or (icbm:latitude and icbm:longitude) or (geo:lat and geo:long) or (geourl:latitude and geourl:longitude)">
<footer>
<p>
<xsl:if test="guid or comments or slash:comments">
@ -678,21 +678,43 @@
<xsl:if test="position() != last()"><xsl:text>, </xsl:text></xsl:if>
</xsl:for-each>
</xsl:if>
<xsl:if test="category and (source or author)">
<xsl:text> &#8212; </xsl:text>
</xsl:if>
<xsl:if test="author">
<xsl:if test="category">
<xsl:text> &#8212; </xsl:text>
</xsl:if>
<span class="icon-author" alt="Author" />
<address>
<xsl:value-of select="author" />
</address>
</xsl:if>
<xsl:if test="source">
<xsl:if test="enclosure">
<xsl:if test="category or author">
<br />
</xsl:if>
<a href="{enclosure/@url}" target="_blank">
<span class="icon-enclosure" alt="Enclosure" />
<xsl:value-of select="enclosure/@url" />
</a>
<xsl:if test="enclosure/@type or enclosure/@length">
<xsl:text> (</xsl:text>
<xsl:value-of select="enclosure/@type" />
<xsl:if test="enclosure/@length">
<xsl:if test="enclosure/@type">
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:value-of select="enclosure/@length" />
<xsl:text> bytes</xsl:text>
</xsl:if>
<xsl:text>)</xsl:text>
</xsl:if>
</xsl:if>
<xsl:if test="source">
<xsl:if test="category or author or enclosure">
<br />
</xsl:if>
<a href="{source}" target="_blank">
<span class="icon-source" alt="Source" />
<xsl:value-of select="source" />
@ -700,21 +722,21 @@
</xsl:if>
<xsl:if test="icbm:latitude and icbm:longitude">
<xsl:if test="category or source or author">
<xsl:if test="category or author or enclosure or source">
<br />
</xsl:if>
<xsl:call-template name="icbm-link" />
</xsl:if>
<xsl:if test="geo:lat and geo:long">
<xsl:if test="category or source or author or (icbm:latitude and icbm:longitude)">
<xsl:if test="category or author or enclosure or source or (icbm:latitude and icbm:longitude)">
<br />
</xsl:if>
<xsl:call-template name="geo-link" />
</xsl:if>
<xsl:if test="geourl:latitude and geourl:longitude">
<xsl:if test="category or source or author or (icbm:latitude and icbm:longitude) or (geo:lat and geo:long)">
<xsl:if test="category or author or enclosure or source or (icbm:latitude and icbm:longitude) or (geo:lat and geo:long)">
<br />
</xsl:if>
<xsl:call-template name="geourl-link" />
@ -722,7 +744,7 @@
</p>
<!-- When there is nothing other than the right section, we need to clear its float: right -->
<xsl:if test="(guid or comments or slash:comments) and not(category or source or author or (icbm:latitude and icbm:longitude) or (geo:lat and geo:long) or (geourl:latitude and geourl:longitude))">
<xsl:if test="(guid or comments or slash:comments) and not(category or author or enclosure or source or (icbm:latitude and icbm:longitude) or (geo:lat and geo:long) or (geourl:latitude and geourl:longitude))">
<div class="clearfix"></div>
</xsl:if>
</footer>