Hypothes.is doesn’t have a social media-like follow functionality baked into the system, but there are a few methods to follow interesting people. My favorite, and possibly the simplest, is to add https://hypothes.is/stream.atom?user=abcxyz as a feed into my feed reader where abcxyz is the username of the person I’d like to follow.
Of course, the catch then is to find/discover interesting people to follow this way. Besides some of the usual interesting subjects like Jon Udell, Jeremy Dean, Remi Kalir, et al. Who else should I be following?
Ideally by following interesting readers, you’ll find not only good things to read for yourself, but you’ll also have a good idea which are the best parts as well as what your friends think of those parts. The fact that someone is bothering to highlight or annotate something is a very strong indicator that they’ve got some skin in the game and the article is likely worth reading.
Lurking is the quiet watching/listening that what many people of the web do in chat rooms in order to begin gauging culture, learning jargon or lingo, and other community norms or unspoken principles before diving in to interact on a more direct level with other participants.
While the word lurking can have a very negative connotation, online it often has a much more positive one, especially in regard to the health and civility of the commons. Rather than rehash what Ton has done an excellent job of doing, I won’t go into the heavy details and history of online lurking, but instead, let’s take a look at where it isn’t in today’s social media landscape.
Since 2004, Twitter and a slew of other social media has popped up on the scene and changed many of our prior behaviors concerning lurking. In particular, Twitter’s interface has made it far easier to either like/favorite a post or retweet it.
In comparison the the preceding era of the blogosphere represented by Tons’ post, Twitter has allowed people to send simple notifications back and forth about each others’ posts indicating a lower bar of interaction than writing a thoughtful and measured comment. Now instead of not knowing about dozens, hundreds, or thousands of lurkers, a (micro)blogger would more quickly know who many more of their readers were because they were liking or resharing their content. Naturally there are still many more potential lurkers who don’t interact with one’s posts this way, but these interactions in some way are like adding fuel to the fire and prompt the writer to continue posting because they’re getting some feedback that indicates they’ve got an audience. Twitter has dramatically lowered the bar for lurkers and made it more socially acceptable for them to make themselves known.
Of course, not all is rosy and happy in Twitterland as a result of this lowering the social bar. Because it’s so easy to follow almost anyone and interact with them, naturally everyone does. This means that while before one may have lurked a blog for weeks or months before posting a response of any sort, people are now regularly replying to complete strangers without an resistance whatsoever. While this can be valuable and helpful in many instances, oftentimes it comes off as rudely as if one butted into the private conversation of strangers at a public gathering. At the farther end of the spectrum, it’s also much easier for trolls to tag and target unsuspecting victims. As a result, we have the dumpster fire that Twitter has become in the past several years for many of its users.
The problem for the continued health of the commons is how can we maintain a bar for online lurking, but still provide some feedback? How can we keep people from shouting and yelling at passer-by from their proverbial front porches or vice-versa? How might we encourage more positive lurking online before directly jumping into a conversation?
Read Posts and Private Posts
For several years now, as a part of the IndieWeb movement, I’ve been more directly controlling my online identity and owning my content by using my own domain name and my own website (boffosocko.com). While I still use Twitter, I’m generally only reading content from it via a feed reader. When I post to or interact with it, I’m always publishing my content on my own website first and syndicating a copy to Twitter for those who don’t own their online identities or content and (sadly) rely on Twitter to do that for them.
Within this setting, since roughly late 2016, I’ve been posting almost all of what I read online or in books, magazines, or newspapers on my own website. These read posts include some context and are often simply composed of the title of the article, the author, the outlet, a summary/synopsis/or first paragraph or two to remind me what the piece was about, and occasionally a comment or two or ten I had on the piece.
In tandem with these posts, I’m also sending webmentions to the websites of those pieces. These (experimental) read webmentions are simply notifications to the originating site that I’ve read their piece. In our prior framing of lurking or Twitter, I’m sending them the simplest notification I can think of to say, “I’m here lurking. I’m reading or looking at your work.”
I’m not saying that I liked it, favorited it, disliked it, bookmarked it, commented on it, or anything else, but simply that I read it, I consumed it, I spent the time to interact with it. But in contrast with Ton’s older method of looking at server logs to see what kind of traffic his posts are getting, he can see exactly who I am and visit my website in return if he chooses. (Ton’s old method of sifting through those logs was certainly not a fun experience and the data was usually relatively anonymous and useless.) These newer read notifications could potentially give him a much richer idea of who his (lurking) audience actually is. Then when someone shows up with a comment or reply, it’s not completely from out of the dark: they’ve previously indicated that they’re at least somewhat aware of the context of a potentially broader conversation on his site.
These read notifications are semantically different from likes, favorites, or even bookmarks on other platforms. In fact many platforms like Twitter, which has moved from “stars” (with the semantic idea of a favorite) to “hearts” (with the semantic idea of a like), have so few indicators of reaction to a post that the actual meaning of them has been desperately blurred. Personally I’ll use Twitter’s like functionality variously to mean: “I’m bookmarking this (or the linked article within it) for reading later”, “I like this post”, “I’ve read this post”, or even “I’m acknowledging receipt of your reply to me”. That’s just too much meaning to pack into a silly little heart icon.
If they choose, some website owners display these read post notifications in one or more ways. Some sites like Aaron Parecki’s or Jeremy Keith’s will show my interactions as bookmarks. Others, primarily WordPress-based websites that support Webmention (via plugin), will actually show these interactions in their comment sections under the heading “Read” and display my photo/avatar as an indicator that I’ve interacted with that post. In the case of read posts on which I’ve written one or more comments, the receiving site also has the option of showing my interaction not as a read/bookmark intent, but could also show my comments as a reply to their post. I’ve written a bit about this and its potential for large news outlets before in Webmentions: Enabling Better Communication on the Internetfor A List Apart. There are also some older legacy sites that might show my interactions as a trackback or pingback, but these seem few and far between these days, particularly as those systems are major targets for spam and the Webmention protocol has a richer interaction/display model.
A new itch
But as I think about these read posts, lurking, and being more civil on the internet, I have a new itch for some functionality I’d like to add to my website. I very frequently use my website as a digital commonplace book to collect links of things I’ve read, watched, and listened to. I’ll collect quotes, highlights, and even my own marginalia. As I mentioned above, my read posts sometimes have comments, and quite often those comments are really meant just for me and not for the author of the original post. In many cases, when my comments may be too egregious, sensitive, or perhaps even insulting to the original author, I’ll make these posts private so that only I can see them on my site. Of course when they’re private, no notifications are sent to the site at the other end of the line.
Sometimes I would like to be able to send a read notification to the site, but also keep my commentary privately to myself. This allows me to have my notes on the piece and be highly critical without dragging down the original author or piece who I may not know well or the audience of that same piece which I haven’t properly lurked (in the positive community-based sense indicated above) to be as intelligently and sensitively commenting as I would otherwise like. Thus I’d like to build in some functionality so that I can publicly indicate I’ve read a piece (and send a notification), but also so that I can keep the commentary on my read private to either myself or a smaller audience.
I suspect that I can do this in a variety of meta-fields on my website which aren’t shown to the public, but which might be shown to either myself or logged in users. In some sense, this is a subset of functionality which many in the IndieWeb have been exploring recently around the ideas of private posts or by limiting the audience of a post. In my case, I’m actually looking at making a post public, but making smaller sub-portions of it private.
To begin with, I’ll most likely be looking at doing this at a small scale just for myself and my commonplace book, as I can definitely see second and third-order effects and a variety of context collapse issues when portions of posts are private, but others who may be privy to them are commenting on those pieces from the perspective of their public spheres which may not be as private or closed off as mine. i.e.: While I may have something marked as private, privy readers will always have the option of copy/pasting it and dragging it out into the public.
I’ve been posting “read” posts/notes/links–reads, for simplicity– to my own website for a while to indicate articles and material which I’ve spent the time to read online (and oftentimes even offline). While I automatically send notifications (via webmentions or trackbacks/pingbacks) to notify the original articles, few sites know how to receive them and even less actively display them.
It’s only in the last few weeks that my site has actively begun receiving these read posts, and I have to say it’s a really lovely and heartwarming experience. While my site gets several hundreds of hits per day, and even comments, likes and other interactions, there’s just something additionally comforting in knowing that someone took the time to read some of my material and posted that fact to their own website as a reminder to themselves as well as a signal to others.
Mentally there’s a much larger value in receiving these than likes or tweets with links from Twitter, in part because there’s a larger indicator of “work” behind these signals. They’re not simply an indicator that “I saw the headline of this thing somewhere and shared it because the friction of doing so was ridiculously low”, but they represent a lot of additional time, effort, and energy and thus are a stronger and more valuable signal (both to me and hopefully to others.)
I suppose I’ll eventually need to preface that these are especially interesting to me now when I’m only getting small numbers of them from particular people who I know are deeply engaging with specific portions of my past work. I can also imagine a day when these too may become spam-like, and I (or others) are inundated with them. But for now I’ll just revel in their joyous, little warmth.
It’s interesting from my website’s administrative interface to see the path individuals are taking through my thoughts and which topics they may find interesting. I don’t think that many (any?) social media silos provide these types of views which may actually help to spark future conversations based on our shared interests.
Of course I must also admit that, as nice as these read notifications have been, they actually pale in comparison to the rest of the work that the particular sender has been doing in replicating large portions of the sorts of things I’m doing on and with my website. I hope all of our work, experimenting, and writing is infectious and will help others out in the future.
Well, that was weird.
Something had gone wrong with my little PHP script for adding items from my list at reading.am to my WithKnown-powered stream. It ran, reported no errors, and yet produced nothing at the other end. Gorgeous Saturday morning, blue skies and sunshine; what better way to spend it than indoors debugging?
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.
I follow a few people who do this too, sometimes pretty publicly. I’m not sure that I’d want to share everything I consume, but I do like the thought of capturing, and aggregating everything.
I’m just not too sure how to pull it all together, if I were to do this.
There are a few parts to having a media diet:
1. keeping track of it all quickly and easily;
2. going back to contemplate on it and deciding what may have been worthwhile or not; and
3. using the above to improve upon your future media diet instead of consuming the same junk food in the future.
I try to use my own website (cum digital commonplace book) to collect everything quickly using bookmarklets from the Post Kinds plugin or RSS feeds from popular media-related websites (GoodReads, Letterboxd, reading.am, etc.) in conjunction with IFTTT.com recipes to create private posts on my site’s back end. Naturally, not all of my posts are public since many are simply for my own reflection and edification. Usually logging the actions only takes a few seconds. Longer reviews and thoughts typically only take a few minutes if I choose to do so.
The hardest part may be going through it all on a weekly, monthly, or annual basis to do some analysis and make the appropriate adjustments for the future. (Isn’t it always sticking with the adjustments that make it a “diet”?) Fortunately having all the data in one centralized place does make some of this work a lot easier.
Having lists of what I read online has definitely helped me cut out all click-baity articles and listicles from my information diet. It’s also helped me cut down on using social media mindlessly when I think about the great things I could be reading or consuming instead. Bad national news has also spurred me to read more local news this year as well. Those interested in some of these ideas may appreciate Clay A. Johnson’s The Information Diet: A Case for Conscious Comsumption, which I read several years back.
I experimented with eating and drinking posts early last year too, and the nature of posting them publicly was somewhat useful in losing about 10 pounds, but the work in doing it all did seem a bit much since I didn’t have as easily an automated system for doing it as I might have liked. Now I do most of these posts privately. Definitely having the ability to look back at the ton of crap I’ve eaten in the past week or month does help with trying to be a bit healthier in my choices. I look at posting photos of my food/drink to my own site somewhat akin to dietitians who tell people to use a clean plate for every meal they have–the extra work, process, and clean up makes it more apparent what you’re doing to yourself.
As I’ve written before about posting what I’m listening to, showing others that you’ve spent the time to actually listen to it and post about it on your own site (even with no commentary), is a great way to show that you’ve got “skin-in-the-game” when it comes to making recommendations. Kottke’s awesome recommendation about listening to the Seeing White Podcast has way more value if he could point to having spent the multiple hours listening to and contemplating it, the way I have. The situation is akin to that headline and link my friend just put on Twitter, but did she think the headline was cool or did she actually read the entire thing and wanted to recommend her followers also read it? Who can tell without some differentiation?
Lastly, I keep a “following page” of people and feeds I’m following on a regular basis. Put into broad categories, it makes an easy method for periodically pruning out that portion of my media diet using OPML subscriptions in my feed reader.
In the end, what you feed your body, as well as what you feed your brain, are important things to at least keep in the back of your mind.
I’ll have to work at getting better to create my own end-of-year statistics since my own website has a better accounting of what I’ve actually read (it isn’t all public) and bookmarked. I do like that their service does some aggregate comparison of my data versus all the other user data (anonymized from my perspective).
Pocket also does a relatively good job of doing discovery of good things to read based on aggregate user data in terms of categories like “Best of” and “Popular”. They also give me weekly email updates of things I’ve bookmarked there as reminders to go back and read them, which I find a useful functionality which they haven’t over-gamified. Presently my own closest functionality to this is to be subscribed to the RSS feed of my own public bookmarks in a feed reader (which I find generally useful) as well as regularly checking on my private bookmarks on my websites’s back end (something as easy as clicking on a browser bookmark) and even looking at my “on this day” functionality to review over things from years past.
I’ll note that I currently rely more on Nuzzle for real-time discovery on a daily basis however.
Greg McVerry might appreciate that they’re gamifying reading by presenting me with a badge.
As an aside while I’m thinking of it, it might be a cool thing if the IndieWeb wiki received webmentions, so that self-documentation I do on my own website automatically appeared on the appropriate linked pages either in a webmention section or perhaps the “See Also” section. If wikis did this generally, it would be a cool means of potentially building communities and fuelling discovery on the broader web. Imagine if adding to a wiki via Webmention were as easy as syndicating content to a site like IndieNews or IndieWeb.XYZ? It could also function as a useful method of archiving web content from original pages to places like the Internet Archive in a simple way, much like how I currently auto-archive my individual pages automatically on the day they’re published.
“It touches me that some people have been reading my blog for over a decade.” https://dri.es/forty I've been thinking about that since. It would be nice to know who is subscribed to your blog so you can build a relationship. #indieweb@davewiner
Happy birthday Dries! If I may, can I outline a potential web-based birthday present based on your wish?
With relation to your desire to know who’s subscribed and potentially reading your posts, I think there are a number of ways forward, and even better, ways that are within easy immediate reach using Drupal as well as many other CMSes using some simple web standards.
Not mentioned in that article for brevity is the ability to send notifications via Webmention when one makes follow or subscription posts.
As an example, I’ve created a follow post for you for which my site would have sent a Webmention. Unfortunately at the time, your site didn’t support receiving it, so you would have missed out on it unless you support older legacy specs like pingback, trackback, or refback.
I also created a larger related Following page of people and sites I’m subscribed to which also lists you, so you would have received another notification from it if you supported Webmention.
I’m unaware of anyone actually displaying these notifications on their website (yet!), though I’ve got some infrastructure on my own site to create a “Followed by” page which will store and show these follows or subscriptions. At present, they’re simply stored in my back end.
Heh – that’s funny – @lizzjoy and I were just saying we need to find a way of knowing who is reading the Drupal community and association blogrolls…
As for Rachel’s request, this too is also possible with “read” webmentions. I maintain a specific linkblog feed (RSS) with all of the online material I read. All of those posts send notifications to the linked sites. While it’s not widely supported by other platforms yet, there are a few which do, so that online publications can better delineate and display the difference between likes, bookmarks, reads, etc. There’s at least one online newspaper among 800+WordPress websites which support this functionality. I suspect that with swentel’s Drupal module and some code for supporting the proper microformats, this is a quick reality in the Drupal space as well. Because the functionality is built on basic web standards, it’s possible for any CMS to support them. All that’s left is to ramp up adoption.
I know the Like icon doesn’t show up in your feed reader (maybe that can change)
Interestingly, swentel’s module also supports Microsub, so that reader clients will allow one to like (bookmark, or reply to) posts directly within readers which will then send Micropub requests to one’s website to post them as well as to potentially send Webmention notifications. These pieces help to close the circle of posting, reading, and easily interacting on the open web the way closed silos like Facebook, Twitter, et al. allow.
I mention it because I was specifically intrigued by a small piece of excellent user interface and social graph data that Reading.am unearths for me. I’m including a quick screen capture to better illustrate the point. While the UI allows me to click yes/no (i.e. did I like it or not) or even share it to other networks, the thing I found most interesting was that it lists the other people using the service who have read the article as well. In this case it told me that my friend Jeremy Cherfas had read the article.1
The tougher follow up is: how could we create a decentralized method of doing this sort of workflow in a more IndieWeb way? It would be nice if my read posts on my site (and those of others) could be overlain on websites via a bookmarklet or other means as a social layer to create engaged discussion. Better would have been the ability to quickly surface his commentary, if any, on the piece as well–functionality which I think Reading.am also does, though I rarely ever see it. In some sense I would have come across Jeremy’s read post in his feed later this weekend, but it doesn’t provide the immediacy that this method did. I’ll also admit that I prefer having found out about his reading it only after I’d read it myself, but having his and others’ recommendations on a piece (by their explicit read posts) is a useful and worthwhile piece of data, particularly for pieces I might have otherwise passed over.
In some sense, some of this functionality isn’t too different from that provided by Hypothes.is, though that is hidden away within another browser extension layer and requires not only direct examination, but scanning for those whose identities I might recognize because Hypothes.is doesn’t have a specific following/follower social model to make my friends and colleagues a part of my social graph in that instance. The nice part of Hypothes.is’ browser extension is that it does add a small visual indicator to show that others have in fact read/annotated a particular site using the service.
I’ve also previously documented on the IndieWeb wiki how WordPress.com (and WordPress.org with JetPack functionality) facepiles likes on content (typically underneath the content itself). This method doesn’t take things as far as the Reading.am case because it only shows a small fraction of the data, is much less useful, and is far less likely to unearth those in your social graph to make it useful to you, the reader.
I seem to recall that Facebook has some similar functionality that is dependent upon how (and if) the publisher embeds Facebook into their site. I don’t think I’ve seen this sort of interface built into another service this way and certainly not front and center the way that Reading.am does it.
The closest thing I can think of to this type of functionality in the analog world was in my childhood when library card slips in books had the names of prior patrons on them when you signed your own name when checking out a book, though this also had the large world problem that WordPress likes have in that one typically wouldn’t have know many of the names of prior patrons necessarily. I suspect that the Robert Bork privacy incident along with the evolution of library databases and bar codes have caused this older system to disappear.
This general idea might make an interesting topic to explore at an upcoming IndieWebCamp if not before. The question is: how to add in the social graph aspect of reading to uncover this data? I’m also curious how it might or might not be worked into a feed reader or into microsub related technologies as well. Microsub clients or related browser extensions might make a great place to add this functionality as they would have the data about whom you’re already following (aka your social graph data) as well as access to their read/like/favorite posts. I know that some users have reported consuming feeds of friends’ reads, likes, favorites, and bookmarks as potential recommendations of things they might be interested in reading as well, so perhaps this would be an additional extension of that as well?
 I’ve certainly seen this functionality before, but most often the other readers are people I don’t know or know that well because the service isn’t huge and I’m not using it to follow a large number of other people.
 I knew he was generally interested already as I happen to be following this particular site at his prior recommendation, but the idea still illustrates the broader point.
