# GNU Social on SDF

GNU social is a social media platform[note] implementing the OStatus protocol stack. It works in much the same way as Twitter or Facebook or Google+; you may:

- publish text notices (like Twitter's "tweets" or Facebook's "status updates"), optionally with file attachments (images, sounds, documents, and so-on);
- favor other users' notices ("like", or "+1" on other services);
- follow ("subscribe","friend") the activity of other users, hashtags, and search terms;
- join groups to receive topical notices and broadcast your own notices to interested parties;
- repeat ("retweet","share") others' notices so that your friends, associates, and followers will see them;
- and, of course, comment on notices and participate in public discourse.

GNU social differs from the most popular social media platforms in a fundamental way: rather than having all communication hosted on a single corporation's private network, GNU social is an open-source software platform running on a distributed system of federated servers operated by a diverse array of groups and individuals. Unlike Facebook or Google+ or Twitter, this social network has no central authority, no owner — anyone can operate a server in the Fediverse: the service providers and users that make-up the network on which GNU social operates.

The SDF hosts a public GNU social node[note] which may be reached at https://gs.sdf.org. An SDF membership is no longer required to join this node; simply direct your browser to https://gs.sdf.org/main/register to create a new account — and bring your friends!

This tutorial is intended to help you get started with the SDF GNU social web interface, and to a lesser extent with GNU social in general. The software version at the time of writing this is 1.2.0-beta3.

## Contents

- Creating Your SDF GNU social Account
- Setting-Up Your Account
- Getting Started: Timelines
  - Your Home Timeline
  - The Public Timeline
  - The Network Timeline
- Interacting With Notices
  - Notice Actions
    - Favor
    - Reply
    - Repeat
    - Delete
  - Context and Origin
    - Viewing Notices in Context
    - Viewing a Notice's Original
- Writing Notices
  - Mentions (using '@')
  - Tags (using '#')
  - Group Addressing (using '!')
- Following Users
  - From Their Profile Page
  - From Your Profile Page
  - Finding People To Follow
- Groups
  - Joining Groups
  - Finding Groups
- Webfinger And Your Account ID
- Understanding GNU Social
  - The Fediverse Is Defined By Relationships
  - The "Federation Problem"
  - The Best Course

## Creating Your SDF GNU social Account

In the past, SDF GNU social was only open to SDF members, but this is no longer the case. To create an account, you or any of your friends may visit https://gs.sdf.org/main/register and fill-out the registration form.

## Setting-Up Your Account

After logging into your account for the first time, you should click the 'SETTINGS' link at the top of the page; this will present you with a form for filling-out your profile information. It's pretty standard stuff: full name, bio, website, and so-on. Fill these things in as usual, but take note of the last two settings on the page.

### Subscription Policy and Private Posts

By default, anyone can subscribe to your activity, and when you post notices they will be publicly visible — this is akin to how things work on Twitter. You can opt instead to do things in a more Facebook-like fashion, where you must approve subscriptions, and your posts will be private, visible only by those subscribers you have approved. This latter scenario is good if you want to use open social networking to keep in touch with family and friends, but have no interest in participating in the global social media cacophony. These settings can be changed at any time.

There are additional links on the left side of the page for changing your password, uploading an avatar image, and so-on. These things are self-explanatory.

## Getting Started: Timelines

After you've set-up your account and saved all of your changes, you'll probably want to see some stuff that people are posting. To view user activity, you need to select a timeline to look at. Links to all of the timelines are provided in the left-hand navigation pane.

### Your HOME Timeline

`https://gs.sdf.org/{username}/all`

Your Home timeline is where you will see all of the activity from people you're following and the groups you've joined, as well as notices containing tags that you're watching, and mentions of you.

If you are reading this as a brand-new user, you will have noticed that your Home timeline is empty. This is because you are not following anyone, you are not a member of any groups, you are not watching any tags, and no one is talking about you. Don't worry! It'll be full of stuff in no time.

### The PUBLIC Timeline

`https://gs.sdf.org/main/public`

