1
0
Fork 0
mirror of https://git.sr.ht/~seirdy/seirdy.one synced 2024-11-23 21:02:09 +00:00

Automate reply-context, add more metadata to Atom

- Build reply-context from front-matter
- Add more activitystreams, portblecontacts, ostatus, etc. metadata to
  Atom feed. Inspired by Pleroma's feeds.
This commit is contained in:
Rohan Kumar 2022-06-02 17:25:52 -07:00
parent a9ebc9e0c4
commit f271291f49
No known key found for this signature in database
GPG key ID: 1E892DB2A5F84479
11 changed files with 115 additions and 43 deletions

View file

@ -1,12 +1,13 @@
--- ---
title: "Answer engines" title: "Answer engines"
date: 2022-05-25T19:59:08+00:00 date: 2022-05-25T19:59:08+00:00
lastMod: 2022-05-25T19:59:08+00:00
replyURI: "https://kevq.uk/is-duckduckgo-duckduckdone/"
replyTitle: "Is DuckDuckGo, DuckDuckDone?"
replyType: "BlogPosting"
replyAuthor: "Kev Quirk"
replyAuthorURI: "https://kevq.uk/about/"
--- ---
<aside role="note">
Reply to {{< mention-work itemprop="about" itemtype="BlogPosting" reply=true >}}{{<cited-work name="Is DuckDuckGo, DuckDuckDone?" extraName="headline" url="https://kevq.uk/is-duckduckgo-duckduckdone/">}} by {{<indieweb-person first-name="Kev" last-name="Quirk" url="https://kevq.uk/about/" itemprop="author">}}{{</mention-work>}}
</aside>
I read your article and share similar concerns. Using Microsoft Bing and Google Search's commercial APIs generally requires accepting some harsh terms, including a ban on mixing <abbr title="Search Engine Result Pages">SERPs</abbr> from multiple sources (this is why Ixquick shut down and the company pivoted to the Google-exclusive Startpage search service). But the requirement to allow trackers in a companion web browser was new to me. I read your article and share similar concerns. Using Microsoft Bing and Google Search's commercial APIs generally requires accepting some harsh terms, including a ban on mixing <abbr title="Search Engine Result Pages">SERPs</abbr> from multiple sources (this is why Ixquick shut down and the company pivoted to the Google-exclusive Startpage search service). But the requirement to allow trackers in a companion web browser was new to me.

View file

@ -1,13 +1,15 @@
--- ---
title: "Commodified and commoditized" title: "Commodified and commoditized"
date: 2022-06-01T00:47:55-07:00 date: 2022-06-01T00:47:55-07:00
lastMod: 2022-06-01T00:47:55-07:00
replyURI: "https://toot.cat/@idlestate/108396947965094826"
replyTitle: "not only are we not the customer, we aren't even the product: We're the commodified complement of the product"
replyType: "SocialMediaPosting"
replyAuthor: "@idlestate@toot.cat"
replyAuthorURI: https://toot.cat/@idlestate/
--- ---
<aside role="note">
Reply to {{< mention-work itemprop="about" itemtype="SocialMediaPosting" reply=true >}}{{<cited-work name="not only are we not the customer, we aren't even the product: We're the commodified complement of the product." url="https://toot.cat/@idlestate/108396947965094826">}} by {{<indieweb-person name="@idlestate@toot.cat" url="https://toot.cat/@idlestate" itemprop="author">}}
{{</mention-work>}}
</aside>
Commodification means something else; I'm assuming you're referring to "commoditize", as in "commoditize your complement". Although in this context the words have some _really interesting_ overlap, which is why I brought it up. See {{<mention-work itemprop="citation" role="doc-credit" itemtype="BlogPosting">}}{{<cited-work url="https://rushkoff.com/commodified-vs-commoditized/" name="Commodified vs. Commoditized">}} by {{<indieweb-person first-name="Douglas" last-name="Rushkoff" url="https://rushkoff.com">}}{{</mention-work>}}. Commodification means something else; I'm assuming you're referring to "commoditize", as in "commoditize your complement". Although in this context the words have some _really interesting_ overlap, which is why I brought it up. See {{<mention-work itemprop="citation" role="doc-credit" itemtype="BlogPosting">}}{{<cited-work url="https://rushkoff.com/commodified-vs-commoditized/" name="Commodified vs. Commoditized">}} by {{<indieweb-person first-name="Douglas" last-name="Rushkoff" url="https://rushkoff.com" itemprop="author">}}{{</mention-work>}}.
We are first commodified by being made a complement to a product, then gradually commoditized as complements ideally are. We are first commodified by being made a complement to a product, then gradually commoditized as complements ideally are.

