Manual Backfeed in the Blogosphere

Forcing webmentions for conversations on websites that don’t support Webmention

Within the IndieWeb community there is a process called backfeed which is the process of syndicating interactions on your syndicated (POSSE) copies back (AKA reverse syndicating) to your original posts. As it’s commonly practiced, often with the ever helpful Brid.gy service, it is almost exclusively done with social media silos like Twitter, Instagram, Flickr, Github, and Mastodon. This is what allows replies to my content that I’ve syndicated to Twitter, for example, to come back and live here on my website.

Why not practice this with other personal websites? This may become increasingly important in an ever growing and revitalizing blogosphere as people increasingly eschew corporate social sites and their dark patterns of tracking, manipulative algorithmic feeds, and surveillance capitalism. It’s also useful for sites whose owners may not have the inclination, time, effort, energy or expertise to support the requisite technology.

I’ve done the following general reply pattern using what one might call manual backfeed quite a few times now (and I’m sure a few others likely have too), but I don’t think I’ve seen it documented anywhere as a common IndieWeb practice. As a point of fact, my method outlined below is really only half-manual because I’m cleverly leveraging incoming webmentions to reduce some of the work.

Manually syndicating my replies

Sometimes when using my own website to reply to another that doesn’t support the W3C’s Webmention spec, I’ll manually syndicate (a fancy way of saying cut-and-paste) my response to the website I’m responding to. In these cases I’ll either put the URL of my response into the body of my reply, or in sites like WordPress that ask for my website URL, I’ll use that field instead. Either way, my response appears on their site with my reply URL in it (sometimes I may have to wait for my comment to be moderated if the receiving site does that).

Here’s the important part: Because my URL appears on the receiving site (sometimes wrapped as a link on either my name or the date/time stamp depending on the site’s user interface choices), I can now use it to force future replies on that site back to my original via webmention! My site will look for a URL pointing back to it to verify an incoming webmention on my site.

Replies from a site that doesn’t support sending Webmentions

Once my comment appears on the receiving site, and anyone responds to it, I can take the URL (with fragment) for those responses, and manually input them into my original post’s URL reply box. This will allow me to manually force a webmention to my post that will show up at minimum as a vanilla mention on my website. 

The manual webmention box and button that appear on all my posts.

(Note, if your site doesn’t have a native box like this for forcing manual webmentions, you might try external tools like Aaron Parecki’s Telegraph or Kevin Mark’s Mention.Tech, which are almost as easy. For those who are more technical, cURL is an option as well.)

Depending on the microformats mark up of the external site, the mention may or may not have an appropriate portion for the response and/or an avatar/name. I can then massage those on my own site (one of the many benefits of ownership!) so that the appropriate data shows, and I can change the response type from a “mention” to a “reply” (or other sub-types as appropriate). Et voilà, with minimal effort, I’ve got a native looking reply back on my site from a site that does not support Webmention! This is one of the beautiful things of even the smallest building-blocks within the independent web or as a refrain some may wish to sing–“small pieces, loosely joined”!

This method works incredibly well with WordPress websites in particular. In almost all cases the comments on them will have permalink URLs (with fragments) to target the individual pieces, often they’ve got reasonable microformats for specifying the correct h-card details, and, best of all, they have functionality that will send me an email notification when others reply to my portion of the conversation, so I’m actually reminded to force the webmentions manually.

An Illustrative Example

As an example, I posted on my website that I’d read an article on Matt Maldre’s site along with a short comment. Since Matt (currently) doesn’t support either incoming or outgoing webmentions, I manually cut-and-pasted my reply to the comment section on his post. I did the same thing again later with an additional comment on my site to his (after all, why start a new separate conversation thread when I can send webmentions from my comments section and keep the context?).

Matt later approved my comments and posted his replies on his own website. Because his site is built on WordPresss, I got email notifications about his replies, and I was able to use the following URLs with the appropriate fragments of his comments in my manual webmention box:

https://www.spudart.org/blog/xeroxing-your-face/#comment-43843
https://www.spudart.org/blog/xeroxing-your-face/#comment-43844

After a quick “massage” to change them from “mentions” into “replies” and add his gravatar, they now live on my site where I expect them and in just the way I’d expect them to look if he had Webmention support on his website.

