I mentioned last week I had setup iOS Shortcuts to post Likes, Reposts, and Bookmarks to my website, and automatically syndicate those posts to Twitter. This solved a particular pain point in my “workflow,” where I’d share something to my website with Indigenous, but then have to go in to the WordPress editor through a browser to get the post to share back to Twitter. This was enough of a pain I avoided it where possible. With the new shortcuts I don’t have to worry about that. A couple of taps, and everything “Just Works”(tm).

This post is an attempt to document how I have my shortcuts setup, so you can make some of your own. I’ve tried to keep things as jargon free as possible, but the instructions do assume the following:

  • you have a website of your own,
  • that website has a Micropub-compatible endpoint, such as self-hosted WordPress with the Micropub plugin,
  • your iPhone or iPad is running iOS 12 or above,
  • optionally, your website can syndicate to other sites through Micropub syndication target. WordPress users can use the Syndication Links plugin.

My own setup uses WordPress with all of the IndieWeb plugin pack, so that is what this guide has been tested with, but everything here should be universal to any Micropub server. To get started, you will first need to install a pre-requisite shortcut.

Install the IndieAuth Shortcut.

This is the foundation for the other shortcuts. With out this, your shortcuts cant authenticate with your site. It can be found here, with some more notes found on this IndieWeb wiki page about Shortcuts. While installing it, you can configure it with the URL of your site and run through the authentication process to get a token, or enter a pre-existing token. Alternatively, if you already have a valid token from somewhere, you can enter that into the shortcut for it to use.

Note for WordPress users.

I ran into an issue with the IndieAuth shortcut, where WordPress didn’t interpret the authentication scopes properly, meaning the generated token wouldn’t work. I didn’t spend much time debugging this, so I don’t know if the issue is in the plugin or how Shortcuts sends the request. Thankfully, there’s a workaround. Go to your WordPress admin area > Users > Manage Tokens. At the bottom of the screen will be a form where you can generate an appropriate token. You’ll want to select at least the “create” scope. Do this, then copy and paste the token code in to the text field at the top of the shortcut, like this:

With our authentication mechanism setup, it’s time to build the shortcut proper.

Building the Shortcut.

Initial Setup.

In the Shortcuts app, create a new shortcut. The first thing we need is a “Get URLs from Input” block, then a “Set Variable” block. Name the variable something memorable, as we’ll be using it in a couple of places. I called mine “repost” in my Retweet shortcut.

Next, add a “Run Shortcut” block, and another “Set Variable” block after it. The shortcut block should be set to run your IndieAuth shortcut, and you can turn off “Show While Running”. Set the variable name to “token.” Once done, you should have something like this:

Posting to Your Site.

This is “where the magic happens.” In broad terms, the next few blocks will:

  1. Be configured with the Micropub endpoint of your site,
  2. Craft a POST request to your endpoint, with the following pieces of information:
    1. Your authentication token
    2. The type of Micropub post we’re creating (“entry”)
    3. The URL we’re sharing, as a “repost-of”, “like-of”, or whatever
    4. Set a syndication target.

With these steps in mind, onward we go!

Add a URL block to your site. Enter the URL of your Micropub endpoint. If you’re not sure exactly what this is, check the source of your site. Look for a link tag with rel=“micropub”. Alternatively, I’ve written another shortcut which will try to detect an endpoint for a given domain. You can find it here. Note that I’ve not tested this shortcut on any device but my own, so there may be bugs. The Get Endpoint shortcut will check if the endpoint variable is set, and if not, ask for a domain to parse for the endpoint. Once parsed, the endpoint URL will be copied to the device clipboard for pasting elsewhere, and return a URL.

Back in the sharing shortcut, add a “Get Contents of URL” block. Tap on “Advanced,” then set the Method to POST. Tap on “Headers.” Add a header called “authorization” (note the US spelling, if you’re using a UK keyboard or similar). Set the value of this header to “Bearer ” – with the space at the end – then insert the token variable created earlier.

Next, in the Request Body section, set it to Form. If you’re replicating my setup, add three new fields: h, repost-of (or like-of, etc.), and mp-syndicate-to. Set the value of h to entry. Set repost-of to the variable you created from your input URL, right back at the start.

Finally, set mp-syndicate-to to the UID of the syndication target you want to share to. In my WordPress setup, this is twitter-bridgy. Your system may vary, if you’re not using WordPress + the Syndication Links plugin. If you’re not sure what your UID might be, you can try running another shortcut I’ve created, which will query your site to find all the places you can syndicate to. The shortcut requires the “Get Endpoint” shortcut linked above, and will return text listing all UIDs configured for your site. As an example, the output for me looks like this:

{"name":"XYZ IndieWeb","uid":"xyz-indieweb"}
{"name":"XYZ Linking","uid":"xyz-linking"}
{"name":"IndieNews En","uid":"indienews-en"}
{"name":"XYZ Books","uid":"xyz-books"}
{"name":"Twitter via Bridgy","uid":"twitter-bridgy"}
{"name":"Github via Bridgy","uid":"github-bridgy"}

If you don’t want to syndicate your post, remove the mp-syndicate-to field entirely – don’t just leave it blank, or you might run into issues.

Once all fields in your Like/Repost shortcut have been filled in, you should have something like this:

You can leave things here, if you want, or you can add something like a Notification block to show you the returned response from your site, for debugging purposes. Unfortunately, the current limitations of Shortcuts mean we can’t get the URL to our new post from the results. Maybe that will change in iOS 13.