View file

@ -1,12 +1,13 @@
--- ---
title: "On displaying word counts" title: "On displaying word counts"
date: 2022-05-29T12:00:04-07:00 date: 2022-05-29T12:00:04-07:00
lastMod: 2022-05-29T12:00:04-07:00
replyURI: "https://social.treehouse.systems/@ayushnix/108364036611051719"
replyTitle: "What's your opinion on writing the number of words in a blog post and the estimated time it'll take to read it?"
replyType: "SocialMediaPosting"
replyAuthor: "Ayush Agarwal"
replyAuthorURI: "https://microblog.ayushnix.com/"
--- ---
<aside role="note">
Reply to {{< mention-work itemprop="about" itemtype="SocialMediaPosting" reply=true >}}{{<cited-work name="What's your opinion on writing the number of words in a blog post and the estimated time it'll take to read it?" url="https://social.treehouse.systems/@ayushnix/108364036611051719">}} by {{<indieweb-person first-name="Ayush" last-name="Agarwal" url="https://microblog.ayushnix.com/" itemprop="author">}}
{{</mention-work>}}
</aside>
Some of my posts are long. My longest post is almost 20k words as of right now (60-80 pages printed out), and will get longer as I update it. Some of my posts are long. My longest post is almost 20k words as of right now (60-80 pages printed out), and will get longer as I update it.
Length is an imperfect yet useful measure of the amount of detail one can expect. There are many "lists of practices" on the Web about web design. By communicating that mine would take an hour and a half to read, I communicate that my list has some more thought put into it. Length is an imperfect yet useful measure of the amount of detail one can expect. There are many "lists of practices" on the Web about web design. By communicating that mine would take an hour and a half to read, I communicate that my list has some more thought put into it.

View file

@ -1,11 +1,12 @@
--- ---
title: "Pale Moon" title: "Pale Moon"
date: 2022-06-01T09:59:32-07:00 date: 2022-06-01T09:59:32-07:00
replyURI: "https://social.treehouse.systems/@ayushnix/108403066213035358"
replyTitle: "I've never used Pale Moon but I also don't understand why anyone would use it. If I'm not mistaken, Pale Moon exists because it didn't want to part ways with XUL extensions?"
replyType: "SocialMediaPosting"
replyAuthor: "Ayush Agarwal"
replyAuthorURI: "https://microblog.ayushnix.com/"
--- ---
<aside role="note">
Reply to {{< mention-work itemprop="about" itemtype="SocialMediaPosting" reply=true >}}{{<cited-work name="I've never used Pale Moon but I also don't understand why anyone would use it. If I'm not mistaken, Pale Moon exists because it didn't want to part ways with XUL extensions?" url="https://social.treehouse.systems/@ayushnix/108403066213035358">}} by {{<indieweb-person first-name="Ayush" last-name="Agarwal" url="https://microblog.ayushnix.com/" itemprop="author">}}
{{</mention-work>}}
</aside>
Pale Moon's inception pre-dates Firefox 57 by many years; before its notoriety following the removal of XUL/XPCOM, it was popular among people who didn't like Electrolysis. Pale Moon's inception pre-dates Firefox 57 by many years; before its notoriety following the removal of XUL/XPCOM, it was popular among people who didn't like Electrolysis.
@ -16,3 +17,4 @@ WebExtensions that fill in missing functionality often require content injection
I still wouldn't recommend it due to extremely weak sandboxing and a naive approach to security. The devs respond to sandboxing queries by saying it's secure because "it separates the content and application" which tells you how little they care or understand; untrusted content needs isolation not just from the browser but from other untrusted content. Given the scope of a browser, even Firefox isn't where it should be (even given their commendable progress on Fission, RLBox, and their utility process overhaul), let alone caught up to the mitigations in Chromium's Blink or WebKit's JavaScriptCore but I digress. I still wouldn't recommend it due to extremely weak sandboxing and a naive approach to security. The devs respond to sandboxing queries by saying it's secure because "it separates the content and application" which tells you how little they care or understand; untrusted content needs isolation not just from the browser but from other untrusted content. Given the scope of a browser, even Firefox isn't where it should be (even given their commendable progress on Fission, RLBox, and their utility process overhaul), let alone caught up to the mitigations in Chromium's Blink or WebKit's JavaScriptCore but I digress.
It'd be totally fine if they described their browser as a complement to a more airtight one or as a dev tool (it's honestly a great dev tool given some addons, I'll happily concede that). But when you describe yourself as a replacement to other browsers but lack the security architecture to back it up, you're being irresponsible. It'd be totally fine if they described their browser as a complement to a more airtight one or as a dev tool (it's honestly a great dev tool given some addons, I'll happily concede that). But when you describe yourself as a replacement to other browsers but lack the security architecture to back it up, you're being irresponsible.

