Slides for A Twitter of Our Own from OERxDomains 2021

As promised at the conference, you can find the slides with convenient links and other resources for my talk A Twitter of Our Own at OERxDomains21 on Google Slides.

They are also embedded below:

Glenadale Unified allowing students back on campus in a limited schedule

About a year ago Glendale Unified School District (GUSD) returned from a long two week Spring break. The second, unplanned week of vacation was extra preparation time for teachers to get ready to do remote learning in response to the pandemic.

Today, nearly a year later to the day, GUSD is starting to welcome students back to campus. They’ve given the parents the choice to send their children back to campus through the end of the year, presuming there are no flare ups of the coronavirus.

Today they’re dramatically changing their schedule and welcoming back portions of kindergarten through third grade students. Fourth through sixth grades will be invited back in a few weeks. 

Students returning to campus are broken up into two groups. One will be on campus on Monday/Tuesday and the other on Thursday/Friday. Everyone will be remote on Wednesdays (presumably with room cleanings between the groups). Synchronous instruction will be from 8:20 AM to about noon and remote, asynchronous instruction will go until about 2:30 PM. About 55-60% of students have apparently opted to be back on campus and that number broken in half will leave about 30% of a grade class in physical attendance for their two days a week.

If I recall correctly, about two weeks ago the CDC changed their guidance for children and decreased the social distance recommendation from 6 feet to 3 feet. I’m not sure if GUSD is following this new recommendation.

Evie’s fourth grade Japanese dual immersion class was broken up between her tortoise (カメ ) group and the cranes (鶴(つる)). They’ve now been reshuffled and renamed the “roomies” and the “zoomies” depending on whether their groups will be attending in person or remotely, respectively. Evie will be a zoomie for the remainder of the school year.

While it might be nice for more socialization and a change in routine, it seems far easier and less stress with our routine to simply stay remote for the balance of the school year. There were likely to be only 15 or so days that she would attend in person given their structure and schedule. Erring on the side of caution, and a bit on convenience, remote seems a better option until the fall when a higher proportion of people are vaccinated.

Hypothes.is as a comment system: Receiving @​mentions and notifications for your website

I’ve wanted @mention/Webmention support on Hypothes.is for a long time. I had URL hacked my way into a solution a while back but never wrote about it.

I was reminded today that one can subscribe to an RSS/ATOM feed of annotations on their site (or any site for that matter) using the feed format https://hypothes.is/stream.rss?wildcard_uri=https://www.example.org/* and replacing the example.org URL with the desired one. Nota bene: the /* at the end makes the query a wildcard to find anything on your site. If you leave it off you’ll only get the annotations on your homepage.

If you’re using Hypothes.is in an off-label use case as a commenting system on your website, this can be invaluable. I recall Tom Critchlow and CJ Eller trying this out in the past.

To go a step further, one can also use this scheme to get a feed of @mentions of their Hypothes.is username too. If I’m not mistaken, based on some preliminary tests, this method should work for finding username both with and without the @ being included.

These are a few interesting tidbits for those who are using Hypothes.is not only for the social annotation functionality, but as a social media site or dovetailing it with their own websites and related workflows.

A reflection on annotations and context at OLC Innovate & Liquid Margins

It’s fascinating to look back on the Langston Hughes’ “Theme for English B” that a group of us annotated this morning in the context of exploring Hypothes.is as part of OLC Innovate and Liquid Margins.

Reviewing over some notes, I’m glad I took a moment to annotate the context in which I made my annotations, which are very meta with respect to that context. Others’ annotations were obviously from the context of educators looking at Hughes’ work from the perspective of teachers looking back at an earlier time.

I’ve just gone back and not only re-read the poem, but read through and responded to some of the other annotations asynchronously. The majority of today’s annotations were made synchronously during the session. Others reading and interpreting them may be helped to know which were synchronous or asynchronous and from which contexts people were meeting the text. There were many annotations from prior dates that weren’t in the cohort of those found today. It would be interesting if the Hypothes.is UI had some better means of indicating time periods of annotation.

