Can someone #ELI5 Diaspora short vs. GUID post references?
TL;DR: There are two distinct ways to reference a post and then it gets complicated.
GUID vs. Short-Form Post References
That is, what is the difference between:
And
Both refer to the same content. In this case, a reshare of my "Markdown Quick Reference" post from Joindiaspora. Which has its own GUID (ROOT_GUID
), but let's not get ahead of ourselves....
In my experience, most Diaspora* users, including those who've been on the platform for ten or more years, or are developers or Podmins get confused, confounded, or tripped up by this. It is a BAD FEATURE and BAD BEHAVIOUR by this objective measure.
The long number is a GUID
, referenced as such in profile data exports and when referencing content with a .json
extension, but I’m not sure what the short value (978058) is, or how it is derived. Any guidance on this is appreciated. There is no mention in the Diaspora* documentation that I can find.
I know that bb9efd507ee8013a5b42448a5b29e257
is the post GUID, and encodes for my profile (07eeb013a5b40448a5b29e257
), leaving 029707b
as ... the post-specific bit.
GUID as Universal Identifier
The GUID reference is common regardless of the hostname of a given Diaspora* Pod. So I could link any of the following hosts where if federated the same post content appears:
There is the possibility that the post is not yet federated, as seems to be the case for diasp.de as I write this (Archive). Comments may differ depending both on when federation occured as well as Pod-specific moderation and federation policies. E.g., users or Pods specifically blocked at a Pod level won't be federated to the Pods blocking them.
The short-form reference is specific to a given Pod. The following do not refer to the same content, or even any content at all, despite having the same short identifier:
Results here will be an essentially arbitrary set of posts, or missing (404) content.
Local-Part URLs
The fact that GUID references are, well, global unique identifiers, means that it's possible to construct a "local-part" reference to a particular post and be guaranteed that it will refer to the same post on all instances, though it may or may not resolve unless the post has been previously federated. You'll have to construct a Markdown link to do so. Just the local part by itself, even within angle brackets to force link resolution, will not be interpreted as a hyperlink:
</posts/bb9efd507ee8013a5b42448a5b29e257>
Resolves as:
... which is not in fact a hyperlink.
Here I'm using the local part URL as the link text as well, to achieve the result I'd intended the above example to produce.
The Markdown:
[/posts/bb9efd507ee8013a5b42448a5b29e257](/posts/bb9efd507ee8013a5b42448a5b29e257)
And the rendered content:
/posts/bb9efd507ee8013a5b42448a5b29e257
More usually one might refer to the post by descriptive text, such as, say, "Markdown Quick Reference reshare". Again, that references the same content on any Diaspora* pod to which the post has been federated. A side-effect is that members of such pods can then interact with the post directly: like, re-share, comment, dismiss, or flag.
On any Pod to which the post has already been federated that link will refer to the same content.
This, incidentally, is why I often reference posts in the form of named-local-part-link, brief-context, and host-specific-link, as with:
[Markdown Quick Reference reshare](/posts/bb9efd507ee8013a5b42448a5b29e257)
> I’d like to fix a few of the omissions and a couple of mis-categorisations, such as the role of the description text in images.
<https://diaspora.glasswings.com/posts/bb9efd507ee8013a5b42448a5b29e257>
Which renders as:
Markdown Quick Reference reshare
I’d like to fix a few of the omissions and a couple of mis-categorisations, such as the role of the description text in images.
https://diaspora.glasswings.com/posts/bb9efd507ee8013a5b42448a5b29e257
The first link will work for Diaspora* users. The second will at least point members of pods to which the content hasn't federated OR of other systems to the content in question. They may not be able to find an interactable version, but they can at least read the post. That's been the best solution I've been able to find.
By contrast, a liink to a remote Pod with a short-form reference does not provide content that is accessible to other Diaspora* members not on that pod. Visit, say, https://diasp.org/posts/978058, and try to sort out how to find that post's GUID. The ... most intuitive ... method I can find is to request the post's JSON abstract: https://diasp.org/posts/978058.json, which provides the following highly user-friendly interface:
{"id":978058,"public":true,"guid":"88207916cf429559","created_at":"2012-04-16T03:57:58.000Z","provider_display_name":null,"interacted_at":"2012-04-19T16:30:46.000Z","text":"![image name](/gocamo/9e0f11531bce86f327414ce0b965ad69cd4af3dc/687474703a2f2f64323477366273726862656839642e636c6f756466726f6e742e6e65742f70686f746f2f333832323537375f343630732e6a7067)\r\n#jesus #funny #lustig","post_type":"Reshare","nsfw":false,"author":{"id":79239,"guid":"7103eca9cc32b7ea","name":"St. Martin (der)","diaspora_id":"eiseskaelte@despora.de","avatar":{"small":"/gocamo/1b372f038c8b74131ae147c4f98306c0d4005c96/68747470733a2f2f646573706f72612e64652f75706c6f6164732f696d616765732f7468756d625f736d616c6c5f31653962636565363236363635363463383462312e6a7067","medium":"/gocamo/dcee8773f5984d2465a4be58a2b0e1de194b86b4/68747470733a2f2f646573706f72612e64652f75706c6f6164732f696d616765732f7468756d625f6d656469756d5f31653962636565363236363635363463383462312e6a7067","large":"/gocamo/b3d8ca033f5fa63518f15078e3c95b1c3f5566cd/68747470733a2f2f646573706f72612e64652f75706c6f6164732f696d616765732f7468756d625f6c617267655f31653962636565363236363635363463383462312e6a7067"}},"o_embed_cache":null,"open_graph_cache":null,"mentioned_people":[],"photos":[],"root":{"id":971667,"public":true,"guid":"9809f7ca269e53ce","created_at":"2012-04-13T13:28:05.000Z","provider_display_name":null,"interacted_at":"2012-05-29T21:29:43.000Z","text":"![image name](/gocamo/9e0f11531bce86f327414ce0b965ad69cd4af3dc/687474703a2f2f64323477366273726862656839642e636c6f756466726f6e742e6e65742f70686f746f2f333832323537375f343630732e6a7067)\r\n#jesus #funny #lustig","post_type":"StatusMessage","nsfw":false,"author":{"id":64425,"guid":"70a53686776a814d","name":"Susi Kunterbunt","diaspora_id":"susikunterbunt@joindiaspora.com","avatar":{"small":"/gocamo/ec18e26cf52a80516d8f5eeaab0f4dad2ec89483/68747470733a2f2f6a6f696e64696173706f72612e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f696d616765732f7468756d625f736d616c6c5f36303565316365626236626537313962636633332e6a7067","medium":"/gocamo/2962f942cd84af4979ac80638bbaee941866ea1e/68747470733a2f2f6a6f696e64696173706f72612e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f696d616765732f7468756d625f6d656469756d5f36303565316365626236626537313962636633332e6a7067","large":"/gocamo/5a37c0f77aab27117fe1c13b977179dfe013f2a3/68747470733a2f2f6a6f696e64696173706f72612e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f696d616765732f7468756d625f6c617267655f36303565316365626236626537313962636633332e6a7067"}},"o_embed_cache":null,"open_graph_cache":null,"mentioned_people":[],"photos":[],"root":null,"title":"image name http://d24w6bsrhbeh9d.cloudfront.net/photo/3822577_460s....","location":{"address":null,"lat":null,"lng":null},"poll":null,"poll_participation_answer_id":null,"participation":false,"interactions":{"likes":[],"reshares":[],"comments_count":0,"likes_count":2,"reshares_count":1}},"title":"image name http://d24w6bsrhbeh9d.cloudfront.net/photo/3822577_460s....","location":{"address":null,"lat":null,"lng":null},"poll":null,"poll_participation_answer_id":null,"participation":false,"interactions":{"likes":[],"reshares":[],"comments":[],"participations":[],"comments_count":0,"likes_count":1,"reshares_count":0}}
If my best option is to unholster jq ... there seems to be some kind of failure at hand.
For the record, not even page source seems to help as the GUID isn't referenced within it by either label or value. See [view-source:https://diasp.org/posts/978058](view-source:https://diasp.org/posts/978058). Note that that link only works if your browser supports the view-source:
meta-protocol. You may need to use tools such as curl
or wget
instead to grab raw page source.
I'll also note that for posts archived under their short-reference URL won't suffice to indicate GUID as that information is not available until an independent and additional JSON request is made. That is not possible for a downed Pod or deleted post or user.
Oh, and for the record, the GUID for that diasp.org post is 88207916cf429559
.
In posts that are reshares of earlier posts, you'll also find a ROOT_GUID
reference, which is the GUID of the original ("root") post reshared.
Diaspora* vs. other Fediverse Services and Federation
I've been careful to specify Diaspora* pods, as non-Diaspora* services (Friendica, Hubzilla, SocialHome, ...) may not use the same local-part reference.
Mind, now we've also got Federation to contend with, and not all content federates to all Pods. Worse, I'm not aware of a way to force federation of content through some pull action which isn't already federated via a Follow, Reshare by some profile followed on a Pod, or a direct mention of some profile on a Pod. Despite a GUID, simply requesting that GUID-identified content on a Pod won't generate a federation event. Though one would think that the encoded profile tag might identify the Pod the profile is on.
In practice, I forced Federation of many of my early Joindiaspora posts to Glasswings by specifically mentioning my Glasswings profile from a profile which could see the post, typically the original authoring profile --- my old Joindiaspora proifle @Doc Edward Morbius (moved to Glasswings). (Generating a huge volume of "ping spam" Notifications alerts for anyone who'd previously subscribed to those posts... Again, my apologies, but I couldn't find any other way.)
Making all of this all the more complicated... Why a Short-Reference default?
... Diaspora* defaults to using short vs. GUID references, most especially in post links and notifications.
To view the GUID reference one must click on either the hidden-by-default link-icon on a post in Stream view, or the date indicator within a post page. (You can view either of these yourselves in stream / post view.)
This means that in most cases, people are using non-portable references to posts. When viewing posts publicly, the GUID is not shown or accessible.
Among reasons why this matters: I've spent two months ensuring that most of my posts from the now-defunct Joindiaspora Pod are archived at the Internet Archive (about 73% success rate) and Archive.Today (approaching 100%). But I'd archived the GUID reference URLs of those posts. The short-URL formats, including the short-URL formats included for other posts referenced within those archives or of archives of Profile pages are not archived. External links to short-URL formats are also not archived.
All of which is something of a mess.
Which leaves us with a few questions
Q: What is the official name of the short-post reference?
Poking at page source suggests data-guid
. That also does not exist in the Wiki or Discourse. There are six references presently in the Diaspora* codebase.
Q: Is there any extant documentation or discussion of this at all?
I've found none at the Diaspora* Wiki or the Diaspora* Discourse sites.
Q: Why distinguish "short" and "GUID" references at all?
Q: Is there some cost to GUID references I'm unaware of?
Q: Why are "short" post references the default reference?
Q: Why are "short" post references used at all?
Q: Why are GUID post references not exposed for general-public access to a post?
Q: Why does a local request for GUID-identified posts not trigger a federation event and fetch request for that post?
I could probably extend that list and likely will in comments. But it's a good start.
Shares and boosts appreciated.
#diaspora #eli5 #help #tips #FAQs #GUID #federation #DiasporaDev #Podmins