I’ve decided to re-design my personal website, richardmacmanus.com. My primary reason is to become a full-fledged member of the IndieWeb community. If I’m writing about Open Web technologies here on AltPlatform, then I ought to be eating my own dog food. Another reason is to discover – likely ...
Category: WordPress
Feed reader revolution
So the real question facing companies with stand alone traditional feed reader products–like Feedly, Digg Reader, The Old Reader, Inoreader, Reeder, NewsBlur, Netvibes, Tiny Tiny RSS, WordPress reader–and the cadre of others is:
- What features could/should we add?
- How can we improve?
- How can we gain new users?
- How can we increase our market share?
In short the primary question is:
What should a modern RSS feed reader be capable of doing?
👓 Watch the WordPress TV Ads | WordPress Marketing | Daniel McClure
Watch the first WordPress TV Ads here. They have just launched after Matt Mullenweg committed last year to really start investing in marketing WordPress.
👓 WordCamp for Publishers to be Held in Denver, August 17-19 | WP Tavern
The first ever WordCamp for Publishers will be held August 17-19 in Denver, Colorado. The niche WordCamp will be open to anyone who uses WordPress to manage a publication, no matter what size. Orga…
👓 Automattic to Host a Free, Remote Conference on Design and Exclusion on April 21 | WP Tavern
Automattic is hosting a free, remote conference called Design and Exclusion on April 21. The event will bring together design and technology experts who will discuss solutions for the ways that dig…
👓 New WordPress Plugin Shows Users Where a Plugin’s Settings Link Is Upon Activation
A common frustration I’ve experienced in WordPress after installing a plugin is figuring out where the settings link is located. It can be a top-level menu item or tucked away in a sub-menu. …
👓 One click indieweb for WordPress | Peter Wilson
A brain dump of the features a one click indieweb plugin for WordPress might include.
@Mentions from Twitter to My Website
You can tweet to my website.
One of my favorite things about the indieweb is how much less time I spend on silo sites like Facebook and Twitter. In particular, one of my favorite things is not only having the ability to receive comments from many of these sites back on the original post on my own site, but to have the ability for people to @mention me from Twitter to my own site.
Yes, you heard that right: if you @mention me in a tweet, I’ll receive it on my own website. And my site will also send me the notification, so I can turn off all the silly and distracting notifications Twitter had been sending me.
Below, I’ll detail how I set it up using WordPress, though the details below can certainly be done using other CMSes and platforms.
rel=“me”

On my homepage, using a text widget, I’ve got an h-card with my photo, some basic information about me, and links to various other sites that relate to me and what I’m doing online.
One of these is a link to my Twitter account (see screenshot). On that link I’m using the XFN’s rel=“me” on the link to indicate that this particular link is a profile equivalence of my identity on the web. It essentially says, “this Twitter account is mine and also represents me on the web.”
Here’s a simplified version of what my code looks like:
<a href="https://twitter.com/chrisaldrich" rel=“me">@chrisaldrich</a>
If you prefer to have an invisible link on your site that does the same thing you could alternately use:
<link href="https://twitter.com/twitterhandle" rel=“me">
Similarly Twitter also supports rel=“me”, so all I need to do there is to edit my profile and enter my website www.boffosocko.com into the “website” field and save it. Now my Twitter profile page indicates, this website belongs to this Twitter account. If you look at the source of the page when it’s done, you’ll see the following:
<a class="u-textUserColor" title="http://www.boffosocko.com" href="https://t.co/AbnYvNUOcy" target="_blank" rel="me nofollow noopener">boffosocko.com</a>
Though it’s a bit more complicated than what’s on my site, it’s the rel=“me” that’s the important part for our purposes.
Now there are links on both sites that indicate reciprocally that each is related to the other as versions of me on the internet. The only way they could point at each other this way is because I have some degree of ownership of both pages. I own my own website outright, and I have access to my profile page on Twitter because I have an account there. (Incidentally, Kevin Marks has built a tool for distributed identity verification based on the reciprocal rel=“me” concept.)
Webmention Plugin
Next I downloaded and installed the Webmention plugin for WordPress. From the plugin interface, I just did a quick search, clicked install, then clicked “activate.” It’s really that easy.
It’s easy, but what does it do?
Webmention is an open internet protocol (recommended by the W3C) that allows any website to send and receive the equivalent of @mentions on the internet. Unlike sites like Twitter, Facebook, Medium, Google+, Instagram, etc. these mentions aren’t stuck within their own ecosystems, but actually work across website borders anywhere on the web that supports them.