I’ll mention that, all of this could be done in a very manual cut-and-paste manner–even for two sites, neither of which have webmention support.  But having support for incoming webmentions on one’s site cuts back significantly on that manual pain.

For those who’d like to give it a spin, I’ll also mention that I’ve similarly used the incredibly old refbacks concept in the past as a means of notification from other websites (this can take a while) and then forced manual webmentions to get better data out of them than the refback method allows.

Using IFTTT to syndicate (PESOS) content from social services to WordPress using Micropub

Introduction

What follows may tend toward the jargon-y end of programming, but I’ll endeavor to explain it all and go step-by-step to allow those with little or no programming experience to follow along and use the tools I’m describing in a very powerful way.  I’ll do my best to link the jargon to definitions and examples for those who haven’t run across them before. Hopefully with a bit of explanation, the ability to cut and paste some code, or even make some basic modifications, you’ll be able to do what I and others have done, but without having to puzzle it all out from scratch.

Most readers are sure to be aware of the ubiquitous “share” buttons that appear all over the web. Some of the most common are “share to Facebook” or “share to Twitter”. In my examples that follow, I’m doing roughly the same thing, but I’m using technology called webhooks and micropub to be able to share not just a URL or web address, but a variety of other very specific data in a specific way to my website.

This “share”–while a little more complicated–gives me a lot more direct control over the data I’m sending and how it will be seen on my website. I would hope that one day more social websites will have built in share buttons that allow for direct micropub integration so that instead of only sharing to corporate sites like Facebook, Twitter, et al. they’ll let people share directly to their own personal websites where they can better control their online identity and data. What I’m describing below is hopefully a temporary band-aid that allows me to keep using common social services like Pocket, YouTube, Meetup, Goodreads, Letterboxd, Diigo, Huffduffer, Reading.am, Hypothes.is, and hundreds of others but to also post the content to my site so that I own and control more of my own online data.

An example using Pocket

Following in the footsteps of Charlotte Allen and Jan-Lukas Else, I’ve been tinkering around with improving some of my syndication workflows for a number of social silos including Pocket, a social silo that focuses on bookmarking material to read later.

I have long used IFTTT (aka If This, Then That), a free and relatively simple web service that allows one to create applets that tie a large number of web-based and social services together, to send data from my Pocket account to my WordPress-based website. I’d done this using my Pocket RSS feed to create WordPress draft posts that I could then modify if necessary and publish publicly if I desired. Since I regularly use a number of Micropub clients in conjunction with the WordPress Micropub plugin and IFTTT supports webhooks, I thought I’d try that out as a separate process to provide a bit less manual pain in mapping the data for posts to appear like I want them to on my website. 

Now I can use my Pocket account data and map most of it directly to the appropriate data fields on my website. Because Pocket has direct integration into IFTTT, I can actually get more data (particularly tags) out of it than I could before from the simple RSS feed.

Below, you’ll find what I’ve done with a quick walk through and some example code snippets. I’ll break some of it down into pieces as I go, and then provide a specific exemplar of some of the code properly strung together at the end. I’ll also note that this general procedure can be used with a variety of other silos (and either their integrated data or RSS feeds) within IFTTT to post data to your website. Those running platforms other than WordPress may be able to use the basic recipe presented here with some small modifications, to send similar data from their accounts to their sites that support Micropub as well. 

Directions for connecting IFTTT to publish to WordPress via Micropub

Preliminaries

Install and activate the Micropub plugin for WordPress. This will give your website a server endpoint that IFTTT will use to authenticate and send data to your website on your behalf.

If you don’t already have it, install the IndieAuth plugin for WordPress and activate it. This will allow you to generate an authorization token (think password) with the appropriate scopes (think permissions to do specific actions on your website) to allow IFTTT to securely post to your website. 

Within the WordPress administrative interface/dashboard go to Users >> Mange Tokens or go to the path /wp-admin/users.php?page=indieauth_user_token on your website. 

At the bottom of that page under the section “Add Token” add a convenient name for your new token. You’ll see in the following screencapture that I’ve used “IFTTT for Webhooks”. Next click the check boxes to add scopes for “create” and “media”. Finally click the “Add New Token” button.

Screencapture from the Add Token section of the User >> Manage Tokens page

