Browse Source

More links

master
David Larlet 2 years ago
parent
commit
c97ec137bb
25 changed files with 4127 additions and 0 deletions
  1. 187
    0
      cache/2022/19bb6f887f452188b738599777d7014d/index.html
  2. 8
    0
      cache/2022/19bb6f887f452188b738599777d7014d/index.md
  3. 219
    0
      cache/2022/2b4baf23121e6a8cfb4d29008e478770/index.html
  4. 30
    0
      cache/2022/2b4baf23121e6a8cfb4d29008e478770/index.md
  5. 420
    0
      cache/2022/3b9259e5e41e5e73fc3d5574fd472674/index.html
  6. 273
    0
      cache/2022/3b9259e5e41e5e73fc3d5574fd472674/index.md
  7. 220
    0
      cache/2022/3f045054587e15191052008ca455dc3c/index.html
  8. 53
    0
      cache/2022/3f045054587e15191052008ca455dc3c/index.md
  9. 403
    0
      cache/2022/4bdd8a682b8c7d31f518b6c6730179d2/index.html
  10. 235
    0
      cache/2022/4bdd8a682b8c7d31f518b6c6730179d2/index.md
  11. 237
    0
      cache/2022/5562ca2239cf52842501c3fc675eca3c/index.html
  12. 72
    0
      cache/2022/5562ca2239cf52842501c3fc675eca3c/index.md
  13. 203
    0
      cache/2022/58f10e6e52b49d69b79d1793482f1cf0/index.html
  14. 36
    0
      cache/2022/58f10e6e52b49d69b79d1793482f1cf0/index.md
  15. 208
    0
      cache/2022/827b390ef9e20d414ef803611bc4f2bb/index.html
  16. 41
    0
      cache/2022/827b390ef9e20d414ef803611bc4f2bb/index.md
  17. 253
    0
      cache/2022/9a78ae9b6814326d9c3df1425006f8f4/index.html
  18. 86
    0
      cache/2022/9a78ae9b6814326d9c3df1425006f8f4/index.md
  19. 294
    0
      cache/2022/a6257c9517a4e07d4d4ccfa872cbf08b/index.html
  20. 127
    0
      cache/2022/a6257c9517a4e07d4d4ccfa872cbf08b/index.md
  21. 215
    0
      cache/2022/cb9be8bdfda6c6e03820a5ebae0cb470/index.html
  22. 48
    0
      cache/2022/cb9be8bdfda6c6e03820a5ebae0cb470/index.md
  23. 201
    0
      cache/2022/d8a33ccb98091090b6a13b532773137a/index.html
  24. 34
    0
      cache/2022/d8a33ccb98091090b6a13b532773137a/index.md
  25. 24
    0
      cache/2022/index.html

+ 187
- 0
cache/2022/19bb6f887f452188b738599777d7014d/index.html View File