Set your new shortcut with an appropriate name and icon. Turn on the option “Show in Share Sheet,” and optionally set the “Accepted Types” to “URLs.” Tap Done a couple of times, and your shortcut should be complete! The best bit is, you can duplicate the shortcut, change repost-of to like-of (or viceversa), and you’ll have a working Like shortcut too 😃

Now, you can use the iOS share sheet for any URL to run your shortcut. Tap the share icon, tap Shortcuts, then tap the relevant shortcut from the list:

As a bonus, here’s a couple of short clips of the Like shortcut in action:

If you run into any issues getting the shortcut created, please do let me know through a comment or Webmention, and I’ll try to help where I can.

I mentioned over on Micro.blog that I’d managed to get a workable edit/commit/push workflow on my iPad. Naturally, I’m now considering a keyboard to complete the setup.

Does anyone have any recommendations for a good keyboard to use with a 9.7” iPad Pro?

The last time I had a similar setup, I used an Apple Wireless Keyboard (in an Origami case/stand) as the Bluetooth keyboard + case combos available at the time all felt horrible to type on. I do have a spare ultra-compact mechanical keyboard I could try with a USB adapter, but thinking more about it, that’s probably not going to work well when I don’t have a table to work on.

So, if anyone has any suggestions, I’d love to hear them!

Screenshot of my Instagram feed
Photo by Donna Murray Photography

I mentioned yesterday my frustrations with Instagram were at an all-time high, and I wanted to “soft quit” the app by adding my follows as a source in Monocle. I didn’t find any existing guide on how to do this (sorry if I missed yours!), but I did get two useful suggestions about tools to enable this: Instagram Atom, and Granary.

I use Granary already, to pipe Twitter into Monocle, so that was my preferred option. The short guide below documents the steps I took to get things set up.

Step 1. Get your Instagram session ID

Instagram doesn’t offer much of an API anymore, so to let Granary do the magic, we need to get our Instagram session ID. To do this:

  • Login to Instagram through a desktop web browser
  • Use the developer tools to inspect the cookies set by Instagram. Look for a cookie called “sessionid” and copy the value of it:

Step 2. Link up Granary

Head over to Granary. Click on the Instagram login button, and authorise Granary if you need to. When you return to Granary, there will be a couple of form fields you can fill in.

  • Enter your Instagram username
  • Select @friends from the dropdown
  • Change the format to html/atom/json
  • Enter your copied session id in the cookie field

Click “GET”, and Granary will generate a preview of your feed and give you a link:

Copy that link.

Step 3. Add to Microsub

You need to add the URL you’ve copied from Granary as a source in whatever Microsub server you use. I use Aperture, so I added a new Instagram channel with my feed as a source. I’m going to assume you know how to do this for your server of choice.

Step 4. Enjoy

All being well, you should now have an Instagram feed in Monocle/your chosen social reader.

With all this set up, I can now add the Instagram app to the “To Quit” folder on my iPhone.
Screenshot of my iOS “to quit” folder, containing a handful of silo apps

Caveats

There’s a couple of limitations with “using” Instagram in a reader:

  • No syndication – to my knowledge, it’s not possible to syndicate any of your response (likes, replies, etc) back to Instagram. So if you want to let your Instagram-only friend know you liked their photo, into the app you go.
  • Session expiry – I don’t know yet if the session id we got in Step 1 will expire. If it does, you’ll probably need to redo creating and adding your feed.
  • Multi-accounts – if, like me, you have more than one Instagram account, and want to add both, there are some hoops to jump through. I found you need to add the second account using a second browser/new private browsing session, or some wires will get crossed somewhere and you’ll need to setup both feeds all over again.

I’ve started using my new(ish) test site to build my new IndieWeb WordPress theme. It’s very early in the process, and I’m getting the markup in place first, before I go anywhere near a stylesheet – so it all looks very 1996 right now.

The lessons learned on “K” will be put into use with this theme, along with several ideas I’ve picked up along the way. I’ve already reused some of the more useful bits of K to give me a head-start, so I know that stuff like the feed and post microformats should be pretty robust (if not yet 100% complete). The main improvement I want to make over K is in flexibility  – i.e. it’s not just usable by me, or locks me/the user into a particular setup.

If there is anything you would like to see in an IndieWeb WordPress theme, or any other suggestions, please file an issue in the repository. I can’t promise I’ll implement it, but at this stage, the chances are high 😉

If you’re a Monocle user, you might have noticed a new feature in your UI today. If you self-host, you’ll want to update your installation to the latest version. Two nice “quality of life” features have gone live, and I’m a little excited, because I helped build one of them 😁

The biggest feature I’ve been missing in Monocle over, say, Feedly, is a “mark all read” button. I follow too many busy sources to be able to keep up with everything, so I frequently mark everything as read and carry on. It helps me not get overloaded.

Monocle "view menu" on desktop

Aaron had raised an issue to build the feature at some point, but I wanted it, and had a spare weekend, so figured I’d make myself useful!

In all, it was surprisingly straightforward. The Microsub spec is well documented, so I knew how it needed to work. All I had to figure out was how to fit that into how Monocle already did things, and there was already a “mark read” for single entries to work from.

The UI took the longest to build, mostly because I had to figure out the Bulma frontend framework. Rosemary had already come up with some ideas on how it should work, so the hard part had pretty much been done.

Monocle "view menu" on mobile

