Domains, power, the commons, credit, SEO, and some code implications

How to provide better credit on the web using the standard rel=“canonical” by looking at an example from the Open Learner Patchbook

A couple of weeks back, I noticed and began following Cassie Nooyen when I became aware of her at the Domains 2019 conference which I followed fairly closely online.

She was a presenter and wrote a couple of nice follow up pieces about her experiences on her website. I bookmarked one of them to read later, and then two days later I came across this tweet by Terry Green, who had also apparently noticed her post:

But I was surprised to see the link in the tweet points to a different post in the Open Learner Patchbook, which is an interesting site in and of itself.

This means that there are now at least two full copies of Cassie’s post online:

While I didn’t see a Creative Commons notice on Cassie’s original or any mention of permissions or even a link to the source of the original on the copy on the Open Patchbook, I don’t doubt that Terry asked Cassie for permission to post a copy of her work on his site. I’ll also suspect that it may have been the case that Cassie might not have wanted any attention drawn to herself or her post on her site and may have eschewed a link to it. I will note that the Open Patchbook did have a link to her Twitter presence as a means of credit. (I’ll still maintain that people should be preferring links to their own domain over Twitter for credits like these–take back your power!)

Even with these crediting caveats aside, there’s a subtle technical piece hiding here relating to search engines and search engine optimization that many in the Domain of One’s Own space may not realize exists, or if they do they may not be sure how to fix. This technical subtlety is that search engines attempt to assign proper credit too. As a result there’s a very high chance that Open Patchbook could rank higher in search for Cassie’s own post than Cassie’s original. As researchers and educators we’d obviously vastly prefer the original to get the credit. So what’s going on here?

Search engines use a web standard known as rel=“canonical”, a microformat which is most often found in the HTML <header> of a web page. If we view the current source of the copy on the Open Learner Patchbook, we’ll see the following:

<link rel="canonical" href="http://openlearnerpatchbook.org/technology/patch-twenty-five-my-domain-my-place-to-grow/" />

According to the Microformats wiki:

By adding rel=“canonical” to a hyperlink, a page indicates that the destination of that hyperlink should be considered the preferred or definitive version of the current page. This helps search engines avoid duplicate content, and is useful for deciding how to link to a page when citing it.

In the case of our example of Cassie’s post, search engines will treat the two pages as completely separate, but will suspect that one is a duplicate of the other. This could have dramatic consequences for one or the other sites in which search engines will choose one to prefer over the other, and, in some cases, search engines may penalize one site for having duplicate content and not stating that fact (in their metadata). Typically this would have more drastic and averse consequences for Cassie’s original in comparison with an institutional site. 

How do we fix the injustice of this metadata? 

There are a variety of ways, but I’ll focus on several in the WordPress space. 

WordPress core has built-in functionality that should set the permalink for a particular page as the canonical one. This is why the Open Patchbook page displays the incorrect canonical link. Since most people are likely to already have an SEO related plugin installed on their site and almost all of them have this capability, this is likely the quickest and easiest method for being able to change canonical links for pages and posts. Two popular choices for this are Yoast and All in One SEO which have simple settings for inputting and saving alternate canonical URLs. Yoast documents the steps pretty well, so I’ll provide an example using All in One SEO:

  • If not done already, click the checkbox for canonical URLs in the “General Settings” section for the plugin generally found at /wp-admin/admin.php?page=all-in-one-seo-pack%2Faioseop_class.php.
  • For the post (or page) in question, within the All in One SEO metabox in the admin interface (pictured) put the full URL of the original posts’ location.
  • (Re-)publish the post.

Screenshot of the AIOSEO metabox with the field for the Canonical URL outlined in red

If you’re using another SEO plugin, it likely handles canonical URLs similarly, so check their documentation.

For aggregation websites, like the Open Learner Patchbook, there’s also another solid option for not only setting the canonical URL, but for more quickly copying the original post as well. In these cases I love PressForward, a WordPress plugin from the Roy Rosenzweig Center for History and New Media which was designed with the education space in mind. The plugin allows one to quickly gather, organize, and republish content from other places on the web. It does so in a smart and ethical way and provides ample opportunity for providing appropriate citations as well as, for our purposes, setting the original URL as the canonical one. Because PressForward is such a powerful and diverse tool (as well as a built-in feed reader for your WordPress website), I’ll refer users to their excellent documentations.