The Public timeline is where you will see all of the latest public activity from your fellow SDF GNU social users. There will also be some notices from non-SDF users [how would you notice this?], but they'll only appear in this timeline because an SDF user has interacted with the federated notice in some way, either by favoring, replying, or repeating it, or being mentioned in it.

### The NETWORK Timeline

`https://gs.sdf.org/main/all`

The Network timeline is the busiest place on SDF GNU social. It's a feed of all the public activity that's coming into the node, from SDF users as well as remote users.

I'm going to put a fork in the road, here. You can keep reading straight through to learn about interacting with notices; you might instead want to write a notice to announce your arrival at the party; or, you may want to know about follwing users or joining groups to start growin' your social network; if you're of a more conceptual bent, though, now might be a good time to read the Understanding GNU social section, to get the lay of the land, so to speak.

## Interacting With Notices

Notices that you see when browsing around SDF GNU social can be interacted with in a variety of ways; most of them will be familiar to you if you're already using another microblogging service, although they probably work a little bit differently than what you're used to.

### Notice Actions

Below every notice, you will see three (or four) icons, with which you can perform the following actions:

#### Favor

Favoring a notice is akin to "liking" or "+1'ing" a notice on other services. It adds the notice to your list of favorites, which you can access by clicking the Favorites link in the navigation pane (or by pointing your browser to `https://gs.sdf.org/{username}/favorites`). This also sends a notice to the node of the notice's author to let it know that you have favored it, and when other people view the notice, they will be able to see that you favored it as well.

#### Reply

Replying to a notice is as obvious as it sounds. You will be presented with a text box in which to write a reply which will be posted to the SDF GNU social server, which, in turn, will send a copy to the notice author's server so that they can see it, as well as all of your followers.

#### Repeat

Repeating a notice copies it to your feed so that it will appear in the Home timelines of all of your followers and in the Public Timeline of your server with a little note attached to it saying that you repeated it.

#### Delete

On notices that you post, you will also see an icon for deleting them. This will, obviously, delete your notice. But, it may not necessarily delete it on other servers that it's been sent to! So, before you post something you might regret, think twice.

### Context and Origin

Below each post, you'll also see a hyperlink around the time that it was posted, and a link that either says '[permalink]', or something like 'from quitter.se'. These two links allow you to view the notice in context, or view the original notice. Here's why that's useful:

#### Viewing Notices In Context

If you click on the time of the notice's posting, you'll be taken to a Conversation view, where you can see the conversational context in which a notice/reply was posted. This conversation is reconstructed from notices that are present in the local database (this may make more sense after reading the Understanding GNU Social section). Because SDF GNU social is a small node, this will sometimes produce badly fragmented conversations as only a small part of the conversation has been delivered to our node (see The "Federation Problem").

#### Viewing A Notice's Original

The second link, which will say '[permalink]' for notices posted by SDF users or "from some.server" for notices received from outside SDF, will take you to the unique web address for that notice. If the notice originated outside of SDF, then you will be taken to its author's server. There are a couple of reasons why you might want to do this: if the conversation view on SDF GNU social seems to be missing a lot of notices, you can go to the notice's home server and see the (hypothetically more complete) conversation view there; or, sometimes a message will be truncated as it passes from one Fediverse node to another, and you will need to view the notice on its originating node to see the entire message. This latter scenario typically won't happen on SDF, because our notice-length limit is 1000 characters, and most folks' notices are much shorter than that.

## Writing Notices

To compose a new notice, you can just click in the box at the top of the GNU social interface that says `Update your status...`, and a notice composition form will appear — unless you have Javascript disabled or are using a text-only browser; in either of those cases you can direct your browser to `https://gs.sdf.org/notice/new` and compose your notice on the form provided by that page.

Notices are plain text; no bolds, italics, font-sizes/faces, or anything like that. YOU CAN ALWAYS SHOUT-CAPS FOR EMPHASIS! Or use *bold-stars* and ~itildes~ and whatever other plain-text conventions you're happy with if you need to.

Any URLs you type in your notice will be automatically hyperlinked when you post it.

The 'at' character (`@`), 'hash' (`#`), and 'bang' (`!`) all have special functions when they appear at the beginning of a word; let's go over those functions now:

