gnusocial.rocks/v3/feed.rss

487 lines
20 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel><title>GNU social V3</title><link>https://gnusocial.rocks/v3/index.html</link>
<description>Development blog where we announce our progress.</description><language>en</language>
<lastBuildDate>Tue, 18 Jan 2022 01:57:52 +0000</lastBuildDate>
<pubDate>Tue, 18 Jan 2022 01:57:52 +0000</pubDate>
<atom:link href="https://gnusocial.rocks/v3/feed.rss" rel="self" type="application/rss+xml" />
<item><title>
Milestone: Web Monetization
</title><description><![CDATA[
<p><a href="https://webmonetization.org/">Web Monetization</a> is being proposed as a W3C
standard at the Web Platform Incubator Community Group.</p>
<p>GNU social now supports that initiative with the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/WebMonetization">Web Monetization plugin</a>.</p>
<p>With this, we also introduce an ActivityPub (FEP pending) GS extension
<code>gs:webmonetizationWallet</code>. This enables actors to support other actors with Web
Monetization in the fediverse.</p>
<p>It looks like this:</p>
<h2>Own profile</h2>
<p><img src="assets/web_monetization/address.png" alt="" title="" /></p>
<h2>In the profile of other actors</h2>
<p><img src="assets/web_monetization/donate.png" alt="" title="" /></p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-web-monetization.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-web-monetization.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Tue, 18 Jan 2022 01:57:40 +0000</pubDate></item>
<item><title>
Milestone: Mute notifications from a conversation
</title><description><![CDATA[
<p>If a conversation in which you have interacted becomes very active and you wish
to stop receiving notifications derived from that, it is now possible:
<img src="assets/conversation/mute.png" alt="" title="" /></p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-mute-notifications-from-a-conversation.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-mute-notifications-from-a-conversation.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Tue, 18 Jan 2022 01:39:10 +0000</pubDate></item>
<item><title>
Milestone: Albums
</title><description><![CDATA[
<p>This is a natural follow up to the <a href="https://www.gnusocial.rocks/v3/milestone-collections.html">Collections Milestone</a>.</p>
<p>An album is a specialisation of an attachment collection, which is itself a
specialisation of a collection.</p>
<p>Albums were implemented with the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/AttachmentCollections">Attachment Collections plugin</a>.</p>
<h2>Here's how it looks</h2>
<h3>Adding an attachment (this is in the right sidebar of attachment pages)</h3>
<p><img src="assets/collection/add_to_collection.png" alt="" title="" /></p>
<h3>List of collections</h3>
<p><img src="assets/collection/meta.png" alt="" title="" /></p>
<h3>Viewing a collection of attachments</h3>
<p><img src="assets/collection/attachments.png" alt="" title="" /></p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-albums.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-albums.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Tue, 18 Jan 2022 01:23:27 +0000</pubDate></item>
<item><title>
Milestone: Collections
</title><description><![CDATA[
<p>We have generalized collections around our search engine. For that introducing
the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Collection">Collection component</a>.</p>
<p>This structure has the following implication:</p>
<pre><code>Collection -&gt; OrderedCollection
|-&gt; Notes (known as Feed)
|-&gt; Actors (known as Circle)
|-&gt; Other Object (known as Collection of ...)
|-&gt; Attachments: AttachmentCollection
|-&gt; Tags: TagCollection
</code></pre>
<p>And it allow us to centralise the scope system in the core, ensuring that no
actor will have access to notes or other objects that shouldn't be able to see.</p>
<p>Finally, with this, a plugin such as <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/NoteTypeFeedFilter">Note Type Feed Filter</a> can be useful in
every note collection (feed).</p>
<p>It also allows plugins such as ActivityPub to <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub/Util/OrderedCollectionController.php">translate every collection
automatically</a>.</p>
<h2>Notes Filter and Sorting Options</h2>
<p><img src="assets/filters/feed.png" alt="" title="" /></p>
<h2>Actors Filter and Sorting Options</h2>
<p><img src="assets/filters/circle.png" alt="" title="" /></p>
<h2>The Search Component</h2>
<h3>Results</h3>
<p><img src="assets/search/results.png" alt="" title="" /></p>
<h3>Note Options</h3>
<p><img src="assets/search/note_options.png" alt="" title="" /></p>
<h3>Actor Options</h3>
<p><img src="assets/search/actor_options.png" alt="" title="" /></p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-collections.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-collections.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Tue, 18 Jan 2022 00:21:29 +0000</pubDate></item>
<item><title>
Milestone: ActivityPub
</title><description><![CDATA[
<p><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub">ActivityPub Plugin source</a>.</p>
<p>This milestone could be just this, what's different from any other ActivityPub
plugin? How is it better than v2's?</p>
<p>It's better in how it's organised and extensible, check the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub/EVENTS.md">EVENTS.md</a> for examples.</p>
<h2>Video of GNU social v3 exchanging notes with GNU social v2.</h2>
<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" title="GNU social v3 federating with GNU social v2 via ActivityPub" src="https://tube.tchncs.de/videos/embed/ca778b22-1af2-4b6f-af3d-f24aac7af9f4" frameborder="0" allowfullscreen></iframe>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-activitypub.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-activitypub.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Fri, 10 Dec 2021 16:34:39 +0000</pubDate></item>
<item><title>
Milestone: Tags
</title><description><![CDATA[
<blockquote>
<p>Due to the high density of technical aspects, we decided to keep this blog
post more on the light side and focus on explaining the new functionalities.
Check our Wiki Milestone entry for all the juicy details.</p>
</blockquote>
<p><strong><a href="https://agile.gnusocial.rocks/doku.php?id=milestones:tags">>WIKI Milestone entry</a></strong></p>
<p>GNU social v2 has tags and lists. It allows you to:</p>
<ul>
<li>search for an <code>#hashtag</code> and see a stream of notes tagged with it;</li>
<li>make lists of actors and mention them with <code>@#list_name</code></li>
<li>self tag and enter a list of people in your instance with the same self tag</li>
</ul>
<p>It is limited with regards to federation of self tags and the <code>@#list_name</code> can't
target remote actors even when they are inside your list.</p>
<h2>What's new with v3?</h2>
<h3>Federated self tags</h3>
<p>We now federate self tags and lists, so that constraint from v2 was moved out of
the way.</p>
<p>In the future, the use of these tags can allow you to find people,
groups and even individual notes that have a tag you're interested in. We only
mean filtering, not magic recommendation algorithms.</p>
<h3>Tag Wrangling</h3>
<p>Proposed by <a href="https://archiveofourown.org/users/licho">@licho</a> in Tue, 02 Jun 2019 17:52:07 GMT:</p>
<blockquote>
<p>I like the tag wrangling feature of AO3, which I think would help for cases of synonymous tags like #introduction and #introductions</p>
<p>https://archiveofourown.org/wrangling_guidelines/11</p>
<p>Is it feasible for !gnusocial ? Or would it cause problems?</p>
</blockquote>
<p>The answer is <strong>yes</strong> and will be released with v3. With the addition of
<a href="https://gnusocial.rocks/v3/milestone-notes-and-actors-with-languages.html">Languages in notes and actors</a> there was little excuse not to be feasible.</p>
<p><img src="assets/tags/feed-note-tag-run.png" alt="" title="" />
<img src="assets/tags/feed-note-tag-running.png" alt="" title="" /></p>
<p>Whenever you post a note containing tags, you can choose whether to
make those tags canonical. This means that, for instance, the tags
<code>#run</code> and <code>#running</code> become the 'same', meaning that when you click on
the link for the <code>#run</code> tag, you'll also see notes tagged #running. You
can opt out of the behaviour by unchecking the "Make note tags
canonical". An identical process occurs for people tags.</p>
<p><img src="assets/tags/checked_make_canonical.png" alt="" title="" /></p>
<p>Internally, this transformation is accomplished by splitting the tag
into words and <a href="https://en.wikipedia.org/wiki/Stemming">stemming</a> each word.</p>
<h3>Related Tags</h3>
<p>In a tag feed, you can see tags that are often used together with the
one you're seeing. This can be useful, for instance, for finding other
content you'd be interested in.</p>
<p><img src="assets/tags/feed-related-notes-shoes.png" alt="" title="" />
<img src="assets/tags/feed-related-notes-running.png" alt="" title="" /></p>
<h3>Improved Tag feeds</h3>
<p><img src="assets/tags/selftag-feed.png" alt="" title="" /></p>
<p>When you click on a tag, be it a note tag or a person tag, you'll see
a feed of notes/people with that tag. You can also edit the feeds you
see in your left panel, so you can follow a given tag.</p>
<h3>Mute Self Tags and Note Tags</h3>
<p><img src="assets/tags/note-options.png" alt="" title="" />
<img src="assets/tags/note-muting.png" alt="" title="" />
<img src="assets/tags/tag-mute-settings.png" alt="" title="" /></p>
<p>If you don't like seeing a given tag in your feeds, for whatever
reason, you can choose to mute it. You can mute a note tag or a person
tag, in which case you wouldn't see any notes from people with that
tag.</p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-tags.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-tags.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Thu, 09 Dec 2021 15:21:18 +0000</pubDate></item>
<item><title>
Milestone: Actor colour theme plugin
</title><description><![CDATA[
<p>Actors are now able to set their own colours, through a brand new plugin: "Oomox".
Those accustomed to customising their own desktop should know where the name comes from ;)</p>
<h2>Here's how it works!</h2>
<p>The Oomox plugin main class catches the "PopulateProfileSettingsTabs" event upon visiting user panel.</p>
<pre><code>public function onPopulateProfileSettingsTabs(Request $request, array &amp;$tabs): bool
{
$tabs[] = [
'title' =&gt; 'Light theme colours',
'desc' =&gt; 'Change the theme colours.',
'controller' =&gt; C\Oomox::oomoxSettingsLight($request),
];
$tabs[] = [
'title' =&gt; 'Dark theme colours',
'desc' =&gt; 'Change the theme colours.',
'controller' =&gt; C\Oomox::oomoxSettingsDark($request),
];
return Event::next;
}
</code></pre>
<p>As made evident by the code, two new tabs are added to profile settings, light and dark theme colours.
Since the page styling follows the system theme, actors may want to style each theme differently, therefore they are treated separately.</p>
<p>The actor's defined colours are then saved in the respective entity and cached.
Finally, the colour preferences are used to render the corresponding CSS file which defines the various colour variables used:</p>
<pre><code>public function oomoxCSS(): Response
{
$user = Common::ensureLoggedIn();
$oomox_table = PluginOomox::getEntity($user);
if (is_null($oomox_table)) {
throw new ClientException(_m('No custom colours defined', 404));
}
$content = Formatting::twigRenderFile('/oomox/root_override.css.twig', ['oomox' =&gt; $oomox_table]);
return new Response($content, status: 200, headers: ['content-type' =&gt; 'text/css']);
}
</code></pre>
<p>Please note, upon rendering for the first time, page render may be blocked until the resulting file is served. Nonetheless, subsequent page renders
won't experience the issue again. That is, if the file is cached by the browser.</p>
<h2>How it looks</h2>
<p>Tabs added using the "PopulateProfileSettingsTabs" event:
<img src="assets/actor_colour_theme_plugin/settings_change_theme_colours.png" alt="User panel Oomox sections" title="" /></p>
<p>Changing the dark theme colours!
<img src="assets/actor_colour_theme_plugin/settings_change_theme_colours3.png" alt="Dark theme colours selection" title="" /></p>
<p>The result of given changes, please note it's no longer a 'dark' theme.
Given a valid colour, it's the actor's responsibility whether or not the colours make sense. So, go wild!
<img src="assets/actor_colour_theme_plugin/settings_change_theme_colours4.png" alt="The resulting colours in action!" title="" /></p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-actor-colour-theme-plugin.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-actor-colour-theme-plugin.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Thu, 09 Dec 2021 14:58:35 +0000</pubDate></item>
<item><title>
Updates: Interface Structure and Flexibility improved
</title><description><![CDATA[
<p>Read the <a href="https://agile.gnusocial.rocks/doku.php?id=interface:frontend_development">Wiki post</a>.</p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/updates-interface-structure-and-flexibility-improved.html</link>
<guid>https://gnusocial.rocks/v3/./updates-interface-structure-and-flexibility-improved.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Thu, 09 Dec 2021 01:20:44 +0000</pubDate></item>
<item><title>
Milestone: Notes and Actors with languages
</title><description><![CDATA[
<p>Well, it's that, our notes now have a language attribute.</p>
<p>... All right, all right, it's not <em>just</em> it.</p>
<h2>Here's what comes with it:</h2>
<ul>
<li><a href="">Filter the streams with only the languages you know</a></li>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Tag/Tag.php#L135-L146">Make Tag Wrangling possible and transversal to languages</a></li>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub/Util/Model/Note.php#L123">Federate the language for a more inclusive free network</a></li>
</ul>
<h2>Here's how it looks</h2>
<p>First, the user panel section where the desired preferences are selected:
<img src="assets/notes_and_actors_with_languages/settings_language.png" alt="User panel language settings section" title="" /></p>
<p>Upon sending the previous form, the user is redirected to order their selection:
<img src="assets/notes_and_actors_with_languages/settings_language_order.png" alt="Ordering the selections made in previous page" title="" /></p>
<p>Finally, when posting the language with the highest priority is selected by default.</p>
<p>However, by accessing "Additional options", another language may be selected. The resulting
note will have the html <code>lang</code> attribute according to it.</p>
<p>The posting widget itself:
<img src="assets/notes_and_actors_with_languages/posting_language_options.png" alt="Selecting the language of a note when posting" title="" /></p>
<h2>What does this mean?</h2>
<p>We can now show you the notes you can read, but for groups, this mean that you
can access umbrella groups and filter the feeds to see what's in your language
and even region.</p>
<p>For too long the fediverse struggled with languages, this step makes it easier
for actual internationalization of the free network.</p>
<h2>A marvellous feed filtered by note language</h2>
<p><img src="assets/notes_and_actors_with_languages/feed-note-lang-pt.png" alt="" title="" /></p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-notes-and-actors-with-languages.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-notes-and-actors-with-languages.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Thu, 09 Dec 2021 00:50:02 +0000</pubDate></item>
<item><title>
Milestone: ActivityStreams 2.0 and WebFinger
</title><description><![CDATA[
<p>The primary use of GNU social is to access the <a href="https://blog.diogo.site/what-is-the-fediverse">free network</a>, be it ActivityWeb (ActivityPub) or Fediverse (OStatus).</p>
<p>Contrary to the original plan, we have merged <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/nightly/modules/TheFreeNetwork">The Free Network Module</a>, <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/nightly/plugins/WebFinger">WebFinger</a> and <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/nightly/plugins/LRDD">LRDD</a> into a single component named <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/FreeNetwork">FreeNetwork</a>. Likewise, ActivityPub and ActivityStreams 2.0 was kept the same plugin instead of separated.</p>
<h2>Understanding the organisation chosen</h2>
<p>The FreeNetwork component adds WebFinger (RFC7033) lookup and implements Link-based Resource Descriptor Discovery (LRDD) based on RFC6415, Web Host Metadata. It takes and produces both Extensible Resource Descriptor (XRD) and JSON (JavaSript Object Notation). Furthermore, and different from v2, every federation protocol will use the same distribution queue maintained by this component instead of holding its own.</p>
<p>We originally intended to have data modelling plugins that would extend the GS's "language". We then understood that it added more complexity than we wanted without any considerable advantage because we cannot dissociate data reception handling of the protocol itself.</p>
<h2>Situation Report</h2>
<p><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub">ActivityPub</a> already translates between activity and entity and allows plugins to extend it (thus serving a similar purpose to data modelling and representation plugins).</p>
<p>GNU social v3 now supports <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/src/Util/Formatting.php#L292">mentions</a>, which is a process that starts in the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Posting/Posting.php#L197">Posting component</a>. The processing of local mentions naturally finds its entire handling here.</p>
<p>For remote ActivityPub mentions, <a href="(https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub/Entity/ActivitypubActor.php#L179">ActivityPub handles it aided by the FreeNetwork component</a>).</p>
<h2>Next steps</h2>
<p>We still have to port OStatus (and ActivityStreams 1.0) and implement the distribution by FreeNetwork, although the base work is done. Regarding ActivityPub, although some of it already works, expanding the existing plugins to supplement ActivityPub, and full validation isn't ready yet. We will most likely finish the implementation of the whole federation stack in the next week.</p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-activitystreams-20-and-webfinger.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-activitystreams-20-and-webfinger.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Wed, 03 Nov 2021 01:48:35 +0000</pubDate></item>
</channel></rss>