And with a little bit of testing, there it was – “Mark All Read” in Monocle. I’ve been running it in my install for a little over a week now, and I hope you’ll find it as useful as I have if you’re a heavy Monocle user.

I can’t take any credit for in the slightest for the new “Show Only Unread Entries” feature – to my knowledge, that was all Aaron. It was a nice surprise to find once I updated my local install from the master branch!

Between tags and post kinds/formats, are “categories” considered redundant when organising a blog? I have a bunch of legacy posts which have some high-level categories assigned, but the vast majority of posts end up in the default category (notes), and I can’t remember the last time I went out of my way to set the category on anything (other than this post) – because most of the time I’m quick-posting from a tool which doesn’t even have the option to set categories.

Categories seem to be very much de-emphasised these days.

But then I come back to a time before we had tags, before post types, and when categories were all we had. They were useful and helped us structure our blogs so visitors could find stuff they’d be interested in. Serious planning was sometimes put into a categorisation scheme. I think of how I would use categories to label “asides” before there was an Aside post format (or even an <aside> HTML tag), “bookmarks” before there was a Bookmark post kind. Then I wonder if they’re worth maintaining as the “lowest common denominator” of organisation and data portability. Another blogging tool might not have native support for “post kinds” – but it’s almost certainly got some sort of category system.

I’m also trying to think about this from an aspect of theming WordPress. How much space or emphasis should be placed on each of the ways of describing a particular post? Should they be listed in some contexts, but not others? Autonomie only shows the post kind in list pages, but adds in category and tags on the the post’s page. K showed only an icon for the type, and tags if they were set.

Even as I’m thinking and writing this out, I’m not sure if I’m talking myself into or out of going through and properly categorising ~1400 blog posts (850 published, the rest pending review). Do I move everything into the default bucket? Or do I create and assign a robust categorisation scheme? What would that scheme look like?

One to ponder a bit further, I think🤔

I’ve been running my own instance of Aaron’s excellent Monocle microsub client for a while now. I think it’s time I take the leap and run my own instance of Aperture microsub server as well (and its associated services), just so I don’t have to rely on any services hosted elsewhere.

I just need to figure out if I need to give Aperture its’ own server, rather than run it alongside everything else on my existing VM.

I’ve taken the decision to switch my site away from the custom theme called “K” I was building, and for now I’m using the excellent Autonomie by Matthias Pfefferle instead1. Development of K had already slowed to a standstill, and realistically, I’m not going to go back to it anytime soon. It feels a little like a failure, a little like giving up, but I think it’s ultimately the right thing to do.

I made a lot of mistakes while building K, which overcomplicated things, made development more difficult, and ultimately led me into a dead-end. I thought “for simplicity” that I would use the Bootstrap frontend framework, as it would give me a robust foundation to build on. It did, but I had to bend and twist WordPress in increasingly hacky ways to get the output to “play nice.” A large chunk of the K codebase was being taken up by code solely tasked with massaging the output of WordPress to add the right Bootstrap classes or container markup. It felt increasingly fragile and hacky, and it was a bad sign. K would work for my setup, but I couldn’t ensure it would work for everyone.

Bootstrap added other complications: to properly manage my CSS “overrides” I had to create a build system that would compile a whole lot of SASS files together. When I started K, the CSS was stripped down to the bare minimum needed, and came to a few KB. After a while I ended up including the whole Bootstrap framework, just to make the build process easier.

There were no “options” to speak of, so it couldn’t be tailored to suit someone else using the WordPress customiser. I didn’t even want to think about Gutenberg support.

Microformats always felt like whack-a-mole. I’d get them working, then make adjustments somewhere else, and promptly see things break again. I put this on my need to make so many adjustments to the WordPress output – inadvertant issues kept creeping in.

Then there were the visual design choices. K grew out of the simple design I employed when I was writing 1-2 short posts a month, in the traditional format. In that scenario it worked fine. Once I started to use the various post kinds, things became more problematic. Now I was posting several posts per day, most of which weren’t in a traditional blog format. The home page became cluttered; it started to remind me of a badly thought-out notification area, rather than a well designed blog. The archive page was a disaster and I had no good ideas on how to fix it. There were a thousand other little niggles.

None of this is meant as a knock against Bootstrap, or WordPress, or build systems, or any other tool or technology I used to get to this point. K failed because of my decisions, rather than deficiencies in the tools. There were things I liked about K… it used zero JavaScript, and I did my best to stop unnecessary plugin resources from loading. Markup was as minimal as I could make it (within the constraints of what I could remove from WordPress output, microformats, and what Bootstrap needed). It worked well across browsers and devices (thanks Bootstrap!), and the accent colours were fun. I learned a lot about the excellent Post Kinds plugin during the development process. I’m filing it away as a failed experiment, which I’ll learn from and apply the lessons to the IndieWeb WordPress theme I’m still intending to create. One that will hopefully work for more people than just me ?

I put the source code to K on GitHub right back near the start of the project. If you want to take a look, steal any code, rework it into something usable – feel more than welcome to!

1 As a result, a couple of things that were setup specifically for K are broken. I’ll look into fixing those over the next few days. ⤴️

With the recent change in ownership, I’ve been wondering if Flickr could become a viable alternative to Instagram for photo sharing (again)? I have a nostalgic view of Flickr, even though I haven’t used it in years. I closed my account, but I’d like to see them do well, and could be convinced to sign up.