Another useful reason I’ll mention for using rel-canonical mark up is that I’ve seen cases in which using it will allow other web standards-based tools like Hypothes.is to match pages for highlights and annotations. I suspect that if the Open Patchwork page did have the canonical link specified that any annotations made on it with Hypothes.is should mirror properly on the original as well (and vice-versa). 

I also suspect that there are some valuable uses of this sort of small metadata-based mark up within the Open Educational Resources (OER) space.

In short, when copying and reposting content from an original source online, it’s both courteous and useful to mark the copy as such by putting a tag onto the URL of the original to provide it with the full credit as the canonical source.

📺 Is that a toothpick or a flux capacitor? Oh wait, it’s Google Sheets. | Domains 2019 | Jeff Everhart, Tom Woodward, Matt Roberts

Watched Is that a toothpick or a flux capacitor? Oh wait, it's Google Sheets. by Jeff Everhart, Tom Woodward, Matt Roberts from Domains 2019 | YouTube

Are you looking for low stakes ways to store and display data? Welp, here’s Google Sheets. Do you want to automate all of the boring parts of your job and sip a drink on a beach somewhere? Looks like you owe Google Sheets a beer. Have you ever wanted to build a lightweight full stack application without spinning up an orchestrated Docker container cluster running on AWS using Typescript that has 90% unit test coverage. Well, hold on to your hats, cause Google Sheets is about to hit 88 MPH while keeping your molecular structure intact.

At VCU’s ALT Lab, we’ve used Google Sheets to build educational experiences that range from novel, to complex, to entirely absurd. Brace yourself for temporal displacement and a little but of JavaScript.

There’s some low-level stuff here that could be dovetailed with IFTTT.com to do some simple automation for maybe doing Snarfed’s backfeed problem.

📺 Embedded in the Fabric: Georgetown Domains and the Master’s of Learning, Design, and Technology | Lee Skallerup Bessette, Randal Ellsworth | Domains 2019

Watched Embedded in the Fabric: Georgetown Domains and the Master's of Learning, Design, and Technology by Lee Skallerup Bessette, Randal Ellsworth from YouTube

The mission of the new Master’s of Learning, Design, and Technology program at Georgetown University is “to give our students a deep foundation in the tools and theory of learning design, technology innovation, learning analytics, and higher education leadership, a foundation on which they can create engaging and innovative learning experiences for all students.” Working in and with Georgetown Domains is a key part of this engagement; the students learn about and create their domains during the opening week-long foundations course, and build on it throughout the duration of the degree, ending with a final portfolio on their domain of their work. In between, the students have the option of taking a one-credit course in Domains, as well as showcasing their coursework and projects on the site. For some, their personal Domains specifically and Georgetown Domains more generally have become the subject of their research and study. What this allows is for students to engage directly with the technology, as well as questions of accessibility, privacy, surveillance, and tools. They learn about and apply these lessons as they move through the program, perform and reflect on their research, and build their sites. But most importantly, this allows for students to own their own intellectual property, as well as provide the tools to apply what they have learned in a practical and holistic way. The e-portfolio requirement at the end of the degree highlights this commitment to students’ intellectual property as well as professionalization, while also providing an experimental and reflective space for students to connect their work. This short presentation will discuss curricular examples (Intro week, Domains course, Studio and Studio Capstone) of how Domains has been integrated into the program, sharing some student sites, projects, and portfolios.

Slides

“Domains is a Trojan horse for thinking about ed-tech.”—Lee Skallerup Bessette

Randal Ellsworth uses the phrase “thinking space” to describe Domains here.

📺 Old School Web Hosting at an Anything-But-Old-School University | Domains 2019 | Zach Coble, Ashley Maynor

Watched Old School Web Hosting at an Anything-But-Old-School University by Zach Coble, Ashley Maynor from YouTube

While many universities strive to offer the latest and greatest tech support and IT services to support innovation, at NYU, we’ve found that old school style web hosting fills an important need and service gap for digital pedagogy, digital humanities, and other forms of innovation and creativity on campus. Offered through the NYU Libraries, our simplified, down-to-earth service is easy to manage with a small team and integrates into a larger ecosystem of digital publishing services and support on campus. Come hear about our approach and the strengths and weaknesses we’ve encountered in our three years of offering the service.