On the resulting page, copy the entirety of the returned access token in a safe place. You’ll need this token later in the process and once you’ve navigated away from the page, there’s no way to retrieve the token again later. The same token can be used for multiple different recipes within IFTTT,  though one could create a different token for each different recipe if desired.

Sign up for an IFTTT account (if you don’t already have one). 

Register Pocket as a service you can use within IFTTT.

The IFTTT Applet

In your IFTTT.com account, create a new applet.

Screenshot of the "If This Then That" recipe start with "This" highlighted

For the “if” part of the applet, search for and choose the Pocket application.

Screenshot of a search for "Pocket"

Choose the trigger “Any new item” (other triggers could be chosen for different combinations of actions).

Click the “then” part of the applet, and search for and chose the Webhooks application.

Screenshot of the "That" portion with a search for Webhooks

Choose the “Make a web request” option (currently the only option on the page).

Next we’ll fill in the action fields.

Screencapture of the Complete Action Fields step

 

Fill in the four action fields with the following values, with the appropriate modifications as necessary:

URL: https://www.example.com/wp-json/micropub/1.0/endpoint

Be sure to change example.com to the appropriate URL for your website. If you’re using a platform that isn’t WordPress in combination with the Micropub plugin, you can quickly find your appropriate endpoint by looking at your homepage’s source for a <link> element with a rel="micropub" attribute.

Method: POST
Content Type: application/x-www-form-urlencoded

More advanced users might experiment with other content types, but this will naturally require different data and formatting in the Body section.

Body: 

The Body portion is one of the most complicated portions of the operation, because this is where you can get creative in how you fill this out and the end results you end up with on your website. You can use the available variables in the recipe to custom create almost anything you like and some services will give you a tremendous amount of flexibility. I’ll walk through a handful of the most common options and then tie them all together at the end. Ultimately the Body will be a string of various commands that indicate the data you want to send to your website and all of those commands will be strung together with an ampersand character (“&“) between each of them.

There are some small differences you may want to experiment with in terms of what you put in the Body field based on whether or not you’re using the Post Kinds plugin to create your posts and reply contexts or if you’re not. 

Depending on which pieces you choose, I recommend doing a few test runs for your applets to make sure that they work the way you expect them to. (The Micropub plugin has a setting to mark incoming posts automatically as drafts, so you’re not spamming your readers while you’re testing options if you’re testing this on a live site.) Sometimes formatting issues (particularly with setting a publish time) may cause the post to fail. In these cases, experiment to find and excise the offending code and see if you can get things working with minimal examples before adding additional data/details.

For those who would like to get into more advanced territory with the programming and methods, I recommend looking at the W3C’s Webmention specification

The first thing you’ll want in the Body will be your access token. This is similar to a password that allows the webhook to publish from IFTTT to your website. You’ll want a line that reads as follows with the AccessTokenHere replaced with the access token from your token provider which you created earlier and saved. You’ll want to keep this secret because it acts like a password for allowing remote applications to post to your website.

access_token=AcessTokenHere

Next will come the content you want to be published to your site.

&content=<<<{{EntryTitle}}<br>{{EntryPublished}}>>>

I’ll mention that the content snippet can include almost anything you’d like using the variables provided by IFTTT as well as a reasonable variety of HTML. I’ve used it to add things like <blockquotes> for annotations and even <audio> tags for making listen posts or bookmarking audio with Huffduffer!

The following snippet tells your site what kind of content it’s receiving. Unless you’re doing something more exotic than bookmarks, likes, favorites, replies, or most post kinds (except maybe events), you’ll want to use the h-entry snippet as follows:

&h=entry

If you’d like your post to contain a formal title, then you’ll want to include the following code snippet. Generally with shorter content like notes/status updates, bookmarks, reads, likes, etc., I follow the practice of publishing titleless posts when they’re not required, so I personally skip this piece in most of my posts, but some may wish to include it.

&name=<<<{{Title}}>>>

To have your website create or use the correct category or tag taxonomies on your posts, you’ll want to have something similar to the following snippet. If you want to specify more than one category, just string them together with ampersands. If your category/tag has a blank space in it you can replace the spaces with %20. The Micropub server on your site should automatically check to see if you have categories or tags that match what is sent, otherwise it will create a new tag(s).

&category[]=Bookmark&category[]=Social%20Stream