### Mentions (using '@')

This will be familiar to Twitter users. Prepending an at symbol (@) to a user's nickname will mention the user. This means that your notice will appear in that user's Home timeline, and they will recieve a notification that they've been mentioned.

#### User Name Collisions

In the Fediverse, two or more users on different servers can have the same nickname, and this can cause minor headaches when you're trying to mention someone. For example, there might be a user named Zorba on `quitter.se`, and a different user named Zorba on `micro.fragdev.com`. You might follow the Zorba on FragDev and want to mention him in a notice, so you write "@Zorba" in your message — but when you post it you see that it's gone to Zorba at Quitter.se instead. Why? Because at some point your node received a notice from zorba@quitter.se and put him into the remote user database, and when the server looked in the table of user nicknames to find out who "Zorba" is, it simply took the first Zorba it came across, which happened to be the wrong one.

This won't happen with the nicknames of your fellow SDF users — the server looks for local nicknames first, and all of the SDF users have unique names — but it can happen with users on other servers. To be completely sure that your mention hits the right user, you can use their webfinger address when mentioning them. So, in the previous example, instead of simply writing "@Zorba", you would use "@zorba@micro.fragdev.com"

### Tags (using '#')

Ah, hashtags. Who isn't tired of hearing that word?

They work on GNU social much the same as elsewhere: you prepend a "hash" (`#`) to a word, and the notice becomes "tagged" with that keyword so that people who are following that tag will see your notice in their Home Timeline.

Tags in GNU social are case-insensitive, so you can write #tubers, #Tubers, #TUBERS, or #tUbErS in your notice, and they'll all be treated as #tubers. The up-side of this is that people who appreciate clarity can write multi-word hashtags in camel-case (#ThePenIsMightier) while remaining in the loop with their shift-key-averse fellows who aren't bothered by possible ambiguity in their tags (#thepenismightier).

### Group Addressing (using '!')

The "bang" (`!`) is used in GNU social to address groups.

If you are a member of a group, when you type the group's name prepended with a bang in a notice (eg "!cheeseafficionados"), that notice will arrive in the timelines of all the group's members, all over the fediverse.

#### Group Name Collisions

This again? Yep, it's the same issue as with federated user nicknames: groups on different nodes can have the same name, so when you mention !DeloreanFans, your notice might not get to the group you wanted it to.

Unfortunately, there's no easy solution for this problem, because groups don't have webfinger addresses! If your node has a group with the same name as a remote group that you're a member of, or want to be a member of ...I'm not sure there's anything you can do about that.

## Following Users

There are two ways to follow a user: from their profile page, or from yours.

### From Their Profile Page

Click on a user's avatar or nickname to be taken to their profile page. Once there, look for a button that says "Subscribe" or "Remote Follow". Clicking the button will open a dialog that asks for your account ID. You can use the URL of your SDF GNU social profile page, which looks like this: `https://gs.sdf.org/nickname`, or you can use your webfinger ID, which looks like this: nickname@gs.sdf.org.

After you submit your ID, you will be redirected to a page asking you to confirm the follow. Once you've confirmed, you will start receiving notices from the user you've just followed in your timeline.

### From Your Profile Page

If you already have another user's account ID — either a webfinger address, such as `bob@status.hoohaw.org`, or a URL such as `http://status.hoohaw.org/bob` — you can begin following them by going to your profile page and clicking the "+ Remote" button underneath the "Following" section on the right-hand side of the screen. This will open a dialog asking for the account ID of the user you wish to follow. Fill in the box, submit it, confirm on the page you're redirected to, and that's it!

### Finding Users To Follow

Yes, it's all well and good to know how to follow people — but how do you find people to follow? The SDF GNU social instance is new, and there are only a handful of semi-regular users right now, so the Public timeline sometimes seems a bit dead. The Network timeline is a bit busier, and it has activity from remote users, so it's a bit better. Sometimes, though, the best place to look for interesting new people is somewhere else.

- The GNU social website links to some of the largest public servers: https://gnu.io/social/try/
- Erkan Yimlaz's wiki has a much longer list of public and private servers, both large and small: http://www.skilledtests.com/wiki/List_of_Independent_GNU_social_Instances
- And GSTools has a list of servers here: http://gstools.org/servers