A bit dry from my perspective, but this could be interesting to people new to managing a larger Domains project or considering doing so.

Listening to this I’m surprised they don’t have a more institutionalized version of a Homebrew Website Club set up to allow their user base to help each other.

📺 Weaponizing Your Website | Jennifer Hill

Watched Weaponizing Your Website by Jennifer HillJennifer Hill from Domains 2019 | YouTube

There is a war a raging in our cyberworld and it is time for you to join the resistance. Cambridge Analytica stealing Facebook user’s data, white supremacists getting verified on Twitter, and child pornography on Instagram. The list of atrocities continues. We as technologists know the inner workings of social media platforms more than anybody. We see the hypocrisy and the evil of social media platforms in a way that most people do not. It is time for us to awaken from our passivity and take a stance against our corporate social media overlords. Weaponizing Your Website will give you ideas, or ammunition, to fight against our broken social media world. This bootcamp will include learning how to utilize the strongest weapons in your stockpile; your voice and your website. With me, Jenn Hill, a University of Mary Washington student, at the helm I will prepare you for taking up arms and battling the corporate social media tyrants.

Slides

Jenn is only scratching the surface here. Mike Monteiro just wrote the entire book on this. He makes her sound almost overly sane!

Jenn, you should definitely join us at IndieWeb Summit at the end of June. If you can’t join in person, do consider joining us remotely via video and online chat.

Replied to a tweet by DOMAINS 19DOMAINS 19 (Twitter)

Thanks for hosting it all and congratulations!

Here’s something I wrote earlier today: Domains 2019 Reflections from Afar

And I’ve bookmarked, linked, noted, highlighted, etc. about 40 other pieces and resources here: https://boffosocko.com/tag/domains-2019/

Domains 2019 Reflections from Afar

My OPML Domains Project

Not being able to attend Domains 2019 in person, I was bound and determined to attend as much of it as I could manage remotely. A lot of this revolved around following the hashtag for the conference, watching the Virtually Connecting sessions, interacting online, and starting to watch the archived videos after-the-fact. Even with all of this, for a while I had been meaning to flesh out my ability to follow the domains (aka websites) of other attendees and people in the space. Currently the easiest way (for me) to do this is via RSS with a feed reader, so I began collecting feeds of those from the Twitter list of Domains ’17 and Domains ’19 attendees as well as others in the education-related space who tweet about A Domain of One’s Own or IndieWeb. In some sense, I would be doing some additional aggregation work on expanding my blogroll, or, as I call it now, my following page since it’s much too large and diverse to fit into a sidebar on my website.

For some brief background, my following page is built on some old functionality in WordPress core that has since been hidden. I’m using the old Links Manager for collecting links and feeds of people, projects, groups, and institutions. This link manager creates standard OPML files, which WordPress can break up by categories, that can easily be imported/exported into most standard feed readers. Even better, some feed readers like Inoreader, support OPML subscriptions, so one could subscribe to my OPML file, and any time I update it in the future with new subscriptions, your feed reader would automatically update to follow those as well. I use this functionality in my own Inoreader account, so that any new subscriptions I add to my own site are simply synced to my feed reader without needing to be separately added or updated.

The best part of creating such a list and publishing it in a standard format is that you, dear reader, don’t need to spend the several hours I did to find, curate, and compile the list to recreate it for yourself, but you can now download it, modify it if necessary, and have a copy for yourself in just a few minutes. (Toward that end, I’m also happy to update it or make additions if others think it’s missing anyone interesting in the space–feedback, questions, and comments are heartily encouraged.) You can see a human-readable version of the list at this link, or find the computer parse-able/feed reader subscribe-able link here.

To make it explicit, I’ll also note that these lists also help me to keep up with people and changes in the timeframe between conferences.

Anecdotal Domains observations

In executing this OPML project I noticed some interesting things about the Domains community at large (or at least those who are avid enough to travel and attend in person or actively engage online). I’ll lay these out below. Perhaps at a future date, I’ll do a more explicit capture of the data with some analysis.

The largest majority of sites I came across were, unsurprisingly, WordPress-based, which made it much easier to find RSS feeds to read/consume material. I could simply take a domain name and add /feed/ to the end of the URL, and voilà, a relatively quick follow!