The other small difference with webmention is instead of using one’s username (like @chrisaldrich in my case on Twitter) as a trigger, the trigger becomes the permalink URL you’re mentioning. In my case you can webmention either my domain name http://www.boffosocko.com or any other URL on my site. If you really wanted to, you could target even some of the smallest pieces of content on my website–including individual paragraphs, sentences, or even small sentence fragments–using fragmentions, but that’s something for another time.
Don’t use WordPress?
See if there’s webmention support for your CMS, or ask your CMS provider or community, system administrator, or favorite web developer to add it to your site based on the specification. While it’s nice to support both outgoing and incoming webmentions, for the use we’re outlining here, we only need to support incoming webmentions.
Connect Brid.gy
Sadly, I’ll report that Twitter does not support webmentions (yet?!) otherwise we could probably stop here and everything would work like magic. But they do have an open API right? “But wait a second now…” you say, “I don’t know code. I’m not a developer.”
Worry not, some brilliant engineers have created a bootstrap called Brid.gy that (among many other useful and brilliant things) forces silos like Twitter, Facebook, Google+, Instagram, and Flickr to send webmentions for you until they decide to support them natively. Better, it’s a free service, though you could donate to the ASPCA or EFF in their name to pay it forward.
So swing your way over to http://brid.gy and under “Get started” click on the Twitter logo. Use OAuth to log into Twitter and authorize the app. You’ll be redirected back to Brid.gy which will then ensure that your website and Twitter each have appropriate and requisite rel=“me”s on your links. You can then enable Brid.gy to “listen for responses.”
Now whenever anyone @mentions you (public tweets only) on Twitter, Brid.gy will be watching your account and will automatically format and send a webmention to your website on Twitter’s behalf.
On WordPress your site can send you simple email notifications by changing your settings in the Settings >> Discussion dashboard, typically at http://www.exampl.com/wp-admin/options-discussion.php. One can certainly use other plugins to arrange for different types of notifications as well.
Exotic Webmentions
A bonus step for those who want more control!
In the grand scheme of things webmentions are typically targeted at specific pages or posts on your site. General @mentions on Twitter not related to specific content on your site will usually be sent to your homepage. Over time, this may begin to get a bit overwhelming and may take your page longer to load as a result. An example of this is Kevin Marks’ site which has hundreds and hundreds of webmentions on it. What to do if this isn’t your preference?
In my case, I thought it would be wise to collect all these unspecific or general mentions on a special page on my site. I decided to call it “Mentions” and created a page at http://boffosocko.com/mentions/.
Update
While the code snippet just below should work, as of the 3.3.0 update of the Webmention Plugin, there is now an automatic setting at /wp-admin/options-discussion.php that will allow you to use a dropdown UI box to choose the page on your site to which homepage webmentions will be directed.
Then I inserted a small piece of custom code in the functions.php file of my site’s (child) theme like the following:
// For allowing exotic webmentions on homepages and archive pages
function handle_exotic_webmentions($id, $target) {
// If $id is homepage, reset to mentions page
if ($id == 55669927) {
return 55672667;
}
// do nothing if id is set
if ($id) {
return $id;
}
// return "default" id if plugin can't find a post/page
return 55672667;
}
add_filter("webmention_post_id", "handle_exotic_webmentions", 10, 2);
This simple filter for the WordPress Webmention plugin essentially looks at incoming webmentions and if they’re for a specific page/post, they get sent to that page/post. If they’re sent to either my homepage or aren’t directed to a particular page, then they get redirected to my /mentions/ page.
In my case above, my homepage has an id of 55669927 and my mentions page has an id of 55672667, you should change your numbers to the appropriate ids on your own site when using the code above. (Hint: these id numbers can usually be quickly found by hovering over the “edit” links typically found on such pages and posts and relying on the browser to show where they resolve.)
Tip of the Iceberg
Naturally this is only the tip of the indieweb iceberg. The indieweb movement is MUCH more than just this tiny, but useful, piece of functionality. There’s so much more you can do with not only Webmentions and even Brid.gy functionality. If you’ve come this far and are interested in more of how you can better own your online identity, connect to others, and own your data. Visit the Indieweb.org wiki homepage or try out their getting started page.
If you’re on WordPress, there’s some additional step-by-step instructions: Getting Started on WordPress.
👓 WordPress Collaborative Editing | Ma.tt
I’m really excited about the new Google Docs integration that just launched — basically it builds a beautiful bridge between what is probably the best collaborative document editor on the planet right now, Google’s, and let’s you one-click bring a document there into a WordPress draft with a...
Read posts nearly perfected!
In a project which I started just before IndieWebCamp LA in November, I’ve moved a big step closer to perfecting my “Read” posts!
Thanks in large part to WordPress, PressForward, friends and help on the IndieWeb site too numerous to count, and a little bit of elbow grease, I can now receive and read RSS feeds in my own website UI (farewell Feedly), bookmark posts I want to read later (so long Pocket, Instagram, Delicious and Pinboard), mark them as read when done, archive them on my site (and hopefully on the Internet Archive as well) for future reference, highlight and annotate them (I still love you hypothes.is, but…), and even syndicate (POSSE) them automatically (with emoji) to silos like Facebook, Twitter (with Twitter Cards), Tumblr, Flipboard, LinkedIn, Pinterest, StumbleUpon, Reddit, and Delicious among others.
Syndicated copies in the silos when clicked will ping my site for a second and then automatically redirect to the canonical URL for the original content to give the credit to the originating author/site. And best of all, I can still receive comments, likes, and other responses from the siloed copies via webmention to stay in the loop on the conversations they generate without leaving my site.
Here’s an example of a syndicated post to Twitter:
👓 Physicists Uncover Geometric ‘Theory Space’ | Quanta Magazine https://t.co/HuKg1d4a80
— ChrisAldrich (@ChrisAldrich) February 23, 2017
I’m now more resistant to a larger number of social media silos disappearing with my data. Huzzah!
What’s next?
Updating the getting started documentation for @WordPress at IndieWeb.org
Browser Bookmarklets and Mobile Sharing with Post Kinds Plugin for WordPress
The Post Kinds Plugin
I’ve been using David Shanske’s excellent WordPress plugin Post Kinds, which is conveniently bundled into the IndieWeb Plugin, for more than a year now. (Update: I’ve also written a fairly in-depth primer for it.)
Much like WordPress’s native post formats (standard, aside, image, quote, link, status, audio, etc.) which were introduced in v3.1, Post Kinds instead provides a better mapping of post types across a larger variety of social media types (article, bookmark, favorite, itinerary, jam, like, listen, note, photo, play, read, reply, repost, watch, and more). In addition to changing the visual layout and formatting of most posts, the plugin also importantly includes the correct microformat classes for each of these post types and this enables a lot of other fantastically important functionality for the open web.
Custom URLs for Post Kinds
One of the problems I had with using it initially was taking the extra time to cut and paste in the several pieces of additional data or fill in meta data to make a post. It was particularly painful in a mobile setting. I was thrilled when David mentioned that he’d built in some customized query parameters which could take URLs to import in much of the data as well as to set the correct post kind automatically. They came with the general format of
http://example.com/wp-admin/post-new.php?kind=bookmark&kindurl=@url
where one could replace @url with the target URL of the site to be bookmarked, for example. Replacing bookmark with the appropriate post kind name would allow one to set the flag for each post to the proper post kind automatically, and naturally one should replace example.com with the base URL for their site.
Putting this customized URL into a browser will create a new post in one’s website admin UI and Post Kinds will automatically set the URL and scrape its meta data. One can then modify any additional data or add a comment and then publish quickly and easily.
As a concrete example, I would put the following URL in my browser of choice to “like” the Post Kinds Plugin page:
http://www.boffosocko.com/wp-admin/post-new.php?kind=like&kindurl=https://wordpress.org/plugins/indieweb-post-kinds/
Browser Bookmarklets
I am a huge fan of browser bookmarklets, so for a while I’ve been meaning to create some for the post kinds I use to better automate my post process. After dragging my feet for ages, particularly because my JavaScript skills are nearly non-existent, I’ve finally gotten around to adapting the common WordPress “Press This” bookmarklet to work with Post Kinds.
Below is the modified code that can be put into a bookmarklet to allow for easily bookmarking a particular post:
javascript:(function(a,b,c,d){function e(a,c){if("undefined"!=typeof c){var d=b.createElement("input");d.name=a,d.value=c,d.type="hidden",p.appendChild(d)}}var f,g,h,i,j,k,l,m,n,o=a.encodeURIComponent,p=b.createElement("form"),q=b.getElementsByTagName("head")[0],r="_press_this_app",s=!0;if(d){if(!c.match(/^https?:/))return void(top.location.href=d);if(d+="&kindurl="+o(c),c.match(/^https:/)&&d.match(/^http:/)&&(s=!1),a.getSelection?h=a.getSelection()+"":b.getSelection?h=b.getSelection()+"":b.selection&&(h=b.selection.createRange().text||""),d+="&buster="+(new Date).getTime(),s||(b.title&&(d+="&t="+o(b.title.substr(0,256))),h&&(d+="&s="+o(h.substr(0,512)))),f=a.outerWidth||b.documentElement.clientWidth||600,g=a.outerHeight||b.documentElement.clientHeight||700,f=800>f||f>5e3?600:.7*f,g=800>g||g>3e3?700:.9*g,!s)return void a.open(d,r,"location,resizable,scrollbars,width="+f+",height="+g);(c.match(/\/\/(www|m)\.youtube\.com\/watch/)||c.match(/\/\/vimeo\.com\/(.+\/)?([\d]+)$/)||c.match(/\/\/(www\.)?dailymotion\.com\/video\/.+$/)||c.match(/\/\/soundcloud\.com\/.+$/)||c.match(/\/\/twitter\.com\/[^\/]+\/status\/[\d]+$/)||c.match(/\/\/vine\.co\/v\/[^\/]+/))&&e("_embeds[]",c),i=q.getElementsByTagName("meta")||[];for(var t=0;t<i.length&&!(t>200);t++){var u=i[t],v=u.getAttribute("name"),w=u.getAttribute("property"),x=u.getAttribute("content");x&&(v?e("_meta["+v+"]",x):w&&e("_meta["+w+"]",x))}j=q.getElementsByTagName("link")||[];for(var y=0;y<j.length&&!(y>=50);y++){var z=j[y],A=z.getAttribute("rel");("canonical"===A||"icon"===A||"shortlink"===A)&&e("_links["+A+"]",z.getAttribute("href"))}b.body.getElementsByClassName&&(k=b.body.getElementsByClassName("hfeed")[0]),k=b.getElementById("content")||k||b.body,l=k.getElementsByTagName("img")||[];for(var B=0;B<l.length&&!(B>=100);B++)n=l[B],n.src.indexOf("avatar")>-1||n.className.indexOf("avatar")>-1||n.width&&n.width<256||n.height&&n.height<128||e("_images[]",n.src);m=b.body.getElementsByTagName("iframe")||[];for(var C=0;C<m.length&&!(C>=50);C++)e("_embeds[]",m[C].src);b.title&&e("t",b.title),h&&e("s",h),p.setAttribute("method","POST"),p.setAttribute("action",d),p.setAttribute("target",r),p.setAttribute("style","display: none;"),a.open("about:blank",r,"location,resizable,scrollbars,width="+f+",height="+g),b.body.appendChild(p),p.submit()}})(window,document,top.location.href,"http:\/\/example.com\/wp-admin\/post-new.php?kind=bookmark");