I’ve found that in practice, some silos that allow for multiple tags will actually publish them via micropub using something along the lines of the following if the  appropriate variables on IFTTT exist. In these cases, I append this to the other categories and tags I want to specify.

&category[]=<<<{{Tags}}>>>

If you’re using your Pocket account to send your bookmarked articles to read later, you’ll want to create a bookmark with the following line:

&bookmark-of=<<<{{EntryUrl}}>>>

Alternatively, if you were using your Pocket account to archive your articles once you’ve actually read them, you could have IFTTT post these archived items as “reads” to your site by choosing the “New Item Archived” element in the Pocket portion of the IF set up process. Here you’d replace the above bookmark-of line with the following:

&read-of=<<<{{EntryUrl}}>>>

If you were creating different sorts of posts you might also use the appropriate alternate verbiage: like-of, watch-of, listen-of, rsvp, etc. (find details for the appropriate mark up on the IndieWeb wiki or the correct microformats v2 property within the code for the Post Kinds plugin). If you are using the Post Kinds plugin, this is the piece of data that it receives to specify the correct post kind and create the reply context for your post and will likely preclude you from needing to send any data in the content portion (above) unless the services applet will let you send additional commentary or notes that you want to appear in the body of your post.

Next, if your site supports syndication links with a plugin like Syndication Links for WordPress, you would use the following line of code so that those are set and saved properly. (This presumes that the URL specified is the permalink of the content on the social silo. I’ll note that Pocket doesn’t provide these (easily) as most of their links are canonical ones for the original content, so I don’t use this on my IFTTT recipe for my Pocket workflow, but I do use it for others like Huffduffer and Reading.am. It conveniently allows me to find copies of my content elsewhere on the web.)

&syndication=<<<{{EntryUrl}}>>>

If you’d like to have the timestamp on your post match the time when you actually bookmarked the item in Pocket, you’ll need to add the following line of code. Without this line, the publication time will match the time of the Webhook action, which for most IFTTT things can be a delay of a minute or two up to an hour or more afterwards. In practice, I’ve noticed that most content posts to my website within about 10-15 minutes of the original, and this is based on the polling lag within IFTTT checking your triggers. (Sadly, I’ll report that I’ve never gotten this code snippet to work for me in practice, and I suspect it may be because the time format from IFTTT doesn’t match what is expected by the Micropub server on my website. Perhaps David Shanske or Ryan Barrett may have a more specific idea about what’s causing this or suggest a fix? I’ll try to dig into it shortly if I can. As a result, I generally have left this snippet of code off of my triggers and they’ve worked fine as a result. Until this issue might be fixed, if you want to have the exact timestamp, you could alternately include the data, if provided, in the content section instead and then copy it over manually after-the-fact.)

&published=<<<{{EntryPublished}}>>>

If you’ve got syndication endpoints set up properly with something like the Syndication Links plugin, you can use the following sort of code snippet. I generally eschew this and prefer to save my posts as drafts for potential modification prior to publishing publicly, but others may have different needs, so I’m including the option for relative completeness so people can experiment with it if they like.

&mp-syndicate-to[]=twitter-bridgy

This concludes the list of things that might commonly be included in the Body portion of the IFTTT applet. Tying these all together for combination in the Post Kinds Plugin one would want something along the lines of :

Body: access_token=AccessTokenHere&content=<<<{{EntryTitle}}<br> {{EntryPublished}}>>>&h=entry&category[]=Bookmark&category[]=Social%20Stream&bookmark-of=<<<{{EntryUrl}}>>>

Here’s another example of the code I use in conjunction with a similar applet for Diigo, a bookmarking service. The “Description” portion allows me to add a note or comment on the bookmark when I make it and that note is transported over to the post on my website as well.

Body: access_token=AccessTokenHere&content=<<<{{Description}}>>>&h=entry&category[]=Bookmark&category[]=Social%20Stream&category[]=<<<{{Tags}}>>>&bookmark-of=<<<{{Url}}>>>

Note that when the string of commands is done, you do not need to have a trailing ampersand. Most of the examples I’ve used are from the Pocket set up within IFTTT, but keep in mind that other services on the platform may use alternate variable names (the portion in the braces {{}}). The differences may be subtle, but they are important so be careful not to use {{EntryTitle}} if your specific recipe expects {{Title}}.

To finish off making your new applet, click on the “Create Action” button. (If necessary, you can test the applet and come back to modify it later.)