As much as I’d love for people to be using their own site/domain, many (most?) don’t want that hassle – so a good service app will be their go-to.

As an aside, I need to get back in the habit of posting photos on this site. I haven’t really been taking pictures with the intent to share over the last couple of months, but one or two have ended up on social media regardless.

I mentioned that I was thinking about installing Manjaro Linux… well I went ahead and did it. Not even just a little, by dual-booting with Windows 10. No, I wiped everything and just went for it as my one and only operating system. What follows is my notes from the install, so if I want to get back to where I was at some point in the future, I can retrace my steps.

“Live USB” Installer

Due to having a Broadcom wireless adapter in my self-built PC, the networking didn’t work “out of the box” for me. Which was a surprise, because it did work the last time I installed Linux. From what I’ve read, kernel 3 worked fine, but kernel 4 (on the Live image) has some problems with these cards, due to their drivers. This actually stumped me for a while, but in the end… iPhone tethering to the rescue! Put an iPhone into “hotspot” mode, then plug it in to the PC via USB, and Manjaro picks it up as a working network adapter pretty much instantly. It worked over Bluetooth as well. I’ll admit I was impressed by this.

This let me connect to the internet and test how to get the WiFi card working. Once I had a plan for that, it was on to the installation

Installation

Other than the network adapter, everything else about the installation was a breeze. Manjaro came pre-installed with the proprietary Nvidia graphics driver, and after picking a few options (user account, disk partitioning), the installer formatted the disk, set everything up, and prompted me to reboot within a couple of minutes.

Post Installation

So here’s where I had to fix a couple of things.

Network Drivers

With the iPhone still tethered, the process was something like this:

  • Perform a full system update using the package manager
  • Use the Manjaro Kernel Manager to install and switch to the latest Linux 5.0 kernel
  • Uninstall the broadcom-wl driver package
  • Reboot
  • Install the broadcom-wl-dkms drivers
  • Reboot
  • Configure the network connection in the connection manager

I configured my VPN by downloading the profiles from NordVPN, imported one of them, then set my WiFi connection to automatically connect to the VPN when the network started up.

Blank Screen during/after boot

I encountered a really strange issue where the login screen would not show after boot, and the system would appear to hang until I pressed some keys. It wasn’t a huge deal, once I figured out to press something, but it did start to niggle and made my system feel slower. After a lot of searching I came across this thread talking about similar symptoms. I installed the recommended package haveged, enabled the service, rebooted, and the problem was instantly fixed. After a little more reading, I replaced haveged with rng-tools, and everything has been fine since.

Other tweaks

I followed some of the suggestions from this video – namely install the fonts, reduce “swappiness”, install Pamac and a firewall.

Look and Feel

This was my first time using KDE as my desktop environment, so I was keen to spend some time customising it to my liking. So far I’ve settled on the “Adapta Breeze Nokto” theme, some additional icons, and played around with the panel + widget setup. It’s not fancy, but my desktop currently looks like this:

I’m generally a fan of darker themes, as they’re less of a strain on my eyes.

Other Random Notes

So far I’ve only installed a couple of extra software packages and tweaked a couple of small things.

  • I installed Lutris, for running Blizzard games. Hearthstone and World of Warcraft run flawlessly in my limited testing.
  • Visual Studio Code was also installed, for pretty much anything involving an editor.
  • Steam came pre-installed. A quick check shows around half my existing library is already compatible with Linux; the rest I’ll check through “Steam Play” and Proton.
  • I added a “bootsplash” loading screen using the (kinda vague) instructions in this thread. Basically: install a suitable theme, edit a kernel hook and rebuild the kernel, then add an option to GRUB. Given the speed everything loads at, this might be unnecessary – it’s shown for at most 1.5 seconds.
  • On SSD-based systems, enable the fstrim.timer service to enable TRIM support (recommended).
  • With the Nvidia driver, get better looking scrolling in Firefox by enabling layers.acceleration.force-enabled in about:config.

That’s all my notes for now. No doubt I’ll post up more as I get more comfortable with the OS and explore the capabilities a bit more ?

I noted the other day that Textpattern might be a good fit for some people trying to build their own websites, but that there wasn’t much in the way of resources to get them plugged into the IndieWeb.

Well, I went and started to do something about that. #IndieWeb TextPattern is a site where I will be exploring and documenting how to add various IndieWeb building-blocks to their Textpattern website. There’s not a whole lot of stuff there yet: just the mission statement, and how to add an h-card using form templates; but my intent is for the site to grow into a kind of guidebook for interested parties to be pointed to from the IndieWeb wiki and elsewhere. I was inspired by the short series of posts Gary put together about Blogger recently.

It’s been years since I last used Textpattern — possibly more than a decade(!) — so there will have to be a lot of experimenting and exploration before I figure out everything that will be needed. I want to get the “quick wins” out of the way at the start, then at some point I anticipate having to write new code as part of this project… hopefully just as Textpattern plugins, but there might be some features which need a “bridge” service to get working. I mention in the introductory post some of the areas where I think I’m going to have to write code, but for now, those are all later concerns ?

In the more immediate future, my planned content includes: getting a site ready for IndieAuth, adding microformats to post templates, receiving WebMentions, and possibly implementing post kinds in a manual capacity. If you have any suggestions at all for the site or topics, please do let me know!

Why isn’t the internet more fun and weird? by Jarred Sumner

“MySpace inspired a generation of teenagers to learn how to code. We have Dark Mode now, but where did all the glitter go?”