Visit some sites, have a scroll through their Network/Public timelines, and subscribe to some interesting people!

## Groups

Groups in the Fediverse are more-or-less automated message repeaters. When a user mentions a group in a notice, the notice is sent to the node that hosts the group, and that node then sends a copy of the notice to all the nodes of its members. Groups are good for the Fediverse: they make sure that items of interest reach people who want to see them, and they establish relationships between nodes.

### Joining Groups

Joining groups is done in much the same way as following users. You may either:

- visit the group's page and click the "Join" button, or
- visit your profile page and click the "+Remote" button under the GROUPS section in the right-hand pane, then enter the URL of the group's page into the dialog.

There is an !SDF group, and it's as good as any for trying this out. The group's page is `https://gs.sdf.org/group/sdf`.

### Finding Groups

All of the groups hosted on SDF GNU social can easily be browsed by clicking the GROUPS link in the PUBLIC section of the navigation pane, or by directing your browser to `https://wm.sdf.org/gs/groups`.

Other nodes have group directories as well, which you can usually access by visiting `{nodeURL}/groups` (ex: `https://quitter.se/groups`). Most group directory pages will have a search dialog in case you're looking for a specific topic.

Hopping from site to site and browsing/searching their group directories can be a bit of a pain, though. Another resource to try is Erkan Yimlaz's wiki, which contains a user-editable list of federated groups from all over the fediverse: `http://federation.skilledtests.com/List_of_federated_GNU_social_groups.html`. Finally, you could try GSTools, which has a search tool for groups as well as users.

## Your Account ID

There are two forms of account ID that you can put on your business card or email signature or home page or wherever else people put things like "@zippyThePinhead on Twitter!". You can either use the URL of your GNU social profile page:

    https://gs.sdf.org/nickname

Or, the GNU social server provides a WebFinger ID for you, which looks like an email address:

    nickname@gs.sdf.org

The WebFinger ID is used in GNU social for mentioning users on other nodes. There's more information on that up in the section on mentions.

## WebFinger

If you already know what WebFinger is, and you have it set up on your domain, here is an XRD template for linking your WebFinger address to your SDF GNU social account:

    <?xml version="1.0" encoding="UTF-8"?>
    <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
        <Subject>acct:you@yourdomain.com</Subject>
        <Alias>acct:nickname@gs.sdf.org</Alias>
        <Alias>https://gs.sdf.org/user/userIDnumber</Alias>
        <Link rel="http://webfinger.net/rel/profile-page"
              type="text/html"
              href="https://gs.sdf.org/user/userIDnumber"/>

        <Link rel="http://schemas.google.com/g/2010#updates-from"
              type="application/atom+xml"
              href="https://gs.sdf.org/api/statuses/user_timeline/userIDnumber.atom"/>

        <Link rel="http://gmpg.org/xfn/11"
              type="text/html"
              href="https://gs.sdf.org/user/userIDnumber"/>

        <Link rel="describedby"
              type="application/rdf+xml"
              href="https://gs.sdf.org/nickname/foaf"/>

        <Link rel="http://salmon-protocol.org/ns/salmon-replies"
              href="https://gs.sdf.org/main/salmon/user/userIDnumber"/>

        <Link rel="http://salmon-protocol.org/ns/salmon-mention"
              href="https://gs.sdf.org/main/salmon/user/userIDnumber"/>

        <Link rel="http://ostatus.org/schema/1.0/subscribe"
              template="https://gs.sdf.org/main/ostatussub?profile={uri}"/>
    </XRD>

You'll need to replace "nickname" with your nickname, and "userIDnumber" with your user ID number on SDF GNU social. Wait, what? My user ID number? Yes. If you visit your profile page, in the right-hand column, under STATISTICS, you'll see that your User ID is given as a number. That's the number you need to use in your WebFinger link relations.

## Understanding GNU social

While GNU social allows you to do most of the same things you can do on other social media sites, there are some fundamental differences between the way things work on the federated OStatus network that GNU social uses ("The Fediverse") and the way they work on the closed virtual networks of, say, Facebook or Twitter.