Finally, give your applet an appropriate tile and click the “Finish” button. For my Pocket applet I’ve used the name “Pocket bookmark PESOS Micropub to WordPress”.

Screencapture of the Review and Finish page on IFTTT

Now that your applet is finished, give it a whirl and see if it works the way you expect! Don’t feel discouraged if you run into issues, but try experimenting a bit to see if you can get the results you’d like to see on your website. You can always go back to your applet recipe and modify it if necessary.

Conclusion

Hopefully everyone has as much fun as I’ve had using this workflow to post to their websites. It may take some patience and experimentation to get things the way you’d like to have them, but you’re likely to be able to post more easily in the future. This will also let you own your data as you create it while still interacting with your friends and colleagues online.

I know that it may be possible to use other services like Zapier, Integromat, Automate.io, or other similar services instead of IFTTT though some of these may require paid accounts. I’d love to see what sorts of things people come up with for using this method for owning their own data. Can you think of other services that provide webhooks for potential use in combination with Micropub? (Incidentally, if this is your first foray into the Micropub space, be sure to check out the wealth of free Micropub clients you can use to publish directly to your website without all of the set up and code I’ve outlined above!)

Currently I’m using similar workflows to own my data from social services including Pocket, Diigo, Huffduffer, Reading.am, YouTube, Meetup/Google Calendar, and Hypothes.is. I’ve got several more planned shortly as well.

Thanks once again to Charlotte Allen and subsequently Jan-Lukas Else for the idea of using Micropub this way. Their initial documentation was invaluable to me and others are sure to find it useful. Charlotte has some examples for use with Facebook and Instagram and Jan-Lukas’ example may be especially helpful for those not using WordPress-specific solutions.

And as always, a big thank you to the entire IndieWeb community for continuing to hack away at making the web such a fun and vibrant space by making the small building blocks that make all of the above and so much more possible.

Liked a tweet by ReadwiseReadwise (Twitter)
For quite a while I’ve had an upcoming events widget in the sidebar of my website. It was a simple HTML widget that was maintained by hand, but I’d been getting tired of updating it. To keep things a bit more DRY (aka don’t repeat yourself), I’m using the JetPack Upcoming Events widget now that pulls in iCal feed data from a special shared Google Calendar where I put my public events. This way I can put things in my calendar and my website will automatically update within an hour or two. Hooray for the little wins.

I’ll agree: Passive Tracking > Active Tracking

It’s always nice if you can provide real-time active tracking and posting on your own website, but is it really necessary? Is it always worthwhile? What value does it provide to you? to others?

The other day I read Eddie Hinkle’s article Passive Tracking > Active Tracking in which he details how he either actively or passively tracks on his own website things he’s listening to or watching. I thought I’d take a moment to scribble out some of my thoughts and process for how and why I do what I’m doing on my own site.

I too track a lot of things relatively passively. Most of it I do for my own “diary” or commonplace book. Typically I’ll start out using silo services that have either RSS feeds or that work with services like IFTTT.com or Zapier. If those don’t exist, I’ll just use the ubiquitous “share” functionality of nearly all web pages and mobile platforms to share the content or page via email which I can use to post to my website as well. The primary minimal data points I’m looking for are the title of the specific thing I’m capturing (the movie, tv show/episode title, book title, article title, podcast title) and the date/time stamp at which the activity was done.

I’ll use these to take input data and transfer it to my own website, typically in draft form. In many cases, these methods collect all the data I want and put it into a format for immediate sharing. Other times I’ll clean up some bits of the data (almost always context related, so things like images, summaries, the source of the data, etc.) a bit before sharing. Then I optionally decide to post it either publicly or privately on my site.

Some of the sources I use for pulling in data (especially for context) to my website include:
 Watches: IMDb.com, Letterboxd, TheTVDB.com, themoviedb.org, direct websites for shows/movies themselves
 Listens: typically using share functionality via email from my podcatcher; Spotify, Last.fm,
 Reads: reading.am, Pocket, Hypothes.is, GoodReads, 
 Bookmarks: diigo, Hypothes.is, Twitter, Pocket

Often, going the route of least resistance for doing this sort of tracking is a useful thing to find out if doing so is ultimately useful or valuable to you. If it’s not, then building some massive edifice and code base for doing so may be additional sunk cost to find out that you don’t find it valuable or fulfilling somehow. This is primary value of the idea “manual until it hurts.”