I may be showing my age here, but I was never on MySpace. That said, this blog post (and the CodeBlog service it’s advertising) reminds me a lot of platforms I do remember, like Tripod and Geocities. Pages were built from raw HTML, and adorned with all sorts of widgets found on places like DynamicDrive and BraveNet. The <blink> tag ran rampant! Early Tumblr had a similar vibe, but look how that turned out.

These early services were places you could experiment and explore until you had the confidence, skills (and cash) to get your own domain name and server. Nowadays anyone can have their own domain and site quickly and cheaply on somewhere like WordPress.com/Blogger, but they are very cookie-cutter and locked down. Even using self-hosted tools like WordPress.org reign-in a lot of the free-form creativity.

One of the reasons I love Kicks Condor is because of how anachronistic and fun it looks; I can easily imagine 15 year-old me, magazine HTML tutorial in hand and full of enthusiasm to learn something fresh and new, creating something similar by accident and having a blast doing it.

By making things easier, more accessible – and safer – it feels like we’ve hidden away the building blocks. It’s harder for people to get at the pieces they need to try their own thing out of curiosity. Can you imagine if LEGO pieces were keyed to only fit a certain way, so you could only build what was shown on the box art?

Shared to IndieWeb.xyz and IndieNews

(Skip to the end for the TL;DR summary)

After an evening of debugging and rewriting sections of the HTML in “K”, I think I’ve fixed the markup and parsing issues I mentioned yesterday.

It turns out that X-Ray, the parsing engine used by IndieNews, Aperture, and probably others, was only finding the sidebar h-card in my markup. The rest of the content was being ignored. I’m not entirely sure why this is, to be honest, but it gave me a place to start.

Working from the (admittedly shakey) basis that if the parser was only going to find one mf2 entity on the page, then I’d want it to be the main h-feed or h-entry… so I started moving around some blocks of HTML and a few classes, and stripped out a few likely redundant pieces of HTML.

This… worked! The feed would show up in the X-Ray output instead of the h-card, and wasn’t all that different in the Pin13 parser compared to yesterday’s results. But it was far from ideal. The authorship information on every feed entry was screwed up; I’d made a change yesterday so only one full h-card was on the page (the sidebar) and followed the recommendation to markup the h-entry author details with u-author instead. Now came the conundrum: do I add back in a dedicated h-card to every h-entry, and by doing so re-break some of the other parsers looking for a single “representitive” h-card? I tried out adding them back in, just to see what happened. X-Ray was still fixed, but IndieWebify.me complained about it, and the IndieWeb Webring still couldn’t work out who I was.

I could have left it here. X-Ray was the main target, IndieWebify might not have liked it but could at least still see some details, and IndieWeb Webring was a “nice to have” in a way. But truth be told, it would have nagged at me. What if these “minor” issues were the proverbial canary? I want to achieve the widest possible compatibility now, to reduce potential issues at a later date.

It was around about this point that I remembered that an h-feed itself could have its own embedded h-card, which could potentially solve the issue. After moving my ‘h-feed’ class to the body element, instead of the main I’d been using up to then (so now it would use the sidebar h-card to represent the feed), it more or less did solve the issue.

It threw me at first that X-Ray didn’t list a separate h-card item like Pin13 did, but instead used the feed h-card for the authorship of every nested h-entry. Removing the now redundant author h-card from the entries stopped IndieWebify from grousing about these multiples. Oh, and here’s my new profile page on the IndieWeb Webring. Even my test microformat-based feed in Aperture/Monocle started displaying posts almost immediately after applying the change.

So, TL;DR: I moved my main h-card inside the h-feed, instead of it being a distinct entity on the page. By doing so I fixed pretty much all of the microformat parsing issues I was experiencing, which means “K” has taken a big leap forward… and I can stop pulling my hair out ?

Shared to IndieNews (maybe) and IndieWeb.xyz.

I’ve been chipping away at several things over the last two weeks, mostly focussing on markup, presentation, and theme file organisation. I want to get these finalised before I look at theme customisation options. If you’ve visited the home page, you might have noticed the display of certain post types has been evolving, as I search for a pleasing balance of information, appearance, and not overwhelming a visitor with a wall of text. I don’t think I’m quite there yet, so expect a few more iterations. My current thinking is to treat the home page a bit like an “activity feed,” where action-type posts such as Likes are displayed in summary manner to give more emphasis to the written posts.

Of course, if you’re subscribed to the site RSS or JSON feeds in a reader of some description, you’ve probably not seen any difference!

The most challenging issue I’m facing is the markup of posts and other page elements to be compliant with the specs of h-entry, h-card, and the various post kinds such as: Like, Bookmark, Reply, Repost, and so on.

Everytime I think I have the markup nailed down, something comes along to show me it’s broken in some way. I liked a post on Aaron’s site earlier, and instead of showing as the like I intended it became a regular webmention showing my avatar as a photo, as I’ve clearly messed up the h-card and u-like-of markup in the last round of edits. So sorry to Aaron for mistakenly filling his responses with my face! The Pin13 parser shows the right elements as being present, but IndieWebify.me and Webmention.io both fail to pick them up. I’m guessing it’s an issue with how I’ve nested things, and/or some stray classes from previous experiments that I’ve not tidied up? I’ll try to get some time to look into it more tonight.

