From b7199fbe35463ed38ebfb040ae37e2af310a9dec Mon Sep 17 00:00:00 2001 From: Diogo Peralta Cordeiro Date: Tue, 18 Jan 2022 13:57:01 +0000 Subject: [PATCH] [BLOG][Milestone] Automatic Acessibility Test --- v3/assets/a11y/report.png | Bin 0 -> 16925 bytes v3/assets/a11y/violations.png | Bin 0 -> 53786 bytes v3/feed.rss | 507 +++++++++++------- v3/index.html | 54 +- ...e-automatic-accesibility-a11y-testing.html | 81 +++ ...one-automatic-accesibility-a11y-testing.md | 32 ++ 6 files changed, 443 insertions(+), 231 deletions(-) create mode 100644 v3/assets/a11y/report.png create mode 100644 v3/assets/a11y/violations.png create mode 100644 v3/milestone-automatic-accesibility-a11y-testing.html create mode 100644 v3/milestone-automatic-accesibility-a11y-testing.md diff --git a/v3/assets/a11y/report.png b/v3/assets/a11y/report.png new file mode 100644 index 0000000000000000000000000000000000000000..d73e634ad5894bcc082126aaf025fc5100c7779d GIT binary patch literal 16925 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 literal 0 HcmV?d00001 diff --git a/v3/feed.rss b/v3/feed.rss index 99f8d00..b18c7e9 100644 --- a/v3/feed.rss +++ b/v3/feed.rss @@ -2,139 +2,177 @@ GNU social V3https://gnusocial.rocks/v3/index.html Development blog where we announce our progress.en -Tue, 18 Jan 2022 13:13:44 +0000 -Tue, 18 Jan 2022 13:13:44 +0000 +Tue, 18 Jan 2022 13:56:41 +0000 +Tue, 18 Jan 2022 13:56:41 +0000 -Updates: Local Groups +Milestone: Automatic Accesibility (A11Y) testing

+

We use pa11y-ci 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:

-

We haven't implemented federation of Groups yet, but group tags and discussion -on how unbounded groups can be federated via ActivityPub has already started.

+

Accesibility report generated by Pa11y

-

Concerning federation of traditional groups, we will port our logic from v2 and -translate following the same rules as AndStatus because they work, as yvolk beautifully stated :)

+

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

-

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

+

The way we do this is by using a docker image derived from node, +with pa11y-ci installed, which doesn't have an entrypoint. This then +allows us to spin up a webserver, PHP and Redis containers, mimiking a +staging environment. pa11y-ci 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.

+

Accesibility violations found by Pa11y

+ +

Note that most of these errors are actually the same.

+ +

The saved screenshots are then used to detect changes, with +ImageMagik's compare, to generate a report on visual changes.

+ +

Screenshot comparisons

+ +

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 :)

-]]>
https://gnusocial.rocks/v3/updates-local-groups.html -https://gnusocial.rocks/v3/./updates-local-groups.html +]]>https://gnusocial.rocks/v3/milestone-automatic-accesibility-a11y-testing.html +https://gnusocial.rocks/v3/./milestone-automatic-accesibility-a11y-testing.html GNU social development team -Tue, 18 Jan 2022 13:13:38 +0000
+Tue, 18 Jan 2022 13:56:33 +0000 -Milestone: Pinned Notes +Milestone: ActivityStreams 2.0 and WebFinger -

With this feature, an actor has more ways to express itself to the community as a whole. This activity is federated using Mastodon's featured collection extension.

+

The primary use of GNU social is to access the free network, be it ActivityWeb (ActivityPub) or Fediverse (OStatus).

+ +

Contrary to the original plan, we have merged The Free Network Module, WebFinger and LRDD into a single component named FreeNetwork. Likewise, ActivityPub and ActivityStreams 2.0 was kept the same plugin instead of separated.

+ +

Understanding the organisation chosen

+ +

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.

+ +

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.

+ +

Situation Report

+ +

ActivityPub already translates between activity and entity and allows plugins to extend it (thus serving a similar purpose to data modelling and representation plugins).

+ +

GNU social v3 now supports mentions, which is a process that starts in the Posting component. The processing of local mentions naturally finds its entire handling here.

+ +

