@pfefferle@mastodon.social
@pfefferle@mastodon.social avatar

pfefferle

@pfefferle@mastodon.social

web worker, blogger, podcaster, #openweb advocate and citizen of the #indieweb and the #fediverse.

Open Web Wrangler @ #Automattic

I am currently working on the #ActivityPub plugin and several #IndieWeb (mainly #Webmentions) plugins for #WordPress! Besides of that, I maintain some other small Open Web plugins and try to help out on the #pluginkollektiv.

Follow my blog on the fediverse: "@pfefferle"

#fedi22

This profile is from a federated server and may be incomplete. Browse more on the original instance.

darnell, to fediverse
@darnell@one.darnell.one avatar

I am half way through watching the interview of @pfefferle by @deadsuperhero & it is really good!

📹 S1 Episode 8: WordPress-ActivityPub with Matthias Pfefferle https://spectra.video/w/nVQAzfWyC64DUfqGQcnCfp

I thought it was interesting that when @photomatt was focued on bringing to , Pfefferle advocated introducing to the en mass.

pfefferle,
@pfefferle@mastodon.social avatar

@shanesemler @darnell @deadsuperhero @photomatt @wedistributemedia @hello why is WordPress a “bloated mess”?

pfefferle,
@pfefferle@mastodon.social avatar

@shanesemler @darnell @deadsuperhero @photomatt @wedistributemedia @hello that’s totally fine! But not an argument against bringing WordPress to the fediverse ☺️

julian, to random
@julian@community.nodebb.org avatar

There have been some scattered discussions I've seen over the past year that mention that @pfefferle's WordPress ActivityPub plugin federates their blog posts out as an as:Note, and that the only reason this is done is because Mastodon only treats as:Note (and as:Question) as a first-class object and relegates anything else to a fallback handler that takes a short snippet of the content, and shows a link back to the original source, thus losing any in-app benefits (boosts, replies, etc.)

Whether this is actually true or not, I do not know. So that's why I'd like to ask Mattias — or anybody else with some context — here.


For reference:

  • as:Article: Represents any kind of multi-paragraph written work.
  • as:Note: Represents a short written work typically less than a single paragraph in length.
  • as:Page: Represents a Web Page.

I have also noticed that Lemmy, perhaps out of principle, sends out an as:Page for new generated content, and only the replies federate out as as:Note. It has unfortunately led to some assertions that Lemmy's federation is "broken", even though it is arguably not the case.

@nutomic, care to weigh in?


I don't even blame Mattias for opting to send everything out as as:Note.

End of the day right now it doesn't matter how Mattias or Nutomic represent their higher-level collection of data, because Mastodon is the largest implementor and neither they — nor anyone else I know of, for that matter — treat anything that's not as:Note or as:Question specially.

But that ought to change. The question is how, but this WG is not at the point where we start throwing around decrees and making up standards.

What's important to me right now is what the landscape looks like right now, and why that is the case.

N.B. The discussion here will eventually make its way to online real-time discussion at one of the future WG meetings.

pfefferle,
@pfefferle@mastodon.social avatar

@simonwood @julian @nodebb as Simon said, this is a user choice! You can choose “Note” if you want to have the best compatibility or you can let the plugin choose what the best format is. And then we try to map the WordPress internal post formats to the ActivitySteams Object-Types. Standard Post == Article, Status & Aside == Note, Image == Note with priority on image attachments, Video == Note with priority on video attachments, …

pfefferle,
@pfefferle@mastodon.social avatar

@trwnh @simonwood @julian @nodebb WordPress does not have the concept of attachments. So we are parsing inline-media and add them as attachments before federating them. So yes, you can add as much media to your post as you want!

pfefferle,
@pfefferle@mastodon.social avatar

@trwnh you can add as much media as you want with mixed media formats! So for normal notes and articles we take the media files in the order they are added to the text. For video, we search for videos first and fall back to others if there are no videos. Same for audio and image posts.

pfefferle,
@pfefferle@mastodon.social avatar

@evan @trwnh and yes the plugin uses collections (adds multiple files if available)

pfefferle,
@pfefferle@mastodon.social avatar
pfefferle,
@pfefferle@mastodon.social avatar

@trwnh @evan oops, I am on the dev version on my blog, so maybe I‘ve broken something will check tomorrow 🙄

julian, to random
@julian@community.nodebb.org avatar

Had a chance to listen to @pfefferle on WeDistribute's Decentered podcast. Surprisingly informative, and eye opening just how locked down shared hosting providers are.

Things we take for granted like the ability to mount routes on /.well-known (they could be blocked!)... or that you can't always assume cron is available.

https://wedistribute.org/podcast/wordpress-matthias-pfefferle/

