I’ve now mostly removed all those posts imported from tumblr that were just a reblog of someone else. That’s more than 1500 of them. These shouldn’t have been imported in the first place.

Next task in the tumblr import mess cleanup is to fix the posts that are broken. Especially videos didn’t come through correctly, so I will just re-upload them again. But also photo sets aren’t ok.

In the mean time I’m trying to add microformats2 and other meta tags to this blog in a child theme. The existing plugins don’t quite do it the way I want. The eventual goal is to be able to have a better integration with Twitter and others using bridgy.

I also have plans to use categories more to separate subjects as if they are separate blogs, with an overview on the homepage. You may notice the homepage is currently very sparse, but that’s because the content it’s going to point to is not ready.

I was interested to find out how the different pieces of software that make up the fediverse connect together so I tried to investigate. I got confused about all the different cases and exceptions, so I wanted to write it down in a post. I’ll keep updating this post when I learn more.

Specs

The relevant specs are ActivityPub, ActivityStreams (AS2) and the AS2 Vocabulary.

ActivityStreams and its Vocabulary define the elements that make up posts, timelines, followers and likes, the kind of stuff we know from social media. ActivityPub defines how these messages can be exchanged between servers. This creates a decentralised web of servers and services where users can follow and message each other. This is the fediverse.

Imagine being able to use your Twitter account to follow someone’s Instagram account and reply with praise about their photos. And imagine your sister setting up her own Twitter server and giving you an account on that. The fediverse is like that. Except of course Twitter and Instagram don’t support that, they want to keep you within their systems because they need your clicks to make money. Instead most software in the fediverse is open source software.

Mastodon