For other – minor – examples, IndieWebring also refuses to pick up my representitive h-card, even though IndieWebify.me tells me I have this setup correctly. Aperture doesn’t seem to pick up anything other than my h-card when I use the microformats feed instead of RSS or JSON.

If the markup isn’t right then IndieWeb features are unlikely to work correctly – so fixing this is key for an “IndieWeb integrated” theme.

As an aside, and while I’m on the subject of frustrations, I’m having a hell of a time with the Webmentions plugin. Most of the time it feels like they just don’t get sent, as I frequently have to manually ping sites (such as with the earlier like post). There’s a chance this is related to the above markup issues; if the receiving site can’t parse the post that mentioned it, it might just throw the mention away? That feels like a bit of a stretch though.

I need to come up with a better way of testing these things, rather than “just give it a try on here and see if it’s worked or not…”

But anyway, “K” is progressing, even if it sometimes feels like one step forward/two steps back. I’d hoped to have a proper “release” ready for some time in February, but at the moment I think March or April are more likely. I’m only getting an hour or two a week to tinker at the moment, and I know I’m going to be busier with other things in February.

Syndicated to Indieweb.xyz and IndieNews (hopefully!)

Updated to add – IndieNews still doesn’t like my site. “Error: no_link_found”, every time.

I just had a weird issue where Cloudflare was blocking Bridgy from syndicating posts from my site.

Attempting to syndicate from either my WordPress editor, or the Bridgy user page would result in an error like this:

.

Now, I’ve never consciously set anything to say “don’t let Bridgy access my site,” have few settings turned on, and haven’t logged in to Cloudflare in months, so it felt like it must’ve been that some rule update on the Cloudflare side that started flagging the requests as potentially malicious. Unfortunately, Cloudflare’s settings are rather opaque – especially on the free tier. More annoyingly, the “Ray ID” in the error didn’t match anything in the limited logs I do get access to.

But, I’m nothing if not persistent… after a bit of trial and error – switching things off and testing again with Bridgy – and I was able to track down the culprit setting, in the “Scrape Shield” section of the control panel, labelled “Server-side Excludes”:

With this turned off, Bridgy could syndicate my posts again.

I’m starting to wonder if this setting is a contributing factor to the issues I’ve had where Webmentions and associated posts like Replies, Likes, and others seemingly haven’t worked? Perhaps someone with more experience with Cloudflare or the various IndieWeb tools could shed some light?

At the very least, I hope this post saves someone a bit of head-scratching if they suddenly find their Bridgy integration stops working.

Shared to IndieWeb.xyz.

I had the need to change the status on several hundred wordpress posts by a particular author, from “publish” to “pending” (more on this in a future post). This would have taken me hours to do through the frontend, so I figured I’d make my first serious use of WP-CLI, and script the job.

You can list posts using WP-CLI, and specify which columns to display, and even pass in basic filters, like so wp post list --<column>=value --fields=ID,post_title,post_status,post_author. You can also update posts. By combining these with some shell scripting, big jobs can be done fairly easily.

Easily. Oh, the hubris. The problem I ran into was:

  • The display column names are the names of the columns in the database, so to list the post author, you would refer to it as post_author.
  • The filter column names are as they are referred to in WP_Query, not how they are named in the database.

I didn’t catch on to this distinction at first, and the number of rows I was returning was large enough it couldn’t display all of them in the terminal. Yes, I should have used less to check. I should have done a lot of things, like take a backup first (wp db export ~/export.sql), but that wouldn’t be as good a cautionary tale.

Long story short, I ran wp post list --post_author=3 --fields=ID,post_title,post_status,post_author, saw only the results I expected because some rows were cut-off. When I fed this into a loop which would update the post_status, I ended up setting every post as pending.

wp post list --post_author=3 --format=ids \
| xargs -d ' ' -I % wp post update % --post_status=pending

The correct command should have been

wp post list --author=3 --format=ids \
| xargs -d ' ' -I % wp post update % --post_status=pending

Thankfully, having realised my mistake, I could make use of WP-CLI to fix it:

wp post list --author=2 --format=ids \
| xargs -d ' ' -I % wp post update % --post_status=publish

For everyone following along at home, my mistakes so-far were:

  • Not reading the documentation fully
  • Not taking a backup before altering a live site
  • Not double-checking my test results before running the command “for real”

I’ve returned all of the wrongly-pended posts to “publish” status. I do still have an issue with Post-Kinds data being missing on most of these posts; I think this is due to some wierd interaction between WP-CLI and the plugin, but I can’t be sure. These posts (~60) I’m going to have to fix by hand — I consider it a reprimand for my earlier flippant approach!

Cross-posted to /en/wordpress.

I’ve been chipping away at K as time allows over the last week. It’s still a long way from where I’d like it to be, but it’s getting there…

  • All theme files should be compliant with the WordPress Coding Standards, apart from a few instances where I’m planning to rewrite what’s there.
  • I’ve made little tweaks here and there to the markup output by the theme, and plan to revisit this continually. I made a test post to indieweb.xyz, but it didn’t quite parse correctly last time. This post should also be submitted – fingers crossed it goes better this time! I’m also curious if IndieNews posting will be more successful.
  • Files have been refactored (albeit not yet fully reorganised), with a goal of splitting up what was a growing, monolithic functions.php into smaller logical chunks.
  • I’m wrestling with how to handle all of the different kinds of posts the theme will support, from a markup and display point of view. My biggest headache at the moment is the treatment of post titles. I might write another post on this topic.
  • I’ve been working on making plug-in support more optional than I had it at the outset. I make heavy use of Post Kinds and other IndieWeb plug-ins, but don’t want the theme to necessarily rely on them.
  • Oh, and the source code is now available on GitHub, in the spirit of “selfdogfooding“. I came to the realisation there wasn’t anything to be gained by holding the code back, and I even ran the risk of never releasing anything if I waited until it was “ready.”