Is anyone studying these contextual aspects of digital annotation? I’ve come across some scholarship of commonplace books that attempt to contextualize notes within their historic time periods, but most of those attempts don’t have the fidelity of date and timestamps that Hypothes.is does. In fact, many of those attempts have no dates at all other than that they may have been made +/- a decade or two, which tends to cause some context collapse.

Crowdlaaers may provide some structure for studying these sorts of phenomenon: https://crowdlaaers.org?url=https://www.poetryfoundation.org/poems/47880/theme-for-english-b. It provides some time-based tools for viewing annotations to help provide context. Looking at it’s data, I’m particularly struck by how few people today took advantage of the ability to use taxonomies.

As always, it was fun to see and hear about some uses of annotation using Hypothes.is in the wild. Thanks again to Nate Angell, Remi Kalir, Jeremy Dean, and all of the other panelists and participants who spoke so well about how they’re using this tool.

Altadena Library zines and “Books I’ve Loved in 2020”

I just put a handful of copies of Altadena Library‘s new zine Books I’ve Loved in 2020 into our Little Free Library for the neighborhood to enjoy. I’d gotten a preview copy a week ago and loved it.

In addition to our neighborhood LFL, you can find it at the local branches of the Altadena Library (they just re-opened for curbside pick up today) and at select Little Free Libraries around Altadena.

If you love zines, they’ve got a collection of others to check out. They’ve also been hosting a regular zine workshop on the third Saturday of the month. You should be able to pick up a zine kit for the next meeting, which I’m hoping to attend. Maybe I’ll put together a zine featuring some of our local neighborhood Little Free Libraries?

A Twitter of Our Own

A workshop proposal for the Domains Track of OERxDomains21 Conference in April 2021

Corporate social platforms extract a heavy and often hidden price from teachers and students. Lack of privacy, encouraging abuse, context collapse, and surveillance capitalism are a few of the harms we face. They also expose us to a wider variety of publics than we would choose in which to practice and share our learning.

We must take back ownership and control of our content and interactions online (Çelik 2019). This hands-on workshop will help those with domains of their own expand them into healthier and safer communication tools.

This session will be code-free. It’s presented at the level of a person who is able to log into their site, write a post, and publish it.

We’ll outline and install WordPress* plugins (IndieWeb 2021) to allow participants to make the open web their learning network. Participants can use their extended domains in classrooms, with personal and professional learning networks, or in their daily lives. We encourage more technical participants to partner with others for help. Community-based support is available following the conference.

When we’re done, participants should be able to:
– subscribe to each others’ websites;
– read subscriptions in a social reader (Parecki 2018);
– reply to posts by publishing on their domains using open standards (Parecki 2017a);
– send notifications to each other (Aldrich 2018) using open standards (Parecki 2017b).

The session will end with questions and discussion. We’ll focus on how to use our domains in ethical ways that enable an atmosphere of care. We want to ensure this system and its use don’t re-create the toxicity of the platforms it replaces.

Participants will leave with resources for how they might extend their independent network. Our domains can also interact with other social media using these new tools.

* This session will focus on WordPress as an example platform. We’ll provide resources for people using other content management systems. Everyone should be able to follow along, ask questions, and take part, either in real time or with follow up after-the-fact.

To the extent possible, the materials, resources, and video generated will be shared on the author’s domain with a CC0 license. Syndicated copies will be available on the IndieWeb.org community wiki and the Internet Archive.

References

Aldrich, C. (2018) “Webmentions: Enabling Better Communication on the Internet.” A List Apart. https://alistapart.com/article/webmentions-enabling-better-communication-on-the-internet/.

Çelik, T. (2019) Take Back Your Web. Beyond Tellerrand 2019. https://vimeo.com/336343886.

IndieWeb. (2021) “Getting Started on WordPress – IndieWeb.” Wiki. [online] Accessed February 9, 2021. https://indieweb.org/Getting_Started_on_WordPress.

Parecki, A. (2018) “An IndieWeb Reader: My New Home on the Internet.” [online] Aaron Parecki (blog). https://aaronparecki.com/2018/04/20/46/indieweb-reader-my-new-home-on-the-internet.