There are a lot of people whose sites didn’t have obvious links to their feeds. To me this is a desperate tragedy for the open web. We’re already behind the eight ball compared to social media and corporate controlled sites, why make it harder for people to read/consume our content from our own domains? And as if to add insult to injury, the places on one’s website where an RSS feed link/icon would typically live were instead populated by links to corporate social media like Facebook, Twitter, and Instagram. In a few cases I also saw legacy links to Google+ which ended service and disappeared from the web along with a tremendous number of online identities and personal data on April 2, 2019. (Here’s a reminder to remove those if you’ve forgotten.) For those who are also facing this problem, there’s a fantastic service called SubToMe that has a universal follow button that can be installed or which works well with a browser bookmarklet and a wide variety of feed readers.

I was thrilled to see a few people were using interesting alternate content management systems/site generators like WithKnown and Grav. There were  also several people who had branched out to static site generators (sites without a database). This sort of plurality is a great thing for the community and competition in the space for sites, design, user experience, etc. is awesome. It’s thrilling to see people in the Domains space taking advantage of alternate options, experimenting with them, and using them in the wild.

I’ll note that I did see a few poor souls who were using Wix. I know there was at least one warning about Wix at the conference, but in case it wasn’t stated explicitly, Wix does not support exporting data, which makes any potential future migration of sites difficult. Definitely don’t use it for any extended writing, as cutting and pasting more than a few simple static pages becomes onerous. To make matters worse, Wix doesn’t offer any sort of back up service, so if they chose to shut your site off for any reason, you’d be completely out of luck. No back up + no export = I couldn’t recommend using.

If your account or any of your services are cancelled, it may result in loss of content and data. You are responsible to back up your data and materials. —Wix Terms of Use

I also noticed a few people had generic domain names that they didn’t really own (and not even in the sense of rental ownership). Here I’m talking about domain names of the form username.domainsproject.com. While I’m glad that they have a domain that they can use and generally control, it’s not one that they can truly exert full ownership over. (They just can’t pick it up and take it with them.) Even if they could export/import their data to another service or even a different content management system, all their old links would immediately disappear from the web. In the case of students, while it’s nice that their school may provide this space, it is more problematic for data portability and longevity on the web that they’ll eventually lose that institutional domain name when they graduate. On the other hand, if you have something like yourname.com as your digital home, you can export/import, change content management services, hosting companies, etc. and all your content will still resolve and you’ll be imminently more find-able by your friends and colleagues. This choice is essentially the internet equivalent of changing cellular providers from Sprint to AT&T but taking your phone number with you–you may change providers, but people will still know where to find you without being any the wiser about your service provider changes. I think that for allowing students and faculty the ability to more easily move their content and their sites, Domains projects should require individual custom domains.

If you don’t own/control your physical domain name, you’re prone to lose a lot of value built up in your permalinks. I’m also reminded of here of the situation encountered by faculty who move from one university to another. (Congratulations by the way to Martha Burtis on the pending move to Plymouth State. You’ll notice she won’t face this problem.)  There’s also the situation of Matthew Green, a security researcher at Johns Hopkins whose institutional website was taken down by his university when the National Security Agency flagged an apparent issue. Fortunately in his case, he had his own separate domain name and content on an external server and his institutional account was just a mirrored copy of his own domain.

If you’ve got it, flaunt it.
—Mel Brooks from The Producers (1968), obviously with the it being a referent to A Domain of One’s Own.

Also during my project, I noted that quite a lot of people don’t list their own personal/professional domains within their Twitter or other social media profiles. This seems a glaring omission particularly for at least one whose Twitter bio creatively and proactively claims that they’re an avid proponent of A Domain of One’s Own.

And finally there were a small–but still reasonable–number of people within the community for whom I couldn’t find their domain at all! A small number assuredly are new to the space or exploring it, and so I’d give a pass, but I was honestly shocked that some just didn’t.

(Caveat: I’ll freely admit that the value of Domains is that one has ultimate control including the right not to have or use one or even to have a private, hidden, and completely locked down one, just the way that Dalton chose not to walk in the conformity scene in The Dead Poet’s Society. But even with this in mind, how can we ethically recommend this pathway to students, friends, and colleagues if we’re not willing to participate ourselves?)

Too much Twitter & a challenge for the next Domains Conference