I’m learning quite a bit through this exercise, which is great. It’s reinvigorated some of my love of code tinkering; I’m finding that some evenings I’m more keen to sit down at a keyboard than I am to sit at my hobby station, which is something that’s not happened in a long time!

Update 09:26 – IndieNews submission is still failing, unfortunately. Indieweb.xyz seems to be working, but I had to force a Webmention.

I mentioned before the festive break that I was thinking about open-sourcing “K”, the custom theme I’ve been developing for this site. Since then, I’ve decided I’m going to do it, but I’m going to work to tidy things up beforehand. Some of this has already happened, some of it is yet to be done. For a bit of fun, I’m going to [try to] blog about it whenever I make some progress ?. All-in-all, I’ve identified three main themes I want to focus on before the intial public commits.

My first job is to make the theme more “generic.” As I mentioned, the theme has been very much a hacking together of what I’ve needed, as I’ve needed it. This means a lot of it isn’t as customisable as people expect a modern WordPress theme to be. For example:

  • The site logo is an embeded SVG, rather than an image that can be swapped out in the WordPress Customiser.
  • The sidebar was, until recently, entirely hardcoded HTML.

I’ve made some progress here – there’s now a “widget area” in the sidebar – but my custom author h-card is still mostly manual (although it does use a WordPress menu for the social profile links). I think I’m going to recreate this as a bundled widget. I could try using the IndieWeb h-card widget, but I liked having the flexibility of my manually crafted card, and the IndieWeb version doesn’t support multiple profiles at the same service.

The second main focus is going to be standards support. I want the markup to be as fully compatible with MF2 and structured data as possible. I’ve spent hours debugging this so far, and I think I have it mostly sorted. IndieWebify.me picks up everything I expect it to, and every parser/validator I’ve thrown at the different pages and types of content have come back correct to my eye. For some reason, IndieNews hasn’t liked any of my submitted posts, but that’s lower priority for now. I haven’t done much with marking up elements like comments, but the main page/blog post/author details seem to be correct.

Finally, the third focus is on the code quality and maintenance. This loops back to the customisability/flexibility theme as well. By its cobbled-together nature, “K” has been a bit… loose in the quality of the PHP code, and the frontend files were/are a nightmare to maintain. Up to now I’ve used a hacked to pieces copy of Bootstrap with a bunch of customisations on top to provide the layout framework (literally just the rules I needed, obtained through UnCSS), and a similarly cutdown set of FontAwesome icons. That’s fine for my use case – even if it has been a faff to add to the site – but it won’t work for other people.

I’ve started adding a build system for these frontend files, but it does mean I’m probably going to have to include the entirety of the minimised version of Bootstrap, and the full FontAwesome SVG sprites. Unless someone has a good suggestion? Unstyle has a CLI tool, but integrating that is probably a step beyind what’s needed for the moment. I haven’t added FontAwesome to the live site yet, but this page should be using the new style.css that’s been compiled from SCSS.

On the PHP side I’ve started making sure it conforms to at least the WordPress Coding Standards. There’s still a few files to update, but functions.php and most of the template files are done. After that I want to make sure everything is as modular as possible. I’ll need to add files to handle the various post-types, error pages, and other screens a more rounded theme would handle. I’ll also be bundling a selection of Post-Kinds templates, once I figure out how I want to display them on this site.

There are other things that will need done no doubt, but these are where I want to focus my efforts for now.

Not all of them need to be fully completed before “K” gets open-sourced, but I would feel a lot more comfortable if at least the first steps were taken along these paths. It is a little dependent on having enough free-time, but I’ve set a goal of uploading to GitHub by the end of the month.

If you have any suggestions, or other feedback, please do let me know — either as a comment below, or on your own site.

I published my first POSSE post earlier today, so I could see how well it works syndicating to Twitter. POSSE (Post on Own Site, Syndicate Everywhere) is a key tenent of the IndieWeb, but something I’ve never quite got working properly when I tried previously.

Things still need a little tweaked, and I won’t be syndicating every post, but ultimately I think it turned out OK. After a bit of to-and-fro with Brid.gy, my status post was posted to Twitter, and a like from one of my followers showed up on this site.

I’m not sure if I’ll want to include a link back to the site or not. The first post included a source link, but in my view it looks a bit odd on Twitter. I’ve turned source links off for the time being, and I’ll see how I get on.

Now, if I could just get OwnYourGram to start working properly…

I’m not one for New Years resolutions, but I wanted to set out a few hobby-related goals for 2019. The main driver for these is to clear some of my backlog, and also to let me play some games of Warhammer 40,000 for the first time since near the end of 7th Edition.

  • Finish Knight Household
    • 3x Questoris
    • Castellan
    • 6x Warglaives
  • Finish Adeptus Custodes Battalion
    • 3x Guard squads
    • 2x Vertus Praetor squads
    • 1x Terminator squad
    • Characters
  • Finish Adepta Sororitas Battalion
    • 3x battle squads
    • 2x Cannoness
    • Imagifier
    • Seraphim squad
    • <stretch> Celestine + Geminae