———. (2017a) “Micropub.” The World Wide Web Consortium (W3C) [online] https://www.w3.org/TR/micropub/.

———. (2017b) “Webmention.” The World Wide Web Consortium (W3C). [online] https://www.w3.org/TR/webmention/.

License

CC0
To the extent possible under law, Chris Aldrich has waived all copyright and related or neighboring rights to A Twitter of Our Own: A workshop proposal for the Domains Track of OERxDomains21 Conference in April 2021. This work is published from: United States.

Insurrection aftermath: Don’t absolve yourself

After watching many Republicans on the Sunday morning shows and hearing a few on the radio this morning, I notice that they’re actively preferring only one or two of the three solutions after Wednesday’s insurrectionist coup attempt.

Three options

The three broad options that everyone is talking about:

  1. Trump resigns
  2. 25th Amendment removal of Trump
  3. Impeachment in the House possibly followed by conviction in the Senate

Generally Republicans are looking more closely at options one and two (in that order) and then they’re immediately shifting the discussion to the appalling nature of the events themselves.

The important question we need to ask ourselves is why are they preferring resignation or the 25th amendment? The answer comes down to who is actively receiving the blame and who has to actively do the work to make the system function properly.

In option 1, Trump and Trump alone takes the blame and initiates the action. This lets all his Republican supporters off the hook for allowing him the bullying free reign he’s had for more than four years now.

Presently the chance that Trump resigns is hovering around zero because he is so loathe to smear his own reputation or take responsibility for anything. Resignation is too closely associated with the idea of being a “loser” which Trump cannot admit himself to be at any cost.

In option 2, Trump still takes the blame and only a small handful of primarily un-elected leaders needs to take the action.

As we’ve already seen this past week, cabinet members are either still too loyal to Trump, or have chosen to jump ship to save themselves rather than take the necessary proactive action against him.

In option 3, Trump takes the blame, but a large number of people need to take action. While almost all Democrats and a handful of Republicans can easily take this route, some Republicans are loathe to want this option.

In particular, most Republicans won’t want to take this route because it also means that they must take some of the blame for so actively supporting Donald John Trump’s lies and views for so long.

Responsibility

Not a single Republican I’ve seen was willing to take even an iota of responsibility for supporting Trump, his outright lies, racist policies, or insanity for the past four+ years much less the last two months. Two months in which they either actively supported his lies that the election was stolen or supported it with their acquiescence by silence.  They’re still abjectly holding to the belief that the emperor is fully dressed, while only trying to admit that he’s taken off one glove. They may not want to say it but they know better.

We need to be able to admit that the Emperor is naked and that far too many of us are only half dressed at best. We need to ardently press for all three solutions to happen. We also need to advocate for a fourth option that requires sanctions of the members of congress who voted to continue to support the lie even after the insurrection.

To be the Americans we say we are or want to be, we need to hold power to account. We can’t leave the message that a future leader can do the same thing and get away with it. We need to admit our complicity in allowing Trump to pretend to lead us. We cannot absolve ourselves of responsibility.

We can’t absolve ourselves without true penance

If you’re still unsure of why we cannot absolve ourselves (and honestly even if you aren’t), then I highly recommend reading a short Twitter thread/essay from earlier this week by Lili Saintcrow. It’s a highly illustrative parable about what has been going on in America and why it continues.

Her thread starts here:

And for those who don’t click through, I’ll excerpt two tweets in the thread which are very important to her searing point:

Domestic abusers, white supremacists, and religious bigots all operate off the same thin but very useful playbook that exploits other people’s politeness and (I’ve got to say it) “civility.”

“Obama was born in Kenya.” “She provoked me, I had to hit her.” “Biden’s followers stormed the Capitol.” “It was Antifa.” “I thought that black child was going to shoot me.” These are all the same species of lie, and they serve the same purpose–to absolve the speaker.

Republicans (and let’s be honest, really all of us) are going to have to individually and collectively do some very hard work here, take responsibility, and stop attempting to absolve ourselves.