@@ -0,0 +1,187 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Setting up a personal Fediverse ID / Mastodon instance (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://jacobian.org/til/my-mastodon-instance/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Setting up a personal Fediverse ID / Mastodon instance</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://jacobian.org/til/my-mastodon-instance/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>Elon buying Twitter kicked me towards finally setting up a <a href="https://www.lawfareblog.com/what-earth-fediverse">Fediverse</a> presence, something I’ve been meaning on doing for a while.</p>
<p>It was important for me to do this in a way that maintains control over my own identity. The easy way would have been to create an account on <a href="https://mastodon.social">mastodon.social</a>, or one of the private Mastodon instances that friends of mine host. But if I did that, it wouldn’t be fixing the main problem with Twitter: that I don’t own my own identity. In other words, it was important to me that I be <code>@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a8c2c9cbc7cae8c2c9cbc7cac1c9c686c7dacf">[email protected]</a></code>, not <code>@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0d676c6e626f4d7e626068206962606c646320686162632060646a6579206f7874236e6260">[email protected]</a></code>.</p>
<p>I <em>also</em> very much didn’t want to operate a server. I experimented with a few of them – even got about 80% of the way toward a working Django implementation – but ultimately my desire to fuck with computers on the weekend is almost nil. I wanted to pay someone else to do the hosting.</p>
<p>This turned out to be significantly easier than I had thought. I signed up for <a href="https://masto.host/">masto.host</a>, a paid Mastodon service (on the cheapest plan, $6/mo). I set up my instance as <a href="https://social.jacobian.org">social.jacobian.org</a>, which involved setting up a <code>CNAME</code> to, easy. There was some simple initial configuration of the Mastodon server – I did things like turn off public signup, tweak some of the privacy settings, and (of course) enable 2FA on my admin account. Pretty simple, took about 15 minutes from putting in my credit card to having a functioning server.</p>
<p>That page only describes <code>host-meta</code>, but elsewhere I saw references to a couple of other routes: <code>/.well-known/webfinger</code> and <code>/.well-known/nodeinfo</code>. Initially I only redirected <code>host-meta</code>, and it seemed to work fine, but eventually I added the other two routes as well. I’m not sure if this was necessary, but it seemed like a good idea.</p>
<p>I’m on Cloudflare Pages, so involved adding three lines to my redirect rules file (<code>_redirects</code>):</p>
<pre tabindex="0"><code>/.well-known/host-meta* https://social.jacobian.org/.well-known/host-meta:splat 301
/.well-known/webfinger* https://social.jacobian.org/.well-known/webfinger:splat 301
/.well-known/nodeinfo* https://social.jacobian.org/.well-known/nodeinfo:splat 301
</code></pre>
<p>Finally, masto.host needs to do some config on the backend. I sent them an email, and they’d made the changes within an hour.</p>
<p>So yeah, I’m on the Fediverse now. Follow me: <code>@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4c262d2f232e0c262d2f232e252d2262233e2b">[email protected]</a></code> / <a href="https://social.jacobian.org/@jacob">https://social.jacobian.org/@jacob</a>.</p>
<h2 id="other-implementations">Other implementations</h2>
<p><a href="https://aeracode.org/2022/11/01/fediverse-custom-domains/">Andrew did the same thing on a Django site</a>.</p>
<h2 id="next-steps-syncing-twitter-and-mastodon">Next steps: syncing Twitter and Mastodon</h2>
<p>The next step for me was setting up bidirectional sync to publish content in both places. <a href="https://jacobian.org/til/mastodon-twitter-sync-github-actions/">Here’s how I did that</a>.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 8
- 0
cache/2022/19bb6f887f452188b738599777d7014d/index.md View File

@@ -0,0 +1,8 @@
title: Setting up a personal Fediverse ID / Mastodon instance
url: https://jacobian.org/til/my-mastodon-instance/
hash_url: 19bb6f887f452188b738599777d7014d

<p>Elon buying Twitter kicked me towards finally setting up a <a href="https://www.lawfareblog.com/what-earth-fediverse">Fediverse</a> presence, something I’ve been meaning on doing for a while.</p><p>It was important for me to do this in a way that maintains control over my own identity. The easy way would have been to create an account on <a href="https://mastodon.social">mastodon.social</a>, or one of the private Mastodon instances that friends of mine host. But if I did that, it wouldn’t be fixing the main problem with Twitter: that I don’t own my own identity. In other words, it was important to me that I be <code>@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a8c2c9cbc7cae8c2c9cbc7cac1c9c686c7dacf">[email protected]</a></code>, not <code>@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0d676c6e626f4d7e626068206962606c646320686162632060646a6579206f7874236e6260">[email protected]</a></code>.</p><p>I <em>also</em> very much didn’t want to operate a server. I experimented with a few of them – even got about 80% of the way toward a working Django implementation – but ultimately my desire to fuck with computers on the weekend is almost nil. I wanted to pay someone else to do the hosting.</p><p>This turned out to be significantly easier than I had thought. I signed up for <a href="https://masto.host/">masto.host</a>, a paid Mastodon service (on the cheapest plan, $6/mo). I set up my instance as <a href="https://social.jacobian.org">social.jacobian.org</a>, which involved setting up a <code>CNAME</code> to, easy. There was some simple initial configuration of the Mastodon server – I did things like turn off public signup, tweak some of the privacy settings, and (of course) enable 2FA on my admin account. Pretty simple, took about 15 minutes from putting in my credit card to having a functioning server.</p><p>That page only describes <code>host-meta</code>, but elsewhere I saw references to a couple of other routes: <code>/.well-known/webfinger</code> and <code>/.well-known/nodeinfo</code>. Initially I only redirected <code>host-meta</code>, and it seemed to work fine, but eventually I added the other two routes as well. I’m not sure if this was necessary, but it seemed like a good idea.</p><p>I’m on Cloudflare Pages, so involved adding three lines to my redirect rules file (<code>_redirects</code>):</p><pre tabindex="0"><code>/.well-known/host-meta* https://social.jacobian.org/.well-known/host-meta:splat 301
/.well-known/webfinger* https://social.jacobian.org/.well-known/webfinger:splat 301
/.well-known/nodeinfo* https://social.jacobian.org/.well-known/nodeinfo:splat 301
</code></pre><p>Finally, masto.host needs to do some config on the backend. I sent them an email, and they’d made the changes within an hour.</p><p>So yeah, I’m on the Fediverse now. Follow me: <code>@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4c262d2f232e0c262d2f232e252d2262233e2b">[email protected]</a></code> / <a href="https://social.jacobian.org/@jacob">https://social.jacobian.org/@jacob</a>.</p><h2 id="other-implementations">Other implementations</h2><p><a href="https://aeracode.org/2022/11/01/fediverse-custom-domains/">Andrew did the same thing on a Django site</a>.</p><h2 id="next-steps-syncing-twitter-and-mastodon">Next steps: syncing Twitter and Mastodon</h2><p>The next step for me was setting up bidirectional sync to publish content in both places. <a href="https://jacobian.org/til/mastodon-twitter-sync-github-actions/">Here’s how I did that</a>.</p>

+ 219
- 0
cache/2022/2b4baf23121e6a8cfb4d29008e478770/index.html View File

@@ -0,0 +1,219 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Mastodon on your own domain without hosting a server (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://blog.maartenballiauw.be/post/2022/11/05/mastodon-own-donain-without-hosting-server.html">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Mastodon on your own domain without hosting a server</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://blog.maartenballiauw.be/post/2022/11/05/mastodon-own-donain-without-hosting-server.html" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>Like many in the past week, I have been having a serious look at <a href="https://joinmastodon.org/">Mastodon</a> as an alternative to Twitter.</p>
<p>Mastodon is a social network that is distributed across many servers that have their own smaller communities, and federate with other servers to provide a more “global” social network.</p>
<p>There are <a href="https://joinmastodon.org/servers">many servers out there</a> that you can choose from. Alternatively, you can also <a href="https://docs.joinmastodon.org/admin/prerequisites/">self-host</a> your Mastodon server, or use <a href="https://joinfediverse.wiki/How_to_host_your_own_Fediverse_instance%3F">one of many hosted instances</a>, “Mastodon as a service”.</p>
<p>In recent hours, I have seen many people wanting to host their own servers, which is great fun! Self-hosting also has the added benefit of being able to have a Mastodon account on your own domain, and you own your data.</p>
<p>Now, I don’t really care about that (<em>yet?</em>). I ran my own mail server back in the day and am very happy with someone running it for me now. The same goes with Mastodon: I trust the folks at <a href="https://mastodon.online">Mastodon.online</a>, the server I joined, to do a much better job at this than I will ever do.</p>
<p>However, there is one thing I <em>would</em> like my own server for: <strong>discoverability</strong>. Much like with e-mail, I want folks to have an easy address to find me, and one that I can keep giving out to everyone even if later I switch to a different Mastodon server. A bit like e-mail forwarding to your ISP’s e-mail service.</p>
<p>The good news is: <strong>you can use your own domain</strong> and share it with other folks. It will link to your actual account.</p>
<p>Go on, try it. Search for <code class="language-plaintext highlighter-rouge">@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="593438382b2d3c37193b38353530382c2e773b3c">[email protected]</a></code>, and you will find my <code class="language-plaintext highlighter-rouge">@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="395458584b4d5c575b58555550584c4e7954584a4d565d5657174a565a505855">[email protected]</a></code>.</p>
<h2 id="how-to-discover-mastodon-account-via-custom-domain">How to discover Mastodon account via custom domain</h2>
<p>Reading <a href="https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/">“how to implement a basic ActivityPub server”</a>, there are a couple of things that stand out:</p>
<ul><li>Mastodon (and others) use <a href="https://activitypub.rocks/">ActivityPub</a> as their protocol to communicate between “actors”.</li><li>Actors are discovered using <a href="https://webfinger.net/">WebFinger</a>, a way to attach information to an email address, or other online resource.</li></ul>
<p>Since discovery is what I was after, WebFinger seemed like the only thing I would need to implement.</p>
<p>WebFinger lives on <code class="language-plaintext highlighter-rouge">/.well-known/webfinger</code> on a server. For Mastodon, your server will be queried for accounts using an endpoint that looks like this:</p>
<p>And indeed, if I look at my Mastodon server’s <code class="language-plaintext highlighter-rouge">webfinger</code> for my account, I get a response back!</p>
<div class="language-http highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">GET https://mastodon.online/.well-known/webfinger?resource=acct:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="234e42425157464d41424f4f4a425654634e4250574c474c4d0d4c4d4f4a4d46">[email protected]</a>

{
"subject": "acct:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9bf6fafae9effef5f9faf7f7f2faeeecdbf6fae8eff4fff4f5b5f4f5f7f2f5fe">[email protected]</a>",
"aliases": [
"https://mastodon.online/@maartenballiauw",
"https://mastodon.online/users/maartenballiauw"
],
"links": [
{
"rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": "https://mastodon.online/@maartenballiauw"
},
{
"rel": "self",
"type": "application/activity+json",
"href": "https://mastodon.online/users/maartenballiauw"
},
{
"rel": "http://ostatus.org/schema/1.0/subscribe",
"template": "https://mastodon.online/authorize_interaction?uri={uri}"
}
]
}
</span></code></pre></div></div>
<p>Sweet!</p>
<p>The next thing I tried was simply copy-pasting this JSON output to my own server under <code class="language-plaintext highlighter-rouge">.well-known/webfinger</code>, and things magically started working.</p>
<p>In other words, if you want to be discovered on Mastodon using your own domain, you can do so by copying the contents of <code class="language-plaintext highlighter-rouge">https://&lt;your mastodon server&gt;/.well-known/webfinger?resource=acct:&lt;your account&gt;@&lt;your mastodon server&gt;</code> to <code class="language-plaintext highlighter-rouge">https://&lt;your domain&gt;/.well-known/webfinger</code>.</p>
<p>One caveat: this approach works much like a catch-all e-mail address. <code class="language-plaintext highlighter-rouge">@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="01606f787569686f6641786e7473656e6c60686f2f626e6c">[email protected]</a></code> will match, unless you add a bit more scripting to only show a result for resources you want to be discoverable.</p>
<p>Discoverability, at this stage, is one of the things that matter to get a proper social graph going. Over the past days, there were a couple of tools I found very useful in finding Twitter folks on Mastodon:</p>
<ul><li><a href="https://twitodon.com/">Twitodon</a> learns about which Twitter account matches a Mastodon account, from folks using this service.</li><li><a href="https://fedifinder.glitch.me/">Fedifinder</a> and <a href="https://pruvisto.org/debirdify/">Debirdify</a> scan Twitter accounts and checks if there is a Mastodon account in their profile data.</li></ul>
<p>Good luck! And give <code class="language-plaintext highlighter-rouge">@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7d101c1c0f0918133d1f1c1111141c080a531f18">[email protected]</a></code> a follow if you make the jump to Mastodon.</p>
<p><strong>Edit:</strong> Seems <a href="https://github.com/mastodon/mastodon/issues/2668">there is a GitHub issue which requests custom domains</a> as well.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 30
- 0
cache/2022/2b4baf23121e6a8cfb4d29008e478770/index.md View File

@@ -0,0 +1,30 @@
title: Mastodon on your own domain without hosting a server
url: https://blog.maartenballiauw.be/post/2022/11/05/mastodon-own-donain-without-hosting-server.html
hash_url: 2b4baf23121e6a8cfb4d29008e478770

<p>Like many in the past week, I have been having a serious look at <a href="https://joinmastodon.org/">Mastodon</a> as an alternative to Twitter.</p><p>Mastodon is a social network that is distributed across many servers that have their own smaller communities, and federate with other servers to provide a more “global” social network.</p><p>There are <a href="https://joinmastodon.org/servers">many servers out there</a> that you can choose from. Alternatively, you can also <a href="https://docs.joinmastodon.org/admin/prerequisites/">self-host</a> your Mastodon server, or use <a href="https://joinfediverse.wiki/How_to_host_your_own_Fediverse_instance%3F">one of many hosted instances</a>, “Mastodon as a service”.</p><p>In recent hours, I have seen many people wanting to host their own servers, which is great fun! Self-hosting also has the added benefit of being able to have a Mastodon account on your own domain, and you own your data.</p><p>Now, I don’t really care about that (<em>yet?</em>). I ran my own mail server back in the day and am very happy with someone running it for me now. The same goes with Mastodon: I trust the folks at <a href="https://mastodon.online">Mastodon.online</a>, the server I joined, to do a much better job at this than I will ever do.</p><p>However, there is one thing I <em>would</em> like my own server for: <strong>discoverability</strong>. Much like with e-mail, I want folks to have an easy address to find me, and one that I can keep giving out to everyone even if later I switch to a different Mastodon server. A bit like e-mail forwarding to your ISP’s e-mail service.</p><p>The good news is: <strong>you can use your own domain</strong> and share it with other folks. It will link to your actual account.</p><p>Go on, try it. Search for <code class="language-plaintext highlighter-rouge">@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="593438382b2d3c37193b38353530382c2e773b3c">[email protected]</a></code>, and you will find my <code class="language-plaintext highlighter-rouge">@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="395458584b4d5c575b58555550584c4e7954584a4d565d5657174a565a505855">[email protected]</a></code>.</p><h2 id="how-to-discover-mastodon-account-via-custom-domain">How to discover Mastodon account via custom domain</h2><p>Reading <a href="https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/">“how to implement a basic ActivityPub server”</a>, there are a couple of things that stand out:</p><ul><li>Mastodon (and others) use <a href="https://activitypub.rocks/">ActivityPub</a> as their protocol to communicate between “actors”.</li><li>Actors are discovered using <a href="https://webfinger.net/">WebFinger</a>, a way to attach information to an email address, or other online resource.</li></ul><p>Since discovery is what I was after, WebFinger seemed like the only thing I would need to implement.</p><p>WebFinger lives on <code class="language-plaintext highlighter-rouge">/.well-known/webfinger</code> on a server. For Mastodon, your server will be queried for accounts using an endpoint that looks like this:</p><p>And indeed, if I look at my Mastodon server’s <code class="language-plaintext highlighter-rouge">webfinger</code> for my account, I get a response back!</p><div class="language-http highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">GET https://mastodon.online/.well-known/webfinger?resource=acct:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="234e42425157464d41424f4f4a425654634e4250574c474c4d0d4c4d4f4a4d46">[email protected]</a>

{
"subject": "acct:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9bf6fafae9effef5f9faf7f7f2faeeecdbf6fae8eff4fff4f5b5f4f5f7f2f5fe">[email protected]</a>",
"aliases": [
"https://mastodon.online/@maartenballiauw",
"https://mastodon.online/users/maartenballiauw"
],
"links": [
{
"rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": "https://mastodon.online/@maartenballiauw"
},
{
"rel": "self",
"type": "application/activity+json",
"href": "https://mastodon.online/users/maartenballiauw"
},
{
"rel": "http://ostatus.org/schema/1.0/subscribe",
"template": "https://mastodon.online/authorize_interaction?uri={uri}"
}
]
}
</span></code></pre></div></div><p>Sweet!</p><p>The next thing I tried was simply copy-pasting this JSON output to my own server under <code class="language-plaintext highlighter-rouge">.well-known/webfinger</code>, and things magically started working.</p><p>In other words, if you want to be discovered on Mastodon using your own domain, you can do so by copying the contents of <code class="language-plaintext highlighter-rouge">https://&lt;your mastodon server&gt;/.well-known/webfinger?resource=acct:&lt;your account&gt;@&lt;your mastodon server&gt;</code> to <code class="language-plaintext highlighter-rouge">https://&lt;your domain&gt;/.well-known/webfinger</code>.</p><p>One caveat: this approach works much like a catch-all e-mail address. <code class="language-plaintext highlighter-rouge">@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="01606f787569686f6641786e7473656e6c60686f2f626e6c">[email protected]</a></code> will match, unless you add a bit more scripting to only show a result for resources you want to be discoverable.</p><p>Discoverability, at this stage, is one of the things that matter to get a proper social graph going. Over the past days, there were a couple of tools I found very useful in finding Twitter folks on Mastodon:</p><ul><li><a href="https://twitodon.com/">Twitodon</a> learns about which Twitter account matches a Mastodon account, from folks using this service.</li><li><a href="https://fedifinder.glitch.me/">Fedifinder</a> and <a href="https://pruvisto.org/debirdify/">Debirdify</a> scan Twitter accounts and checks if there is a Mastodon account in their profile data.</li></ul><p>Good luck! And give <code class="language-plaintext highlighter-rouge">@<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7d101c1c0f0918133d1f1c1111141c080a531f18">[email protected]</a></code> a follow if you make the jump to Mastodon.</p><p><strong>Edit:</strong> Seems <a href="https://github.com/mastodon/mastodon/issues/2668">there is a GitHub issue which requests custom domains</a> as well.</p>

+ 420
- 0
cache/2022/3b9259e5e41e5e73fc3d5574fd472674/index.html View File

@@ -0,0 +1,420 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Nikodemus' Guide to Mastodon (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://docs.google.com/document/d/1D9gfeKg_-hlsU66R-dLEvUeyMsqEfyIx2pnfUeX0t_E/edit">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Nikodemus' Guide to Mastodon</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://docs.google.com/document/d/1D9gfeKg_-hlsU66R-dLEvUeyMsqEfyIx2pnfUeX0t_E/edit" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>Nikodemus’ Guide to Mastodon
by Nikodemus Siivola <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#64;&#110;&#105;&#107;&#111;&#100;&#101;&#109;&#117;&#115;&#64;&#107;&#97;&#109;&#117;&#46;&#115;&#111;&#99;&#105;&#97;&#108;">&#64;&#110;&#105;&#107;&#111;&#100;&#101;&#109;&#117;&#115;&#64;&#107;&#97;&#109;&#117;&#46;&#115;&#111;&#99;&#105;&#97;&#108;</a>, updated 2022-11-08. Read time 20-30 min</p>
<p>Mastodon is a microblogging social network somewhat similar to Twitter, or your Facebook timeline. In some ways it is akin to Twitter 10 years ago. It isn’t a Twitter clone, and does not aspire to be one.</p>
<p>If you read nothing else, please read the “Culture” section. Mastodon isn’t Twitter in the cultural sense either. Ignoring this is liable to make people mute or block you.</p>
<p>If you’re more of a Facebook person than a Twitter person you be sure to check up “I Was Never on Twitter”.</p>
<p>Right at the end there’s a “Getting an Account” section for those who don’t yet have a Mastodon account, including how to tell if the server you’re signing up on is safe. That section has a few hints about setting up a server as well.</p>
<p>Don’t sweat too much. Literally millions of people have managed this. You can just go and explore, and come back here when you have a question about how something exactly works.
About This Guide
This is guide for kamu.social invitees but is making wider rounds now. The direct links to various configuration pages are kamu.social specific, but core principles apply widely.
Surface Differences to Twitter and Facebook
No ads. A brand can make an account, but their posts follow the same visibility rules as everyone else’s.
The timeline is a timeline, not an algorithmic engagement maximizer: posts appear in chronological order.
Timeline doesn’t scroll while you’re reading it if you don’t want it to. (See “Tips and Tricks” below.)
Posts have a 500 character limit, which seems to allow more thoughtful communication than Twitter.
There is no Quote Tweet -feature by design, as it would be weaponized just like on Twitter.
There is no full text search by desing, as it too would be weaponized. (Hashtags are searchable.)
There is a proper mechanism for content warnings, and it is widely used to provide headline folds as well.
Bots are required to be marked as bots, and this is enforced.
Hate and bullies are effectively moderated. (See “Safety features”, below.)
Like is called Favorite, visible to OP, it does NOT show the post to your followers..
Retweet/Share is called Boost, visible to OP, it is how you show the other’s posts to your followers.
Replies are visible to your followers: instead of quote-tweeting to steal the convo, reply like a human.
There is also a bookmark button. Your bookmarks are just for you.
Reply, Favorite and Boost –counts are not visible on timelines: you’re less influenced by “100K likes”.
There is no illusion of privacy. Your FB and Twitter direct messages can be read by admins if they want to, and so can your Mastodon direct messages. If you need private messaging use end-to-end encrypted services like Signal or WhatsApp. Consider everything you write on Mastodon to like text on a postcard, or talking at a party.
YOU CAN MIGRATE. You cannot migrate from Twitter to Facebook and keep your followers, or even from one Twitter account to another. You can migrate from one Mastodon account to another. Your old content will stay at the old place so links aren’t broken, your followers are moved to follow your new account, and a forwarding address is left for anyone looking for you later—which will also prevent anyone from stealing your old address.
There are no “verified accounts”, but you can verify yourself:
If you’re part of an organization that wants to have a Mastodon presence, one option is for your org to run a server: eg. social.your-organization.net. This verifies that anyone with an account there has something to do with your-organization.net. (You can do this as an individual as well, but running an instance with just yourself on it means you lose out on the curation federated timelines offer.)
If you have any sort of webpage anywhere, you can put a bit of HTML code there saying “yes, I’m that Mastodon account”. Then when you link to that page on your profile, it will show it as verified.
Most people don’t care, and don’t need to—but if you’re a “public actor” then you probably should.
Deeper Differences to Twitter and Facebook
Mastodon is federated. This is the thing you need to understand.
Instead of there being one twitter.com or facebook.com, there are many, many servers - kamu.social is one of them. Servers are also called instances.
Each server has its own admins and codes of conduct (also called server rules.)
People can talk to each other across servers: if you’re on kamu.social, you can still follow people on mastodon.art, and they can follow you, and will see your replies even if they don’t follow you.
You can have identities on multiple servers, but don’t need to: they are mainly relevant when you want to avoid crossing the streams – eg. keeping your professional self distinct from your underground party animal identity.
The biggest practical minus of the federation is that you need to pick a server. Which is why I picked for you and made kamu.social. If you later discover you want to hang somewhere else, that’s fine, see “Migrating to a Different Server”.
The biggest practical plus of the federation is that it provides curation. More about this below, in “You have three feeds”.
The politically important part of federation is that no-one can buy Mastodon, and if nazis take over a part of the network that part can be cut off. (This has already happened, this is not theory but practise.) It is by the people, for the people. You don’t need to care, though, but we as a society should.
You have three feeds.
Your home timeline is all the people you follow, no matter which server they are on. This includes their own public, unlisted, and followers-only posts, their replies, and their boosts—everything except direct messages to other people. (Your home timeline also shows all your own posts, including your own direct messages.)
Your local timeline is all the public posts from people on the same server. This does NOT include their replies to other people or their boosts!
Your federated timeline is all the public posts from people on the same server and all the people THEY follow. This does NOT include their replies to other people, or their boosts.
Summary: Home timeline is “your stuff”, local timeline is original content by people on your server, federated timeline is original content visible to your server.
Since code of conduct is per server, it doesn’t really apply to the federated timeline – but see “Safety features” below.
The local and federated timelines are why it matters which server you are on. Pick one with cool people with cool interests and your local and federated timelines will be awesome. Pick one with randos and they will be just that. Pick one with 100K people and… yeah. Still, you can always change servers later without losing followers, so starting on a big server is perfectly fine—just understand that you won’t be experiencing Mastodon at its best yet.
Safety features
Safety and moderation features have two granularities: account and server.
You can block an individual, or the entire server they are on. While the fash can set up their own servers, rest of the world can block those.
Server admins can block entire servers as well. See Decentralized Social Networks vs. The Trolls for what happened when Gab tried to take over. The “original” Mastodon server mastodon.social blocks around 140 other servers mainly due to hate speech and harassment. Some servers block even more, some block less. Some block pre-emptively, some block when they discover an issue.
When you block someone, you can (and probably should) report them to admins of your own server as well. Your admins will see that you made the report, but the admins of the other server will only see the server the report came from.
Even if you block someone, they can still see your public profile. If this a concern for you, lock down you account to minimize your public visibility. (See “Locking down your account” under “Moving house”.)
You have four levels of privacy for your posts.
Public. These appear on local and federated timelines, on your profile, and on your follower’s home timelines. Identifiable by the globe icon.
Unlisted. These appear on your profile and on your follower’s home timelines. Identifiable by the OPEN lock icon:</p>
<p>Followers-only. These appear ONLY on your follower’s home timelines. Your logged in followers can also see them on your profile. Identifiable by the CLOSED lock icon: <br />
Direct. These appear on the home timelines of their recipients. All people @mentioned in the post are considered recipients. You can add more people to the convo by @ing them. Identifiable by the @-icon:</p>
<p>REMEMBER: Anything on Mastodon is more like a conversation at a party than a sealed letter. If nothing else, admins will have access to anything you post, including direct messages. Not convenient access, but access none the less.
Moving House
Didn’t create an account yet? Do it now.
Locking down your account
READ this even if you’re privileged enough to not suffer from stalkers or dogpiles, you should know these options exist. Also, if you do get trouble and are on kamu.social, please let me know!
If you’re not on kamu.social, the details might differ but the content is the same. Eg. mastodon.social is running a newer software version than kamu.
Go to Edit profile - kamu.social
Select “Require follow requests”. This means you have control over who can follow you, and is harmless as long as you don’t mind approving people.
Possibly also select “Hide your social graph” on the same page, which hides who you follow and who is following you. This doesn’t affect you, but makes it harder for other people to discover the cool people you follow and the cool people who follow you. Still, depending on your situation it might be worth it.
Hit “Save Changes”, verify that the correct boxes are checked.
Go to Preferences - kamu.social
Select “Opt-out of search engine indexing”. This means neither Google nor special purpose Mastodon search engines like FedSearch will find your profile page or public posts. (If you want to be found, obviously don’t do this.)
Under “Posting Defaults”, select whatever seems most appropriate.
Public posts are… public. They’re the “default mode” for most people, but they don’t need to be the default for you. They appear on both the local and federated timelines, and may be indexed by search engines.
Unlisted posts won’t appear on local or federated feeds by default, but they do appear on your public profile, can be linked to by anyone, and if someone boosts them they will appear for their followers’ timelines. They can also be indexed by search engines.
Followers-only is the safety-conscious option: they are visible to your followers only, cannot be boosted, and viewing links to them require being logged in. They cannot be indexed by search engines (unless one of your followers is secretly a search engine.)
Direct posts are visible only to those @mentioned on them, cannot be boosted, and links to them require them to be logged in. If you write a lot of direct messages this might be the right default! Note that ALL people @mentioned have access to the direct messages they’s mentioned in.
Hit “Save changes”.
Go to Notifications - kamu.social
Go to “Other notifications settings” at the bottom, and select the ones you need. This allows you to:
Block notifications from non-followers
Block notifications from people you don't follow
Block direct messages from people you don't follow
Hit “Save changes”.
Go to Automated post deletion - kamu.social
Select whichever period and settings seem most appropriate for you. It might be to never delete anything automatically!
Of course if someone archives an old post of yours, they have a copy and that’s out of your hands, but automatic deletion does mean old posts are much less likely to come to haunt you later.
Consider setting up two-factor authentication at Two-factor Auth - kamu.social.
SET UP YOUR PROFILE AND PICTURE. Lots of people are approving followers manually especially in the face of Twitter migration, and seeing a follow request with an empty profile is … yeah, nope. You don’t need to put up a mugshot, you don’t need to write a long bio, but some picture and a few words about what you’re about in your bio go a long way.
Your display name IS searchable! IF you want people to find you by your real name, put it there—and if doxxing or stalkers are a concern do not. (It is not initially globally searchable, but over time more servers will learn about you and it will become more so.)
Note that currently your bio is NOT searchable—not even by hashtags, hence next step.
WRITE A PUBLIC POST WITH RELEVANT HASHTAGS, PIN IT, AND KEEP IT UP TO DATE. Since bios are not searchable, but keywords in posts are, write at a short “tags” post with your #interests, so that people can discover you by it.
Go to Preferences - kamu.social
Select the language you usually post in, so your browser’s or operating system’s language doesn’t affect it. (If you sometimes post in a different language, try to remember to tag it as such in the post-box—there’s a dropdown below the text entry.)
Select the languages you read fluently, so only posts tagged with those languages appear in your local and federated timelines. (At the moment all posts from people you follow currently show up in your home timeline, no matter what language they’re in.)
Finding your Twitter contacts: use https://fedifinder.glitch.me/
Download the list as CSV.
Go to Import - kamu.social, select "Following List", “Merge”, choose the file you downloaded in previous step, and hit “Upload”.
The import will take a bit, but you don’t need to do anything else.
For those Twitter contacts not on Mastodon that you want to keep seeing, use https://beta.birdsite.live/
Enter the Twitter username in the box.
Hit “Show”.
Copy the Mastodon user id that appears, in the form of @username@beta.birdsite.live and paste it to the search box (under # Explore on mobile!)
Follow the Mastodon account search finds. They won’t see your replies, or favorites, though!
NOTE: If you’re on one of the big servers like mastodon.social, this may not work for you, as these bots are blocked there. (The reasoning is not entirely clear to me, and they are not blocked on kamu.social. The bot does have an unfortunate tendency to dump all posts of a person in a clump on your timeline, I may look into setting up a rate-limited version for kamu.social. Still, these post are followers-only, so they won’t be visible on the federated timeline, so you don’t need to worry about spamming that.)
If you want to crosspost to Twitter automatically, use eg. https://crossposter.masto.donte.com.br/ (I don’t have personal experience with this.)
Read the “Culture” section below.
Culture
On Mastodon content warnings are much more a thing than on Twitter. I’m still getting used to them myself, but hey, yeah, let’s use them.
Write a headline-like content warnings: “News: violence against minorities in Texas” without getting into gory details. You can use them as headlines even if there is nothing to warn about! Lots of people do this, no-one will bat an eye. This allows people to scan timelines looking for the things that interest them.
Politics deserves a CW most of the time, particularly US politics, particularly “look at this awful thing right wingers are doing”. Adding “US midterms” or similar CW is a also favor to the rest of the world who can only watch in horror without being able to do anything. Even for US citizens being able to engage on your own terms is important in maintaining people’s capacity to engage thoughtfully.
This doesn’t mean all political topics need content warning on them! You have a head, use it. You will make errors in both directions, don’t sweat it too much. Just give it a moment’s consideration.
Lived experience generally doesn’t need a CW. If you experience racism, sexism, transphobia, ableism, or other forms of hate you absolutely can post about it without a CW. If you go to a political rally and and want post about it… CW that.
If you don’t need to see content warnings personally, go to Preferences → Appearance, select “Always expand posts marked with content warnings” and hit “Save Changes”.
When people say “next time please CW this”, don’t take it personally. CW warnings aren’t about taboos or not allowing discussion, reminder to use them isn’t an attack or gatekeeping.
If you don’t use CWs you will be boosted less. Seriously.
When thinking of boosting something that could have used a CW, but doesn’t have one, instead reply to it, with something like ”☝️@GrimDark’s excellent analysis of the election results”.
Use alt-text in images, people: click the “Edit” button on the image. There you can also change the centerpoint used for autocropping. Subscribe to https://mastodon.social/@alt_text for reminders. If you forget alt-text, just reply with “Forgotten alt-text: …” to your post. Eventually you will remember.
Don’t censor or obfuscate words: any filters are by users, so you’re just circumventing measures people have set up to curate their own feeds. So no f*ck or P O L I C E or whatever.
Use hashtags: they’re searchable, normal text is not. Don’t try to be an influencer dropping a dozen or more hashtags, though. That’s just silly. 1-3 is plenty. There is no algorithm to appease. You’re talking to actual people.
Boost the things you find cool and wish more people would see. Don’t be shy.
Fave the things you like: faving something is warm fuzzies for the original poster, which is important. Since your faves won’t leak to your followers, you don’t need to worry about liking things that they might not be interested in. Like with boosts, you can see who has faved a post by clicking through.
Reply to people: don’t hang on to your comments like their precious gold!
If you post in multiple languages, in addition to setting up your default language (see “Moving House” above), PLEASE do try to remember to tag the language you write in when you change it up.
If you would have retweeted / shared something with your own commentary, instead:
If your comment is constructive or funny, reply to the original. Due to the way the timelines work your followers will see your reply reliably, and can check the context by clicking on it. I think point up and keeping mention of the original poster is a nice thing to do if you want to call people’s attention to the OP, like so:</p>
<p>If your comment is too snarky for a reply, either let it be, or do a manual “copy link to original, post that with comment”, or “screenshot original, post that with comment”. Seriously consider the let it be -option: snark is fun, but it doesn’t really make the world a better place.
If you want your share + commentary to show up on the local and federated feeds, then you need DO need to make a new post. Click on the [...] button under the original to get the link.</p>
<p>Follow LOTS of people. When you discover they’re not your jam, just unfollow them. Seriously. Follow indiscriminately to start with. This is not like Facebook friending. This is like listening to someone at a party to discover if they’re fun or not. Curate your own feed: you’re better at it then any algorithm. Seriously.
On the local and federated timelines, if you find someone is too noisy, just mute them. If someone is feeling ranty, just mute them for a day or few to start. You can always clear your mutes periodically if you have bad FOMO.
Suggested Follows
If you make a list of suggested follows somewhere (1) either don’t include personal accounts (2) or get their permission first!</p>
<p>https://mastodon.social/@Mastodon - the official account of the Mastodon project.
https://mstdn.social/@feditips - tips to Mastodon and Fediverse. You can also read the website, but they don’t flood so occasional tips in the feed are nice.
https://mastodon.social/@alt_text - bot that will nag at you when you forget the alt-text of an image. Accessibility is important.
https://mastodon.social/@MicroSFF - daily micro fiction, SFF of course.
Tips and Tricks
On mobile search and federated feeds may be hidden under # Explore!
You can enter emojis by typing their name between colons, like so: :joy: → 😂
In my opinion the user experience on mobile is better with browser than the official app. I haven’t tested a lot of apps, but I hear good things about Tusky on Android and both Tusk! and Metatext on iOS. See: Eight Mastodon apps for iPhone.
You can pin multiple posts on your profile: eg. introduction, your tags, your best puns, and the important political message you’re all about.
This widget on top of your timelines gives you access to their filtering options:</p>
<p>For home timeline you can hide replies and boosts. (I recommend you don’t. If you do that you will miss out—but if there’s a whole boost storm or a dozen conversations you don’t care about going on you can turn them off for a while, etc.)
For local you can hide posts that don’t include images or other media, reproducing an authentic Facebook experience. Do what seems nicest to you.
For federated you can hide local posts, and posts that don’t include media. If you check all timelines separately I think hiding the locals makes sense.
For notifications you can hide eg. faves and boosts. You can also turn on “Quick filter bar” for all categories, which will give you quick access to different notification categories:</p>
<p>There’s a more complex filtering system accessible through preferences. This guide is too long already, though, so read up on Filters - Mastodon documentation. This will allow you to filter based on words, etc.
You can browse the local timelines of most servers, search on them, and see who are there, and follow them. Try eg:
“Big” servers:
https://mastodon.social/explore
https://mastodon.online/explore
https://mstdn.social/explore
Art:
https://mastodon.art/explore
https://artisan.chat/public
Finland: https://mastodontti.fi/public
Bots: https://botsin.space/explore
Eclectic:
https://merveilles.town/public
https://pony.social/public
Photography: https://photog.social/public
Programming, Technology, Infosec, etc:
https://freeradical.zone/public
https://infosec.exchange/public
https://types.pl/explore
RPGs: https://dice.camp/public
Science: https://scicomm.xyz/public
Scifi and Fantasy: https://wandering.shop/public
This list will be kept short and reflecting the tastes of people likely to land on kamu.social, but if you have a suggestion please do let me know!
For other servers go first to the front page of the server, and look for “explore”, “local feed”, or similar from there. Different servers might be running different software and be configured differently, so specific URLs may differ - and some hide their local feeds and users.
When you notice interesting people sharing the same server, go check out that server, maybe there’s more cool people there!
Disable autocropping of images
Go to Appearance - kamu.social, unselect “Crop images in non-expanded posts to 16x9”, and save changes.
Turn on slow mode to prevent timeline from auto-refreshing
Go to Appearance - kamu.social, select “Slow mode”, and hit “Save Changes”.
Now when you have new posts to see, you will see “5 new items” at the top. (Same with notifications: the bell will show a number, and the top of your notifications timeline will show “5 new items”.) At this point you have two options:
Click on the “5 new items”. The new items will appear on top, and your screen will not scroll. You can scroll UPWARDS to see the new stuff, in the order from oldest to newest.
Refresh, and the new items will appear, and your screen will scroll to the top. You can now scroll DOWNWARDS to see the new stuff, in order from newest to oldest, until at some point you will start seeing the stuff you’ve already seen.
…and maybe consider NOT hitting the “5 new items” at all, but instead close Mastodon and do something else. We can keep in touch without doomscrolling.
Search box
You can enter the name of a person. If your server knows about them, it’ll find them. If your server doesn’t know about them (no-one on your server follows them, their posts haven’t been boosted by people here, etc), it won’t.
You can enter the name of a server. You will get a list of all people on there that your server knows about.
You can enter a hashtag, and find all posts with that—that your server knows about.
You may have noticed a theme above! If you’ve just started archery and want to find archers, searching for #archery on me.and.my.two.friends.social might not show much: search on one of the big servers listed above as well!
You can enter the @username@server -identifier of anyone, and the search box will find them if they exist. I’ve seen searches occasionally fail due to either the server you’re searching on or the server the other person is on being overloaded, though. You can also use the URL of their profile.
You cannot do global text searches. Some servers provide full text search for posts archived on the server, but even that is optional - and there is and never will be a global full text search. This is why hashtags are so important if you want your posts to be discoverable after the fact.
Click through
Every post has a small arrow below it, on the left, with a 0, 1, or 1+ next to it:</p>
<p>The indicates the number of replies to that post: zero, one, or more than one. Click on the post to see the conversation, click on the arrow to reply yourself.
Since there are no quote tweets, you see more people doing direct replies. This also means you see more things from the middle of a conversation. The double-arrow symbol:</p>
<p>means the post is a reply. Click on the post, and the conversation it is part of appears above - even though there are no replies to THIS post, there is a whole conversation above it that you can read by clicking through.
If there are other replies or if there is a pre-existing discussion above, it’s a good idea to click through. Not only for context, but maybe someone has already made your point and you can boost them instead, or maybe there’s a better place in the discussion to weigh in.
You can also see who has boosted or faved a post by clicking through, and then clicking on the small boost or fave icon at the bottom. This is one way to discover cool people.
Make notes on profiles
If you go to someone’s profile, you will see a NOTE section. This is for you! You can write for example “Met at Chaos Camp 2021” or “Rants about US politics” there, and no-one else will see it. This is so that you can remind yourself of how you know someone, or why you unfollowed them, or maybe what their real name is. They won’t get a notification, and they won’t see it. You server admin, as always, has access if they really want, though.
I Was Never on Twitter
Mastodon is NOT a Twitter clone, but shares the same basic threading model of discussions with Twitter. Here’s how it works on Mastodon specifically.</p>
<p>Someone makes a post / tweet / toot.
Other people see it, and reply to it.
Other people see those replies, and reply to them. Repeat until discussion dries out.
Unlike on Facebook, there is no limit to the depth of subthreads a discussion can have. There is also no “most popular replies”, etc. This is by design.
When you click on a post, you are taken the the conversation view for that post, showing the discussion directly preceding it if you scroll up, and the direct replies to it if you scroll down.
When you reply to other people publicly, your followers see your reply, it appears on your profile under “Posts and replies”, and it appears to the people @mentioned in your reply, but it does NOT appear on the local and federated timelines you are on.
If you make a followers-only reply, it will only appear to your followers and those @mentioned.
If you make a direct reply, it will only appear to those @mentioned.
Unlisted replies are useful when you’re making a thread: your replies to your own posts DO appear on the local and federated timelines. By making the first post of a thread public and the rest unlisted you can avoid spamming the timelines.
Make sure to read the Culture section above!
Migrating to a Different Server
This actually works exactly the same if you’re just migrating to a different account on the same server!</p>
<p>Create a new account where you want to move.
Download your old follows, mutes, blocks, etc:
On your OLD account, go to Preferences → Import and Export → Data Export
Download the all CSV files (Comma Separated Values, you can open these in a spreadsheet).
Click “Request your archive”, wait until it is ready an download it. It will contain all your posts and uploads.
Add you old follows, mutes, blocks, etc to your new account.
On your NEW account, go to Preferences → Import and Export → Data Import
Import follows:
Make sure “Following List” is selected in the dropdown.
Make sure “Merge” is selected below.
Choose the following_accounts.csv file you earlier exported.
Hit upload.
Repeat the above for Blocking List, Muting List, Domain Blocking List, and Bookmarks.
Your account migration is new complete from the POV of the new account. Nothing irreversible has been done.
Migrate your followers. This step will make you old account INACTIVE and move all your followers to follow your new account. The process is not instantaneous, and might take a while, so don’t panic if they’re not there immediately! You can later re-activate your old account, but the followers will be gone.
The following steps need to be done in this order! Nothing bad will happen the other way around, it just won’t do anything.
On your NEW account, go to Preferences → Account → Moving from a different account, and create an alias for your OLD account. This is the “I’m migration from there to here”-signal.
On your OLD account, go to Preferences → Account → Moving to a different account. Enter your NEW account and the password of the OLD account, and hit “Move Followers”. This is the “I’m allowing migration from here to there”-signal.
You’re done. If you now log out and check your old account’s public profile you should see it pointing to the new account, but all your old posts are still accessible in their old addresses. This is good internetting: don’t break old links.
If you get errors, check that you’ve done the steps in right order, and note the “mixed” account and password when starting migration!
IF you want to also migrate your old posts, my suggestion is that you boost selected old posts from your new account. The alternative would be to dig in the archive you downloaded and re-post the things you want, or to copy them manually.
If there’s lots of good stuff on your old account, maybe link to it in your pinned #introduction. You DO have an introduction, right?
Getting an Account
If you know me (Nikodemus) and I know you, then you’re pretty much invited to kamu.social. If not, then this section is for you:</p>
<p>Signup using most apps is buggy, I hear. Sign up from a browser. Use browser to start, pick an app later.
If you have friends who all hang on a server and tell you to go there, go there.
Otherwise make an account on one of the “big” general purpose servers, it doesn’t matter which. If you don’t have friends pulling you to a nice place, it’s better to pick a big server because that way it will be easier for you to find interesting people to follow. Later, when you notice all the interesting people hang on coolthing.town or something, migrate there. No biggie.
Servers managed by “Stux”, who seems to be doing a very good job: mstdn.social, mastodon.coffee, masto.ai (The two last ones are still reasonably small, but based on the track record of mstdn.social I feel confident recommending them.)
I used to recommend making an account on mastodon.online, or mastodon.social. but the moderation quality there take a drastic dip, and they’re not blocking some instances that should IMO be blocked.
MAYBE if you have a single big focus in your life like art, a specific identity, hacktivism, microbrews, or whatever, AND you can find a server dedicated to that, then you can go there without making an account on a big server first.
Check the public feeds of that server and see what they’re like. If you like them, great!
Make sure the server you sign up has a reasonable code of conduct, and a blocklist. Check the “About” page of the server. See eg. About - Mastodon for mastodon.social. If the server you’re looking at doesn’t suspend sites for hate speech and harassment, that’s a huge 🚩.
Really, all the servers listed in Tips and Tricks section should be fine.
The reason it is easier to get started on a big server is because the big servers “know” more people. So searching for a hashtag or a name directly on that server is more likely to find the thing you’re looking for. You can search on many servers you don’t have an account on, esp. the big ones, but that’s more hassle and something you need to remember to do.
IF YOU WANT TO SET UP A SERVER and let other people in, you need to be ready to make sure they’re safe.
Make an account elsewhere first. Spend at least a few days on the fediverse.
Do your homework: you need to read more than this guide.
Set up server rules, aka code of conduct. Without a public set of server rules on the “About” page, other servers are much more likely to block you at the first sign of trouble instead of reaching out.
Set up an initial list of moderated servers. My suggestion is to copy the list from eg. mastodon.art. Some of the addresses will be obfuscated (due to eg. hosting illegal content), so those you gotta skip, but espcially make sure to get the hate speech and harassment ones.
If your people are out of line, it’s not just them that may be blocked, but your entire server. You’re responsible moderating your crowd when the need arises.
Follow the #fediblock topic for reports of bad actor servers.</p>
<p>Happy Tooting!</p>
<p>— Nikodemus</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 273
- 0
cache/2022/3b9259e5e41e5e73fc3d5574fd472674/index.md View File

@@ -0,0 +1,273 @@
title: Nikodemus' Guide to Mastodon
url: https://docs.google.com/document/d/1D9gfeKg_-hlsU66R-dLEvUeyMsqEfyIx2pnfUeX0t_E/edit
hash_url: 3b9259e5e41e5e73fc3d5574fd472674

Nikodemus’ Guide to Mastodon
by Nikodemus Siivola <@nikodemus@kamu.social>, updated 2022-11-08. Read time 20-30 min
Mastodon is a microblogging social network somewhat similar to Twitter, or your Facebook timeline. In some ways it is akin to Twitter 10 years ago. It isn’t a Twitter clone, and does not aspire to be one.
If you read nothing else, please read the “Culture” section. Mastodon isn’t Twitter in the cultural sense either. Ignoring this is liable to make people mute or block you.
If you’re more of a Facebook person than a Twitter person you be sure to check up “I Was Never on Twitter”.
Right at the end there’s a “Getting an Account” section for those who don’t yet have a Mastodon account, including how to tell if the server you’re signing up on is safe. That section has a few hints about setting up a server as well.
Don’t sweat too much. Literally millions of people have managed this. You can just go and explore, and come back here when you have a question about how something exactly works.
About This Guide
This is guide for kamu.social invitees but is making wider rounds now. The direct links to various configuration pages are kamu.social specific, but core principles apply widely.
Surface Differences to Twitter and Facebook
No ads. A brand can make an account, but their posts follow the same visibility rules as everyone else’s.
The timeline is a timeline, not an algorithmic engagement maximizer: posts appear in chronological order.
Timeline doesn’t scroll while you’re reading it if you don’t want it to. (See “Tips and Tricks” below.)
Posts have a 500 character limit, which seems to allow more thoughtful communication than Twitter.
There is no Quote Tweet -feature by design, as it would be weaponized just like on Twitter.
There is no full text search by desing, as it too would be weaponized. (Hashtags are searchable.)
There is a proper mechanism for content warnings, and it is widely used to provide headline folds as well.
Bots are required to be marked as bots, and this is enforced.
Hate and bullies are effectively moderated. (See “Safety features”, below.)
Like is called Favorite, visible to OP, it does NOT show the post to your followers..
Retweet/Share is called Boost, visible to OP, it is how you show the other’s posts to your followers.
Replies are visible to your followers: instead of quote-tweeting to steal the convo, reply like a human.
There is also a bookmark button. Your bookmarks are just for you.
Reply, Favorite and Boost –counts are not visible on timelines: you’re less influenced by “100K likes”.
There is no illusion of privacy. Your FB and Twitter direct messages can be read by admins if they want to, and so can your Mastodon direct messages. If you need private messaging use end-to-end encrypted services like Signal or WhatsApp. Consider everything you write on Mastodon to like text on a postcard, or talking at a party.
YOU CAN MIGRATE. You cannot migrate from Twitter to Facebook and keep your followers, or even from one Twitter account to another. You can migrate from one Mastodon account to another. Your old content will stay at the old place so links aren’t broken, your followers are moved to follow your new account, and a forwarding address is left for anyone looking for you later—which will also prevent anyone from stealing your old address.
There are no “verified accounts”, but you can verify yourself:
If you’re part of an organization that wants to have a Mastodon presence, one option is for your org to run a server: eg. social.your-organization.net. This verifies that anyone with an account there has something to do with your-organization.net. (You can do this as an individual as well, but running an instance with just yourself on it means you lose out on the curation federated timelines offer.)
If you have any sort of webpage anywhere, you can put a bit of HTML code there saying “yes, I’m that Mastodon account”. Then when you link to that page on your profile, it will show it as verified.
Most people don’t care, and don’t need to—but if you’re a “public actor” then you probably should.
Deeper Differences to Twitter and Facebook
Mastodon is federated. This is the thing you need to understand.
Instead of there being one twitter.com or facebook.com, there are many, many servers - kamu.social is one of them. Servers are also called instances.
Each server has its own admins and codes of conduct (also called server rules.)
People can talk to each other across servers: if you’re on kamu.social, you can still follow people on mastodon.art, and they can follow you, and will see your replies even if they don’t follow you.
You can have identities on multiple servers, but don’t need to: they are mainly relevant when you want to avoid crossing the streams – eg. keeping your professional self distinct from your underground party animal identity.
The biggest practical minus of the federation is that you need to pick a server. Which is why I picked for you and made kamu.social. If you later discover you want to hang somewhere else, that’s fine, see “Migrating to a Different Server”.
The biggest practical plus of the federation is that it provides curation. More about this below, in “You have three feeds”.
The politically important part of federation is that no-one can buy Mastodon, and if nazis take over a part of the network that part can be cut off. (This has already happened, this is not theory but practise.) It is by the people, for the people. You don’t need to care, though, but we as a society should.
You have three feeds.
Your home timeline is all the people you follow, no matter which server they are on. This includes their own public, unlisted, and followers-only posts, their replies, and their boosts—everything except direct messages to other people. (Your home timeline also shows all your own posts, including your own direct messages.)
Your local timeline is all the public posts from people on the same server. This does NOT include their replies to other people or their boosts!
Your federated timeline is all the public posts from people on the same server and all the people THEY follow. This does NOT include their replies to other people, or their boosts.
Summary: Home timeline is “your stuff”, local timeline is original content by people on your server, federated timeline is original content visible to your server.
Since code of conduct is per server, it doesn’t really apply to the federated timeline – but see “Safety features” below.
The local and federated timelines are why it matters which server you are on. Pick one with cool people with cool interests and your local and federated timelines will be awesome. Pick one with randos and they will be just that. Pick one with 100K people and… yeah. Still, you can always change servers later without losing followers, so starting on a big server is perfectly fine—just understand that you won’t be experiencing Mastodon at its best yet.
Safety features
Safety and moderation features have two granularities: account and server.
You can block an individual, or the entire server they are on. While the fash can set up their own servers, rest of the world can block those.
Server admins can block entire servers as well. See Decentralized Social Networks vs. The Trolls for what happened when Gab tried to take over. The “original” Mastodon server mastodon.social blocks around 140 other servers mainly due to hate speech and harassment. Some servers block even more, some block less. Some block pre-emptively, some block when they discover an issue.
When you block someone, you can (and probably should) report them to admins of your own server as well. Your admins will see that you made the report, but the admins of the other server will only see the server the report came from.
Even if you block someone, they can still see your public profile. If this a concern for you, lock down you account to minimize your public visibility. (See “Locking down your account” under “Moving house”.)
You have four levels of privacy for your posts.
Public. These appear on local and federated timelines, on your profile, and on your follower’s home timelines. Identifiable by the globe icon.
Unlisted. These appear on your profile and on your follower’s home timelines. Identifiable by the OPEN lock icon:

Followers-only. These appear ONLY on your follower’s home timelines. Your logged in followers can also see them on your profile. Identifiable by the CLOSED lock icon:
Direct. These appear on the home timelines of their recipients. All people @mentioned in the post are considered recipients. You can add more people to the convo by @ing them. Identifiable by the @-icon:

REMEMBER: Anything on Mastodon is more like a conversation at a party than a sealed letter. If nothing else, admins will have access to anything you post, including direct messages. Not convenient access, but access none the less.
Moving House
Didn’t create an account yet? Do it now.
Locking down your account
READ this even if you’re privileged enough to not suffer from stalkers or dogpiles, you should know these options exist. Also, if you do get trouble and are on kamu.social, please let me know!
If you’re not on kamu.social, the details might differ but the content is the same. Eg. mastodon.social is running a newer software version than kamu.
Go to Edit profile - kamu.social
Select “Require follow requests”. This means you have control over who can follow you, and is harmless as long as you don’t mind approving people.
Possibly also select “Hide your social graph” on the same page, which hides who you follow and who is following you. This doesn’t affect you, but makes it harder for other people to discover the cool people you follow and the cool people who follow you. Still, depending on your situation it might be worth it.
Hit “Save Changes”, verify that the correct boxes are checked.
Go to Preferences - kamu.social
Select “Opt-out of search engine indexing”. This means neither Google nor special purpose Mastodon search engines like FedSearch will find your profile page or public posts. (If you want to be found, obviously don’t do this.)
Under “Posting Defaults”, select whatever seems most appropriate.
Public posts are… public. They’re the “default mode” for most people, but they don’t need to be the default for you. They appear on both the local and federated timelines, and may be indexed by search engines.
Unlisted posts won’t appear on local or federated feeds by default, but they do appear on your public profile, can be linked to by anyone, and if someone boosts them they will appear for their followers’ timelines. They can also be indexed by search engines.
Followers-only is the safety-conscious option: they are visible to your followers only, cannot be boosted, and viewing links to them require being logged in. They cannot be indexed by search engines (unless one of your followers is secretly a search engine.)
Direct posts are visible only to those @mentioned on them, cannot be boosted, and links to them require them to be logged in. If you write a lot of direct messages this might be the right default! Note that ALL people @mentioned have access to the direct messages they’s mentioned in.
Hit “Save changes”.
Go to Notifications - kamu.social
Go to “Other notifications settings” at the bottom, and select the ones you need. This allows you to:
Block notifications from non-followers
Block notifications from people you don't follow
Block direct messages from people you don't follow
Hit “Save changes”.
Go to Automated post deletion - kamu.social
Select whichever period and settings seem most appropriate for you. It might be to never delete anything automatically!
Of course if someone archives an old post of yours, they have a copy and that’s out of your hands, but automatic deletion does mean old posts are much less likely to come to haunt you later.
Consider setting up two-factor authentication at Two-factor Auth - kamu.social.
SET UP YOUR PROFILE AND PICTURE. Lots of people are approving followers manually especially in the face of Twitter migration, and seeing a follow request with an empty profile is … yeah, nope. You don’t need to put up a mugshot, you don’t need to write a long bio, but some picture and a few words about what you’re about in your bio go a long way.
Your display name IS searchable! IF you want people to find you by your real name, put it there—and if doxxing or stalkers are a concern do not. (It is not initially globally searchable, but over time more servers will learn about you and it will become more so.)
Note that currently your bio is NOT searchable—not even by hashtags, hence next step.
WRITE A PUBLIC POST WITH RELEVANT HASHTAGS, PIN IT, AND KEEP IT UP TO DATE. Since bios are not searchable, but keywords in posts are, write at a short “tags” post with your #interests, so that people can discover you by it.
Go to Preferences - kamu.social
Select the language you usually post in, so your browser’s or operating system’s language doesn’t affect it. (If you sometimes post in a different language, try to remember to tag it as such in the post-box—there’s a dropdown below the text entry.)
Select the languages you read fluently, so only posts tagged with those languages appear in your local and federated timelines. (At the moment all posts from people you follow currently show up in your home timeline, no matter what language they’re in.)
Finding your Twitter contacts: use https://fedifinder.glitch.me/
Download the list as CSV.
Go to Import - kamu.social, select "Following List", “Merge”, choose the file you downloaded in previous step, and hit “Upload”.
The import will take a bit, but you don’t need to do anything else.
For those Twitter contacts not on Mastodon that you want to keep seeing, use https://beta.birdsite.live/
Enter the Twitter username in the box.
Hit “Show”.
Copy the Mastodon user id that appears, in the form of @username@beta.birdsite.live and paste it to the search box (under # Explore on mobile!)
Follow the Mastodon account search finds. They won’t see your replies, or favorites, though!
NOTE: If you’re on one of the big servers like mastodon.social, this may not work for you, as these bots are blocked there. (The reasoning is not entirely clear to me, and they are not blocked on kamu.social. The bot does have an unfortunate tendency to dump all posts of a person in a clump on your timeline, I may look into setting up a rate-limited version for kamu.social. Still, these post are followers-only, so they won’t be visible on the federated timeline, so you don’t need to worry about spamming that.)
If you want to crosspost to Twitter automatically, use eg. https://crossposter.masto.donte.com.br/ (I don’t have personal experience with this.)
Read the “Culture” section below.
Culture
On Mastodon content warnings are much more a thing than on Twitter. I’m still getting used to them myself, but hey, yeah, let’s use them.
Write a headline-like content warnings: “News: violence against minorities in Texas” without getting into gory details. You can use them as headlines even if there is nothing to warn about! Lots of people do this, no-one will bat an eye. This allows people to scan timelines looking for the things that interest them.
Politics deserves a CW most of the time, particularly US politics, particularly “look at this awful thing right wingers are doing”. Adding “US midterms” or similar CW is a also favor to the rest of the world who can only watch in horror without being able to do anything. Even for US citizens being able to engage on your own terms is important in maintaining people’s capacity to engage thoughtfully.
This doesn’t mean all political topics need content warning on them! You have a head, use it. You will make errors in both directions, don’t sweat it too much. Just give it a moment’s consideration.
Lived experience generally doesn’t need a CW. If you experience racism, sexism, transphobia, ableism, or other forms of hate you absolutely can post about it without a CW. If you go to a political rally and and want post about it… CW that.
If you don’t need to see content warnings personally, go to Preferences → Appearance, select “Always expand posts marked with content warnings” and hit “Save Changes”.
When people say “next time please CW this”, don’t take it personally. CW warnings aren’t about taboos or not allowing discussion, reminder to use them isn’t an attack or gatekeeping.
If you don’t use CWs you will be boosted less. Seriously.
When thinking of boosting something that could have used a CW, but doesn’t have one, instead reply to it, with something like ”☝️@GrimDark’s excellent analysis of the election results”.
Use alt-text in images, people: click the “Edit” button on the image. There you can also change the centerpoint used for autocropping. Subscribe to https://mastodon.social/@alt_text for reminders. If you forget alt-text, just reply with “Forgotten alt-text: …” to your post. Eventually you will remember.
Don’t censor or obfuscate words: any filters are by users, so you’re just circumventing measures people have set up to curate their own feeds. So no f*ck or P O L I C E or whatever.
Use hashtags: they’re searchable, normal text is not. Don’t try to be an influencer dropping a dozen or more hashtags, though. That’s just silly. 1-3 is plenty. There is no algorithm to appease. You’re talking to actual people.
Boost the things you find cool and wish more people would see. Don’t be shy.
Fave the things you like: faving something is warm fuzzies for the original poster, which is important. Since your faves won’t leak to your followers, you don’t need to worry about liking things that they might not be interested in. Like with boosts, you can see who has faved a post by clicking through.
Reply to people: don’t hang on to your comments like their precious gold!
If you post in multiple languages, in addition to setting up your default language (see “Moving House” above), PLEASE do try to remember to tag the language you write in when you change it up.
If you would have retweeted / shared something with your own commentary, instead:
If your comment is constructive or funny, reply to the original. Due to the way the timelines work your followers will see your reply reliably, and can check the context by clicking on it. I think point up and keeping mention of the original poster is a nice thing to do if you want to call people’s attention to the OP, like so:
If your comment is too snarky for a reply, either let it be, or do a manual “copy link to original, post that with comment”, or “screenshot original, post that with comment”. Seriously consider the let it be -option: snark is fun, but it doesn’t really make the world a better place.
If you want your share + commentary to show up on the local and federated feeds, then you need DO need to make a new post. Click on the [...] button under the original to get the link.
Follow LOTS of people. When you discover they’re not your jam, just unfollow them. Seriously. Follow indiscriminately to start with. This is not like Facebook friending. This is like listening to someone at a party to discover if they’re fun or not. Curate your own feed: you’re better at it then any algorithm. Seriously.
On the local and federated timelines, if you find someone is too noisy, just mute them. If someone is feeling ranty, just mute them for a day or few to start. You can always clear your mutes periodically if you have bad FOMO.
Suggested Follows
If you make a list of suggested follows somewhere (1) either don’t include personal accounts (2) or get their permission first!
https://mastodon.social/@Mastodon - the official account of the Mastodon project.
https://mstdn.social/@feditips - tips to Mastodon and Fediverse. You can also read the website, but they don’t flood so occasional tips in the feed are nice.
https://mastodon.social/@alt_text - bot that will nag at you when you forget the alt-text of an image. Accessibility is important.
https://mastodon.social/@MicroSFF - daily micro fiction, SFF of course.
Tips and Tricks
On mobile search and federated feeds may be hidden under # Explore!
You can enter emojis by typing their name between colons, like so: :joy: → 😂
In my opinion the user experience on mobile is better with browser than the official app. I haven’t tested a lot of apps, but I hear good things about Tusky on Android and both Tusk! and Metatext on iOS. See: Eight Mastodon apps for iPhone.
You can pin multiple posts on your profile: eg. introduction, your tags, your best puns, and the important political message you’re all about.
This widget on top of your timelines gives you access to their filtering options:
For home timeline you can hide replies and boosts. (I recommend you don’t. If you do that you will miss out—but if there’s a whole boost storm or a dozen conversations you don’t care about going on you can turn them off for a while, etc.)
For local you can hide posts that don’t include images or other media, reproducing an authentic Facebook experience. Do what seems nicest to you.
For federated you can hide local posts, and posts that don’t include media. If you check all timelines separately I think hiding the locals makes sense.
For notifications you can hide eg. faves and boosts. You can also turn on “Quick filter bar” for all categories, which will give you quick access to different notification categories:
There’s a more complex filtering system accessible through preferences. This guide is too long already, though, so read up on Filters - Mastodon documentation. This will allow you to filter based on words, etc.
You can browse the local timelines of most servers, search on them, and see who are there, and follow them. Try eg:
“Big” servers:
https://mastodon.social/explore
https://mastodon.online/explore
https://mstdn.social/explore
Art:
https://mastodon.art/explore
https://artisan.chat/public
Finland: https://mastodontti.fi/public
Bots: https://botsin.space/explore
Eclectic:
https://merveilles.town/public
https://pony.social/public
Photography: https://photog.social/public
Programming, Technology, Infosec, etc:
https://freeradical.zone/public
https://infosec.exchange/public
https://types.pl/explore
RPGs: https://dice.camp/public
Science: https://scicomm.xyz/public
Scifi and Fantasy: https://wandering.shop/public
This list will be kept short and reflecting the tastes of people likely to land on kamu.social, but if you have a suggestion please do let me know!
For other servers go first to the front page of the server, and look for “explore”, “local feed”, or similar from there. Different servers might be running different software and be configured differently, so specific URLs may differ - and some hide their local feeds and users.
When you notice interesting people sharing the same server, go check out that server, maybe there’s more cool people there!
Disable autocropping of images
Go to Appearance - kamu.social, unselect “Crop images in non-expanded posts to 16x9”, and save changes.
Turn on slow mode to prevent timeline from auto-refreshing
Go to Appearance - kamu.social, select “Slow mode”, and hit “Save Changes”.
Now when you have new posts to see, you will see “5 new items” at the top. (Same with notifications: the bell will show a number, and the top of your notifications timeline will show “5 new items”.) At this point you have two options:
Click on the “5 new items”. The new items will appear on top, and your screen will not scroll. You can scroll UPWARDS to see the new stuff, in the order from oldest to newest.
Refresh, and the new items will appear, and your screen will scroll to the top. You can now scroll DOWNWARDS to see the new stuff, in order from newest to oldest, until at some point you will start seeing the stuff you’ve already seen.
…and maybe consider NOT hitting the “5 new items” at all, but instead close Mastodon and do something else. We can keep in touch without doomscrolling.
Search box
You can enter the name of a person. If your server knows about them, it’ll find them. If your server doesn’t know about them (no-one on your server follows them, their posts haven’t been boosted by people here, etc), it won’t.
You can enter the name of a server. You will get a list of all people on there that your server knows about.
You can enter a hashtag, and find all posts with that—that your server knows about.
You may have noticed a theme above! If you’ve just started archery and want to find archers, searching for #archery on me.and.my.two.friends.social might not show much: search on one of the big servers listed above as well!
You can enter the @username@server -identifier of anyone, and the search box will find them if they exist. I’ve seen searches occasionally fail due to either the server you’re searching on or the server the other person is on being overloaded, though. You can also use the URL of their profile.
You cannot do global text searches. Some servers provide full text search for posts archived on the server, but even that is optional - and there is and never will be a global full text search. This is why hashtags are so important if you want your posts to be discoverable after the fact.
Click through
Every post has a small arrow below it, on the left, with a 0, 1, or 1+ next to it:
The indicates the number of replies to that post: zero, one, or more than one. Click on the post to see the conversation, click on the arrow to reply yourself.
Since there are no quote tweets, you see more people doing direct replies. This also means you see more things from the middle of a conversation. The double-arrow symbol:
means the post is a reply. Click on the post, and the conversation it is part of appears above - even though there are no replies to THIS post, there is a whole conversation above it that you can read by clicking through.
If there are other replies or if there is a pre-existing discussion above, it’s a good idea to click through. Not only for context, but maybe someone has already made your point and you can boost them instead, or maybe there’s a better place in the discussion to weigh in.
You can also see who has boosted or faved a post by clicking through, and then clicking on the small boost or fave icon at the bottom. This is one way to discover cool people.
Make notes on profiles
If you go to someone’s profile, you will see a NOTE section. This is for you! You can write for example “Met at Chaos Camp 2021” or “Rants about US politics” there, and no-one else will see it. This is so that you can remind yourself of how you know someone, or why you unfollowed them, or maybe what their real name is. They won’t get a notification, and they won’t see it. You server admin, as always, has access if they really want, though.
I Was Never on Twitter
Mastodon is NOT a Twitter clone, but shares the same basic threading model of discussions with Twitter. Here’s how it works on Mastodon specifically.
Someone makes a post / tweet / toot.
Other people see it, and reply to it.
Other people see those replies, and reply to them. Repeat until discussion dries out.
Unlike on Facebook, there is no limit to the depth of subthreads a discussion can have. There is also no “most popular replies”, etc. This is by design.
When you click on a post, you are taken the the conversation view for that post, showing the discussion directly preceding it if you scroll up, and the direct replies to it if you scroll down.
When you reply to other people publicly, your followers see your reply, it appears on your profile under “Posts and replies”, and it appears to the people @mentioned in your reply, but it does NOT appear on the local and federated timelines you are on.
If you make a followers-only reply, it will only appear to your followers and those @mentioned.
If you make a direct reply, it will only appear to those @mentioned.
Unlisted replies are useful when you’re making a thread: your replies to your own posts DO appear on the local and federated timelines. By making the first post of a thread public and the rest unlisted you can avoid spamming the timelines.
Make sure to read the Culture section above!
Migrating to a Different Server
This actually works exactly the same if you’re just migrating to a different account on the same server!
Create a new account where you want to move.
Download your old follows, mutes, blocks, etc:
On your OLD account, go to Preferences → Import and Export → Data Export
Download the all CSV files (Comma Separated Values, you can open these in a spreadsheet).
Click “Request your archive”, wait until it is ready an download it. It will contain all your posts and uploads.
Add you old follows, mutes, blocks, etc to your new account.
On your NEW account, go to Preferences → Import and Export → Data Import
Import follows:
Make sure “Following List” is selected in the dropdown.
Make sure “Merge” is selected below.
Choose the following_accounts.csv file you earlier exported.
Hit upload.
Repeat the above for Blocking List, Muting List, Domain Blocking List, and Bookmarks.
Your account migration is new complete from the POV of the new account. Nothing irreversible has been done.
Migrate your followers. This step will make you old account INACTIVE and move all your followers to follow your new account. The process is not instantaneous, and might take a while, so don’t panic if they’re not there immediately! You can later re-activate your old account, but the followers will be gone.
The following steps need to be done in this order! Nothing bad will happen the other way around, it just won’t do anything.
On your NEW account, go to Preferences → Account → Moving from a different account, and create an alias for your OLD account. This is the “I’m migration from there to here”-signal.
On your OLD account, go to Preferences → Account → Moving to a different account. Enter your NEW account and the password of the OLD account, and hit “Move Followers”. This is the “I’m allowing migration from here to there”-signal.
You’re done. If you now log out and check your old account’s public profile you should see it pointing to the new account, but all your old posts are still accessible in their old addresses. This is good internetting: don’t break old links.
If you get errors, check that you’ve done the steps in right order, and note the “mixed” account and password when starting migration!
IF you want to also migrate your old posts, my suggestion is that you boost selected old posts from your new account. The alternative would be to dig in the archive you downloaded and re-post the things you want, or to copy them manually.
If there’s lots of good stuff on your old account, maybe link to it in your pinned #introduction. You DO have an introduction, right?
Getting an Account
If you know me (Nikodemus) and I know you, then you’re pretty much invited to kamu.social. If not, then this section is for you:
Signup using most apps is buggy, I hear. Sign up from a browser. Use browser to start, pick an app later.
If you have friends who all hang on a server and tell you to go there, go there.
Otherwise make an account on one of the “big” general purpose servers, it doesn’t matter which. If you don’t have friends pulling you to a nice place, it’s better to pick a big server because that way it will be easier for you to find interesting people to follow. Later, when you notice all the interesting people hang on coolthing.town or something, migrate there. No biggie.
Servers managed by “Stux”, who seems to be doing a very good job: mstdn.social, mastodon.coffee, masto.ai (The two last ones are still reasonably small, but based on the track record of mstdn.social I feel confident recommending them.)
I used to recommend making an account on mastodon.online, or mastodon.social. but the moderation quality there take a drastic dip, and they’re not blocking some instances that should IMO be blocked.
MAYBE if you have a single big focus in your life like art, a specific identity, hacktivism, microbrews, or whatever, AND you can find a server dedicated to that, then you can go there without making an account on a big server first.
Check the public feeds of that server and see what they’re like. If you like them, great!
Make sure the server you sign up has a reasonable code of conduct, and a blocklist. Check the “About” page of the server. See eg. About - Mastodon for mastodon.social. If the server you’re looking at doesn’t suspend sites for hate speech and harassment, that’s a huge 🚩.
Really, all the servers listed in Tips and Tricks section should be fine.
The reason it is easier to get started on a big server is because the big servers “know” more people. So searching for a hashtag or a name directly on that server is more likely to find the thing you’re looking for. You can search on many servers you don’t have an account on, esp. the big ones, but that’s more hassle and something you need to remember to do.
IF YOU WANT TO SET UP A SERVER and let other people in, you need to be ready to make sure they’re safe.
Make an account elsewhere first. Spend at least a few days on the fediverse.
Do your homework: you need to read more than this guide.
Set up server rules, aka code of conduct. Without a public set of server rules on the “About” page, other servers are much more likely to block you at the first sign of trouble instead of reaching out.
Set up an initial list of moderated servers. My suggestion is to copy the list from eg. mastodon.art. Some of the addresses will be obfuscated (due to eg. hosting illegal content), so those you gotta skip, but espcially make sure to get the hate speech and harassment ones.
If your people are out of line, it’s not just them that may be blocked, but your entire server. You’re responsible moderating your crowd when the need arises.
Follow the #fediblock topic for reports of bad actor servers.
Happy Tooting!
— Nikodemus

+ 220
- 0
cache/2022/3f045054587e15191052008ca455dc3c/index.html View File

@@ -0,0 +1,220 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Mastodon, fin de (première) partie ? (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://framablog.org/2022/11/12/mastodon-fin-de-premiere-partie/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Mastodon, fin de (première) partie ?</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://framablog.org/2022/11/12/mastodon-fin-de-premiere-partie/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>L’afflux récent d’inscriptions sur Mastodon, sous forme de vague inédite de cette ampleur, a largement retenti dans les médias. Beaucoup se sont penchés sur le réseau social fédéré avec une curiosité nouvelle,</p>
<p><span id="more-28895"></span></p>
<p>pour expliquer (parfois de façon maladroite ou fragmentaire, mais c’est habituel) de quoi il retourne aux nombreux « migrants » qui ont réagi vivement à la prise de contrôle de l’oiseau bleu par E. Musk.</p>
<p>L’événement, car c’en est un tant les réseaux sociaux sont devenus un enjeu crucial, a suscité, et c’est tout à fait sain, beaucoup d’interrogations, mais souvent selon une seule perspective : « Vous venez de l’oiseau qui a du plomb dans l’aile, que pouvez-vous trouver et que devez-vous craindre en vous inscrivant sur Mastodon ? ». Et en effet cela répond plus ou moins à une forte demande.</p>
<p>Cependant il nous est apparu intéressant  d’adopter le temps d’un article une sorte de contre-champ : « que peuvent espérer ou redouter les mastonautes (ben oui on peut les appeler ainsi) avec de massives nouvelles arrivées ? »</p>
<p>C’est ce que propose d’analyser Hugh Rundle dans le billet que nous avons traduit ci-dessous. Il connaît bien Mastodon, dont il administre une instance depuis plusieurs années. Sa position pourra sembler exagérément pessimiste, car il estime qu’il faudra faire le deuil de Mastodon tel qu’on l’a connu depuis les débuts du Fédiverse. Qui sait ce qu’apporteront les prochains mois à la fédération de serveurs minuscules ou obèses qui par leur interconnexion fédèrent des êtres humains, hors de portée du capitalisme de surveillance ? Comme d’habitude, les commentaires sont ouverts et modérés.</p>
<p>Article original sur le blog de l’auteur : <a href="https://www.hughrundle.net/home-invasion/">Mastodon’s Eternal September begins</a></p>
<p>Licence <a href="https://creativecommons.org/licenses/by/4.0/deed.fr">CC BY 4.0</a></p>
<h2>L’éternel septembre de Mastodon commence…</h2>
<h4><strong>par Hugh Rundle<br>
</strong></h4>
<p><a href="https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0.png"><img class="aligncenter size-full wp-image-28933" src="https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0.png" alt="" srcset="https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0.png 3357w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-300x105.png 300w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-1024x358.png 1024w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-768x269.png 768w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-1536x538.png 1536w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-2048x717.png 2048w" sizes="(max-width: 3357px) 100vw, 3357px"></a></p>
<p> </p>
<blockquote><p>Plus personne n’y va. Il y a trop de monde.</p></blockquote>
<p><a href="https://quoteinvestigator.com/2014/08/29/too-crowded/">Yogi Berra, et alii</a></p>
<p>Cette fois, on dirait bien que c’est arrivé. Alors que les sites d’information commençaient à annoncer qu’Elon Musk avait finalisé l’achat de Twitter, <a href="https://fr.wikipedia.org/wiki/Septembre_%C3%A9ternel">l’éternel septembre</a> du Fediverse – espéré et redouté en proportions égales par sa base d’utilisateurs existante – a commencé.</p>
<p>Nous avons déjà connu des vagues de nouvelles arrivées – la plus récente au début de cette année, lorsque Musk a annoncé son offre d’achat – mais ce qui se passe depuis une semaine est différent, tant par son ampleur que par sa nature. Il est clair qu’une partie non négligeable des utilisateurs de Twitter choisissent de se désinscrire en masse, et beaucoup ont été dirigés vers Mastodon, le logiciel le plus célèbre et le plus peuplé du Fediverse.</p>
<h3>Deux types de fêtes</h3>
<p>À Hobart, à la fin des années 1990, il y avait essentiellement trois boîtes de nuit. Elles étaient toutes plus ou moins louches, plus ou moins bruyantes, mais les gens y allaient parce que c’était là que les autres se trouvaient – pour s’amuser avec leurs amis, pour attirer l’attention, pour affirmer leur statut social, etc. Ça, c’est Twitter.</p>
<p>J’avais un ami qui vivait dans une colocation au coin d’un de ces clubs populaires. Il organisait des fêtes à la maison les week-ends. De petites fêtes, juste entre amis avec quelques amis d’amis. Ça, c’est le Fediverse.</p>
<h3>Déferlement</h3>
<p>Pour ceux d’entre nous qui utilisent Mastodon depuis un certain temps (j’ai lancé mon propre serveur Mastodon il y a 4 ans), cette semaine a été accablante. J’ai pensé à des métaphores pour essayer de comprendre pourquoi j’ai trouvé cela si bouleversant.</p>
<p>C’est censé être ce que nous voulions, non ? Pourtant, ça ressemble à autre chose. Comme lorsque vous êtes assis dans un wagon tranquille, discutant doucement avec quelques amis, et qu’une bande entière de supporters de football monte à la gare de <a href="https://en.wikipedia.org/wiki/Jolimont,_Western_Australia#/map/0">Jolimont</a> après la défaite de leur équipe. Ils n’ont pas l’habitude de prendre le train et ne connaissent pas le protocole. Ils supposent que tout le monde dans le train était au match ou du moins suit le football. Ils se pressent aux portes et se plaignent de la configuration des sièges.</p>
<p>Ce n’est pas entièrement la faute des personnes de Twitter. On leur a appris à se comporter d’une certaine manière. À courir après les <em>likes</em> et les <em>retweets</em>. À se mettre en valeur. À <em>performer</em>. Tout ce genre de choses est une malédiction pour la plupart des personnes qui étaient sur Mastodon il y a une semaine. C’est en partie la raison pour laquelle beaucoup sont venues à Mastodon en premier lieu, il y a quelques années.</p>
<p>Cela signifie qu’il s’est produit un choc culturel toute la semaine, pendant qu’une énorme déferlement de tweetos descendait sur Mastodon par vagues de plus en plus importantes chaque jour. Pour les utilisateurs de Twitter, c’est comme un nouveau monde déroutant, tandis qu’ils font le deuil de leur ancienne vie sur Twitter. Ils se qualifient de « réfugiés », mais pour les habitants de Mastodon, c’est comme si un bus rempli de touristes de Kontiki venait d’arriver, et qu’ils se baladaient en hurlant et en se plaignant de ne pas savoir comment commander le service d’étage. Nous aussi, nous regrettons le monde que nous sommes en train de perdre.</p>
<h3>Viral</h3>
<p>Samedi soir, j’ai publié un billet expliquant deux ou trois choses sur l’histoire de Mastodon concernant la gestion des nœuds toxiques sur le réseau. Puis tout s’est emballé. À 22 heures, j’avais verrouillé mon compte pour exiger que les abonnés soient approuvés et mis en sourdine tout le fil de discussion que j’avais moi-même créé.</p>
<p>Avant novembre 2022, les utilisateurs de Mastodon avaient l’habitude de dire pour blaguer que vous étiez « devenu viral » si vous obteniez plus de 5 repouets ou étoiles sur un post.</p>
<p>Au cours d’une semaine moyenne, une ou deux personnes pouvaient suivre mon compte. Souvent, personne ne le faisait. Et voilà que mon message recevait des centaines d’interactions. Des milliers. J’ai reçu plus de 250 demandes de suivi depuis lors – tellement que je ne peux pas supporter de les regarder, et je n’ai aucun critère pour juger qui accepter ou rejeter. En début de semaine, je me suis rendu compte que certaines personnes avaient <i>crossposté</i> mon billet sur le Mastodon sur Twitter. Quelqu’un d’autre en avait publié une capture d’écran sur Twitter.</p>
<p>Personne n’a pensé à me demander si je le voulais.</p>
<p>Pour les utilisateurs d’applications d’entreprise comme Twitter ou Instagram, cela peut ressembler à de la vantardise. Le but n’est-il pas de « devenir viral » et d’obtenir un grand nombre d’abonnés ? Mais pour moi, c’était autre chose. J’ai eu du mal à comprendre ce que je ressentais, ou à trouver le mot pour le décrire. J’ai finalement réalisé lundi que le mot que je cherchais était “traumatique”.</p>
<p>En octobre, j’avais des contacts réguliers avec une douzaine de personnes par semaine sur Mastodon, sur 4 ou 5 serveurs différents. Soudain, le fait que des centaines de personnes demandent (ou non) à se joindre à ces conversations sans s’être acclimatées aux normes sociales a été ressenti comme une violation, une agression. Je sais que je ne suis pas le seul à avoir ressenti cela.</p>
<p>Le fait que tous les administrateurs de serveurs Mastodon que je connais, y compris moi-même, aient été soudainement confrontés à un déluge de nouveaux inscrits, de demandes d’inscription (s’ils n’avaient pas d’inscription ouverte), puis aux inévitables surcharges des serveurs, n’a probablement pas aidé. Aus.social a cédé sous la pression, se mettant hors ligne pendant plusieurs heures alors que l’administrateur essayait désespérément de reconfigurer les choses et de mettre à niveau le matériel. <a href="https://chinwag.im/">Chinwag</a> a fermé temporairement les inscriptions. Même l’instance phare mastodon.social publiait des messages plusieurs heures après leur envoi, les messages étant créés plus vite qu’ils ne pouvaient être envoyés. J’observais nerveusement le stockage des fichiers sur ausglam.space en me demandant si j’arriverais à la fin du week-end avant que le disque dur ne soit plein, et je commençais à rédiger de nouvelles règles et conditions d’utilisation pour le serveur afin de rendre explicites des choses que « tout le monde savait » implicitement parce que nous pouvions auparavant <em>acculturer</em> les gens un par un.</p>
<p><a href="https://framablog.org/wp-content/uploads/2022/11/Screenshot-2022-11-10-at-09-16-18-Mastodon-Reseau-social-decentralise-1.png"><img loading="lazy" class="aligncenter size-full wp-image-28936" src="https://framablog.org/wp-content/uploads/2022/11/Screenshot-2022-11-10-at-09-16-18-Mastodon-Reseau-social-decentralise-1.png" alt=""></a></p>
<h3>Consentement</h3>
<p>Jusqu’à cette semaine, je n’avais pas vraiment compris – vraiment apprécié – à quel point les systèmes de publication des entreprises orientent le comportement des gens. Twitter encourage une attitude très extractive de la part de tous ceux qu’il touche. Les personnes qui ont republié mes articles sur Mastodon sur Twitter n’ont pas pensé à me demander si j’étais d’accord pour qu’ils le fassent. Les bibliothécaires qui s’interrogent bruyamment sur la manière dont ce “nouvel” environnement de médias sociaux pourrait être systématiquement archivé n’ont demandé à personne s’ils souhaitaient que leurs pouets sur le Fediverse soient capturés et stockés par les institutions gouvernementales. Les universitaires qui réfléchissent avec enthousiasme à la manière de reproduire leurs projets de recherche sur Twitter sur un nouveau corpus de pouets “Mastodon” n’ont pas pensé à se demander si nous voulions être étudiés par eux. Les personnes créant, publiant et demandant des listes publiques de noms d’utilisateurs Mastodon pour certaines catégories de personnes (journalistes, universitaires dans un domaine particulier, activistes climatiques…) ne semblaient pas avoir vérifié si certaines de ces personnes se sentait en sécurité pour figurer sur une liste publique. Ils ne semblent pas avoir pris en compte le fait qu’il existe des noms pour le type de personne qui établit des listes afin que d’autres puissent surveiller leurs communications. Et ce ne sont pas des noms sympathiques.</p>
<p>Les outils, les protocoles et la culture du Fediverse ont été construits par des féministes trans et queer. Ces personnes avaient déjà commencé à se sentir mises à l’écart de leur propre projet quand des personnes comme moi ont commencé à y apparaître il y a quelques années. Ce n’est pas la première fois que les utilisateurs de Fediverse ont dû faire face à un changement d’état significatif et à un sentiment de perte. Néanmoins, les principes de base ont été maintenus jusqu’à présent : la culture et les systèmes techniques ont été délibérément conçus sur des principes de consentement, d’organisation et de sécurité communautaires. Bien qu’il y ait certainement des améliorations à apporter à Mastodon en termes d’outils de modération et de contrôle plus fin des publications, elles sont en général nettement supérieures à l’expérience de Twitter. Il n’est guère surprenant que les personnes qui ont été la cible de trolls fascistes pendant la plus grande partie de leur vie aient mis en place des protections contre une attention non désirée lorsqu’elles ont créé une nouvelle boîte à outils pour médias sociaux. Ce sont ces mêmes outils et paramètres qui donnent beaucoup plus d’autonomie aux utilisateurs qui, selon les experts, rendent Mastodon « trop compliqué ».</p>
<p>Si les personnes qui ont construit le Fediverse cherchaient généralement à protéger les utilisateurs, les plateformes d’entreprise comme Twitter cherchent à contrôler leurs utilisateurs. Twitter revendique la juridiction sur tout le « contenu » de la plateforme. Les plaintes les plus vives à ce sujet proviennent de personnes qui veulent publier des choses horribles et qui sont tristes lorsque la bureaucratie de Twitter finit, parfois, par leur dire qu’elles n’y sont pas autorisées. Le vrai problème de cet arrangement, cependant, est qu’il modifie ce que les gens pensent du consentement et du contrôle de nos propres voix. Les universitaires et les publicitaires qui souhaitent étudier les propos, les graphiques sociaux et les données démographiques des utilisateurs de Twitter n’ont qu’à demander la permission à la société Twitter. Ils peuvent prétendre que, légalement, Twitter a le droit de faire ce qu’il veut de ces données et que, éthiquement, les utilisateurs ont donné leur accord pour que ces données soient utilisées de quelque manière que ce soit lorsqu’ils ont coché la case « J’accepte » des conditions de service. Il s’agit bien sûr d’une idiotie complète (les Condition Générales d’Utilisation sont impénétrables, changent sur un coup de tête, et le déséquilibre des pouvoirs est énorme), mais c’est pratique. Les chercheurs se convainquent donc qu’ils y croient, ou bien ils s’en fichent tout simplement.</p>
<p>Cette attitude a évolué avec le nouvel afflux. On proclame haut et fort que les avertissements de contenu sont de la censure, que les fonctionnalités qui ont été délibérément non mises en œuvre pour des raisons de sécurité de la communauté sont « manquantes » ou « cassées », et que les serveurs gérés par des bénévoles qui contrôlent qui ils autorisent et dans quelles conditions sont « excluants ». Aucune considération n’est donnée à la raison pour laquelle les normes et les possibilités de Mastodon et du Fediverse plus large existent, et si l’acteur contre lequel elles sont conçues pour se protéger pourrait être vous. Les gens de Twitter croient au même fantasme de « place publique » que la personne qu’ils sont censés fuir. Comme les Européens du quatorzième siècle, ils apportent la contagion avec eux lorsqu’ils fuient.</p>
<p><a href="https://framablog.org/wp-content/uploads/2022/11/pas-a-vendre-1.png"><img loading="lazy" class="aligncenter size-full wp-image-28931" src="https://framablog.org/wp-content/uploads/2022/11/pas-a-vendre-1.png" alt="" srcset="https://framablog.org/wp-content/uploads/2022/11/pas-a-vendre-1.png 733w, https://framablog.org/wp-content/uploads/2022/11/pas-a-vendre-1-300x127.png 300w" sizes="(max-width: 733px) 100vw, 733px"></a></p>
<h3>Anarchisme</h3>
<p>L’ironie de tout cela est que mon « fil de discussion viral » était largement consacré à la nature anarchiste et consensuelle du Fediverse. Beaucoup de nouveaux arrivants ont vu très vite que les administrateurs de leurs serveurs se battaient héroïquement pour que tout fonctionne, et ont donné de l’argent ou se sont inscrits sur un compte Patreon pour s’assurer que les serveurs puissent continuer à fonctionner ou être mis à niveau pour faire face à la charge. Les administrateurs se sont envoyés des messages de soutien privés et publics, partageant des conseils et des sentiments de solidarité. Les anciens partageaient des #FediTips pour aider à orienter les comportements dans une direction positive. Il s’agit, bien sûr, d’entraide.</p>
<p>C’est très excitant de voir autant de personnes expérimenter des outils sociaux en ligne anarchistes. Les personnes intelligentes qui ont conçu ActivityPub et d’autres protocoles et outils Fediverse l’ont fait de manière à échapper à la prédation monopolistique. Le logiciel est universellement libre et open source, mais les protocoles et les normes sont également ouverts et extensibles. Alors que beaucoup seront heureux d’essayer de reproduire ce qu’ils connaissent de Twitter – une sorte de combinaison de LinkedIn et d’Instagram, avec les 4chan et #auspol toujours menaçants – d’autres exploreront de nouvelles façons de communiquer et de collaborer. Nous sommes, après tout, des créatures sociales. Je suis surpris de constater que je suis devenu un contributeur régulier (comme dans « contributeur au code » 😲) à <a href="https://joinbookwyrm.com/">Bookwyrm</a>, un outil de lecture sociale (pensez à GoodReads) construit sur le protocole ActivityPub utilisé par Mastodon. Ce n’est qu’une des nombreuses applications et idées dans le Fediverse élargi. D’autres viendront, qui ne seront plus simplement des « X pour Fedi » mais plutôt de toutes nouvelles idées. Alors qu’il existe déjà des services commerciaux utilisant des systèmes basés sur ActivityPub, une grande partie des nouvelles applications seront probablement construites et exploitées sur la même base d’entraide et de volontariat qui caractérise actuellement la grande majorité du Fediverse.</p>
<h3>Chagrin</h3>
<p>Beaucoup de personnes ont été enthousiasmées par ce qui s’est passé cette semaine. Les nouveaux arrivants ont vu les possibilités du logiciel social fédéré. Les anciens ont vu les possibilités de la masse critique.</p>
<p>Mais il est important que ce ne soit pas la seule chose qu’on retienne du début de novembre 2022. Mastodon et le reste du Fediverse peuvent être très nouveaux pour ceux qui sont arrivés cette semaine, mais certaines personnes œuvrent et jouent dans le Fediverse depuis presque dix ans. Il existait déjà des communautés sur le Fediverse, et elles ont brusquement changé pour toujours.</p>
<p>J’ai été un utilisateur relativement précoce de Twitter, tout comme j’ai été un utilisateur relativement précoce de Mastodon. J’ai rencontré certains de mes meilleurs amis grâce à Twitter, qui a contribué à façonner mes opportunités de carrière. Je comprends donc et je compatis avec ceux qui ont fait le deuil de leur expérience sur Twitter – une vie qu’ils savent désormais terminée. Mais Twitter s’est lentement dégradé depuis des années – j’ai moi-même traversé ce processus de deuil il y a quelques années et, franchement, je ne comprends pas vraiment ce qui est si différent maintenant par rapport à il y a deux semaines.</p>
<p>Il y a un autre groupe, plus restreint, de personnes qui pleurent une expérience des médias sociaux qui a été détruite cette semaine – les personnes qui étaient actives sur Mastodon et plus largement le Fediverse, avant novembre 2022. La boîte de nuit a un nouveau propriétaire impétueux, et la piste de danse s’est vidée. Les gens affluent vers la fête tranquille du coin, cocktails à la main, demandant que l’on monte le volume de la musique, mettent de la boue sur le tapis, et crient par-dessus la conversation tranquille.</p>
<p>Nous avons tous perdu quelque chose cette semaine. Il est normal d’en faire le deuil.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 53
- 0
cache/2022/3f045054587e15191052008ca455dc3c/index.md View File

@@ -0,0 +1,53 @@
title: Mastodon, fin de (première) partie ?
url: https://framablog.org/2022/11/12/mastodon-fin-de-premiere-partie/
hash_url: 3f045054587e15191052008ca455dc3c

<p>L’afflux récent d’inscriptions sur Mastodon, sous forme de vague inédite de cette ampleur, a largement retenti dans les médias. Beaucoup se sont penchés sur le réseau social fédéré avec une curiosité nouvelle,</p>
<p><span id="more-28895"></span></p>
<p>pour expliquer (parfois de façon maladroite ou fragmentaire, mais c’est habituel) de quoi il retourne aux nombreux « migrants » qui ont réagi vivement à la prise de contrôle de l’oiseau bleu par E. Musk.</p>
<p>L’événement, car c’en est un tant les réseaux sociaux sont devenus un enjeu crucial, a suscité, et c’est tout à fait sain, beaucoup d’interrogations, mais souvent selon une seule perspective : « Vous venez de l’oiseau qui a du plomb dans l’aile, que pouvez-vous trouver et que devez-vous craindre en vous inscrivant sur Mastodon ? ». Et en effet cela répond plus ou moins à une forte demande.</p>
<p>Cependant il nous est apparu intéressant  d’adopter le temps d’un article une sorte de contre-champ : « que peuvent espérer ou redouter les mastonautes (ben oui on peut les appeler ainsi) avec de massives nouvelles arrivées ? »</p>
<p>C’est ce que propose d’analyser Hugh Rundle dans le billet que nous avons traduit ci-dessous. Il connaît bien Mastodon, dont il administre une instance depuis plusieurs années. Sa position pourra sembler exagérément pessimiste, car il estime qu’il faudra faire le deuil de Mastodon tel qu’on l’a connu depuis les débuts du Fédiverse. Qui sait ce qu’apporteront les prochains mois à la fédération de serveurs minuscules ou obèses qui par leur interconnexion fédèrent des êtres humains, hors de portée du capitalisme de surveillance ? Comme d’habitude, les commentaires sont ouverts et modérés.</p>
<p>Article original sur le blog de l’auteur : <a href="https://www.hughrundle.net/home-invasion/">Mastodon’s Eternal September begins</a></p>
<p>Licence <a href="https://creativecommons.org/licenses/by/4.0/deed.fr">CC BY 4.0</a></p>
<h2>L’éternel septembre de Mastodon commence…</h2>
<h4><strong>par Hugh Rundle<br>
</strong></h4>
<p><a href="https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0.png"><img class="aligncenter size-full wp-image-28933" src="https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0.png" alt="" srcset="https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0.png 3357w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-300x105.png 300w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-1024x358.png 1024w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-768x269.png 768w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-1536x538.png 1536w, https://framablog.org/wp-content/uploads/2022/11/home_hero_desktop.2632cca0-2048x717.png 2048w" sizes="(max-width: 3357px) 100vw, 3357px"></a></p>
<p> </p>
<blockquote><p>Plus personne n’y va. Il y a trop de monde.</p></blockquote>
<p><a href="https://quoteinvestigator.com/2014/08/29/too-crowded/">Yogi Berra, et alii</a></p>
<p>Cette fois, on dirait bien que c’est arrivé. Alors que les sites d’information commençaient à annoncer qu’Elon Musk avait finalisé l’achat de Twitter, <a href="https://fr.wikipedia.org/wiki/Septembre_%C3%A9ternel">l’éternel septembre</a> du Fediverse – espéré et redouté en proportions égales par sa base d’utilisateurs existante – a commencé.</p>
<p>Nous avons déjà connu des vagues de nouvelles arrivées – la plus récente au début de cette année, lorsque Musk a annoncé son offre d’achat – mais ce qui se passe depuis une semaine est différent, tant par son ampleur que par sa nature. Il est clair qu’une partie non négligeable des utilisateurs de Twitter choisissent de se désinscrire en masse, et beaucoup ont été dirigés vers Mastodon, le logiciel le plus célèbre et le plus peuplé du Fediverse.</p>
<h3>Deux types de fêtes</h3>
<p>À Hobart, à la fin des années 1990, il y avait essentiellement trois boîtes de nuit. Elles étaient toutes plus ou moins louches, plus ou moins bruyantes, mais les gens y allaient parce que c’était là que les autres se trouvaient – pour s’amuser avec leurs amis, pour attirer l’attention, pour affirmer leur statut social, etc. Ça, c’est Twitter.</p>
<p>J’avais un ami qui vivait dans une colocation au coin d’un de ces clubs populaires. Il organisait des fêtes à la maison les week-ends. De petites fêtes, juste entre amis avec quelques amis d’amis. Ça, c’est le Fediverse.</p>
<h3>Déferlement</h3>
<p>Pour ceux d’entre nous qui utilisent Mastodon depuis un certain temps (j’ai lancé mon propre serveur Mastodon il y a 4 ans), cette semaine a été accablante. J’ai pensé à des métaphores pour essayer de comprendre pourquoi j’ai trouvé cela si bouleversant.</p>
<p>C’est censé être ce que nous voulions, non ? Pourtant, ça ressemble à autre chose. Comme lorsque vous êtes assis dans un wagon tranquille, discutant doucement avec quelques amis, et qu’une bande entière de supporters de football monte à la gare de <a href="https://en.wikipedia.org/wiki/Jolimont,_Western_Australia#/map/0">Jolimont</a> après la défaite de leur équipe. Ils n’ont pas l’habitude de prendre le train et ne connaissent pas le protocole. Ils supposent que tout le monde dans le train était au match ou du moins suit le football. Ils se pressent aux portes et se plaignent de la configuration des sièges.</p>
<p>Ce n’est pas entièrement la faute des personnes de Twitter. On leur a appris à se comporter d’une certaine manière. À courir après les <em>likes</em> et les <em>retweets</em>. À se mettre en valeur. À <em>performer</em>. Tout ce genre de choses est une malédiction pour la plupart des personnes qui étaient sur Mastodon il y a une semaine. C’est en partie la raison pour laquelle beaucoup sont venues à Mastodon en premier lieu, il y a quelques années.</p>
<p>Cela signifie qu’il s’est produit un choc culturel toute la semaine, pendant qu’une énorme déferlement de tweetos descendait sur Mastodon par vagues de plus en plus importantes chaque jour. Pour les utilisateurs de Twitter, c’est comme un nouveau monde déroutant, tandis qu’ils font le deuil de leur ancienne vie sur Twitter. Ils se qualifient de « réfugiés », mais pour les habitants de Mastodon, c’est comme si un bus rempli de touristes de Kontiki venait d’arriver, et qu’ils se baladaient en hurlant et en se plaignant de ne pas savoir comment commander le service d’étage. Nous aussi, nous regrettons le monde que nous sommes en train de perdre.</p>
<h3>Viral</h3>
<p>Samedi soir, j’ai publié un billet expliquant deux ou trois choses sur l’histoire de Mastodon concernant la gestion des nœuds toxiques sur le réseau. Puis tout s’est emballé. À 22 heures, j’avais verrouillé mon compte pour exiger que les abonnés soient approuvés et mis en sourdine tout le fil de discussion que j’avais moi-même créé.</p>
<p>Avant novembre 2022, les utilisateurs de Mastodon avaient l’habitude de dire pour blaguer que vous étiez « devenu viral » si vous obteniez plus de 5 repouets ou étoiles sur un post.</p>
<p>Au cours d’une semaine moyenne, une ou deux personnes pouvaient suivre mon compte. Souvent, personne ne le faisait. Et voilà que mon message recevait des centaines d’interactions. Des milliers. J’ai reçu plus de 250 demandes de suivi depuis lors – tellement que je ne peux pas supporter de les regarder, et je n’ai aucun critère pour juger qui accepter ou rejeter. En début de semaine, je me suis rendu compte que certaines personnes avaient <i>crossposté</i> mon billet sur le Mastodon sur Twitter. Quelqu’un d’autre en avait publié une capture d’écran sur Twitter.</p>
<p>Personne n’a pensé à me demander si je le voulais.</p>
<p>Pour les utilisateurs d’applications d’entreprise comme Twitter ou Instagram, cela peut ressembler à de la vantardise. Le but n’est-il pas de « devenir viral » et d’obtenir un grand nombre d’abonnés ? Mais pour moi, c’était autre chose. J’ai eu du mal à comprendre ce que je ressentais, ou à trouver le mot pour le décrire. J’ai finalement réalisé lundi que le mot que je cherchais était “traumatique”.</p>
<p>En octobre, j’avais des contacts réguliers avec une douzaine de personnes par semaine sur Mastodon, sur 4 ou 5 serveurs différents. Soudain, le fait que des centaines de personnes demandent (ou non) à se joindre à ces conversations sans s’être acclimatées aux normes sociales a été ressenti comme une violation, une agression. Je sais que je ne suis pas le seul à avoir ressenti cela.</p>
<p>Le fait que tous les administrateurs de serveurs Mastodon que je connais, y compris moi-même, aient été soudainement confrontés à un déluge de nouveaux inscrits, de demandes d’inscription (s’ils n’avaient pas d’inscription ouverte), puis aux inévitables surcharges des serveurs, n’a probablement pas aidé. Aus.social a cédé sous la pression, se mettant hors ligne pendant plusieurs heures alors que l’administrateur essayait désespérément de reconfigurer les choses et de mettre à niveau le matériel. <a href="https://chinwag.im/">Chinwag</a> a fermé temporairement les inscriptions. Même l’instance phare mastodon.social publiait des messages plusieurs heures après leur envoi, les messages étant créés plus vite qu’ils ne pouvaient être envoyés. J’observais nerveusement le stockage des fichiers sur ausglam.space en me demandant si j’arriverais à la fin du week-end avant que le disque dur ne soit plein, et je commençais à rédiger de nouvelles règles et conditions d’utilisation pour le serveur afin de rendre explicites des choses que « tout le monde savait » implicitement parce que nous pouvions auparavant <em>acculturer</em> les gens un par un.</p>
<p><a href="https://framablog.org/wp-content/uploads/2022/11/Screenshot-2022-11-10-at-09-16-18-Mastodon-Reseau-social-decentralise-1.png"><img loading="lazy" class="aligncenter size-full wp-image-28936" src="https://framablog.org/wp-content/uploads/2022/11/Screenshot-2022-11-10-at-09-16-18-Mastodon-Reseau-social-decentralise-1.png" alt=""></a></p>
<h3>Consentement</h3>
<p>Jusqu’à cette semaine, je n’avais pas vraiment compris – vraiment apprécié – à quel point les systèmes de publication des entreprises orientent le comportement des gens. Twitter encourage une attitude très extractive de la part de tous ceux qu’il touche. Les personnes qui ont republié mes articles sur Mastodon sur Twitter n’ont pas pensé à me demander si j’étais d’accord pour qu’ils le fassent. Les bibliothécaires qui s’interrogent bruyamment sur la manière dont ce “nouvel” environnement de médias sociaux pourrait être systématiquement archivé n’ont demandé à personne s’ils souhaitaient que leurs pouets sur le Fediverse soient capturés et stockés par les institutions gouvernementales. Les universitaires qui réfléchissent avec enthousiasme à la manière de reproduire leurs projets de recherche sur Twitter sur un nouveau corpus de pouets “Mastodon” n’ont pas pensé à se demander si nous voulions être étudiés par eux. Les personnes créant, publiant et demandant des listes publiques de noms d’utilisateurs Mastodon pour certaines catégories de personnes (journalistes, universitaires dans un domaine particulier, activistes climatiques…) ne semblaient pas avoir vérifié si certaines de ces personnes se sentait en sécurité pour figurer sur une liste publique. Ils ne semblent pas avoir pris en compte le fait qu’il existe des noms pour le type de personne qui établit des listes afin que d’autres puissent surveiller leurs communications. Et ce ne sont pas des noms sympathiques.</p>
<p>Les outils, les protocoles et la culture du Fediverse ont été construits par des féministes trans et queer. Ces personnes avaient déjà commencé à se sentir mises à l’écart de leur propre projet quand des personnes comme moi ont commencé à y apparaître il y a quelques années. Ce n’est pas la première fois que les utilisateurs de Fediverse ont dû faire face à un changement d’état significatif et à un sentiment de perte. Néanmoins, les principes de base ont été maintenus jusqu’à présent : la culture et les systèmes techniques ont été délibérément conçus sur des principes de consentement, d’organisation et de sécurité communautaires. Bien qu’il y ait certainement des améliorations à apporter à Mastodon en termes d’outils de modération et de contrôle plus fin des publications, elles sont en général nettement supérieures à l’expérience de Twitter. Il n’est guère surprenant que les personnes qui ont été la cible de trolls fascistes pendant la plus grande partie de leur vie aient mis en place des protections contre une attention non désirée lorsqu’elles ont créé une nouvelle boîte à outils pour médias sociaux. Ce sont ces mêmes outils et paramètres qui donnent beaucoup plus d’autonomie aux utilisateurs qui, selon les experts, rendent Mastodon « trop compliqué ».</p>
<p>Si les personnes qui ont construit le Fediverse cherchaient généralement à protéger les utilisateurs, les plateformes d’entreprise comme Twitter cherchent à contrôler leurs utilisateurs. Twitter revendique la juridiction sur tout le « contenu » de la plateforme. Les plaintes les plus vives à ce sujet proviennent de personnes qui veulent publier des choses horribles et qui sont tristes lorsque la bureaucratie de Twitter finit, parfois, par leur dire qu’elles n’y sont pas autorisées. Le vrai problème de cet arrangement, cependant, est qu’il modifie ce que les gens pensent du consentement et du contrôle de nos propres voix. Les universitaires et les publicitaires qui souhaitent étudier les propos, les graphiques sociaux et les données démographiques des utilisateurs de Twitter n’ont qu’à demander la permission à la société Twitter. Ils peuvent prétendre que, légalement, Twitter a le droit de faire ce qu’il veut de ces données et que, éthiquement, les utilisateurs ont donné leur accord pour que ces données soient utilisées de quelque manière que ce soit lorsqu’ils ont coché la case « J’accepte » des conditions de service. Il s’agit bien sûr d’une idiotie complète (les Condition Générales d’Utilisation sont impénétrables, changent sur un coup de tête, et le déséquilibre des pouvoirs est énorme), mais c’est pratique. Les chercheurs se convainquent donc qu’ils y croient, ou bien ils s’en fichent tout simplement.</p>
<p>Cette attitude a évolué avec le nouvel afflux. On proclame haut et fort que les avertissements de contenu sont de la censure, que les fonctionnalités qui ont été délibérément non mises en œuvre pour des raisons de sécurité de la communauté sont « manquantes » ou « cassées », et que les serveurs gérés par des bénévoles qui contrôlent qui ils autorisent et dans quelles conditions sont « excluants ». Aucune considération n’est donnée à la raison pour laquelle les normes et les possibilités de Mastodon et du Fediverse plus large existent, et si l’acteur contre lequel elles sont conçues pour se protéger pourrait être vous. Les gens de Twitter croient au même fantasme de « place publique » que la personne qu’ils sont censés fuir. Comme les Européens du quatorzième siècle, ils apportent la contagion avec eux lorsqu’ils fuient.</p>
<p><a href="https://framablog.org/wp-content/uploads/2022/11/pas-a-vendre-1.png"><img loading="lazy" class="aligncenter size-full wp-image-28931" src="https://framablog.org/wp-content/uploads/2022/11/pas-a-vendre-1.png" alt="" srcset="https://framablog.org/wp-content/uploads/2022/11/pas-a-vendre-1.png 733w, https://framablog.org/wp-content/uploads/2022/11/pas-a-vendre-1-300x127.png 300w" sizes="(max-width: 733px) 100vw, 733px"></a></p>
<h3>Anarchisme</h3>
<p>L’ironie de tout cela est que mon « fil de discussion viral » était largement consacré à la nature anarchiste et consensuelle du Fediverse. Beaucoup de nouveaux arrivants ont vu très vite que les administrateurs de leurs serveurs se battaient héroïquement pour que tout fonctionne, et ont donné de l’argent ou se sont inscrits sur un compte Patreon pour s’assurer que les serveurs puissent continuer à fonctionner ou être mis à niveau pour faire face à la charge. Les administrateurs se sont envoyés des messages de soutien privés et publics, partageant des conseils et des sentiments de solidarité. Les anciens partageaient des #FediTips pour aider à orienter les comportements dans une direction positive. Il s’agit, bien sûr, d’entraide.</p>
<p>C’est très excitant de voir autant de personnes expérimenter des outils sociaux en ligne anarchistes. Les personnes intelligentes qui ont conçu ActivityPub et d’autres protocoles et outils Fediverse l’ont fait de manière à échapper à la prédation monopolistique. Le logiciel est universellement libre et open source, mais les protocoles et les normes sont également ouverts et extensibles. Alors que beaucoup seront heureux d’essayer de reproduire ce qu’ils connaissent de Twitter – une sorte de combinaison de LinkedIn et d’Instagram, avec les 4chan et #auspol toujours menaçants – d’autres exploreront de nouvelles façons de communiquer et de collaborer. Nous sommes, après tout, des créatures sociales. Je suis surpris de constater que je suis devenu un contributeur régulier (comme dans « contributeur au code » 😲) à <a href="https://joinbookwyrm.com/">Bookwyrm</a>, un outil de lecture sociale (pensez à GoodReads) construit sur le protocole ActivityPub utilisé par Mastodon. Ce n’est qu’une des nombreuses applications et idées dans le Fediverse élargi. D’autres viendront, qui ne seront plus simplement des « X pour Fedi » mais plutôt de toutes nouvelles idées. Alors qu’il existe déjà des services commerciaux utilisant des systèmes basés sur ActivityPub, une grande partie des nouvelles applications seront probablement construites et exploitées sur la même base d’entraide et de volontariat qui caractérise actuellement la grande majorité du Fediverse.</p>
<h3>Chagrin</h3>
<p>Beaucoup de personnes ont été enthousiasmées par ce qui s’est passé cette semaine. Les nouveaux arrivants ont vu les possibilités du logiciel social fédéré. Les anciens ont vu les possibilités de la masse critique.</p>
<p>Mais il est important que ce ne soit pas la seule chose qu’on retienne du début de novembre 2022. Mastodon et le reste du Fediverse peuvent être très nouveaux pour ceux qui sont arrivés cette semaine, mais certaines personnes œuvrent et jouent dans le Fediverse depuis presque dix ans. Il existait déjà des communautés sur le Fediverse, et elles ont brusquement changé pour toujours.</p>
<p>J’ai été un utilisateur relativement précoce de Twitter, tout comme j’ai été un utilisateur relativement précoce de Mastodon. J’ai rencontré certains de mes meilleurs amis grâce à Twitter, qui a contribué à façonner mes opportunités de carrière. Je comprends donc et je compatis avec ceux qui ont fait le deuil de leur expérience sur Twitter – une vie qu’ils savent désormais terminée. Mais Twitter s’est lentement dégradé depuis des années – j’ai moi-même traversé ce processus de deuil il y a quelques années et, franchement, je ne comprends pas vraiment ce qui est si différent maintenant par rapport à il y a deux semaines.</p>
<p>Il y a un autre groupe, plus restreint, de personnes qui pleurent une expérience des médias sociaux qui a été détruite cette semaine – les personnes qui étaient actives sur Mastodon et plus largement le Fediverse, avant novembre 2022. La boîte de nuit a un nouveau propriétaire impétueux, et la piste de danse s’est vidée. Les gens affluent vers la fête tranquille du coin, cocktails à la main, demandant que l’on monte le volume de la musique, mettent de la boue sur le tapis, et crient par-dessus la conversation tranquille.</p>
<p>Nous avons tous perdu quelque chose cette semaine. Il est normal d’en faire le deuil.</p>

+ 403
- 0
cache/2022/4bdd8a682b8c7d31f518b6c6730179d2/index.html View File

@@ -0,0 +1,403 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Everything I know about Mastodon (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Everything I know about Mastodon</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>Hello there fellow data science person. Have you heard rumours that a lot of folks from our community are moving to use mastodon for social networking? Are you curious, but maybe not quite sure about how to get started? Have you been thinking “twitter is a hellsite and I need to escape” a lot lately?</p>
<p>If yes, this post is for you!</p>
<p>It’s written from the time-tested pedagogical perspective of “the writer who is only one chapter ahead of her audience in the textbook”. I’ve been on mastodon for a few days, but this isn’t my first rodeo over there: I signed up for it very early on several years ago, and tried again a few years after that. This time I’m a lot more enthusiastic about it than the last two, so I’m writing a quick introductory post to help my fellow data science folks test out the waters. I sort of know what I’m doing there but not completely!</p>
<p>If you want a more detailed guide on navigating Mastodon and the fediverse, I recommend <a href="https://fedi.tips/">fedi.tips</a>. There’s a lot of answers to common questions over there, from someone who actually does know what they are doing! Alternatively you can read <a href="https://mastodon.nz/@explorergrace/109272759764872091">this thread</a> which covers a lot of the same things I’m saying here!</p>
<p>Okay, let’s dive in…</p>

<div class="no-row-height column-margin column-container"><div class="">
<p>A mastodon, I suppose. Image freely available via <a href="https://pixabay.com/photos/woolly-mammoth-animal-prehistoric-2722882/">Pixabay</a></p>
</div></div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/mammoth.png" class="img-fluid figure-img"></p>
</figure>
</div>
<section id="what-is-mastodon-what-is-the-fediverse" class="level2">
<h2 class="anchored" data-anchor-id="what-is-mastodon-what-is-the-fediverse">What is Mastodon? What is the fediverse?</h2>
<p>If you’re entirely new to this, your mental model of mastodon is probably something like “mastodon is an open source twitter clone”. To a first approximation that’s right, but if you want to really feel at home there you’re going to want to refine that mental model in a few ways. Mastodon is very similar to twitter in design, but there are some important differences</p>
<p>First off, mastodon is not a single application: it’s a distributed network of servers that all talk to each other using a shared protocol. If two servers talk to each other they are said to be “federated” with one another, and the network as a whole is referred to as the “fediverse”.</p>
<p>There are many different servers out there that are independently running mastodon: these are called <strong>mastodon instances</strong>. You can sign up for an account at one or more of these servers. The most popular instance is <a href="https://mastodon.social/">mastodon.social</a>, but for reasons I’ll talk about in a moment this might not be the best choice for you! For example, my primary account is on <a href="https://fosstodon.org/">fosstodon.org</a> and my art-only account is on an instance for generative artists, <a href="https://genart.social/">genart.social</a>.</p>
<p>Fortunately, it usually doesn’t matter too much which instance you pick: the servers all communicate with each other so you can follow people on different servers, talk with them, etc, and it’s entirely possible to migrate your account from one server to another (I’ll talk about that later in the post). It’s only when you get into the details that it starts to matter!</p>
</section>
<section id="terminology-toots-and-boosts" class="level2">
<h2 class="anchored" data-anchor-id="terminology-toots-and-boosts">Terminology: Toots and boosts</h2>
<p>Posts on twitter are called “tweets” and have a 280 character limit. Posts on mastodon are called “toots” and have a 500 character limit. If you’re thinking of making a joke about “haha it’s called tooting” well fine, but there’s a pretty good chance that everyone has already heard it. Very few of us are actually that original :-)</p>
<p>Sharing someone else’s post on twitter is called a “retweet”. The mastodon equivalent is called “boosting”. One deliberate design choice on mastodon is that there is no analog of “quote retweeting”: you can either boost someone else’s toot and you can post your own. You can’t share someone else’s post to your own followers with your commentary added. This is a <a href="https://fedi.tips/how-to-use-mastodon-and-the-fediverse-basic-tips/#WhyCantIQuoteOtherPostsInMastodon">deliberate design choice to prevent people from “dunking” on each other</a>.</p>
</section>
<section id="mastodon-handles-and-tags-look-like-email-addresses" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="mastodon-handles-and-tags-look-like-email-addresses">Mastodon handles and tags look like email addresses</h2>
<p>On twitter, you simply have a username: I’m <a href="https://twitter.com/djnavarro">djnavarro</a> there, and people would tag me into a conversation by typing <strong><span class="citation" data-cites="djnavarro">@djnavarro</span></strong>.</p>
<p>On mastodon, you have to specify both your username and the server. It’s more like an email address. My primary handle on mastodon is <a href="%5Bdjnavarro@fosstodon.org%5D(https://fosstodon.org/@djnavarro)">djnavarro@fosstodon.org</a> and people can tag me into a conversation by typing <strong><span class="citation" data-cites="djnavarro">@djnavarro</span><span class="citation" data-cites="fosstodon.org">@fosstodon.org</span></strong>.</p>
<p>It looks a little odd when you’re used to twitter, but it gets easier.</p>
<p><img src="./img/arawark-chen-tId6clbHnD4-unsplash.jpg" class="img-fluid"></p>

<div class="no-row-height column-margin column-container"><div class="">
<p>A handle. Image credit: <a href="https://unsplash.com/photos/tId6clbHnD4">Arawark chen</a>. Freely available via unsplash</p>
</div></div></section>

<section id="which-server-should-i-sign-up-on" class="level2">
<h2 class="anchored" data-anchor-id="which-server-should-i-sign-up-on">Which server should I sign up on?</h2>
<p>There’s a nicely <a href="https://fediscience.org/server-list.html">server list at fediscience.org</a> that has some commentaries. Here’s a few possibilities you might consider:</p>
<ul>
<li><p><a href="https://mastodon.social">mastodon.social</a>: The largest instance. It’s general interest, so you get a reasonably diverse audience. However it’s also the focal point so any time there’s a wave of migrations from twitter it will probably be the first one to show performance hits.</p></li>
<li><p><a href="https://fosstodon.org">fosstodon.org</a>: An instance with a focus on open source software. There are a lot of tech people on this one, which means you can watch the local timeline scroll by (more on that coming!) and see lots of random techy posts.</p></li>
<li><p><a href="https://fediscience.org">fediscience.org</a>: A science focused instance, including natural and social sciences.</p></li>
<li><p><a href="https://vis.social">vis.social</a>: Lots of cool data visualisation folks here.</p></li>
<li><p><a href="https://tech.lgbt">tech.lgbt</a>: An instance for folks who work in tech, science, academia, etc who are LGBTIQ or allies.</p></li>
</ul>
<p>For any server, you should look carefully at the server rules that will be posted on the “About” page. Each server has different policies that will affect moderation. Don’t sign up for vis.social if you want to post about NFTs (I’ll talk about NFTs later actually), and don’t join fosstodon.org if you want to post in languages other than English. Don’t join any of these servers if you want to post anti-trans content.</p>
<p>Take a little time to look around but don’t worry about the choice too much. You can move your account across servers without too much difficulty if you need to, and I’ll show you how later in the post.</p>
</section>
<section id="can-you-tell-me-about-the-web-interface" class="level2">
<h2 class="anchored" data-anchor-id="can-you-tell-me-about-the-web-interface">Can you tell me about the web interface?</h2>
<p>Okay so you’ve decided on a server, signed up for an account, and are ready to get started. Let’s take a look at the interface!</p>
<p>For the purposes of this post I’ll assume you’re looking to get started by using the web interface. There are, unsurprisingly, apps you can download onto your phone (e.g., I’m using the standard mastodon app on iOS), but I’m trying not to complicate things in this post so let’s assume you’re using your laptop and are browsing through the web interface!</p>
<p>My main account is <a href="https://fosstodon.org/@djnavarro">djnavarro@fosstodon.org</a>. In my browser I’m logged in already, so when I navigate to <a href="https://fosstodon.org">fosstodon.org</a> I’m automatically shown the logged in view. There are two versions you can choose between, the “standard view” and the “advanced view”.</p>
<p>The “standard view” interface looks pretty similar to what you’d expect from twitter. On the left you can write posts, in the middle there’s a column where your feed is shown (I’ve edited these screenshots to remove the actual posts, just so we can focus on interface), and on the right sidebar there’s a menu with various options you can click on:</p>
<p><img src="./img/standard_view.png" class="img-fluid"></p>
<p>In a lot of cases this view will work well for you, but if you want to track hashtags – more on that later because hashtags are important! – you might find it useful to switch to the “advanced view”. To switch, click on the “Preferences” option on the right hand side, which brings up a preferences screen that looks like this:</p>
<p><img src="./img/appearance_settings.png" class="img-fluid"></p>
<p>Click on the “Enable advanced web interface” option, like I’ve done here, and click save changes. When you then go back to mastodon, the interface will have changed to one that looks very similar to the Tweetdeck interface that a lot of folks on Twitter use:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/advanced_view.png" class="img-fluid"></p>
<p>There are more columns. As before, the left column shows an area where you can compose posts, and on the right column a menu with options is shown. Posts will appear in the “Home” column. Mentions, favourites (similar to Twitter “likes”), and boosts (similar to Twitter retweets), will be shown in the “Notifications” column.</p>
</section>
<section id="how-do-i-make-a-post" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="how-do-i-make-a-post">How do I make a post?</h2>
<p>Writing a post on mastodon is similar to how you would write a post on twitter. The compose window looks like this:</p>

<p>You type the text you want into the box, adding hashtags, and then click the “Toot!” button (it may look different on your instance – I’ve seen the same button labelled “Post” sometimes). As you type, you’ll see the character count in the bottom right corner change to let you know how many characters you have left: you’re allowed 500 characters for a post on mastodon.</p>
<p>The nuances are important though. Those other buttons on the bottom left… those are all useful features. From left to right:</p>
<ul>
<li><p>The paperclip button: clicking this will let you attach an image. When you do, there will be an option to edit the image and (especially important!) to add alt text for accessibility purposes. Mastodon has a stronger norm about alt text than twitter: <em>always</em> add alt text. I have a section on alt text later in this post.</p></li>
<li><p>The barchart button: this will let you add a poll. Polls on mastodon work similarly to twitter, but are a bit more flexible. You can add more options and let users select multiple options.</p></li>
<li><p>The world button: this will let you set the visibility for the post. If you click on it you will see four options: “public” means everyone can view it, “unlisted” means everyone can view it but it doesn’t get indexed by discovery features (very handy in replies and threads where you don’t want everyone to be automatically shown your comment), “followers only” means only your followers can see it, and “mentioned people only” means only the people mentioned can see it. This last one is effectively how direct messages work on mastodon, which is important to note because posts aren’t end-to-end encrypted. Do not treat your mastodon direct messages as private (see later).</p></li>
<li><p>The “CW” button: This is used to attach content warnings to your post. Use this button! It’s important. I cannot stress this enough: the content warning button is right there, and it is considered extremely poor form in the fediverse to force your followers to look at content they might not want to see. There is a whole section on this later, but remember that mastodon is not twitter – people will mute you or choose not to share your post if you don’t use content warnings appropriately. In fact, if you consistently boost posts that don’t have content warnings when they should, people may unfollow you also.</p></li>
<li><p>The “EN” button: This is used to specify the language in which the post is written. Clicking on it will show you a dropdown list you can use to select the language.</p></li>
</ul>
<p>Try to use these features: it makes a difference!</p>

<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/kristina-tripkovic-8Zs5H6CnYJo-unsplash.jpg" class="img-fluid"></p>
</section>

<section id="tracking-hashtags" class="level2">
<h2 class="anchored" data-anchor-id="tracking-hashtags">Tracking hashtags</h2>
<p>Speaking of which, perhaps you want to monitor a hashtag. Maybe you even want to follow the hashtag, so that every post that has that hashtag will appear in your mastodon feed. Good news, you can!</p>
<p>From what I can tell, this is something where your options might be a little different on each server. For instance, on mastodon.social you can follow a hashtag directly in the standard view: when you search for a hashtag there will be a little “follow” icon that appears that you can click on (see <a href="https://fedi.tips/how-to-use-mastodon-and-the-fediverse-advanced-tips/#FollowingHashtags">this comment on fedi.tips</a>). When you do that, posts with that hashtag will appear in your feed. However, not every server implements this: fosstodon.org doesn’t do that right now.</p>
<p>So let’s go with a method that seems to work everywhere I’ve looked. This <a href="https://mastodon.nz/@thoughtfulnz/109278289508807509">post by David Hood</a> summarises it in a single image, but I’ll go through it more slowly here…</p>
<p>First off, you’ll need to be in “advanced view” to do this. That’s the one with lots of columns that I showed earlier in the post. You can customise this view by adding columns that correspond to the hashtags you want to follow. For example, let’s say I want to follow the <strong>#rstats</strong> hashtag. The first thing I’d do is type <strong>#rstats</strong> into the search bar (in the top left corner). The results will be shown directly below the search bar, like this:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/searching_hashtag.png" class="img-fluid"></p>
<p>These are clickable links. When I click on the <strong>#rstats</strong> hashtag in the results, a new column appears… containing a chronological feed that consists of posts tagged with <strong>#rstats</strong>:</p>
<p><img src="./img/rstats_column.png" class="img-fluid"></p>
<p>Again, in real life this won’t be empty: you’ll actually see the posts! You are now tracking <strong>#rstats</strong> on mastodon, albeit temporarily.</p>
<p>Suppose you want to make sure the column sticks around every time you open mastodon. We can “pin” the column in place. To do that, I click on the little “settings” icon at the top right of the <strong>#rstats</strong> column. It’s the one on the far right here:</p>

<p>When you do that, you will see a small menu that gives you the option to pin! Easy.</p>
<p>We can make our <strong>#rstats</strong> column more useful. For example, there are several hashtags I want to bundle together when following R content: <strong>#TidyTuesday</strong>, <strong>#TidyModels</strong>, and <strong>#ggplot2</strong>. I don’t want a separate column for each one, I want to group them into a single feed. Click on that little settings button again. Now you’ll see a richer menu:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/add_hashtags.png" class="img-fluid"></p>
<p>One of the options there is “include additional tags”. When I click on that, I can type in the other hashtags to track:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/multitag.png" class="img-fluid"> And now we are done! I have a feed that tracks R related content on mastodon.</p>
</section>
<section id="why-are-content-warnings-everywhere" class="level2">
<h2 class="anchored" data-anchor-id="why-are-content-warnings-everywhere">Why are content warnings everywhere?</h2>
<p>One huge – and hugely important – difference between twitter and mastodon is that mastodon has a system that allows users to mask their posts behind content warnings. Now… if you’re coming from twitter you might be thinking “oh that doesn’t apply to me I don’t post offensive content”.</p>
<p>If that’s what you’re thinking, allow me to disabuse you of that notion quickly. Content warnings are not about “hiding offensive content”, they are about being kind to your audience. This <a href="https://robot.rodeo/@mike/109270985467672999">thread by Mike McHargue</a> is a very good summary. The whole thread is good, but I’ll quote the first part here:</p>
<blockquote class="blockquote">
<p>If you’re part of the <strong>#twittermigration</strong>, it may seem strange the people use CWs so much here. But, CWs are really helpful. So much of our world is overwhelming, and feed presentation can bombard our nervous systems with triggers. CWs give people time and space to engage with that they have the resources to engage with. It gives them agency. I follow news and politics AND it’s helpful for my PTSD to have the chance to take a deep breath <em>before</em> I see a post.</p>
</blockquote>
<p>If you’re posting about politics, that should be hidden behind a content warning. If you’re posting about sexual assault, definitely use a content warning. If you’re posting about trans rights, again put it behind a content warning.</p>
<p>You should use the content warning even – or perhaps especially – when you think your post is this is an important social justice issue that other people <em>need</em> to see, because there is a really good chance that people whose lives are affected by it will be part of the audience… and yes, some of us have PTSD.</p>
<div class="callout-warning callout callout-style-default callout-captioned">

<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<p>I’ll give examples relevant to my own experience.</p>
<p>I get really, really angry when people post about trans rights without a content warning. Same with sexual assault. Why? Well, because I am transgender and I am frightened about the general direction the world is headed for people like me. I am not an activist and I don’t have the kind of resilience needed to constantly hear all the worst stories in the world about attacks against people like me. It’s one of the big reasons I left twitter: twitter algorithms prioritise engagement, and I cannot help but engage with this content because I am afraid. My experience on twitter is one of emotional abuse: twitter keeps showing me my worst fears and I click on them because the threats are real. I don’t appreciate it when my friends try to support me by <em>forcing me to see even more of that content</em>. For that reason, if you want to be supportive of people like me, use a content warning when posting about trans rights.</p>
<p>An even more extreme example relevant to my personal experience is sexual assault. I am a rape survivor. Every time there is a highly visible discussion about sexual assault (e.g., the Brett Kavanaugh hearings in the US, the Brittney Higgins discussions in Australia), I would get bombarded with content about rape. Over and over again. Sometimes it would trigger panic attacks and rape flashbacks.</p>
<p>When you post those things without providing me a content warning to help me make an informed choice, what you’re really telling me is that you simply don’t care if you’re forcing me to relive the experience of being raped.</p>
</div>
</div>
</div>
<p>So if you’re thinking about posting about these topics, the question of “should I attach a content warning?” isn’t a matter of “is this important?” it’s a matter of “could I be causing distress to people?” When you answer that question, don’t think about the typical case, think about that 1% of people who might be most severely affected and the reasons why.</p>
<p>Please, please, please… take content warnings seriously. Even if you’re “just posting about politics” or “venting some feelings”. It’s a kindness and courtesy to your audience.</p>
<p>Mastodon isn’t twitter.</p>
</section>
<section id="how-do-i-add-a-content-warning" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="how-do-i-add-a-content-warning">How do I add a content warning?</h2>
<p>Hopefully the previous section has convinced you that you should use content warnings and err on the side of caution when deciding when to use them. Your next question is probably: how do I add a content warning?</p>
<p>Luckily, it is super easy. It’s so simple that it fits into a single toot, like <a href="https://infosec.exchange/@Em0nM4stodon/109282181601490676">this post by Em on infosec.exchange</a>. Here’s how.</p>
<ol type="1">
<li><p>In the composer box, click on the little “CW” button. This will reveal an extra title field that says “Write your warning here”.</p>
</li>
<li><p>Write a brief but informative message in that title field. This could be something very serious like “Sexual assault discussion”, but it could also be something mild like “Spoiler alert: The Good Wife season 5” or something like “Photo with direct eye contact”. Even things like “US politics” or “Australian politics” can be helpful.</p></li>
<li><p>Write your post. (Okay you could write the post first and the content warning text after. Whatever)</p></li>
<li><p>When you post it, other users will only be shown the title field at first. If they decide they want to read, they can click on the post, and then the full text will be revealed.</p></li>
<li><p>Profit! Everybody is happy.</p></li>
</ol>
<p>Content warnings are good for everybody.</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/fleur-Ahs_MHU8y1s-unsplash.jpg" class="img-fluid"></p>

<div class="no-row-height column-margin column-container"><div class="">
<p>A warning. Image credit: <a href="https://unsplash.com/photos/Ahs_MHU8y1s">Fleur</a>. Freely available via unsplash</p>
</div></div></section>
<section id="how-can-i-make-threads" class="level2">
<h2 class="anchored" data-anchor-id="how-can-i-make-threads">How can I make threads?</h2>
<p>Making threads on mastodon is pretty similar to twitter. Just post each new toot as a reply to the previous one. Problem solved!</p>
<p>There is one subtlety to be aware of though, which is described in this <a href="https://scicomm.xyz/@quokka/109274732847484553">thread by Quokka on scicomm.xyz</a>. Remember earlier I mentioned that you can set the visibility of each post? The polite way to do a thread is set the <em>first</em> post to “public”, and then all the later ones to <em>unlisted</em>. The reason for that is that all public posts (including replies) will show up in various timelines. Usually, that’s not what you want. What you want is something where the first post reads “I have this important and exciting thing to to talk about: A thread…”, and only that first post shows up on people’s timelines. Then if they’re interested they can click on the first post and the rest of the thread will be revealed. That’s why people on mastodon usually set the first post to public and the later ones to unlisted.</p>
</section>

<section id="what-are-the-local-and-federated-timelines" class="level2">
<h2 class="anchored" data-anchor-id="what-are-the-local-and-federated-timelines">What are the local and federated timelines?</h2>
<p>At some point on mastodon you will find yourself discovering the local timeline and the federated timeline. There are links to these on the right hand side of the interface. The local timeline is every public-visibility post on your server, shown chronologically. This timeline has a very different feel on different servers. On <a href="https://fosstodon.org/">fosstodon.org</a> my local timeline has a lot of people posting about tech; on <a href="https://genart.social/">genart.social</a> it shows a lot of generative art.</p>
<p>The federated timeline is slightly different: it shows all public posts from all users who are “known” to your instance. That is, it includes every user on your instance, but it also includes everyone that users on your instance follow – even if those users are on other servers. It’s not the same thing as “every user on mastodon” though. People on <a href="https://genart.social/">genart.social</a> tend to follow other artists, so there is still a local “flavour” to the posts from outside the instance: they reflect people and topics that the users on your instance are interested in.</p>
<p>These timelines are useful for discovery purposes, and they’re also a reason to think carefully about the instance you’re on. It’s easier to find tech content on a tech-focused server!</p>
</section>
<section id="how-do-i-move-my-account-to-a-new-server" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="how-do-i-move-my-account-to-a-new-server">How do I move my account to a new server?</h2>
<p>So that brings me naturally to a question… what if you realise you’ve made a mistake and you want to change instances? This happens to many of us at one point or another. For instance, I initially signed up as <strong>djnavarro@mastodon.social</strong>. That wasn’t ideal for me: the server is a bit too big, it was being very slow at the time, and the content isn’t focused on things I wanted to see. So I decided I wanted to move, and become <strong>djnavarro@fosstodon.org</strong>.</p>
<p>A very nice feature of mastodon is that you can “migrate” your account, so that when you switch accounts all your followers will come along for the ride! Here’s how you do it:</p>
<p><strong>Step 1: Prepare the way</strong></p>
<ol type="1">
<li>It’s probably a good idea to post from your old account that you’re about to initiate a move. That way people will not be surprised when they find themselves following a new account (I didn’t do this… I should have. Oops!)</li>
<li>Set up your account, with the avatar, bio, etc on the new account using the same (or similar) images and descriptions on the old account: anyone who clicks through on the new account will see that it’s you!</li>
</ol>
<p><strong>Step 2: Export your follows from the old account</strong></p>
<p>When you migrate, it takes your followers across automatically. It doesn’t automatically make your new account follow everyone you were following on the old account. Luckily you don’t have to manually re-follow everyone. Instead, you export a csv file with the list of everyone you’re following at the old account, and later on you can import it as a follow list on the new one. Here’s how we export the csv at the old account:</p>
<ol type="1">
<li>Click on the “preferences” option</li>
<li>Within preferences, select “import and export”</li>
<li>On the data export page, you’ll see a list of possible csv files you can download. Download the ones you want, especially the “follows” csv.</li>
</ol>
<p><strong>Step 3: Set up alias on the new account</strong></p>
<p>Mastodon requires both accounts to authorise the move in some fashion, to prevent anyone from trying to steal other people’s accounts. First, your new account needs to signal that yes, it does wish to be an “alias” for your old account. From the new account – <strong>djnavarro@fosstodon.org</strong> for me – we need to set that up:</p>
<ol type="1">
<li>Click on the “preferences” options</li>
<li>Within preferences, select “account”</li>
<li>On the account settings page, scroll down to the bottom to the section called “moving from a different account” and click on the link “create an account alias”</li>
<li>On the account aliases page, specify the handle of your old account – e.g., <strong>djnavarro@mastodon.social</strong> in my case – and click “create alias”</li>
</ol>
<p>You’re done: the alias is set up. You may have to wait a while for this to propagate to the old account. When I moved I had to wait overnight because mastodon.social was running very slowly due to the massive spike of new users from twitter. Hopefully it won’t be that long for most people now.</p>
<p><strong>Step 4: Initiate the move from the old account</strong></p>
<p>With the new account now signalling that it is ready to be an alias for the old one, we can authorise the move from the old account. On the old account (i.e., <strong>djnavarro@mastodon.social</strong> for me) do the following:</p>
<ol type="1">
<li>Click on the “preferences” options</li>
<li>Within preferences, select “account”</li>
<li>On the account settings page, scroll down to the bottom to the section called “moving to a different account” and click on the link “configure it here”</li>
<li>On the moving accounts page, type the handle of the new account – in my case <strong>djnavarro@fosstodon.org</strong> – and enter the password for your old account to confirm. Click “move followers”.</li>
</ol>
<p>This will initiate the move. All your followers at the old account will automatically unfollow the old account and then follow the new one. It’ll take a little while and it might happen in bursts.</p>
<p><strong>Step 5: Import your follows at the new account</strong></p>
<p>The last step (optionally) is to have your new account re-follow everyone from that you were following at the old account. We can do that using the csv that you downloaded in step 2. So, again from your new account:</p>
<ol type="1">
<li>Click on the “preferences” options</li>
<li>Within preferences, select “import and export”</li>
<li>On the menu on the left, click the “import” submenu</li>
<li>On the import screen, select the import type (e.g., “following list”), click on “browse” to select the csv file you exported earlier, and then click “upload”.</li>
</ol>
<p>Your new account will now automatically follow all the accounts your old account followed.</p>
<p>With any luck, you are now successfully moved into your new account!</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/michal-balog-66NaCdBrkCs-unsplash.jpg" class="img-fluid"></p>

<div class="no-row-height column-margin column-container"><div class="">
<p>Moving. Image credit: <a href="https://unsplash.com/photos/66NaCdBrkCs">Michal Balog</a>. Freely available via unsplash</p>
</div></div></section>
<section id="etiquette-on-alt-text" class="level2">
<h2 class="anchored" data-anchor-id="etiquette-on-alt-text">Etiquette on alt-text?</h2>
<p>On twitter, you’ve probably found that there’s some pressure and expectation to supply alt-text for your images. The norm is <a href="https://mastodon.art/@Curator/109279035107793247">much stronger on mastodon</a>: people will expect that images have alt-text, and that the alt-text be informative. Here’s a walkthrough. First I might start writing a post, and after clicking on the paperclip icon to attach an image, I have a screen that looks like this:</p>

<p>As usual I’d write the content of my post in the composer box, but I would also click on the “edit” link in the top-right hand corner of my image. That brings up the image editing screen that looks like this:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/image_editing.png" class="img-fluid"></p>
<p>There are two things I usually do with this. On the right hand side I can drag and drop the focus circle around to help improve the image preview that gets shown to users. More importantly, on the left hand side I can write my alt-text. For some images it’s easy to come up with a good description, for others it is hard. For something like this one I’d usually aim to write a short paragraph that captures this information:</p>
<ul>
<li>this is generative art made with R</li>
<li>the title of the piece is “Gods of Salt, Stone, and Storm”</li>
<li>the palette is blue/green with a hint of white against a very dark background</li>
<li>the image is comprised of swirling patterns throughout</li>
<li>the overall impression is something akin to dark storm clouds overhead or maybe unsettled seas</li>
</ul>
<p>It’s not a perfect description, but it does capture what I think is important about the artwork.</p>
</section>
<section id="etiquette-on-nfts" class="level2">
<h2 class="anchored" data-anchor-id="etiquette-on-nfts">Etiquette on NFTs?</h2>
<p>A lot of artists on twitter, especially generative artists, like to post NFTs. It’s understandable: for generative artists, it’s the one reliable income stream they have for their art. However, you need to be very, very careful. NFTs are not well liked on the fediverse, and a lot of servers have outright bans on any form of NFT posting. For instance, you cannot post about NFTs at all on <a href="https://vis.social">vis.social</a> or <a href="https://mastodon.art">mastodon.art</a>. It is written into the server rules, so you should not sign up on those servers if that’s something you’re interested in. However, even on servers that do permit NFTs, there is often a strong suggestion that you should be polite and respect the preferences that folks outside the instance will have. For example, the generative art instance I’m on <a href="https://genart.social">genart.social</a> does not impose an outright ban on NFTs but it is discouraged, and in the rare instance that you do post NFT content, it must be behind a content warning.</p>
<p>Personally I’ve stopped even trying to make money from my art, so it doesn’t affect me: I’ve given up. I’m only bothering to mention it here because I don’t want to see generative art folks run afoul of the local norms.</p>
</section>

<section id="etiquette-on-bots-and-automated-accounts" class="level2">
<h2 class="anchored" data-anchor-id="etiquette-on-bots-and-automated-accounts">Etiquette on bots and automated accounts?</h2>
<p>Bots are allowed on mastodon, but you should check the local server rules and you should make certain that the bot is marked as an automated account in the account preferences.</p>
</section>
<section id="direct-messages-and-privacy" class="level2">
<h2 class="anchored" data-anchor-id="direct-messages-and-privacy">Direct messages and privacy</h2>
<p>As a final point, a note on direct messages. Direct messages on mastodon are just regular posts whose visibility is set to include only those people tagged in that post. That’s all. This is important to recognise because – at present – posts are not transmitted with end-to-end encryption: they are “private” only in the sense that a postcard is private or an unencrypted email is private. They won’t be broadcast to anyone else, but they aren’t secured while in transit.</p>
<p>You should never send any sensitive information via mastodon.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 235
- 0
cache/2022/4bdd8a682b8c7d31f518b6c6730179d2/index.md View File

@@ -0,0 +1,235 @@
title: Everything I know about Mastodon
url: https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/
hash_url: 4bdd8a682b8c7d31f518b6c6730179d2

<p>Hello there fellow data science person. Have you heard rumours that a lot of folks from our community are moving to use mastodon for social networking? Are you curious, but maybe not quite sure about how to get started? Have you been thinking “twitter is a hellsite and I need to escape” a lot lately?</p>
<p>If yes, this post is for you!</p>
<p>It’s written from the time-tested pedagogical perspective of “the writer who is only one chapter ahead of her audience in the textbook”. I’ve been on mastodon for a few days, but this isn’t my first rodeo over there: I signed up for it very early on several years ago, and tried again a few years after that. This time I’m a lot more enthusiastic about it than the last two, so I’m writing a quick introductory post to help my fellow data science folks test out the waters. I sort of know what I’m doing there but not completely!</p>
<p>If you want a more detailed guide on navigating Mastodon and the fediverse, I recommend <a href="https://fedi.tips/">fedi.tips</a>. There’s a lot of answers to common questions over there, from someone who actually does know what they are doing! Alternatively you can read <a href="https://mastodon.nz/@explorergrace/109272759764872091">this thread</a> which covers a lot of the same things I’m saying here!</p>
<p>Okay, let’s dive in…</p>

<div class="no-row-height column-margin column-container"><div class="">
<p>A mastodon, I suppose. Image freely available via <a href="https://pixabay.com/photos/woolly-mammoth-animal-prehistoric-2722882/">Pixabay</a></p>
</div></div><div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/mammoth.png" class="img-fluid figure-img"></p>
</figure>
</div>
<section id="what-is-mastodon-what-is-the-fediverse" class="level2">
<h2 class="anchored" data-anchor-id="what-is-mastodon-what-is-the-fediverse">What is Mastodon? What is the fediverse?</h2>
<p>If you’re entirely new to this, your mental model of mastodon is probably something like “mastodon is an open source twitter clone”. To a first approximation that’s right, but if you want to really feel at home there you’re going to want to refine that mental model in a few ways. Mastodon is very similar to twitter in design, but there are some important differences</p>
<p>First off, mastodon is not a single application: it’s a distributed network of servers that all talk to each other using a shared protocol. If two servers talk to each other they are said to be “federated” with one another, and the network as a whole is referred to as the “fediverse”.</p>
<p>There are many different servers out there that are independently running mastodon: these are called <strong>mastodon instances</strong>. You can sign up for an account at one or more of these servers. The most popular instance is <a href="https://mastodon.social/">mastodon.social</a>, but for reasons I’ll talk about in a moment this might not be the best choice for you! For example, my primary account is on <a href="https://fosstodon.org/">fosstodon.org</a> and my art-only account is on an instance for generative artists, <a href="https://genart.social/">genart.social</a>.</p>
<p>Fortunately, it usually doesn’t matter too much which instance you pick: the servers all communicate with each other so you can follow people on different servers, talk with them, etc, and it’s entirely possible to migrate your account from one server to another (I’ll talk about that later in the post). It’s only when you get into the details that it starts to matter!</p>
</section>
<section id="terminology-toots-and-boosts" class="level2">
<h2 class="anchored" data-anchor-id="terminology-toots-and-boosts">Terminology: Toots and boosts</h2>
<p>Posts on twitter are called “tweets” and have a 280 character limit. Posts on mastodon are called “toots” and have a 500 character limit. If you’re thinking of making a joke about “haha it’s called tooting” well fine, but there’s a pretty good chance that everyone has already heard it. Very few of us are actually that original :-)</p>
<p>Sharing someone else’s post on twitter is called a “retweet”. The mastodon equivalent is called “boosting”. One deliberate design choice on mastodon is that there is no analog of “quote retweeting”: you can either boost someone else’s toot and you can post your own. You can’t share someone else’s post to your own followers with your commentary added. This is a <a href="https://fedi.tips/how-to-use-mastodon-and-the-fediverse-basic-tips/#WhyCantIQuoteOtherPostsInMastodon">deliberate design choice to prevent people from “dunking” on each other</a>.</p>
</section>
<section id="mastodon-handles-and-tags-look-like-email-addresses" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="mastodon-handles-and-tags-look-like-email-addresses">Mastodon handles and tags look like email addresses</h2>
<p>On twitter, you simply have a username: I’m <a href="https://twitter.com/djnavarro">djnavarro</a> there, and people would tag me into a conversation by typing <strong><span class="citation" data-cites="djnavarro">@djnavarro</span></strong>.</p>
<p>On mastodon, you have to specify both your username and the server. It’s more like an email address. My primary handle on mastodon is <a href="%5Bdjnavarro@fosstodon.org%5D(https://fosstodon.org/@djnavarro)">djnavarro@fosstodon.org</a> and people can tag me into a conversation by typing <strong><span class="citation" data-cites="djnavarro">@djnavarro</span><span class="citation" data-cites="fosstodon.org">@fosstodon.org</span></strong>.</p>
<p>It looks a little odd when you’re used to twitter, but it gets easier.</p>
<p><img src="./img/arawark-chen-tId6clbHnD4-unsplash.jpg" class="img-fluid"></p>

<div class="no-row-height column-margin column-container"><div class="">
<p>A handle. Image credit: <a href="https://unsplash.com/photos/tId6clbHnD4">Arawark chen</a>. Freely available via unsplash</p>
</div></div></section>

<section id="which-server-should-i-sign-up-on" class="level2">
<h2 class="anchored" data-anchor-id="which-server-should-i-sign-up-on">Which server should I sign up on?</h2>
<p>There’s a nicely <a href="https://fediscience.org/server-list.html">server list at fediscience.org</a> that has some commentaries. Here’s a few possibilities you might consider:</p>
<ul>
<li><p><a href="https://mastodon.social">mastodon.social</a>: The largest instance. It’s general interest, so you get a reasonably diverse audience. However it’s also the focal point so any time there’s a wave of migrations from twitter it will probably be the first one to show performance hits.</p></li>
<li><p><a href="https://fosstodon.org">fosstodon.org</a>: An instance with a focus on open source software. There are a lot of tech people on this one, which means you can watch the local timeline scroll by (more on that coming!) and see lots of random techy posts.</p></li>
<li><p><a href="https://fediscience.org">fediscience.org</a>: A science focused instance, including natural and social sciences.</p></li>
<li><p><a href="https://vis.social">vis.social</a>: Lots of cool data visualisation folks here.</p></li>
<li><p><a href="https://tech.lgbt">tech.lgbt</a>: An instance for folks who work in tech, science, academia, etc who are LGBTIQ or allies.</p></li>
</ul>
<p>For any server, you should look carefully at the server rules that will be posted on the “About” page. Each server has different policies that will affect moderation. Don’t sign up for vis.social if you want to post about NFTs (I’ll talk about NFTs later actually), and don’t join fosstodon.org if you want to post in languages other than English. Don’t join any of these servers if you want to post anti-trans content.</p>
<p>Take a little time to look around but don’t worry about the choice too much. You can move your account across servers without too much difficulty if you need to, and I’ll show you how later in the post.</p>
</section>
<section id="can-you-tell-me-about-the-web-interface" class="level2">
<h2 class="anchored" data-anchor-id="can-you-tell-me-about-the-web-interface">Can you tell me about the web interface?</h2>
<p>Okay so you’ve decided on a server, signed up for an account, and are ready to get started. Let’s take a look at the interface!</p>
<p>For the purposes of this post I’ll assume you’re looking to get started by using the web interface. There are, unsurprisingly, apps you can download onto your phone (e.g., I’m using the standard mastodon app on iOS), but I’m trying not to complicate things in this post so let’s assume you’re using your laptop and are browsing through the web interface!</p>
<p>My main account is <a href="https://fosstodon.org/@djnavarro">djnavarro@fosstodon.org</a>. In my browser I’m logged in already, so when I navigate to <a href="https://fosstodon.org">fosstodon.org</a> I’m automatically shown the logged in view. There are two versions you can choose between, the “standard view” and the “advanced view”.</p>
<p>The “standard view” interface looks pretty similar to what you’d expect from twitter. On the left you can write posts, in the middle there’s a column where your feed is shown (I’ve edited these screenshots to remove the actual posts, just so we can focus on interface), and on the right sidebar there’s a menu with various options you can click on:</p>
<p><img src="./img/standard_view.png" class="img-fluid"></p>
<p>In a lot of cases this view will work well for you, but if you want to track hashtags – more on that later because hashtags are important! – you might find it useful to switch to the “advanced view”. To switch, click on the “Preferences” option on the right hand side, which brings up a preferences screen that looks like this:</p>
<p><img src="./img/appearance_settings.png" class="img-fluid"></p>
<p>Click on the “Enable advanced web interface” option, like I’ve done here, and click save changes. When you then go back to mastodon, the interface will have changed to one that looks very similar to the Tweetdeck interface that a lot of folks on Twitter use:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/advanced_view.png" class="img-fluid"></p>
<p>There are more columns. As before, the left column shows an area where you can compose posts, and on the right column a menu with options is shown. Posts will appear in the “Home” column. Mentions, favourites (similar to Twitter “likes”), and boosts (similar to Twitter retweets), will be shown in the “Notifications” column.</p>
</section>
<section id="how-do-i-make-a-post" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="how-do-i-make-a-post">How do I make a post?</h2>
<p>Writing a post on mastodon is similar to how you would write a post on twitter. The compose window looks like this:</p>

<p>You type the text you want into the box, adding hashtags, and then click the “Toot!” button (it may look different on your instance – I’ve seen the same button labelled “Post” sometimes). As you type, you’ll see the character count in the bottom right corner change to let you know how many characters you have left: you’re allowed 500 characters for a post on mastodon.</p>
<p>The nuances are important though. Those other buttons on the bottom left… those are all useful features. From left to right:</p>
<ul>
<li><p>The paperclip button: clicking this will let you attach an image. When you do, there will be an option to edit the image and (especially important!) to add alt text for accessibility purposes. Mastodon has a stronger norm about alt text than twitter: <em>always</em> add alt text. I have a section on alt text later in this post.</p></li>
<li><p>The barchart button: this will let you add a poll. Polls on mastodon work similarly to twitter, but are a bit more flexible. You can add more options and let users select multiple options.</p></li>
<li><p>The world button: this will let you set the visibility for the post. If you click on it you will see four options: “public” means everyone can view it, “unlisted” means everyone can view it but it doesn’t get indexed by discovery features (very handy in replies and threads where you don’t want everyone to be automatically shown your comment), “followers only” means only your followers can see it, and “mentioned people only” means only the people mentioned can see it. This last one is effectively how direct messages work on mastodon, which is important to note because posts aren’t end-to-end encrypted. Do not treat your mastodon direct messages as private (see later).</p></li>
<li><p>The “CW” button: This is used to attach content warnings to your post. Use this button! It’s important. I cannot stress this enough: the content warning button is right there, and it is considered extremely poor form in the fediverse to force your followers to look at content they might not want to see. There is a whole section on this later, but remember that mastodon is not twitter – people will mute you or choose not to share your post if you don’t use content warnings appropriately. In fact, if you consistently boost posts that don’t have content warnings when they should, people may unfollow you also.</p></li>
<li><p>The “EN” button: This is used to specify the language in which the post is written. Clicking on it will show you a dropdown list you can use to select the language.</p></li>
</ul>
<p>Try to use these features: it makes a difference!</p>

<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/kristina-tripkovic-8Zs5H6CnYJo-unsplash.jpg" class="img-fluid"></p>
</section>

<section id="tracking-hashtags" class="level2">
<h2 class="anchored" data-anchor-id="tracking-hashtags">Tracking hashtags</h2>
<p>Speaking of which, perhaps you want to monitor a hashtag. Maybe you even want to follow the hashtag, so that every post that has that hashtag will appear in your mastodon feed. Good news, you can!</p>
<p>From what I can tell, this is something where your options might be a little different on each server. For instance, on mastodon.social you can follow a hashtag directly in the standard view: when you search for a hashtag there will be a little “follow” icon that appears that you can click on (see <a href="https://fedi.tips/how-to-use-mastodon-and-the-fediverse-advanced-tips/#FollowingHashtags">this comment on fedi.tips</a>). When you do that, posts with that hashtag will appear in your feed. However, not every server implements this: fosstodon.org doesn’t do that right now.</p>
<p>So let’s go with a method that seems to work everywhere I’ve looked. This <a href="https://mastodon.nz/@thoughtfulnz/109278289508807509">post by David Hood</a> summarises it in a single image, but I’ll go through it more slowly here…</p>
<p>First off, you’ll need to be in “advanced view” to do this. That’s the one with lots of columns that I showed earlier in the post. You can customise this view by adding columns that correspond to the hashtags you want to follow. For example, let’s say I want to follow the <strong>#rstats</strong> hashtag. The first thing I’d do is type <strong>#rstats</strong> into the search bar (in the top left corner). The results will be shown directly below the search bar, like this:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/searching_hashtag.png" class="img-fluid"></p>
<p>These are clickable links. When I click on the <strong>#rstats</strong> hashtag in the results, a new column appears… containing a chronological feed that consists of posts tagged with <strong>#rstats</strong>:</p>
<p><img src="./img/rstats_column.png" class="img-fluid"></p>
<p>Again, in real life this won’t be empty: you’ll actually see the posts! You are now tracking <strong>#rstats</strong> on mastodon, albeit temporarily.</p>
<p>Suppose you want to make sure the column sticks around every time you open mastodon. We can “pin” the column in place. To do that, I click on the little “settings” icon at the top right of the <strong>#rstats</strong> column. It’s the one on the far right here:</p>

<p>When you do that, you will see a small menu that gives you the option to pin! Easy.</p>
<p>We can make our <strong>#rstats</strong> column more useful. For example, there are several hashtags I want to bundle together when following R content: <strong>#TidyTuesday</strong>, <strong>#TidyModels</strong>, and <strong>#ggplot2</strong>. I don’t want a separate column for each one, I want to group them into a single feed. Click on that little settings button again. Now you’ll see a richer menu:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/add_hashtags.png" class="img-fluid"></p>
<p>One of the options there is “include additional tags”. When I click on that, I can type in the other hashtags to track:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/multitag.png" class="img-fluid"> And now we are done! I have a feed that tracks R related content on mastodon.</p>
</section>
<section id="why-are-content-warnings-everywhere" class="level2">
<h2 class="anchored" data-anchor-id="why-are-content-warnings-everywhere">Why are content warnings everywhere?</h2>
<p>One huge – and hugely important – difference between twitter and mastodon is that mastodon has a system that allows users to mask their posts behind content warnings. Now… if you’re coming from twitter you might be thinking “oh that doesn’t apply to me I don’t post offensive content”.</p>
<p>If that’s what you’re thinking, allow me to disabuse you of that notion quickly. Content warnings are not about “hiding offensive content”, they are about being kind to your audience. This <a href="https://robot.rodeo/@mike/109270985467672999">thread by Mike McHargue</a> is a very good summary. The whole thread is good, but I’ll quote the first part here:</p>
<blockquote class="blockquote">
<p>If you’re part of the <strong>#twittermigration</strong>, it may seem strange the people use CWs so much here. But, CWs are really helpful. So much of our world is overwhelming, and feed presentation can bombard our nervous systems with triggers. CWs give people time and space to engage with that they have the resources to engage with. It gives them agency. I follow news and politics AND it’s helpful for my PTSD to have the chance to take a deep breath <em>before</em> I see a post.</p>
</blockquote>
<p>If you’re posting about politics, that should be hidden behind a content warning. If you’re posting about sexual assault, definitely use a content warning. If you’re posting about trans rights, again put it behind a content warning.</p>
<p>You should use the content warning even – or perhaps especially – when you think your post is this is an important social justice issue that other people <em>need</em> to see, because there is a really good chance that people whose lives are affected by it will be part of the audience… and yes, some of us have PTSD.</p>
<div class="callout-warning callout callout-style-default callout-captioned">

<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<p>I’ll give examples relevant to my own experience.</p>
<p>I get really, really angry when people post about trans rights without a content warning. Same with sexual assault. Why? Well, because I am transgender and I am frightened about the general direction the world is headed for people like me. I am not an activist and I don’t have the kind of resilience needed to constantly hear all the worst stories in the world about attacks against people like me. It’s one of the big reasons I left twitter: twitter algorithms prioritise engagement, and I cannot help but engage with this content because I am afraid. My experience on twitter is one of emotional abuse: twitter keeps showing me my worst fears and I click on them because the threats are real. I don’t appreciate it when my friends try to support me by <em>forcing me to see even more of that content</em>. For that reason, if you want to be supportive of people like me, use a content warning when posting about trans rights.</p>
<p>An even more extreme example relevant to my personal experience is sexual assault. I am a rape survivor. Every time there is a highly visible discussion about sexual assault (e.g., the Brett Kavanaugh hearings in the US, the Brittney Higgins discussions in Australia), I would get bombarded with content about rape. Over and over again. Sometimes it would trigger panic attacks and rape flashbacks.</p>
<p>When you post those things without providing me a content warning to help me make an informed choice, what you’re really telling me is that you simply don’t care if you’re forcing me to relive the experience of being raped.</p>
</div>
</div>
</div>
<p>So if you’re thinking about posting about these topics, the question of “should I attach a content warning?” isn’t a matter of “is this important?” it’s a matter of “could I be causing distress to people?” When you answer that question, don’t think about the typical case, think about that 1% of people who might be most severely affected and the reasons why.</p>
<p>Please, please, please… take content warnings seriously. Even if you’re “just posting about politics” or “venting some feelings”. It’s a kindness and courtesy to your audience.</p>
<p>Mastodon isn’t twitter.</p>
</section>
<section id="how-do-i-add-a-content-warning" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="how-do-i-add-a-content-warning">How do I add a content warning?</h2>
<p>Hopefully the previous section has convinced you that you should use content warnings and err on the side of caution when deciding when to use them. Your next question is probably: how do I add a content warning?</p>
<p>Luckily, it is super easy. It’s so simple that it fits into a single toot, like <a href="https://infosec.exchange/@Em0nM4stodon/109282181601490676">this post by Em on infosec.exchange</a>. Here’s how.</p>
<ol type="1">
<li><p>In the composer box, click on the little “CW” button. This will reveal an extra title field that says “Write your warning here”.</p>
</li>
<li><p>Write a brief but informative message in that title field. This could be something very serious like “Sexual assault discussion”, but it could also be something mild like “Spoiler alert: The Good Wife season 5” or something like “Photo with direct eye contact”. Even things like “US politics” or “Australian politics” can be helpful.</p></li>
<li><p>Write your post. (Okay you could write the post first and the content warning text after. Whatever)</p></li>
<li><p>When you post it, other users will only be shown the title field at first. If they decide they want to read, they can click on the post, and then the full text will be revealed.</p></li>
<li><p>Profit! Everybody is happy.</p></li>
</ol>
<p>Content warnings are good for everybody.</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/fleur-Ahs_MHU8y1s-unsplash.jpg" class="img-fluid"></p>

<div class="no-row-height column-margin column-container"><div class="">
<p>A warning. Image credit: <a href="https://unsplash.com/photos/Ahs_MHU8y1s">Fleur</a>. Freely available via unsplash</p>
</div></div></section>
<section id="how-can-i-make-threads" class="level2">
<h2 class="anchored" data-anchor-id="how-can-i-make-threads">How can I make threads?</h2>
<p>Making threads on mastodon is pretty similar to twitter. Just post each new toot as a reply to the previous one. Problem solved!</p>
<p>There is one subtlety to be aware of though, which is described in this <a href="https://scicomm.xyz/@quokka/109274732847484553">thread by Quokka on scicomm.xyz</a>. Remember earlier I mentioned that you can set the visibility of each post? The polite way to do a thread is set the <em>first</em> post to “public”, and then all the later ones to <em>unlisted</em>. The reason for that is that all public posts (including replies) will show up in various timelines. Usually, that’s not what you want. What you want is something where the first post reads “I have this important and exciting thing to to talk about: A thread…”, and only that first post shows up on people’s timelines. Then if they’re interested they can click on the first post and the rest of the thread will be revealed. That’s why people on mastodon usually set the first post to public and the later ones to unlisted.</p>
</section>

<section id="what-are-the-local-and-federated-timelines" class="level2">
<h2 class="anchored" data-anchor-id="what-are-the-local-and-federated-timelines">What are the local and federated timelines?</h2>
<p>At some point on mastodon you will find yourself discovering the local timeline and the federated timeline. There are links to these on the right hand side of the interface. The local timeline is every public-visibility post on your server, shown chronologically. This timeline has a very different feel on different servers. On <a href="https://fosstodon.org/">fosstodon.org</a> my local timeline has a lot of people posting about tech; on <a href="https://genart.social/">genart.social</a> it shows a lot of generative art.</p>
<p>The federated timeline is slightly different: it shows all public posts from all users who are “known” to your instance. That is, it includes every user on your instance, but it also includes everyone that users on your instance follow – even if those users are on other servers. It’s not the same thing as “every user on mastodon” though. People on <a href="https://genart.social/">genart.social</a> tend to follow other artists, so there is still a local “flavour” to the posts from outside the instance: they reflect people and topics that the users on your instance are interested in.</p>
<p>These timelines are useful for discovery purposes, and they’re also a reason to think carefully about the instance you’re on. It’s easier to find tech content on a tech-focused server!</p>
</section>
<section id="how-do-i-move-my-account-to-a-new-server" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="how-do-i-move-my-account-to-a-new-server">How do I move my account to a new server?</h2>
<p>So that brings me naturally to a question… what if you realise you’ve made a mistake and you want to change instances? This happens to many of us at one point or another. For instance, I initially signed up as <strong>djnavarro@mastodon.social</strong>. That wasn’t ideal for me: the server is a bit too big, it was being very slow at the time, and the content isn’t focused on things I wanted to see. So I decided I wanted to move, and become <strong>djnavarro@fosstodon.org</strong>.</p>
<p>A very nice feature of mastodon is that you can “migrate” your account, so that when you switch accounts all your followers will come along for the ride! Here’s how you do it:</p>
<p><strong>Step 1: Prepare the way</strong></p>
<ol type="1">
<li>It’s probably a good idea to post from your old account that you’re about to initiate a move. That way people will not be surprised when they find themselves following a new account (I didn’t do this… I should have. Oops!)</li>
<li>Set up your account, with the avatar, bio, etc on the new account using the same (or similar) images and descriptions on the old account: anyone who clicks through on the new account will see that it’s you!</li>
</ol>
<p><strong>Step 2: Export your follows from the old account</strong></p>
<p>When you migrate, it takes your followers across automatically. It doesn’t automatically make your new account follow everyone you were following on the old account. Luckily you don’t have to manually re-follow everyone. Instead, you export a csv file with the list of everyone you’re following at the old account, and later on you can import it as a follow list on the new one. Here’s how we export the csv at the old account:</p>
<ol type="1">
<li>Click on the “preferences” option</li>
<li>Within preferences, select “import and export”</li>
<li>On the data export page, you’ll see a list of possible csv files you can download. Download the ones you want, especially the “follows” csv.</li>
</ol>
<p><strong>Step 3: Set up alias on the new account</strong></p>
<p>Mastodon requires both accounts to authorise the move in some fashion, to prevent anyone from trying to steal other people’s accounts. First, your new account needs to signal that yes, it does wish to be an “alias” for your old account. From the new account – <strong>djnavarro@fosstodon.org</strong> for me – we need to set that up:</p>
<ol type="1">
<li>Click on the “preferences” options</li>
<li>Within preferences, select “account”</li>
<li>On the account settings page, scroll down to the bottom to the section called “moving from a different account” and click on the link “create an account alias”</li>
<li>On the account aliases page, specify the handle of your old account – e.g., <strong>djnavarro@mastodon.social</strong> in my case – and click “create alias”</li>
</ol>
<p>You’re done: the alias is set up. You may have to wait a while for this to propagate to the old account. When I moved I had to wait overnight because mastodon.social was running very slowly due to the massive spike of new users from twitter. Hopefully it won’t be that long for most people now.</p>
<p><strong>Step 4: Initiate the move from the old account</strong></p>
<p>With the new account now signalling that it is ready to be an alias for the old one, we can authorise the move from the old account. On the old account (i.e., <strong>djnavarro@mastodon.social</strong> for me) do the following:</p>
<ol type="1">
<li>Click on the “preferences” options</li>
<li>Within preferences, select “account”</li>
<li>On the account settings page, scroll down to the bottom to the section called “moving to a different account” and click on the link “configure it here”</li>
<li>On the moving accounts page, type the handle of the new account – in my case <strong>djnavarro@fosstodon.org</strong> – and enter the password for your old account to confirm. Click “move followers”.</li>
</ol>
<p>This will initiate the move. All your followers at the old account will automatically unfollow the old account and then follow the new one. It’ll take a little while and it might happen in bursts.</p>
<p><strong>Step 5: Import your follows at the new account</strong></p>
<p>The last step (optionally) is to have your new account re-follow everyone from that you were following at the old account. We can do that using the csv that you downloaded in step 2. So, again from your new account:</p>
<ol type="1">
<li>Click on the “preferences” options</li>
<li>Within preferences, select “import and export”</li>
<li>On the menu on the left, click the “import” submenu</li>
<li>On the import screen, select the import type (e.g., “following list”), click on “browse” to select the csv file you exported earlier, and then click “upload”.</li>
</ol>
<p>Your new account will now automatically follow all the accounts your old account followed.</p>
<p>With any luck, you are now successfully moved into your new account!</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/michal-balog-66NaCdBrkCs-unsplash.jpg" class="img-fluid"></p>

<div class="no-row-height column-margin column-container"><div class="">
<p>Moving. Image credit: <a href="https://unsplash.com/photos/66NaCdBrkCs">Michal Balog</a>. Freely available via unsplash</p>
</div></div></section>
<section id="etiquette-on-alt-text" class="level2">
<h2 class="anchored" data-anchor-id="etiquette-on-alt-text">Etiquette on alt-text?</h2>
<p>On twitter, you’ve probably found that there’s some pressure and expectation to supply alt-text for your images. The norm is <a href="https://mastodon.art/@Curator/109279035107793247">much stronger on mastodon</a>: people will expect that images have alt-text, and that the alt-text be informative. Here’s a walkthrough. First I might start writing a post, and after clicking on the paperclip icon to attach an image, I have a screen that looks like this:</p>

<p>As usual I’d write the content of my post in the composer box, but I would also click on the “edit” link in the top-right hand corner of my image. That brings up the image editing screen that looks like this:</p>
<p><img src="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/img/image_editing.png" class="img-fluid"></p>
<p>There are two things I usually do with this. On the right hand side I can drag and drop the focus circle around to help improve the image preview that gets shown to users. More importantly, on the left hand side I can write my alt-text. For some images it’s easy to come up with a good description, for others it is hard. For something like this one I’d usually aim to write a short paragraph that captures this information:</p>
<ul>
<li>this is generative art made with R</li>
<li>the title of the piece is “Gods of Salt, Stone, and Storm”</li>
<li>the palette is blue/green with a hint of white against a very dark background</li>
<li>the image is comprised of swirling patterns throughout</li>
<li>the overall impression is something akin to dark storm clouds overhead or maybe unsettled seas</li>
</ul>
<p>It’s not a perfect description, but it does capture what I think is important about the artwork.</p>
</section>
<section id="etiquette-on-nfts" class="level2">
<h2 class="anchored" data-anchor-id="etiquette-on-nfts">Etiquette on NFTs?</h2>
<p>A lot of artists on twitter, especially generative artists, like to post NFTs. It’s understandable: for generative artists, it’s the one reliable income stream they have for their art. However, you need to be very, very careful. NFTs are not well liked on the fediverse, and a lot of servers have outright bans on any form of NFT posting. For instance, you cannot post about NFTs at all on <a href="https://vis.social">vis.social</a> or <a href="https://mastodon.art">mastodon.art</a>. It is written into the server rules, so you should not sign up on those servers if that’s something you’re interested in. However, even on servers that do permit NFTs, there is often a strong suggestion that you should be polite and respect the preferences that folks outside the instance will have. For example, the generative art instance I’m on <a href="https://genart.social">genart.social</a> does not impose an outright ban on NFTs but it is discouraged, and in the rare instance that you do post NFT content, it must be behind a content warning.</p>
<p>Personally I’ve stopped even trying to make money from my art, so it doesn’t affect me: I’ve given up. I’m only bothering to mention it here because I don’t want to see generative art folks run afoul of the local norms.</p>
</section>

<section id="etiquette-on-bots-and-automated-accounts" class="level2">
<h2 class="anchored" data-anchor-id="etiquette-on-bots-and-automated-accounts">Etiquette on bots and automated accounts?</h2>
<p>Bots are allowed on mastodon, but you should check the local server rules and you should make certain that the bot is marked as an automated account in the account preferences.</p>
</section>
<section id="direct-messages-and-privacy" class="level2">
<h2 class="anchored" data-anchor-id="direct-messages-and-privacy">Direct messages and privacy</h2>
<p>As a final point, a note on direct messages. Direct messages on mastodon are just regular posts whose visibility is set to include only those people tagged in that post. That’s all. This is important to recognise because – at present – posts are not transmitted with end-to-end encryption: they are “private” only in the sense that a postcard is private or an unencrypted email is private. They won’t be broadcast to anyone else, but they aren’t secured while in transit.</p>
<p>You should never send any sensitive information via mastodon.</p>

+ 237
- 0
cache/2022/5562ca2239cf52842501c3fc675eca3c/index.html View File

@@ -0,0 +1,237 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Surviving and thriving through the 2022-11-05 meltdown (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://blog.freeradical.zone/post/surviving-thriving-through-2022-11-05-meltdown/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Surviving and thriving through the 2022-11-05 meltdown</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://blog.freeradical.zone/post/surviving-thriving-through-2022-11-05-meltdown/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<h2 id="background">Background</h2>
<p>After Elon Musk bought Twitter and started making a bizarre series of decisions about how to run it, people started logging into Mastodon to see what it’s all about. Lots of them. So, so many of them. In real numbers, Free Radical grew by <em>20% in the last week</em>. Which is awesome, because it’s wonderful to see new faces excited and eager to join the fun. The downside is that new users, being new to it, tend to be understandably excited and exploratory, with lots of posting, following other new people, and doing the kinds of things that require server hardware to wake up and earn its living. I don’t have hard stats to back it up, but from eyeballing the logs, I estimate that the server load was about 4 times greater than it was 2 weeks ago.</p>
<h2 id="rumblings">Rumblings</h2>
<p>I woke up yesterday, wondered what was happening online, and saw a few messages asking why people weren’t seeing the things they expected to see, like new toots their friends had made on other servers, notifications on their mobile apps, and the like. Huh. That’s interesting, and a little alarming. The site indeed “felt” slow. Then I noticed a stream of other admins asking questions like “hey, is anyone else seeing their server catching on fire?”</p>
<p>Uh-oh.</p>
<h2 id="time-travel">Time travel</h2>
<p>Mastodon runs a lot of little work tasks in the background, such as “add user A’s new toot to the database”, or “notify server B that user C replied to someone there”, or “let user D’s phone know that there’s a new notification for them”. As these tasks come in, they’re added to a “queue” of work to be done, and a program comes along to act on each of those tasks. Ideally, and in normal operation, tasks are completed as quickly as they’re being added to the queue, and the site <em>feels</em> like it’s operating as soon as a user asks it to do something. I don’t know if there’s another word for it, but I describe it as “realtime”. When I checked the queue yesterday, it was running about 45 minutes behind realtime. Every action a user took had to wait for nearly an hour before its effects were visible. That’s not good.</p>
<h2 id="old-architecture">Old architecture</h2>
<p>Let’s take a moment to talk about how Free Radical was set up. A Mastodon server has a few components:</p>
<ul>
<li>A PostgreSQL database server.</li>
<li>A Redis caching server that holds a lot of working information in fast RAM.</li>
<li>A “streaming” service (running in Node.js) that serves long-running HTTP and WebSocket connections to clients.</li>
<li>The Mastodon website, a Ruby on Rails app, for people using the service in their web browser.</li>
<li>“Sidekiq”, another Ruby on Rails service that processes the background housekeeping tasks we talked about earlier.</li>
<li>Amazon’s S3 storage service that handles images, videos, and all those other shiny things.</li>
</ul>
<p>When I first launched the service in 2017, all of these services ran on the same DigitalOcean server with 4GB of RAM. I ran out of disk space pretty quickly because all of those delightful cat pictures people post take up a lot of hard drive, so I offloaded that to S3. The PostgreSQL database also grew rapidly, and I relocated that to a server running in my own house. (That has nice privacy implications, too. US courts have ruled that it requires more effort for law enforcement to subpoena data stored in your residence than in a cloud server.) We ran that way with minor occasional adjustments for a couple of years:</p>
<ul>
<li>PostgreSQL is hosted in my house.</li>
<li>Media is in S3.</li>
<li>Everything else ran in the 4GB cloud server.</li>
</ul>
<h2 id="more-about-sidekiq">More about Sidekiq</h2>
<p>When the queue is lagging behind realtime, whatever the root cause, the result is that Sidekiq isn’t working fast enough. The default Mastodon settings tell Sidekiq to use 5 worker threads, meaning that it can process 5 queued tasks at the same time. I turned that knob as Free Radical grew over the years, and had settled on having 25 worker threads. That is, it could handle queued tasks about 5 times as quickly as an untuned Mastodon instance. That worked well for years. Sometimes the instance would get flooded with a short burst of traffic, but those busy little workers would chew their way through the queue and most users would probably never notice that it was temporarily slow.</p>
<h2 id="ill-melt-with-you">I’ll melt with you</h2>
<p>I noticed something worrisome when I looked at the 45-minute old tasks: many of them were second (or third or fourth) attempts to interact with other servers. That’s unusual in normal operation. Sure, there are often a couple of servers temporarily down for service, but it’s uncommon to see many of them at once. And wow, there sure were many of them yesterday.</p>
<p>I have an unproven hypothesis. Suppose that Free Radical had several worker threads trying to contact instance Foo. Foo was running slowly, so those connections eventually timed out after many seconds, and Free Radical added a retry task to the end of the queue. However, while it was waiting for those connections to give up, it was responding to other servers slowly. Somewhere out there, server Bar was trying to deliver messages to Free Radical, and those connections were timing out because Free Radical was stuck waiting for Foo. That made Bar run slowly. Meanwhile, Foo is trying to contact Bar, but can’t because Bar is so loaded up. In other words, lots of servers were running slowly because they were waiting on all their neighbors to start running quickly.</p>
<p>Again, I can’t prove this. It would explain the traffic and queue patterns we saw yesterday, though, and I’d bet that a variation of this was happening.</p>
<h2 id="back-to-sidekiq">Back to Sidekiq</h2>
<p>The Sidekiq server is written in Ruby on Rails. That means that there are lots of people who understand it and can contribute to developing and improving it. That’s good. It also means that it’s kind of a slow-running resource hog. That’s not good. Other server software is written in languages much better suited for running many background processes at once. For example, Pleroma is written in Elixir, and Elixir is all like “oh, you want me to do 473,000 things at once? OK!”</p>
<p>Ruby on Rails isn’t Elixir. It’s not easy to just turn up the number of worker threads and go back to eating breakfast. That didn’t stop me from trying. And in any case, I had to run more threads <em>somehow</em> if we ever wanted to get back to realtime. These things happened quickly:</p>
<p>I increased the number of worker threads.</p>
<p>Since each one of them insists on connecting to the database at all times, the PgBouncer connection pooler ran out of available connections.</p>
<p>I increased the number of PgBouncer’s allowed connections.</p>
<p>Now we had lots of running threads, but the server was almost out of RAM.</p>
<p>We needed to get rid of <em>something</em>.</p>
<h2 id="moving-redis">Moving Redis</h2>
<p>Remember that bit about Redis caching things in RAM? That’s good under normal circumstances, but now Redis and Sidekiq were fighting over RAM. And that database server was just sitting there like a slacker running PostgreSQL and sipping espresso like a smug hipster. I launched a Redis service on that hardware, configured an encrypted tunnel for it, and told Sidekiq to use the new Redis server. Then I crossed my fingers, restarted Sidekiq… and it worked! The extra RAM let the worker threads start zooming along.</p>
<p>However, suddenly all of my Mastodon timelines were empty. Oh, rats. Turns out they’re all cached in Redis, and when I switched Sidekiq to the new server, it lost track of the old cached data. Mastodon conveniently has a command (<code>tootctl feeds build</code>) to recreate all that data. I ran that command, it started working, and then the queue started filling up again faster than the workers could clear it. That’s the opposite of what I was working for.</p>
<h2 id="raspberry-jammin">Raspberry jammin'</h2>
<p>Out of the corner of my eye, I saw my little lonely Raspberry Pi 4, sad because it was waiting to be picked last at recess. Hey there, little buddy! Are you up to running Sidekiq? Yes, yes it was. Now, building the Sidekiq Docker image wasn’t a quick process. Docker running on a Raspberry Pi, using NFS for storage because the RPi’s own SD card is too slow and fragile, is about as sluggish as you might think. But it worked! And once the service launched, it wouldn’t be using much drive I/O anyway, and the RPi’s CPU is surprisingly capable.</p>
<p>I configured Sidekiq to point at the existing database server and the new Redis service, fired it up, refreshed the Sidekiq web UI, and saw that a huge new flood of fast workers was online and tearing through tasks like my dog goes through dropped potato chips. That… worked?! Yeah, it worked!</p>
<p>A short while later, we were back to realtime. I ran the timeline rebuilding command again, and the worker threads temporarily got as far back as 5 minutes behind realtime, but then caught back up and stayed there. We were back in business.</p>
<h2 id="where-we-are-now">Where we are now</h2>
<p>I feel like Free Radical turned a corner in this exercise. Until yesterday, aside from the database server, Free Radical was tightly bound to a single cloud server. Now we have:</p>
<ul>
<li>PostgreSQL and Redis running on a large, fast server.</li>
<li>Media in S3.</li>
<li>The web and streaming services, and 1 Sidekiq service, running on a 4GB cloud server.</li>
<li>Another Sidekiq service sharing the work equally from a separate hunk of hardware.</li>
</ul>
<p>I could move back to the old architecture now that the short-term burst of traffic is likely over, but why? Free Radical is in a great place, where the most resource-intensive part of the system can be horizontally scaled to a cluster of additional servers on a moment’s notice without reconfiguring or restarting anything. Even without that, we now have 160 workers instead of the previous 25.</p>
<p>The process was a little hectic, but I sure like where we ended up.</p>
<h2 id="technical-details">Technical details</h2>
<p>The above went a <em>long</em> way toward bringing Free Radical back. A couple of days later I noticed that the queue was still filling up faster than expected sometimes, and that the worker process on each server was running at 100%. After research it seemed that it’s much better to run multiple Sidekiq processes, each with fewer worker threads, to take advantage of multi-CPU servers. Here’s how I enabled that.</p>
<p>First, I created up a much simpler <code>config/sidekiq-helper.yml</code> file:</p>

<p>This is similar to the full <code>config/sidekiq.yml</code>, but without the <code>scheduler</code> queue (because you should only have <a href="https://docs.joinmastodon.org/admin/scaling/" target="_blank">one scheduler queue worker running, ever</a>) or any of its related scheduled jobs.</p>
<p>Next, I updated my <code>docker-compose.yml</code> on the main server to have multiple <code>sidekiq</code> blocks, like:</p>

<p>See how <code>sidekiq_2</code>’s <code>command</code> line specifies the new <code>sidekiq-helper.yml</code> file mentioned above? With this setup, <code>sidekiq_1</code> runs <em>all</em> of the queues, including <code>scheduler</code>. <code>sidekiq_2</code> runs all of them <em>except</em> <code>scheduler</code>.</p>
<p>On the Raspberry Pi, I created <code>sidekiq_1</code> through <code>sidekiq_4</code>, each using the <code>sidekiq-helper.yml</code> config so that <em>none</em> of them were running the <code>scheduler</code> queue.</p>
<p>Also note the <code>cpu_shares</code> settings? Docker compose uses that to adjust <a href="https://docs.docker.com/compose/compose-file/#cpu_shares" target="_blank">each container’s CPU usage</a> compared to the other containers. The default value is <code>1024</code>, so this runs the worker processes at a lower CPU priority than the <code>web</code> and <code>streaming</code> containers, which helps keep the web interface and mobile apps nicely responsive.</p>
<p>Finally, I ran <code>docker compose build</code> to create new Docker images incorporating the <code>config/sidekiq-helper.yml</code> files and restarted the services on each server.</p>
<p>After I made these changes, the worker threads are no longer CPU bound and are completing queued tasks faster than ever.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 72
- 0
cache/2022/5562ca2239cf52842501c3fc675eca3c/index.md View File

@@ -0,0 +1,72 @@
title: Surviving and thriving through the 2022-11-05 meltdown
url: https://blog.freeradical.zone/post/surviving-thriving-through-2022-11-05-meltdown/
hash_url: 5562ca2239cf52842501c3fc675eca3c

<h2 id="background">Background</h2>
<p>After Elon Musk bought Twitter and started making a bizarre series of decisions about how to run it, people started logging into Mastodon to see what it’s all about. Lots of them. So, so many of them. In real numbers, Free Radical grew by <em>20% in the last week</em>. Which is awesome, because it’s wonderful to see new faces excited and eager to join the fun. The downside is that new users, being new to it, tend to be understandably excited and exploratory, with lots of posting, following other new people, and doing the kinds of things that require server hardware to wake up and earn its living. I don’t have hard stats to back it up, but from eyeballing the logs, I estimate that the server load was about 4 times greater than it was 2 weeks ago.</p>
<h2 id="rumblings">Rumblings</h2>
<p>I woke up yesterday, wondered what was happening online, and saw a few messages asking why people weren’t seeing the things they expected to see, like new toots their friends had made on other servers, notifications on their mobile apps, and the like. Huh. That’s interesting, and a little alarming. The site indeed “felt” slow. Then I noticed a stream of other admins asking questions like “hey, is anyone else seeing their server catching on fire?”</p>
<p>Uh-oh.</p>
<h2 id="time-travel">Time travel</h2>
<p>Mastodon runs a lot of little work tasks in the background, such as “add user A’s new toot to the database”, or “notify server B that user C replied to someone there”, or “let user D’s phone know that there’s a new notification for them”. As these tasks come in, they’re added to a “queue” of work to be done, and a program comes along to act on each of those tasks. Ideally, and in normal operation, tasks are completed as quickly as they’re being added to the queue, and the site <em>feels</em> like it’s operating as soon as a user asks it to do something. I don’t know if there’s another word for it, but I describe it as “realtime”. When I checked the queue yesterday, it was running about 45 minutes behind realtime. Every action a user took had to wait for nearly an hour before its effects were visible. That’s not good.</p>
<h2 id="old-architecture">Old architecture</h2>
<p>Let’s take a moment to talk about how Free Radical was set up. A Mastodon server has a few components:</p>
<ul>
<li>A PostgreSQL database server.</li>
<li>A Redis caching server that holds a lot of working information in fast RAM.</li>
<li>A “streaming” service (running in Node.js) that serves long-running HTTP and WebSocket connections to clients.</li>
<li>The Mastodon website, a Ruby on Rails app, for people using the service in their web browser.</li>
<li>“Sidekiq”, another Ruby on Rails service that processes the background housekeeping tasks we talked about earlier.</li>
<li>Amazon’s S3 storage service that handles images, videos, and all those other shiny things.</li>
</ul>
<p>When I first launched the service in 2017, all of these services ran on the same DigitalOcean server with 4GB of RAM. I ran out of disk space pretty quickly because all of those delightful cat pictures people post take up a lot of hard drive, so I offloaded that to S3. The PostgreSQL database also grew rapidly, and I relocated that to a server running in my own house. (That has nice privacy implications, too. US courts have ruled that it requires more effort for law enforcement to subpoena data stored in your residence than in a cloud server.) We ran that way with minor occasional adjustments for a couple of years:</p>
<ul>
<li>PostgreSQL is hosted in my house.</li>
<li>Media is in S3.</li>
<li>Everything else ran in the 4GB cloud server.</li>
</ul>
<h2 id="more-about-sidekiq">More about Sidekiq</h2>
<p>When the queue is lagging behind realtime, whatever the root cause, the result is that Sidekiq isn’t working fast enough. The default Mastodon settings tell Sidekiq to use 5 worker threads, meaning that it can process 5 queued tasks at the same time. I turned that knob as Free Radical grew over the years, and had settled on having 25 worker threads. That is, it could handle queued tasks about 5 times as quickly as an untuned Mastodon instance. That worked well for years. Sometimes the instance would get flooded with a short burst of traffic, but those busy little workers would chew their way through the queue and most users would probably never notice that it was temporarily slow.</p>
<h2 id="ill-melt-with-you">I’ll melt with you</h2>
<p>I noticed something worrisome when I looked at the 45-minute old tasks: many of them were second (or third or fourth) attempts to interact with other servers. That’s unusual in normal operation. Sure, there are often a couple of servers temporarily down for service, but it’s uncommon to see many of them at once. And wow, there sure were many of them yesterday.</p>
<p>I have an unproven hypothesis. Suppose that Free Radical had several worker threads trying to contact instance Foo. Foo was running slowly, so those connections eventually timed out after many seconds, and Free Radical added a retry task to the end of the queue. However, while it was waiting for those connections to give up, it was responding to other servers slowly. Somewhere out there, server Bar was trying to deliver messages to Free Radical, and those connections were timing out because Free Radical was stuck waiting for Foo. That made Bar run slowly. Meanwhile, Foo is trying to contact Bar, but can’t because Bar is so loaded up. In other words, lots of servers were running slowly because they were waiting on all their neighbors to start running quickly.</p>
<p>Again, I can’t prove this. It would explain the traffic and queue patterns we saw yesterday, though, and I’d bet that a variation of this was happening.</p>
<h2 id="back-to-sidekiq">Back to Sidekiq</h2>
<p>The Sidekiq server is written in Ruby on Rails. That means that there are lots of people who understand it and can contribute to developing and improving it. That’s good. It also means that it’s kind of a slow-running resource hog. That’s not good. Other server software is written in languages much better suited for running many background processes at once. For example, Pleroma is written in Elixir, and Elixir is all like “oh, you want me to do 473,000 things at once? OK!”</p>
<p>Ruby on Rails isn’t Elixir. It’s not easy to just turn up the number of worker threads and go back to eating breakfast. That didn’t stop me from trying. And in any case, I had to run more threads <em>somehow</em> if we ever wanted to get back to realtime. These things happened quickly:</p>
<p>I increased the number of worker threads.</p>
<p>Since each one of them insists on connecting to the database at all times, the PgBouncer connection pooler ran out of available connections.</p>
<p>I increased the number of PgBouncer’s allowed connections.</p>
<p>Now we had lots of running threads, but the server was almost out of RAM.</p>
<p>We needed to get rid of <em>something</em>.</p>
<h2 id="moving-redis">Moving Redis</h2>
<p>Remember that bit about Redis caching things in RAM? That’s good under normal circumstances, but now Redis and Sidekiq were fighting over RAM. And that database server was just sitting there like a slacker running PostgreSQL and sipping espresso like a smug hipster. I launched a Redis service on that hardware, configured an encrypted tunnel for it, and told Sidekiq to use the new Redis server. Then I crossed my fingers, restarted Sidekiq… and it worked! The extra RAM let the worker threads start zooming along.</p>
<p>However, suddenly all of my Mastodon timelines were empty. Oh, rats. Turns out they’re all cached in Redis, and when I switched Sidekiq to the new server, it lost track of the old cached data. Mastodon conveniently has a command (<code>tootctl feeds build</code>) to recreate all that data. I ran that command, it started working, and then the queue started filling up again faster than the workers could clear it. That’s the opposite of what I was working for.</p>
<h2 id="raspberry-jammin">Raspberry jammin'</h2>
<p>Out of the corner of my eye, I saw my little lonely Raspberry Pi 4, sad because it was waiting to be picked last at recess. Hey there, little buddy! Are you up to running Sidekiq? Yes, yes it was. Now, building the Sidekiq Docker image wasn’t a quick process. Docker running on a Raspberry Pi, using NFS for storage because the RPi’s own SD card is too slow and fragile, is about as sluggish as you might think. But it worked! And once the service launched, it wouldn’t be using much drive I/O anyway, and the RPi’s CPU is surprisingly capable.</p>
<p>I configured Sidekiq to point at the existing database server and the new Redis service, fired it up, refreshed the Sidekiq web UI, and saw that a huge new flood of fast workers was online and tearing through tasks like my dog goes through dropped potato chips. That… worked?! Yeah, it worked!</p>
<p>A short while later, we were back to realtime. I ran the timeline rebuilding command again, and the worker threads temporarily got as far back as 5 minutes behind realtime, but then caught back up and stayed there. We were back in business.</p>
<h2 id="where-we-are-now">Where we are now</h2>
<p>I feel like Free Radical turned a corner in this exercise. Until yesterday, aside from the database server, Free Radical was tightly bound to a single cloud server. Now we have:</p>
<ul>
<li>PostgreSQL and Redis running on a large, fast server.</li>
<li>Media in S3.</li>
<li>The web and streaming services, and 1 Sidekiq service, running on a 4GB cloud server.</li>
<li>Another Sidekiq service sharing the work equally from a separate hunk of hardware.</li>
</ul>
<p>I could move back to the old architecture now that the short-term burst of traffic is likely over, but why? Free Radical is in a great place, where the most resource-intensive part of the system can be horizontally scaled to a cluster of additional servers on a moment’s notice without reconfiguring or restarting anything. Even without that, we now have 160 workers instead of the previous 25.</p>
<p>The process was a little hectic, but I sure like where we ended up.</p>
<h2 id="technical-details">Technical details</h2>
<p>The above went a <em>long</em> way toward bringing Free Radical back. A couple of days later I noticed that the queue was still filling up faster than expected sometimes, and that the worker process on each server was running at 100%. After research it seemed that it’s much better to run multiple Sidekiq processes, each with fewer worker threads, to take advantage of multi-CPU servers. Here’s how I enabled that.</p>
<p>First, I created up a much simpler <code>config/sidekiq-helper.yml</code> file:</p>


<p>This is similar to the full <code>config/sidekiq.yml</code>, but without the <code>scheduler</code> queue (because you should only have <a href="https://docs.joinmastodon.org/admin/scaling/" target="_blank">one scheduler queue worker running, ever</a>) or any of its related scheduled jobs.</p>
<p>Next, I updated my <code>docker-compose.yml</code> on the main server to have multiple <code>sidekiq</code> blocks, like:</p>


<p>See how <code>sidekiq_2</code>’s <code>command</code> line specifies the new <code>sidekiq-helper.yml</code> file mentioned above? With this setup, <code>sidekiq_1</code> runs <em>all</em> of the queues, including <code>scheduler</code>. <code>sidekiq_2</code> runs all of them <em>except</em> <code>scheduler</code>.</p>
<p>On the Raspberry Pi, I created <code>sidekiq_1</code> through <code>sidekiq_4</code>, each using the <code>sidekiq-helper.yml</code> config so that <em>none</em> of them were running the <code>scheduler</code> queue.</p>
<p>Also note the <code>cpu_shares</code> settings? Docker compose uses that to adjust <a href="https://docs.docker.com/compose/compose-file/#cpu_shares" target="_blank">each container’s CPU usage</a> compared to the other containers. The default value is <code>1024</code>, so this runs the worker processes at a lower CPU priority than the <code>web</code> and <code>streaming</code> containers, which helps keep the web interface and mobile apps nicely responsive.</p>
<p>Finally, I ran <code>docker compose build</code> to create new Docker images incorporating the <code>config/sidekiq-helper.yml</code> files and restarted the services on each server.</p>
<p>After I made these changes, the worker threads are no longer CPU bound and are completing queued tasks faster than ever.</p>

+ 203
- 0
cache/2022/58f10e6e52b49d69b79d1793482f1cf0/index.html View File

@@ -0,0 +1,203 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Home invasion (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://www.hughrundle.net/home-invasion/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Home invasion</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://www.hughrundle.net/home-invasion/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<blockquote>
<p>Nobody goes there anymore. It’s too crowded.<br>
Yogi Berra, <a href="https://quoteinvestigator.com/2014/08/29/too-crowded/">et al</a></p>
</blockquote>
<p>Well, it looks like it's finally happened. As news sites began reporting that Elon Musk had finalised his purchase of Twitter, the fediverse's <a href="https://en.wikipedia.org/wiki/Eternal_September">Eternal September</a> — hoped for and feared in equal numbers amongst its existing user base — began.</p>
<p>We've had waves of new people before — most recently earlier this year when Musk first announced his purchase offer — but what's been happening for the last week is different in both scale and nature. It's clear that a sizeable portion of Twitter's users are choosing to deplatform themselves <em>en masse</em>, and many have been directed to Mastodon, the most famous and populated software on the fediverse.</p>

<h2>Two kinds of party</h2>
<p>In Hobart in the late 1990s, there were basically three nightclubs. They were all sleazy to different degrees, loud to varying levels, and people went to them because that's where other people were — to have fun with friends, to attract attention, to assert their social status, and so on. This is Twitter.</p>
<p>I had a friend who lived in a sharehouse around the corner from one of these popular clubs. He hosted house parties on weekends. Small, just friends and a few friends of friends. This is the fediverse.</p>
<h2>Murmuration</h2>
<p>For those of us who have been using Mastodon for a while (I started my own Mastodon server 4 years ago), this week has been overwhelming. I've been thinking of metaphors to try to understand why I've found it so upsetting. This is supposed to be what we wanted, right? Yet it feels like something else. Like when you're sitting in a quiet carriage softly chatting with a couple of friends and then an entire platform of football fans get on at Jolimont Station after their team lost. They don't usually catch trains and don't know the protocol. They assume everyone on the train was at the game or at least follows football. They crowd the doors and complain about the seat configuration.</p>
<p>It's not <em>entirely</em> the Twitter people's fault. They've been taught to behave in certain ways. To chase likes and retweets/boosts. To promote themselves. To perform. All of that sort of thing is anathema to most of the people who were on Mastodon a week ago. It was part of the reason many moved to Mastodon in the first place. This means there's been a jarring culture clash all week as a huge murmuration of tweeters descended onto Mastodon in ever increasing waves each day. To the Twitter people it feels like a confusing new world, whilst they mourn their old life on Twitter. They call themselves "refugees", but to the Mastodon locals it feels like a busload of Kontiki tourists just arrived, blundering around yelling at each other and complaining that they don't know how to order room service. We also mourn the world we're losing.</p>
<h2>Viral</h2>
<p>On Saturday evening I published a post explaining a couple of things about Mastodon's history of dealing with toxic nodes on the network. Then everything went bananas. By 10pm I had locked my account to require followers to be approved, and muted the entire thread I had myself created. Before November 2022 Mastodon users used to joke that you'd "gone viral" if you got more than 5 boost or likes on a post. In an average week, perhaps one or two people might follow my account. Often nobody did. My post was now getting hundreds of interactions. Thousands. I've had over 250 follow requests since then — so many I can't bear to look at them, and I have no criteria by which to judge who to accept or reject. Early this week, I realised that some people had cross-posted my Mastodon post <em>into Twitter</em>. Someone else had posted a screenshot of it on Twitter.</p>
<p>Nobody thought to ask if I wanted that.</p>
<p>To users of corporate apps like Twitter or Instagram this may sound like boasting. Isn't "going viral" and getting big follower counts what it's all about? But to me it was something else. I struggled to understand what I was feeling, or the word to describe it. I finally realised on Monday that the word I was looking for was "traumatic". In October I would have interacted regularly with perhaps a dozen people a week on Mastodon, across about 4 or 5 different servers. Suddenly having hundreds of people asking (or not) to join those conversations without having acclimatised themselves to the social norms felt like a violation, an assault. I know I'm not the only one who felt like this.</p>
<p>It probably didn't help that every Mastodon server administrator I know, including myself, was suddenly dealing with an deluge of new registrants, requests to join (if they didn't have open registration), and then the inevitable server overloads. Aus.social buckled under the strain, going offline for several hours as the admin desperately tried to reconfigure things and upgrade hardware. Chinwag closed registrations temporarily. Even the "flagship instance" mastodon.social was publishing posts hours after they'd been written, with messages being created faster than they could be sent. I was nervously watching the file storage creep up on the ausglam.space wondering if I'd make it to the end of the weekend before the hard drive filled up, and starting to draft new Rules and Terms of Use for the server to make explicit things that previously "everybody knew" implicitly because we previously could acculturate people one by one.</p>
<h2>Consent</h2>
<p>I hadn't fully understood — <em>really</em> appreciated — how much corporate publishing systems steer people's behaviour until this week. Twitter encourages a very extractive attitude from everyone it touches. The people re-publishing my Mastodon posts on Twitter didn't think to ask whether I was ok with them doing that. The librarians wondering loudly about how this "new" social media environment could be systematically archived didn't ask anyone whether they <em>want</em> their fediverse posts to be captured and stored by government institutions. The academics excitedly considering how to replicate their Twitter research projects on a new corpus of "Mastodon" posts didn't seem to wonder whether we wanted to be studied by them. The people creating, publishing, and requesting public lists of Mastodon usernames for certain categories of person (journalists, academics in a particular field, climate activists...) didn't appear to have checked whether any of those people <em>felt safe</em> to be on a public list. They didn't appear to have considered that there are names for the sort of person who makes lists of people so others can monitor their communications. They're not nice names.</p>
<p>The tools, protocols and culture of the fediverse were built by trans and queer feminists. Those people had already started to feel sidelined from their own project when people like me started turning up a few year ago. This isn't the first time fediverse users have had to deal with a significant state change and feeling of loss. Nevertheless, the basic principles have mostly held up to now: the culture and technical systems were deliberately designed on principles of consent, agency, and community safety. Whilst there are definitely improvements that could be made to Mastodon in terms of moderation tools and more fine-grained control over posting, in general these are significantly superior to the Twitter experience. It's hardly surprising that the sorts of people who have been targets for harrassment by fascist trolls for most of their lives built in protections against unwanted attention when they created a new social media toolchain. It is the very tools and settings that provide so much more agency to users that pundits claim make Mastodon "too complicated".</p>
<p>If the people who built the fediverse generally sought to protect users, corporate platforms like Twitter seek to control their users. Twitter claims jurisdiction over all "content" on the platform. The loudest complaints about this come from people who want to publish horrible things and are sad when the Twitter bureaucracy eventually, sometimes, tells them they aren't allowed to. The real problem with this arrangement, however, is what it does to how people think about consent and control over our own voices. Academics and advertisers who want to study the utterances, social graphs, and demographics of Twitter users merely need to ask Twitter Corporation for permission. They can claim that <em>legally</em> Twitter has the right to do whatever it wants with this data, and <em>ethically</em> users gave permission for this data to be used in any way when they ticked "I agree" to the Terms of Service. This is complete bullshit of course (The ToS are inpenetrable, change on a whim, and the power imbalance is enormous), but it's convenient. So researchers convince themselves they believe it, or they simply don't care.</p>
<p>This attitude has moved with the new influx. Loudly proclaiming that content warnings are censorship, that functionality that has been deliberately unimplemented due to community safety concerns are "missing" or "broken", and that volunteer-run servers maintaining control over who they allow and under what conditions are "exclusionary". No consideration is given to <em>why</em> the norms and affordances of Mastodon and the broader fediverse exist, and whether the actor they are designed to protect against might be you. The Twitter people believe in the same fantasy of a "public square" as the person they are allegedly fleeing. Like fourteenth century Europeans, they bring the contagion with them as they flee.</p>
<h2>Anarchism</h2>
<p>The irony of it all is that my "viral toot thread" was largely about the fediverse's anarchist consent-based nature. Many of the newcomers saw very quickly that their server admins were struggling heroically to keep things running, and donated money or signed up to a Patreon account to ensure the servers could keep running or be upgraded to deal with the load. Admins were sending private and public messages of support to each other, sharing advice and feelings of solidarity. Old hands shared #FediTips to help guide behaviour in a positive direction. This is, of course, mutual aid.</p>

<p>It's very exciting to see so many people experiencing anarchic online social tools. The clever people who build ActivityPub and other fediverse protocols and tools have designed it in ways that seek to elude monopolistic capture. The software is universally Free and Open Source, but the protocols and standards are also both open and extensible. Whilst many will be happy to try replicating what they know from Twitter — a kind of combination of LinkedIn and Instagram, with the 4chan and #auspol people always lurking menacingly — others will explore new ways to communicate and collaborate. We are, after all, social creatures. I am surprised to find I have become a regular contributor (as in, <em>code</em> contributor 😲) to <a href="https://joinbookwyrm.com">Bookwyrm</a>, a social reading tool (think GoodReads) built on the ActivityPub protocol used by Mastodon. This is just one of many applications and ideas in the broader fediverse. More will come, that will no longer simply be "X for Fedi" but rather brand new ideas. Whilst there are already some commercial services running ActivityPub-based systems, a great many of the new applications are likely to be built and operated on the same mutual aid, volunteerist basis that currently characterises the vast majority of the fediverse.</p>
<h1>Grief</h1>
<p>Many people were excited about what happened this week. Newcomers saw the possibilities of federated social software. Old hands saw the possibilities of critical mass. But it's important that this isn't the only story told about early November 2022. Mastodon and the rest of the fediverse may be very new to those who arrived this week, but some people have been working on and playing in the fediverse for over a decade. There were already communities on the fediverse, and they've suddenly changed forever.</p>
<p>I was a reasonably early user of Twitter, just as I was a reasonably early user of Mastodon. I've met some of my firmest friends through Twitter, and it helped to shape my career opportunities. So I understand and empathise with those who have been mourning the experience they've had on Twitter — a life they know is now over. But Twitter has slowly been rotting for years — I went through that grieving process myself a couple of years ago and frankly don't really understand what's so different now compared to two weeks ago.</p>
<p>There's another, smaller group of people mourning a social media experience that was destroyed this week — the people who were active on Mastodon and the broader fediverse prior to November 2022. The nightclub has a new brash owner, and the dancefloor has emptied. People are pouring in to the quiet houseparty around the corner, cocktails still in hand, demanding that the music be turned up, walking mud into the carpet, and yelling over the top of the quiet conversation.</p>
<p><em>All</em> of us lost something this week. It's ok to mourn it.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 36
- 0
cache/2022/58f10e6e52b49d69b79d1793482f1cf0/index.md View File

@@ -0,0 +1,36 @@
title: Home invasion
url: https://www.hughrundle.net/home-invasion/
hash_url: 58f10e6e52b49d69b79d1793482f1cf0

<blockquote>
<p>Nobody goes there anymore. It’s too crowded.<br>
Yogi Berra, <a href="https://quoteinvestigator.com/2014/08/29/too-crowded/">et al</a></p>
</blockquote>
<p>Well, it looks like it's finally happened. As news sites began reporting that Elon Musk had finalised his purchase of Twitter, the fediverse's <a href="https://en.wikipedia.org/wiki/Eternal_September">Eternal September</a> — hoped for and feared in equal numbers amongst its existing user base — began.</p>
<p>We've had waves of new people before — most recently earlier this year when Musk first announced his purchase offer — but what's been happening for the last week is different in both scale and nature. It's clear that a sizeable portion of Twitter's users are choosing to deplatform themselves <em>en masse</em>, and many have been directed to Mastodon, the most famous and populated software on the fediverse.</p>

<h2>Two kinds of party</h2>
<p>In Hobart in the late 1990s, there were basically three nightclubs. They were all sleazy to different degrees, loud to varying levels, and people went to them because that's where other people were — to have fun with friends, to attract attention, to assert their social status, and so on. This is Twitter.</p>
<p>I had a friend who lived in a sharehouse around the corner from one of these popular clubs. He hosted house parties on weekends. Small, just friends and a few friends of friends. This is the fediverse.</p>
<h2>Murmuration</h2>
<p>For those of us who have been using Mastodon for a while (I started my own Mastodon server 4 years ago), this week has been overwhelming. I've been thinking of metaphors to try to understand why I've found it so upsetting. This is supposed to be what we wanted, right? Yet it feels like something else. Like when you're sitting in a quiet carriage softly chatting with a couple of friends and then an entire platform of football fans get on at Jolimont Station after their team lost. They don't usually catch trains and don't know the protocol. They assume everyone on the train was at the game or at least follows football. They crowd the doors and complain about the seat configuration.</p>
<p>It's not <em>entirely</em> the Twitter people's fault. They've been taught to behave in certain ways. To chase likes and retweets/boosts. To promote themselves. To perform. All of that sort of thing is anathema to most of the people who were on Mastodon a week ago. It was part of the reason many moved to Mastodon in the first place. This means there's been a jarring culture clash all week as a huge murmuration of tweeters descended onto Mastodon in ever increasing waves each day. To the Twitter people it feels like a confusing new world, whilst they mourn their old life on Twitter. They call themselves "refugees", but to the Mastodon locals it feels like a busload of Kontiki tourists just arrived, blundering around yelling at each other and complaining that they don't know how to order room service. We also mourn the world we're losing.</p>
<h2>Viral</h2>
<p>On Saturday evening I published a post explaining a couple of things about Mastodon's history of dealing with toxic nodes on the network. Then everything went bananas. By 10pm I had locked my account to require followers to be approved, and muted the entire thread I had myself created. Before November 2022 Mastodon users used to joke that you'd "gone viral" if you got more than 5 boost or likes on a post. In an average week, perhaps one or two people might follow my account. Often nobody did. My post was now getting hundreds of interactions. Thousands. I've had over 250 follow requests since then — so many I can't bear to look at them, and I have no criteria by which to judge who to accept or reject. Early this week, I realised that some people had cross-posted my Mastodon post <em>into Twitter</em>. Someone else had posted a screenshot of it on Twitter.</p>
<p>Nobody thought to ask if I wanted that.</p>
<p>To users of corporate apps like Twitter or Instagram this may sound like boasting. Isn't "going viral" and getting big follower counts what it's all about? But to me it was something else. I struggled to understand what I was feeling, or the word to describe it. I finally realised on Monday that the word I was looking for was "traumatic". In October I would have interacted regularly with perhaps a dozen people a week on Mastodon, across about 4 or 5 different servers. Suddenly having hundreds of people asking (or not) to join those conversations without having acclimatised themselves to the social norms felt like a violation, an assault. I know I'm not the only one who felt like this.</p>
<p>It probably didn't help that every Mastodon server administrator I know, including myself, was suddenly dealing with an deluge of new registrants, requests to join (if they didn't have open registration), and then the inevitable server overloads. Aus.social buckled under the strain, going offline for several hours as the admin desperately tried to reconfigure things and upgrade hardware. Chinwag closed registrations temporarily. Even the "flagship instance" mastodon.social was publishing posts hours after they'd been written, with messages being created faster than they could be sent. I was nervously watching the file storage creep up on the ausglam.space wondering if I'd make it to the end of the weekend before the hard drive filled up, and starting to draft new Rules and Terms of Use for the server to make explicit things that previously "everybody knew" implicitly because we previously could acculturate people one by one.</p>
<h2>Consent</h2>
<p>I hadn't fully understood — <em>really</em> appreciated — how much corporate publishing systems steer people's behaviour until this week. Twitter encourages a very extractive attitude from everyone it touches. The people re-publishing my Mastodon posts on Twitter didn't think to ask whether I was ok with them doing that. The librarians wondering loudly about how this "new" social media environment could be systematically archived didn't ask anyone whether they <em>want</em> their fediverse posts to be captured and stored by government institutions. The academics excitedly considering how to replicate their Twitter research projects on a new corpus of "Mastodon" posts didn't seem to wonder whether we wanted to be studied by them. The people creating, publishing, and requesting public lists of Mastodon usernames for certain categories of person (journalists, academics in a particular field, climate activists...) didn't appear to have checked whether any of those people <em>felt safe</em> to be on a public list. They didn't appear to have considered that there are names for the sort of person who makes lists of people so others can monitor their communications. They're not nice names.</p>
<p>The tools, protocols and culture of the fediverse were built by trans and queer feminists. Those people had already started to feel sidelined from their own project when people like me started turning up a few year ago. This isn't the first time fediverse users have had to deal with a significant state change and feeling of loss. Nevertheless, the basic principles have mostly held up to now: the culture and technical systems were deliberately designed on principles of consent, agency, and community safety. Whilst there are definitely improvements that could be made to Mastodon in terms of moderation tools and more fine-grained control over posting, in general these are significantly superior to the Twitter experience. It's hardly surprising that the sorts of people who have been targets for harrassment by fascist trolls for most of their lives built in protections against unwanted attention when they created a new social media toolchain. It is the very tools and settings that provide so much more agency to users that pundits claim make Mastodon "too complicated".</p>
<p>If the people who built the fediverse generally sought to protect users, corporate platforms like Twitter seek to control their users. Twitter claims jurisdiction over all "content" on the platform. The loudest complaints about this come from people who want to publish horrible things and are sad when the Twitter bureaucracy eventually, sometimes, tells them they aren't allowed to. The real problem with this arrangement, however, is what it does to how people think about consent and control over our own voices. Academics and advertisers who want to study the utterances, social graphs, and demographics of Twitter users merely need to ask Twitter Corporation for permission. They can claim that <em>legally</em> Twitter has the right to do whatever it wants with this data, and <em>ethically</em> users gave permission for this data to be used in any way when they ticked "I agree" to the Terms of Service. This is complete bullshit of course (The ToS are inpenetrable, change on a whim, and the power imbalance is enormous), but it's convenient. So researchers convince themselves they believe it, or they simply don't care.</p>
<p>This attitude has moved with the new influx. Loudly proclaiming that content warnings are censorship, that functionality that has been deliberately unimplemented due to community safety concerns are "missing" or "broken", and that volunteer-run servers maintaining control over who they allow and under what conditions are "exclusionary". No consideration is given to <em>why</em> the norms and affordances of Mastodon and the broader fediverse exist, and whether the actor they are designed to protect against might be you. The Twitter people believe in the same fantasy of a "public square" as the person they are allegedly fleeing. Like fourteenth century Europeans, they bring the contagion with them as they flee.</p>
<h2>Anarchism</h2>
<p>The irony of it all is that my "viral toot thread" was largely about the fediverse's anarchist consent-based nature. Many of the newcomers saw very quickly that their server admins were struggling heroically to keep things running, and donated money or signed up to a Patreon account to ensure the servers could keep running or be upgraded to deal with the load. Admins were sending private and public messages of support to each other, sharing advice and feelings of solidarity. Old hands shared #FediTips to help guide behaviour in a positive direction. This is, of course, mutual aid.</p>

<p>It's very exciting to see so many people experiencing anarchic online social tools. The clever people who build ActivityPub and other fediverse protocols and tools have designed it in ways that seek to elude monopolistic capture. The software is universally Free and Open Source, but the protocols and standards are also both open and extensible. Whilst many will be happy to try replicating what they know from Twitter — a kind of combination of LinkedIn and Instagram, with the 4chan and #auspol people always lurking menacingly — others will explore new ways to communicate and collaborate. We are, after all, social creatures. I am surprised to find I have become a regular contributor (as in, <em>code</em> contributor 😲) to <a href="https://joinbookwyrm.com">Bookwyrm</a>, a social reading tool (think GoodReads) built on the ActivityPub protocol used by Mastodon. This is just one of many applications and ideas in the broader fediverse. More will come, that will no longer simply be "X for Fedi" but rather brand new ideas. Whilst there are already some commercial services running ActivityPub-based systems, a great many of the new applications are likely to be built and operated on the same mutual aid, volunteerist basis that currently characterises the vast majority of the fediverse.</p>
<h1>Grief</h1>
<p>Many people were excited about what happened this week. Newcomers saw the possibilities of federated social software. Old hands saw the possibilities of critical mass. But it's important that this isn't the only story told about early November 2022. Mastodon and the rest of the fediverse may be very new to those who arrived this week, but some people have been working on and playing in the fediverse for over a decade. There were already communities on the fediverse, and they've suddenly changed forever.</p>
<p>I was a reasonably early user of Twitter, just as I was a reasonably early user of Mastodon. I've met some of my firmest friends through Twitter, and it helped to shape my career opportunities. So I understand and empathise with those who have been mourning the experience they've had on Twitter — a life they know is now over. But Twitter has slowly been rotting for years — I went through that grieving process myself a couple of years ago and frankly don't really understand what's so different now compared to two weeks ago.</p>
<p>There's another, smaller group of people mourning a social media experience that was destroyed this week — the people who were active on Mastodon and the broader fediverse prior to November 2022. The nightclub has a new brash owner, and the dancefloor has emptied. People are pouring in to the quiet houseparty around the corner, cocktails still in hand, demanding that the music be turned up, walking mud into the carpet, and yelling over the top of the quiet conversation.</p>
<p><em>All</em> of us lost something this week. It's ok to mourn it.</p>

+ 208
- 0
cache/2022/827b390ef9e20d414ef803611bc4f2bb/index.html View File

@@ -0,0 +1,208 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Fediverse (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://bastianallgeier.com/notes/fediverse">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Fediverse</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://bastianallgeier.com/notes/fediverse" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>I joined Mastodon in 2018. It was one of many days on Twitter that felt like it’s finally enough. I don’t exactly remember why. Twitter has been my social home on the internet since 2008 and it boosted my career in many ways. I made a lot of friends there. Some online friends turned into offline friends, into friends for life. But Twitter changed over the years.</p>
<p>I started to feel anxious whenever I scrolled my timeline. The lovely conversations with friendly human beings vanished. They where replaced by retweets and breaking news and the ever growing search for attention. The world through the lense of Twitter started to look darker and darker every day.</p>
<p>The promise of a new social home with the old friendly vibes seemed exciting. But my friends from Twitter only stayed around for a bit and then returned to Twitter – and so did I. We repeated this process a couple times. Whenever something went terribly wrong on Twitter, a group of refugees gave Mastodon another try, but it didn't work out.</p>
<p>Then recently Musk bought Twitter to push through his crude ideas of free speech.</p>
<p>A lot of us turned up on Mastodon once more and this time it was different. More activity, more conversations, more group effort to really make it work this time.</p>
<p>Oh wow, what a difference it made. Suddenly there was this old Twitter vibe. Real conversations. Real people. Interesting content. A feeling of a warm welcoming group. No algorithm to mess around with our timelines. No troll army to destory every tiny bit of peace. Yes, Mastodon is rough around the edges. Many parts are not intuitive. But this roughness somehow added to the positive experience for me.</p>
<p>This could really work! I was hesitant for days. It seemed to good to be true. Surely soon everyone would be gone again, right? Or if they stayed, the positivity would soon be replaced by the same bleakness that we all got so used to on the bird site.</p>
<p>It’s still early. This wave of refugees has just arrived. We don’t know what the future will bring. But there are a lot of things that are different on Mastodon and it takes a while to understand them.</p>
<p>Mastodon is in many ways similar to email. It's not just one big platform. There are different servers (instances) and you can choose your home. My first email address was a freenet.de address back in the 90s. A horrible cheap German provider. I moved to various email addresses over the years and ended up with my own domain and email address once I started as a professional designer and developer. I think of my current <a href="https://mastodon.social/@bastianallgeier">mastodon.social</a> address in a similar way. I'm still figuring this out. It's very likely not going to be my last place in the fediverse. At some point I want to have my own server, connected to my own domain. @bastian@social.bastianallgier.com or something like that.</p>
<p>But that's the exciting part about it. The architecture below makes it impossible to be owned by just one company. A single server can become huge. mastodon.social is currently the biggest one as far as I know. I think of it like I think about Gmail. It's an easy entry point for Mastodon, just like Gmail is a very easy entry point for email. But you can always move to a different place.</p>
<p>This fundamentally changes the power structures and the future perspective. Some individual cannot simply grab this and turn it into a hobby project for sociopathic billionaires. A company cannot get behind it and start exploting it commercially. The network has many ways to defend itself from such potential attacks.</p>
<p>Sounds pretty good for a new home if you ask me.</p>
<p>But there are actually more built-in mechanisms for a healthy social environment. Spending time on Mastodon makes it obvious that the founder, developers, server admins and users of Mastodon put a lot of time and effort into keeping this place welcoming.</p>
<ul>
<li>No algorithm for your timeline</li>
<li>Content warnings to avoid doom scrolling</li>
<li>an intentional lack of features that could lead to attention boosting</li>
<li>verification through domains or by running your own instance</li>
<li>a general culture to add alternative text to images</li>
<li>human server administrators and not just algorithms that monitor and ban bad actors</li>
<li>the principles of federation that can exclude entire servers if they risk the peace of the network</li>
</ul>
<p>Mastodon is quite obviously built around the idea to not repeat the same mistakes that led to the current state of social media.</p>
<p>But as much as I would just love to leave my Twitter life behind for good, there are things that I'm concerned about. The decentralized architecture of the fediverse comes at a cost. <a href="https://ar.al/2022/11/09/is-the-fediverse-about-to-get-fryed-or-why-every-toot-is-also-a-potential-denial-of-service-attack/">This article by Aral Balkan</a> shows pretty drastically what this means for popular accounts or viral posts.</p>
<p>In an ideal version of the fediverse, the majority of users and organisations would run their own instances. This would make the network very resilient, make verification a no-brainer (see above) and the load would be shared fairly.</p>
<p>Right now, there’s a high risk of burning through the financial means of the team behind a popular instance – as well as burning them out mentally because of the work load. That’s less than ideal as a foundation for a healthy new home.</p>
<p>Looking at Aral's post made me also realize how potentially wasteful this is from an environmental perspective when Mastodon starts to become more popular. It's hard to compare it to a platform like Twitter. Those are just black boxes. We have to "trust" their own sustainability reports if they have any. But it's likely that a centralized platform can operate more efficiently when lots of users interact with each other.</p>
<p>If the utopia of a healthy, democratic social network in 2022 is real, I believe that the Mastodon community needs answers for those aspects as well. I don't think it's unsolvable and I don't even think it's an argument against Mastodon. The transparency of Mastodon just highlights a problem that is normally hidden behind walled gardens.</p>
<p>Mastodon’s federated approach to healthier interactions is a second chance to get social media right. The transparency of Mastodon's architecture is a chance to become aware of the footprint of our digital lives.</p>
<p>When more personal instances lead to a more resilient network, we need more modest instances. Spinning up a VPS seems to be such a no-brainer in today's world of one-click CI workflows, serverless functions, edge computing and scaleable cloud solutions. But who's ever thinking about all the computational power we are simply firing up daily and all the terabytes of data we send around the globe for mundane tasks as if it was nothing.</p>
<p>Mastodon instances are monsters in their current form and it makes sense because they can potentially host tens of thousands of users. But I believe that there needs to be a 1-person or small team alternative. Something that's light and humble.</p>
<p>But it's not just about the resource-hunger of instances. Thinking about our social interactions as potentially wasteful computational tasks: how much of this do we really need?</p>
<p>After 14 years on Twitter, <a href="https://mastodon.social/@bastianallgeier/109308360571103988">I went kind of viral</a> for the first time on Mastodon two days ago. Isn't it ironic? That post is just a fun little piece of Twitter nostalgia. The following conversations were really interesting and it was mind-blowing to see how much positive activity there was on Mastodon. But after reading Aral's post I almost feel bad about it. How much trouble did I cause behind the scenes? How many of those sidekiq jobs had to be created and how many people had to wait for more important notifications to arrive?</p>
<p>In hindsight, I wish there were more mechanisms to avoid certain types of interactions. For instance, I really don't need all those likes. I don't want to cause tons of background jobs just for a vanity stat. This is a rough concept, but it would have been kind of nice to stop the wave of reactions at a certain point without removing the post. It gets really tricky here. What is a meaningful interaction and what could be avoided? There's already the possibility to post something just for your followers, but sometimes this isn't what you want. It's a balance between reaching a bigger audience and interacting with them and yet kind of finding a modest approach to avoid such viral scenarios.</p>
<p>Maybe all of this seems overblown. Discussing sidekiq processes is probably just a plastic straw discussion while millions post videos on TikTok and Youtube every day. (Apropos: there's another popular Mastodon post about why you should not upload videos directly to Mastodon instances)</p>
<p>But I feel like we are reaching a shift in society. We are in a state in which our form of living is obviously no longer working out. You have to invest a lot of energy to ignore the multiple crises we are in. Thus more and more people are looking for solutions. Mastodon could be a potential solution to the social media crisis – at least for some. It could be a home for those who are not just looking away. I've seen lots of scientists, climate activists and journalists move over in the last days. It has the potential to form new connections and move groups forward that have been stuck in Twitter hell for too long. But in my opinion this will also lead to higher expectations about the platform.</p>
<p>Despite growing pains and potential problems, I think this could be one of the most interesting movements on the web in recent years. Let's see where it goes.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 41
- 0
cache/2022/827b390ef9e20d414ef803611bc4f2bb/index.md View File

@@ -0,0 +1,41 @@
title: Fediverse
url: https://bastianallgeier.com/notes/fediverse
hash_url: 827b390ef9e20d414ef803611bc4f2bb

<p>I joined Mastodon in 2018. It was one of many days on Twitter that felt like it’s finally enough. I don’t exactly remember why. Twitter has been my social home on the internet since 2008 and it boosted my career in many ways. I made a lot of friends there. Some online friends turned into offline friends, into friends for life. But Twitter changed over the years.</p>
<p>I started to feel anxious whenever I scrolled my timeline. The lovely conversations with friendly human beings vanished. They where replaced by retweets and breaking news and the ever growing search for attention. The world through the lense of Twitter started to look darker and darker every day.</p>
<p>The promise of a new social home with the old friendly vibes seemed exciting. But my friends from Twitter only stayed around for a bit and then returned to Twitter – and so did I. We repeated this process a couple times. Whenever something went terribly wrong on Twitter, a group of refugees gave Mastodon another try, but it didn't work out.</p>
<p>Then recently Musk bought Twitter to push through his crude ideas of free speech.</p>
<p>A lot of us turned up on Mastodon once more and this time it was different. More activity, more conversations, more group effort to really make it work this time.</p>
<p>Oh wow, what a difference it made. Suddenly there was this old Twitter vibe. Real conversations. Real people. Interesting content. A feeling of a warm welcoming group. No algorithm to mess around with our timelines. No troll army to destory every tiny bit of peace. Yes, Mastodon is rough around the edges. Many parts are not intuitive. But this roughness somehow added to the positive experience for me.</p>
<p>This could really work! I was hesitant for days. It seemed to good to be true. Surely soon everyone would be gone again, right? Or if they stayed, the positivity would soon be replaced by the same bleakness that we all got so used to on the bird site.</p>
<p>It’s still early. This wave of refugees has just arrived. We don’t know what the future will bring. But there are a lot of things that are different on Mastodon and it takes a while to understand them.</p>
<p>Mastodon is in many ways similar to email. It's not just one big platform. There are different servers (instances) and you can choose your home. My first email address was a freenet.de address back in the 90s. A horrible cheap German provider. I moved to various email addresses over the years and ended up with my own domain and email address once I started as a professional designer and developer. I think of my current <a href="https://mastodon.social/@bastianallgeier">mastodon.social</a> address in a similar way. I'm still figuring this out. It's very likely not going to be my last place in the fediverse. At some point I want to have my own server, connected to my own domain. @bastian@social.bastianallgier.com or something like that.</p>
<p>But that's the exciting part about it. The architecture below makes it impossible to be owned by just one company. A single server can become huge. mastodon.social is currently the biggest one as far as I know. I think of it like I think about Gmail. It's an easy entry point for Mastodon, just like Gmail is a very easy entry point for email. But you can always move to a different place.</p>
<p>This fundamentally changes the power structures and the future perspective. Some individual cannot simply grab this and turn it into a hobby project for sociopathic billionaires. A company cannot get behind it and start exploting it commercially. The network has many ways to defend itself from such potential attacks.</p>
<p>Sounds pretty good for a new home if you ask me.</p>
<p>But there are actually more built-in mechanisms for a healthy social environment. Spending time on Mastodon makes it obvious that the founder, developers, server admins and users of Mastodon put a lot of time and effort into keeping this place welcoming.</p>
<ul>
<li>No algorithm for your timeline</li>
<li>Content warnings to avoid doom scrolling</li>
<li>an intentional lack of features that could lead to attention boosting</li>
<li>verification through domains or by running your own instance</li>
<li>a general culture to add alternative text to images</li>
<li>human server administrators and not just algorithms that monitor and ban bad actors</li>
<li>the principles of federation that can exclude entire servers if they risk the peace of the network</li>
</ul>
<p>Mastodon is quite obviously built around the idea to not repeat the same mistakes that led to the current state of social media.</p>
<p>But as much as I would just love to leave my Twitter life behind for good, there are things that I'm concerned about. The decentralized architecture of the fediverse comes at a cost. <a href="https://ar.al/2022/11/09/is-the-fediverse-about-to-get-fryed-or-why-every-toot-is-also-a-potential-denial-of-service-attack/">This article by Aral Balkan</a> shows pretty drastically what this means for popular accounts or viral posts.</p>
<p>In an ideal version of the fediverse, the majority of users and organisations would run their own instances. This would make the network very resilient, make verification a no-brainer (see above) and the load would be shared fairly.</p>
<p>Right now, there’s a high risk of burning through the financial means of the team behind a popular instance – as well as burning them out mentally because of the work load. That’s less than ideal as a foundation for a healthy new home.</p>
<p>Looking at Aral's post made me also realize how potentially wasteful this is from an environmental perspective when Mastodon starts to become more popular. It's hard to compare it to a platform like Twitter. Those are just black boxes. We have to "trust" their own sustainability reports if they have any. But it's likely that a centralized platform can operate more efficiently when lots of users interact with each other.</p>
<p>If the utopia of a healthy, democratic social network in 2022 is real, I believe that the Mastodon community needs answers for those aspects as well. I don't think it's unsolvable and I don't even think it's an argument against Mastodon. The transparency of Mastodon just highlights a problem that is normally hidden behind walled gardens.</p>
<p>Mastodon’s federated approach to healthier interactions is a second chance to get social media right. The transparency of Mastodon's architecture is a chance to become aware of the footprint of our digital lives.</p>
<p>When more personal instances lead to a more resilient network, we need more modest instances. Spinning up a VPS seems to be such a no-brainer in today's world of one-click CI workflows, serverless functions, edge computing and scaleable cloud solutions. But who's ever thinking about all the computational power we are simply firing up daily and all the terabytes of data we send around the globe for mundane tasks as if it was nothing.</p>
<p>Mastodon instances are monsters in their current form and it makes sense because they can potentially host tens of thousands of users. But I believe that there needs to be a 1-person or small team alternative. Something that's light and humble.</p>
<p>But it's not just about the resource-hunger of instances. Thinking about our social interactions as potentially wasteful computational tasks: how much of this do we really need?</p>
<p>After 14 years on Twitter, <a href="https://mastodon.social/@bastianallgeier/109308360571103988">I went kind of viral</a> for the first time on Mastodon two days ago. Isn't it ironic? That post is just a fun little piece of Twitter nostalgia. The following conversations were really interesting and it was mind-blowing to see how much positive activity there was on Mastodon. But after reading Aral's post I almost feel bad about it. How much trouble did I cause behind the scenes? How many of those sidekiq jobs had to be created and how many people had to wait for more important notifications to arrive?</p>
<p>In hindsight, I wish there were more mechanisms to avoid certain types of interactions. For instance, I really don't need all those likes. I don't want to cause tons of background jobs just for a vanity stat. This is a rough concept, but it would have been kind of nice to stop the wave of reactions at a certain point without removing the post. It gets really tricky here. What is a meaningful interaction and what could be avoided? There's already the possibility to post something just for your followers, but sometimes this isn't what you want. It's a balance between reaching a bigger audience and interacting with them and yet kind of finding a modest approach to avoid such viral scenarios.</p>
<p>Maybe all of this seems overblown. Discussing sidekiq processes is probably just a plastic straw discussion while millions post videos on TikTok and Youtube every day. (Apropos: there's another popular Mastodon post about why you should not upload videos directly to Mastodon instances)</p>
<p>But I feel like we are reaching a shift in society. We are in a state in which our form of living is obviously no longer working out. You have to invest a lot of energy to ignore the multiple crises we are in. Thus more and more people are looking for solutions. Mastodon could be a potential solution to the social media crisis – at least for some. It could be a home for those who are not just looking away. I've seen lots of scientists, climate activists and journalists move over in the last days. It has the potential to form new connections and move groups forward that have been stuck in Twitter hell for too long. But in my opinion this will also lead to higher expectations about the platform.</p>
<p>Despite growing pains and potential problems, I think this could be one of the most interesting movements on the web in recent years. Let's see where it goes.</p>

+ 253
- 0
cache/2022/9a78ae9b6814326d9c3df1425006f8f4/index.html View File

@@ -0,0 +1,253 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>The Fediverse, And Custom Domains (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://aeracode.org/2022/11/01/fediverse-custom-domains/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>The Fediverse, And Custom Domains</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://aeracode.org/2022/11/01/fediverse-custom-domains/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>For reasons that are very relevant to the events of this past week, I have
decided to finally get around to setting up a Mastodon / Fediverse account.</p>
<p>I wanted to do it under my own domain, but last time I looked into this
(three or so years ago), that was not possible if the domain was running
something <em>other</em> than a Fediverse server - if you tried to follow
<code>@andrew@aeracode.org</code>, it would come along to this website and try and do some
ActivityPub on it.</p>
<p>Faced with the idea of implementing proxy views for all the ActivityPub
endpoints within my site, I instead opted to go back to the warm, stable
embrace of Twitter (ahem), and come back and see how the fediverse had evolved in
a few years' time.</p>
<p>Well, here we are, and not only has the software and number of people improved,
so has a few aspects of the underlying protocol (and look, ActivityPub is not
great, but the only thing worse than implementing a flawed protocol is to try
and invent yet another one to take its place).</p>
<p>In particular, Fediverse servers now go looking for server and account (Actor)
information via three URLs (which ones they want seems to differ by server):</p>
<ul>
<li><code>/.well-known/webfinger</code></li>
<li><code>/.well-known/host-meta</code></li>
<li><code>/.well-known/nodeinfo</code></li>
</ul>
<p>The last is static, and while the first two can be static if you just have one
account on a server and never want to add any more, they're really meant to be
dynamic and so should be proxied through to the fediverse server.</p>
<p>So, faced with this much easier problem, that's what I did. This site still
runs Django under the hood (though now powered by a sqlite database created on
the fly - more on that in the future), and so doing this was a simple case of
adding three views:</p>
<div class="language-python3"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">proxy.views</span> <span class="kn">import</span> <span class="n">proxy_view</span>

<span class="k">def</span> <span class="nf">wellknown_webfinger</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="n">remote_url</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">"https://fedi.aeracode.org/.well-known/webfinger?"</span>
<span class="o">+</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="p">[</span><span class="s2">"QUERY_STRING"</span><span class="p">]</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">proxy_view</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">)</span>


<span class="k">def</span> <span class="nf">wellknown_hostmeta</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="n">remote_url</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">"https://fedi.aeracode.org/.well-known/host-meta?"</span>
<span class="o">+</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="p">[</span><span class="s2">"QUERY_STRING"</span><span class="p">]</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">proxy_view</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">)</span>


<span class="k">def</span> <span class="nf">wellknown_nodeinfo</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="n">remote_url</span> <span class="o">=</span> <span class="s2">"https://fedi.aeracode.org/.well-known/nodeinfo"</span>
<span class="k">return</span> <span class="n">proxy_view</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">)</span></pre></div>
</div>
<p>This uses the <code>django-proxy</code> package to provide the <code>proxy_view</code>. You might
also want to put in a view that redirects <code>yourdomain.com/@username</code>:</p>
<div class="language-python3"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">django.http</span> <span class="kn">import</span> <span class="n">HttpResponseRedirect</span>

<span class="k">def</span> <span class="nf">username_redirect</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">return</span> <span class="n">HttpResponseRedirect</span><span class="p">(</span><span class="s2">"https://fedi.aeracode.org/@andrew"</span><span class="p">)</span></pre></div>
</div>
<p>Hooking these up to the right URLs is the only other thing that's needed:</p>
<div class="language-python3"><div class="highlight"><pre><span></span><span class="n">urlpatterns</span> <span class="o">=</span> <span class="p">[</span>
<span class="o">...</span>
<span class="c1"># Fediverse</span>
<span class="n">path</span><span class="p">(</span><span class="s2">".well-known/webfinger"</span><span class="p">,</span> <span class="n">blog</span><span class="o">.</span><span class="n">wellknown_webfinger</span><span class="p">),</span>
<span class="n">path</span><span class="p">(</span><span class="s2">".well-known/host-meta"</span><span class="p">,</span> <span class="n">blog</span><span class="o">.</span><span class="n">wellknown_hostmeta</span><span class="p">),</span>
<span class="n">path</span><span class="p">(</span><span class="s2">".well-known/nodeinfo"</span><span class="p">,</span> <span class="n">blog</span><span class="o">.</span><span class="n">wellknown_nodeinfo</span><span class="p">),</span>
<span class="n">path</span><span class="p">(</span><span class="s2">"@andrew"</span><span class="p">,</span> <span class="n">blog</span><span class="o">.</span><span class="n">username_redirect</span><span class="p">),</span>
<span class="p">]</span></pre></div>
</div>
<p>That's what's up and running on this site right now, meaning you can type
<code>@andrew@aeracode.org</code> into your favourite Fediverse client and it will
understand that it's meant to actually go over to <code>fedi.aeracode.org</code> to ply
its ActivityPub magic. If you're a CloudFlare Pages user, Jacob has
<a href="https://jacobian.org/til/my-mastodon-instance/">a nice write-up</a> on how to do
a similar trick over there.</p>
<p>I'm happy, and crucially, I have avoided the temptation of writing my own
ActivityPub/Mastodon-compatible server in Django. For now, at least.</p>
<p>Incidentally, my server is hosted by <a href="https://masto.host">masto.host</a>, who
I have nothing but good things to say about so far. I will happily pay $9 a
month to avoid running yet another copy of all the various datastores that
Mastodon needs, just for my own private instance.</p>
<p><em>Note: Updated since first publication to add</em> <code>host-meta</code>
<em>and the username redirect</em></p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 86
- 0
cache/2022/9a78ae9b6814326d9c3df1425006f8f4/index.md View File

@@ -0,0 +1,86 @@
title: The Fediverse, And Custom Domains
url: https://aeracode.org/2022/11/01/fediverse-custom-domains/
hash_url: 9a78ae9b6814326d9c3df1425006f8f4

<p>For reasons that are very relevant to the events of this past week, I have
decided to finally get around to setting up a Mastodon / Fediverse account.</p>
<p>I wanted to do it under my own domain, but last time I looked into this
(three or so years ago), that was not possible if the domain was running
something <em>other</em> than a Fediverse server - if you tried to follow
<code>@andrew@aeracode.org</code>, it would come along to this website and try and do some
ActivityPub on it.</p>
<p>Faced with the idea of implementing proxy views for all the ActivityPub
endpoints within my site, I instead opted to go back to the warm, stable
embrace of Twitter (ahem), and come back and see how the fediverse had evolved in
a few years' time.</p>
<p>Well, here we are, and not only has the software and number of people improved,
so has a few aspects of the underlying protocol (and look, ActivityPub is not
great, but the only thing worse than implementing a flawed protocol is to try
and invent yet another one to take its place).</p>
<p>In particular, Fediverse servers now go looking for server and account (Actor)
information via three URLs (which ones they want seems to differ by server):</p>
<ul>
<li><code>/.well-known/webfinger</code></li>
<li><code>/.well-known/host-meta</code></li>
<li><code>/.well-known/nodeinfo</code></li>
</ul>
<p>The last is static, and while the first two can be static if you just have one
account on a server and never want to add any more, they're really meant to be
dynamic and so should be proxied through to the fediverse server.</p>
<p>So, faced with this much easier problem, that's what I did. This site still
runs Django under the hood (though now powered by a sqlite database created on
the fly - more on that in the future), and so doing this was a simple case of
adding three views:</p>
<div class="language-python3"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">proxy.views</span> <span class="kn">import</span> <span class="n">proxy_view</span>

<span class="k">def</span> <span class="nf">wellknown_webfinger</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="n">remote_url</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">"https://fedi.aeracode.org/.well-known/webfinger?"</span>
<span class="o">+</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="p">[</span><span class="s2">"QUERY_STRING"</span><span class="p">]</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">proxy_view</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">)</span>


<span class="k">def</span> <span class="nf">wellknown_hostmeta</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="n">remote_url</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">"https://fedi.aeracode.org/.well-known/host-meta?"</span>
<span class="o">+</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="p">[</span><span class="s2">"QUERY_STRING"</span><span class="p">]</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">proxy_view</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">)</span>


<span class="k">def</span> <span class="nf">wellknown_nodeinfo</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="n">remote_url</span> <span class="o">=</span> <span class="s2">"https://fedi.aeracode.org/.well-known/nodeinfo"</span>
<span class="k">return</span> <span class="n">proxy_view</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">)</span></pre></div>
</div>
<p>This uses the <code>django-proxy</code> package to provide the <code>proxy_view</code>. You might
also want to put in a view that redirects <code>yourdomain.com/@username</code>:</p>
<div class="language-python3"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">django.http</span> <span class="kn">import</span> <span class="n">HttpResponseRedirect</span>

<span class="k">def</span> <span class="nf">username_redirect</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">return</span> <span class="n">HttpResponseRedirect</span><span class="p">(</span><span class="s2">"https://fedi.aeracode.org/@andrew"</span><span class="p">)</span></pre></div>
</div>
<p>Hooking these up to the right URLs is the only other thing that's needed:</p>
<div class="language-python3"><div class="highlight"><pre><span></span><span class="n">urlpatterns</span> <span class="o">=</span> <span class="p">[</span>
<span class="o">...</span>
<span class="c1"># Fediverse</span>
<span class="n">path</span><span class="p">(</span><span class="s2">".well-known/webfinger"</span><span class="p">,</span> <span class="n">blog</span><span class="o">.</span><span class="n">wellknown_webfinger</span><span class="p">),</span>
<span class="n">path</span><span class="p">(</span><span class="s2">".well-known/host-meta"</span><span class="p">,</span> <span class="n">blog</span><span class="o">.</span><span class="n">wellknown_hostmeta</span><span class="p">),</span>
<span class="n">path</span><span class="p">(</span><span class="s2">".well-known/nodeinfo"</span><span class="p">,</span> <span class="n">blog</span><span class="o">.</span><span class="n">wellknown_nodeinfo</span><span class="p">),</span>
<span class="n">path</span><span class="p">(</span><span class="s2">"@andrew"</span><span class="p">,</span> <span class="n">blog</span><span class="o">.</span><span class="n">username_redirect</span><span class="p">),</span>
<span class="p">]</span></pre></div>
</div>
<p>That's what's up and running on this site right now, meaning you can type
<code>@andrew@aeracode.org</code> into your favourite Fediverse client and it will
understand that it's meant to actually go over to <code>fedi.aeracode.org</code> to ply
its ActivityPub magic. If you're a CloudFlare Pages user, Jacob has
<a href="https://jacobian.org/til/my-mastodon-instance/">a nice write-up</a> on how to do
a similar trick over there.</p>
<p>I'm happy, and crucially, I have avoided the temptation of writing my own
ActivityPub/Mastodon-compatible server in Django. For now, at least.</p>
<p>Incidentally, my server is hosted by <a href="https://masto.host">masto.host</a>, who
I have nothing but good things to say about so far. I will happily pay $9 a
month to avoid running yet another copy of all the various datastores that
Mastodon needs, just for my own private instance.</p>
<p><em>Note: Updated since first publication to add</em> <code>host-meta</code>
<em>and the username redirect</em></p>

+ 294
- 0
cache/2022/a6257c9517a4e07d4d4ccfa872cbf08b/index.html View File

@@ -0,0 +1,294 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”) (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://ar.al/2022/11/09/is-the-fediverse-about-to-get-fryed-or-why-every-toot-is-also-a-potential-denial-of-service-attack/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”)</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://ar.al/2022/11/09/is-the-fediverse-about-to-get-fryed-or-why-every-toot-is-also-a-potential-denial-of-service-attack/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<h1>Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”)</h1>
<p><time class="single" datetime="2022-11-09T19:00:00Z">09 Nov 2022</time></p>
<figure>
<img src="https://ar.al/2022/11/09/stephen-fry-mastodon-banner.png" alt="Screenshot of Stephen Fry’s Mastodon account banner on mastodonapp.uk"> <figcaption>
<p>Stephen is a big fish to fry. (I’m here all week.)</p>
</figcaption>
</figure>

<p>Warning: the fediverse is about to get Fryed.</p>
<p><a href="https://www.stephenfry.com/">Stephen Fry</a>ed, that is.</p>
<p>Following the recent takeover of Twitter by a proto-fascist billionaire man-baby, people have been fleeing<sup id="fnref:1"></sup> to the fediverse<sup id="fnref:2"></sup>. Among them are folks who, on Twitter, at least, had millions of followers like <a href="https://mastodon.nu/@gretathunberg">Greta Thunberg</a> and, more recently, <a href="https://mastodonapp.uk/@stephenfry">Stephen Fry.</a><sup id="fnref:3"></sup></p>
<p>“Well, surely that’s a good thing? It’ll get everyone talking about the fediverse, decentralisation, and maybe even that <a href="">Small Web</a> thing you keep harping on about all the time, Aral, no?”</p>
<p>Well, yes and no… you see, there is such a thing as <strong>too much of a good thing.</strong> And, on the fediverse today, that appears to be “engagement when you’re popular.” In fact, it could be deadly (to Mastodon instances, that is).</p>
<p>Read on and I’ll try to explain what I mean by using my own account as an example.</p>
<h2 id="how-to-kill-a-mastodon-hint-by-being-chatty-when-youre-popular">How to kill a Mastodon (hint: by being chatty when you’re popular)</h2>
<p>Needless to say, I’m not a celebrity.</p>
<p>And yet, on the fediverse, I find myself in a somewhat unique situation where:</p>
<ol>
<li>
<p><strong>I have my own personal Mastodon instance, just for me.</strong><sup id="fnref:4"></sup></p>
</li>
<li>
<p><strong>I’m followed by quite a number of people.</strong> Over 22,000, to be exact.<sup id="fnref:5"></sup></p>
</li>
<li>
<p><strong>I follow a lot of people and I genuinely enjoy having conversations with them.</strong> (I believe this is what the cool kids call “engagement”.)</p>
</li>
</ol>
<p>Unfortunately, the combination of these three factors creates a perfect storm<sup id="fnref:6"></sup> which means that now, every time I post something that gets lots of engagement, I essentially end up carrying out a <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack">denial of service attack</a> on myself.</p>
<h2 id="mastodon-denial-of-service-as-a-service">Mastodon: denial-of-service as a service?</h2>
<p>Yesterday was my birthday.</p>
<p>So, of course, I posted about it on my Mastodon instance.</p>

<p>It got quite a few replies. And, because it’s only polite, I started replying to everyone with thank-you messages.</p>
<p>Oh, no, you poor, naïve man, you. What were you thinking?!…</p>
<p>I’ll let my friend <a href="https://hugo.gameiro.pt/">Hugo Gameiro</a>, who runs <a href="https://masto.host">masto.host</a> and hosts my instance, explain what happened next:<sup id="fnref:7"></sup></p>
<blockquote>
<p>You just get a lot of engagement and that requires a ton of <a href="https://sidekiq.org/">Sidekiq</a> power to process.</p>
<p>For example, let’s look at your birthday post …  besides requiring thousands of Sidekiq jobs to spread your post through all their servers (you have 23K followers, let’s assume 3K different servers<sup id="fnref:8"></sup>), as soon as you create the post 3K Sidekiq jobs are created. At your current plan you have 12 Sidekiq threads, so to process 3K jobs it will take a while because it can only deal with 12 at a time.</p>
<p>Then, for each reply you receive to that post, 3K jobs are created, so your
followers can see that reply without leaving their server or looking at
your profile. Then you reply to the reply you got, another 3K jobs are
created and so on. </p>
<p>If you replied to the 100 replies you got on that post in 10 minutes (and assuming my 3K servers math is right). You created 300K jobs in Sidekiq. That’s why you get those queues.</p>
</blockquote>
<p>So what does that mean if you’re not into the technical mumbo-jumbo?</p>
<p>It means I was too chatty while being somewhat popular.</p>
<figure>
<img src="https://ar.al/2022/11/09/sidekiq-stats-during-my-birthday-post.png" alt="Screenshot of my Sidekiq stats, showing 175,082 enqueued tasks as I was replying to folks on my birthday post"> <figcaption>
<p>What a traffic jam looks like in Mastodon.</p>
</figcaption>
</figure>

<p>So, what’s the solution?</p>
<p>Well, there’s only one thing you can do when you find yourself in such a pickle: scale up your Mastodon instance.<sup id="fnref:9"></sup> The problem with that? It starts getting expensive.</p>
<p>Prior to the latest Twitter migration<sup id="fnref:10"></sup>, I was paying around €280/year (or a little over €20/month) for my Mastodon instance on a custom plan I had with Hugo from the early days. This week, I upped that to a roughly €50/month plan. And that’s still not enough as my birthday post just showed so Hugo, kindly, has suggested he might have to come up with a custom plan for me.</p>
<p>And yet, the problem is not one that will go away. We can only kick the ball down the road, as it were.</p>
<p>(Unless I piss everyone off with this post, that is.)</p>
<p>Thankfully, by running my own instance, the only person I’m burdening with this additional expense is me. But what if I’d been on a public instance run by someone else instead?</p>
<h2 id="musk-you">Musk you?</h2>

<p>If Elon Musk wanted to destroy <a href="https://mastodon.social">mastodon.social</a>, the flagship Mastodon instance, all he’d have to do is join it.<sup id="fnref:11"></sup></p>
<p>Thank goodness Elon isn’t that smart.</p>
<p>I jest, of course… <a href="https://en.wikipedia.org/wiki/Eugen_Rochko">Eugen</a> would likely ban his account the moment he saw it. But it does illustrate a problem: Elon’s easy to ban. Stephen, not so much. He’s a national treasure for goodness’ sake. One does not simply ban Stephen Fry.</p>
<p>And yet Stephen can similarly (yet unwittingly) cause untold expense to the folks running Mastodon instances just by joining one.<sup id="fnref:12"></sup></p>
<p>The solution, for Stephen at least, is simple: <a href="https://mastodon.ar.al/@aral/109311046067489334">he should run his own personal instance.</a></p>
<p>(Or get someone else to run it for him, like I do.)<sup id="fnref:13"></sup></p>
<p>Running his own instance would also give Stephen one additional benefit: he’d automatically get verified.</p>
<p>After all, if you’re talking to, say, <em>@stephen@social.stephenfry.com</em>, you can be sure it’s really him because you know he owns the domain.</p>
<h2 id="personal-instances-to-the-rescue">Personal instances to the rescue</h2>

<figure>
<p class="videoWrapper">

</p>
<figcaption><p>My speech at the European Parliament on the problem with Big Tech and the different approaches provided by Mastodon, the fediverse, and Small Web.</p></figcaption>
</figure>
<p>Wait, I’m confused… didn’t you say that personal instances were part of the problem?</p>
<p>Yes and no: they are and they shouldn’t be.</p>
<p>If ActivityPub (the protocol) and Mastodon (a server that adheres to that protocol) were designed to incentivise decentralisation, having more instances in the network would not be a problem. In fact, it would be the sign of a healthy, decentralised network.</p>
<p>However, ActivityPub and Mastodon are designed the same way Big Tech/Big Web is: to encourage services that host as many “users”<sup id="fnref:14"></sup> as they can.</p>
<p>This design is both complex (which makes it difficult and expensive to self-host) and works beautifully for Big Tech (where things are centralised and scale vertically and where the goal is to get/own/control/exploit as many users as possible).</p>
<p>In Big Tech, the initial cost of obtaining such scale is subsidised by vast amounts of venture capital (rich people investing in exploitative and extractive new businesses – which Silicon Valley calls Startups™ – in an effort to get even richer) and it leads to the amassing of the centres<sup id="fnref:15"></sup> we know today as the Googles, Facebooks, and Twitters of the world.</p>
<p>However, unlike Big Tech, the stated goal of the fediverse is to decentralise things, not centralise them. Yet how likely is it we can achieve the opposite of Big Tech’s goals while adopting its same fundamental design?</p>
<p>When you adopt the design of a thing, you also inherit the success criteria that led to the evolution of that design. If that success criteria does not align with your own goals, you have a problem on your hands.</p>
<p>What I’m trying to say is:</p>
<p><a href="https://mastodon.ar.al/@aral/109274437122830092">Do not adopt the success criteria of Big Tech lest you should become Big Tech.</a></p>
<h2 id="bigger-is-not-better">Bigger is not better</h2>

<p>Today, we equate the size of mastodon.social (the instance run by Eugen) with how successful Mastodon (the software created by Eugen) is. This is very dangerous. The larger mastodon.social gets, the more it will become like Twitter.</p>
<p>I can almost hear you shout, “But Aral, it’s federated! At least there’s no lock-in to mastodon.social!”</p>
<p>This is true.</p>
<p>You know what else is federated? Email.</p>
<p>Have you ever heard of a little old email instance called Gmail? (Or perhaps the term <a href="https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish">“embrace, extend, extinguish?”</a>)</p>
<p>Do you know what happens to your email if Google says (rightly or wrongly) that you’re spam? No one sees your email.</p>
<p>You know what happens if mastodon.social blocks your instance? Hundreds of thousands of people (soon, millions?) do not get a choice in whether they see your posts or not.</p>
<p>What happens when your instance of one blocks mastodon.social? Nothing, really.</p>
<p>That’s quite a power imbalance.</p>
<h2 id="decentralisation-begins-at-decentring-yourself">Decentralisation begins at decentring yourself</h2>
<p>Mastodon is a not-for-profit, and I have no reason to believe that Eugen has anything but the best of intentions.</p>
<p>However, <a href="https://ar.al/2022/02/16/decentralisation-begins-at-decentring-yourself/">decentralisation begins at decentring yourself</a>.</p>
<p>It’s in the interests of the fediverse that mastodon.social sets a good example by limiting its size voluntarily.</p>
<p>In fact, this should be built right into the software. Mastodon instances should be limited from growing beyond a certain size. Instances that are already too large should have ways of encouraging people to migrate to smaller ones.</p>
<p>As a community we should approach large instances as tumours: how do we break them up so they are no longer a threat to the organism?</p>
<p>If you take this approach to its logical conclusion, you will arrive at the concept of the <a href="https://ar.al/2020/08/07/what-is-the-small-web/">Small Web</a>; a web where we each own and control our own place (or places).</p>
<figure>
<video id="small-is-beautiful" controls="" preload="none" src="https://player.vimeo.com/progressive_redirect/playback/762676594/rendition/1080p/file.mp4?loc=external&amp;signature=6f327f42324b157a97add4fd4c532c69e0cdd29b206ff93f79f4cdae570ed922#t=185" poster="https://small-tech.org/videos/small-is-beautiful-23/poster.jpg">
<img src="https://small-tech.org/videos/small-is-beautiful-23/poster.jpg" alt="">
<p>Sorry, your browser doesn't support embedded videos. But that doesn’t mean you can’t watch it! You can <a href="https://player.vimeo.com/progressive_redirect/playback/762676594/rendition/1080p/file.mp4?loc=external&amp;signature=6f327f42324b157a97add4fd4c532c69e0cdd29b206ff93f79f4cdae570ed922#t=27">download
Small Is Beautiful #23 directly</a>, and watch it with your favourite video player.</p>
</video>
<figcaption><p><a href="https://owncast.small-web.org">Small Is Beautiful</a> (Oct, 2022): What is the Small Web and why do we need it?</p>
</figcaption>
</figure>

<p>I’m not saying that the current fediverse protocols and apps can, will, or even necessarily <em>should</em> evolve into the Small Web.<sup id="fnref:16"></sup> In the here and now, the fediverse is an invaluable stopgap that provides a safer haven than the centralised cesspits of Silicon Valley.</p>
<p>How long the stopgap lasts will depend on how successful we are at resisting centralisation. Protocol and server designs that incentivise vertical scale will not necessarily make this easy. However, there are social pressures we can use to counter their effects.</p>
<p>The last thing you want is a handful of mini Zuckerbergs running the fediverse. Or worse, to find yourself having become one of those mini Zuckerbergs.</p>
<p>I love that the fediverse exists. And I have the utmost respect for the gargantuan effort that’s going into it.</p>
<p>And yet, I am also very concerned<sup id="fnref:17"></sup> that the design decisions that have been made incentivise centralisation, not decentralisation. I implore us to acknowledge this, to mitigate the risks as best we can, to strive to learn from our mistakes, and to do even better going forward.</p>
<p>So to the ActivityPub and Mastodon folks, I say:</p>
<p>Consider me your canary in the coal mine…</p>
<p><strong>«Chirp! Chirp! Chirp!»</strong></p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 127
- 0
cache/2022/a6257c9517a4e07d4d4ccfa872cbf08b/index.md View File

@@ -0,0 +1,127 @@
title: Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”)
url: https://ar.al/2022/11/09/is-the-fediverse-about-to-get-fryed-or-why-every-toot-is-also-a-potential-denial-of-service-attack/
hash_url: a6257c9517a4e07d4d4ccfa872cbf08b

<h1>Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”)</h1>
<time class="single" datetime="2022-11-09T19:00:00Z">09 Nov 2022</time>
<figure>
<img src="https://ar.al/2022/11/09/stephen-fry-mastodon-banner.png" alt="Screenshot of Stephen Fry’s Mastodon account banner on mastodonapp.uk"> <figcaption>
<p>Stephen is a big fish to fry. (I’m here all week.)</p>
</figcaption>
</figure>

<p>Warning: the fediverse is about to get Fryed.</p>
<p><a href="https://www.stephenfry.com/">Stephen Fry</a>ed, that is.</p>
<p>Following the recent takeover of Twitter by a proto-fascist billionaire man-baby, people have been fleeing<sup id="fnref:1"></sup> to the fediverse<sup id="fnref:2"></sup>. Among them are folks who, on Twitter, at least, had millions of followers like <a href="https://mastodon.nu/@gretathunberg">Greta Thunberg</a> and, more recently, <a href="https://mastodonapp.uk/@stephenfry">Stephen Fry.</a><sup id="fnref:3"></sup></p>
<p>“Well, surely that’s a good thing? It’ll get everyone talking about the fediverse, decentralisation, and maybe even that <a href="">Small Web</a> thing you keep harping on about all the time, Aral, no?”</p>
<p>Well, yes and no… you see, there is such a thing as <strong>too much of a good thing.</strong> And, on the fediverse today, that appears to be “engagement when you’re popular.” In fact, it could be deadly (to Mastodon instances, that is).</p>
<p>Read on and I’ll try to explain what I mean by using my own account as an example.</p>
<h2 id="how-to-kill-a-mastodon-hint-by-being-chatty-when-youre-popular">How to kill a Mastodon (hint: by being chatty when you’re popular)</h2>
<p>Needless to say, I’m not a celebrity.</p>
<p>And yet, on the fediverse, I find myself in a somewhat unique situation where:</p>
<ol>
<li>
<p><strong>I have my own personal Mastodon instance, just for me.</strong><sup id="fnref:4"></sup></p>
</li>
<li>
<p><strong>I’m followed by quite a number of people.</strong> Over 22,000, to be exact.<sup id="fnref:5"></sup></p>
</li>
<li>
<p><strong>I follow a lot of people and I genuinely enjoy having conversations with them.</strong> (I believe this is what the cool kids call “engagement”.)</p>
</li>
</ol>
<p>Unfortunately, the combination of these three factors creates a perfect storm<sup id="fnref:6"></sup> which means that now, every time I post something that gets lots of engagement, I essentially end up carrying out a <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack">denial of service attack</a> on myself.</p>
<h2 id="mastodon-denial-of-service-as-a-service">Mastodon: denial-of-service as a service?</h2>
<p>Yesterday was my birthday.</p>
<p>So, of course, I posted about it on my Mastodon instance.</p>

<p>It got quite a few replies. And, because it’s only polite, I started replying to everyone with thank-you messages.</p>
<p>Oh, no, you poor, naïve man, you. What were you thinking?!…</p>
<p>I’ll let my friend <a href="https://hugo.gameiro.pt/">Hugo Gameiro</a>, who runs <a href="https://masto.host">masto.host</a> and hosts my instance, explain what happened next:<sup id="fnref:7"></sup></p>
<blockquote>
<p>You just get a lot of engagement and that requires a ton of <a href="https://sidekiq.org/">Sidekiq</a> power to process.</p>
<p>For example, let’s look at your birthday post …  besides requiring thousands of Sidekiq jobs to spread your post through all their servers (you have 23K followers, let’s assume 3K different servers<sup id="fnref:8"></sup>), as soon as you create the post 3K Sidekiq jobs are created. At your current plan you have 12 Sidekiq threads, so to process 3K jobs it will take a while because it can only deal with 12 at a time.</p>
<p>Then, for each reply you receive to that post, 3K jobs are created, so your
followers can see that reply without leaving their server or looking at
your profile. Then you reply to the reply you got, another 3K jobs are
created and so on. </p>
<p>If you replied to the 100 replies you got on that post in 10 minutes (and assuming my 3K servers math is right). You created 300K jobs in Sidekiq. That’s why you get those queues.</p>
</blockquote>
<p>So what does that mean if you’re not into the technical mumbo-jumbo?</p>
<p>It means I was too chatty while being somewhat popular.</p>
<figure>
<img src="https://ar.al/2022/11/09/sidekiq-stats-during-my-birthday-post.png" alt="Screenshot of my Sidekiq stats, showing 175,082 enqueued tasks as I was replying to folks on my birthday post"> <figcaption>
<p>What a traffic jam looks like in Mastodon.</p>
</figcaption>
</figure>

<p>So, what’s the solution?</p>
<p>Well, there’s only one thing you can do when you find yourself in such a pickle: scale up your Mastodon instance.<sup id="fnref:9"></sup> The problem with that? It starts getting expensive.</p>
<p>Prior to the latest Twitter migration<sup id="fnref:10"></sup>, I was paying around €280/year (or a little over €20/month) for my Mastodon instance on a custom plan I had with Hugo from the early days. This week, I upped that to a roughly €50/month plan. And that’s still not enough as my birthday post just showed so Hugo, kindly, has suggested he might have to come up with a custom plan for me.</p>
<p>And yet, the problem is not one that will go away. We can only kick the ball down the road, as it were.</p>
<p>(Unless I piss everyone off with this post, that is.)</p>
<p>Thankfully, by running my own instance, the only person I’m burdening with this additional expense is me. But what if I’d been on a public instance run by someone else instead?</p>
<h2 id="musk-you">Musk you?</h2>

<p>If Elon Musk wanted to destroy <a href="https://mastodon.social">mastodon.social</a>, the flagship Mastodon instance, all he’d have to do is join it.<sup id="fnref:11"></sup></p>
<p>Thank goodness Elon isn’t that smart.</p>
<p>I jest, of course… <a href="https://en.wikipedia.org/wiki/Eugen_Rochko">Eugen</a> would likely ban his account the moment he saw it. But it does illustrate a problem: Elon’s easy to ban. Stephen, not so much. He’s a national treasure for goodness’ sake. One does not simply ban Stephen Fry.</p>
<p>And yet Stephen can similarly (yet unwittingly) cause untold expense to the folks running Mastodon instances just by joining one.<sup id="fnref:12"></sup></p>
<p>The solution, for Stephen at least, is simple: <a href="https://mastodon.ar.al/@aral/109311046067489334">he should run his own personal instance.</a></p>
<p>(Or get someone else to run it for him, like I do.)<sup id="fnref:13"></sup></p>
<p>Running his own instance would also give Stephen one additional benefit: he’d automatically get verified.</p>
<p>After all, if you’re talking to, say, <em>@stephen@social.stephenfry.com</em>, you can be sure it’s really him because you know he owns the domain.</p>
<h2 id="personal-instances-to-the-rescue">Personal instances to the rescue</h2>

<figure>
<p class="videoWrapper">
</p>
<figcaption><p>My speech at the European Parliament on the problem with Big Tech and the different approaches provided by Mastodon, the fediverse, and Small Web.</p></figcaption>
</figure>
<p>Wait, I’m confused… didn’t you say that personal instances were part of the problem?</p>
<p>Yes and no: they are and they shouldn’t be.</p>
<p>If ActivityPub (the protocol) and Mastodon (a server that adheres to that protocol) were designed to incentivise decentralisation, having more instances in the network would not be a problem. In fact, it would be the sign of a healthy, decentralised network.</p>
<p>However, ActivityPub and Mastodon are designed the same way Big Tech/Big Web is: to encourage services that host as many “users”<sup id="fnref:14"></sup> as they can.</p>
<p>This design is both complex (which makes it difficult and expensive to self-host) and works beautifully for Big Tech (where things are centralised and scale vertically and where the goal is to get/own/control/exploit as many users as possible).</p>
<p>In Big Tech, the initial cost of obtaining such scale is subsidised by vast amounts of venture capital (rich people investing in exploitative and extractive new businesses – which Silicon Valley calls Startups™ – in an effort to get even richer) and it leads to the amassing of the centres<sup id="fnref:15"></sup> we know today as the Googles, Facebooks, and Twitters of the world.</p>
<p>However, unlike Big Tech, the stated goal of the fediverse is to decentralise things, not centralise them. Yet how likely is it we can achieve the opposite of Big Tech’s goals while adopting its same fundamental design?</p>
<p>When you adopt the design of a thing, you also inherit the success criteria that led to the evolution of that design. If that success criteria does not align with your own goals, you have a problem on your hands.</p>
<p>What I’m trying to say is:</p>
<p><a href="https://mastodon.ar.al/@aral/109274437122830092">Do not adopt the success criteria of Big Tech lest you should become Big Tech.</a></p>
<h2 id="bigger-is-not-better">Bigger is not better</h2>

<p>Today, we equate the size of mastodon.social (the instance run by Eugen) with how successful Mastodon (the software created by Eugen) is. This is very dangerous. The larger mastodon.social gets, the more it will become like Twitter.</p>
<p>I can almost hear you shout, “But Aral, it’s federated! At least there’s no lock-in to mastodon.social!”</p>
<p>This is true.</p>
<p>You know what else is federated? Email.</p>
<p>Have you ever heard of a little old email instance called Gmail? (Or perhaps the term <a href="https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish">“embrace, extend, extinguish?”</a>)</p>
<p>Do you know what happens to your email if Google says (rightly or wrongly) that you’re spam? No one sees your email.</p>
<p>You know what happens if mastodon.social blocks your instance? Hundreds of thousands of people (soon, millions?) do not get a choice in whether they see your posts or not.</p>
<p>What happens when your instance of one blocks mastodon.social? Nothing, really.</p>
<p>That’s quite a power imbalance.</p>
<h2 id="decentralisation-begins-at-decentring-yourself">Decentralisation begins at decentring yourself</h2>
<p>Mastodon is a not-for-profit, and I have no reason to believe that Eugen has anything but the best of intentions.</p>
<p>However, <a href="https://ar.al/2022/02/16/decentralisation-begins-at-decentring-yourself/">decentralisation begins at decentring yourself</a>.</p>
<p>It’s in the interests of the fediverse that mastodon.social sets a good example by limiting its size voluntarily.</p>
<p>In fact, this should be built right into the software. Mastodon instances should be limited from growing beyond a certain size. Instances that are already too large should have ways of encouraging people to migrate to smaller ones.</p>
<p>As a community we should approach large instances as tumours: how do we break them up so they are no longer a threat to the organism?</p>
<p>If you take this approach to its logical conclusion, you will arrive at the concept of the <a href="https://ar.al/2020/08/07/what-is-the-small-web/">Small Web</a>; a web where we each own and control our own place (or places).</p>
<figure>
<video id="small-is-beautiful" controls="" preload="none" src="https://player.vimeo.com/progressive_redirect/playback/762676594/rendition/1080p/file.mp4?loc=external&amp;signature=6f327f42324b157a97add4fd4c532c69e0cdd29b206ff93f79f4cdae570ed922#t=185" poster="https://small-tech.org/videos/small-is-beautiful-23/poster.jpg">
<img src="https://small-tech.org/videos/small-is-beautiful-23/poster.jpg" alt="">
<p>Sorry, your browser doesn't support embedded videos. But that doesn’t mean you can’t watch it! You can <a href="https://player.vimeo.com/progressive_redirect/playback/762676594/rendition/1080p/file.mp4?loc=external&amp;signature=6f327f42324b157a97add4fd4c532c69e0cdd29b206ff93f79f4cdae570ed922#t=27">download
Small Is Beautiful #23 directly</a>, and watch it with your favourite video player.</p>
</video>
<figcaption><p><a href="https://owncast.small-web.org">Small Is Beautiful</a> (Oct, 2022): What is the Small Web and why do we need it?</p>
</figcaption>
</figure>

<p>I’m not saying that the current fediverse protocols and apps can, will, or even necessarily <em>should</em> evolve into the Small Web.<sup id="fnref:16"></sup> In the here and now, the fediverse is an invaluable stopgap that provides a safer haven than the centralised cesspits of Silicon Valley.</p>
<p>How long the stopgap lasts will depend on how successful we are at resisting centralisation. Protocol and server designs that incentivise vertical scale will not necessarily make this easy. However, there are social pressures we can use to counter their effects.</p>
<p>The last thing you want is a handful of mini Zuckerbergs running the fediverse. Or worse, to find yourself having become one of those mini Zuckerbergs.</p>
<p>I love that the fediverse exists. And I have the utmost respect for the gargantuan effort that’s going into it.</p>
<p>And yet, I am also very concerned<sup id="fnref:17"></sup> that the design decisions that have been made incentivise centralisation, not decentralisation. I implore us to acknowledge this, to mitigate the risks as best we can, to strive to learn from our mistakes, and to do even better going forward.</p>
<p>So to the ActivityPub and Mastodon folks, I say:</p>
<p>Consider me your canary in the coal mine…</p>
<p><strong>«Chirp! Chirp! Chirp!»</strong></p>

+ 215
- 0
cache/2022/cb9be8bdfda6c6e03820a5ebae0cb470/index.html View File

@@ -0,0 +1,215 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Mastodon - Changer d'instance (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://pmazagol.gitpages.huma-num.fr/migration-mastodon/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Mastodon - Changer d'instance</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://pmazagol.gitpages.huma-num.fr/migration-mastodon/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p><em>11 novembre 2022 / November 11, 2022 - P.-O. Mazagol</em></p>

<p><a href="#French"><strong>Français</strong></a>/<a href="#english"><strong>English</strong></a></p>

<p id="french"></p>

<p><strong>Procédure pour déplacer son compte d'une instance Mastodon à une autre (<em>a priori</em> il est préférable que les serveurs des deux instances soient à jour)</strong></p>

<p><u>Sur la nouvelle instance :</u></p>

<p>1. Créer un compte <em>e.g.</em> compte@nouvelle.instance</p>
<p>2. Créer un alias pour l'ancien compte<br><em>Paramètres</em> -&gt; <em>Compte</em> -&gt; <em>Déplacement depuis un compte différent</em> -&gt; <em>Créer un alias de compte</em> : compte@ancienne.instance</p>

<p><u>Sur l'ancienne instance :</u></p>
<p>3. Exporter ce qui peut l'être<br> <em>Paramètres</em> -&gt; <em>Import et export</em> -&gt; <em>Export de données</em> -&gt; Télécharger les CSV proposés selon les besoins (On peut encore le faire une fois la redirection faite, mais mieux vaut être prudent)</p>
<p>4. Rediriger le compte de l'ancienne instance vers la nouvelle<br><em>Paramètres</em> -&gt; <em>Compte</em> -&gt; <em>Déménager vers un compte différent</em> : compte@nouvelle.instance | mot de passe (de l'ancienne instance)</p>

<p><u>Sur la nouvelle instance :</u></p>
<p>5. Attendre que le serveur de la nouvelle instance rapatrie les abonnées (délais variable)</p>
<p>6. En attendant, importer les CVS dans le comptre sur la nouvelle instance<br><em>Paramètres</em> -&gt; <em>Import et export</em> -&gt; <em>Import de données</em></p>
<p>7. Attendre que le serveur rapatrie vos abonnements et autres (délais variable)</p>
<p>8. Configurer avatar, bio et régler les paramètres selon les envies</p>
<p>Remarque : Les pouets/toots restent sur l'ancienne instance. Votre compte n'est pas supprimé sur l'ancienne instance.</p>

<hr />
<p id="english"></p>

<p><strong>Method to move your account from a Mastodon instance to another one ( it seems better that servers of both instances are up to date)</strong></p>

<p><u>On the new instance:</u></p>

<p>1. Create an account e.g. account@new.instance</p>
<p>2. Create an alias for your old account<br><em>Preferences</em> -&gt; <em>Account</em> -&gt; <em>Account settings</em> -&gt; <em>Moving from a different account</em> -&gt; <em>Create account alias</em>: account@former.instance</p>

<p><u>On the old instance:</u></p>
<p>3. Export what you want<br> <em>Preferences</em> -&gt; <em>Import and export</em> -&gt; <em>Date Export</em> -&gt; Download CSVs as needed (You can do that later, but it is better to be careful)</p>
<p>4. Redirect account from old instance to new one<br><em>Preferences</em> -&gt; <em>Account</em> -&gt; <em>Move to a different account</em>: account@new.instance | password (from old instance)</p>

<p><u>On the new instance:</u></p>
<p>5. Wait for the new instance server to retrieve your followers (this can be take some time)</p>
<p>6. In the meantime, import the CVS in the account on the new instance<br><em>Preferences</em> -&gt; <em>Import and export</em> -&gt; <em>Import</em></p>
<p>7. Wait for server to retrieve your follows (as exemple) (this can be take some time)</p>
<p>8. Add your avatar, bio and set preferences</p>
<p>Note: Toots remain on the old instance. Your account is not deleted on the old instance.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 48
- 0
cache/2022/cb9be8bdfda6c6e03820a5ebae0cb470/index.md View File

@@ -0,0 +1,48 @@
title: Mastodon - Changer d'instance
url: https://pmazagol.gitpages.huma-num.fr/migration-mastodon/
hash_url: cb9be8bdfda6c6e03820a5ebae0cb470

<p><em>11 novembre 2022 / November 11, 2022 - P.-O. Mazagol</em></p>

<p><a href="#French"><strong>Français</strong></a>/<a href="#english"><strong>English</strong></a></p>

<p id="french"></p>

<p><strong>Procédure pour déplacer son compte d'une instance Mastodon à une autre (<em>a priori</em> il est préférable que les serveurs des deux instances soient à jour)</strong></p>

<p><u>Sur la nouvelle instance :</u></p>

<p>1. Créer un compte <em>e.g.</em> compte@nouvelle.instance</p>
<p>2. Créer un alias pour l'ancien compte<br><em>Paramètres</em> -&gt; <em>Compte</em> -&gt; <em>Déplacement depuis un compte différent</em> -&gt; <em>Créer un alias de compte</em> : compte@ancienne.instance</p>

<p><u>Sur l'ancienne instance :</u></p>
<p>3. Exporter ce qui peut l'être<br> <em>Paramètres</em> -&gt; <em>Import et export</em> -&gt; <em>Export de données</em> -&gt; Télécharger les CSV proposés selon les besoins (On peut encore le faire une fois la redirection faite, mais mieux vaut être prudent)</p>
<p>4. Rediriger le compte de l'ancienne instance vers la nouvelle<br><em>Paramètres</em> -&gt; <em>Compte</em> -&gt; <em>Déménager vers un compte différent</em> : compte@nouvelle.instance | mot de passe (de l'ancienne instance)</p>