To achieve this, I think I’m going to have to cut down on the number of one-off miniatures and competition entries I paint.

As I’ve been experimenting more with IndieWeb ideas on this site, I’ve been kicking around the idea of open sourcing the custom theme I use to power this site (currently called “K”). Part of this is from a desire to start sharing useful code again. I haven’t really put anything out there in years now. Once upon a time, long before the rise of Github, any code I wrote for myself would at least have ended up as a downloadable .zip file.

The other reason I’ve been giving myself, is to add to the pool of MF2-compatible themes available, in an effort to give people more options for deploying Indieweb sites. Right now, the Indeweb wiki only lists a handful of themes as compatible out of the box, so the more that can be added, the better it will be for growing the community.

The thing is, the theme is very much not ready for other people to lay eyes on, in its current state:

  • I (currently) do a bunch of non-standard things under the hood.
  • I’m also not doing a bunch of theme “best practices”. Simply because I’ve not needed to.
  • I’ve not really cared much about testing in browsers beyond the ones I use day to day.
  • A lot of the code has been cobbled together as and when I’ve needed it, so there are loads of “standard” features straight-up not implemented.
  • There’s a tonne of things hard-coded specifically for me. Those would have to be stripped out or altered to be configurable. That’s more code I’d have to write.
  • I’ve hacked up a bunch of dependencies, in the name of optimisation for my own needs. A public release would need to include the full code of these dependencies, or it’ll severely restrict anyone who wants to use the theme.

All in all, there’s quite a lot to do to make the theme usable by anyone who isn’t me. My natural instinct is to hold it back until it’s “ready” but as I’ve been typing this out, I’ve been wondering if I should just go ahead and put the code on Github anyway?

I’ve been thinking about what I’m going to work on, now I’ve got past Armies on Parade. The last few weeks have been a hobby holiday so I could recharge and avoid burnout, but I’m getting to a point where I can feel a pull towards my workspace again. I’ve had a few ideas kicking around my head, along with several projects I could revisit. In the “revisit” category, I’ve got:

  • Idoneth Deepkin; I have some Eels, a Shark, and a King still waiting to be added to the small army I painted earlier in the year. I also have a few Daughters of Khaine models to add as Allies.
  • Adeptus Custodes; I’ve got a bunch of Custodian Guard built and primed in gold, just waiting for me to get the spark of inspiration again. Then I’ve got some bikes, Terminators, and a Dreadnought to build.
  • Adepta Sororitas; at the end of last year I picked up some of the old metal Sisters of Battle sculpts, which I planned to be a companion to the Custodes. With the beta Codex coming in Chapter Approved next month, it might be time to get them back on the painting table.
  • Dark Angels; I’ve been slowly chipping away at the mass of non-Primaris Space Marine kits I have stockpiled over the years by painting them as Dark Angels. I painted a couple of 5-man Tactical squads and Razorbacks last year, and it might be time to finish these to the point they’re usable on the table.
  • Alpha Legion/Deathwatch; I had an idea when Kill Team came out, that I would create a highly customised Alpha Legion warband, using Primaris bodies and the Deathwatch rules. I made a start, but Armies on Parade ended up being more work than I’d anticipated. A lot of the kits I’d acquired for this project ended up going into the Armies on Parade project as well.
  • Death Spectres; I still have plans to expand the army I started in Armies on Parade. I want to fill out at least a battalions-worth of models, so this project needs another troop choice and HQ to reach that goal.

None of these are particularly grabbing me right now. The most likely to get worked on are actually the Dark Angels, as my local GW store is looking for 1000 points of Dark Angels to display in their cabinets. By painting up three Ravenwing units I already have, I could get to that target pretty easily. But I just finished painting a bunch of black-armoured Space Marines, so I can feel my brain resisting.

Over on the new ideas side, there are:

  • Stormcast Eternals.
  • Nighthaunt.
  • Imperial Knights.
  • Various “competition pieces.”

At the moment, I’m leaning very heavily to Knights. I have accumulated three kits over the years, but have never got around to doing anything with them. The thought of having a “grab and go” army of just three-five models definitely appeals to me, and painting such large models would be a great change of pace. I’m in two minds whether I’d want to go with the fairly realistic, heavily weathered style I often apply to large vehicles – or to go with something simpler and cleaner. I’d also like to do some minor conversions and reposing, but I don’t know if that’s just setting myself up for a lot more work than I’m looking for.

Both of the Stormcasts and Nighthaunt ideas are really just painting the lovely models from the Soul Wars box. I’ve had an idea for applying more of a heraldic look to the Stormcasts, but I haven’t nailed down all of the details yet. I might save them for Armies on Parade 2019.

Competition entries is as it sounds. I have at least two competitions pencilled in for the next nine months, and it might be a good idea to make a start on these. I have one firm idea for the second contest, that will take quite a lot of effort, and a couple of secondary ideas where I know what I want to paint, just not how. I might start chipping away at my most developed idea, and leave the others for now. There’s also a themed monthly competition that happens in my area, so sometimes I’ll want to take part at those.

So as you can see, I’ve got a lot of choice! In fact, it’s too much choice, really, and choice paralysis has been kicking in something fierce. At this point I’m 80% sure I’ll start on some the Knights, as those seem like win-win: clearing something from my backlog, and being a viable army with only a few models needed.

But as any GW hobbyist knows, there’s always something new and shiny on the horizon to distract us…!