<?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>ReDeCentralize &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/redecentralize/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Tue, 24 Mar 2026 09:38:20 +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>ReDeCentralize &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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[Some thoughts on personal git hosting]]></title>
		<link>https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/</link>
					<comments>https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 11:34:46 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=62821</guid>

					<description><![CDATA[As part of my ongoing (and somewhat futile) efforts to ReDeCentralise, I&#039;m looking at moving my personal projects away from GitHub.  I already have accounts with GitLab and CodeBerg - but both of those sites are run by someone else. While they&#039;re lovely now, there&#039;s nothing stopping them becoming as slow or AI-infested as GitHub.  So I want to host my own Git instance for my personal projects. …]]></description>
										<content:encoded><![CDATA[<p>As part of my ongoing (and somewhat futile) efforts to ReDeCentralise, I'm looking at moving my personal projects away from GitHub.  I already have accounts with <a href="https://gitlab.com/edent/">GitLab</a> and <a href="https://codeberg.org/edent">CodeBerg</a> - but both of those sites are run by someone else. While they're lovely now, there's nothing stopping them becoming as slow or AI-infested as GitHub.</p>

<p>So I want to host my own Git instance for my personal projects.  I'm experimenting with <a href="https://git.edent.tel/">https://git.edent.tel/</a></p>

<p>It isn't <em>quite</em> self-hosted; I'm paying <a href="http://pikapod.net/">PikaPod</a> €2/month to deal with the hassle of hosting and updating the software. I get to point my domain name at it which means I can always change the underlying service if I want. For example, it uses Gitea and I might want to switch to Forgejo later.</p>

<p>So far, it works. But there are a few significant drawbacks.</p>

<h2 id="network-effects"><a href="https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/#network-effects">Network Effects</a></h2>

<p>A large service like GitHub has network effects which are incredible. It feels like 90%+ of all developers have an account there. That means if someone wants to leave a comment or send a PR there is no barrier to entry.  That's huge! There are a bunch of popular FOSS projects which make me sign up for <em>yet another</em> service when all I want to do is send a simple bug report which I find deeply annoying.</p>

<p>Luckily, Gitea has built in support for various OAuth providers. So I've set up single-sign-on with Gits Hub and Lab.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/08/sign-in.webp" alt="An SSO screen with buttons for GitHub and GitLab." width="588" class="aligncenter size-full wp-image-62822">

<p>I <a href="https://mastodon.social/@Edent/115066706121512523">asked people how easy it was to use</a> - most people were able to use it, although a few people wanted a local-only account.</p>

<p>But is is still a bit of a faff. Even a little bit of hassle turns people away.</p>

<h2 id="forking-isnt-federated"><a href="https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/#forking-isnt-federated">Forking isn't Federated</a></h2>

<p>Suppose you want to make a Pull Request or just take a copy of the code. At the moment, you have to create a fork on <em>my</em> server. There's no way to easily fork something to your GitHub or personal server.</p>

<p>You can <code>git clone</code> the repo to your local machine, and you can manually move it elsewhere, but there's no way to send a PR from your repo to mine.</p>

<p>There's also no way for users to find other forks. Perhaps the <a href="https://forgefed.org/">upcoming ForgeFed proposals</a> will fix things - but it doesn't exist yet.</p>

<p>As pointed out in "<a href="https://blog.edwardloveall.com/lets-make-sure-github-doesnt-become-the-only-option">Let's Make Sure Github Doesn't Become the only Option</a>" - most of the tooling of git hosting platforms isn't adequate for modern needs.</p>

<h2 id="discoverability"><a href="https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/#discoverability">Discoverability</a></h2>

<p>The easiest way to find code at the moment is to search GitHub. Moving my stuff to a different site means it will only be discovered by a general search engine.</p>

<p>I want people to find and use my code. If that's hard, they won't. I can point existing users to the repo - but it still cuts down on discovery.</p>

<h2 id="admin-hassles"><a href="https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/#admin-hassles">Admin Hassles</a></h2>

<p>Although PikaPods takes care of all the hosting administration, there's still the faff of setting up all of Gitea's options.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/08/gitea-config.webp" alt="Long list of config options." width="801" height="800" class="aligncenter size-full wp-image-62823">

<p>If I get hit by <a href="https://shkspr.mobi/blog/2025/07/grinding-down-open-source-maintainers-with-ai/">an automated spam attack</a>, it'll be up to me to clean it up.</p>

<p>I'm not sure if I have the time, patience, or expertise to correctly and safely configure everything.  Time spent administrating is time not spent coding.</p>

<h2 id="sponsorship"><a href="https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/#sponsorship">Sponsorship</a></h2>

<p>I get a little bit of money when people <a href="https://github.com/sponsors/edent">sponsor me on GitHub</a>. There's no "sponsor" option on Gitea and, even if there was, the network effects of GitHub are substantial. Getting people to enter their credit card info into a random site isn't as convenient as clicking a button in GitHub.</p>

<h2 id="now-what"><a href="https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/#now-what">Now What?</a></h2>

<p>My <a href="https://github.com/edent/SuperTinyIcons">most popular Github repo</a> has around 140 contributors. I genuinely don't think I could attract that many people to OAuth onto my personal git hosting service.</p>

<p>Gitea seems to have a mixed reputation. But it's the only one offered by PikaPods.</p>

<p>There are <a href="https://github.workshops.petrichor.me/">interesting discussions about how to replace GitHub</a> but they're only in the early stages.</p>

<p>Although €2/mo isn't a huge amount, I've gotten used to having free services on GitHub / GitLab / CodeBerg.</p>

<p>So this, I think, is my plan:</p>

<ol>
<li>Leave my popular / sponsored repos on GitHub</li>
<li>Move my smaller repos to <a href="https://git.edent.tel/">https://git.edent.tel/</a></li>
<li>Create new repos in there as well</li>
</ol>

<p>I'm also going to look for a hosted Forgejo instance which lets me use my own subdomain - hopefully at a cheaper or comparable price. If you have any recommendations - please let me know!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=62821&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/09/some-thoughts-on-personal-git-hosting/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Self Hosting is an Unhelpful Term]]></title>
		<link>https://shkspr.mobi/blog/2024/11/self-hosting-is-an-unhelpful-term/</link>
					<comments>https://shkspr.mobi/blog/2024/11/self-hosting-is-an-unhelpful-term/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 24 Nov 2024 12:34:05 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[fediverse]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[Social Networks]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=54146</guid>

					<description><![CDATA[Mathew Duggan has a brilliant post called &#34;Self-Hosting Isn&#039;t a Solution; It&#039;s A Patch&#34;. In it, he (correctly and convincingly) argues that compelling people to run their own computer services is a complex and distracting crutch for the current problems we face.  It&#039;s expensive to self-host, there are moderation problems, and the difficulty level is too high for most people.  But, in my opinion,…]]></description>
										<content:encoded><![CDATA[<p>Mathew Duggan has a brilliant post called "<a href="https://matduggan.com/self-hosting-isnt-a-solution-its-a-patch/">Self-Hosting Isn't a Solution; It's A Patch</a>". In it, he (correctly and convincingly) argues that compelling people to run their own computer services is a complex and distracting crutch for the current problems we face.</p>

<p>It's expensive to self-host, there are moderation problems, and the difficulty level is too high for most people.</p>

<p>But, in my opinion, I think he misunderstands something about self-hosting because, as a term, it is both misleading and unhelpful.  When people say "Defund The Police" what they mean is "<a href="https://www.brookings.edu/articles/7-myths-about-defunding-the-police-debunked/">Move funds away from miliary style policing and give it to trained mental health professionals</a>" - what people <em>hear</em> is "Abolish the police and let anarchy reign".</p>

<p>The ability to "Self Host" doesn't <em>just</em> mean "run this on a Raspberry Pi in your cupboard and be responsible for constant maintenance".  Yes, you <em>can</em> do that if you're a masochist, but it isn't <em>restricted</em> to that.</p>

<p>To me, "Self-Hosting" means "I am in control of where I host something". I currently pay a company to host this blog. It has previously been hosted on Blogger, WordPress, my own VPS, and a variety of other services.  Tomorrow I could decide to host it with a big company, or I could run it from my phone. I get to choose.  That's what "Self-Hosting" is - a choice in where to host.</p>

<p>Similarly, Mastodon allows me self-host my account. I can have my content on one of the big servers and let them do moderation, storage, and maintenance for me - or I can move my account anywhere I choose. To a server in my cupboard and back again.</p>

<p>Email is similar. I know people who've gone from CompuServe, to HoTMaiL, to Gmail, to their own domain, then to OutLook. Their address-book moves with them. Forwarding rules ensure incoming email is routed correctly. They can choose to actively moderate spam, or outsource it. They can pay a company to host, keep backups in their basement, or watch adverts in return for services.</p>

<p>I agree with <a href="https://matduggan.com/self-hosting-isnt-a-solution-its-a-patch/">nearly everything Mathew says in his post</a>. It is absurdly privileged to think that running your own services is something normal people want to do and are capable of doing. Strong regulation helps everyone, people want simplicity, and ecosystems can be fragile.</p>

<p>But witness all the people moving over from Twitter to new networks. Do they care where their data is hosted and how it is maintained? No! But they want to move their social graph with them. And when BlueSky and Mastodon collapse, people will want to move again.</p>

<p>In the UK, I have the ability to move my phone number between hundreds of providers. If I'm particularly techy, I can even run my own infrastructure and route the number there. People <em>love</em> the fact that they can leave crappy service providers and move somewhere cheaper or with with better customer service or whatever it is they value.  I think that's a form of self-hosting; I get to choose who provides my services.</p>

<p>Similarly, I believe people have a desire for "self-hosting" which is difficult for them to articulate. They want to move their data around - be it old photos, a social graph, or a username. Most of them don't really care about the underlying technology (and why should they?) but they do care about continuity of service and being able to escape crappy service providers.</p>

<p>So, that's my reckons. Self-Hosting means you can choose where to host, and I think most people can find value in that.</p>

<p>What do you think?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=54146&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/11/self-hosting-is-an-unhelpful-term/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[1,000 edits on OpenStreetMap]]></title>
		<link>https://shkspr.mobi/blog/2024/05/1000-edits-on-openstreetmap/</link>
					<comments>https://shkspr.mobi/blog/2024/05/1000-edits-on-openstreetmap/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 16 May 2024 11:34:36 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=50552</guid>

					<description><![CDATA[Today was quite the accidental milestone! I&#039;ve edited OpenStreetMap over a thousand times!    For those who don&#039;t know, OSM (OpenStreetMap) is like the Wikipedia of maps. Anyone can go in and edit the map. This isn&#039;t a corporate-controlled space where your local knowledge is irrelevant compared to the desire for profit. You can literally go and correct any mistakes that you find, add recently…]]></description>
										<content:encoded><![CDATA[<p>Today was quite the accidental milestone! I've edited OpenStreetMap over a thousand times!</p>

<p><a href="https://www.openstreetmap.org/user/Terence%20Eden"><img src="https://shkspr.mobi/blog/wp-content/uploads/2024/05/OSM-edits.png" alt="My OSM profile showing 1,000 edits." width="504" height="390" class="aligncenter size-full wp-image-50586"></a></p>

<p>For those who don't know, OSM (OpenStreetMap) is like the Wikipedia of maps. Anyone can go in and edit the map. This isn't a corporate-controlled space where your local knowledge is irrelevant compared to the desire for profit. You can literally go and correct any mistakes that you find, add recently built roads, remove abandoned buildings, and provide useful local information.</p>

<p>Editing the full map is... complicated. For simple edits like changing the times of a postal collection, there are simple forms you can fill in.  There's also an aerial view so you can drag and drop misplaced locations. But for anything more complicated than that, you'll need to spend some time understanding the interface.  There's a friendly community who are happy to check or correct your submissions.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/05/OSM.webp" alt="Screenshot of the OSM interface." width="1080" height="658" class="aligncenter size-full wp-image-50553">

<p>I'll be honest, I don't use the web editor much. Instead, I use <a href="https://streetcomplete.app/">the Android app StreetComplete</a>. It's like an endless stream of sidequests. As you travel through the world, it will ask if a shop is still open, or if the highway is lit, or how many steps there are on a bridge, or whether a playground is suitable for all children, or if restaurants serve vegetarian food, or if a bus-stop has a bench, or... the list is almost endless!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/05/Quests.png" alt="Map showing lots of quest markers." width="504" height="518" class="aligncenter size-full wp-image-50585">

<p>I use it when I'm walking around somewhere new, or on holiday, or waiting for a bus. I used it so much that, for a short while, <a href="https://shkspr.mobi/blog/2023/01/how-i-became-the-1-mapper-in-new-zealand/">I became the #1 mapper in New Zealand</a>!</p>

<p>So get stuck in! Make mapping more equitable and more accurate.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=50552&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/05/1000-edits-on-openstreetmap/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Should your phone be a webserver?]]></title>
		<link>https://shkspr.mobi/blog/2023/08/should-your-phone-be-a-webserver/</link>
					<comments>https://shkspr.mobi/blog/2023/08/should-your-phone-be-a-webserver/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 10 Aug 2023 11:34:28 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[websites]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46557</guid>

					<description><![CDATA[I really like this article from Rohan D &#34;Every Phone Should Be Able to Run Personal Website&#34;.  In it, they make the convincing case that phones are perfectly capable of hosting websites and - if we want more people to escape the walled-gardens - this could be a good way to get people back into self-hosting.  I loved hosting a small site on my Nokia N95 back in the day, and I&#039;d be overjoyed if…]]></description>
										<content:encoded><![CDATA[<p>I really like this article from Rohan D "<a href="https://rohanrd.xyz/posts/every-phone-should-be-able-to-run-personal-website/">Every Phone Should Be Able to Run Personal Website</a>".</p>

<p>In it, they make the convincing case that phones are perfectly capable of hosting websites and - if we want more people to escape the walled-gardens - this could be a good way to get people back into self-hosting.</p>

<p>I <em>loved</em> hosting a small site on my Nokia N95 back in the day, and I'd be overjoyed if modern phones allowed this.  But there are a few pitfalls.</p>

<p><strong>Connectivity</strong> is the main one. If you're sat at home on WiFi all day, or only ever in an area with good cellular reception, then this is great. But the second you get on an underground train or climb a mountain your website goes offline.  Perhaps it might be nice to introduce a little randomness into our sites' availability. But most people want their site to work even if their phone is in a deadspot.</p>

<p><strong>Cost</strong> is also a factor. If you're on an unlimited data plan, then you're fine. If you're on a cheap PAYG plan with only a few GB then your website becomes a liability. If one of your links becomes suddenly popular, you might burn through your monthly limit in a few minutes.</p>

<p><strong>Battery</strong> life is the next big problem. Again, if you're sat in an office all day with your phone plugged in, you're fine. But if you're out and about, running a server and delivering data is power-hungry. Do you want your phone to die because your cat photo went viral?</p>

<p><strong>Security</strong> also becomes a factor. Web servers are <em>constantly</em> under attack. Will your private data be compromised if your phone's webserver hasn't received the latest patch? And if an attacker gets onto your phone, can they then infect the rest of your home network?</p>

<p>All that being said... I still like the idea! I have a few old Android devices which I use as IP Cameras. They stream pictures and videos across my <em>local</em> network - and I can control them over a web browser when I'm at home. But would I want to expose them to the whole Internet? No!</p>

<p>With the price of <abbr title="Single Board Computers">SBC</abbr>s coming down, I think it makes more sense to have a "website in a box" device. A little Raspberry Pi which is <em>only</em> running enough of a server to power WordPress or similar. Hardened against attack, and easy to manage and edit from a cheap mobile phone. Perhaps give it battery backup and a SIM card if you want redundancy. Boom! Instant personal webserver.</p>

<p>Yes, our phones should be under our control - and I certainly support anyone who wants to run a server from their device - but it seems to me that there are several hurdles which make it impractical.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46557&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/08/should-your-phone-be-a-webserver/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How do you decentralise emergency alerts?]]></title>
		<link>https://shkspr.mobi/blog/2023/04/how-do-you-decentralise-emergency-alerts/</link>
					<comments>https://shkspr.mobi/blog/2023/04/how-do-you-decentralise-emergency-alerts/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 21 Apr 2023 11:34:54 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[ActivityPub]]></category>
		<category><![CDATA[mastodon]]></category>
		<category><![CDATA[MastodonAPI]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=45624</guid>

					<description><![CDATA[Twitter&#039;s decision to hobble its API has meant that a number of useful alerting bots might no longer function. Your local subway might not be able to Tweet each morning about delays on the line, nor will a tornado warning be displayed as you scroll through photos of brunch, and forget about flood alerts between your memes.  In one sense, this is sad. A set of useful public services are being cut…]]></description>
										<content:encoded><![CDATA[<p>Twitter's decision to hobble its API has meant that a number of useful alerting bots might no longer function. Your local subway might not be able to Tweet each morning about delays on the line, nor will a tornado warning be displayed as you scroll through photos of brunch, and forget about flood alerts between your memes.</p>

<p>In one sense, this is sad. A set of useful public services are being cut off from their audience. My friend, Bill Thompson, described this as "<a href="https://someone.elses.computer/@billt/110201672232209911">unnecessary disruption</a>" I, on the other hand, think that creative destruction is sometimes a necessity.</p>

<iframe src="https://mastodon.social/@Edent/110201678592862401/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" height="300" allowfullscreen="allowfullscreen"></iframe>

<script src="https://mastodon.social/embed.js" async="async"></script>

<p><small>You can listen to more of the discussion on the <a href="http://garethandbillcast.com/the-gareth-and-billcast-stealing-cars-and-closing-the-public-square">Gareth and BillCast</a> about 19 minutes in.</small></p>

<p>Look, first off, it makes sense for organisations to put warning messages where their audience is likely to see it. No one sensible begrudges that. Twitter is a channel just as legitimate as radio, TV, or loudhailers in the street.</p>

<p>The problem comes when that's the <em>only</em> channel.</p>

<p>Twitter, somewhat accidentally, set itself up as a replacement for the public sphere. Now it has made it clear exactly what the cost of "free speech" is - alert bots are abandoning it.</p>

<p>Almost all the bots I mentioned above have websites. You can go check them, if you remember - but that isn't the same as having their warnings mixed in with your daily scrolling.</p>

<p>Some of those bots also have RSS feeds. But the RSS model doesn't lend itself to your peer group reposting urgent content into your feed.</p>

<p>And none of those websites and feeds are easily discoverable if you're in a new city.</p>

<p>So, how could this be solved with ActivityPub / Mastodon / Fediverse?</p>

<p>On the one hand, it's pretty easy for any organisation to set up a decentralised service with their alerts. Visiting <code>https:// mass_transit.ak</code> will show you all of Arstotzka's transport bots. You could subscribe to <code>@flood-warnings@alerts.gov.ak</code> for Arstotzka's official warnings.</p>

<p>On Twitter, it's easy to search "Train Delays London" and see <em>everything</em>. Hopefully including one of the accounts which gives you official alerts.</p>

<p>But, one of the interesting problems with a decentralised service is that search is (deliberately<sup id="fnref:deliberately"><a href="https://shkspr.mobi/blog/2023/04/how-do-you-decentralise-emergency-alerts/#fn:deliberately" class="footnote-ref" title="There is a strong culture of privacy and personal security on Mastodon. This is a good thing. People on a server dedicated to a marginalised community don't want their posts to be found by anyone who…" role="doc-noteref">0</a></sup>) difficult. Unless someone you're already following happens to share an alert, it can be very difficult to find relevant posts and accounts.</p>

<p>There is something of a solution which, I think, could be helpful. <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-location">ActivityPub defines a way to add location to a post</a>.</p>

<pre><code class="language-JSON">{
  &amp;quot;@context&amp;quot;: &amp;quot;https://www.w3.org/ns/activitystreams&amp;quot;,
  &amp;quot;type&amp;quot;: &amp;quot;Note&amp;quot;,
  &amp;quot;name&amp;quot;: &amp;quot;Arstotzka&amp;#039; Flood Service:&amp;quot;,
  &amp;quot;content&amp;quot;: &amp;quot;Heavy rains! Expect flooding and major disruption.&amp;quot;,
    &amp;quot;location&amp;quot;: {
       &amp;quot;name&amp;quot;: &amp;quot;Arstotzka Central District,
       &amp;quot;type&amp;quot;: &amp;quot;Place&amp;quot;,
       &amp;quot;longitude&amp;quot;: 12.34,
       &amp;quot;latitude&amp;quot;: 56.78,
    }
}
</code></pre>

<p>At the moment, there's no way to search for geo-tagged posts - but it doesn't have to be that way. It is relatively simple to use the <a href="https://en.wikipedia.org/wiki/Haversine_formula">Haversine formula</a> to select database entries which are within a geographic area.</p>

<p>But, the key problem is <a href="https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/">too much decentralisation</a>.  It goes against the credo of redecentralization to have a single server called <code>official-alerts.com</code> - having a single destination to search is convenient, but provides for a single point of failure.</p>

<p>A country might have <code>alerts.ak</code> which has multiple accounts, or might have single-use instances like <code>flood.ak</code> and <code>fire.ak</code> and <code>traffic.ak</code>.  They might be federated to, for example, <code>official-alert-service.eu</code>.</p>

<p>At which point, I get stuck.</p>

<p>How does a user discover these accounts?</p>

<p>There are three options, as I see it:</p>

<ol>
<li>Advertising. The organisation promotes these accounts via other channels.</li>
<li>Serendipity. A user sees that another user has shared one of these accounts.</li>
<li>Better discovery tools. A user's instance could recommend accounts to follow based on geography or other factors.</li>
</ol>

<p>Thoughts?</p>

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

<li id="fn:deliberately">
<p>There is a <em>strong</em> culture of privacy and personal security on Mastodon. This is a good thing. People on a server dedicated to a marginalised community don't want their posts to be found by anyone who wants to do a drive-by trolling. But, of course, this makes it harder to assess the zeitgeist.&nbsp;<a href="https://shkspr.mobi/blog/2023/04/how-do-you-decentralise-emergency-alerts/#fnref:deliberately" 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=45624&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/04/how-do-you-decentralise-emergency-alerts/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[What would a decentralised Uber look like?]]></title>
		<link>https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/</link>
					<comments>https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 30 Dec 2022 12:34:22 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[uber]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=44131</guid>

					<description><![CDATA[Uber are undoubtedly a company engaged in extremely dodgy activity. But, on the other had, they&#039;re ridiculously convenient.  A few months ago, we landed in a foreign country, opened the same Uber app as we used back home, and booked a cab. It just worked. I didn&#039;t need to register for a different version. I didn&#039;t need to create a new account. I didn&#039;t need to add a new credit card.  That&#039;s the…]]></description>
										<content:encoded><![CDATA[<p>Uber are undoubtedly a company engaged in <a href="https://www.theguardian.com/news/2022/jul/10/uber-files-leak-reveals-global-lobbying-campaign">extremely dodgy activity</a>. But, on the other had, they're ridiculously convenient.</p>

<p>A few months ago, we landed in a foreign country, opened the same Uber app as we used back home, and booked a cab. It just worked. I didn't need to register for a different version. I didn't need to create a new account. I didn't need to add a new credit card.  That's the sort of seamless experience which can <em>only</em> come from a centralised service.</p>

<p>But, hey, we're all moving to a ReDeCentralised Federated Future.  <a href="https://discworld.fandom.com/wiki/Nac_Mac_Feegle"><i lang="sco">Nae king! Nae quin! Nae laird! Nae master! We willna' be fooled again!</i></a> So let's think about how a decentralised Uber would work.</p>

<h2 id="broadcast"><a href="https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/#broadcast">Broadcast</a></h2>

<p>In the days before mobile phones, we could have used something like CB radio.  Broadcast a message to everyone in a few miles saying you want to travel from point A to point B.</p>

<p>Cabbies, or their agents, could reply to you with their availability and prices.</p>

<p>But that puts a lot of work on you to manage all the replies. And you have no idea of the driver rating. And you'll be broadcasting your location to all and sundry.</p>

<p>And, sadly, modern handsets have no concept of a broadcasting in a P2P manner.</p>

<h2 id="perhaps-a-little-centralisation"><a href="https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/#perhaps-a-little-centralisation">Perhaps a <em>little</em> centralisation?</a></h2>

<p>In most parts of the world, taxis are regulated. You don't want rapists, thieves, and murderers driving you home late at night.  You want a predictable fare calculated by an honest meter.</p>

<p>So let's say you have an app which knows your location, and send your request to the taxi-regulation-boards which cover your area. They can then broadcast out the request to all drivers, they confirm the fare, and then send it back to you.</p>

<p>I guess that <em>could</em> work. Think of all the taxi-regulators as little ActivityPub servers, and the cab drivers getting a stream of requests on their federated timeline.  Your phone could receive "accepts" from multiple drivers and you could pick the one you like.</p>

<p>But how would your phone know <em>which</em> local taxi services are available?  You would need a <em>centralised</em> list of them!</p>

<h2 id="foaf-and-signed-claims"><a href="https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/#foaf-and-signed-claims">FOAF and Signed Claims</a></h2>

<p>One of the supposed advantages of Uber is that it allows participants to rate each other. Passengers don't want to get in a car with an arsehole. Drivers don't want to pick up people who litter.</p>

<p>How would that work without a central entity? Could there be a solution with Verified Credentials? Have all participants write cryptographically signed ratings to a <em>*spits*</em> Blockchain?</p>

<p><a href="https://ariadne.space/2022/12/03/building-fair-webs-of-trust-by-leveraging-the-ocap-model/">Reputation Systems are hard</a>.</p>

<h2 id="user-needs"><a href="https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/#user-needs">User Needs</a></h2>

<p>Of course, before sketching out such a system, it probably helps to sketch out some vague thoughts on what users actually want from a taxi system - and how decentralisation would <em>help</em>.</p>

<p>Firstly, who are the users?</p>

<p>As a driver, I don't want to have multiple phones and apps stuck to my dashboard.</p>

<p><a href="https://www.reddit.com/r/Cyberpunk/comments/1po4wi/taxi_in_hong_kong/"><img src="https://shkspr.mobi/blog/wp-content/uploads/2022/12/phones.jpeg" alt="Photo of the inside of a Hong Kong taxi. There are about a dozen different phones attached to the dashboard - each running a different app." width="537" height="720" class="aligncenter size-full wp-image-44358"></a></p>

<p>As a user, I only want to use a reputable driver. But who determines reputation? What options do I have if something goes wrong?</p>

<p>Basically - what are the <em>advantages</em> of decentralisation in the taxi space?  Users want competition on price and service - which they don't get if Uber are a monopoly.  Users also don't want to deal with dangerous drivers - which is easier to enforce if there is only a single platform.</p>

<p>Drivers don't want their livelihood ruined by unjust reviews - how could that be enforced with a decentralised platform?</p>

<p>We haven't even got to payments yet!</p>

<p>Basically, it's not clear to me that is a compelling user <em>need</em> for decentralisation. Don't get me wrong, I like it as a concept. But I see it as exchanging one set of wicked problems for another.</p>

<h2 id="does-this-already-exist"><a href="https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/#does-this-already-exist">Does this already exist?</a></h2>

<p>Well, ish.  There are various different attempts to build federated delivery services and the like.</p>

<p><a href="https://web.archive.org/web/20221207125136/https://hci.social/@andresmh/109252466002148360"><img src="https://shkspr.mobi/blog/wp-content/uploads/2022/12/food-fs8.png" alt="Now that the Fediverse and Mastodon are a tiny bit more popular, it'd be easier to explain what we're trying to build at @princeton: a federated open-source food delivery platform. 

Like Mastodon meets DoorDash. We're even using ActivityPub.  

The vision: one day each town can run its own instance. Some towns can run multiple instances. Customers will use their preferred mobile client to connect to their nearest/preferred instance. 

Instances can be local coops of restaurants/couriers." width="1156" height="812" class="aligncenter size-full wp-image-55195"></a></p>

<p>But I am very interested in being proved wrong! Is there a decentralised takeaway service I should investigate? Are there federated hairdressers? Does anyone offer an open protocol for domestic cleaners?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=44131&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/12/what-would-a-decentralised-uber-look-like/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How much decentralisation is too much?]]></title>
		<link>https://shkspr.mobi/blog/2022/12/how-much-decentralisation-is-too-much/</link>
					<comments>https://shkspr.mobi/blog/2022/12/how-much-decentralisation-is-too-much/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 11 Dec 2022 12:34:02 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[fediverse]]></category>
		<category><![CDATA[mastodon]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=44047</guid>

					<description><![CDATA[Twitter&#039;s over, my dudes! And now everyone is on Mastodon! But Mastodon isn&#039;t a site, it is a federated network running an interoperable protocol! Yay for ActivityPub!  Anyway, that means there isn&#039;t one Mastodon website. There are many.  There is only one Twitter. There is only one Facebook.  There is only one Instagram.  If you want to interact with Twitter/FB/Insta then you have to do it on…]]></description>
										<content:encoded><![CDATA[<p>Twitter's over, my dudes! And now everyone is on Mastodon! But Mastodon isn't a site, it is a <em>federated network running an interoperable protocol</em>! Yay for ActivityPub<sup id="fnref:ActivityPub"><a href="https://shkspr.mobi/blog/2022/12/how-much-decentralisation-is-too-much/#fn:ActivityPub" class="footnote-ref" title="I’d just like to interject for a moment. What you're referring to as Mastodon, is in fact, ActivityPub/Mastodon, or as I’ve recently taken to calling it, ActivityPub plus Mastodon. Mastodon is not an…" role="doc-noteref">0</a></sup>!</p>

<p>Anyway, that means there isn't <em>one</em> Mastodon website. There are many.  There is only one Twitter. There is only one Facebook.  There is only one Instagram.  If you want to interact with Twitter/FB/Insta then you have to do it on those websites, or via the official apps.</p>

<p>Mastodon is decentralised. I am on Mastodon.Social, and you are on Mastodon.me.uk.  Those are different servers.  But we can still see each others' messages.</p>

<p>All of those different servers have multiple users. Some of the big servers have hundreds of thousands of accounts, some of the smaller ones only a few dozen. We're all apart, even when we're together. This is the joy - and the sorrow - of decentralisation.</p>

<p>What's the optimal size of a server? Bigger ones might be slower, or they may benefit from efficiencies of scale. Smaller ones might be more nimble, but may not have the resources to keep the server going.</p>

<p>Let's take a look at PixelFed - a federated version of Flickr / Instagram.  There are about <a href="https://fedidb.org/software/pixelfed">280 different PixelFed instances you could join</a>.  Here's a graph showing the number of users on the top 25 instances:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/11/chart.png" alt="The top server has over 60,000 users, the next under 20,000, the rest tail off into double digits." width="600" height="371" class="aligncenter size-full wp-image-44068">

<p>Pretty classic "long-tail" there. A dominant main server. A credible second place. A distant third. And then all the rest quickly descend under 100 users.</p>

<p>I want to be very clear - I don't think that's necessarily a <em>bad</em> thing.  It is entirely possible to have a sustainable server which only has one user.</p>

<p>For example, the Raspberry Pi foundation has an instance at aspberrypi.social. It only has a single account you can follow - <a href="https://web.archive.org/web/20240623060954/https://raspberrypi.social/@Raspberry_Pi">@Raspberry_Pi@raspberrypi.social</a>.</p>

<iframe src="https://someone.elses.computer/@laurence/109335661569754444/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" height="400" allowfullscreen="allowfullscreen"></iframe>

<p>Is that the future?</p>

<p>What happens if <em>everyone</em> has their own instance? Would managing spam and blocklists on the Fediverse be as difficult as managing them for email?</p>

<h2 id="inside-of-you-there-are-two-extremes"><a href="https://shkspr.mobi/blog/2022/12/how-much-decentralisation-is-too-much/#inside-of-you-there-are-two-extremes">Inside of you there are two extremes</a></h2>

<p>Consider email.  Almost everyone is on GMail, O365, or one of a limited number of big email providers.  Even if you're a digital extremist and have your own domain name, you almost certainly don't run your own email server.  It's just too complicated and no one wants a full-time unpaid job keeping up with the admin of configuring, patching, and defending their mail.</p>

<p>Similarly, I doubt anyone wants to spend much more than a couple of hours per year setting up and maintaining their federated social network app.</p>

<p>Those of us vain / paranoid enough to want to be <code>@MyName@my-domain.xyz</code> will almost certainly just rent computing power and space from one of the big Mastodon providers.</p>

<p>What about big businesses?</p>

<iframe src="https://cloudisland.nz/@aurynn/109332454233821775/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" height="300" allowfullscreen="allowfullscreen"></iframe>

<p>I love that idea. But businesses don't run servers any more.  If you're a small business, you just outsource everything to Google or Microsoft.  If you're a big business... the same!</p>

<p>It's easier and cheaper to pay dedicated professionals to run specialist appliances than it is to bring them in-house.</p>

<h2 id="predictions"><a href="https://shkspr.mobi/blog/2022/12/how-much-decentralisation-is-too-much/#predictions">Predictions</a></h2>

<p>Making predictions is a fool's game.  So here are my predictions for the future of Federated Services:</p>

<ul>
<li>Die-hard geeks like me will still run our family's Fediverse apps from a Raspberry Pi tucked in a cupboard.</li>
<li>Small sellers will offer Fediverse packages just the same way as they do one-click WordPress installs. But they'll mostly all be running on AWS anyway.</li>
<li>Twitter - or someone like them - will start offering "Fediverse-as-a-Service".  You can be <code>@Bob@Mastodon.Your_Domain.com</code> - but it'll be Twitter under the hood.  Just like GMail for domains.</li>
<li>People will have <em>multiple</em> instances they need to be on. Work and personal, for example. Just as some of us have a family email which is different from the friends one.  But they'll all come through to a single app.</li>
<li>Facebook - or someone like them - will gradually add "enhancements" to their service which will cause it not to work other Federated systems. The first time this happens it will be excused as a mistake. But, just like how Google killed off XMPP, it will eventually become a silo. Not many people will notice, because the majority of their friends are all on the same instance.</li>
<li>Someone will invent a server which runs on your Android phone. It would revolutionise decentralisation and federation. But it chews up battery and Apple bans the iOS version for no good reason. So it never takes off except with a few people prepared to root their devices and carry an extra battery.</li>
<li>A nation-state will insist that every citizen and resident <em>must</em> have an account on the national Mastodon. Perhaps in order to listen to the thoughts of Dear Leader™.  Perhaps for some sinister monitoring purpose.  If you want to talk to your buddies in that region, your server may have to Federate with something running old, outdated, or hostile software.</li>
<li>Geeks like me will rage that this all could been avoided if everyone bought their own Raspberry Pi and learned half-a-dozen simple Linux commands.</li>
</ul>

<p>Perhaps that's pessimistic of me? I think the pendulum will swing a few more times at least.</p>

<p>There might be a dozen different phone networks in your country.  Yes, they Federate with each other, but they all happen to be running close-to-identical networking gear made by Nokia or Huawei.  Yes, you can put your SIM in any device, but chances are it is either Android or iOS.</p>

<p>We'll be stuck with the <em>illusion</em> of Federation.</p>

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

<li id="fn:ActivityPub">
<p>I’d just like to interject for a moment. What you're referring to as Mastodon, is in fact, ActivityPub/Mastodon, or as I’ve recently taken to calling it, ActivityPub plus Mastodon. Mastodon is not an service unto itself, but rather another free component of a fully functioning Fediverse made useful by the W3C core protocols and other vital components etc. etc.&nbsp;<a href="https://shkspr.mobi/blog/2022/12/how-much-decentralisation-is-too-much/#fnref:ActivityPub" 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=44047&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/12/how-much-decentralisation-is-too-much/feed/</wfw:commentRss>
			<slash:comments>22</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[The commons we've enclosed]]></title>
		<link>https://shkspr.mobi/blog/2020/01/the-commons-weve-enclosed/</link>
					<comments>https://shkspr.mobi/blog/2020/01/the-commons-weve-enclosed/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 18 Jan 2020 08:03:20 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[users]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=33710</guid>

					<description><![CDATA[I, unironically, love Reddit. But it&#039;s just USENET with a better UI, and a few moderation improvements.  Most days I use DropBox. But it&#039;s just FTP, but a bit easier to use and automate.  I waste a lot of time on Slack. When I explain it to old-school nerds, I say it&#039;s IRC - but developed by someone who gives a damn about user experience.  Most people in the world don&#039;t have access to WWW.…]]></description>
										<content:encoded><![CDATA[<p>I, unironically, love Reddit. But it's just USENET with a better UI, and a few moderation improvements.</p>

<p>Most days I use DropBox. But it's just FTP, but a bit easier to use and automate.</p>

<p>I waste a lot of time on Slack. When I explain it to old-school nerds, I say it's IRC - but developed by someone who gives a damn about user experience.</p>

<p>Most people in the world don't have access to WWW. <a href="https://qz.com/333313/milliions-of-facebook-users-have-no-idea-theyre-using-the-internet/">Instead, they use Facebook</a> which gives them a much simpler way to post photos and share their thoughts. It doesn't ask them to hand-edit an <code>.htaccess</code> file.</p>

<p>I don't know anyone who uses Listserve. It turns out that Telegram is faster, more convenient, and doesn't require esoteric commands.</p>

<p>Indeed, why bother with Email? You don't need to learn how to configure SMTP when you have WhatsApp.</p>

<p>What other, classic, decentralised Internet tools have been turned from open protocols to closed and proprietary services?</p>

<hr>

<p>A large part of this is our fault. And, by us, I mean gatekeeping nerds.  We developed tools which were <em>unforgiving</em>.  We had no interest in the "soft" skills of empathy.  We were too socially-awkward to speak to real users. We were insular and we liked it! Worse than that - we <em>revelled</em> in it.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/01/Linux-is-user-friendly.jpeg" alt="Unix is user-friendly — it's just choosy about who its friends are. " width="300" height="255" class="aligncenter size-full wp-image-33713">

<p>LOL! ROFL! LMAO!</p>

<p>And then Apple eats everyone's lunch by relentlessly focussing on being user friendly. Good for them. But it means handing over control to a single organisation.</p>

<p>I don't claim to be any good at user experience - far from it. But I despair at some of the redecentralised efforts I see springing up. They are technically brilliant, and follow the open-source philosophy of scratching one's own itch. And they all - without fail - are terrible to use.</p>

<p>Redecentralisation won't happen because of us nerds. It must happen despite us. Despite our ingenuity and despite our self-infatuation. It must be inclusive, and put user-needs at its very heart.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=33710&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/01/the-commons-weve-enclosed/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Using YouTube to Transcode Videos to DASH on the Command Line]]></title>
		<link>https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/</link>
					<comments>https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 07 Jul 2017 19:59:30 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=25480</guid>

					<description><![CDATA[This is part of my redecentralisation efforts to liberate my videos from YouTube.  MPEG-DASH is a simple method of streaming videos which doesn&#039;t require any specialised server software. You convert a high resolution video into a series of smaller resolution videos.  You chop each of the videos up into several chunks. As the video plays, your browser then decides which chunk of the video to load…]]></description>
										<content:encoded><![CDATA[<p>This is part of my redecentralisation efforts to <a href="https://shkspr.mobi/blog/2015/11/liberate-your-youtube-videos/">liberate my videos from YouTube</a>.</p>

<p>MPEG-DASH is a simple method of streaming videos which doesn't require <em>any</em> specialised server software. You convert a high resolution video into a series of smaller resolution videos.  You chop each of the videos up into several chunks. As the video plays, your browser then decides which chunk of the video to load next depend on the bandwidth available to it.  Easy!</p>

<h2 id="aim"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#aim">Aim</a></h2>

<p>From the command line:</p>

<ul>
<li>Upload a video to YouTube</li>
<li>Download transcoded video in several formats suitable for MPEG DASH Streaming</li>
<li>Generate DASH manifest</li>
<li>Generate the HTML5 markup</li>
</ul>

<h2 id="uploading"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#uploading">Uploading</a></h2>

<p>There are a couple of YouTube video uploaders.  These are useful if you've got a video on a server, or don't want to waste a browser window.</p>

<ul>
<li><a href="https://github.com/porjo/youtubeuploader">porjo/youtubeuploader</a> has binaries available for Linux/Mac/Windows.</li>
<li><a href="https://github.com/tokland/shoogle">tokland/shoogle</a> a Python interface for <em>all</em> of Google's APIs.</li>
</ul>

<p>I'm using Porjo's client. After following the authentication instructions, the output is something like:</p>

<pre><code>./youtubeuploader_linux_amd64 -filename testing.mp4

Uploading file 'testing.mp4'...
Progress:     1.37 Mbps, 9852099 / 9852099 (100.000%) ETA          0s
Upload successful! Video ID: 6NV5heuaVuc
</code></pre>

<h2 id="downloading"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#downloading">Downloading</a></h2>

<p>The <em>only</em> program worth using is <a href="https://github.com/rg3/youtube-dl/">youtube-dl</a>.</p>

<p>We can see every video format that YouTube has created using:</p>

<pre><code>youtube-dl -F 6NV5heuaVuc
</code></pre>

<p>That will return something like:</p>

<table>
<thead>
<tr>
  <th>format code</th>
  <th>extension</th>
  <th>resolution</th>
  <th>note</th>
</tr>
</thead>
<tbody>
<tr>
  <td>139</td>
  <td>m4a</td>
  <td>audio only DASH audio</td>
  <td>49k , m4a_dash container, mp4a.40.5@ 48k (22050Hz)</td>
</tr>
<tr>
  <td>140</td>
  <td>m4a</td>
  <td>audio only DASH audio</td>
  <td>128k , m4a_dash container, mp4a.40.2@128k (44100Hz)</td>
</tr>
<tr>
  <td>134</td>
  <td>mp4</td>
  <td>640x360</td>
  <td>DASH video 104k , avc1.4d401e, 30fps, video only</td>
</tr>
<tr>
  <td>160</td>
  <td>mp4</td>
  <td>256x144</td>
  <td>DASH video 108k , avc1.4d400b, 30fps, video only</td>
</tr>
<tr>
  <td>133</td>
  <td>mp4</td>
  <td>426x240</td>
  <td>DASH video 242k , avc1.4d400c, 30fps, video only</td>
</tr>
<tr>
  <td>135</td>
  <td>mp4</td>
  <td>854x480</td>
  <td>DASH video 1155k , avc1.4d4014, 30fps, video only</td>
</tr>
<tr>
  <td>137</td>
  <td>mp4</td>
  <td>1920x1080</td>
  <td>DASH video 2306k , avc1.640028, 30fps, video only</td>
</tr>
<tr>
  <td>136</td>
  <td>mp4</td>
  <td>1280x720</td>
  <td>DASH video 2310k , avc1.4d4016, 30fps, video only</td>
</tr>
<tr>
  <td>17</td>
  <td>3gp</td>
  <td>176x144</td>
  <td>small , mp4v.20.3, mp4a.40.2@ 24k</td>
</tr>
<tr>
  <td>36</td>
  <td>3gp</td>
  <td>320x180</td>
  <td>small , mp4v.20.3, mp4a.40.2</td>
</tr>
<tr>
  <td>43</td>
  <td>webm</td>
  <td>640x360</td>
  <td>medium , vp8.0, vorbis@128k</td>
</tr>
<tr>
  <td>18</td>
  <td>mp4</td>
  <td>640x360</td>
  <td>medium , avc1.42001E, mp4a.40.2@ 96k</td>
</tr>
<tr>
  <td>22</td>
  <td>mp4</td>
  <td>1280x720</td>
  <td>hd720 , avc1.64001F, mp4a.40.2@192k (best)</td>
</tr>
</tbody>
</table>

<p>It may take several minutes for YouTube to generate all the video formats - the length of time will depend on the length and quality of the video.</p>

<p>We want to download all the DASH videos and the DASH audios.  We also want the subtitles - even if they are autogenerated. Finally, we want the thumbnail image for the HTML5 poster.</p>

<p>The <code>youtube-dl</code> command to download all the DASH audio is:</p>

<pre><code>youtube-dl -f 'all[vcodec=none]' -o '%(title)s-%(format)s.%(ext)s' 6NV5heuaVuc
</code></pre>

<p>To get all the DASH videos:</p>

<pre><code>youtube-dl -f 'all[acodec=none]' -o '%(title)s-%(format)s.%(ext)s' 6NV5heuaVuc
</code></pre>

<p>This will create a separate MP4 video for each resolution, and separate audio file for each bitrate.</p>

<p>To generate a single thumbnail, run:</p>

<pre><code>youtube-dl --write-thumbnail --skip-download 6NV5heuaVuc
</code></pre>

<p>To download the subtitles:</p>

<pre><code>youtube-dl --write-auto-sub --sub-format vtt --write-sub 6NV5heuaVuc
</code></pre>

<h2 id="convert-to-dash"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#convert-to-dash">Convert to DASH</a></h2>

<p>For this step, we need the open source <a href="https://www.bento4.com/developers/dash/">Bento4 toolkit</a>.</p>

<p>The video should already have "fragments" - the chunks which make up the stream - you can check this with:</p>

<pre><code>./mp4info "Video-133 - 426x240 (DASH video).mp4"
</code></pre>

<p>In the output, you should see:</p>

<pre><code>Movie:
  duration:   0 ms
  time scale: 90000
  fragments:  yes
</code></pre>

<p>The audio downloaded from YouTube will <strong>not</strong> have fragments, so you'll need to run this command on every audio file you've downloaded:</p>

<pre><code>./mp4fragment "Video-140 - audio only (DASH audio).m4a" high.m4a
</code></pre>

<h3 id="combine-and-create-manifest"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#combine-and-create-manifest">Combine and create manifest</a></h3>

<p>Let's take those audio and video files and make ourselves a manifest!</p>

<pre><code>./mp4dash -o output-video 133.mp4 135.mp4 136.mp4 137.mp4 160.mp4 high.m4a low.m4a
</code></pre>

<p>This creates the folder <code>output-video</code> and creates folders for the chunked audio and video.</p>

<p>It will also produce the MPD - a manifest file which references all of the chunks.</p>

<p>We're <em>nearly</em> ready to play back.</p>

<h2 id="play-dash-video-in-the-browser"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#play-dash-video-in-the-browser">Play DASH Video in the browser</a></h2>

<p>As far as I can tell, no browser <em>natively</em> supports MPEG-DASH. You will need to use <a href="https://github.com/Dash-Industry-Forum/dash.js/blob/development/README.md">the latest version of dash.js</a> to make everything work smoothly.</p>

<p>Add this piece of JavaScript to your page:</p>

<pre><code>&lt;script src="https://cdn.dashjs.org/latest/dash.all.min.js"&gt;&lt;/script&gt;
</code></pre>

<p>Then reference the MPD in a <code>video</code> element:</p>

<pre><code>&lt;video width="1080" data-dashjs-player src="stream.mpd" controls poster="example.jpg"&gt;
    &lt;track kind="subtitles" src="en.vtt" srclang="en" label="English"&gt;
&lt;/video&gt;
</code></pre>

<h2 id="demo"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#demo">Demo</a></h2>

<p>Here is an adaptive stream of one of my videos - hosted natively on this site, with no server-side streaming.</p>

<script src="https://cdn.dashjs.org/latest/dash.all.min.js"></script>

<video width="1080" data-dashjs-player="" controls="" poster="https://shkspr.mobi/dash/demo/poster.jpg">
    <source src="https://shkspr.mobi/dash/demo/stream.mpd" type="application/dash+xml">
    <source src="https://shkspr.mobi/dash/demo/fallback.mp4" type="video/mp4">
    <track kind="subtitles" src="https://shkspr.mobi/dash/demo/en.vtt" srclang="en" label="English">
</video>

<h2 id="problems"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#problems">Problems?</a></h2>

<h3 id="fallback-video"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#fallback-video">Fallback video</a></h3>

<p>Some browsers can't play back DASH, even with the JavaScript - so you can put a fallback video in the HTML.</p>

<pre><code>&lt;video width="1080" data-dashjs-player controls &gt;
    &lt;source src="stream.mpd"   type="application/dash+xml"&gt;
    &lt;source src="fallback.mp4" type="video/mp4"&gt;
&lt;/video&gt;
</code></pre>

<h3 id="hls"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#hls">HLS</a></h3>

<p>Because Apple are special, they don't support DASH on its phones.  So you'll need to use their proprietary HLS streaming solution.  You can use <a href="https://www.bento4.com/developers/hls/">Bento4 to create HLS</a> in exactly the same way as you create DASH.</p>

<p>You may also need to use <a href="https://github.com/video-dev/hls.js/">hls.js JavaScript</a> to get things to work smoothly.</p>

<h3 id="subtitles"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#subtitles">Subtitles</a></h3>

<p>You can use <a href="https://www.bento4.com/developers/dash/subtitles/">DASH native subtitles</a>, or HTML5 subtitles.</p>

<p>I found that the HTML5 subtitles downloaded by <code>youtube-dl</code> contain some strange CSS which didn't work well with the DASH video.  You may need to test to see how it works for you.</p>

<h2 id="all-in-one-command"><a href="https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/#all-in-one-command">All in one command?</a></h2>

<p>Hahahaha! Not yet! If you know of a good way to do this - let me know!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=25480&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2017/07/using-youtube-to-transcode-videos-to-dash-on-the-command-line/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Meet Maslow - The UK's Answer to Tesla's PowerWall]]></title>
		<link>https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/</link>
					<comments>https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 24 Mar 2016 14:16:07 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[maslow]]></category>
		<category><![CDATA[moixa]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[solar]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=22452</guid>

					<description><![CDATA[Even in the depths of British winter my solar panels&#039;ll still happily convert what little sunlight we get into delicious, free-range, organic electrons.  Nice!  Most of our domestic energy use is in the evening.  So, when I&#039;m out at work I can schedule the tumble dryer, robot vacuum cleaner, and WiFi rice-cooker to consume energy when the sun is shining.  The rest is sold back into the grid for…]]></description>
										<content:encoded><![CDATA[<p>Even in the depths of British winter <a href="https://shkspr.mobi/blog/2014/12/a-year-of-solar-panels-open-data/">my solar panels</a>'ll still happily convert what little sunlight we get into delicious, free-range, organic electrons.  Nice!</p>

<p>Most of our domestic energy use is in the <em>evening</em>.  So, when I'm out at work I can schedule the tumble dryer, <a href="https://shkspr.mobi/blog/2015/03/adding-wifi-to-a-roomba/">robot vacuum cleaner</a>, and WiFi rice-cooker to consume energy when the sun is shining.  The rest is sold back into the grid for my neighbours to use.</p>

<p>Wouldn't it be <em>great</em> to capture that energy and use it to power my lights and games console in the evening? Yes!  Enter the <a href="https://web.archive.org/web/20160327235622/https://meetmaslow.com/">Maslow</a> - a 2kWh wall mounted battery designed to capture solar power and put it to use when it is most needed.</p>

<p>The Maslow gobbles up the surplus power and stores it for later use.</p>

<p><a href="https://web.archive.org/web/20160327235622/https://meetmaslow.com/" rel="attachment wp-att-22453"><img src="https://shkspr.mobi/blog/wp-content/uploads/2016/02/solar-shift-1280.jpg" alt="solar-shift-1280" width="1280" height="676" class="aligncenter size-full wp-image-22453"></a></p>

<p>I received a subsidised Maslow battery as part of <a href="https://localisedenergyeric.wordpress.com/">Project ERIC</a>.</p>

<blockquote><p>Project ERIC (Energy Resources for Integrated Communities) is an initiative bringing solar PV power and smart energy storage to up to 100 homes in Rose Hill, East Oxford. Project ERIC is led by Moixa Technology and Bioregional and is part-funded by Innovate UK.</p></blockquote>

<h2 id="installation"><a href="https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/#installation">Installation</a></h2>

<p>It's a relatively svelte box - smaller than a normal domestic boiler - and fits neatly onto my interior wall.</p>

<p>Here it is before installation and without any batteries.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-Unassembled-.jpg" alt="Maslow Unassembled-" width="512" height="736" class="aligncenter size-full wp-image-22600">

<p>As you can see, the batteries are designed to be replaceable.  If they die unexpectedly, or technology leaps ahead, you should be able to keep your existing installation and just swap out the cells for something newer.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-Removeable-Battery-.jpg" alt="Maslow Removeable Battery-" width="1024" height="576" class="aligncenter size-full wp-image-22621">

<p>A couple of screws - and a bit of swearing - and it was fitted.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-Mounted-.jpg" alt="Maslow Mounted-" width="1024" height="720" class="aligncenter size-full wp-image-22612">

<p>Installation took around 3 hours. The battery needs its own RCD in your <a href="https://en.wikipedia.org/wiki/Consumer_unit">consumer unit</a>.  A few holes had to be drilled in order to get all the wiring hidden away.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-Fitted-.jpg" alt="Maslow Fitted-" width="1024" height="576" class="aligncenter size-full wp-image-22622">

<p>The fans on the side run when the batteries are charging or discharging.  They're a little louder than a typical PC - and will be easily drowned out by a boiling kettle or rumbling tumble-dryer.  You probably wouldn't want this installed in a bedroom or living room - but it's fine for a kitchen or loft.</p>

<p>They're needed for cooling these chunky capacitors.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-Capacitors-.jpg" alt="Maslow Capacitors-" width="1024" height="640" class="aligncenter size-full wp-image-22617">

<p>Down in the bottom of the unit, you'll find the fairly unremarkable control circuitry.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-Circuits-.jpg" alt="Maslow Circuits-" width="1024" height="577" class="aligncenter size-full wp-image-22615">

<p>Wait... wait a moment! Is that...? OMG! This thing is RASPBERRY PI POWERED!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-Raspberry-Pi-.jpg" alt="Maslow Raspberry Pi-" width="1024" height="576" class="aligncenter size-full wp-image-22616">

<p>Wooo! I think this is the 5th Pi I have controlling something in my home ?</p>

<p>There's a WiFi antenna which runs to the outside of the unit.  You can also connect directly to the Pi's Ethernet port if you don't have a strong WiFi signal.</p>

<p>Hidden behind a panel is a full range of blinkenlights.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-LED-.jpg" alt="Maslow LED-" width="1024" height="219" class="aligncenter size-full wp-image-22618"></p>

<p>A mini-USB port is present for debugging purposes, along with some diagnostic LEDs.  Apparently there's also Zigbee for controlling smart appliances in the future.</p>

<h2 id="network-and-api"><a href="https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/#network-and-api">Network and API</a></h2>

<p>As part of the <a href="https://localisedenergyeric.wordpress.com/">Project ERIC</a> trial, I've agreed to have my battery's energy usage monitored.</p>

<p>The Maslow collects details of usage every minute, these data are then combined to provide an overview of what our village is consuming and producing:</p>

<p>I also get access to a personalised dashboard - which will hopefully show more details soon!
<img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/Maslow-Status-fs8.png" alt="Maslow Status-fs8" width="1024" height="391" class="aligncenter size-full wp-image-22614"></p>

<p>There's nothing really to control on the battery - it just sits there doing its job.  There is an API, more details in a future blog post!</p>

<h2 id="cost"><a href="https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/#cost">Cost</a></h2>

<p>Because I'm on a trial of this hardware, the total cost of the Maslow battery and installation was <strong>£600</strong> (including VAT@ 20%).</p>

<p>What do you get for that?</p>

<p>A typical mobile phone battery holds around 0.015kWh.  My electric car has a battery capacity of 19kWh.  My house's idle usage overnight (lights, chargers, servers, devices on standby) is around 100 Watts.  So a typical night (2200 - 0600) will use around 1kWh.</p>

<p>My electricity costs me 13.08p / kWh - <a href="https://share.octopus.energy/metal-dove-988">sign up to Ovo Energy and we both get a £25 Amazon voucher</a>.</p>

<p>So, assuming the battery is fully charged once during the day and then fully discharged overnight, how long before the device pays for itself?</p>

<p><code>£600 / (£0.1308 * 2) ~= 2,300 days.</code></p><code>

</code><p><code>2,300 / 365 = 6 years 4 months.
</code></p>

<p>At the unsubsidised price of £2,000 the repayment period is around <strong>21 years</strong>.  That's essentially the guaranteed lifetime of most solar-power systems.  It also assumes that energy prices stay static.</p>

<p>Of course, the solar panels don't always generate enough - let alone enough surplus - to fill the battery:</p>

<blockquote class="social-embed" id="social-embed-698556250662031360" 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_Solar" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-square" src="data:image/webp;base64,UklGRqIBAABXRUJQVlA4IJYBAAAQCwCdASowADAAPpk+lkmlo6IhPHn4ALATCWwAqSb2fKyIqg/VfwXvoZTeujRmaZz6AAQqKO30BbgOJGUvMk1saJobx5uEgICp7ECZe2hnMnGIEtdZ1IpWDe69a2H1qfOgAP79LwB5Oz3xDljcr2v6LuhchyOjYT2dLq9Fp2efm/jgtH4ejNYBrnBqmHREwRg+HtdB/egiabaMf7s0gyPxrKDO9vD/6+LdU39pQgXiwpu/LVAjihuJ4gpq98Gdnn2pmyHjmfljnEcdBTY1FJ6Kc41+qjuplI2wOjZs7uPzUOBsZ17JEKid9H/24DLriHA1/yF9UrE8W1TFS/7qf/zN3TfFR6/9fEZ3BNaFz3zUbc0uv9qsPWkTrRpwkAV4xS23X6PmDD3d87QYdoeuEZw10Tk6yvv7H3xqtevEG/XYu42BFkyWslT2hd3NDZXKhdUP7HqdiFENKuCe8a47ssoTP1fgvX/oVjnf9AnlsjZIw+FtuMaaXyEip9us2NbB//qP7Ia6+M5rcWnPv/rbeZONTQ9fj6AA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Edent's Solar Panels</p>@Edent_Solar<br><img src="data:image/webp;base64,UklGRuICAABXRUJQVlA4WAoAAAAQAAAAWQAAWQAAQUxQSOEBAAABkFXbbt1agmAIhmAIYtAyiBnEDBIGDYOEQQ+CawiHQcWgZlB9NPVD+76/ImIC6P9mf43z+h45/Ex4y0Xr88Y/Bd6KdpU9oHHWgXlC4qyDs0dxNzV4cxBB1KR4gKmo0ZLMLWp4Mbao6cXUosYXQ7Oan8z4Yq94K6KA4mwsCnkz4RU0WLijZAOssDwu4+RhXoHDqANpHSVIZVBQaB6TsNKYjPU1pmCVIU7B3QhGCyOuaJcevO3TW0SLROTmffMVk6qquB5ln+Oa++Q1zof0cKKqmj44edO1w+ro3UtbZjpdOyR9L+6M9fSrjenz0XLQ52tbPtHQkJsSVTqpE6pNvXiMUDXXTVUkCKmOSo1Q/YrADfea3HDFO2r2Bka4NNxrvvDWBqkpDQnhu461musEQVOV1H27mlkhSqjYtXGvCIqhupz5rM3Zn7hFYVT2Oc5Zu+Y1xq0okPn/4MJP5d5AcjL9HOLJgz4GUdWDfg50e71ez/CJ/DUy/SyIY3TUEe7y1jug8QiH5kaQYAkN3bD2MYx1GUMFSWjwipRGuYLz8KMo4Uw0PqP8IINeMB7eAoWC8AxkMxR7z0BWg1h7BLLrs6nXD0+mo9h5JjIfxcTruTpC5OO73+v0cWPCdcyx+zU4+ucNAFZQOCDaAAAAEAkAnQEqWgBaAD6xQJZJpyOhoTHfKgDgFglnAMsJn9f5RA9neHFaHPCHQSI1eR9V12wtRy3QA5cP9kU/SRnvQvGNNjncx9YB6Kuo7e/ddDIQAP71a7X9lf//7inBZ9+1bUYtAD/+4H/+ze//7twx0VpJlQAP9a4v5WQ+ueBp9Y03AfiquNTvm13Evju2XcfY+o3HMiK3+95AniJwk3Adjj40hAQ6EHIBHw2AMqn3esgxQUf+wJVshLIRjKbpOQ+On/6AC4/u/dSILuynNzErp6Eq/7wN58bpgAA=" alt="" class="social-embed-badge"> Automated</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">Pretty grim. <a href="https://twitter.com/edent">@edent</a>'s solar panels generated ~1.42kWh, earning £0.25<br>FAQ: <a href="http://shkspr.mobi/blog/solar-graphing-faq/">shkspr.mobi/blog/solar-gra…</a><br><a href="https://twitter.com/hashtag/edentSolar">#edentSolar</a> <a href="https://twitter.com/Edent_Solar/status/698556250662031360/photo/1">pic.x.com/92wikj4nuy</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/CbHFNXAW4AIHbA1.jpg" class="social-embed-media-link"><img class="social-embed-media" alt="" src="data:image/webp;base64,UklGRkIxAABXRUJQVlA4IDYxAADwJAGdASqoAkcCPrVapk+nJSQjITWZ2OAWiWVu+CU9DaTwoQ//zrxPNxWFWCUQ/P/GVa5K48B/I3M78knlf0F+lvzBf086cH9T9Bn7aftj7vXpV9BH+gf8PrmfQv8uL2kP7n/y/2q9ojVgfTv+H7df8R/bPIvxK+7v2fzms6fVfqNfJ/u7/K/tfte/jf+p/efFf4S/5nqC/mf8y/WXyVfsb3Jmgf6f/weoF7B/Xf108YX+h9Bvzz+4/7r7iPsA/n/9j/5nqp/z/Aw+8f8f2AP5r/a/+L/ifyq+mX+r/+f+g8636H/nP/r/pPgH/nX9y/Yj2yf//7jP3N///us/tZ//xX+x9p1REKgxbd8s65kCh2hI+nztdWCl+UFOOdOAoeNVLaJUbUSj+ZDIOFO7RD9+63xSsVuyVIe4hcPfp1x3DeyGYnc1V35GJUQ/fd92yFalmufTn9+x9wU09uCmV0PjjqEamlotVMeGbd4kbr/TOM01yD/HdcGiSPneO6bDeSlzE/0KgVxR7SyxRMMIFQiotjkU6bYi+CHibV4rCSCFCDfUEfbQO4DllVEERzgghBJOUsgIBjfEwLFZAGukBARAaUcnhiH3Klm2lUH4qBrcFMLiwM6iUrBIo1NlpLGRA4FrXu5zXFIvjYA63WffeEoM3DReEAYb3yt3YFcY8c4FrAofBBBgFS71GmPQQb3TVCpd8OxwwgsV7QzXwcZTmCKQ3DOivLMMSAvY0FGYFZ0QdLi/lRw1eS0Kl3w7G4VvRNalOfCgEIsSbz3U5jM+h5CXnOImqs20cZymP1DUed2JtQgZwA46lMz6HkJec4iaqzDRU2c7quM6jZrdWoDDZ3dXkMcekVOImqs4AstSmZ9DyEvOcRNVZwBZalMz6HkJec4iaqzgCy1KZn0PZilmgYaEkVfxT933fhkIqo3uHcO4dw7h3DuHcO4dw7h3DuMQ35ebYB0s3TrrNwKK7gBpLMlmSzJZksyWZLMlmSzJZksyWZLMlmSzJZksxpzxHZwL1swgSTw2RBkxctoK0n6T9J+k/SfpP0n6T9J+k/SfpP0n6T9J+k/Se/sFpPEf7iFnli3XxJ8i+RfIvkXyL5F8i+RfIvkXyL5F8i+RfIvkXyLVClfwNOgE9lAwVTfczGijRJ36T9J+k/SfpP0n6T9J+k/SfpP0n6T9J+k/SfpP0pviicjdUFOIChz8BFR8phNeOvHXjrx1468deOvHXjrx1468deOvHXjrx1468eCx4gwpvGGIM41HqtFWirRVoq0VaKtFWirRVoq0VaKtFWirRVoq0Jhk3AyCT18KTO+t6voZGHG1ZWk/SfpP0n6T9J+k/SfpP0n6T9J+k/SfpP0n6T9J+5iEgIecmqnoXd8NTqw5Brg1wa4NcGuDXBrg1wa4NcGuDXBrg1wa4NcGuDZCbhot/pjUJznHSOtFWirRVoq0VaKtFWirRVoq0VaKtFWirRVoq0VRtdNfYnU15Np5u/ZFG3tKQw1sHcGuDXBrg1wa4NcGuDXBrg1wa4NcGuDXBrg1wa4NkIhLsmJe1Woszp5OS918i+RfIvkXyL5F8i+RfIvkXyL5F8i+RfIvkXyL5GaMLqeBCuQlAoIZgWS5sDhf3gf9T7Zw8L+8D/qfbOHhf3gYlmjK5DvXsHysqOI7gYJPlptQJcWMHoHpP0n6T9J+k/SfpP0n6T9J+k/SfpP0n6T9J+k/Sfse0LLf1Q7DoTMQnuAqlYqTZ6TBU1TDsfUK2nX5DbFoHeb03JKNi33HjcuEKDdmo1i5s9Jgqaph2PqFbTr8hti0DvN6bklGxb7jxuXCFBuzUaxc2ekwVNUw7H1Ctp1+Q2xaB3m9NySjYt9x43LhCg3ZqNYubPSYKmqYdj6hW06/IbYtA7zem5JRsW+48blwhQbs1GsXNnpMFTVMOx9QradfkNsWmDIGcf91kwt0648TD24NcGuDXBrg1wa4NcGuDXBrg1wa4NcGuDXBrg1pDrBcxAEItJqjBK5DZCJNdGz0n6T9J+k/SfpP0n6T9J+k/SfpP0n6T9J+k/SfpP3MWDOPKoXlfOcPUnRvbP0n6T9J+k/SfpP0n6T9J+k/SfpP0n6T9J+k/SfpTe4NBT8GedbPDF3Z7s9uKP1PtnDwv7wP+p9s4eF/eB/4eZJj4E+32NqICzRw7Y9uigt/nwyZB68deOvH/0n6T9L/blty2/+IrEVif57096f/syWZMSqUV8ipyWxhCuIrjvXCO4SBJAkgSQJIEkCSBJAkgSQJIEkCSBJAkgSQJIEq73BoQkZS82jYh1mhXBrg1wa4NcGuDXBrg1wa4NcGuDXBrg1wa4NcGuGMXyinmJMmJajCTPc/SfpP0n6T9J+k/SfpP0n6T9J+k/SfpP0n6T9J+jEDRC1cz9gmPpcnOTnJzk5yc5OcJP8kypbUtqW1LaltS2pbUtqW1LalxjzdlD2348yCsFmSzJZksyWZLMgTzkhJ0bUhKw1YisRWIrEViKxFYisMRppPx1R0g1aRrWoOMvHXjrx1468deMI6kEyGptE4SuIrEViKxFYisRWIrEViK0d/GMGsZdLLY+3NbXnrz157IDb6Z9/StVWRd5gVd+A9J83P8xXjrx1468deOvGnwEWq/DoTNDnsVZ5+k/S////JA25aUazWJ9020sqT7N2/ll/mc6OdHOjimhgqbepiHas4AstSmZ63yEvOJxNVOoBZalMz6HkJecTbttuQl5ziJqrOAG+iJ/TL4DQq/hJnF9so1+nSP/PmxBtEUsAaJzbRkZXgIDBg7GGmZS82Vv15f99eecVY75uZYLXyfp2AViuxtqNa47/npO42iyqqI4pBoqHzkzhCPdX6d4cRq4MUNQOegIsQBIlpRX5VtWA/a+GDiKO4UAw/SLphCGAL0A2xCQLUyjdRT4/xNPJGBMYtyCF9DOgB+74QpPTzEpycKrgMiH9WQjruxmiwaf0VHctsh1//xSooy1ZPqAKB382VbPAk3QAyk4hcUHBqAkMpm2QKzOYhGUsQV7bGMIfuMWdtvxUtROD6SrGiAabHOmKE3QH6Pv9K5NDTM4YWeOeAQ1CXrDsFcEIABvxIIpFN7NJe+iAgeADYlPc9x3sgJn39I/VRBM+aE5dBBcQWzgAA/v7xgAmFmD/isUv7IpuzIBnFNa57DaI2tBP6ylluhT4WKb2pw3mt9zsa8L1Qgq0UywgVhu2HF0qLtJx98kU7kJgIRL06vn07FLSpXszLuqtUI3Uu6n1euCj7J6GXvwpOTQT8H8x17zq9mHEHELUS5N7/mVyzt4W2hN0P6BKPcBgMBrwy9FPaU/sYvjECfG/GIFuEhUDwupgGnsPCB0xgtxdWwLSCO54+V5V04YYkxdWIuC/fRAeqpLK+oiFc+xjRZ/Ri/Ei95PKz/YONHDm2TTif9tqskiZIcbBnEs4xpFkGqU2e7oIE/2RbTLS2Bs7+u4kAo6KXajQAcHI7ummIz3d+mID34STaH5P+FMJJZNqVS0E/VsQ9X7AZKj+6bdozHMsI/XzZ4fBEp6g8n+6kKzeIaMF64yMT9Xeg5S0QxDff36kacnmbtz9i0QXWcvtuD2CQAn0xacDCPymj+Zdw0sdM1cPELitPX/u1Iv5CegfuI+Xi+wJ7D9ulfZuFkHzC+ZeYKu/Y2alIiyfJ9Rk3rJ1Jxju+LOf8wX2atwx/k47Pb5K/mAIP0eTLqv49Dal22qvYxc6OVp0J1iA0fdvADp+Ho0TklrYCvu6nlXgr0d/UhMcPp6li7gm9Oq3mpCZpA7X1nuz8n2tqcojAUXTXyjwAQt5FUeyP8WR5+Pme4V9BlZ/wJA4JFUmn8Dx9H57KJKtIXrz2ievPLzGM4cWV9L7LG/rnH+PtEw31xuZwEA50Mt7rxmx03FwsVG+K7iuoFIX2tol9vCwAbqZuREa+TyI2MIyJ0KIZwgCOG9FAtN+6iY1FTlx4R9fD4ukdiItVDQSl4aDBYGbwqYsiVf4GVZaa9cegIZB2GK4PabY8rEBvEhPDeNt4SUyNbsPvmd42XY2Ar6y2krlf4XjcKndlhlZmYHVZHwUGGRxQh/53YEQ35LtaDaLifaPyYlgpoEQTkTuGp+OvIgBk2rtXs0+MKnvrZ9S/N5H/PVkuvAgY0sj+Eal4DmCaBcFyr/4OKiPx0X3vT96K9QTHDLy6MLhEWhYhs5L87GnFI9aTtLx8QgLDUrCot0mrOaDIsXJuw0bDp/QC2yJsJJ0/HwG/wZ5k1oZ+q5i1WYEGo8XUMTpJJvXNUyqHmvpTp35Hhkmayfm8t2HAjxVIoQ5CsY5jE7kGX5n4a0CM5qvtTB+9U3vIxAgqDt4cJPuQq6CQ1dtb1TC9bbJjs6CMUywf6NhdP9LhA1i0PT6+pthro42rXQZFIvsysISQlT4r+nZPonUV/hYilQJ7b9tNo9hUJIGwrBsaG24TqHFZwhFVUHeF60UzlofmA26msmbh86dGo1ydvTsNhQ5erOYb3mQ4b9ioKlyZKqIv5BRRVywXUJaKcqS3wvVxZ8L+qYpNLDaJKkdSjj7RcUWQROm82i1XXTtpQEFGKLa2WC/S2wfSdM4pHZv1a01Eizw2JdfKUvg7nlZGt/2bz34E2gbsYcF7UvTByB1XmRGwFtyXA9sB/UHZiqBLiNR7fZ1nm5C4J76rtwhKUXFG5EmoAAAB7a5IGAOXHoctsh29KmGP8NsbrBVF5pxWgVstlQF0AFdQZENCR4Q31/SddD0hRu4WAmIHVVF9JoHcVIo3k4Q4YDHWo2E8dePj7JlJVHiFzm6sf1F2r4w3UwMmkLBlATwAypdFxRWwby56J2LtDjVuxFOLygaI2lWhfSJagi2Z+P2oShh8XaIBQnPYzrMre/guzIGEkWoOR+8jc7EC6uGbBUgYOo6arTqt19Rz+XOviPa3JYtrQQV+hWPM+fAsNOgR5tslynY9eVzkDWKwbVxV0xUzg0Rt+On4ZcLx2esPX0I0EqLRQB1twa0bd39RSfL5+nmv3CHdOpLVBvPkr+WY82fVDzCpntTrWgzfKGROAsrf5C6QHdNzRujnS3Nxxowu/c/673LuTZdVlyeGNVRuZrOVtR+jQSNMEoIQRKxmeaWb/QBlZHY9UpReIWIbzcHMjXh1UiGrAI6YlXEzoYGGrnuG9uugDqFAUoksvWxuHcNj5ZXGhA640KW2nFh9GqjOg6b+IeOo21bGsq0zmwGk4g+ccqHggkMua9WKfT/kjoggr1yBqv+TJGupHvyuR+GceI8hhNorw3UsnD3s1nOZiT+7juDQTPkUNNuVKSX1qKbkaTkd1r38n+s++embB8dVm+mIQLOVFOnDfFQBzdLEg0Xm4DBQKO0SpJMVtOCequGxaAGgNL3p8RLu9AHyO+P3iH/sQrDdjk6O7wg6Iz4hwt0R6ueUNJoaa+cBoW9BRElRzZFIfOQxwqg+OUWcHGjJYFRkjwvq6cDvorIroTys/sDAA+kWS9Ez2XuZyJgYlXQLQIR4HjVyJnI5gAP9fa0OJyg6Mfv3Zcw1VPr8Ij+WWJWuFaKw8RVIbrKbWy4aNdSkFEsKEs7oKKMIjZnRQzhQgsmy7NEwxU+aSQ2dde2lw97wTwJjyewlSgUISkuaeryt/9hWvi4DBMmJUSyptUA+ezA0ncyCrormekC7gmshGWsGZPrGVHkRB4MBFYLffTzubIxG2hOZgF045i4vE6CV7IFQNya4vqTzmG42fCbWNn5BwWwSFBuoaU+AHV6Yu3g2VB2/YvsIOLyIo8dLlvGfBGeUZlauegQt2FpIFZSx5mlwAFuGaqRSgFt7agZ9xvaqSjBqoHdDEG7MEiFtEmI0/eRW1m5NNBclEdMtX4IWWK6rZ2tcvq4fZduOxdSEZi7pcXvi2ttwYEddwAmqoBKaIl11Foy36I1hoOduhSfXyFwWzBr2yJhLF9kIp+9bsIV/2rHGy6Dh7UoNTFMIsZ4fpdGJgDNQB6BjHGRDV564dDT98YLTxWKYjUpsE1dtB8y9LSSz2qJsErY2SavwHgVpG2UmDoPZMcgxHZtdYM3EfjC+EaA5BpATy82DZIgbjs/DXBLo2jC6y/WlBLCZQGCXDa3KF90fepD2qv7Gz0gByyPg18u55aKQtDaxHIekqmkSaEhVN/1xI4EpnxqpyjCiD2ptEFDf/PqvqZvcAjUABe8KE3Hvcc7VmN66H4IQD8yMJ/KDPb6rpvqxileoCxgBK2FxBmbzjJ04HDiNZAACbX1WUs4Q3A7WS0l0iVDRPs5/icvTCV6GrG7co8M2MO/uRsl35j446Zo/5xUWCW5MDbcMBAGeQrp2RrYh4+bmrN019HPdGJCt4fvXWA6BIvfBj4P8JqFE+h5yYUzPuj2u4MoVv6Twusw0TA72Od3wBk4AYfyUjH7iJrfPYuG9gFKOgBlO5A80vu7M/2w1hlObOq23Jw2iIwlgAC+O42ACJg+GVkgNH52IAGcbOjTr8Xx0zfTT0gVtCAjhYES9r3Zr+Ymo4exxBU1ZKq4AlkANAqQ4CCkDSXRROCHuxatRvpzs1CyHZt3yZ4SbzyfAhR6DC6kh5yEFvqPRy+gOGwtIWesWF+20fkNHxOOeafL1nBOpBjok4wg+me41dqEeOtWpi0VOjd3F2uxOV4Pof9St5ybf1WF8jhIJN2sBExHF0acuA+b64D9KENP0AAAASUPol3EZoJJcnkdX1lGGUr6p/IzUz6oY6MqCBM6v5kHI6aFjRBnWVkHmAaOUPCAIrRAcmUUKxnX9zSgAKh2PgmcQiMgoIRdKPMeJ/Jjo4Ci5kiHQ6l/no8cKHf9aO/RETriH8k+xE61v3cxQq3TfPCdTtuior3DDwqWMj0JYxTwOEY/oWbp4HCMf0LN08DhGP6Fm6eBwjH+vgvZfYk7GamaAItaIUX//JmnF+AzaF1JpqHoXmo6LzVwsnakdy8p/8nTi3slYH27gRVe97ErvarAwr7Y1+hmEm25uN0C7AjuYSGUfe5LV4omE+Yw0LwpSJvxWXw/JTU+bChLfv7/JDqzY2ZuTzS0nUN3zRyvBKwn192sSwkvlVQ6fjEkJtS0EA5+aD8GxEDl0C4vcjvTw2Fn3xipbYkdyhbi0h/1Gbmdyp5JO/VOYMqsHE7SfOvIAAAAAAAAALN2MQMWRJLCIKK44MDx4RqdkJwY4sFO0z8AMg+mlRoKGIJB4XTApNUZUDFQfMG+aZomBwc2ZSsMrGt7rD0vdLNRTdpTdXsCSF6im7Sm6vYEkL1FN2lN1exmneI0urFUHBPnSWggY41Rl5BMHXI2StiRjbku+XtJ+4cw8oINDRtw6EqSfhdlk8clXHaq+/nhVA6/stxRA4iM1CQHucXbKPCfqPfm80zWVADQoAnfq7LNM49U+jOWN0XU2UCYaZdJ5bWlQpHRRkQwEg5midtNGatnfvj1rFBWzv3x61igrZ3749axQVs7+WyGnrtSy1Vu2qqc9p3w5w1BR9illa4biJUfvyd3r1LJ57Y/YYjTDCden6AL18Xu5QdCjV9m7uWctMnJrUBsw3lX78gyZKIlYdt+KVpE++v16z35Bd1BQ2q4txTqz13wcmjlI2MjjIXTeHyGEvdJdHcQfKkUuVaMSZUQn6f1iiU7ABBFmeAb5gVlusgFlSIc5CQmOvZ/MlCAYG9htwygQxJ2bYLj08KT6Of83P+bn/Nz/m5/zc/5uf83P+bn/Nz/m5/RjMBG9bTgmaY/Z51Z0PbKtJjiqTJ0bO3q0Btg6BFUTwsLk7QK9/N04uIn6+M0d2+DK5NBrNStUNU40zw2URn9T14bKIz+p68NlEZ/U9eGyiNdMwE6p7Xyboc6PQYNpB4Ex9ZfqapxvmieY3XPVl6IJp4yYqyzY4/GoQH3ZlABlpG8JMZIENqiEGvF7r+/7ea5lJ7Zcrv+h0xdcwGIv4w3+YdOGai4X5+S/vYnM1J7MWEMfHYqe6pbOApW+fgP/9JrtEv7OjCR5cV/hhO+C5aPxm4viNuHPaCJ0RKE+4jcmZ0bkzOjcmZ0bkzOjcmZ0bkzOjcmZ0bkzOjcmZ0bkzOjcmZ0bkzOjcW8DxnJct/fGA3dJmPYKUiTs1eB3lgbijWe0gch2B5TnF6Ji5yLCXakhBEI9k4l9lb9r+lhBJmiNiBX7KkcqOWPqmpGQpu5IkXKVqH2mMv8g6eRdxy3yvrklj0tIrSFLvW6NPU+Q7+bFcD6y6y+Qb0KNgJazIHBSvfByb650OOBtMRJESIgb6tZtdozRJVo8ArwFNiAci+H0YVexL/RhhYKLxL7n2+Ow9lLxL7n2+Ow9lLxL7n2+Ow9lLxL7n2+Ow9lLxMFleGUqOIU4YusiLuTdkO7ZGC7q0S06M5fnbqaEwOVBRJ7k53hU7Te5qN2Y4536GQJJ5BlorARyo7V8jdAAAAAAAAAAAB2l1kqV6WefAW38vts1MYm+vLoCC1LoJaHMTnrsKEGUArYkKiognZcjpxGvyGJqDXLli/ub7CQtpeyuERL16bZCZOx6fOnwwHQ0dEptNySROtQ49CGpe1bnWz+pH6XBDGSE8RyZNeserzhlR/2hhF0cqjaUmBrgLN/40/lmIjBe2NjfXS1YuK1CQqY5kYQ0qKLEZ2zxd5yLitQkKmOZGENKiixGds8Xeci4rUJCpjdgK3L6QYJ9/FfQ51JRugizlldJ7uKEuflaz+0WhvOuYd/vDF4vozroi2SDb0XTRr4RV/sgPNRkG724lACkj9dezlFp2krGMWlXIvftCu6QSQIbGfVVEfOuMQ4WS7nlaUCxquwtV4apROa0Sa0Q2VJMV615GfEM3oBxHhRbE+EgAYITzMDaALKO8bUlhSjjPLVpWgmY2tesMoblqJFg7hQ/7scvAR3Br7CPM0jmr9kNIvnnzCF52Tula3arD2Gde9HqzlAbS9QXJSQ+u4kpIfXcSUkPruJKSH13ElJD67iSkh9dxJSQ+u4kpIfXcZ3mRRwXN9jpQRhwYAAbnv5Nc73hQpuhDjs6RXkc4lC+3wtzhhf0tbm2Cr2sOQatmvDPs+t43EG3hKfm7+5rlKTWMfrRyFmRRXrreLnH94Ruy/QDJX9pUHKpjRxxytKmO5MYOPaeaDUgFH+Qi8ESKO6EGCwfAhTdyypYVXcEpnMolvOw3wB4kNDIJhpwib3RA5aBjuJyEylXKd/Dnz5MD1uhNUfTP3RA5aBjuJyEylWYD8Vfqp1mceBWuI09sZzId50yvFZO7vsBkj4Y1jnhqWR3zIHMCMLNE4OT5g1bSNtvBmO6pJyYztJuoPt1QW0KuL23Ke2S+IbkoEdfXSB+k/BnrI9y98M802+MH2RnCNIKngL1gJgn3qn2Fyl4bbR+/3d1mqI2q5aPF2kmcs9Gl9XSoQRote8hp7AVlkcn3CJ8+3Thnq6yQIraJTyKT7yMHIr4ror4wyFyOH8yOW9wihV0iiBgb+HvP+JuM0UKuo5Z3o+Cw4sxUVXWHQj0NHzK3Soa3umKnac+05obI0odBBAd/Iu4Q/xtPfaU75dMUVK2exVIM1SuyebLUQbA/mHakaBiiivFpCaB6bIU5hMrpEuJ++bdBQZEfqd/khNUk0w/U2HWEER4lrDtM8l2w+WuRFaIRYJEj/2N8pqIfPF3bafJ8bybzjRSgHkOdKetNCKNpELnfSzfd4PcGeKI58Mj90FLeJVT83klQU+7i7Q197qC785mIfKwNjMVcBNQKbGoxBQ81e9TcII0W9ln/kKoz5GRlruaHWe/IpizdK2ZAJIgHR0RxbWjDdLPY0eK+iseZiACzblGvdjntapgGg0+ndrIZw0l1GAeg92CKcJ2ycqvyUFg3LsiSMfdsB+uSapa8qTyh2Ok1/uKXwfEgaeeZ76FCSLICUgQdXNhr092M4JnltidBnuZuj64Oj64Oj64Oj9RtAffZhQdzPQxkt8E44oQS74PebUBIpfOJxcFPAACsHjP3wX0C9hu8vgSDkRSZtgmPwQsYluKwDaIL3WZSCSoNogi3dQQyIRoxGwESL7b9UlwpZ8GiClwezyh4mSOoYhxPyqW8YJWu2NoC6Hps3S2E2EGVWjTWBoTkb+y33WAOS5Ncm5559HZB9YRHM3y1lWLNMLTOC/NNRL7E0l0XYSXS0N3SPaHnu9XH5/pRrIWOBlrShMOCh5VZSw0/f7yatlu1TRoSd1hiYvkjjlJJOcIurhttlB1GRZ+pOqNn0Z9Ux5hvHHt+l+09lJZybGO8HSuVhHlB5/fxUYxFekruLTCV98zEmEfRBgl3jTKpuUnNpP6Xmj8XMGZ3mYYvnvJJ/f0vNH4uYMzvMwxfPeST+/mOZFwEPQWDXjjVqHJWWYiOrM/ImdCxnauXmtn5PoFZ3X+GhWj6Ex7LjLRazU+RaqZjOQDEyuxLaFzDC8Ty8GYrkSgsf8TjHJgqVi9YKO5m9TtMBb+dxM8e2yUb1UsglZPNi1rHTkF4UR8AFJysYFPWcfrSRZGddk/6VhjMsUInZSKHW4N3CfcyFHR3OZcwdqXz0LIh8lI3bOnfsIK1oNKnp6ycz3DxOieGnJGq8vMHo9E8NOSNV5eYPR6J4ackary8wej0TgZvYa4VMrUbhVYrCx6TbwsKDALGf4V3Xw45inhTPFDF5Sqet+ngqNpXhMMneyAs6veRI0jZZTkNnHVkZ2Wnbka5MQ7QG+/vapN+u6F30dialsLI8DNomcvBpg1V9Wmu4JiZrvsrP+gj0eLsYINoh0GJoJMD//zfEGD2NxdwEa/IPMeUt8cg8x5S3xyDzHlLfHIPMeUt8cg8x5S3xyDzHlJLcZgkRLH5AFJb9prrbBVjIFSb+7LeEaJdBy+/3hxlCkWHlhSHmkmr7GtxQFxq0TpAAvBNpiYqe4JKAatmiXpJBAkc3D2KTNdAZmugMzXQGZroDM10Bma6AzNdAZmugMzXQGZroDM10Bma6AzNdAZmuW1NEC+C4ZyIgwN7oHsrnvz0NvAwPkQAHA+GkAlqI7qrTzJDgPeCS92KG2sPix0XCN4pgIjH+fpEXa4RsxCnRwWk8GB0t/cQL/emI4gchgxOfrV0qwyViT7RImzAgLmFvGOl8h0SnWDbgRvDt8KOmg9eQNooymy5z24sPOZSM+spfFcCxgJiCKFWf5HrwVz9fx6b1FSmFsHfdZ0I6+2ufVbvp23oSTfa4ZeYGN7scGw/NFhzovVC2fh8uy/lhS/i1H3Ofu29Ea2BXOt9Gl9T4EeADo3mypCoqGCcmokcnWQjnbkG22DLg5TE1ng6cgzSRrNR8OGCxWeCylb4wYzyGa15OpzvugLauwPc/V8wnToR9AZ+fBOtzRO/kv1HmioeVYDvNwub1YezGyiqeaYBCSY9fW2GtGAeeYncJ3D7lzoVIECA9FClNFidVU31qUqqVWrVq2oCQImP5JGibWW2URdPwdpSgeYV5LnZbtsX/XTXXgbgHjCTUl4SZdJrdBjHRIbqTutSDq2wa7GxKDF6GHyoF2rjVkBg6zKu22mgxAAAAAAAAAAAAMZa0N/D0hQX+lMVTjxy4emgDNqBKZJ+EcjqHeQ+pZehPrASw0pNLyLoscMw2T0G3XFm7h06e+TKZiJ+9J/eBrUuMy3niPZy59QNetbJcVdzGYwPlwcpV2ejhlXiv7F7W1MN2rimR4gUj0NvOOKoWXYpQGu7s5QIu+BheHdaPyf/SU9NbZmjrNatkkZv5zjUlraOhDyj1qBrbM0dZrVskjN/OcaktbR0IeUetQNbZmicz4A11yEQjF1uPu/oRlSkVgy6cin59kuhpIug7VJPabGBncML58FF0bvOjfZ1kGW7SwD0nzFA46zhcfWV1F0ai1ZFfJa0r1P84jlquRabI5A8bUo7N7JQiS0S0qt0qiTUSaiTUSaiTKjNdQei/arqm/Ev5H87i/VKSzDSMyUUxgg0fguLX7a/bX7a/bX7a/bX7aq1ce9D57u+9j4nG/Uh77o84IjX6aPyLwOOVmPrDEA+qVTvQ0daMxLP3GGcf6C4CnIcq82pYNGn8AAAEK+Itw+8kf1UXUlQ9v3ONmWr5ZgpMiAiOX6WE6mttdcjaRWNrw2tDlc8jLRZuXm7LBOxR39KaXXzB5R79yoO81xEY7h7r8sgsYM6Bgu+pfAo1117stjGiC1hAMlb8VeWWrjv7zjV2vaWM361xbjc6YyKLKNo9FQxTS26gL/ZpHWEeBJD8cBzSYAZI5fnk7ZtlYjWDkarDtJ8bHo27uY66Zu9aQlWDx8cPIW2BN39pvkq1JfQr1fEy95+ji5/ekQggWXNpa9v+ALpT/WOqoi+5Po3wM0943ajosf3I9QYHgIIz7cjQuXbPdfP2tAHT7FiQPwhrHSma1fAn0yCf8tLCrz6++6pwRirHmGrgfuQ2+kb1/qTP3NHTuXxqlENqjl2b9cX9lNaBrj0SwAyts49DbzD5P5ht4uGEEkNyh0xhA2b+i6ImGM01b/yqoofYhXxZOd4AvT0Qgyje/vTFCH8NjK3kPM5dP4RK5DWpC2pB6T6+ardX+nGQ5ba4ULOcH8+/nQs2G+ZdNIWWv+tTbwYVqEBbYTgJmyk0UmLq2+ySUgI7YfEb6eKT87mM31bRauyON9a3l8J0u8b7X9B9e0RTW2YU31JqcNEypKF5PQXn2ffuMtR9zR4N4zqjQ8FPrg7w4O0UD/EB+aFOjujBnDJGUh8aJZh0ZR/TEX4VgYe0w2k3uSrCCpGbR45WbfiWdxAa3j0hVBujG+LLnqyVjEDgBMlazcAWtWP8ssCPN0AWVv0qt5eXQsS5+CO+pk2A7oLOZnjm2uakIaDC7isScxQEj/eXhXmj1OqZEfujtN9LDfKoaQAG9FaoSd1FtFpVba82V3nOrSEkNhOBvcW9eAACjEACoBx0/3so9wUysNNRef6dqTkHaCpdY8YE4mepczgXvUKL6lOFt6x/mML1gadoy+Aag++dAEVSXtG/OpBZ+FXfbNLsZW0aaqfSxvfMNkCurYevwUUI6M9MKG+Sery8d6kvp76Mo7fKTZ9n9CX3SVy+ppW3HFfVccTj003LvEbE8blw2kHV6sC3XdAgK95RPw7An5MOzPZbLLepuZ7LreisIcuvhbOmQNPxn5r8iqvTvi1KOaDj0ZcBcCMtWTneDKChqfog7P0JIQVbWw18sABvdVXaxf49x9wtPe6lrjXsc+saQ96/tTQME/+raFRdc3rr4kLIc899v6NvZcLS1zeXXXLSe8B9sHQzZ3RV9ZILXEOxBsG4dIRZeB4Z7j9XRDro/jipYtYz9hPvcQlVg2DveenECCVInlQ1kNnkDI5ICkdcGfzOyDHs3/6UnSZBH3TrKqs/Nfs6FbzR2JV+NRylk/x+rabB0E4/NW+pbEfXTuMFxA9Xl3HbYFULrz8DKZ5kEzya3KsTXmGMtKxKHbRJK5oiEX2cKB62jdKSHDn58UXNA8KNwnC5eOvMCXIWd7+n+8nfFZDhUnwnRZE2kR6QLPhwANUGrAIwXAcipfcY8JVhKJ+8ZI9DJZji2s7hxbBO+S04r/LUeXwpkhF3OjrjaUenxvnNP9OHjLxUkVg4bwDncLmv8scYYO6vsJALzE3k/htZKN+RHt6iLaIaALgG0xxX/BdB5UGWF32Uz0cEMZOGuQ3k3K4NvvqYI8r9fPKI5PBed1FTv8hKFlX0G7nzuG1Bgwq5jqCk85hml6WfQQZ4wyPjg1wZB+ADnvTqz+JvKrdMW9UmVKZjXWRz9PKfpST6YADRNDlztkzTeFAwH1S6kFrTGPCAmc835L+f4WYtiveLirq/CY+FC2Mq/f+LyFwSeDLCGTPm2zlvgidLQ7byOGeoUmfC52u7DIEDv/CakQovdLj+G1e0g1YiMi7BcyUv2b9P+ukVTkWhidnRsiOtg6vb5/yUTwQSBD9BBL73rzzTnXbraYF614pLtWktknfIRcW9TYwts+tUHbDb6yK9qH9J/lIWj4uZZ2VMQXiSvhCvLgR0qn1L1ITrR2TYoArTZk/ttmlOK7VQu72fz6V6Ie9RPRCyDkMnJU+h/ZKwVJkoFQk6O0MHHFJ/m/maDAzQo3u9K+JQ2nU0wOEQq1qDciF9lXdXW04I1mlIarhztub+FfmxCWa0qEKMQr6kpMHPaK5POJH51+Lay8Y2uB+rz8hUV1fqCNIblOu4GWkptyEs+Xy/o2nJrKkUxLmCYQ8IMT37mRJKICDiOOzuiEABHs4pJBA8Gk6EGyUgqcJh5YP3rjAAE3b2HmQ+GLRD6Hp/XGCr42ys34rHDqFZTKVgtgYnfLfOryC6+xWZnoFVthnwaIZmwAxB+CzClQp+8AL7VH6WF61+sYOzsc5mazvjspPGMrovpYfoG4LuQWIB38YLpiwG7GnP4DobbnpXhBuAOC5GqVLFaoC5KhIx86bqkW8ON2gShpFnX83thUWCShhiBmQ54hUDL135Olh5p6lKys/B1uvIzNqAAWYH4LMKSCNByT8JD+g+N4RPIFI8iVFIdyYoVNz/iEASWumWBc8XPBKbpyBAptl+5pqV2ig23yYozmLAs1PBCOdLxuZB/VBBuykKUivNrjFU1RYaDjV2j5vus4qOfWpphHZWnLyfMUPEGK99V8pqcNSlawCvWyh8Hc0wk/2HDz4SF9VYBQ5Cl5L/EwBGw1hSvFXpuddFLww/plz+oPIrqEzYa1ZLKTWWARYUforrYAjszoLY3Ki6AeCJB9UPAttf2AFLvNBiZVpT+ZzcmwerrrYXH5DIgZvwAONdT2h5mta/+5O9GtqBTNDAgCt+gWbJJibIN4QjamUTTAIZfyCECj0a02azxIa2i1eVjDRml8v8ABiSPvODWYZKDMxRF6RSIrR6OyFRCTIju1nN7boBY878W1mAzf1ALfhTZLhZr6nPW5SSgBvztx3BZ3VscltJIdZuiytLaSCZ4GOSAWunQ7IQp0IRqtjV1UWUzyPzwoGD7lTwATDYkf1OpQW6QSBJegmw+oZelmBA4zLyzD2VMPHdMWyWCJ+1e70H+9l/bNv3dZBsSzIOj+V8lc4ATMRoLJb7EIEn+zht7PtqAVKAipZrPO8fz8bZHI3HoQIt3laJRh8pENIs3FK4Gaahos8Tj/wOom6jQrJPGDZTFsE80zsIlOiQOMAsEcyCVsVY1pLDaNZn8XrnksjwhHpeL37/mDCJzDcBGqB6QXmwulBN/7bonjzIqsH3ZDe2z0rJQY4xA0Dux3T0MTWUD2jv1OImOMRGVeZra+PNI5NYpxpI1Si5RYn+kLf1PAWYDDJaPJzrgl3z2giu7mpP8zF8oBafqT23vm8FDcefDCjojfYA1EUUYh+7xLs/c2Qd3x4WXFft85HQVuFVAAq0EO7OFlaT3aPh8g3AyqgZ1emrzbChJklXKzGk/HWaLQHFF51FVKlbJkXc2mmaOQB8hJwDqarmDB1to6htvjTNxnCQxMRTYghvyJd+okeDoHsqCyOuUzr0aooKPULqp1klc1pP/OLgn2bTQpa30evikgXBd8O+tjdhFvWoEfI03AvvpNfFWImxrGjtSpHnE7k2BQqlIo2zkO9/JFb9DLmfSq1zc2+t9fPSl+83KYa3eEtqUjYE/t/uR43X04/0mKOZvx8X73HSCfe2AUhjT2YhrqTnqu5Dxzxcx3t21EEK2ZgBrqNU6nzDlbe8gAJPKJF8NHDUXVfSUO4lk4wWbCCB5NhGmCCcKbYi72HuHjOazcA7hxAz114WVlKMxK8RkilkDup26pwJdkxmmZT11eO4Nfe05CkCCROsuKwNv/XmUtwUXab4WhTQ5UhZj6mKNkhH3OXbNgDpfrJjPZX9JgEY0d9vpOveFJR08z5cDI+l/aLUvkg5mcnac50kIQ76JejUOWLkL+HOH6ViIufOBeVAhkveCotri325J2EvNyfdVcOk5teWHtX9hKoIjxXcr/142ukGcGyo9E4K7Sr0smNUo9pMupe4vQSURxH2IXWLm0uL88AJr2cxX6jVmJ0yib8R0EXM2okJRljMbhggzNiJyTdJXLOXIMRSzDMP7wnZpfG5L85UP8uD0vIY7TfOBL9RlB1zyCMBzMvTrZvBMBkAkjRtNqtfEJXgPsT2N+5/ZqGnR/Io15E9BvuANZ4MKnlmAg0+wrd345b+yWJLp353rU6e29GCJudOMAwSBFVO/QTSZmNaQUlPPS2FS7vmNVPVcG29r/VJs1+28g0fFndRB74CMLqh6c1+EqRJOTbwUyevMAl0bqDPrUKGEJ+GuGY3MTFLfgBUvDK0J10w9ia+146sDJTyIHs4MTI/FWSIU2vvU8pQIMcPM0YA0rl2w1GouFS0ri4ybkK2ETv9KiB+MzhUAgrtFx+kXZwkz+1ABpSvtJ4pcnu+TdX6xyhf4tVIkwqiaLp9tzMzxSiDoSpTU50vlG7/V4FYpRU8PIA+6+ShyB4ww3qeTVGorW1aEJFfx/qWeeV2C8T3bAwyoPEJI5RWYi3r0vzcBLQFB8zzQ0VbTRfuqZBBNH3AgmU/J3wimHViDccocnBomUBSC1znYSuVJ7f8L8e1MCwGGB894x8G95uii9o++spLLP2ztOCKvE4iqJ/KFSiTAl8kHKt7krJYW39N7459aYF2vyPVUs1JMZ1x+QzQBYNr9y3Ka2cEegbuCAherdRDo+TAUy8omrtyFMd2YIQlzfZQAH0hmOuR0m0P2JCo0vsYrJxrE3BP+TdI064tVkPX/eKOTQ2PUgo2tywkX6oDGp8cxyoyn1m0AammkAfXfHrrdgi7T2sZvDwE+xWie8fQm4f2wT4TOy4913KHlAOh484I4g4Gzcdb2tPNB6+xAAAAAAAAAAAAAAAAAAAAAA"></a></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/Edent_Solar/status/698556250662031360"><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="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2016-02-13T17:16:03.000Z" itemprop="datePublished">17:16 - Sat 13 February 2016</time></a></footer></blockquote>

<p>There's no doubt the Maslow is an expensive "lifestyle" product.  It's for saving the planet rather than fattening the wallet.  Built in to the cost of a typical home it could be a real game-changer in how energy is used in this country.</p>

<p>As an aside, the UK Government pays me for every kWh the solar panels <em>generate</em>. They don't measure the actual amount I export. So the Maslow doesn't reduce the Feed In Tariff (FIT) payments.</p>

<h2 id="features"><a href="https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/#features">Features</a></h2>

<p>OK, other than offsetting my grid usage, what does this big ol' box do?</p>

<ul>
    <li>Powering DC lighting. I decided not to go for this option.  I already have energy efficient bulbs, so the extra cost for replacement didn't make sense for my needs.</li>
<li>DC Power Circuitry. I've not yet installed this, but it should let me charge USB devices without needing to do a costly AC/DC conversion.</li>
    <li>Works during a power-cut.  For safety reasons, the Maslow won't power normal household sockets during a power-cut, but it will allow you to use the aforementioned USB sockets and LED lighting.  Handy in an emergency</li>
    <li><a href="https://maslow.freshdesk.com/support/solutions/articles/5000544423-what-ports-does-maslow-use-">WiFi for monitoring usages</a>.  Which of course means…</li>
    <li>An API available for HACKING!</li>
</ul>

<h2 id="alternatives"><a href="https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/#alternatives">Alternatives</a></h2>

<p>There are number of alternatives to this sort of technology.</p>

<ul>
    <li>Divert to immersion heater. I currently have a <a href="http://www.amazon.co.uk/gp/product/B015D0IIAK/ref=as_li_tl?ie=UTF8&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B015D0IIAK&amp;linkCode=as2&amp;tag=shksprblog-21">Solar iBoost which heats up my water and reduces my gas usage</a>.</li>
    <li><a href="http://www.tomshardware.com/reviews/technical-foundations-diy-solar-powered-pc,1693-20.html">Build it yourself</a>! If you have lots of spare batteries and are a qualified electrician.</li>
    <li>Car storage. At the moment, I've been <a href="https://shkspr.mobi/blog/2015/11/reverse-engineering-the-bmw-i3-api/">using my electric car to store surplus electricity</a> - but I'm not always at home during the day.  I can't "reverse the polarity" and feed back from the car into the house.</li>
    <li><a href="https://www.teslamotors.com/en_GB/powerwall?redirect=no">Tesla Powerwall</a> - the elephant in the room!</li>
</ul>

<p><a href="https://www.teslamotors.com/en_GB/powerwall?redirect=no"><img src="https://www.teslamotors.com/sites/default/files/images/powerwall/powerwall-battery-group@2x.png" width="574" height="403" alt="Tesla Power Wall Batteries" class="aligncenter"></a></p>

<p>Tesla battery has the cachet of the Tesla brand - but hasn't yet been released to the UK public.  At <a href="https://en.wikipedia.org/wiki/Tesla_Powerwall">around US$3,000 for a 7kWh model</a>, the cost/power ratio is pretty good - but it is significantly larger in size to the Maslow.</p>

<p>The Tesla is only generally available in the USA, so it will be very interesting to see what their price is for the UK market.  The Maslow is designed for typical UK use, which may be different from Tesla's focus - UK houses don't tend to have air conditioning, for example.</p>

<h2 id="final-thoughts"><a href="https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/#final-thoughts">Final Thoughts</a></h2>

<p>I've only just had the batteries installed - but it's obvious that the Maslow provides a vital way to reduce peak grid usage from domestic properties.  Even if it is a little costly.</p>

<p>I'm delighted to be part of such an <a href="https://web.archive.org/web/20160708102711/http://moixatechnology.com/case-study/60kwh-oxford-rose-hill-homes.php">innovative trial</a> - I'd love to see every home in the UK generating and storing their own energy.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=22452&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2016/03/meet-maslow-the-uks-answer-to-teslas-powerwall/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Liberate Your YouTube Videos]]></title>
		<link>https://shkspr.mobi/blog/2015/11/liberate-your-youtube-videos/</link>
					<comments>https://shkspr.mobi/blog/2015/11/liberate-your-youtube-videos/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 20 Nov 2015 08:12:26 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21934</guid>

					<description><![CDATA[If you&#039;ve been following this blog, you&#039;ll know that Google unjustly shut down my YouTube channel.  They&#039;ve now reinstated it - but I can no longer trust them as custodians of my data.  So, here&#039;s a quick tutorial on how to download all your videos - and metadata - from YouTube.  The Official Way  Google offers a &#34;takeout&#34; service which will allow you to package up all your YouTube videos for…]]></description>
										<content:encoded><![CDATA[<p>If you've been following this blog, you'll know that <a href="https://shkspr.mobi/blog/2015/11/the-day-google-deleted-me/">Google unjustly shut down my YouTube channel</a>.  They've now reinstated it - but I can no longer trust them as custodians of my data.</p>

<p>So, here's a quick tutorial on how to download all your videos - and metadata - from YouTube.</p>

<h2 id="the-official-way"><a href="https://shkspr.mobi/blog/2015/11/liberate-your-youtube-videos/#the-official-way">The Official Way</a></h2>

<p>Google offers a "<a href="https://www.google.com/settings/takeout/">takeout</a>" service which will allow you to package up all your YouTube videos for export.</p>

<p>It creates a multi-gigabyte archive - which isn't particularly suitable for hosting elsewhere.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/Google-Takeout.jpeg" alt="Google Takeout" width="800" height="600" class="aligncenter size-full wp-image-21935">
Once the archive is created, you have to download it in 2GB chunks. The archives are only available for 7 days - so if you're on a normal speed Internet connection, you might not be able to grab everything.</p>

<p>If you do manage to download everything - you'll find another problem.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/YouTube-Export-Zip-fs8.png" alt="YouTube Export Zip-fs8" width="736" height="221" class="aligncenter size-full wp-image-21936">
The files are enormous because you're downloading the originals - not the web-optimised versions.</p>

<p>So, how can we download high-quality, low-filesize copies of the videos suitable for HTML5 use?</p>

<h2 id="p-p-p-p-pick-up-some-python"><a href="https://shkspr.mobi/blog/2015/11/liberate-your-youtube-videos/#p-p-p-p-pick-up-some-python">P-p-p-p-pick Up Some Python</a></h2>

<p>We'll be using the excellent <a href="http://rg3.github.io/youtube-dl/">YouTube-DL</a> - make sure you have the most recent version installed.</p>

<p>The Google Takeout from above contains a file called <code>uploads.json</code> - it has a list of every video you've uploaded and some associated metadata:</p>

<pre><code class="language-json">...
,{
  "contentDetails" : {
    "videoId" : "2gIM9MzfaC8"
  },
  "etag" : "\"mPrpS7Nrk6Ggi_P7VJ8-KsEOiIw/7fgl8GbhgRwxNU3aCz9jzUB_65M\"",
  "id" : "UUAEmywW2HASHP0MohSNIN0qHLpdeAxkQv",
  "kind" : "youtube#playlistItem",
  "snippet" : {
    "channelId" : "UCyC5lCspQ5sXZ9L3ZdEEF2Q",
    "channelTitle" : "Terence Eden",
    "description" : "Look at me walk to work!",
    "playlistId" : "UUyC5lCspQ5sXZ9L3ZdEEF2Q",
    "position" : 168,
    "publishedAt" : "2010-12-02T10:03:15.000Z",
    "resourceId" : {
      "kind" : "youtube#video",
      "videoId" : "2gIM9MzfaC8"
    },
    "thumbnails" : {
      "default" : {
        "height" : 90,
        "url" : "https://i.ytimg.com/vi/2gIM9MzfaC8/default.jpg",
        "width" : 120
      },
      "high" : {
        "height" : 360,
        "url" : "https://i.ytimg.com/vi/2gIM9MzfaC8/hqdefault.jpg",
        "width" : 480
      },
      "medium" : {
        "height" : 180,
        "url" : "https://i.ytimg.com/vi/2gIM9MzfaC8/mqdefault.jpg",
        "width" : 320
      }
    },
    "title" : "Walking To Work In The Snow"
  },
  "status" : {
    "privacyStatus" : "public"
  }
}, {
...
</code></pre>

<p>So, we want to go through that JSON, download some web-friendly versions of the media, and save them.</p>

<p>This Python downloads a high resolution MP4 video and AAC audio - it then mixes them together.  It will also download a slightly lower resolution WEBM file.  It then grabs a screenshot and any subtitles which are present.  Finally, a little HTML5 snippet is written.</p>

<pre><code class="language-python">from __future__ import unicode_literals
from datetime import datetime

import youtube_dl
import json
import urllib
import os

#    Read the JSON
with open('uploads.json') as data_file:
    data = json.load(data_file)

#    Itterate through the JSON
for video in data:
    videoId     = video["contentDetails"]["videoId"]
    description = video["snippet"]["description"]
    publishedAt = video["snippet"]["publishedAt"]
    title       = video["snippet"]["title"]
    status      = video["status"]["privacyStatus"]

    #    Create a date object based on the video's timestamp
    date_object = datetime.strptime(publishedAt,"%Y-%m-%dT%H:%M:%S.000Z")

    #    Create a filepath and filename
    #    /YYYYMMDD-HHMM/YYYYMMDD-HHMM_My Video_abc123
    filepath    = date_object.strftime('%Y%m%d-%H%M')
    filename    = date_object.strftime('%Y%m%d') + "_" + title + "_" + videoId

    #    YouTube Options
    ydl_opts = {
        #    The highest quality MP4 should have the best resolution.
        #    Best quality AAC audio - because that's the codec which will fit in an MP4
        #    A lower quality WEBM for HTML5 streaming
        'format': 'bestvideo[ext=mp4]+bestaudio[acodec=aac],webm',
        'audioformat' :'aac',
        'merge_output_format' : 'mp4',
        #    Don't create multiple copies of things
        'nooverwrites' : 'true',
        #    Some videos have subtitles
        'writeautomaticsub' : 'true',
        'writethumbnail' : 'true',
        #    Make sure the filenames don't contain weird characters
        'restrictfilenames' : 'true',
        #    Add the correct extention for each filename
        'outtmpl' : filepath + '/' + filename + '.%(ext)s',
        #    If there is a problem, try again
        'retries' : '5',
        # 'verbose' : 'true',
    }

    #    Download the files
    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        if status == "private":
            #    YouTube-DL won't download private videos
            print "Skipping private video " + videoId
        else:
            print "Downloading " + videoId + " to " + filename
            ydl.download(['http://www.youtube.com/watch?v='+videoId])
            #    Write an HTML5 snippet
            html  = "&lt;video   poster=\""+filename+".jpg\" controls &gt;\n"
            html += "    &lt;source src=\""+filename+".mp4\"    type=\"video/mp4; codecs=mp4a.40.2, avc1.42001E\"&gt;\n"
            html += "    &lt;source src=\""+filename+".webm\"   type=\"video/webm; codecs=vorbis, vp8.0\"&gt;\n"
            html += "    &lt;track  src=\""+filename+".en.vtt\" kind=\"subtitles\" srclang=\"en\" label=\"English\"&gt;\n"
            html += "&lt;/video&gt;"
            #    Write the HTML
            with open(os.path.join(filepath, "video.html"), 'w') as html_file:
                html_file.write(html)
</code></pre>

<p>The files it downloads are significantly smaller than the original uploads - with no noticeable loss of quality. The combined size of the MP4 and WEBM are around half the size of the original files.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/YT-Output-folders-fs8.png" alt="YT Output folders-fs8" width="618" height="336" class="aligncenter size-full wp-image-21939">

<p>There is one major bug - occasionally the script will crap out with:</p>

<pre>youtube_dl.utils.DownloadError: ERROR: content too short (expected 153471376 bytes and served 88079712)</pre>

<p>This is <a href="https://github.com/rg3/youtube-dl/issues?utf8=%E2%9C%93&amp;q=is%3Aopen+content+too+short">a persistent error with YouTube-DL</a>.</p>

<p>The script can be run again - it's smart enough to avoid re-downloading the videos.</p>

<p>And there you have it - a quick way to grab everything you've uploaded.  It's missing a few things - view counts and comments, mostly - but it's good enough for re-hosting elsewhere.</p>

<h3 id="this-is-what-it-looks-like"><a href="https://shkspr.mobi/blog/2015/11/liberate-your-youtube-videos/#this-is-what-it-looks-like">This is what it looks like</a></h3>

<p>This is what happens when you put that dash of HTML into a web-page:</p>

<video poster="https://shkspr.mobi/blog/wp-content/uploads/2015/11/20130210_Raspberry-Pi-MakeyMakey-Scratch-awesome_bNSC5W1_6U4.jpg" controls="" style="max-width:100%;">
    <source src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/20130210_Raspberry-Pi-MakeyMakey-Scratch-awesome_bNSC5W1_6U4.mp4" type="video/mp4">
    <source src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/20130210_Raspberry-Pi-MakeyMakey-Scratch-awesome_bNSC5W1_6U4.webm" type="video/webm">
    <track src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/20130210_Raspberry-Pi-MakeyMakey-Scratch-awesome_bNSC5W1_6U4.en.srt" kind="subtitles" srclang="en" label="English">
</video>

<p>I think there's a problem with the subtitle track - but it is not a finalised standard yet.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21934&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/11/liberate-your-youtube-videos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2015/11/20130210_Raspberry-Pi-MakeyMakey-Scratch-awesome_bNSC5W1_6U4.mp4" length="59565615" type="video/mp4" />
<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2015/11/20130210_Raspberry-Pi-MakeyMakey-Scratch-awesome_bNSC5W1_6U4.webm" length="13554805" type="video/webm" />

			</item>
		<item>
		<title><![CDATA[The Day Google Deleted Me]]></title>
		<link>https://shkspr.mobi/blog/2015/11/the-day-google-deleted-me/</link>
					<comments>https://shkspr.mobi/blog/2015/11/the-day-google-deleted-me/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 19 Nov 2015 08:13:29 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21911</guid>

					<description><![CDATA[(Trigger Warning - violent swearing and criticism of your employer / focus of your fanboi-ism.)  Google knows me.  I&#039;ve been using Google since long before they were fashionable. I have a Gmail account (in my name), YouTube (also in my name), an Android developer account (name and bank details), Play account (name, credit card, and PayPal), and I&#039;ve successfully reported security bugs to them. …]]></description>
										<content:encoded><![CDATA[<p>(Trigger Warning - violent swearing and criticism of your employer / focus of your fanboi-ism.)</p>

<p>Google knows me.  I've been using Google since long before they were fashionable. I have a Gmail account (in my name), YouTube (also in my name), an Android developer account (name and bank details), Play account (name, credit card, and PayPal), and I've <a href="https://shkspr.mobi/blog/2014/01/another-google-privacy-flaw/">successfully reported security bugs to them</a>.  Google, I would suggest, has a pretty good idea of who I am.</p>

<p>Which is why I was somewhat confused to receive this email a few days ago:
<a href="https://twitter.com/edent/status/664698314701586432"><img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/GooglePlus-Warning-fs8.png" alt="GooglePlus Warning-fs8" width="480" height="599" class="aligncenter size-full wp-image-21912"></a></p>

<p>My initial thoughts were... ‮!ti kcuf ‭</p>

<p>Who uses Google Plus?  I don't!  Earlier this year <a href="https://shkspr.mobi/blog/2015/05/how-to-make-your-google-account-completely-private/">I wrote a mildly popular blog-post about how to make your G+ profile private</a>.  Frankly, I think Google+ is a massive mistake and I actively resent the rare occasions when I have to use it.  Having my G+ blocked? No great loss.</p>

<p>Until I went to YouTube...</p>

<p><a href="https://twitter.com/edent/status/664897934635479041"><img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/YouTube-Disabled-fs8.png" alt="YouTube Disabled-fs8" width="536" height="206" class="aligncenter size-full wp-image-21913"></a></p>

<p>Arse!  Because of Google's relentless desire to force the shit-sandwich of G+ down everyone's throats, they made me link my YouTube and G+ pages.  What <em>utter</em>  ‮.sniatsknaw‭</p>

<p>I use YouTube as part of my professional portfolio.  Clients often ask me to share on YouTube a video of what I'm building them.  I also monetise some of my videos - Google pays that money straight into my registered business account WHICH HAS THE SAME BLOODY NAME ON IT AS EVERY-SODDING-THING ELSE!</p>

<p>Right. Ok. Deep breath. What magic incantation do I have to do in order to appease the Google gods?</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/Gplus-fucknuggets-fs8.png" alt="Gplus fucknuggets-fs8" width="920" height="632" class="aligncenter size-full wp-image-21914">

<p>Yeah... I'm <em>that</em> popular that someone wants to make a "fan page" for me.  If you are one of my <strong>hordes</strong> of rabid fans - I'd rather you fed me horse-crap than created a G+ page.</p>

<p>Fine... Here we go!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/Gplus-fartgoblins-fs8.png" alt="Gplus fartgoblins-fs8" width="796" height="707" class="aligncenter size-full wp-image-21915">

<p>I've never been quite so glad to live in the industrialised world with enough funds to buy a Government issued ID!  I was also feeling pretty smug that I'd had the wherewithal to save a photo of my passport for just such an occasion.</p>

<p>Of course, lots of people have a copy of my passport. Every job interview I've been to has taken a copy. Every hotel I've stayed in wants my details.  Countless bars, bank-tellers, travel agents, and HR staff have had their grubby paws on my passport. If someone <em>was</em> pretending to me - how hard would it be to obtain a copy of my passport?</p>

<p>Or, why bother - I'm pretty sure that the monkey-fiddlers at Google wouldn't know a fake passport if it bit them on the meatus. But screw it, let's upload it and wait.</p>

<p>And wait.</p>

<p>And wait.</p>

<p>It was at this point I began to get worried for all my other Google-linked services.</p>

<ul>
    <li>G+ was down, so <a href="https://shkspr.mobi/blog/2015/09/get-your-google-location-history-the-hard-way-again/">I couldn't share my location with my wife</a>.</li>
    <li>No YouTube - which meant grovelling to clients.</li>
    <li>Analytics seemed fine. Oh, yes, Google has validated several of my websites which have my name in the WHOIS. If I'm impersonating myself, it's a long con.</li>
    <li>All my apps were still available in the app store.  If someone <em>was</em> impersonating me - they were free to infect Android phones with whatever piss they liked.</li>
    <li>Gmail - thank the maker that they didn't destroy my Gmail! Ok - everyone hates email, but it is kind of a necessary evil.</li>
    <li>Hangouts - luckily I've abandoned Google's pathetic chat offering for something more stable and secure.</li>
    <li>Wallet - weirdly, Google was quite content to let me send and receive money through them. Fraudtastic!</li>
    <li>Who knows what else?! The ADHD-addled toddlers there have so many half-finished ideas lying about, that it's possible I.... OOOH! SOMETHING SHINY! LET'S "SUNSET" THE BORING STUFF!!!!!!</li>
</ul>

<p>While I waited, I realised that I'd been given a bit of a wake-up call.  There's no due-process with multinational corporations.  One lives and dies entirely at their whim.  The feeling of helplessness when faced with an uncaring monolith is profoundly depressing.</p>

<p>A day later, and G+ had decided that my account <em>was</em> legitimate.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/Gplus-appeal-cloaca-fs8.png" alt="Gplus appeal cloaca-fs8" width="480" height="273" class="aligncenter size-full wp-image-21930">

<p>It's not much of an apology - and I particularly like the way that they continue to imply that I did something wrong and should stick to their terms &amp; conditions.</p>

<p>But, sadly, that didn't solve all the problems created by the vomit-munchers in Mountain View.</p>

<blockquote class="social-embed" id="social-embed-665080432606728192" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-665064736954916864" 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"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/664901502989942785">Replying to @edent</a></small>Well, my <a href="https://twitter.com/GooglePlus">@GooglePlus</a> account has been reinstated but my <a href="https://twitter.com/YouTube">@YouTube</a> channel is still blocked.<br>Guess I've been radicalised into <a href="https://twitter.com/hashtag/redecentralize">#redecentralize</a>!</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/665064736954916864"><span aria-label="3 likes" class="social-embed-meta">❤️ 3</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2015-11-13T07:12:44.000Z" itemprop="datePublished">07:12 - Fri 13 November 2015</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/665064736954916864">Replying to @edent</a></small>Fan-fucking-tastic! My <a href="https://twitter.com/GooglePlus">@GooglePlus</a> was suspended - now *all* my <a href="https://twitter.com/YouTube">@YouTube</a> videos have been set to private. <a href="https://twitter.com/edent/status/665080432606728192/photo/1">pic.x.com/v7tm4uc2qm</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/CTrXIPXWsAAgjjK.png" class="social-embed-media-link"><img class="social-embed-media" alt="" src="data:image/webp;base64,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"></a></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/665080432606728192"><span aria-label="1 likes" class="social-embed-meta">❤️ 1</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="2015-11-13T08:15:06.000Z" itemprop="datePublished">08:15 - Fri 13 November 2015</time></a></footer></blockquote>

<p>Several hundred YouTube videos set to private.  What a gloriously twuntish thing to do.  Of course, rolling back a change is a bit too hard for the flange-ticklers at Google. Move Fast And Break Customers' Things!</p>

<p>YouTube does offer a bulk editing tool - but I couldn't use it.  Around half my videos were already set to private or unlisted - mostly the ones I share either with clients or close friends.  So I had to painstakingly go through every single one to validate what I wanted to do with it - all the while cursing every Google employee.</p>

<p><em>click</em> <em>cockwombles</em> <em>click</em> <em>cloaca drippings</em> <em>click</em> <em>litter-bugs</em> <em>click</em> <em>melon-farmers</em> <em>click</em> <em>toad-lickers</em> <em>click</em>.</p>

<p>Finally, all was fixed.  I was out of Google purgatory.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/11/Gplay-toadlickers-fs8.png" alt="Gplay toadlickers-fs8" width="480" height="672" class="aligncenter size-full wp-image-21917">

<p>Oh shove a duck up my arse and serve me for Christmas dinner! What fresh hell is this?</p>

<p>An utterly ancient app - which I probably should have removed years ago - is all of a sudden in violation?  Of what? Literally all the app does is play that dramatic "Dah-dah-daaaaaaaah" sound.  That's it! It doesn't impersonate anyone.  I don't even think it works on modern phones.  I'd be jiggered if anyone downloaded it in the last couple of years.  What kind of nincompoop would design a system which would mark that as...</p>

<p>Oh, just forget it. I'm done.</p>

<p>I've no way of knowing what has caused these problems. It could be an innocent mistake, an internal or external party with a vendetta, something I've done... But there's no way for me to find out.  Google doesn't do customer services - that's part of its business plan. Got a problem? Feel free to kindly piss right off.</p>

<p>That's no way to live.  Constantly in fear that one day the most powerful information gatekeeper on the planet can decide you are <abbr title="as unwanted as an ethics discussion in a Google board meeting">persona non grata</abbr>.</p>

<p>It's time to start moving away from Google.  I know it won't be easy, but it's now obvious it is the right thing to do.  If I'd been away on holiday, or couldn't afford ID, or wasn't acquainted with several Google employees - this could have been an absolute disaster.</p>

<p>It's not going to plain sailing either - running services is hard. But if it goes wrong, I will only have myself to blame - not some faceless giblet-flicker a thousand miles away.</p>

<p>Google have broken my trust - and they aren't getting it back.  Wankers.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21911&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/11/the-day-google-deleted-me/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
	</channel>
</rss>
