[BLOG] Iterate on November updates

This commit is contained in:
Diogo Peralta Cordeiro 2021-12-09 14:52:52 +00:00
parent fe5b3b2fba
commit eed9cff6d2
Signed by: diogo
GPG Key ID: 18D2D35001FBFAB0
16 changed files with 312 additions and 368 deletions

View File

@ -2,8 +2,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>Thu, 09 Dec 2021 14:59:13 +0000</lastBuildDate>
<pubDate>Thu, 09 Dec 2021 14:59:13 +0000</pubDate>
<lastBuildDate>Thu, 09 Dec 2021 15:08:36 +0000</lastBuildDate>
<pubDate>Thu, 09 Dec 2021 15:08:36 +0000</pubDate>
<atom:link href="https://gnusocial.rocks/v3/feed.rss" rel="self" type="application/rss+xml" />
<item><title>
Milestone: Actor colour theme plugin
@ -75,6 +75,25 @@ Given a valid colour, it's the actor's responsibility whether or not the colours
<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: ActivityPub
</title><description><![CDATA[
@ -83,148 +102,11 @@ Milestone: ActivityPub
<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>Thu, 09 Dec 2021 14:58:31 +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>Thu, 09 Dec 2021 14:58:31 +0000</pubDate></item>
<item><title>
Milestone: Documentation and Tests Infrastructure
</title><description><![CDATA[
<p><strong><a href="https://agile.gnusocial.rocks/doku.php?id=milestones:initial_test_documentation_infrastructure">>WIKI Milestone entry</a></strong></p>
<p>GNU social now has its documentation available in
<a href="https://docs.gnusocial.rocks/">https://docs.gnusocial.rocks/</a>. It features four
different books. These are automatically generated from the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/docs">source</a> using <a href="https://rust-lang.github.io/mdBook/">mdBook</a>.</p>
<blockquote>
<p>Only the development book is in an elaborated state, the other books are
holding for more ready code.</p>
</blockquote>
<p>And two of them are new:</p>
<ul>
<li>The <a href="https://docs.gnusocial.rocks/developer">Developer</a> is both intended to guide third-party plugin developers and to make it easier of contributing to the code.</li>
<li>The <a href="https://docs.gnusocial.rocks/designer">Designer</a> is the most recent of the four and came from a necessity of keeping some standardization between templates and ensuring the same principles are kept in mind when designing new themes.</li>
</ul>
<p>And two of them are updates from existing documentation:</p>
<ul>
<li>The <a href="https://docs.gnusocial.rocks/user">User</a> one is adapted
from the existing GNU social documentation for users that was provided in v2.</li>
<li>The <a href="https://docs.gnusocial.rocks/administrator">Administrator</a> one is adapted
from the "Unofficial GNU social docs" by Thomask who <a href="https://notabug.org/diogo/gnu-social/issues/246">asked us to make it official</a>.</li>
</ul>
<p>Together with the documentation we've introduced a
<a href="https://agile.gnusocial.rocks/">wiki</a>. Its purpose is to walk-through decisions,
convention, terminology. It's where we document the reasoning the development team went
through before implementing more sophisticated functionalities.</p>
<p>Finally, when the documentation doesn't explain, and to ensure the whole code
is properly tested, we have the
<a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/tests">tests</a>. And the coverage is available <a href="https://coverage.gnusocial.rocks/">here</a>. At the time of writing the coverage has 98.76% code lines tested.</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="" frameborder="0" allowfullscreen></iframe>
@ -235,10 +117,10 @@ 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>
]]></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>Thu, 09 Dec 2021 14:58:31 +0000</pubDate></item>
<pubDate>Thu, 09 Dec 2021 00:50:02 +0000</pubDate></item>
<item><title>
Milestone: Notes and Actors with languages
</title><description><![CDATA[
@ -284,76 +166,15 @@ 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>Thu, 09 Dec 2021 14:58:31 +0000</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>
]]></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 14:58:31 +0000</pubDate></item>
<pubDate>Thu, 09 Dec 2021 00:50:02 +0000</pubDate></item>
<item><title>
Milestone: Tags
</title><description><![CDATA[
@ -366,10 +187,13 @@ Check our Wiki Milestone entry for all the juicy details.</p>
<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>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>
@ -430,43 +254,43 @@ 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 14:58:31 +0000</pubDate></item>
<pubDate>Thu, 09 Dec 2021 00:50:02 +0000</pubDate></item>
<item><title>
Updates: Finish the Avatar component
Milestone: ActivityStreams 2.0 and WebFinger
</title><description><![CDATA[
<p><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Avatar">Avatar Component source</a>.</p>
<p>Its controller handles upload, update and removal.</p>
<p>Important change from v2: Avatars are now regular attachments.</p>
<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>
@ -482,21 +306,96 @@ Updates: Finish the Avatar component
<!-- 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>
<item><title>
Updates: Interface and accessibility
</title><description><![CDATA[
<p>Hello everyone! Throughout the past year there has been a lot of work in creating a polished, modern looking UI.
This update has been in the works for a long time... Many considerations had to be done, and given the current state of
modern browsers (and their over-reliance in JS) many more surfaced, leading to further testing and fixes. </p>
<p>We hope you like it!</p>
<h3>The prime directive</h3>
<blockquote>
<p>Modern looking, consistent and accessible UI across all browsers.
Non-JS version as the primary focus, <strong>JS is optional</strong> and should be regarded as such.</p>
</blockquote>
<p>The Web is 95% typography, the art and technique of arranging type to make text more readable and pleasing.
To achieve this, a textual hierarchy is fundamental, text should present a clear, readable structure to the reader.
In much of the same fashion, the way we perceive Web pages relies upon the same fundamentals. As such, by focusing on the
markup, we hope to achieve an accessible, fast and polished structure by which any browser and screen reader relies upon.</p>
<h3>Features</h3>
<ul>
<li>Accessible
<ul>
<li>Easy to use keyboard only navigation</li>
<li>Feedback on focused elements</li>
<li>Keyboard shortcuts to access main regions</li>
<li>Vi-like shortcuts</li>
<li>Screen reader tested</li>
<li>Notifies the user when focusing on key elements, such as the feed, notes and actions</li>
<li>Brief description of navigation links</li>
<li>Using semantic HTML whenever possible</li>
<li>Special care given for styling solutions that could break accessibility</li>
<li>Colors and type sizes in accordance to W3C contrast guidelines</li>
<li>Chosen specifically blue-ish and grey-ish hues for faster page loading perception</li>
</ul></li>
<li>Fast, the content provided to the user really is just markup and some CSS rules
<ul>
<li>Optionally there will be some small use cases where JS makes sense (it's the only thing modern browsers understand e.e)</li>
<li>For example, cropping your avatar before uploading a new one.</li>
<li>This is the only example until now.</li>
</ul></li>
<li>Dark and light default themes available (according to your system theme)</li>
<li>Graceful degradation for unsupported HTML elements</li>
<li>Achieving modern user interface patterns without JS</li>
<li>Various layout engines tested and work as they should
<ul>
<li>Qt WebEngine (Qutebrowser, Falkon, Otter Browser, etc...)</li>
<li>WebkitGTK (Epiphany, Midori, etc...)</li>
<li>Gecko (Firefox and derivatives)</li>
<li>Goanna (Palemoon, Basilisk, etc...)</li>
<li>Internet Explorer</li>
</ul></li>
</ul>
<h3>Video</h3>
<h4>Keyboard tests</h4>
<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" title="GNU social v3 Accessibility: Orca reading the Public feed" src="https://tube.tchncs.de/videos/embed/9a16e84c-4150-4849-ac63-019c9a3782d9" frameborder="0" allowfullscreen></iframe>
<hr>
]]></description><link>https://gnusocial.rocks/v3/updates-interface-and-accessibility.html</link>
<guid>https://gnusocial.rocks/v3/./updates-interface-and-accessibility.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Mon, 13 Sep 2021 17:32:55 +0100</pubDate></item>
<item><title>
Updates: V3 blog
</title><description><![CDATA[
<p>We initially thought that the milestones list would be enough to
announce the development progress. But it's a little too vague
and doesn't really let us express all the on going changes and efforts.</p>
<p>The <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/commits/branch/v3">git
history</a> is clear (we believe), but it can be challenging and obscure to outsiders and non-technical people.</p>
<p>With the introduction of this blog made with
<a href="https://github.com/cfenollosa/bashblog">bashblog</a>, we hope to make all the progress more visible and easier of following :)</p>
<p>It has a <a href="https://www.gnusocial.rocks/v3/feed.rss">RSS feed</a> so, don't
forget to subscribe!</p>
@ -528,10 +427,10 @@ Updates: Finish the Avatar component
<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/updates-finish-the-avatar-component.html</link>
<guid>https://gnusocial.rocks/v3/./updates-finish-the-avatar-component.html</guid>
]]></description><link>https://gnusocial.rocks/v3/updates-v3-blog.html</link>
<guid>https://gnusocial.rocks/v3/./updates-v3-blog.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Thu, 09 Dec 2021 14:58:31 +0000</pubDate></item>
<pubDate>Mon, 16 Aug 2021 13:37:42 +0100</pubDate></item>
<item><title>
Updates: Implement StoreRemoteMedia for v3 and port Embed
</title><description><![CDATA[
@ -556,6 +455,16 @@ attempts to generate a page preview from open graph and oembed. I.e., acts when
@ -564,7 +473,7 @@ attempts to generate a page preview from open graph and oembed. I.e., acts when
]]></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>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Thu, 09 Dec 2021 14:58:31 +0000</pubDate></item>
<pubDate>Fri, 13 Aug 2021 13:37:42 +0100</pubDate></item>
<item><title>
Updates: Improve the Attachments system
</title><description><![CDATA[
@ -621,6 +530,16 @@ any remote URL being shared in a note.</li>
@ -630,5 +549,5 @@ any remote URL being shared in a note.</li>
]]></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, 09 Dec 2021 14:58:31 +0000</pubDate></item>
<pubDate>Thu, 05 Aug 2021 13:37:42 +0100</pubDate></item>
</channel></rss>

View File

@ -46,17 +46,30 @@ Our objective is to further differentiate GNU social from the alternative softwa
<h4 class='allposts_header'>December 2021</h4>
<ul>
<li><a href="./milestone-actor-colour-theme-plugin.html">Milestone: Actor colour theme plugin</a> &mdash; December 09, 2021</li>
<li><a href="./updates-interface-structure-and-flexibility-improved.html">Updates: Interface Structure and Flexibility improved</a> &mdash; December 09, 2021</li>
<li><a href="./milestone-activitypub.html">Milestone: ActivityPub</a> &mdash; December 09, 2021</li>
<li><a href="./milestone-activitystreams-20-and-webfinger.html">Milestone: ActivityStreams 2.0 and WebFinger</a> &mdash; December 09, 2021</li>
<li><a href="./milestone-documentation-and-tests-infrastructure.html">Milestone: Documentation and Tests Infrastructure</a> &mdash; December 09, 2021</li>
<li><a href="./milestone-notes-and-actors-with-languages.html">Milestone: Notes and Actors with languages</a> &mdash; December 09, 2021</li>
<li><a href="./milestone-port-media-handling-from-v2.html">Milestone: Port Media handling from v2</a> &mdash; December 09, 2021</li>
<li><a href="./milestone-tags.html">Milestone: Tags</a> &mdash; December 09, 2021</li>
<li><a href="./updates-finish-the-avatar-component.html">Updates: Finish the Avatar component</a> &mdash; December 09, 2021</li>
<li><a href="./updates-implement-storeremotemedia-for-v3-and-port-embed.html">Updates: Implement StoreRemoteMedia for v3 and port Embed</a> &mdash; December 09, 2021</li>
<li><a href="./updates-improve-the-attachments-system.html">Updates: Improve the Attachments system</a> &mdash; December 09, 2021</li>
<li><a href="./updates-interface-and-accessibility.html">Updates: Interface and accessibility</a> &mdash; December 09, 2021</li>
<li><a href="./updates-v3-blog.html">Updates: V3 blog</a> &mdash; December 09, 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>
</ul>
<h4 class='allposts_header'>September 2021</h4>
<ul>
<li><a href="./updates-interface-and-accessibility.html">Updates: Interface and accessibility</a> &mdash; September 13, 2021</li>
</ul>
<h4 class='allposts_header'>August 2021</h4>
<ul>
<li><a href="./updates-v3-blog.html">Updates: V3 blog</a> &mdash; August 16, 2021</li>
<li><a href="./updates-implement-storeremotemedia-for-v3-and-port-embed.html">Updates: Implement StoreRemoteMedia for v3 and port Embed</a> &mdash; August 13, 2021</li>
<li><a href="./updates-improve-the-attachments-system.html">Updates: Improve the Attachments system</a> &mdash; August 05, 2021</li>
<li><a href="./updates-finish-the-avatar-component.html">Updates: Finish the Avatar component</a> &mdash; August 04, 2021</li>
<li><a href="./milestone-documentation-and-tests-infrastructure.html">Milestone: Documentation and Tests Infrastructure</a> &mdash; August 04, 2021</li>
</ul>
<h4 class='allposts_header'>May 2021</h4>
<ul>
<li><a href="./milestone-port-media-handling-from-v2.html">Milestone: Port Media handling from v2</a> &mdash; May 03, 2021</li>
</ul>
<div id="all_posts"><a href="all_tags.html">All tags</a> &mdash; <a href="feed.rss">Subscribe</a></div>
</div>
@ -64,26 +77,26 @@ Our objective is to further differentiate GNU social from the alternative softwa
<h3>Milestones</h3>
<ul>
<li><a href="https://www.gnusocial.rocks/v3/milestone-documentation-and-tests-infrastructure.html"><s>Initial test and documentation infrastructure</s></a></li>
<li>Expand our support for tags, be it in posts and in actors (people, groups, etc) (WIP)</li>
<li>Port over the v2 federation stack to v3 (WIP)</li>
<li><a href="https://www.gnusocial.rocks/v3/milestone-tags.html"><s>Expand our support for tags, be it in posts and in actors (people, groups, etc)</s></a></li>
<li><a href="https://www.gnusocial.rocks/v3/milestone-activitystreams-20-and-webfinger.html"><s>Port over the v2 federation stack to v3</s></a></li>
<li>New functionality:
<ul>
<li>Implement Companies/Celebrities actor type as Service</li>
<li>Pinned Activities (plugin)</li>
<li>More sorting options</li>
<li>Publication language with defaults per group and easy switch on posting</li>
<li>Better Feeds</li>
<li><a href="https://www.gnusocial.rocks/v3/milestone-notes-and-actors-with-languages.html"><s>Publication language with defaults per group and easy switch on posting</s></a></li>
<li>Album of Images and Videos</li>
<li>Markdown</li>
<li>Server-side rendered-to-svg LaTeX</li>
<li>Posts with titles</li>
</ul>
<li><a href="https://www.gnusocial.rocks/v3/milestone-port-media-handling-from-v2.html"><s>Media handling, such as thumbnails, compression, and quota and
permission checking</s></a></li>
<li>External APIs.</li>
<li>New Groups specification</li>
<li>Better timelines</li>
<li><a href="https://www.gnusocial.rocks/v3/milestone-port-media-handling-from-v2.html"><s>Media handling, such as thumbnails, compression, and quota and permission checking</s></a></li>
<li>External APIs</li>
<li><a href="https://www.gnusocial.rocks/v3/milestone-actor-colour-theme-plugin.html"><s>Actor Colour Plugin</s></a></li>
<li>New Groups specification (WIP)</li>
</ul>
</div></div></div>
</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>.

View File

@ -36,8 +36,8 @@
<h3><a class="ablack" href="milestone-activitypub.html">
Milestone: ActivityPub
</a></h3>
<!-- bashblog_timestamp: #202112052229.51# -->
<div class="subtitle">December 05, 2021 &mdash;
<!-- bashblog_timestamp: #202112090050.02# -->
<div class="subtitle">December 09, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
@ -47,59 +47,18 @@ GNU social development team
<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>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>
<p>To extend an Activity properties you do:</p>
<h2>Video of GNU social v3 exchanging notes with GNU social v2.</h2>
<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>
<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="" frameborder="0" allowfullscreen></iframe>
<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 -->

View File

@ -5,52 +5,7 @@ Milestone: 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;
}
It's better in how it's organised and extensible, check the [EVENTS.md](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub/EVENTS.md) for examples.
## Video of GNU social v3 exchanging notes with GNU social v2.
<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="" frameborder="0" allowfullscreen></iframe>

View File

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

View File

@ -87,6 +87,16 @@ is properly tested, we have the

View File

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

View File

@ -90,6 +90,16 @@ The key ones are:</p>

View File

@ -36,8 +36,8 @@
<h3><a class="ablack" href="milestone-tags.html">
Milestone: Tags
</a></h3>
<!-- bashblog_timestamp: #202112052221.44# -->
<div class="subtitle">December 05, 2021 &mdash;
<!-- bashblog_timestamp: #202112090050.02# -->
<div class="subtitle">December 09, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
@ -50,10 +50,13 @@ Check our Wiki Milestone entry for all the juicy details.</p>
<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>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>
@ -114,6 +117,13 @@ tag, in which case you wouldn't see any notes from people with that
tag.</p>
<!-- text end -->
<!-- entry end -->
</div>

View File

@ -7,9 +7,10 @@ Milestone: Tags
**[>WIKI Milestone entry](https://agile.gnusocial.rocks/doku.php?id=milestones: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
* 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
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.
@ -66,4 +67,3 @@ 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.

View File

@ -119,6 +119,16 @@ GNU social development team

View File

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

View File

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

View File

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

View File

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

View File

@ -64,6 +64,16 @@ forget to subscribe!</p>