Without it, we’re just repeating the mistakes of ending Reconstruction after the Civil War which ushered in the despicable Jim Crow laws and have kept our nation mired in racist ideas and racist policies. If we’re not careful we’ll be heading back to an actual and far more costly Civil War. Let’s take this opportunity to admit our mistakes and actually move forward.

We all deserve better. We all need better. We all require better.

We should all demand better.

Bore Dydd Calan

This somehow seems appropriate during a pandemic

Dydd calan yw hi heddiw,
Rwy’n dyfod ar eich traws
I ‘mofyn am y geiniog,
Neu grwst, a bara a chaws.
O dewch i’r drws yn siriol
Heb newid dim o’ch gwedd;
Cyn daw dydd calan eto
Bydd llawer yn y bedd.

Ronald Hutton in The Stations of the Sun: A History of the Ritual Year in Britain (2001-02-0) as an example of a Calennig rhyme from 1950s Aberystwyth.

Automating syndication of reply contexts in Twitter Cards using OGP metacrap and plugins in WordPress

A Metacrap Problem

It’s metacrap–I know, I know–but I’ve been thinking about easy ways to use Open Graph Protocol meta data to add contextual Twitter cards to some of my content when syndicating posts to Twitter. My goal is to leverage the speed and ease-of-use of Micropub clients while doing as little as possible manually, but achieving as much parity between posts on multiple sites. 

I’m particularly keen to do this to syndicate/share more of the articles I read and post about on my site without adding additional manual work on my own part.

Outline of Some Resources

The Post Kinds plugin for WordPress parses URLs for me and pulls in data to create reply contexts for a variety of posts like bookmarks, reads, watches, listens, etc. Since Post Kinds doesn’t display featured images (yet), I’ve also been using the External Featured Image plugin to display the featured images from the original to add to the reply context of my posts as well. 

In addition to all these I’ve been using the All in One SEO plugin to easily add an SEO layer to posts without having to do much thinking about it. AIOSEO recently upgraded their UI and features in the last year, and yesterday I upgraded to the newest v4.0+. One of the new features it’s got is the ability to add default fields or pull in pre-existing custom fields to output OGP meta data. 

Start of a Solution

So I got the idea that since Post Kinds and External Featured Image plugins are pulling in and displaying the sort of data I’d like to show in Twitter cards, I figured why not use them? While metacrap is a DRY violation, the fact that it’s automated for me and is based on data I’m actually showing visually on my website makes it feel much less dirty. It also has the benefit that it helps make some of my syndicated content look and feel on Twitter, more like it does on my website. This is also a problem since Twitter hampers how much data I can syndicate in a single post.

I’ve still got some issues about how to deal with the Post Kinds data, but after a bit of digging around, I discovered the image URL for External Featured Image plugin is hiding in the _dcms_eufi_img field. So I can make the default Twitter settings in AIOSEO pull the external image by setting Default Post Image Source to Image from Custom Field and set the Post Custom Field Name to _dcms_eufi_img

Since a lot of my posts are reads, bookmarks, etc., this works well, but I can easily override the settings for articles or other custom posts which I make less frequently. 

Hopefully I can figure out the settings for Post Kinds to get the rest of the default fields to map across. I’m happy to hear ideas on what field names I’d need to use to get the Post Kinds Name and Summary/Quote fields to map over for the og:title and og:description respectively. Ideally I can manage to get it done without needing to get a subscription to the pro version of AIOSEO which also has support for custom taxonomies which is how Post Kinds works.

Since my theme has relatively solid microformats support, and I have plugin infrastructure to allow easy syndication from my website to Twitter through micropub clients, this last bit for creating Twitter reply contexts helps close some of the loop for me in my syndication workflow while keeping as much context across platforms.

Example

Here’s a visual example of a native post on my site and the corresponding syndicated copy on Twitter. There are some differences, mostly because I don’t have as much control of the appearance on Twitter as I do on my own site, but they’re about as close as I can get them with minimal work.

screen capture of a tweet with my thought at the top and a Twitter card underneath it including the reply context of the article I'm responding to