One of the things that shocked me most at a working conference about the idea of A Domain of One’s Own within education where there was more than significant time given to the ideas of privacy, tracking, and surveillance, was the extent that nearly everyone present gave up their identity, authority, and digital autonomy to Twitter, a company which actively represents almost every version of the poor ethics, surveillance, tracking, and design choices we all abhor within the edtech space.

Why weren’t people proactively using their own domains to communicate instead? Why weren’t their notes, observations, highlights, bookmarks, likes, reposts, etc. posted to their own websites? Isn’t that part of what we’re in all this for?!

One of the shining examples from Domains 2019 that I caught as it was occurring was John Stewart’s site where he was aggregating talk titles, abstracts, notes, and other details relevant to himself and his practice. He then published them in the open and syndicated the copies to Twitter where the rest of the conversation seemed to be happening. His living notebook– or digital commmonplace book if you will–is of immense value not only to him, but to all who are able to access it. But you may ask, “Chris, didn’t you notice them on Twitter first?” In fact, I did not! I caught them because I was following the live feed of some of the researchers, educators, and technologists I follow in my feed reader using the OPML files mentioned above. I would submit, especially as a remote participant/follower of the conversation, that his individual posts were worth 50 or more individual tweets. Just the additional context they contained made them proverbially worth their weight in gold.

Perhaps for the next conference, we might build a planet or site that could aggregate all the feeds of people’s domains using their categories/tags or other means to create our own version of the Twitter stream? Alternately, by that time, I suspect that work on some of the new IndieWeb readers will have solidified to allow people to read feeds and interact with that content directly and immediately in much the way Twitter works now except that all the interaction will occur on our own domains.

As educators, one of the most valuable things we can and should do is model appropriate behavior for students. I think it’s high time that when attending a professional conference about A Domain of One’s Own that we all ought to be actively doing it using our own domains. Maybe we could even quit putting our Twitter handles on our slides, and just put our domain names on them instead?

Of course, I wouldn’t and couldn’t suggest or even ask others to do this if I weren’t willing and able to do it myself.  So as a trial and proof of concept, I’ve actively posted all my interactions related to Domains 2019 that I was interested in to my own website using the tag Domains 2019.  At that URL, you’ll find all the things I liked and bookmarked, as well as the bits of conversation on Twitter and others’ sites that I’ve commented on or replied to. All of it originated on my own domain, and, when it appeared on Twitter, it was syndicated only secondarily so that others would see it since that was where the conversation was generally being aggregated. You can almost go back and recreate my entire Domains 2019 experience in real time by following my posts, notes, and details on my personal website.

So, next time around can we make an attempt to dump Twitter!? The technology for pulling it off certainly already exists, and is reasonably well-supported by WordPress, WithKnown, Grav, and even some of the static site generators I noticed in my brief survey above. (Wix obviously doesn’t even come close…)

I’m more than happy to help people build and flesh out the infrastructure necessary to try to make the jump. Even if just a few of us began doing it, we could serve as that all-important model for others as well as for our students and other constituencies. With a bit of help and effort before the next Domains Conference, I’ll bet we could collectively pull it off. I think many of us are either well- or even over-versed in the toxicities and surveillance underpinnings of social media, learning management systems, and other digital products in the edtech space, but now we ought to attempt a move away from it with an infrastructure that is our own–our Domains.

Replied to a tweet by Frivolous AxiomFrivolous Axiom (Twitter)

When you’re back and settled, I’d love to get together for coffee to discuss Domains 2019 and math. I couldn’t make it but caught big chunks remotely. I’m nearby in the Pasadena area and happy to come to you if necessary.

📺 Against Blogging | Zach Whalen | Domains 2019

Watched Against Blogging by Zach WhalenZach Whalen from Domains 2019 | YouTube

For the past 15 years, I’ve included blog assignments in my classes as a default, routine, and generally low-stakes assignment. It began with a simple journal where students kept track of their progress through a video game, and through the years, the assignment has ranged from similarly simple logs or progress reports to the more ornate and decorous “features articles” where students seek to emulate magazine writing and engage with a public audience. At times, like when having a platform online was still a novelty and the adrenaline rush of Web 2.0-fueled activism took flight in the optimism of Barack Obama’s first presidential campaign, blogging totally made sense. As a classroom experience, a blog assignment helped students find their digital identity through written expression. By finding their voice digitally, students found themselves.

