blueskyArchitecture/BlueskyArchitecture.org

253 lines
10 KiB
Org Mode
Raw Normal View History

2024-05-20 08:22:33 +00:00
#+TITLE: Bluesky Architecture compared to other social media services
#+SUBTITLE: [[file:?print-pdf][Printable version]]
#+DATE: [2024-05-24 Fri]
#+AUTHOR: Éibhear Ó hAnluain
#+EMAIL: eibhear.geo@gmail.com
#+OPTIONS: ':nil *:t -:t ::t <:t \n:nil ^:{} author:t c:nil creator:nil
#+OPTIONS: d:nil date:t e:t email:t f:t inline:t num:nil p:nil pri:nil
#+OPTIONS: stat:nil tags:nil tasks:t tex:t timestamp:nil toc:1 todo:nil |:t
#+DESCRIPTION: A discussion of Bluesky's architecture as it relates to other social media services
#+LANGUAGE: en
#+REVEAL_ROOT: ./reveal.js
#+REVEAL_INIT_OPTIONS: transition:'none', margin: 0.1, slideNumber:true
#+REVEAL_THEME: white
#+REVEAL_HLEVEL: 1
#+REVEAL_EXTRA_CSS: ./e-reveal.css
#+REVEAL_EXTRA_CSS: ./gridding.css
#+REVEAL_DEFAULT_SLIDE_BACKGROUND: ./bCardBackground.png
#+REVEAL_TITLE_SLIDE_BACKGROUND: ./bCardBackground.png
#+REVEAL_TOC_SLIDE_BACKGROUND: ./bCardBackground.png
#+REVEAL_DEFAULT_SLIDE_SIZE: 100%
#+REVEAL_TITLE_SLIDE_SIZE: 100%
#+REVEAL_TOC_SLIDE_SIZE: 100%
* Notes :noexport:
* Introduction
#+REVEAL_HTML: <div class="e-frame">
Boo!
#+REVEAL_HTML: </div>
* General social media architectures
** Simplistic view 1/2 -- overview
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 90%
file:structurizr-1-001-GenericSocial-01.png
#+REVEAL_HTML: </div>
** Simplistic view 2/2 -- services
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="gridded_frame_with_columns e-frame">
#+REVEAL_HTML: <div class="one_of_2_columns">
#+ATTR_HTML: :width 40%
2024-05-20 08:22:33 +00:00
file:structurizr-1-002-GenericSocial-02.png
#+REVEAL_HTML: </div>
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="one_of_2_columns">
#+ATTR_REVEAL: :frag (appear)
- Social media user access the app
- The app interacts with the API
- The API is the gateway for the database of posts, responses, likes, etc.
#+REVEAL_HTML: </div>
#+REVEAL_HTML: </div>
2024-05-20 08:22:33 +00:00
** More realistic view 1/4 -- overview
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 90%
file:structurizr-1-003-RealisticSocial-01.png
#+REVEAL_HTML: </div>
** More realistic view 2/4 -- basic services
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="gridded_frame_with_columns e-frame">
#+REVEAL_HTML: <div class="one_of_2_columns">
#+ATTR_HTML: :width 70%
2024-05-20 08:22:33 +00:00
file:structurizr-1-004-RealisticSocial-02.png
#+REVEAL_HTML: </div>
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="one_of_2_columns">
#+ATTR_REVEAL: :frag (appear)
- Social media user access the app
- The app interacts with the API
- The API is the gateway for the database of posts, responses, likes, etc.
- The API also captures data for building profiles of users for targeting purposes
- The algorithmic feed generator guides the API on what posts to place into the app's feed
#+REVEAL_HTML: </div>
#+REVEAL_HTML: </div>
2024-05-20 08:22:33 +00:00
** More realistic view 3/4 -- the algorithm
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="gridded_frame_with_columns e-frame">
#+REVEAL_HTML: <div class="one_of_2_columns">
#+ATTR_HTML: :width 70%
2024-05-20 08:22:33 +00:00
file:structurizr-1-005-RealisticSocial-03.png
#+REVEAL_HTML: </div>
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="one_of_2_columns">
- Social media user access the app
- The app interacts with the API
- The API is the gateway for the database of posts, responses, likes, etc.
- The API also captures data for building profiles of users for targeting purposes
- The algorithmic feed generator guides the API on what posts to place into the app's feed
- Algorithmic feeds are created by the service administrator, using an app only /they/ have access to
#+REVEAL_HTML: </div>
#+REVEAL_HTML: </div>
2024-05-20 08:22:33 +00:00
** More realistic view 4/4 -- content moderation
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="gridded_frame_with_columns e-frame">
#+REVEAL_HTML: <div class="one_of_2_columns">
#+ATTR_HTML: :width 100%
2024-05-20 08:22:33 +00:00
file:structurizr-1-006-RealisticSocial-04.png
#+REVEAL_HTML: </div>
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="one_of_2_columns">
- Social media user access the app
- The app interacts with the API
- The API is the gateway for the database of posts, responses, likes, etc.
- The API also captures data for building profiles of users for targeting purposes
- The algorithmic feed generator guides the API on what posts to place into the app's feed
- Algorithmic feeds are created by the service administrator, using an app only /they/ have access to
- 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
#+REVEAL_HTML: </div>
#+REVEAL_HTML: </div>
2024-05-20 08:22:33 +00:00
* Federated social media services
** Federated services 1/8 -- overview
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 75%
file:structurizr-1-007-FederatedSocial-01.png
#+REVEAL_HTML: </div>
** Federated services 2/8 -- internal, administration and content moderation services
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="gridded_frame_with_columns e-frame">
#+REVEAL_HTML: <div class="one_of_2_columns">
#+ATTR_HTML: :width 70%
2024-05-20 08:22:33 +00:00
file:structurizr-1-008-FederatedSocial-02.png
#+REVEAL_HTML: </div>
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="one_of_2_columns">
#+ATTR_REVEAL: :frag (appear)
- Same as before, the user access the service through an App that uses an API
- As federated services are small, the administrator and the moderator are the one person
- No algorithmic feeds, though
+ not popular in the fediverse community
+ difficult to implement in a federated environment.
#+REVEAL_HTML: </div>
#+REVEAL_HTML: </div>
2024-05-20 08:22:33 +00:00
** Federated services 3/8 -- federation 1
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="gridded_frame_with_columns e-frame">
#+REVEAL_HTML: <div class="one_of_2_columns" style="width: 60%">
#+ATTR_HTML: :width 100%
2024-05-20 08:22:33 +00:00
file:structurizr-1-009-FederatedSocial-03.png
#+REVEAL_HTML: </div>
2024-05-20 11:25:54 +00:00
#+REVEAL_HTML: <div class="one_of_2_columns" style="width: 40%">
#+ATTR_REVEAL: :frag (none none none appear)
- Same as before, the user access the service through an App that uses an API
- As federated services are small, the administrator and the moderator are the one person
- No algorithmic feeds, though
+ not popular in the fediverse community
+ difficult to implement in a federated environment.
- Federation service to push activity out to the federated network
- Federation API to take in activity from other nodes
- A logical database of inbound federated posts
- Federation using ActivityPub standard
#+REVEAL_HTML: </div>
#+REVEAL_HTML: </div>
2024-05-20 08:22:33 +00:00
** Federated services 4/8 -- federation 2
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 75%
file:structurizr-1-010-FederatedSocial-04.png
#+REVEAL_HTML: </div>
** Federated services 5/8 -- federation 3
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 75%
file:structurizr-1-011-FederatedSocial-05.png
#+REVEAL_HTML: </div>
** Federated services 6/8 -- federation 4
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 75%
file:structurizr-1-012-FederatedSocial-06.png
#+REVEAL_HTML: </div>
** Federated services 7/8 -- federation 5
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 75%
file:structurizr-1-013-FederatedSocial-07.png
#+REVEAL_HTML: </div>
** Federated services 8/8 -- federation 6
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 75%
file:structurizr-1-014-FederatedSocial-08.png
#+REVEAL_HTML: </div>
2024-05-20 13:10:29 +00:00
* Bluesky
** Basic Bluesky 1/2
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 100%
file:structurizr-1-015-BlueskyBasic-01.png
#+REVEAL_HTML: </div>
** Basic Bluesky 2/2
#+REVEAL_HTML: <div class="gridded_frame_with_columns e-frame">
#+REVEAL_HTML: <div class="one_of_2_columns" style="width: 70%">
#+ATTR_HTML: :width 100%
file:structurizr-1-016-BlueskyBasic-02.png
#+REVEAL_HTML: </div>
#+REVEAL_HTML: <div class="one_of_2_columns" style="width: 30%">
#+ATTR_REVEAL: :frag (appear)
- User interfaces with an app hosted by the /AppView/
- The /AppView/ includes an API (allowing for bot-like interactions)
- The /AppView/ stores and reads data from the /Personal Data Server/ (PDS)
- Bluesky resolved user identities using "DIDs" (Distributed IDs)
- The Bluesky admin uses a separate service for preparing algorithmic feeds
- The Bluesky moderator applies labels and actions to posts for trust and safety through a dedicated service
#+REVEAL_HTML: </div>
#+REVEAL_HTML: </div>
* Bluesky -- Identities
** Bluesky Identities 1/4
#+REVEAL_HTML: <div class="gridded_frame_with_columns e-frame">
#+REVEAL_HTML: <div class="one_of_2_columns" style="width: 35%">
#+ATTR_HTML: :width 100%
file:structurizr-1-017-BlueskyIdentity-01.png
#+REVEAL_HTML: </div>
#+REVEAL_HTML: <div class="one_of_2_columns" style="width: 65%">
#+ATTR_REVEAL: :frag (appear)
- User's typical Bluesky ID is =@<user-handle>.bsky.social=
+ e.g. =@theauldsthretch.bsky.social=
- Users can set up their own handle, =@<user-handle>.<domain>=. E.g. (and these are all real IDs) ...
+ =@astrokatie.com= -- a cosmologist
+ =@eibhear.gibiris.org= -- the author
+ =@wyden.senate.gov= -- a U.S. Senator
- User must control the domain or be a legitimate member of the domain's community
- Domain-based handle resolves to a DID, either by DNS or =.well-known=:
#+BEGIN_SRC shell
$ dig _atproto.eibhear.gibiris.org TXT
...
;; ANSWER SECTION:
_atproto.eibhear.gibiris.org. 3600 IN TXT "did=did:plc:23mysztmt7dh3l5lzhinzafi"
$ curl https://theauldsthretch.bsky.social/.well-known/atproto-did
did:plc:avzdf5esd7xpbgsgh7lx4kzq
#+END_SRC
#+REVEAL_HTML: </div>
#+REVEAL_HTML: </div>
** Bluesky Identities 2/4
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 100%
file:structurizr-1-018-BlueskyIdentity-02.png
#+REVEAL_HTML: </div>
** Bluesky Identities 3/4
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 100%
file:structurizr-1-019-BlueskyIdentity-03.png
#+REVEAL_HTML: </div>
** Bluesky Identities 3/4
#+REVEAL_HTML: <div class="e-frame">
#+ATTR_HTML: :width 100%
file:structurizr-1-020-BlueskyIdentity-04.png
#+REVEAL_HTML: </div>