<p><u>Sur la nouvelle instance :</u></p>
<p>5. Attendre que le serveur de la nouvelle instance rapatrie les abonnées (délais variable)</p>
<p>6. En attendant, importer les CVS dans le comptre sur la nouvelle instance<br><em>Paramètres</em> -&gt; <em>Import et export</em> -&gt; <em>Import de données</em></p>
<p>7. Attendre que le serveur rapatrie vos abonnements et autres (délais variable)</p>
<p>8. Configurer avatar, bio et régler les paramètres selon les envies</p>
<p>Remarque : Les pouets/toots restent sur l'ancienne instance. Votre compte n'est pas supprimé sur l'ancienne instance.</p>

---
<p id="english"></p>

<p><strong>Method to move your account from a Mastodon instance to another one ( it seems better that servers of both instances are up to date)</strong></p>

<p><u>On the new instance:</u></p>

<p>1. Create an account e.g. account@new.instance</p>
<p>2. Create an alias for your old account<br><em>Preferences</em> -&gt; <em>Account</em> -&gt; <em>Account settings</em> -&gt; <em>Moving from a different account</em> -&gt; <em>Create account alias</em>: account@former.instance</p>

<p><u>On the old instance:</u></p>
<p>3. Export what you want<br> <em>Preferences</em> -&gt; <em>Import and export</em> -&gt; <em>Date Export</em> -&gt; Download CSVs as needed (You can do that later, but it is better to be careful)</p>
<p>4. Redirect account from old instance to new one<br><em>Preferences</em> -&gt; <em>Account</em> -&gt; <em>Move to a different account</em>: account@new.instance | password (from old instance)</p>