For remote ActivityPub mentions, ActivityPub handles it aided by the FreeNetwork component).

+ +

Next steps

+ +

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.

+ + + + + + + + + + + + + + + + + + + + + + + + + -

Source -Default view of the actor profile, showing the 'Pin this note' action, and its respective representation

-]]>
https://gnusocial.rocks/v3/milestone-pinned-notes.html -https://gnusocial.rocks/v3/./milestone-pinned-notes.html +]]>https://gnusocial.rocks/v3/milestone-activitystreams-20-and-webfinger.html +https://gnusocial.rocks/v3/./milestone-activitystreams-20-and-webfinger.html GNU social development team -Tue, 18 Jan 2022 12:36:14 +0000
+Tue, 18 Jan 2022 13:56:12 +0000 -Milestone: Notes with LaTeX +Milestone: Actor colour theme plugin LaTeX content types is now supported.

+

Actors are now able to set their own colours, through a brand new plugin: "Oomox". +Those accustomed to customising their own desktop should know where the name comes from ;)

-

+

Here's how it works!

-

latex

+

The Oomox plugin main class catches the "PopulateProfileSettingsTabs" event upon visiting user panel.

-

-

+
public function onPopulateProfileSettingsTabs(Request $request, array &$tabs): bool
+{
+    $tabs[] = [
+        'title'      => 'Light theme colours',
+        'desc'       => 'Change the theme colours.',
+        'controller' => C\Oomox::oomoxSettingsLight($request),
+    ];
+
+    $tabs[] = [
+        'title'      => 'Dark theme colours',
+        'desc'       => 'Change the theme colours.',
+        'controller' => C\Oomox::oomoxSettingsDark($request),
+    ];
+
+    return Event::next;
+}
+
+ +

As made evident by the code, two new tabs are added to profile settings, light and dark theme colours. +Since the page styling follows the system theme, actors may want to style each theme differently, therefore they are treated separately.

+ +

The actor's defined colours are then saved in the respective entity and cached. +Finally, the colour preferences are used to render the corresponding CSS file which defines the various colour variables used:

+ +
public function oomoxCSS(): Response
+{
+    $user = Common::ensureLoggedIn();
+
+    $oomox_table = PluginOomox::getEntity($user);
+    if (is_null($oomox_table)) {
+        throw new ClientException(_m('No custom colours defined', 404));
+    }
+
+    $content = Formatting::twigRenderFile('/oomox/root_override.css.twig', ['oomox' => $oomox_table]);
+    return new Response($content, status: 200, headers: ['content-type' => 'text/css']);
+}
+
+ +

Please note, upon rendering for the first time, page render may be blocked until the resulting file is served. Nonetheless, subsequent page renders +won't experience the issue again. That is, if the file is cached by the browser.

+ +

How it looks

+ +

Tabs added using the "PopulateProfileSettingsTabs" event: +User panel Oomox sections

+ +

Changing the dark theme colours! +Dark theme colours selection

+ +

The result of given changes, please note it's no longer a 'dark' theme. +Given a valid colour, it's the actor's responsibility whether or not the colours make sense. So, go wild! +The resulting colours in action!

- -]]>
https://gnusocial.rocks/v3/milestone-notes-with-latex.html -https://gnusocial.rocks/v3/./milestone-notes-with-latex.html -GNU social development team -Tue, 18 Jan 2022 11:41:47 +0000
- -Milestone: Notes with Markdown -Markdown content types is now supported.

- -

- -

Markdown

- -

-

- - - - - - - - -]]>
https://gnusocial.rocks/v3/milestone-notes-with-markdown.html -https://gnusocial.rocks/v3/./milestone-notes-with-markdown.html -GNU social development team -Tue, 18 Jan 2022 11:40:49 +0000
- -Milestone: Web Monetization -Web Monetization is being proposed as a W3C -standard at the Web Platform Incubator Community Group.

- -

GNU social now supports that initiative with the Web Monetization plugin.

- -

With this, we also introduce an ActivityPub (FEP pending) GS extension -gs:webmonetizationWallet. This enables actors to support other actors with Web -Monetization in the fediverse.

- -

It looks like this:

- -

Own profile

- -

- -

In the profile of other actors

- -