Mastodon (see https://joinmastodon.org/) is a Twitter like service where you post short messages, follow other people’s messages and reply to them.

The posts are modelled as objects with type Note. The text is in the attribute content (and/or contentMap?) and is assumed to be plain text or html. The summary attribute has a special meaning: it is not shown as a short excerpt of the post followed by a ‘read more’ link, but as a content warning or trigger warning, followed by a link to read anyway; the result is the same.

If the content contains html, it is completely stripped and presented as plain text. Except hyperlinks, which remain functional even though there’s no way in the Mastodon UI itself to create hyperlinks.

If a post of type Article comes in, it is converted to a Note and treated as such.

When someone posts a message, it is sent to other servers as a Create activity of the Note object. If someone likes a post, it is sent as a Like activity. If someone shares a message (reposts, reblogs, retweets, boosts) it is sent as an Announce activity. Like and Announce can be undone by sending the Undo activity. The Delete activity of posts is supported. The Update activity for posts is not.

Media (photo’s, video’s, audio files) are accepted as content of the attachments attribute of the Note object. Such an Image object contains a Link object. Mastodon will retrieve the media from the remote server and store it internally. This media will be kept. Mastodon allows either four images, or one video or one audio file.

Direct media objects (e.g. a Create activity with an Image object) are not supported.

Following someone is done by sending a Follow activity to the server of the person you want to follow, with the Actor object as the object of the activity. That server responds with an Accept or Reject activity (with the Follow activity as object) either immediately, or after the followed user manually accepted/rejected the request. You stop following someone by sending an Undo activity with the original Follow as object. The other server can stop the follow relationship as well by sending a Reject (with the Follow as object) even after first accepting it.

Note that because Mastodon doesn’t store the original activities, it will not include the original Follow activity in any Reject or Undo, but create a fake new one. In that Mastodon is not spec compliant.

If a user blocks another user, Mastodon sends a Block activity (with the user’s Actor as object) to inform the other server (and possibly that user) that they are blocked and will they please stop reading these messages.

If a post contains text that looks like a web address, the UI tries to fetch and show a preview of that page when showing the post. This preview is not part of the post as created and sent to other servers.

(to check: polls)

Glitch-soc

Glitch-soc (see https://glitch-soc.github.io/docs/) is a fork of Mastodon and it does basically the same thing, but a little more. E.g. glitch-soc is able to receive rich text (as html in the content attribute) and show it to the users.

Pleroma

Pleroma (see https://pleroma.social/) is also a Twitter like service. It interacts with other servers in much the same way as Mastodon, with some exceptions.

Pleroma tries to be more spec compliant. It stores ActivityStream objects internally, so if the spec says to include the original activity, e.g. in an Undo, it does so.

Pleroma accepts rich text as html content and only strips dangerous tags. It also provides users with a UI to enter rich text in several formats like html, markdown, bbcode, but they are all converted to html. Users can also enter hyperlinks.

It accepts Article posts without the need to convert them.

Media are also modelled the same as Mastodon does (as Image, Video, etc, objects in the attachment attribute which has Link objects pointing to the original), and retrieves the content from the remote server. These remote media contents are however only cached temporarily and refetched if needed.

Direct media objects (e.g. a Create activity with an Image object) are not supported.

To check: is audio supported?

Pleroma also doesn’t send Block activities to the affected servers or users. Blocking is handled internally by making sure the blocking user doesn’t see posts or notifications by the blocked user.

If a post contains text that looks like a web address, the UI tries to fetch and show a preview of that page when showing the post. This preview is not part of the post as created and sent to other servers.

(to check: polls)

Pleroma is also the only implementation I know of that supports the Client to Server part of the ActivityPub spec.

Friendica

Friendica (see https://friendi.ca/) can do everything. It tries to connect to all other services and be the spider in the web. At its heart it is a Facebook alternative, where by default accounts are set to need a mutual connection (so a manual Accept to a Follow request), though a user can set their account to soapbox-style so Follow requests are accepted automatically.

It also has concepts like Events, Photo Albums, etc, though I don’t know how these are communicated over ActivityPub, if at all.

Friendica seems to accept any ActivityPub message, even though it can not always display it right. E.g. a direct image post (a Create activity with an Image as object) is accepted, but the image doesn’t show.

It tries to distinguish between flavours of ActivityPub, e.g. it knows when it’s talking to a Pleroma server or a Mastodon server.

Friendica also connects over the OStatus protocol, with Diaspora, and integates with Twitter, Tumblr, WordPress, etc.

The post editor allows posts to be created in bbcode. If a photo is inserted, the editor creates a post with a hyperlink to the original and a smaller preview as attachment. This is how the post is sent to other servers. This differs from the behaviour of Mastodon and Pleroma, which just attach (a reference to) the image and leave stuff like previews to the UI of the system the receiving user is using.

Friendica also supports groups in the form of Forums, that can be addressed by using “!” instead of “@” in a mention. The forums can be located on a different server than the user’s server, but the forum server will still be able to authenticate the user as a member of the forum because Friendica supports OpenWebAuth.

Pixelfed

Pixelfed (see https://pixelfed.org/) is a photo sharing application like Instagram.

It supports communication with Mastodon, Pleroma, etc over ActivityPub. If a user makes a post of a photo (or multiple photos) a Create activity with a Note object is sent to that user’s followers. The Note object contains the caption in the content (or contentMap) attribute. The attachments attribute contains a list of Image objects, one for each photo. Each contains a Link object that refers to the photo on the originating server. (to do: check) Similar for a video post.

This is also the way Pixelfed expects to receive posts (and the way Mastodon sends them). If a Note object is received as part of a Create activity, its attachments are checked for video or image content. If it is just a text post, or has just an audio attachment, it is not received. If it is a direct media post (a Create activity with a Image object) it is not received as there is currently no other software that sends such messages reliably.

If the object is of type Article it is also not received, even if it has media attachments.

PeerTube

PeerTube (see https://joinpeertube.org/) is a video sharing platform like Youtube. Users can have multiple channels in which they can post videos. Within the platform users can subscribe to (follow) specific channels of other users, they can’t follow the user’s account itself.

PeerTube accounts and channels can be followed over ActivityPub from Mastodon, Pleroma, etc. Which gives the weird situation that PeerTube accounts (rather than channels) can be followed by non-PeerTube accounts only.

Non-PeerTube accounts can comment on (reply to) video’s by normal Note messages. Like messages are also supported, as are Dislike messages. The latter seem only the available to Peertube accounts within the platform.

If a user posts a video, after it has been processed by the server, a Create activity is sent with a Video object. This is different from the other ActivityPub software which sends media as attachments to Note or Article objects.

Other PeerTube servers will only receive a Create activity with a Video object if it conforms to strict criteria. E.g. the content attribute which contains the caption needs to be encoded in markdown (not html). Also the url needs to be a webtorrent link.

If someone viewed a video (or the majority of it) a View activity is sent to indicate the video has been seen. The server hosting the video can update the view count.

WordPress

A WordPress blog can be attached to the fediverse by installing the ActivityPub plugin. It can also cooperate with other IndieWeb sites using the relevant IndieWeb plugins. These plugins are compatible.

There’s another plugin that attaches WordPress to the fediverse: Pterotype. I don’t have experience with that one. It is not fully compatible with the Indieweb plugins.

When a WordPress post or page is published, a Create activity is sent to the blog’s followers on the fediverse. The object in the Create activity is either a Note or an Article or any other type like Image, Video, depending on user settings. It is best to keep this setting at Note for compatibility with e.g. Pixelfed.

Delete is not yet supported as an activity to send. Update neither (to do: check).

The WordPress ActivityPub plugin supports received Follow activities (will automatically send an Accept) and replies in the form of Notes.

Funkwhale

Funkwhale is an audio sharing platform like Soundcloud. I have no experience with it. I believe it is using a part of the ActivityStreams vocabulary which is not supported by the other software.

SocialHome

Will soon support ActivityPub. Besides that I think it supports the Diaspora protocol (to do: check).

Plume

To do

Writefreely

To do

Misskey

To do

Osada

Supports both ActivityPub and Zot as protocols.

Hubzilla

Only supports ActivityPub if the admin has installed it as plugin. The demonstration instance for new users does not have it installed.

See https://zotlabs.org/page/hubzilla/hubzilla-project.

Hubzilla (as a Zot implementation I think, to do: check) supports nomadic identities. This means that a user account is not linked to a single server (Hub), but can be used on multiple hubs. This solves the problem of servers going out of service and users moving home.

Zap

See https://zotlabs.com/zap/. Supports Zot as protocol, not ActivityPub. Is migrating to a new version of Zot which will make it incompatible with Osada and other Zot implementations.

Diaspora

Does their own thing and uses only its own protocol. I’ve been told it connects with Friendica and Hubzilla.

Relays

In Mastodon and several other services, messages are only delivered to a server if there is someone on that server following that author. Even if the message is a publically visible message. This means that the network timeline of public messages can remain quite empty especially for new or small servers.

Mastodon has the ability for one server to follow another server. This is not commonly done. Peertube does have the same ability, though here it is much more common as I understand.

Pleroma has relay functionality built in in the software, where the administrator can subscribe to a relay. This relay is separate software (Litepub Relay, see https://git.pleroma.social/pleroma/relay) which is provided by Pleroma and which creates Announce (reblogs) activities for each Create activity it receives. Mastodon can follow such a relay as well.

I think Friendica also has such a separate relay software. (to do: check)

Diaspora seems to have separate relay software where servers (pods in their terminology) can subscribe to hashtags instead of the whole feed. To do: check.

Profile directories

Mastodon has an optional, opt-in, profile directory with the scope of the local server. There is no global directory.

Friendica has a Site Directory (for the local server) as well as a Global Directory as a separate but decentralised application. Both are opt-in only. See https://dir.friendica.social/.

The Instagram alternative Pixelfed, which is part of the fediverse as this blog is, now supports following accounts from outside the Pixelfed instance. Much thanks to the developer for making this happen! This is a major milestone on its way to its first stable release.

I’ve successfully send a post from Mastodon (the Twitter alternative in the fediverse) and received it in my Pixelfed account. I’ve replied on the post in Pixelfed and this reply is then visible on Mastodon. That’s how federation works!

This is a post I made on Mastodon. It arrived in Pixelfed. I’ve replied to it with my Pixelfed account, which arrived back on Mastodon.
This is the same post, but shown in Pixelfed.

Some problems still exist, that they are working hard on to fix:

  • You can’t follow people from other Pixelfed instances. This is of course a big bug that I’m sure will be fixed soon.
  • You can’t follow accounts from all fediverse software yet. E.g. following someone from Pleroma (another Twitter alternative) doesn’t yet work

I’ve also tested remote follow with Friendica (the Facebook alternative), Peertube (the YouTube alternative) and this WordPress blog, but no luck yet.

The photos I used in the test posts are of actress Genevieve Buechner taken by www.instagram.com/djuansala.

I guess I’ll be deleting everything from all those imported posts that is just a reblog. I may be some time…

Why did these get imported in the first place?

Anyway, after that I’ll have to go through the image uploads and remove the photos that are no longer attached. That should leave just the posts and photos that I actually made on tumblr. I’ll go through the attachments, fix the videos that got broken and reupload the photos from the originals. Then it’s time to actually set up the category pages.

The European elections are happening, e.g. this Thursday in The Netherlands, and we have to vote to stop the fascists.

This may sounds overly melodramatic and I wish it was. Fascist movements are rising at several places in the world and it is madness that we let it happen again. It is madness to be able to say it in this day that these movements are here again.

They are fueled in part by Russian misinformation. The propaganda tries to break up the western world, which is most easily done by getting the western societies to disintegrate themselves. Breaking up the EU is very much part of that plan.

The EU was founded to promote better relations among the European states in the hope we never need to have a war with each other again.

The extremist movements are also fueled by the growing sense that people should only look after themselves and not care about others. People nowadays don’t want to share their relative (!) luxury with people who have even less. They don’t want to provide a safe haven to people fleeing war. Somehow they think it is people’s own fault that they are ruled by a brutal dictator raging a war on his own people. They don’t want people coming in from other European countries providing cheaper and better labour, even though those are simple market forces. Fight for your market share by being cheaper or better and remember that it is unfair to argue that they have to live worse lives just because of where they are born.

In the EU we help each other out. Now there are refugees coming in from the south and people in north and west Europe resent having to help out sheltering them. But next time, when a stream of refugees comes across the North Sea, we of course demand the assistance of all these other countries. Next time our economy is down, we argue we should be able to work where there is demand. How could we not?

Hidden money streams of the ultra rich are fueling policies of hate. Ultra rich people that could solve poverty in a heart beat. But the economically downtrodden are fighting their fight, believing in populists’ slogans. How do these ultra rich sleep at night.

Somehow the idea has risen that it is unfair that fuel prices rise when it is running out and destroying the environment. That it is somehow unfair that governments increase the fuel prices to force people to change their ways, literally. That it is somehow left-wing politics to demand free use of resources that do not exist. No, that is right-wing politics: to not care what this does to others, including future generations.

We in The Netherlands are the ultimate example that we need the EU. We are simply too small to go it alone. On our own, any environmental politics will have no impact. You need to do that with the whole EU, and use the EU to get the world on board.

So let’s vote for pro-European parties this election. Let’s make sure the institutions are not crumbing from within by the machinations of dark forces. Let’s make sure this culture of me-me-me and us-before-them does not survive and that the principles of solidarity and shouldering the burdens together win. Let’s care, about others and about our future.

Banner from her merchandising site

Heather Nova posted an Instagram video with some music from new album Pearl. The pre-order / crowdfunding campaign is still open at heathernova.lnk.to/preorderpearlin. She has finished recording the album, but all the mixing stuff, etc is still to be done.

Sounds good! I still can’t get over her voice…

I just pre-ordered my signed CD. Yes I’m late, I know.

Installation out of plastic bottles at Glow Eindhoven 2015.
Glow Eindhoven 2015. Photo by me.

So the import from my Tumblr into my WordPress is done. Over 2000 posts… And it has become a right old mess. Here’s what I noticed so far:

  • Titles on Tumblr text posts are optional. Apparently on WordPress (or just in this theme, I don’t know) they are not. So the import tool has made the whole text of the post as the title, showing up like that in recent posts lists, archives, etc.
  • Photo sets are presented as square thumbnails, losing the layout that was in Tumblr. Often there’s a mix of portrait and landscape photos and I chose the layout to have the correct areas of the photo visible in the preview. Because Tumblr, and probably WordPress, lack the focal points that Mastodon has.
  • The previews of photos in photo sets in Tumblr are presented much nicer and closer together than they are in WordPress
  • Photo sets that were posted on mobile in Tumblr, which displayed incorrectly on the Tumblr web, also import incorrectly into WordPress. On mobile the photos were previews that you could tap to see the full image. On Tumblr web, and now here after the import, the photos are just low res inserts in a text post. It is related to the fact that on mobile, the posts no longer have different types: they have different blocks of content, same as this new WordPress editor. However, all older interfaces read those as text posts.
  • Videos, at least posted on Tumblr mobile, import as a single image. That’s not good.
  • The import tool imports everything, also reblogs. I guess that’s just how Tumblr presents the content. I would have been ok with just importing the original posts. But then, what about those reblogs where I added text or photos? I’ll be adding category classifications to these posts so they can be easily found.

I also don’t really like this WordPress theme. Maybe I should practice some more (I will make several test posts) or tweak it. Some early gripes:

  • Titles don’t seem optional
  • Fonts, especially titles and the author blurb, are way too large
  • There doesn’t seem to be a side bar, everything is in the footer
  • Featured images don’t work
  • It’s unclear where your post ends and the next one begins

I’ll probably be fixing some of the older posts that suffered most from the import. And as I said I will be making some text posts. I’ll be trying the various gallery features and see how to emulate the Tumblr mobile experience.