screencapture of a read post on my website for a Slate article with a reply context at the top and my response to it just below

Non-technical IndieWeb: Fun, Creativity, Community, and “Content”

I resemble that remark.

rakhim
–Credit: Rakhim

Um…

Er… I mean…

I resent that remark. 😉 

The point of having a website is putting something interesting on it right?

The IndieWeb wiki does tend toward the technical, but many of us are working toward remedying that. For those who haven’t found them yet, there are some pages around a variety of topics like poetry, crafts, hobbies, music, writing, journalism, education, and a variety of other businesses and use cases. How we don’t have one on art (yet) is beyond me… Hopefully these might help us begin to use our sites instead of incessantly building them, though this can be a happy hobby if you enjoy it.

If you’ve got an IndieWeb friendly site, why not use it to interact with others? Help aggregate people around other things in which you’re interested. One might interact with the micro.blog community around any of their tagmoji. (I’m personally hoping there will be one for the stationery, pen, and typewriter crowd.) One might also find some community on any of the various stubs (or by creating new stubs) on IndieWeb.xyz

For more practical advice and to borrow a proverbial page from the movie Finding Forrester, perhaps reading others’ words and borrowing or replying to them may also help you along. I find that starting and ending everything from my own website means that I’m never at a loss for content to consume or create. Just start a conversation, even if it’s just with yourself. This started out as a short reply, but grew into a longer post aggregating various ideas I’ve had banging around my head this month.

Rachel Syme recently made me think about “old school blogs”, and as interesting as her question was, I would recommend against getting stuck in that framing which can be a trap that limits your creativity. It’s your site, do what you want with it. Don’t make it a single topic. That will make it feel like work to use it.

The ever-wise Charlie Owen reminds of this and suggests a solution for others reading our content. 

Of course if building websites is your passion and you want to make a new one on a new platform every week, that’s cool too. Perhaps you could document the continuing refreshing of the process each time and that could be your content?

Of course if this isn’t enough, I’ll also recommend Matthias Ott‘s advice to Make it Personal. And for those with a more technical bent, Simon Collison has a recent and interesting take on how we might be a bit more creative with our technical skills in This Used to be Our Playground.

In any case, good luck and remember to have some fun!

Crediting your own website when syndicating to Mastodon with WordPress plugins

I’ve been tinkering around with methods to automatically syndicate (POSSE) content from my personal website to Mastodon. I’ve been working at making a custom plugin which is far from finished. But a test post I made the other day, caught a few people’s attention[1][2]

I was trying to syndicate from my website so that the post on Mastodon would credit my website for the post and link back to my homepage as the application that made the post. You’ll notice at the bottom of the post there’s the post date and a globe icon, which indicates the post is public, followed by my website name ‘BoffoSocko.com’ and details about replies, reposts, and favorites.

screen capture of a Mastodon post which gives credit to Boffosocko.com at the bottom of the post.

I assuredly won’t release a public plugin for WordPress that does this. But since some have asked how I did it, I thought I’d share some of the internals of a few WordPress plugins that one can quickly modify to achieve the same thing.

That I can currently see, there are three plugins in the repository that will allow one to syndicate content to a variety of Mastodon instances. They are Mastodon Autopost, Mastodon Auto Share, and Share on Mastodon. The first two are closely related and essentially replicate the same codebase.

Similar to using Twitter’s API to crosspost, Mastodon is looking for two bits of information when an application is registered: a client name and a website URL. 

Mastodon Autopost and Mastodon Auto Share, both have a file called client.php which define these two variables. 