<p><u>On the new instance:</u></p>
<p>5. Wait for the new instance server to retrieve your followers (this can be take some time)</p>
<p>6. In the meantime, import the CVS in the account on the new instance<br><em>Preferences</em> -&gt; <em>Import and export</em> -&gt; <em>Import</em></p>
<p>7. Wait for server to retrieve your follows (as exemple) (this can be take some time)</p>
<p>8. Add your avatar, bio and set preferences</p>
<p>Note: Toots remain on the old instance. Your account is not deleted on the old instance.</p>

+ 201
- 0
cache/2022/d8a33ccb98091090b6a13b532773137a/index.html View File

@@ -0,0 +1,201 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Getting Mastodon running on a custom domain (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://til.simonwillison.net/mastodon/custom-domain-mastodon">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Getting Mastodon running on a custom domain</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://til.simonwillison.net/mastodon/custom-domain-mastodon" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>This TIL is mainly a rehash of these two articles by Jacob and Andrew:</p>

<p>I decided if I was going to get into Mastodon I wanted it on a domain that I controlled.</p>
<p>Here's my <a href="https://github.com/simonw/simonwillisonblog/issues/290">research issue</a> where I first figured this all out.</p>
<h2><a id="user-content-mastohost" class="anchor" aria-hidden="true" href="#mastohost"><span aria-hidden="true" class="octicon octicon-link"></span></a>masto.host</h2>
<p>Both Andrew and Jacob chose <a href="https://masto.host/" rel="nofollow">masto.host</a> as a managed host for their instances. Mastodon is open source and runs on Ruby, PostgreSQL and Redis, but managing those is enough of a hassle that I'd much rather have someone else do it for me.</p>
<p>Since Andrew and Jacob had done the due diligence on this already I just went with the one they are using.</p>
<p>I see this as a pleasantly low-risk vendor, because since I'm pointing my own domain at it I can move elsewhere pretty easily if I need to.</p>
<p>My impressions of it so far have been excellent - especially the speed of their customer support (see later note).</p>
<h2><a id="user-content-pay-for-an-account-then-set-up-a-cname" class="anchor" aria-hidden="true" href="#pay-for-an-account-then-set-up-a-cname"><span aria-hidden="true" class="octicon octicon-link"></span></a>Pay for an account, then set up a CNAME</h2>
<p>I paid for a subscription, then added the following configuration to my Cloudflare DNS:</p>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/9599/199629095-2704cd43-1046-4bff-8460-f756d2510f97.png"><img src="https://user-images.githubusercontent.com/9599/199629095-2704cd43-1046-4bff-8460-f756d2510f97.png" alt="CNAME of fedi pointed to vip.masto.host, Proxy states of DNS only"></a></p>
<p><code>masto.host</code> provided detailed instructions for this, including making sure to turn off the Cloudflare caching proxy.</p>
<p>This started working within less than a minute - and <a href="https://fedi.simonwillison.net/" rel="nofollow">https://fedi.simonwillison.net/</a> was live.</p>
<h2><a id="user-content-creating-an-account-promoting-it-to-admin" class="anchor" aria-hidden="true" href="#creating-an-account-promoting-it-to-admin"><span aria-hidden="true" class="octicon octicon-link"></span></a>Creating an account, promoting it to admin</h2>
<p>Once my instance was live I used the default account creation flow to create myself an account.</p>
<p>I then used the <a href="https://my.masto.host/hosting" rel="nofollow">https://my.masto.host/hosting</a> interface to find the "Change User Role" option and used that to upgrade my new user account to administrator status.</p>
<p>Having done that I gained access to the <a href="https://fedi.simonwillison.net/admin/settings/edit" rel="nofollow">https://fedi.simonwillison.net/admin/settings/edit</a> interface, where I blocked anyone else from creating an account and changed the site theme to "Mastodon (Light)" (which I like better).</p>
<p><a target="_blank" rel="noopener noreferrer" href="https://user-images.githubusercontent.com/9599/199629280-4add2ded-752f-4d7c-b9b8-91bda4a81811.png"><img alt="Screenshot of the Mastodon site settings panel" src="https://user-images.githubusercontent.com/9599/199629280-4add2ded-752f-4d7c-b9b8-91bda4a81811.png"></a></p>
<p>Frustratingly these settings require an email address, which is shown publicly on a page on the site. I used iCloud in Mobile Safari on my phone to create a disposable email address to use here.</p>
<h2><a id="user-content-getting-a-vanity-address" class="anchor" aria-hidden="true" href="#getting-a-vanity-address"><span aria-hidden="true" class="octicon octicon-link"></span></a>Getting a vanity address</h2>
<p>I wanted <code>@simon@simonwillison.net</code> as my ID, but it started out as <code>@simon@fedi.simonwillison.net</code>.</p>
<p>To do this, you need to set up some <code>/.well-known/...</code> URLs on your core domain.</p>
<p>I exactly copied <a href="https://aeracode.org/2022/11/01/fediverse-custom-domains/" rel="nofollow">how Andrew did this</a>. Here's <a href="https://github.com/simonw/simonwillisonblog/commit/f112e57f8619852985f15a71c00309f5046b8f1a">my commit to my Django blog</a>.</p>
<p>There's one last step here: as explained in <a href="https://masto.host/mastodon-usernames-different-from-the-domain-used-for-installation/" rel="nofollow">Mastodon usernames different from the domain used for installation</a> you need to update the <code>LOCAL_DOMAIN</code> and <code>WEB_DOMAIN</code> settings. These aren't currently available for <code>masto.host</code> customers to change, but you can email their support team about it.</p>
<p>I emailed them and they fixed it for me six minutes later! And now <code>@simon@simonwillison.net</code> both works and is displayed on <a href="https://fedi.simonwillison.net/@simon" rel="nofollow">https://fedi.simonwillison.net/@simon</a></p>
<h2><a id="user-content-finding-people-to-follow" class="anchor" aria-hidden="true" href="#finding-people-to-follow"><span aria-hidden="true" class="octicon octicon-link"></span></a>Finding people to follow</h2>
<p>I started by following <code>@jacob@jacobian.org</code> and <code>@andrew@aeracode.org</code>. Then I looked at who they were following. Then I tweeted about my new account and started following-back people who followed me.</p>
<h2><a id="user-content-the-iphone-app-is-really-good" class="anchor" aria-hidden="true" href="#the-iphone-app-is-really-good"><span aria-hidden="true" class="octicon octicon-link"></span></a>The iPhone app is really good</h2>
<p>I installed <a href="https://apps.apple.com/us/app/mastodon-for-iphone-and-ipad/id1571998974" rel="nofollow">the official Mastodon app</a> on my iPhone. It's really good! I signed in by giving it my <code>https://fedi.simonwillison.net/</code> address, and now it's sending me notifications and generally working exactly how I would want it to.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 34
- 0
cache/2022/d8a33ccb98091090b6a13b532773137a/index.md View File

@@ -0,0 +1,34 @@
title: Getting Mastodon running on a custom domain
url: https://til.simonwillison.net/mastodon/custom-domain-mastodon
hash_url: d8a33ccb98091090b6a13b532773137a

<p>This TIL is mainly a rehash of these two articles by Jacob and Andrew:</p>

<p>I decided if I was going to get into Mastodon I wanted it on a domain that I controlled.</p>
<p>Here's my <a href="https://github.com/simonw/simonwillisonblog/issues/290">research issue</a> where I first figured this all out.</p>
<h2><a id="user-content-mastohost" class="anchor" aria-hidden="true" href="#mastohost"><span aria-hidden="true" class="octicon octicon-link"></span></a>masto.host</h2>
<p>Both Andrew and Jacob chose <a href="https://masto.host/" rel="nofollow">masto.host</a> as a managed host for their instances. Mastodon is open source and runs on Ruby, PostgreSQL and Redis, but managing those is enough of a hassle that I'd much rather have someone else do it for me.</p>
<p>Since Andrew and Jacob had done the due diligence on this already I just went with the one they are using.</p>
<p>I see this as a pleasantly low-risk vendor, because since I'm pointing my own domain at it I can move elsewhere pretty easily if I need to.</p>
<p>My impressions of it so far have been excellent - especially the speed of their customer support (see later note).</p>
<h2><a id="user-content-pay-for-an-account-then-set-up-a-cname" class="anchor" aria-hidden="true" href="#pay-for-an-account-then-set-up-a-cname"><span aria-hidden="true" class="octicon octicon-link"></span></a>Pay for an account, then set up a CNAME</h2>
<p>I paid for a subscription, then added the following configuration to my Cloudflare DNS:</p>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/9599/199629095-2704cd43-1046-4bff-8460-f756d2510f97.png"><img src="https://user-images.githubusercontent.com/9599/199629095-2704cd43-1046-4bff-8460-f756d2510f97.png" alt="CNAME of fedi pointed to vip.masto.host, Proxy states of DNS only"></a></p>
<p><code>masto.host</code> provided detailed instructions for this, including making sure to turn off the Cloudflare caching proxy.</p>
<p>This started working within less than a minute - and <a href="https://fedi.simonwillison.net/" rel="nofollow">https://fedi.simonwillison.net/</a> was live.</p>
<h2><a id="user-content-creating-an-account-promoting-it-to-admin" class="anchor" aria-hidden="true" href="#creating-an-account-promoting-it-to-admin"><span aria-hidden="true" class="octicon octicon-link"></span></a>Creating an account, promoting it to admin</h2>
<p>Once my instance was live I used the default account creation flow to create myself an account.</p>
<p>I then used the <a href="https://my.masto.host/hosting" rel="nofollow">https://my.masto.host/hosting</a> interface to find the "Change User Role" option and used that to upgrade my new user account to administrator status.</p>
<p>Having done that I gained access to the <a href="https://fedi.simonwillison.net/admin/settings/edit" rel="nofollow">https://fedi.simonwillison.net/admin/settings/edit</a> interface, where I blocked anyone else from creating an account and changed the site theme to "Mastodon (Light)" (which I like better).</p>
<p><a target="_blank" rel="noopener noreferrer" href="https://user-images.githubusercontent.com/9599/199629280-4add2ded-752f-4d7c-b9b8-91bda4a81811.png"><img alt="Screenshot of the Mastodon site settings panel" src="https://user-images.githubusercontent.com/9599/199629280-4add2ded-752f-4d7c-b9b8-91bda4a81811.png"></a></p>
<p>Frustratingly these settings require an email address, which is shown publicly on a page on the site. I used iCloud in Mobile Safari on my phone to create a disposable email address to use here.</p>
<h2><a id="user-content-getting-a-vanity-address" class="anchor" aria-hidden="true" href="#getting-a-vanity-address"><span aria-hidden="true" class="octicon octicon-link"></span></a>Getting a vanity address</h2>
<p>I wanted <code>@simon@simonwillison.net</code> as my ID, but it started out as <code>@simon@fedi.simonwillison.net</code>.</p>
<p>To do this, you need to set up some <code>/.well-known/...</code> URLs on your core domain.</p>
<p>I exactly copied <a href="https://aeracode.org/2022/11/01/fediverse-custom-domains/" rel="nofollow">how Andrew did this</a>. Here's <a href="https://github.com/simonw/simonwillisonblog/commit/f112e57f8619852985f15a71c00309f5046b8f1a">my commit to my Django blog</a>.</p>
<p>There's one last step here: as explained in <a href="https://masto.host/mastodon-usernames-different-from-the-domain-used-for-installation/" rel="nofollow">Mastodon usernames different from the domain used for installation</a> you need to update the <code>LOCAL_DOMAIN</code> and <code>WEB_DOMAIN</code> settings. These aren't currently available for <code>masto.host</code> customers to change, but you can email their support team about it.</p>
<p>I emailed them and they fixed it for me six minutes later! And now <code>@simon@simonwillison.net</code> both works and is displayed on <a href="https://fedi.simonwillison.net/@simon" rel="nofollow">https://fedi.simonwillison.net/@simon</a></p>
<h2><a id="user-content-finding-people-to-follow" class="anchor" aria-hidden="true" href="#finding-people-to-follow"><span aria-hidden="true" class="octicon octicon-link"></span></a>Finding people to follow</h2>
<p>I started by following <code>@jacob@jacobian.org</code> and <code>@andrew@aeracode.org</code>. Then I looked at who they were following. Then I tweeted about my new account and started following-back people who followed me.</p>
<h2><a id="user-content-the-iphone-app-is-really-good" class="anchor" aria-hidden="true" href="#the-iphone-app-is-really-good"><span aria-hidden="true" class="octicon octicon-link"></span></a>The iPhone app is really good</h2>
<p>I installed <a href="https://apps.apple.com/us/app/mastodon-for-iphone-and-ipad/id1571998974" rel="nofollow">the official Mastodon app</a> on my iPhone. It's really good! I signed in by giving it my <code>https://fedi.simonwillison.net/</code> address, and now it's sending me notifications and generally working exactly how I would want it to.</p>

+ 24
- 0
cache/2022/index.html View File

@@ -123,6 +123,8 @@
<li><a href="/david/cache/2022/73089c42e8000a2d5a07cf29a39c913d/" title="Accès à l’article dans le cache local : The Dangerous Populist Science of Yuval Noah Harari">The Dangerous Populist Science of Yuval Noah Harari</a> (<a href="https://www.currentaffairs.org/2022/07/the-dangerous-populist-science-of-yuval-noah-harari" title="Accès à l’article original distant : The Dangerous Populist Science of Yuval Noah Harari">original</a>)</li>
<li><a href="/david/cache/2022/9a78ae9b6814326d9c3df1425006f8f4/" title="Accès à l’article dans le cache local : The Fediverse, And Custom Domains">The Fediverse, And Custom Domains</a> (<a href="https://aeracode.org/2022/11/01/fediverse-custom-domains/" title="Accès à l’article original distant : The Fediverse, And Custom Domains">original</a>)</li>
<li><a href="/david/cache/2022/6e38073a60400f3930923e61a67ddc56/" title="Accès à l’article dans le cache local : making space for my self through journalling">making space for my self through journalling</a> (<a href="https://winnielim.org/journal/making-space-for-my-self-through-journalling/" title="Accès à l’article original distant : making space for my self through journalling">original</a>)</li>
<li><a href="/david/cache/2022/f0cc8cd88f5fb119ce628b56716ce419/" title="Accès à l’article dans le cache local : « Le tourisme est une industrie de la compensation »">« Le tourisme est une industrie de la compensation »</a> (<a href="https://cqfd-journal.org/Le-tourisme-est-une-industrie-de" title="Accès à l’article original distant : « Le tourisme est une industrie de la compensation »">original</a>)</li>
@@ -153,6 +155,8 @@
<li><a href="/david/cache/2022/c4af28e3e148b7fd23ccb06e3a3f0358/" title="Accès à l’article dans le cache local : Nos morts ne vous sont pas dues">Nos morts ne vous sont pas dues</a> (<a href="https://www.jefklak.org/nos-morts-ne-vous-sont-pas-dues/" title="Accès à l’article original distant : Nos morts ne vous sont pas dues">original</a>)</li>
<li><a href="/david/cache/2022/5562ca2239cf52842501c3fc675eca3c/" title="Accès à l’article dans le cache local : Surviving and thriving through the 2022-11-05 meltdown">Surviving and thriving through the 2022-11-05 meltdown</a> (<a href="https://blog.freeradical.zone/post/surviving-thriving-through-2022-11-05-meltdown/" title="Accès à l’article original distant : Surviving and thriving through the 2022-11-05 meltdown">original</a>)</li>
<li><a href="/david/cache/2022/77e068f6681c5054ef9871e8102f3236/" title="Accès à l’article dans le cache local : Winnie Lim » out of control">Winnie Lim » out of control</a> (<a href="https://winnielim.org/journal/out-of-control/" title="Accès à l’article original distant : Winnie Lim » out of control">original</a>)</li>
<li><a href="/david/cache/2022/8981770b1b5be8044fd201739e67c60d/" title="Accès à l’article dans le cache local : Trust">Trust</a> (<a href="https://adactio.com/journal/19021" title="Accès à l’article original distant : Trust">original</a>)</li>
@@ -163,12 +167,16 @@
<li><a href="/david/cache/2022/d7aa31b1b2a781330df24fe71c19166c/" title="Accès à l’article dans le cache local : Keeping Gemini Difficult">Keeping Gemini Difficult</a> (<a href="https://memex.marginalia.nu/log/35-keeping-gemini-difficult.gmi" title="Accès à l’article original distant : Keeping Gemini Difficult">original</a>)</li>
<li><a href="/david/cache/2022/a6257c9517a4e07d4d4ccfa872cbf08b/" title="Accès à l’article dans le cache local : Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”)">Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”)</a> (<a href="https://ar.al/2022/11/09/is-the-fediverse-about-to-get-fryed-or-why-every-toot-is-also-a-potential-denial-of-service-attack/" title="Accès à l’article original distant : Is the fediverse about to get Fryed? (Or, “Why every toot is also a potential denial of service attack”)">original</a>)</li>
<li><a href="/david/cache/2022/37d3c1e9f20ea7396919f9f6cda24a08/" title="Accès à l’article dans le cache local : « La victoire sur Poutine viendra de l’intérieur »">« La victoire sur Poutine viendra de l’intérieur »</a> (<a href="https://www.revue-ballast.fr/alexey-sakhnin-la-victoire-sur-poutine-viendra-de-linterieur/" title="Accès à l’article original distant : « La victoire sur Poutine viendra de l’intérieur »">original</a>)</li>
<li><a href="/david/cache/2022/9b22b9e02073904986f4c33a75d90918/" title="Accès à l’article dans le cache local : cailloux n°79 : l’asolitude">cailloux n°79 : l’asolitude</a> (<a href="https://cailloux.substack.com/p/cailloux-n79-lasolitude" title="Accès à l’article original distant : cailloux n°79 : l’asolitude">original</a>)</li>
<li><a href="/david/cache/2022/099887889751a8432b4ab9ce7edc3bfa/" title="Accès à l’article dans le cache local : Éduquer au numérique d’accord. Mais pas n’importe lequel et pas n’importe comment">Éduquer au numérique d’accord. Mais pas n’importe lequel et pas n’importe comment</a> (<a href="https://louisderrac.com/2021/11/03/eduquer-au-numerique-daccord-mais-pas-nimporte-lequel-et-pas-nimporte-comment/" title="Accès à l’article original distant : Éduquer au numérique d’accord. Mais pas n’importe lequel et pas n’importe comment">original</a>)</li>
<li><a href="/david/cache/2022/827b390ef9e20d414ef803611bc4f2bb/" title="Accès à l’article dans le cache local : Fediverse">Fediverse</a> (<a href="https://bastianallgeier.com/notes/fediverse" title="Accès à l’article original distant : Fediverse">original</a>)</li>
<li><a href="/david/cache/2022/966252f65f40f1dbe13f56fde2fd34a3/" title="Accès à l’article dans le cache local : When Orcs were Real">When Orcs were Real</a> (<a href="https://treeofwoe.substack.com/p/when-orcs-were-real" title="Accès à l’article original distant : When Orcs were Real">original</a>)</li>
<li><a href="/david/cache/2022/8d9cffcd9bdc116b8934310706def4bc/" title="Accès à l’article dans le cache local : Le pillage de la communauté des logiciels libres">Le pillage de la communauté des logiciels libres</a> (<a href="https://www.monde-diplomatique.fr/2022/01/O_NEIL/64221" title="Accès à l’article original distant : Le pillage de la communauté des logiciels libres">original</a>)</li>
@@ -217,6 +225,8 @@
<li><a href="/david/cache/2022/e3a00561b3b07a5b4c1e207eb59eaa3f/" title="Accès à l’article dans le cache local : Outdated vs. Complete">Outdated vs. Complete</a> (<a href="https://vivqu.com/blog/2022/09/25/outdated-apps/" title="Accès à l’article original distant : Outdated vs. Complete">original</a>)</li>
<li><a href="/david/cache/2022/3b9259e5e41e5e73fc3d5574fd472674/" title="Accès à l’article dans le cache local : Nikodemus' Guide to Mastodon">Nikodemus' Guide to Mastodon</a> (<a href="https://docs.google.com/document/d/1D9gfeKg_-hlsU66R-dLEvUeyMsqEfyIx2pnfUeX0t_E/edit" title="Accès à l’article original distant : Nikodemus' Guide to Mastodon">original</a>)</li>
<li><a href="/david/cache/2022/4803414174643ce6cb23128f1194c125/" title="Accès à l’article dans le cache local : entre l'ombre et la tige">entre l'ombre et la tige</a> (<a href="https://www.la-grange.net/2022/05/29/ombre-tige" title="Accès à l’article original distant : entre l'ombre et la tige">original</a>)</li>
<li><a href="/david/cache/2022/c321f4f9abbd8866e82cf77912972431/" title="Accès à l’article dans le cache local : Les pas perdus | nota-bene.org">Les pas perdus | nota-bene.org</a> (<a href="https://nota-bene.org/Les-pas-perdus" title="Accès à l’article original distant : Les pas perdus | nota-bene.org">original</a>)</li>
@@ -233,6 +243,8 @@
<li><a href="/david/cache/2022/5964573af5b20f004910ef76ee7f3d8a/" title="Accès à l’article dans le cache local : À la maison comme à l’école, les écrans sont une catastrophe">À la maison comme à l’école, les écrans sont une catastrophe</a> (<a href="https://reporterre.net/A-la-maison-comme-a-l-ecole-les-ecrans-sont-une-catastrophe" title="Accès à l’article original distant : À la maison comme à l’école, les écrans sont une catastrophe">original</a>)</li>
<li><a href="/david/cache/2022/4bdd8a682b8c7d31f518b6c6730179d2/" title="Accès à l’article dans le cache local : Everything I know about Mastodon">Everything I know about Mastodon</a> (<a href="https://blog.djnavarro.net/posts/2022-11-03_what-i-know-about-mastodon/" title="Accès à l’article original distant : Everything I know about Mastodon">original</a>)</li>
<li><a href="/david/cache/2022/8e934525d3694413fe73a9af99cdf99d/" title="Accès à l’article dans le cache local : iOS Privacy: Announcing InAppBrowser.com - see what JavaScript commands get injected through an in-app browser">iOS Privacy: Announcing InAppBrowser.com - see what JavaScript commands get injected through an in-app browser</a> (<a href="https://krausefx.com/blog/announcing-inappbrowsercom-see-what-javascript-commands-get-executed-in-an-in-app-browser" title="Accès à l’article original distant : iOS Privacy: Announcing InAppBrowser.com - see what JavaScript commands get injected through an in-app browser">original</a>)</li>
<li><a href="/david/cache/2022/56f14d85f38a7bb04e187aa3334bdb57/" title="Accès à l’article dans le cache local : désabler l'imagination">désabler l'imagination</a> (<a href="https://www.la-grange.net/2022/03/20/imagination" title="Accès à l’article original distant : désabler l'imagination">original</a>)</li>
@@ -285,6 +297,8 @@
<li><a href="/david/cache/2022/0707aa459878d644f14b65e9e05e9537/" title="Accès à l’article dans le cache local : Progressively Enhanced Builds">Progressively Enhanced Builds</a> (<a href="https://blog.jim-nielsen.com/2022/progressively-enhanced-builds/" title="Accès à l’article original distant : Progressively Enhanced Builds">original</a>)</li>
<li><a href="/david/cache/2022/d8a33ccb98091090b6a13b532773137a/" title="Accès à l’article dans le cache local : Getting Mastodon running on a custom domain">Getting Mastodon running on a custom domain</a> (<a href="https://til.simonwillison.net/mastodon/custom-domain-mastodon" title="Accès à l’article original distant : Getting Mastodon running on a custom domain">original</a>)</li>
<li><a href="/david/cache/2022/c45fd3d630e91da74f901ab4bbeebb73/" title="Accès à l’article dans le cache local : J’ai pris le large">J’ai pris le large</a> (<a href="https://nota-bene.org/J-ai-pris-le-large" title="Accès à l’article original distant : J’ai pris le large">original</a>)</li>
<li><a href="/david/cache/2022/2ce856390079feed694a41bb2f2f42f1/" title="Accès à l’article dans le cache local : la fin d’un totem néolibéral">la fin d’un totem néolibéral</a> (<a href="https://lvsl.fr/annulation-de-la-dette-etudiante-aux-etats-unis-la-fin-dun-totem-neoliberal/" title="Accès à l’article original distant : la fin d’un totem néolibéral">original</a>)</li>
@@ -321,6 +335,8 @@
<li><a href="/david/cache/2022/a6889f5458d738fa7e88825c39292d4c/" title="Accès à l’article dans le cache local : Bifurquer avant l’impact : l’impasse du capitalisme de surveillance">Bifurquer avant l’impact : l’impasse du capitalisme de surveillance</a> (<a href="https://framablog.org/2022/08/29/bifurquer-avant-limpact-limpasse-du-capitalisme-de-surveillance/" title="Accès à l’article original distant : Bifurquer avant l’impact : l’impasse du capitalisme de surveillance">original</a>)</li>
<li><a href="/david/cache/2022/58f10e6e52b49d69b79d1793482f1cf0/" title="Accès à l’article dans le cache local : Home invasion">Home invasion</a> (<a href="https://www.hughrundle.net/home-invasion/" title="Accès à l’article original distant : Home invasion">original</a>)</li>
<li><a href="/david/cache/2022/94210cf35e7b73fcf5d3ab3c20acc1c6/" title="Accès à l’article dans le cache local : cailloux n°96 : rêver sincèrement">cailloux n°96 : rêver sincèrement</a> (<a href="https://cailloux.substack.com/p/96-rever-sincerement" title="Accès à l’article original distant : cailloux n°96 : rêver sincèrement">original</a>)</li>
<li><a href="/david/cache/2022/985e33814839a9c113720a5142caec0e/" title="Accès à l’article dans le cache local : Long Distance Thinking">Long Distance Thinking</a> (<a href="https://simonsarris.substack.com/p/long-distance-thinking" title="Accès à l’article original distant : Long Distance Thinking">original</a>)</li>
@@ -333,12 +349,16 @@
<li><a href="/david/cache/2022/1ab2a594ae40deb0f4443807f1fa7596/" title="Accès à l’article dans le cache local : Performances trop bonnes">Performances trop bonnes</a> (<a href="https://nota-bene.org/Performances-trop-bonnes" title="Accès à l’article original distant : Performances trop bonnes">original</a>)</li>
<li><a href="/david/cache/2022/2b4baf23121e6a8cfb4d29008e478770/" title="Accès à l’article dans le cache local : Mastodon on your own domain without hosting a server">Mastodon on your own domain without hosting a server</a> (<a href="https://blog.maartenballiauw.be/post/2022/11/05/mastodon-own-donain-without-hosting-server.html" title="Accès à l’article original distant : Mastodon on your own domain without hosting a server">original</a>)</li>
<li><a href="/david/cache/2022/48c2a5401b4445c412167f0ae1280ad8/" title="Accès à l’article dans le cache local : Cooklang - Managing Recipes in Git">Cooklang - Managing Recipes in Git</a> (<a href="https://briansunter.com/blog/cooklang/" title="Accès à l’article original distant : Cooklang - Managing Recipes in Git">original</a>)</li>
<li><a href="/david/cache/2022/c7ebf32ee18c4f44c452f864729a21a8/" title="Accès à l’article dans le cache local : The drone operators who halted Russian convoy headed for Kyiv">The drone operators who halted Russian convoy headed for Kyiv</a> (<a href="https://www.theguardian.com/world/2022/mar/28/the-drone-operators-who-halted-the-russian-armoured-vehicles-heading-for-kyiv" title="Accès à l’article original distant : The drone operators who halted Russian convoy headed for Kyiv">original</a>)</li>
<li><a href="/david/cache/2022/9bbbfc14050c3870bd64c89123233050/" title="Accès à l’article dans le cache local : Covid. - Roden Newsletter Archive">Covid. - Roden Newsletter Archive</a> (<a href="https://craigmod.com/roden/069/" title="Accès à l’article original distant : Covid. - Roden Newsletter Archive">original</a>)</li>
<li><a href="/david/cache/2022/3f045054587e15191052008ca455dc3c/" title="Accès à l’article dans le cache local : Mastodon, fin de (première) partie ?">Mastodon, fin de (première) partie ?</a> (<a href="https://framablog.org/2022/11/12/mastodon-fin-de-premiere-partie/" title="Accès à l’article original distant : Mastodon, fin de (première) partie ?">original</a>)</li>
<li><a href="/david/cache/2022/0d734a1e83d3188bb008a057aadd4a74/" title="Accès à l’article dans le cache local : ☕️ Journal : Faire équipe">☕️ Journal : Faire équipe</a> (<a href="https://oncletom.io/2022/01/30/faire-equipe/" title="Accès à l’article original distant : ☕️ Journal : Faire équipe">original</a>)</li>
<li><a href="/david/cache/2022/571d5d3f9d63d9ec4a8107e5abd15941/" title="Accès à l’article dans le cache local : Why not everything I do is “Open” or “Free”">Why not everything I do is “Open” or “Free”</a> (<a href="https://overengineer.dev/blog/2021/12/12/why-not-everything-i-do-is-open-or-free.html" title="Accès à l’article original distant : Why not everything I do is “Open” or “Free”">original</a>)</li>
@@ -351,12 +371,16 @@
<li><a href="/david/cache/2022/1dd0383e3a416109e4259144d7a67e2d/" title="Accès à l’article dans le cache local : Write plain text files">Write plain text files</a> (<a href="https://sive.rs/plaintext" title="Accès à l’article original distant : Write plain text files">original</a>)</li>
<li><a href="/david/cache/2022/cb9be8bdfda6c6e03820a5ebae0cb470/" title="Accès à l’article dans le cache local : Mastodon - Changer d'instance">Mastodon - Changer d'instance</a> (<a href="https://pmazagol.gitpages.huma-num.fr/migration-mastodon/" title="Accès à l’article original distant : Mastodon - Changer d'instance">original</a>)</li>
<li><a href="/david/cache/2022/c7e286caaab59b36a6d11893d7d08aba/" title="Accès à l’article dans le cache local : Justinien Tribillon">Justinien Tribillon</a> (<a href="https://thecreativeindependent.com/people/writer-and-urbanist-justinien-tribillon-on-how-being-lazy-can-help-you-be-productive/" title="Accès à l’article original distant : Justinien Tribillon">original</a>)</li>
<li><a href="/david/cache/2022/87b3d4be1d7a1e72be8d411a0eb59249/" title="Accès à l’article dans le cache local : Les Jazzettes #20">Les Jazzettes #20</a> (<a href="https://jazzettes.substack.com/p/les-jazzettes-20" title="Accès à l’article original distant : Les Jazzettes #20">original</a>)</li>
<li><a href="/david/cache/2022/c0e7ed5590b520f176aacfd76ae03188/" title="Accès à l’article dans le cache local : Mechanical Ragger: Print typesetting for the web">Mechanical Ragger: Print typesetting for the web</a> (<a href="https://oak.is/thinking/mechanical-ragger/" title="Accès à l’article original distant : Mechanical Ragger: Print typesetting for the web">original</a>)</li>
<li><a href="/david/cache/2022/19bb6f887f452188b738599777d7014d/" title="Accès à l’article dans le cache local : Setting up a personal Fediverse ID / Mastodon instance">Setting up a personal Fediverse ID / Mastodon instance</a> (<a href="https://jacobian.org/til/my-mastodon-instance/" title="Accès à l’article original distant : Setting up a personal Fediverse ID / Mastodon instance">original</a>)</li>
<li><a href="/david/cache/2022/147b20ce875cacebd10f490f2690ce57/" title="Accès à l’article dans le cache local : The Weakness of the Despot">The Weakness of the Despot</a> (<a href="https://www.newyorker.com/news/q-and-a/stephen-kotkin-putin-russia-ukraine-stalin" title="Accès à l’article original distant : The Weakness of the Despot">original</a>)</li>
<li><a href="/david/cache/2022/4cea6f484d1e161074216e23d8826dea/" title="Accès à l’article dans le cache local : Innovating beyond libraries and frameworks">Innovating beyond libraries and frameworks</a> (<a href="https://nilsnh.no/2022/04/09/innovating-beyond-libraries-and-frameworks/" title="Accès à l’article original distant : Innovating beyond libraries and frameworks">original</a>)</li>

Loading…
Cancel
Save