diff --git a/v3/feed.rss b/v3/feed.rss
index 056a401..3001781 100644
--- a/v3/feed.rss
+++ b/v3/feed.rss
@@ -2,10 +2,195 @@
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;
+}
+
+
+
+
+]]>https://gnusocial.rocks/v3/milestone-activitypub.html
+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.
+ + + + +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
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.
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.
+ +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.
+ +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.
+ +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.
+ +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.
+ + + +]]>... All right, all right, it's not just it.
+ +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.
+ + + + + +]]>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.
- -When a user shares a Link that uses OpenGraph tags or has an OEmbed provider, -the Embed plugin generates a preview for it that may contain a thumbnail.
- -When a user shares a Link to an image, the StoreRemoteMedia plugin can fetch the -file and make it available as an attachment, and will generate a thumbnail.
- -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.
- -There are two EncoderPlugins implemented:
- -Another helpful plugin is FileQuota which ensures a user stays under the file quota.
- -There are various entities related to attachment and thumbnail handling. -The key ones are:
- - - -The plugins are able to act by means of the Events system, as elaborated in the -documentation.
- - - - - - - - - - - - - - - - -]]>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;
+}
+
+
+
+
+
+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.
+ + + diff --git a/v3/milestone-documentation-and-tests-infrastructure.html b/v3/milestone-documentation-and-tests-infrastructure.html index 165f2ec..60b9345 100644 --- a/v3/milestone-documentation-and-tests-infrastructure.html +++ b/v3/milestone-documentation-and-tests-infrastructure.html @@ -91,6 +91,9 @@ is properly tested, we have the + + + diff --git a/v3/milestone-notes-and-actors-with-languages.html b/v3/milestone-notes-and-actors-with-languages.html new file mode 100644 index 0000000..d619142 --- /dev/null +++ b/v3/milestone-notes-and-actors-with-languages.html @@ -0,0 +1,78 @@ + + + + + + + + + +Well, it's that, our notes now have a language attribute.
+ +... All right, all right, it's not just it.
+ +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.
+ + + + + + +++ + + +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.
+
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
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.
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.
+ +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.
+ +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.
+ +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.
+ +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.
+ + + + +