Having used a VPS for years, I would never go back to shared hosting, but you definitely cannot argue with the convenience, ease of use (CPanel, et al.), and most of all, value for money. However, those three come with significant trade-offs in terms of flexibility and power.

Kudos to you Mattias for having the patience to try to get those shared hosting providers to change. If I were in your shoes I'd just tell them to hop on over to a different provider!

pfefferle,
@pfefferle@mastodon.social avatar

@julian thanks a lot :)

decentered, to fediverse
@decentered@social.wedistribute.org avatar

A new episode of is out! We sat down with @pfefferle from Automattic on his effort to bring to the ecosystem!

https://wedistribute.org/podcast/wordpress-matthias-pfefferle/

pfefferle,
@pfefferle@mastodon.social avatar

@decentered oh god, that image 😂

liaizon, to article_interop
@liaizon@wake.st avatar

Lets make articles interoperable!

@article_interop

pfefferle,
@pfefferle@mastodon.social avatar

@liaizon @article_interop oh nice! Count me in!

kev, (edited ) to random
@kev@fosstodon.org avatar

Who dis? New 8-bit profile pic, thanks to @joel

pfefferle,
@pfefferle@mastodon.social avatar

@kev @joel I like it!

cdevroe, to random
@cdevroe@mastodon.social avatar

@pfefferle In your video w/ @nathan I noticed that your author profile says it joined in 2005. Typically that is the date the account joined Mastodon... https://mastodon.social/@pfefferle@notiz.blog. (just in case you hadn't seen that)

pfefferle,
@pfefferle@mastodon.social avatar

@cdevroe @nathan it is the date you created your Mastodon account, isn’t it?

…and I started my blog in 2005!

…and the blog is part of the fediverse way longer than mastodon even exists ☺️

pfefferle,
@pfefferle@mastodon.social avatar

@cdevroe @nathan ☺️

I have chosen the date of the first blogpost, because WordPress has no „installed at“ date.

An alternative might be the date when the first person follows your blog or when you install the plugin!?!

nathan, to random
@nathan@wpbuilds.social avatar
pfefferle,
@pfefferle@mastodon.social avatar

@talksina @nathan let me know if I can help!

pfefferle,
@pfefferle@mastodon.social avatar

@talksina @nathan migration is tricky and there is no standardized way to do it, so I would recommend to start with the real domain! I only works on public sites btw. The site must be accessible by mastodon at al. otherwise it fails to connect.

pfefferle,
@pfefferle@mastodon.social avatar

@talksina @nathan that it is not on a local machine or password protected

pfefferle,
@pfefferle@mastodon.social avatar

@talksina @nathan if you send me the domain then I can check

pfefferle, to random
@pfefferle@mastodon.social avatar
pfefferle, (edited ) to random
@pfefferle@mastodon.social avatar
pfefferle,
@pfefferle@mastodon.social avatar
pfefferle, to wordpress
@pfefferle@mastodon.social avatar

Oh nice! Following a #WordPress blog using #nodebb is working like a charm!

Good job @julian

#fediverse #activitypub

pfefferle,
@pfefferle@mastodon.social avatar

@julian sure, I will send you a DM!

pfefferle,
@pfefferle@mastodon.social avatar

@julian @devnull sure no problem!

pfefferle,
@pfefferle@mastodon.social avatar

@oplik0 🤔 I will also re-check, because the blog-actor should work exactly like a normal actor.

...and thanks a lot for your investigations and for the quick fix and the feedback 🙂

pfefferle,
@pfefferle@mastodon.social avatar

@oplik0 ah, maybe its that we use domain@domain as WebFinger ID?

pfefferle, to fediverse German
@pfefferle@notiz.blog avatar

It’s a Thing!

Das Fediverse tut sich schwer, das volle Potential der verschiedenen Activity-Objects auszunutzen, hauptsächlich aus Angst, sie falsch oder schlecht darzustellen und deshalb teilen die meisten großen Netzwerke leider nur Notes.

Dabei könnte es so einfach sein!

@deadsuperhero schreibt auf seinem Blog, dass er eigentlich gerne Articles veröffentlichen will, aber (hauptsächlich) durch Mastodon zu Note gezwungen wird, wenn er sicher gehen will, dass der Text vollständig dargestellt wird.

Here’s the problem, though: the biggest player in the space, Mastodon, does a poor job of supporting Article. Instead, every post Mastodon uses is instead a Note. From a semantic point of view, it might not seem like there’s a lot of difference between the two: both are effectively texts posts that can contain some formatting markup, both can hold an arbitrary amount of characters, and both can effectively be used to represent a full article.

A Content-Fallback Mechanism for the Fediverse

Ironischerweise zeigt Mastodon eine föderierte Note vollständig an, auch wenn der Text weit über die eigentlich erlaubten 500 Zeichen hinaus geht, bei einem Article wird statt dessen aber nur die kurze summary benutzt.