The battle against the uncivil comments section is also a battle against high bounce rates for reallyread.it.
This is an intriguing little company. I could see this being some great opening infrastructure for creating read posts.
On my own website I’ve got a relative heirarchy of bookmarks, likes, reads, replies, follows, and favorites. (A read post indicates that I’ve actually read an entire piece–something I wish more websites and social platforms supported in lieu of allowing people to link or retweet content they haven’t personally vetted.) Because I’m posting this content on my personal site and it’s visible to others as part of my broader online identity I take it far more seriously than if I were tossing any old comment into an empty box on someone else’s website. To some extend this is the type of value that embedded comments sections for Facebook tries to enforce–because a commenter is posting using an identity that their friends, family, and community can see, there’s a higher likelihood that they’ll adhere to the social contract and be civil. I suspect that the Nieman Lab is using Disqus so that commenters are similarly tied to some sort of social identity, though in a world with easy-to-create-throw-away social accounts perhaps even this may not be enough.
While there’s a lot to be said about the technology and research that could be done with such a tool as outlined in the article, I think that it also ought to be bundled with people needing to use some part of their online social identities which they’re “stuck to” in some sense.
The best model I’ve seen for this in the web space is for journalism sites to support the W3C’s recommended Webmention specification. They post and host their content as always, but they farm out their comment sections to others by being able to receive webmentions. Readers will need to write their comments on their own websites or in other areas of the social web and then send webmentions back to the outlet which can then moderate and display them as part of the open discourse. While I have a traditional “old school” commenting block on my website, the replies and reactions I get to my content are so much richer when they’re sent via webmention from people posting on their own sites.
I’ve also recently been experimenting with some small outlets in allowing them to receive webmentions. They can display a wider range of reactions to their content including bookmarks, likes, favorites, reads, and even traditional comments. Because webmentions are two-way links they’re audit-able and provide a better monolithic means of “social proof” relating to an article than the dozens of social widgets with disjointed UI that most outlets are currently using.
I’m pleased to announce a new project I have been working on. indiebookclub is an app for keeping track of the books you are reading or want to read. It is primarily intended to help you own your data by posting directly to your own site with Micropub. If your site does not support Micropub yet, y...
This portends some awesome things to come. Can’t wait to get this working and see what pieces come along with it later. This is going to make it much easier to leave silos like GoodReads.com.
Syndicated copies to:
Testing out a new (secret) micropub client for read posts. It’s got way more functionality than I though it would have to start and has a stunning and clean UI. There are some smart choices all around and it’s naturally got some fantastic semantic markup hiding behind the curtains.
Even without the micropub portion it makes a fantastic microblog for those who are into reading.
More details later as I try to get all the moving pieces working properly.
The Post Kinds plugin, essentially an extended version of WordPress’s core Post Formats functionality, allows one to make a variety of types of posts on one’s website that mirrors the functionality provided in a huge variety of social media platforms. This is useful if you’re owning all of your own data and syndicating it out to social silos, but it’s also great for providing others better user interface for reading and consuming what you’re posting.
I’ve documented and written about it quite a bit in the past and am obviously a big fan. In addition to most of the default post types (notes, favorites, likes, bookmarks, reads, listens, etc.), my personal site also supports follows, eat, drink, wishes, acquisitions, exercise, and chickens! Wait a second… CHICKENS?!?
One of the nice benefits of the plugin is that it’s fantastically modular and extensible. As an exercise a few months back I thought I would take a shot at adding chicken post support to my website. Several years ago in the IndieWeb, partly as an educational exercise and partly for fun, several people thought it would be nice to add a post type of “chicken” to their sites. What would it look like? What would it entail? How might it evolve? Since then interest in chicken related posts has naturally waned, but it does bring up some interesting ideas about potential new pieces of functionality that one might want to have on their personal websites.
While I currently support many post types, I’ve discovered recently that I have a variety of notes and checkins that relate to items I’ve purchased or acquired. I thought it might be worthwhile to better keep track on my own website of things I acquired in a more explicit way to make posting them and searching for them a lot easier. But how could I do this myself and potentially contribute it back to a broader base of other users? I started with a bit of research on how others have done this in the past and tried to document a lot of it on the Indieweb wiki. I eventually asked David Shanske to reserve the idea of acquisitions within the Post Kinds plugin, which he did, but I wondered how I might have done some of that work myself.
So below, as an example, I thought I’d write up how I’ve managed to add Chicken posts to my website. To a great extent, I’m using data fields and pieces already built into the main plugin, but in doing this and experimenting around a bit I thought I could continue to refine chicken posts until they did what I wanted, after which, I could do a pull request to the main plugin and add support for others who might want it. Hopefully the code below will give people a better idea about how the internals of the plugin work so that if they want to add their own pieces to their sites or contribute back to the plugin, things might be a tad easier.
Pieces for a new Post Kind in WordPress
Adding a new Post Kind primarily consists of three broad pieces which I’ll address below. The modularity of the plugin makes adding most of the internals for a new kind far simpler than one might imagine.
Adding Taxonomy Support
New kinds in general will require a small handful of properties which include:
a name (as well as its singular, plural, and verb forms);
a format, so that the plugin can map the new post kind to a particular Post Format type within WordPress core so that themes which use these can be properly set when needed. Format options include: aside, image, video, quote, link, gallery, status, audio, and chat. Some post kinds may not have an obvious mapping, in which case the value can be left as empty;
a generic description for display within the admin user interface as well as for the archive pages for the type which are auto-generated;
a description-url, typically this is a link to the IndieWeb wiki that has examples and details for the particular post kind. If there isn’t one, you could easily create it and self-document your new use case. It could even be empty if necessary;
A show setting with a value of true or false to tell the plugin to default to showing the kind in the Post Kinds “Kinds” metabox so that the new kind will show up and be choose-able from within the interface when creating new posts.
Code to include these pieces of data will need to be added to the /includes/class-kind-taxonomy.php folder/file path within the plugin so that the plugin knows where it needs to be found.
As an example, here’s what the code looks like for the bookmark kind:
'bookmark' => array(
'singular_name' => __( 'Bookmark', 'indieweb-post-kinds' ), // Name for one instance of the kind
'name' => __( 'Bookmarks', 'indieweb-post-kinds' ), // General name for the kind plural
'verb' => __( 'Bookmarked', 'indieweb-post-kinds' ), // The string for the verb or action (liked this)
'property' => 'bookmark-of', // microformats 2 property
'format' => 'link', // Post Format that maps to this
'description' => __( 'storing a link/bookmark for personal use or sharing with others', 'indieweb-post-kinds' ),
'description-url' => 'http://indieweb.org/bookmark',
'show' => true, // Show in Settings
For direct comparison, and as an explicit example for my chicken post kind, here’s the block of code I inserted within the class-kind-taxonomy.php file immediately below the section for the acquisition type:
'chicken' => array(
'singular_name' => __( 'Chicken', 'indieweb-post-kinds' ), // Name for one instance of the kind
'name' => __( 'Chickens', 'indieweb-post-kinds' ), // General name for the kind plural
'verb' => __( 'Chickened', 'indieweb-post-kinds' ), // The string for the verb or action (liked this)
'property' => 'chicken-of', // microformats 2 property
'format' => 'image', // Post Format that maps to this
'description' => __( 'Owning all the chickens. Welcome to my chicken feed.', 'indieweb-post-kinds' ),
'description-url' => 'https://indieweb.org/chicken',
'show' => true, // Show in Settings
You’ll probably notice that beyond the simple cut and paste, I haven’t really changed much. Syntax aside, most of these pieces are relatively obvious and very straightforward, but I’ll add some commentary about a few parts and what they do which may not be as obvious to the beginner. When creating your own you can copy and paste this same block into the code at the bottom of the list of other types, but you’ll want to change only the data that appears within the single quotes on each of the nine lines for the various settings.
For those not familiar with microformats you may be asking yourself what snippet to add for the property setting. The best bet is to take a look at the microformats wiki or look for possible examples of people doing the same type of post you’re doing and copy their recommended microformat. For extremely new and likely experimental edge cases, chances are that you’ll need to choose your own experimental microformat name. In these instances you can use prior microformats as examples and potentially follow the format. In my case I knew about the bookmark-of, like-of, favorite-of, and the experimental read-of, listen-of, and watch-of microformats, so I followed the pattern and chose chicken-of for my experimental chicken posts. One could also potentially ask for recommendations within either the microformats IRC/chat channel or the IndieWeb chat. If you create a new and experimental one, take a few moments to document your use case in the IndieWeb and/or Microformats wikis for others who come after you. Keep in mind that if you change the property name at a later date you will need to go into your database and change the wp_postmeta database meta_key field from mf2_property1 to mft_property2 so that WordPress will know where the appropriate data is stored to be able to display it.
The show setting is fairly straightforward, but may not be as obvious to some. It has either a value of true or false. If the value is false, the new post kind won’t be displayed in the radio button options within the admin UI for creating new posts. If the value is true, then it will be available. The Post Kinds plugin has a number of reserved post kinds which aren’t displayed by default on most sites–primarily because they do not have appropriate views or data fields defined–but they could be enabled by changing the show flag from false to true. Most often we recommend you only show those kinds that you’re actively using.
Additional examples of the dozen or more standard post kinds can be found within the code to provide some additional potential clarity on what types of data each of them are expecting.
I debated a while on making the verb ‘chickened out’ instead of ‘chickened,’ but I chickened out thinking that it would make my posts something wholly different. Obviously you can now make your own choice.
With this chunk of code saved into the plugin, it is now generally aware of the new post kind and can save the appropriate data for this new kind of post.
Now you’ll want to add some code to the plugin to tell the plugin how it should display the data it’s saving for your posts. The easiest way to do this is to copy and paste the code from one of the many default views already in the plugin and just change a few small pieces of data to match your post kind. This code can be created as a new file with your new matching post kind name (the one at the top of your code snippet above that appears on line 1 before the word ‘array’) in one of two places. If you put it in the views folder in the plugin, you may need to re-add it later on if the plugin updates. Otherwise you can add the code into a file which can be placed into a folder named kind_views in either the folder for your theme (or your child theme, if you have one.) We recommend placing it in your child theme, so if the parent theme updates, your code won’t accidentally be lost.
There are a variety of views for many post kinds available to stand as examples, so you can look at any of these and tweak them as you wish to get the output you desire. For more complicated output displays it might certainly help to have some PHP coding skills. For my chicken post kind I simply copied and pasted the code for the bookmark kind view and pasted it into a file named kind-chicken.php following the naming convention of the other files.
Below is a copy of the code I added for the chicken post kind which is nearly identical to the bookmark view with exception of changing the name of the template, adding u-chicken-of and changing the get_before_kind to chicken instead of bookmark. Note that because the chicken-of microformat is wrapped on a URL, it has the u- prefix, otherwise if it were on plain text it would have been p-chicken-of using the standard microformat h-, u-, p-, and e- syntax.
I also put both the u-chicken-of and the u-bookmark-of microformats in the view so that sites using the post type discovery algorithm that don’t recognize the chicken-of microformat won’t choke on the proverbial chicken bone, but will default back to thinking this post is of the bookmark type. I suspect that I could also have left the u-bookmark-of off and many would have defaulted to thinking this post was a simple note as well. You can make your own choice as to which you prefer as a default.
Finally, you’ll want to include the appropriate svg icon within the plugin so that it will display on the post (if the appropriate settings are chosen within the plugin’s settings interface: either “icon” or “icon and text”), and within the Kinds metabox in the post editor.
You’ll want to have one icon named kindname.svg in the svgs folder and another named kinds.svg in the plugin’s root folder. The kinds.svg is a special ‘master’ svg of all of the kinds icons bundled together. If it helps in matching the icon set, all of the current kind icons are made with Font Awesome icons which have the appropriate licensing for distribution.
In my chicken example, I opted for the feather icon since Font Awesome didn’t have an actual chicken available.
Naturally some people may want to display particular exotic kinds which might not extend to the broader public. A chicken post type certainly falls under this umbrella as I wouldn’t expect that other than for novelty, obsessive IndieWeb post kinds completeness, or for a very small handful of specialized farming, juggling, or comedy websites that anyone else in their right mind would really want to be doing a lot of posting about chickens on their site.
David Shanske, the plugin’s creator, has made it possible to create a sub-plugin of sorts so that one can add one-off support to these types using a variety of filters and functions. This could be useful so that updates to the plugin don’t overwrite one’s work and require adding the pieces outlined above back in again. Sadly, this is a tad beyond my present abilities, so I won’t address it further at the moment other than to say that it’s possible and perhaps someone might document it for others to use a similar template in the future.
Try it yourself
Now that you’ve got the basics, it should be relatively easy to add many of your own new post kinds.
If you want a simple exercise, you should be able to go into the code and manually change the show flags for the eat and drink kinds from their default false to true to enable posting food to create a food diary on your website. (These have a reasonable default view and icons already built in.)
With slightly more work you can change the show flag on the follow kind and copy a view based on the bookmark view to make a follow view to make follow posts. (Here’s a link to my version.) Similarly other hidden kinds like wishes and acquisitions can be enabled easily as well. These also have default icons already built in, but just need a view defined to show their data.
If you want a slightly larger challenge that uses all of the above, why not attempt adding the appropriate machinery to create a want post?
Though David has often said before that he wouldn’t build in support for multi-kinds, some people may still want them or think they need them. If you’re exceptionally clever, you might be able to create your own explicit multi-kind by mixing up the details above and creating a kind that mixes a variety of the details and creates a view that would allow the specific multi-kind you desire. Caveat emptor on this approach if you should take it.
Share your ideas
Now that you’ve got the general method, what kinds are you going to deploy in the future? What have you already created? Feel free to reply with your ideas and thoughts below in the comment section or send us a webmention from your own site with what you’ve done. Maybe consider doing a pull request on the plugin itself to add the functionality for others?