- - - - - - - - - - - -]]>
https://gnusocial.rocks/v3/milestone-web-monetization.html -https://gnusocial.rocks/v3/./milestone-web-monetization.html -GNU social development team -Tue, 18 Jan 2022 01:57:40 +0000
- -Milestone: Mute notifications from a conversation -If a conversation in which you have interacted becomes very active and you wish -to stop receiving notifications derived from that, it is now possible: -

@@ -147,10 +185,10 @@ to stop receiving notifications derived from that, it is now possible: -]]>
https://gnusocial.rocks/v3/milestone-mute-notifications-from-a-conversation.html -https://gnusocial.rocks/v3/./milestone-mute-notifications-from-a-conversation.html +]]>https://gnusocial.rocks/v3/milestone-actor-colour-theme-plugin.html +https://gnusocial.rocks/v3/./milestone-actor-colour-theme-plugin.html GNU social development team -Tue, 18 Jan 2022 01:39:10 +0000
+Tue, 18 Jan 2022 13:56:12 +0000 Milestone: Albums ]]>https://gnusocial.rocks/v3/milestone-albums.html https://gnusocial.rocks/v3/./milestone-albums.html GNU social development team -Tue, 18 Jan 2022 01:23:27 +0000 +Tue, 18 Jan 2022 13:56:12 +0000 Milestone: Collections .

]]>
https://gnusocial.rocks/v3/milestone-collections.html https://gnusocial.rocks/v3/./milestone-collections.html GNU social development team -Tue, 18 Jan 2022 00:21:29 +0000
+Tue, 18 Jan 2022 13:56:12 +0000 -Milestone: ActivityPub +Milestone: Documentation and Tests Infrastructure ActivityPub Plugin source.

+

>WIKI Milestone entry

-

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, check the EVENTS.md for examples.

- -

Video of GNU social v3 exchanging notes with GNU social v2.

- - - - - - - - - - - - - - - - - - -]]>
https://gnusocial.rocks/v3/milestone-activitypub.html -https://gnusocial.rocks/v3/./milestone-activitypub.html -GNU social development team -Fri, 10 Dec 2021 16:34:39 +0000
- -Milestone: Tags -GNU social now has its documentation available in +https://docs.gnusocial.rocks/. It features four +different books. These are automatically generated from the source using mdBook.

-

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.

+

Only the development book is in an elaborated state, the other books are +holding for more ready code.

-

>WIKI Milestone entry

- -

GNU social v2 has tags and lists. It allows you to:

+

And two of them are new:

    -
  • 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
  • +
  • The Developer is both intended to guide third-party plugin developers and to make it easier of contributing to the code.
  • +
  • The Designer 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.
-

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.

+

And two of them are updates from existing documentation:

+ + + +

Together with the documentation we've introduced a +wiki. 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.

+ +

Finally, when the documentation doesn't explain, and to ensure the whole code +is properly tested, we have the +tests. And the coverage is available here. At the time of writing the coverage has 98.76% code lines tested.

+ + + -

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 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 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 -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 each word.

-

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.

-

-

-

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 -tag, in which case you wouldn't see any notes from people with that -tag.

@@ -402,8 +380,143 @@ tag.

-]]>
https://gnusocial.rocks/v3/milestone-tags.html -https://gnusocial.rocks/v3/./milestone-tags.html +]]>https://gnusocial.rocks/v3/milestone-documentation-and-tests-infrastructure.html +https://gnusocial.rocks/v3/./milestone-documentation-and-tests-infrastructure.html GNU social development team -Thu, 09 Dec 2021 15:21:18 +0000
+Tue, 18 Jan 2022 13:56:12 +0000 + +Milestone: Mute notifications from a conversation +If a conversation in which you have interacted becomes very active and you wish +to stop receiving notifications derived from that, it is now possible: +

+ + + + + + + + + + + + +]]>
https://gnusocial.rocks/v3/milestone-mute-notifications-from-a-conversation.html +https://gnusocial.rocks/v3/./milestone-mute-notifications-from-a-conversation.html +GNU social development team +Tue, 18 Jan 2022 13:56:12 +0000
+ +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:

+ + + +

Here's how it looks

+ +

First, the user panel section where the desired preferences are selected: +User panel language settings section

+ +

