<?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>Mon, 25 Jul 2022 16:07:14 +0100</lastBuildDate>
<pubDate>Mon, 25 Jul 2022 16:07:14 +0100</pubDate>
<atom:link href="https://gnusocial.rocks/v3/feed.rss" rel="self" type="application/rss+xml" />
<item><title>
Milestone: Pinboard API
</title><description><![CDATA[

<p>This builds on top of GNU social bookmarks functionality.</p>

<p><img src="assets/bookmarks/pinboard/pinboard-settings.png" alt="" title="" /></p>

<p><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/Pinboard/Pinboard.php#L45">Most endpoints of Pinboard v1 API were implemented</a>. We've left out some such as tag delete (as one can't really delete one in GNU social), among others that don't really fit. We have tested our implementation against <a href="https://github.com/fibelatti/pinboard-kotlin">Pinkt</a> and we will soon be contacting the maintainer so the functionality of using a different <code>API_TARGET</code> is included with this app (as it was all we had to change to have this working).</p>

<p>Discussion regarding <a href="https://socialhub.activitypub.rocks/t/explicitly-attached-links/2357/16">how bookmarks are better expressed in terms of ActivityStreams 2.0</a> is also developing in SocialHub.</p>








<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-pinboard-api.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-pinboard-api.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Fri, 01 Apr 2022 11:35:04 +0100</pubDate></item>
<item><title>
Milestone: Unbound Group
</title><description><![CDATA[

<p>This was quite a long milestone that builds on top of everything we've been
working on. From the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Notification">Notification</a> and <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/FreeNetwork">FreeNetwork</a> components to the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub">ActivityPub</a> plugin.</p>

<p>We have started with
<a href="https://codeberg.org/GNUsocial/fep/src/branch/fep-8485-bkp/feps/fep-8485.md">FEP-8485 Unbound Actor</a>, aiming at a ValueFlows based relationship between any kind of actors.</p>

<p>And this was discussed, re-thought, re-designed, and went through various
iterations on <a href="https://socialhub.activitypub.rocks/t/decentralised-group/2200">SocialHub Thread Decentralised Group</a>.</p>

<p>It wasn't until we had finished implementing the federation of Groups,
polishing our Notification system, and defined how we wanted to represent all of
this internally for GNU social v3, that we fresh started with all these ideas in
mind and came with the simpler <a href="https://codeberg.org/GNUsocial/fep/src/branch/fep-8485/feps/fep-2100.md">FEP-2100 Unbound Group and Organization</a>.</p>

<p>Which instead builds on top of the already existing logic for Following. Of
course, this FEP assumes how GNU social (and Lemmy, Friendrica, and Lotide)
understands groups (and organisations). But we believe that, now that
implementations are using these ideas and strategies, after a few more testing
time, everything should become reasonably specified and formalized. Being this
FEP already a step and contribution in that direction.</p>

<p>This FEP was implemented in GS <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/UnboundGroup">via a plugin</a>.</p>

<p><img src="assets/unbound/settings_link.png" alt="" title="" />
<img src="assets/unbound/example_linked_note.png" alt="" title="" /></p>










<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-unbound-group.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-unbound-group.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Mon, 28 Mar 2022 23:55:02 +0100</pubDate></item>
<item><title>
Milestone: Webhooks
</title><description><![CDATA[

<p>GNU social has <a href="https://web.archive.org/web/20190320033635/https://chromic.org/blog/lifestream-architecture/">always been a project dear to hackers</a>.</p>

<p>And it's because we love the project history and nature of being easily
extensible and capable of communicating with the most diverse platforms that we
insist on implementing robust and expressive specifications.</p>

<p>Want the notes mentioning you showing up on your toasts, then just code a quick
script and GNU social will definitely not be the one holding you back. We can
think of this <a href="https://notabug.org/HackersAtPorto/gs-arduino">old GNU social &lt;-> Arduino bridge</a>.</p>

<p>Webhooks is thus one more natural step on this direction.</p>

<p><img src="assets/webhooks/settings.png" alt="" title="" />
<img src="assets/webhooks/example.png" alt="" title="" /></p>












<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-webhooks.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-webhooks.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Mon, 28 Mar 2022 17:42:36 +0100</pubDate></item>
<item><title>
Milestone: Blog plugin and Notes of type Article and Page
</title><description><![CDATA[

<p>We have implemented group federation, and <a href="https://github.com/LemmyNet/lemmy/pull/2100/">ensured compatibility with Lemmy (MR #2100)</a>.</p>

<p>This was achieved by strategically introducing the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/Blog">Blog Plugin</a>.</p>

<p><img src="assets/blog/create_article.png" alt="" title="" /></p>

<p>Related discussion concerning compatibility with Friendica:
<a href="https://github.com/LemmyNet/lemmy/issues/2144">Lemmy issue #2144</a>.</p>

<p>Both GNU social and Lemmy have created test fixtures and the respective tests to
ensure that this now existing compatibility isn't loss. More fixtures are in the
plans.</p>

<p>Various improvements and changes in our Notification component derived from this
development. GNU social and Lemmy have also agreed on expressing and
understanding unlisted Likes in a manner analogous to how we handle Notes. But
GNU social still has to implement support for that form of Like.</p>













<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-blog-plugin-and-notes-of-type-article-and-page.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-blog-plugin-and-notes-of-type-article-and-page.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Mon, 28 Mar 2022 17:14:29 +0100</pubDate></item>
<item><title>
Milestone: Organisations and Group Tags
</title><description><![CDATA[

<p>This milestone elaborates on the <a href="https://www.gnusocial.rocks/v3/updates-local-groups.html">Local Groups update</a>. We have decided that internally a organisation would be a specialization of the Group Actor. The same way we handle happenings, polls, articles, and pages as specializations of notes.</p>

<p>It is already possible to create organization actors,
<img src="assets/groups/create_org.png" alt="" title="" /></p>

<p>and too have self tags on groups, which then aid on discoverability.
<img src="assets/groups/set_tags.png" alt="" title="" /></p>














<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-organisations-and-group-tags.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-organisations-and-group-tags.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Mon, 28 Mar 2022 16:46:10 +0100</pubDate></item>
<item><title>
Milestone: OAuth 2.0
</title><description><![CDATA[

<p>OAuth support is accomplished via a GNU social plugin.</p>

<p>Accompanying it came the possibility of a plugin feature a shell script for
setting pre-requirements that can be automatically executed by GNU social's
installer.</p>

<p>There was also an upgrade of the core authentication stack that made it more
simple and flexible.</p>

<p>Finally, the plugin was tested with <a href="http://andstatus.org/">AndStatus</a>, related
discussion available at: <a href="https://github.com/andstatus/andstatus/issues/549">AndStatus #549</a>.</p>
















<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-oauth-20.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-oauth-20.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Sun, 27 Mar 2022 18:01:17 +0100</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 (<a href="https://codeberg.org/fediverse/fep/pulls/1">FEP-8c3f</a>) 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 14:28:36 +0000</pubDate></item>
<item><title>
Milestone: Automatic Accesibility (A11Y) testing
</title><description><![CDATA[

<p>We use <code>pa11y-ci</code> to run our accesibility testing on all GNU social
pages. The process of setting this up was a bit of a ride, but the
results are quite useful:</p>

<p><img src="assets/a11y/report.png" alt="Accesibility report generated by Pa11y" title="" /></p>

<p>We also take screenshots of all pages and compare them with the
previous, allowing us to spot (possibly) unintended changes in the UI.</p>

<p>The way we do this is by using a <code>docker</code> image derived from <code>node</code>,
with <code>pa11y-ci</code> installed, which doesn't have an entrypoint. This then
allows us to spin up a webserver, PHP and Redis containers, mimiking a
staging environment. <code>pa11y-ci</code> uses a JSON config file to tell it
what to do, and handles visiting all pages with the given resolution,
logging in and registering any accesibility violations found.</p>

<p><img src="assets/a11y/violations.png" alt="Accesibility violations found by Pa11y" title="" /></p>

<p>Note that most of these errors are actually the same.</p>

<p>The saved screenshots are then used to detect changes, with
ImageMagik's <code>compare</code>, to generate a report on visual changes.</p>

<p><img src="assets/a11y/compare.png" alt="Screenshot comparisons" title="" /></p>

<p>We were already striving for making GNU social accesible, which is
clear from the really low number of violations found, but there's
always room for improvement :)</p>






























<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/milestone-automatic-accesibility-a11y-testing.html</link>
<guid>https://gnusocial.rocks/v3/./milestone-automatic-accesibility-a11y-testing.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Tue, 18 Jan 2022 13:56:33 +0000</pubDate></item>
<item><title>
Milestone: Collections
</title><description><![CDATA[

<p>We have generalized collections around our search engine. For that introducing
the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Collection">Collection component</a>.</p>

<p>This structure has the following implication:</p>

<pre><code>Collection -&gt; OrderedCollection
|-&gt; Notes (known as Feed)
|-&gt; Actors (known as Circle)
|-&gt; Other Object (known as Collection of ...)
  |-&gt; Attachments: AttachmentCollection
  |-&gt; Tags: TagCollection
</code></pre>

<p>And it allow us to centralise the scope system in the core, ensuring that no
actor will have access to notes or other objects that shouldn't be able to see.</p>

<p>Finally, with this, a plugin such as <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/NoteTypeFeedFilter">Note Type Feed Filter</a> can be useful in
every note collection (feed).</p>

<p>It also allows plugins such as ActivityPub to <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ActivityPub/Util/OrderedCollectionController.php">translate every collection
automatically</a>.</p>

<p>We also introduced the <a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Circle">Circle component</a>, which has a UI similar to the
<a href="https://www.gnusocial.rocks/v3/milestone-albums.html">Attachments Collections</a>,
and enables circle mentions with <code>@#circle_name</code>.</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 13:56:12 +0000</pubDate></item>
<item><title>
Updates: Local Groups
</title><description><![CDATA[

<p><img src="assets/groups/profile.png" alt="" title="" /></p>

<p>We haven't implemented federation of Groups yet, but group tags and <a href="https://socialhub.activitypub.rocks/t/decentralised-group/2200/17?u=diogo">discussion
on how unbounded groups can be federated via ActivityPub</a> has already started.</p>

<p>Concerning federation of traditional groups, we will port our logic from v2 and
translate following the same rules as AndStatus <a href="https://github.com/andstatus/andstatus/issues/248#issuecomment-558703558">because they work</a>, as yvolk beautifully stated :)</p>

<p>Finally, also note that the group actors now have "self-tags", as the other actors, which was a milestone.</p>































<!-- text end -->
]]></description><link>https://gnusocial.rocks/v3/updates-local-groups.html</link>
<guid>https://gnusocial.rocks/v3/./updates-local-groups.html</guid>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Tue, 18 Jan 2022 13:13:38 +0000</pubDate></item>
</channel></rss>