View file

@ -1,12 +1,14 @@
--- ---
title: "Signal security" title: "Signal security"
date: 2022-05-26T12:18:24-07:00 date: 2022-05-26T12:18:24-07:00
lastMod: 2022-05-26T12:18:24-07:00
replyURI: "https://disqordia.space/notice/AJqmgRLFlyVENIXcDA"
replyTitle: "europe wants to ban signal"
replyType: "SocialMediaPosting"
replyAuthor: "chjara"
replyAuthorURI: "https://tuxcrafting.online/"
--- ---
<aside role="note">
Reply to {{< mention-work itemprop="about" itemtype="SocialMediaPosting" reply=true >}}{{<cited-work name="europe wants to ban signal" url="https://disqordia.space/notice/AJqmgRLFlyVENIXcDA">}} by {{<indieweb-person name="chjara" url="https://tuxcrafting.online/" itemprop="author">}}
{{</mention-work>}}
</aside>
What do you mean by "false sense of security"? Signal's cryptography is pretty solid. It's one of the only messengers with such a lack of metadata leakage; if you combine it with Tor you can add enough noise to the network-layer metadata to be more private than almost any alternative. What do you mean by "false sense of security"? Signal's cryptography is pretty solid. It's one of the only messengers with such a lack of metadata leakage; if you combine it with Tor you can add enough noise to the network-layer metadata to be more private than almost any alternative.
Don't get me wrong, [I dislike it on the grounds of being a closed platform](../../../../../posts/2021/01/27/whatsapp-and-the-domestication-of-users/), but few alternatives exist that support both offline messaging and have such little metadata leakage. I'm willing to hear suggested alternatives that do not bake a "cryptographically-secure, decentralized pyramid scheme" (cryptocurrency) into the protocol. I'm not aware of any such alternative at the moment. Don't get me wrong, [I dislike it on the grounds of being a closed platform](../../../../../posts/2021/01/27/whatsapp-and-the-domestication-of-users/), but few alternatives exist that support both offline messaging and have such little metadata leakage. I'm willing to hear suggested alternatives that do not bake a "cryptographically-secure, decentralized pyramid scheme" (cryptocurrency) into the protocol. I'm not aware of any such alternative at the moment.

View file

@ -1,18 +1,20 @@
--- ---
title: "Things can get better" title: "Things can get better"
date: 2022-05-30T13:24:30-07:00 date: 2022-05-30T13:24:30-07:00
lastMod: 2022-05-30T13:24:30-07:00
replyURI: "https://mastodon.art/@TerryHancock/108392295120692087"
replyTitle: "Being annoyed with software is always going to be a part of the experience"
replyType: "SocialMediaPosting"
replyAuthor: "Terry Hancock"
replyAuthorURI: "https://mastodon.art/@TerryHancock"
--- ---
<aside role="note">
Reply to {{< mention-work itemprop="about" itemtype="SocialMediaPosting" reply=true >}}{{<cited-work name="Being annoyed with software is always going to be a part of the experience" url="https://mastodon.art/@TerryHancock/108392295120692087">}} by {{<indieweb-person first-name="Terry" last-name="Hancock" url="https://mastodon.art/@TerryHancock" itemprop="author">}}
{{</mention-work>}}
</aside>
I'm in partial agreement with this take. I'm in partial agreement with this take.
On one hand, expectations change with time. Most people outside my bubble look at interfaces I like using and say they look "ugly" and that they're "weird" (their words); they wouldn't have said that when I was younger. On one hand, expectations change with time. Most people outside my bubble look at interfaces I like using and say they look "ugly" and that they're "weird" (their words); they wouldn't have said that when I was younger.
On the other hand, some "annoyances" are actually removable *barriers*. Accessibility comes to mind. If you take software that does not work with assistive technologies (ATs) and fix it, AT-users might move on to the next accessibility issue. But they'll be markedly happier than before, when they just couldn't use it. On the other hand, some "annoyances" are actually removable _barriers_. Accessibility comes to mind. If you take software that does not work with assistive technologies (ATs) and fix it, AT-users might move on to the next accessibility issue. But they'll be markedly happier than before, when they just couldn't use it.
Similar examples include localization and compatibility. Similar examples include localization and compatibility.
Man, positive takes like this feel really out of character for me. Man, positive takes like this feel really out of character for me.