public function register_app($redirect_uri) {
  $response = $this->_post('/api/v1/apps', array(
    'client_name' => 'Mastodon Share for WordPress',
    'redirect_uris' => $redirect_uri,
    'scopes' => 'write:statuses write:media read:accounts',
    'website' => $this->instance_url
  ));

You can edit this file with a text editor to change the 'client_name' from 'Mastodon Share for WordPress' to 'Anything You Want'. If you’re in a joking mood, maybe change it to 'Twitter'?

To change the URL so that the link on the client_name directs to your website, you’ll want to change the line 'website' => $this->instance_url.

In particular change $this->instance_url to 'https://example.com' where example.com would be your website. I’ll note that $this->instance_url on this line in the original plugin is a bug. If left alone, it points the URL to your home Mastodon instance instead of to the more logical https://wordpress.org/plugins/autopost-to-mastodon/ where the plugin lives. 

If you prefer using Jan Boddez‘ excellent plugin, you’ll want to do something similar, except in that case you’ll want to change a file named class-options-handler.php in the includes folder.

Here you’ll want something like:

'client_name'   => __( 'Example.com' ),

But note that Boddez doesn’t have a similar bug, so the website line

'website' => home_url(),

is already correctly defined so that your website will automatically be linked without any changes to it.

If you’re already using one of these plugins and manually modify them, note that you’ll probably need to re-authorize the plugin so that the changes propagate.

Browser Bookmarklets for Giving Credit

I’ve been thinking more lately about giving credit on my own website, particularly in cases where the context of things I’m reading has some additional context based on where I originally saw them. I’d also like to give people I follow credit as the source by which my own content is aggregated.

Earlier today I tinkered around with some ideas relating to the old Curator’s Code which I revisit from time to time. I outlined some details, data fields, UI, and some pseudo-code to actually build it into a WordPress plugin. Then I thought I ought to check the repository where I discovered that someone had previously made one. Unfortunately it was withdrawn from the repository. I suspect its that they didn’t want to continue to support it moving into the Gutenberg era. (It still works with the classic editor.)

I don’t give credit on my site often enough in large part because it isn’t an easier thing to do when quickly posting some of the smaller bits of content. They say “manual until it hurts“, and doing this has just hurt too much for too long. Toward that end I thought I’d make a couple of quick bookmarklets for cutting and pasting text into my site. It’s not as good as a better custom UI, but it’ll work and could potentially work well for others.

These bookmarklets aren’t any great shakes and perhaps (hopefully?) someone with more JavaScript chops than I have can greatly improve upon them to add or modify some of the bits and automate things a bit better. In particular, I’m sure there’s a way to find the original publication date on a page and pull that data out, but currently I could only figure out how to find the last modified date using document.lastModified because I couldn’t find the other. I’d also prefer to have a way to automatically find the author(s) as well, but JS isn’t my best friend.

Instructions for use

Create two bookmarks in your browser’s bookmark bar. Give them convenient names like “via” and “hat tip” and add the snippets of code respectively into the URL fields. On a site you want to give credit to, highlight the name of the author of the post and click the bookmarklet. You’ll see a pop up for some text which you can then cut and paste into your post to give the credit. You can obviously edit the text if necessary.

If your site supports sending Webmention notifications, then when the post is published, the cited page will get a notification of your post.

Bookmarklet code

Below are snippets of code that the bookmarklets are running (for transparency’s sake).

javascript:(function(){let text=""; if(window.getSelection()!=''){text=window.getSelection().toString()+"\n";}prompt("Press Ctrl+C, Escape","<p><small><cite class="h-cite via"><abbr title="via">ᔥ</abbr> <span class="p-author h-card">"+text+"</span> in <a class="u-url p-name" href=""+location.href+"" target="_blank" rel="noopener noreferrer" >"+document.title+"</a> (<time class="dt-published">"+document.lastModified+"</time>)</cite></small></p>");})()
javascript:(function(){let text=""; if(window.getSelection()!=''){text=window.getSelection().toString()+"\n";}prompt("Press Ctrl+C, Escape","<p><small><cite class="h-cite ht"><abbr title="hat tip">↬</abbr> <span class="p-author h-card">"+text+"</span> in <a class="u-url p-name" href=""+location.href+"" target="_blank" rel="noopener noreferrer" >"+document.title+"</a> (<time class="dt-published">"+document.lastModified+"</time>)</cite></small></p>");})()

Example

Here’s an example of what it looks like on my site:

 Maria Popova with input from Tina Roth Eisenberg in curator’s ǝpoɔ ()

Who will you credit?