Upon sending the previous form, the user is redirected to order their selection: +Ordering the selections made in previous page

+ +

Finally, when posting the language with the highest priority is selected by default.

+ +

However, by accessing "Additional options", another language may be selected. The resulting +note will have the html lang attribute according to it.

+ +

The posting widget itself: +Selecting the language of a note when posting

+ +

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.

+ +

A marvellous feed filtered by note language

+ +

+ + + + + + + + + + + + + + + + + +]]>
https://gnusocial.rocks/v3/milestone-notes-and-actors-with-languages.html +https://gnusocial.rocks/v3/./milestone-notes-and-actors-with-languages.html +GNU social development team +Tue, 18 Jan 2022 13:56:12 +0000
+ +Milestone: Notes with LaTeX +LaTeX content types is now supported.

+ +

+ +

latex

+ +

+

+ + + + + + + +]]>
https://gnusocial.rocks/v3/milestone-notes-with-latex.html +https://gnusocial.rocks/v3/./milestone-notes-with-latex.html +GNU social development team +Tue, 18 Jan 2022 13:56:12 +0000
+ +Milestone: Notes with Markdown +Markdown content types is now supported.

+ +

+ +

Markdown

+ +

+

+ + + + + + + + +]]>
https://gnusocial.rocks/v3/milestone-notes-with-markdown.html +https://gnusocial.rocks/v3/./milestone-notes-with-markdown.html +GNU social development team +Tue, 18 Jan 2022 13:56:12 +0000
diff --git a/v3/index.html b/v3/index.html index 1ba2444..bd53763 100644 --- a/v3/index.html +++ b/v3/index.html @@ -45,42 +45,28 @@ Our objective is to further differentiate GNU social from the alternative softwa

Blog

January 2022

-

December 2021

- -

November 2021

- -

September 2021

- -

August 2021

- -

May 2021

- diff --git a/v3/milestone-automatic-accesibility-a11y-testing.html b/v3/milestone-automatic-accesibility-a11y-testing.html new file mode 100644 index 0000000..8582877 --- /dev/null +++ b/v3/milestone-automatic-accesibility-a11y-testing.html @@ -0,0 +1,81 @@ + + + + + + + + + +Milestone: Automatic Accesibility (A11Y) testing - GNU social V3 + +
+ + +
+ +
+
+
+
+ +

+Milestone: Automatic Accesibility (A11Y) testing +

+ +
January 18, 2022 — +GNU social development team +
+ + +

We use pa11y-ci 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:

+ +

Accesibility report generated by Pa11y

+ +

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

+ +

The way we do this is by using a docker image derived from node, +with pa11y-ci installed, which doesn't have an entrypoint. This then +allows us to spin up a webserver, PHP and Redis containers, mimiking a +staging environment. pa11y-ci 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.

+ +

Accesibility violations found by Pa11y

+ +

Note that most of these errors are actually the same.

+ +

The saved screenshots are then used to detect changes, with +ImageMagik's compare, to generate a report on visual changes.

+ +

Screenshot comparisons

+ +

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 :)

+ + + +
+
+ diff --git a/v3/milestone-automatic-accesibility-a11y-testing.md b/v3/milestone-automatic-accesibility-a11y-testing.md new file mode 100644 index 0000000..34fb0f0 --- /dev/null +++ b/v3/milestone-automatic-accesibility-a11y-testing.md @@ -0,0 +1,32 @@ +Milestone: Automatic Accesibility (A11Y) testing + +We use `pa11y-ci` 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: + +![Accesibility report generated by Pa11y](assets/a11y/report.png) + +We also take screenshots of all pages and compare them with the +previous, allowing us to spot (possibly) unintended changes in the UI. + +The way we do this is by using a `docker` image derived from `node`, +with `pa11y-ci` installed, which doesn't have an entrypoint. This then +allows us to spin up a webserver, PHP and Redis containers, mimiking a +staging environment. `pa11y-ci` 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. + +![Accesibility violations found by Pa11y](assets/a11y/violations.png) + +Note that most of these errors are actually the same. + +The saved screenshots are then used to detect changes, with +ImageMagik's `compare`, to generate a report on visual changes. + +![Screenshot comparisons](assets/a11y/compare.png) + +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 :) + +