Mastodon normalizer: Difference between revisions

From ludd
Adamw (talk | contribs)
Improve introduction
Adamw (talk | contribs)
 
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Project|status=beta|url=https://normalizer.webflux.us/}}My introduction to "undirected search" was two brief but eventful years working for Jibril Jackson's startup HYVE, which made me aware of Dunbar's number, the limits of how much attention we can pay our friends, and how social media tilts the scales so that the loudest voice is heard most.
{{Project|status=demo|url=https://normalizer.webflux.us/|source=https://gitlab.com/adamwight/mastodon-normalizer}}'''Problem statement:''' Social media amplifies the loudest voices more than is necessary.  In real life, we know that a person who speaks often and loudly might be full of good insights, or they might just suffer from an excess of hot air.  Either way, we aren't obliged to give this person all of our attention just because they're loud.


When @futurebird@sauropods.win mentioned the fun idea of a [https://sauropods.win/@futurebird/109971101661561998 customizable timeline] as something that comes up regularly in discussions about improving Mastodon, I recognized the perennial problem and decided to give a whack at the solution so that we can see what it looks like.  I'm happy with the results so far!  You can try the demo using a Mastodon from anywhere, and the tool acts as a web client letting you browse your own account through a simple set of lenses.
There is rarely any way to deal with this, no alternative between full volume and blocked, to allow us to better hear the quieter voices.


If you like the idea, please feel free to borrow [https://gitlab.com/adamwight/mastodon-normalizer the code] or reimplement it on your preferred platform.
== Experimenting with normalization ==
[[File:Preferences for normalizer v0.2.7.png|thumb|Preferences pane]]When @futurebird@sauropods.win mentioned the fun idea of a [https://sauropods.win/@futurebird/109971101661561998 customizable timeline] allowing us to check in on our friends' latest posts, I was excited to see how it might be applied.  I'm happy with the results so far!  You can login to the [https://normalizer.webflux.us/ demo service] using your own Mastodon account and instance, or try out the [https://normalizer.webflux.us/help guided tour] as a guest.


== Normalization ==
Preferences currently look this this.<div style="clear: both;"></div>
If one topic or author is much more prolific than another, then the louder channel will tend to draw more attention.  The problem is often framed as "signal to noise", but we're looking at something more nuanced which we can call "volume vs. balance" because the content might not contain any useless noise but is simply showing too much of one thing and not enough of another.
[[File:Equal height.png|right|thumb|Equal height for each author]]


In audio engineering, the same problem exists when one loud instrument drowns out another softer sound.  The standard solution is to normalize the audio, bringing the average or peak loudness of all instruments to the same level.  These normalized tracks will also be mixed together to fine-tune the loudness of each instrument.
The default view is called the "orthogonal" view, which gives each author '''equal vertical space''' in your timeline regardless of how many posts they write or how big their attachments.


As social media readers, we're instinctively aware that each channel has differing relative volumes, and we adapt according to various strategies: muting the spammiest accounts, automatic filtering, skimming aggressively, and so on(It's also interesting that these strategies have audio analogies: mixing channels, noise filtering and fast-forwarding, respectively.)
A more extreme version of this view is the "Check in" mode which shows only one post from each accountThis can be seen as a normalization of both vertical and horizontal space.


@futurebird's suggestion is implemented in my demo as the "Check in" mode, and it will show exactly one recent post from each account you've subscribed to.
<div style="clear: both;"></div>


== Dimensionality ==
[[File:Normalizer with focused row.png|thumb|Focused and expanded row]]
Playing with the "check in" mode, it succeeds in leveling channels so that everyone gets an equal chance to be seen, however it's a painfully narrow viewport, like watching a concert through an arrowslitHow can we cross the strengths of a chronological timeline with the breadth of multiple channels, while still normalizing channel loudness?  An obvious interpretation is that the two dimensions can be shown at right angles in a two-dimensional view.  In my demo this is called "Orthogonal" mode, in which you can scroll channels vertically and then read individual timelines by scrolling horizontally.
Clicking on a row of posts will expand and focusTo expand all posts by default, choose the "natural" row height preference.


== Customization ==
<div style="clear: both;"></div>
Like in a fairy tale, these experiments have satisfied the programming "rule of three" and I'm ready to collapse the different feed styles down into something that can be generalized.  As a first step, I'll turn the parameters into visual knobs that can be seen and adjusted by the user.


In the long term, the algorithm should be fully flexible and visually-programmable, and there would be a library for sharing your algorithms with others.  
== Time dimension ==
[[File:Time axis.png|right|thumb|Time axis]]
If we reintroduce the timeline but with its axis tipped by 90 degrees, we can list all of each author's posts as an isolated strip running from left to right.
<div style="clear: both;"></div>


== Similar projects ==
== Development ==
So far, this software is the labor of one unpaid person acting on friendly suggestions.  Contributions, suggestions or other resources are welcome!


* [https://terhech.de/ebou/ Ebou by Benedikt Terhechte] ([https://github.com/terhechte/Ebou source code]) shows a timeline with a single card for each user, and clicking on a user expands their timeline into a new column.  Looks very active as of August 2023.
Its architecture is a server-side, Elixir [https://hexdocs.pm/phoenix_live_view/welcome.html Phoenix Live View] application which updates the user's browser by sending HTML over a websocket.  It's authenticated temporarily to act as the user.  Posts and tokens are kept in server memory and kept as state for the session, then forgotten on close.
 
In the long term, user algorithms will ideally be visually- and script-programmable, and shareable.
 
== Resources ==
 
=== Get involved ===
 
* Try out the [https://normalizer.webflux.us demo site].
* Read and install the [https://gitlab.com/adamwight/mastodon-normalizer source code].
* Write to @a@social.wikimedia.de
 
=== Similar projects ===
* [https://terhech.de/ebou/ Ebou by Benedikt Terhechte] ([https://github.com/terhechte/Ebou source code]) ([https://sauropods.win/@h_albermann@mastodon.social/109972305658551708 highlighted] by @h_albermann) shows a timeline with a single card for each user, and clicking on a user expands their timeline into a new column.  Looks very active as of August 2023.
* Bluesky's [https://blueskyweb.org/blog/7-27-2023-custom-feeds "marketplace of algorithms"].
 
=== Reporting related to the topic ===
 
* Young, Nora (2023-09-08).  [https://www.cbc.ca/radio/spark/eurpoe-digital-services-act-julia-angwin-1.6960911 "As EU law hopes to rein in Big Tech's algorithms, this reporter wants a 'third path'"]. [https://www.cbc.ca/radio/spark Spark].  Retrieved 2023-09-11.

Latest revision as of 21:02, 19 July 2024

Problem statement: Social media amplifies the loudest voices more than is necessary. In real life, we know that a person who speaks often and loudly might be full of good insights, or they might just suffer from an excess of hot air. Either way, we aren't obliged to give this person all of our attention just because they're loud.

There is rarely any way to deal with this, no alternative between full volume and blocked, to allow us to better hear the quieter voices.

Experimenting with normalization[edit | edit source]

Preferences pane

When @futurebird@sauropods.win mentioned the fun idea of a customizable timeline allowing us to check in on our friends' latest posts, I was excited to see how it might be applied. I'm happy with the results so far! You can login to the demo service using your own Mastodon account and instance, or try out the guided tour as a guest. Preferences currently look this this.

Equal height for each author

The default view is called the "orthogonal" view, which gives each author equal vertical space in your timeline regardless of how many posts they write or how big their attachments.

A more extreme version of this view is the "Check in" mode which shows only one post from each account. This can be seen as a normalization of both vertical and horizontal space.

Focused and expanded row

Clicking on a row of posts will expand and focus. To expand all posts by default, choose the "natural" row height preference.

Time dimension[edit | edit source]

Time axis

If we reintroduce the timeline but with its axis tipped by 90 degrees, we can list all of each author's posts as an isolated strip running from left to right.

Development[edit | edit source]

So far, this software is the labor of one unpaid person acting on friendly suggestions. Contributions, suggestions or other resources are welcome!

Its architecture is a server-side, Elixir Phoenix Live View application which updates the user's browser by sending HTML over a websocket. It's authenticated temporarily to act as the user. Posts and tokens are kept in server memory and kept as state for the session, then forgotten on close.

In the long term, user algorithms will ideally be visually- and script-programmable, and shareable.

Resources[edit | edit source]

Get involved[edit | edit source]

Similar projects[edit | edit source]

Reporting related to the topic[edit | edit source]