Other versions of the bookmarks can easily be made for all the other other Post Kinds by replacing the two red highlighted portions of the code sample appropriately for each one. Specifically one should exchange bookmark with the name of the kind desired (all of them should be in lowercase) and replace example.com with one’s own domain name.
For simplicity, I’m including a sample/template bookmarklet button below which can be dragged and dropped into most browser bars. Before using it, edit the JavaScript as described above and paste it into the URL box. I’m happy to help those who may have problems. I’ve included a screen capture of what all of them look like once they’re set up and configured with matching emoji added into the titles to assist in visual selection.
Perhaps I (or someone else enterprising) would contribute all this back into the plugin repository for Post Kinds so that these bookmarklets would be self-generated for plug and play usage within the admin interface for the plugin the way the bookmarklets are for the IndieWeb plugin’s PressThis bookmarklets, perhaps at /wp-admin/admin.php?page=kind_options.
A Post Kinds “Bookmarklet” for Mobile
For those who would like something similar to the above for use on mobile platforms (and particularly Android) I’ve written up some instructions below which allow one to use the Android app URL Forwarder to use the ubiquitous mobile “share” functionality from most pages and/or apps in a way similar to this bookmarklet functionality. (This is based in part on some work by Ryan Barrett and some work I’d written up for the Known CMS a while back.)
I’d suspect that there’s also a similar app for iOS, but I haven’t checked. If not available, URL Forwarder is open source on Github and could potentially be ported. There’s also a similar Android app called Bookmarklet Free which could be used instead of URL Forwarder.
Configuring URL Forwarder for Post Kinds
- Open URL Forwarder on your phone
- Click the “+” button to create a filter.
- Give the filter a name, “Bookmark” for the bookmark version. (See photo below.)
- Use the following entry for the “Filter URL” replacing
example.comwith your site’s domain name:http://EXAMPLE.com/wp-admin/post-new.php?kind=bookmark&kindurl=@url - Leave the “Replaceable text” as “@url”
- Finish by clicking on the checkmark in the top right corner.
- Repeat the above for the other desired post types but replacing “bookmark” with the lower case names of those other types.
Simple right?
Creating a post via mobile
With the configuration above set up, do the following:
- On the mobile page one wants to bookmark, like, favorite, etc., click the ubiquitous “share this” mobile icon (or share via a pull down menu, depending on your mobile browser or other app.)
- Choose to share through URL Forwarder
- Click on the “bookmark” option just created above (or other option as necessary for the desired post type).
- Change/modify any meta data within your website administrative interface or add any additional thoughts and publish. (This part is the same as one would experience using the desktop bookmarklet.)
Happy posting!
WordPress is Your Digital Hub | Dented Reality
In a previous post, I talked about POSSE and PESOS, and publishing on your own site vs other platforms, syndicating content back and forth and content ownership. I mentioned that I’d opted for the PESOS approach, and that I was publishing content on other platforms, then syndicating it back to my own site. Let’s take a look at how that happens.
RSSCloud For WordPress | Joseph Scott
RSSCloud support has been enabled on all WordPress.com blogs. If you are running a WordPress.org powered blog you can do the same thing with the RSSCloud plugin.
Getting data out of Medium
Controlling my data is important to me. It’s also important that my students (and the faculty that I support) have the ability to control their own data, as well. That doesn’t mean that everything needs to live on a Domain of One’s Own. But it does mean that I want my data to be as flexible as possible, and as easy to move around as possible.
It’s really easy to download an archive of your Medium posts. Like your Twitter archive, you can just unzip the archive and upload it to your domain, and you’ve got it up and running.
However, if you want to incorporate those posts into a different platform — like WordPress, Jekyll, Known, etc. — it is more of a challenge.
I wrote my posts on the Medium API directly in Medium. Partly as an experiment, and partly because I love the Medium post editor. (It’s why I incorporated a Medium editor clone into Peasy.) But after writing three posts — complete with feature images, inline images, and code blocks — in Medium, I decided to import them into my Jekyll/GitHub Pages site. That’s turned out to be a challenge. Not an insurmountable one, but one that I’d rather avoid going through.
I downloaded my Medium archive, used Pandoc to convert the posts from HTML to MarkDown, and then copied and pasted the MarkDown into new posts on my Jekyll site. There was more post-processing than I anticipated, or would like. And it doesn’t look as easy to automate the cleanup as I would like.
Even more frustrating was my discovery a couple weeks ago that the Medium API supports posting to Medium, but not retrieving posts from Medium. It is easy to write code that cross-posts from another platform to Medium, but Medium makes it more difficult to go the other way.
Why?
My guess is that their focus is on content. They want to be the place where we go to find ALL THE CONTENT. So they make it really easy to get content in. Harder to get content out. And by making a beautiful, easy-to-use editor, the temptation is strong to just use Medium from the start.
If we just want to write, get our writings read, and have a permanent record of what we wrote. Medium can be great. But if we want to write content that we keep coming back to, content that keeps evolving, content that’s part of a long-term project … and if we don’t want that long-term project to be locked into a single platform … then Medium may be a problem.
I say as I write this post on Medium.
Because I just can’t resist this editor.
Time to go add some code to Peasy so I can get it ready for prime-time sooner.
Featured image by paul bica (CC BY).