blueskyArchitecture/BlueskyArchitecture.html

443 lines
15 KiB
HTML
Raw Normal View History

2024-05-20 08:22:33 +00:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Bluesky Architecture compared to other social media services</title>
<meta name="author" content="Éibhear Ó hAnluain"/>
<meta name="description" content="A discussion of Bluesky's architecture as it relates to other social media services"/>
<meta name="keywords" content=""/>
<style type="text/css">
.underline { text-decoration: underline; }
</style>
<link rel="stylesheet" href="./reveal.js/dist/reveal.css"/>
<link rel="stylesheet" href="./reveal.js/dist/theme/white.css" id="theme"/>
<link rel="stylesheet" href="./e-reveal.css"/>
<link rel="stylesheet" href="./gridding.css"/>
</head>
<body>
<div class="reveal">
<div class="slides">
<section id="sec-title-slide" data-background="./bCardBackground.png"><h1 class="title">Bluesky Architecture compared to other social media services</h1><p class="subtitle"><a href="?print-pdf">Printable version</a></p>
<h2 class="author">Éibhear Ó hAnluain</h2><h2 class="email"><a href="mailto:eibhear.geo@gmail.com">eibhear.geo@gmail.com</a></h2><h2 class="date">2024-05-24 Fri 00:00</h2>
</section>
<section id="sec-table-of-contents" data-background="./bCardBackground.png"><div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
2024-05-20 13:10:29 +00:00
<li><a href="#/slide-org4f8ae77">Introduction</a></li>
<li><a href="#/slide-orgd38ec38">General social media architectures</a></li>
<li><a href="#/slide-orge44ce74">Federated social media services</a></li>
<li><a href="#/slide-org230375d">Bluesky</a></li>
<li><a href="#/slide-org9a49751">Bluesky &#x2013; Identities</a></li>
2024-05-20 08:22:33 +00:00
</ul>
</div>
</div>
</section>
<section>
2024-05-20 13:10:29 +00:00
<section id="slide-org4f8ae77" data-background="./bCardBackground.png">
<h2 id="org4f8ae77">Introduction</h2>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
<p>
Boo!
</p>
</div>
</section>
</section>
<section>
2024-05-20 13:10:29 +00:00
<section id="slide-orgd38ec38" data-background="./bCardBackground.png">
<h2 id="orgd38ec38">General social media architectures</h2>
<div class="outline-text-2" id="text-orgd38ec38">
2024-05-20 08:22:33 +00:00
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org28f44a5" data-background="./bCardBackground.png">
<h3 id="org28f44a5">Simplistic view 1/2 &#x2013; overview</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-20 13:10:29 +00:00
<div id="orgecdb1a0" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-001-GenericSocial-01.png" alt="structurizr-1-001-GenericSocial-01.png" width="90%" />
</p>
</div>
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org399a495" data-background="./bCardBackground.png">
<h3 id="org399a495">Simplistic view 2/2 &#x2013; services</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns">
2024-05-20 08:22:33 +00:00
2024-05-20 13:10:29 +00:00
<div id="orgeb3935b" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-002-GenericSocial-02.png" alt="structurizr-1-002-GenericSocial-02.png" width="40%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li class="fragment appear">Social media user access the app</li>
<li class="fragment appear">The app interacts with the API</li>
<li class="fragment appear">The API is the gateway for the database of posts, responses, likes, etc.</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org3782a70" data-background="./bCardBackground.png">
<h3 id="org3782a70">More realistic view 1/4 &#x2013; overview</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-20 13:10:29 +00:00
<div id="org33a7cb3" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-003-RealisticSocial-01.png" alt="structurizr-1-003-RealisticSocial-01.png" width="90%" />
</p>
</div>
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org6e7c56b" data-background="./bCardBackground.png">
<h3 id="org6e7c56b">More realistic view 2/4 &#x2013; basic services</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns">
2024-05-20 08:22:33 +00:00
2024-05-20 13:10:29 +00:00
<div id="orgcc7daf2" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-004-RealisticSocial-02.png" alt="structurizr-1-004-RealisticSocial-02.png" width="70%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li class="fragment appear">Social media user access the app</li>
<li class="fragment appear">The app interacts with the API</li>
<li class="fragment appear">The API is the gateway for the database of posts, responses, likes, etc.</li>
<li class="fragment appear">The API also captures data for building profiles of users for targeting purposes</li>
<li class="fragment appear">The algorithmic feed generator guides the API on what posts to place into the app's feed</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org38114eb" data-background="./bCardBackground.png">
<h3 id="org38114eb">More realistic view 3/4 &#x2013; the algorithm</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
2024-05-20 08:22:33 +00:00
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
2024-05-20 13:10:29 +00:00
<div id="org09bb742" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-005-RealisticSocial-03.png" alt="structurizr-1-005-RealisticSocial-03.png" width="70%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li>Social media user access the app</li>
<li>The app interacts with the API</li>
<li>The API is the gateway for the database of posts, responses, likes, etc.</li>
<li>The API also captures data for building profiles of users for targeting purposes</li>
<li>The algorithmic feed generator guides the API on what posts to place into the app's feed</li>
<li>Algorithmic feeds are created by the service administrator, using an app only <i>they</i> have access to</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org9bdf383" data-background="./bCardBackground.png">
<h3 id="org9bdf383">More realistic view 4/4 &#x2013; content moderation</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns">
2024-05-20 08:22:33 +00:00
2024-05-20 13:10:29 +00:00
<div id="org1cb03f2" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-006-RealisticSocial-04.png" alt="structurizr-1-006-RealisticSocial-04.png" width="100%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li>Social media user access the app</li>
<li>The app interacts with the API</li>
<li>The API is the gateway for the database of posts, responses, likes, etc.</li>
<li>The API also captures data for building profiles of users for targeting purposes</li>
<li>The algorithmic feed generator guides the API on what posts to place into the app's feed</li>
<li>Algorithmic feeds are created by the service administrator, using an app only <i>they</i> have access to</li>
<li>Moderation is also performed by a member of the service's staff, using a dedicate app and services the the user doesn't have access to</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
</section>
<section>
2024-05-20 13:10:29 +00:00
<section id="slide-orge44ce74" data-background="./bCardBackground.png">
<h2 id="orge44ce74">Federated social media services</h2>
<div class="outline-text-2" id="text-orge44ce74">
2024-05-20 08:22:33 +00:00
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org9a577a7" data-background="./bCardBackground.png">
<h3 id="org9a577a7">Federated services 1/8 &#x2013; overview</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-20 13:10:29 +00:00
<div id="org5e45ba4" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-007-FederatedSocial-01.png" alt="structurizr-1-007-FederatedSocial-01.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-orgb69e512" data-background="./bCardBackground.png">
<h3 id="orgb69e512">Federated services 2/8 &#x2013; internal, administration and content moderation services</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
2024-05-20 08:22:33 +00:00
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
2024-05-20 13:10:29 +00:00
<div id="orga88c98c" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-008-FederatedSocial-02.png" alt="structurizr-1-008-FederatedSocial-02.png" width="70%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns">
<ul>
<li class="fragment appear">Same as before, the user access the service through an App that uses an API</li>
<li class="fragment appear">As federated services are small, the administrator and the moderator are the one person</li>
<li class="fragment appear">No algorithmic feeds, though
<ul>
<li>not popular in the fediverse community</li>
<li>difficult to implement in a federated environment.</li>
</ul></li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org15b2c44" data-background="./bCardBackground.png">
<h3 id="org15b2c44">Federated services 3/8 &#x2013; federation 1</h3>
2024-05-20 11:25:54 +00:00
<div class="gridded_frame_with_columns e-frame">
2024-05-20 08:22:33 +00:00
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns" style="width: 60%">
2024-05-20 13:10:29 +00:00
<div id="org311f8aa" class="figure">
2024-05-20 11:25:54 +00:00
<p><img src="structurizr-1-009-FederatedSocial-03.png" alt="structurizr-1-009-FederatedSocial-03.png" width="100%" />
2024-05-20 08:22:33 +00:00
</p>
</div>
</div>
2024-05-20 11:25:54 +00:00
<div class="one_of_2_columns" style="width: 40%">
<ul>
<li>Same as before, the user access the service through an App that uses an API</li>
<li>As federated services are small, the administrator and the moderator are the one person</li>
<li>No algorithmic feeds, though
<ul>
<li>not popular in the fediverse community</li>
<li>difficult to implement in a federated environment.</li>
</ul></li>
<li class="fragment appear">Federation service to push activity out to the federated network</li>
<li class="fragment appear">Federation API to take in activity from other nodes</li>
<li class="fragment appear">A logical database of inbound federated posts</li>
<li class="fragment appear">Federation using ActivityPub standard</li>
</ul>
</div>
</div>
2024-05-20 08:22:33 +00:00
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-orgad94bf1" data-background="./bCardBackground.png">
<h3 id="orgad94bf1">Federated services 4/8 &#x2013; federation 2</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-20 13:10:29 +00:00
<div id="org8d27a22" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-010-FederatedSocial-04.png" alt="structurizr-1-010-FederatedSocial-04.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org8221162" data-background="./bCardBackground.png">
<h3 id="org8221162">Federated services 5/8 &#x2013; federation 3</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-20 13:10:29 +00:00
<div id="org239cb08" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-011-FederatedSocial-05.png" alt="structurizr-1-011-FederatedSocial-05.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org8005eff" data-background="./bCardBackground.png">
<h3 id="org8005eff">Federated services 6/8 &#x2013; federation 4</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-20 13:10:29 +00:00
<div id="org8080e39" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-012-FederatedSocial-06.png" alt="structurizr-1-012-FederatedSocial-06.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-org44a52d8" data-background="./bCardBackground.png">
<h3 id="org44a52d8">Federated services 7/8 &#x2013; federation 5</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-20 13:10:29 +00:00
<div id="org4d8eff7" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-013-FederatedSocial-07.png" alt="structurizr-1-013-FederatedSocial-07.png" width="75%" />
</p>
</div>
</div>
</section>
2024-05-20 13:10:29 +00:00
<section id="slide-orgee80194" data-background="./bCardBackground.png">
<h3 id="orgee80194">Federated services 8/8 &#x2013; federation 6</h3>
2024-05-20 08:22:33 +00:00
<div class="e-frame">
2024-05-20 13:10:29 +00:00
<div id="org667e94a" class="figure">
2024-05-20 08:22:33 +00:00
<p><img src="structurizr-1-014-FederatedSocial-08.png" alt="structurizr-1-014-FederatedSocial-08.png" width="75%" />
</p>
</div>
</div>
</section>
</section>
2024-05-20 13:10:29 +00:00
<section>
<section id="slide-org230375d" data-background="./bCardBackground.png">
<h2 id="org230375d">Bluesky</h2>
<div class="outline-text-2" id="text-org230375d">
</div>
</section>
<section id="slide-orga5a9952" data-background="./bCardBackground.png">
<h3 id="orga5a9952">Basic Bluesky 1/2</h3>
<div class="e-frame">
<div id="org98d6475" class="figure">
<p><img src="structurizr-1-015-BlueskyBasic-01.png" alt="structurizr-1-015-BlueskyBasic-01.png" width="100%" />
</p>
</div>
</div>
</section>
<section id="slide-orgb7864f1" data-background="./bCardBackground.png">
<h3 id="orgb7864f1">Basic Bluesky 2/2</h3>
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 70%">
<div id="orgccd97e0" class="figure">
<p><img src="structurizr-1-016-BlueskyBasic-02.png" alt="structurizr-1-016-BlueskyBasic-02.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 30%">
<ul>
<li class="fragment appear">User interfaces with an app hosted by the <i>AppView</i></li>
<li class="fragment appear">The <i>AppView</i> includes an API (allowing for bot-like interactions)</li>
<li class="fragment appear">The <i>AppView</i> stores and reads data from the <i>Personal Data Server</i> (PDS)</li>
<li class="fragment appear">Bluesky resolved user identities using "DIDs" (Distributed IDs)</li>
<li class="fragment appear">The Bluesky admin uses a separate service for preparing algorithmic feeds</li>
<li class="fragment appear">The Bluesky moderator applies labels and actions to posts for trust and safety through a dedicated service</li>
</ul>
</div>
</div>
</section>
</section>
<section>
<section id="slide-org9a49751" data-background="./bCardBackground.png">
<h2 id="org9a49751">Bluesky &#x2013; Identities</h2>
<div class="outline-text-2" id="text-org9a49751">
</div>
</section>
<section id="slide-orgf33e1e3" data-background="./bCardBackground.png">
<h3 id="orgf33e1e3">Bluesky Identities 1/4</h3>
<div class="gridded_frame_with_columns e-frame">
<div class="one_of_2_columns" style="width: 35%">
<div id="orgb4e3b8a" class="figure">
<p><img src="structurizr-1-017-BlueskyIdentity-01.png" alt="structurizr-1-017-BlueskyIdentity-01.png" width="100%" />
</p>
</div>
</div>
<div class="one_of_2_columns" style="width: 65%">
<ul>
<li class="fragment appear">User's typical Bluesky ID is <code>@&lt;user-handle&gt;.bsky.social</code>
<ul>
<li>e.g. <code>@theauldsthretch.bsky.social</code></li>
</ul></li>
<li class="fragment appear">Users can set up their own handle, <code>@&lt;user-handle&gt;.&lt;domain&gt;</code>. E.g. (and these are all real IDs) &#x2026;
<ul>
<li><code>@astrokatie.com</code> &#x2013; a cosmologist</li>
<li><code>@eibhear.gibiris.org</code> &#x2013; the author</li>
<li><code>@wyden.senate.gov</code> &#x2013; a U.S. Senator</li>
</ul></li>
<li class="fragment appear">User must control the domain or be a legitimate member of the domain's community</li>
<li class="fragment appear"><p>
Domain-based handle resolves to a DID, either by DNS or <code>.well-known</code>:
</p>
<div class="org-src-container">
<pre class="src src-shell" ><code trim>$ dig _atproto.eibhear.gibiris.org TXT
...
;; ANSWER SECTION:
_atproto.eibhear.gibiris.org. 3600 IN TXT <span style="color: #8b2252;">"did=did:plc:23mysztmt7dh3l5lzhinzafi"</span>
$ curl https://theauldsthretch.bsky.social/.well-known/atproto-did
did:plc:avzdf5esd7xpbgsgh7lx4kzq
</code></pre>
</div></li>
</ul>
</div>
</div>
</section>
<section id="slide-orgd207d91" data-background="./bCardBackground.png">
<h3 id="orgd207d91">Bluesky Identities 2/4</h3>
<div class="e-frame">
<div id="orga95c836" class="figure">
<p><img src="structurizr-1-018-BlueskyIdentity-02.png" alt="structurizr-1-018-BlueskyIdentity-02.png" width="100%" />
</p>
</div>
</div>
</section>
<section id="slide-org5e49a33" data-background="./bCardBackground.png">
<h3 id="org5e49a33">Bluesky Identities 3/4</h3>
<div class="e-frame">
<div id="orgb2410fb" class="figure">
<p><img src="structurizr-1-019-BlueskyIdentity-03.png" alt="structurizr-1-019-BlueskyIdentity-03.png" width="100%" />
</p>
</div>
</div>
</section>
<section id="slide-org649da93" data-background="./bCardBackground.png">
<h3 id="org649da93">Bluesky Identities 3/4</h3>
<div class="e-frame">
<div id="org97e4d09" class="figure">
<p><img src="structurizr-1-020-BlueskyIdentity-04.png" alt="structurizr-1-020-BlueskyIdentity-04.png" width="100%" />
</p>
</div>
</div>
</section>
</section>
2024-05-20 08:22:33 +00:00
</div>
</div>
<script src="./reveal.js/dist/reveal.js"></script>
<script src="./reveal.js/plugin/markdown/markdown.js"></script>
<script src="./reveal.js/plugin/zoom/zoom.js"></script>
<script src="./reveal.js/plugin/notes/notes.js"></script>
<script>
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
plugins: [RevealMarkdown, RevealZoom, RevealNotes],
transition:'none', margin: 0.1, slideNumber:true
});
</script>
</body>
</html>