[BLOG] Add first draft of November Milestones

This commit is contained in:
Diogo Peralta Cordeiro 2021-12-05 22:31:06 +00:00
parent ee6df29c23
commit 4496d8d601
Signed by: diogo
GPG Key ID: 18D2D35001FBFAB0
17 changed files with 672 additions and 100 deletions

View File

@ -2,10 +2,195 @@
<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>Wed, 03 Nov 2021 01:48:53 +0000</lastBuildDate>
<pubDate>Wed, 03 Nov 2021 01:48:53 +0000</pubDate>
<lastBuildDate>Sun, 05 Dec 2021 22:39:56 +0000</lastBuildDate>
<pubDate>Sun, 05 Dec 2021 22:39:56 +0000</pubDate>
<atom:link href="https://gnusocial.rocks/v3/feed.rss" rel="self" type="application/rss+xml" />
<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. See the examples below to have
an idea.</p>
<p>To extend an Activity properties you do:</p>
<pre><code>public function onActivityPubValidateActivityStreamsTwoData(string $type_name, array &amp;$validators): bool {
if ($type_name === '{Type}') {
$validators['attribute'] = myValidator::class;
}
return Event::next;
}
</code></pre>
<p>The Validator should be of the form:</p>
<pre><code>class myValidator extends Plugin\ActivityPub\Util\ModelValidator
{
/**
* Validate Attribute's value
*
* @param mixed $value from JSON's attribute
* @param mixed $container A {Type}
* @return bool
* @throws Exception
*/
public function validate($value, $container): bool
{
// Validate that container is a {Type}
Util::subclassOf($container, Type\Extended\Object\{Type}::class, true);
return {Validation Result};
</code></pre>
<p>To act on received activities do:</p>
<pre><code>public function onActivityPubNew{Type}(&amp;$obj): bool {
</code></pre>
<p>To add information to Activities being federated by ActivityPub do:</p>
<pre><code>public function ActivityPubAddActivityStreamsTwoData(string $type_name, &amp;$type): bool {
</code></pre>
<p>To implement an ActivityStreams 2.0 representation do:</p>
<pre><code>public function onActivityPubActivityStreamsTwoResponse(string $route, arrray $vars, ?TypeResponse &amp;$response = null): bool {
if ($route === '{Object route}') {
$response = ModelResponse::handle($vars[{Object}]);
return Event::stop;
}
return Event::next;
}
</code></pre>
<!-- 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>Sun, 05 Dec 2021 22:29:51 +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:
- search for an <code>#hashtag</code> and see a stream of notes tagged with it;
- make lists of actors and mention them with <code>@#list_name</code>
- self tag and enter a list of people in your instance with the same self tag</p>
<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>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>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>
<h1>Improved Tag feeds</h1>
<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>
<h1>Mute Self Tags and Note Tags</h1>
<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>Sun, 05 Dec 2021 22:21: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="">Federate the language for a more inclusive free network</a></li>
<li><a href="">Make Tag Wrangling possible an transversal to languages</a></li>
</ul>
<h2>Here's how it looks:</h2>
<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>
<!-- 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>Sun, 05 Dec 2021 22:19:35 +0000</pubDate></item>
<item><title>
Milestone: ActivityStreams 2.0 and WebFinger
</title><description><![CDATA[
@ -32,6 +217,9 @@ Milestone: ActivityStreams 2.0 and WebFinger
<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>
@ -139,6 +327,9 @@ forget to subscribe!</p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/updates-v3-blog.html</link>
<guid>https://gnusocial.rocks/v3/./updates-v3-blog.html</guid>
@ -169,6 +360,9 @@ attempts to generate a page preview from open graph and oembed. I.e., acts when
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/updates-implement-storeremotemedia-for-v3-and-port-embed.html</link>
<guid>https://gnusocial.rocks/v3/./updates-implement-storeremotemedia-for-v3-and-port-embed.html</guid>
@ -232,6 +426,9 @@ any remote URL being shared in a note.</li>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/updates-improve-the-attachments-system.html</link>
<guid>https://gnusocial.rocks/v3/./updates-improve-the-attachments-system.html</guid>
@ -322,6 +519,9 @@ Updates: Finish the Avatar component
@ -384,71 +584,12 @@ is properly tested, we have the
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-documentation-and-tests-infrastructure.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-documentation-and-tests-infrastructure.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Wed, 04 Aug 2021 13:37:42 +0100</pubDate></item>
<item><title>
Milestone: Port Media handling from v2
</title><description><![CDATA[
<p><strong><a href="https://agile.gnusocial.rocks/doku.php?id=milestones:attachment_media_embed_handling">>WIKI Milestone entry</a></strong></p>
<p>File Storage in GNU social is used for avatars, for notes containing
attachments, and for notes containing links (in which case is an Embed preview).
Notes can be created by local users or fetched from remote actors. Filehash is
used to reduce file duplication.</p>
<p>When a user shares a Link that uses OpenGraph tags or has an OEmbed provider,
the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/Embed">Embed plugin</a> generates a preview for it that may contain a thumbnail.</p>
<p>When a user shares a Link to an image, the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/StoreRemoteMedia">StoreRemoteMedia plugin</a> can fetch the
file and make it available as an attachment, and will generate a thumbnail.</p>
<p>When an image, video, or other file type is uploaded or retrieved, an Attachment
entity is created. When a thumbnail is requested, one is generated if an
EncoderPlugin that supports the mime type is available.</p>
<p>There are two EncoderPlugins implemented:</p>
<ul>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ImageEncoder">ImageEncoder</a>: Allows to compress, validate, rescale, and sanitize images using VIPS.</li>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/VideoEncoder">VideoEncoder</a>: Allows to rescale gifs using FFMpeg.</li>
</ul>
<p>Another helpful plugin is <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/FileQuota">FileQuota</a> which ensures a user stays under the file quota.</p>
<h2>How is the code organised?</h2>
<p>There are various entities related to attachment and thumbnail handling.
The key ones are:</p>
<ul>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/src/Entity/Attachment.php">Attachment</a></li>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/src/Entity/AttachmentThumbnail.php">AttachmentThumbnail</a></li>
</ul>
<p>The plugins are able to act by means of the Events system, as elaborated in the
<a href="https://docs.gnusocial.rocks/developer/storage.html">documentation</a>.</p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-port-media-handling-from-v2.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-port-media-handling-from-v2.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Mon, 03 May 2021 13:37:42 +0100</pubDate></item>
</channel></rss>

View File

@ -43,6 +43,12 @@ Our objective is to further differentiate GNU social from the alternative softwa
</div></div></div>
<div id="template-wrapper"><div class="template-unit">
<h3>Blog</h3>
<h4 class='allposts_header'>December 2021</h4>
<ul>
<li><a href="./milestone-activitypub.html">Milestone: ActivityPub</a> &mdash; December 05, 2021</li>
<li><a href="./milestone-tags.html">Milestone: Tags</a> &mdash; December 05, 2021</li>
<li><a href="./milestone-notes-and-actors-with-languages.html">Milestone: Notes and Actors with languages</a> &mdash; December 05, 2021</li>
</ul>
<h4 class='allposts_header'>November 2021</h4>
<ul>
<li><a href="./milestone-activitystreams-20-and-webfinger.html">Milestone: ActivityStreams 2.0 and WebFinger</a> &mdash; November 03, 2021</li>

View File

@ -0,0 +1,112 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=0.86, maximum-scale=5.0, minimum-scale=0.86">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://www.gnusocial.rocks//assets/css/reset.css">
<link rel="stylesheet" href="https://www.gnusocial.rocks//assets/css/blog.css">
<link rel='stylesheet' type='text/css' href="https://www.gnusocial.rocks//assets/fonts/opensans/opensans.css"><title>Milestone: ActivityPub - GNU social V3</title>
</head><body>
<header>
<div class="home-menu menu menu-horizontal menu-fixed">
<a class="menu-heading" href="https://gnusocial.rocks/">
<img src="../assets/img/gnu-social-logo-invert.svg" alt="GNU social">
<b>gnu</b>social
</a>
</div>
<div class="sidebar">
<ul class="menu-list">
<li class="menu-item menu-selected"><a href="index.html" class="menu-link">Blog Index</a></li>
<li class="menu-item"><a href="https://code.gnusocial.rocks/" class="menu-link">Repository</a></li>
<li class="menu-item"><a href="https://coverage.gnusocial.rocks/" class="menu-link">Code Coverage</a></li>
<li class="menu-item"><a href="https://docs.gnusocial.rocks/" class="menu-link">Documentation</a></li>
<li class="menu-item"><a href="https://agile.gnusocial.rocks/" class="menu-link">Wiki</a></li>
<li class="menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
</div></div></div>
<div id="template-wrapper"><div class="template-unit">
<!-- entry begin -->
<h3><a class="ablack" href="milestone-activitypub.html">
Milestone: ActivityPub
</a></h3>
<!-- bashblog_timestamp: #202112052229.51# -->
<div class="subtitle">December 05, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
<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. See the examples below to have
an idea.</p>
<p>To extend an Activity properties you do:</p>
<pre><code>public function onActivityPubValidateActivityStreamsTwoData(string $type_name, array &amp;$validators): bool {
if ($type_name === '{Type}') {
$validators['attribute'] = myValidator::class;
}
return Event::next;
}
</code></pre>
<p>The Validator should be of the form:</p>
<pre><code>class myValidator extends Plugin\ActivityPub\Util\ModelValidator
{
/**
* Validate Attribute's value
*
* @param mixed $value from JSON's attribute
* @param mixed $container A {Type}
* @return bool
* @throws Exception
*/
public function validate($value, $container): bool
{
// Validate that container is a {Type}
Util::subclassOf($container, Type\Extended\Object\{Type}::class, true);
return {Validation Result};
</code></pre>
<p>To act on received activities do:</p>
<pre><code>public function onActivityPubNew{Type}(&amp;$obj): bool {
</code></pre>
<p>To add information to Activities being federated by ActivityPub do:</p>
<pre><code>public function ActivityPubAddActivityStreamsTwoData(string $type_name, &amp;$type): bool {
</code></pre>
<p>To implement an ActivityStreams 2.0 representation do:</p>
<pre><code>public function onActivityPubActivityStreamsTwoResponse(string $route, arrray $vars, ?TypeResponse &amp;$response = null): bool {
if ($route === '{Object route}') {
$response = ModelResponse::handle($vars[{Object}]);
return Event::stop;
}
return Event::next;
}
</code></pre>
<!-- text end -->
<!-- entry end -->
</div>
</div></div>
<footer class="footer l-box is-center">
This site's source is
<a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer></body></html>

View File

@ -0,0 +1,56 @@
Milestone: ActivityPub
[ActivityPub Plugin source](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub).
This milestone could be just this, what's different from any other ActivityPub
plugin? How is it better than v2's?
It's better in how it's organised and extensible. See the examples below to have
an idea.
To extend an Activity properties you do:
public function onActivityPubValidateActivityStreamsTwoData(string $type_name, array &$validators): bool {
if ($type_name === '{Type}') {
$validators['attribute'] = myValidator::class;
}
return Event::next;
}
The Validator should be of the form:
class myValidator extends Plugin\ActivityPub\Util\ModelValidator
{
/**
* Validate Attribute's value
*
* @param mixed $value from JSON's attribute
* @param mixed $container A {Type}
* @return bool
* @throws Exception
*/
public function validate($value, $container): bool
{
// Validate that container is a {Type}
Util::subclassOf($container, Type\Extended\Object\{Type}::class, true);
return {Validation Result};
To act on received activities do:
public function onActivityPubNew{Type}(&$obj): bool {
To add information to Activities being federated by ActivityPub do:
public function ActivityPubAddActivityStreamsTwoData(string $type_name, &$type): bool {
To implement an ActivityStreams 2.0 representation do:
public function onActivityPubActivityStreamsTwoResponse(string $route, arrray $vars, ?TypeResponse &$response = null): bool {
if ($route === '{Object route}') {
$response = ModelResponse::handle($vars[{Object}]);
return Event::stop;
}
return Event::next;
}

View File

@ -65,6 +65,9 @@ GNU social development team
<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 -->
<!-- entry end -->
</div>

View File

@ -91,6 +91,9 @@ is properly tested, we have the
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=0.86, maximum-scale=5.0, minimum-scale=0.86">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://www.gnusocial.rocks//assets/css/reset.css">
<link rel="stylesheet" href="https://www.gnusocial.rocks//assets/css/blog.css">
<link rel='stylesheet' type='text/css' href="https://www.gnusocial.rocks//assets/fonts/opensans/opensans.css"><title>Milestone: Notes and Actors with languages - GNU social V3</title>
</head><body>
<header>
<div class="home-menu menu menu-horizontal menu-fixed">
<a class="menu-heading" href="https://gnusocial.rocks/">
<img src="../assets/img/gnu-social-logo-invert.svg" alt="GNU social">
<b>gnu</b>social
</a>
</div>
<div class="sidebar">
<ul class="menu-list">
<li class="menu-item menu-selected"><a href="index.html" class="menu-link">Blog Index</a></li>
<li class="menu-item"><a href="https://code.gnusocial.rocks/" class="menu-link">Repository</a></li>
<li class="menu-item"><a href="https://coverage.gnusocial.rocks/" class="menu-link">Code Coverage</a></li>
<li class="menu-item"><a href="https://docs.gnusocial.rocks/" class="menu-link">Documentation</a></li>
<li class="menu-item"><a href="https://agile.gnusocial.rocks/" class="menu-link">Wiki</a></li>
<li class="menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
</div></div></div>
<div id="template-wrapper"><div class="template-unit">
<!-- entry begin -->
<h3><a class="ablack" href="milestone-notes-and-actors-with-languages.html">
Milestone: Notes and Actors with languages
</a></h3>
<!-- bashblog_timestamp: #202112052219.35# -->
<div class="subtitle">December 05, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
<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="">Federate the language for a more inclusive free network</a></li>
<li><a href="">Make Tag Wrangling possible an transversal to languages</a></li>
</ul>
<h2>Here's how it looks:</h2>
<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>
<!-- text end -->
<!-- entry end -->
</div>
</div></div>
<footer class="footer l-box is-center">
This site's source is
<a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer></body></html>

View File

@ -0,0 +1,22 @@
Milestone: Notes and Actors with languages
Well, it's that, our notes now have a language attribute.
... All right, all right, it's not _just_ it.
## Here's what comes with it:
* [Filter the streams with only the languages you know]()
* [Federate the language for a more inclusive free network]()
* [Make Tag Wrangling possible an transversal to languages]()
## Here's how it looks:
## What does this mean?
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.
For too long the fediverse struggled with languages, this step makes it easier
for actual internationalization of the free network.

View File

@ -95,6 +95,9 @@ The key ones are:</p>
<!-- text end -->
<!-- entry end -->
</div>

124
v3/milestone-tags.html Normal file
View File

@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=0.86, maximum-scale=5.0, minimum-scale=0.86">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://www.gnusocial.rocks//assets/css/reset.css">
<link rel="stylesheet" href="https://www.gnusocial.rocks//assets/css/blog.css">
<link rel='stylesheet' type='text/css' href="https://www.gnusocial.rocks//assets/fonts/opensans/opensans.css"><title>Milestone: Tags - GNU social V3</title>
</head><body>
<header>
<div class="home-menu menu menu-horizontal menu-fixed">
<a class="menu-heading" href="https://gnusocial.rocks/">
<img src="../assets/img/gnu-social-logo-invert.svg" alt="GNU social">
<b>gnu</b>social
</a>
</div>
<div class="sidebar">
<ul class="menu-list">
<li class="menu-item menu-selected"><a href="index.html" class="menu-link">Blog Index</a></li>
<li class="menu-item"><a href="https://code.gnusocial.rocks/" class="menu-link">Repository</a></li>
<li class="menu-item"><a href="https://coverage.gnusocial.rocks/" class="menu-link">Code Coverage</a></li>
<li class="menu-item"><a href="https://docs.gnusocial.rocks/" class="menu-link">Documentation</a></li>
<li class="menu-item"><a href="https://agile.gnusocial.rocks/" class="menu-link">Wiki</a></li>
<li class="menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
</div></div></div>
<div id="template-wrapper"><div class="template-unit">
<!-- entry begin -->
<h3><a class="ablack" href="milestone-tags.html">
Milestone: Tags
</a></h3>
<!-- bashblog_timestamp: #202112052221.44# -->
<div class="subtitle">December 05, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
<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:
- search for an <code>#hashtag</code> and see a stream of notes tagged with it;
- make lists of actors and mention them with <code>@#list_name</code>
- self tag and enter a list of people in your instance with the same self tag</p>
<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>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>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>
<h1>Improved Tag feeds</h1>
<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>
<h1>Mute Self Tags and Note Tags</h1>
<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 -->
<!-- entry end -->
</div>
</div></div>
<footer class="footer l-box is-center">
This site's source is
<a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer></body></html>

View File

@ -1,34 +1,66 @@
Milestone: Tag handling
Milestone: Tags
> 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.
**[>WIKI Milestone entry](https://agile.gnusocial.rocks/doku.php?id=milestones:tags)**
See also [our update on self tags]()
GNU social v2 has tags and lists. It allows you to:
- search for an `#hashtag` and see a stream of notes tagged with it;
- make lists of actors and mention them with `@#list_name`
- self tag and enter a list of people in your instance with the same self tag
# Tag Wrangling
It is limited with regards to federation of self tags and the `@#list_name` can't
target remote actors even when they are inside your list.
## What's new with v3?
### Federated self tags
We now federate self tags and lists, so that constraint from v2 was moved out of
the way.
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.
### Tag Wrangling
Proposed by [@licho](https://archiveofourown.org/users/licho) in Tue, 02 Jun 2019 17:52:07 GMT:
> I like the tag wrangling feature of AO3, which I think would help for cases of synonymous tags like #introduction and #introductions
>
> https://archiveofourown.org/wrangling_guidelines/11
>
> Is it feasible for !gnusocial ? Or would it cause problems?
The answer is **yes** and will be released with v3. With the addition of
[Languages in notes and actors]((https://gnusocial.rocks/v3/milestone-notes-and-actors-with-languages.html)) there was little excuse not to be feasible.
Whenever you post a note containing tags, you can choose whether to
make those tags canonical. This means that, for instance, the tags
#run and #running become the 'same', meaning that when you click on
the link for the #run tag, you'll also see notes tagged #running. You
`#run` and `#running` become the 'same', meaning that when you click on
the link for the `#run` 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.
Internally, this transformation is accomplished by splitting the tag
into words and [stemming](https://en.wikipedia.org/wiki/Stemming) each word.
# Tag feeds
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.
# Related Tags
### Related Tags
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.
# Muteable Self Tags and Note Tags
# Improved Tag feeds
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.
# Mute Self Tags and Note Tags
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

View File

@ -123,6 +123,9 @@ GNU social development team

View File

@ -63,6 +63,9 @@ attempts to generate a page preview from open graph and oembed. I.e., acts when
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -96,6 +96,9 @@ any remote URL being shared in a note.</li>
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -128,6 +128,9 @@ markup, we hope to achieve an accessible, fast and polished structure by which a
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -1,23 +0,0 @@
Updates: Add selftags
Under [our milestone for better tag
handling](https://www.gnusocial.rocks/v3/milestone-tags.html), one of
the tasks has been to add the ability for users to add tags to
themselves, so that they may be found and recommended to those
interested in said tags.
In the future, the use of these tags will allow you to find people,
groups and even individual notes that have a tag you're interested in.
This process is opt-in, yet simple - we don't want to make have a
recommendation algorithm which could hide information.
These tags will be subject to potential moderation, depending on the
preferences of your instance's sysadmin. Remember: if you don't agree
with them, you can always create your own instance! That's the beauty
of the fediverse.
The process for adding tags is simple: in your profile settings page,
there will be a text field where you can type a list of comma or space
separated tags. These will then show up in your profile, but you can
change them at any time. And worry not, we don't keep a record of your
past tags.

View File

@ -71,6 +71,9 @@ forget to subscribe!</p>
<!-- text end -->
<!-- entry end -->
</div>