But while this will still happen, and while I still see brilliant writing from my students, the era when the exigency of a blog assignment can be reliably vindicated by an authentic external audience has ended. It’s time for something else, which means it’s time to re-evaluate what blogs have been and what we have needed them for in order to find the best ways to meet those goals through other means. In this short presentation, I will offer several suggestions.

This is, however, an aspirational proposal. I’m writing this between semesters as I reflect on the Fall — where blog assignments didn’t always meet my goals or in some cases arguably undermined other goals for my class — and thinking ahead to the Spring — when I hope to implement some new assignments based on this recent conviction about the ineffectuality of blog assignments. Therefore, by June, my expectation is that I will have something new to report: either finding success with an entirely new set of assignments and corresponding tools, or returning to the familiar embrace of blog assignments with a renewed sense of their value.

Most likely, I’ll be somewhere in between, but my hunch is that different forms of discursive content creation will help students take control of their learning and find direction for their digital identities. Whatever I find in the coming semester, I’m confident that I’ll be ready to share some insight into the intents, purposes, and outcomes of inviting students to do intellectual work on the internet of 2019.

Notes as they occur to me while I’m watching this video:

To me blogging is a means of thinking out loud.

Of course having a site doesn’t mean one is blogging. In fact, in my case, I’m collecting bits and pieces on my site like a digital commonplace book, and out of those collections come some quick basic thoughts, and often some longer pieces, which could be called blog posts, but really are essays that help to shape my thinking. I really wish more people would eschew social media and use their own websites this way.

We need to remember that a website or domain is FAR, FAR more than just a simple blog. 

It kills me how many in the edtech/Domains space seem to love memes. It’s always cute and fun, but they feel so vapid and ineffectual. It’s like copying someone else’s work and trying to pass it off as our own. English teachers used to say, “Don’t be cliché,” but now through the use of digital memes they’re almost encouraging it. Why not find interesting images and create something new and dramatically different.  (I can’t help but think of the incredibly unique Terry Gilliam “cartoons” in Monty Python’s Flying Circus and the phrase “and now for something completely different…”.

Zach uses the phrase “personal learning journal” but doesn’t quite get to the idea of using domains as digital commonplace books.  He also looks at other social sites like Tik-Tok, Instagram stories, YouTube channels, and Twitter hashtags, but doesn’t consider that what those things are could easily be contained within one’s own personal site/domain. The IndieWeb has been hacking away at just this for several years now. What he’s getting at here, but isn’t quite saying is “Why can’t we expand the Domain beyond the restrained idea of “just a blog.” And isn’t that just the whole point of the IndieWeb movement? Your website can literally be anything you want it to be! Just go do it. Invent. Iterate. Have fun!

Zack should definitely take a look at what one can do with Webmention. See: Webmentions: Enabling Better Communication on the Internet. I suppose some of the restraint is that most people don’t know that it’s relatively easy now to get one domain to be able to talk to another domain the way social sites like Facebook and Twitter do @mentions. And once you’ve got that, there’s a whole lot more you can do!

Perhaps what we should do is go back to the early web and the idea of “small pieces, loosely joined“. What can we do with all the smaller, atomized pieces of the web? How can we use these building blocks in new and unexpected ways? To build new and exciting things? What happens when you combine Facebook, Twitter, Instagram, Snapchat, Blogger, Soundcloud, Foursquare, Flickr, Goodreads, Periscope, Lobsters, TikTok, Quora, Zotero, Flipboard, GitHub, Medium, Huffduffer, Plurk, etc., etc. altogether and mix them up in infinite ways? You get Domains! You may get something as cutting edge–but still relatively straight-laced–as Aaron Parecki’s website, which you might have to dig into to realize just how much he’s got going on there, or you might end up with something as quirky and cool as Kicks Condor’s site or his discovery/syndication channel Indieweb.xyz.

Want to be able to use your website to highlight and mark up what you read? Go ahead and do that! I have. You could keep a record of everything you watch or listen to. Make a food diary. Track where you’ve been. Want to keep collections of chicken related things so your site can have a chicken feed? Go crazy!! 

 

🔖 ethicaledtech – Discussion list for ethicaledtech.info

Bookmarked ethicaledtech (lists.colorado.edu)
Discussion list for ethicaledtech.info

Subscribed!

Hat tip:

❤️ All 28 conference sessions for #domains19 are up!

Liked timmmmyboy on Twitter (Twitter)