On Twitter/Facebook/Google+/&c.:

- All users connect to the same service provider
- Everyone's messages and relationships are stored in a big, central repository
- Finding people and messages is easy because everyone, everything is in the same database
- Everyone can interact with everyone because, again, everyone's using the same service provider

In the Fediverse:

- There are hundreds of independent service providers, each with hugely variable numbers of users
- Everyone's notices and relationships are distributed across sites, with varying degrees of redundancy
- Finding people and messages across the Fediverse can be difficult because the data is spread across many sites, and there are (currently) no inter-site searching/indexing services
- Users can only interact with notices that have been delivered to their node

To some extent, each GNU social node is an island, a small Twitter or Facebook unto itself: you and the other users of SDF GNU social are visible to each other in the site directory, and the directory may be browsed or searched; when you post a public notice, everyone on SDF GNU social will see it in the Public Timeline, and all of those notices may be searched, replied to, repeated, and favored.

But SDF GNU social is also part of a world-wide network of servers using the OStatus protocol to enable their users to follow each other, join groups, and send notices between their nodes. OStatus provides inter-node communication, but it does not make the Fediverse into a sort-of distributed SuperTwitter — unfortunately, I think a lot of new users expect it to. Hopefully this brief explanation of how OStatus federation works will help you to understand how and why GNU social behaves the way it does.

### The Fediverse is Defined by Relationships

On the federated network, user activity passes between nodes, but only where relationships exist. For example:

If `archibald@server01` is following `lucinda@server02`, copies of all of Lucinda's notices will be sent to server01 and stored there so that Archibald can read them. Archibald's fellow users on server01 benefit from this as well, because having Lucinda's notices stored in server01's database means that they will come-up in searches; if they include tags that users on server01 are following, then those users will see them in their Home Timelines; and all of Lucinda's notices can be repeated, favored, and replied-to by the users of server01.

If Archibald replies to one of Lucinda's notices, his reply will be sent to server02 so that Lucinda can read and interact with it (as well as everyone else at server02), but, if no one on server02 is following Archibald, none of his other notices will be sent to server02, because there's no relationship that requires them. Remember, just because Archibald is following Lucy, that doesn't mean she's following him back!

### The "Federation Problem"

The consequence of this only-as-needed activity sharing between nodes is that sometimes you will see notices in conversations that are obviously replies, but you won't see the notice being replied-to, because that notice was never delivered to your node. You might click on a notice's permalink, which will take you to the server on which it was posted, and from there you should be able to read more of the conversation — but the conversation may still be incomplete, because the node you're now reading from may not have received all of the notices from all of the conversation's participants either!

Furthermore, because all of your activity in the Fediverse is mediated through your home node, you cannot reply-to, favour, or repeat notices that you read while visiting other nodes. They have to have been delivered to your node in order for you to be able to interact with them.

This frustrating set of limitations is increasingly referred to as "The Federation Problem". The good news is, the GNU social developers are trying to come-up with solutions to the federation problem. The bad news is, they're not quite there yet.

### The Best Course

The best things you can do as a user to improve the Fediverse are:

- Follow remote users that you think are interesting,
- Repeat notices that you think more people should see,
- And join federated groups.

All of these actions improve the quality and quantity of content on each federated node by making sure that the notices you care about are distributed to more nodes, where more people can read and interact with them.

## Notes

1. ↑ GNU social might look like a simple microblogging platform, but it really is a general-purpose social networking platform for any kind of media you can imagine. Some nodes are very limited in the kinds of media they support, while others support the publication and subscription various structured data items such as bookmarks, event notifications, polls, and questions, in addition to microblogs with media attachments.
2. ↑ "Node" is in vogue at the time of this writing; in the past, "instance" was the preferred term, and you'll still see this used by folks who've been around for a while.
3. ↑How would you notice this? If you look at the destnation of the hyperlink on a user's name, it'll point to their home server. Anything other than `https://gs.sdf.org/...` is a user from another site.

$Id: gnu_social.html,v 1.12 2016/01/27 10:16:31 laemeur Exp $