Seine Idee: Ein Content-Fallback Mechanismus!

Das heißt jede Aktivität, egal von welchem Typ, liefert zusätzlich zu dem spezifischen Objekt, eine standardisierte Note (content-fallback):

<span><code class="hljs language-json">{  <span class="hljs-attr">"@context"</span>:[    <span class="hljs-string">"https://www.w3.org/ns/activitystreams"</span>,    {      <span class="hljs-attr">"Hashtag"</span>:<span class="hljs-string">"as:Hashtag"</span>    }  ],  <span class="hljs-attr">"id"</span>:<span class="hljs-string">"https://wedistribute.org/2024/04/iftas-dsa-guide/"</span>,  <span class="hljs-attr">"type"</span>:<span class="hljs-string">"Article"</span>,  <span class="hljs-attr">"content-fallback"</span>: {    <span class="hljs-attr">"content"</span>:<span class="hljs-string">"IFTAS, the dedicated Trust & Safety organization ..."</span>,    <span class="hljs-attr">"mediaType"</span>:<span class="hljs-string">"text/plain"</span>,    <span class="hljs-attr">"summary"</span>:<span class="hljs-string">""</span>,    <span class="hljs-attr">"tag"</span>:[{      <span class="hljs-attr">"href"</span>:<span class="hljs-string">"https://wedistribute.org/tags/fediverse"</span>,      <span class="hljs-attr">"name"</span>:<span class="hljs-string">"#fediverse"</span>,      <span class="hljs-attr">"type"</span>:<span class="hljs-string">"Hashtag"</span>    }],    <span class="hljs-attr">"type"</span>:<span class="hljs-string">"Note"</span>,    <span class="hljs-attr">"updated"</span>:<span class="hljs-string">"2024-04-11T20:55:29Z"</span>  }}</code></span><small class="shcb-language" id="shcb-language-1"><span class="shcb-language__label">Code-Sprache:</span> <span class="shcb-language__name">JSON / JSON mit Kommentaren</span> <span class="shcb-language__paren">(</span><span class="shcb-language__slug">json</span><span class="shcb-language__paren">)</span></small>

Ich verstehe das Problem und finde die Idee generell nicht schlecht, aber eigentlich bietet ActivityPub alles Nötige schon von Haus aus! ActivityPub oder besser ActivityStreams ist so aufgebaut, dass alle Objekte von einem Art Base-Object abgeleitet werden. Das heißt Article, Note, Event oder Place, haben ein gleiches Minimal-Set an Attributen:

  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-attachment">attachment</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-attributedto">attributedTo</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-audience">audience</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-content">content</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-context">context</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-name">name</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-icon">icon</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-image">image</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-inreplyto">inReplyTo</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-published">published</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-replies">replies</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-summary">summary</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tag">tag</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-updated">updated</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-url">url</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-to">to</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-bto">bto</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-cc">cc</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-bcc">bcc</a>
  • <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-mediatype">mediaType</a>
  • …und mehr

Und auch wenn beispielsweise Place oder Event einige spezifische Eigenschaften haben, die nicht jede Plattform „kennt“ und „versteht“, sollte es immer möglich sein, die Beschreibung (description oder summary) und den Titel (name) anzuzeigen.

Das Prinzip ist ähnlich wie, wenn nicht sogar inspiriert durch, schema.org/Thing. Auch hier basieren alle Objekte letztendlich auf einem Thing und trotz der wesentlich größeren Anzahl1 an Objekten und Attributen, können Suchmaschinen sich immer sicher sein, dass es zumindest einen name, eine description und eine url zum Anzeigen gibt.

Bevor wir über also über ein content-fallback nachdenken, sollten wir (meiner Meinung nach) erst einmal dafür sorgen, dass die vorhanden Möglichkeiten richtig genutzt werden.

  1. The vocabulary currently consists of 806 Types, 1474 Properties 14 Datatypes, 90 Enumerations and 480 Enumeration members. – https://schema.org/docs/schemas.html ↩︎
pfefferle,
@pfefferle@mastodon.social avatar

@pfefferle @deadsuperhero Nice Article!

  • All
  • Subscribed
  • Moderated
  • Favorites
  • normalnudes
  • DreamBathrooms
  • thenastyranch
  • hgfsjryuu7
  • Youngstown
  • slotface
  • ngwrru68w68
  • vwfavf
  • khanakhh
  • kavyap
  • rosin
  • Durango
  • tacticalgear
  • Backrooms
  • anitta
  • magazineikmin
  • ethstaker
  • InstantRegret
  • everett
  • GTA5RPClips
  • mdbf
  • cisconetworking
  • osvaldo12
  • modclub
  • Leos
  • cubers
  • tester
  • provamag3
  • All magazines