[V3][Blog] Add initial content

This commit is contained in:
Diogo Peralta Cordeiro 2021-08-16 19:22:59 +01:00
parent 58cda45781
commit 5d4dae70da
Signed by: diogo
GPG Key ID: 18D2D35001FBFAB0
14 changed files with 870 additions and 0 deletions

48
v3/all_tags.html Normal file
View File

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/pure-min.css">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/grids-responsive-min.css">
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
<link rel="stylesheet" href="/assets/css/style.css">
<link rel="stylesheet" href="/v3/blog.css">
<title>All tags - GNU social V3</title>
</head><body>
<header class="header">
<div class="home-menu pure-menu pure-menu-horizontal pure-menu-fixed">
<a class="pure-menu-heading" href="/">GNU social</a>
<ul class="pure-menu-list">
<li class="pure-menu-item pure-menu-selected"><a href="index.html" class="pure-menu-link">Version 3</a></li>
<li class="pure-menu-item"><a href="https://code.gnusocial.rocks/" class="pure-menu-link">Repository</a></li>
<li class="pure-menu-item"><a href="https://coverage.gnusocial.rocks/" class="pure-menu-link">Code Coverage</a></li>
<li class="pure-menu-item"><a href="https://docs.gnusocial.rocks/" class="pure-menu-link">Documentation</a></li>
<li class="pure-menu-item"><a href="https://agile.gnusocial.rocks/" class="pure-menu-link">Wiki</a></li>
<li class="pure-menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="pure-menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
<div id="divbodyholder">
<div class="headerholder"><div class="header">
<div id="title">
<h1 class="nomargin"><a class="ablack" href="https://gnusocial.rocks/v3/index.html">GNU social V3</a></h1>
<div id="description">Development blog where we announce our progress.</div>
</div></div></div>
<div id="divbody"><div class="content">
<h3>All tags</h3>
<ul>
</ul>
<div id="all_posts"><a href="index.html">Blog</a> &mdash; <a href="feed.rss">Subscribe</a></div>
</div>
</div></div>
</div>
<footer class="l-box is-center">
This site's source is <a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer>
</div>
</body></html>

189
v3/feed.rss Normal file
View File