I will note that though I do have the ability to do quick posting to my site using bookmarklets in conjunction with the Post Kinds Plugin for WordPress, more often than not, I find that interrupting my personal life and those around me to post this way seems a bit rude. For things like listen posts, logging them actively could a be a life threatening endeavor because I most often listen while driving. Thus I prefer to take a moment or two to more subtly mark what I want to post and then handle the rest at a more quiet and convenient time. I’ll use down time while passively watching television or listening to music to do this sort of clean up. Often, particularly for bookmarks and annotations, this also forces me to have a second bite at the proverbial apple to either follow up on the bookmarked idea or think about and reflect on the thing I’ve saved. In some sense this follow up is way more valuable to me than having actively posted it and then simply moving on. It also becomes a way for what might otherwise be considered “digital exhaust” to give me some additional value.

Eventually having better active ways to track and post these things in real time would be nice, but the marginal additional value just hasn’t seemed to be there for me. If it were, there are also larger hurdles of doing these posts quickly and in a way that pulls in the context portions I’d like to present. Adding context also generally means having solid pre-existing data bases of information from which to poll from, and often these can be difficult to come by or require API access to something. As a result services like Swarm and OwnYourSwarm are useful as they can not only speed up the process of logging data, but they are underpinned with relatively solid databases. As an example, I frequently can’t use IMDB.com to log in television shows like Meet the Press or Face the Nation because entries and data for those particular episodes often don’t exist even when I’m watching them several hours after they’ve aired. And even in these cases the websites for these shows often don’t yet have photos, synopses, video, or transcripts posted when I’m watching them. Thus posting for these in real-time the way I’d like becomes a much more difficult nightmare and requires a lot more manual effort.

Update:

As a follow up to Eddie’s post (which doesn’t yet show the Webmention), I’ll also point out that Jonathan has an excellent description and some code for what he’s doing on his site as well.

👓 Just do it — by hand | Jeremy Cherfas

Read Just do it -- by hand by Jeremy Cherfas (Jeremy Cherfas)
So when I do syndicate out to a silo, I do it by hand. Sure it would be tedious if I wanted to do that for every little thing, but I don't. I share the things I want to share, in the way I want to share them.
I’ve noticed that I typically syndicate almost everything manually despite the fact that I’ve got the ability to do it automatically. Doing it manually actually gives me a greater feeling of ownership somehow.

I do miss the ability to have public comments coming back however…

Reply to Brad Enslen about The Future of Blog Snoop

Replied to Memo: Announcement: The Future of Blog Snoop Blog Directory by Brad EnslenBrad Enslen (Brad Enslen)
I’m hitting a fork in the road with this site and the experiment of using a blog as a directory of blogs.  The problem here is me: I’m running out of time.  I’m duplicating a lot … Source: Announcement: The Future of Blog Snoop – Blog Snoop Weblog Directory We’ll see what happens.  It...
Brad, much like Kicks Condor, I think you’re making a laudable effort, and one of the ways our work grows is to both keep up with it and experiment around.

If I recall, programming wasn’t necessarily your strong suit, but like many in the IndieWeb will say: “Manual until it hurts!” By doing things manually, you’ll more easily figure out what might work and what might not, and then when you’ve found the thing that does, then you spend some time programming it to automate the whole thing to make it easier. It’s quite similar to designing a college campus: let the students walk around naturally for a bit then pave the natural walkways that they’ve created. This means you won’t have both the nicely grided and unused sidewalks in addition to the ugly grass-less beaten paths. It’s also the broader generalization of paving the cow paths.

In addition to my Following page I’ve also been doing some experimenting with following posts using the Post Kinds Plugin. It is definitely a lot more manual than I’d like it to be. It does help to have made a bookmarklet to more quickly create follow posts, but until I’ve got it to a place that I really want it, it’s not (yet) worth automating taking the data from those follow posts to dump them into my Follow page for output there as well. Of course the fact that my follow posts have h-entry and h-feed mark up means that someone might also decide to build a parser that will extract my posts into a feed which could then be plugged into something else like a microsub-based reader so that I could make a follow post on my own site and the source is automatically added to my subscription list in my reader automatically.