View file

@ -2,13 +2,35 @@
{{- if .IsHome }} {{- if .IsHome }}
{{- $pages = where .Site.RegularPages "Section" "" -}} {{- $pages = where .Site.RegularPages "Section" "" -}}
{{ end -}} {{ end -}}
{{- $type := "article" -}}
{{- $period := "daily" -}}
{{- if eq .Section "notes" -}}
{{- $type = "note" -}}
{{- $period = "hourly" -}}
{{- end -}}
{{- $icon_svg := resources.Get "/favicon.svg" | resources.Fingerprint "md5" -}}
{{- $icon_png := resources.Get "/apple-touch-icon.png" | resources.Fingerprint "md5" -}}
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="{{ .Site.LanguageCode }}"> <feed
xmlns="http://www.w3.org/2005/Atom"
xmlns:activity="http://activitystrea.ms/spec/1.0/"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:ostatus="http://ostatus.org/schema/1.0"
xmlns:poco="http://portablecontacts.net/spec/1.0"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:thr="http://purl.org/syndication/thread/1.0"
xml:lang="{{ .Site.LanguageCode }}">
<title>{{ .Section | humanize}} on {{ .Site.Title }}</title> <title>{{ .Section | humanize}} on {{ .Site.Title }}</title>
<link rel="self" type="application/atom+xml" href="{{ .Permalink }}atom.xml" /> <link rel="self" type="application/atom+xml" href="{{ .Permalink }}atom.xml" />
<logo>{{ $icon_png.Permalink }}</logo>
<icon>{{ .Site.Params.icon | absURL }}</icon> <icon>{{ .Site.Params.icon | absURL }}</icon>
<subtitle>{{ .Params.Description }}</subtitle> <subtitle>{{ .Params.Description }}</subtitle>
<sy:updatePeriod>{{ $period }}</sy:updatePeriod>
<sy:updateFrequency>2</sy:updateFrequency>
<author> <author>
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
<poco:preferredUsername>Seirdy</poco:preferredUsername>
<poco:displayName>Seirdy</poco:displayName>
<name>Rohan Kumar</name> <name>Rohan Kumar</name>
<uri>https://seirdy.one/</uri> <uri>https://seirdy.one/</uri>
</author> </author>
@ -16,8 +38,8 @@
<id>{{ .Permalink }}</id> <id>{{ .Permalink }}</id>
{{ range $pages }} {{ range $pages }}
<entry> <entry>
<title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">{{ .Title | safeHTML }}</div></title> <title>{{ .Title }}</title>
<link href="{{ .Permalink }}" /> <link rel="alternate" type="text/html" href="{{ .Permalink }}" />
<published>{{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</published> <published>{{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</published>
<updated>{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</updated> <updated>{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</updated>
<author> <author>
@ -26,18 +48,22 @@
</author> </author>
<id>{{ .Permalink }}</id> <id>{{ .Permalink }}</id>
<rights>CC-BY-SA 4.0 by Rohan Kumar</rights> <rights>CC-BY-SA 4.0 by Rohan Kumar</rights>
{{- with .Params.replyURI }}
<thr:in-reply-to ref="{{ . }}" href="{{ . }}" />
{{- end -}}
{{- with .Params.replyAuthorURI }}
<link rel="mentioned" ostatus:object-type="http://activitystrea.ms/schema/1.0/person" href="{{ . }}"/>
{{- end -}}
<content type="xhtml" xml:base="{{ .Permalink }}"> <content type="xhtml" xml:base="{{ .Permalink }}">
<div xmlns="http://www.w3.org/1999/xhtml"> <div xmlns="http://www.w3.org/1999/xhtml">
{{- if .Params.replyURI -}}
{{- partial "reply-context" .Params | replaceRE `(?: )?(?:item(type|scope|prop|id|ref)="[^"]*"|class="language-figure")` "" | safeHTML }}
{{- end -}}
{{ partial "processed-content.html" . | replaceRE `(?: )?(?:item(type|scope|prop|id|ref)="[^"]*"|class="language-figure")` "" | safeHTML }} {{ partial "processed-content.html" . | replaceRE `(?: )?(?:item(type|scope|prop|id|ref)="[^"]*"|class="language-figure")` "" | safeHTML }}
</div> </div>
</content> </content>
<object-type xmlns="http://activitystrea.ms/spec/1.0/"> <activity:object-type>http://activitystrea.ms/schema/1.0/{{ $type }}</activity:object-type>
{{- if eq .Section "notes" -}} <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
note
{{- else if eq .Section "posts" -}}
article
{{- end -}}
</object-type>
</entry> </entry>
{{ end }} {{ end }}
</feed> </feed>

View file

@ -21,7 +21,12 @@
{{- if gt (sub .Lastmod.Unix .Date.Unix) 3600 -}} {{- if gt (sub .Lastmod.Unix .Date.Unix) 3600 -}}
, updated <time{{ if not (.Params.evergreen) }} itemprop="dateModified" class="dt-updated updated"{{ end }} datetime="{{ .Lastmod.Format "2006-01-02 15:04:05Z07:00" }}">{{ .Lastmod.Format "2006-01-02 15:04:05" }}</time> , updated <time{{ if not (.Params.evergreen) }} itemprop="dateModified" class="dt-updated updated"{{ end }} datetime="{{ .Lastmod.Format "2006-01-02 15:04:05Z07:00" }}">{{ .Lastmod.Format "2006-01-02 15:04:05" }}</time>
{{- end }} {{- end }}
<div class="e-content entry-content" itemprop="articleBody">{{ partial "processed-content.html" . }}</div> <div class="e-content entry-content" itemprop="articleBody">
{{- if .Params.replyURI -}}
{{- partial "reply-context" .Params -}}
{{- end -}}
{{ partial "processed-content.html" . }}
</div>
</article> </article>
</li> </li>
{{- end }} {{- end }}

View file

@ -11,13 +11,26 @@
{{- $pages = $pages | first $limit -}} {{- $pages = $pages | first $limit -}}
{{- end -}} {{- end -}}
{{- $currentSection := .Section -}} {{- $currentSection := .Section -}}
{{- $type := "article" -}}
{{- $period := "daily" -}}
{{- $mins := "1440" -}}
{{- if eq .Section "notes" -}}
{{- $type = "note" -}}
{{- $period = "hourly" -}}
{{- $mins = "60" -}}
{{- end -}}
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }} {{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <rss version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xml:lang="{{ .Site.LanguageCode }}">
<channel> <channel>
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title> <title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
<link>{{ .Permalink }}</link> <link>{{ .Permalink }}</link>
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description> <description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
<ttl>1440</ttl> <ttl>{{ $mins }}</ttl>
<sy:updatePeriod>{{ $period }}</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }} <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
<language>{{.}}</language>{{end}}{{ with .Site.Author.email }} <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }} <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}

View file

@ -9,6 +9,9 @@
<div class="e-content entry-content" itemprop="articleBody"> <div class="e-content entry-content" itemprop="articleBody">
<meta itemprop="author" content="Rohan Kumar" /> <meta itemprop="author" content="Rohan Kumar" />
<!--That was needed bc some reading modes get confused by other authors referenced in the text--> <!--That was needed bc some reading modes get confused by other authors referenced in the text-->
{{- if .Params.replyURI -}}
{{- partial "reply-context" .Params -}}
{{- end -}}
{{- partial "processed-content" . -}} {{- partial "processed-content" . -}}
</div> </div>
</article> </article>

View file

@ -0,0 +1,15 @@
{{- $schemaType := "SocialMediaPosting" -}}
{{- with .replyType -}}
{{- $schemaType = . -}}
{{- end -}}
<aside role="note">
Reply to <span class="h-cite in-reply-to" itemprop="about" itemscope="" itemtype="https://schema.org/{{ $schemaType }}">
<cite itemprop="name" class="p-name">
<a class="u-url" itemprop="url" href="{{ .replyURI }}">{{ .replyTitle | safeHTML}}</a>
</cite> by
<span itemprop="author" itemscope="" itemtype="https://schema.org/Person" class="h-card vcard p-author">
<a itemprop="url" href="{{ .replyAuthorURI }}" class="u-url url">
<span itemprop="name" class="p-name fn n">{{ .replyAuthor }}</span></a>
</span>
</span>
</aside>