@ -0,0 +1,189 @@
<?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>Tue, 17 Aug 2021 00:59:41 +0100</lastBuildDate>
<pubDate>Tue, 17 Aug 2021 00:59:41 +0100</pubDate>
<atom:link href="https://gnusocial.rocks/v3/feed.rss" rel="self" type="application/rss+xml" />
<item><title>
Updates: Implement StoreRemoteMedia for v3 and port Embed
</title><description><![CDATA[
<p>GNU social comes with two plugins that add important media functionality.</p>
<p>Not talking neither about ImageEncoder nor VideoEncoder this time, but rather
about StoreRemoteMedia and Embed.</p>
<p><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/StoreRemoteMedia">StoreRemoteMedia</a>
fetches remote files when they are Linked in a note. I.e., when the major mimetype isn't <code>text</code>.
It usually fetches and attempts to generate a thumb, if there are no encoders, it drops.</p>
<p><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/Embed">Embed</a>
attempts to generate a page preview from opengraph and oembed. I.e., acts when the major mimetype is <code>text</code>.</p>
<p>We've changed so much with GNU social v3 that, regarding SRM there was
no possible port, just a full rewrite. The code of both plugins became
much easier of understanding and compact, while promoting the same
functionality with more stability.</p>
<!-- text end -->
]]></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>Fri, 13 Aug 2021 13:37:42 +0100</pubDate></item>
<item><title>
Updates: Improve the Attachments system
</title><description><![CDATA[
<p>With the milestone "Port Media system from v2" 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.</p>
<p>Sadly, what motivated us to re-design the attachment system was the
non-considered corner cases.</p>
<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 reasoning leading to these entities and structure 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>
<item><title>
Updates: Finish the Avatar component
</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>
<!-- 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>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Wed, 04 Aug 2021 13:42:37 +0100</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. It is 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>
<p>Only the development book is in an elaborated state, the other books are
holding for more ready code.</p>
<p>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>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>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 dev 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>.</p>
<!-- 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>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Wed, 04 Aug 2021 13:37:42 +0100</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.</p>
<p>There are three relevant plugins for attachment handling:</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 compress, validate, rescale, and sanitize videos using FFMpeg.</li>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/FileQuota">FileQuota</a>: Ensures a user stays under the file quota.</li>
</ul>
<h2>How is the code organised?</h2>
<p>There are various entities related to attachment, and thumbnail handling.
The main 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/attachments.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>
<dc:creator>GNU social development team</dc:creator>
<pubDate>Mon, 03 May 2021 13:37:42 +0100</pubDate></item>
</channel></rss>

87
v3/index.html Normal file
View File

@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/pure-min.css">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/grids-responsive-min.css">
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
<link rel="stylesheet" href="/assets/css/style.css">
<link rel="stylesheet" href="/v3/blog.css">
<title>Blog - GNU social V3</title>
</head><body>
<header class="header">
<div class="home-menu pure-menu pure-menu-horizontal pure-menu-fixed">
<a class="pure-menu-heading" href="/">GNU social</a>
<ul class="pure-menu-list">
<li class="pure-menu-item pure-menu-selected"><a href="index.html" class="pure-menu-link">Version 3</a></li>
<li class="pure-menu-item"><a href="https://code.gnusocial.rocks/" class="pure-menu-link">Repository</a></li>
<li class="pure-menu-item"><a href="https://coverage.gnusocial.rocks/" class="pure-menu-link">Code Coverage</a></li>
<li class="pure-menu-item"><a href="https://docs.gnusocial.rocks/" class="pure-menu-link">Documentation</a></li>
<li class="pure-menu-item"><a href="https://agile.gnusocial.rocks/" class="pure-menu-link">Wiki</a></li>
<li class="pure-menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="pure-menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
<h2 class="content-head is-center">Version 3</h2>
<h3>Abstract</h3>
GNU social is the eldest free social networking platform for public and private communications used in federated social networks. It's versatile, extensible and privacy focused. We've been modernizing the existing codebase, ensuring inter-operationality as defined by the IndieWeb and we're developing a modern frontend. This makes GNU social accessible: easy to install and use, and follows AnyBrowser and A11Y guidelines.
Our objective is to further differentiate GNU social from the alternative software available, either FOSS or Proprietary/Centralized while setting an example of how a secure, performant and plug-and-play software should be in modern day's web.
<p>We are being supported by <a href="https://nlnet.nl/project/GNUSocial/">NLnet</a>.</p>
<div id="divbodyholder">
<div class="headerholder"><div class="header">
<div id="title">
<h1 class="nomargin"><a class="ablack" href="https://gnusocial.rocks/v3/index.html">GNU social V3</a></h1>
<div id="description">Development blog where we announce our progress.</div>
</div></div></div>
<div id="divbody"><div class="content">
<h3>Blog</h3>
<h4 class='allposts_header'>August 2021</h4>
<ul>
<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>
<h3>Milestones</h3>
<ul>
<li><a href="https://www.gnusocial.rocks/v3/tests-and-documentation-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>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>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/media-attachments-and-thumbnails.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>
</ul>
</div></div>
</div>
<footer class="l-box is-center">
This site's source is <a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer>
</div>
</body></html>

16
v3/main.css Normal file
View File

@ -0,0 +1,16 @@
body{font-family:Georgia,"Times New Roman",Times,serif;margin:0;padding:0;background-color:#F3F3F3;}
#divbodyholder{padding:5px;background-color:#DDD;width:100%;max-width:874px;margin:24px auto;}
#divbody{border:solid 1px #ccc;background-color:#fff;padding:0px 48px 24px 48px;top:0;}
.headerholder{background-color:#f9f9f9;border-top:solid 1px #ccc;border-left:solid 1px #ccc;border-right:solid 1px #ccc;}
.header{width:100%;max-width:800px;margin:0px auto;padding-top:24px;padding-bottom:8px;}
.content{margin-bottom:5%;}
.nomargin{margin:0;}
.description{margin-top:10px;border-top:solid 1px #666;padding:10px 0;}
h3{font-size:20pt;width:100%;font-weight:bold;margin-top:32px;margin-bottom:0;}
.clear{clear:both;}
#footer{padding-top:10px;border-top:solid 1px #666;color:#333333;text-align:center;font-size:small;font-family:"Courier New","Courier",monospace;}
a{text-decoration:none;color:#003366 !important;}
a:visited{text-decoration:none;color:#336699 !important;}
blockquote{background-color:#f9f9f9;border-left:solid 4px #e9e9e9;margin-left:12px;padding:12px 12px 12px 24px;}
blockquote img{margin:12px 0px;}
blockquote iframe{margin:12px 0px;}

View File

@ -0,0 +1,93 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/pure-min.css">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/grids-responsive-min.css">
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
<link rel="stylesheet" href="/assets/css/style.css">
<link rel="stylesheet" href="/v3/blog.css">
<title>Milestone: Documentation and Tests Infrastructure - GNU social V3</title>
</head><body>
<header class="header">
<div class="home-menu pure-menu pure-menu-horizontal pure-menu-fixed">
<a class="pure-menu-heading" href="/">GNU social</a>
<ul class="pure-menu-list">
<li class="pure-menu-item pure-menu-selected"><a href="index.html" class="pure-menu-link">Version 3</a></li>
<li class="pure-menu-item"><a href="https://code.gnusocial.rocks/" class="pure-menu-link">Repository</a></li>
<li class="pure-menu-item"><a href="https://coverage.gnusocial.rocks/" class="pure-menu-link">Code Coverage</a></li>
<li class="pure-menu-item"><a href="https://docs.gnusocial.rocks/" class="pure-menu-link">Documentation</a></li>
<li class="pure-menu-item"><a href="https://agile.gnusocial.rocks/" class="pure-menu-link">Wiki</a></li>
<li class="pure-menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="pure-menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
<div id="divbodyholder">
<div class="headerholder"><div class="header">
<div id="title">
<h1 class="nomargin"><a class="ablack" href="https://gnusocial.rocks/v3/index.html">GNU social V3</a></h1>
<div id="description">Development blog where we announce our progress.</div>
</div></div></div>
<div id="divbody"><div class="content">
<!-- entry begin -->
<h3><a class="ablack" href="milestone-documentation-and-tests-infrastructure.html">
Milestone: Documentation and Tests Infrastructure
</a></h3>
<!-- bashblog_timestamp: #202108041337.42# -->
<div class="subtitle">August 04, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
<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. It is 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>
<p>Only the development book is in an elaborated state, the other books are
holding for more ready code.</p>
<p>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>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>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 dev 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>.</p>
<!-- text end -->
<!-- entry end -->
</div>
</div></div>
</div>
<footer class="l-box is-center">
This site's source is <a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer>
</div>
</body></html>

View File

@ -0,0 +1,31 @@
Milestone: Documentation and Tests Infrastructure
**[WIKI Milestone entry](https://agile.gnusocial.rocks/doku.php?id=milestones:initial_test_documentation_infrastructure)**
GNU social now has its documentation available in
[https://docs.gnusocial.rocks/](https://docs.gnusocial.rocks/). It features four
different books. It is automatically generated from the [source](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/docs) using [mdBook](https://rust-lang.github.io/mdBook/).
Only the development book is in an elaborated state, the other books are
holding for more ready code.
Two of them are updates from existing documentation:
* The [User](https://docs.gnusocial.rocks/user) one is adapted
from the existing GNU social documentation for users that was provided in v2.
* The [Administrator](https://docs.gnusocial.rocks/administrator) one is adapted
from the "Unofficial GNU social docs" by Thomask who [asked us to make it official](https://notabug.org/diogo/gnu-social/issues/246).
And two of them are new:
* The [Developer](https://docs.gnusocial.rocks/developer) is both intended to guide third-party plugin developers and to make it easier of contributing to the code.
* The [Designer](https://docs.gnusocial.rocks/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.
Together with the documentation we've introduced a
[wiki](https://agile.gnusocial.rocks/). Its purpose is to walk-through decisions,
convention, terminology. It's where we document the reasoning the dev 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](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/tests). And the coverage is available [here](https://coverage.gnusocial.rocks/).

View File

@ -0,0 +1,97 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/pure-min.css">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/grids-responsive-min.css">
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
<link rel="stylesheet" href="/assets/css/style.css">
<link rel="stylesheet" href="/v3/blog.css">
<title>Milestone: Port Media handling from v2 - GNU social V3</title>
</head><body>
<header class="header">
<div class="home-menu pure-menu pure-menu-horizontal pure-menu-fixed">
<a class="pure-menu-heading" href="/">GNU social</a>
<ul class="pure-menu-list">
<li class="pure-menu-item pure-menu-selected"><a href="index.html" class="pure-menu-link">Version 3</a></li>
<li class="pure-menu-item"><a href="https://code.gnusocial.rocks/" class="pure-menu-link">Repository</a></li>
<li class="pure-menu-item"><a href="https://coverage.gnusocial.rocks/" class="pure-menu-link">Code Coverage</a></li>
<li class="pure-menu-item"><a href="https://docs.gnusocial.rocks/" class="pure-menu-link">Documentation</a></li>
<li class="pure-menu-item"><a href="https://agile.gnusocial.rocks/" class="pure-menu-link">Wiki</a></li>
<li class="pure-menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="pure-menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
<div id="divbodyholder">
<div class="headerholder"><div class="header">
<div id="title">
<h1 class="nomargin"><a class="ablack" href="https://gnusocial.rocks/v3/index.html">GNU social V3</a></h1>
<div id="description">Development blog where we announce our progress.</div>
</div></div></div>
<div id="divbody"><div class="content">
<!-- entry begin -->
<h3><a class="ablack" href="milestone-port-media-handling-from-v2.html">
Milestone: Port Media handling from v2
</a></h3>
<!-- bashblog_timestamp: #202105031337.42# -->
<div class="subtitle">May 03, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
<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.</p>
<p>There are three relevant plugins for attachment handling:</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 compress, validate, rescale, and sanitize videos using FFMpeg.</li>
<li><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/FileQuota">FileQuota</a>: Ensures a user stays under the file quota.</li>
</ul>
<h2>How is the code organised?</h2>
<p>There are various entities related to attachment, and thumbnail handling.
The main 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/attachments.html">documentation</a>.</p>
<!-- text end -->
<!-- entry end -->
</div>
</div></div>
</div>
<footer class="l-box is-center">
This site's source is <a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer>
</div>
</body></html>

View File

@ -0,0 +1,34 @@
Milestone: Port Media handling from v2
**[WIKI Milestone entry](https://agile.gnusocial.rocks/doku.php?id=milestones:attachment_media_embed_handling)**
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](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/Embed) generates a preview for it that may contain a thumbnail.
When a user shares a Link to an image, the [StoreRemoteMedia plugin](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/StoreRemoteMedia) 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.
There are three relevant plugins for attachment handling:
* [ImageEncoder](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/ImageEncoder): Allows to compress, validate, rescale, and sanitize images using VIPS.
* [VideoEncoder](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/VideoEncoder): Allows to compress, validate, rescale, and sanitize videos using FFMpeg.
* [FileQuota](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/FileQuota): Ensures a user stays under the file quota.
## How is the code organised?
There are various entities related to attachment, and thumbnail handling.
The main ones are:
* [Attachment](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/src/Entity/Attachment.php)
* [AttachmentThumbnail](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/src/Entity/AttachmentThumbnail.php)
The plugins are able to act by means of the Events system, as elaborated in the
[documentation](https://docs.gnusocial.rocks/developer/attachments.html).

View File

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/pure-min.css">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/grids-responsive-min.css">
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
<link rel="stylesheet" href="/assets/css/style.css">
<link rel="stylesheet" href="/v3/blog.css">
<title>Updates: Finish the Avatar component - GNU social V3</title>
</head><body>
<header class="header">
<div class="home-menu pure-menu pure-menu-horizontal pure-menu-fixed">
<a class="pure-menu-heading" href="/">GNU social</a>
<ul class="pure-menu-list">
<li class="pure-menu-item pure-menu-selected"><a href="index.html" class="pure-menu-link">Version 3</a></li>
<li class="pure-menu-item"><a href="https://code.gnusocial.rocks/" class="pure-menu-link">Repository</a></li>
<li class="pure-menu-item"><a href="https://coverage.gnusocial.rocks/" class="pure-menu-link">Code Coverage</a></li>
<li class="pure-menu-item"><a href="https://docs.gnusocial.rocks/" class="pure-menu-link">Documentation</a></li>
<li class="pure-menu-item"><a href="https://agile.gnusocial.rocks/" class="pure-menu-link">Wiki</a></li>
<li class="pure-menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="pure-menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
<div id="divbodyholder">
<div class="headerholder"><div class="header">
<div id="title">
<h1 class="nomargin"><a class="ablack" href="https://gnusocial.rocks/v3/index.html">GNU social V3</a></h1>
<div id="description">Development blog where we announce our progress.</div>
</div></div></div>
<div id="divbody"><div class="content">
<!-- entry begin -->
<h3><a class="ablack" href="updates-finish-the-avatar-component.html">
Updates: Finish the Avatar component
</a></h3>
<!-- bashblog_timestamp: #202108041342.37# -->
<div class="subtitle">August 04, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
<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>
<!-- text end -->
<!-- entry end -->
</div>
</div></div>
</div>
<footer class="l-box is-center">
This site's source is <a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer>
</div>
</body></html>

View File

@ -0,0 +1,7 @@
Updates: Finish the Avatar component
[Avatar Component source](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/components/Avatar).
Its controller handles upload, update and removal.
Important change from v2: Avatars are now regular attachments.

View File

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/pure-min.css">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/grids-responsive-min.css">
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
<link rel="stylesheet" href="/assets/css/style.css">
<link rel="stylesheet" href="/v3/blog.css">
<title>Updates: Implement StoreRemoteMedia for v3 and port Embed - GNU social V3</title>
</head><body>
<header class="header">
<div class="home-menu pure-menu pure-menu-horizontal pure-menu-fixed">
<a class="pure-menu-heading" href="/">GNU social</a>
<ul class="pure-menu-list">
<li class="pure-menu-item pure-menu-selected"><a href="index.html" class="pure-menu-link">Version 3</a></li>
<li class="pure-menu-item"><a href="https://code.gnusocial.rocks/" class="pure-menu-link">Repository</a></li>
<li class="pure-menu-item"><a href="https://coverage.gnusocial.rocks/" class="pure-menu-link">Code Coverage</a></li>
<li class="pure-menu-item"><a href="https://docs.gnusocial.rocks/" class="pure-menu-link">Documentation</a></li>
<li class="pure-menu-item"><a href="https://agile.gnusocial.rocks/" class="pure-menu-link">Wiki</a></li>
<li class="pure-menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="pure-menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
<div id="divbodyholder">
<div class="headerholder"><div class="header">
<div id="title">
<h1 class="nomargin"><a class="ablack" href="https://gnusocial.rocks/v3/index.html">GNU social V3</a></h1>
<div id="description">Development blog where we announce our progress.</div>
</div></div></div>
<div id="divbody"><div class="content">
<!-- entry begin -->
<h3><a class="ablack" href="updates-implement-storeremotemedia-for-v3-and-port-embed.html">
Updates: Implement StoreRemoteMedia for v3 and port Embed
</a></h3>
<!-- bashblog_timestamp: #202108131337.42# -->
<div class="subtitle">August 13, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
<p>GNU social comes with two plugins that add important media functionality.</p>
<p>Not talking neither about ImageEncoder nor VideoEncoder this time, but rather
about StoreRemoteMedia and Embed.</p>
<p><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/StoreRemoteMedia">StoreRemoteMedia</a>
fetches remote files when they are Linked in a note. I.e., when the major mimetype isn't <code>text</code>.
It usually fetches and attempts to generate a thumb, if there are no encoders, it drops.</p>
<p><a href="https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/Embed">Embed</a>
attempts to generate a page preview from opengraph and oembed. I.e., acts when the major mimetype is <code>text</code>.</p>
<p>We've changed so much with GNU social v3 that, regarding SRM there was
no possible port, just a full rewrite. The code of both plugins became
much easier of understanding and compact, while promoting the same
functionality with more stability.</p>
<!-- text end -->
<!-- entry end -->
</div>
</div></div>
</div>
<footer class="l-box is-center">
This site's source is <a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer>
</div>
</body></html>

View File

@ -0,0 +1,18 @@
Updates: Implement StoreRemoteMedia for v3 and port Embed
GNU social comes with two plugins that add important media functionality.
Not talking neither about ImageEncoder nor VideoEncoder this time, but rather
about StoreRemoteMedia and Embed.
[StoreRemoteMedia](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/StoreRemoteMedia)
fetches remote files when they are Linked in a note. I.e., when the major mimetype isn't `text`.
It usually fetches and attempts to generate a thumb, if there are no encoders, it drops.
[Embed](https://code.undefinedhackers.net/GNUsocial/gnu-social/src/branch/v3/plugins/Embed)
attempts to generate a page preview from opengraph and oembed. I.e., acts when the major mimetype is `text`.
We've changed so much with GNU social v3 that, regarding SRM there was
no possible port, just a full rewrite. The code of both plugins became
much easier of understanding and compact, while promoting the same
functionality with more stability.

View File

@ -0,0 +1,85 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/pure-min.css">
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.5/build/grids-responsive-min.css">
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
<link rel="stylesheet" href="/assets/css/style.css">
<link rel="stylesheet" href="/v3/blog.css">
<title>Updates: Improve the Attachments system - GNU social V3</title>
</head><body>
<header class="header">
<div class="home-menu pure-menu pure-menu-horizontal pure-menu-fixed">
<a class="pure-menu-heading" href="/">GNU social</a>
<ul class="pure-menu-list">
<li class="pure-menu-item pure-menu-selected"><a href="index.html" class="pure-menu-link">Version 3</a></li>
<li class="pure-menu-item"><a href="https://code.gnusocial.rocks/" class="pure-menu-link">Repository</a></li>
<li class="pure-menu-item"><a href="https://coverage.gnusocial.rocks/" class="pure-menu-link">Code Coverage</a></li>
<li class="pure-menu-item"><a href="https://docs.gnusocial.rocks/" class="pure-menu-link">Documentation</a></li>
<li class="pure-menu-item"><a href="https://agile.gnusocial.rocks/" class="pure-menu-link">Wiki</a></li>
<li class="pure-menu-item"><a href="https://kanban.undefinedhackers.net/?controller=BoardViewController&action=readonly&token=d2293e55cabae7cceff9fb496c651328195357d392b9e61a9f229ed6d463" class="pure-menu-link">Roadmap</a></li>
</ul>
</div>
</header>
<div class="content-wrapper">
<div class="content">
<div id="divbodyholder">
<div class="headerholder"><div class="header">
<div id="title">
<h1 class="nomargin"><a class="ablack" href="https://gnusocial.rocks/v3/index.html">GNU social V3</a></h1>
<div id="description">Development blog where we announce our progress.</div>
</div></div></div>
<div id="divbody"><div class="content">
<!-- entry begin -->
<h3><a class="ablack" href="updates-improve-the-attachments-system.html">
Updates: Improve the Attachments system
</a></h3>
<!-- bashblog_timestamp: #202108051337.42# -->
<div class="subtitle">August 05, 2021 &mdash;
GNU social development team
</div>
<!-- text begin -->
<p>With the milestone "Port Media system from v2" 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.</p>
<p>Sadly, what motivated us to re-design the attachment system was the
non-considered corner cases.</p>
<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 reasoning leading to these entities and structure 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 -->
<!-- entry end -->
</div>
</div></div>
</div>
<footer class="l-box is-center">
This site's source is <a href="https://code.undefinedhackers.net/GNUsocial/gnusocial.rocks">hosted here</a>.
</footer>
</div>
</body></html>

View File

@ -0,0 +1,24 @@
Updates: Improve the Attachments system
With the milestone "Port Media system from v2" we had ported the existing
attachment system. The fact is that this system wasn't good enough.
It's always important to start with the original code as that allows us
to review past decisions and understand all the corner cases.
Sadly, what motivated us to re-design the attachment system was the
non-considered corner cases.
Key commits:
* [32ad5dbd74 - [ENTITY] Split Attachment in various new entities](https://code.undefinedhackers.net/GNUsocial/gnu-social/commit/32ad5dbd74ebb369c4b3ed688e1fb78464fabe49)
* [c381e58d33 - [ENTITY] Refactor RemoteURL entities to Link](https://code.undefinedhackers.net/GNUsocial/gnu-social/commit/c381e58d3307e7dd07abeb9cf5b3998e34f5bd48)
The reasoning leading to these entities and structure is detailed in our
[wiki](http://agile.gnusocial.rocks/doku.php?id=attachment).
Some relevant observations:
- `Link` is now part of GNU social Data Representation terms. It represents
any remote URL being shared in a note.
- There's only one fixed directory for GSFiles.