In addition to Kicks Condor, I’me seeing others start to kick the tires of these things as well. David Shanske recently wrote Brainstorming on Implementing Vouch, Following, and Blogrolls, but I think he’s got a lot more going on in his thinking than he’s indicated in his post which barely scratches the surface.

I also still often think back to a post from Dave Winer in 2016: Are you ready to share your OPML? This too has some experimental discovery features that only scratch the surface of the adjacent possible.

And of course just yesterday, Kevin Marks (previously of Technorati) reminded us about rel=”directory” which could have some interesting implications for discovery and following. Think for a bit of how one might build a decentralized Technorati or something along the lines of Ryan Barrett’s indie map.

As things continue to grow, I’m seeing some of all of our decisions and experiments begin to effect others as these are all functionality and discovery mechanisms that we’ll all need in the very near future. I hope you’ll continue to experiment and make cow paths that can eventually be paved.

Featured Image: Cows on the path flickr photo by Reading Tom shared under a Creative Commons (BY) license

👓 Paving the cowpaths: using architecture concepts to improve online user experience | Elezea

Read Paving the cowpaths: using architecture concepts to improve online user experience by Rian Van Der MerweRian Van Der Merwe (Elezea)
In architecture desire lines or cowpaths describe well-worn paths that appear in a landscape over time. I discuss how this relates to web design.
This is interesting/relevant to the idea of “manual until it hurts”. I particularly like the twist idea at the end of looking at activity after-the-fact and then paving over those methods rather than starting at free range and then paving.

Some thoughts on highlights and marginalia with examples

Earlier today I created a read post with some highlights and marginalia related to a post by Ian O’Bryne. In addition to posting it and the data for my own purposes, I’m also did it as a manual test of sorts, particularly since it seemed apropos in reply to Ian’s particular post. I thought I’d take a stab at continuing to refine my work at owning and controlling my own highlights, notes, and annotations on the web. I suspect that being able to better support this will also help to bring more self-publishing and its benefits to the halls of academe.

At present I’m relying on a PESOS solution to post on another site and syndicate a copy back to my own site. I’ve used Hypothesis, in large part for their fantastic UI and as well for the data transfer portion (via RSS and even API options), to own the highlights and marginalia I’ve made on the original on Ian’s site. Since he’s syndicated a copy of his original to Medium.com, I suppose I could syndicate copies of my data there as well, but I’m saving myself the additional manual pain for the moment.

Rather than send a dozen+ webmentions to Ian, I’ve bundling everything up in one post. He’ll receive it and it would default to display as a read post though I suspect he may switch it to a reply post for display on his own site. For his own use case, as inferred from his discussion about self-publishing and peer-review within the academy, it might be more useful for him to have received the dozen webmentions. I’m half tempted to have done all the annotations as stand alone posts (much the way they were done within Hypothesis as I read) and use some sort of custom microformats mark up for the highlights and annotations (something along the lines of u-highlight-of and u-annotation-of). At present however, I’ve got some UI concerns about doing so.

One problem is that, on my site, I’d be adding 14 different individual posts, which are all related to one particular piece of external content. Some would be standard replies while others would be highlights and the remainder annotations. Unless there’s some particular reason to do so, compiling them into one post on my site seems to be the most logical thing to do from my perspective and that of my potential readers. I’ll note that I would distinguish annotations as being similar to comments/replies, but semantically they’re meant more for my sake than for the receiving site’s sake. It might be beneficial for the receiving site to accept and display them (preferably in-line) though I could see sites defaulting to considering them vanilla mentions as a fallback.  Perhaps there’s a better way of marking everything up so that my site can bundle the related details into a single post, but still allow the receiving site to log the 14 different reactions and display them appropriately? One needs to not only think about how one’s own site looks, but potentially how others might like to receive the data to display it appropriately on their sites if they’d like as well. As an example, I hope Ian edits out my annotations of his typos if he chooses to display my read post as a comment.

