<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>web &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/web/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Fri, 19 Dec 2025 03:38:36 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>web &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Why do people leave comments on OpenBenches?]]></title>
		<link>https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/</link>
					<comments>https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 20 Dec 2025 12:34:14 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[OpenBenches]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=64154</guid>

					<description><![CDATA[I&#039;m still a believer in the promise of Web 2.0. The idea that giving people a curated space to chat produces tiny sparks of magic.  My wife Liz and I have been running the OpenBenches project for about 8 years - it&#039;s a crowd-sourced repository of memorial benches. People take a geotagged photo of a bench&#039;s plaque, upload it to our site, and we share it with the world.  Might sound a bit niche,…]]></description>
										<content:encoded><![CDATA[<p>I'm still a believer in the promise of Web 2.0. The idea that giving people a curated space to chat produces tiny sparks of magic.</p>

<p>My wife Liz and I have been running the <a href="https://openbenches.org">OpenBenches project</a> for about 8 years - it's a crowd-sourced repository of memorial benches. People take a geotagged photo of a bench's plaque, upload it to our site, and we share it with the world.  Might sound a bit niche, but we have around thirty-nine <em>thousand</em> benches catalogued from all over the world.</p>

<p>From the start, we had a comment form under each bench. Of course, we pre-moderate any comments. That <a href="https://www.openbenches.org/blog/online-safety-act/">helps with our Online Safety Act obligations</a> and prevents spam from being published. We don't collect any personal data, to reduce our GDPR exposure. Our comments are self-hosted using the excellent <a href="https://commentics.com/">Commentics</a> - which means we don't send people's data off to a 3rd party.</p>

<p>We <em>thought</em> that this would be used to tell us that an inscription was wrong, or if a bench had moved, or something like that.</p>

<p>We were completely wrong!</p>

<p>People use OpenBenches comments for all sorts of things. Of course, there are a few which provide details about the bench itself:</p>

<p><a href="https://openbenches.org/bench/33640"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/removed.webp" alt="This bench was removed after the river flooded and majorly eroded the bank earlier this year (spring 2025), and now two new benches are in approximately the same place but a little further back from the river." width="1248" height="402" class="aligncenter size-full wp-image-64159"></a></p>

<p>Other provide a little context about the person:
<a href="https://openbenches.org/bench/38738"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/info.webp" alt="
She competed under her birth name, Zsuzsa Nádor:
https://en.wikipedia.org/wiki/Zsuzsa_Nádor
There's a Wikipedia article about Roman, too:
https://en.wikipedia.org/wiki/Roman_Halter" width="1248" height="402" class="aligncenter size-full wp-image-64161"></a></p>

<p>But those sorts of comments are hardly the majority.  The comments break down (roughly) into these categories:</p>

<h2 id="i-want-to-know-more-about-this-person"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#i-want-to-know-more-about-this-person">I want to know more about this person</a></h2>

<p><a href="https://openbenches.org/bench/3225"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/grandson.webp" alt="I am the grandson of Janet Constance Hardie, who had a sister Ethel Hardie. Ethel Hardie married Harry Macinnes and then died in 1961. Ethel and Harry had a daughter named Ethel Elvery Macinnes. Is the Ethel Hardie, who is remembered on this bench related to the above Hardies of my family ? Best Regards, Neil Rowlandson" width="1248" height="582" class="aligncenter size-full wp-image-64163"></a></p>

<h2 id="i-sat-on-this-bench-searched-for-the-inscription-and-found-this-site-i-want-to-share-my-feelings"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#i-sat-on-this-bench-searched-for-the-inscription-and-found-this-site-i-want-to-share-my-feelings">I sat on this bench, searched for the inscription and found this site. I want to share my feelings</a></h2>

<p><a href="https://openbenches.org/bench/13312"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/devon.webp" alt="Sounds like she was an inspirational woman. Clearly gone to soon. Sat on her bench today whilst visiting from Devon." width="1248" height="282" class="aligncenter size-full wp-image-64164"></a></p>

<h2 id="thank-you-for-putting-a-bench-here"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#thank-you-for-putting-a-bench-here">Thank you for putting a bench here</a></h2>

<p><a href="https://openbenches.org/bench/38259"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/peace.webp" alt="A peaceful spot on the banks of the river Orwell. Thanks for those that funded it." width="1248" height="222" class="aligncenter size-full wp-image-64165"></a></p>

<h2 id="this-has-moved-me"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#this-has-moved-me">This has moved me</a></h2>

<p><a href="https://openbenches.org/bench/37741"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/amy.webp" alt="I'm sat on the bench now i didn't know the lady but so sad to pass at such a young age by what i have found on the internet she was liked loved and respected my thoughts with all the family even though it's been almost 4 years since her I'm sure she will never be forgotten. Someone has placed a bunch of yellow flowers on the bench that is what first made me stop and look RIP Amy" width="1248" height="642" class="aligncenter size-full wp-image-64166"></a></p>

<h2 id="my-heart-has-broken"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#my-heart-has-broken">My heart has broken</a></h2>

<p><a href="https://openbenches.org/bench/39228"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/miss.webp" alt="I love you. I miss you. I so long to see you." width="1248" height="224" class="aligncenter size-full wp-image-64167"></a></p>

<h2 id="i-cant-visit-this-bench-but-im-glad-someone-has-shared-a-photo"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#i-cant-visit-this-bench-but-im-glad-someone-has-shared-a-photo">I can't visit this bench, but I'm glad someone has shared a photo</a></h2>

<p><a href="https://openbenches.org/bench/13023"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/mary.webp" alt="Mary was my best friend, from primary school until she died. I have not visited her bench but hope those who sit there in that beautiful place will also have experienced wonderful friendships as I did." width="1248" height="402" class="aligncenter size-full wp-image-64170"></a></p>

<h2 id="thank-you-for-adding-a-photo"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#thank-you-for-adding-a-photo">Thank you for adding a photo</a></h2>

<p><a href="https://openbenches.org/bench/26373"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/thanks.webp" alt="This is my father’s memorial bench on half penny pier thank you to the person who took the photos x" width="1248" height="282" class="aligncenter size-full wp-image-64169"></a></p>

<h2 id="i-dont-know-the-person-this-bench-commemorates-but-i-want-to-let-them-know-theyre-still-loved-and-remembered"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#i-dont-know-the-person-this-bench-commemorates-but-i-want-to-let-them-know-theyre-still-loved-and-remembered">I don't know the person this bench commemorates, but I want to let them know they're still loved and remembered</a></h2>

<p><a href="https://openbenches.org/bench/35294"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/mum.webp" alt="My mum and her girlfriends sat on the bench today and told your father stories about how they were visiting this place many decades ago. They hope your father was listening. All the best to you" width="1248" height="402" class="aligncenter size-full wp-image-64171"></a></p>

<h2 id="thats-nice"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#thats-nice">That's nice</a></h2>

<p>Hundreds of people sharing connections. Wanting to express their feelings. Understanding the terrible pain of loss and the hope that, someday, someone will think fondly of us.</p>

<p>You can <a href="https://openbenches.org/comments">view all the comments on OpenBenches.org</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=64154&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The Web Runs On Tolerance]]></title>
		<link>https://shkspr.mobi/blog/2025/12/the-web-runs-on-tolerance/</link>
					<comments>https://shkspr.mobi/blog/2025/12/the-web-runs-on-tolerance/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 04 Dec 2025 12:34:34 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=63924</guid>

					<description><![CDATA[If you&#039;ve ever tried to write a computer program, you&#039;ll know the dread of a syntax error. An errant space and your code won&#039;t compile. Miss a semi-colon and the world collapses. Don&#039;t close your brackets and watch how the computer recoils in distress.  The modern web isn&#039;t like that.  You can make your HTML as malformed as you like and the web-browser will do its best to display the page for…]]></description>
										<content:encoded><![CDATA[<p>If you've ever tried to write a computer program, you'll know the dread of a syntax error. An errant space and your code won't compile. Miss a semi-colon and the world collapses. Don't close your brackets and watch how the computer recoils in distress.</p>

<p>The modern web isn't like that.</p>

<p>You can make your HTML as malformed as you like and the web-browser will do its best to display the page for you.  I love the <a href="https://www.todepond.com/">todepond</a> website, but the source-code makes me break out in a cold sweat. Yet it renders just fine.</p>

<p>Sure, <a href="https://news.ycombinator.com/item?id=28052190">occasionally there are weird artefacts</a>. But the web works because browsers are tolerant.</p>

<p>You can be <em>crap</em> at coding and the web still works.  Yes, it takes an awful lot of effort from browser manufacturers to make "do what I mean, not what I say" a reality. But the world is better for it.</p>

<p>That's the crucial mistake that XHTML made. It was an attempt to bring pure syntactic rigour to the web. It had an intolerant ideology. Every document had to precisely conform to the specification. If it didn't, the page was irrevocably broken. I don't mean broken like a weird layout glitch, I mean broken like this:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/10/xml-parsing-error.webp" alt="XML Parsing Error: mismatched tag. Expected: </h1>.
Location: https://example.com/test.xhtml Line Number 9, Column 5:" width="1800" height="600" class="aligncenter size-full wp-image-63925">

<p>The user experience of XHTML was rubbish. The disrespect shown to anyone for deviating from the One True Path made it an unwelcoming and unfriendly place.  Understandably, XHTML is now a mere footnote on the web. Sure, people are free to use it if they want, but its unforgiving nature makes it nobody's first choice.</p>

<p>The beauty of the web as a platform is that it isn't a monoculture.</p>

<p>That's why it baffles me that some prominent technologists embrace hateful ideologies. I'm not going to give them any SEO-juice by linking to them, but I cannot fathom how someone can look at the beautiful diversity of the web and then declare that only pure-blooded people should live in a particular city.</p>

<p>How do you acknowledge that the father of the computer was a homosexual, brutally bullied by the state into suicide, and then fund groups that want to deny gay people fundamental human rights?</p>

<p>The ARM processor which powers the modern world was co-designed by a trans woman. When you throw slurs and denigrate people's pronouns, your ignorance and hatred does a disservice to history and drives away the next generation of talent.</p>

<p>History shows us that <em>all</em> progress comes from the meeting of diverse people, with different ideas, and different backgrounds. The notion that only a pure ethnostate can prosper is simply historically illiterate.</p>

<p>This isn't an academic argument over big-endian or little-endian. It isn't an ideological battle about the superiority of your favourite text editor. There's no good-natured ribbing about which desktop environment has the better design philosophy.</p>

<p>Denying rights to others is poison.  Wishing violence on people because of their heritage is harmful to all of us.</p>

<p>Do we want all computing to go through the snow-white purity of Apple Computer? Have them as the one and only arbiters of what is and isn't allowed? No. That's obviously terrible for our ecosystem.</p>

<p>Do we want to segregate computer users so that an Android user can never connect their phone to a Windows machine, or make it impossible for Linux laptops to talk to Kodak cameras? That sort of isolation should be an anathema to us.</p>

<p>Why then align with people who espouse isolationism? Why gleefully cheer the violent racists who terrorise our communities? Why demean people who merely wish to exist?</p>

<p>The web runs on tolerance. Anyone who preaches the ideology of hate has no business here.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=63924&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/12/the-web-runs-on-tolerance/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Alpha launch - .well-known/avatar - feedback wanted]]></title>
		<link>https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/</link>
					<comments>https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 25 Oct 2025 11:34:10 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[IETF]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=64078</guid>

					<description><![CDATA[I&#039;ve gotten sufficiently annoyed with a trivial problem that I&#039;m preparing to write an IETF RFC. Yeah. That&#039;s how ticked off I am!  Every site that I sign up for asks me to upload an avatar to represent myself. Whenever I change my photo, I have to log in to a hundred sites and change it there.  Perhaps they could all use Gravatar - but that&#039;s a centralised service and doesn&#039;t work with wildcard…]]></description>
										<content:encoded><![CDATA[<p>I've gotten sufficiently annoyed with a trivial problem that I'm preparing to write an IETF RFC. Yeah. That's how ticked off I am!</p>

<p>Every site that I sign up for asks me to upload an avatar to represent myself. Whenever I change my photo, I have to log in to a hundred sites and change it there<sup id="fnref:ok"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#fn:ok" class="footnote-ref" title="OK, I don't have to. But I want to. I dislike having last year's photo cluttering some half-remembered social network." role="doc-noteref">0</a></sup>.</p>

<p>Perhaps they could all use <a href="https://gravatar.com/">Gravatar</a> - but that's a centralised service<sup id="fnref:boo"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#fn:boo" class="footnote-ref" title="We live in the redecentralised future now!" role="doc-noteref">1</a></sup> and doesn't work with wildcard email addresses. <a href="https://libravatar.org/">Libravatar</a> also relies on email addresses and requires implementers to set up new DNS entries.</p>

<p>So I'm proposing <code>.well-known/avatar</code>. Here's how it works (for now). I'd like your feedback before going further<sup id="fnref:slow"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#fn:slow" class="footnote-ref" title="I wrote about this in 2004 and in 2020. It takes me time, but I get there eventually!" role="doc-noteref">2</a></sup>.</p>

<p>I sign up to a service and use the email address <code>whatever@shkspr.mobi</code>.</p>

<p>The service looks up my avatar using a well-known path. For example, request <a href="https://shkspr.mobi/.well-known/avatar?resource=acct:whatever@shkspr.mobi">https://shkspr.mobi/.well-known/avatar?resource=acct:whatever@shkspr.mobi</a> and you'll get back this JSON:</p>

<pre><code class="language-json">{
    "subject": "acct:whatever@shkspr.mobi",
    "links": [
        {
              "rel": "http:\/\/webfinger.net\/rel\/avatar",
             "type": "image\/webp",
             "href": "https:\/\/shkspr.mobi\/.well-known\/avatar\/avatar-1024.webp",
            "sizes": "1024x1024"
        },
        {
              "rel": "http:\/\/webfinger.net\/rel\/avatar",
             "type": "image\/jpeg",
             "href": "https:\/\/shkspr.mobi\/.well-known\/avatar\/avatar-512.jpg",
            "sizes": "512x512"
        }
    ]
}
</code></pre>

<p>That's a slightly enhanced <a href="https://webfinger.net/rel/#avatar">https://webfinger.net/rel/#avatar</a> which adds <a href="https://html.spec.whatwg.org/multipage/semantics.html#attr-link-sizes">a <code>sizes</code> parameter</a>.  The service can then pick the appropriate MIME and size.</p>

<p>Alternatively, you can request the same URl but with a header of <code>Accept: image/gif</code> and receive the default sized avatar in that specific format.</p>

<p>Try it by running:</p>

<pre><code class="language-bash">curl -H "Accept: image/avif" https://shkspr.mobi/.well-known/avatar/ --output "test.avif"
</code></pre>

<p>You should receive an auto-converted version of my avatar.</p>

<h2 id="some-thoughts"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#some-thoughts">Some Thoughts</a></h2>

<p>Please add your thoughts to the comments box. Here's some feedback I've received so far.</p>

<p>Perhaps this is too complicated? What's wrong with just serving up an image when the URl is requested? That would make it easier for static sites.</p>

<div class="activitypub-embed u-in-reply-to h-cite"> <div class="activitypub-embed-header p-author h-card"> <img class="u-photo" src="https://cdn.fosstodon.org/accounts/avatars/000/061/904/original/5e6ac0188b3ab021.png" alt=""> <div class="activitypub-embed-header-text"> <h2 class="p-name" id="simon-josefsson"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#simon-josefsson">Simon Josefsson</a></h2> <a href="https://fosstodon.org/users/jas" class="ap-account u-url">@jas@fosstodon.org</a> </div> </div> <div class="activitypub-embed-content"> <div class="ap-subtitle p-summary e-content"><p><span class="h-card"><a href="https://mastodon.social/@Edent" class="u-url mention">@<span>Edent</span></a></span> Thinking about this, while I like content negotiation as a clever hack, I wonder if maybe it isn’t too clever. The nice thing with WKD is that you can deploy it with any normal static HTTP file without any special magic. Maybe the protocol could be dumbed down to simply rely on WKD-style URLs? I’m not sure how to configure my web server (Apache) for your avatar well known URL with negotiation magic.</p></div> </div> <div class="activitypub-embed-meta"> <a href="https://fosstodon.org/users/jas/statuses/115424507307729006" class="ap-stat ap-date dt-published u-in-reply-to">2025-10-23, 16:50</a> <span class="ap-stat"> <strong>0</strong> boosts </span> <span class="ap-stat"> <strong>1</strong> favorites </span> </div> </div>

<style>/** * ActivityPub embed styles. */ .activitypub-embed { background: #fff; border: 1px solid #e6e6e6; border-radius: 12px; padding: 0; max-width: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } .activitypub-reply-block .activitypub-embed { margin: 1em 0; } .activitypub-embed-header { padding: 15px; display: flex; align-items: center; gap: 10px; } .activitypub-embed-header img { width: 48px; height: 48px; border-radius: 50%; } .activitypub-embed-header-text { flex-grow: 1; } .activitypub-embed-header-text h2 { color: #000; font-size: 15px; font-weight: 600; margin: 0; padding: 0; } .activitypub-embed-header-text .ap-account { color: #687684; font-size: 14px; text-decoration: none; } .activitypub-embed-content { padding: 0 15px 15px; } .activitypub-embed-content .ap-title { font-size: 23px; font-weight: 600; margin: 0 0 10px; padding: 0; color: #000; } .activitypub-embed-content .ap-subtitle { font-size: 15px; color: #000; margin: 0 0 15px; } .activitypub-embed-content .ap-preview { border: 1px solid #e6e6e6; border-radius: 8px; overflow: hidden; } .activitypub-embed-content .ap-preview img { width: 100%; height: auto; display: block; } .activitypub-embed-content .ap-preview { border-radius: 8px; box-sizing: border-box; display: grid; gap: 2px; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; margin: 1em 0 0; min-height: 64px; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview.layout-1 { grid-template-columns: 1fr; grid-template-rows: 1fr; } .activitypub-embed-content .ap-preview.layout-2 { aspect-ratio: auto; grid-template-rows: 1fr; height: auto; } .activitypub-embed-content .ap-preview.layout-3 > img:first-child { grid-row: span 2; } .activitypub-embed-content .ap-preview img { border: 0; box-sizing: border-box; display: inline-block; height: 100%; object-fit: cover; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview video, .activitypub-embed-content .ap-preview audio { max-width: 100%; display: block; grid-column: 1 / span 2; } .activitypub-embed-content .ap-preview audio { width: 100%; } .activitypub-embed-content .ap-preview-text { padding: 15px; } .activitypub-embed-meta { padding: 15px; border-top: 1px solid #e6e6e6; color: #687684; font-size: 13px; display: flex; gap: 15px; } .activitypub-embed-meta .ap-stat { display: flex; align-items: center; gap: 5px; } @media only screen and (max-width: 399px) { .activitypub-embed-meta span.ap-stat { display: none !important; } } .activitypub-embed-meta a.ap-stat { color: inherit; text-decoration: none; } .activitypub-embed-meta strong { font-weight: 600; color: #000; } .activitypub-embed-meta .ap-stat-label { color: #687684; } </style>

<p>What about a size parameter?</p>

<div class="activitypub-embed u-in-reply-to h-cite"> <div class="activitypub-embed-header p-author h-card"> <img class="u-photo" src="https://mastocdn.talking.dev/accounts/avatars/106/551/937/719/290/584/original/733b34a017037146.jpg" alt=""> <div class="activitypub-embed-header-text"> <h2 class="p-name" id="chip"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#chip">Chip</a></h2> <a href="https://talking.dev/users/chip" class="ap-account u-url">@chip@talking.dev</a> </div> </div> <div class="activitypub-embed-content"> <div class="ap-subtitle p-summary e-content"><p><span class="h-card"><a href="https://mastodon.social/@Edent" class="u-url mention">@<span>Edent</span></a></span> It'd be nice if the query could limit the size of the avatar being returned. If only there were `Accept-Max-Size`, but maybe a query param? I wouldn't want my performance taking a dive if Alice has a 35M avatar that my client starts downloading. If my client had requested with `max_size=3072` I'd rather not see the avatar than degrade performance/pull excess data</p></div> </div> <div class="activitypub-embed-meta"> <a href="https://talking.dev/users/chip/statuses/115424082361331622" class="ap-stat ap-date dt-published u-in-reply-to">2025-10-23, 15:02</a> <span class="ap-stat"> <strong>0</strong> boosts </span> <span class="ap-stat"> <strong>1</strong> favorites </span> </div> </div>

<style>/** * ActivityPub embed styles. */ .activitypub-embed { background: #fff; border: 1px solid #e6e6e6; border-radius: 12px; padding: 0; max-width: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } .activitypub-reply-block .activitypub-embed { margin: 1em 0; } .activitypub-embed-header { padding: 15px; display: flex; align-items: center; gap: 10px; } .activitypub-embed-header img { width: 48px; height: 48px; border-radius: 50%; } .activitypub-embed-header-text { flex-grow: 1; } .activitypub-embed-header-text h2 { color: #000; font-size: 15px; font-weight: 600; margin: 0; padding: 0; } .activitypub-embed-header-text .ap-account { color: #687684; font-size: 14px; text-decoration: none; } .activitypub-embed-content { padding: 0 15px 15px; } .activitypub-embed-content .ap-title { font-size: 23px; font-weight: 600; margin: 0 0 10px; padding: 0; color: #000; } .activitypub-embed-content .ap-subtitle { font-size: 15px; color: #000; margin: 0 0 15px; } .activitypub-embed-content .ap-preview { border: 1px solid #e6e6e6; border-radius: 8px; overflow: hidden; } .activitypub-embed-content .ap-preview img { width: 100%; height: auto; display: block; } .activitypub-embed-content .ap-preview { border-radius: 8px; box-sizing: border-box; display: grid; gap: 2px; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; margin: 1em 0 0; min-height: 64px; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview.layout-1 { grid-template-columns: 1fr; grid-template-rows: 1fr; } .activitypub-embed-content .ap-preview.layout-2 { aspect-ratio: auto; grid-template-rows: 1fr; height: auto; } .activitypub-embed-content .ap-preview.layout-3 > img:first-child { grid-row: span 2; } .activitypub-embed-content .ap-preview img { border: 0; box-sizing: border-box; display: inline-block; height: 100%; object-fit: cover; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview video, .activitypub-embed-content .ap-preview audio { max-width: 100%; display: block; grid-column: 1 / span 2; } .activitypub-embed-content .ap-preview audio { width: 100%; } .activitypub-embed-content .ap-preview-text { padding: 15px; } .activitypub-embed-meta { padding: 15px; border-top: 1px solid #e6e6e6; color: #687684; font-size: 13px; display: flex; gap: 15px; } .activitypub-embed-meta .ap-stat { display: flex; align-items: center; gap: 5px; } @media only screen and (max-width: 399px) { .activitypub-embed-meta span.ap-stat { display: none !important; } } .activitypub-embed-meta a.ap-stat { color: inherit; text-decoration: none; } .activitypub-embed-meta strong { font-weight: 600; color: #000; } .activitypub-embed-meta .ap-stat-label { color: #687684; } </style>

<p>Will anyone actually use it?</p>

<div class="activitypub-embed u-in-reply-to h-cite"> <div class="activitypub-embed-header p-author h-card"> <img class="u-photo" src="https://fedi.splitbrain.org/fileserver/013DGS4XRNRZTWPDP5Q2MKSHZR/attachment/original/01JNBFPHNR06RXDG36V0VM7D3V.jpeg" alt=""> <div class="activitypub-embed-header-text"> <h2 class="p-name" id="andreas-gohr"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#andreas-gohr">Andreas Gohr</a></h2> <a href="https://fedi.splitbrain.org/users/splitbrain" class="ap-account u-url">@splitbrain@fedi.splitbrain.org</a> </div> </div> <div class="activitypub-embed-content"> <div class="ap-subtitle p-summary e-content"><p><span class="h-card"><a href="https://mastodon.social/@Edent" class="u-url mention" rel="nofollow noreferrer noopener" target="_blank">@<span>Edent</span></a></span> good luck with getting the hundreds of services to implement it. I mean it. it would be awesome and you might be well connected enough to make it happen.</p></div> </div> <div class="activitypub-embed-meta"> <a href="https://fedi.splitbrain.org/users/splitbrain/statuses/01K88SH504PEK5X8C6MSXRY0YH" class="ap-stat ap-date dt-published u-in-reply-to">2025-10-23, 15:03</a> </div> </div>

<style>/** * ActivityPub embed styles. */ .activitypub-embed { background: #fff; border: 1px solid #e6e6e6; border-radius: 12px; padding: 0; max-width: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } .activitypub-reply-block .activitypub-embed { margin: 1em 0; } .activitypub-embed-header { padding: 15px; display: flex; align-items: center; gap: 10px; } .activitypub-embed-header img { width: 48px; height: 48px; border-radius: 50%; } .activitypub-embed-header-text { flex-grow: 1; } .activitypub-embed-header-text h2 { color: #000; font-size: 15px; font-weight: 600; margin: 0; padding: 0; } .activitypub-embed-header-text .ap-account { color: #687684; font-size: 14px; text-decoration: none; } .activitypub-embed-content { padding: 0 15px 15px; } .activitypub-embed-content .ap-title { font-size: 23px; font-weight: 600; margin: 0 0 10px; padding: 0; color: #000; } .activitypub-embed-content .ap-subtitle { font-size: 15px; color: #000; margin: 0 0 15px; } .activitypub-embed-content .ap-preview { border: 1px solid #e6e6e6; border-radius: 8px; overflow: hidden; } .activitypub-embed-content .ap-preview img { width: 100%; height: auto; display: block; } .activitypub-embed-content .ap-preview { border-radius: 8px; box-sizing: border-box; display: grid; gap: 2px; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; margin: 1em 0 0; min-height: 64px; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview.layout-1 { grid-template-columns: 1fr; grid-template-rows: 1fr; } .activitypub-embed-content .ap-preview.layout-2 { aspect-ratio: auto; grid-template-rows: 1fr; height: auto; } .activitypub-embed-content .ap-preview.layout-3 > img:first-child { grid-row: span 2; } .activitypub-embed-content .ap-preview img { border: 0; box-sizing: border-box; display: inline-block; height: 100%; object-fit: cover; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview video, .activitypub-embed-content .ap-preview audio { max-width: 100%; display: block; grid-column: 1 / span 2; } .activitypub-embed-content .ap-preview audio { width: 100%; } .activitypub-embed-content .ap-preview-text { padding: 15px; } .activitypub-embed-meta { padding: 15px; border-top: 1px solid #e6e6e6; color: #687684; font-size: 13px; display: flex; gap: 15px; } .activitypub-embed-meta .ap-stat { display: flex; align-items: center; gap: 5px; } @media only screen and (max-width: 399px) { .activitypub-embed-meta span.ap-stat { display: none !important; } } .activitypub-embed-meta a.ap-stat { color: inherit; text-decoration: none; } .activitypub-embed-meta strong { font-weight: 600; color: #000; } .activitypub-embed-meta .ap-stat-label { color: #687684; } </style>

<p>What about hashing the email?</p>

<div class="activitypub-embed u-in-reply-to h-cite"> <div class="activitypub-embed-header p-author h-card"> <img class="u-photo" src="https://media.social.lol/accounts/avatars/111/559/923/870/165/558/original/5c1a92fdf91205a8.png" alt=""> <div class="activitypub-embed-header-text"> <h2 class="p-name" id="david-bushell-%f0%9f%8e%ae"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#david-bushell-%f0%9f%8e%ae">David Bushell 🎮</a></h2> <a href="https://social.lol/users/db" class="ap-account u-url">@db@social.lol</a> </div> </div> <div class="activitypub-embed-content"> <div class="ap-subtitle p-summary e-content"><p><span class="h-card"><a href="https://mastodon.social/@Edent" class="u-url mention">@<span>Edent</span></a></span> would using a hash of the email address in its place improve privacy? 🤔</p></div> </div> <div class="activitypub-embed-meta"> <a href="https://social.lol/users/db/statuses/115434663342778931" class="ap-stat ap-date dt-published u-in-reply-to">2025-10-25, 11:52</a> <span class="ap-stat"> <strong>0</strong> boosts </span> <span class="ap-stat"> <strong>0</strong> favorites </span> </div> </div>

<style>/** * ActivityPub embed styles. */ .activitypub-embed { background: #fff; border: 1px solid #e6e6e6; border-radius: 12px; padding: 0; max-width: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } .activitypub-reply-block .activitypub-embed { margin: 1em 0; } .activitypub-embed-header { padding: 15px; display: flex; align-items: center; gap: 10px; } .activitypub-embed-header img { width: 48px; height: 48px; border-radius: 50%; } .activitypub-embed-header-text { flex-grow: 1; } .activitypub-embed-header-text h2 { color: #000; font-size: 15px; font-weight: 600; margin: 0; padding: 0; } .activitypub-embed-header-text .ap-account { color: #687684; font-size: 14px; text-decoration: none; } .activitypub-embed-content { padding: 0 15px 15px; } .activitypub-embed-content .ap-title { font-size: 23px; font-weight: 600; margin: 0 0 10px; padding: 0; color: #000; } .activitypub-embed-content .ap-subtitle { font-size: 15px; color: #000; margin: 0 0 15px; } .activitypub-embed-content .ap-preview { border: 1px solid #e6e6e6; border-radius: 8px; overflow: hidden; } .activitypub-embed-content .ap-preview img { width: 100%; height: auto; display: block; } .activitypub-embed-content .ap-preview { border-radius: 8px; box-sizing: border-box; display: grid; gap: 2px; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; margin: 1em 0 0; min-height: 64px; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview.layout-1 { grid-template-columns: 1fr; grid-template-rows: 1fr; } .activitypub-embed-content .ap-preview.layout-2 { aspect-ratio: auto; grid-template-rows: 1fr; height: auto; } .activitypub-embed-content .ap-preview.layout-3 > img:first-child { grid-row: span 2; } .activitypub-embed-content .ap-preview img { border: 0; box-sizing: border-box; display: inline-block; height: 100%; object-fit: cover; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview video, .activitypub-embed-content .ap-preview audio { max-width: 100%; display: block; grid-column: 1 / span 2; } .activitypub-embed-content .ap-preview audio { width: 100%; } .activitypub-embed-content .ap-preview-text { padding: 15px; } .activitypub-embed-meta { padding: 15px; border-top: 1px solid #e6e6e6; color: #687684; font-size: 13px; display: flex; gap: 15px; } .activitypub-embed-meta .ap-stat { display: flex; align-items: center; gap: 5px; } @media only screen and (max-width: 399px) { .activitypub-embed-meta span.ap-stat { display: none !important; } } .activitypub-embed-meta a.ap-stat { color: inherit; text-decoration: none; } .activitypub-embed-meta strong { font-weight: 600; color: #000; } .activitypub-embed-meta .ap-stat-label { color: #687684; } </style>

<p>You've already given the service your email address, and your domain already knows your account name - so there's no privacy leak here. Obviously, a service shouldn't hotlink to your avatar image.</p>

<p>How about DNS?</p>

<blockquote class="bluesky-embed" data-bluesky-uri="at://did:plc:en7czkhogfoggztn3newgk3u/app.bsky.feed.post/3m3zdjv7vcs2v" data-bluesky-cid="bafyreibp7hypzhpjiwairnihopr47fdifwasluludaxobybpnna3jcupzu"><p lang="en">I like it. Is there an argument that service / endpoint should be specifiable at the DNS level?As others in your comments pointed out, if your site is currently just static, some users might prefer to run an entirely separate dedicated avatar service.</p>— <a href="https://bsky.app/profile/did:plc:en7czkhogfoggztn3newgk3u?ref_src=embed">Emily Shepherd (@emi.ly)</a> <a href="https://bsky.app/profile/did:plc:en7czkhogfoggztn3newgk3u/post/3m3zdjv7vcs2v?ref_src=embed">2025-10-25T11:57:43.456Z</a></blockquote>

<script async="" src="https://embed.bsky.app/static/embed.js" charset="utf-8"></script>

<p>Personally, I think that's a bit complicated, but I'm happy to be convinced.</p>

<blockquote><p><a href="https://bsky.app/profile/ox.ca/post/3m3zkrun4j22b">Is this restricted to email?</a></p></blockquote>

<p>No! For example, if you know my GitHub username then you should be able to get the avatar from <code>https://github.com/.well-known/avatar?resource=acct:edent</code></p>

<blockquote><p><a href="https://mechadarwin.com/2025/10/25/well-known-avatar-location/">How can a service tell if the avatar has been updated</a>?</p></blockquote>

<p>Perhaps a hash, timestamp, or something else?</p>

<blockquote><p><a href="https://mastodon.bsd.cafe/@gumnos/115436604786371047">Can requests for multiple accounts be sent at once?</a></p></blockquote>

<p>I'm not sure how / if WebFinger handles this. I suppose there ought to be some limit to avoid overwhelming a server.</p>

<h2 id="proposal"><a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#proposal">Proposal</a></h2>

<p>I think the default should be to return an image.</p>

<p>If an accept of <code>image/…</code> is requested, the server should try to return an image in that format.</p>

<p>If an accept of <code>application/json</code> or similar is requested, the server should return a JSON document listing the available avatars.</p>

<p>I don't think a <code>?size=</code> GET parameter is necessary; services can resize once they've downloaded, or use the JSON document to get the right size.</p>

<p>A limited amount of alt text could be added using <a href="https://www.rfc-editor.org/rfc/rfc7033#section-4.4.4.4">the title attribute</a> in the JSON.</p>

<p>Before I start writing up anything formal - I'd love your constructive criticism on this.</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:ok">
<p>OK, I don't <em>have</em> to. But I <em>want</em> to. I dislike having last year's photo cluttering some half-remembered social network.&nbsp;<a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#fnref:ok" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:boo">
<p>We live in the redecentralised future now!&nbsp;<a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#fnref:boo" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:slow">
<p>I wrote about this in <a href="https://shkspr.mobi/blog/2024/03/well-known-avatar/">2004</a> and in <a href="https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/">2020</a>. It takes me time, but I get there eventually!&nbsp;<a href="https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/#fnref:slow" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=64078&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/10/alpha-launch-well-known-avatar-feedback-wanted/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Safelinks are a fragile foundation for publishing]]></title>
		<link>https://shkspr.mobi/blog/2024/02/safelinks-are-a-fragile-foundation-for-publishing/</link>
					<comments>https://shkspr.mobi/blog/2024/02/safelinks-are-a-fragile-foundation-for-publishing/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 05 Feb 2024 12:34:10 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=49515</guid>

					<description><![CDATA[Microsoft loves you and wants to protect you. So every time you receive an email with a link in it, Microsoft Outlook helpfully rewrites it so that it goes through their &#34;safelinks&#34; system.  Safelinks allow your administrator, or someone at Microsoft, to stop you visiting a link which is malicious or suspicious.  Rather than going to example.com, your link now goes to…]]></description>
										<content:encoded><![CDATA[<p>Microsoft loves you and wants to protect you. So every time you receive an email with a link in it, Microsoft Outlook helpfully rewrites it so that it goes through their "<a href="https://learn.microsoft.com/en-us/microsoft-365/security/office-365-security/safe-links-about?view=o365-worldwide#safe-links-settings-for-email-messages">safelinks</a>" system.</p>

<p>Safelinks allow your administrator, or someone at Microsoft, to stop you visiting a link which is malicious or suspicious.  Rather than going to <code>example.com</code>, your link now goes to <code>safelinks.protection.outlook.com/?url=example.com</code>.</p>

<p>Hurrah! If you accidentally click on a naughty link you won't cause chaos and ructions.</p>

<p>Except, there's a tiny problem.  People like to copy and paste links that they receive. Someone sends an email which says "here's the link to that report you asked for" which then gets copied into a document or a web page.</p>

<p>For example, I was reading this <a href="https://assets.publishing.service.gov.uk/media/65b236c81702b10013cb1289/DHSC-Annual-report-and-accounts-2022-2023-web-accessible.pdf">official document from the UK's Department of Health and Social Care</a>. Slap bang in the middle is a link to another report:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/01/safelinks-fs8.png" alt="Screenshot showing a document. The cursor hovers over a link. The pop up shows a safelinks URl." width="903" height="275" class="aligncenter size-full wp-image-49516">

<p>That forces <em>everyone</em> who visits that link to go through Microsoft's proxy. That <em>might</em> protect users if a link later becomes suspicious. But, more likely, it will be used in analytics to further profile users who click on links. It also undermines a user's ability to see the final destination of a link unless they can manually URl-decode content in their head.</p>

<p>It appears that every large organisation which uses Microsoft is prone to this failure.  Lots of UK Government departments publish content with safelinks:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/01/safelinks-govuk-fs8.png" alt="Screenshot of Google search results for GOV.UK sites." width="1050" height="825" class="aligncenter size-full wp-image-49519"></p>

<p>The US Military too:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/01/safelinks-mil-fs8.png" alt="Screenshot of Google search results for US Military sites." width="1050" height="750" class="aligncenter size-full wp-image-49521"></p>

<p>It's all over Twitter:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/01/safelink-twitter-fs8.png" alt="Screenshot of Twitter search results." width="748" height="561" class="aligncenter size-full wp-image-49518"></p>

<p>And there are hundreds of academic works infested:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/01/safelinks-scholar-fs8.png" alt="Screenshot of Google Scholar results." width="1025" height="785" class="aligncenter size-full wp-image-49517"></p>

<p>Look, I <em>get</em> why people do this. They copy a link from an email, paste it in, click it, and it works. No one writes raw HTML by hand, nor should they have to. Our WYSIWYG tools work really well and hide all the mumbo-jumbo. Copy editors look at text; not hypertext.  It's only nerds like me who hover over a link before clicking on it.</p>

<p>Perhaps I should stop worrying? Perhaps it is OK that Microsoft intercepts the clicks from people all around the world? Perhaps they can competently run a proxy which detects and blocks inappropriate content? Perhaps they won't ever abuse that facility?</p>

<p>Here's my prediction. In the next five or so years, Microsoft is going to accidentally shut off <code>*.safelinks.protection.outlook.com</code> and a million copy-and-pasted links across the web are going to break.</p>

<p>Think I'm over-reacting?  A decade ago, <a href="https://shkspr.mobi/blog/2013/08/the-end-of-ms-tag/">Microsoft got rid of their MS Tag product</a> and, shortly after, <a href="https://scanbuy.com/microsoft-tag-transition-to-scanlife">all their proxy links were shut off</a>.  Similarly, other proxies like <a href="https://shkspr.mobi/blog/2014/08/mcafees-failure-of-trust/">McAfee have shut down with little warning</a>.</p>

<p>Or maybe <a href="https://www.zdnet.com/article/microsoft-has-a-subdomain-hijacking-problem/">Microsoft's sub-domains will be hijacked</a>?</p>

<p>Either way, if you work in digital publishing, please make sure that your links point directly to the content that you want; not to Microsoft's safelinks service.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=49515&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/02/safelinks-are-a-fragile-foundation-for-publishing/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[I think I kind of hate lazy loading]]></title>
		<link>https://shkspr.mobi/blog/2023/09/i-think-i-kind-of-hate-lazy-loading/</link>
					<comments>https://shkspr.mobi/blog/2023/09/i-think-i-kind-of-hate-lazy-loading/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 12 Sep 2023 11:34:14 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46755</guid>

					<description><![CDATA[Yesterday I was on a train. I clicked on a link and my browser loaded a long article for me to read. Halfway through reading it, the train went into a tunnel and I lost signal.  That meant I couldn&#039;t see the images on the other half of the page for the rest of the journey.  I had a sea of broken images.    Even though the page had fully loaded, the images were set to &#34;lazy&#34; loading. When my…]]></description>
										<content:encoded><![CDATA[<p>Yesterday I was on a train. I clicked on a link and my browser loaded a long article for me to read. Halfway through reading it, the train went into a tunnel and I lost signal.</p>

<p>That meant I couldn't see the images on the other half of the page for the rest of the journey.  I had a sea of broken images.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/09/broken-image.png" alt="An icon representing a broken image." width="644" height="314" class="aligncenter size-full wp-image-46759">

<p>Even though the <em>page</em> had fully loaded, the images were set to "lazy" loading. When my browser sees <code>&lt;img src="example.jpg" loading="lazy" /&gt;</code> it defers downloading the picture until it is about to scroll into view.</p>

<p>There's a few reasons why this is a good thing. If I leave the page before scrolling down, the browser doesn't waste time, energy, or bandwidth downloading images which will never be seen. That's good for my battery life and cheaper for my bill. It also saves the server from flinging bits around the world which are promptly trashed<sup id="fnref:hyp"><a href="https://shkspr.mobi/blog/2023/09/i-think-i-kind-of-hate-lazy-loading/#fn:hyp" class="footnote-ref" title="I am, of course, a massive hypocrite and use Lazy Loading on this blog for those very same reasons." role="doc-noteref">0</a></sup>.</p>

<p>And yet...</p>

<p>It seems that every time I'm on a train - or somewhere else with spotty Internet access - I run in to a situation where I <em>previously had</em> plenty of bandwidth and battery, but my user-agent decided it knew best. So it didn't attempt to load images until <em>after</em> I lost signal.</p>

<p>There's no way to disable Lazy Loading on Android Chrome or Android Firefox.</p>

<p>So, I guess I'm stuck.  Lazy loading seems like one of those things which is great in certain circumstances, but has a pretty horrible failure mode<sup id="fnref:alt"><a href="https://shkspr.mobi/blog/2023/09/i-think-i-kind-of-hate-lazy-loading/#fn:alt" class="footnote-ref" title="Made worse by poor or non-existent alt text." role="doc-noteref">1</a></sup>.</p>

<p>Anyone else feel this way?</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:hyp">
<p>I am, of course, a massive hypocrite and use Lazy Loading on this blog for those very same reasons.&nbsp;<a href="https://shkspr.mobi/blog/2023/09/i-think-i-kind-of-hate-lazy-loading/#fnref:hyp" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:alt">
<p>Made worse by poor or non-existent alt text.&nbsp;<a href="https://shkspr.mobi/blog/2023/09/i-think-i-kind-of-hate-lazy-loading/#fnref:alt" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46755&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/09/i-think-i-kind-of-hate-lazy-loading/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[What will the Web be like in 20 years?]]></title>
		<link>https://shkspr.mobi/blog/2023/09/what-will-the-web-be-like-in-20-years/</link>
					<comments>https://shkspr.mobi/blog/2023/09/what-will-the-web-be-like-in-20-years/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 03 Sep 2023 11:34:06 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[predictions]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46634</guid>

					<description><![CDATA[Way back in 2011, I contributed to an article on The Next Web called &#34;What will the Web be like in 20 years?&#34;.  Foolishly, I missed the 10 year anniversary, but let&#039;s see how we&#039;re doing against those predictions a little over halfway through.  My prediction for the Web?  The same speed. Faster pipes &#38; processors – more bloated markup &#38; JS.  Well... fuck! Bang on the money there. The web is f…]]></description>
										<content:encoded><![CDATA[<p>Way back in 2011, I contributed to an article on The Next Web called "<a href="https://thenextweb.com/news/what-will-the-internet-be-like-in-20-years">What will the Web be like in 20 years?</a>".</p>

<p>Foolishly, I missed the 10 year anniversary, but let's see how we're doing against those predictions a little over halfway through.</p>

<p>My prediction for the Web?</p>

<blockquote><p>The same speed. Faster pipes &amp; processors – more bloated markup &amp; JS.</p></blockquote>

<p>Well... fuck! Bang on the money there. The web <em>is</em> faster than it was on dial-up. But I can't say that it's noticeably better since I got ADSL. Sure, it's faster to download big files and stream 4K video. But for day-to-day browsing? Between the unoptimised "hero" images, multi-megabytes of JS, and thousands of trackers, it sometimes feels like we've taken a step backwards in speed.</p>

<p>We all know that bloat expands to fill available bandwidth. But perhaps we could rein it in a little? Please?</p>

<p>A few of the predictions are already here. Better, smarter phones. Computers becoming pervasive and invisible. And, yes, lots of cat gifs.</p>

<p>Some of the other predictions are - I think it's fair to say - not quite on track.</p>

<p>We haven't returned to an AOL model where AT&amp;T charge us per minute. And I don't see any path to that.</p>

<p>Internet censorship is a tricky one. There are some countries which routinely shut off net access. There's still a cat-and-mouse game with pirates. There are still people crying censorship when their inflammatory posts are removed.  But, outside of a few jurisdictions, you remain as free as ever to criticise whoever you want.</p>

<p>Holograms aren't even close to real. And, no, Facebook's laughable attempts at the MeTAvErSe don't count. Perhaps Apple's iBalls (or whatever they're called) will get us to that point before 2031? But I doubt it.</p>

<p>There are a lot of predictions about 3D printers. Look, they're pretty nifty, but it is clear that most homes don't need an endless supply of rapidly printed plastic doodahs.</p>

<p>Finally, there are a couple which I still think are feasible by 2031. Take this one from Santiago Ochoa:</p>

<blockquote><p>Companies like Google, Facebook, PayPal, Amazon, will create virtual currency systems linked to our social reputation. The more friends, posts, contacts, and comments we have, the more +1s, “like it”s or whatever points we’ll accumulate. These points will then be used to buy real things like you do now with PayPal and Amazon. Good social communicators will be able to make a living out of social networking points. Similar to Second Life but not limited to a virtual world. Our cell phones will be used as wallets and even some salaries will be paid with virtual money.</p></blockquote>

<p>Social credit scores aren't mainstream… yet. But Twitter is experimenting giving revenue to some posters based on their social reach. Facebook's currency dreams are dead for now, but I bet another social network will try to use virtual money as its hook. Some people are, no doubt, being paid in volatile cryptotokens. And many of us use our phones as tap-to-pay wallets.</p>

<p>There's also this by Pedro Henrique Monteiro Padilha:</p>

<blockquote><p>Internet will more and more allow people to work to companies on other countries or continents. It will also create a new way for all our social behavior, we will have web shows and maybe web pubs. The large bandwidth will help us connecting everywhere and we will no longer need TV as we know. Every TV show will be a stream to be brought in different languages.</p></blockquote>

<p>That's pretty much the Covid experience, isn't it? Remote working, Zoom quizzes, livestreaming, and endless Netflix. Perhaps by the end of this decade streaming services won't be geo-restricted and decent subtitles will be available to all?</p>

<p>It's fun to see how accurate people's guesses are. But making predictions is usually less about future gazing and more about understanding our current reality. It isn't about being right or wrong - it's about daring to dream of something brighter than today.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46634&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/09/what-will-the-web-be-like-in-20-years/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The Future of the Web is VNC]]></title>
		<link>https://shkspr.mobi/blog/2023/07/the-future-of-the-web-is-vnc/</link>
					<comments>https://shkspr.mobi/blog/2023/07/the-future-of-the-web-is-vnc/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 31 Jul 2023 11:34:52 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Satire (Probably)]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46412</guid>

					<description><![CDATA[Many gallons of digital ink spilled at Google&#039;s plans for &#34;Web Environment Integrity&#34; which - depending on who you believe - is either an entirely reasonable proposal to protect users or a devious plan to add DRM to the entire web.  (It&#039;s the latter, obviously.)  We&#039;ll never know exactly whether users want this because Google is pathologically adverse to performing or publishing user research. …]]></description>
										<content:encoded><![CDATA[<p>Many gallons of digital ink spilled at Google's plans for "Web Environment Integrity" which - depending on who you believe - is either an entirely reasonable proposal to protect users or a devious plan to add DRM to the entire web.</p>

<p>(It's the latter, obviously.)</p>

<p>We'll never know exactly whether users want this <a href="https://github.com/RupertBenWiser/Web-Environment-Integrity/issues/46">because Google is pathologically adverse to performing or publishing user research</a>.</p>

<p>Anyway, I have a solution to all of Google's problems.  Forget this notion of untrusted "user agents" executing code on untrustworthy computers. I have a foolproof way of getting pixel-perfect rendering on every device. It also stops scraping. And, as a little side effect, completely defeats ad blocking.</p>

<p>It's <a href="https://en.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a>.</p>

<p>This takes "Server Side Rendering" to the extreme. Render exactly how you want the page to look and then stream it over a remote framebuffer protocol. Users get to see <em>exactly</em> what you want them to see - ads included!</p>

<p>Just imagine the possibilities. No more worrying about which browser is being used - render everything through Chrome and stream to everyone!</p>

<p>Users simply can't alter the content they see - which keeps them safe from hackers, and protects your advertising revenue.</p>

<p>Low bandwidth? VNC will simply degrade the quality of what you see. Look, do you really want poor people viewing your expensive website?</p>

<p>Those naughty hackers won't be able to copy and paste your content - the trusted VNC viewer simply won't let them.</p>

<p>Want to track users across multiple sites? Might be tricky.  Just route all your content through Google's <del>AMP</del> VNC service!</p>

<p>...ugh... I've reinvented <a href="https://blogs.opera.com/news/2015/04/opera-mini-history-new-version-android/">Opera Mini</a> and given myself a sad.</p>

<p>There are <em>so</em> many decent people working at Google. And all the good they're trying to do is being drowned out by mediocre and mendacious crap like this.  Google desperately needs to be broken up. It's simply untenable to have the largest browser in the hands of the largest web advertising firm. Android isn't safe with a firm which priorities their advertisers' needs over their customers' needs.</p>

<p>The thing is, this is coming. There is literally nothing you can do to stop it. Your protests are meaningless next to the desire for some people at Google to sanitise the web.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46412&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/07/the-future-of-the-web-is-vnc/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Never use a URL shortening service - even if you own it]]></title>
		<link>https://shkspr.mobi/blog/2023/02/never-use-a-url-shortening-service-even-if-you-own-it/</link>
					<comments>https://shkspr.mobi/blog/2023/02/never-use-a-url-shortening-service-even-if-you-own-it/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 18 Feb 2023 12:34:28 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[guardian]]></category>
		<category><![CDATA[hyperlinks]]></category>
		<category><![CDATA[newspapers]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43429</guid>

					<description><![CDATA[The Guardian launched its online adventures back in 1999. At some point, they started using the name &#34;Guardian Unlimited&#34;. Hey, the dot com boom made us all do crazy things! As part of that branding, they proudly used the domain GU.com  Over time, the branding faded and GU.com became a URL shortening service. Tiny URls like gu.com/abc could be printed in papers, sent via SMS, or posted on…]]></description>
										<content:encoded><![CDATA[<p>The Guardian launched its online adventures back in 1999. At some point, they started using the name "Guardian Unlimited". Hey, the dot com boom made us all do crazy things! As part of that branding, they proudly used the domain GU.com</p>

<p>Over time, the branding faded and GU.com became a URL shortening service. Tiny URls like <code>gu.com/abc</code> could be printed in papers, sent via SMS, or posted on Twitter. They made <a href="https://www.theguardian.com/help/insideguardian/2010/may/05/twitter-short-urls">a huge fanfare about how it would help with analytics</a>.</p>

<p>You can <a href="https://twitter.com/revdancatt/status/1572270482837196802">read some of the history of the shortner</a> to understand why it was created.</p>

<blockquote class="social-embed" id="social-embed-1572270482837196802" lang="en"><header class="social-embed-header"><a href="https://twitter.com/revdancatt" class="social-embed-user"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRiICAABXRUJQVlA4IBYCAADQCQCdASowADAAPrVOoEsnJCMhrjQLMOAWiWUAxCgIHaIGsq1u7HjWZruIuLPPak+glPBNcafFOf29k9Liq4b1W56BFtYOsqOVo1TfG3xDyMVeh7AuAgAA/v7j001FdmKOeVcbQyZjfNtpvEgtLy/0aw1dcRc+cp85fycUWIj7F1e6Mafx/7SNCuzlUIniwNO/pkUNq5tlrrl7jOvBYxdnuMBcrtAag7w6aCvCZrlH8kfWWTjvVevYVou5/LPweypuVfU6DSoryLNPSxks+ulat8Zj7bsGyIve56fDREhKSY+qSU1RIjfWCiOhjURu6DPEvHBEOjdFcCcQmlsB3zldcxBpkt15y6/npHytrFcM9ByD1cQq8Cb4DTTZVom3XrV4R9mtKuiQdsfB2m37zeE94S9EnjLOPAFoDAa9uWCCZclShwt1Ex/g6jAOE3BaLYNsyFV478mpt4XczbatVb/fzzqYmAzuizczARj3JYae67bKmsHObfw02fcVh9Yord4PPNOekdvFP1yWlgBr8gdeIrBDMdRmHoYbMT1ev+3AeZAx7efu5CsWXtsUnnrGLsFS+Yz4Zs+RAX21UBmBowaPslerY6CMOhgUo8ayEDVLvsxVW0L9T8nIPYo6ZmoUsgOyjbOu230Oe4CvkBdh1xUfnmti/WF/bvov7VGcykANMZ77HCjzZUmecYgYOaOhS2D0yVQAAAA=" alt=""><div class="social-embed-user-names"><p class="social-embed-user-names-name">Rev Dan Catt</p>@revdancatt</div></a><img class="social-embed-logo" alt="" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCmFyaWEtbGFiZWw9IlR3aXR0ZXIiIHJvbGU9ImltZyIKdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoCmQ9Im0wIDBINTEyVjUxMkgwIgpmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzFkOWJmMCIgZD0ibTQ1OCAxNDBxLTIzIDEwLTQ1IDEyIDI1LTE1IDM0LTQzLTI0IDE0LTUwIDE5YTc5IDc5IDAgMDAtMTM1IDcycS0xMDEtNy0xNjMtODNhODAgODAgMCAwMDI0IDEwNnEtMTcgMC0zNi0xMHMtMyA2MiA2NCA3OXEtMTkgNS0zNiAxczE1IDUzIDc0IDU1cS01MCA0MC0xMTcgMzNhMjI0IDIyNCAwIDAwMzQ2LTIwMHEyMy0xNiA0MC00MSIvPjwvc3ZnPg=="></header><section class="social-embed-text">Niche twitter thread time. I'm raising a glass to the end of the <a href="https://twitter.com/guardian">@guardian</a>'s URL shortener <a href="http://gu.com">gu.com</a>, which is now on sale for £2.5 million.<br><br>Back when twitter was only 140 chars &amp; didn't shrink url links itself, making short URLs a whole important thing.<br><br>1/8 <a href="https://twitter.com/revdancatt/status/1572270482837196802/photo/1">pic.x.com/wu9joo3vkw</a><a href="https://pbs.twimg.com/media/FdHTIamXkAIV4Du.jpg"><img class="social-embed-media" alt="" src="data:image/webp;base64,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"></a></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/revdancatt/status/1572270482837196802" aria-label="16 likes" class="social-embed-meta">❤️ 16</a><a href="https://twitter.com/revdancatt/status/1572270482837196802" aria-label="1 replies" class="social-embed-meta">💬 1</a><a href="https://twitter.com/revdancatt/status/1572270482837196802" aria-label="0 retweets" class="social-embed-meta">♻️ 0</a><a href="https://twitter.com/revdancatt/status/1572270482837196802"><time datetime="2022-09-20T17:04:29.000Z">17:04 - Tue 20 September 2022</time></a></footer></blockquote>

<p>And now, for reasons best known to themselves, The Gaurdian have stopped the service and <a href="https://gu.com/">put GU.com up for sale</a>.</p>

<p>The starting price is TWO AND HALF MILLION DOLLARS!</p>

<p>Look, if I had an asset that valuable and was looking at declining revenue, I'd sell it.</p>

<p>But breaking that URl comes with a problem. I've written before about <a href="https://shkspr.mobi/blog/2020/02/bitly-finally-starts-taking-privacy-seriously/">why URl shortening is bad for users and bad for the web.</a> I've even helped publish <a href="https://gcs.civilservice.gov.uk/blog/link-shorteners-the-long-and-short-of-why-you-shouldnt-use-them/">government guidance</a> about it. But all of those were based on the premise that the shortener was a 3rd party service.  I never thought someone would be as daft as to switch off their own service.</p>

<p>Here are some of the problems this sale causes.</p>

<style>.social-embed {all: unset;display: block;}.social-embed * {all: unset;display: revert;}.social-embed::after {all: unset;}.social-embed::before {all: unset;}blockquote:not(*) {all: unset;}.social-embed a {cursor: pointer;}blockquote.social-embed {box-sizing: border-box;border: .5px solid;width: 550px;max-width: 100%;font-family: sans-serif;margin: 0;margin-bottom: .5em;padding: 1em;border-radius: 1em;background-color: white;color: black;display: block;}.social-embed-header {display: flex;justify-content: space-between;}.social-embed-user {display: flex;position: relative;align-items: center;text-decoration: none;color: inherit;}.social-embed-avatar {width: 3em;height: 3em;margin-right: .5em;}.social-embed-avatar-circle {border-radius: 50%;}.social-embed-avatar-square {border-radius: 5%;}.social-embed-user-names-name {display: flex;align-items: center;font-weight: bold;margin: 0;}.social-embed-text {margin-top: .5em;}.social-embed-footer {display: flex;align-items: center;justify-content: space-between;}.social-embed-logo {width: 3em;}.social-embed-hr {border: .1px solid;margin: .5em 0 .5em 0;}.social-embed-meta {text-decoration: none !important;color: unset !important;}.social-embed-reply {display: block;}.social-embed-text a, .social-embed-footer time {color: blue;text-decoration: underline;}.social-embed-media, .social-embed-video {border-radius:1em;max-width:100%;}.social-embed-reply{font-size:.75em;display:block;}.social-embed-meter{width: 100%;background: #0005;}</style>

<blockquote class="social-embed" id="social-embed-1560621791470448642" lang="en"><header class="social-embed-header"><a href="https://twitter.com/edent" class="social-embed-user"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt=""><div class="social-embed-user-names"><p class="social-embed-user-names-name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCmFyaWEtbGFiZWw9IlR3aXR0ZXIiIHJvbGU9ImltZyIKdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoCmQ9Im0wIDBINTEyVjUxMkgwIgpmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzFkOWJmMCIgZD0ibTQ1OCAxNDBxLTIzIDEwLTQ1IDEyIDI1LTE1IDM0LTQzLTI0IDE0LTUwIDE5YTc5IDc5IDAgMDAtMTM1IDcycS0xMDEtNy0xNjMtODNhODAgODAgMCAwMDI0IDEwNnEtMTcgMC0zNi0xMHMtMyA2MiA2NCA3OXEtMTkgNS0zNiAxczE1IDUzIDc0IDU1cS01MCA0MC0xMTcgMzNhMjI0IDIyNCAwIDAwMzQ2LTIwMHEyMy0xNiA0MC00MSIvPjwvc3ZnPg=="></header><section class="social-embed-text">Whoever buys the <a href="http://gu.com">gu.com</a> domain will effectively get to rewrite history.<br>They can redirect links like these - and change the nature of the content being commented on.<blockquote class="social-embed" id="social-embed-1067447032363794432" lang="en"><header class="social-embed-header"><a href="https://twitter.com/JoyceWhiteVance" class="social-embed-user"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkoCAABXRUJQVlA4ID4CAABQDACdASowADAAPq1KnkmmJKMhLjv8yMAViUAVJO5ApQV3x9j+gpYwxsJwsuzTWzTPLzTDegfuygB3a1UnkqhyleOJ22EAp2qZX68sMSedc0PdMkSpOfXr0Cy5A3LYvHSQ2b1bNmB2Rew3uAD+6QRmQvnHF8LBpwzdqn5fCVXqfuXEtWhT9E/TZPX2Zv0bk6Uw88bp6SF4WK/Ow3ZYJGSgbesYN0TLbpdtOifl9keMQTUIYkh9YSEWTOkL4+EqUdFzdg334B1S9qBP3UvuBrrNyAyX09E49BJZr5KRUAQScRJvkVpbRKqS3u7JHW83VBJkWT/xer5blmltjAGhOFWZPuqnk5FRwDooQZcDo1NOY+i2gktQGv6B9TqD0oXZqzzQV9aAKdNkcwJpyTEdJL0rFjo1uGwiK8vW/xTMESt/HPxcmDmycZzE2HQMX+CO37tdy4pXJoWHeXoLrU4aOOLQwMgHQXr+9l65EcbpXfTKdziMSCbuICH3dTeb3HaBKLo0kYOUX0HGKhesEpdf3uDolEq4dUujOdgBCUbscqOY3cKPwhNtWqfssn9eaKYWmjC/cHtD6Up6B2PkjH2lLOZRBQDQsrTukvXMyHFRcjTiEB3RHTIgKGxmaMx9w8t1YGvfelOaJtgGpnN6QpkVB7ktTuy4lQc/j9quBIGn3OQ0mOnMv89RjWZJYNTaIy4ccEFRFM7PWUNmA68Azzyk9Uwiq6EC4wFykBGxfmFaumDi3fk4olPNLvUotAVqsAAA" alt=""><div class="social-embed-user-names"><p class="social-embed-user-names-name">Joyce Alene</p>@JoyceWhiteVance</div></a><img class="social-embed-logo" alt="" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCmFyaWEtbGFiZWw9IlR3aXR0ZXIiIHJvbGU9ImltZyIKdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoCmQ9Im0wIDBINTEyVjUxMkgwIgpmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzFkOWJmMCIgZD0ibTQ1OCAxNDBxLTIzIDEwLTQ1IDEyIDI1LTE1IDM0LTQzLTI0IDE0LTUwIDE5YTc5IDc5IDAgMDAtMTM1IDcycS0xMDEtNy0xNjMtODNhODAgODAgMCAwMDI0IDEwNnEtMTcgMC0zNi0xMHMtMyA2MiA2NCA3OXEtMTkgNS0zNiAxczE1IDUzIDc0IDU1cS01MCA0MC0xMTcgMzNhMjI0IDIyNCAwIDAwMzQ2LTIwMHEyMy0xNiA0MC00MSIvPjwvc3ZnPg=="></header><section class="social-embed-text">The Steele Dossier asserted Russian hacking of the DNC was "conducted with the full knowledge &amp; support of Trump &amp; senior members of his campaign.” Trump's war against the FBI &amp; efforts to obstruct make sense if he thought they could prove it. <a href="https://gu.com/p/axa7k/stw">gu.com/p/axa7k/stw</a></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/JoyceWhiteVance/status/1067447032363794432" aria-label="3506 likes" class="social-embed-meta">❤️ 3,506</a><a href="https://twitter.com/JoyceWhiteVance/status/1067447032363794432" aria-label="0 replies" class="social-embed-meta">💬 0</a><a href="https://twitter.com/JoyceWhiteVance/status/1067447032363794432" aria-label="1601 retweets" class="social-embed-meta">♻️ 1,601</a><a href="https://twitter.com/JoyceWhiteVance/status/1067447032363794432"><time datetime="2018-11-27T15:56:19.000Z">15:56 - Tue 27 November 2018</time></a></footer></blockquote></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/1560621791470448642" aria-label="11 likes" class="social-embed-meta">❤️ 11</a><a href="https://twitter.com/edent/status/1560621791470448642" aria-label="4 replies" class="social-embed-meta">💬 4</a><a href="https://twitter.com/edent/status/1560621791470448642" aria-label="0 retweets" class="social-embed-meta">♻️ 0</a><a href="https://twitter.com/edent/status/1560621791470448642"><time datetime="2022-08-19T13:36:44.000Z">13:36 - Fri 19 August 2022</time></a></footer></blockquote>

<p>Is there a tweet somewhere of a future politician saying "I support this 100% GU.com/...."? Redirect that to something horrific and you have a potential scandal on your hand.</p>

<p>There are <a href="https://scholar.google.com/scholar?hl=en&amp;as_sdt=0%2C5&amp;q=%22http%3A%2F%2Fgu.com%22&amp;btnG=">lots of academic papers with <code>gu.com</code> shortened links</a>. Those are all now dead.</p>

<p>Millions of links around the web - including many <a href="https://www.google.com/search?q=%22gu.com%22+site%3Atheguardian.com"><em>on the Grauniad itself</em></a> - are all now broken.</p>

<p>The Guarrdian could fix this by publishing a list of all the shortened URls. That wouldn't stop links breaking, but would make it possible for researchers to reconstruct the original destination.</p>

<p>For decades, we've tried to remind people that "<a href="https://www.w3.org/Provider/Style/URI">Cool URls Don't Change</a>". We'll just have to hope that the people of the future find a way to decipher all these obsolete links.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43429&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/02/never-use-a-url-shortening-service-even-if-you-own-it/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The BBC's 15 Web Principles - 15 years later]]></title>
		<link>https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/</link>
					<comments>https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 24 Nov 2022 12:34:35 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[BBC]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43852</guid>

					<description><![CDATA[Back in 2007 - an eternity in web years - the BBC published a document showing their 15 Web Principles.  I thought I&#039;d take a look at how they stack up today. And investigate whether the BBC is still living up to them.  Here are the slides if you want to play along at home:       BBC2.0: The BBC’s 15 Web Principles  from hvs   1. Build Web Products that meet user needs  This is still good advice! …]]></description>
										<content:encoded><![CDATA[<p>Back in 2007 - an eternity in web years - the BBC published a document showing their 15 Web Principles.</p>

<p>I thought I'd take a look at how they stack up today. And investigate whether the BBC is still living up to them.</p>

<p>Here are the slides if you want to play along at home:</p>

<iframe title="BBC2.0: The BBC’s 15 Web Principles" src="https://www.slideshare.net/slideshow/embed_code/key/FM7Uh4WZKFuil3" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>

<div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/hvs/bbc20-the-bbcs-15-web-principles" title="BBC2.0: The BBC’s 15 Web Principles" target="_blank">BBC2.0: The BBC’s 15 Web Principles</a> </strong> from <strong><a href="https://www.slideshare.net/hvs" target="_blank">hvs</a></strong> </div>

<h2 id="1-build-web-products-that-meet-user-needs"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#1-build-web-products-that-meet-user-needs">1. Build Web Products that meet user needs</a></h2>

<p>This is still good advice! Sadly, there are still too many services around the web which are built on business needs.  People grudgingly sign up for accounts to basic services which don't really need it - all because a business wants to see a number go up.</p>

<p>I find my needs being increasingly unmet by the BBC - other than them continuing to produce Doctor Who. I suspect I'm not their demographic target.  But, more importantly, I see lots of digital products (like Sounds) which seem to go against the grain of user needs and instead focus on what the BBC wants.</p>

<h2 id="2-the-very-best-websites-do-one-thing-really-well"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#2-the-very-best-websites-do-one-thing-really-well">2. The very best websites do one thing really well</a></h2>

<p>An extension of <a href="https://tldp.org/LDP/GNU-Linux-Tools-Summary/html/c1089.htm">the UNIX tools philosophy</a>.</p>

<p>I have mixed feelings about this. I don't think there's anything inherently wrong with a site which does multiple things. It's just rare for any site to do two things <em>well</em>.  For example, both Twitter and Facebook <em>could</em> have created something like TikTok - and it would fit in relatively well with their existing site. But the business culture of most organisations just doesn't allow any deviation from a central mission.</p>

<p>Does it make sense to have a website which does both cake recipes and Estonian literary criticism?  If you can do both, great! But that's a rare skill.</p>

<p>Does the BBC still embodies this principle? I think it depends on how you define a website. They have multiple sites doing multiple things.</p>

<h2 id="3-link-to-other-high-quality-sites"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#3-link-to-other-high-quality-sites">3. Link to other high quality sites</a></h2>

<p>The BBC's news pages still don't do this regularly. When reporting on a publication, it is rare that they ever link to primary sources. There's a real reluctance in most organisations to let people leave the site.</p>

<p>But it is still a relevant principle!  The web is a series of links.  It only works because people can trace backwards through your sources.</p>

<h2 id="4-fail-forward-fast"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#4-fail-forward-fast">4. Fail Forward, Fast</a></h2>

<p>A bit of early-2000s culture there! For new services, it still makes sense. For larger and more established services, it isn't OK to "move fast and break things".</p>

<p>But the principle of trying new things and being prepared to admit that they've failed is wonderful. It's humbling and informative.  I don't see much evidence of this in the BBC.  I'm not a regular user of their services - but there have been a few big launches recently which seem to have failed - but haven't yet been put out of their misery.</p>

<p>Failure is only a problem if you don't learn from it.</p>

<h2 id="5-treat-the-entire-web-as-your-creative-canvas"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#5-treat-the-entire-web-as-your-creative-canvas">5. Treat the entire web as your creative canvas</a></h2>

<p>This is a bit of a weird one. I <em>think</em> they're trying to say that users exist outside of your site. You need to have a presence on other sites - and then use them in the appropriate way.</p>

<p>For example, the BBC has multiple Twitter accounts. They exist independent of the main BBC web site.</p>

<p>This is mostly good advice. If you have the resources, you should be playing around with other sites and maximising your presence there.  You've got to meet people where they are.</p>

<h2 id="6-the-web-is-a-conversation-join-in"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#6-the-web-is-a-conversation-join-in">6. The web is a conversation, join in</a></h2>

<p>I <em>despise</em> the <a href="https://shkspr.mobi/blog/2014/02/chumming-down/">faux friendly tone of voice</a> adopted by most organisations.  Nevertheless, you can't ignore what people are saying about you.  You don't have to take the advice of your critics, but you probably ought to show that you've heard them.</p>

<p>The BBC is usually good at joining in with conversations - but like all large institutions, it has a pathological fear of expressing contrition.</p>

<h2 id="7-any-website-is-only-as-good-as-its-worst-page"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#7-any-website-is-only-as-good-as-its-worst-page">7. Any website is only as good as its worst page</a></h2>

<p>Oooh! A spicy take! 100% accurate. We've all seen a shiny front page, and then an absolute shitshow of a subsequent page. Think of all those airline websites which make it so easy to book a flight and then horrific to cancel your booking.</p>

<p>People <em>do</em> remember negative experiences. If you've ever run a moderately popular site, you'll know that people lovel complaining about how awful it is based on an obscure and unloved section.</p>

<h2 id="8-make-sure-all-your-content-can-be-linked-to-forever"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#8-make-sure-all-your-content-can-be-linked-to-forever">8. Make sure all your content can be linked to. Forever.</a></h2>

<p>You would have thought, after <a href="https://en.wikipedia.org/wiki/Doctor_Who_missing_episodes">flushing the early Doctor Who recordings down the memory hole</a>, the BBC would have learned from this mistake. Apparently not.</p>

<p><a href="https://www.w3.org/Provider/Style/URI">Timbl was writing about this problem in <em>1998!</em></a></p>

<p>I get that the BBC might have licencing agreements that make keeping some stuff online impossible. And old webservers need to be continually fed, watered, and patched to stop them from becoming a liability.  But too many of the Beeb's early sites and links are dead.</p>

<p>This is still good advice. Keep your content up as long as you can. You never know when someone will stumble across it.</p>

<h2 id="9-remember-your-granny-wont-ever-use-second-life"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#9-remember-your-granny-wont-ever-use-second-life">9. Remember your granny won't ever use Second Life</a></h2>

<p>Ooof! A bit of casual sexism and ageism there. But probably accurate in that <em>no one</em> is using Second Life.</p>

<p>The underlying point - late adopters have different needs from early adopters - is helpful. The words we use, the tropes we employ, and the interfaces we design all need to be accessible for new users.</p>

<p>I wonder how well the new BBC sites work for that demographic?</p>

<h2 id="10-maximise-routes-to-content"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#10-maximise-routes-to-content">10. Maximise routes to content</a></h2>

<p>Again, still good advice. I suppose we'd call this an "omnichannel strategy" today. Get your links out on social networks, videos, TV screens, and anywhere your audience are.</p>

<p>But, the BBC kinda breaks this. So many of their routes in are "download this app" or "search for us on". That obscures the direct link to specific content.</p>

<p>People don't live on one site. Well, OK, maybe Facebook! You have to accept that they won't all come through your front door. Make it easy to go from outside your site straight to a specific part of it.</p>

<h2 id="11-consistent-design-and-navigation-neednt-mean-one-size-fits-all"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#11-consistent-design-and-navigation-neednt-mean-one-size-fits-all">11. Consistent design and navigation needn't mean one-size-fits-all</a></h2>

<p>I think we all know the power of consistent branding, and it is reassuring to users if they understand how to get back to the start of a page. I agree that navigation needs to adapt depending on the size of the device.</p>

<p>Judging from the few BBC sites I visit, this isn't a priority for them any more. Each site seems desperate to push its own brand identity - which is a business need, not a user need.</p>

<h2 id="12-accessibility-is-not-an-optional-extra"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#12-accessibility-is-not-an-optional-extra">12. Accessibility is not an optional extra</a></h2>

<p>Tattoo that inside people's eyelids! Excellent advice.</p>

<h2 id="13-let-people-paste-your-content-on-the-walls-of-their-virtual-homes"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#13-let-people-paste-your-content-on-the-walls-of-their-virtual-homes">13. Let people paste your content on the walls of their virtual homes</a></h2>

<p>Things like <a href="https://oembed.com/">OEmbed</a> make this pretty easy nowadays. There will always be sites which want to jealously guard their own content, but it's still good advice.</p>

<p>The BBC seems reasonable at doing this. Of course, copyright often gets in the way.</p>

<h2 id="14-link-to-discussions-on-the-web-dont-host-them"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#14-link-to-discussions-on-the-web-dont-host-them">14. Link to discussions on the web, don't host them</a></h2>

<p>The BBC seems to flit back and forth on this. Some of their sites embrace comments, others don't.</p>

<p>I have mixed feelings. I don't think sites should "own" the user and try to force them to comment in one officially sanctioned place. And moderation is a complex and costly business.  It probably makes sense to let people know how to join in with a conversation on social media ("Hashtag Strictly!").</p>

<p>But the downside is that you're exposing your users to unmoderated and unfiltered content. Is that best for you? Is it harmful to them?</p>

<h2 id="15-personalisation-should-be-unobtrusive-elegant-and-transparent"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#15-personalisation-should-be-unobtrusive-elegant-and-transparent">15. Personalisation should be unobtrusive, elegant and transparent</a></h2>

<p>Ha! The BBC have reversed this in the last few years. Almost every one of their sites and apps <em>begs</em> you to sign in with an account. And, judging from the account they forced me to get on iPlayer, the personalisation is crude and obvious.</p>

<p>Do users <em>want</em> personalisation? That's hard to answer. Every power-user swears they want complete control and hates algorithmic choice. But for more casual users, it is a great way to find interesting content.</p>

<p>The real problem is that the algorithms are usually designed to promote <em>profitable</em> content. That is, content the business wants users to see - not what users would choose.</p>

<h2 id="and-now"><a href="https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/#and-now">And now?</a></h2>

<p>There's a fair bit of early-web-2.0 idealism in these 15 principles. In truth, I'm hard pressed to disagree with any of them.  Throughout the web - not just on the BBC - they are often observed mostly in the breach.</p>

<p>I wonder if the BBC is culturally capable of producing something like this in 2022? And, more importantly, enforcing it on its own sites?</p>

<p>What will the next 15 years bring?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43852&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/the-bbcs-15-web-principles-15-years-later/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How should user comments be marked up in HTML5?]]></title>
		<link>https://shkspr.mobi/blog/2022/05/how-should-user-comments-be-marked-up-in-html5/</link>
					<comments>https://shkspr.mobi/blog/2022/05/how-should-user-comments-be-marked-up-in-html5/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 04 May 2022 11:34:47 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=42446</guid>

					<description><![CDATA[This is quite the epitome of yak-shaving!  Suppose you have an article written in HTML. The basic layout might be something like:  &#60;body&#62;    &#60;main&#62;       &#60;article&#62;         The content of your article         ...   Pretty standard.  Now suppose you let users add comments to the article. I have two questions:   Where in the tree should they go? What HTML element should be used to group them?   It…]]></description>
										<content:encoded><![CDATA[<p>This is quite the <em>epitome</em> of yak-shaving!</p>

<p>Suppose you have an article written in HTML. The basic layout might be something like:</p>

<pre><code class="language-html">&lt;body&gt;
   &lt;main&gt;
      &lt;article&gt;
        The content of your article
        ...
</code></pre>

<p>Pretty standard.  Now suppose you let users add comments to the article. I have two questions:</p>

<ol>
<li>Where in the tree should they go?</li>
<li>What HTML element should be used to group them?</li>
</ol>

<p>It is, I think, a question where reasonable parties can justifiably come to distinctly different conclusions.</p>

<h2 id="where"><a href="https://shkspr.mobi/blog/2022/05/how-should-user-comments-be-marked-up-in-html5/#where">Where?</a></h2>

<p>Are comments a <em>part of</em> the article or are they <em>apart from</em> the article?</p>

<p>If you wrongly think that user-generated content is indivisible from the text of the article, then the answer is:</p>

<pre><code class="language-html">&lt;body&gt;
   &lt;main&gt;
      &lt;article&gt;
         The content of your article
         &lt;div&gt;
            Comments
</code></pre>

<p>If, however, you're fool enough to believe that commentary is separate from what is commented on, then you'll probably pick:</p>

<pre><code class="language-html">&lt;body&gt;
   &lt;main&gt;
      &lt;article&gt;
        The content of your article
      &lt;/article&gt;
      &lt;div&gt;
         Comments
</code></pre>

<p>Some idiots will insist that comments shouldn't even be <em>considered</em> next to the purity of the content of <a href="https://html.spec.whatwg.org/multipage/grouping-content.html#the-main-element"><code>&lt;main&gt;</code></a>. Hence:</p>

<pre><code class="language-html">&lt;body&gt;
   &lt;main&gt;
      &lt;article&gt;
        The content of your article
      &lt;/article&gt;
   &lt;/main&gt;
   &lt;div&gt;
      Comments
</code></pre>

<p>As ever, let us see what wisdom the HTML editors <i lang="la">passim</i> have given us.</p>

<blockquote><p>When article elements are nested, the inner article elements represent articles that are in principle related to the contents of the outer article. For instance, a blog entry on a site that accepts user-submitted comments could represent the comments as article elements nested within the article element for the blog entry.</p>

<p><a href="https://html.spec.whatwg.org/multipage/sections.html#the-article-element">4.3.2 The article element</a></p></blockquote>

<p>Ah! This is evidence that comments should be <em>inside</em> the article itself.</p>

<p>The code they give is (simplified):</p>

<pre><code class="language-html">&lt;article&gt;
   &lt;h1&gt;Page Heading&lt;/h1&gt;
   &lt;p&gt;...&lt;/p&gt;
   &lt;section&gt;
      &lt;h1&gt;Comments&lt;/h1&gt;
      &lt;article&gt;
         &lt;p&gt;Comment text&lt;/p&gt;
     &lt;/article&gt;
</code></pre>

<p>But, that's not the whole story!</p>

<blockquote><p>A section forms part of something else. An article is its own thing. But how does one know which is which? Mostly the real answer is "it depends on author intent".</p>

<p>[…]</p>

<p>A comment on an article is not part of the article on which it is commenting, therefore it is its own article.</p>

<p><a href="https://html.spec.whatwg.org/multipage/sections.html#article-or-section">4.3.12.1 Article or section?</a></p></blockquote>

<p>Although that section is <a href="https://developer.mozilla.org/en-US/docs/Glossary/non-normative">non-normative</a>, I think it is instructive.</p>

<p>The article is its own thing. A comment may <em>relate</em> to an article, but it is not <em>part</em> of the article.  Therefore, it's perfectly reasonable to place the comments <em>outside</em> the original article.</p>

<h2 id="what"><a href="https://shkspr.mobi/blog/2022/05/how-should-user-comments-be-marked-up-in-html5/#what">What?</a></h2>

<p>Ideally, there would be a <code>&lt;comment&gt;</code> element. There isn't.</p>

<blockquote class="social-embed" id="social-embed-192582201978781697" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-192581338291908608" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/brucel" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRuYBAABXRUJQVlA4INoBAACwCgCdASowADAAPrVSn0snJSKhqrqsAOAWiUAUu/5I4/b4JHWL+CnIb7u0NlOLqHTvVU0zBXtwfo/sCmVnousXbJMipVAlQUYpcwSxlkyNW7vio6Lbvl/J+KZfcNoAAP79DTnTddyglkAZ/oDCslpgciQlUcnQk/XLbBjivDGyCCjXQkCJUUwfJ4DcUbA3tjiE7T+4SsbHBOiP2k9g9YEC7Izug2L6fqC/A4uQAvUey+P1a5cLwq8sCHq6X9iaCZMpkUb4dQHxgZERCn6si7TuObEIr0I2DfMMXXyhei5HYanL9uqO4AWmkVcu+TMWihZxwMKmK8gBfGrlihzF5y8KHqrNraKCuDQHJw9hdY3CVihSvAJuM7p8kCN7/rZRpgm8YhCU6Zb7rgqjoF12Pk3HcKtytueZ/CGNJ/hW8aexAVbc8gNDFCXf/lZFSisHYIPUU5QIFOUjqjKyLfMr+UgWwI4aTcAnm2ji1Hl9jEBCBcQsXkBaS8gT4B8P3ShgNWOmiAx/hikCK/7v2jbWf2VDKSqT1NTOHl6kSGW9BeX9Btx+R5cJMx38gSDZpd8Rfbz6zXPObexPGJ1bFuNez/EFrPn8Xvbu/UvZWv8NMG06HNxdTcgZLjd4AAA=" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Bruce Lawson</p>@brucel</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">The &lt;dialog&gt; element is added to <a href="https://twitter.com/hashtag/html5">#html5</a> <a href="http://dev.w3.org/html5/spec/commands.html#the-dialog-element">dev.w3.org/html5/spec/com…</a> I'm glad to see it (accessible dialogue boxes!) even if it is badly mis-spelled</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/brucel/status/192581338291908608"><span aria-label="26 likes" class="social-embed-meta">❤️ 26</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="70 reposts" class="social-embed-meta">🔁 70</span><time datetime="2012-04-18T11:52:23.000Z" itemprop="datePublished">11:52 - Wed 18 April 2012</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/brucel/status/192581338291908608">Replying to @brucel</a></small>Why the hell isn't there a &lt;comment&gt; element in <a href="https://twitter.com/hashtag/html5">#html5</a>? <a href="https://twitter.com/brucel">@brucel</a>? Who's arse do I need to ki[ss|ck] to make this happen?</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/192582201978781697"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="2 replies" class="social-embed-meta">💬 2</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2012-04-18T11:55:49.000Z" itemprop="datePublished">11:55 - Wed 18 April 2012</time></a></footer></blockquote>

<p>As shown in the above code example, comments can be enclosed in a <code>&lt;section&gt;</code> element. And each comment itself can be wrapped in an <code>&lt;article&gt;</code>.</p>

<blockquote><p>article
<br>
A complete, or self-contained, composition in a document, page, application, or site […] This could be a forum post, […] a blog entry, a user-submitted comment […] or any other independent item of content.</p>

<p><a href="https://html.spec.whatwg.org/multipage/sections.html#usage-summary-2">Article Usage Summary</a></p></blockquote>

<p>I had thought the <a href="https://html.spec.whatwg.org/multipage/sections.html#the-aside-element"><code>&lt;aside&gt;</code></a> element might also be suitable. It represents:</p>

<blockquote><p>content that is tangentially related to the content around the aside element, and which could be considered separate from that content.</p></blockquote>

<p>Are comments tangentially related? Not really. And comments don't generally appear <em>inside</em> the thing they're commenting on. So I discarded that idea.</p>

<h2 id="why-is-this-important"><a href="https://shkspr.mobi/blog/2022/05/how-should-user-comments-be-marked-up-in-html5/#why-is-this-important">Why is this important?</a></h2>

<p>It isn't, really. Good semantic metadata should make clear what is content and what is commentary.</p>

<p>But not everyone consumes metadata. Bots, scrapers, and search engines should have a sensible way of heuristically determining what is relevant to them based on the markup of the document.  Unless we get a new <code>&lt;comment&gt;</code> element, we need to provide hints to user-agents about exactly what we mean.</p>

<p>I took an extremely scientific poll on Twitter to see if my acolytes agreed with me.</p>

<blockquote class="social-embed" id="social-embed-1515328377032523778" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-1515328374482382856" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">A two part question about semantic HTML.<br><br>1) What's the "correct" HTML elements for user generated comments?<br>Why?<hr class="social-embed-hr"><label for="poll_1_count">&lt;aside&gt;: (42)</label><br><meter class="social-embed-meter" id="poll_1_count" min="0" max="100" low="33" high="66" value="27.8">42</meter><br><label for="poll_2_count">&lt;section&gt;: (64)</label><br><meter class="social-embed-meter" id="poll_2_count" min="0" max="100" low="33" high="66" value="42.4">64</meter><br><label for="poll_3_count">&lt;div&gt;: (30)</label><br><meter class="social-embed-meter" id="poll_3_count" min="0" max="100" low="33" high="66" value="19.9">30</meter><br><label for="poll_4_count">&lt;bgsound&gt;: (15)</label><br><meter class="social-embed-meter" id="poll_4_count" min="0" max="100" low="33" high="66" value="9.9">15</meter></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/1515328374482382856"><span aria-label="1 likes" class="social-embed-meta">❤️ 1</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="1 reposts" class="social-embed-meta">🔁 1</span><time datetime="2022-04-16T13:56:52.000Z" itemprop="datePublished">13:56 - Sat 16 April 2022</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/1515328374482382856">Replying to @edent</a></small>Continuing:<br>2) What should the document tree look like?<br>Why?<br>Currently, I have<br>&lt;body&gt;<br> &lt;main&gt;<br>   &lt;article&gt;<br>   &lt;/article&gt;<br>   &lt;~comment~&gt;<br>But should the comments be inside the article? Or perhaps outside the main?<hr class="social-embed-hr"><label for="poll_1_count">&lt;article&gt;&lt;~comment~&gt;&lt;/art: (16)</label><br><meter class="social-embed-meter" id="poll_1_count" min="0" max="100" low="33" high="66" value="24.6">16</meter><br><label for="poll_2_count">&lt;/article&gt;&lt;~comment~&gt;: (36)</label><br><meter class="social-embed-meter" id="poll_2_count" min="0" max="100" low="33" high="66" value="55.4">36</meter><br><label for="poll_3_count">&lt;/main&gt;&lt;comment&gt;: (4)</label><br><meter class="social-embed-meter" id="poll_3_count" min="0" max="100" low="33" high="66" value="6.2">4</meter><br><label for="poll_4_count">&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;: (9)</label><br><meter class="social-embed-meter" id="poll_4_count" min="0" max="100" low="33" high="66" value="13.8">9</meter></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/1515328377032523778"><span aria-label="0 likes" class="social-embed-meta">❤️ 0</span><span aria-label="5 replies" class="social-embed-meta">💬 5</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2022-04-16T13:56:53.000Z" itemprop="datePublished">13:56 - Sat 16 April 2022</time></a></footer></blockquote>

<p>So, <code>&lt;section&gt;</code> wrapped around a group of <code>&lt;article&gt;</code>s, all of which are <em>outside</em> the <code>&lt;article&gt;</code> being discussed seems to me to be a sensible way to demarcate content from commentary.  Leaving us with:</p>

<pre><code class="language-html">&lt;body&gt;
   &lt;main&gt;
      &lt;article&gt;
        The content of your article
      &lt;/article&gt;
      &lt;section&gt;
         &lt;h1&gt;Comments&lt;/h1&gt;
         &lt;article&gt;
            Comment
         &lt;/article&gt;
         &lt;article&gt;
            Comment
         &lt;/article&gt;
      &lt;/section&gt;
   &lt;/main&gt;
&lt;/body&gt;
</code></pre>

<p>Do feel free to tell me I'm wrong in the comments. The box is down there, somewhere…</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=42446&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/05/how-should-user-comments-be-marked-up-in-html5/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Every search bar looks like a URL bar to users]]></title>
		<link>https://shkspr.mobi/blog/2021/10/every-search-bar-looks-like-a-url-bar-to-users/</link>
					<comments>https://shkspr.mobi/blog/2021/10/every-search-bar-looks-like-a-url-bar-to-users/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 14 Oct 2021 11:34:00 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=40638</guid>

					<description><![CDATA[Computers would be so much better if they never had to deal with users, amirite?!!?  I remember, years ago, working on a mobile web service which had a URl bar - so users could tap in bbc.co.uk on their T9 keypads - and a separate search bar. I thought that was pretty nifty. But it turns out, users tried searching for URls and they tried going to &#34;http:// When is the Next Bus?&#34;.  Bloody users!! …]]></description>
										<content:encoded><![CDATA[<p>Computers would be <em>so</em> much better if they never had to deal with users, amirite?!!?</p>

<p>I remember, years ago, working on a mobile web service which had a URl bar - so users could tap in bbc.co.uk on their T9 keypads - <em>and</em> a separate search bar. I thought that was pretty nifty. But it turns out, users tried searching for URls and they tried going to "http:// When is the Next Bus?".  Bloody users!!</p>

<p>Users find input bars confusing.  A good example of this is Amazon's search bar. It faithfully records what everyone is searching for and uses that big data to suggest to other users what they might be interested in. Which leads to some "interesting" results.</p>

<p>Here's what happens if you start searching for <code>https://</code></p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/10/Amazon1-fs8.png" alt="Search results for https in Amazon's autocomplete. Includes links to ebay and other stores." width="1024" height="576" class="aligncenter size-full wp-image-40639">

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/10/Amazon2-fs8.png" alt="Search results for https in Amazon's autocomplete. Includes links to ebay and other stores." width="1024" height="576" class="aligncenter size-full wp-image-40640">

<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/10/Amazon3-fs8.png" alt="Search results for https in Amazon's autocomplete. Includes links to ebay and other stores." width="1024" height="576" class="aligncenter size-full wp-image-40641">

<p>(And, yes, I used an incognito browser so it wouldn't be polluted with my own demented midnight searches for corrugated iron flavoured pogo sticks.)</p>

<p>There are a few lessons to take away from this.</p>

<ul>
<li>Users don't really understand interfaces</li>
<li>Computers don't really understand users</li>
<li>Big Data assumes that users are behaving in semi-rational manner</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=40638&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/10/every-search-bar-looks-like-a-url-bar-to-users/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[What's the point of Zip files?]]></title>
		<link>https://shkspr.mobi/blog/2021/02/whats-the-point-of-zip-files/</link>
					<comments>https://shkspr.mobi/blog/2021/02/whats-the-point-of-zip-files/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 16 Feb 2021 12:54:48 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=38004</guid>

					<description><![CDATA[My laptop ran out of space yesterday. Why? Useless ZIP files!  I needed to download a Windows Virtual Machine in order to upgrade the firmware on a device (long story). The official Windows 10 VM is 20GB  TWENTY GIGA-FUCKING-BYTES!!!  It downloaded reasonably quickly - yay fibre! But I had to wait almost as long to unzip the bloody thing. Whereupon, I discovered that zipping the file - and it was …]]></description>
										<content:encoded><![CDATA[<p>My laptop ran out of space yesterday. Why? Useless ZIP files!</p>

<p>I needed to download a Windows Virtual Machine in order to upgrade the firmware on a device (long story). The official Windows 10 VM is 20GB</p>

<p>TWENTY GIGA-FUCKING-BYTES!!!</p>

<p>It downloaded reasonably quickly - yay fibre! But I had to wait almost as long to unzip the bloody thing. Whereupon, I discovered that zipping the file - and it was only <em>one single file</em> in there - saved a whole 200MB. Yup, a 1% saving.</p>

<p>As it happens, I downloaded the wrong VM. So I downloaded the right one. A similar size, although this had couple of files in it - but the ZIP didn't save much space.</p>

<p>At which point, my laptop - not unreasonably - threw a wobbly because I'd suddenly consumed 80GB of space!</p>

<p>I'm sure you're about to tell me that there's an esoteric Linux command that will automagically extract a file, delete the original archive, and repartition my SSD for optimal layout - but that's not the point.</p>

<p>Every web server can - and should - gzip files on transmission.  Manually zipping a single file on your server doesn't save any download time. It doesn't save any bandwidth.</p>

<p>Perhaps it makes sense to bundle a few related files together - but if it is a single large file, a .zip just wastes the time and disk space of anyone who downloads it.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=38004&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/02/whats-the-point-of-zip-files/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The unreasonable effectiveness of simple HTML]]></title>
		<link>https://shkspr.mobi/blog/2021/01/the-unreasonable-effectiveness-of-simple-html/</link>
					<comments>https://shkspr.mobi/blog/2021/01/the-unreasonable-effectiveness-of-simple-html/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 26 Jan 2021 12:51:27 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[WeekNotes]]></category>
		<category><![CDATA[work]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=37884</guid>

					<description><![CDATA[I&#039;ve told this story at conferences - but due to the general situation I thought I&#039;d retell it here.  A few years ago I was doing policy research in a housing benefits office in London. They are singularly unlovely places. The walls are brightened up with posters offering helpful services for people fleeing domestic violence. The security guards on the door are cautiously indifferent to anyone…]]></description>
										<content:encoded><![CDATA[<p>I've told this story at conferences - but due to <em>the general situation</em> I thought I'd retell it here.</p>

<p>A few years ago I was doing policy research in a housing benefits office in London. They are singularly unlovely places. The walls are brightened up with posters offering helpful services for people fleeing domestic violence. The security guards on the door are cautiously indifferent to anyone walking in. The air is filled with tense conversations between partners - drowned out by the noise of screaming kids.</p>

<p>In the middle, a young woman sits on a hard plastic chair. She is surrounded by canvas-bags containing her worldly possessions.  She doesn't look like she is in a great emotional place right now. Clutched in her hands is a games console - a PlayStation Portable. She stares at it intensely; blocking out the world with Candy Crush.</p>

<p>Or, at least, that's what I thought.</p>

<p>Walking behind her, I glance at her console and recognise the screen she's on. She's connected to the complementary WiFi and is browsing the <a href="https://www.gov.uk/housing-benefit">GOV.UK pages on Housing Benefit</a>.  She's not slicing fruit; she's arming herself with knowledge.</p>

<p>The PSP's web browser is - charitably - <a href="https://playstationdev.wiki/pspdevwiki/index.php?title=Webbrowser">pathetic</a>. It is slow, frequently runs out of memory, and can only open 3 tabs at a time.</p>

<p>But the GOV.UK pages are written in simple HTML. They are designed to be lightweight and will work even on rubbish browsers.  They have to.  This is for everyone.</p>

<p>Not everyone has a big monitor, or a multi-core CPU burning through the teraflops, or a broadband connection.</p>

<p>The photographer Chase Jarvis coined the phrase "<a href="https://www.chasejarvis.com/project/the-best-camera/">the best camera is the one that’s with you</a>".  He meant that having a crappy instamatic with you at an important moment is better than having the best camera in the world locked up in your car.</p>

<p>The same is true of web browsers. If you have a smart TV, it probably has <a href="https://shkspr.mobi/blog/2018/08/twitters-secret-guest-mode/">a crappy browser</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2018/08/Twitters-guest-mode-displayed-on-a-TV.jpg" alt="Twitter's guest mode displayed on a TV." width="1080" height="768" class="aligncenter size-full wp-image-30210">

<p>My old car had <a href="https://shkspr.mobi/blog/2015/06/bmw-i3s-web-browser/">a built-in crappy web browser</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/06/i3-HTML5.jpg" alt="The dashboard of a BMW i3 - there is a web browser on the central display." width="1024" height="768" class="aligncenter size-full wp-image-26237">

<p>Both are painful to use - but <em>they work!</em></p>

<p>If your laptop and phone both got stolen - how easily could you conduct online life through the worst browser you have?  If you have to file an insurance claim online - will you get sent a simple HTML form to fill in, or a DOCX which won't render?</p>

<p>What vital information or services are forbidden to you due to being trapped in PDFs or horrendously complicated web sites?</p>

<p>Are you developing public services? Or a system that people might access when they're in desperate need of help? Plain HTML works. A small bit of simple CSS will make look decent. JavaScript is probably unnecessary - but can be used to progressively enhance stuff. Add alt text to images so people paying per MB can understand what the images are for (and, you know, accessibility).</p>

<p>Go sit in an uncomfortable chair, in an uncomfortable location, and stare at an uncomfortably small screen with an uncomfortably outdated web browser.  How easy is it to use the websites you've created?</p>

<p>I chatted briefly to the young woman afterwards. She'd been kicked out by her parents and her friends had given her the bus fare to the housing benefits office. She had nothing but praise for how helpful the staff had been. I asked about the PSP - a hand-me-down from an older brother - and the web browser. Her reply was "It's shit. But it worked."</p>

<p>I think that's all we can strive for.</p>

<hr>

<p><ins datetime="2021-02-01T10:57:08+00:00">Here are some stats on games consoles visiting GOV.UK</ins></p>

<blockquote class="social-embed" id="social-embed-1356192030695845889" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/TheRealNooshu" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkACAABXRUJQVlA4IDQCAADwCgCdASowADAAPrVSpU0nJKOiJzgKSOAWiUAXZm5dJ3l+BQ9m8phghwQHi8Ym3WaOSWWXnMbNxfUTSGhLzaiwgM/jMUh9QyDj+eMEfT8GtmH7Ikv7R970O8NBBuMa+KAA/u6fAj/ZHU+ifD/0K5VcqevQEIiV2z/I751/gf7B3YqTI0HUv5mf23t/HHmDmCdfNAB8oG9t5ssK1N3u6/Oi6YtdXyqBn89uoffcuDK1lL+YJj8OfNiNpVauzA/rdfPPGmiu0kMb1zXjv0ayNt3YWaNMLuP+Bbj2GymT8NS0EWuLK4zBspi4Xmi0/8j6zlQi/A5xa7l+3XBGSv5B6/rFAZ+u9CV463VDEiBQstTlc2DegXJD8I1O209P75NR55lQHMXNqNve+S+6w9DPQxYsdKvUaSmWM3dFYUrtQBHgZ51UzKROe3Bd9HJ8vH4n0WAA5WqXeerFQvZNcSiilNowyft9VwfV2ZA3BzrWidUbL8pxaPcZqCsNLGc2QPFPWZUINLCW32sNfT4i//RCWNcldFF4d/nR4s+L+3zwLHlDlB/7H9kH1KDTwLvNOWTs+ZmlQTYEWrq0stlUCysB31n9W8M4A+IfvxM3YOIc/yZNXuWPLU76FyMqg1p5+uOhZM5qMIrudEhzKOgSw8XuOiIr9S+LP52GU8CQsA9kwqKTNWDUZ/4o4ajssfRUF/B2EubzBYXporQg5/OK20e1YM3TwkRcWSNsfD4BkSi1Gb+kD2sSAAA=" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Matt Hobbs (@TheRealNooshu@hachyderm.io)</p>@TheRealNooshu</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/TheRealNooshu/status/1356192029211054081">Replying to @TheRealNooshu</a></small>Interestingly we have 3,574 users visiting <a href="http://GOV.UK">GOV.UK</a> on games consoles:<br>• Xbox - 2,062<br>• Playstation 4 - 1,457<br>• Playstation Vita - 25<br>• Nintendo WiiU - 14<br>• Nintendo 3DS - 16<br><br>20/22</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/TheRealNooshu/status/1356192030695845889"><span aria-label="27 likes" class="social-embed-meta">❤️ 27</span><span aria-label="1 replies" class="social-embed-meta">💬 1</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2021-02-01T10:45:51.000Z" itemprop="datePublished">10:45 - Mon 01 February 2021</time></a></footer></blockquote>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=37884&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/01/the-unreasonable-effectiveness-of-simple-html/feed/</wfw:commentRss>
			<slash:comments>57</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[I know how many microphones and cameras you have]]></title>
		<link>https://shkspr.mobi/blog/2020/12/i-know-how-many-microphones-and-cameras-you-have/</link>
					<comments>https://shkspr.mobi/blog/2020/12/i-know-how-many-microphones-and-cameras-you-have/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 22 Dec 2020 12:46:47 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=37591</guid>

					<description><![CDATA[A curious little data leak, but one I struggle to care about. Perhaps useful for a bit of fingerprinting?  Websites can access your system&#039;s camera and microphone. That&#039;s how modern video conferencing works in the browser. In an effort to retain user privacy, the browser asks the user for permission to use the camera and mics. No audio or video will be sent until the user agrees.  But some…]]></description>
										<content:encoded><![CDATA[<p>A curious little data leak, but one I struggle to care about. Perhaps useful for a bit of fingerprinting?</p>

<p>Websites can access your system's camera and microphone. That's how modern video conferencing works in the browser. In an effort to retain user privacy, the browser asks the user for permission to use the camera and mics. No audio or video will be sent until the user agrees.</p>

<p>But some metadata gets shared <em>before</em> you agree!</p>

<p>Visit the <a href="https://www.webrtc-experiment.com/DetectRTC/">WebRTC Detection Experiment site</a>. You'll notice that <em>without</em> you agreeing, the site is able to determine how many microphones you have:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/12/Mic-detection.png" alt="Web browser asking for permission to access microphones. On the page, the number of microphones is displayed." width="410" class="aligncenter size-full wp-image-37593">

<p>And how many cameras you have:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/12/Cameras.png" alt="Web page showing the device has two cameras, but that webcam permission hasn't been set." width="410" class="aligncenter size-full wp-image-37594"></p>

<p>Having two cameras is perhaps a reasonable proxy for being a mobile phone / tablet.  One main cam, one selfie cam.</p>

<p>Multiple microphones could be an indicator that the user is on a laptop. Built in microphone and an external USB microphone. Although some phones also present multiple microphones.</p>

<p>The names of the devices aren't sent until <em>after</em> you agree to the permission prompt.</p>

<p>There are inconsistencies between browsers:</p>

<table>
<thead>
<tr>
  <th></th>
  <th align="center">FireFox</th>
  <th align="center">Chrome</th>
</tr>
</thead>
<tbody>
<tr>
  <td>Laptop</td>
  <td align="center">3 mics, 1 camera</td>
  <td align="center">1 mic,  1 camera</td>
</tr>
<tr>
  <td>Android</td>
  <td align="center">1 mic, 2 cameras</td>
  <td align="center">3 mics, 2 cameras</td>
</tr>
</tbody>
</table>

<p>It is <em>useful</em> to present to the user a selection of input devices. But does the site need to know how many devices are attached <em>before</em> permission has been granted?</p>

<p>The way the iPhone does it, is to present a fake set of data - one mic and one camera - until permission has been granted. Then it shows the real information.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/12/iPhone-WebRTC-testing-fs8.png" alt="Screenshots of the iPhone showing fake data until permission is granted." width="927" height="888" class="aligncenter size-full wp-image-37618">

<p>Personally, I think the browser should only indicate a boolean to the site that AV inputs are available. Once permission is granted, then the site can request the number of devices and their names.</p>

<p>What do you reckon?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=37591&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/12/i-know-how-many-microphones-and-cameras-you-have/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How and why to use Lynx - the faster web browser]]></title>
		<link>https://shkspr.mobi/blog/2020/12/how-and-why-to-use-lynx-the-faster-web-browser/</link>
					<comments>https://shkspr.mobi/blog/2020/12/how-and-why-to-use-lynx-the-faster-web-browser/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 11 Dec 2020 12:34:15 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[lynx]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web dev]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=37392</guid>

					<description><![CDATA[Lynx is a text based browser. You think the people who browse without JavaScript are weird? Lynx doesn&#039;t even do images or CSS!  It downloads HTML and renders it at blazing fast speed. If you ever wondered just how slow modern web development has made the web - Lynx will show you the meaning of haste.  I use Lynx most days. Not as my exclusive browser - I&#039;m not a masochist - but as a handy tool.…]]></description>
										<content:encoded><![CDATA[<p>Lynx is a text based browser. You think the people who browse without JavaScript are weird? Lynx doesn't even do images or CSS!</p>

<p>It downloads HTML and renders it at blazing fast speed. If you ever wondered just how slow modern web development has made the web - Lynx will show you the meaning of haste.</p>

<p>I use Lynx most days. Not as my exclusive browser - I'm not a masochist - but as a handy tool. If I'm on a bandwidth constrained connection, or a site is overloaded, or I just want to browse without distraction. Lynx is where it's at. It is also brilliant for seeing what weird markup bugs your site has.</p>

<p>Linux users can install it with <code>sudo apt install lynx</code> or similar. Everyone else can <a href="https://lynx.invisible-island.net/">download Lynx from the official website</a>.</p>

<p>This is what it looks like:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/11/Screenshot-from-2020-11-29-09-36-02-fs8.png" alt="The Google home page rendered in text." width="1026" height="711" class="aligncenter size-full wp-image-37400"></p>

<p>Using it is simple. On the command line, type <code>lynx example.com</code> to go to example.com.</p>

<p>Arrow keys up and down move you... up and down. Left goes back a page, right follows a link. Q quits. And that's all you need to know for your first five minutes.</p>

<p>Pressing the letter <code>O</code> gets you to the option screen.  There are a bunch of things you can change here - and it shows off the UI pretty well.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/12/Screenshot-from-2020-11-29-09-37-36-fs8.png" alt="Options on a screen." width="1026" height="711" class="aligncenter size-full wp-image-37402">

<p>There are some things you can't change here. If you want to <em>always</em> accept or reject cookies - rather than be prompted every time - you'll need to edit the <code>~/.lyncrc</code> file.</p>

<p>Set <code>accept_all_cookies=TRUE</code>.</p>

<h2 id="why-is-this-important"><a href="https://shkspr.mobi/blog/2020/12/how-and-why-to-use-lynx-the-faster-web-browser/#why-is-this-important">Why is this important</a></h2>

<p>Computers lie to us. CSS hides our worst sins. JavaScript covers-up our poor architectural choices. With Lynx, there's no escape. You see the HTML rendered and <em>that's it</em>. Lynx renders all the HTML5 elements:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/12/Screenshot-from-2020-11-29-10-58-22-fs8.png" alt="HTML elements rendered in different colours." width="1026" height="711" class="aligncenter size-full wp-image-37403">

<p>It also does interactive elements as well:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/12/Screenshot-from-2020-11-29-10-59-11-fs8.png" alt="Form elements." width="1026" height="711" class="aligncenter size-full wp-image-37404">

<p>I've found <em>so</em> many bugs this way. Little quirks of markup which show up in the most unexpected places.</p>

<p>To be clear, Lynx isn't about accessibility testing. You should do that with proper tools which expose ARIA, show colour contrast, and the like. But Lynx is a good first pass at seeing how the text renders and flows, whether images have alt text, and if the general structure is easy to navigate.</p>

<p>Take some time to use it on your favourite sites today.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=37392&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/12/how-and-why-to-use-lynx-the-faster-web-browser/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Introducing Slowww - the slow web server]]></title>
		<link>https://shkspr.mobi/blog/2020/10/introducing-slowww-ml-the-slow-web-server/</link>
					<comments>https://shkspr.mobi/blog/2020/10/introducing-slowww-ml-the-slow-web-server/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 25 Oct 2020 12:02:00 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=37039</guid>

					<description><![CDATA[This experiment has now ended. The code is available on https://gitlab.com/edent/very-slow-website    One thing most websites try to do is try to serve you the page as fast as possible. So I&#039;ve decided to do the opposite. I&#039;ve made a (toy) web server which goes as slow as humanly possible.  You can visit it at http://slowww.rf.gd - but you&#039;ll need to be patient.  This delivers a page at about 175 …]]></description>
										<content:encoded><![CDATA[<p><ins datetime="2020-10-29T11:56:49+00:00">This experiment has now ended. The code is available on <a href="https://gitlab.com/edent/very-slow-website"></a><a href="https://gitlab.com/edent/very-slow-website">https://gitlab.com/edent/very-slow-website</a></ins></p>

<hr>

<p>One thing most websites try to do is try to serve you the page as fast as possible. So I've decided to do the opposite. I've made a (toy) web server which goes as slow as humanly possible.  You can visit it at <a href="http://slowww.rf.gd">http://slowww.rf.gd</a> - but you'll need to be patient.</p>

<p>This delivers a page at about 175 bits per second. Yes, bits. Not bytes.  It is deliberately set to be about as fast as an adult human can read. Why do you need your pages delivered any faster than you can read?</p>

<p>Can slowing things down make the web calmer and less distracting? Will it become a more thoughtful place to engage in dialogue? That sounds nice.</p>

<p>Anyway, the <a href="http://slowww.rf.gd">http://slowww.rf.gd</a> site has formatting, images, and one or two surprises. And bunnies.</p>

<p>It was originally built as a sort of HTML teaching aide. Or, perhaps I wanted to recreate the old character-by-character BBS experience. It might be a meditative exercise about frustration. Could it be a way to show off some modern HTML5 features in a quirky way? Most likely, lockdown has sent me gently loopy.</p>

<p>It doesn't use JavaScript or anything client side to simulate slowness. It genuinely serves you up pages a few bytes at a time.</p>

<p>The code itself is not very exciting.</p>

<pre><code class="language-php">header('Cache-Control: no-cache, no-store, must-revalidate');   //  No Cacheing
header('Pragma: no-cache'); //  No Cacheing
header('Expires: 0');   //  No Cacheing
header('Content-Encoding: none'); // Disable gzip compression
header('Content-Type: text/html; charset=utf-8');   //  Be nice to the browser
ob_end_flush(); // Stop buffer
//  The body
$str = &lt;&lt;&lt;EOT
&lt;!DOCTYPE html&gt;&lt;html lang="en-gb"&gt;&lt;head&gt;&lt;meta charset="utf-8"&gt;&lt;title&gt;Very Slow Website ...
EOT;
//  Count character in a safe way
$len = mb_strlen($str, 'UTF-8');

//  Echo each character and wait
for ($i = 0; $i &lt; $len; $i++) {
    echo mb_substr($str, $i, 1, 'UTF-8');
    ob_implicit_flush(1); // Implicit flush at each output command
    //  1 second is 1000000
    usleep( 40000 );
}

die();
</code></pre>

<p>I'm not clever enough to squeeze one of those intricate 1K JavaScript demos into the site. But that's not what it is for.</p>

<p>The site works pretty well in Firefox. Tolerably in Chrome. And is only a little bit broken in Safari. It's worth experiencing it in other browsers, to see how the cope with being drip-fed HTML.</p>

<p>I hope you will find it a calming, educational, and mildly entertaining way to spend five minutes.</p>

<p><a href="http://slowww.rf.gd">http://slowww.rf.gd</a></p>

<hr>

<p>Many thanks to my beta testers: Liz, Thomas, Tom, Dom, Mike, yet-another Tom, Anna, Saul, Coco, Hugh, Mark, Neil, Andrew, David, Kate, and Lola.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=37039&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/10/introducing-slowww-ml-the-slow-web-server/feed/</wfw:commentRss>
			<slash:comments>21</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Adding Web Monetization to your site using Coil]]></title>
		<link>https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/</link>
					<comments>https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 07 Oct 2020 11:47:58 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=36865</guid>

					<description><![CDATA[Recently, my blog was featured on Coil&#039;s list of monetised content.  I&#039;d like to take a little time to explain what Web Monetisation is, how to get set up with it, and what my thoughts are.  Quickstart  Stick this line in the &#60;head&#62; of your HTML page.  &#38;lt;meta name=&#38;quot;monetization&#38;quot; content=&#38;quot;$ilp.uphold.com/ieELEKD7epqw&#38;quot;&#38;gt;   That&#039;s it.  You should replace my uphold address…]]></description>
										<content:encoded><![CDATA[<p>Recently, my blog was featured on <a href="https://web.archive.org/web/20201019210633/https://developers.coil.com/community/who-is-web-monetized">Coil's list of monetised content</a>.  I'd like to take a little time to explain what Web Monetisation is, how to get set up with it, and what my thoughts are.</p>

<h2 id="quickstart"><a href="https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/#quickstart">Quickstart</a></h2>

<p>Stick this line in the <code>&lt;head&gt;</code> of your HTML page.</p>

<pre><code class="language-html">&amp;lt;meta name=&amp;quot;monetization&amp;quot; content=&amp;quot;$ilp.uphold.com/ieELEKD7epqw&amp;quot;&amp;gt;
</code></pre>

<p>That's it.</p>

<p>You should replace my uphold address with your own. Unless you want me to get paid for your work.</p>

<h2 id="what-is-web-monetisation"><a href="https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/#what-is-web-monetisation">What is web monetisation</a></h2>

<p>This is a <a href="https://web.archive.org/web/20201116131707/https://webmonetization.org/specification.html">draft specification</a> for seamless payments on the web.</p>

<p>This gives a website visitor a few ways to pay to use a website.</p>

<ol>
<li>Passive payment. You load your browser up with, say £5 per month. Your browser works out which sites your spent your time on, then splits the fiver between them.</li>
<li>Active payment. You visit a website and hit a paywall. You can tell the browser to pay for it - rather than going through an arduous payments process.</li>
</ol>

<p>There's a lot more to it than that - obviously - but that'll do as a brief explanation.</p>

<h2 id="get-started-as-a-creator"><a href="https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/#get-started-as-a-creator">Get Started As A Creator</a></h2>

<p>I was asked to beta test <a href="https://coil.com">Coil</a> - so that's what this section will focus on.</p>

<p>They have a pretty <a href="https://web.archive.org/web/20201027150152/https://coil.com/creator/how-to-monetize">simple guide to getting started</a>.  In theory, you can choose a variety of payment providers. I went with <a href="https://uphold.com/en-gb/">Uphold</a> because they don't require you to use a shitty pseudo-currency based on half-baked Blockchain tech.  You can get your money in pounds, pesos, paʻanga, or most other world currencies.</p>

<p>Uphold, like any reputable financial institution, has to perform a Know Your Customer check. The usual thing of sending in copies of your ID and proving you are who you claim. Nothing too arduous.</p>

<p>Once you have an "Interledger Payments" address - <code>$ilp.uphold.com/ieELEKD7epqw</code> - you can use it to start receiving payments from visitors.</p>

<p>Coil has a range of plugins for things like WordPress, and can even connect your YouTube and Twitch accounts to enable monetisation there.</p>

<h2 id="thoughts"><a href="https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/#thoughts">Thoughts</a></h2>

<p>We need a better way to pay for the web - because advertising sucks.  At best it is boorish and irrelevant interruptions. At worst it is... well, look around you.</p>

<p>Unfortunately, as popular as my blog is, I quite often get notifications like this:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/10/1p.jpeg" alt="A payment of a single penny." width="540" class="aligncenter size-full wp-image-36883">

<p>I know every penny helps - but that's a bit ridiculous!</p>

<p>It's a chicken-and-egg problem. But I think it's important that content creators take the first step. Start putting the meta elements on your pages <em>now</em>. Get the content and infrastructure there, and wait for consumers to catch up.</p>

<p>Coil could do with a bit more fine grained detail on <em>where</em> payments are coming from. It would be useful for me to know which of my pages performs best, or whether payments have come from YouTube or Twitch.  But it is early days - I'm excited to see how it develops.</p>

<p>So, get started now with Web Monetisation - and perhaps we can rid the web of the scourge of advertising.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=36865&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Semantic Dates in Wagtail Blog Posts]]></title>
		<link>https://shkspr.mobi/blog/2020/05/semantic-dates-in-wagtail-blog-posts/</link>
					<comments>https://shkspr.mobi/blog/2020/05/semantic-dates-in-wagtail-blog-posts/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 20 May 2020 11:15:19 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=34995</guid>

					<description><![CDATA[(Written because I couldn&#039;t find an easy guide online.)  Here&#039;s the code (formatted for readability):  &#60;time datetime=&#34;{{page.first_published_at&#124;date:&#34;c&#34;}}&#34;&#62;    {{page.first_published_at&#124;date:&#34;j F Y&#34;}} &#60;/time&#62;   You can also use last_published_at if it is a page which has been updated.  WHY?!??!  Semantics. HTML5 contains the &#60;time&#62; element. The contents of it show up as normal running text, but…]]></description>
										<content:encoded><![CDATA[<p>(Written because I couldn't find an easy guide online.)</p>

<p>Here's the code (formatted for readability):</p>

<pre><code class="language-html">&lt;time datetime="{{page.first_published_at|date:"c"}}"&gt;
   {{page.first_published_at|date:"j F Y"}}
&lt;/time&gt;
</code></pre>

<p>You can also use <a href="https://docs.wagtail.io/en/v2.9/reference/pages/model_reference.html#wagtail.core.models.Page.last_published_at"><code>last_published_at</code></a> if it is a page which has been updated.</p>

<h2 id="why"><a href="https://shkspr.mobi/blog/2020/05/semantic-dates-in-wagtail-blog-posts/#why">WHY?!??!</a></h2>

<p>Semantics. HTML5 contains the <a href="https://www.w3.org/TR/html51/textlevel-semantics.html#the-time-element"><code>&lt;time&gt;</code></a> element. The contents of it show up as normal running text, but the metadata gives information to anything that reads the source-code that the text relates to a date.</p>

<p>It's fairly easy to tell that <code>&lt;p&gt;3rd of May&lt;/p&gt;</code> is a date - well, it's only easy if you know that you're only ever looking for English text formatted a specific way.</p>

<p>For example, does <code>&lt;p&gt;3/5&lt;/p&gt;</code> mean three-fifth, or does it mean 3rd of May? Or, are you American, and it means 5th of March?</p>

<p>So, we can use a <code>&lt;time&gt;</code> element with the <code>datetime=</code> metadata. The datetime tag takes an ISO8601 string.</p>

<p>Luckily, we don't have to write it out by hand. <a href="https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#date">Django has a built-in template</a> for that.</p>

<p>Hey presto! Your blog posts now contain machine-readable data about <em>when</em> they were published.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=34995&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/05/semantic-dates-in-wagtail-blog-posts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[One Avatar To Rule Them All]]></title>
		<link>https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/</link>
					<comments>https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 11 Mar 2020 13:35:40 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=34204</guid>

					<description><![CDATA[Someone took a nice photo of me recently. I&#039;d like to use it as my avatar photo everywhere to present a consistent image. This is not easy to do.  I&#039;ve had to manually change it on a dozen different Slacks, a bunch of social networks, a few forums, all my email accounts, and I&#039;m still not done.  I just want to change my photo once. Because I&#039;m vain and lazy.  For a nerd like me, the solution is…]]></description>
										<content:encoded><![CDATA[<p>Someone took a nice photo of me recently. I'd like to use it as my avatar photo <em>everywhere</em> to present a consistent image. This is not easy to do.</p>

<p>I've had to manually change it on a dozen different Slacks, a bunch of social networks, a few forums, all my email accounts, and I'm still not done.</p>

<p>I just want to change my photo once. Because I'm vain and lazy.</p>

<p>For a nerd like me, the solution is obvious:</p>

<ul>
<li>My latest avatar image has a permanent web address - <a href="https://edent.tel/avatar">https://edent.tel/avatar</a>.</li>
<li>When I register for a service, it should ask me for my homepage address and automatically detect the URl for my avatar.</li>
<li>Periodically, it should check for an update.</li>
</ul>

<h2 id="what-about-gravatar"><a href="https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/#what-about-gravatar">What about Gravatar?</a></h2>

<p>The <a href="https://en.gravatar.com/">Globally Recognised Avatar</a> project from WordPress is supposed to be a solution to this problem. But it doesn't work, for two main reasons.</p>

<ol>
<li>Not everywhere uses it.</li>
<li>Works on a per-email basis.</li>
</ol>

<p>Nothing we can do about (1), but I find (2) is <em>annoying</em>.  I use a different email address for each website I use. Which means I have <em>dozens</em> of Gravatars!</p>

<p>Because Gravatar uses MD5 hashes, there's no way around this. It's also a (minor) privacy concern.</p>

<h2 id="what-about-libravatar"><a href="https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/#what-about-libravatar">What about Libravatar?</a></h2>

<p>The <a href="https://www.libravatar.org/">Libravatar project</a> is basically an open source version of Gravatar. It also uses hashes for email addresses. And, sadly, very few sites use it.</p>

<h2 id="what-about-webfinger"><a href="https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/#what-about-webfinger">What about Webfinger?</a></h2>

<p>The <a href="https://webfinger.net/rel/avatar/">documentation for Webfinger</a> is comically absent.</p>

<h2 id="what-about-microformats"><a href="https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/#what-about-microformats">What about Microformats?</a></h2>

<p>Standards like <a href="http://microformats.org/wiki/microformats-2#hyperlinked_person_image">microformats2</a> let you add an image to your profile.</p>

<p>Similarly, <a href="https://schema.org/image">Schema.org an add an image to your personal metadata</a>.</p>

<h2 id="social-networking-sites"><a href="https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/#social-networking-sites">Social Networking Sites</a></h2>

<p>This <em>sort of</em> exists. Services like <a href="https://web.archive.org/web/20200108124642/https://avatars.io/">Avatars.io</a> let you use you Twitter &amp; Facebook avatars as a URl - for example <code>avatars.io/twitter/edent</code>.</p>

<p>Sadly, the service isn't maintained any more, has broken images for Instagram, and doesn't include newer services like GitHub.</p>

<h2 id="regain-control"><a href="https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/#regain-control">Regain Control</a></h2>

<p>There are two fundamental mistakes we're making.</p>

<ul>
<li>An email address is not an identity.</li>
<li>A 3rd party service is not an identity.</li>
</ul>

<p>Given that Gravatar is promoted by WordPress - the largest website provider on the planet - and it still isn't universally accepted, I don't think there's any hope for smaller services.</p>

<p>So, I guess what I need is an app which can log in to all my accounts and automatically change the avatar whenever I want.</p>

<p>Or is there some other practical action I can take?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=34204&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/03/one-avatar-to-rule-them-all/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Should panoramic images be part of the HTML5 specification?]]></title>
		<link>https://shkspr.mobi/blog/2020/03/should-panoramic-images-be-part-of-the-html5-specification/</link>
					<comments>https://shkspr.mobi/blog/2020/03/should-panoramic-images-be-part-of-the-html5-specification/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 09 Mar 2020 12:23:26 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=34279</guid>

					<description><![CDATA[Noodling thoughts.  The humble &#60;img&#62; element is one of the oldest parts of HTML. It allows you to put a static image in a document. Later revisions allowed for animated images - like GIFs. And the &#60;map&#62; element made parts of the image clickable.  But what about interactive images?  Like panoramas and photospeheres?  Here&#039;s a 360° image. You can drag it to see all around.    That uses the …]]></description>
										<content:encoded><![CDATA[<p>Noodling thoughts.  The humble <code>&lt;img&gt;</code> element is one of the oldest parts of HTML. It allows you to put a static image in a document. Later revisions allowed for animated images - like GIFs. And the <code>&lt;map&gt;</code> element made parts of the image clickable.</p>

<p>But what about interactive images?  Like panoramas and photospeheres?</p>

<p>Here's a 360° image. You can drag it to see all around.</p>

<iframe style="border-style:none;" width="1024" height="400" allowfullscreen="" src="https://shkspr.mobi/pannellum/pannellum.htm#panorama=/blog/wp-content/uploads/2019/11/20190912_194621.jpg&amp;autoRotate=2&amp;autoLoad=false&amp;title=Interior"></iframe>

<p>That uses the fantastic <a href="https://pannellum.org/">Pannellum JavaScript Library</a>. At the moment, there's no native way to represent that in HTML. If you use an <code>&lt;img&gt;</code> you'll get a flat, equirectangular image like this:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/20190912_194621.jpg" alt="360 view of the inside of the concert hall." width="5660" height="2830" class="aligncenter size-full wp-image-32852"></p>

<p>Here's two possible ways I've just thought of...</p>

<p>(These are just sketches of ideas - think of them as a starting point for user research, rather than a completed product.)</p>

<h2 id="extend-to-be-like"><a href="https://shkspr.mobi/blog/2020/03/should-panoramic-images-be-part-of-the-html5-specification/#extend-to-be-like">Extend <code>&lt;img&gt;</code> to be like <code>&lt;video&gt;</code></a></h2>

<p>An HTML5 video element looks something like this:</p>

<pre><code class="language-html">&amp;lt;video controls=false autoplay=true&amp;gt;
</code></pre>

<p>That tells the browser to start playing the video, but not to show any playback controls in the UI. Panoramic images could use something like:</p>

<pre><code class="language-html">&amp;lt;img panorama=true photosphere=false xdegress=270 src=&amp;quot;...&amp;quot;&amp;gt;
</code></pre>

<p>That is, this image is a panorama - but not a sphere - with 270 degrees of movement on the horizontal axis.</p>

<p>Or</p>

<pre><code class="language-html">&amp;lt;img panorama=true photosphere=true startx=120 starty=330 src=&amp;quot;...&amp;quot;&amp;gt;
</code></pre>

<p>Display a photosphere, make the initial view start at the following co-ordinates.</p>

<h2 id="use"><a href="https://shkspr.mobi/blog/2020/03/should-panoramic-images-be-part-of-the-html5-specification/#use">Use <code>&lt;picture&gt;</code></a></h2>

<p>As I've said before, <a href="https://shkspr.mobi/blog/2015/11/a-polite-way-to-say-ridiculously-complicated/">I'm no fan of the <code>&lt;picture&gt;</code> element</a>. I think it is inconsistently designed compared to other parts of HTML5.</p>

<p>Perhaps we could use it like this:</p>

<pre><code class="language-html">&amp;lt;picture&amp;gt;
  &amp;lt;source type=&amp;quot;image/jpeg;panorama=true&amp;quot; srcset=&amp;quot;pano.jpg&amp;quot;&amp;gt;
  &amp;lt;img src=&amp;quot;flat.png&amp;quot; alt=&amp;quot;your browser doesn&amp;#039;t support panoramics&amp;quot;&amp;gt;
&amp;lt;/picture&amp;gt;
</code></pre>

<p>That gives the MIME type of the image an extra parameter. Obviously, you'd need to put in other configuration options something.</p>

<h2 id="what-next"><a href="https://shkspr.mobi/blog/2020/03/should-panoramic-images-be-part-of-the-html5-specification/#what-next">What next?</a></h2>

<p>A quick search didn't show anyone working on this as a proposal. That normally means either I'm not looking in the right places, or no one else is interested.</p>

<p>If you think this could be developed into a future standard, please let me know!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=34279&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/03/should-panoramic-images-be-part-of-the-html5-specification/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
	</channel>
</rss>
