468 lines
18 KiB
XML
468 lines
18 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 02:10:31 +0000</lastBuildDate>
|
|
<pubDate>Tue, 18 Jan 2022 02:10:31 +0000</pubDate>
|
|
<atom:link href="https://gnusocial.rocks/v3/feed.rss" rel="self" type="application/rss+xml" />
|
|
<item><title>
|
|
Milestone: Pinned Notes
|
|
</title><description><![CDATA[
|
|
This plugin federates using <a href="https://docs.joinmastodon.org/spec/activitypub/#featured">Mastodon's featured collection extension</a>.
|
|
<a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/PinnedNotes">Source</a>
|
|
<img src="assets/profile/pin_note.png" alt="" title="" /></p>
|
|
|
|
|
|
<!-- text end -->
|
|
]]></description><link>https://gnusocial.rocks/v3/milestone-pinned-notes.html</link>
|
|
<guid>https://gnusocial.rocks/v3/./milestone-pinned-notes.html</guid>
|
|
<dc:creator>GNU social development team</dc:creator>
|
|
<pubDate>Tue, 18 Jan 2022 02:10:24 +0000</pubDate></item>
|
|
<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 -> OrderedCollection
|
|
|-> Notes (known as Feed)
|
|
|-> Actors (known as Circle)
|
|
|-> Other Object (known as Collection of ...)
|
|
|-> Attachments: AttachmentCollection
|
|
|-> 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>
|
|
|
|
<h2>ActivityPub Examples</h2>
|
|
|
|
<p><img src="assets/activitypub/collection/circle.jpg" alt="" title="" />
|
|
<img src="assets/activitypub/collection/favourites.jpg" alt="" title="" />
|
|
<img src="assets/activitypub/collection/outbox.jpg" 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 &$tabs): bool
|
|
{
|
|
$tabs[] = [
|
|
'title' => 'Light theme colours',
|
|
'desc' => 'Change the theme colours.',
|
|
'controller' => C\Oomox::oomoxSettingsLight($request),
|
|
];
|
|
|
|
$tabs[] = [
|
|
'title' => 'Dark theme colours',
|
|
'desc' => 'Change the theme colours.',
|
|
'controller' => 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' => $oomox_table]);
|
|
return new Response($content, status: 200, headers: ['content-type' => '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>
|
|
</channel></rss>
|