One might take some clues from Hypothesis which has multiple views for their highlights and marginalia. They have a standalone view for each individual highlight/annotation with its own tag structure. They’ve also got views that target highlights/annotation in situ. While looking at an original document, one can easily scroll up and down through the entire page’s highlights and annotations. One piece of functionality I do wish they would make easier is to filter out a view of just my annotations on the particular page (and give it a URL), or provide an easier way to conglomerate just my annotations. To accomplish a bit of this I’ll typically create a custom tag for a particular page so that I can use Hypothesis’ search functionality to display them all on one page with a single URL. Sadly this isn’t perfect because it could be gamed from the outside–something which might be done in a classroom setting using open annotations rather than having a particular group for annotating. I’ll also note in passing that Hypothesis provides RSS and Atom feeds in a variety of ways so that one could quickly utilize services like IFTTT.com or Zapier to save all of their personal highlights and annotations to their website. I suspect I’ll get around to documenting this in the near future for those interested in the specifics.

Another reservation is that there currently isn’t yet a simple or standard way of marking up highlights or marginalia, much less displaying them specifically within the WordPress ecosystem. As I don’t believe Ian’s site is currently as fragmentions friendly as mine, I’m using links on the date/time stamp for each highlight/annotation which uses Hypothesis’ internal functionality to open a copy of the annotated page and automatically scroll down to the fragment as mentioned before. I could potentially see people choosing to either facepile highlights and/or marginalia, wanting to display them in-line within their text, or possibly display them as standalone comments in their comments section. I could also see people wanting to be able to choose between these options based on the particular portions or potentially senders. Some of my own notes are really set up as replies, but the CSS I’m using physically adds the word “Annotation”–I’ll have to remedy this in a future version.

The other benefit of these date/time stamped Hypothesis links is that I can mark them up with the microformat u-syndication class for the future as well. Perhaps someone might implement backfeed of comments until and unless Hypothesis implements webmentions? For fun, some of my annotations on Hypothesis also have links back to my copy as well. In any case, there are links on both copies pointing at each other, so one can switch from one to the other.

I could imagine a world in which it would be nice if I could use a service like Hypothesis as a micropub client and compose my highlights/marginalia there and micropub it to my own site, which then in turn sends webmentions to the marked up site. This could be a potential godsend to researchers/academics using Hypothesis to aggregate their research into their own personal online (potentially open) notebooks. In addition to adding bookmark functionality, I could see some of these be killer features in the Omnibear browser extension, Quill, or similar micropub clients.

I could also see a use-case for adding highlight and annotation kinds to the Post Kinds plugin for accomplishing some of this. In particular it would be nice to have a quick and easy user interface for creating these types of content (especially via bookmarklet), though again this path also relies on doing individual posts instead of a single post or potentially a collection of posts. A side benefit would be in having individual tags for each highlight or marginal note, which is something Hypothesis provides. Of course let’s not forget the quote post kind already exists, though I’ll have to think through the implications of that versus a slightly different semantic version of the two, at least in the ways I would potentially use them. I’ll note that some blogs (Colin Walker and Eddie Hinkle come to mind) have a front page that display today’s posts (or the n-most recent); perhaps I could leverage this to create a collection post of highlights and marginalia (keyed off of the original URL) to make collection posts that fit into my various streams of content. I’m also aware of a series plugin that David Shanske is using which aggregates content like this, though I’m not quite sure this is the right solution for the problem.

Eventually with some additional manual experimentation and though in doing this, I’ll get around to adding some pieces and additional functionality to the site. I’m still also interested in adding in some of the receipt/display functionalities I’ve seen from Kartik Prabhu which are also related to some of this discussion.

Is anyone else contemplating this sort of use case? I’m curious what your thoughts are. What other UI examples exist in the space? How would you like these kinds of reactions to look on your site?

Group Photo at IndieWebCamp Austin 2017

Friends who attended IndieWebCamp Austin today.
Photo of 14 of the IndieWebCamp Austin attendees
Friends who attended IndieWebCamp Austin today.

👤 Tom Brown (); Aaron Parecki (); David Shanske (); Tantek Çelik (); Marty McGuire (); Manton Reece ()

I wish I could have attended IndieWebCamp Austin in person today, but had a good time attending remotely! Thanks to everyone who made the remote experience so usable.

I’m also posting this in part to take a half-stab at person tagging people using homepage webmentions after the last session on post types in which Tantek mentioned tagging specifically. I can already tell this is something I wouldn’t do often without a much more automated system. #manualuntilithurts indeed!

I’ve also found a bug in Twitter in the process! Apparently I can tag people in photos there except for Tantek, who’s username is so short, it won’t populate their pull-down menu to let me add him.