[BLOG][Milestone] Collections

This commit is contained in:
Diogo Peralta Cordeiro 2022-01-18 00:25:29 +00:00
parent 50b36d1b3a
commit 5c6f430204
Signed by: diogo
GPG Key ID: 18D2D35001FBFAB0
22 changed files with 236 additions and 81 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
v3/assets/filters/feed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

View File

@ -2,10 +2,63 @@
<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>Fri, 10 Dec 2021 16:35:16 +0000</lastBuildDate>
<pubDate>Fri, 10 Dec 2021 16:35:16 +0000</pubDate>
<lastBuildDate>Tue, 18 Jan 2022 00:30:48 +0000</lastBuildDate>
<pubDate>Tue, 18 Jan 2022 00:30:48 +0000</pubDate>
<atom:link href="https://gnusocial.rocks/v3/feed.rss" rel="self" type="application/rss+xml" />
<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[
@ -21,6 +74,8 @@ plugin? How is it better than v2's?</p>
<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>
@ -121,6 +176,8 @@ tag.</p>
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-tags.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-tags.html</guid>
@ -193,6 +250,8 @@ Given a valid colour, it's the actor's responsibility whether or not the colours
<!-- 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>
@ -215,6 +274,8 @@ Updates: Interface Structure and Flexibility improved
<!-- 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>
@ -267,6 +328,8 @@ 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>
@ -315,6 +378,8 @@ Milestone: ActivityStreams 2.0 and WebFinger
<!-- 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>
@ -435,6 +500,8 @@ forget to subscribe!</p>
@ -481,6 +548,8 @@ attempts to generate a page preview from open graph and oembed. I.e., acts when
@ -489,83 +558,4 @@ attempts to generate a page preview from open graph and oembed. I.e., acts when
<guid>https://gnusocial.rocks/v3/./updates-implement-storeremotemedia-for-v3-and-port-embed.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Fri, 13 Aug 2021 13:37:42 +0100</pubDate></item>
<item><title>
Updates: Improve the Attachments system
</title><description><![CDATA[
<p>With the milestone <a href="https://www.gnusocial.rocks/v3/milestone-port-media-handling-from-v2.html">Port Media system from
v2</a> we had ported the existing
attachment system. The fact is that this system wasn't good enough.</p>
<p>It's always important to start with the original code as that allows us
to review past decisions and understand all the corner cases previously
considered.</p>
<p>Sadly, what motivated us to re-design the attachment system were the
non-considered corner cases. In particular:</p>
<ul>
<li>Remove <code>title</code> from attachment, as it's part of the relation between attachment and note.</li>
<li>Remove <code>actor</code> from attachment, many actors may publish the same attachment.</li>
<li>Remove <code>is_local</code> from attachment, as it's part of the relation between attachment and note.</li>
<li>Remove <code>remote_url</code> from attachment, different urls can return the same attachment.</li>
<li>Attachment now has a reference counter </li>
<li>Add entity GSActorToAttachment</li>
<li>Add entity GSActorToRemoteURL</li>
<li>Add entity RemoteURL</li>
<li>Add entity RemoteURLToNote</li>
<li>Add entity RemoteURLToAttachment</li>
<li>AttachmentToNote now has a title attribute</li>
</ul>
<p>Key commits:</p>
<ul>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/commit/32ad5dbd74ebb369c4b3ed688e1fb78464fabe49">32ad5dbd74 - [ENTITY] Split Attachment in various new entities</a></li>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/commit/c381e58d3307e7dd07abeb9cf5b3998e34f5bd48">c381e58d33 - [ENTITY] Refactor RemoteURL entities to Link</a></li>
</ul>
<p>The structural changes and how it compares to v2 is detailed in our
<a href="http://agile.gnusocial.rocks/doku.php?id=attachment">wiki</a>.</p>
<p>Some relevant observations:</p>
<ul>
<li><code>Link</code> is now part of GNU social Data Representation terms. It represents
any remote URL being shared in a note.</li>
<li>There's only one fixed directory for GSFiles.</li>
</ul>
<!-- 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>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Thu, 05 Aug 2021 13:37:42 +0100</pubDate></item>
</channel></rss>

View File

@ -43,6 +43,10 @@ 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'>January 2022</h4>
<ul>
<li><a href="./milestone-collections.html">Milestone: Collections</a> &mdash; January 18, 2022</li>
</ul>
<h4 class='allposts_header'>December 2021</h4>
<ul>
<li><a href="./milestone-activitypub.html">Milestone: ActivityPub</a> &mdash; December 10, 2021</li>

View File

@ -54,6 +54,8 @@ plugin? How is it better than v2's?</p>
<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 -->
<!-- entry end -->
</div>

View File

@ -81,6 +81,8 @@ GNU social development team
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -105,6 +105,8 @@ Given a valid colour, it's the actor's responsibility whether or not the colours
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -0,0 +1,96 @@
<!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: Collections - 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-collections.html">
Milestone: Collections
</a></h3>
<!-- bashblog_timestamp: #202201180021.29# -->
<div class="subtitle">January 18, 2022 &mdash;
GNU social development team
</div>
<!-- text begin -->
<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 -->
<!-- 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,39 @@
Milestone: Collections
We have generalized collections around our search engine. For that introducing
the [Collection component](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Collection).
This structure has the following implication:
Collection -> OrderedCollection
|-> Notes (known as Feed)
|-> Actors (known as Circle)
|-> Other Object (known as Collection of ...)
|-> Attachments: AttachmentCollection
|-> Tags: TagCollection
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.
Finally, with this, a plugin such as [Note Type Feed Filter](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/NoteTypeFeedFilter) can be useful in
every note collection (feed).
It also allows plugins such as ActivityPub to [translate every collection
automatically](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub/Util/OrderedCollectionController.php).
## Notes Filter and Sorting Options
![](assets/filters/feed.png)
## Actors Filter and Sorting Options
![](assets/filters/circle.png)
## The Search Component
### Results
![](assets/search/results.png)
### Note Options
![](assets/search/note_options.png)
### Actor Options
![](assets/search/actor_options.png)

View File

@ -104,6 +104,8 @@ is properly tested, we have the

View File

@ -85,6 +85,8 @@ for actual internationalization of the free network.</p>
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -108,6 +108,8 @@ The key ones are:</p>

View File

@ -133,6 +133,8 @@ tag.</p>
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -140,6 +140,8 @@ GNU social development team

View File

@ -76,6 +76,8 @@ attempts to generate a page preview from open graph and oembed. I.e., acts when

View File

@ -109,6 +109,8 @@ any remote URL being shared in a note.</li>

View File

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

View File

@ -55,6 +55,8 @@ GNU social development team
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -84,6 +84,8 @@ forget to subscribe!</p>